@noodleseed/one 0.162.0 → 0.163.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 (308) hide show
  1. package/dist/commands/billing-catalog-ops.d.ts +4 -0
  2. package/dist/commands/billing-catalog-ops.d.ts.map +1 -0
  3. package/dist/commands/billing-catalog-ops.js +58 -0
  4. package/dist/commands/billing-catalog-ops.js.map +1 -0
  5. package/dist/commands/billing-ops.d.ts.map +1 -1
  6. package/dist/commands/billing-ops.js +3 -0
  7. package/dist/commands/billing-ops.js.map +1 -1
  8. package/dist/commands/catalog.d.ts.map +1 -1
  9. package/dist/commands/catalog.js +2 -0
  10. package/dist/commands/catalog.js.map +1 -1
  11. package/dist/commands/config-values.d.ts.map +1 -1
  12. package/dist/commands/config-values.js +16 -0
  13. package/dist/commands/config-values.js.map +1 -1
  14. package/dist/commands/installation-variables.d.ts +26 -0
  15. package/dist/commands/installation-variables.d.ts.map +1 -0
  16. package/dist/commands/installation-variables.js +171 -0
  17. package/dist/commands/installation-variables.js.map +1 -0
  18. package/dist/commands/solutions-activity.d.ts +5 -0
  19. package/dist/commands/solutions-activity.d.ts.map +1 -0
  20. package/dist/commands/solutions-activity.js +116 -0
  21. package/dist/commands/solutions-activity.js.map +1 -0
  22. package/dist/commands/solutions-connections.d.ts +7 -0
  23. package/dist/commands/solutions-connections.d.ts.map +1 -0
  24. package/dist/commands/solutions-connections.js +88 -0
  25. package/dist/commands/solutions-connections.js.map +1 -0
  26. package/dist/commands/solutions-installation-options.d.ts +5 -0
  27. package/dist/commands/solutions-installation-options.d.ts.map +1 -0
  28. package/dist/commands/solutions-installation-options.js +52 -0
  29. package/dist/commands/solutions-installation-options.js.map +1 -0
  30. package/dist/commands/solutions-onboarding.d.ts +5 -0
  31. package/dist/commands/solutions-onboarding.d.ts.map +1 -0
  32. package/dist/commands/solutions-onboarding.js +113 -0
  33. package/dist/commands/solutions-onboarding.js.map +1 -0
  34. package/dist/commands/solutions-ops.d.ts.map +1 -1
  35. package/dist/commands/solutions-ops.js +278 -17
  36. package/dist/commands/solutions-ops.js.map +1 -1
  37. package/dist/index.d.ts +1 -1
  38. package/dist/index.d.ts.map +1 -1
  39. package/dist/index.js +1 -1
  40. package/dist/index.js.map +1 -1
  41. package/node_modules/@noodle-borg/admission-limits/dist/counter-store.d.ts +21 -2
  42. package/node_modules/@noodle-borg/admission-limits/dist/counter-store.js +10 -1
  43. package/node_modules/@noodle-borg/admission-limits/dist/in-memory-counter-store.d.ts +5 -1
  44. package/node_modules/@noodle-borg/admission-limits/dist/in-memory-counter-store.js +31 -2
  45. package/node_modules/@noodle-borg/admission-limits/dist/portable.d.ts +3 -0
  46. package/node_modules/@noodle-borg/admission-limits/dist/portable.js +3 -0
  47. package/node_modules/@noodle-borg/admission-limits/dist/public-admission-assertion.d.ts +28 -0
  48. package/node_modules/@noodle-borg/admission-limits/dist/public-admission-assertion.js +124 -0
  49. package/node_modules/@noodle-borg/admission-limits/dist/public-record-admission.d.ts +54 -0
  50. package/node_modules/@noodle-borg/admission-limits/dist/public-record-admission.js +74 -0
  51. package/node_modules/@noodle-borg/admission-limits/dist/request-attribution.d.ts +11 -0
  52. package/node_modules/@noodle-borg/admission-limits/dist/request-attribution.js +19 -0
  53. package/node_modules/@noodle-borg/agent-kit/dist/curated/error-fixes.js +2 -0
  54. package/node_modules/@noodle-borg/agent-kit/dist/generated/example-files.js +5 -5
  55. package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.js +3 -0
  56. package/node_modules/@noodle-borg/agent-kit/dist/skill-authoring-refs.js +15 -3
  57. package/node_modules/@noodle-borg/agent-kit/dist/skill-content.js +1 -1
  58. package/node_modules/@noodle-borg/agent-kit/package.json +1 -1
  59. package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-configuration.d.ts +9 -1
  60. package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-configuration.js +33 -2
  61. package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-execution-bound.d.ts +3 -0
  62. package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-execution-bound.js +29 -0
  63. package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-interaction-state.d.ts +5 -3
  64. package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-interaction-state.js +21 -10
  65. package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-store.d.ts +1 -1
  66. package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-store.js +3 -3
  67. package/node_modules/@noodle-borg/assistant-gateway/dist/portable.d.ts +1 -0
  68. package/node_modules/@noodle-borg/assistant-gateway/dist/portable.js +1 -0
  69. package/node_modules/@noodle-borg/assistant-gateway/dist/session-target.js +5 -4
  70. package/node_modules/@noodle-borg/authoring/dist/config.d.ts +20 -0
  71. package/node_modules/@noodle-borg/authoring/dist/config.js +29 -2
  72. package/node_modules/@noodle-borg/authoring/dist/connectors.d.ts +6 -1
  73. package/node_modules/@noodle-borg/authoring/dist/connectors.js +5 -0
  74. package/node_modules/@noodle-borg/authoring/dist/index.d.ts +2 -2
  75. package/node_modules/@noodle-borg/authoring/dist/json-schema.d.ts +1 -1
  76. package/node_modules/@noodle-borg/authoring/dist/json-schema.js +15 -2
  77. package/node_modules/@noodle-borg/authoring/dist/load-authored.js +1 -1
  78. package/node_modules/@noodle-borg/authoring/dist/managed-collection.d.ts +18 -4
  79. package/node_modules/@noodle-borg/authoring/dist/managed-collection.js +22 -3
  80. package/node_modules/@noodle-borg/authoring/dist/platform.d.ts +3 -0
  81. package/node_modules/@noodle-borg/authoring/dist/platform.js +4 -0
  82. package/node_modules/@noodle-borg/authoring/dist/server-presentation.js +43 -0
  83. package/node_modules/@noodle-borg/authoring/dist/server.d.ts +3 -1
  84. package/node_modules/@noodle-borg/authoring/dist/server.js +4 -44
  85. package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-billing.js +18 -0
  86. package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-config.js +31 -4
  87. package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-solutions.js +778 -0
  88. package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-tenant-resources.js +0 -241
  89. package/node_modules/@noodle-borg/cli-catalog/dist/catalog-types.js +7 -0
  90. package/node_modules/@noodle-borg/cli-catalog/dist/index.js +20 -0
  91. package/node_modules/@noodle-borg/compiler/dist/artifact/assemble.js +2 -1
  92. package/node_modules/@noodle-borg/compiler/dist/artifact/catalog-emission.js +3 -1
  93. package/node_modules/@noodle-borg/compiler/dist/artifact/config.js +3 -0
  94. package/node_modules/@noodle-borg/compiler/dist/artifact/types.d.ts +17 -1
  95. package/node_modules/@noodle-borg/compiler/dist/artifact/version.d.ts +6 -1
  96. package/node_modules/@noodle-borg/compiler/dist/artifact/version.js +6 -1
  97. package/node_modules/@noodle-borg/compiler/dist/business-variables.d.ts +27 -0
  98. package/node_modules/@noodle-borg/compiler/dist/business-variables.js +230 -0
  99. package/node_modules/@noodle-borg/compiler/dist/compile.js +7 -1
  100. package/node_modules/@noodle-borg/compiler/dist/errors.d.ts +1 -1
  101. package/node_modules/@noodle-borg/compiler/dist/index.d.ts +3 -0
  102. package/node_modules/@noodle-borg/compiler/dist/index.js +3 -0
  103. package/node_modules/@noodle-borg/compiler/dist/managed-collection-controls.d.ts +52 -0
  104. package/node_modules/@noodle-borg/compiler/dist/managed-collection-controls.js +92 -0
  105. package/node_modules/@noodle-borg/compiler/dist/managed-collections.d.ts +26 -1
  106. package/node_modules/@noodle-borg/compiler/dist/managed-collections.js +190 -1
  107. package/node_modules/@noodle-borg/compiler/dist/manifest/schema.d.ts +100 -36
  108. package/node_modules/@noodle-borg/compiler/dist/manifest/schema.js +2 -0
  109. package/node_modules/@noodle-borg/compiler/dist/native-record-operations.d.ts +7 -0
  110. package/node_modules/@noodle-borg/compiler/dist/native-record-operations.js +59 -0
  111. package/node_modules/@noodle-borg/connector-defs/dist/compile-http.js +83 -8
  112. package/node_modules/@noodle-borg/connector-defs/dist/schema.d.ts +31 -1
  113. package/node_modules/@noodle-borg/connector-defs/dist/schema.js +16 -0
  114. package/node_modules/@noodle-borg/connector-http/dist/http-connector.d.ts +12 -3
  115. package/node_modules/@noodle-borg/connector-http/dist/http-connector.js +41 -2
  116. package/node_modules/@noodle-borg/connector-http/dist/http-response.js +3 -2
  117. package/node_modules/@noodle-borg/connector-http/dist/mcp/config.js +1 -1
  118. package/node_modules/@noodle-borg/connector-http/dist/url-resolution.js +1 -1
  119. package/node_modules/@noodle-borg/control-plane/dist/contracts.d.ts +2 -1
  120. package/node_modules/@noodle-borg/control-plane/dist/in-memory-organization-store.d.ts +3 -0
  121. package/node_modules/@noodle-borg/control-plane/dist/in-memory-organization-store.js +11 -0
  122. package/node_modules/@noodle-borg/control-plane/dist/organization-agreements.d.ts +45 -0
  123. package/node_modules/@noodle-borg/control-plane/dist/organization-agreements.js +74 -0
  124. package/node_modules/@noodle-borg/control-plane/dist/portable.d.ts +1 -0
  125. package/node_modules/@noodle-borg/control-plane/dist/portable.js +1 -0
  126. package/node_modules/@noodle-borg/module/dist/contract.d.ts +20 -0
  127. package/node_modules/@noodle-borg/module/dist/platform-human-identity.d.ts +2 -0
  128. package/node_modules/@noodle-borg/protocol/dist/request-deps.js +1 -0
  129. package/node_modules/@noodle-borg/protocol/dist/request-state.d.ts +1 -0
  130. package/node_modules/@noodle-borg/protocol/dist/request-state.js +11 -2
  131. package/node_modules/@noodle-borg/protocol/dist/sdk-server.d.ts +2 -0
  132. package/node_modules/@noodle-borg/protocol/dist/v2/input-required.js +2 -1
  133. package/node_modules/@noodle-borg/protocol/dist/v2/server.js +2 -1
  134. package/node_modules/@noodle-borg/runtime/dist/ambient-context.js +6 -1
  135. package/node_modules/@noodle-borg/runtime/dist/broker/types.d.ts +2 -0
  136. package/node_modules/@noodle-borg/runtime/dist/business-variables.d.ts +15 -0
  137. package/node_modules/@noodle-borg/runtime/dist/business-variables.js +75 -0
  138. package/node_modules/@noodle-borg/runtime/dist/confirmation-continuation.js +2 -1
  139. package/node_modules/@noodle-borg/runtime/dist/confirmation.js +23 -3
  140. package/node_modules/@noodle-borg/runtime/dist/connector/types.d.ts +17 -1
  141. package/node_modules/@noodle-borg/runtime/dist/connector-snapshot.js +6 -0
  142. package/node_modules/@noodle-borg/runtime/dist/execute.d.ts +18 -3
  143. package/node_modules/@noodle-borg/runtime/dist/execute.js +13 -3
  144. package/node_modules/@noodle-borg/runtime/dist/index.d.ts +2 -0
  145. package/node_modules/@noodle-borg/runtime/dist/index.js +1 -0
  146. package/node_modules/@noodle-borg/runtime/dist/interactive.js +11 -0
  147. package/node_modules/@noodle-borg/runtime/dist/managed-origins.d.ts +3 -1
  148. package/node_modules/@noodle-borg/runtime/dist/managed-origins.js +32 -7
  149. package/node_modules/@noodle-borg/runtime/dist/operation-credential.js +6 -0
  150. package/node_modules/@noodle-borg/runtime/dist/operation-evidence.d.ts +30 -0
  151. package/node_modules/@noodle-borg/runtime/dist/operation-evidence.js +68 -0
  152. package/node_modules/@noodle-borg/runtime/dist/operation-execution.d.ts +2 -2
  153. package/node_modules/@noodle-borg/runtime/dist/operation-execution.js +142 -71
  154. package/node_modules/@noodle-borg/runtime/dist/result.d.ts +6 -4
  155. package/node_modules/@noodle-borg/runtime/dist/tool-dispatch.d.ts +7 -0
  156. package/node_modules/@noodle-borg/runtime/dist/tool-dispatch.js +48 -4
  157. package/node_modules/@noodle-borg/service/dist/admission.js +2 -1
  158. package/node_modules/@noodle-borg/service/dist/application-activity.js +236 -0
  159. package/node_modules/@noodle-borg/service/dist/application-business-notice.js +28 -0
  160. package/node_modules/@noodle-borg/service/dist/application-runtime-target.js +141 -0
  161. package/node_modules/@noodle-borg/service/dist/application-settings-targets.js +72 -0
  162. package/node_modules/@noodle-borg/service/dist/application-settings.js +210 -0
  163. package/node_modules/@noodle-borg/service/dist/business-api-admission.js +121 -0
  164. package/node_modules/@noodle-borg/service/dist/business-information/activity-pagination.js +73 -0
  165. package/node_modules/@noodle-borg/service/dist/business-information/business-notice.d.ts +24 -0
  166. package/node_modules/@noodle-borg/service/dist/business-information/business-notice.js +18 -0
  167. package/node_modules/@noodle-borg/service/dist/business-information/collection-controls.js +51 -0
  168. package/node_modules/@noodle-borg/service/dist/business-information/contracts.d.ts +439 -0
  169. package/node_modules/@noodle-borg/service/dist/business-information/definition-resolver.js +94 -0
  170. package/node_modules/@noodle-borg/service/dist/business-information/in-memory-installation-lifecycle.js +136 -0
  171. package/node_modules/@noodle-borg/service/dist/business-information/in-memory-invitations.js +160 -0
  172. package/node_modules/@noodle-borg/service/dist/business-information/in-memory-locks.js +23 -0
  173. package/node_modules/@noodle-borg/service/dist/business-information/in-memory-store.js +287 -132
  174. package/node_modules/@noodle-borg/service/dist/business-information/installation-capacity.js +10 -0
  175. package/node_modules/@noodle-borg/service/dist/business-information/invitations.js +68 -0
  176. package/node_modules/@noodle-borg/service/dist/business-information/legacy-request-migration.js +60 -0
  177. package/node_modules/@noodle-borg/service/dist/business-information/managed-releases.js +245 -0
  178. package/node_modules/@noodle-borg/service/dist/business-information/managed-solution-blueprints.js +51 -0
  179. package/node_modules/@noodle-borg/service/dist/business-information/managed-solution-executable.js +76 -0
  180. package/node_modules/@noodle-borg/service/dist/business-information/model.js +124 -23
  181. package/node_modules/@noodle-borg/service/dist/business-information/native-query.js +162 -0
  182. package/node_modules/@noodle-borg/service/dist/business-information/native-storage-budget.js +60 -0
  183. package/node_modules/@noodle-borg/service/dist/business-information/pagination.js +28 -0
  184. package/node_modules/@noodle-borg/service/dist/business-information/portable.js +9 -0
  185. package/node_modules/@noodle-borg/service/dist/business-information/principal-authority.d.ts +11 -0
  186. package/node_modules/@noodle-borg/service/dist/business-information/principal-authority.js +42 -0
  187. package/node_modules/@noodle-borg/service/dist/business-information/profiles.js +137 -6
  188. package/node_modules/@noodle-borg/service/dist/business-information/reader-floor.js +26 -0
  189. package/node_modules/@noodle-borg/service/dist/business-information/source-credential-fence.js +79 -0
  190. package/node_modules/@noodle-borg/service/dist/business-information/source-custody-budget.js +30 -0
  191. package/node_modules/@noodle-borg/service/dist/business-information/source-custody-memory.js +122 -0
  192. package/node_modules/@noodle-borg/service/dist/business-information/source-executor.js +191 -0
  193. package/node_modules/@noodle-borg/service/dist/business-information/source-ingestion-contracts.js +2 -0
  194. package/node_modules/@noodle-borg/service/dist/business-information/source-ingestion-coordinator.js +136 -0
  195. package/node_modules/@noodle-borg/service/dist/business-information/source-ingestion-failures.js +32 -0
  196. package/node_modules/@noodle-borg/service/dist/business-information/source-ingestion-memory-state.js +154 -0
  197. package/node_modules/@noodle-borg/service/dist/business-information/source-ingestion-memory-store.js +568 -0
  198. package/node_modules/@noodle-borg/service/dist/business-information/source-ingestion-memory-types.js +26 -0
  199. package/node_modules/@noodle-borg/service/dist/business-information/source-ingestion-memory-values.js +59 -0
  200. package/node_modules/@noodle-borg/service/dist/business-information/source-ingestion-pagination.js +54 -0
  201. package/node_modules/@noodle-borg/service/dist/business-information/source-ingestion-validation.js +163 -0
  202. package/node_modules/@noodle-borg/service/dist/business-information/source-refresh-retention.js +29 -0
  203. package/node_modules/@noodle-borg/service/dist/business-information-runtime.js +80 -0
  204. package/node_modules/@noodle-borg/service/dist/business-onboarding.js +73 -0
  205. package/node_modules/@noodle-borg/service/dist/connections/types.js +8 -0
  206. package/node_modules/@noodle-borg/service/dist/credential-binding-index.js +38 -33
  207. package/node_modules/@noodle-borg/service/dist/deployment-execution.js +275 -0
  208. package/node_modules/@noodle-borg/service/dist/external-credential-binding-broker.js +19 -1
  209. package/node_modules/@noodle-borg/service/dist/external-credential-exchange.d.ts +16 -1
  210. package/node_modules/@noodle-borg/service/dist/modules/host.js +4 -1
  211. package/node_modules/@noodle-borg/service/dist/native-record-connector.d.ts +20 -0
  212. package/node_modules/@noodle-borg/service/dist/native-record-connector.js +206 -0
  213. package/node_modules/@noodle-borg/service/dist/oauth/store.d.ts +3 -0
  214. package/node_modules/@noodle-borg/service/dist/operation-evidence.js +89 -0
  215. package/node_modules/@noodle-borg/service/dist/recovery-quarantine.js +49 -0
  216. package/node_modules/@noodle-borg/service/dist/registry-compile.js +60 -11
  217. package/node_modules/@noodle-borg/service/dist/registry-deploy-transaction.js +18 -0
  218. package/node_modules/@noodle-borg/service/dist/registry-rollback.js +2 -1
  219. package/node_modules/@noodle-borg/service/dist/registry-state.d.ts +1 -1
  220. package/node_modules/@noodle-borg/service/dist/registry-state.js +6 -3
  221. package/node_modules/@noodle-borg/service/dist/registry-targets.js +49 -0
  222. package/node_modules/@noodle-borg/service/dist/registry-types.d.ts +2 -0
  223. package/node_modules/@noodle-borg/service/dist/registry.d.ts +15 -3
  224. package/node_modules/@noodle-borg/service/dist/registry.js +177 -137
  225. package/node_modules/@noodle-borg/service/dist/routes/assistant-appearance.js +3 -2
  226. package/node_modules/@noodle-borg/service/dist/routes/assistant-clients.js +2 -1
  227. package/node_modules/@noodle-borg/service/dist/routes/assistant-doctor.js +2 -1
  228. package/node_modules/@noodle-borg/service/dist/routes/assistant-embeds.js +8 -3
  229. package/node_modules/@noodle-borg/service/dist/routes/assistant-interaction-replay.js +1 -1
  230. package/node_modules/@noodle-borg/service/dist/routes/assistant-interactions.js +48 -36
  231. package/node_modules/@noodle-borg/service/dist/routes/assistant-public-configuration.js +3 -2
  232. package/node_modules/@noodle-borg/service/dist/routes/assistant-public-session.js +10 -10
  233. package/node_modules/@noodle-borg/service/dist/routes/assistant-session-target.js +32 -3
  234. package/node_modules/@noodle-borg/service/dist/routes/assistant-suggestions.js +1 -1
  235. package/node_modules/@noodle-borg/service/dist/routes/assistant-transcript.js +1 -1
  236. package/node_modules/@noodle-borg/service/dist/routes/assistant.js +10 -10
  237. package/node_modules/@noodle-borg/service/dist/routes/business-information-activity.js +83 -0
  238. package/node_modules/@noodle-borg/service/dist/routes/business-information-admission.js +26 -0
  239. package/node_modules/@noodle-borg/service/dist/routes/business-information-channels.js +153 -0
  240. package/node_modules/@noodle-borg/service/dist/routes/business-information-connections.js +107 -0
  241. package/node_modules/@noodle-borg/service/dist/routes/business-information-dispatch.js +87 -4
  242. package/node_modules/@noodle-borg/service/dist/routes/business-information-external.js +79 -0
  243. package/node_modules/@noodle-borg/service/dist/routes/business-information-installation.js +24 -0
  244. package/node_modules/@noodle-borg/service/dist/routes/business-information-notice.js +69 -0
  245. package/node_modules/@noodle-borg/service/dist/routes/business-information-onboarding.js +58 -0
  246. package/node_modules/@noodle-borg/service/dist/routes/business-information-paths.js +76 -0
  247. package/node_modules/@noodle-borg/service/dist/routes/business-information-public.js +151 -0
  248. package/node_modules/@noodle-borg/service/dist/routes/business-information-reader-floor.js +15 -0
  249. package/node_modules/@noodle-borg/service/dist/routes/business-information-record-create.js +29 -0
  250. package/node_modules/@noodle-borg/service/dist/routes/business-information-record-reads.js +36 -0
  251. package/node_modules/@noodle-borg/service/dist/routes/business-information-request.js +64 -0
  252. package/node_modules/@noodle-borg/service/dist/routes/business-information-settings.js +64 -0
  253. package/node_modules/@noodle-borg/service/dist/routes/business-information-source.js +249 -0
  254. package/node_modules/@noodle-borg/service/dist/routes/business-information-staff.js +258 -0
  255. package/node_modules/@noodle-borg/service/dist/routes/business-information-wire.js +226 -26
  256. package/node_modules/@noodle-borg/service/dist/routes/business-information.js +238 -197
  257. package/node_modules/@noodle-borg/service/dist/routes/config-values-dispatch.js +1 -1
  258. package/node_modules/@noodle-borg/service/dist/routes/config-values.js +26 -4
  259. package/node_modules/@noodle-borg/service/dist/routes/control-plane.js +19 -233
  260. package/node_modules/@noodle-borg/service/dist/routes/deployment-activation-response.js +13 -4
  261. package/node_modules/@noodle-borg/service/dist/service-resource-cleanup.js +4 -0
  262. package/node_modules/@noodle-borg/service/dist/service.js +57 -11
  263. package/node_modules/@noodle-borg/service/dist/solution-installation-activation.js +149 -0
  264. package/node_modules/@noodle-borg/service/dist/source-configuration-authority.js +94 -0
  265. package/node_modules/@noodle-borg/service/dist/state-catalog.js +6 -5
  266. package/node_modules/@noodle-borg/service/dist/store/config-values.d.ts +42 -17
  267. package/node_modules/@noodle-borg/service/dist/store/config-values.js +123 -24
  268. package/node_modules/@noodle-borg/service/dist/store/in-memory.d.ts +1 -0
  269. package/node_modules/@noodle-borg/service/dist/store/in-memory.js +3 -0
  270. package/node_modules/@noodle-borg/service/dist/store/json-file.d.ts +1 -0
  271. package/node_modules/@noodle-borg/service/dist/store/json-file.js +3 -0
  272. package/node_modules/@noodle-borg/service/dist/store.d.ts +3 -1
  273. package/node_modules/@noodle-borg/service/package.json +2 -2
  274. package/node_modules/@noodle-borg/transport-http/dist/serve-request.js +9 -0
  275. package/node_modules/@noodle-borg/transport-http/package.json +1 -0
  276. package/node_modules/@noodle-borg/wire-contracts/dist/application-activity.d.ts +143 -0
  277. package/node_modules/@noodle-borg/wire-contracts/dist/application-activity.js +90 -0
  278. package/node_modules/@noodle-borg/wire-contracts/dist/application-channels.d.ts +130 -0
  279. package/node_modules/@noodle-borg/wire-contracts/dist/application-channels.js +77 -0
  280. package/node_modules/@noodle-borg/wire-contracts/dist/application-connections.d.ts +105 -0
  281. package/node_modules/@noodle-borg/wire-contracts/dist/application-connections.js +67 -0
  282. package/node_modules/@noodle-borg/wire-contracts/dist/application-onboarding.d.ts +27 -0
  283. package/node_modules/@noodle-borg/wire-contracts/dist/application-onboarding.js +28 -0
  284. package/node_modules/@noodle-borg/wire-contracts/dist/application-settings.d.ts +112 -0
  285. package/node_modules/@noodle-borg/wire-contracts/dist/application-settings.js +88 -0
  286. package/node_modules/@noodle-borg/wire-contracts/dist/assistant.d.ts +1 -1
  287. package/node_modules/@noodle-borg/wire-contracts/dist/billing-catalog.d.ts +62 -0
  288. package/node_modules/@noodle-borg/wire-contracts/dist/billing-catalog.js +57 -0
  289. package/node_modules/@noodle-borg/wire-contracts/dist/billing-enforcement.d.ts +12 -12
  290. package/node_modules/@noodle-borg/wire-contracts/dist/billing-metering.d.ts +4 -4
  291. package/node_modules/@noodle-borg/wire-contracts/dist/billing-org-transfer.d.ts +3 -3
  292. package/node_modules/@noodle-borg/wire-contracts/dist/business-information-query.d.ts +25 -0
  293. package/node_modules/@noodle-borg/wire-contracts/dist/business-information-query.js +37 -0
  294. package/node_modules/@noodle-borg/wire-contracts/dist/business-information.d.ts +1816 -158
  295. package/node_modules/@noodle-borg/wire-contracts/dist/business-information.js +416 -41
  296. package/node_modules/@noodle-borg/wire-contracts/dist/control-plane.d.ts +2 -2
  297. package/node_modules/@noodle-borg/wire-contracts/dist/distribution.d.ts +5 -5
  298. package/node_modules/@noodle-borg/wire-contracts/dist/index.d.ts +8 -0
  299. package/node_modules/@noodle-borg/wire-contracts/dist/index.js +8 -0
  300. package/node_modules/@noodle-borg/wire-contracts/dist/knowledge.d.ts +3 -3
  301. package/node_modules/@noodle-borg/wire-contracts/dist/managed-assistant-sponsorship.d.ts +7 -7
  302. package/node_modules/@noodle-borg/wire-contracts/dist/platform-account-reset.d.ts +5 -0
  303. package/node_modules/@noodle-borg/wire-contracts/dist/platform-account-reset.js +1 -0
  304. package/node_modules/@noodle-borg/wire-contracts/dist/platform-auth.d.ts +66 -66
  305. package/node_modules/@noodle-borg/wire-contracts/dist/solution-onboarding.d.ts +143 -0
  306. package/node_modules/@noodle-borg/wire-contracts/dist/solution-onboarding.js +94 -0
  307. package/node_modules/@noodleseed/assistant/README.md +5 -0
  308. package/package.json +2 -2
