@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
package/.yarnrc.yml CHANGED
@@ -4,4 +4,4 @@ enableGlobalCache: false
4
4
 
5
5
  nodeLinker: node-modules
6
6
 
7
- yarnPath: .yarn/releases/yarn-4.10.1.cjs
7
+ yarnPath: .yarn/releases/yarn-4.10.3.cjs
package/CHANGELOG.md CHANGED
@@ -1,4 +1,16 @@
1
1
  # Changelog: [mojaloop/sdk-scheme-adapter](https://github.com/mojaloop/sdk-scheme-adapter)
2
+ ## [24.13.0](https://github.com/mojaloop/sdk-scheme-adapter/compare/v24.12.0...v24.13.0) (2025-10-06)
3
+
4
+
5
+ ### Features
6
+
7
+ * **csi-1665:** improved logging ([#616](https://github.com/mojaloop/sdk-scheme-adapter/issues/616)) ([b8cae73](https://github.com/mojaloop/sdk-scheme-adapter/commit/b8cae734c71f5e94fef53cd0da1953042750bf54))
8
+
9
+
10
+ ### Chore
11
+
12
+ * **sbom:** update sbom [skip ci] ([4cc79d0](https://github.com/mojaloop/sdk-scheme-adapter/commit/4cc79d0093732849ab25ba6d9357ce079347ab95))
13
+
2
14
  ## [24.12.0](https://github.com/mojaloop/sdk-scheme-adapter/compare/v24.11.0...v24.12.0) (2025-09-22)
3
15
 
4
16
 
package/CLAUDE.md ADDED
@@ -0,0 +1,186 @@
1
+ # CLAUDE.md
2
+
3
+ This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
4
+
5
+ ## Project Overview
6
+
7
+ This is the Mojaloop SDK Scheme Adapter - a monorepo that provides an adapter interface between Mojaloop API compliant switches and DFSP backend platforms.
8
+ The project consists of multiple modules organized using Nx workspace.
9
+
10
+ ## Quick Reference (Start Here)
11
+
12
+ | Task | Command | Prerequisites |
13
+ |------|---------|---------------|
14
+ | Run all tests | `yarn test` | - |
15
+ | Run integration tests | `yarn test:integration` | Docker running, `yarn wait-4-docker` |
16
+ | Run specific module test | `yarn workspace @mojaloop/sdk-scheme-adapter-api-svc run test:unit` | - |
17
+ | Build everything | `yarn build` | Node 22.15.1 (`nvm use`) |
18
+ | Start services | `yarn start` | Docker running, modules built |
19
+ | Update OpenAPI | `yarn build:openapi && yarn validate:api` | - |
20
+ | Debug main service | `yarn workspace @mojaloop/sdk-scheme-adapter-api-svc run start:debug` | Port 9229 available |
21
+
22
+
23
+ **Critical File Locations:**
24
+ - Models: `modules/api-svc/src/lib/model/`
25
+ - Handlers: `modules/api-svc/src/{Inbound,Outbound}Server/handlers.js`
26
+ - Config: `modules/*/src/config/default.json`
27
+ - OpenAPI templates: `modules/*/src/*_template.yaml` (edit these, not `api.yaml`)
28
+
29
+ ## Architecture
30
+ This service can be referenced as `Mojaloop Connector`, `ML Connector` or `Scheme Adapter`.
31
+
32
+ ### Core Modules
33
+
34
+ - **api-svc**: Main service module (JavaScript/Node.js) handling inbound/outbound HTTP APIs and core business logic
35
+ - **outbound-command-event-handler**: TypeScript module handling outbound command events using domain-driven design
36
+ - **outbound-domain-event-handler**: TypeScript module processing domain events for outbound operations
37
+ - **private-shared-lib**: Shared TypeScript library containing domain entities, events, and infrastructure code
38
+
39
+ ### Key Components
40
+
41
+ - **Event-Driven Architecture**: Uses Kafka for event streaming between modules
42
+ - **State Machines**: JavaScript State Machine library for managing transfer states
43
+ - **Cache Layer**: Redis for distributed caching and session management
44
+ - **Models**: Domain models for transfers, quotes, parties, bulk operations
45
+ - **Event Handlers**: FSPIOP and Backend event handling for Mojaloop protocol compliance
46
+ - **ControlAgent**: WebSocket client for PM4ML Management API with optional failsafe polling
47
+
48
+ ## Code Structure Patterns
49
+
50
+ ### API Service (modules/api-svc)
51
+ - **Handlers**: Route handlers in `src/InboundServer/handlers.js` and `src/OutboundServer/handlers.js`
52
+ - **Models**: Business logic in `src/lib/model/` with models like:
53
+ - `TransfersModel.js` - Transfer operations
54
+ - `QuotesModel.js` - Quote handling
55
+ - `AccountsModel.js` - Account management
56
+ - `InboundTransfersModel.js` - Inbound transfer processing
57
+ - `OutboundTransfersModel.js` - Outbound transfer processing
58
+ - `OutboundBulkQuotesModel.js` - Bulk quote operations
59
+ - `OutboundBulkTransfersModel.js` - Bulk transfer operations
60
+ - **State Machines**: Use `PersistentStateMachine` for managing complex state transitions
61
+ - **Middleware**: Validation and error handling middleware in `middlewares.js`
62
+ - **OpenAPI Templates**: API definitions in `api_template.yaml` files, compiled to `api.yaml`
63
+
64
+ ### Event Handlers (TypeScript modules)
65
+ - **Domain Layer**: Aggregates and entities in `src/domain/`
66
+ - **Application Layer**: Event handlers in `src/application/handlers/`
67
+ - **Infrastructure**: Kafka producers/consumers in shared lib
68
+ - **API Server**: Express-based APIs with OpenAPI specs
69
+ - **Build Process**: TypeScript compilation + file copying (YAML files)
70
+
71
+ ### Testing Patterns
72
+ - **Unit tests**: `test/unit/` directories using Jest
73
+ - **Integration tests**: `test/integration/` requiring Docker services
74
+ - **Functional tests**: Separate test suites in `test/func_bulk/` and `test/func_iso20022/`
75
+ - **Mocks**: Test mocks in `test/__mocks__/`
76
+ - **Setup**: Test setup files like `test/unit/setup.js`
77
+ - **Configuration**: Jest config in individual `jest.config.js` files
78
+
79
+ ## Development Commands
80
+ Check **[development-commands.md](./_cc/docs/development-commands.md)** file to get details about some useful commands to
81
+ build and setup the project, start the services, run tests, linting, deps and audit checks, etc.
82
+
83
+ ## Key Libraries & Dependencies
84
+
85
+ - **@mojaloop/sdk-standard-components**: Core Mojaloop SDK components
86
+ - **@mojaloop/central-services-***: Mojaloop platform services
87
+ - **@mojaloop/api-snippets**: API specification components
88
+ - **javascript-state-machine**: State management for transfers
89
+ - **redis**: Distributed caching (v5.x)
90
+ - **express/koa**: HTTP servers (Express for newer modules, Koa for some services)
91
+ - **ajv**: JSON schema validation
92
+ - **convict**: Configuration management in TypeScript modules
93
+ - **openapi-backend**: OpenAPI request validation and routing
94
+ - **Package Manager**: Yarn 4.10.2 (Berry)
95
+
96
+ ## Docker Environment
97
+
98
+ See [development-commands.md](./_cc/docs/development-commands.md#docker-operations) for Docker commands.
99
+
100
+ **Services:** redis (6379), kafka (9092), ml-testing-toolkit (4040/5050), mojaloop-testing-toolkit-ui (6060)
101
+ **Debug profile adds:** redisinsight (9001), kafka-debug-ui (9080)
102
+ **Main service ports:** 4000-4004, 9229 (debugger)
103
+
104
+ ## Development Patterns & Notes
105
+
106
+ ### Module Architecture
107
+ - **api-svc**: JavaScript-based, legacy module with core functionality
108
+ - **Shared lib**: Private workspace package for cross-module code
109
+
110
+ ### Event Sourcing
111
+ Commands → `outbound-command-event-handler` → Domain events → `outbound-domain-event-handler`
112
+ **Kafka topics:** `topic-sdk-outbound-command-events`, `topic-sdk-outbound-domain-events`
113
+
114
+ ### State Management
115
+ **Redis:** State machine persistence, distributed cache, cross-module communication, bulk transaction tracking
116
+ **Pattern:** `PersistentStateMachine` class for complex state transitions
117
+
118
+ ### OpenAPI Workflow
119
+ 1. Edit `*_template.yaml` files (not generated `api.yaml`)
120
+ 2. Run `yarn build:openapi` to compile templates
121
+ 3. Validate with `yarn validate:api`
122
+ 4. Uses `@redocly/openapi-cli` for bundling
123
+
124
+ ### Testing Workflow
125
+ 1. **Unit tests**: Run locally without dependencies
126
+ 2. **Integration tests**: Require Docker services (Redis, Kafka)
127
+ 3. **Functional tests**: Full end-to-end scenarios with TTK
128
+ 4. Use `yarn wait-4-docker` to ensure services are ready
129
+
130
+ ## Common Development Tasks
131
+
132
+ See [development-commands.md](./_cc/docs/development-commands.md) for all commands and [common-workflows.md](./_cc/docs/common-workflows.md) for step-by-step guides.
133
+
134
+ ## For AI Assistants (Memory Management Hints)
135
+
136
+ **Always Re-read Before:**
137
+ - Modifying OpenAPI specs → Review OpenAPI Workflow section first
138
+ - Running integration tests → Verify Docker prerequisites and Testing Workflow
139
+ - Making state machine changes → Review api-svc-06-state-management.md
140
+ - Debugging test failures → Check development-commands.md for troubleshooting
141
+
142
+ **Cache (Low Change Frequency):**
143
+ - Architecture: 3 TypeScript modules (command-handler, domain-handler, shared-lib) + api-svc (JavaScript)
144
+ - Event flow: Command events → outbound-command-event-handler → Domain events → outbound-domain-event-handler
145
+ - Redis patterns: State machines, distributed cache, pub/sub, bulk transaction tracking
146
+ - Kafka topics: `topic-sdk-outbound-command-events`, `topic-sdk-outbound-domain-events`
147
+ - Package manager: Yarn 4.10.2 (Berry)
148
+ - Node version: 22.15.1
149
+
150
+ **Key Patterns to Remember:**
151
+ - Edit `*_template.yaml` files, NEVER edit generated `api.yaml` files
152
+ - State machines use `PersistentStateMachine` class backed by Redis
153
+ - Integration tests require Docker services - use `yarn wait-4-docker`
154
+ - Use workspace syntax: `yarn workspace @mojaloop/sdk-scheme-adapter-<module> run <command>`
155
+ - Nx caching enabled for builds/tests - use `--skip-nx-cache` to bypass
156
+
157
+ **When Uncertain:**
158
+ - Ask user ANY clarifying questions
159
+ - Check Quick Reference section at top of this file
160
+ - Consult api-svc-01-overview.md for 30-minute onboarding
161
+ - Use development-commands.md for command reference
162
+ - See common-workflows.md for step-by-step task guides
163
+
164
+ ## Documentation
165
+
166
+ ### API-SVC Module Documentation
167
+
168
+ Comprehensive documentation for the `api-svc` module (core service handling inbound/outbound APIs):
169
+
170
+
171
+ | Document | Description |
172
+ |----------|-------------|
173
+ | **[api-svc-01-overview.md](./_cc/docs/api-svc/api-svc-01-overview.md)** | Overview, quick start guide, 30-minute onboarding with core concepts and transfer flows |
174
+ | **[api-svc-02-architecture.md](./_cc/docs/api-svc/api-svc-02-architecture.md)** | System architecture, component design, configuration system, startup sequence |
175
+ | **[api-svc-03-inbound-server.md](./_cc/docs/api-svc/api-svc-03-inbound-server.md)** | Inbound server handling async FSPIOP callbacks from Mojaloop switch |
176
+ | **[api-svc-04-outbound-server.md](./_cc/docs/api-svc/api-svc-04-outbound-server.md)** | Outbound server providing synchronous REST API for DFSP backends |
177
+ | **[api-svc-05-models.md](./_cc/docs/api-svc/api-svc-05-models.md)** | Business logic models orchestrating party lookups, quotes, transfers, bulk operations |
178
+ | **[api-svc-06-state-management.md](./_cc/docs/api-svc/api-svc-06-state-management.md)** | Redis-backed state machines, pub/sub patterns, key patterns, recovery behavior |
179
+ | **[api-svc-07-control-agent.md](./_cc/docs/api-svc/api-svc-07-control-agent.md)** | WebSocket client for PM4ML Management API dynamic configuration |
180
+ | **[api-svc-08-error-handling.md](./_cc/docs/api-svc/api-svc-08-error-handling.md)** | Error taxonomy, Mojaloop error codes, handling patterns, logging strategies |
181
+ | **[api-svc-09-core-dependencies.md](./_cc/docs/api-svc/api-svc-09-core-dependencies.md)** | Core dependencies including @mojaloop/sdk-standard-components, JWS, ILP, OIDC |
182
+ | **[api-svc-10-service-lifecycle.md](./_cc/docs/api-svc/api-svc-10-service-lifecycle.md)** | Service startup/shutdown sequences, component bootstrap order, configuration sources, hot reload |
183
+ | **[api-svc-11-event-handlers.md](./_cc/docs/api-svc/api-svc-11-event-handlers.md)** | Kafka event handlers for domain/command events integration with TypeScript modules |
184
+ | **[api-svc-12-testing.md](./_cc/docs/api-svc/api-svc-12-testing.md)** | Testing strategy covering unit, integration, and functional tests |
185
+ | **[api-svc-13-deployment.md](./_cc/docs/api-svc/api-svc-13-deployment.md)** | Kubernetes deployment with Helm charts, production configuration, monitoring |
186
+ | **[api-svc-14-examples.md](./_cc/docs/api-svc/api-svc-14-examples.md)** | Practical examples: outbound/inbound transfers, error handling, bulk operations, auto-accept |
@@ -0,0 +1,74 @@
1
+ You are a senior backend engineer mentoring interns/junior JS developers. Your task is to study this repository
2
+ (it also cn be found by link: https://github.com/mojaloop/sdk-scheme-adapter)
3
+
4
+ Target branch: `main`; if multiple active branches or major forks exist, compare and note differences)
5
+
6
+ ## Mission
7
+ 1) Understand and explain Business Logic and Architecture.
8
+ 2) Produce accurate, implementation-level notes (no hand-waving).
9
+ 3) Save all findings as Markdown files in `./_cc/docs` folder suitable for onboarding juniors.
10
+ 4) Prefer concise, example-driven explanations with TypeScript/JavaScript snippets and Mermaid diagrams.
11
+ 5) Link all new files in `CLAUDE.md` with really brief explanation what each file is about.
12
+
13
+ ## Critical Focus Areas (business logic, architecture, and main implementation details)
14
+ - Inbound server (FSPIOP / ISO 20022 formats)
15
+ - Outbound server (Mojaloop SDK Outbound Scheme Adapter API)
16
+ - Request state management (Redis usage, keys, TTLs, state-machine/lifecycle)
17
+ - ControlAgent (WebSocket agent) integration with PM4ML management API:
18
+ https://github.com/pm4ml/mojaloop-payment-manager-management-api
19
+ - Mojaloop SDK Backend API (interactions with core connectors and DFSP backend systems)
20
+
21
+ ## Deliverables (Markdown in ./_cc/docs)
22
+ Create separate files (add more if helpful):
23
+ - High-level overview + quickstart. Who uses this service, how it fits Mojaloop hub DFSP workflows.
24
+ - System context, containers/components, runtime topology, configs/env. Include:
25
+ - Sequence diagrams (PlantUML) for key flows (e.g., Payer DFSP -> Inbound -> Backend -> Outbound -> Switch -> callback).
26
+ - Inbound Server: Purpose, routes, request/response schemas, auth/security, validation, error handling, retry/backoff, logging/tracing.
27
+ - Outbound Server: Outbound API surface, happy-path + failure flows, idempotency, correlation IDs, callback handling.
28
+ - Request State Management (using Redis):
29
+ - Keys, value shapes, expirations, pub/sub usage (if any), transactionality.
30
+ - State machine diagram (Mermaid) for request lifecycle (init → pending → fulfilled/errored/cancelled).
31
+ - Recovery logic on restarts, exactly-once/at-least-once semantics, race-condition mitigations.
32
+ - ControlAgent design:
33
+ - WebSocket lifecycle, message formats, heartbeats, reconnection, auth.
34
+ - Interface with PM4ML management API (endpoints used, commands, examples) - https://github.com/pm4ml/mojaloop-payment-manager-management-api
35
+ - Backend API: Mojaloop SDK Backend API spec relevant here:
36
+ - Endpoints, payload shapes, correlation rules, error codes.
37
+ - Mapping between inbound/outbound and backend calls (table).
38
+ - Error handling patterns: Error taxonomy, standardized problem codes, logs, metrics, traces.
39
+ - Glossary — Mojaloop terms, DFSP, transfer, quote, callback, ILP, FSPIOP, etc., with links to code.
40
+
41
+ ## Analysis Instructions
42
+ - Read source code, package.json scripts, config files, OpenAPI/Swagger specs, and README(s).
43
+ - Infer actual behavior from code over docs when they disagree; call out discrepancies.
44
+ - Capture all external dependencies (libraries, services, ports).
45
+ - Map end-to-end flows for: party lookup, quote, transfer, and callback handling.
46
+ - Document correlation and idempotency strategies (HTTP headers, FSPIOP signatures/urls, state keys).
47
+ - Note security: TLS, signing, auth between components, any PII handling, and compliance concerns.
48
+ - For Redis, provide concrete key examples and short JS code snippets showing set/get patterns used here.
49
+ - For each HTTP/WebSocket route: method, path, request schema, response schema, main side effects, and error paths.
50
+ - Include small, runnable TS/JS examples that mimic real requests (curl + axios snippets).
51
+
52
+ ## Writing Style
53
+ - Audience: junior JS devs. Prioritize clarity and accuracy; keep sections short with examples.
54
+ - Use TypeScript types where feasible. Avoid framework-agnostic pseudocode when real code exists.
55
+ - Provide “Why it’s designed this way” notes and trade-offs.
56
+ - Link to source files by path (e.g., `src/handlers/inbound/…`).
57
+ - Avoid speculation; if unknown, create a TODO in a “Gaps & Open Questions” section.
58
+
59
+ ## Output Rules
60
+ - DO NOT execute the code; perform static analysis only.
61
+ - Produce all files in `./_cc/docs`.
62
+ - Use GitHub-flavored Markdown; keep line length reasonable.
63
+ - Include a short “Onboarding in 30 minutes” section.
64
+ - Update `CLAUDE.md` with links to new files.
65
+
66
+ ## Validation Checklist (include at end of each file)
67
+ - [ ] Routes and payloads verified against code
68
+ - [ ] Error paths documented
69
+ - [ ] Examples compile in TS
70
+ - [ ] Links/paths correct
71
+
72
+ Begin now. If repo structure suggests different file splits, propose and proceed.
73
+
74
+ If you have any questions or hesitations, please ask immediately.
@@ -0,0 +1,45 @@
1
+
2
+ 1. Read `CLAUDE.md`
3
+ 2. Read additional _docs_ to get better context:
4
+ 1. `[api-svc-01-overview.md](../docs/api-svc/api-svc-01-overview.md)`
5
+ 2. `[api-svc-07-control-agent.md](../docs/api-svc/api-svc-07-control-agent.md)`
6
+ 3. Read Jira ticket CSI-1864: https://infitx-technologies.atlassian.net/jira/software/c/projects/CSI/boards/12/backlog?assignee=712020%3A5680aa00-ab49-4175-96be-384e78ebaa45&selectedIssue=CSI-1864
7
+ 1. Analyze description, check Acceptance Criteria. If not able to access Jira, see the `Jira Details` section below
8
+ 2. Understand the problem we want to solve in scope of the story, identify which components need to be added/modified.
9
+ 3. Check in huge detail actual code implementation of involved components, understand how related logic works now.
10
+ 4. Ask any clarification if needed!
11
+ 4. Create high-level implementation plan, split on tasks, suggest testing plan (with test cases for new logic)
12
+ 5. One of my junior colleague provided me detailed implementation plan for the story: `/home/eugen/projects/ML/sdk-scheme-adapter/_cc/specs/story-CSI-1864-plan.md`:
13
+ 1. Analyze it, and give your feedback how to improve and/or optimize that plan
14
+ 2. Compare your high-level plan with that one, come up with suggestion how to combine there two plans into one final plan
15
+ 3. Suggestion from my side how to improve colleague's plan:
16
+ 1. For polling, try to reuse `controlClient` which we already use for listening to `ControlAgent.EVENT.RECONFIGURE` event instead of creating new one
17
+ 2. Pass this `controlClient` to `_startConfigPolling()` or access `this.controlClient` inside it
18
+ 4. Suggest any changes you think needed, and ask my approval!
19
+ 5. Store final plan in `/home/eugen/projects/ML/sdk-scheme-adapter/_cc/specs/story-CSI-1864-final-plan.md`
20
+ 6. Ask me to review your final plan, before any code changes!
21
+ 7. Update `CLAUDE.md` and `api-svc-07-control-agent.md` with new changes details
22
+
23
+ ## Jira Details
24
+
25
+ ### Story description:
26
+ ```
27
+ Implement Failsafe Mechanism in SDK to Poll Configuration Changes from Management API
28
+ This problem results in transactions failing through that connection, which can be a DFSP connection, or a proxy connection to another scheme. I.e. if this occurs in a proxy, then in the current configuration all transaction will fail. There have been numerous attempts to fix the stale certificate sdk problem, yet the problem perisists. This story is about taking a new approach that will elimitate this problem.
29
+
30
+ Currently, the SDK Scheme Adapter relies on notifications from the Management API to update its configuration — for example, when new participant certificates or JWS keys are updated.
31
+ However, in some cases these notifications may not be delivered reliably (due to network issues, restarts, or transient errors), which can lead to JWS desynchronization between the SDK and the Management Service.
32
+
33
+ To address this, introduce a failsafe polling mechanism within the SDK that periodically polls the Management API for configuration updates. This ensures that even if event-driven updates fail, the SDK eventually synchronizes its configuration.
34
+ ```
35
+
36
+ ## Acceptance Criteria:
37
+ 1. The SDK includes a background polling mechanism that periodically checks for configuration updates from the Management API.
38
+ 2. Polling frequency is configurable through an environment variable, e.g. MANAGEMENT_API_POLL_INTERVAL_MS.
39
+ 3. If no interval is configured, the failsafe polling feature is disabled (default behavior).
40
+ 4. When polling is enabled, the SDK should:
41
+ 1. Fetch and compare the configuration with the current state.
42
+ 2. Apply updates if changes are detected.
43
+ 3. Log both successful updates and polling errors with clear messages.
44
+ 5. The implementation must not cause race conditions with live notifications — if both notification and polling update the config simultaneously, the state remains consistent.
45
+ 6. Unit tests added to validate:
@@ -95,7 +95,7 @@ services:
95
95
  kafka:
