@noodleseed/one 0.161.2 → 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 (315) hide show
  1. package/dist/cli.d.ts.map +1 -1
  2. package/dist/cli.js +3 -0
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/billing-catalog-ops.d.ts +4 -0
  5. package/dist/commands/billing-catalog-ops.d.ts.map +1 -0
  6. package/dist/commands/billing-catalog-ops.js +58 -0
  7. package/dist/commands/billing-catalog-ops.js.map +1 -0
  8. package/dist/commands/billing-ops.d.ts.map +1 -1
  9. package/dist/commands/billing-ops.js +3 -0
  10. package/dist/commands/billing-ops.js.map +1 -1
  11. package/dist/commands/catalog.d.ts.map +1 -1
  12. package/dist/commands/catalog.js +3 -0
  13. package/dist/commands/catalog.js.map +1 -1
  14. package/dist/commands/config-values.d.ts.map +1 -1
  15. package/dist/commands/config-values.js +16 -0
  16. package/dist/commands/config-values.js.map +1 -1
  17. package/dist/commands/installation-variables.d.ts +26 -0
  18. package/dist/commands/installation-variables.d.ts.map +1 -0
  19. package/dist/commands/installation-variables.js +171 -0
  20. package/dist/commands/installation-variables.js.map +1 -0
  21. package/dist/commands/solutions-activity.d.ts +5 -0
  22. package/dist/commands/solutions-activity.d.ts.map +1 -0
  23. package/dist/commands/solutions-activity.js +116 -0
  24. package/dist/commands/solutions-activity.js.map +1 -0
  25. package/dist/commands/solutions-connections.d.ts +7 -0
  26. package/dist/commands/solutions-connections.d.ts.map +1 -0
  27. package/dist/commands/solutions-connections.js +88 -0
  28. package/dist/commands/solutions-connections.js.map +1 -0
  29. package/dist/commands/solutions-installation-options.d.ts +5 -0
  30. package/dist/commands/solutions-installation-options.d.ts.map +1 -0
  31. package/dist/commands/solutions-installation-options.js +52 -0
  32. package/dist/commands/solutions-installation-options.js.map +1 -0
  33. package/dist/commands/solutions-onboarding.d.ts +5 -0
  34. package/dist/commands/solutions-onboarding.d.ts.map +1 -0
  35. package/dist/commands/solutions-onboarding.js +113 -0
  36. package/dist/commands/solutions-onboarding.js.map +1 -0
  37. package/dist/commands/solutions-ops.d.ts +7 -0
  38. package/dist/commands/solutions-ops.d.ts.map +1 -0
  39. package/dist/commands/solutions-ops.js +544 -0
  40. package/dist/commands/solutions-ops.js.map +1 -0
  41. package/dist/index.d.ts +1 -1
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +1 -1
  44. package/dist/index.js.map +1 -1
  45. package/node_modules/@noodle-borg/admission-limits/dist/counter-store.d.ts +21 -2
  46. package/node_modules/@noodle-borg/admission-limits/dist/counter-store.js +10 -1
  47. package/node_modules/@noodle-borg/admission-limits/dist/in-memory-counter-store.d.ts +5 -1
  48. package/node_modules/@noodle-borg/admission-limits/dist/in-memory-counter-store.js +31 -2
  49. package/node_modules/@noodle-borg/admission-limits/dist/portable.d.ts +3 -0
  50. package/node_modules/@noodle-borg/admission-limits/dist/portable.js +3 -0
  51. package/node_modules/@noodle-borg/admission-limits/dist/public-admission-assertion.d.ts +28 -0
  52. package/node_modules/@noodle-borg/admission-limits/dist/public-admission-assertion.js +124 -0
  53. package/node_modules/@noodle-borg/admission-limits/dist/public-record-admission.d.ts +54 -0
  54. package/node_modules/@noodle-borg/admission-limits/dist/public-record-admission.js +74 -0
  55. package/node_modules/@noodle-borg/admission-limits/dist/request-attribution.d.ts +11 -0
  56. package/node_modules/@noodle-borg/admission-limits/dist/request-attribution.js +19 -0
  57. package/node_modules/@noodle-borg/agent-kit/dist/curated/command-groups.js +4 -0
  58. package/node_modules/@noodle-borg/agent-kit/dist/curated/error-fixes.js +4 -1
  59. package/node_modules/@noodle-borg/agent-kit/dist/generated/example-files.js +5 -5
  60. package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.js +6 -0
  61. package/node_modules/@noodle-borg/agent-kit/dist/skill-authoring-refs.js +21 -2
  62. package/node_modules/@noodle-borg/agent-kit/dist/skill-content.js +1 -1
  63. package/node_modules/@noodle-borg/agent-kit/package.json +1 -1
  64. package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-configuration.d.ts +9 -1
  65. package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-configuration.js +33 -2
  66. package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-execution-bound.d.ts +3 -0
  67. package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-execution-bound.js +29 -0
  68. package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-interaction-state.d.ts +5 -3
  69. package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-interaction-state.js +21 -10
  70. package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-store.d.ts +1 -1
  71. package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-store.js +3 -3
  72. package/node_modules/@noodle-borg/assistant-gateway/dist/portable.d.ts +1 -0
  73. package/node_modules/@noodle-borg/assistant-gateway/dist/portable.js +1 -0
  74. package/node_modules/@noodle-borg/assistant-gateway/dist/session-target.js +5 -4
  75. package/node_modules/@noodle-borg/authoring/dist/config.d.ts +20 -0
  76. package/node_modules/@noodle-borg/authoring/dist/config.js +29 -2
  77. package/node_modules/@noodle-borg/authoring/dist/connectors.d.ts +6 -1
  78. package/node_modules/@noodle-borg/authoring/dist/connectors.js +5 -0
  79. package/node_modules/@noodle-borg/authoring/dist/index.d.ts +2 -1
  80. package/node_modules/@noodle-borg/authoring/dist/index.js +1 -0
  81. package/node_modules/@noodle-borg/authoring/dist/json-schema.d.ts +1 -1
  82. package/node_modules/@noodle-borg/authoring/dist/json-schema.js +15 -2
  83. package/node_modules/@noodle-borg/authoring/dist/load-authored.js +1 -1
  84. package/node_modules/@noodle-borg/authoring/dist/managed-collection.d.ts +40 -0
  85. package/node_modules/@noodle-borg/authoring/dist/managed-collection.js +39 -0
  86. package/node_modules/@noodle-borg/authoring/dist/platform.d.ts +3 -0
  87. package/node_modules/@noodle-borg/authoring/dist/platform.js +4 -0
  88. package/node_modules/@noodle-borg/authoring/dist/server-presentation.js +43 -0
  89. package/node_modules/@noodle-borg/authoring/dist/server.d.ts +6 -1
  90. package/node_modules/@noodle-borg/authoring/dist/server.js +5 -43
  91. package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-billing.js +18 -0
  92. package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-config.js +31 -4
  93. package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-solutions.js +778 -0
  94. package/node_modules/@noodle-borg/cli-catalog/dist/catalog-types.js +7 -0
  95. package/node_modules/@noodle-borg/cli-catalog/dist/index.js +20 -0
  96. package/node_modules/@noodle-borg/compiler/dist/artifact/assemble.js +5 -1
  97. package/node_modules/@noodle-borg/compiler/dist/artifact/catalog-emission.js +3 -1
  98. package/node_modules/@noodle-borg/compiler/dist/artifact/config.js +3 -0
  99. package/node_modules/@noodle-borg/compiler/dist/artifact/types.d.ts +26 -0
  100. package/node_modules/@noodle-borg/compiler/dist/artifact/version.d.ts +9 -1
  101. package/node_modules/@noodle-borg/compiler/dist/artifact/version.js +9 -1
  102. package/node_modules/@noodle-borg/compiler/dist/business-variables.d.ts +27 -0
  103. package/node_modules/@noodle-borg/compiler/dist/business-variables.js +230 -0
  104. package/node_modules/@noodle-borg/compiler/dist/compile.js +9 -0
  105. package/node_modules/@noodle-borg/compiler/dist/errors.d.ts +1 -1
  106. package/node_modules/@noodle-borg/compiler/dist/index.d.ts +5 -1
  107. package/node_modules/@noodle-borg/compiler/dist/index.js +4 -0
  108. package/node_modules/@noodle-borg/compiler/dist/managed-collection-controls.d.ts +52 -0
  109. package/node_modules/@noodle-borg/compiler/dist/managed-collection-controls.js +92 -0
  110. package/node_modules/@noodle-borg/compiler/dist/managed-collections.d.ts +50 -0
  111. package/node_modules/@noodle-borg/compiler/dist/managed-collections.js +373 -0
  112. package/node_modules/@noodle-borg/compiler/dist/manifest/schema.d.ts +114 -36
  113. package/node_modules/@noodle-borg/compiler/dist/manifest/schema.js +5 -0
  114. package/node_modules/@noodle-borg/compiler/dist/native-record-operations.d.ts +7 -0
  115. package/node_modules/@noodle-borg/compiler/dist/native-record-operations.js +59 -0
  116. package/node_modules/@noodle-borg/connector-defs/dist/compile-http.js +83 -8
  117. package/node_modules/@noodle-borg/connector-defs/dist/schema.d.ts +31 -1
  118. package/node_modules/@noodle-borg/connector-defs/dist/schema.js +16 -0
  119. package/node_modules/@noodle-borg/connector-http/dist/http-connector.d.ts +12 -3
  120. package/node_modules/@noodle-borg/connector-http/dist/http-connector.js +41 -2
  121. package/node_modules/@noodle-borg/connector-http/dist/http-response.js +3 -2
  122. package/node_modules/@noodle-borg/connector-http/dist/mcp/config.js +1 -1
  123. package/node_modules/@noodle-borg/connector-http/dist/url-resolution.js +1 -1
  124. package/node_modules/@noodle-borg/control-plane/dist/contracts.d.ts +2 -1
  125. package/node_modules/@noodle-borg/control-plane/dist/in-memory-organization-store.d.ts +3 -0
  126. package/node_modules/@noodle-borg/control-plane/dist/in-memory-organization-store.js +11 -0
  127. package/node_modules/@noodle-borg/control-plane/dist/organization-agreements.d.ts +45 -0
  128. package/node_modules/@noodle-borg/control-plane/dist/organization-agreements.js +74 -0
  129. package/node_modules/@noodle-borg/control-plane/dist/portable.d.ts +1 -0
  130. package/node_modules/@noodle-borg/control-plane/dist/portable.js +1 -0
  131. package/node_modules/@noodle-borg/module/dist/contract.d.ts +20 -0
  132. package/node_modules/@noodle-borg/module/dist/platform-human-identity.d.ts +2 -0
  133. package/node_modules/@noodle-borg/protocol/dist/request-deps.js +1 -0
  134. package/node_modules/@noodle-borg/protocol/dist/request-state.d.ts +1 -0
  135. package/node_modules/@noodle-borg/protocol/dist/request-state.js +11 -2
  136. package/node_modules/@noodle-borg/protocol/dist/sdk-server.d.ts +2 -0
  137. package/node_modules/@noodle-borg/protocol/dist/v2/input-required.js +2 -1
  138. package/node_modules/@noodle-borg/protocol/dist/v2/server.js +2 -1
  139. package/node_modules/@noodle-borg/runtime/dist/ambient-context.js +6 -1
  140. package/node_modules/@noodle-borg/runtime/dist/broker/types.d.ts +2 -0
  141. package/node_modules/@noodle-borg/runtime/dist/business-variables.d.ts +15 -0
  142. package/node_modules/@noodle-borg/runtime/dist/business-variables.js +75 -0
  143. package/node_modules/@noodle-borg/runtime/dist/confirmation-continuation.js +2 -1
  144. package/node_modules/@noodle-borg/runtime/dist/confirmation.js +23 -3
  145. package/node_modules/@noodle-borg/runtime/dist/connector/types.d.ts +17 -1
  146. package/node_modules/@noodle-borg/runtime/dist/connector-snapshot.js +6 -0
  147. package/node_modules/@noodle-borg/runtime/dist/execute.d.ts +18 -3
  148. package/node_modules/@noodle-borg/runtime/dist/execute.js +13 -3
  149. package/node_modules/@noodle-borg/runtime/dist/index.d.ts +2 -0
  150. package/node_modules/@noodle-borg/runtime/dist/index.js +1 -0
  151. package/node_modules/@noodle-borg/runtime/dist/interactive.js +11 -0
  152. package/node_modules/@noodle-borg/runtime/dist/managed-origins.d.ts +3 -1
  153. package/node_modules/@noodle-borg/runtime/dist/managed-origins.js +32 -7
  154. package/node_modules/@noodle-borg/runtime/dist/operation-credential.js +6 -0
  155. package/node_modules/@noodle-borg/runtime/dist/operation-evidence.d.ts +30 -0
  156. package/node_modules/@noodle-borg/runtime/dist/operation-evidence.js +68 -0
  157. package/node_modules/@noodle-borg/runtime/dist/operation-execution.d.ts +2 -2
  158. package/node_modules/@noodle-borg/runtime/dist/operation-execution.js +142 -71
  159. package/node_modules/@noodle-borg/runtime/dist/result.d.ts +6 -4
  160. package/node_modules/@noodle-borg/runtime/dist/tool-dispatch.d.ts +7 -0
  161. package/node_modules/@noodle-borg/runtime/dist/tool-dispatch.js +48 -4
  162. package/node_modules/@noodle-borg/service/dist/admission.js +2 -1
  163. package/node_modules/@noodle-borg/service/dist/application-activity.js +236 -0
  164. package/node_modules/@noodle-borg/service/dist/application-business-notice.js +28 -0
  165. package/node_modules/@noodle-borg/service/dist/application-runtime-target.js +141 -0
  166. package/node_modules/@noodle-borg/service/dist/application-settings-targets.js +72 -0
  167. package/node_modules/@noodle-borg/service/dist/application-settings.js +210 -0
  168. package/node_modules/@noodle-borg/service/dist/business-api-admission.js +121 -0
  169. package/node_modules/@noodle-borg/service/dist/business-information/activity-pagination.js +73 -0
  170. package/node_modules/@noodle-borg/service/dist/business-information/business-notice.d.ts +24 -0
  171. package/node_modules/@noodle-borg/service/dist/business-information/business-notice.js +18 -0
  172. package/node_modules/@noodle-borg/service/dist/business-information/collection-controls.js +51 -0
  173. package/node_modules/@noodle-borg/service/dist/business-information/contracts.d.ts +439 -0
  174. package/node_modules/@noodle-borg/service/dist/business-information/contracts.js +5 -0
  175. package/node_modules/@noodle-borg/service/dist/business-information/definition-resolver.js +94 -0
  176. package/node_modules/@noodle-borg/service/dist/business-information/in-memory-installation-lifecycle.js +136 -0
  177. package/node_modules/@noodle-borg/service/dist/business-information/in-memory-invitations.js +160 -0
  178. package/node_modules/@noodle-borg/service/dist/business-information/in-memory-locks.js +23 -0
  179. package/node_modules/@noodle-borg/service/dist/business-information/in-memory-store.js +557 -0
  180. package/node_modules/@noodle-borg/service/dist/business-information/installation-capacity.js +10 -0
  181. package/node_modules/@noodle-borg/service/dist/business-information/invitations.js +68 -0
  182. package/node_modules/@noodle-borg/service/dist/business-information/legacy-request-migration.js +60 -0
  183. package/node_modules/@noodle-borg/service/dist/business-information/managed-releases.js +245 -0
  184. package/node_modules/@noodle-borg/service/dist/business-information/managed-solution-blueprints.js +51 -0
  185. package/node_modules/@noodle-borg/service/dist/business-information/managed-solution-executable.js +76 -0
  186. package/node_modules/@noodle-borg/service/dist/business-information/model.js +393 -0
  187. package/node_modules/@noodle-borg/service/dist/business-information/native-query.js +162 -0
  188. package/node_modules/@noodle-borg/service/dist/business-information/native-storage-budget.js +60 -0
  189. package/node_modules/@noodle-borg/service/dist/business-information/pagination.js +78 -0
  190. package/node_modules/@noodle-borg/service/dist/business-information/portable.js +15 -0
  191. package/node_modules/@noodle-borg/service/dist/business-information/principal-authority.d.ts +11 -0
  192. package/node_modules/@noodle-borg/service/dist/business-information/principal-authority.js +42 -0
  193. package/node_modules/@noodle-borg/service/dist/business-information/profiles.js +252 -0
  194. package/node_modules/@noodle-borg/service/dist/business-information/reader-floor.js +26 -0
  195. package/node_modules/@noodle-borg/service/dist/business-information/source-credential-fence.js +79 -0
  196. package/node_modules/@noodle-borg/service/dist/business-information/source-custody-budget.js +30 -0
  197. package/node_modules/@noodle-borg/service/dist/business-information/source-custody-memory.js +122 -0
  198. package/node_modules/@noodle-borg/service/dist/business-information/source-executor.js +191 -0
  199. package/node_modules/@noodle-borg/service/dist/business-information/source-ingestion-contracts.js +2 -0
  200. package/node_modules/@noodle-borg/service/dist/business-information/source-ingestion-coordinator.js +136 -0
  201. package/node_modules/@noodle-borg/service/dist/business-information/source-ingestion-failures.js +32 -0
  202. package/node_modules/@noodle-borg/service/dist/business-information/source-ingestion-memory-state.js +154 -0
  203. package/node_modules/@noodle-borg/service/dist/business-information/source-ingestion-memory-store.js +568 -0
  204. package/node_modules/@noodle-borg/service/dist/business-information/source-ingestion-memory-types.js +26 -0
  205. package/node_modules/@noodle-borg/service/dist/business-information/source-ingestion-memory-values.js +59 -0
  206. package/node_modules/@noodle-borg/service/dist/business-information/source-ingestion-pagination.js +54 -0
  207. package/node_modules/@noodle-borg/service/dist/business-information/source-ingestion-validation.js +163 -0
  208. package/node_modules/@noodle-borg/service/dist/business-information/source-refresh-retention.js +29 -0
  209. package/node_modules/@noodle-borg/service/dist/business-information/validation.js +200 -0
  210. package/node_modules/@noodle-borg/service/dist/business-information-runtime.js +80 -0
  211. package/node_modules/@noodle-borg/service/dist/business-onboarding.js +73 -0
  212. package/node_modules/@noodle-borg/service/dist/connections/types.js +8 -0
  213. package/node_modules/@noodle-borg/service/dist/credential-binding-index.js +38 -33
  214. package/node_modules/@noodle-borg/service/dist/deployment-execution.js +275 -0
  215. package/node_modules/@noodle-borg/service/dist/external-credential-binding-broker.js +19 -1
  216. package/node_modules/@noodle-borg/service/dist/external-credential-exchange.d.ts +16 -1
  217. package/node_modules/@noodle-borg/service/dist/modules/host.js +4 -1
  218. package/node_modules/@noodle-borg/service/dist/native-record-connector.d.ts +20 -0
  219. package/node_modules/@noodle-borg/service/dist/native-record-connector.js +206 -0
  220. package/node_modules/@noodle-borg/service/dist/oauth/store.d.ts +5 -2
  221. package/node_modules/@noodle-borg/service/dist/operation-evidence.js +89 -0
  222. package/node_modules/@noodle-borg/service/dist/recovery-quarantine.js +49 -0
  223. package/node_modules/@noodle-borg/service/dist/registry-compile.js +60 -11
  224. package/node_modules/@noodle-borg/service/dist/registry-deploy-transaction.js +18 -0
  225. package/node_modules/@noodle-borg/service/dist/registry-rollback.js +2 -1
  226. package/node_modules/@noodle-borg/service/dist/registry-state.d.ts +1 -1
  227. package/node_modules/@noodle-borg/service/dist/registry-state.js +6 -3
  228. package/node_modules/@noodle-borg/service/dist/registry-targets.js +49 -0
  229. package/node_modules/@noodle-borg/service/dist/registry-types.d.ts +2 -0
  230. package/node_modules/@noodle-borg/service/dist/registry.d.ts +15 -3
  231. package/node_modules/@noodle-borg/service/dist/registry.js +177 -137
  232. package/node_modules/@noodle-borg/service/dist/routes/assistant-appearance.js +3 -2
  233. package/node_modules/@noodle-borg/service/dist/routes/assistant-clients.js +2 -1
  234. package/node_modules/@noodle-borg/service/dist/routes/assistant-doctor.js +2 -1
  235. package/node_modules/@noodle-borg/service/dist/routes/assistant-embeds.js +8 -3
  236. package/node_modules/@noodle-borg/service/dist/routes/assistant-interaction-replay.js +1 -1
  237. package/node_modules/@noodle-borg/service/dist/routes/assistant-interactions.js +48 -36
  238. package/node_modules/@noodle-borg/service/dist/routes/assistant-public-configuration.js +3 -2
  239. package/node_modules/@noodle-borg/service/dist/routes/assistant-public-session.js +10 -10
  240. package/node_modules/@noodle-borg/service/dist/routes/assistant-session-target.js +32 -3
  241. package/node_modules/@noodle-borg/service/dist/routes/assistant-suggestions.js +1 -1
  242. package/node_modules/@noodle-borg/service/dist/routes/assistant-transcript.js +1 -1
  243. package/node_modules/@noodle-borg/service/dist/routes/assistant.js +10 -10
  244. package/node_modules/@noodle-borg/service/dist/routes/business-information-activity.js +83 -0
  245. package/node_modules/@noodle-borg/service/dist/routes/business-information-admission.js +26 -0
  246. package/node_modules/@noodle-borg/service/dist/routes/business-information-channels.js +153 -0
  247. package/node_modules/@noodle-borg/service/dist/routes/business-information-connections.js +107 -0
  248. package/node_modules/@noodle-borg/service/dist/routes/business-information-dispatch.js +131 -0
  249. package/node_modules/@noodle-borg/service/dist/routes/business-information-external.js +79 -0
  250. package/node_modules/@noodle-borg/service/dist/routes/business-information-installation.js +24 -0
  251. package/node_modules/@noodle-borg/service/dist/routes/business-information-notice.js +69 -0
  252. package/node_modules/@noodle-borg/service/dist/routes/business-information-onboarding.js +58 -0
  253. package/node_modules/@noodle-borg/service/dist/routes/business-information-paths.js +168 -0
  254. package/node_modules/@noodle-borg/service/dist/routes/business-information-public.js +151 -0
  255. package/node_modules/@noodle-borg/service/dist/routes/business-information-reader-floor.js +15 -0
  256. package/node_modules/@noodle-borg/service/dist/routes/business-information-record-create.js +29 -0
  257. package/node_modules/@noodle-borg/service/dist/routes/business-information-record-reads.js +36 -0
  258. package/node_modules/@noodle-borg/service/dist/routes/business-information-request.js +64 -0
  259. package/node_modules/@noodle-borg/service/dist/routes/business-information-settings.js +64 -0
  260. package/node_modules/@noodle-borg/service/dist/routes/business-information-source.js +249 -0
  261. package/node_modules/@noodle-borg/service/dist/routes/business-information-staff.js +258 -0
  262. package/node_modules/@noodle-borg/service/dist/routes/business-information-wire.js +317 -0
  263. package/node_modules/@noodle-borg/service/dist/routes/business-information.js +592 -0
  264. package/node_modules/@noodle-borg/service/dist/routes/config-values-dispatch.js +1 -1
  265. package/node_modules/@noodle-borg/service/dist/routes/config-values.js +26 -4
  266. package/node_modules/@noodle-borg/service/dist/routes/control-plane.js +19 -233
  267. package/node_modules/@noodle-borg/service/dist/routes/deployment-activation-response.js +13 -4
  268. package/node_modules/@noodle-borg/service/dist/service-resource-cleanup.js +6 -0
  269. package/node_modules/@noodle-borg/service/dist/service.js +77 -6
  270. package/node_modules/@noodle-borg/service/dist/solution-installation-activation.js +149 -0
  271. package/node_modules/@noodle-borg/service/dist/source-configuration-authority.js +94 -0
  272. package/node_modules/@noodle-borg/service/dist/state-catalog.js +6 -5
  273. package/node_modules/@noodle-borg/service/dist/store/config-values.d.ts +42 -17
  274. package/node_modules/@noodle-borg/service/dist/store/config-values.js +123 -24
  275. package/node_modules/@noodle-borg/service/dist/store/in-memory.d.ts +1 -0
  276. package/node_modules/@noodle-borg/service/dist/store/in-memory.js +3 -0
  277. package/node_modules/@noodle-borg/service/dist/store/json-file.d.ts +1 -0
  278. package/node_modules/@noodle-borg/service/dist/store/json-file.js +3 -0
  279. package/node_modules/@noodle-borg/service/dist/store.d.ts +3 -1
  280. package/node_modules/@noodle-borg/service/package.json +2 -2
  281. package/node_modules/@noodle-borg/transport-http/dist/serve-request.js +9 -0
  282. package/node_modules/@noodle-borg/transport-http/package.json +1 -0
  283. package/node_modules/@noodle-borg/wire-contracts/dist/application-activity.d.ts +143 -0
  284. package/node_modules/@noodle-borg/wire-contracts/dist/application-activity.js +90 -0
  285. package/node_modules/@noodle-borg/wire-contracts/dist/application-channels.d.ts +130 -0
  286. package/node_modules/@noodle-borg/wire-contracts/dist/application-channels.js +77 -0
  287. package/node_modules/@noodle-borg/wire-contracts/dist/application-connections.d.ts +105 -0
  288. package/node_modules/@noodle-borg/wire-contracts/dist/application-connections.js +67 -0
  289. package/node_modules/@noodle-borg/wire-contracts/dist/application-onboarding.d.ts +27 -0
  290. package/node_modules/@noodle-borg/wire-contracts/dist/application-onboarding.js +28 -0
  291. package/node_modules/@noodle-borg/wire-contracts/dist/application-settings.d.ts +112 -0
  292. package/node_modules/@noodle-borg/wire-contracts/dist/application-settings.js +88 -0
  293. package/node_modules/@noodle-borg/wire-contracts/dist/assistant.d.ts +1 -1
  294. package/node_modules/@noodle-borg/wire-contracts/dist/billing-catalog.d.ts +62 -0
  295. package/node_modules/@noodle-borg/wire-contracts/dist/billing-catalog.js +57 -0
  296. package/node_modules/@noodle-borg/wire-contracts/dist/billing-enforcement.d.ts +12 -12
  297. package/node_modules/@noodle-borg/wire-contracts/dist/billing-metering.d.ts +4 -4
  298. package/node_modules/@noodle-borg/wire-contracts/dist/billing-org-transfer.d.ts +3 -3
  299. package/node_modules/@noodle-borg/wire-contracts/dist/business-information-query.d.ts +25 -0
  300. package/node_modules/@noodle-borg/wire-contracts/dist/business-information-query.js +37 -0
  301. package/node_modules/@noodle-borg/wire-contracts/dist/business-information.d.ts +2241 -0
  302. package/node_modules/@noodle-borg/wire-contracts/dist/business-information.js +580 -0
  303. package/node_modules/@noodle-borg/wire-contracts/dist/control-plane.d.ts +2 -2
  304. package/node_modules/@noodle-borg/wire-contracts/dist/distribution.d.ts +5 -5
  305. package/node_modules/@noodle-borg/wire-contracts/dist/index.d.ts +12 -3
  306. package/node_modules/@noodle-borg/wire-contracts/dist/index.js +9 -0
  307. package/node_modules/@noodle-borg/wire-contracts/dist/knowledge.d.ts +6 -6
  308. package/node_modules/@noodle-borg/wire-contracts/dist/managed-assistant-sponsorship.d.ts +15 -15
  309. package/node_modules/@noodle-borg/wire-contracts/dist/platform-account-reset.d.ts +5 -0
  310. package/node_modules/@noodle-borg/wire-contracts/dist/platform-account-reset.js +1 -0
  311. package/node_modules/@noodle-borg/wire-contracts/dist/platform-auth.d.ts +66 -66
  312. package/node_modules/@noodle-borg/wire-contracts/dist/solution-onboarding.d.ts +143 -0
  313. package/node_modules/@noodle-borg/wire-contracts/dist/solution-onboarding.js +94 -0
  314. package/node_modules/@noodleseed/assistant/README.md +5 -0
  315. package/package.json +2 -2