@@ -0,0 +1,54 @@
1
+ import { scopeKey } from './pagination.js';
2
+ import { sourceDigest, sourceInteger } from './source-ingestion-validation.js';
3
+ import { CursorValidationError, validateScalar } from './validation.js';
4
+ export function externalRecordPageLimit(value) {
5
+ return sourceInteger('external record page limit', value ?? 100, 1, 500);
6
+ }
7
+ export function encodeExternalRecordCursor(binding, lastIdentityDigest) {
8
+ const cursor = {
9
+ version: 1,
10
+ kind: 'external-records',
11
+ scope: scopeKey(binding.scope),
12
+ collectionKey: binding.collectionKey,
13
+ bindingId: binding.id,
14
+ bindingGeneration: binding.generation,
15
+ lastIdentityDigest: sourceDigest('source identity digest', lastIdentityDigest),
16
+ };
17
+ return Buffer.from(JSON.stringify(cursor), 'utf8').toString('base64url');
18
+ }
19
+ export function decodeExternalRecordCursor(value, binding) {
20
+ if (value === undefined)
21
+ return undefined;
22
+ try {
23
+ const decoded = JSON.parse(Buffer.from(validateScalar('cursor', value, 2_048), 'base64url').toString('utf8'));
24
+ if (!isExternalRecordCursor(decoded))
25
+ throw new CursorValidationError();
26
+ if (decoded.scope !== scopeKey(binding.scope) ||
27
+ decoded.collectionKey !== binding.collectionKey ||
28
+ decoded.bindingId !== binding.id ||
29
+ decoded.bindingGeneration !== binding.generation) {
30
+ throw new CursorValidationError('cursor does not belong to this source binding');
31
+ }
32
+ return decoded.lastIdentityDigest;
33
+ }
34
+ catch (error) {
35
+ if (error instanceof CursorValidationError)
36
+ throw error;
37
+ throw new CursorValidationError();
38
+ }
39
+ }
40
+ function isExternalRecordCursor(value) {
41
+ if (typeof value !== 'object' || value === null || Array.isArray(value))
42
+ return false;
43
+ const input = value;
44
+ return (input.version === 1 &&
45
+ input.kind === 'external-records' &&
46
+ typeof input.scope === 'string' &&
47
+ typeof input.collectionKey === 'string' &&
48
+ typeof input.bindingId === 'string' &&
49
+ Number.isSafeInteger(input.bindingGeneration) &&
50
+ (input.bindingGeneration ?? 0) > 0 &&
51
+ typeof input.lastIdentityDigest === 'string' &&
52
+ /^[a-f0-9]{64}$/.test(input.lastIdentityDigest));
53
+ }
54
+ //# sourceMappingURL=source-ingestion-pagination.js.map
@@ -0,0 +1,163 @@
1
+ import { createHash, createHmac } from 'node:crypto';
2
+ import { scopeKey } from './pagination.js';
3
+ import { validateScalar, validateScope } from './validation.js';
4
+ export function normalizeSourceBindingCreate(input) {
5
+ return {
6
+ scope: structuredClone(validateScope(input.scope)),
7
+ collectionKey: validateScalar('source collection key', input.collectionKey, 128),
8
+ id: validateScalar('source binding id', input.id, 128),
9
+ ...(input.bindingReference === undefined
10
+ ? {}
11
+ : {
12
+ bindingReference: validateScalar('source binding reference', input.bindingReference, 128),
13
+ }),
14
+ ...(input.configurationReference === undefined
15
+ ? {}
16
+ : {
17
+ configurationReference: validateScalar('source configuration reference', input.configurationReference, 128),
18
+ }),
19
+ ...(input.credentialIdentity === undefined
20
+ ? {}
21
+ : {
22
+ credentialIdentity: {
23
+ ...(input.credentialIdentity.generation === undefined
24
+ ? {}
25
+ : {
26
+ generation: validateScalar('source credential generation', input.credentialIdentity.generation, 128),
27
+ }),
28
+ ...(input.credentialIdentity.account === undefined
29
+ ? {}
30
+ : {
31
+ account: validateScalar('source credential account', input.credentialIdentity.account, 128),
32
+ }),
33
+ ...(input.credentialIdentity.configuration === undefined
34
+ ? {}
35
+ : {
36
+ configuration: validateScalar('source configuration generation', input.credentialIdentity.configuration, 128),
37
+ }),
38
+ },
39
+ }),
40
+ generation: sourceInteger('source binding generation', input.generation, 1, Number.MAX_SAFE_INTEGER),
41
+ schemaVersion: sourceInteger('source schema version', input.schemaVersion, 1, 1_000_000),
42
+ schemaDigest: sourceDigest('source schema digest', input.schemaDigest),
43
+ queryFingerprint: sourceDigest('source query fingerprint', input.queryFingerprint),
44
+ scan: normalizeOperation(input.scan),
45
+ retentionDays: sourceRetentionDays(input.retentionDays),
46
+ pollIntervalMs: sourceInteger('source poll interval', input.pollIntervalMs, 5_000, 86_400_000),
47
+ };
48
+ }
49
+ export function sourceBindingCreateFrom(value) {
50
+ return {
51
+ scope: value.scope,
52
+ collectionKey: value.collectionKey,
53
+ id: value.id,
54
+ ...(value.bindingReference === undefined ? {} : { bindingReference: value.bindingReference }),
55
+ ...(value.configurationReference === undefined
56
+ ? {}
57
+ : { configurationReference: value.configurationReference }),
58
+ ...(value.credentialIdentity === undefined
59
+ ? {}
60
+ : { credentialIdentity: { ...value.credentialIdentity } }),
61
+ generation: value.generation,
62
+ schemaVersion: value.schemaVersion,
63
+ schemaDigest: value.schemaDigest,
64
+ queryFingerprint: value.queryFingerprint,
65
+ scan: value.scan,
66
+ retentionDays: value.retentionDays,
67
+ pollIntervalMs: value.pollIntervalMs,
68
+ };
69
+ }
70
+ export function sourceBindingFingerprint(value) {
71
+ return sourceJsonDigest(value);
72
+ }
73
+ export function sourceBindingValues(input) {
74
+ const scope = validateScope(input.scope);
75
+ return [
76
+ scope.org,
77
+ scope.app,
78
+ scope.env,
79
+ scope.installationId,
80
+ validateScalar('source collection key', input.collectionKey, 128),
81
+ validateScalar('source binding id', input.id, 128),
82
+ ];
83
+ }
84
+ export function sourceIdentityDigest(identityKey, binding, sourceId) {
85
+ return createHmac('sha256', identityKey)
86
+ .update(`${scopeKey(binding.scope)}\0${binding.collectionKey}\0${binding.id}\0${binding.bindingReference ?? binding.id}\0${sourceToken('source record id', sourceId)}`)
87
+ .digest('hex');
88
+ }
89
+ export function normalizeSourceSuppression(input) {
90
+ const reason = input.reason;
91
+ if (reason !== 'customer_request' && reason !== 'source_access_revoked') {
92
+ throw new Error('source suppression reason is invalid');
93
+ }
94
+ return {
95
+ scope: structuredClone(validateScope(input.scope)),
96
+ collectionKey: validateScalar('source collection key', input.collectionKey, 128),
97
+ id: validateScalar('source binding id', input.id, 128),
98
+ bindingGeneration: sourceInteger('source binding generation', input.bindingGeneration, 1, Number.MAX_SAFE_INTEGER),
99
+ sourceIdentityDigest: sourceDigest('source identity digest', input.sourceIdentityDigest),
100
+ reason,
101
+ erasedAt: sourceInstant('source suppression time', input.erasedAt),
102
+ };
103
+ }
104
+ export function sourceToken(label, value) {
105
+ const normalized = value.trim();
106
+ if (normalized.length === 0 || normalized.length > 4_096 || /[\0\r\n]/.test(normalized)) {
107
+ throw new Error(`${label} is invalid`);
108
+ }
109
+ return normalized;
110
+ }
111
+ export function sourceDigest(label, value) {
112
+ if (!/^[a-f0-9]{64}$/.test(value))
113
+ throw new Error(`${label} must be a SHA-256 hex digest`);
114
+ return value;
115
+ }
116
+ export function sourceOperationSignatureDigest(value) {
117
+ const match = /^(?:sha256v2:|sha256:)?([a-f0-9]{64})$/.exec(value);
118
+ if (match?.[1] === undefined)
119
+ throw new Error('source operation signature is invalid');
120
+ return match[1];
121
+ }
122
+ export function sourceJsonDigest(value) {
123
+ return createHash('sha256').update(stableJson(value)).digest('hex');
124
+ }
125
+ export function sourceInteger(label, value, minimum, maximum) {
126
+ if (!Number.isSafeInteger(value) || value < minimum || value > maximum) {
127
+ throw new Error(`${label} is outside the supported range`);
128
+ }
129
+ return value;
130
+ }
131
+ export function sourceInstant(label, value) {
132
+ const milliseconds = value instanceof Date ? value.getTime() : Date.parse(value);
133
+ if (!Number.isFinite(milliseconds))
134
+ throw new Error(`${label} is invalid`);
135
+ return new Date(milliseconds).toISOString();
136
+ }
137
+ function normalizeOperation(value) {
138
+ return {
139
+ connector: validateScalar('source connector', value.connector, 128),
140
+ connectorVersion: validateScalar('source connector version', value.connectorVersion, 128),
141
+ operation: validateScalar('source operation', value.operation, 128),
142
+ signatureDigest: sourceDigest('source operation signature', value.signatureDigest),
143
+ };
144
+ }
145
+ function sourceRetentionDays(value) {
146
+ if (value !== 7 && value !== 30 && value !== 90) {
147
+ throw new Error('source retention days must be 7, 30, or 90');
148
+ }
149
+ return value;
150
+ }
151
+ function stableJson(value) {
152
+ if (Array.isArray(value))
153
+ return `[${value.map(stableJson).join(',')}]`;
154
+ if (value !== null && typeof value === 'object') {
155
+ return `{${Object.entries(value)
156
+ .filter(([, entry]) => entry !== undefined)
157
+ .sort(([left], [right]) => left.localeCompare(right))
158
+ .map(([key, entry]) => `${JSON.stringify(key)}:${stableJson(entry)}`)
159
+ .join(',')}}`;
160
+ }
161
+ return JSON.stringify(value);
162
+ }
163
+ //# sourceMappingURL=source-ingestion-validation.js.map
@@ -0,0 +1,29 @@
1
+ import { SOURCE_REFRESH_REPLAY_MS } from './source-custody-budget.js';
2
+ export function terminalRefresh(state) {
3
+ return state === 'completed' || state === 'superseded';
4
+ }
5
+ export function refreshReplayExpiresAt(terminalAt) {
6
+ return new Date(Date.parse(terminalAt) + SOURCE_REFRESH_REPLAY_MS).toISOString();
7
+ }
8
+ export function pruneMemoryRefreshReceipts(requests, now, limit) {
9
+ const expired = [...requests.entries()]
10
+ .filter(([, row]) => terminalRefresh(row.state) &&
11
+ row.terminalAt !== undefined &&
12
+ Date.parse(row.terminalAt) + SOURCE_REFRESH_REPLAY_MS <= now.getTime())
13
+ .sort((left, right) => (left[1].terminalAt ?? '').localeCompare(right[1].terminalAt ?? ''))
14
+ .slice(0, limit);
15
+ for (const [key] of expired)
16
+ requests.delete(key);
17
+ return expired.length;
18
+ }
19
+ export async function prunePostgresRefreshReceipts(client, organizations, limit) {
20
+ if (limit === 0)
21
+ return 0;
22
+ const result = await client.query(`DELETE FROM business_source_refresh_requests WHERE ctid IN (
23
+ SELECT ctid FROM business_source_refresh_requests WHERE org_slug=ANY($1::text[])
24
+ AND state IN ('completed','superseded') AND terminal_at<=clock_timestamp()-($2 * interval '1 millisecond')
25
+ ORDER BY terminal_at LIMIT $3 FOR UPDATE SKIP LOCKED
26
+ )`, [organizations, SOURCE_REFRESH_REPLAY_MS, limit]);
27
+ return result.rowCount ?? 0;
28
+ }
29
+ //# sourceMappingURL=source-refresh-retention.js.map
@@ -0,0 +1,80 @@
1
+ import { resolveApplicationRuntimeTarget } from './application-runtime-target.js';
2
+ import { InMemoryBusinessInformationStore, InMemorySourceIngestionStore, privateDefinitionFromDeployment, RegistrySourceReadExecutor, SourceIngestionCoordinator, validateManagedPayload, } from './business-information/portable.js';
3
+ import { fenceSourceStore } from './business-information/source-credential-fence.js';
4
+ import { createDeploymentNativeRecordConnector } from './native-record-connector.js';
5
+ import { sourceConfigurationAuthority } from './source-configuration-authority.js';
6
+ /** Compose generic business information ports without introducing application-specific records. */
7
+ export function createBusinessInformationRuntime(registry, options, publicCounters) {
8
+ const businessInformationStore = options.businessInformationStore ??
9
+ (options.businessInformationEnabled === false
10
+ ? undefined
11
+ : new InMemoryBusinessInformationStore());
12
+ if (businessInformationStore)
13
+ registry.setApplicationLifecycleObserver((org, app, at, retired) => businessInformationStore.pauseApplication(org, app, at, retired));
14
+ if (businessInformationStore instanceof InMemoryBusinessInformationStore) {
15
+ businessInformationStore.configureApplicationLifecycle(async (scope) => {
16
+ const generation = await registry.getAppGeneration(scope.org, scope.app);
17
+ if (!generation)
18
+ return undefined;
19
+ return {
20
+ generation,
21
+ active: (await registry.getAppArchivedAt(scope.org, scope.app)) === undefined &&
22
+ (await registry.getActiveByTenant(scope)) !== undefined,
23
+ };
24
+ });
25
+ }
26
+ const sourceStore = options.businessInformationSourceStore ??
27
+ (businessInformationStore === undefined
28
+ ? undefined
29
+ : new InMemorySourceIngestionStore({
30
+ identityKey: 'local-business-source-identity-key-v1',
31
+ ...(options.clock === undefined ? {} : { now: options.clock }),
32
+ }));
33
+ const sourceAuthority = sourceConfigurationAuthority(() => registry, options.connectionRuntime?.sourceCredentials);
34
+ const businessInformationSourceStore = sourceStore
35
+ ? fenceSourceStore(sourceStore, sourceAuthority)
36
+ : undefined;
37
+ const businessInformationSourceExecutor = options.businessInformationSourceExecutor ??
38
+ (businessInformationStore === undefined
39
+ ? undefined
40
+ : new RegistrySourceReadExecutor(registry, businessInformationStore, (target) => resolveApplicationRuntimeTarget(target, undefined, options.connectionRuntime?.readGenerations), sourceAuthority));
41
+ const sourceCoordinator = businessInformationSourceStore === undefined || businessInformationSourceExecutor === undefined
42
+ ? undefined
43
+ : new SourceIngestionCoordinator({
44
+ store: businessInformationSourceStore,
45
+ executor: businessInformationSourceExecutor,
46
+ workerId: 'service-refresh',
47
+ validateRecord: (_binding, value) => validateManagedPayload(value),
48
+ ...(options.clock === undefined ? {} : { now: options.clock }),
49
+ });
50
+ registry.setPlatformConnectors({
51
+ ...(businessInformationStore === undefined
52
+ ? {}
53
+ : {
54
+ nativeRecords: (input) => createDeploymentNativeRecordConnector(input, {
55
+ store: businessInformationStore,
56
+ counters: publicCounters,
57
+ publicIntakeEnabled: options.businessInformationPublicIntakeEnabled !== false,
58
+ ...(options.clock === undefined ? {} : { now: options.clock }),
59
+ }),
60
+ }),
61
+ });
62
+ return { businessInformationStore, businessInformationSourceStore, sourceCoordinator };
63
+ }
64
+ /** Resolve immutable same-organization private definition bytes; publisher configuration stays private. */
65
+ export async function resolvePrivateInstallationDefinition(registry, selector) {
66
+ const source = await registry.getDeploymentSource({ org: selector.publisherOrg, app: selector.app, env: selector.environment }, selector.deploymentId);
67
+ if (!source)
68
+ return undefined;
69
+ const target = await registry.get(selector.deploymentId);
70
+ if (!target)
71
+ return undefined;
72
+ return privateDefinitionFromDeployment(selector, {
73
+ deploymentId: selector.deploymentId,
74
+ org: selector.publisherOrg,
75
+ app: selector.app,
76
+ environment: selector.environment,
77
+ artifact: target.served.artifact,
78
+ });
79
+ }
80
+ //# sourceMappingURL=business-information-runtime.js.map
@@ -0,0 +1,73 @@
1
+ import { agreementDocumentDigest, OrganizationAgreementError, validateAgreementDocuments, } from '@noodle-borg/control-plane/portable';
2
+ import { AgreementDocumentsSchema, } from '@noodle-borg/wire-contracts';
3
+ export const BUSINESS_SETUP_MESSAGE = 'Complete the organization agreement and business notice in Portal before activating this application. Retained records remain accessible.';
4
+ export class BusinessSetupError extends Error {
5
+ code = 'business_setup_required';
6
+ constructor() {
7
+ super(BUSINESS_SETUP_MESSAGE);
8
+ }
9
+ }
10
+ /** Portable hosts may inject their own approved catalog; Noodle-hosted composition always installs this policy. */
11
+ export function parseBusinessOnboarding(serialized) {
12
+ if (serialized === undefined)
13
+ return {};
14
+ if (serialized.length > 16384)
15
+ throw new Error('Organization agreement catalog is too large');
16
+ return { documents: AgreementDocumentsSchema.parse(JSON.parse(serialized)) };
17
+ }
18
+ export class BusinessOnboarding {
19
+ organizations;
20
+ installations;
21
+ #documents;
22
+ constructor(options, organizations, installations) {
23
+ this.organizations = organizations;
24
+ this.installations = installations;
25
+ this.#documents = options.documents ? validateAgreementDocuments(options.documents) : undefined;
26
+ }
27
+ async status(org, subject) {
28
+ const canAccept = (await this.organizations.getOrgMember({ org, subject }))?.role === 'owner';
29
+ const documents = this.#documents;
30
+ if (!documents)
31
+ return { canAccept, accepted: false, required: null };
32
+ const documentDigest = agreementDocumentDigest(documents);
33
+ const acceptance = await this.organizations.getOrganizationAgreement(org, documents.version);
34
+ const accepted = acceptance?.documentDigest === documentDigest;
35
+ return {
36
+ canAccept,
37
+ accepted,
38
+ required: { ...structuredClone(documents), documentDigest },
39
+ ...(acceptance
40
+ ? {
41
+ receipt: {
42
+ version: acceptance.documents.version,
43
+ documentDigest: acceptance.documentDigest,
44
+ acceptedAt: acceptance.acceptedAt,
45
+ },
46
+ }
47
+ : {}),
48
+ };
49
+ }
50
+ async accept(org, subject, input) {
51
+ const status = await this.status(org, subject);
52
+ if (!status.canAccept)
53
+ throw new OrganizationAgreementError('agreement_owner_required');
54
+ if (!status.required ||
55
+ status.required.version !== input.version ||
56
+ status.required.documentDigest !== input.documentDigest)
57
+ throw new OrganizationAgreementError('agreement_version_conflict');
58
+ const documents = this.#documents;
59
+ if (!documents)
60
+ throw new BusinessSetupError();
61
+ await this.organizations.acceptOrganizationAgreement({ org, actorSubject: subject, documents });
62
+ return this.status(org, subject);
63
+ }
64
+ async ready(installation) {
65
+ const documents = this.#documents;
66
+ if (!documents)
67
+ return false;
68
+ const receipt = await this.organizations.getOrganizationAgreement(installation.scope.org, documents.version);
69
+ return (receipt?.documentDigest === agreementDocumentDigest(documents) &&
70
+ (await this.installations.getBusinessNotice(installation.scope)) !== undefined);
71
+ }
72
+ }
73
+ //# sourceMappingURL=business-onboarding.js.map
@@ -0,0 +1,8 @@
1
+ export class ConnectionError extends Error {
2
+ code;
3
+ constructor(code) {
4
+ super(code);
5
+ this.code = code;
6
+ }
7
+ }
8
+ //# sourceMappingURL=types.js.map
@@ -21,39 +21,44 @@ export function buildCredentialBindingIndex(artifact) {
21
21
  ? []
22
22
  : [artifact.server.context.ambient.fulfilment]),