96
96
  networks:
97
97
  - mojaloop-net
98
- image: docker.io/bitnami/kafka:3.4.0
98
+ image: docker.io/bitnamilegacy/kafka:3.4.0
99
99
  container_name: kafka
100
100
  ports:
101
101
  - "9092:9092"
@@ -156,7 +156,7 @@ services:
156
156
  init-kafka:
157
157
  networks:
158
158
  - mojaloop-net
159
- image: docker.io/bitnami/kafka:3.4.0
159
+ image: docker.io/bitnamilegacy/kafka:3.4.0
160
160
  depends_on:
161
161
  kafka:
162
162
  condition: service_healthy
@@ -126,7 +126,7 @@ CHECK_ILP=true
126
126
  # set to true to enable test features such as request cacheing and retrieval endpoints
127
127
  ENABLE_TEST_FEATURES=false
128
128
 
129
- # set to true to mock WSO2 oauth2 token endpoint
129
+ # set to true to mock OIDC oauth2 token endpoint
130
130
  ENABLE_OAUTH_TOKEN_ENDPOINT=false
131
131
  OAUTH_TOKEN_ENDPOINT_CLIENT_KEY=test-client-key
132
132
  OAUTH_TOKEN_ENDPOINT_CLIENT_SECRET=test-client-secret