@@ -7,7 +7,7 @@ import { compileExpr, compileExprMap, evalMap, } from './compile-expr.js';
7
7
  import { catalogCredentialMetadata } from './credential-profiles.js';
8
8
  import { toHeaderRecord, validateHeaderNames } from './http-headers.js';
9
9
  import { collectVariableExpression, collectVariablesFromExpr, collectVariablesFromExprMap, isVariableExpression, } from './variables.js';
10
- const REQUEST_ROOTS = new Set(['args', 'env']);
10
+ const REQUEST_ROOTS = new Set(['args', 'env', 'execution']);
11
11
  const RESPONSE_ROOTS = new Set(['args', 'response']);
12
12
  const PROJECTION_ROOTS = new Set(['args', 'response', 'output']);
13
13
  const PAGINATION_ROOTS = RESPONSE_ROOTS;
@@ -45,6 +45,29 @@ export function compileHttpConnector(def, mode, errors, catalog, connectors, sec
45
45
  message: 'http.allowedOrigins is required when http.baseUrl is a managed variable',
46
46
  });
47
47
  }
48
+ if (def.http.transportAuth !== undefined) {
49
+ if (def.http.auth !== undefined ||
50
+ Object.values(def.operations).some((op) => op.auth !== undefined) ||
51
+ routedBase) {
52
+ errors.push({
53
+ code: 'transport_auth_conflict',
54
+ path: `connectors.${def.id}.http.transportAuth`,
55
+ message: 'transportAuth requires a fixed/managed origin and account credential profiles, without legacy auth',
56
+ });
57
+ return;
58
+ }
59
+ const transportHeader = def.http.transportAuth.header.toLowerCase();
60
+ const profiles = Object.values(def.credentialProfiles ?? {});
61
+ if (profiles.length === 0 ||
62
+ profiles.some((profile) => profile.kind === 'apiKey' && profile.header.toLowerCase() === transportHeader)) {
63
+ errors.push({
64
+ code: 'transport_auth_conflict',
65
+ path: `connectors.${def.id}.http.transportAuth`,
66
+ message: 'transportAuth requires account profiles with distinct credential headers',
67
+ });
68
+ return;
69
+ }
70
+ }
48
71
  for (const [opName, op] of Object.entries(def.operations)) {
49
72
  const base = `connectors.${def.id}.operations.${opName}`;
50
73
  if (op.type === 'action' && op.resilience?.retry !== undefined) {
@@ -79,6 +102,14 @@ export function compileHttpConnector(def, mode, errors, catalog, connectors, sec
79
102
  message: 'HTTP paths take {name} placeholders (authored as ${args.name}); other ${...} expressions are not supported in a path',
80
103
  });
81
104
  }
