@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.
Files changed (430) hide show
  1. package/.grype.yaml +5 -2
  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
  3. 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
  4. 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
  5. 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
  6. 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
  7. 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
  8. 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
  9. 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
  10. package/.yarn/cache/@babel-plugin-transform-regenerator-npm-7.28.4-13f2152eb3-24da51a659.zip +0 -0
  11. package/.yarn/cache/{@dabh-diagnostics-npm-2.0.3-0f2cd64f24-14e449a7f4.zip → @dabh-diagnostics-npm-2.0.8-15e79eab9c-ac2267a4ee.zip} +0 -0
  12. package/.yarn/cache/@eslint-community-eslint-utils-npm-4.9.0-fe45a08548-89b1eb3137.zip +0 -0
  13. package/.yarn/cache/@eslint-compat-npm-1.4.0-2352faedcd-204f80bfde.zip +0 -0
  14. package/.yarn/cache/@eslint-core-npm-0.13.0-53447b33b9-737fd1c237.zip +0 -0
  15. package/.yarn/cache/@eslint-core-npm-0.16.0-ceefcac859-3cea45971b.zip +0 -0
  16. package/.yarn/cache/{@eslint-eslintrc-npm-3.3.0-72b2f21ce8-f17d232fc4.zip → @eslint-eslintrc-npm-3.3.1-c3967fc0c3-cc240addba.zip} +0 -0
  17. 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
  18. package/.yarn/cache/@grpc-grpc-js-npm-1.14.0-23f158f5eb-e1f7d15dde.zip +0 -0
  19. package/.yarn/cache/@hapi-teamwork-npm-6.0.1-fd291504d2-1f83fe93c7.zip +0 -0
  20. package/.yarn/cache/@hapi-tlds-npm-1.1.3-cc5bc7f0cc-4e1a3fcec7.zip +0 -0
  21. package/.yarn/cache/{@humanfs-node-npm-0.16.6-6ee2cad587-6d43c67274.zip → @humanfs-node-npm-0.16.7-fa16bdb590-b3633d3dce.zip} +0 -0
  22. package/.yarn/cache/@humanwhocodes-retry-npm-0.4.3-a8d7ca1663-0b32cfd362.zip +0 -0
  23. package/.yarn/cache/{@ioredis-commands-npm-1.2.0-47541de88b-a8253c9539.zip → @ioredis-commands-npm-1.4.0-3a627ac2f0-ea299f2205.zip} +0 -0
  24. 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
  25. 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
  26. package/.yarn/cache/@jest-get-type-npm-30.1.0-1ad604ab7f-e2a95fbb49.zip +0 -0
  27. package/.yarn/cache/@jest-transform-npm-30.2.0-e241ad53a4-c75d72d524.zip +0 -0
  28. package/.yarn/cache/@jest-types-npm-30.2.0-5ae4869189-f50fcaea56.zip +0 -0
  29. 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
  30. 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
  31. package/.yarn/cache/@jridgewell-trace-mapping-npm-0.3.31-1ae81d75ac-da0283270e.zip +0 -0
  32. 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
  33. 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
  34. 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
  35. 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
  36. package/.yarn/cache/@mojaloop-inter-scheme-proxy-cache-lib-npm-2.9.0-cb33cd6786-fd3f20e6a7.zip +0 -0
  37. package/.yarn/cache/@mojaloop-ml-number-npm-11.4.0-14b3424a94-f6e9fde53e.zip +0 -0
  38. package/.yarn/cache/@mojaloop-platform-shared-lib-nodejs-kafka-client-lib-npm-0.5.20-dc351718a9-e944d3f943.zip +0 -0
  39. 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
  40. package/.yarn/cache/{@redis-bloom-npm-5.8.2-1972c61f30-99ec4f127b.zip → @redis-bloom-npm-5.8.3-892faaab15-031bfb7d85.zip} +0 -0
  41. package/.yarn/cache/{@redis-client-npm-5.8.2-68c2d31768-653ba2d0ef.zip → @redis-client-npm-5.8.3-acc7573cc3-402e5f4520.zip} +0 -0
  42. package/.yarn/cache/{@redis-json-npm-5.8.2-99129c657f-2877cd93b7.zip → @redis-json-npm-5.8.3-bbddd9239e-fc81b7e638.zip} +0 -0
  43. package/.yarn/cache/{@redis-search-npm-5.8.2-c7014522ef-6cc0499a11.zip → @redis-search-npm-5.8.3-07f03dcedf-74c4ef9d3f.zip} +0 -0
  44. 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
  45. package/.yarn/cache/{@redocly-ajv-npm-8.11.2-edb76e81a5-75d6d8bcc2.zip → @redocly-ajv-npm-8.11.3-90d671b655-da5946f032.zip} +0 -0
  46. package/.yarn/cache/{@sinclair-typebox-npm-0.34.35-4698edbad1-4b50006c80.zip → @sinclair-typebox-npm-0.34.41-602ecca817-5c04a7f421.zip} +0 -0
  47. package/.yarn/cache/@so-ric-colorspace-npm-1.1.6-4fa5d728ca-fc3285e5cb.zip +0 -0
  48. 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
  49. package/.yarn/cache/@types-babel__traverse-npm-7.28.0-44a48c1b20-371c5e1b40.zip +0 -0
  50. package/.yarn/cache/@types-body-parser-npm-1.19.6-363c879d4f-33041e88ea.zip +0 -0
  51. package/.yarn/cache/@types-content-disposition-npm-0.5.9-0a4389ae4e-d895703c00.zip +0 -0
  52. package/.yarn/cache/@types-cookies-npm-0.9.1-d956f351a3-512635d55e.zip +0 -0
  53. package/.yarn/cache/@types-estree-npm-1.0.8-2195bac6d6-25a4c16a67.zip +0 -0
  54. package/.yarn/cache/@types-express-serve-static-core-npm-5.0.7-4a816a369e-74c69797f8.zip +0 -0
  55. package/.yarn/cache/@types-http-errors-npm-2.0.5-fc57abf6db-a88da66936.zip +0 -0
  56. package/.yarn/cache/@types-koa-npm-3.0.0-8807854f00-db461810b7.zip +0 -0
  57. package/.yarn/cache/{@types-lodash-npm-4.17.15-0a7d38c4ec-27b348b597.zip → @types-lodash-npm-4.17.20-d7ed6ac7af-8cd8ad3bd7.zip} +0 -0
  58. package/.yarn/cache/{@types-node-npm-24.5.2-7697d08520-a497aea88a.zip → @types-node-npm-24.6.2-22876fbd21-8d1e64b37a.zip} +0 -0
  59. package/.yarn/cache/@types-node-npm-24.7.0-fa253cad8d-db0b77e9b1.zip +0 -0
  60. package/.yarn/cache/@types-qs-npm-6.14.0-e27d9ca044-1909205514.zip +0 -0
  61. package/.yarn/cache/@types-semver-npm-7.7.1-1a46d6e2dd-8f09e7e6ca.zip +0 -0
  62. package/.yarn/cache/{@types-send-npm-0.17.4-9d7c55577f-28320a2aa1.zip → @types-send-npm-0.17.5-5278cc54b0-b68ae8f9ba.zip} +0 -0
  63. 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
  64. 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
  65. package/.yarn/cache/@typescript-eslint-eslint-plugin-npm-8.46.0-e6114965b4-415afd894a.zip +0 -0
  66. package/.yarn/cache/@typescript-eslint-parser-npm-8.45.0-9132cc3400-4f8b7c73ae.zip +0 -0
  67. package/.yarn/cache/@typescript-eslint-parser-npm-8.46.0-c44629050a-6838fde776.zip +0 -0
  68. package/.yarn/cache/@typescript-eslint-project-service-npm-8.45.0-a8f5eebf6e-919c8260da.zip +0 -0
  69. package/.yarn/cache/@typescript-eslint-project-service-npm-8.46.0-85a4b9bb9c-de11af23ae.zip +0 -0
  70. package/.yarn/cache/@typescript-eslint-scope-manager-npm-8.45.0-ee984aba27-e45d63a010.zip +0 -0
  71. package/.yarn/cache/@typescript-eslint-scope-manager-npm-8.46.0-fd8edaba78-ed85abd08c.zip +0 -0
  72. package/.yarn/cache/@typescript-eslint-tsconfig-utils-npm-8.45.0-c8d2a74220-91696bbc34.zip +0 -0
  73. package/.yarn/cache/@typescript-eslint-tsconfig-utils-npm-8.46.0-8919c1f746-e78a66a854.zip +0 -0
  74. 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
  75. package/.yarn/cache/@typescript-eslint-type-utils-npm-8.46.0-dbfff922bb-5405b71b91.zip +0 -0
  76. package/.yarn/cache/@typescript-eslint-types-npm-8.45.0-48b82801f4-889ded2b9b.zip +0 -0
  77. package/.yarn/cache/@typescript-eslint-types-npm-8.46.0-b013400d3e-0118b0dd59.zip +0 -0
  78. package/.yarn/cache/@typescript-eslint-typescript-estree-npm-8.45.0-e7f29f17ac-2fb4e63ad6.zip +0 -0
  79. package/.yarn/cache/@typescript-eslint-typescript-estree-npm-8.46.0-0b10d4388a-61053bd0c3.zip +0 -0
  80. package/.yarn/cache/@typescript-eslint-utils-npm-8.45.0-ae9cdb989e-9e675a0da4.zip +0 -0
  81. package/.yarn/cache/@typescript-eslint-utils-npm-8.46.0-a7d3832f43-4e0da60de3.zip +0 -0
  82. 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
  83. 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
  84. package/.yarn/cache/abbrev-npm-3.0.1-a34d600e50-ebd2c149dd.zip +0 -0
  85. package/.yarn/cache/acorn-npm-8.15.0-0764cf600e-77f2de5051.zip +0 -0
  86. package/.yarn/cache/agent-base-npm-7.1.4-cb8b4604d5-79bef16724.zip +0 -0
  87. package/.yarn/cache/ansi-regex-npm-6.2.2-f2d6691eb1-9b17ce2c6d.zip +0 -0
  88. package/.yarn/cache/ansi-styles-npm-6.2.3-6fc7ca2bf5-c49dad7639.zip +0 -0
  89. package/.yarn/cache/{aproba-npm-2.0.0-8716bcfde6-c2b9a63129.zip → aproba-npm-2.1.0-6cb03e605b-cb0e335ac3.zip} +0 -0
  90. package/.yarn/cache/async-generator-function-npm-1.0.0-14cf981d13-3d49e7acbe.zip +0 -0
  91. package/.yarn/cache/babel-jest-npm-30.2.0-c2df62d909-4c7351a366.zip +0 -0
  92. package/.yarn/cache/babel-plugin-istanbul-npm-7.0.1-4d31ae2722-fe9f865f97.zip +0 -0
  93. package/.yarn/cache/babel-plugin-jest-hoist-npm-30.2.0-6573d8bab9-360e87a9aa.zip +0 -0
  94. 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
  95. package/.yarn/cache/babel-preset-jest-npm-30.2.0-5a82b08b87-f75e155a8c.zip +0 -0
  96. package/.yarn/cache/baseline-browser-mapping-npm-2.8.11-ec62cbaabe-2325115f1c.zip +0 -0
  97. package/.yarn/cache/browserslist-npm-4.26.3-a3d5d315b1-49add06fd7.zip +0 -0
  98. package/.yarn/cache/caniuse-lite-npm-1.0.30001747-f845e7e6c5-b101dc4b13.zip +0 -0
  99. package/.yarn/cache/{chalk-npm-5.4.1-2f3fe4660a-29df3ffcdf.zip → chalk-npm-5.6.2-ecbd482482-1b2f48f6fb.zip} +0 -0
  100. package/.yarn/cache/cheerio-npm-1.1.2-b0fb353132-6b654bf5a3.zip +0 -0
  101. package/.yarn/cache/ci-info-npm-4.3.0-2894137978-01e359032a.zip +0 -0
  102. package/.yarn/cache/color-convert-npm-3.1.2-eca60588e1-6731d4d4e1.zip +0 -0
  103. package/.yarn/cache/color-name-npm-2.0.2-7e9a2237f7-58e5fa3853.zip +0 -0
  104. package/.yarn/cache/color-npm-5.0.2-3558f1a2be-2574e20a8a.zip +0 -0
  105. package/.yarn/cache/color-string-npm-2.1.2-7ceaab0b60-9f2fdf5a29.zip +0 -0
  106. package/.yarn/cache/compression-npm-1.8.1-e34a5db404-e7552bfbd7.zip +0 -0
  107. package/.yarn/cache/core-js-compat-npm-3.45.1-3c70e031ab-a6eb757ccf.zip +0 -0
  108. package/.yarn/cache/css-select-npm-5.2.2-6385fe3687-ebb6a88446.zip +0 -0
  109. package/.yarn/cache/{css-what-npm-6.1.0-57f751efbb-c67a3a2d0d.zip → css-what-npm-6.2.2-c497de3935-3c5a53be94.zip} +0 -0
  110. package/.yarn/cache/{debug-npm-4.4.1-6eab84b9f7-8e2709b214.zip → debug-npm-4.4.3-0105c6123a-9ada3434ea.zip} +0 -0
  111. package/.yarn/cache/dedent-npm-1.7.0-ec8ff53a59-c902f3e7e8.zip +0 -0
  112. package/.yarn/cache/dotenv-npm-17.2.3-2f9ab93ea1-f8b78626eb.zip +0 -0
  113. 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
  114. package/.yarn/cache/encoding-sniffer-npm-0.2.1-55db9e1e21-7d74723823.zip +0 -0
  115. package/.yarn/cache/end-of-stream-npm-1.4.5-8e646acd73-1e0cfa6e7f.zip +0 -0
  116. package/.yarn/cache/entities-npm-6.0.1-84692dab43-62af130720.zip +0 -0
  117. package/.yarn/cache/error-ex-npm-1.3.4-c7248e4040-ae3939fd4a.zip +0 -0
  118. package/.yarn/cache/eslint-scope-npm-8.4.0-8ed12feb40-e8e611701f.zip +0 -0
  119. package/.yarn/cache/espree-npm-10.4.0-9633b00e55-9b355b32db.zip +0 -0
  120. package/.yarn/cache/expect-npm-30.2.0-cebe750b6e-cf98ab45ab.zip +0 -0
  121. package/.yarn/cache/fast-uri-npm-3.1.0-57fa0b3f3c-818b2c96dc.zip +0 -0
  122. package/.yarn/cache/{fastq-npm-1.19.0-5e2713df98-20457acfb1.zip → fastq-npm-1.19.1-ca0a13ec3f-75679dc226.zip} +0 -0
  123. package/.yarn/cache/fdir-npm-6.5.0-8814a0dec7-14ca1c9f0a.zip +0 -0
  124. package/.yarn/cache/{follow-redirects-npm-1.15.9-539785d34c-e3ab42d109.zip → follow-redirects-npm-1.15.11-ae7b2db266-07372fd74b.zip} +0 -0
  125. package/.yarn/cache/{fs-extra-npm-11.3.0-a6b1b4d5ad-c9fe7b23dd.zip → fs-extra-npm-11.3.2-490a8d09c5-d559545c73.zip} +0 -0
  126. package/.yarn/cache/generator-function-npm-2.0.1-aed34a724a-eb7e7eb896.zip +0 -0
  127. package/.yarn/cache/get-intrinsic-npm-1.3.1-2f734f40ec-bb579dda84.zip +0 -0
  128. package/.yarn/cache/htmlparser2-npm-10.0.0-2301362da5-768870f0e0.zip +0 -0
  129. package/.yarn/cache/http-cache-semantics-npm-4.2.0-fadacfb3ad-4efd2dfcfe.zip +0 -0
  130. package/.yarn/cache/ignore-npm-7.0.5-dea34ee430-f134b96a4d.zip +0 -0
  131. package/.yarn/cache/index-to-position-npm-1.2.0-76254be6df-fb6421c87a.zip +0 -0
  132. package/.yarn/cache/ip-address-npm-10.0.1-862be6199a-09731acda3.zip +0 -0
  133. package/.yarn/cache/is-generator-function-npm-1.1.2-d0a84b1a72-cc50fa0103.zip +0 -0
  134. package/.yarn/cache/is-npm-npm-6.1.0-3dd1685f37-54779c5541.zip +0 -0
  135. package/.yarn/cache/istanbul-reports-npm-3.2.0-b755b56d78-6773a1d5c7.zip +0 -0
  136. package/.yarn/cache/{jake-npm-10.9.2-3bf2173aed-3be324708f.zip → jake-npm-10.9.4-970487a1c4-97e48f73f5.zip} +0 -0
  137. package/.yarn/cache/jest-diff-npm-30.2.0-a9ffaeaf61-1fb9e4fb7d.zip +0 -0
  138. 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
  139. package/.yarn/cache/jest-matcher-utils-npm-30.2.0-4a694dfac2-f3f1ecf68c.zip +0 -0
  140. package/.yarn/cache/jest-message-util-npm-30.2.0-65acf2d429-e29ec76e8c.zip +0 -0
  141. package/.yarn/cache/{jest-mock-npm-30.0.0-1cab834040-4896ba2504.zip → jest-mock-npm-30.2.0-9e4a2da4cb-cde9b56805.zip} +0 -0
  142. package/.yarn/cache/{jest-util-npm-30.0.5-8940b46e20-44207c4b8c.zip → jest-util-npm-30.2.0-8ebfa9b786-cf2f2fb834.zip} +0 -0
  143. package/.yarn/cache/{jest-worker-npm-30.1.0-b4a01545e6-cc09d2ce86.zip → jest-worker-npm-30.2.0-4d4aaec97d-9354b0c71c.zip} +0 -0
  144. package/.yarn/cache/jsonfile-npm-6.2.0-aefb9ffd45-513aac94a6.zip +0 -0
  145. package/.yarn/cache/jwa-npm-1.4.2-9b996c4b2d-a46c9ddbcc.zip +0 -0
  146. package/.yarn/cache/jwa-npm-2.0.1-9ebe28a626-b04312a1de.zip +0 -0
  147. package/.yarn/cache/{long-npm-5.3.1-c44e0933f0-7713e10b4f.zip → long-npm-5.3.2-f80d0f7d39-b6b55ddae5.zip} +0 -0
  148. package/.yarn/cache/{minipass-fetch-npm-4.0.0-d4e49e0194-4b0772dbee.zip → minipass-fetch-npm-4.0.1-ce1d15e957-7ddfebdbb8.zip} +0 -0
  149. package/.yarn/cache/minizlib-npm-3.1.0-6680befdba-f47365cc2c.zip +0 -0
  150. package/.yarn/cache/mock-json-schema-npm-1.1.2-d0bf8a8e0c-d02d8aa908.zip +0 -0
  151. package/.yarn/cache/{nan-npm-2.22.1-09e9287ac1-3459e7e0b0.zip → nan-npm-2.23.0-b3b2a3ae9b-9822b38418.zip} +0 -0
  152. package/.yarn/cache/nanoid-npm-3.3.11-f98c1f9ef6-73b5afe597.zip +0 -0
  153. package/.yarn/cache/node-gyp-npm-11.4.2-75a7da9a3c-de0fdd1a23.zip +0 -0
  154. package/.yarn/cache/node-rdkafka-npm-3.4.1-cbfb65c8a6-ab51a61428.zip +0 -0
  155. package/.yarn/cache/node-releases-npm-2.0.21-93f7457975-5344d634b3.zip +0 -0
  156. package/.yarn/cache/normalize-url-npm-8.1.0-9b4f4e558b-59b765bfe7.zip +0 -0
  157. package/.yarn/cache/object.entries-npm-1.1.9-32f1b371e0-24163ab1e1.zip +0 -0
  158. package/.yarn/cache/parse5-npm-7.3.0-b0410074a3-b0e48be20b.zip +0 -0
  159. package/.yarn/cache/{picomatch-npm-4.0.2-e93516ddf2-ce617b8da3.zip → picomatch-npm-4.0.3-0a647b87cc-57b99055f4.zip} +0 -0
  160. package/.yarn/cache/portfinder-npm-1.0.38-d6e0c97a97-369155c3e7.zip +0 -0
  161. package/.yarn/cache/{postcss-npm-8.5.3-37174aa03d-6d7e21a772.zip → postcss-npm-8.5.6-e7f126c6f3-9e4fbe9757.zip} +0 -0
  162. package/.yarn/cache/pretty-format-npm-30.2.0-2787008ea2-725890d648.zip +0 -0
  163. package/.yarn/cache/{pump-npm-3.0.2-a8afc6734f-e0c4216874.zip → pump-npm-3.0.3-e7d0c1fbab-52843fc933.zip} +0 -0
  164. package/.yarn/cache/pupa-npm-3.3.0-00ad2ffe24-05c84c2c76.zip +0 -0
  165. package/.yarn/cache/{redis-npm-5.8.2-9c493c0c47-a7635cedf2.zip → redis-npm-5.8.3-3369ceaea3-3843f0ad95.zip} +0 -0
  166. package/.yarn/cache/regenerate-unicode-properties-npm-10.2.2-7d116b2ed9-5041ee3118.zip +0 -0
  167. package/.yarn/cache/regexpu-core-npm-6.4.0-8966e0bc82-bf5f85a502.zip +0 -0
  168. package/.yarn/cache/regjsparser-npm-0.13.0-c24f3ebde6-eeaabd3454.zip +0 -0
  169. package/.yarn/cache/{socks-npm-2.8.4-8194b86bd0-ab3af97aeb.zip → socks-npm-2.8.7-d1d20aae19-d19366c959.zip} +0 -0
  170. package/.yarn/cache/spdx-license-ids-npm-3.0.22-2b47dea449-a2f214aaf7.zip +0 -0
  171. package/.yarn/cache/statuses-npm-2.0.2-2d84c63b8c-6927feb50c.zip +0 -0
  172. package/.yarn/cache/strip-ansi-npm-7.1.2-aa4fadccd9-db0e3f9654.zip +0 -0
  173. 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
  174. package/.yarn/cache/strnum-npm-1.1.2-67427480d6-ccd6297a1f.zip +0 -0
  175. package/.yarn/cache/{supports-color-npm-10.0.0-6cd1bb42a6-0475bf167d.zip → supports-color-npm-10.2.2-e43ac15f9f-bd132705fc.zip} +0 -0
  176. 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
  177. package/.yarn/cache/tar-npm-7.5.1-7b414f7fec-4848cd2fa2.zip +0 -0
  178. package/.yarn/cache/tinyglobby-npm-0.2.15-0e783aadbd-d72bd826a8.zip +0 -0
  179. package/.yarn/cache/tmp-npm-0.2.5-e146296d91-dd4b78b323.zip +0 -0
  180. package/.yarn/cache/{typescript-patch-bcfe2ebaf8-bd810ab13e.zip → typescript-npm-5.9.3-48715be868-c089d9d3da.zip} +0 -0
  181. package/.yarn/cache/{typescript-npm-5.9.2-d00cd8b149-cc2fe6c822.zip → typescript-patch-6fda4d02cf-696e1b017b.zip} +0 -0
  182. package/.yarn/cache/undici-npm-7.16.0-f6b1c9157f-2bb71672b2.zip +0 -0
  183. package/.yarn/cache/{undici-types-npm-7.12.0-af0c725921-4a0f927c98.zip → undici-types-npm-7.13.0-df78d4ea2d-1088ad68dd.zip} +0 -0
  184. package/.yarn/cache/undici-types-npm-7.14.0-d9eb643e6a-0f8709b214.zip +0 -0
  185. package/.yarn/cache/unicode-match-property-value-ecmascript-npm-2.2.1-0b3c4504a2-a42bebebab.zip +0 -0
  186. package/.yarn/cache/unicode-property-aliases-ecmascript-npm-2.2.0-55d7728914-0dd0f6e701.zip +0 -0
  187. package/.yarn/cache/validator-npm-13.15.15-143146ad19-a43d9271c8.zip +0 -0
  188. package/.yarn/cache/zod-npm-3.25.76-7de26333f8-f0c963ec40.zip +0 -0
  189. package/.yarn/install-state.gz +0 -0
  190. package/.yarn/releases/{yarn-4.10.1.cjs → yarn-4.10.3.cjs} +126 -126
  191. package/.yarnrc.yml +1 -1
  192. package/CHANGELOG.md +12 -0
  193. package/CLAUDE.md +186 -0
  194. package/_cc/learn-project.md +74 -0
  195. package/_cc/specs/story-CSI-1864.md +45 -0
  196. package/docker-compose.yml +2 -2
  197. package/modules/api-svc/.env.example +2 -2
  198. package/modules/api-svc/package.json +10 -10
  199. package/modules/api-svc/src/ControlAgent/index.js +45 -12
  200. package/modules/api-svc/src/FSPIOPEventHandler/handlers/bulk-quotes-requested.js +1 -1
  201. package/modules/api-svc/src/FSPIOPEventHandler/handlers/bulk-transfers-requested.js +1 -1
  202. package/modules/api-svc/src/FSPIOPEventHandler/handlers/party-info-requested.js +1 -1
  203. package/modules/api-svc/src/FSPIOPEventHandler/index.js +3 -3
  204. package/modules/api-svc/src/InboundServer/handlers.js +3 -3
  205. package/modules/api-svc/src/InboundServer/index.js +6 -6
  206. package/modules/api-svc/src/InboundServer/middlewares.js +6 -2
  207. package/modules/api-svc/src/OutboundServer/handlers.js +13 -13
  208. package/modules/api-svc/src/OutboundServer/index.js +5 -5
  209. package/modules/api-svc/src/config.js +5 -4
  210. package/modules/api-svc/src/index.js +251 -196
  211. package/modules/api-svc/src/lib/cache.js +15 -12
  212. package/modules/api-svc/src/lib/model/AccountsModel.js +1 -1
  213. package/modules/api-svc/src/lib/model/Async2SyncModel.js +1 -1
  214. package/modules/api-svc/src/lib/model/InboundPingModel.js +1 -1
  215. package/modules/api-svc/src/lib/model/InboundTransfersModel.js +1 -1
  216. package/modules/api-svc/src/lib/model/OutboundBulkQuotesModel.js +1 -1
  217. package/modules/api-svc/src/lib/model/OutboundBulkTransfersModel.js +1 -1
  218. package/modules/api-svc/src/lib/model/OutboundRequestToPayModel.js +1 -1
  219. package/modules/api-svc/src/lib/model/OutboundRequestToPayTransferModel.js +1 -1
  220. package/modules/api-svc/src/lib/model/OutboundTransfersModel.js +1 -1
  221. package/modules/api-svc/src/lib/model/ProxyModel/index.js +2 -2
  222. package/modules/api-svc/src/lib/utils.js +6 -6
  223. package/modules/api-svc/test/__mocks__/@mojaloop/sdk-standard-components.js +2 -2
  224. package/modules/api-svc/test/config/integration-pm4ml.env +2 -2
  225. package/modules/api-svc/test/config/integration.env +2 -2
  226. package/modules/api-svc/test/integration-pm4ml/mockServers/managementService/initConfig.js +1 -1
  227. package/modules/api-svc/test/unit/api/utils.js +7 -7
  228. package/modules/api-svc/test/unit/config.test.js +3 -3
  229. package/modules/api-svc/test/unit/data/defaultConfig.json +1 -1
  230. package/modules/api-svc/test/unit/index.configPolling.test.js +229 -0
  231. package/modules/api-svc/test/unit/lib/model/InboundPingModel.test.js +4 -4
  232. package/modules/api-svc/test/unit/lib/model/OutboundTransfersISO20022.test.js +1 -1
  233. package/modules/api-svc/test/unit/lib/model/data/defaultConfig.json +1 -1
  234. package/modules/api-svc/test/unit/outboundApi/handlers.test.js +15 -15
  235. package/modules/outbound-command-event-handler/package.json +9 -9
  236. package/modules/outbound-domain-event-handler/package.json +7 -7
  237. package/modules/private-shared-lib/package.json +9 -9
  238. package/package.json +7 -6
  239. package/{sbom-v24.11.0.csv → sbom-v24.13.0.csv} +236 -247
  240. package/.yarn/cache/@ampproject-remapping-npm-2.3.0-559c14eee4-f345152537.zip +0 -0
  241. package/.yarn/cache/@babel-code-frame-npm-7.26.2-4902b56813-db2c2122af.zip +0 -0
  242. package/.yarn/cache/@babel-compat-data-npm-7.26.8-fb802c4940-bdddf577f6.zip +0 -0
  243. package/.yarn/cache/@babel-compat-data-npm-7.27.2-22fa0c7782-eaa9f8aaeb.zip +0 -0
  244. package/.yarn/cache/@babel-core-npm-7.26.9-12b18cb40d-ceed199dbe.zip +0 -0
  245. package/.yarn/cache/@babel-core-npm-7.27.4-801e5891a4-28c01186d5.zip +0 -0
  246. package/.yarn/cache/@babel-generator-npm-7.26.9-3260f562f4-95075dd615.zip +0 -0
  247. package/.yarn/cache/@babel-generator-npm-7.27.1-12737d533a-6101825922.zip +0 -0
  248. package/.yarn/cache/@babel-generator-npm-7.27.3-9f345034e6-3b8477ae0c.zip +0 -0
  249. package/.yarn/cache/@babel-generator-npm-7.28.0-41b4249958-064c5ba4c0.zip +0 -0
  250. package/.yarn/cache/@babel-helper-annotate-as-pure-npm-7.25.9-a0f89e14a0-41edda10df.zip +0 -0
  251. package/.yarn/cache/@babel-helper-annotate-as-pure-npm-7.27.1-5d7897ae67-3f8e4d5914.zip +0 -0
  252. package/.yarn/cache/@babel-helper-compilation-targets-npm-7.26.5-e3b4215b3c-f3b5f0bfcd.zip +0 -0
  253. package/.yarn/cache/@babel-helper-create-class-features-plugin-npm-7.27.1-65d3087eb1-701579b490.zip +0 -0
  254. package/.yarn/cache/@babel-helper-create-regexp-features-plugin-npm-7.26.3-834c0b262a-4c44122ea1.zip +0 -0
  255. package/.yarn/cache/@babel-helper-module-imports-npm-7.25.9-b86e31bde9-e090be5dee.zip +0 -0
  256. package/.yarn/cache/@babel-helper-module-transforms-npm-7.26.0-7557a3558f-9841d2a62f.zip +0 -0
  257. package/.yarn/cache/@babel-helper-module-transforms-npm-7.27.1-d289bdccc6-415509a585.zip +0 -0
  258. package/.yarn/cache/@babel-helper-module-transforms-npm-7.27.3-90dc30d3d9-47abc90ceb.zip +0 -0
  259. package/.yarn/cache/@babel-helper-plugin-utils-npm-7.26.5-f9c17c9880-1cc0fd8514.zip +0 -0
  260. package/.yarn/cache/@babel-helper-string-parser-npm-7.25.9-eade578078-c28656c52b.zip +0 -0
  261. package/.yarn/cache/@babel-helper-validator-identifier-npm-7.25.9-2634b947a4-3f9b649be0.zip +0 -0
  262. package/.yarn/cache/@babel-helper-validator-option-npm-7.25.9-6450027d5d-9491b27559.zip +0 -0
  263. package/.yarn/cache/@babel-helpers-npm-7.26.10-4eb1d94ec4-6641462579.zip +0 -0
  264. package/.yarn/cache/@babel-helpers-npm-7.27.4-ba8f87a40e-a697280575.zip +0 -0
  265. package/.yarn/cache/@babel-parser-npm-7.26.9-5be13f2551-cb84fe3ba5.zip +0 -0
  266. package/.yarn/cache/@babel-parser-npm-7.27.2-70cd61f3e6-133b4ccfbc.zip +0 -0
  267. package/.yarn/cache/@babel-parser-npm-7.27.3-3085b3fa96-ea5a0cd55e.zip +0 -0
  268. package/.yarn/cache/@babel-parser-npm-7.27.4-c8d264780c-5ff6db87fd.zip +0 -0
  269. package/.yarn/cache/@babel-parser-npm-7.28.0-d5c2974608-2c14a0d260.zip +0 -0
  270. package/.yarn/cache/@babel-parser-npm-7.28.3-8acaa30019-9fa08282e3.zip +0 -0
  271. package/.yarn/cache/@babel-plugin-syntax-import-attributes-npm-7.26.0-7a281ed168-c122aa5771.zip +0 -0
  272. package/.yarn/cache/@babel-plugin-transform-regenerator-npm-7.28.3-36bb1b5a59-f95e929d41.zip +0 -0
  273. package/.yarn/cache/@babel-template-npm-7.26.9-6339558068-240288ceba.zip +0 -0
  274. package/.yarn/cache/@babel-traverse-npm-7.26.9-5dc40fea71-c16a79522e.zip +0 -0
  275. package/.yarn/cache/@babel-traverse-npm-7.27.1-cdef168378-9977271aa4.zip +0 -0
  276. package/.yarn/cache/@babel-traverse-npm-7.27.3-340ab882dc-caccdb8335.zip +0 -0
  277. package/.yarn/cache/@babel-traverse-npm-7.27.4-fe457ebf1b-4debb80b90.zip +0 -0
  278. package/.yarn/cache/@babel-traverse-npm-7.28.0-66b3390b4e-c1c24b12b6.zip +0 -0
  279. package/.yarn/cache/@babel-traverse-npm-7.28.3-7786c501c7-fe521591b7.zip +0 -0
  280. package/.yarn/cache/@babel-types-npm-7.26.9-ef3f43c2d5-11b62ea7ed.zip +0 -0
  281. package/.yarn/cache/@babel-types-npm-7.27.1-2a01e9d02f-81f8ada28c.zip +0 -0
  282. package/.yarn/cache/@babel-types-npm-7.27.3-7b6a22808d-a24e6accd8.zip +0 -0
  283. package/.yarn/cache/@babel-types-npm-7.28.2-9db4224804-a8de404a2e.zip +0 -0
  284. package/.yarn/cache/@eslint-community-eslint-utils-npm-4.4.1-c83a271e90-ae92a11412.zip +0 -0
  285. package/.yarn/cache/@eslint-community-eslint-utils-npm-4.7.0-47503bfa2a-43ed5d3915.zip +0 -0
  286. package/.yarn/cache/@eslint-compat-npm-1.3.2-b403da4a15-e710ec5ed8.zip +0 -0
  287. package/.yarn/cache/@eslint-core-npm-0.12.0-38bccca4dd-ee8a2c65ee.zip +0 -0
  288. package/.yarn/cache/@grpc-grpc-js-npm-1.13.4-4aa5cd2dfd-f1eb910ff7.zip +0 -0
  289. package/.yarn/cache/@grpc-proto-loader-npm-0.7.13-be5b6af1c1-7e2d842c20.zip +0 -0
  290. package/.yarn/cache/@hapi-teamwork-npm-6.0.0-0f3d56734c-e79c8e590e.zip +0 -0
  291. package/.yarn/cache/@hapi-tlds-npm-1.1.2-80b5f7031d-339761cd1a.zip +0 -0
  292. package/.yarn/cache/@humanwhocodes-retry-npm-0.3.1-9d87bf92c6-eb457f6995.zip +0 -0
  293. package/.yarn/cache/@humanwhocodes-retry-npm-0.4.2-78a05c1b69-8910c4cdf8.zip +0 -0
  294. package/.yarn/cache/@ioredis-commands-npm-1.3.0-c1ff038fb4-203029f09d.zip +0 -0
  295. package/.yarn/cache/@jest-get-type-npm-30.0.0-db16e5ad7d-6dc432caac.zip +0 -0
  296. package/.yarn/cache/@jest-pattern-npm-30.0.0-8f812d915e-4c21a48b1d.zip +0 -0
  297. package/.yarn/cache/@jest-schemas-npm-30.0.0-7943bf35b9-b97944e582.zip +0 -0
  298. package/.yarn/cache/@jest-transform-npm-30.1.2-14cfbd16d5-aec6c6a46f.zip +0 -0
  299. package/.yarn/cache/@jest-types-npm-30.0.0-ee47462915-647481170c.zip +0 -0
  300. package/.yarn/cache/@jest-types-npm-30.0.5-0475c9b283-6bf18f4e89.zip +0 -0
  301. package/.yarn/cache/@jridgewell-gen-mapping-npm-0.3.8-647be6e286-9d3a56ab36.zip +0 -0
  302. package/.yarn/cache/@jridgewell-set-array-npm-1.2.1-2312928209-832e513a85.zip +0 -0
  303. package/.yarn/cache/@jridgewell-sourcemap-codec-npm-1.5.0-dfd9126d71-4ed6123217.zip +0 -0
  304. package/.yarn/cache/@jridgewell-trace-mapping-npm-0.3.25-c076fd2279-dced32160a.zip +0 -0
  305. package/.yarn/cache/@jridgewell-trace-mapping-npm-0.3.29-6702d36c67-64e1ce0dc3.zip +0 -0
  306. package/.yarn/cache/@mojaloop-logging-bc-public-types-lib-npm-0.5.4-03ab70ac75-0d35363d3c.zip +0 -0
  307. package/.yarn/cache/@mojaloop-ml-number-npm-11.3.0-9858cadff5-8435794709.zip +0 -0
  308. package/.yarn/cache/@redocly-config-npm-0.20.3-701daa5910-dd9501c96d.zip +0 -0
  309. package/.yarn/cache/@redocly-openapi-core-npm-1.31.1-fb4096a34f-771e68ef15.zip +0 -0
  310. package/.yarn/cache/@redocly-openapi-core-npm-1.34.3-10568e0790-b70a92135e.zip +0 -0
  311. package/.yarn/cache/@types-babel__traverse-npm-7.20.6-fac4243243-63d13a3789.zip +0 -0
  312. package/.yarn/cache/@types-body-parser-npm-1.19.5-97fb106976-1e251118c4.zip +0 -0
  313. package/.yarn/cache/@types-content-disposition-npm-0.5.8-0074adf6a1-eeea868fb5.zip +0 -0
  314. package/.yarn/cache/@types-cookies-npm-0.9.0-a3671b5a75-88d2106834.zip +0 -0
  315. package/.yarn/cache/@types-estree-npm-1.0.6-b5e23f2ea2-9d35d47509.zip +0 -0
  316. package/.yarn/cache/@types-express-npm-5.0.0-a645691cd5-45b199ab66.zip +0 -0
  317. package/.yarn/cache/@types-express-serve-static-core-npm-5.0.6-e41caf262c-9dc51bdee7.zip +0 -0
  318. package/.yarn/cache/@types-http-errors-npm-2.0.4-8b39ca5d7c-1f3d7c3b32.zip +0 -0
  319. package/.yarn/cache/@types-node-npm-22.13.5-4c5912eee2-a69ec8dba3.zip +0 -0
  320. package/.yarn/cache/@types-qs-npm-6.9.18-125db28c30-152fab96ef.zip +0 -0
  321. package/.yarn/cache/@types-semver-npm-7.5.8-26073743d7-3496808818.zip +0 -0
  322. package/.yarn/cache/@typescript-eslint-parser-npm-8.44.0-9be86aa2f8-8c7ddabf46.zip +0 -0
  323. package/.yarn/cache/@typescript-eslint-project-service-npm-8.38.0-b50ac59922-fe21604603.zip +0 -0
  324. package/.yarn/cache/@typescript-eslint-project-service-npm-8.44.0-3208cc873e-400b4981e6.zip +0 -0
  325. package/.yarn/cache/@typescript-eslint-scope-manager-npm-8.38.0-64859efac1-0809a4135a.zip +0 -0
  326. package/.yarn/cache/@typescript-eslint-scope-manager-npm-8.44.0-02a051c9d1-5dae4a8386.zip +0 -0
  327. package/.yarn/cache/@typescript-eslint-tsconfig-utils-npm-8.38.0-79457d6001-e1c80d2a4b.zip +0 -0
  328. package/.yarn/cache/@typescript-eslint-tsconfig-utils-npm-8.44.0-de2d92d917-c8535d481d.zip +0 -0
  329. package/.yarn/cache/@typescript-eslint-types-npm-8.38.0-1cd62840a5-87ac2d199e.zip +0 -0
  330. package/.yarn/cache/@typescript-eslint-types-npm-8.44.0-89c4325651-9e28c95feb.zip +0 -0
  331. package/.yarn/cache/@typescript-eslint-typescript-estree-npm-8.38.0-b39ddf47a4-4ff14184a9.zip +0 -0
  332. package/.yarn/cache/@typescript-eslint-typescript-estree-npm-8.44.0-122f9245db-e2e579b15c.zip +0 -0
  333. package/.yarn/cache/@typescript-eslint-utils-npm-8.38.0-4fe3006f47-5be4936796.zip +0 -0
  334. package/.yarn/cache/@typescript-eslint-utils-npm-8.44.0-fc612e2915-436e21e3d0.zip +0 -0
  335. package/.yarn/cache/abbrev-npm-3.0.0-946682a7b1-2ceee14efd.zip +0 -0
  336. package/.yarn/cache/acorn-npm-8.14.0-dc46f61424-6df29c3555.zip +0 -0
  337. package/.yarn/cache/agent-base-npm-7.1.3-b2c16e72fb-3db6d8d465.zip +0 -0
  338. package/.yarn/cache/ansi-regex-npm-6.1.0-abe011aae4-495834a53b.zip +0 -0
  339. package/.yarn/cache/ansi-styles-npm-6.2.1-d43647018c-70fdf883b7.zip +0 -0
  340. package/.yarn/cache/async-npm-2.6.4-3155e80151-df8e52817d.zip +0 -0
  341. package/.yarn/cache/babel-jest-npm-30.1.2-2d68b3440b-9697119fe4.zip +0 -0
  342. package/.yarn/cache/babel-plugin-istanbul-npm-7.0.0-924905ff8c-4df567f291.zip +0 -0
  343. package/.yarn/cache/babel-plugin-jest-hoist-npm-30.0.1-be1f25b566-4d8d0eb372.zip +0 -0
  344. package/.yarn/cache/babel-preset-jest-npm-30.0.1-0b8ffd2c88-fa37b0fa11.zip +0 -0
  345. package/.yarn/cache/browserslist-npm-4.24.4-2fdeb5face-11fda105e8.zip +0 -0
  346. package/.yarn/cache/browserslist-npm-4.25.1-7df10d33cd-bfb5511b42.zip +0 -0
  347. package/.yarn/cache/call-bound-npm-1.0.3-f4cbf26326-c39a8245f6.zip +0 -0
  348. package/.yarn/cache/caniuse-lite-npm-1.0.30001700-af88646d2b-9203ed502f.zip +0 -0
  349. package/.yarn/cache/caniuse-lite-npm-1.0.30001727-5eb19a192b-6155a41413.zip +0 -0
  350. package/.yarn/cache/cheerio-npm-1.0.0-837785b57b-b535070add.zip +0 -0
  351. package/.yarn/cache/ci-info-npm-4.2.0-5451b2fa90-928d8457f3.zip +0 -0
  352. package/.yarn/cache/color-npm-3.2.1-568cf1014f-bf70438e01.zip +0 -0
  353. package/.yarn/cache/color-string-npm-1.9.1-dc020e56be-72aa0b81ee.zip +0 -0
  354. package/.yarn/cache/colorspace-npm-1.1.4-f01655548a-bb3934ef3c.zip +0 -0
  355. package/.yarn/cache/compression-npm-1.8.0-5088616544-ca213b9bd0.zip +0 -0
  356. package/.yarn/cache/core-js-compat-npm-3.44.0-840288badd-41885423aa.zip +0 -0
  357. package/.yarn/cache/css-select-npm-5.1.0-9365a79de5-d486b1e7eb.zip +0 -0
  358. package/.yarn/cache/debug-npm-4.4.0-f6efe76023-1847944c2e.zip +0 -0
  359. package/.yarn/cache/dedent-npm-1.5.3-123726df15-e5277f6268.zip +0 -0
  360. package/.yarn/cache/electron-to-chromium-npm-1.5.104-d9177e3237-ad580610ec.zip +0 -0
  361. package/.yarn/cache/encoding-sniffer-npm-0.2.0-7e717bfa93-fe61a759db.zip +0 -0
  362. package/.yarn/cache/end-of-stream-npm-1.4.4-497fc6dee1-530a5a5a1e.zip +0 -0
  363. package/.yarn/cache/error-ex-npm-1.3.2-5654f80c0f-d547740aa2.zip +0 -0
  364. package/.yarn/cache/es-abstract-npm-1.23.9-65d488dcce-31a321966d.zip +0 -0
  365. package/.yarn/cache/eslint-scope-npm-8.2.0-d74e314c9e-cd9ab60d5a.zip +0 -0
  366. package/.yarn/cache/eslint-visitor-keys-npm-4.2.0-a591434af3-9651b3356b.zip +0 -0
  367. package/.yarn/cache/espree-npm-10.3.0-e5b10052f5-3412d44d42.zip +0 -0
  368. package/.yarn/cache/expect-npm-30.0.0-c4f29cc906-2ad7d2a3cd.zip +0 -0
  369. package/.yarn/cache/fast-uri-npm-3.0.6-140ab22003-43c87cd039.zip +0 -0
  370. package/.yarn/cache/get-intrinsic-npm-1.3.0-35558f27b6-6e9dd920ff.zip +0 -0
  371. package/.yarn/cache/globals-npm-11.12.0-1fa7f41a6c-9f054fa38f.zip +0 -0
  372. package/.yarn/cache/htmlparser2-npm-9.1.0-5ef8394060-6352fa2a54.zip +0 -0
  373. package/.yarn/cache/http-cache-semantics-npm-4.1.1-1120131375-362d5ed66b.zip +0 -0
  374. package/.yarn/cache/ignore-npm-7.0.4-e6d7361b35-01ee59df2f.zip +0 -0
  375. package/.yarn/cache/index-to-position-npm-1.1.0-3704651970-16703893c7.zip +0 -0
  376. package/.yarn/cache/ip-address-npm-9.0.5-9fa024d42a-1ed81e0672.zip +0 -0
  377. package/.yarn/cache/is-arrayish-npm-0.3.2-f856180f79-81a78d518e.zip +0 -0
  378. package/.yarn/cache/is-generator-function-npm-1.1.0-e96e2ba973-5906ff51a8.zip +0 -0
  379. package/.yarn/cache/is-npm-npm-6.0.0-d8d9039032-fafe1ddc77.zip +0 -0
  380. package/.yarn/cache/istanbul-reports-npm-3.1.7-356486c0f4-f1faaa4684.zip +0 -0
  381. package/.yarn/cache/jest-diff-npm-30.0.0-3d7984567d-e17d8b5e66.zip +0 -0
  382. package/.yarn/cache/jest-matcher-utils-npm-30.0.0-df3cb56c58-3aa46a7d38.zip +0 -0
  383. package/.yarn/cache/jest-message-util-npm-30.0.0-3d72ccf669-d2585d8712.zip +0 -0
  384. package/.yarn/cache/jest-regex-util-npm-30.0.0-b67c1fc2bc-aa4449a029.zip +0 -0
  385. package/.yarn/cache/jest-util-npm-30.0.0-de14658072-55171f9010.zip +0 -0
  386. package/.yarn/cache/jsbn-npm-1.1.0-1da0181838-bebe7ae829.zip +0 -0
  387. package/.yarn/cache/jsesc-npm-3.0.2-3b3b74ec0d-8e5a7de6b7.zip +0 -0
  388. package/.yarn/cache/jsonfile-npm-6.1.0-20a4796cee-03014769e7.zip +0 -0
  389. package/.yarn/cache/jwa-npm-1.4.1-4f19d6572c-0bc002b71d.zip +0 -0
  390. package/.yarn/cache/jwa-npm-2.0.0-52a7c3f1ca-ab983f6685.zip +0 -0
  391. package/.yarn/cache/mime-db-npm-1.53.0-14fcdba2be-82409c568a.zip +0 -0
  392. package/.yarn/cache/minizlib-npm-3.0.1-4bdabd978f-622cb85f51.zip +0 -0
  393. package/.yarn/cache/mkdirp-npm-0.5.6-dcd5a6b97b-0c91b721bb.zip +0 -0
  394. package/.yarn/cache/mkdirp-npm-3.0.1-f94bfa769e-16fd79c286.zip +0 -0
  395. package/.yarn/cache/mock-json-schema-npm-1.1.1-0c1db4d1d1-3a45b85acd.zip +0 -0
  396. package/.yarn/cache/nanoid-npm-3.3.8-d22226208b-2d1766606c.zip +0 -0
  397. package/.yarn/cache/node-gyp-npm-11.1.0-bd7044e197-3314ebfeb9.zip +0 -0
  398. package/.yarn/cache/node-releases-npm-2.0.19-b123ed6240-c2b33b4f0c.zip +0 -0
  399. package/.yarn/cache/normalize-url-npm-8.0.1-c87adbf3f1-ae39203758.zip +0 -0
  400. package/.yarn/cache/object.entries-npm-1.1.8-386f7451b8-2301918fbd.zip +0 -0
  401. package/.yarn/cache/openapi-typescript-npm-7.8.0-7faf1e0691-9f0b55a91f.zip +0 -0
  402. package/.yarn/cache/parse5-npm-7.2.1-c48f333f28-fd1a8ad154.zip +0 -0
  403. package/.yarn/cache/pirates-npm-4.0.6-a8ec571a43-d02dda76f4.zip +0 -0
  404. package/.yarn/cache/portfinder-npm-1.0.32-20cc84ebcf-842058052f.zip +0 -0
  405. package/.yarn/cache/pretty-format-npm-30.0.0-d8f817d24c-3a02da797b.zip +0 -0
  406. package/.yarn/cache/protobufjs-npm-7.4.0-12c56a3adc-4084235066.zip +0 -0
  407. package/.yarn/cache/pupa-npm-3.1.0-8d0c9815fb-32784254b7.zip +0 -0
  408. package/.yarn/cache/regenerate-unicode-properties-npm-10.2.0-3d662e6e17-9150eae6fe.zip +0 -0
  409. package/.yarn/cache/regexpu-core-npm-6.2.0-56e98c3a61-4d054ffcd9.zip +0 -0
  410. package/.yarn/cache/regjsparser-npm-0.12.0-9d000fca30-c2d6506b33.zip +0 -0
  411. package/.yarn/cache/rimraf-npm-5.0.10-d0c6647697-f3b8ce81ee.zip +0 -0
  412. package/.yarn/cache/semver-npm-7.7.1-4572475307-4cfa1eb91e.zip +0 -0
  413. package/.yarn/cache/simple-swizzle-npm-0.2.2-8dee37fad1-c6dffff17a.zip +0 -0
  414. package/.yarn/cache/spdx-license-ids-npm-3.0.21-12f9261e85-17a033b4c3.zip +0 -0
  415. package/.yarn/cache/sprintf-js-npm-1.1.3-b99efd75b2-e7587128c4.zip +0 -0
  416. package/.yarn/cache/strip-ansi-npm-7.1.0-7453b80b79-475f53e9c4.zip +0 -0
  417. package/.yarn/cache/strnum-npm-1.1.1-67836fb7cf-5542ef16fd.zip +0 -0
  418. package/.yarn/cache/supports-color-npm-10.1.0-48517f80a7-28d191c4ad.zip +0 -0
  419. package/.yarn/cache/tar-npm-7.4.3-1dbbd1ffc3-12a2a4fc6d.zip +0 -0
  420. package/.yarn/cache/tmp-npm-0.2.3-ac2a701365-7b13696787.zip +0 -0
  421. package/.yarn/cache/type-fest-npm-4.40.0-18c72d1d94-dbca20979d.zip +0 -0
  422. package/.yarn/cache/undici-npm-6.21.3-28d9334837-b6b8f4a90e.zip +0 -0
  423. package/.yarn/cache/undici-types-npm-6.20.0-bd21e669af-583ac7bbf4.zip +0 -0
  424. package/.yarn/cache/unicode-match-property-value-ecmascript-npm-2.2.0-011b10a684-9fd53c657a.zip +0 -0
  425. package/.yarn/cache/unicode-property-aliases-ecmascript-npm-2.1.0-46779595f4-2435244318.zip +0 -0
  426. package/.yarn/cache/update-browserslist-db-npm-1.1.2-59b122fef6-e7bf8221df.zip +0 -0
  427. package/.yarn/cache/validator-npm-13.15.0-b048a51909-cc4435e37a.zip +0 -0
  428. package/.yarn/cache/which-typed-array-npm-1.1.18-23d1112113-11eed801b2.zip +0 -0
  429. package/.yarn/cache/yaml-npm-2.7.0-bb348b356b-c8c314c62f.zip +0 -0
  430. 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 = 30000;
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.wso2 = createAuthClient(conf, logger);
85
- this.wso2.auth.on('error', (msg) => {
86
- this.emit('error', 'WSO2 auth error in InboundApi', msg);
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.wso2,
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.wso2,
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
- wso2: this.wso2,
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.wso2.auth.start();
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.Client.Create({
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.isDebugEnabled && this.logger.debug('Server is restarting...');
334
+ this.logger.debug('Server is restarting...', { source });
335
+ this._configUpdateInProgress = true;
266
336
 
267
- let oldCache;
268
- const updateCache = !_.isEqual(this.conf.cacheUrl, newConf.cacheUrl)
337
+ try {
338
+ let oldCache;
339
+ const updateCache = !_.isEqual(this.conf.cacheUrl, newConf.cacheUrl)
269
340
  || !_.isEqual(this.conf.enableTestFeatures, newConf.enableTestFeatures);
270
- if (updateCache) {
271
- oldCache = this.cache;
272
- await this.cache.disconnect();
273
- this.cache = createCache(newConf);
274
- await this.cache.connect();
275
- restartActionsTaken.updateCache = true;
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
- const updateWSO2 = !_.isEqual(this.conf.wso2, newConf.wso2)
349
+ const updateOIDC = !_.isEqual(this.conf.oidc, newConf.oidc)
279
350
  || !_.isEqual(this.conf.outbound.tls, newConf.outbound.tls);
280
- if (updateWSO2) {
281
- this.wso2.auth.stop();
282
- this.wso2 = createAuthClient(newConf, this.logger);
283
- this.wso2.auth.on('error', (msg) => {
284
- this.emit('error', 'WSO2 auth error in InboundApi', msg);
285
- });
286
- await this.wso2.auth.start();
287
- restartActionsTaken.updateWSO2 = true;
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
- this.logger.isDebugEnabled && this.logger.push({ oldConf: this.conf.inbound, newConf: newConf.inbound }).debug('Inbound server configuration');
291
- const updateInboundServer = this._shouldUpdateInboundServer(newConf);
292
- if (updateInboundServer) {
293
- const stopStartLabel = 'InboundServer stop/start duration';
294
- // eslint-disable-next-line no-console
295
- console.time(stopStartLabel);
296
- await this.inboundServer.stop();
297
-
298
- this.mojaloopSharedAgents = this._createMojaloopSharedAgents(newConf);
299
- this.inboundServer = new InboundServer(
300
- newConf,
301
- this.logger,
302
- this.cache,
303
- this.wso2,
304
- this.mojaloopSharedAgents,
305
- );
306
- this.inboundServer.on('error', (...args) => {
307
- const errMessage = 'Unhandled error in Inbound Server';
308
- this.logger.push({ args }).error(errMessage);
309
- this.emit('error', errMessage);
310
- });
311
- await this.inboundServer.start();
312
- // eslint-disable-next-line no-console
313
- console.timeEnd(stopStartLabel);
314
- restartActionsTaken.updateInboundServer = true;
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
- this.logger.isDebugEnabled && this.logger.push({ oldConf: this.conf.outbound, newConf: newConf.outbound }).debug('Outbound server configuration');
318
- const updateOutboundServer = this._shouldUpdateOutboundServer(newConf);
319
- if (updateOutboundServer) {
320
- const stopStartLabel = 'OutboundServer stop/start duration';
321
- // eslint-disable-next-line no-console
322
- console.time(stopStartLabel);
323
- await this.outboundServer.stop();
324
-
325
- this.mojaloopSharedAgents = this._createMojaloopSharedAgents(newConf);
326
- this.outboundServer = new OutboundServer(
327
- newConf,
328
- this.logger,
329
- this.cache,
330
- this.metricsClient,
331
- this.wso2,
332
- this.mojaloopSharedAgents,
333
- );
334
- this.outboundServer.on('error', (...args) => {
335
- const errMessage = 'Unhandled error in Outbound Server';
336
- this.logger.push({ args }).error(errMessage);
337
- this.emit('error', errMessage);
338
- });
339
- await this.outboundServer.start();
340
- // eslint-disable-next-line no-console
341
- console.timeEnd(stopStartLabel);
342
- restartActionsTaken.updateOutboundServer = true;
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
- const updateFspiopEventHandler = !_.isEqual(this.conf.outbound, newConf.outbound)
416
+ const updateFspiopEventHandler = !_.isEqual(this.conf.outbound, newConf.outbound)
346
417
  && this.conf.fspiopEventHandler.enabled;
347
- if (updateFspiopEventHandler) {
348
- await this.fspiopEventHandler.stop();
349
- this.fspiopEventHandler = new FSPIOPEventHandler({
350
- config: newConf,
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
- appConfig: newConf,
423
+ cache: this.cache,
424
+ oidc: this.oidc,
382
425
  });
383
- this.controlClient.on(ControlAgent.EVENT.RECONFIGURE, this.restart.bind(this));
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
- this.controlClient.on('close', () => {
393
- clearTimeout(this.pingTimeout);
394
- setTimeout(() => {
395
- this.logger.debug('Control client closed. Restarting server...');
396
- this.restart(_.merge({}, newConf, {
397
- control: { stopped: Date.now() }
398
- }));
399
- }, RESTART_INTERVAL_MS);
400
- });
401
-
402
- restartActionsTaken.updateControlClient = true;
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
- const updateOAuthTestServer = !_.isEqual(newConf.oauthTestServer, this.conf.oauthTestServer);
407
- if (updateOAuthTestServer) {
408
- await this.oauthTestServer?.stop();
409
- if (this.conf.oauthTestServer.enabled) {
410
- this.oauthTestServer = new OAuthTestServer({
411
- clientKey: newConf.oauthTestServer.clientKey,
412
- clientSecret: newConf.oauthTestServer.clientSecret,
413
- port: newConf.oauthTestServer.listenPort,
414
- logger: this.logger,
415
- });
416
- await this.oauthTestServer.start();
417
- restartActionsTaken.updateOAuthTestServer = true;
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
- const updateTestServer = !_.isEqual(newConf.test.port, this.conf.test.port);
422
- if (updateTestServer) {
423
- await this.testServer?.stop();
424
- if (this.conf.enableTestFeatures) {
425
- this.testServer = new TestServer({
426
- port: newConf.test.port,
427
- logger: this.logger,
428
- cache: this.cache,
429
- });
430
- await this.testServer.start();
431
- restartActionsTaken.updateTestServer = true;
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
- this.conf = newConf;
499
+ this.conf = newConf;
436
500
 
437
- await oldCache?.disconnect();
501
+ await oldCache?.disconnect();
438
502
 
439
- if (Object.keys(restartActionsTaken).length > 0) {
440
- this.logger.info('Server is restarted', { restartActionsTaken });
441
- } else {
442
- this.logger.verbose('Server not restarted, no config changes detected');
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.wso2.auth.stop();
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.Client.Create({
511
- appConfig: config,
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.push({ err }).error('Unhandled server error');
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.push({ err }).error('Error starting server');
591
+ logger.error('Error starting server: ', err);
537
592
  process.exit(1);
538
593
  });
539
594
 
540
- logger.info('SDK server is started!', { name, version });
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([this._getClient(), this._getClient()]);
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
- this._logger.isErrorEnabled && this._logger.error(`Cache not subscribed to channel ${channel} for callbackId ${callbackId}`);
390
- throw new Error(`Channel ${channel} does not have a callback with id ${callbackId} subscribed`);
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.push({ err }).warn(`Unsubscribing cache error [${channelKey} ${subId}]: ${err.stack}`);
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.isErrorEnabled && this._logger.push({ err }).error('Error from REDIS client getting subscriber');
419
+ this._logger.error('Error from REDIS client getting subscriber: ', err);
417
420
  });
418
421
 
419
- client.on('reconnecting', (err) => {
420
- this._logger.isDebugEnabled && this._logger.push({ err }).debug('REDIS client Reconnecting');
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.isDebugEnabled && this._logger.debug(`REDIS client connected at: ${this._url}`);
437
+ this._logger.verbose(`REDIS client connected at: ${this._url}`);
435
438
  });
436
439
 
437
440
  client.on('ready', () => {
438
- this._logger.isDebugEnabled && this._logger.debug(`Connected to REDIS at: ${this._url}`);
441
+ this._logger.info('REDIS client is ready');
439
442
  });
440
443
  await client.connect();
441
444
 
@@ -60,7 +60,7 @@ class AccountsModel {
60
60
  },
61
61
  jwsSign: config.jwsSign,
62
62
  jwsSigningKey: config.jwsSigningKey,
63
- wso2: config.wso2,
63
+ oidc: config.oidc,
64
64
  resourceVersions: config.resourceVersions,
65
65
  apiType: config.apiType
66
66
  };