@@ -135,7 +135,7 @@ OAUTH_TOKEN_ENDPOINT_LISTEN_PORT=6000
135
135
  # WSO2 Bearer Token specific to golden-fsp instance and environment
136
136
  WSO2_BEARER_TOKEN=7718fa9b-be13-3fe7-87f0-a12cf1628168
137
137
 
138
- # OAuth2 data used to obtain WSO2 bearer token
138
+ # OAuth2 data used to obtain OIDC bearer token
139
139
  OAUTH_TOKEN_ENDPOINT=
140
140
  OAUTH_CLIENT_KEY=
141
141
  OAUTH_CLIENT_SECRET=
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mojaloop/sdk-scheme-adapter-api-svc",
3
- "version": "21.0.0-snapshot.70",
3
+ "version": "21.0.0-snapshot.71",
4
4
  "description": "An adapter for connecting to Mojaloop API enabled switches.",
5
5
  "main": "src/index.js",
6
6
  "types": "src/index.d.ts",
@@ -64,21 +64,21 @@
64
64
  },
65
65
  "dependencies": {
66
66
  "@koa/cors": "5.0.0",
67
- "@mojaloop/api-snippets": "18.1.1",
68
- "@mojaloop/central-services-error-handling": "13.1.2",
67
+ "@mojaloop/api-snippets": "18.2.0",
68
+ "@mojaloop/central-services-error-handling": "13.1.3",
69
69
  "@mojaloop/central-services-logger": "11.10.1",
70
- "@mojaloop/central-services-metrics": "12.7.1",
71
- "@mojaloop/central-services-shared": "18.33.3",
72
- "@mojaloop/event-sdk": "14.7.0",
70
+ "@mojaloop/central-services-metrics": "12.8.0",
71
+ "@mojaloop/central-services-shared": "18.34.1",
72
+ "@mojaloop/event-sdk": "14.8.0",
73
73
  "@mojaloop/logging-bc-client-lib": "0.5.8",
74
74
  "@mojaloop/ml-schema-transformer-lib": "2.7.8",
75
75
  "@mojaloop/sdk-scheme-adapter-private-shared-lib": "workspace:^",
76
- "@mojaloop/sdk-standard-components": "19.17.0",
76
+ "@mojaloop/sdk-standard-components": "19.18.0",
77
77
  "ajv": "8.17.1",
78
78
  "axios": "1.12.2",
79
79
  "body-parser": "2.2.0",
80
80
  "co-body": "6.2.0",
81
- "dotenv": "17.2.2",
81
+ "dotenv": "17.2.3",
82
82
  "env-var": "7.5.0",
83
83
  "express": "4.21.2",
84
84
  "fast-json-patch": "3.1.1",
@@ -96,7 +96,7 @@
96
96
  "prom-client": "15.1.3",
97
97
  "promise-timeout": "1.3.0",
98
98
  "random-word-slugs": "0.1.7",
99
- "redis": "5.8.2",
99
+ "redis": "5.8.3",
100
100
  "retry": "^0.13.1",
101
101
  "uuidv4": "6.2.13",
102
102
  "ws": "8.18.3"
@@ -108,7 +108,7 @@
108
108
  "@types/jest": "30.0.0",
109
109
  "@types/retry": "^0",
110
110
  "axios-mock-adapter": "2.1.0",
111
- "babel-jest": "30.1.2",
111
+ "babel-jest": "30.2.0",
112
112
  "eslint": "9.15.0",
113
113
  "eslint-config-airbnb-base": "15.0.0",
114
114
  "eslint-plugin-import": "2.32.0",
@@ -40,12 +40,15 @@
40
40
  // the current configuration to
41
41
 
42
42
  const ws = require('ws');
43
+ const _ = require('lodash');
43
44
  const jsonPatch = require('fast-json-patch');
45
+ const safeStringify = require('fast-safe-stringify');
44
46
  const { generateSlug } = require('random-word-slugs');
45
- const _ = require('lodash');
46
47
 
47
48
  const FORCE_WS_CLOSE_TIMEOUT_MS = 5000;
48
49
 
50
+ const cloneJson = (obj) => JSON.parse(safeStringify(obj));
51
+
49
52
  /**************************************************************************
50
53
  * The message protocol messages, verbs, and errors
51
54
  *************************************************************************/
@@ -77,7 +80,7 @@ const EVENT = {
77
80
  /**************************************************************************
78
81
  * Private convenience functions
79
82
  *************************************************************************/
80
- const serialise = JSON.stringify;
83
+ const serialise = safeStringify;
81
84
  const deserialise = (msg) => {
82
85
  //reviver function
83
86
  return JSON.parse(msg.toString(), (k, v) => {
@@ -144,9 +147,11 @@ class Client extends ws {
144
147
  * `Client` instances outside of this class should be created via the `Create(...args)` static method.
145
148
  */
146
149
  constructor({ address = 'localhost', port, logger, appConfig }) {
147
- super(`ws://${address}:${port}`);
148
- this._logger = logger.push({ component: 'ControlClient' });
150
+ const wsUrl = `ws://${address}:${port}`;
151
+ super(wsUrl);
152
+ this._logger = logger.push({ component: 'ControlClientWs' });
149
153
  this._appConfig = appConfig;
154
+ this._wsUrl = wsUrl;
150
155
  }
151
156
 
152
157
  // Really only exposed so that a user can import only the client for convenience
@@ -173,28 +178,30 @@ class Client extends ws {
173
178
  async receive() {
174
179
  return new Promise((resolve) => this.once('message', (data) => {
175
180
  const msg = deserialise(data);
176
- this._logger.isDebugEnabled && this._logger.push({ msg }).debug('Received');
181
+ this._logger.push({ msg }).debug('Received and deserialized ws message:');
177
182
  resolve(msg);
178
183
  }));
179
184
  }
180
185
 
181
186
  // Close connection
182
187
  async stop() {
183
- this._logger.isDebugEnabled && this._logger.debug('Control client shutting down...');
188
+ this._logger.verbose('Control client shutting down...');
184
189
  return new Promise((resolve) => {
185
190
  let timer = setTimeout(() => {
186
- this._logger.isInfoEnabled && this._logger.info('Control client forced to close');
191
+ this._logger.warn(`Control client forced to close after ${FORCE_WS_CLOSE_TIMEOUT_MS}ms`);
192
+ this.terminate();
187
193
  timer = null;
188
194
  resolve(false);
189
195
  }, FORCE_WS_CLOSE_TIMEOUT_MS);
190
196
 
191
197
  this.once('close', () => {
192
- this._logger.isInfoEnabled && this._logger.info('Control client is closed');
198
+ this._logger.info('Control client is closed');
193
199
  if (timer) clearTimeout(timer);
200
+ this.removeAllListeners();
194
201
  resolve(true);
195
202
  });
196
203
  this.once('error', (error) => {
197
- this._logger.isWarnEnabled && this._logger.push({ error }).warn('Control client failed to close');
204
+ this._logger.warn('Control client failed to close:', error);
198
205
  if (timer) clearTimeout(timer);
199
206
  resolve(false);
200
207
  });
@@ -203,6 +210,23 @@ class Client extends ws {
203
210
  });
204
211
  }
205
212
 
213
+ /**
214
+ * Call the Connector Manager in Management API to get the updated config
215
+ */
216
+ async getUpdatedConfig() { // clarify naming - why config is updated?
217
+ this._logger.info(`Getting updated config from Management API at ${this._wsUrl}...`);
218
+ const wsSendResponse = await this.send(build.CONFIGURATION.READ());
219
+ this._logger.debug('wsSendResponse: ', { wsSendResponse });
220
+
221
+ const wsReceivedData = (await this.receive())?.data;
222
+ this._logger.debug('wsReceivedData: ', { wsReceivedData });
223
+
224
+ if (!wsReceivedData) this._logger.warn('no updatedConfigFromMgmtAPI');
225
+ else this._logger.info('updatedConfigFromMgmtAPI keys:', { updatedConfigFromMgmtAPIKeys: Object.keys(wsReceivedData) });
226
+
227
+ return wsReceivedData;
228
+ }
229
+
206
230
  // Handle incoming message from the server.
207
231
  _handle(data) {
208
232
  // TODO: json-schema validation of received message- should be pretty straight-forward
@@ -211,7 +235,7 @@ class Client extends ws {
211
235
  try {
212
236
  msg = deserialise(data);
213
237
  } catch {
214
- this._logger.isErrorEnabled && this._logger.push({ data }).console.error();('Couldn\'t parse received message');
238
+ this._logger.warn('failed to parse received message: ', { data });
215
239
  this.send(build.ERROR.NOTIFY.JSON_PARSE_ERROR());
216
240
  }
217
241
  this._logger.isDebugEnabled && this._logger.push({ msg }).debug('Handling received message');
@@ -219,14 +243,14 @@ class Client extends ws {
219
243
  case MESSAGE.CONFIGURATION:
220
244
  switch (msg.verb) {
221
245
  case VERB.NOTIFY: {
222
- const dup = JSON.parse(JSON.stringify(this._appConfig)); // fast-json-patch explicitly mutates
246
+ const dup = cloneJson(this._appConfig); // fast-json-patch explicitly mutates
223
247
  _.merge(dup, msg.data);
224
248
  this._logger.isDebugEnabled && this._logger.push({ oldConf: this._appConfig, newConf: dup }).debug(`Emitting new agent configuration [${VERB.NOTIFY}]`);
225
249
  this.emit(EVENT.RECONFIGURE, dup);
226
250
  break;
227
251
  }
228
252
  case VERB.PATCH: {
229
- const dup = JSON.parse(JSON.stringify(this._appConfig)); // fast-json-patch explicitly mutates
253
+ const dup = cloneJson(this._appConfig); // fast-json-patch explicitly mutates
230
254
  jsonPatch.applyPatch(dup, msg.data);
231
255
  this._logger.isDebugEnabled && this._logger.push({ oldConf: this._appConfig, newConf: dup }).debug(`Emitting new agent configuration [${VERB.PATCH}]`);
232
256
  this.emit(EVENT.RECONFIGURE, dup);
@@ -255,9 +279,18 @@ class Client extends ws {
255
279
  }
256
280
  }
257
281
 
282
+ const createConnectedControlAgentWs = async (conf, log) => {
283
+ return await Client.Create({
284
+ address: conf.control.mgmtAPIWsUrl,
285
+ port: conf.control.mgmtAPIWsPort,
286
+ appConfig: conf,
287
+ logger: log,
288
+ });
289
+ };
258
290
 
259
291
 
260
292
  module.exports = {
293
+ createConnectedControlAgentWs,
261
294
  Client,
262
295
  build,
263
296
  MESSAGE,
@@ -43,7 +43,7 @@ module.exports.handleBulkQuotesRequestedDmEvt = async (
43
43
  ...options.config,
44
44
  cache: options.cache,
45
45
  logger: logger,
46
- wso2: options.wso2,
46
+ oidc: options.oidc,
47
47
  });
48
48
 
49
49
  await model.initialize(event.request);
@@ -43,7 +43,7 @@ module.exports.handleBulkTransfersRequestedDmEvt = async (
43
43
  ...options.config,
44
44
  cache: options.cache,
45
45
  logger: logger,
46
- wso2: options.wso2,
46
+ oidc: options.oidc,
47
47
  });
48
48
 
49
49
  await model.initialize(event.request);
@@ -46,7 +46,7 @@ module.exports.handlePartyInfoRequestedDmEvt = async (
46
46
  ...options.config,
47
47
  cache: options.cache,
48
48
  logger: logger,
49
- wso2: options.wso2,
49
+ oidc: options.oidc,
50
50
  };
51
51
 
52
52
  const cacheKey = PartiesModel.generateKey(args);
@@ -44,11 +44,11 @@ const {
44
44
  } = require('./handlers');
45
45
 
46
46
  class FSPIOPEventHandler {
47
- constructor({ config, logger, cache, wso2 }) {
47
+ constructor({ config, logger, cache, oidc }) {
48
48
  this._conf = config;
49
49
  this._logger = logger.push({ component: this.constructor.name });
50
50
  this._cache = cache;
51
- this._wso2 = wso2;
51
+ this._oidc = oidc;
52
52
 
53
53
  this._loggerFromLoggingBC = new DefaultLogger(BC_CONFIG.bcName, 'fspiop-event-handler', '0.0.1', config.logLevel);
54
54
 
@@ -70,7 +70,7 @@ class FSPIOPEventHandler {
70
70
  producer: this._producer,
71
71
  consumer: this._consumer,
72
72
  cache: this._cache,
73
- wso2: this._wso2,
73
+ oidc: this._oidc,
74
74
  config: this._conf,
75
75
  };
76
76
 
@@ -74,7 +74,7 @@ const createInboundTransfersModel = (ctx) => new InboundTransfersModel({
74
74
  },
75
75
  cache: ctx.state.cache,
76
76
  logger: ctx.state.logger,
77
- wso2: ctx.state.wso2,
77
+ oidc: ctx.state.oidc,
78
78
  resourceVersions: ctx.resourceVersions,
79
79
  backendSharedAgents: ctx.state.backendSharedAgents,
80
80
  mojaloopSharedAgents: ctx.state.mojaloopSharedAgents,
@@ -1133,14 +1133,14 @@ const createPutFxTransfersHandler = (success) => async (ctx) => {
1133
1133
  };
1134
1134
 
1135
1135
  const handlePostPing = (ctx) => {
1136
- const { jwsPingValidationResult, conf, logger, wso2 } = ctx.state;
1136
+ const { jwsPingValidationResult, conf, logger, oidc } = ctx.state;
1137
1137
  const { sourceFspId, body, headers } = extractBodyHeadersSourceFspId(ctx);
1138
1138
 
1139
1139
  const model = new InboundPingModel({
1140
1140
  ...conf,
1141
1141
  resourceVersions: ctx.resourceVersions,
1142
1142
  logger,
1143
- wso2,
1143
+ oidc,
1144
1144
  });
1145
1145
  model.postPing({ jwsPingValidationResult, sourceFspId, body, headers })
1146
1146
  .catch(err => logger.error('error in handlePostPing:', err));