105
+ if (def.http.transportAuth !== undefined &&
106
+ Object.keys(op.headers ?? {}).some((name) => name.toLowerCase() === def.http.transportAuth?.header.toLowerCase())) {
107
+ errors.push({
108
+ code: 'transport_auth_header_conflict',
109
+ path: `${base}.headers`,
110
+ message: 'operation headers cannot write the transport credential header',
111
+ });
112
+ }
82
113
  validateFakeShape(op, `${base}.fake`, errors);
83
114
  const signature = toSignature(op.type, op.input, op.output);
84
115
  signatures[opName] = signature;
@@ -94,6 +125,9 @@ export function compileHttpConnector(def, mode, errors, catalog, connectors, sec
94
125
  const responseAst = op.response
95
126
  ? compileExprMap(op.response, RESPONSE_ROOTS, `${base}.response`, errors)
96
127
  : undefined;
128
+ const evidenceAst = op.evidence
129
+ ? compileExprMap(op.evidence, new Set(['response']), `${base}.evidence`, errors)
130
+ : undefined;
97
131
  // Headers use the same roots as the request body (args + env), so a runtime value threaded through
98
132
  // args can be attached as dynamic, non-credential request metadata.
99
133
  validateHeaderNames(op.headers, `${base}.headers`, errors);
@@ -105,7 +139,7 @@ export function compileHttpConnector(def, mode, errors, catalog, connectors, sec
105
139
  const pagination = compilePagination(op, `${base}.pagination`, errors);
106
140
  const projection = compileProjection(op, `${base}.projection`, errors);
107
141
  const fake = httpFake(op.fake);
108
- operations[opName] = buildOperation(op, signature, requestAst, responseAst, headersAst, pagination, fake, projection);
142
+ operations[opName] = buildOperation(op, signature, requestAst, responseAst, headersAst, pagination, fake, projection, evidenceAst);
109
143
  // Per-operation auth declares its own secret reference (overrides any connector-level default).
110
144
  addAuthBinding({
111
145
  auth: op.auth,
@@ -129,7 +163,7 @@ export function compileHttpConnector(def, mode, errors, catalog, connectors, sec
129
163
  });
130
164
  // Connector-level default auth binds every operation that doesn't carry its own scheme.
131
165
  addAuthBinding({
132
- auth: def.http.auth,
166
+ auth: def.http.transportAuth ?? def.http.auth,
133
167
  connectorId: def.id,
134
168
  connectorVersion: def.version,
135
169
  ...(customerEndpoint === undefined ? {} : { customerEndpoint }),
@@ -145,6 +179,9 @@ export function compileHttpConnector(def, mode, errors, catalog, connectors, sec
145
179
  baseUrl: def.http.baseUrl,
146
180
  ...(def.http.allowedOrigins ? { allowedOrigins: def.http.allowedOrigins } : {}),
147
181
  ...(def.http.auth ? { auth: toAuthScheme(def.http.auth) } : {}),
182
+ ...(def.http.transportAuth
183
+ ? { transportAuth: { kind: 'apiKey', header: def.http.transportAuth.header } }
184
+ : {}),
148
185
  ...(mode === 'fake' ? { fakeMode: true } : {}),
149
186
  operations,
150
187
  };
@@ -231,10 +268,14 @@ function compileRequest(request, path, errors) {
231
268
  function isRecord(value) {
232
269
  return value !== null && typeof value === 'object';
233
270
  }
234
- function buildOperation(op, signature, requestAst, responseAst, headersAst, pagination, fake, projection) {
271
+ function buildOperation(op, signature, requestAst, responseAst, headersAst, pagination, fake, projection, evidenceAst) {
235
272
  const resilience = httpResilience(op.resilience);
236
273
  return {
237
274
  method: op.method ?? 'GET',
275
+ requiresExecution: [
276
+ ...(requestAst?.kind === 'value' ? [requestAst.node] : Object.values(requestAst?.map ?? {})),
277
+ ...Object.values(headersAst ?? {}),
278
+ ].some(usesExecutionIdentity),
238
279
  path: op.path,
239
280
  ...(op.query ? { query: op.query } : {}),
240
281
  signature,
@@ -246,21 +287,55 @@ function buildOperation(op, signature, requestAst, responseAst, headersAst, pagi
246
287
  ...(op.limits !== undefined ? { maxResponseBytes: op.limits.maxResponseBytes } : {}),
247
288
  ...(op.responseType !== undefined ? { responseType: op.responseType } : {}),
248
289
  ...(op.requestEncoding !== undefined ? { requestEncoding: op.requestEncoding } : {}),
290
+ ...(evidenceAst === undefined
291
+ ? {}
292
+ : {
293
+ evidence: (json) => {
294
+ const value = evalMap(evidenceAst, { response: json });
295
+ const outcome = value.outcome;
296
+ if (outcome !== 'completed' &&
297
+ outcome !== 'rejected' &&
298
+ outcome !== 'accepted' &&
299
+ outcome !== 'unknown')
300
+ return { outcome: 'unknown' };
301
+ return {
302
+ outcome,
303
+ ...(typeof value.reference === 'string' ? { reference: value.reference } : {}),
304
+ };
305
+ },
306
+ }),
249
307
  ...(requestAst
250
308
  ? {
251
- body: (args, env) => requestAst.kind === 'map'
252
- ? evalMap(requestAst.map, { args, env })
253
- : evaluateValue(requestAst.node, { args, env }, 'request'),
309
+ body: (args, env, execution) => requestAst.kind === 'map'
310
+ ? evalMap(requestAst.map, { args, env, execution })
311
+ : evaluateValue(requestAst.node, { args, env, execution }, 'request'),
254
312
  }
255
313
  : {}),
256
314
  ...(responseAst
257
315
  ? { mapResponse: (json, args) => evalMap(responseAst, { args, response: json }) }
258
316
  : {}),
259
317
  ...(headersAst
260
- ? { headers: (args, env) => toHeaderRecord(evalMap(headersAst, { args, env })) }
318
+ ? {
319
+ headers: (args, env, execution) => toHeaderRecord(evalMap(headersAst, { args, env, execution })),
320
+ }
261
321
  : {}),
262
322
  };
263
323
  }
324
+ function usesExecutionIdentity(node) {
325
+ if (node.kind === 'path')
326
+ return node.root === 'execution';
327
+ if (node.kind === 'template')
328
+ return node.parts.some((part) => part.kind !== 'text' && usesExecutionIdentity(part));
329
+ if (node.kind === 'array')
330
+ return node.items.some(usesExecutionIdentity);
331
+ if (node.kind === 'object')
332
+ return node.entries.some((entry) => usesExecutionIdentity(entry.value));
333
+ if (node.kind === 'coalesce')
334
+ return usesExecutionIdentity(node.left) || usesExecutionIdentity(node.right);
335
+ if (node.kind === 'function')
336
+ return node.args.some(usesExecutionIdentity);
337
+ return false;
338
+ }
264
339
  function compileProjection(op, path, errors) {
265
340
  const projection = op.projection;
266
341
  if (projection === undefined)
@@ -99,6 +99,10 @@ declare const httpOperationSchema: z.ZodObject<{
99
99
  "form-urlencoded": "form-urlencoded";
100
100
  }>>;
101
101
  response: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
102
+ evidence: z.ZodOptional<z.ZodObject<{
103
+ outcome: z.ZodString;
104
+ reference: z.ZodOptional<z.ZodString>;
105
+ }, z.core.$strict>>;
102
106
  headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
103
107
  responseType: z.ZodOptional<z.ZodEnum<{
104
108
  json: "json";
@@ -342,7 +346,6 @@ declare const computeOperationSchema: z.ZodObject<{
342
346
  audience: z.ZodOptional<z.ZodString>;
343
347
  }, z.core.$strict>>;
344
348
  }, z.core.$strict>;
345
- /** An outbound HTTP connector: a declared `http` origin + HTTP operations with `${...}` mapping. */
346
349
  declare const httpConnectorDefSchema: z.ZodObject<{
347
350
  http: z.ZodObject<{
348
351
  baseUrl: z.ZodUnion<readonly [z.ZodString, z.ZodString, z.ZodObject<{
@@ -422,6 +425,11 @@ declare const httpConnectorDefSchema: z.ZodObject<{
422
425
  client_secret_post: "client_secret_post";
423
426
  }>>;
424
427
  }, z.core.$strict>], "kind">>;
428
+ transportAuth: z.ZodOptional<z.ZodObject<{
429
+ kind: z.ZodLiteral<"apiKey">;
430
+ header: z.ZodString;
431
+ secret: z.ZodString;
432
+ }, z.core.$strict>>;
425
433
  }, z.core.$strict>;
426
434
  operations: z.ZodRecord<z.ZodString, z.ZodObject<{
427
435
  type: z.ZodEnum<{
@@ -445,6 +453,10 @@ declare const httpConnectorDefSchema: z.ZodObject<{
445
453
  "form-urlencoded": "form-urlencoded";
446
454
  }>>;
447
455
  response: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
456
+ evidence: z.ZodOptional<z.ZodObject<{
457
+ outcome: z.ZodString;
458
+ reference: z.ZodOptional<z.ZodString>;
459
+ }, z.core.$strict>>;
448
460
  headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
449
461
  responseType: z.ZodOptional<z.ZodEnum<{
450
462
  json: "json";
@@ -887,6 +899,11 @@ declare const connectorDefSchema: z.ZodUnion<readonly [z.ZodObject<{
887
899
  client_secret_post: "client_secret_post";
888
900
  }>>;
889
901
  }, z.core.$strict>], "kind">>;
902
+ transportAuth: z.ZodOptional<z.ZodObject<{
903
+ kind: z.ZodLiteral<"apiKey">;
904
+ header: z.ZodString;
905
+ secret: z.ZodString;
906
+ }, z.core.$strict>>;
890
907
  }, z.core.$strict>;
891
908
  operations: z.ZodRecord<z.ZodString, z.ZodObject<{
892
909
  type: z.ZodEnum<{
@@ -910,6 +927,10 @@ declare const connectorDefSchema: z.ZodUnion<readonly [z.ZodObject<{
910
927
  "form-urlencoded": "form-urlencoded";
911
928
  }>>;
912
929
  response: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
930
+ evidence: z.ZodOptional<z.ZodObject<{
931
+ outcome: z.ZodString;
932
+ reference: z.ZodOptional<z.ZodString>;
933
+ }, z.core.$strict>>;
913
934
  headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
914
935
  responseType: z.ZodOptional<z.ZodEnum<{
915
936
  json: "json";
@@ -1345,6 +1366,11 @@ export declare const connectorFileSchema: z.ZodObject<{
1345
1366
  client_secret_post: "client_secret_post";
1346
1367
  }>>;
1347
1368
  }, z.core.$strict>], "kind">>;
1369
+ transportAuth: z.ZodOptional<z.ZodObject<{
1370
+ kind: z.ZodLiteral<"apiKey">;
1371
+ header: z.ZodString;
1372
+ secret: z.ZodString;
1373
+ }, z.core.$strict>>;
1348
1374
  }, z.core.$strict>;
1349
1375
  operations: z.ZodRecord<z.ZodString, z.ZodObject<{
1350
1376
  type: z.ZodEnum<{
@@ -1368,6 +1394,10 @@ export declare const connectorFileSchema: z.ZodObject<{
1368
1394
  "form-urlencoded": "form-urlencoded";
1369
1395
  }>>;
1370
1396
  response: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
1397
+ evidence: z.ZodOptional<z.ZodObject<{
1398
+ outcome: z.ZodString;
1399
+ reference: z.ZodOptional<z.ZodString>;
1400
+ }, z.core.$strict>>;
1371
1401
  headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
1372
1402
  responseType: z.ZodOptional<z.ZodEnum<{
1373
1403
  json: "json";
@@ -308,6 +308,11 @@ const httpOperationSchema = z
308
308
  /** How to encode a non-GET request mapping. JSON remains the default. */
309
309
  requestEncoding: z.enum(['json', 'form-urlencoded']).optional(),
310
310
  response: exprMapSchema.optional(),
311
+ /** Explicit provider evidence mapping; never infer completion from an HTTP status or tool name. */
312
+ evidence: z
313
+ .object({ outcome: z.string().min(1), reference: z.string().min(1).optional() })
314
+ .strict()
315
+ .optional(),
311
316
  /**
312
317
  * Per-operation request headers: header name -> a `${...}` expression (over `args`/`env`) or a
313
318
  * literal string. Merged over the connector defaults but *below* the `auth` scheme, so a declared
@@ -491,6 +496,16 @@ const connectorIdentity = {
491
496
  .optional(),
492
497
  };
493
498
  /** An outbound HTTP connector: a declared `http` origin + HTTP operations with `${...}` mapping. */
499
+ const transportAuthSchema = z
500
+ .object({
501
+ kind: z.literal('apiKey'),
502
+ header: z
503
+ .string()
504
+ .regex(/^x-[a-z0-9]+(?:-[a-z0-9]+)*$/iu)
505
+ .refine((header) => !/^x-(?:forwarded(?:-|$)|real-ip$|http-method-override$|original-url$|rewrite-url$)/iu.test(header), 'transport authentication cannot use routing headers'),
506
+ secret: secretRefSchema,
507
+ })
508
+ .strict();
494
509
  const httpConnectorDefSchema = z
495
510
  .object({
496
511
  ...connectorIdentity,
@@ -502,6 +517,7 @@ const httpConnectorDefSchema = z
502
517
  .optional(),
503
518
  /** Connector-default auth scheme; an operation's own `auth` overrides it. */
504
519
  auth: httpAuthSchema.optional(),
520
+ transportAuth: transportAuthSchema.optional(),
505
521
  })
506
522
  .strict(),
507
523
  operations: z.record(z.string(), httpOperationSchema),
@@ -1,5 +1,5 @@
1
1
  import { type CustomerEndpointRef, type OperationSignature } from '@noodle-borg/compiler';
2
- import { type Connector, type ConnectorCall, type DownstreamCredential } from '@noodle-borg/runtime';
2
+ import { type Connector, type ConnectorCall, type DownstreamCredential, type OperationEvidence } from '@noodle-borg/runtime';
3
3
  import { type HttpRetryPolicy } from './http-response.js';
4
4
  import { type HttpOperationProjection } from './projection.js';
5
5
  import { type HttpRequestEncoding } from './request-encoding.js';
@@ -57,6 +57,9 @@ export interface HttpOperationFake {
57
57
  * declared output fields.
58
58
  */
59
59
  export interface HttpOperation {
60
+ readonly evidence?: (json: unknown) => OperationEvidence;
61
+ /** Compiler-derived requirement for mappings that consume the trusted operation identity. */
62
+ readonly requiresExecution?: boolean;
60
63
  readonly method?: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
61
64
  readonly path: string;
62
65
  readonly query?: readonly string[];
@@ -64,7 +67,7 @@ export interface HttpOperation {
64
67
  /** Per-operation base URL override. Its resolved request origin must still be in the allowlist. */
65
68
  readonly baseUrl?: string;
66
69
  /** Build a JSON request body from already-evaluated, validated args. Ignored for `GET`. */
67
- readonly body?: (args: Readonly<Record<string, unknown>>, env: Readonly<Record<string, string>>) => unknown;
70
+ readonly body?: (args: Readonly<Record<string, unknown>>, env: Readonly<Record<string, unknown>>, execution?: ConnectorCall['execution']) => unknown;
68
71
  /** Encode the evaluated body as JSON (default) or a WHATWG URLSearchParams form body. */
69
72
  readonly requestEncoding?: HttpRequestEncoding;
70
73
  /** Per-operation auth scheme; overrides the connector-level `auth`. */
@@ -74,7 +77,7 @@ export interface HttpOperation {
74
77
  * defaults but *below* the `auth` scheme, so a declared `auth` block always wins. Lets an operation
75
78
  * attach a runtime value — e.g. a token from a prior operation — as `Authorization: Bearer ${args.token}`.
76
79
  */
77
- readonly headers?: (args: Readonly<Record<string, unknown>>, env: Readonly<Record<string, string>>) => Record<string, string>;
80
+ readonly headers?: (args: Readonly<Record<string, unknown>>, env: Readonly<Record<string, unknown>>, execution?: ConnectorCall['execution']) => Record<string, string>;
78
81
  readonly mapResponse?: (json: unknown, args: Readonly<Record<string, unknown>>) => Record<string, unknown>;
79
82
  readonly resilience?: HttpOperationResilience;
80
83
  readonly pagination?: HttpOperationPagination;
@@ -105,6 +108,11 @@ export interface HttpConnectorConfig {
105
108
  readonly headers?: Readonly<Record<string, string>>;
106
109
  /** Connector-default auth scheme (an operation's own `auth` overrides this). */
107
110
  readonly auth?: HttpAuthScheme;
111
+ /** Independent deployment API key; account credentials still use their bound presentation. */
112
+ readonly transportAuth?: {
113
+ readonly kind: 'apiKey';
114
+ readonly header: string;
115
+ };
108
116
  /**
109
117
  * Legacy escape hatch: map the broker credential to arbitrary auth headers. Used only when no
110
118
  * declarative `auth` scheme resolves for the operation. Omitted for public, no-auth APIs.
@@ -145,6 +153,7 @@ export declare class HttpConnector implements Connector {
145
153
  readonly version: string;
146
154
  constructor(config: HttpConnectorConfig);
147
155
  signature(operation: string): OperationSignature | undefined;
156
+ executionBoundMs(operation: string): number | undefined;
148
157
  invoke(call: ConnectorCall): Promise<unknown>;
149
158
  }
150
159
  export {};
@@ -49,10 +49,19 @@ export class HttpConnector {
49
49
  signature(operation) {
50
50
  return this.#config.operations[operation]?.signature;
51
51
  }
52
+ executionBoundMs(operation) {
53
+ const op = this.#config.operations[operation];
54
+ // Actions never use automatic retry; read retries do not create durable effect evidence.
55
+ return op?.signature.type === 'action'
56
+ ? (op.resilience?.timeoutMs ?? this.#config.timeoutMs ?? 10_000)
57
+ : undefined;
58
+ }
52
59
  async invoke(call) {
53
60
  const op = this.#config.operations[call.operation];
54
61
  if (!op)
55
62
  throw new Error(`connector "${this.id}" has no operation "${call.operation}"`);
63
+ if (op.requiresExecution && !call.execution?.id)
64
+ throw new Error('Trusted operation identity unavailable');
56
65
  const configuredBase = this.#config.baseUrl;
57
66
  const customerBase = this.#customerBase
58
67
  ? resolveCustomerBase(this.#customerBase, op, call)
@@ -64,6 +73,8 @@ export class HttpConnector {
64
73
  const json = op.pagination === undefined
65
74
  ? this.#fakeJson(call.operation, op)
66
75
  : await this.#fakePaginatedJson(call.operation, op, call.args);
76
+ if (op.evidence)
77
+ call.reportOutcome?.(op.evidence(json));
67
78
  return this.#mapOutput(op, json, call.args);
68
79
  }
69
80
  const env = call.env ?? {};
@@ -75,15 +86,20 @@ export class HttpConnector {
75
86
  // material is constructed.
76
87
  await this.#validateUrl(url, customerBase, allowed);
77
88
  const method = op.method ?? 'GET';
78
- const payload = requestPayload(op.requestEncoding, method !== 'GET' && op.body !== undefined ? () => op.body?.(call.args, env) : undefined);
89
+ const payload = requestPayload(op.requestEncoding, method !== 'GET' && op.body !== undefined
90
+ ? () => op.body?.(call.args, env, call.execution)
91
+ : undefined);
92
+ const transportHeaders = await this.#transportHeaders(call);
79
93
  const headers = {
80
94
  accept: op.responseType === 'text' ? 'text/plain, text/*;q=0.9, */*;q=0.8' : 'application/json',
81
95
  'user-agent': 'noodle-borg/0.0',
82
96
  ...this.#config.headers,
83
97
  // Per-operation dynamic headers sit below the auth scheme, so a declared `auth` block always wins.
84
- ...(op.headers !== undefined ? op.headers(call.args, env) : {}),
98
+ ...(op.headers !== undefined ? op.headers(call.args, env, call.execution) : {}),
85
99
  ...this.#authHeaders(op, call.credential, call.credentialPresentation),
86
100
  };
101
+ for (const [name, value] of Object.entries(transportHeaders))
102
+ setOwnedHeader(headers, name, value);
87
103
  if (payload !== undefined) {
88
104
  setOwnedHeader(headers, 'content-type', op.requestEncoding === 'form-urlencoded'
89
105
  ? 'application/x-www-form-urlencoded;charset=UTF-8'
@@ -96,11 +112,14 @@ export class HttpConnector {
96
112
  const init = {
97
113
  method,
98
114
  headers,
115
+ ...(call.signal === undefined ? {} : { signal: call.signal }),
99
116
  ...(payload !== undefined ? { body: payload } : {}),
100
117
  };
101
118
  const json = op.pagination === undefined
102
119
  ? await this.#fetchJsonWithResilience(url, op, init)
103
120
  : await this.#fetchPaginatedJson(op, call.args, base, init, customerBase, allowed);
121
+ if (op.evidence)
122
+ call.reportOutcome?.(op.evidence(json));
104
123
  return this.#mapOutput(op, json, call.args);
105
124
  }
106
125
  catch (error) {
@@ -109,6 +128,26 @@ export class HttpConnector {
109
128
  throw error;
110
129
  }
111
130
  }
131
+ async #transportHeaders(call) {
132
+ const transport = this.#config.transportAuth;
133
+ if (transport === undefined)
134
+ return {};
135
+ const header = transport.header.toLowerCase();
136
+ const account = call.credentialPresentation;
137
+ if (!/^x-[a-z0-9]+(?:-[a-z0-9]+)*$/u.test(header) ||
138
+ account === undefined ||
139
+ (account.kind === 'apiKey' && account.header.toLowerCase() === header) ||
140
+ call.acquireTransportCredential === undefined) {
141
+ throw new Error('Independent transport authentication is not configured safely');
142
+ }
143
+ const credential = await call.acquireTransportCredential();
144
+ if (credential.kind === 'cookie' ||
145
+ credential.token.length < 1 ||
146
+ credential.token.length > 4096 ||
147
+ /[\r\n]/u.test(credential.token))
148
+ throw new Error('Independent transport requires a valid bounded token credential');
149
+ return { [header]: credential.token };
150
+ }
112
151
  #mapOutput(op, json, args) {
113
152
  const mapped = op.mapResponse ? op.mapResponse(json, args) : json;
114
153
  if (op.projection === undefined)
@@ -23,7 +23,8 @@ export async function fetchResponseWithResilience(url, op, init, options) {
23
23
  const timeoutMs = op.resilience?.timeoutMs ?? options.timeoutMs ?? DEFAULT_TIMEOUT_MS;
24
24
  let lastError;
25
25
  for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {
26
- const signal = AbortSignal.timeout(timeoutMs);
26
+ const timeout = AbortSignal.timeout(timeoutMs);
27
+ const signal = init.signal ? AbortSignal.any([init.signal, timeout]) : timeout;
27
28
  try {
28
29
  const response = await guardedFetch(url, {
29
30
  ...init,
@@ -53,7 +54,7 @@ export async function fetchResponseWithResilience(url, op, init, options) {
53
54
  catch (error) {
54
55
  const normalized = normalizeAttemptError(error, attempt, retry, op.signature.type === 'read', signal.aborted);
55
56
  lastError = normalized.error;
56
- if (!normalized.retry || attempt >= maxAttempts)
57
+ if (init.signal?.aborted || !normalized.retry || attempt >= maxAttempts)
57
58
  throw lastError;
58
59
  await sleep(retryDelayMs(retry, attempt, normalized.retryAfterMs));
59
60
  }
@@ -11,7 +11,7 @@ export function resolveManagedString(configured, env) {
11
11
  return configured;
12
12
  const name = match[1];
13
13
  const value = env[name];
14
- if (value === undefined || value.length === 0) {
14
+ if (typeof value !== 'string' || value.length === 0) {
15
15
  throw new ConnectorInvocationError(`managed variable "${name}" is unavailable`, {
16
16
  category: 'invalid_response',
17
17
  retryable: false,
@@ -8,7 +8,7 @@ export function resolveConfigString(value, env) {
8
8
  if (match?.[1] === undefined)
9
9
  return value;
10
10
  const resolved = env[match[1]];
11
- if (resolved === undefined) {
11
+ if (typeof resolved !== 'string') {
12
12
  throw new ConnectorInvocationError(`managed variable "${match[1]}" is not configured`, {
13
13
  category: 'invalid_response',
14
14
  retryable: false,
@@ -1,3 +1,4 @@
1
+ import type { OrganizationAgreementStore } from './organization-agreements.js';
1
2
  export type OrgRole = 'owner' | 'developer';
2
3
  /** The canonical principal bound to a personal workspace must remain that organization's owner. */
3
4
  export declare class PersonalWorkspaceOwnerMutationError extends Error {
@@ -125,7 +126,7 @@ export interface WelcomeEmailRecord {
125
126
  readonly providerMessageId?: string;
126
127
  readonly lastErrorCode?: 'delivery_failed';
127
128
  }
128
- export interface OrganizationStore {
129
+ export interface OrganizationStore extends OrganizationAgreementStore {
129
130
  /** Resolve the one active public MCP label for an immutable organization identity. */
130
131
  getActiveMcpSubdomain(org: string): Promise<ActiveMcpSubdomainClaim | undefined>;
131
132
  /** Resolve an active public MCP label to its immutable organization identity. */
@@ -1,4 +1,5 @@
1
1
  import type { ActiveMcpSubdomainClaim, ChangeMcpSubdomainInput, McpSubdomainMutationResult, McpSubdomainSetting, OrganizationStore, OrgDomainRecord, OrgInvitationRecord, OrgMemberRecord, OrgOpenAIAppsChallengeRecord, OrgRecord, OrgRole, SignupAllowlistKind, SignupAllowlistRecord } from './contracts.js';
2
+ import { type AcceptOrganizationAgreementInput } from './organization-agreements.js';
2
3
  interface InMemoryOrganizationStoreOptions {
3
4
  readonly now?: () => Date;
4
5
  readonly orgs?: Map<string, OrgRecord>;
@@ -8,6 +9,8 @@ interface InMemoryOrganizationStoreOptions {
8
9
  export declare class InMemoryOrganizationStore {
9
10
  #private;
10
11
  constructor(options?: InMemoryOrganizationStoreOptions);
12
+ getOrganizationAgreement(org: string, version: string): Promise<import("./organization-agreements.js").OrganizationAgreementAcceptance | undefined>;
13
+ acceptOrganizationAgreement(input: AcceptOrganizationAgreementInput): Promise<import("./organization-agreements.js").OrganizationAgreementAcceptance>;
11
14
  hasOrg(org: string): boolean;
12
15
  isExactOwner(org: string, subject: string): boolean;
13
16
  ensureDefaultMcpSubdomain(org: string): ActiveMcpSubdomainClaim | undefined;
@@ -1,5 +1,6 @@
1
1
  import { randomUUID } from 'node:crypto';
2
2
  import { InMemoryMcpSubdomainClaimStore } from './mcp-subdomain-claims.js';
3
+ import { InMemoryOrganizationAgreements, } from './organization-agreements.js';
3
4
  import { domainFromEmail, domainKey, memberKey, normalizeSignupAllowlistValue, signupKey, } from './organization-helpers.js';
4
5
  import { validateDomain, validateOpenAIAppsChallenge, validateOrgMembershipDomain, validateOrgRole, validateSignupAllowlistKind, validateSlug, } from './validation.js';
5
6
  /** Shared in-memory organization persistence used by service-backed development stores. */
@@ -12,11 +13,19 @@ export class InMemoryOrganizationStore {
12
13
  #invitations = new Map();
13
14
  #mcpSubdomainClaims;
14
15
  #now;
16
+ #agreements;
15
17
  constructor(options = {}) {
16
18
  this.#now = options.now ?? (() => new Date());
17
19
  this.#orgs = options.orgs ?? new Map();
18
20
  this.#members = options.members ?? new Map();
19
21
  this.#mcpSubdomainClaims = new InMemoryMcpSubdomainClaimStore(this.#now);
22
+ this.#agreements = new InMemoryOrganizationAgreements((org, subject) => this.isExactOwner(org, subject), this.#now);
23
+ }
24
+ getOrganizationAgreement(org, version) {
25
+ return this.#agreements.getOrganizationAgreement(org, version);
26
+ }
27
+ acceptOrganizationAgreement(input) {
28
+ return this.#agreements.acceptOrganizationAgreement(input);
20
29
  }
21
30
  hasOrg(org) {
22
31
  return this.#orgs.has(org);
@@ -266,6 +275,8 @@ export class InMemoryOrganizationStore {
266
275
  /** Bind standard organization methods for composition with service-owned billing and outbox state. */
267
276
  export function bindInMemoryOrganizationStore(store) {
268
277
  return {
278
+ getOrganizationAgreement: store.getOrganizationAgreement.bind(store),
279
+ acceptOrganizationAgreement: store.acceptOrganizationAgreement.bind(store),
269
280
  getActiveMcpSubdomain: store.getActiveMcpSubdomain.bind(store),
270
281
  resolveActiveMcpSubdomain: store.resolveActiveMcpSubdomain.bind(store),
271
282
  getMcpSubdomainSetting: store.getMcpSubdomainSetting.bind(store),
@@ -0,0 +1,45 @@
1
+ export interface AgreementDocument {
2
+ readonly url: string;
3
+ readonly sha256: string;
4
+ }
5
+ /** Deployment-approved immutable identities, never supplied authoritatively by a browser. */
6
+ export interface AgreementDocuments {
7
+ readonly version: string;
8
+ readonly terms: AgreementDocument;
9
+ readonly privacy: AgreementDocument;
10
+ readonly processing: AgreementDocument;
11
+ }
12
+ export interface OrganizationAgreementAcceptance {
13
+ readonly org: string;
14
+ readonly actorSubject: string;
15
+ readonly documents: AgreementDocuments;
16
+ readonly documentDigest: string;
17
+ readonly acceptedAt: string;
18
+ }
19
+ export interface AcceptOrganizationAgreementInput {
20
+ readonly org: string;
21
+ readonly actorSubject: string;
22
+ /** Trusted catalog entry selected by service policy after checking the submitted version/digest. */
23
+ readonly documents: AgreementDocuments;
24
+ }
25
+ export interface OrganizationAgreementStore {
26
+ getOrganizationAgreement(org: string, version: string): Promise<OrganizationAgreementAcceptance | undefined>;
27
+ /** Repeats live exact-owner authorization atomically; equal acceptance preserves the first receipt. */
28
+ acceptOrganizationAgreement(input: AcceptOrganizationAgreementInput): Promise<OrganizationAgreementAcceptance>;
29
+ }
30
+ export declare class OrganizationAgreementError extends Error {
31
+ readonly code: 'agreement_owner_required' | 'agreement_version_conflict';
32
+ constructor(code: 'agreement_owner_required' | 'agreement_version_conflict');
33
+ }
34
+ export declare function validateAgreementDocuments(input: AgreementDocuments): AgreementDocuments;
35
+ export declare function agreementDocumentDigest(documents: AgreementDocuments): string;
36
+ /** Synchronous commit boundary keeps membership recheck, catalog registration and receipt indivisible. */
37
+ export declare class InMemoryOrganizationAgreements implements OrganizationAgreementStore {
38
+ #private;
39
+ private readonly isOwner;
40
+ private readonly now;
41
+ constructor(isOwner: (org: string, subject: string) => boolean, now: () => Date);
42
+ getOrganizationAgreement(org: string, version: string): Promise<OrganizationAgreementAcceptance | undefined>;
43
+ acceptOrganizationAgreement(input: AcceptOrganizationAgreementInput): Promise<OrganizationAgreementAcceptance>;
44
+ }
45
+ //# sourceMappingURL=organization-agreements.d.ts.map