diff --git a/package-lock.json b/package-lock.json index 38f48d8..0c1f446 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@samikmalhotra/microservices-helper", - "version": "1.0.0", + "version": "1.0.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@samikmalhotra/microservices-helper", - "version": "1.0.0", + "version": "1.0.1", "license": "ISC", "dependencies": { "@types/cookie-session": "^2.0.43", @@ -15,7 +15,8 @@ "cookie-session": "^1.4.0", "express": "^4.17.1", "express-validator": "^6.12.1", - "jsonwebtoken": "^8.5.1" + "jsonwebtoken": "^8.5.1", + "node-nats-streaming": "^0.3.2" }, "devDependencies": { "del-cli": "^4.0.1", @@ -830,6 +831,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/google-protobuf": { + "version": "3.17.3", + "resolved": "https://registry.npmjs.org/google-protobuf/-/google-protobuf-3.17.3.tgz", + "integrity": "sha512-OVPzcSWIAJ+d5yiHyeaLrdufQtrvaBrF4JQg+z8ynTkbO3uFcujqXszTumqg1cGsAsjkWnI+M5B1xZ19yR4Wyg==" + }, "node_modules/graceful-fs": { "version": "4.2.8", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", @@ -1343,6 +1349,24 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, + "node_modules/nats": { + "version": "1.4.12", + "resolved": "https://registry.npmjs.org/nats/-/nats-1.4.12.tgz", + "integrity": "sha512-Jf4qesEF0Ay0D4AMw3OZnKMRTQm+6oZ5q8/m4gpy5bTmiDiK6wCXbZpzEslmezGpE93LV3RojNEG6dpK/mysLQ==", + "dependencies": { + "nuid": "^1.1.4", + "ts-nkeys": "^1.0.16" + }, + "bin": { + "node-pub": "examples/node-pub", + "node-reply": "examples/node-reply", + "node-req": "examples/node-req", + "node-sub": "examples/node-sub" + }, + "engines": { + "node": ">= 8.0.0" + } + }, "node_modules/negotiator": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", @@ -1351,6 +1375,23 @@ "node": ">= 0.6" } }, + "node_modules/node-nats-streaming": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/node-nats-streaming/-/node-nats-streaming-0.3.2.tgz", + "integrity": "sha512-exeT+FwGYW3UbBSzu8a7ykwWoY6R/vjQLr1RoZ1gnoJ9F66WVvpMZQWCZzLxlf9XRpJTTygcp6P1+WRw9h07Sg==", + "dependencies": { + "google-protobuf": "^3.11.2", + "nats": "^1.4.9", + "nuid": "^1.1.4" + }, + "bin": { + "node-stan-pub": "examples/stan-pub.js", + "node-stan-sub": "examples/stan-sub.js" + }, + "engines": { + "node": ">= 8.0.0" + } + }, "node_modules/normalize-package-data": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", @@ -1366,6 +1407,14 @@ "node": ">=10" } }, + "node_modules/nuid": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/nuid/-/nuid-1.1.6.tgz", + "integrity": "sha512-Eb3CPCupYscP1/S1FQcO5nxtu6l/F3k0MQ69h7f5osnsemVk5pkc8/5AyalVT+NCfra9M71U8POqF6EZa6IHvg==", + "engines": { + "node": ">= 8.16.0" + } + }, "node_modules/on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -1882,6 +1931,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/ts-nkeys": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/ts-nkeys/-/ts-nkeys-1.0.16.tgz", + "integrity": "sha512-1qrhAlavbm36wtW+7NtKOgxpzl+70NTF8xlz9mEhiA5zHMlMxjj3sEVKWm3pGZhHXE0Q3ykjrj+OSRVaYw+Dqg==", + "dependencies": { + "tweetnacl": "^1.0.3" + } + }, "node_modules/tsscmp": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", @@ -1890,6 +1947,11 @@ "node": ">=0.6.x" } }, + "node_modules/tweetnacl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" + }, "node_modules/type-fest": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", @@ -2652,6 +2714,11 @@ "slash": "^3.0.0" } }, + "google-protobuf": { + "version": "3.17.3", + "resolved": "https://registry.npmjs.org/google-protobuf/-/google-protobuf-3.17.3.tgz", + "integrity": "sha512-OVPzcSWIAJ+d5yiHyeaLrdufQtrvaBrF4JQg+z8ynTkbO3uFcujqXszTumqg1cGsAsjkWnI+M5B1xZ19yR4Wyg==" + }, "graceful-fs": { "version": "4.2.8", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", @@ -3051,11 +3118,30 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, + "nats": { + "version": "1.4.12", + "resolved": "https://registry.npmjs.org/nats/-/nats-1.4.12.tgz", + "integrity": "sha512-Jf4qesEF0Ay0D4AMw3OZnKMRTQm+6oZ5q8/m4gpy5bTmiDiK6wCXbZpzEslmezGpE93LV3RojNEG6dpK/mysLQ==", + "requires": { + "nuid": "^1.1.4", + "ts-nkeys": "^1.0.16" + } + }, "negotiator": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" }, + "node-nats-streaming": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/node-nats-streaming/-/node-nats-streaming-0.3.2.tgz", + "integrity": "sha512-exeT+FwGYW3UbBSzu8a7ykwWoY6R/vjQLr1RoZ1gnoJ9F66WVvpMZQWCZzLxlf9XRpJTTygcp6P1+WRw9h07Sg==", + "requires": { + "google-protobuf": "^3.11.2", + "nats": "^1.4.9", + "nuid": "^1.1.4" + } + }, "normalize-package-data": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", @@ -3068,6 +3154,11 @@ "validate-npm-package-license": "^3.0.1" } }, + "nuid": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/nuid/-/nuid-1.1.6.tgz", + "integrity": "sha512-Eb3CPCupYscP1/S1FQcO5nxtu6l/F3k0MQ69h7f5osnsemVk5pkc8/5AyalVT+NCfra9M71U8POqF6EZa6IHvg==" + }, "on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -3418,11 +3509,24 @@ "integrity": "sha512-GJtWyq9InR/2HRiLZgpIKv+ufIKrVrvjQWEj7PxAXNc5dwbNJkqhAUoAGgzRmULAnoOM5EIpveYd3J2VeSAIew==", "dev": true }, + "ts-nkeys": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/ts-nkeys/-/ts-nkeys-1.0.16.tgz", + "integrity": "sha512-1qrhAlavbm36wtW+7NtKOgxpzl+70NTF8xlz9mEhiA5zHMlMxjj3sEVKWm3pGZhHXE0Q3ykjrj+OSRVaYw+Dqg==", + "requires": { + "tweetnacl": "^1.0.3" + } + }, "tsscmp": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/tsscmp/-/tsscmp-1.0.6.tgz", "integrity": "sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==" }, + "tweetnacl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" + }, "type-fest": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", diff --git a/package.json b/package.json index ffe2369..08852ff 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,7 @@ "cookie-session": "^1.4.0", "express": "^4.17.1", "express-validator": "^6.12.1", - "jsonwebtoken": "^8.5.1" + "jsonwebtoken": "^8.5.1", + "node-nats-streaming": "^0.3.2" } } diff --git a/src/events/subjects.ts b/src/events/subjects.ts index d657e54..4931d40 100644 --- a/src/events/subjects.ts +++ b/src/events/subjects.ts @@ -1,4 +1,4 @@ export enum Subjects { TicketCreated = 'ticket:created', - OrderUpdated = 'order:updated' + TicketUpdated = 'ticket:updated', } \ No newline at end of file diff --git a/src/events/ticket-created-event.ts b/src/events/ticket-created-event.ts index eb03801..6bc06df 100644 --- a/src/events/ticket-created-event.ts +++ b/src/events/ticket-created-event.ts @@ -6,5 +6,6 @@ export interface TicketCreatedEvent { id: string; title: string; price: number; + userId: string; }; } \ No newline at end of file diff --git a/src/events/ticket-updated-event.ts b/src/events/ticket-updated-event.ts new file mode 100644 index 0000000..78d7a7a --- /dev/null +++ b/src/events/ticket-updated-event.ts @@ -0,0 +1,11 @@ +import { Subjects } from './subjects'; + +export interface TicketUpdatedEvent { + subject: Subjects.TicketUpdated; + data: { + id: string; + title: string; + price: number; + userId: string; + } +} \ No newline at end of file diff --git a/src/index.ts b/src/index.ts index 5672a8b..7e73b69 100644 --- a/src/index.ts +++ b/src/index.ts @@ -8,4 +8,10 @@ export * from './errors/request-validation-error' export * from './middlewares/current-user' export * from './middlewares/error-handler' export * from './middlewares/require-auth' -export * from './middlewares/validate-request' \ No newline at end of file +export * from './middlewares/validate-request' + +export * from './events/base-listener' +export * from './events/base-publisher' +export * from './events/subjects' +export * from './events/ticket-created-event' +export * from './events/ticket-updated-event' \ No newline at end of file