@mojaloop/sdk-scheme-adapter 24.12.0 → 24.14.0-snapshot.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.grype.yaml +5 -2
- package/.yarn/cache/{@apidevtools-json-schema-ref-parser-npm-11.9.1-affeb92b0d-d8ebea686e.zip → @apidevtools-json-schema-ref-parser-npm-11.9.3-539c6e355d-3d3618dbb6.zip} +0 -0
- package/.yarn/cache/{@babel-compat-data-npm-7.28.0-04d8eecea9-1a56a5e48c.zip → @babel-compat-data-npm-7.28.4-fdb823dde5-95b7864e6b.zip} +0 -0
- package/.yarn/cache/{@babel-helper-wrap-function-npm-7.27.1-7c7bc9ac83-effa5ba173.zip → @babel-helper-wrap-function-npm-7.28.3-abf7c7bf1f-a5ed5fe7b8.zip} +0 -0
- package/.yarn/cache/{@babel-plugin-syntax-jsx-npm-7.25.9-3df022f433-bb609d1ffb.zip → @babel-plugin-syntax-jsx-npm-7.27.1-2f6039b8f0-c6d1324cff.zip} +0 -0
- package/.yarn/cache/{@babel-plugin-syntax-typescript-npm-7.25.9-5201e4ba77-0e9821e8ba.zip → @babel-plugin-syntax-typescript-npm-7.27.1-5d60015570-87836f7e32.zip} +0 -0
- package/.yarn/cache/{@babel-plugin-transform-block-scoping-npm-7.28.0-a08eef2c22-eefa0d0b3c.zip → @babel-plugin-transform-block-scoping-npm-7.28.4-f325d4f6d4-0848c681b0.zip} +0 -0
- package/.yarn/cache/{@babel-plugin-transform-classes-npm-7.28.3-22fe11bcef-0aefcabe68.zip → @babel-plugin-transform-classes-npm-7.28.4-f261201c4b-1f8423d0ba.zip} +0 -0
- package/.yarn/cache/{@babel-plugin-transform-object-rest-spread-npm-7.28.0-7aa5a9958a-55d37dbc0d.zip → @babel-plugin-transform-object-rest-spread-npm-7.28.4-bc45781f0c-aebe464e36.zip} +0 -0
- package/.yarn/cache/@babel-plugin-transform-regenerator-npm-7.28.4-13f2152eb3-24da51a659.zip +0 -0
- package/.yarn/cache/{@dabh-diagnostics-npm-2.0.3-0f2cd64f24-14e449a7f4.zip → @dabh-diagnostics-npm-2.0.8-15e79eab9c-ac2267a4ee.zip} +0 -0
- package/.yarn/cache/@eslint-community-eslint-utils-npm-4.9.0-fe45a08548-89b1eb3137.zip +0 -0
- package/.yarn/cache/@eslint-compat-npm-1.4.0-2352faedcd-204f80bfde.zip +0 -0
- package/.yarn/cache/@eslint-core-npm-0.13.0-53447b33b9-737fd1c237.zip +0 -0
- package/.yarn/cache/@eslint-core-npm-0.16.0-ceefcac859-3cea45971b.zip +0 -0
- package/.yarn/cache/{@eslint-eslintrc-npm-3.3.0-72b2f21ce8-f17d232fc4.zip → @eslint-eslintrc-npm-3.3.1-c3967fc0c3-cc240addba.zip} +0 -0
- package/.yarn/cache/{@eslint-plugin-kit-npm-0.2.7-c313bcf919-e932da4ff9.zip → @eslint-plugin-kit-npm-0.2.8-b9d7e2ad65-2e7fe7a88e.zip} +0 -0
- package/.yarn/cache/@grpc-grpc-js-npm-1.14.0-23f158f5eb-e1f7d15dde.zip +0 -0
- package/.yarn/cache/@hapi-teamwork-npm-6.0.1-fd291504d2-1f83fe93c7.zip +0 -0
- package/.yarn/cache/@hapi-tlds-npm-1.1.3-cc5bc7f0cc-4e1a3fcec7.zip +0 -0
- package/.yarn/cache/{@humanfs-node-npm-0.16.6-6ee2cad587-6d43c67274.zip → @humanfs-node-npm-0.16.7-fa16bdb590-b3633d3dce.zip} +0 -0
- package/.yarn/cache/@humanwhocodes-retry-npm-0.4.3-a8d7ca1663-0b32cfd362.zip +0 -0
- package/.yarn/cache/{@ioredis-commands-npm-1.2.0-47541de88b-a8253c9539.zip → @ioredis-commands-npm-1.4.0-3a627ac2f0-ea299f2205.zip} +0 -0
- package/.yarn/cache/{@jest-diff-sequences-npm-30.0.0-a54cd58e53-aed609b228.zip → @jest-diff-sequences-npm-30.0.1-73f863a027-0ddb7c7ba9.zip} +0 -0
- package/.yarn/cache/{@jest-expect-utils-npm-30.0.0-bddc827ac5-442b926f88.zip → @jest-expect-utils-npm-30.2.0-d624ff36ec-f2442f1bce.zip} +0 -0
- package/.yarn/cache/@jest-get-type-npm-30.1.0-1ad604ab7f-e2a95fbb49.zip +0 -0
- package/.yarn/cache/@jest-transform-npm-30.2.0-e241ad53a4-c75d72d524.zip +0 -0
- package/.yarn/cache/@jest-types-npm-30.2.0-5ae4869189-f50fcaea56.zip +0 -0
- package/.yarn/cache/{@jridgewell-gen-mapping-npm-0.3.12-540cb6029b-1516675315.zip → @jridgewell-gen-mapping-npm-0.3.13-9bd96ac800-902f8261dc.zip} +0 -0
- package/.yarn/cache/{@jridgewell-sourcemap-codec-npm-1.5.4-0708d1c59d-f677787f52.zip → @jridgewell-sourcemap-codec-npm-1.5.5-5189d9fc79-5d9d207b46.zip} +0 -0
- package/.yarn/cache/@jridgewell-trace-mapping-npm-0.3.31-1ae81d75ac-da0283270e.zip +0 -0
- package/.yarn/cache/{@mojaloop-central-services-error-handling-npm-13.1.2-680b8f106e-1357eefd24.zip → @mojaloop-central-services-error-handling-npm-13.1.3-d798c7ad31-4eae5147c7.zip} +0 -0
- package/.yarn/cache/{@mojaloop-central-services-metrics-npm-12.7.1-a82eece473-0aa6374c0e.zip → @mojaloop-central-services-metrics-npm-12.8.0-e245e8b50d-627dc16865.zip} +0 -0
- package/.yarn/cache/{@mojaloop-central-services-shared-npm-18.33.3-676ab2f4ed-bed53621b8.zip → @mojaloop-central-services-shared-npm-18.34.1-fc3be8e73c-f7ad2f9394.zip} +0 -0
- package/.yarn/cache/{@mojaloop-event-sdk-npm-14.7.0-dfe9fa1933-59adbf133d.zip → @mojaloop-event-sdk-npm-14.8.0-c3e8d5a581-bc2be19e16.zip} +0 -0
- package/.yarn/cache/@mojaloop-inter-scheme-proxy-cache-lib-npm-2.9.0-cb33cd6786-fd3f20e6a7.zip +0 -0
- package/.yarn/cache/@mojaloop-ml-number-npm-11.4.0-14b3424a94-f6e9fde53e.zip +0 -0
- package/.yarn/cache/@mojaloop-platform-shared-lib-nodejs-kafka-client-lib-npm-0.5.20-dc351718a9-e944d3f943.zip +0 -0
- package/.yarn/cache/{@mojaloop-sdk-standard-components-npm-19.17.0-0519957b97-95fef19fc4.zip → @mojaloop-sdk-standard-components-npm-19.18.0-c3cfe8de77-62ddc3ea84.zip} +0 -0
- package/.yarn/cache/{@redis-bloom-npm-5.8.2-1972c61f30-99ec4f127b.zip → @redis-bloom-npm-5.8.3-892faaab15-031bfb7d85.zip} +0 -0
- package/.yarn/cache/{@redis-client-npm-5.8.2-68c2d31768-653ba2d0ef.zip → @redis-client-npm-5.8.3-acc7573cc3-402e5f4520.zip} +0 -0
- package/.yarn/cache/{@redis-json-npm-5.8.2-99129c657f-2877cd93b7.zip → @redis-json-npm-5.8.3-bbddd9239e-fc81b7e638.zip} +0 -0
- package/.yarn/cache/{@redis-search-npm-5.8.2-c7014522ef-6cc0499a11.zip → @redis-search-npm-5.8.3-07f03dcedf-74c4ef9d3f.zip} +0 -0
- package/.yarn/cache/{@redis-time-series-npm-5.8.2-94d4c69124-a775817380.zip → @redis-time-series-npm-5.8.3-a029734baa-20ab29dfe1.zip} +0 -0
- package/.yarn/cache/{@redocly-ajv-npm-8.11.2-edb76e81a5-75d6d8bcc2.zip → @redocly-ajv-npm-8.11.3-90d671b655-da5946f032.zip} +0 -0
- package/.yarn/cache/{@sinclair-typebox-npm-0.34.35-4698edbad1-4b50006c80.zip → @sinclair-typebox-npm-0.34.41-602ecca817-5c04a7f421.zip} +0 -0
- package/.yarn/cache/@so-ric-colorspace-npm-1.1.6-4fa5d728ca-fc3285e5cb.zip +0 -0
- package/.yarn/cache/{@types-babel__generator-npm-7.6.8-61be1197d9-b53c215e90.zip → @types-babel__generator-npm-7.27.0-a5af33547a-f572e67a9a.zip} +0 -0
- package/.yarn/cache/@types-babel__traverse-npm-7.28.0-44a48c1b20-371c5e1b40.zip +0 -0
- package/.yarn/cache/@types-body-parser-npm-1.19.6-363c879d4f-33041e88ea.zip +0 -0
- package/.yarn/cache/@types-content-disposition-npm-0.5.9-0a4389ae4e-d895703c00.zip +0 -0
- package/.yarn/cache/@types-cookies-npm-0.9.1-d956f351a3-512635d55e.zip +0 -0
- package/.yarn/cache/@types-estree-npm-1.0.8-2195bac6d6-25a4c16a67.zip +0 -0
- package/.yarn/cache/@types-express-serve-static-core-npm-5.0.7-4a816a369e-74c69797f8.zip +0 -0
- package/.yarn/cache/@types-http-errors-npm-2.0.5-fc57abf6db-a88da66936.zip +0 -0
- package/.yarn/cache/@types-koa-npm-3.0.0-8807854f00-db461810b7.zip +0 -0
- package/.yarn/cache/{@types-lodash-npm-4.17.15-0a7d38c4ec-27b348b597.zip → @types-lodash-npm-4.17.20-d7ed6ac7af-8cd8ad3bd7.zip} +0 -0
- package/.yarn/cache/{@types-node-npm-24.5.2-7697d08520-a497aea88a.zip → @types-node-npm-24.6.2-22876fbd21-8d1e64b37a.zip} +0 -0
- package/.yarn/cache/@types-node-npm-24.7.0-fa253cad8d-db0b77e9b1.zip +0 -0
- package/.yarn/cache/@types-qs-npm-6.14.0-e27d9ca044-1909205514.zip +0 -0
- package/.yarn/cache/@types-semver-npm-7.7.1-1a46d6e2dd-8f09e7e6ca.zip +0 -0
- package/.yarn/cache/{@types-send-npm-0.17.4-9d7c55577f-28320a2aa1.zip → @types-send-npm-0.17.5-5278cc54b0-b68ae8f9ba.zip} +0 -0
- package/.yarn/cache/{@types-serve-static-npm-1.15.7-d4eef0bd1a-c5a7171d56.zip → @types-serve-static-npm-1.15.8-1f955e73b5-c031f870df.zip} +0 -0
- package/.yarn/cache/{@typescript-eslint-eslint-plugin-npm-8.44.0-3a3d745bcf-38d0491d96.zip → @typescript-eslint-eslint-plugin-npm-8.45.0-92bb8b7596-6d31dbd335.zip} +0 -0
- package/.yarn/cache/@typescript-eslint-eslint-plugin-npm-8.46.0-e6114965b4-415afd894a.zip +0 -0
- package/.yarn/cache/@typescript-eslint-parser-npm-8.45.0-9132cc3400-4f8b7c73ae.zip +0 -0
- package/.yarn/cache/@typescript-eslint-parser-npm-8.46.0-c44629050a-6838fde776.zip +0 -0
- package/.yarn/cache/@typescript-eslint-project-service-npm-8.45.0-a8f5eebf6e-919c8260da.zip +0 -0
- package/.yarn/cache/@typescript-eslint-project-service-npm-8.46.0-85a4b9bb9c-de11af23ae.zip +0 -0
- package/.yarn/cache/@typescript-eslint-scope-manager-npm-8.45.0-ee984aba27-e45d63a010.zip +0 -0
- package/.yarn/cache/@typescript-eslint-scope-manager-npm-8.46.0-fd8edaba78-ed85abd08c.zip +0 -0
- package/.yarn/cache/@typescript-eslint-tsconfig-utils-npm-8.45.0-c8d2a74220-91696bbc34.zip +0 -0
- package/.yarn/cache/@typescript-eslint-tsconfig-utils-npm-8.46.0-8919c1f746-e78a66a854.zip +0 -0
- package/.yarn/cache/{@typescript-eslint-type-utils-npm-8.44.0-4b4c61deae-513c6d3719.zip → @typescript-eslint-type-utils-npm-8.45.0-7a1226a6e4-81017b3f47.zip} +0 -0
- package/.yarn/cache/@typescript-eslint-type-utils-npm-8.46.0-dbfff922bb-5405b71b91.zip +0 -0
- package/.yarn/cache/@typescript-eslint-types-npm-8.45.0-48b82801f4-889ded2b9b.zip +0 -0
- package/.yarn/cache/@typescript-eslint-types-npm-8.46.0-b013400d3e-0118b0dd59.zip +0 -0
- package/.yarn/cache/@typescript-eslint-typescript-estree-npm-8.45.0-e7f29f17ac-2fb4e63ad6.zip +0 -0
- package/.yarn/cache/@typescript-eslint-typescript-estree-npm-8.46.0-0b10d4388a-61053bd0c3.zip +0 -0
- package/.yarn/cache/@typescript-eslint-utils-npm-8.45.0-ae9cdb989e-9e675a0da4.zip +0 -0
- package/.yarn/cache/@typescript-eslint-utils-npm-8.46.0-a7d3832f43-4e0da60de3.zip +0 -0
- package/.yarn/cache/{@typescript-eslint-visitor-keys-npm-8.38.0-533dcf6a78-a95a535146.zip → @typescript-eslint-visitor-keys-npm-8.45.0-2626ce19ce-8ae7e19c69.zip} +0 -0
- package/.yarn/cache/{@typescript-eslint-visitor-keys-npm-8.44.0-131d4d0e8f-09b008b14f.zip → @typescript-eslint-visitor-keys-npm-8.46.0-7d793afea5-37e6145b6a.zip} +0 -0
- package/.yarn/cache/abbrev-npm-3.0.1-a34d600e50-ebd2c149dd.zip +0 -0
- package/.yarn/cache/acorn-npm-8.15.0-0764cf600e-77f2de5051.zip +0 -0
- package/.yarn/cache/agent-base-npm-7.1.4-cb8b4604d5-79bef16724.zip +0 -0
- package/.yarn/cache/ansi-regex-npm-6.2.2-f2d6691eb1-9b17ce2c6d.zip +0 -0
- package/.yarn/cache/ansi-styles-npm-6.2.3-6fc7ca2bf5-c49dad7639.zip +0 -0
- package/.yarn/cache/{aproba-npm-2.0.0-8716bcfde6-c2b9a63129.zip → aproba-npm-2.1.0-6cb03e605b-cb0e335ac3.zip} +0 -0
- package/.yarn/cache/async-generator-function-npm-1.0.0-14cf981d13-3d49e7acbe.zip +0 -0
- package/.yarn/cache/babel-jest-npm-30.2.0-c2df62d909-4c7351a366.zip +0 -0
- package/.yarn/cache/babel-plugin-istanbul-npm-7.0.1-4d31ae2722-fe9f865f97.zip +0 -0
- package/.yarn/cache/babel-plugin-jest-hoist-npm-30.2.0-6573d8bab9-360e87a9aa.zip +0 -0
- package/.yarn/cache/{babel-preset-current-node-syntax-npm-1.1.0-a3b84fe89f-46331111ae.zip → babel-preset-current-node-syntax-npm-1.2.0-a954a29b2b-3608fa671c.zip} +0 -0
- package/.yarn/cache/babel-preset-jest-npm-30.2.0-5a82b08b87-f75e155a8c.zip +0 -0
- package/.yarn/cache/baseline-browser-mapping-npm-2.8.11-ec62cbaabe-2325115f1c.zip +0 -0
- package/.yarn/cache/browserslist-npm-4.26.3-a3d5d315b1-49add06fd7.zip +0 -0
- package/.yarn/cache/caniuse-lite-npm-1.0.30001747-f845e7e6c5-b101dc4b13.zip +0 -0
- package/.yarn/cache/{chalk-npm-5.4.1-2f3fe4660a-29df3ffcdf.zip → chalk-npm-5.6.2-ecbd482482-1b2f48f6fb.zip} +0 -0
- package/.yarn/cache/cheerio-npm-1.1.2-b0fb353132-6b654bf5a3.zip +0 -0
- package/.yarn/cache/ci-info-npm-4.3.0-2894137978-01e359032a.zip +0 -0
- package/.yarn/cache/color-convert-npm-3.1.2-eca60588e1-6731d4d4e1.zip +0 -0
- package/.yarn/cache/color-name-npm-2.0.2-7e9a2237f7-58e5fa3853.zip +0 -0
- package/.yarn/cache/color-npm-5.0.2-3558f1a2be-2574e20a8a.zip +0 -0
- package/.yarn/cache/color-string-npm-2.1.2-7ceaab0b60-9f2fdf5a29.zip +0 -0
- package/.yarn/cache/compression-npm-1.8.1-e34a5db404-e7552bfbd7.zip +0 -0
- package/.yarn/cache/core-js-compat-npm-3.45.1-3c70e031ab-a6eb757ccf.zip +0 -0
- package/.yarn/cache/css-select-npm-5.2.2-6385fe3687-ebb6a88446.zip +0 -0
- package/.yarn/cache/{css-what-npm-6.1.0-57f751efbb-c67a3a2d0d.zip → css-what-npm-6.2.2-c497de3935-3c5a53be94.zip} +0 -0
- package/.yarn/cache/{debug-npm-4.4.1-6eab84b9f7-8e2709b214.zip → debug-npm-4.4.3-0105c6123a-9ada3434ea.zip} +0 -0
- package/.yarn/cache/dedent-npm-1.7.0-ec8ff53a59-c902f3e7e8.zip +0 -0
- package/.yarn/cache/dotenv-npm-17.2.3-2f9ab93ea1-f8b78626eb.zip +0 -0
- package/.yarn/cache/{electron-to-chromium-npm-1.5.191-037fcdd360-d5a5ca41bb.zip → electron-to-chromium-npm-1.5.230-2836cdf03c-af1c5b6b7b.zip} +0 -0
- package/.yarn/cache/encoding-sniffer-npm-0.2.1-55db9e1e21-7d74723823.zip +0 -0
- package/.yarn/cache/end-of-stream-npm-1.4.5-8e646acd73-1e0cfa6e7f.zip +0 -0
- package/.yarn/cache/entities-npm-6.0.1-84692dab43-62af130720.zip +0 -0
- package/.yarn/cache/error-ex-npm-1.3.4-c7248e4040-ae3939fd4a.zip +0 -0
- package/.yarn/cache/eslint-scope-npm-8.4.0-8ed12feb40-e8e611701f.zip +0 -0
- package/.yarn/cache/espree-npm-10.4.0-9633b00e55-9b355b32db.zip +0 -0
- package/.yarn/cache/expect-npm-30.2.0-cebe750b6e-cf98ab45ab.zip +0 -0
- package/.yarn/cache/fast-uri-npm-3.1.0-57fa0b3f3c-818b2c96dc.zip +0 -0
- package/.yarn/cache/{fastq-npm-1.19.0-5e2713df98-20457acfb1.zip → fastq-npm-1.19.1-ca0a13ec3f-75679dc226.zip} +0 -0
- package/.yarn/cache/fdir-npm-6.5.0-8814a0dec7-14ca1c9f0a.zip +0 -0
- package/.yarn/cache/{follow-redirects-npm-1.15.9-539785d34c-e3ab42d109.zip → follow-redirects-npm-1.15.11-ae7b2db266-07372fd74b.zip} +0 -0
- package/.yarn/cache/{fs-extra-npm-11.3.0-a6b1b4d5ad-c9fe7b23dd.zip → fs-extra-npm-11.3.2-490a8d09c5-d559545c73.zip} +0 -0
- package/.yarn/cache/generator-function-npm-2.0.1-aed34a724a-eb7e7eb896.zip +0 -0
- package/.yarn/cache/get-intrinsic-npm-1.3.1-2f734f40ec-bb579dda84.zip +0 -0
- package/.yarn/cache/htmlparser2-npm-10.0.0-2301362da5-768870f0e0.zip +0 -0
- package/.yarn/cache/http-cache-semantics-npm-4.2.0-fadacfb3ad-4efd2dfcfe.zip +0 -0
- package/.yarn/cache/ignore-npm-7.0.5-dea34ee430-f134b96a4d.zip +0 -0
- package/.yarn/cache/index-to-position-npm-1.2.0-76254be6df-fb6421c87a.zip +0 -0
- package/.yarn/cache/ip-address-npm-10.0.1-862be6199a-09731acda3.zip +0 -0
- package/.yarn/cache/is-generator-function-npm-1.1.2-d0a84b1a72-cc50fa0103.zip +0 -0
- package/.yarn/cache/is-npm-npm-6.1.0-3dd1685f37-54779c5541.zip +0 -0
- package/.yarn/cache/istanbul-reports-npm-3.2.0-b755b56d78-6773a1d5c7.zip +0 -0
- package/.yarn/cache/{jake-npm-10.9.2-3bf2173aed-3be324708f.zip → jake-npm-10.9.4-970487a1c4-97e48f73f5.zip} +0 -0
- package/.yarn/cache/jest-diff-npm-30.2.0-a9ffaeaf61-1fb9e4fb7d.zip +0 -0
- package/.yarn/cache/{jest-haste-map-npm-30.1.0-8189548adb-bd39053fe1.zip → jest-haste-map-npm-30.2.0-3a29f4d94a-a88be6b0b6.zip} +0 -0
- package/.yarn/cache/jest-matcher-utils-npm-30.2.0-4a694dfac2-f3f1ecf68c.zip +0 -0
- package/.yarn/cache/jest-message-util-npm-30.2.0-65acf2d429-e29ec76e8c.zip +0 -0
- package/.yarn/cache/{jest-mock-npm-30.0.0-1cab834040-4896ba2504.zip → jest-mock-npm-30.2.0-9e4a2da4cb-cde9b56805.zip} +0 -0
- package/.yarn/cache/{jest-util-npm-30.0.5-8940b46e20-44207c4b8c.zip → jest-util-npm-30.2.0-8ebfa9b786-cf2f2fb834.zip} +0 -0
- package/.yarn/cache/{jest-worker-npm-30.1.0-b4a01545e6-cc09d2ce86.zip → jest-worker-npm-30.2.0-4d4aaec97d-9354b0c71c.zip} +0 -0
- package/.yarn/cache/jsonfile-npm-6.2.0-aefb9ffd45-513aac94a6.zip +0 -0
- package/.yarn/cache/jwa-npm-1.4.2-9b996c4b2d-a46c9ddbcc.zip +0 -0
- package/.yarn/cache/jwa-npm-2.0.1-9ebe28a626-b04312a1de.zip +0 -0
- package/.yarn/cache/{long-npm-5.3.1-c44e0933f0-7713e10b4f.zip → long-npm-5.3.2-f80d0f7d39-b6b55ddae5.zip} +0 -0
- package/.yarn/cache/{minipass-fetch-npm-4.0.0-d4e49e0194-4b0772dbee.zip → minipass-fetch-npm-4.0.1-ce1d15e957-7ddfebdbb8.zip} +0 -0
- package/.yarn/cache/minizlib-npm-3.1.0-6680befdba-f47365cc2c.zip +0 -0
- package/.yarn/cache/mock-json-schema-npm-1.1.2-d0bf8a8e0c-d02d8aa908.zip +0 -0
- package/.yarn/cache/{nan-npm-2.22.1-09e9287ac1-3459e7e0b0.zip → nan-npm-2.23.0-b3b2a3ae9b-9822b38418.zip} +0 -0
- package/.yarn/cache/nanoid-npm-3.3.11-f98c1f9ef6-73b5afe597.zip +0 -0
- package/.yarn/cache/node-gyp-npm-11.4.2-75a7da9a3c-de0fdd1a23.zip +0 -0
- package/.yarn/cache/node-rdkafka-npm-3.4.1-cbfb65c8a6-ab51a61428.zip +0 -0
- package/.yarn/cache/node-releases-npm-2.0.21-93f7457975-5344d634b3.zip +0 -0
- package/.yarn/cache/normalize-url-npm-8.1.0-9b4f4e558b-59b765bfe7.zip +0 -0
- package/.yarn/cache/object.entries-npm-1.1.9-32f1b371e0-24163ab1e1.zip +0 -0
- package/.yarn/cache/parse5-npm-7.3.0-b0410074a3-b0e48be20b.zip +0 -0
- package/.yarn/cache/{picomatch-npm-4.0.2-e93516ddf2-ce617b8da3.zip → picomatch-npm-4.0.3-0a647b87cc-57b99055f4.zip} +0 -0
- package/.yarn/cache/portfinder-npm-1.0.38-d6e0c97a97-369155c3e7.zip +0 -0
- package/.yarn/cache/{postcss-npm-8.5.3-37174aa03d-6d7e21a772.zip → postcss-npm-8.5.6-e7f126c6f3-9e4fbe9757.zip} +0 -0
- package/.yarn/cache/pretty-format-npm-30.2.0-2787008ea2-725890d648.zip +0 -0
- package/.yarn/cache/{pump-npm-3.0.2-a8afc6734f-e0c4216874.zip → pump-npm-3.0.3-e7d0c1fbab-52843fc933.zip} +0 -0
- package/.yarn/cache/pupa-npm-3.3.0-00ad2ffe24-05c84c2c76.zip +0 -0
- package/.yarn/cache/{redis-npm-5.8.2-9c493c0c47-a7635cedf2.zip → redis-npm-5.8.3-3369ceaea3-3843f0ad95.zip} +0 -0
- package/.yarn/cache/regenerate-unicode-properties-npm-10.2.2-7d116b2ed9-5041ee3118.zip +0 -0
- package/.yarn/cache/regexpu-core-npm-6.4.0-8966e0bc82-bf5f85a502.zip +0 -0
- package/.yarn/cache/regjsparser-npm-0.13.0-c24f3ebde6-eeaabd3454.zip +0 -0
- package/.yarn/cache/{socks-npm-2.8.4-8194b86bd0-ab3af97aeb.zip → socks-npm-2.8.7-d1d20aae19-d19366c959.zip} +0 -0
- package/.yarn/cache/spdx-license-ids-npm-3.0.22-2b47dea449-a2f214aaf7.zip +0 -0
- package/.yarn/cache/statuses-npm-2.0.2-2d84c63b8c-6927feb50c.zip +0 -0
- package/.yarn/cache/strip-ansi-npm-7.1.2-aa4fadccd9-db0e3f9654.zip +0 -0
- package/.yarn/cache/{strip-json-comments-npm-5.0.1-4a8f1cb37e-b314af70c6.zip → strip-json-comments-npm-5.0.3-5042d1b870-3ccbf26f27.zip} +0 -0
- package/.yarn/cache/strnum-npm-1.1.2-67427480d6-ccd6297a1f.zip +0 -0
- package/.yarn/cache/{supports-color-npm-10.0.0-6cd1bb42a6-0475bf167d.zip → supports-color-npm-10.2.2-e43ac15f9f-bd132705fc.zip} +0 -0
- package/.yarn/cache/{swagger-ui-dist-npm-5.19.0-1a4737b567-d7433e00e5.zip → swagger-ui-dist-npm-5.29.3-403a6cab72-f896364781.zip} +0 -0
- package/.yarn/cache/tar-npm-7.5.1-7b414f7fec-4848cd2fa2.zip +0 -0
- package/.yarn/cache/tinyglobby-npm-0.2.15-0e783aadbd-d72bd826a8.zip +0 -0
- package/.yarn/cache/tmp-npm-0.2.5-e146296d91-dd4b78b323.zip +0 -0
- package/.yarn/cache/{typescript-patch-bcfe2ebaf8-bd810ab13e.zip → typescript-npm-5.9.3-48715be868-c089d9d3da.zip} +0 -0
- package/.yarn/cache/{typescript-npm-5.9.2-d00cd8b149-cc2fe6c822.zip → typescript-patch-6fda4d02cf-696e1b017b.zip} +0 -0
- package/.yarn/cache/undici-npm-7.16.0-f6b1c9157f-2bb71672b2.zip +0 -0
- package/.yarn/cache/{undici-types-npm-7.12.0-af0c725921-4a0f927c98.zip → undici-types-npm-7.13.0-df78d4ea2d-1088ad68dd.zip} +0 -0
- package/.yarn/cache/undici-types-npm-7.14.0-d9eb643e6a-0f8709b214.zip +0 -0
- package/.yarn/cache/unicode-match-property-value-ecmascript-npm-2.2.1-0b3c4504a2-a42bebebab.zip +0 -0
- package/.yarn/cache/unicode-property-aliases-ecmascript-npm-2.2.0-55d7728914-0dd0f6e701.zip +0 -0
- package/.yarn/cache/validator-npm-13.15.15-143146ad19-a43d9271c8.zip +0 -0
- package/.yarn/cache/zod-npm-3.25.76-7de26333f8-f0c963ec40.zip +0 -0
- package/.yarn/install-state.gz +0 -0
- package/.yarn/releases/{yarn-4.10.1.cjs → yarn-4.10.3.cjs} +126 -126
- package/.yarnrc.yml +1 -1
- package/CHANGELOG.md +12 -0
- package/CLAUDE.md +186 -0
- package/_cc/learn-project.md +74 -0
- package/_cc/specs/story-CSI-1864.md +45 -0
- package/docker-compose.yml +2 -2
- package/modules/api-svc/.env.example +2 -2
- package/modules/api-svc/package.json +10 -10
- package/modules/api-svc/src/ControlAgent/index.js +45 -12
- package/modules/api-svc/src/FSPIOPEventHandler/handlers/bulk-quotes-requested.js +1 -1
- package/modules/api-svc/src/FSPIOPEventHandler/handlers/bulk-transfers-requested.js +1 -1
- package/modules/api-svc/src/FSPIOPEventHandler/handlers/party-info-requested.js +1 -1
- package/modules/api-svc/src/FSPIOPEventHandler/index.js +3 -3
- package/modules/api-svc/src/InboundServer/handlers.js +3 -3
- package/modules/api-svc/src/InboundServer/index.js +6 -6
- package/modules/api-svc/src/InboundServer/middlewares.js +6 -2
- package/modules/api-svc/src/OutboundServer/handlers.js +13 -13
- package/modules/api-svc/src/OutboundServer/index.js +5 -5
- package/modules/api-svc/src/config.js +5 -4
- package/modules/api-svc/src/index.js +251 -196
- package/modules/api-svc/src/lib/cache.js +15 -12
- package/modules/api-svc/src/lib/model/AccountsModel.js +1 -1
- package/modules/api-svc/src/lib/model/Async2SyncModel.js +1 -1
- package/modules/api-svc/src/lib/model/InboundPingModel.js +1 -1
- package/modules/api-svc/src/lib/model/InboundTransfersModel.js +1 -1
- package/modules/api-svc/src/lib/model/OutboundBulkQuotesModel.js +1 -1
- package/modules/api-svc/src/lib/model/OutboundBulkTransfersModel.js +1 -1
- package/modules/api-svc/src/lib/model/OutboundRequestToPayModel.js +1 -1
- package/modules/api-svc/src/lib/model/OutboundRequestToPayTransferModel.js +1 -1
- package/modules/api-svc/src/lib/model/OutboundTransfersModel.js +1 -1
- package/modules/api-svc/src/lib/model/ProxyModel/index.js +2 -2
- package/modules/api-svc/src/lib/utils.js +6 -6
- package/modules/api-svc/test/__mocks__/@mojaloop/sdk-standard-components.js +2 -2
- package/modules/api-svc/test/config/integration-pm4ml.env +2 -2
- package/modules/api-svc/test/config/integration.env +2 -2
- package/modules/api-svc/test/integration-pm4ml/mockServers/managementService/initConfig.js +1 -1
- package/modules/api-svc/test/unit/api/utils.js +7 -7
- package/modules/api-svc/test/unit/config.test.js +3 -3
- package/modules/api-svc/test/unit/data/defaultConfig.json +1 -1
- package/modules/api-svc/test/unit/index.configPolling.test.js +229 -0
- package/modules/api-svc/test/unit/lib/model/InboundPingModel.test.js +4 -4
- package/modules/api-svc/test/unit/lib/model/OutboundTransfersISO20022.test.js +1 -1
- package/modules/api-svc/test/unit/lib/model/data/defaultConfig.json +1 -1
- package/modules/api-svc/test/unit/outboundApi/handlers.test.js +15 -15
- package/modules/outbound-command-event-handler/package.json +9 -9
- package/modules/outbound-domain-event-handler/package.json +7 -7
- package/modules/private-shared-lib/package.json +9 -9
- package/package.json +7 -6
- package/{sbom-v24.11.0.csv → sbom-v24.13.0.csv} +236 -247
- package/.yarn/cache/@ampproject-remapping-npm-2.3.0-559c14eee4-f345152537.zip +0 -0
- package/.yarn/cache/@babel-code-frame-npm-7.26.2-4902b56813-db2c2122af.zip +0 -0
- package/.yarn/cache/@babel-compat-data-npm-7.26.8-fb802c4940-bdddf577f6.zip +0 -0
- package/.yarn/cache/@babel-compat-data-npm-7.27.2-22fa0c7782-eaa9f8aaeb.zip +0 -0
- package/.yarn/cache/@babel-core-npm-7.26.9-12b18cb40d-ceed199dbe.zip +0 -0
- package/.yarn/cache/@babel-core-npm-7.27.4-801e5891a4-28c01186d5.zip +0 -0
- package/.yarn/cache/@babel-generator-npm-7.26.9-3260f562f4-95075dd615.zip +0 -0
- package/.yarn/cache/@babel-generator-npm-7.27.1-12737d533a-6101825922.zip +0 -0
- package/.yarn/cache/@babel-generator-npm-7.27.3-9f345034e6-3b8477ae0c.zip +0 -0
- package/.yarn/cache/@babel-generator-npm-7.28.0-41b4249958-064c5ba4c0.zip +0 -0
- package/.yarn/cache/@babel-helper-annotate-as-pure-npm-7.25.9-a0f89e14a0-41edda10df.zip +0 -0
- package/.yarn/cache/@babel-helper-annotate-as-pure-npm-7.27.1-5d7897ae67-3f8e4d5914.zip +0 -0
- package/.yarn/cache/@babel-helper-compilation-targets-npm-7.26.5-e3b4215b3c-f3b5f0bfcd.zip +0 -0
- package/.yarn/cache/@babel-helper-create-class-features-plugin-npm-7.27.1-65d3087eb1-701579b490.zip +0 -0
- package/.yarn/cache/@babel-helper-create-regexp-features-plugin-npm-7.26.3-834c0b262a-4c44122ea1.zip +0 -0
- package/.yarn/cache/@babel-helper-module-imports-npm-7.25.9-b86e31bde9-e090be5dee.zip +0 -0
- package/.yarn/cache/@babel-helper-module-transforms-npm-7.26.0-7557a3558f-9841d2a62f.zip +0 -0
- package/.yarn/cache/@babel-helper-module-transforms-npm-7.27.1-d289bdccc6-415509a585.zip +0 -0
- package/.yarn/cache/@babel-helper-module-transforms-npm-7.27.3-90dc30d3d9-47abc90ceb.zip +0 -0
- package/.yarn/cache/@babel-helper-plugin-utils-npm-7.26.5-f9c17c9880-1cc0fd8514.zip +0 -0
- package/.yarn/cache/@babel-helper-string-parser-npm-7.25.9-eade578078-c28656c52b.zip +0 -0
- package/.yarn/cache/@babel-helper-validator-identifier-npm-7.25.9-2634b947a4-3f9b649be0.zip +0 -0
- package/.yarn/cache/@babel-helper-validator-option-npm-7.25.9-6450027d5d-9491b27559.zip +0 -0
- package/.yarn/cache/@babel-helpers-npm-7.26.10-4eb1d94ec4-6641462579.zip +0 -0
- package/.yarn/cache/@babel-helpers-npm-7.27.4-ba8f87a40e-a697280575.zip +0 -0
- package/.yarn/cache/@babel-parser-npm-7.26.9-5be13f2551-cb84fe3ba5.zip +0 -0
- package/.yarn/cache/@babel-parser-npm-7.27.2-70cd61f3e6-133b4ccfbc.zip +0 -0
- package/.yarn/cache/@babel-parser-npm-7.27.3-3085b3fa96-ea5a0cd55e.zip +0 -0
- package/.yarn/cache/@babel-parser-npm-7.27.4-c8d264780c-5ff6db87fd.zip +0 -0
- package/.yarn/cache/@babel-parser-npm-7.28.0-d5c2974608-2c14a0d260.zip +0 -0
- package/.yarn/cache/@babel-parser-npm-7.28.3-8acaa30019-9fa08282e3.zip +0 -0
- package/.yarn/cache/@babel-plugin-syntax-import-attributes-npm-7.26.0-7a281ed168-c122aa5771.zip +0 -0
- package/.yarn/cache/@babel-plugin-transform-regenerator-npm-7.28.3-36bb1b5a59-f95e929d41.zip +0 -0
- package/.yarn/cache/@babel-template-npm-7.26.9-6339558068-240288ceba.zip +0 -0
- package/.yarn/cache/@babel-traverse-npm-7.26.9-5dc40fea71-c16a79522e.zip +0 -0
- package/.yarn/cache/@babel-traverse-npm-7.27.1-cdef168378-9977271aa4.zip +0 -0
- package/.yarn/cache/@babel-traverse-npm-7.27.3-340ab882dc-caccdb8335.zip +0 -0
- package/.yarn/cache/@babel-traverse-npm-7.27.4-fe457ebf1b-4debb80b90.zip +0 -0
- package/.yarn/cache/@babel-traverse-npm-7.28.0-66b3390b4e-c1c24b12b6.zip +0 -0
- package/.yarn/cache/@babel-traverse-npm-7.28.3-7786c501c7-fe521591b7.zip +0 -0
- package/.yarn/cache/@babel-types-npm-7.26.9-ef3f43c2d5-11b62ea7ed.zip +0 -0
- package/.yarn/cache/@babel-types-npm-7.27.1-2a01e9d02f-81f8ada28c.zip +0 -0
- package/.yarn/cache/@babel-types-npm-7.27.3-7b6a22808d-a24e6accd8.zip +0 -0
- package/.yarn/cache/@babel-types-npm-7.28.2-9db4224804-a8de404a2e.zip +0 -0
- package/.yarn/cache/@eslint-community-eslint-utils-npm-4.4.1-c83a271e90-ae92a11412.zip +0 -0
- package/.yarn/cache/@eslint-community-eslint-utils-npm-4.7.0-47503bfa2a-43ed5d3915.zip +0 -0
- package/.yarn/cache/@eslint-compat-npm-1.3.2-b403da4a15-e710ec5ed8.zip +0 -0
- package/.yarn/cache/@eslint-core-npm-0.12.0-38bccca4dd-ee8a2c65ee.zip +0 -0
- package/.yarn/cache/@grpc-grpc-js-npm-1.13.4-4aa5cd2dfd-f1eb910ff7.zip +0 -0
- package/.yarn/cache/@grpc-proto-loader-npm-0.7.13-be5b6af1c1-7e2d842c20.zip +0 -0
- package/.yarn/cache/@hapi-teamwork-npm-6.0.0-0f3d56734c-e79c8e590e.zip +0 -0
- package/.yarn/cache/@hapi-tlds-npm-1.1.2-80b5f7031d-339761cd1a.zip +0 -0
- package/.yarn/cache/@humanwhocodes-retry-npm-0.3.1-9d87bf92c6-eb457f6995.zip +0 -0
- package/.yarn/cache/@humanwhocodes-retry-npm-0.4.2-78a05c1b69-8910c4cdf8.zip +0 -0
- package/.yarn/cache/@ioredis-commands-npm-1.3.0-c1ff038fb4-203029f09d.zip +0 -0
- package/.yarn/cache/@jest-get-type-npm-30.0.0-db16e5ad7d-6dc432caac.zip +0 -0
- package/.yarn/cache/@jest-pattern-npm-30.0.0-8f812d915e-4c21a48b1d.zip +0 -0
- package/.yarn/cache/@jest-schemas-npm-30.0.0-7943bf35b9-b97944e582.zip +0 -0
- package/.yarn/cache/@jest-transform-npm-30.1.2-14cfbd16d5-aec6c6a46f.zip +0 -0
- package/.yarn/cache/@jest-types-npm-30.0.0-ee47462915-647481170c.zip +0 -0
- package/.yarn/cache/@jest-types-npm-30.0.5-0475c9b283-6bf18f4e89.zip +0 -0
- package/.yarn/cache/@jridgewell-gen-mapping-npm-0.3.8-647be6e286-9d3a56ab36.zip +0 -0
- package/.yarn/cache/@jridgewell-set-array-npm-1.2.1-2312928209-832e513a85.zip +0 -0
- package/.yarn/cache/@jridgewell-sourcemap-codec-npm-1.5.0-dfd9126d71-4ed6123217.zip +0 -0
- package/.yarn/cache/@jridgewell-trace-mapping-npm-0.3.25-c076fd2279-dced32160a.zip +0 -0
- package/.yarn/cache/@jridgewell-trace-mapping-npm-0.3.29-6702d36c67-64e1ce0dc3.zip +0 -0
- package/.yarn/cache/@mojaloop-logging-bc-public-types-lib-npm-0.5.4-03ab70ac75-0d35363d3c.zip +0 -0
- package/.yarn/cache/@mojaloop-ml-number-npm-11.3.0-9858cadff5-8435794709.zip +0 -0
- package/.yarn/cache/@redocly-config-npm-0.20.3-701daa5910-dd9501c96d.zip +0 -0
- package/.yarn/cache/@redocly-openapi-core-npm-1.31.1-fb4096a34f-771e68ef15.zip +0 -0
- package/.yarn/cache/@redocly-openapi-core-npm-1.34.3-10568e0790-b70a92135e.zip +0 -0
- package/.yarn/cache/@types-babel__traverse-npm-7.20.6-fac4243243-63d13a3789.zip +0 -0
- package/.yarn/cache/@types-body-parser-npm-1.19.5-97fb106976-1e251118c4.zip +0 -0
- package/.yarn/cache/@types-content-disposition-npm-0.5.8-0074adf6a1-eeea868fb5.zip +0 -0
- package/.yarn/cache/@types-cookies-npm-0.9.0-a3671b5a75-88d2106834.zip +0 -0
- package/.yarn/cache/@types-estree-npm-1.0.6-b5e23f2ea2-9d35d47509.zip +0 -0
- package/.yarn/cache/@types-express-npm-5.0.0-a645691cd5-45b199ab66.zip +0 -0
- package/.yarn/cache/@types-express-serve-static-core-npm-5.0.6-e41caf262c-9dc51bdee7.zip +0 -0
- package/.yarn/cache/@types-http-errors-npm-2.0.4-8b39ca5d7c-1f3d7c3b32.zip +0 -0
- package/.yarn/cache/@types-node-npm-22.13.5-4c5912eee2-a69ec8dba3.zip +0 -0
- package/.yarn/cache/@types-qs-npm-6.9.18-125db28c30-152fab96ef.zip +0 -0
- package/.yarn/cache/@types-semver-npm-7.5.8-26073743d7-3496808818.zip +0 -0
- package/.yarn/cache/@typescript-eslint-parser-npm-8.44.0-9be86aa2f8-8c7ddabf46.zip +0 -0
- package/.yarn/cache/@typescript-eslint-project-service-npm-8.38.0-b50ac59922-fe21604603.zip +0 -0
- package/.yarn/cache/@typescript-eslint-project-service-npm-8.44.0-3208cc873e-400b4981e6.zip +0 -0
- package/.yarn/cache/@typescript-eslint-scope-manager-npm-8.38.0-64859efac1-0809a4135a.zip +0 -0
- package/.yarn/cache/@typescript-eslint-scope-manager-npm-8.44.0-02a051c9d1-5dae4a8386.zip +0 -0
- package/.yarn/cache/@typescript-eslint-tsconfig-utils-npm-8.38.0-79457d6001-e1c80d2a4b.zip +0 -0
- package/.yarn/cache/@typescript-eslint-tsconfig-utils-npm-8.44.0-de2d92d917-c8535d481d.zip +0 -0
- package/.yarn/cache/@typescript-eslint-types-npm-8.38.0-1cd62840a5-87ac2d199e.zip +0 -0
- package/.yarn/cache/@typescript-eslint-types-npm-8.44.0-89c4325651-9e28c95feb.zip +0 -0
- package/.yarn/cache/@typescript-eslint-typescript-estree-npm-8.38.0-b39ddf47a4-4ff14184a9.zip +0 -0
- package/.yarn/cache/@typescript-eslint-typescript-estree-npm-8.44.0-122f9245db-e2e579b15c.zip +0 -0
- package/.yarn/cache/@typescript-eslint-utils-npm-8.38.0-4fe3006f47-5be4936796.zip +0 -0
- package/.yarn/cache/@typescript-eslint-utils-npm-8.44.0-fc612e2915-436e21e3d0.zip +0 -0
- package/.yarn/cache/abbrev-npm-3.0.0-946682a7b1-2ceee14efd.zip +0 -0
- package/.yarn/cache/acorn-npm-8.14.0-dc46f61424-6df29c3555.zip +0 -0
- package/.yarn/cache/agent-base-npm-7.1.3-b2c16e72fb-3db6d8d465.zip +0 -0
- package/.yarn/cache/ansi-regex-npm-6.1.0-abe011aae4-495834a53b.zip +0 -0
- package/.yarn/cache/ansi-styles-npm-6.2.1-d43647018c-70fdf883b7.zip +0 -0
- package/.yarn/cache/async-npm-2.6.4-3155e80151-df8e52817d.zip +0 -0
- package/.yarn/cache/babel-jest-npm-30.1.2-2d68b3440b-9697119fe4.zip +0 -0
- package/.yarn/cache/babel-plugin-istanbul-npm-7.0.0-924905ff8c-4df567f291.zip +0 -0
- package/.yarn/cache/babel-plugin-jest-hoist-npm-30.0.1-be1f25b566-4d8d0eb372.zip +0 -0
- package/.yarn/cache/babel-preset-jest-npm-30.0.1-0b8ffd2c88-fa37b0fa11.zip +0 -0
- package/.yarn/cache/browserslist-npm-4.24.4-2fdeb5face-11fda105e8.zip +0 -0
- package/.yarn/cache/browserslist-npm-4.25.1-7df10d33cd-bfb5511b42.zip +0 -0
- package/.yarn/cache/call-bound-npm-1.0.3-f4cbf26326-c39a8245f6.zip +0 -0
- package/.yarn/cache/caniuse-lite-npm-1.0.30001700-af88646d2b-9203ed502f.zip +0 -0
- package/.yarn/cache/caniuse-lite-npm-1.0.30001727-5eb19a192b-6155a41413.zip +0 -0
- package/.yarn/cache/cheerio-npm-1.0.0-837785b57b-b535070add.zip +0 -0
- package/.yarn/cache/ci-info-npm-4.2.0-5451b2fa90-928d8457f3.zip +0 -0
- package/.yarn/cache/color-npm-3.2.1-568cf1014f-bf70438e01.zip +0 -0
- package/.yarn/cache/color-string-npm-1.9.1-dc020e56be-72aa0b81ee.zip +0 -0
- package/.yarn/cache/colorspace-npm-1.1.4-f01655548a-bb3934ef3c.zip +0 -0
- package/.yarn/cache/compression-npm-1.8.0-5088616544-ca213b9bd0.zip +0 -0
- package/.yarn/cache/core-js-compat-npm-3.44.0-840288badd-41885423aa.zip +0 -0
- package/.yarn/cache/css-select-npm-5.1.0-9365a79de5-d486b1e7eb.zip +0 -0
- package/.yarn/cache/debug-npm-4.4.0-f6efe76023-1847944c2e.zip +0 -0
- package/.yarn/cache/dedent-npm-1.5.3-123726df15-e5277f6268.zip +0 -0
- package/.yarn/cache/electron-to-chromium-npm-1.5.104-d9177e3237-ad580610ec.zip +0 -0
- package/.yarn/cache/encoding-sniffer-npm-0.2.0-7e717bfa93-fe61a759db.zip +0 -0
- package/.yarn/cache/end-of-stream-npm-1.4.4-497fc6dee1-530a5a5a1e.zip +0 -0
- package/.yarn/cache/error-ex-npm-1.3.2-5654f80c0f-d547740aa2.zip +0 -0
- package/.yarn/cache/es-abstract-npm-1.23.9-65d488dcce-31a321966d.zip +0 -0
- package/.yarn/cache/eslint-scope-npm-8.2.0-d74e314c9e-cd9ab60d5a.zip +0 -0
- package/.yarn/cache/eslint-visitor-keys-npm-4.2.0-a591434af3-9651b3356b.zip +0 -0
- package/.yarn/cache/espree-npm-10.3.0-e5b10052f5-3412d44d42.zip +0 -0
- package/.yarn/cache/expect-npm-30.0.0-c4f29cc906-2ad7d2a3cd.zip +0 -0
- package/.yarn/cache/fast-uri-npm-3.0.6-140ab22003-43c87cd039.zip +0 -0
- package/.yarn/cache/get-intrinsic-npm-1.3.0-35558f27b6-6e9dd920ff.zip +0 -0
- package/.yarn/cache/globals-npm-11.12.0-1fa7f41a6c-9f054fa38f.zip +0 -0
- package/.yarn/cache/htmlparser2-npm-9.1.0-5ef8394060-6352fa2a54.zip +0 -0
- package/.yarn/cache/http-cache-semantics-npm-4.1.1-1120131375-362d5ed66b.zip +0 -0
- package/.yarn/cache/ignore-npm-7.0.4-e6d7361b35-01ee59df2f.zip +0 -0
- package/.yarn/cache/index-to-position-npm-1.1.0-3704651970-16703893c7.zip +0 -0
- package/.yarn/cache/ip-address-npm-9.0.5-9fa024d42a-1ed81e0672.zip +0 -0
- package/.yarn/cache/is-arrayish-npm-0.3.2-f856180f79-81a78d518e.zip +0 -0
- package/.yarn/cache/is-generator-function-npm-1.1.0-e96e2ba973-5906ff51a8.zip +0 -0
- package/.yarn/cache/is-npm-npm-6.0.0-d8d9039032-fafe1ddc77.zip +0 -0
- package/.yarn/cache/istanbul-reports-npm-3.1.7-356486c0f4-f1faaa4684.zip +0 -0
- package/.yarn/cache/jest-diff-npm-30.0.0-3d7984567d-e17d8b5e66.zip +0 -0
- package/.yarn/cache/jest-matcher-utils-npm-30.0.0-df3cb56c58-3aa46a7d38.zip +0 -0
- package/.yarn/cache/jest-message-util-npm-30.0.0-3d72ccf669-d2585d8712.zip +0 -0
- package/.yarn/cache/jest-regex-util-npm-30.0.0-b67c1fc2bc-aa4449a029.zip +0 -0
- package/.yarn/cache/jest-util-npm-30.0.0-de14658072-55171f9010.zip +0 -0
- package/.yarn/cache/jsbn-npm-1.1.0-1da0181838-bebe7ae829.zip +0 -0
- package/.yarn/cache/jsesc-npm-3.0.2-3b3b74ec0d-8e5a7de6b7.zip +0 -0
- package/.yarn/cache/jsonfile-npm-6.1.0-20a4796cee-03014769e7.zip +0 -0
- package/.yarn/cache/jwa-npm-1.4.1-4f19d6572c-0bc002b71d.zip +0 -0
- package/.yarn/cache/jwa-npm-2.0.0-52a7c3f1ca-ab983f6685.zip +0 -0
- package/.yarn/cache/mime-db-npm-1.53.0-14fcdba2be-82409c568a.zip +0 -0
- package/.yarn/cache/minizlib-npm-3.0.1-4bdabd978f-622cb85f51.zip +0 -0
- package/.yarn/cache/mkdirp-npm-0.5.6-dcd5a6b97b-0c91b721bb.zip +0 -0
- package/.yarn/cache/mkdirp-npm-3.0.1-f94bfa769e-16fd79c286.zip +0 -0
- package/.yarn/cache/mock-json-schema-npm-1.1.1-0c1db4d1d1-3a45b85acd.zip +0 -0
- package/.yarn/cache/nanoid-npm-3.3.8-d22226208b-2d1766606c.zip +0 -0
- package/.yarn/cache/node-gyp-npm-11.1.0-bd7044e197-3314ebfeb9.zip +0 -0
- package/.yarn/cache/node-releases-npm-2.0.19-b123ed6240-c2b33b4f0c.zip +0 -0
- package/.yarn/cache/normalize-url-npm-8.0.1-c87adbf3f1-ae39203758.zip +0 -0
- package/.yarn/cache/object.entries-npm-1.1.8-386f7451b8-2301918fbd.zip +0 -0
- package/.yarn/cache/openapi-typescript-npm-7.8.0-7faf1e0691-9f0b55a91f.zip +0 -0
- package/.yarn/cache/parse5-npm-7.2.1-c48f333f28-fd1a8ad154.zip +0 -0
- package/.yarn/cache/pirates-npm-4.0.6-a8ec571a43-d02dda76f4.zip +0 -0
- package/.yarn/cache/portfinder-npm-1.0.32-20cc84ebcf-842058052f.zip +0 -0
- package/.yarn/cache/pretty-format-npm-30.0.0-d8f817d24c-3a02da797b.zip +0 -0
- package/.yarn/cache/protobufjs-npm-7.4.0-12c56a3adc-4084235066.zip +0 -0
- package/.yarn/cache/pupa-npm-3.1.0-8d0c9815fb-32784254b7.zip +0 -0
- package/.yarn/cache/regenerate-unicode-properties-npm-10.2.0-3d662e6e17-9150eae6fe.zip +0 -0
- package/.yarn/cache/regexpu-core-npm-6.2.0-56e98c3a61-4d054ffcd9.zip +0 -0
- package/.yarn/cache/regjsparser-npm-0.12.0-9d000fca30-c2d6506b33.zip +0 -0
- package/.yarn/cache/rimraf-npm-5.0.10-d0c6647697-f3b8ce81ee.zip +0 -0
- package/.yarn/cache/semver-npm-7.7.1-4572475307-4cfa1eb91e.zip +0 -0
- package/.yarn/cache/simple-swizzle-npm-0.2.2-8dee37fad1-c6dffff17a.zip +0 -0
- package/.yarn/cache/spdx-license-ids-npm-3.0.21-12f9261e85-17a033b4c3.zip +0 -0
- package/.yarn/cache/sprintf-js-npm-1.1.3-b99efd75b2-e7587128c4.zip +0 -0
- package/.yarn/cache/strip-ansi-npm-7.1.0-7453b80b79-475f53e9c4.zip +0 -0
- package/.yarn/cache/strnum-npm-1.1.1-67836fb7cf-5542ef16fd.zip +0 -0
- package/.yarn/cache/supports-color-npm-10.1.0-48517f80a7-28d191c4ad.zip +0 -0
- package/.yarn/cache/tar-npm-7.4.3-1dbbd1ffc3-12a2a4fc6d.zip +0 -0
- package/.yarn/cache/tmp-npm-0.2.3-ac2a701365-7b13696787.zip +0 -0
- package/.yarn/cache/type-fest-npm-4.40.0-18c72d1d94-dbca20979d.zip +0 -0
- package/.yarn/cache/undici-npm-6.21.3-28d9334837-b6b8f4a90e.zip +0 -0
- package/.yarn/cache/undici-types-npm-6.20.0-bd21e669af-583ac7bbf4.zip +0 -0
- package/.yarn/cache/unicode-match-property-value-ecmascript-npm-2.2.0-011b10a684-9fd53c657a.zip +0 -0
- package/.yarn/cache/unicode-property-aliases-ecmascript-npm-2.1.0-46779595f4-2435244318.zip +0 -0
- package/.yarn/cache/update-browserslist-db-npm-1.1.2-59b122fef6-e7bf8221df.zip +0 -0
- package/.yarn/cache/validator-npm-13.15.0-b048a51909-cc4435e37a.zip +0 -0
- package/.yarn/cache/which-typed-array-npm-1.1.18-23d1112113-11eed801b2.zip +0 -0
- package/.yarn/cache/yaml-npm-2.7.0-bb348b356b-c8c314c62f.zip +0 -0
- package/.yarn/cache/zod-npm-3.24.2-ab80dc0969-604c62a8cf.zip +0 -0
|
@@ -53,7 +53,7 @@ const { SDKStateEnum } = require('./lib/model/common');
|
|
|
53
53
|
const { createAuthClient } = require('./lib/utils');
|
|
54
54
|
const { logger } = require('./lib/logger');
|
|
55
55
|
|
|
56
|
-
const PING_INTERVAL_MS =
|
|
56
|
+
const PING_INTERVAL_MS = 30_000;
|
|
57
57
|
|
|
58
58
|
const createCache = (config) => new Cache({
|
|
59
59
|
logger,
|
|
@@ -81,16 +81,16 @@ class Server extends EventEmitter {
|
|
|
81
81
|
// Create shared Mojaloop agents for switch communication (used by both servers)
|
|
82
82
|
this.mojaloopSharedAgents = this._createMojaloopSharedAgents(this.conf);
|
|
83
83
|
|
|
84
|
-
this.
|
|
85
|
-
this.
|
|
86
|
-
this.emit('error', '
|
|
84
|
+
this.oidc = createAuthClient(conf, logger);
|
|
85
|
+
this.oidc.auth.on('error', (msg) => {
|
|
86
|
+
this.emit('error', 'OIDC auth error in InboundApi', msg);
|
|
87
87
|
});
|
|
88
88
|
|
|
89
89
|
this.inboundServer = new InboundServer(
|
|
90
90
|
this.conf,
|
|
91
91
|
this.logger,
|
|
92
92
|
this.cache,
|
|
93
|
-
this.
|
|
93
|
+
this.oidc,
|
|
94
94
|
this.mojaloopSharedAgents,
|
|
95
95
|
);
|
|
96
96
|
this.inboundServer.on('error', (...args) => {
|
|
@@ -103,7 +103,7 @@ class Server extends EventEmitter {
|
|
|
103
103
|
this.logger,
|
|
104
104
|
this.cache,
|
|
105
105
|
this.metricsClient,
|
|
106
|
-
this.
|
|
106
|
+
this.oidc,
|
|
107
107
|
this.mojaloopSharedAgents,
|
|
108
108
|
);
|
|
109
109
|
this.outboundServer.on('error', (...args) => {
|
|
@@ -141,7 +141,7 @@ class Server extends EventEmitter {
|
|
|
141
141
|
config: this.conf,
|
|
142
142
|
logger: this.logger,
|
|
143
143
|
cache: this.cache,
|
|
144
|
-
|
|
144
|
+
oidc: this.oidc,
|
|
145
145
|
});
|
|
146
146
|
}
|
|
147
147
|
}
|
|
@@ -203,9 +203,74 @@ class Server extends EventEmitter {
|
|
|
203
203
|
return isOutboundDifferent || isJwsSigningKeyDifferent;
|
|
204
204
|
}
|
|
205
205
|
|
|
206
|
+
/**
|
|
207
|
+
* Starts periodic polling of Management API for configuration updates.
|
|
208
|
+
* Only runs if PM4ML enabled and a polling interval configured.
|
|
209
|
+
*/
|
|
210
|
+
_startConfigPolling() {
|
|
211
|
+
if (!this.conf.pm4mlEnabled || !this.conf.control.mgmtAPIPollIntervalMs) {
|
|
212
|
+
this.logger.info('No failsafe config polling configured');
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
this.logger.info('starting failsafe config polling from Management API...', { intervalMs: this.conf.control.mgmtAPIPollIntervalMs });
|
|
217
|
+
|
|
218
|
+
this._configPollInterval = setInterval(
|
|
219
|
+
() => this._pollConfigFromMgmtAPI(),
|
|
220
|
+
this.conf.control.mgmtAPIPollIntervalMs
|
|
221
|
+
);
|
|
222
|
+
|
|
223
|
+
// Unref so it doesn't prevent process exit
|
|
224
|
+
this._configPollInterval.unref();
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
/**
|
|
228
|
+
* Polls Management API for configuration updates.
|
|
229
|
+
* Reuses the existing persistent WebSocket client (this.controlClient).
|
|
230
|
+
* Skips polling if:
|
|
231
|
+
* - Another config update is in progress
|
|
232
|
+
* - WebSocket client is not connected
|
|
233
|
+
*/
|
|
234
|
+
async _pollConfigFromMgmtAPI() {
|
|
235
|
+
// Race condition prevention: skip if restart in progress
|
|
236
|
+
if (this._configUpdateInProgress) {
|
|
237
|
+
this.logger.info('config updating already in progress, skipping poll');
|
|
238
|
+
return;
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
// WebSocket readyState: 0=CONNECTING, 1=OPEN, 2=CLOSING, 3=CLOSED
|
|
242
|
+
if (this.controlClient?.readyState !== 1) {
|
|
243
|
+
this.logger.warn('Control client not ready (not OPEN), skipping poll', { readyState: this.controlClient?.readyState });
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
try {
|
|
248
|
+
const newConfig = await this.controlClient.getUpdatedConfig();
|
|
249
|
+
if (!newConfig) {
|
|
250
|
+
this.logger.warn('No config received from polling');
|
|
251
|
+
return;
|
|
252
|
+
}
|
|
253
|
+
this.logger.info('polling config from Management API is done, restarting server...');
|
|
254
|
+
|
|
255
|
+
const mergedConfig = _.merge({}, this.conf, newConfig);
|
|
256
|
+
await this.restart(mergedConfig, { source: 'polling' });
|
|
257
|
+
} catch (err) {
|
|
258
|
+
this.logger.error('error in polling config from Management API: ', err);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
/** Stops the config polling interval. */
|
|
263
|
+
_stopConfigPolling() {
|
|
264
|
+
if (this._configPollInterval) {
|
|
265
|
+
this.logger.verbose('stopping config polling');
|
|
266
|
+
clearInterval(this._configPollInterval);
|
|
267
|
+
this._configPollInterval = null;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
|
|
206
271
|
async start() {
|
|
207
272
|
await this.cache.connect();
|
|
208
|
-
await this.
|
|
273
|
+
await this.oidc.auth.start();
|
|
209
274
|
|
|
210
275
|
// We only start the control client if we're running within Mojaloop Payment Manager.
|
|
211
276
|
// The control server is the Payment Manager Management API Service.
|
|
@@ -213,12 +278,7 @@ class Server extends EventEmitter {
|
|
|
213
278
|
// management protocol messages e.g configuration changes, certificate updates etc.
|
|
214
279
|
if (this.conf.pm4mlEnabled) {
|
|
215
280
|
const RESTART_INTERVAL_MS = 10000;
|
|
216
|
-
this.controlClient = await ControlAgent.
|
|
217
|
-
address: this.conf.control.mgmtAPIWsUrl,
|
|
218
|
-
port: this.conf.control.mgmtAPIWsPort,
|
|
219
|
-
logger: this.logger,
|
|
220
|
-
appConfig: this.conf,
|
|
221
|
-
});
|
|
281
|
+
this.controlClient = await ControlAgent.createConnectedControlAgentWs(this.conf, this.logger);
|
|
222
282
|
this.controlClient.on(ControlAgent.EVENT.RECONFIGURE, this.restart.bind(this));
|
|
223
283
|
|
|
224
284
|
const schedulePing = () => {
|
|
@@ -247,6 +307,7 @@ class Server extends EventEmitter {
|
|
|
247
307
|
});
|
|
248
308
|
|
|
249
309
|
schedulePing();
|
|
310
|
+
this._startConfigPolling();
|
|
250
311
|
}
|
|
251
312
|
|
|
252
313
|
await Promise.all([
|
|
@@ -260,202 +321,212 @@ class Server extends EventEmitter {
|
|
|
260
321
|
]);
|
|
261
322
|
}
|
|
262
323
|
|
|
263
|
-
async restart(newConf) {
|
|
324
|
+
async restart(newConf, options = {}) {
|
|
325
|
+
const source = options.source || 'websocket'; // Track source of restart call - websocket or polling
|
|
326
|
+
|
|
327
|
+
// Race condition prevention
|
|
328
|
+
if (this._configUpdateInProgress) {
|
|
329
|
+
this.logger.info('Restart already in progress, skipping', { source });
|
|
330
|
+
return;
|
|
331
|
+
}
|
|
332
|
+
|
|
264
333
|
const restartActionsTaken = {};
|
|
265
|
-
this.logger.
|
|
334
|
+
this.logger.debug('Server is restarting...', { source });
|
|
335
|
+
this._configUpdateInProgress = true;
|
|
266
336
|
|
|
267
|
-
|
|
268
|
-
|
|
337
|
+
try {
|
|
338
|
+
let oldCache;
|
|
339
|
+
const updateCache = !_.isEqual(this.conf.cacheUrl, newConf.cacheUrl)
|
|
269
340
|
|| !_.isEqual(this.conf.enableTestFeatures, newConf.enableTestFeatures);
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
341
|
+
if (updateCache) {
|
|
342
|
+
oldCache = this.cache;
|
|
343
|
+
await this.cache.disconnect();
|
|
344
|
+
this.cache = createCache(newConf);
|
|
345
|
+
await this.cache.connect();
|
|
346
|
+
restartActionsTaken.updateCache = true;
|
|
347
|
+
}
|
|
277
348
|
|
|
278
|
-
|
|
349
|
+
const updateOIDC = !_.isEqual(this.conf.oidc, newConf.oidc)
|
|
279
350
|
|| !_.isEqual(this.conf.outbound.tls, newConf.outbound.tls);
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
351
|
+
if (updateOIDC) {
|
|
352
|
+
this.oidc.auth.stop();
|
|
353
|
+
this.oidc = createAuthClient(newConf, this.logger);
|
|
354
|
+
this.oidc.auth.on('error', (msg) => {
|
|
355
|
+
this.emit('error', 'OIDC auth error in InboundApi', msg);
|
|
356
|
+
});
|
|
357
|
+
await this.oidc.auth.start();
|
|
358
|
+
restartActionsTaken.updateOIDC = true;
|
|
359
|
+
}
|
|
289
360
|
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
361
|
+
this.logger.isDebugEnabled && this.logger.push({ oldConf: this.conf.inbound, newConf: newConf.inbound }).debug('Inbound server configuration');
|
|
362
|
+
const updateInboundServer = this._shouldUpdateInboundServer(newConf);
|
|
363
|
+
if (updateInboundServer) {
|
|
364
|
+
const stopStartLabel = 'InboundServer stop/start duration';
|
|
365
|
+
// eslint-disable-next-line no-console
|
|
366
|
+
console.time(stopStartLabel); // todo: remove console.time
|
|
367
|
+
await this.inboundServer.stop();
|
|
368
|
+
|
|
369
|
+
this.mojaloopSharedAgents = this._createMojaloopSharedAgents(newConf);
|
|
370
|
+
this.inboundServer = new InboundServer(
|
|
371
|
+
newConf,
|
|
372
|
+
this.logger,
|
|
373
|
+
this.cache,
|
|
374
|
+
this.oidc,
|
|
375
|
+
this.mojaloopSharedAgents,
|
|
376
|
+
);
|
|
377
|
+
this.inboundServer.on('error', (...args) => {
|
|
378
|
+
const errMessage = 'Unhandled error in Inbound Server';
|
|
379
|
+
this.logger.push({ args }).error(errMessage);
|
|
380
|
+
this.emit('error', errMessage);
|
|
381
|
+
});
|
|
382
|
+
await this.inboundServer.start();
|
|
383
|
+
// eslint-disable-next-line no-console
|
|
384
|
+
console.timeEnd(stopStartLabel);
|
|
385
|
+
restartActionsTaken.updateInboundServer = true;
|
|
386
|
+
}
|
|
316
387
|
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
388
|
+
this.logger.isDebugEnabled && this.logger.push({ oldConf: this.conf.outbound, newConf: newConf.outbound }).debug('Outbound server configuration');
|
|
389
|
+
const updateOutboundServer = this._shouldUpdateOutboundServer(newConf);
|
|
390
|
+
if (updateOutboundServer) {
|
|
391
|
+
const stopStartLabel = 'OutboundServer stop/start duration';
|
|
392
|
+
// eslint-disable-next-line no-console
|
|
393
|
+
console.time(stopStartLabel);
|
|
394
|
+
await this.outboundServer.stop();
|
|
395
|
+
|
|
396
|
+
this.mojaloopSharedAgents = this._createMojaloopSharedAgents(newConf);
|
|
397
|
+
this.outboundServer = new OutboundServer(
|
|
398
|
+
newConf,
|
|
399
|
+
this.logger,
|
|
400
|
+
this.cache,
|
|
401
|
+
this.metricsClient,
|
|
402
|
+
this.oidc,
|
|
403
|
+
this.mojaloopSharedAgents,
|
|
404
|
+
);
|
|
405
|
+
this.outboundServer.on('error', (...args) => {
|
|
406
|
+
const errMessage = 'Unhandled error in Outbound Server';
|
|
407
|
+
this.logger.push({ args }).error(errMessage);
|
|
408
|
+
this.emit('error', errMessage);
|
|
409
|
+
});
|
|
410
|
+
await this.outboundServer.start();
|
|
411
|
+
// eslint-disable-next-line no-console
|
|
412
|
+
console.timeEnd(stopStartLabel);
|
|
413
|
+
restartActionsTaken.updateOutboundServer = true;
|
|
414
|
+
}
|
|
344
415
|
|
|
345
|
-
|
|
416
|
+
const updateFspiopEventHandler = !_.isEqual(this.conf.outbound, newConf.outbound)
|
|
346
417
|
&& this.conf.fspiopEventHandler.enabled;
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
logger: this.logger,
|
|
352
|
-
cache: this.cache,
|
|
353
|
-
wso2: this.wso2,
|
|
354
|
-
});
|
|
355
|
-
await this.fspiopEventHandler.start();
|
|
356
|
-
restartActionsTaken.updateFspiopEventHandler = true;
|
|
357
|
-
}
|
|
358
|
-
|
|
359
|
-
const updateControlClient = !_.isEqual(this.conf.control, newConf.control);
|
|
360
|
-
if (updateControlClient) {
|
|
361
|
-
await this.controlClient?.stop();
|
|
362
|
-
if (this.conf.pm4mlEnabled) {
|
|
363
|
-
const RESTART_INTERVAL_MS = 10000;
|
|
364
|
-
|
|
365
|
-
const schedulePing = () => {
|
|
366
|
-
clearTimeout(this.pingTimeout);
|
|
367
|
-
this.pingTimeout = setTimeout(() => {
|
|
368
|
-
this.logger.error('Ping timeout, possible broken connection. Restarting server...');
|
|
369
|
-
this.restart(_.merge({}, newConf, {
|
|
370
|
-
control: { stopped: Date.now() }
|
|
371
|
-
}));
|
|
372
|
-
}, PING_INTERVAL_MS + this.conf.control.mgmtAPILatencyAssumption);
|
|
373
|
-
};
|
|
374
|
-
|
|
375
|
-
schedulePing();
|
|
376
|
-
|
|
377
|
-
this.controlClient = await ControlAgent.Client.Create({
|
|
378
|
-
address: newConf.control.mgmtAPIWsUrl,
|
|
379
|
-
port: newConf.control.mgmtAPIWsPort,
|
|
418
|
+
if (updateFspiopEventHandler) {
|
|
419
|
+
await this.fspiopEventHandler.stop();
|
|
420
|
+
this.fspiopEventHandler = new FSPIOPEventHandler({
|
|
421
|
+
config: newConf,
|
|
380
422
|
logger: this.logger,
|
|
381
|
-
|
|
423
|
+
cache: this.cache,
|
|
424
|
+
oidc: this.oidc,
|
|
382
425
|
});
|
|
383
|
-
|
|
384
|
-
|
|
426
|
+
await this.fspiopEventHandler.start();
|
|
427
|
+
restartActionsTaken.updateFspiopEventHandler = true;
|
|
428
|
+
}
|
|
385
429
|
|
|
430
|
+
const updateControlClient = !_.isEqual(this.conf.control, newConf.control);
|
|
431
|
+
if (updateControlClient) {
|
|
432
|
+
await this.controlClient?.stop();
|
|
433
|
+
if (this.conf.pm4mlEnabled) {
|
|
434
|
+
const RESTART_INTERVAL_MS = 10000;
|
|
435
|
+
|
|
436
|
+
const schedulePing = () => {
|
|
437
|
+
clearTimeout(this.pingTimeout);
|
|
438
|
+
this.pingTimeout = setTimeout(() => {
|
|
439
|
+
this.logger.error('Ping timeout, possible broken connection. Restarting server...');
|
|
440
|
+
this.restart(_.merge({}, newConf, {
|
|
441
|
+
control: { stopped: Date.now() }
|
|
442
|
+
}));
|
|
443
|
+
}, PING_INTERVAL_MS + this.conf.control.mgmtAPILatencyAssumption);
|
|
444
|
+
};
|
|
386
445
|
|
|
387
|
-
this.controlClient.on('ping', () => {
|
|
388
|
-
this.logger.debug('Received ping from control server');
|
|
389
446
|
schedulePing();
|
|
390
|
-
});
|
|
391
447
|
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
this.
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
448
|
+
this.controlClient = await ControlAgent.createConnectedControlAgentWs(newConf, this.logger);
|
|
449
|
+
this.controlClient.on(ControlAgent.EVENT.RECONFIGURE, this.restart.bind(this));
|
|
450
|
+
|
|
451
|
+
this.controlClient.on('ping', () => {
|
|
452
|
+
this.logger.debug('Received ping from control server');
|
|
453
|
+
schedulePing();
|
|
454
|
+
});
|
|
455
|
+
|
|
456
|
+
this.controlClient.on('close', () => {
|
|
457
|
+
clearTimeout(this.pingTimeout);
|
|
458
|
+
setTimeout(() => {
|
|
459
|
+
this.logger.debug('Control client closed. Restarting server...');
|
|
460
|
+
this.restart(_.merge({}, newConf, {
|
|
461
|
+
control: { stopped: Date.now() }
|
|
462
|
+
}));
|
|
463
|
+
}, RESTART_INTERVAL_MS);
|
|
464
|
+
});
|
|
465
|
+
|
|
466
|
+
restartActionsTaken.updateControlClient = true;
|
|
467
|
+
}
|
|
403
468
|
}
|
|
404
|
-
}
|
|
405
469
|
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
470
|
+
const updateOAuthTestServer = !_.isEqual(newConf.oauthTestServer, this.conf.oauthTestServer);
|
|
471
|
+
if (updateOAuthTestServer) {
|
|
472
|
+
await this.oauthTestServer?.stop();
|
|
473
|
+
if (this.conf.oauthTestServer.enabled) {
|
|
474
|
+
this.oauthTestServer = new OAuthTestServer({
|
|
475
|
+
clientKey: newConf.oauthTestServer.clientKey,
|
|
476
|
+
clientSecret: newConf.oauthTestServer.clientSecret,
|
|
477
|
+
port: newConf.oauthTestServer.listenPort,
|
|
478
|
+
logger: this.logger,
|
|
479
|
+
});
|
|
480
|
+
await this.oauthTestServer.start();
|
|
481
|
+
restartActionsTaken.updateOAuthTestServer = true;
|
|
482
|
+
}
|
|
418
483
|
}
|
|
419
|
-
}
|
|
420
484
|
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
485
|
+
const updateTestServer = !_.isEqual(newConf.test.port, this.conf.test.port);
|
|
486
|
+
if (updateTestServer) {
|
|
487
|
+
await this.testServer?.stop();
|
|
488
|
+
if (this.conf.enableTestFeatures) {
|
|
489
|
+
this.testServer = new TestServer({
|
|
490
|
+
port: newConf.test.port,
|
|
491
|
+
logger: this.logger,
|
|
492
|
+
cache: this.cache,
|
|
493
|
+
});
|
|
494
|
+
await this.testServer.start();
|
|
495
|
+
restartActionsTaken.updateTestServer = true;
|
|
496
|
+
}
|
|
432
497
|
}
|
|
433
|
-
}
|
|
434
498
|
|
|
435
|
-
|
|
499
|
+
this.conf = newConf;
|
|
436
500
|
|
|
437
|
-
|
|
501
|
+
await oldCache?.disconnect();
|
|
438
502
|
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
503
|
+
if (Object.keys(restartActionsTaken).length > 0) {
|
|
504
|
+
this.logger.info('Server is restarted', { restartActionsTaken, source });
|
|
505
|
+
} else {
|
|
506
|
+
this.logger.verbose('Server not restarted, no config changes detected', { source });
|
|
507
|
+
}
|
|
508
|
+
} catch (err) {
|
|
509
|
+
this.logger.error('error in Server restart: ', err);
|
|
510
|
+
} finally {
|
|
511
|
+
this._configUpdateInProgress = false;
|
|
443
512
|
}
|
|
444
513
|
}
|
|
445
514
|
|
|
446
515
|
stop() {
|
|
516
|
+
this._stopConfigPolling();
|
|
517
|
+
|
|
447
518
|
clearTimeout(this.pingTimeout);
|
|
448
|
-
this.
|
|
519
|
+
this.oidc.auth.stop();
|
|
449
520
|
this.controlClient?.removeAllListeners();
|
|
450
521
|
this.inboundServer.removeAllListeners();
|
|
451
522
|
return Promise.all([
|
|
452
523
|
this.cache.disconnect(),
|
|
453
524
|
this.inboundServer.stop(),
|
|
454
525
|
this.outboundServer.stop(),
|
|
526
|
+
this.metricsServer.stop(),
|
|
455
527
|
this.oauthTestServer?.stop(),
|
|
456
528
|
this.testServer?.stop(),
|
|
457
529
|
this.controlClient?.stop(),
|
|
458
|
-
this.metricsServer.stop(),
|
|
459
530
|
this.backendEventHandler?.stop(),
|
|
460
531
|
this.fspiopEventHandler?.stop(),
|
|
461
532
|
]);
|
|
@@ -493,35 +564,19 @@ class Server extends EventEmitter {
|
|
|
493
564
|
}
|
|
494
565
|
}
|
|
495
566
|
|
|
496
|
-
/*
|
|
497
|
-
* Call the Connector Manager in Management API to get the updated config
|
|
498
|
-
*/
|
|
499
|
-
async function _GetUpdatedConfigFromMgmtAPI(conf, logger, client) {
|
|
500
|
-
logger.isInfoEnabled && logger.info(`Getting updated config from Management API at ${conf.control.mgmtAPIWsUrl}:${conf.control.mgmtAPIWsPort}...`);
|
|
501
|
-
const clientSendResponse = await client.send(ControlAgent.build.CONFIGURATION.READ());
|
|
502
|
-
logger.isDebugEnabled && logger.debug('client send returned:: ', clientSendResponse);
|
|
503
|
-
const responseRead = await client.receive();
|
|
504
|
-
logger.isDebugEnabled && logger.debug('client receive returned:: ', responseRead);
|
|
505
|
-
return responseRead.data;
|
|
506
|
-
}
|
|
507
|
-
|
|
508
567
|
async function start(config) {
|
|
509
568
|
if (config.pm4mlEnabled) {
|
|
510
|
-
const controlClient = await ControlAgent.
|
|
511
|
-
|
|
512
|
-
address: config.control.mgmtAPIWsUrl,
|
|
513
|
-
port: config.control.mgmtAPIWsPort,
|
|
514
|
-
logger,
|
|
515
|
-
});
|
|
516
|
-
const updatedConfigFromMgmtAPI = await _GetUpdatedConfigFromMgmtAPI(config, logger, controlClient);
|
|
517
|
-
logger.isInfoEnabled && logger.push({ updatedConfigFromMgmtAPIKeys: Object.keys(updatedConfigFromMgmtAPI) }).info('updatedConfigFromMgmtAPI keys:');
|
|
569
|
+
const controlClient = await ControlAgent.createConnectedControlAgentWs(config, logger);
|
|
570
|
+
const updatedConfigFromMgmtAPI = await controlClient.getUpdatedConfig();
|
|
518
571
|
_.merge(config, updatedConfigFromMgmtAPI);
|
|
519
572
|
controlClient.terminate();
|
|
573
|
+
// todo: - clarify, why do we need to terminate the client? (use .stop() method?)
|
|
574
|
+
// - can we use persistent ws controlClient from Server? (why do we need to establish a brand new ws connection here?)
|
|
520
575
|
}
|
|
521
576
|
|
|
522
577
|
const svr = new Server(config, logger);
|
|
523
578
|
svr.on('error', (err) => {
|
|
524
|
-
logger.
|
|
579
|
+
logger.error('Unhandled server error: ', err);
|
|
525
580
|
process.exit(2);
|
|
526
581
|
});
|
|
527
582
|
|
|
@@ -533,11 +588,11 @@ async function start(config) {
|
|
|
533
588
|
});
|
|
534
589
|
|
|
535
590
|
await svr.start().catch(err => {
|
|
536
|
-
logger.
|
|
591
|
+
logger.error('Error starting server: ', err);
|
|
537
592
|
process.exit(1);
|
|
538
593
|
});
|
|
539
594
|
|
|
540
|
-
logger.info('SDK server is started
|
|
595
|
+
logger.info('SDK server is started', { name, version });
|
|
541
596
|
}
|
|
542
597
|
|
|
543
598
|
if (require.main === module) {
|
|
@@ -98,7 +98,9 @@ class Cache {
|
|
|
98
98
|
break;
|
|
99
99
|
}
|
|
100
100
|
this._connectionState = CONN_ST.CONNECTING;
|
|
101
|
-
this._inProgressConnection = Promise.all([
|
|
101
|
+
this._inProgressConnection = Promise.all([
|
|
102
|
+
this._getClient(), this._getClient()
|
|
103
|
+
]);
|
|
102
104
|
[this._client, this._subscriptionClient] = await this._inProgressConnection;
|
|
103
105
|
|
|
104
106
|
if (this._config.enableTestFeatures) {
|
|
@@ -201,7 +203,7 @@ class Cache {
|
|
|
201
203
|
|
|
202
204
|
/**
|
|
203
205
|
* Subscribes to a channel and waits for a single message with timeout support.
|
|
204
|
-
*
|
|
206
|
+
*
|
|
205
207
|
* NOTE:
|
|
206
208
|
* This implementation uses EventEmitter to handle Redis pub/sub concurrency issues
|
|
207
209
|
* that occur when multiple subscribers listen to the same channel simultaneously.
|
|
@@ -267,7 +269,7 @@ class Cache {
|
|
|
267
269
|
isResolved = true;
|
|
268
270
|
|
|
269
271
|
this._logger.push({ channel, needParse }).debug('Received message on subscribed channel');
|
|
270
|
-
|
|
272
|
+
|
|
271
273
|
cleanup();
|
|
272
274
|
|
|
273
275
|
try {
|
|
@@ -285,7 +287,7 @@ class Cache {
|
|
|
285
287
|
// Subscribe to Redis channel
|
|
286
288
|
this._subscriptionClient.subscribe(channel, (msg) => {
|
|
287
289
|
this._channelEmitter.emit(channel, msg);
|
|
288
|
-
|
|
290
|
+
|
|
289
291
|
// Auto-unsubscribe if no more listeners
|
|
290
292
|
unsubscribeFromRedis('auto-cleanup').catch(err => {
|
|
291
293
|
this._logger.push({ channel }).warn('Auto-unsubscribe failed', err);
|
|
@@ -386,8 +388,9 @@ class Cache {
|
|
|
386
388
|
} else {
|
|
387
389
|
// we should not be asked to unsubscribe from a subscription we do not have. Raise this as a promise
|
|
388
390
|
// rejection so it can be spotted. It may indicate a logic bug somewhere else
|
|
389
|
-
|
|
390
|
-
|
|
391
|
+
const errMessage = `Cache not subscribed to channel ${channel} for callbackId ${callbackId}`;
|
|
392
|
+
this._logger.error(errMessage);
|
|
393
|
+
throw new Error(errMessage);
|
|
391
394
|
}
|
|
392
395
|
}
|
|
393
396
|
|
|
@@ -395,7 +398,7 @@ class Cache {
|
|
|
395
398
|
if (channelKey && typeof subId === 'number') {
|
|
396
399
|
return this.unsubscribe(channelKey, subId)
|
|
397
400
|
.catch(err => {
|
|
398
|
-
this._logger.
|
|
401
|
+
this._logger.warn(`Unsubscribing cache error [${channelKey} ${subId}]: `, err);
|
|
399
402
|
});
|
|
400
403
|
}
|
|
401
404
|
}
|
|
@@ -413,11 +416,11 @@ class Cache {
|
|
|
413
416
|
const client = redis.createClient({ url: this._url });
|
|
414
417
|
|
|
415
418
|
client.on('error', (err) => {
|
|
416
|
-
this._logger.
|
|
419
|
+
this._logger.error('Error from REDIS client getting subscriber: ', err);
|
|
417
420
|
});
|
|
418
421
|
|
|
419
|
-
client.on('reconnecting', (
|
|
420
|
-
this._logger.
|
|
422
|
+
client.on('reconnecting', () => {
|
|
423
|
+
this._logger.verbose('REDIS client reconnecting...');
|
|
421
424
|
});
|
|
422
425
|
|
|
423
426
|
client.on('subscribe', (channel, count) => {
|
|
@@ -431,11 +434,11 @@ class Cache {
|
|
|
431
434
|
});
|
|
432
435
|
|
|
433
436
|
client.on('connect', () => {
|
|
434
|
-
this._logger.
|
|
437
|
+
this._logger.verbose(`REDIS client connected at: ${this._url}`);
|
|
435
438
|
});
|
|
436
439
|
|
|
437
440
|
client.on('ready', () => {
|
|
438
|
-
this._logger.
|
|
441
|
+
this._logger.info('REDIS client is ready');
|
|
439
442
|
});
|
|
440
443
|
await client.connect();
|
|
441
444
|
|