23
23
  ];
24
- for (const fulfilment of fulfilments) {
25
- for (const ref of resolvedOperationRefs(fulfilment)) {
26
- const credentialBinding = ref.credentialBinding;
27
- if (credentialBinding === undefined)
28
- continue;
29
- const binding = artifact.connectorBindings?.[credentialBinding.bindingId];
30
- if (binding === undefined ||
31
- binding.connection.id !== credentialBinding.connectionId ||
32
- binding.profile !== credentialBinding.profile ||
33
- computeConnectionConfigRevision(binding.connection) !==
34
- credentialBinding.connectionConfigRevision) {
35
- continue;
36
- }
37
- const descriptor = {
38
- connectorId: ref.connectorId,
39
- connectorVersion: ref.connectorVersion,
40
- operation: ref.operation,
41
- ...credentialBinding,
42
- };
43
- const key = MapServiceBroker.bindingKey(descriptor);
44
- const source = structuredClone(binding.connection.source);
45
- const allowed = {
46
- descriptor,
47
- source,
48
- ...(ref.customerEndpoint === undefined ? {} : { customerEndpoint: ref.customerEndpoint }),
49
- };
50
- byKey.set(key, allowed);
51
- if (source.kind === 'externalExchange') {
52
- externalExchange.set(key, allowed);
53
- }
54
- if (source.kind === 'googleWorkloadIdentity') {
55
- googleWorkloadIdentity.set(key, allowed);
56
- }
24
+ const sourceRefs = (artifact.server.managedCollections ?? []).flatMap((collection) => {
25
+ const source = collection.source;
26
+ if (source?.authority !== 'external')
27
+ return [];
28
+ return source.scan.resolved ? [source.scan] : [];
29
+ });
30
+ const operationRefs = [...fulfilments.flatMap(resolvedOperationRefs), ...sourceRefs];
31
+ for (const ref of operationRefs) {
32
+ const credentialBinding = ref.credentialBinding;
33
+ if (credentialBinding === undefined)
34
+ continue;
35
+ const binding = artifact.connectorBindings?.[credentialBinding.bindingId];
36
+ if (binding === undefined ||
37
+ binding.connection.id !== credentialBinding.connectionId ||
38
+ binding.profile !== credentialBinding.profile ||
39
+ computeConnectionConfigRevision(binding.connection) !==
40
+ credentialBinding.connectionConfigRevision) {
41
+ continue;
42
+ }
43
+ const descriptor = {
44
+ connectorId: ref.connectorId,
45
+ connectorVersion: ref.connectorVersion,
46
+ operation: ref.operation,
47
+ ...credentialBinding,
48
+ };
49
+ const key = MapServiceBroker.bindingKey(descriptor);
50
+ const source = structuredClone(binding.connection.source);
51
+ const allowed = {
52
+ descriptor,
53
+ source,
54
+ ...(ref.customerEndpoint === undefined ? {} : { customerEndpoint: ref.customerEndpoint }),
55
+ };
56
+ byKey.set(key, allowed);
57
+ if (source.kind === 'externalExchange') {
58
+ externalExchange.set(key, allowed);
59
+ }
60
+ if (source.kind === 'googleWorkloadIdentity') {
61
+ googleWorkloadIdentity.set(key, allowed);
57
62
  }
58
63
  }
59
64
  return {