From 6132354fbdd3950453ffee2e952948b0a60657a8 Mon Sep 17 00:00:00 2001 From: Jason Sherman Date: Mon, 2 Sep 2024 16:02:31 -0700 Subject: [PATCH] helm charts for event stream service updates to connect via websockets Signed-off-by: Jason Sherman --- .devcontainer/chefs_local/local.json.sample | 1 + app/package-lock.json | 308 ++++++++++++++++++ app/package.json | 2 + app/src/components/eventStreamService.js | 11 +- .../charts/event-stream-service/.helmignore | 23 ++ .../charts/event-stream-service/Chart.lock | 12 + .../charts/event-stream-service/Chart.yaml | 38 +++ .../charts/event-stream-service/README | 3 + .../charts/common-2.22.0.tgz | Bin 0 -> 16228 bytes .../charts/nats-1.2.3.tgz | Bin 0 -> 19639 bytes .../charts/nginx-18.1.11.tgz | Bin 0 -> 48038 bytes .../event-stream-service/templates/NOTES.txt | 5 + .../templates/_helpers.tpl | 7 + .../templates/nats-secrets.yaml | 18 + .../templates/nginx-route.yaml | 22 ++ .../charts/event-stream-service/values.yaml | 204 ++++++++++++ event-stream-service/package-lock.json | 192 ++++++++++- event-stream-service/package.json | 4 +- event-stream-service/pullConsumer.js | 26 +- 19 files changed, 860 insertions(+), 16 deletions(-) create mode 100644 event-stream-service/charts/event-stream-service/.helmignore create mode 100644 event-stream-service/charts/event-stream-service/Chart.lock create mode 100644 event-stream-service/charts/event-stream-service/Chart.yaml create mode 100644 event-stream-service/charts/event-stream-service/README create mode 100644 event-stream-service/charts/event-stream-service/charts/common-2.22.0.tgz create mode 100644 event-stream-service/charts/event-stream-service/charts/nats-1.2.3.tgz create mode 100644 event-stream-service/charts/event-stream-service/charts/nginx-18.1.11.tgz create mode 100644 event-stream-service/charts/event-stream-service/templates/NOTES.txt create mode 100644 event-stream-service/charts/event-stream-service/templates/_helpers.tpl create mode 100644 event-stream-service/charts/event-stream-service/templates/nats-secrets.yaml create mode 100644 event-stream-service/charts/event-stream-service/templates/nginx-route.yaml create mode 100644 event-stream-service/charts/event-stream-service/values.yaml diff --git a/.devcontainer/chefs_local/local.json.sample b/.devcontainer/chefs_local/local.json.sample index bc6cd6da0..9e9365c47 100644 --- a/.devcontainer/chefs_local/local.json.sample +++ b/.devcontainer/chefs_local/local.json.sample @@ -67,6 +67,7 @@ "eventStreamService": { "servers": "localhost:4222,localhost:4223,localhost:4224", "streamName": "CHEFS", + "source": "chefs", "domain": "forms", "username": "chefs", "password": "password" diff --git a/app/package-lock.json b/app/package-lock.json index d0c1738b1..ea26e8053 100644 --- a/app/package-lock.json +++ b/app/package-lock.json @@ -37,10 +37,12 @@ "moment": "^2.29.4", "multer": "^1.4.5-lts.1", "nats": "^2.28.0", + "nats.ws": "^1.29.2", "nested-objects-util": "^1.1.2", "objection": "^3.0.1", "pg": "^8.10.0", "uuid": "^8.3.2", + "websocket": "^1.0.35", "winston": "^3.8.2" }, "devDependencies": { @@ -2516,6 +2518,18 @@ "node": ">=4" } }, + "node_modules/bufferutil": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.8.tgz", + "integrity": "sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==", + "hasInstallScript": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, "node_modules/busboy": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", @@ -3024,6 +3038,18 @@ "resolved": "https://registry.npmjs.org/cryptr/-/cryptr-6.3.0.tgz", "integrity": "sha512-TA4byAuorT8qooU9H8YJhBwnqD151i1rcauHfJ3Divg6HmukHB2AYMp0hmjv2873J2alr4t15QqC7zAnWFrtfQ==" }, + "node_modules/d": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz", + "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", + "dependencies": { + "es5-ext": "^0.10.64", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.12" + } + }, "node_modules/db-errors": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/db-errors/-/db-errors-0.2.3.tgz", @@ -3312,6 +3338,43 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es5-ext": { + "version": "0.10.64", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", + "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", + "hasInstallScript": true, + "dependencies": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "esniff": "^2.0.1", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-symbol": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz", + "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", + "dependencies": { + "d": "^1.0.2", + "ext": "^1.7.0" + }, + "engines": { + "node": ">=0.12" + } + }, "node_modules/escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -5600,6 +5663,20 @@ "node": ">=6" } }, + "node_modules/esniff": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", + "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/espree": { "version": "9.5.2", "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz", @@ -5680,6 +5757,15 @@ "node": ">= 0.6" } }, + "node_modules/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, "node_modules/events": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", @@ -5911,6 +5997,14 @@ } ] }, + "node_modules/ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "dependencies": { + "type": "^2.7.2" + } + }, "node_modules/external-editor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", @@ -7067,6 +7161,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + }, "node_modules/is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", @@ -8491,6 +8590,14 @@ "node": ">= 14.0.0" } }, + "node_modules/nats.ws": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/nats.ws/-/nats.ws-1.29.2.tgz", + "integrity": "sha512-dJf7aWp+5+8LwWEhgoTMc3pvfz5JlhA0yWtXKcTMDxUe43mHvgpvDaPnLyHQNL2LoDpdkjgOG176i5IeHBDlqg==", + "optionalDependencies": { + "nkeys.js": "1.1.0" + } + }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -8515,6 +8622,11 @@ "resolved": "https://registry.npmjs.org/nested-objects-util/-/nested-objects-util-1.1.2.tgz", "integrity": "sha512-jNUcnODTq1HpGGFFo9aDXP7JxrJ1ilLHSaUElSyW5Zw8EJHyYyujdBIdTwa0K4lBC/9M23dJyhExo9XyhO39LQ==" }, + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" + }, "node_modules/nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", @@ -8532,6 +8644,16 @@ "node": ">=10.0.0" } }, + "node_modules/node-gyp-build": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.1.tgz", + "integrity": "sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -10518,6 +10640,11 @@ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" }, + "node_modules/type": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz", + "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==" + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -10582,6 +10709,14 @@ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, "node_modules/typescript": { "version": "4.9.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", @@ -10702,6 +10837,18 @@ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==" }, + "node_modules/utf-8-validate": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", + "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", + "hasInstallScript": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, "node_modules/util": { "version": "0.12.5", "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", @@ -10852,6 +10999,22 @@ "makeerror": "1.0.12" } }, + "node_modules/websocket": { + "version": "1.0.35", + "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.35.tgz", + "integrity": "sha512-/REy6amwPZl44DDzvRCkaI1q1bIiQB0mEFQLUrhz3z2EK91cp3n72rAjUlrTP0zV22HJIUOVHQGPxhFRjxjt+Q==", + "dependencies": { + "bufferutil": "^4.0.1", + "debug": "^2.2.0", + "es5-ext": "^0.10.63", + "typedarray-to-buffer": "^3.1.5", + "utf-8-validate": "^5.0.2", + "yaeti": "^0.0.6" + }, + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -11115,6 +11278,14 @@ "node": ">=10" } }, + "node_modules/yaeti": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", + "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==", + "engines": { + "node": ">=0.10.32" + } + }, "node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", @@ -13063,6 +13234,14 @@ "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz", "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==" }, + "bufferutil": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.8.tgz", + "integrity": "sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==", + "requires": { + "node-gyp-build": "^4.3.0" + } + }, "busboy": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", @@ -13448,6 +13627,15 @@ "resolved": "https://registry.npmjs.org/cryptr/-/cryptr-6.3.0.tgz", "integrity": "sha512-TA4byAuorT8qooU9H8YJhBwnqD151i1rcauHfJ3Divg6HmukHB2AYMp0hmjv2873J2alr4t15QqC7zAnWFrtfQ==" }, + "d": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz", + "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", + "requires": { + "es5-ext": "^0.10.64", + "type": "^2.7.2" + } + }, "db-errors": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/db-errors/-/db-errors-0.2.3.tgz", @@ -13674,6 +13862,36 @@ "is-symbol": "^1.0.2" } }, + "es5-ext": { + "version": "0.10.64", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", + "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", + "requires": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "esniff": "^2.0.1", + "next-tick": "^1.1.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-symbol": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz", + "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", + "requires": { + "d": "^1.0.2", + "ext": "^1.7.0" + } + }, "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", @@ -15418,6 +15636,17 @@ "resolved": "https://registry.npmjs.org/esm/-/esm-3.2.25.tgz", "integrity": "sha512-U1suiZ2oDVWv4zPO56S0NcR5QriEahGtdN2OR6FiOG4WJvcjBVFB0qI4+eKoWFH483PKGuLuu6V8Z4T5g63UVA==" }, + "esniff": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", + "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", + "requires": { + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + } + }, "espree": { "version": "9.5.2", "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz", @@ -15470,6 +15699,15 @@ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" }, + "event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, "events": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", @@ -15638,6 +15876,14 @@ } } }, + "ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "requires": { + "type": "^2.7.2" + } + }, "external-editor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", @@ -16448,6 +16694,11 @@ "has-tostringtag": "^1.0.0" } }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + }, "is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", @@ -17526,6 +17777,14 @@ "nkeys.js": "1.1.0" } }, + "nats.ws": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/nats.ws/-/nats.ws-1.29.2.tgz", + "integrity": "sha512-dJf7aWp+5+8LwWEhgoTMc3pvfz5JlhA0yWtXKcTMDxUe43mHvgpvDaPnLyHQNL2LoDpdkjgOG176i5IeHBDlqg==", + "requires": { + "nkeys.js": "1.1.0" + } + }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -17547,6 +17806,11 @@ "resolved": "https://registry.npmjs.org/nested-objects-util/-/nested-objects-util-1.1.2.tgz", "integrity": "sha512-jNUcnODTq1HpGGFFo9aDXP7JxrJ1ilLHSaUElSyW5Zw8EJHyYyujdBIdTwa0K4lBC/9M23dJyhExo9XyhO39LQ==" }, + "next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" + }, "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", @@ -17561,6 +17825,11 @@ "tweetnacl": "1.0.3" } }, + "node-gyp-build": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.1.tgz", + "integrity": "sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==" + }, "node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -19029,6 +19298,11 @@ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" }, + "type": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz", + "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==" + }, "type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -19075,6 +19349,14 @@ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "requires": { + "is-typedarray": "^1.0.0" + } + }, "typescript": { "version": "4.9.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", @@ -19155,6 +19437,14 @@ } } }, + "utf-8-validate": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", + "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", + "requires": { + "node-gyp-build": "^4.3.0" + } + }, "util": { "version": "0.12.5", "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", @@ -19269,6 +19559,19 @@ "makeerror": "1.0.12" } }, + "websocket": { + "version": "1.0.35", + "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.35.tgz", + "integrity": "sha512-/REy6amwPZl44DDzvRCkaI1q1bIiQB0mEFQLUrhz3z2EK91cp3n72rAjUlrTP0zV22HJIUOVHQGPxhFRjxjt+Q==", + "requires": { + "bufferutil": "^4.0.1", + "debug": "^2.2.0", + "es5-ext": "^0.10.63", + "typedarray-to-buffer": "^3.1.5", + "utf-8-validate": "^5.0.2", + "yaeti": "^0.0.6" + } + }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -19454,6 +19757,11 @@ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true }, + "yaeti": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", + "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==" + }, "yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", diff --git a/app/package.json b/app/package.json index 25d34d8e7..5723af61a 100644 --- a/app/package.json +++ b/app/package.json @@ -75,10 +75,12 @@ "moment": "^2.29.4", "multer": "^1.4.5-lts.1", "nats": "^2.28.0", + "nats.ws": "^1.29.2", "nested-objects-util": "^1.1.2", "objection": "^3.0.1", "pg": "^8.10.0", "uuid": "^8.3.2", + "websocket": "^1.0.35", "winston": "^3.8.2" }, "devDependencies": { diff --git a/app/src/components/eventStreamService.js b/app/src/components/eventStreamService.js index 77fe9f1f3..22b68b0ae 100644 --- a/app/src/components/eventStreamService.js +++ b/app/src/components/eventStreamService.js @@ -1,5 +1,8 @@ const config = require('config'); -const nats = require('nats'); + +// shim the websocket library +globalThis.WebSocket = require('websocket').w3cwebsocket; +const { connect } = require('nats.ws'); const log = require('./log')(module.filename); const { FormVersion, Form, FormEventStreamConfig } = require('../forms/common/models'); @@ -95,7 +98,7 @@ class EventStreamService { if (this.connected) return this.nc; const me = this; - const connect = async function () { + const connectToNats = async function () { // nats.connect will throw errors only if the server is running. // nats.connect will NOT timeout if the server isn't reachable/not started. // so, let's wait twice the reconnect time and create our own timeout. @@ -108,7 +111,7 @@ class EventStreamService { }); // we either timeout or connect... - const result = await Promise.race([nats.connect(me.natsOptions), timeoutPromise]); + const result = await Promise.race([connect(me.natsOptions), timeoutPromise]); if (timeout) { clearTimeout(timeout); @@ -116,7 +119,7 @@ class EventStreamService { return result; }; - this.nc = await connect(); + this.nc = await connectToNats(); if (this.connected) { log.info('Connected', { function: 'openConnection' }); this.js = this.nc.jetstream(); diff --git a/event-stream-service/charts/event-stream-service/.helmignore b/event-stream-service/charts/event-stream-service/.helmignore new file mode 100644 index 000000000..0e8a0eb36 --- /dev/null +++ b/event-stream-service/charts/event-stream-service/.helmignore @@ -0,0 +1,23 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*.orig +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ diff --git a/event-stream-service/charts/event-stream-service/Chart.lock b/event-stream-service/charts/event-stream-service/Chart.lock new file mode 100644 index 000000000..14b51eee4 --- /dev/null +++ b/event-stream-service/charts/event-stream-service/Chart.lock @@ -0,0 +1,12 @@ +dependencies: +- name: common + repository: oci://registry-1.docker.io/bitnamicharts + version: 2.22.0 +- name: nats + repository: https://nats-io.github.io/k8s/helm/charts/ + version: 1.2.3 +- name: nginx + repository: oci://registry-1.docker.io/bitnamicharts + version: 18.1.11 +digest: sha256:479bc3fa8ee522090462f19f6e9fb7daa0736b1e0d0f57d268774e39bf498ae8 +generated: "2024-08-30T13:26:19.066946-07:00" diff --git a/event-stream-service/charts/event-stream-service/Chart.yaml b/event-stream-service/charts/event-stream-service/Chart.yaml new file mode 100644 index 000000000..ea9e2830d --- /dev/null +++ b/event-stream-service/charts/event-stream-service/Chart.yaml @@ -0,0 +1,38 @@ +apiVersion: v2 +name: event-stream-service +description: A Helm chart for Kubernetes + +# A chart can be either an 'application' or a 'library' chart. +# +# Application charts are a collection of templates that can be packaged into versioned archives +# to be deployed. +# +# Library charts provide useful utilities or functions for the chart developer. They're included as +# a dependency of application charts to inject those utilities and functions into the rendering +# pipeline. Library charts do not define any templates and therefore cannot be deployed. +type: application + +# This is the chart version. This version number should be incremented each time you make changes +# to the chart and its templates, including the app version. +# Versions are expected to follow Semantic Versioning (https://semver.org/) +version: 0.1.0 + +# This is the version number of the application being deployed. This version number should be +# incremented each time you make changes to the application. Versions are not expected to +# follow Semantic Versioning. They should reflect the version the application is using. +# It is recommended to use it with quotes. +appVersion: "1.16.0" + +dependencies: + - name: common + version: 2.22.0 + repository: oci://registry-1.docker.io/bitnamicharts + alias: common + - name: nats + repository: https://nats-io.github.io/k8s/helm/charts/ + version: 1.2.3 + alias: nats + - name: nginx + version: 18.1.11 + repository: oci://registry-1.docker.io/bitnamicharts + alias: nginx diff --git a/event-stream-service/charts/event-stream-service/README b/event-stream-service/charts/event-stream-service/README new file mode 100644 index 000000000..ddfc1582a --- /dev/null +++ b/event-stream-service/charts/event-stream-service/README @@ -0,0 +1,3 @@ +helm upgrade --install event-stream-service ./charts/event-stream-service -f ./charts/event-stream-service/values.yaml +helm uninstall event-stream-service +oc delete pvc -l 'app.kubernetes.io/instance=event-stream-service' diff --git a/event-stream-service/charts/event-stream-service/charts/common-2.22.0.tgz b/event-stream-service/charts/event-stream-service/charts/common-2.22.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..17f5674c04b9dbef078ea4223b663f88ba8e08f3 GIT binary patch literal 16228 zcmV-qKbycGiwFP!00000|LuM2dfP^l=>FzY^nsnV=!l@GYgRL!T}5^hojA5ua_loZ zo=rfaNg^Tv1^^{9iO++aU+3A*lbovR3%YS3K#7v&8S(RHkw9OntE%hP)!l<=I*r2a zzue|$YioDwU~i9YZEf`q_ImgiKk6@i@9pmI?d|Mt@9iA0t==|#`xmx%t5C_$JW0J6 zKy(Erk#1iqIB zQMfiPeeKz&d!5B(!vY3M)2`)L*OUK4@FZ7{-kdH{Xu#H*FhrtK#v#S8g{g1ZG zUWbzfi$bc2Ah8*b*(3Ee2})>z~^39l!Het_c9qoKF79$>4*)ZiO=H}e5KyTUO3{DXw*9X?&#IGFJ8X> z)}8vTPfUL~|3T`{fx-)KI$3`ob@P9xx0j#)d%eAf`F|H5oCUK5Oq6lTzK$c$2Zq>W zC*iGlNROERIuBx)_x%MsKItAm2f-6f5|j@NX3>Br3CWsA>_3u= zV8-|d4{Q_u7C982w#?s$Otjt^jJ-Jh)N|=`{K)x#_TuRI4=+F--9{hF=YMa%*W1p` z|DFBb&cpn_i_atWwV0<$8@>$su@^5;UBQfM9kIWC2d1I@`0pFzG@T`f-7cDqZZhur z(IDxj(JX*J6H)Xhnv+TQ5teC#GK|?Mj^;BoDFoLsP=>*P^?7>5!QfDUhVOL|rMcMEBSw^*aDZD4OsVj)Lj_7i>NQFNy171fDkw z-m2~|d##Hg^bY~A;V>Be;LTc7o_bKpL&yc(zyHpHa4?zsoH=3)F1|?I;e0Z|Zw_Oh?kYEj-f-KPDW^n92cPMg2?CbEDjRh-el>R6Z&~P2)qg7 zen1UGLwciWD%ul7Jqc3{NUKFAB_SQ*y9AR8bb;a!<(D!*KUjkan5IA=Xb#Laj^p%k zygt7K!)gY`<(1?fc!jti-YsxzTbZM-mt4mtc{J$HNO zOL#;L?6_aKTVIMgUJNXPZP3s287C41;cT9=WH9DakKO>rrvS$pNU)4o)f7OsN*6QW zDfk6AgP%ZwK^)9d;^XHuKbR_xz5#Fy(l)?GQKL^HATRf!rqs=cOwX!T%b0yNU7hKY zggwzd&H}S#WmbfvApFp3rQWEnS^UEL^GQk$)sv&imA6Qquwa1+DyO~AKG6wsk)1i4a!FZ*E|9Ayj= zlzEAsfJqzp6tFcn(A@{SjeB7MHDWAjJm)yreAcViCIC}yHOI=iYZ*F*y1vDHdoG(f21iI*gG zy!q`oN>YY8BLgsHZ==b4%GtSSh*3*m=?@j}IUQ${ncci173DZm=K4W`a3;)OkeU?I z8kHS@U_lHmwOZZ)E%_h79j*iSh)S|46eS^wvZWGktD`gS`R`(w2d{|$N$^{3XXj96 zg&w~8Hh@{^rQ^DGPchg5SnOwn^sSbZ23^X|igg6hA6euOczwhS#O4qH&=(DFS>G8a?C7AglsHz#sJ~LbD9n!UWTxK4K=Yk3g!<0P9y#>|>!*`Tcvo z(5OUQ(tr`LIZCQ`7&yD)L^l-bAxI$%h0$C@-u6rr0mk4-z+vV^Fu*hb;}09S@k1|Q#mAInkold9RY?WBKzRk+m z#Os4{6B-Ke+PtbD;p>_AE6f7bdqxdt#(gUSR_Y=9gZ1}!L3YBIU*{1RjL?iVXn!`z zM(nySK?N)uULMM?nLBZMbbkKs_1Sa%0^ADh@0&Q99vTmsL^LqP86VnjmY_>fM~ryG z4+bf7xHT;uJwp3AwgJ}n2Pp8kEwF5UfPOuja+)P zwFOTSIb`|e716;N1{|EJY^WV5+h!dYZbg5+CjIqR=&vXHYn71DSeJ7p-lt$?1|WW1 zVDdC0tO~Hfg9(tb98+b(X&1PQXagp~6=~)HYR(9(Rnfmxchot_tY9)B+m1w;H{s|; z7hGr(#ZVBfU*H7c_;osHgyabI%yBkzxP(W<@lSF^pRg%7Q!I>94bdh8%y*xLh4e&HaUP-Q`I z7$3iq(WUWTF2)kExoAAtjw28<4Y4`@v&5rG;J%fRzA&S z%J0Trs$svvct9XSI-=_$9{wFe8sJS`(khyKmXMiPk0?R) zw`e#FDCkJVfDPy9*$~Z^PoB%|pDuTPng%05;O-;+wF45MGk~s=wwxyN72uGFr^Wy< zT<%D2f%yVH1SShyQ1tZAs&DMmy_{m0TgI-tBIw+Y5o^ASnrvvU-+R0!StkHp4#y_~@bUOKq2}~12lvd~?SfUK? zAQGte&gFI|jpWxIsEHa;uFSSt*}Cq(4&dvbPy_DjHC~rye9Ge~bJR0O5SMsDJrhg8 zz%E^wwE^aQ%=<7e1K?d;rESUXd^U$6i`dN(=y>=e-)u4|-PpFf#Wt{jBVRe~Kedo? zryvw?4xs2K1|-?SKMeScWDkG=L=yhH(p$0#xAj-qK-5n?5;r(lrD$a-=7Ik}NCli; zU0t~zf#^o@s5=owlJ3is;}@^aY5f{7`C~Z2pp>~-Emu=eT}-?yhEi-4bD>?J=c_nK zDbXc~hADDb%g4}U(4VIkdK64BPO|_ig^)Q%=j`O%VP7AepPX;D-krSp?)8sv*t?^% zv!hpUPF|d|*Jteb^{eM6Z%$snf?waTqgQ`r-=DmCzR7qX;)x$nZYKy}FeSUfZJl#& zb*|!UA|f0NU_{|)j&Z>e7)^0Vc|X7$z|SOpF?nYaOoLR4ly@&PxJNbAaNM13iF-U_8c_UgkISGfc2jXcyK)(W`c~VdwN&!!a zKDJQ}KWA^V_4jQoVTby49)V$~*JlRwbD05*8H>i!fD&<4Wy}jt#%+P^2_|&OB6cen zAV6iy+kSKvPC)x5U4SA=)Vt2qi!a<6xSAJyfo>@vtfMjyI&y&;zNnBRd>zh1vB=#~ zLugGwNui8`|#n?QaWB?nUsZO*K=ChR%kwo)&z^SX+n%xw%Sr-B9=5n_z zN2GO`qwuF@;fK!+K85`MpG4H&O=oLU1vT=2w|9`w|JvW(J9v=)ck%iC_wLiyYAK*i z5y7NpSV&OO z&%pjwvjF zKvU}`JRW5WZ{nd^EOAXz>h8^zkqm*VQ%vB&Ud!pYWZBbL^0a8Uq>7>8^-O^m8F0%aEYRnnyOjx#^PfSn2pPNHbW(5q&m zF)7wCo&e*PVfLvCscATq00SOD`h)^<3(B6FETD{sfqJpp){nV&VWbo!n@k0-HW^O` zZtJ_~ibM5H(NHkO5Tb+&LBgPghz#U}E($q(jEM&=Q8E%Gr$`f(79de4DdX13QVYZD z5T}ghGTWF1gNvfz%cgvcX}hsK=bhYSFPq|jP{{GG;1`$5OEH0$3DUOe@}@$5bzzOr zrxC)wR!Oz0)Tx^5pW5yGId*T#_(7E0^J&m7&jCT29#@pdKT3T z#)_s~sz8S?*30n-CHaP=re{G)e)uN)Z64ai_o_ z<}~R3g6(a6!8YW=2%mv2=CL>F$ShGB-iL_?3bDH_{!&6{($*k7R`^lAM~g|=<#=RT zhoidB?4a2kh6$5o3V)`28pW9E)Z6~*hXDQ-V1Z|QTkxu_8Wh9JH@BB-?%%d6o7?_Y zwub*X(_j!c1$sNz%l6*>O@Q7x*t443`D(Wz&fY9NHFB;2c5iQ|nszqa#Q#m%+TF4kWNY_kZ0+t@46=35l&wG90P3aP zG~sKzx&7X5Q@-B*lwj}M&GojoziP(XnfD>x3oRU76zZ9Kf@}Htm)f%Kn(cWJbvN==4Nq6}qj~j|t58!!kooakuP63lkYOk*V48t^6h5 zokkdWQ}5)jT*7pV_GHSv$wr&->zsDfxOxwb7n=JuM7&M5ZPvzqbnWg*n7WJ}(T11} zFmb~<=D4<1%8RV#;%N&aMg#_B?1jlhWkP0Yez@K*_cS9ExJQwY?aA#wl;eWCXHrhP zWDzVmVEFbN5!V665GgVuqe#702_`xWD|Z!Ax?z=xTp*4P2xsfelyje_>cE?Mv?m6W zl2j{M9W#((M4bS{4gRauxC3Qy*AAY3b=m9l)We+oLMdRnt0>0p*6zhuBJ8OPV+RK1 zMNq_Kh3q{N(t1yn&1)3-&f0;KZ;&wz?1>#Ha&$P=P7>f=BBfL4!`h-!_EG~OQKcFL zcCcG(XYYoS$V>Nk^Y2x6#Hz&(|3DVAx`p{)8zw$QEejr4jG;Uku0%P2Ipl9pgHlkE zWd{~<>}uo= zc${|R(F0kAp^=G0((}#Bb8z2BAz&FRV3r;lXk;a#I+aP;5;11=7H&q<`5tC(D5)s< zbdGfEN+fq5X@YjlX6lKHZT}#eJ`>hHAYH9$W-S>DCvy7<; zN-Y?eO*?r+$O9Ne&Tee3Gc2uEQ``=Xr<0`P4W`^_o8pZaVI9`{%|Au^UwTV-XaD!M zcZ&A^L;lCzeD00?FJ+|MyAa{gf7Ve2WnxIN>HrI5lE*knp)`)y^US7_zw4e=3hvbbiK)`@?I*whWEz2mW zq@otZGa%kO?`2npRoJvLMl`BGtIG%Y)U)Fs|5KFzJdUIIF7y9(whs#Oe{bjE{Kq@_ z+ynVfAiNpJ(R?&!#C`eQeqsZi*l4ac1t)qJI!1^Jd!Nl9P_}s=Otcr+fjBCl!4`Y$ zxUj*#WUs%1>c+toLBq-6nQcTFbgSz>o2#Gl?oo81@+KuoY6W?fNcR|?E}C0I2d6g$@6vi?pz zinggFok|;{4yBpi%%h4-53ybV7EciirY(T0#KroB6rz*lN4YJuV|Xr)2}X%i=+k*0 zs-6GmOfGlOjy#-?@;E=-oEq!%1G4#>-_lE~-lB7-y3=RU`L-Sc7%cyJCGyokIB?7p z@P;XQ+iKT0j(w9w6Q98hARz|+KJ6p~1_(L#)mB{a@Z{4AxgSwma4EYKM@NBG7)+D3 zfc?!prd@pIZgF`Uq1fVxaHY)J-)in&8BrX4(j7-vofI5U5UY4<*BI27*eNP@hKr4= z-ACErJA(Z>S7VUV9ZeTmUQ#Bx#t^^ARg$KnRjkO6#u`_(t@x?6=jZ<^+J9FbZU0=O z1z2QCos6PMD*%%0ZXev6F4KfyU^Di>G~Ju7DJCf8g0F{KGeR3Ww8) z-@o_2eEdf;_O|!-51lqyIPZ?mUY)%9_K=-rqX!sMaW38lE}dlkK!rnmf@MB_Z0kcB zLaqCR{Q~Aq1ZLs_x~H>xLtiWfdY4h)7qOj)gFCX6I6NjTfF>}<+--e{x{2M!2@ABX zoHEfn5}Xc#(~;~l5U3JG1=cyFo-g0L@b~TmTU|<#isDE0Aucb_N(56$S`Kc zdFDBBD-=dE!JTpDxkP?J@Jr#Wh+_*={wr>yG95B7(T>q($PRYbU^CeU%=J0lx~gt$zllqhgA^yFk}VTeV^tzS7gBsUPuwrDO{(kMd; zF1u?%S-=qJ5IR*2I5T7`V&^fXcjAUukfbn)T(zTBgYpjd0djfjpNNy%r~ggx0t7sj zCk2<;i{s!@AChKB840Vajx9c9p4)c^8Jp(dQq%{~6wOQoN=Zr3+lxWE<};N&s~)%& zBq-$*RjHIwBx+7n)|)7b2hzzyw4aG-6UAiwfr>hg06)*RHklt$H%ia}&h@yhD4AN| z&j684TVUuad8k!ktE>cD!AM+b^nR@=V3;qa$Z^|+o@=H>8C~o=uyVAR2nO8b+7k?n zAvHXm%M%%obY>QY>xI%6nPF^8o#v9pT-`t*5)g6si(2-y@TFEbN2PpYz$LQG+H9+c z7J$$!%Kid?d@e*O;96ckftUtU36FjaQY8u$l$qEn;PMs**~`C{a2XSR%NmjJ^zm(OjNID6*b98WDyc-hEiJ z|A+XLg^x$xNywzUAmEDrArjdSX};o z18G%YH0gXk90nh7JJ~{iUADm^*HkBWw@O#9J*zvI#2$&6yep>U0u!y0jH?yoM(6$_ zJCFlaq_urHNjWG9xdlYoN#KXbJ!T@KI8b|@Be6R`t&MN|f~&RCj8@2R%l*@X3vg%s zYy%G6JR)w-AhpuqNV>{{U83@c7(8j3E-9e6Sb_(hc#}Lv z6ATw-9@*{hX0bU`d-tJ?j8+`{VO)h`?O9RAj$48tt7#o`1*5D($#?X)q~0HBg@psQ zze8VxseF!^f+gWBbq-LT>oY@)oVUWhlPt+a)F*KAFqfU-luNp=DQW_mVL%PPJUo|| zI^fGT5;{%pQCTK)#GNYeKV{xL2$s7LEV%u)G#$vi)XKP8O5G?`H@%6Lnn$q#jO|fx z=Cm!DHFnUWFmLP{c8ILlqMO~elaIzAEGiPSq}F2%bhQUoJK0nd^>a-pa8ZN?1`T3c zoW?(7-UR%Ae}Snv9$lo?U`}S~Qo?O9qts@yTSp$+WY0n7$QZHz);bTakU!Te$*IGL zx-;S7C>=Yjw?#CJkcJ`zAxU*K5yYO?GTLCGgsoG%MnY8=xVa1@J! zWGm-FuH}-+fR$}T!2`^v`?F~5FLrBrp`@~Wl*?Nplr|Z6M~7&FCBIHIh8>r^!_BO8 z&et%AF}qCNekwNv%lRpH(+f}qO<0E_NSU-mn8h18(vjp%ADwGInrg&}W&}Cm%h%#2 zN4qI?k0Y+9`#wt+(>~s3E{9yxv}T7gGbcxnfw~~Y7rAqZ7x>vB$ilRdF*95jq&M~X ziSRX_pomp4`|5T0ieFU?Tg92=RiCbLl_atKCKK1Ui*zo)42}(N=%s)$lq%jN}>6%$^aFO^~Oi(xF|@GB;RWAq1_*i&?6s1NQl!bWY(-x}=j16TRtLT*TwW z(Oh0(sOHccN;~i=$4}m^DQ-QGr$x*3(?nkmm|dL)(DqRC3hAg3SP%h1`fmV`UWt6b zz6h%96o0aj)WlY-`y`Pyv#F-82+^>L`x(8oq#M0t?~x?YS2u{hU`RT{l0AU}OS?(O z+>jLd-k=-{W%5oDL7Bkl&_{$hA16-vI6o}Zrof7K#f#cuyoKnE;}Q+13pqFigM_ZBR-<(DaBL~qmq15 zrpn9!b>S1BL%eum31$IM)-jGP1FzP$D(ZA?bv)LPVH&cdER)Ad@Z}z7au$!i%JxsW z*$ch=DjSw6!YB`_-Ic@7)@lV07&jW0CGOADV3N2ax+)THkwlfL4HV=pfF!3^4eOwA zD{Jl-;9HK%#KWZ*;s&5ugP|`mVXs{m}`($X}U7h=Yy}w;_1<3@{&?GCLl20zcWz8od3Y3Y0Be^*CqhOdfMmI&a<5eJ5d=t7oP1GRkPZ<@`U2PEI5PEjixQ6WKtvvEt zis$J`5%Tcif6(5!Ob&4YR-Sy-`&}>^FOw+ z_(T53U3_je|6`Q|5a}v#=m>c3U%`0(Q+765wrLzw`Ouau9P-e_s}k(28>ex^1 z_NiqYTi7;}wf6d=3Q3cEC2-8ce}#ZmRtUZBXlOeUO3|P4L(2lzu3nN5J*Y$pFUjiR z!J$#=s>t@C7-OZJZh}lhKP%_I#Mu?qF0CLzmhhfwcd#W+V~*(vb&X*74A0c3d>yMH zd8bYA8~2UVLzgyYRB??9ri4o>#%3?%LW5ujhIpstM$RS6jl=Qg={UFkipR*+)GAiM z(@0B(CXOR)GlL9P)f>eK^BD}~*J0%;NORc?$E<`ZZGhJ!$t>C!Jro9c*>Q%sELXnxt^&@ogo|wa^-4`` zO3Fp$RA(j8!}6=HmZ#baC4Dsi5KID`8`;WS1m2F^8%8FC42l4^Dy|a(cA2g&R|@K! z|7IJe%iFN>Y}`z3mIU&@xO56pY|*G1Nac1hyAhhD74h)(;aO-r5#mt!iDLAPF^%bN zN^vSvNEcR{Pat7IjRTEl2(Fm=7*8r(SHJ^VMzBPZEXE#Jn{x_)Q-F zx*=@__Lpbi(zF{>qSWlT0soh_*D*A-Q9ucGTYVKA>?Jl=Tj)Zk!uG-r-s)|y*U=q$ zXqTHG;w;Rv?#&t7V5k14cFykLv)uomMM;WhF8?~YNf4m!{GWsT{mx_TE>Q5D^JFucP^Mfy zzrJChp`@kd(FR@KbRp_nB_m2c)mD9NA7@-2oAP3nF<@_TR=2#rPwO!jiva zxpC$jx(`O|{87+~MA0CWP%9Od6XKOhW%&qfFE8g{OEl$o$&{8d`YGf<(Jq@Ma8gMUJ^%2yRJ3H;luX#JZ2cxD59yX{lfmu1JCkv+@?hbnA5w z8jt8!q(@ft#{^e%>|~iL2|~7VacVB%TV~F&S;1tqlP$|C6-!nhOIFZAxmNE-2IHXxO6=0lWr!WSCn+cwTq=qty$igz0IyK@=AT%&zM~*$5g{I6)Z8!O>>hU zmX)gvZZD7j4xkw?^keTvIbb#UUwgg1oqYUv_u>4XyZPL^`0ue|xwVIXGiJUw(cf&a zmBC*P_03|xSx>hU`YlE7N|E2Jg&PKbiw%{=ef>U~hSfP{g=SEci%M0|T_eh79E_Mn z!t6e6+w)$e_%zxTFCL5oyzFNl zmo6~m0Wyl`TLM_CUB_HIsAxrgY^mFb_kvZpj%^Jc@=9#IHR+(58_0}Ai!}+@cWivDTv!rSUeho!UDOpA_^LcF;t|tDo zxZ&0>`qagL_6z&Jwhp!q9^yZD@wtETpT%u#{jyJV`}DCN8sx1;eyE3Aiu>e|xmwg` zVWdahEatN)%QRjs;$s1G?Rd{3m+|!w?Rkjy*p4>M=!aO(t;c#S$@viJ$urZVVr-|hjhjYx7N5Zes>X4hYSZmD{r}sU zUN?^Dh zV5c_3lp9oakm?XbHcIpFkbajh8#eu9p6;!Q0bXTyZ-~2|%WzXRgmyuu=g1)LIh8VAjj}w#xxU+0D}t$+HmMAzmiKGi z#@TJ2W=ABd?_U(NE~sS~A1m*o`rO+FURI`0VlNzV=IY?MsghQ{TfD%-t|oN#wdi8l z2KTIX{;}pVdG68j*O&9AxTDT-%zNitC$n_hDhbbcVg;Bf zt}NiT!mF2_4uj%!kgCio0>e3;$9To>TQzRSE+WH>N^(evk;SvDo~p1$mEJ@z!ppaw zap+bh7+GYWy~(_!fhZza`|y4EK2#yKFOv6R$xTP1a{)P0PGZ2dL*>~)t+qcdnt$>| z@}wx%HW>(X46u5>&z^KJ(8ut)rDu<^xRe421>nxbTbMG|$f$2TQwS_zqOtQ)u>XG& zqrd5%5A#!Z{^J(d{FeRS+uzxLIRE2LKKI4`KgHPtVjxN5`9R#ICIcOwQV~McFR=?M z=I!zu)Rp3wPpM8vpI_H37+BG<;Xc$XER_m6{$UoubcccJ20ng#_ITrB-sgjKLda1n zzoRccXC;WKyc=DIWIukydP-WuuTI2%Num&~lV{HFwC3w#2_eTne*EY_U0f^L-(?-Y zU1H>YJrAHH4=;gmF(dFt!6grYpwvh$A#+F(R4ldAYDtr8%Fx^N2Cawl*(4y%n&6k0 z=twyo$5vcaV?LYl_!vh1O`)o}PMR6&`93U7TGd*%tW#BDgV7scmNKK8ezIR8u(F(= zoa$Ce?elLrOn7CR55Z(%GQuS&SWCI3){gd(#jlm7SfOD(#fWNhJa`@PP_6|tT;{;7NN~@4RWhtA>%%W@ZGRpjQX80F) zZDxr(fCG9au0XH0C@qFTo|TiXj6=i?tMe)Ff-*aqC&}Y51k4LU^zc0PRQOv@0aZyf zk3qX_VCX6s{ou_uRVoawe9RMamS>R{0Kl zorC>$y+tvQ0KbvYYP<@Fo$i2OntC&G(N`5}#pX4`L_#Dfu!N_VEjy?h?$;jPEe_Mm zMUdL2en;{BSAa@|7o#aieQMb8X2Dx^H>`63VgvQ6L=md@G@^=suw?9Q@9iVW?&&JV z!{@r6qW>q1#XI!>b`N&83jW{r)`S0d7oYp$|GoGy!*~%&>ClMfQN*JXtwD$*I0UZw5{tkT&rswk^W`CmDUmmwUjyWnT5r!c!5oUGe zw8Hu3s=Qa1n@SS~8k4#j}Xfr#%?Yy;ewGKOBC^QA+E{fQS0f^s&dm4uvWQjl#c|RhneG-83;l2oT z1qs`bsCxeD9Lu7bPG)=nD*0pxBNO&AH6pEo#Kb-5v8w zX#$c@)Jx4Ps!U~pMtE2G1EkwkM4&Oh8gOcKh*sP)fh$p2!)iTU8NfUjTCItGS7Em0 zD?+tQ=yUXjc{o^nmb_SPVhV1|hG#IQ%1Fa*bQ;KKI4`KSNa$XHjQbyVtT>$BAY<9(%Jy#1fN1G~+1KY1Lo+NMQB> zq+z;D=VmM(Q@1cj%}pGc22~+K=s-L&Rj7!a-Cpw!4GDLqf!tcEuZtZPWl>y<8R=zEf!&!rsmg=4#2ue?cvB8Ix*^Cw3>6_AVj2S> zZk(pG!)|x#!Lt~QRX=e@@O<8PgQ%N;0vdG@Q;9oHr;|s7yADn}`qpS>P{|zU>QH(m z1NW+5ZMTb)r=FoD7@D8`B-LB4?1dSbqGJ~=M#@Vjr#&}I!{mA{DpoTBtA8-To77>^ zE)&mnH1(cEP>cFMm;!UGH2_$5{=?SJUOxV}ySMkC|L@{+fAl{t8(NrG>Ay)}EnUIEL&EwvYN#7e>P$r3RfI*YW(3x8%{UqztpG@@8 zPux6QuDAtYj=F|i6%oIsXRd;H%cY*(y|HRI0+|~xUgbSs4VbHnu#FAbaa+EXFWP2v zvnUDDC~MGaNWCMwfwYQhmCaMm zfYgGk5P~T7Aevvj#mZnqar!=w1{d(>gl30gLne2ElH-qA1!(19V(uZW;M(&*=;u># zlSQqBoOSL|wo%pGon^&yGkB@-LM3{e)$h=HDWBp^rnCi>k&0nF*ZD&qbLm6*DQzIc zPDlmj!bMy(@~7UcBwg0*Ez2)5pHjfV&T^et#{o2Lr;sUIn3wim27xE5mV9G2Ys0Z@ zyw@CY>6ouE>hcU>J7Xt@2t1L%JUP{9xGm_Mr~Y9MRTeCNuz48#D$w2`EqX{9ery?C z);F~|TGPgkf&?St+Q?ioe+!d-?X$RH47?hi`uQv0D(3-Jqv31jX7^(|-R$lrdm-jn z>l)=wHBpea+iMURt3%TOl4TR_Q%j!PK>y9;*SbmYk1Yj--LDq^0e7P)21XK(G0793 zcfr6>%P&DVjM%>}cT1L;HkT?_YcUeD({UwK0r!${_l;yZFT z^!}*xUtZ_8_np6gDc@xe+E3e9vkNA?zM{C5hXc7z-u9?rB?MKMK zE893wjXBqhTG3&YreS7|x{dktsMC(4=?p`%&YyekcCWML*yZd53FZi}yO+H_Prcr< z+!>?n@-&!L@C~eW6~z}4dCf2_>zv+0gdf!68?1AfvvjggBb>{@f@$Yoe3jtJ;yTek zh@^BrqgmDr-KyyNQ0#jg#-B8nBU$--h34Mw+F2WrmaG@mI$5qM zuCodc$X*fIU_PXLIG;4?t6oKHc#u#D*^O89Y=BS8!eo! zM1^J5*Ege&&z?6W!XWnV84c=Z0Kl8gzLn5lQFDEmKRP`*2M;<}mRoM24(h84_lpc$ zO~@cq7gnDKm37xgitliWVK(N3okl)8nx|1R@FqNNNSX1>TQ^D6`rys{k)3MFVBQO2 zf4hKhIeHNP-OFt%QbV9Zg(}k2R$d=T;d>eku1nC%2ZG);K@;4}LZ%QcCyW$L!Oxt>s*?2vUOVyNU z1V%H1p`!Bo)QcgbuEQ;}s_LH`zraB7#8(Q6MW!-$sdiLBy1Xl!E_#$QRC^;h9O0vG!p|>YkRzb8Rz$nOUgKD zKmFT(fBgH?j~^d9Y{Np2nMY%6U#nGkH(mcNS^vk`mj(pbVl4>(HT!>e3j2Szq5Q-7 zuXpmfFYEtID`G=n`W!D)!DG9DH$gs3af-g4LC51@n40%N6m+D;#6hAfDJ5As#j7it zj+Z6bj!sXc001fHC3Kdo&>@kkomU)<4OvXP1bL^xn$Usi%8(!jQykNQawC%Yi4s{Z z`+A}C9)c8cHwB50QeQ}KdgcP9Swz?KsEP@j1Q$F*G`mu=R5yorh;~PDG@n^pT>Xf| zF-DVFG}nhZ_M;C%D~Z!6a0@b$wR72H=f}s*=_s;L&us*l2mI9xG}U+cqVv(p(x>fi84tkMmq9rHAnq_Or-N1CT#lL-Sk z>i+@~aMPH9P=NAkUb7Cf9Z73IJg8IGNOzAfSt^o-yFcMQ8oju>0nJe&nX{! zex&6M>1zS?_V0DuZ#VrE?LTh_@^6jVpSAg)+j|EG`TWnFhy2gG`P>)#PnmxnOQIoO zn&I;!!H5f?k;y@AmF$i%_!Vn`V-^k5+>ztoyngNE&#-X5K00&o|NnB@%T0ia9Uf&R#vsyfL`Q7kcIha3z$)r4t>$FJ7S8zuv~v`{;qg==yz@EHatZZrKsZe^ zob0GRX|~)71#`E2qTPy}sy*W5(JY!oqXk|v z&=~bbrHlaPGs1FX^jcK~yv%$E+@FHtXVdP$sLh z9aPMTee@Ed5LA<9xdAAhX!;V5<28=Rgqq?JWo^YC#q08g@^8uzE9;+T!y%!NYb5`= zxf@zOTJ3l0@tOyOIOI;L7g<>Y6J~Kj9Uh`(zSp%1NGPdUC}Y(hGkBZBrg4^Bks0z3Jr)Y?P~Ki7 z4wNfVM}>}!nRQrpmC-5^&n(d{+Ah`z%lYo($9u{}kN*+as3+`gH20aLRRg%Yvz? zM*C#^P@%X!3x-&#ukJBJG*Cfn(>{0O{EME};QJfC)cRb1Lod~N{+~Mh`|x@AJbeC% OKmQ*kMarxIk^unXfVsB- literal 0 HcmV?d00001 diff --git a/event-stream-service/charts/event-stream-service/charts/nats-1.2.3.tgz b/event-stream-service/charts/event-stream-service/charts/nats-1.2.3.tgz new file mode 100644 index 0000000000000000000000000000000000000000..b83f0d89e70fa03b19ba7bc207a7e0adefa75aa9 GIT binary patch literal 19639 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 literal 0 HcmV?d00001 diff --git a/event-stream-service/charts/event-stream-service/charts/nginx-18.1.11.tgz b/event-stream-service/charts/event-stream-service/charts/nginx-18.1.11.tgz new file mode 100644 index 0000000000000000000000000000000000000000..d73ea7443488a69d818044b077e3b163be10e3b7 GIT binary patch literal 48038 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%0AD4j?gEyz_s;kGq1dfw`Sxohn}@2V2OwS=g} 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", + "$JS.API.CONSUMER.DURABLE.CREATE.*.>", + "$JS.API.CONSUMER.DELETE.*.>", + "$JS.API.CONSUMER.INFO.*.>", + "$JS.API.CONSUMER.LIST.*", + "$JS.API.CONSUMER.NAMES.*", + "$JS.API.CONSUMER.MSG.NEXT.*.>", + "$JS.API.CONSUMER.MSG.NEXT.*.NEW", + "$JS.API.STREAM.MSG.GET.*", + "$JS.API.STREAM.INFO.*", + "$JS.API.STREAM.NAMES", + "$JS.ACK.*", + "$JS.ACK.*.>", + ] + subscribe: ["PUBLIC.>", "PRIVATE.>", "_INBOX.>"] + users: + - user: "anonymous" + password: << $ANONYMOUS_PWD >> + - user: "admin" + password: << $ADMIN_PWD >> + permissions: + publish: [">"] + subscribe: [">"] + - user: "chefs" + password: << $CHEFS_PWD >> + permissions: + publish: + [ + "$JS.API.INFO", + "$JS.API.STREAM.CREATE.CHEFS", + "$JS.API.STREAM.UPDATE.CHEFS", + "$JS.API.STREAM.DELETE.CHEFS", + "$JS.API.STREAM.INFO.CHEFS", + "$JS.API.STREAM.PURGE.CHEFS", + "$JS.API.STREAM.LIST", + "$JS.API.STREAM.NAMES", + "$JS.API.STREAM.MSG.DELETE.CHEFS", + "$JS.API.STREAM.MSG.GET.CHEFS", + "$JS.API.STREAM.SNAPSHOT.CHEFS", + "$JS.API.STREAM.RESTORE.CHEFS", + "$JS.API.CONSUMER.CREATE.CHEFS", + "$JS.API.CONSUMER.CREATE.CHEFS.>", + "$JS.API.CONSUMER.DURABLE.CREATE.CHEFS.>", + "$JS.API.CONSUMER.DELETE.CHEFS.>", + "$JS.API.CONSUMER.INFO.CHEFS.>", + "$JS.API.CONSUMER.LIST.CHEFS", + "$JS.API.CONSUMER.NAMES.CHEFS", + "$JS.API.CONSUMER.MSG.NEXT.CHEFS.>", + "$JS.API.CONSUMER.MSG.NEXT.CHEFS.NEW", + "$JS.API.STREAM.MSG.GET.CHEFS", + "$JS.ACK.CHEFS.>", + "PUBLIC.forms.>", + "PRIVATE.forms.>", + ] + subscribe: ["_INBOX.>"] + no_auth_user: anonymous + 01$include: params.conf + container: + env: + ADMIN_PWD: + valueFrom: + secretKeyRef: + name: ess-nats-auth + key: admin_pwd + CHEFS_PWD: + valueFrom: + secretKeyRef: + name: ess-nats-auth + key: chefs_pwd + ANONYMOUS_PWD: + valueFrom: + secretKeyRef: + name: ess-nats-auth + key: anonymous_pwd + merge: + resources: + limits: + cpu: 250m + memory: 128Mi + requests: + cpu: 50m + memory: 64Mi + service: + ports: + nats: + enabled: true + leafnodes: + enabled: false + websocket: + enabled: true + mqtt: + enabled: false + cluster: + enabled: true + gateway: + enabled: false + monitor: + enabled: false + profiling: + enabled: false + podTemplate: + topologySpreadConstraints: + kubernetes.io/hostname: + maxSkew: 1 + whenUnsatisfiable: DoNotSchedule + configMap: + merge: + data: + params.conf: | + max_payload: 2MB + natsBox: + container: + image: + tag: nonroot + merge: + resources: + limits: + cpu: 250m + memory: 128Mi + requests: + cpu: 50m + memory: 64Mi + +nginx: + fullnameOverride: ess-nginx + readinessProbe: + enabled: true + path: /health + resourcesPreset: "nano" + service: + type: ClusterIP + ports: + http: 8080 + https: 8443 + extraPorts: + tls: + enabled: true + serverBlock: |- + server { + listen 8080; + listen [::]:8080; + server_name localhost; + + location / { + proxy_pass http://ess-nats:8888; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "Upgrade"; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + } + + location /health { + default_type application/json; + return 200 '{"message": "healthy"}'; + } + + } diff --git a/event-stream-service/package-lock.json b/event-stream-service/package-lock.json index db4417a7c..6747ed9c3 100644 --- a/event-stream-service/package-lock.json +++ b/event-stream-service/package-lock.json @@ -10,7 +10,21 @@ "license": "Apache-2.0", "dependencies": { "cryptr": "^6.3.0", - "nats": "^2.28.0" + "nats": "^2.28.0", + "nats.ws": "^1.29.2", + "websocket": "^1.0.35" + } + }, + "node_modules/bufferutil": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.8.tgz", + "integrity": "sha512-4T53u4PdgsXqKaIctwF8ifXlRTTmEPJ8iEPWFdGZvcf7sbwYo6FKFEX9eNNAnzFZ7EzJAQ3CJeOtCRA4rDp7Pw==", + "hasInstallScript": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" } }, "node_modules/cryptr": { @@ -18,10 +32,108 @@ "resolved": "https://registry.npmjs.org/cryptr/-/cryptr-6.3.0.tgz", "integrity": "sha512-TA4byAuorT8qooU9H8YJhBwnqD151i1rcauHfJ3Divg6HmukHB2AYMp0hmjv2873J2alr4t15QqC7zAnWFrtfQ==" }, + "node_modules/d": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz", + "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", + "dependencies": { + "es5-ext": "^0.10.64", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/es5-ext": { + "version": "0.10.64", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", + "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", + "hasInstallScript": true, + "dependencies": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "esniff": "^2.0.1", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-symbol": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz", + "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", + "dependencies": { + "d": "^1.0.2", + "ext": "^1.7.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/esniff": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", + "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "node_modules/ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "dependencies": { + "type": "^2.7.2" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, "node_modules/nats": { - "version": "2.28.0", - "resolved": "https://registry.npmjs.org/nats/-/nats-2.28.0.tgz", - "integrity": "sha512-zXWOTOZEizUQy8UO2lMYFAee0htGrZLmJ2sddfmsDI00nc+dsK5+gS7p7bt26O1omfdCLVU5xymlnAjaqYnOmw==", + "version": "2.28.2", + "resolved": "https://registry.npmjs.org/nats/-/nats-2.28.2.tgz", + "integrity": "sha512-02cvR8EPach+0BfVaQjPgsbPFn6uMjEQAuvXS2ppg8jiWEm2KYdfmeFmtshiU9b2+kFh3LSEKMEaIfRgk3K8tw==", "dependencies": { "nkeys.js": "1.1.0" }, @@ -29,6 +141,19 @@ "node": ">= 14.0.0" } }, + "node_modules/nats.ws": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/nats.ws/-/nats.ws-1.29.2.tgz", + "integrity": "sha512-dJf7aWp+5+8LwWEhgoTMc3pvfz5JlhA0yWtXKcTMDxUe43mHvgpvDaPnLyHQNL2LoDpdkjgOG176i5IeHBDlqg==", + "optionalDependencies": { + "nkeys.js": "1.1.0" + } + }, + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==" + }, "node_modules/nkeys.js": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/nkeys.js/-/nkeys.js-1.1.0.tgz", @@ -40,10 +165,69 @@ "node": ">=10.0.0" } }, + "node_modules/node-gyp-build": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.1.tgz", + "integrity": "sha512-OSs33Z9yWr148JZcbZd5WiAXhh/n9z8TxQcdMhIOlpN9AhWpLfvVFO73+m77bBABQMaY9XSvIa+qk0jlI7Gcaw==", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, "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": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz", + "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==" + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/utf-8-validate": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", + "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", + "hasInstallScript": true, + "dependencies": { + "node-gyp-build": "^4.3.0" + }, + "engines": { + "node": ">=6.14.2" + } + }, + "node_modules/websocket": { + "version": "1.0.35", + "resolved": "https://registry.npmjs.org/websocket/-/websocket-1.0.35.tgz", + "integrity": "sha512-/REy6amwPZl44DDzvRCkaI1q1bIiQB0mEFQLUrhz3z2EK91cp3n72rAjUlrTP0zV22HJIUOVHQGPxhFRjxjt+Q==", + "dependencies": { + "bufferutil": "^4.0.1", + "debug": "^2.2.0", + "es5-ext": "^0.10.63", + "typedarray-to-buffer": "^3.1.5", + "utf-8-validate": "^5.0.2", + "yaeti": "^0.0.6" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/yaeti": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/yaeti/-/yaeti-0.0.6.tgz", + "integrity": "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug==", + "engines": { + "node": ">=0.10.32" + } } } } diff --git a/event-stream-service/package.json b/event-stream-service/package.json index 836c7a8e4..d94fca715 100644 --- a/event-stream-service/package.json +++ b/event-stream-service/package.json @@ -6,6 +6,8 @@ "scripts": {}, "dependencies": { "cryptr": "^6.3.0", - "nats": "^2.28.0" + "nats": "^2.28.0", + "nats.ws": "^1.29.2", + "websocket": "^1.0.35" } } diff --git a/event-stream-service/pullConsumer.js b/event-stream-service/pullConsumer.js index 44cde7146..c23984be4 100644 --- a/event-stream-service/pullConsumer.js +++ b/event-stream-service/pullConsumer.js @@ -1,8 +1,12 @@ -const { AckPolicy, connect } = require("nats"); +const { AckPolicy } = require("nats"); const Cryptr = require("cryptr"); +// shim the websocket library +globalThis.WebSocket = require("websocket").w3cwebsocket; +const { connect } = require("nats.ws"); + // connection info -const servers = ["localhost:4222", "localhost:4223", "localhost:4224"]; +const servers = ["ess-a191b5-dev.apps.silver.devops.gov.bc.ca"]; //["localhost:4222", "localhost:4223", "localhost:4224"]; let nc = undefined; // nats connection let js = undefined; // jet stream @@ -14,7 +18,8 @@ const STREAM_NAME = "CHEFS"; const FILTER_SUBJECTS = ["PUBLIC.forms.>", "PRIVATE.forms.>"]; const MAX_MESSAGES = 2; const DURABLE_NAME = "pullConsumer"; -const ENCRYPTION_KEY = ""; +const ENCRYPTION_KEY = + "ad5520469720325d1694c87511afda28a0432dd974cb77b5b4b9f946a5af6985"; const printMsg = (m) => { // illustrate grabbing the sequence and timestamp from the nats message... @@ -27,13 +32,20 @@ const printMsg = (m) => { const data = m.json(); console.log(JSON.stringify(data, null, 2)); try { - if (data && data["payload"] && data["payload"]["data"]) { + if ( + data && + data["payload"] && + data["payload"]["data"] && + ENCRYPTION_KEY + ) { const cryptr = new Cryptr(ENCRYPTION_KEY); - const d = cryptr.decrypt(data["payload"]["data"]); - console.log(JSON.stringify(d, null, 2)); + const decryptedData = cryptr.decrypt(data["payload"]["data"]); + const jsonData = JSON.parse(decryptedData); + console.log("decrypted payload data:"); + console.log(jsonData); } } catch (err) { - console.error("Error decrypting payload.data"); + console.error("Error decrypting payload.data", err); } } catch (e) { console.error(`Error printing message: ${e.message}`);