@noodleseed/one 0.162.0 → 0.164.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 (326) hide show
  1. package/dist/banner.d.ts +6 -0
  2. package/dist/banner.d.ts.map +1 -0
  3. package/dist/banner.js +29 -0
  4. package/dist/banner.js.map +1 -0
  5. package/dist/commands/billing-catalog-ops.d.ts +4 -0
  6. package/dist/commands/billing-catalog-ops.d.ts.map +1 -0
  7. package/dist/commands/billing-catalog-ops.js +58 -0
  8. package/dist/commands/billing-catalog-ops.js.map +1 -0
  9. package/dist/commands/billing-ops.d.ts.map +1 -1
  10. package/dist/commands/billing-ops.js +3 -0
  11. package/dist/commands/billing-ops.js.map +1 -1
  12. package/dist/commands/catalog.d.ts.map +1 -1
  13. package/dist/commands/catalog.js +2 -0
  14. package/dist/commands/catalog.js.map +1 -1
  15. package/dist/commands/config-values.d.ts.map +1 -1
  16. package/dist/commands/config-values.js +16 -0
  17. package/dist/commands/config-values.js.map +1 -1
  18. package/dist/commands/installation-variables.d.ts +26 -0
  19. package/dist/commands/installation-variables.d.ts.map +1 -0
  20. package/dist/commands/installation-variables.js +171 -0
  21. package/dist/commands/installation-variables.js.map +1 -0
  22. package/dist/commands/project-setup.d.ts.map +1 -1
  23. package/dist/commands/project-setup.js +2 -0
  24. package/dist/commands/project-setup.js.map +1 -1
  25. package/dist/commands/solutions-activity.d.ts +5 -0
  26. package/dist/commands/solutions-activity.d.ts.map +1 -0
  27. package/dist/commands/solutions-activity.js +116 -0
  28. package/dist/commands/solutions-activity.js.map +1 -0
  29. package/dist/commands/solutions-connections.d.ts +7 -0
  30. package/dist/commands/solutions-connections.d.ts.map +1 -0
  31. package/dist/commands/solutions-connections.js +88 -0
  32. package/dist/commands/solutions-connections.js.map +1 -0
  33. package/dist/commands/solutions-installation-options.d.ts +5 -0
  34. package/dist/commands/solutions-installation-options.d.ts.map +1 -0
  35. package/dist/commands/solutions-installation-options.js +52 -0
  36. package/dist/commands/solutions-installation-options.js.map +1 -0
  37. package/dist/commands/solutions-onboarding.d.ts +5 -0
  38. package/dist/commands/solutions-onboarding.d.ts.map +1 -0
  39. package/dist/commands/solutions-onboarding.js +113 -0
  40. package/dist/commands/solutions-onboarding.js.map +1 -0
  41. package/dist/commands/solutions-ops.d.ts.map +1 -1
  42. package/dist/commands/solutions-ops.js +278 -17
  43. package/dist/commands/solutions-ops.js.map +1 -1
  44. package/dist/first-run.d.ts.map +1 -1
  45. package/dist/first-run.js +2 -0
  46. package/dist/first-run.js.map +1 -1
  47. package/dist/index.d.ts +1 -1
  48. package/dist/index.d.ts.map +1 -1
  49. package/dist/index.js +1 -1
  50. package/dist/index.js.map +1 -1
  51. package/node_modules/@noodle-borg/admission-limits/dist/counter-store.d.ts +21 -2
  52. package/node_modules/@noodle-borg/admission-limits/dist/counter-store.js +10 -1
  53. package/node_modules/@noodle-borg/admission-limits/dist/in-memory-counter-store.d.ts +5 -1
  54. package/node_modules/@noodle-borg/admission-limits/dist/in-memory-counter-store.js +31 -2
  55. package/node_modules/@noodle-borg/admission-limits/dist/portable.d.ts +3 -0
  56. package/node_modules/@noodle-borg/admission-limits/dist/portable.js +3 -0
  57. package/node_modules/@noodle-borg/admission-limits/dist/public-admission-assertion.d.ts +28 -0
  58. package/node_modules/@noodle-borg/admission-limits/dist/public-admission-assertion.js +124 -0
  59. package/node_modules/@noodle-borg/admission-limits/dist/public-record-admission.d.ts +54 -0
  60. package/node_modules/@noodle-borg/admission-limits/dist/public-record-admission.js +74 -0
  61. package/node_modules/@noodle-borg/admission-limits/dist/request-attribution.d.ts +11 -0
  62. package/node_modules/@noodle-borg/admission-limits/dist/request-attribution.js +19 -0
  63. package/node_modules/@noodle-borg/agent-kit/dist/curated/error-fixes.js +2 -0
  64. package/node_modules/@noodle-borg/agent-kit/dist/generated/example-files.js +5 -5
  65. package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.js +3 -0
  66. package/node_modules/@noodle-borg/agent-kit/dist/index.d.ts +1 -0
  67. package/node_modules/@noodle-borg/agent-kit/dist/index.js +1 -0
  68. package/node_modules/@noodle-borg/agent-kit/dist/plugin-bootstrap-skill.js +10 -0
  69. package/node_modules/@noodle-borg/agent-kit/dist/skill-authoring-refs.js +15 -3
  70. package/node_modules/@noodle-borg/agent-kit/dist/skill-content.js +1 -1
  71. package/node_modules/@noodle-borg/agent-kit/dist/welcome-wordmark.d.ts +3 -0
  72. package/node_modules/@noodle-borg/agent-kit/dist/welcome-wordmark.js +10 -0
  73. package/node_modules/@noodle-borg/agent-kit/package.json +1 -1
  74. package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-configuration.d.ts +9 -1
  75. package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-configuration.js +33 -2
  76. package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-execution-bound.d.ts +3 -0
  77. package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-execution-bound.js +29 -0
  78. package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-interaction-state.d.ts +5 -3
  79. package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-interaction-state.js +21 -10
  80. package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-store.d.ts +1 -1
  81. package/node_modules/@noodle-borg/assistant-gateway/dist/assistant-store.js +3 -3
  82. package/node_modules/@noodle-borg/assistant-gateway/dist/portable.d.ts +1 -0
  83. package/node_modules/@noodle-borg/assistant-gateway/dist/portable.js +1 -0
  84. package/node_modules/@noodle-borg/assistant-gateway/dist/session-target.js +5 -4
  85. package/node_modules/@noodle-borg/assistant-gateway/package.json +1 -1
  86. package/node_modules/@noodle-borg/authoring/dist/config.d.ts +20 -0
  87. package/node_modules/@noodle-borg/authoring/dist/config.js +29 -2
  88. package/node_modules/@noodle-borg/authoring/dist/connectors.d.ts +6 -1
  89. package/node_modules/@noodle-borg/authoring/dist/connectors.js +5 -0
  90. package/node_modules/@noodle-borg/authoring/dist/index.d.ts +2 -2
  91. package/node_modules/@noodle-borg/authoring/dist/json-schema.d.ts +1 -1
  92. package/node_modules/@noodle-borg/authoring/dist/json-schema.js +15 -2
  93. package/node_modules/@noodle-borg/authoring/dist/load-authored.js +1 -1
  94. package/node_modules/@noodle-borg/authoring/dist/managed-collection.d.ts +18 -4
  95. package/node_modules/@noodle-borg/authoring/dist/managed-collection.js +22 -3
  96. package/node_modules/@noodle-borg/authoring/dist/platform.d.ts +3 -0
  97. package/node_modules/@noodle-borg/authoring/dist/platform.js +4 -0
  98. package/node_modules/@noodle-borg/authoring/dist/server-presentation.js +43 -0
  99. package/node_modules/@noodle-borg/authoring/dist/server.d.ts +3 -1
  100. package/node_modules/@noodle-borg/authoring/dist/server.js +4 -44
  101. package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-billing.js +18 -0
  102. package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-config.js +31 -4
  103. package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-solutions.js +778 -0
  104. package/node_modules/@noodle-borg/cli-catalog/dist/catalog-data-tenant-resources.js +0 -241
  105. package/node_modules/@noodle-borg/cli-catalog/dist/catalog-types.js +7 -0
  106. package/node_modules/@noodle-borg/cli-catalog/dist/index.js +20 -0
  107. package/node_modules/@noodle-borg/compiler/dist/artifact/assemble.js +2 -1
  108. package/node_modules/@noodle-borg/compiler/dist/artifact/catalog-emission.js +3 -1
  109. package/node_modules/@noodle-borg/compiler/dist/artifact/config.js +3 -0
  110. package/node_modules/@noodle-borg/compiler/dist/artifact/types.d.ts +17 -1
  111. package/node_modules/@noodle-borg/compiler/dist/artifact/version.d.ts +6 -1
  112. package/node_modules/@noodle-borg/compiler/dist/artifact/version.js +6 -1
  113. package/node_modules/@noodle-borg/compiler/dist/business-variables.d.ts +27 -0
  114. package/node_modules/@noodle-borg/compiler/dist/business-variables.js +230 -0
  115. package/node_modules/@noodle-borg/compiler/dist/compile.js +7 -1
  116. package/node_modules/@noodle-borg/compiler/dist/errors.d.ts +1 -1
  117. package/node_modules/@noodle-borg/compiler/dist/index.d.ts +3 -0
  118. package/node_modules/@noodle-borg/compiler/dist/index.js +3 -0
  119. package/node_modules/@noodle-borg/compiler/dist/managed-collection-controls.d.ts +52 -0
  120. package/node_modules/@noodle-borg/compiler/dist/managed-collection-controls.js +92 -0
  121. package/node_modules/@noodle-borg/compiler/dist/managed-collections.d.ts +26 -1
  122. package/node_modules/@noodle-borg/compiler/dist/managed-collections.js +190 -1
  123. package/node_modules/@noodle-borg/compiler/dist/manifest/schema.d.ts +100 -36
  124. package/node_modules/@noodle-borg/compiler/dist/manifest/schema.js +2 -0
  125. package/node_modules/@noodle-borg/compiler/dist/native-record-operations.d.ts +7 -0
  126. package/node_modules/@noodle-borg/compiler/dist/native-record-operations.js +59 -0
  127. package/node_modules/@noodle-borg/connector-defs/dist/compile-http.js +83 -8
  128. package/node_modules/@noodle-borg/connector-defs/dist/schema.d.ts +31 -1
  129. package/node_modules/@noodle-borg/connector-defs/dist/schema.js +16 -0
  130. package/node_modules/@noodle-borg/connector-http/dist/http-connector.d.ts +12 -3
  131. package/node_modules/@noodle-borg/connector-http/dist/http-connector.js +41 -2
  132. package/node_modules/@noodle-borg/connector-http/dist/http-response.js +3 -2
  133. package/node_modules/@noodle-borg/connector-http/dist/mcp/config.js +1 -1
  134. package/node_modules/@noodle-borg/connector-http/dist/url-resolution.js +1 -1
  135. package/node_modules/@noodle-borg/control-plane/dist/contracts.d.ts +4 -1
  136. package/node_modules/@noodle-borg/control-plane/dist/deploy-gates.js +1 -0
  137. package/node_modules/@noodle-borg/control-plane/dist/in-memory-organization-store.d.ts +3 -0
  138. package/node_modules/@noodle-borg/control-plane/dist/in-memory-organization-store.js +11 -0
  139. package/node_modules/@noodle-borg/control-plane/dist/organization-agreements.d.ts +45 -0
  140. package/node_modules/@noodle-borg/control-plane/dist/organization-agreements.js +74 -0
  141. package/node_modules/@noodle-borg/control-plane/dist/portable.d.ts +1 -0
  142. package/node_modules/@noodle-borg/control-plane/dist/portable.js +1 -0
  143. package/node_modules/@noodle-borg/module/dist/contract.d.ts +22 -0
  144. package/node_modules/@noodle-borg/module/dist/platform-human-identity.d.ts +2 -0
  145. package/node_modules/@noodle-borg/protocol/dist/request-deps.js +1 -0
  146. package/node_modules/@noodle-borg/protocol/dist/request-state.d.ts +1 -0
  147. package/node_modules/@noodle-borg/protocol/dist/request-state.js +11 -2
  148. package/node_modules/@noodle-borg/protocol/dist/sdk-server.d.ts +2 -0
  149. package/node_modules/@noodle-borg/protocol/dist/v2/input-required.js +2 -1
  150. package/node_modules/@noodle-borg/protocol/dist/v2/server.js +2 -1
  151. package/node_modules/@noodle-borg/runtime/dist/ambient-context.js +6 -1
  152. package/node_modules/@noodle-borg/runtime/dist/broker/types.d.ts +2 -0
  153. package/node_modules/@noodle-borg/runtime/dist/business-variables.d.ts +15 -0
  154. package/node_modules/@noodle-borg/runtime/dist/business-variables.js +75 -0
  155. package/node_modules/@noodle-borg/runtime/dist/confirmation-continuation.js +2 -1
  156. package/node_modules/@noodle-borg/runtime/dist/confirmation.js +23 -3
  157. package/node_modules/@noodle-borg/runtime/dist/connector/types.d.ts +17 -1
  158. package/node_modules/@noodle-borg/runtime/dist/connector-snapshot.js +6 -0
  159. package/node_modules/@noodle-borg/runtime/dist/execute.d.ts +18 -3
  160. package/node_modules/@noodle-borg/runtime/dist/execute.js +13 -3
  161. package/node_modules/@noodle-borg/runtime/dist/index.d.ts +2 -0
  162. package/node_modules/@noodle-borg/runtime/dist/index.js +1 -0
  163. package/node_modules/@noodle-borg/runtime/dist/interactive.js +11 -0
  164. package/node_modules/@noodle-borg/runtime/dist/managed-origins.d.ts +3 -1
  165. package/node_modules/@noodle-borg/runtime/dist/managed-origins.js +32 -7
  166. package/node_modules/@noodle-borg/runtime/dist/operation-credential.js +6 -0
  167. package/node_modules/@noodle-borg/runtime/dist/operation-evidence.d.ts +30 -0
  168. package/node_modules/@noodle-borg/runtime/dist/operation-evidence.js +68 -0
  169. package/node_modules/@noodle-borg/runtime/dist/operation-execution.d.ts +2 -2
  170. package/node_modules/@noodle-borg/runtime/dist/operation-execution.js +142 -71
  171. package/node_modules/@noodle-borg/runtime/dist/result.d.ts +6 -4
  172. package/node_modules/@noodle-borg/runtime/dist/tool-dispatch.d.ts +7 -0
  173. package/node_modules/@noodle-borg/runtime/dist/tool-dispatch.js +48 -4
  174. package/node_modules/@noodle-borg/service/dist/admission.js +2 -1
  175. package/node_modules/@noodle-borg/service/dist/application-activity.js +236 -0
  176. package/node_modules/@noodle-borg/service/dist/application-business-notice.js +28 -0
  177. package/node_modules/@noodle-borg/service/dist/application-runtime-target.js +141 -0
  178. package/node_modules/@noodle-borg/service/dist/application-settings-targets.js +72 -0
  179. package/node_modules/@noodle-borg/service/dist/application-settings.js +210 -0
  180. package/node_modules/@noodle-borg/service/dist/business-api-admission.js +121 -0
  181. package/node_modules/@noodle-borg/service/dist/business-information/activity-pagination.js +73 -0
  182. package/node_modules/@noodle-borg/service/dist/business-information/business-notice.d.ts +24 -0
  183. package/node_modules/@noodle-borg/service/dist/business-information/business-notice.js +18 -0
  184. package/node_modules/@noodle-borg/service/dist/business-information/collection-controls.js +51 -0
  185. package/node_modules/@noodle-borg/service/dist/business-information/contracts.d.ts +439 -0
  186. package/node_modules/@noodle-borg/service/dist/business-information/definition-resolver.js +94 -0
  187. package/node_modules/@noodle-borg/service/dist/business-information/in-memory-installation-lifecycle.js +136 -0
  188. package/node_modules/@noodle-borg/service/dist/business-information/in-memory-invitations.js +160 -0
  189. package/node_modules/@noodle-borg/service/dist/business-information/in-memory-locks.js +23 -0
  190. package/node_modules/@noodle-borg/service/dist/business-information/in-memory-store.js +287 -132
  191. package/node_modules/@noodle-borg/service/dist/business-information/installation-capacity.js +10 -0
  192. package/node_modules/@noodle-borg/service/dist/business-information/invitations.js +68 -0
  193. package/node_modules/@noodle-borg/service/dist/business-information/legacy-request-migration.js +60 -0
  194. package/node_modules/@noodle-borg/service/dist/business-information/managed-releases.js +245 -0
  195. package/node_modules/@noodle-borg/service/dist/business-information/managed-solution-blueprints.js +51 -0
  196. package/node_modules/@noodle-borg/service/dist/business-information/managed-solution-executable.js +76 -0
  197. package/node_modules/@noodle-borg/service/dist/business-information/model.js +124 -23
  198. package/node_modules/@noodle-borg/service/dist/business-information/native-query.js +162 -0
  199. package/node_modules/@noodle-borg/service/dist/business-information/native-storage-budget.js +60 -0
  200. package/node_modules/@noodle-borg/service/dist/business-information/pagination.js +28 -0
  201. package/node_modules/@noodle-borg/service/dist/business-information/portable.js +9 -0
  202. package/node_modules/@noodle-borg/service/dist/business-information/principal-authority.d.ts +11 -0
  203. package/node_modules/@noodle-borg/service/dist/business-information/principal-authority.js +42 -0
  204. package/node_modules/@noodle-borg/service/dist/business-information/profiles.js +137 -6
  205. package/node_modules/@noodle-borg/service/dist/business-information/reader-floor.js +26 -0
  206. package/node_modules/@noodle-borg/service/dist/business-information/source-credential-fence.js +79 -0
  207. package/node_modules/@noodle-borg/service/dist/business-information/source-custody-budget.js +30 -0
  208. package/node_modules/@noodle-borg/service/dist/business-information/source-custody-memory.js +122 -0
  209. package/node_modules/@noodle-borg/service/dist/business-information/source-executor.js +191 -0
  210. package/node_modules/@noodle-borg/service/dist/business-information/source-ingestion-contracts.js +2 -0
  211. package/node_modules/@noodle-borg/service/dist/business-information/source-ingestion-coordinator.js +136 -0
  212. package/node_modules/@noodle-borg/service/dist/business-information/source-ingestion-failures.js +32 -0
  213. package/node_modules/@noodle-borg/service/dist/business-information/source-ingestion-memory-state.js +154 -0
  214. package/node_modules/@noodle-borg/service/dist/business-information/source-ingestion-memory-store.js +568 -0
  215. package/node_modules/@noodle-borg/service/dist/business-information/source-ingestion-memory-types.js +26 -0
  216. package/node_modules/@noodle-borg/service/dist/business-information/source-ingestion-memory-values.js +59 -0
  217. package/node_modules/@noodle-borg/service/dist/business-information/source-ingestion-pagination.js +54 -0
  218. package/node_modules/@noodle-borg/service/dist/business-information/source-ingestion-validation.js +163 -0
  219. package/node_modules/@noodle-borg/service/dist/business-information/source-refresh-retention.js +29 -0
  220. package/node_modules/@noodle-borg/service/dist/business-information-runtime.js +80 -0
  221. package/node_modules/@noodle-borg/service/dist/business-onboarding.js +73 -0
  222. package/node_modules/@noodle-borg/service/dist/connections/types.js +8 -0
  223. package/node_modules/@noodle-borg/service/dist/credential-binding-index.js +38 -33
  224. package/node_modules/@noodle-borg/service/dist/deployment-execution.js +275 -0
  225. package/node_modules/@noodle-borg/service/dist/external-credential-binding-broker.js +19 -1
  226. package/node_modules/@noodle-borg/service/dist/external-credential-exchange.d.ts +16 -1
  227. package/node_modules/@noodle-borg/service/dist/modules/host.js +4 -1
  228. package/node_modules/@noodle-borg/service/dist/native-record-connector.d.ts +20 -0
  229. package/node_modules/@noodle-borg/service/dist/native-record-connector.js +206 -0
  230. package/node_modules/@noodle-borg/service/dist/oauth/store.d.ts +3 -0
  231. package/node_modules/@noodle-borg/service/dist/operation-evidence.js +89 -0
  232. package/node_modules/@noodle-borg/service/dist/recovery-quarantine.js +49 -0
  233. package/node_modules/@noodle-borg/service/dist/registry-compile.js +60 -11
  234. package/node_modules/@noodle-borg/service/dist/registry-deploy-transaction.js +18 -0
  235. package/node_modules/@noodle-borg/service/dist/registry-rollback.js +2 -1
  236. package/node_modules/@noodle-borg/service/dist/registry-state.d.ts +1 -1
  237. package/node_modules/@noodle-borg/service/dist/registry-state.js +6 -3
  238. package/node_modules/@noodle-borg/service/dist/registry-targets.js +49 -0
  239. package/node_modules/@noodle-borg/service/dist/registry-types.d.ts +2 -0
  240. package/node_modules/@noodle-borg/service/dist/registry.d.ts +15 -3
  241. package/node_modules/@noodle-borg/service/dist/registry.js +177 -137
  242. package/node_modules/@noodle-borg/service/dist/routes/assistant-appearance.js +3 -2
  243. package/node_modules/@noodle-borg/service/dist/routes/assistant-clients.js +2 -1
  244. package/node_modules/@noodle-borg/service/dist/routes/assistant-doctor.js +2 -1
  245. package/node_modules/@noodle-borg/service/dist/routes/assistant-embeds.js +8 -3
  246. package/node_modules/@noodle-borg/service/dist/routes/assistant-interaction-replay.js +1 -1
  247. package/node_modules/@noodle-borg/service/dist/routes/assistant-interactions.js +48 -36
  248. package/node_modules/@noodle-borg/service/dist/routes/assistant-public-configuration.js +3 -2
  249. package/node_modules/@noodle-borg/service/dist/routes/assistant-public-session.js +10 -10
  250. package/node_modules/@noodle-borg/service/dist/routes/assistant-session-target.js +32 -3
  251. package/node_modules/@noodle-borg/service/dist/routes/assistant-suggestions.js +1 -1
  252. package/node_modules/@noodle-borg/service/dist/routes/assistant-transcript.js +1 -1
  253. package/node_modules/@noodle-borg/service/dist/routes/assistant.js +10 -10
  254. package/node_modules/@noodle-borg/service/dist/routes/business-information-activity.js +83 -0
  255. package/node_modules/@noodle-borg/service/dist/routes/business-information-admission.js +26 -0
  256. package/node_modules/@noodle-borg/service/dist/routes/business-information-channels.js +153 -0
  257. package/node_modules/@noodle-borg/service/dist/routes/business-information-connections.js +107 -0
  258. package/node_modules/@noodle-borg/service/dist/routes/business-information-dispatch.js +87 -4
  259. package/node_modules/@noodle-borg/service/dist/routes/business-information-external.js +79 -0
  260. package/node_modules/@noodle-borg/service/dist/routes/business-information-installation.js +24 -0
  261. package/node_modules/@noodle-borg/service/dist/routes/business-information-notice.js +69 -0
  262. package/node_modules/@noodle-borg/service/dist/routes/business-information-onboarding.js +58 -0
  263. package/node_modules/@noodle-borg/service/dist/routes/business-information-paths.js +76 -0
  264. package/node_modules/@noodle-borg/service/dist/routes/business-information-public.js +151 -0
  265. package/node_modules/@noodle-borg/service/dist/routes/business-information-reader-floor.js +15 -0
  266. package/node_modules/@noodle-borg/service/dist/routes/business-information-record-create.js +29 -0
  267. package/node_modules/@noodle-borg/service/dist/routes/business-information-record-reads.js +36 -0
  268. package/node_modules/@noodle-borg/service/dist/routes/business-information-request.js +64 -0
  269. package/node_modules/@noodle-borg/service/dist/routes/business-information-settings.js +64 -0
  270. package/node_modules/@noodle-borg/service/dist/routes/business-information-source.js +249 -0
  271. package/node_modules/@noodle-borg/service/dist/routes/business-information-staff.js +258 -0
  272. package/node_modules/@noodle-borg/service/dist/routes/business-information-wire.js +226 -26
  273. package/node_modules/@noodle-borg/service/dist/routes/business-information.js +238 -197
  274. package/node_modules/@noodle-borg/service/dist/routes/config-values-dispatch.js +1 -1
  275. package/node_modules/@noodle-borg/service/dist/routes/config-values.js +26 -4
  276. package/node_modules/@noodle-borg/service/dist/routes/control-plane.js +33 -234
  277. package/node_modules/@noodle-borg/service/dist/routes/deployment-activation-response.js +13 -4
  278. package/node_modules/@noodle-borg/service/dist/service-resource-cleanup.js +4 -0
  279. package/node_modules/@noodle-borg/service/dist/service.js +57 -11
  280. package/node_modules/@noodle-borg/service/dist/solution-installation-activation.js +149 -0
  281. package/node_modules/@noodle-borg/service/dist/source-configuration-authority.js +94 -0
  282. package/node_modules/@noodle-borg/service/dist/state-catalog.js +6 -5
  283. package/node_modules/@noodle-borg/service/dist/store/config-values.d.ts +42 -17
  284. package/node_modules/@noodle-borg/service/dist/store/config-values.js +123 -24
  285. package/node_modules/@noodle-borg/service/dist/store/in-memory.d.ts +1 -0
  286. package/node_modules/@noodle-borg/service/dist/store/in-memory.js +3 -0
  287. package/node_modules/@noodle-borg/service/dist/store/json-file.d.ts +1 -0
  288. package/node_modules/@noodle-borg/service/dist/store/json-file.js +3 -0
  289. package/node_modules/@noodle-borg/service/dist/store.d.ts +3 -1
  290. package/node_modules/@noodle-borg/service/package.json +2 -2
  291. package/node_modules/@noodle-borg/transport-http/dist/serve-request.js +9 -0
  292. package/node_modules/@noodle-borg/transport-http/package.json +1 -0
  293. package/node_modules/@noodle-borg/wire-contracts/dist/application-activity.d.ts +143 -0
  294. package/node_modules/@noodle-borg/wire-contracts/dist/application-activity.js +90 -0
  295. package/node_modules/@noodle-borg/wire-contracts/dist/application-channels.d.ts +130 -0
  296. package/node_modules/@noodle-borg/wire-contracts/dist/application-channels.js +77 -0
  297. package/node_modules/@noodle-borg/wire-contracts/dist/application-connections.d.ts +105 -0
  298. package/node_modules/@noodle-borg/wire-contracts/dist/application-connections.js +67 -0
  299. package/node_modules/@noodle-borg/wire-contracts/dist/application-onboarding.d.ts +27 -0
  300. package/node_modules/@noodle-borg/wire-contracts/dist/application-onboarding.js +28 -0
  301. package/node_modules/@noodle-borg/wire-contracts/dist/application-settings.d.ts +112 -0
  302. package/node_modules/@noodle-borg/wire-contracts/dist/application-settings.js +88 -0
  303. package/node_modules/@noodle-borg/wire-contracts/dist/assistant.d.ts +1 -1
  304. package/node_modules/@noodle-borg/wire-contracts/dist/billing-catalog.d.ts +62 -0
  305. package/node_modules/@noodle-borg/wire-contracts/dist/billing-catalog.js +57 -0
  306. package/node_modules/@noodle-borg/wire-contracts/dist/billing-enforcement.d.ts +12 -12
  307. package/node_modules/@noodle-borg/wire-contracts/dist/billing-metering.d.ts +4 -4
  308. package/node_modules/@noodle-borg/wire-contracts/dist/billing-org-transfer.d.ts +3 -3
  309. package/node_modules/@noodle-borg/wire-contracts/dist/business-information-query.d.ts +25 -0
  310. package/node_modules/@noodle-borg/wire-contracts/dist/business-information-query.js +37 -0
  311. package/node_modules/@noodle-borg/wire-contracts/dist/business-information.d.ts +1816 -158
  312. package/node_modules/@noodle-borg/wire-contracts/dist/business-information.js +416 -41
  313. package/node_modules/@noodle-borg/wire-contracts/dist/control-plane.d.ts +2 -2
  314. package/node_modules/@noodle-borg/wire-contracts/dist/distribution.d.ts +5 -5
  315. package/node_modules/@noodle-borg/wire-contracts/dist/index.d.ts +8 -0
  316. package/node_modules/@noodle-borg/wire-contracts/dist/index.js +8 -0
  317. package/node_modules/@noodle-borg/wire-contracts/dist/knowledge.d.ts +3 -3
  318. package/node_modules/@noodle-borg/wire-contracts/dist/managed-assistant-sponsorship.d.ts +7 -7
  319. package/node_modules/@noodle-borg/wire-contracts/dist/platform-account-reset.d.ts +5 -0
  320. package/node_modules/@noodle-borg/wire-contracts/dist/platform-account-reset.js +1 -0
  321. package/node_modules/@noodle-borg/wire-contracts/dist/platform-auth.d.ts +66 -66
  322. package/node_modules/@noodle-borg/wire-contracts/dist/solution-onboarding.d.ts +143 -0
  323. package/node_modules/@noodle-borg/wire-contracts/dist/solution-onboarding.js +94 -0
  324. package/node_modules/@noodleseed/assistant/README.md +5 -0
  325. package/node_modules/@noodleseed/assistant/package.json +1 -1
  326. package/package.json +2 -2
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- export { type AssistantAccess, type AssistantCapability, type AssistantLabels, type AssistantLayoutMode, type AssistantPosition, type AssistantPresentationOptions, type AssistantPresentationTone, type AssistantSurfaceConfig, type AssistantSurfaceMode, type AssistantThemeMode, type AssistantUiOptions, type AuthenticatedWebsiteAccess, algolia, annotations, asset, authenticatedWebsite, type BoundConnectorRef, type BrandThemeTokens, bind, type CapabilityRef, type ConnectionBinding, type ConnectionRef, type ConnectionSource, type CustomerAuthRouting, type CustomerEndpointClaimMapping, type CustomerEndpointPolicy, type CustomerEndpointRef, clientCredentials, connection, connector, customerAuth, customerEndpoint, type EmbeddedAssistantConfig, type EmbeddedAssistantOptions, embeddedAssistant, externalExchange, file, firecrawl, type GoogleWorkloadIdentityAccess, gmailConnector, googleWorkloadIdentity, handoffSession, knowledge, type ManagedCollectionDeclaration, type ManagedCollectionInput, managedCollection, managedSecret, meilisearch, type NoodleManagedModel, noodleManaged, type OpenAICompatibleModel, type OpenAICompatibleModelInput, openAICompatible, type PublicWebsiteAccess, prompt, publicWebsite, resource, type ServerDefinition, secret, server, site, tavily, tool, variable, when, z, } from '@noodle-borg/authoring';
1
+ export { type AssistantAccess, type AssistantCapability, type AssistantLabels, type AssistantLayoutMode, type AssistantPosition, type AssistantPresentationOptions, type AssistantPresentationTone, type AssistantSurfaceConfig, type AssistantSurfaceMode, type AssistantThemeMode, type AssistantUiOptions, type AuthenticatedWebsiteAccess, algolia, annotations, asset, authenticatedWebsite, type BoundConnectorRef, type BrandThemeTokens, bind, type CapabilityRef, type ConnectionBinding, type ConnectionRef, type ConnectionSource, type CustomerAuthRouting, type CustomerEndpointClaimMapping, type CustomerEndpointPolicy, type CustomerEndpointRef, clientCredentials, connection, connector, customerAuth, customerEndpoint, type EmbeddedAssistantConfig, type EmbeddedAssistantOptions, embeddedAssistant, externalExchange, file, firecrawl, type GoogleWorkloadIdentityAccess, gmailConnector, googleWorkloadIdentity, handoffSession, knowledge, type ManagedCollectionDeclaration, type ManagedCollectionInput, managedCollection, managedSecret, meilisearch, type NoodleManagedModel, noodleManaged, noodlePlatform, type OpenAICompatibleModel, type OpenAICompatibleModelInput, openAICompatible, type PublicWebsiteAccess, prompt, publicWebsite, resource, type ServerDefinition, secret, server, site, tavily, tool, variable, when, z, } from '@noodle-borg/authoring';
2
2
  export { run } from './cli.js';
3
3
  export { appendServer, type ConfigLocation, clearConfig, configPath, maskToken, type NoodleConfig, readConfig, readServers, resolveAuthToken, resolveServiceUrl, type SavedServer, serversPath, writeConfig, } from './config.js';
4
4
  export { DEFAULT_SERVICE_URL, type DeployOptions, type DeployOutcome, deploy } from './deploy.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,4BAA4B,EACjC,KAAK,yBAAyB,EAC9B,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,EACvB,KAAK,kBAAkB,EACvB,KAAK,0BAA0B,EAC/B,OAAO,EACP,WAAW,EACX,KAAK,EACL,oBAAoB,EACpB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,IAAI,EACJ,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,KAAK,4BAA4B,EACjC,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,EACxB,iBAAiB,EACjB,UAAU,EACV,SAAS,EACT,YAAY,EACZ,gBAAgB,EAChB,KAAK,uBAAuB,EAC5B,KAAK,wBAAwB,EAC7B,iBAAiB,EACjB,gBAAgB,EAChB,IAAI,EACJ,SAAS,EACT,KAAK,4BAA4B,EACjC,cAAc,EACd,sBAAsB,EACtB,cAAc,EACd,SAAS,EACT,KAAK,4BAA4B,EACjC,KAAK,sBAAsB,EAC3B,iBAAiB,EACjB,aAAa,EACb,WAAW,EACX,KAAK,kBAAkB,EACvB,aAAa,EACb,KAAK,qBAAqB,EAC1B,KAAK,0BAA0B,EAC/B,gBAAgB,EAChB,KAAK,mBAAmB,EACxB,MAAM,EACN,aAAa,EACb,QAAQ,EACR,KAAK,gBAAgB,EACrB,MAAM,EACN,MAAM,EACN,IAAI,EACJ,MAAM,EACN,IAAI,EACJ,QAAQ,EACR,IAAI,EACJ,CAAC,GACF,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EACL,YAAY,EACZ,KAAK,cAAc,EACnB,WAAW,EACX,UAAU,EACV,SAAS,EACT,KAAK,YAAY,EACjB,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,KAAK,WAAW,EAChB,WAAW,EACX,WAAW,GACZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,mBAAmB,EAAE,KAAK,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAClG,OAAO,EAAE,KAAK,SAAS,EAAE,KAAK,UAAU,EAAE,KAAK,eAAe,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AACtF,OAAO,EACL,sBAAsB,EACtB,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,eAAe,EACf,qBAAqB,EACrB,wBAAwB,EACxB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,8BAA8B,EAC9B,kBAAkB,EAClB,YAAY,EACZ,KAAK,YAAY,EACjB,KAAK,oBAAoB,EACzB,KAAK,sBAAsB,EAC3B,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,wBAAwB,EACxB,2BAA2B,EAC3B,kBAAkB,GACnB,MAAM,2CAA2C,CAAC;AACnD,OAAO,EACL,yBAAyB,EACzB,KAAK,2BAA2B,EAChC,uBAAuB,GACxB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EACL,KAAK,UAAU,EACf,KAAK,UAAU,EACf,eAAe,EACf,iBAAiB,GAClB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,wBAAwB,EACxB,KAAK,kBAAkB,EACvB,KAAK,YAAY,EACjB,WAAW,EACX,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,uBAAuB,EACvB,KAAK,iBAAiB,EACtB,KAAK,WAAW,EAChB,iBAAiB,EACjB,qBAAqB,EACrB,uBAAuB,EACvB,qBAAqB,EACrB,eAAe,EACf,yBAAyB,EACzB,kBAAkB,EAClB,6BAA6B,EAC7B,uBAAuB,EACvB,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,QAAQ,GACT,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- export { algolia, annotations, asset, authenticatedWebsite, bind, clientCredentials, connection, connector, customerAuth, customerEndpoint, embeddedAssistant, externalExchange, file, firecrawl, gmailConnector, googleWorkloadIdentity, handoffSession, knowledge, managedCollection, managedSecret, meilisearch, noodleManaged, openAICompatible, prompt, publicWebsite, resource, secret, server, site, tavily, tool, variable, when, z, } from '@noodle-borg/authoring';
1
+ export { algolia, annotations, asset, authenticatedWebsite, bind, clientCredentials, connection, connector, customerAuth, customerEndpoint, embeddedAssistant, externalExchange, file, firecrawl, gmailConnector, googleWorkloadIdentity, handoffSession, knowledge, managedCollection, managedSecret, meilisearch, noodleManaged, noodlePlatform, openAICompatible, prompt, publicWebsite, resource, secret, server, site, tavily, tool, variable, when, z, } from '@noodle-borg/authoring';
2
2
  export { run } from './cli.js';
3
3
  export { appendServer, clearConfig, configPath, maskToken, readConfig, readServers, resolveAuthToken, resolveServiceUrl, serversPath, writeConfig, } from './config.js';
4
4
  export { DEFAULT_SERVICE_URL, deploy } from './deploy.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAaL,OAAO,EACP,WAAW,EACX,KAAK,EACL,oBAAoB,EAGpB,IAAI,EASJ,iBAAiB,EACjB,UAAU,EACV,SAAS,EACT,YAAY,EACZ,gBAAgB,EAGhB,iBAAiB,EACjB,gBAAgB,EAChB,IAAI,EACJ,SAAS,EAET,cAAc,EACd,sBAAsB,EACtB,cAAc,EACd,SAAS,EAGT,iBAAiB,EACjB,aAAa,EACb,WAAW,EAEX,aAAa,EAGb,gBAAgB,EAEhB,MAAM,EACN,aAAa,EACb,QAAQ,EAER,MAAM,EACN,MAAM,EACN,IAAI,EACJ,MAAM,EACN,IAAI,EACJ,QAAQ,EACR,IAAI,EACJ,CAAC,GACF,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EACL,YAAY,EAEZ,WAAW,EACX,UAAU,EACV,SAAS,EAET,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EAEjB,WAAW,EACX,WAAW,GACZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,mBAAmB,EAA0C,MAAM,EAAE,MAAM,aAAa,CAAC;AAClG,OAAO,EAAyD,GAAG,EAAE,MAAM,UAAU,CAAC;AACtF,OAAO,EACL,sBAAsB,EAItB,eAAe,EACf,qBAAqB,EACrB,wBAAwB,EACxB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,8BAA8B,EAC9B,kBAAkB,EAClB,YAAY,EAOZ,wBAAwB,EACxB,2BAA2B,EAC3B,kBAAkB,GACnB,MAAM,2CAA2C,CAAC;AACnD,OAAO,EACL,yBAAyB,EAEzB,uBAAuB,GACxB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAGL,eAAe,EACf,iBAAiB,GAClB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,wBAAwB,EAGxB,WAAW,EAGX,uBAAuB,EAGvB,iBAAiB,EACjB,qBAAqB,EACrB,uBAAuB,EACvB,qBAAqB,EACrB,eAAe,EACf,yBAAyB,EACzB,kBAAkB,EAClB,6BAA6B,EAC7B,uBAAuB,EACvB,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,cAAc,CAAC;AACtB,OAAO,EAIL,QAAQ,GACT,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAaL,OAAO,EACP,WAAW,EACX,KAAK,EACL,oBAAoB,EAGpB,IAAI,EASJ,iBAAiB,EACjB,UAAU,EACV,SAAS,EACT,YAAY,EACZ,gBAAgB,EAGhB,iBAAiB,EACjB,gBAAgB,EAChB,IAAI,EACJ,SAAS,EAET,cAAc,EACd,sBAAsB,EACtB,cAAc,EACd,SAAS,EAGT,iBAAiB,EACjB,aAAa,EACb,WAAW,EAEX,aAAa,EACb,cAAc,EAGd,gBAAgB,EAEhB,MAAM,EACN,aAAa,EACb,QAAQ,EAER,MAAM,EACN,MAAM,EACN,IAAI,EACJ,MAAM,EACN,IAAI,EACJ,QAAQ,EACR,IAAI,EACJ,CAAC,GACF,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EACL,YAAY,EAEZ,WAAW,EACX,UAAU,EACV,SAAS,EAET,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EAEjB,WAAW,EACX,WAAW,GACZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,mBAAmB,EAA0C,MAAM,EAAE,MAAM,aAAa,CAAC;AAClG,OAAO,EAAyD,GAAG,EAAE,MAAM,UAAU,CAAC;AACtF,OAAO,EACL,sBAAsB,EAItB,eAAe,EACf,qBAAqB,EACrB,wBAAwB,EACxB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,8BAA8B,EAC9B,kBAAkB,EAClB,YAAY,EAOZ,wBAAwB,EACxB,2BAA2B,EAC3B,kBAAkB,GACnB,MAAM,2CAA2C,CAAC;AACnD,OAAO,EACL,yBAAyB,EAEzB,uBAAuB,GACxB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAGL,eAAe,EACf,iBAAiB,GAClB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,wBAAwB,EAGxB,WAAW,EAGX,uBAAuB,EAGvB,iBAAiB,EACjB,qBAAqB,EACrB,uBAAuB,EACvB,qBAAqB,EACrB,eAAe,EACf,yBAAyB,EACzB,kBAAkB,EAClB,6BAA6B,EAC7B,uBAAuB,EACvB,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,cAAc,CAAC;AACtB,OAAO,EAIL,QAAQ,GACT,MAAM,eAAe,CAAC"}
@@ -17,7 +17,7 @@ export interface CounterRequest {
17
17
  * Which window the ceiling belongs to. Solvency bounds are daily (the default); the per-address
18
18
  * fairness tier is hourly, so a visitor's accidental burst forgives itself within the same visit.
19
19
  */
20
- readonly window?: 'day' | 'hour';
20
+ readonly window?: 'day' | 'hour' | 'minute';
21
21
  }
22
22
  export interface CounterOutcome {
23
23
  readonly allowed: boolean;
@@ -27,6 +27,17 @@ export interface CounterOutcome {
27
27
  /** Start of the window after the one this counter belongs to. */
28
28
  readonly resetAt: Date;
29
29
  }
30
+ export interface ExhaustedCounter {
31
+ readonly key: string;
32
+ readonly limit: number;
33
+ readonly resetAt: Date;
34
+ }
35
+ export type AtomicCounterAttemptOutcome = {
36
+ readonly kind: 'consumed' | 'replayed' | 'conflict';
37
+ } | {
38
+ readonly kind: 'refused';
39
+ readonly exhausted: readonly ExhaustedCounter[];
40
+ };
30
41
  export interface DailyCounterStore {
31
42
  /**
32
43
  * Atomically consume against a key's daily budget. Must be safe under concurrency: N simultaneous
@@ -64,6 +75,14 @@ export interface DailyCounterStore {
64
75
  export interface AtomicDailyCounterStore extends DailyCounterStore {
65
76
  /** Atomically consume every request, returning false without changing any row when one refuses. */
66
77
  consumeAll(requests: readonly CounterRequest[], now: Date): Promise<boolean>;
78
+ /**
79
+ * Consume an atomic batch once for one opaque logical attempt. Equal retries replay without spending;
80
+ * a changed fingerprint conflicts. Only successful admission creates retry evidence.
81
+ */
82
+ consumeAllOnce(requests: readonly CounterRequest[], attempt: {
83
+ readonly key: string;
84
+ readonly fingerprint: string;
85
+ }, now: Date): Promise<AtomicCounterAttemptOutcome>;
67
86
  }
68
87
  /** Counters roll at UTC midnight — a fixed boundary no tenant timezone can shift. */
69
88
  export declare function dayKey(now: Date): string;
@@ -98,5 +117,5 @@ export declare function counterRow(request: Pick<CounterRequest, 'key' | 'window
98
117
  export declare const COUNTER_RETENTION_DAYS = 2;
99
118
  /** The oldest day still readable at `now`. Rows before it are unreachable and may be deleted. */
100
119
  export declare function retentionCutoff(now: Date): string;
101
- export declare function nextReset(now: Date, window?: 'day' | 'hour'): Date;
120
+ export declare function nextReset(now: Date, window?: 'day' | 'hour' | 'minute'): Date;
102
121
  //# sourceMappingURL=counter-store.d.ts.map
@@ -31,7 +31,11 @@ export function hourKey(now) {
31
31
  */
32
32
  export function counterRow(request, now) {
33
33
  return {
34
- key: request.window === 'hour' ? `${request.key}@${hourKey(now)}` : request.key,
34
+ key: request.window === 'minute'
35
+ ? `${request.key}@${now.toISOString().slice(0, 16)}`
36
+ : request.window === 'hour'
37
+ ? `${request.key}@${hourKey(now)}`
38
+ : request.key,
35
39
  day: dayKey(now),
36
40
  };
37
41
  }
@@ -49,6 +53,11 @@ export function retentionCutoff(now) {
49
53
  }
50
54
  export function nextReset(now, window = 'day') {
51
55
  const next = new Date(now);
56
+ if (window === 'minute') {
57
+ next.setUTCSeconds(0, 0);
58
+ next.setUTCMinutes(next.getUTCMinutes() + 1);
59
+ return next;
60
+ }
52
61
  if (window === 'hour') {
53
62
  next.setUTCMinutes(0, 0, 0);
54
63
  next.setUTCHours(next.getUTCHours() + 1);
@@ -1,4 +1,4 @@
1
- import { type AtomicDailyCounterStore, type CounterOutcome, type CounterRequest, type DailyCounterStore } from './counter-store.js';
1
+ import { type AtomicCounterAttemptOutcome, type AtomicDailyCounterStore, type CounterOutcome, type CounterRequest, type DailyCounterStore } from './counter-store.js';
2
2
  /**
3
3
  * Process-local counters for local development and tests.
4
4
  *
@@ -11,6 +11,10 @@ export declare class InMemoryDailyCounterStore implements DailyCounterStore, Ato
11
11
  readonly durable = false;
12
12
  consume(request: CounterRequest, now: Date): Promise<CounterOutcome>;
13
13
  consumeAll(requests: readonly CounterRequest[], now: Date): Promise<boolean>;
14
+ consumeAllOnce(requests: readonly CounterRequest[], attempt: {
15
+ readonly key: string;
16
+ readonly fingerprint: string;
17
+ }, now: Date): Promise<AtomicCounterAttemptOutcome>;
14
18
  prune(now: Date): Promise<number>;
15
19
  peek(key: string, now: Date): Promise<number>;
16
20
  }
@@ -9,6 +9,7 @@ import { counterRow, dayKey, nextReset, retentionCutoff, } from './counter-store
9
9
  export class InMemoryDailyCounterStore {
10
10
  durable = false;
11
11
  #used = new Map();
12
+ #receipts = new Map();
12
13
  async consume(request, now) {
13
14
  const row = counterRow(request, now);
14
15
  const key = `${row.day}:${row.key}`;
@@ -22,6 +23,21 @@ export class InMemoryDailyCounterStore {
22
23
  return { allowed: true, used: used + amount, limit: request.limit, resetAt };
23
24
  }
24
25
  async consumeAll(requests, now) {
26
+ return this.#consumeAll(requests, now).length === 0;
27
+ }
28
+ async consumeAllOnce(requests, attempt, now) {
29
+ const receipt = counterRow({ key: attempt.key }, now);
30
+ const receiptKey = `${receipt.day}:${receipt.key}`;
31
+ const existing = this.#receipts.get(receiptKey);
32
+ if (existing !== undefined)
33
+ return { kind: existing === attempt.fingerprint ? 'replayed' : 'conflict' };
34
+ const exhausted = this.#consumeAll(requests, now);
35
+ if (exhausted.length > 0)
36
+ return { kind: 'refused', exhausted };
37
+ this.#receipts.set(receiptKey, attempt.fingerprint);
38
+ return { kind: 'consumed' };
39
+ }
40
+ #consumeAll(requests, now) {
25
41
  const batch = requests.map((request) => {
26
42
  const row = counterRow(request, now);
27
43
  return {
@@ -33,15 +49,22 @@ export class InMemoryDailyCounterStore {
33
49
  if (new Set(batch.map((entry) => entry.key)).size !== batch.length) {
34
50
  throw new Error('atomic counter requests must have distinct row identities');
35
51
  }
52
+ const exhausted = [];
36
53
  for (const entry of batch) {
37
54
  const used = this.#used.get(entry.key) ?? 0;
38
55
  if (entry.request.limit <= 0 || used + entry.amount > entry.request.limit)
39
- return false;
56
+ exhausted.push({
57
+ key: entry.request.key,
58
+ limit: entry.request.limit,
59
+ resetAt: nextReset(now, entry.request.window),
60
+ });
40
61
  }
62
+ if (exhausted.length > 0)
63
+ return exhausted;
41
64
  for (const entry of batch) {
42
65
  this.#used.set(entry.key, (this.#used.get(entry.key) ?? 0) + entry.amount);
43
66
  }
44
- return true;
67
+ return [];
45
68
  }
46
69
  async prune(now) {
47
70
  // The day is the map key's prefix, and it sorts lexicographically because it is ISO-8601 — which
@@ -54,6 +77,12 @@ export class InMemoryDailyCounterStore {
54
77
  removed += 1;
55
78
  }
56
79
  }
80
+ for (const key of this.#receipts.keys()) {
81
+ if ((key.split(':')[0] ?? '') < cutoff) {
82
+ this.#receipts.delete(key);
83
+ removed += 1;
84
+ }
85
+ }
57
86
  return removed;
58
87
  }
59
88
  async peek(key, now) {
@@ -3,5 +3,8 @@ export * from './client-address.js';
3
3
  export * from './counter-store.js';
4
4
  export * from './envelope.js';
5
5
  export * from './in-memory-counter-store.js';
6
+ export * from './public-admission-assertion.js';
7
+ export * from './public-record-admission.js';
8
+ export * from './request-attribution.js';
6
9
  export * from './visitor-bucket.js';
7
10
  //# sourceMappingURL=portable.d.ts.map
@@ -3,5 +3,8 @@ export * from './client-address.js';
3
3
  export * from './counter-store.js';
4
4
  export * from './envelope.js';
5
5
  export * from './in-memory-counter-store.js';
6
+ export * from './public-admission-assertion.js';
7
+ export * from './public-record-admission.js';
8
+ export * from './request-attribution.js';
6
9
  export * from './visitor-bucket.js';
7
10
  //# sourceMappingURL=portable.js.map
@@ -0,0 +1,28 @@
1
+ export declare const PUBLIC_ADMISSION_ASSERTION_HEADER = "x-noodle-public-admission";
2
+ export declare const PUBLIC_ADMISSION_ASSERTION_TTL_SECONDS = 60;
3
+ /** A request binding is private BFF-to-service evidence, never a browser credential or tool authority. */
4
+ export interface PublicAdmissionRequestBinding {
5
+ readonly surfaceId: string;
6
+ readonly installationId: string;
7
+ readonly route: string;
8
+ readonly method: 'POST';
9
+ readonly idempotencyKey: string;
10
+ readonly requestDigest: string;
11
+ }
12
+ export interface PublicAdmissionSigningKeys {
13
+ readonly activeVersion: string;
14
+ readonly keys: Readonly<Record<string, string>>;
15
+ /** Separate stable deployment key: rotating assertion signing keys never resets quota buckets. */
16
+ readonly pseudonymKey: string;
17
+ }
18
+ export declare function publicAdmissionRequestDigest(serializedBody: string): string;
19
+ /** Caller must derive sourceAddress from a verified ingress adapter, never arbitrary forwarding headers. */
20
+ export declare function signPublicAdmissionAssertion(binding: PublicAdmissionRequestBinding, attribution: {
21
+ readonly sourceAddress: string;
22
+ readonly visitorHint?: unknown;
23
+ }, keys: PublicAdmissionSigningKeys, now: Date): string;
24
+ export declare function verifyPublicAdmissionAssertion(token: string, expected: PublicAdmissionRequestBinding, keys: PublicAdmissionSigningKeys, now: Date): {
25
+ readonly network: string;
26
+ readonly visitor?: string;
27
+ } | undefined;
28
+ //# sourceMappingURL=public-admission-assertion.d.ts.map
@@ -0,0 +1,124 @@
1
+ import { createHash, createHmac, timingSafeEqual } from 'node:crypto';
2
+ import { clientAddressBucket } from './client-address.js';
3
+ import { dayKey } from './counter-store.js';
4
+ import { visitorBucket } from './visitor-bucket.js';
5
+ export const PUBLIC_ADMISSION_ASSERTION_HEADER = 'x-noodle-public-admission';
6
+ export const PUBLIC_ADMISSION_ASSERTION_TTL_SECONDS = 60;
7
+ const CLOCK_SKEW_SECONDS = 5;
8
+ const digestPattern = /^[a-f0-9]{64}$/;
9
+ export function publicAdmissionRequestDigest(serializedBody) {
10
+ return createHash('sha256').update(serializedBody).digest('hex');
11
+ }
12
+ /** Caller must derive sourceAddress from a verified ingress adapter, never arbitrary forwarding headers. */
13
+ export function signPublicAdmissionAssertion(binding, attribution, keys, now) {
14
+ const address = attribution.sourceAddress.includes(',')
15
+ ? undefined
16
+ : clientAddressBucket(attribution.sourceAddress);
17
+ const visitor = visitorBucket(attribution.visitorHint);
18
+ if (!address || keys.pseudonymKey.length < 32 || !validBinding(binding))
19
+ throw new Error('verified public admission attribution is unavailable');
20
+ const issuedAt = Math.floor(now.getTime() / 1000);
21
+ const epoch = dayKey(now);
22
+ const pseudonym = (kind, value) => createHmac('sha256', keys.pseudonymKey)
23
+ .update(JSON.stringify([binding.installationId, binding.surfaceId, epoch, kind, value]))
24
+ .digest('hex');
25
+ const assertion = {
26
+ ...binding,
27
+ version: 1,
28
+ keyVersion: keys.activeVersion,
29
+ issuer: 'noodle-portal',
30
+ audience: 'noodle-public-admission',
31
+ epoch,
32
+ issuedAt,
33
+ expiresAt: issuedAt + PUBLIC_ADMISSION_ASSERTION_TTL_SECONDS,
34
+ network: pseudonym('network', address),
35
+ ...(visitor ? { visitor: pseudonym('visitor', visitor) } : {}),
36
+ };
37
+ const encoded = Buffer.from(JSON.stringify(assertion)).toString('base64url');
38
+ return `${encoded}.${signature(encoded, signingKey(keys, keys.activeVersion)).toString('base64url')}`;
39
+ }
40
+ export function verifyPublicAdmissionAssertion(token, expected, keys, now) {
41
+ if (token.length > 4096 || !validBinding(expected))
42
+ return undefined;
43
+ try {
44
+ const parts = token.split('.');
45
+ if (parts.length !== 2 || !parts.every((part) => /^[A-Za-z0-9_-]+$/.test(part)))
46
+ return undefined;
47
+ const encoded = parts[0] ?? '';
48
+ const assertion = JSON.parse(Buffer.from(encoded, 'base64url').toString('utf8'));
49
+ if (!isAssertion(assertion))
50
+ return undefined;
51
+ const supplied = Buffer.from(parts[1] ?? '', 'base64url');
52
+ const correct = signature(encoded, signingKey(keys, assertion.keyVersion));
53
+ if (supplied.length !== correct.length || !timingSafeEqual(supplied, correct))
54
+ return undefined;
55
+ const seconds = Math.floor(now.getTime() / 1000);
56
+ if (assertion.epoch !== dayKey(now) ||
57
+ assertion.epoch !== dayKey(new Date(assertion.issuedAt * 1000)) ||
58
+ assertion.issuedAt > seconds + CLOCK_SKEW_SECONDS ||
59
+ assertion.expiresAt < seconds - CLOCK_SKEW_SECONDS ||
60
+ assertion.expiresAt <= assertion.issuedAt ||
61
+ assertion.expiresAt - assertion.issuedAt > PUBLIC_ADMISSION_ASSERTION_TTL_SECONDS)
62
+ return undefined;
63
+ if (Object.entries(expected).some(([key, value]) => assertion[key] !== value))
64
+ return undefined;
65
+ return {
66
+ network: assertion.network,
67
+ ...(assertion.visitor ? { visitor: assertion.visitor } : {}),
68
+ };
69
+ }
70
+ catch {
71
+ return undefined;
72
+ }
73
+ }
74
+ function signingKey(keys, version) {
75
+ const key = Object.hasOwn(keys.keys, version) ? keys.keys[version] : undefined;
76
+ if (!key || key.length < 32 || !/^[A-Za-z0-9_-]{1,32}$/.test(version))
77
+ throw new Error('public admission signing key unavailable');
78
+ return key;
79
+ }
80
+ function signature(encoded, key) {
81
+ return createHmac('sha256', key).update(encoded).digest();
82
+ }
83
+ function validBinding(value) {
84
+ return ([value.surfaceId, value.installationId, value.idempotencyKey].every((item) => typeof item === 'string' && item.length > 0 && item.length <= 128) &&
85
+ value.method === 'POST' &&
86
+ typeof value.route === 'string' &&
87
+ value.route.startsWith('/') &&
88
+ value.route.length <= 512 &&
89
+ digestPattern.test(value.requestDigest));
90
+ }
91
+ function isAssertion(value) {
92
+ if (!value || typeof value !== 'object' || Array.isArray(value))
93
+ return false;
94
+ const a = value;
95
+ return (validBinding(a) &&
96
+ a.version === 1 &&
97
+ a.issuer === 'noodle-portal' &&
98
+ a.audience === 'noodle-public-admission' &&
99
+ typeof a.keyVersion === 'string' &&
100
+ typeof a.epoch === 'string' &&
101
+ Number.isSafeInteger(a.issuedAt) &&
102
+ Number.isSafeInteger(a.expiresAt) &&
103
+ typeof a.network === 'string' &&
104
+ digestPattern.test(a.network) &&
105
+ (a.visitor === undefined || digestPattern.test(a.visitor)) &&
106
+ Object.keys(a).every((key) => [
107
+ 'surfaceId',
108
+ 'installationId',
109
+ 'route',
110
+ 'method',
111
+ 'idempotencyKey',
112
+ 'requestDigest',
113
+ 'version',
114
+ 'keyVersion',
115
+ 'issuer',
116
+ 'audience',
117
+ 'epoch',
118
+ 'issuedAt',
119
+ 'expiresAt',
120
+ 'network',
121
+ 'visitor',
122
+ ].includes(key)));
123
+ }
124
+ //# sourceMappingURL=public-admission-assertion.js.map
@@ -0,0 +1,54 @@
1
+ import type { CounterRequest, DailyCounterStore } from './counter-store.js';
2
+ export declare const PUBLIC_RECORD_ADMISSION_DEFAULTS: Readonly<{
3
+ visitorPerMinute: 300;
4
+ visitorPerHour: 3000;
5
+ networkPerMinute: 600;
6
+ networkPerHour: 6000;
7
+ installationPerDay: 10000;
8
+ }>;
9
+ export type PublicRecordAdmissionLimits = {
10
+ readonly [Key in keyof typeof PUBLIC_RECORD_ADMISSION_DEFAULTS]: number;
11
+ };
12
+ export type PublicRecordLimitCategory = 'visitor' | 'network' | 'installation';
13
+ export type PublicRecordAdmissionResult = {
14
+ readonly allowed: true;
15
+ } | {
16
+ readonly allowed: false;
17
+ readonly reason: 'admission_unavailable';
18
+ } | {
19
+ readonly allowed: false;
20
+ readonly reason: 'idempotency_conflict';
21
+ } | {
22
+ readonly allowed: false;
23
+ readonly reason: 'quota_exceeded';
24
+ readonly resetAt: Date;
25
+ readonly limits: readonly {
26
+ readonly category: PublicRecordLimitCategory;
27
+ readonly limit: number;
28
+ readonly resetAt: Date;
29
+ }[];
30
+ };
31
+ /** Channel-independent admission of one validated logical native create, after completed receipt replay. */
32
+ export declare function admitPublicRecord(input: {
33
+ readonly counters: DailyCounterStore;
34
+ readonly surfaceId: string;
35
+ readonly attempt: {
36
+ readonly key: string;
37
+ readonly fingerprint: string;
38
+ };
39
+ readonly buckets: {
40
+ readonly visitor?: string;
41
+ readonly network?: string;
42
+ };
43
+ readonly now: Date;
44
+ readonly limits?: Partial<PublicRecordAdmissionLimits>;
45
+ }): Promise<PublicRecordAdmissionResult>;
46
+ /** Deployment-owned lower limits retain the same counter identities and accumulated usage. */
47
+ export declare function publicRecordAdmissionLimits(configured?: Partial<PublicRecordAdmissionLimits>): PublicRecordAdmissionLimits;
48
+ export declare function publicRecordCounterRequests(surfaceId: string, buckets: {
49
+ readonly visitor?: string;
50
+ readonly network?: string;
51
+ }, limits?: PublicRecordAdmissionLimits): readonly (CounterRequest & {
52
+ readonly category: PublicRecordLimitCategory;
53
+ })[];
54
+ //# sourceMappingURL=public-record-admission.d.ts.map
@@ -0,0 +1,74 @@
1
+ export const PUBLIC_RECORD_ADMISSION_DEFAULTS = Object.freeze({
2
+ visitorPerMinute: 300,
3
+ visitorPerHour: 3_000,
4
+ networkPerMinute: 600,
5
+ networkPerHour: 6_000,
6
+ installationPerDay: 10_000,
7
+ });
8
+ /** Channel-independent admission of one validated logical native create, after completed receipt replay. */
9
+ export async function admitPublicRecord(input) {
10
+ if (!input.buckets.network)
11
+ return { allowed: false, reason: 'admission_unavailable' };
12
+ if (!('consumeAllOnce' in input.counters) || typeof input.counters.consumeAllOnce !== 'function')
13
+ return { allowed: false, reason: 'admission_unavailable' };
14
+ try {
15
+ const requests = publicRecordCounterRequests(input.surfaceId, input.buckets, publicRecordAdmissionLimits(input.limits));
16
+ const outcome = await input.counters.consumeAllOnce(requests, input.attempt, input.now);
17
+ if (outcome.kind === 'consumed' || outcome.kind === 'replayed')
18
+ return { allowed: true };
19
+ if (outcome.kind === 'conflict')
20
+ return { allowed: false, reason: 'idempotency_conflict' };
21
+ if (outcome.kind !== 'refused' || outcome.exhausted.length === 0)
22
+ throw new Error('invalid atomic admission result');
23
+ const limits = outcome.exhausted.map((counter) => ({
24
+ category: requests.find((request) => request.key === counter.key)?.category ?? 'installation',
25
+ limit: counter.limit,
26
+ resetAt: counter.resetAt,
27
+ }));
28
+ return {
29
+ allowed: false,
30
+ reason: 'quota_exceeded',
31
+ limits,
32
+ resetAt: new Date(Math.max(...limits.map((counter) => counter.resetAt.getTime()))),
33
+ };
34
+ }
35
+ catch {
36
+ return { allowed: false, reason: 'admission_unavailable' };
37
+ }
38
+ }
39
+ /** Deployment-owned lower limits retain the same counter identities and accumulated usage. */
40
+ export function publicRecordAdmissionLimits(configured = {}) {
41
+ return Object.fromEntries(Object.entries(PUBLIC_RECORD_ADMISSION_DEFAULTS).map(([name, maximum]) => {
42
+ const value = configured[name] ?? maximum;
43
+ if (!Number.isSafeInteger(value) || value < 0 || value > maximum)
44
+ throw new Error('public record admission limits must be non-negative integers within the deployment ceiling');
45
+ return [name, value];
46
+ }));
47
+ }
48
+ export function publicRecordCounterRequests(surfaceId, buckets, limits = PUBLIC_RECORD_ADMISSION_DEFAULTS) {
49
+ const requests = [];
50
+ for (const category of ['visitor', 'network']) {
51
+ const bucket = buckets[category];
52
+ if (bucket === undefined)
53
+ continue;
54
+ requests.push({
55
+ key: `solution-intake:${category}:minute:${surfaceId}:${bucket}`,
56
+ category,
57
+ limit: limits[`${category}PerMinute`],
58
+ window: 'minute',
59
+ }, {
60
+ key: `solution-intake:${category}:hour:${surfaceId}:${bucket}`,
61
+ category,
62
+ limit: limits[`${category}PerHour`],
63
+ window: 'hour',
64
+ });
65
+ }
66
+ requests.push({
67
+ key: `solution-intake:surface:${surfaceId}`,
68
+ category: 'installation',
69
+ limit: limits.installationPerDay,
70
+ window: 'day',
71
+ });
72
+ return requests;
73
+ }
74
+ //# sourceMappingURL=public-record-admission.js.map
@@ -0,0 +1,11 @@
1
+ /** Private in-process attribution from an authenticated adapter, never a serialized assertion. */
2
+ export declare function trustedPublicAdmission(input: {
3
+ readonly scope: string | undefined;
4
+ readonly sourceAddress: string | undefined;
5
+ readonly subject?: string;
6
+ readonly now?: Date;
7
+ }): {
8
+ readonly network: string;
9
+ readonly visitor?: string;
10
+ } | undefined;
11
+ //# sourceMappingURL=request-attribution.d.ts.map
@@ -0,0 +1,19 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { clientAddressBucket } from './client-address.js';
3
+ /** Private in-process attribution from an authenticated adapter, never a serialized assertion. */
4
+ export function trustedPublicAdmission(input) {
5
+ if (!input.scope || !input.sourceAddress || input.sourceAddress.includes(','))
6
+ return undefined;
7
+ const address = clientAddressBucket(input.sourceAddress);
8
+ if (address === undefined)
9
+ return undefined;
10
+ const epoch = (input.now ?? new Date()).toISOString().slice(0, 10);
11
+ const digest = (kind, value) => createHash('sha256')
12
+ .update(JSON.stringify([input.scope, epoch, kind, value]))
13
+ .digest('hex');
14
+ return {
15
+ network: digest('network', address),
16
+ ...(input.subject ? { visitor: digest('visitor', input.subject) } : {}),
17
+ };
18
+ }
19
+ //# sourceMappingURL=request-attribution.js.map
@@ -52,6 +52,8 @@ export const ERROR_FIXES = {
52
52
  invalid_knowledge: 'Fix the `knowledge()` declaration: documents must be existing UTF-8 `.md`/`.txt` files inside the project root (no symlinks), within the 100-file / 1 MiB / 25 MiB bounds, and sites need an exact HTTPS origin plus at least one include glob.',
53
53
  knowledge_unhashed: 'Compile from the project root (`noodle validate`/`noodle dev`) so declared knowledge documents can be read and hashed.',
54
54
  invalid_managed_collection: 'Fix the `managedCollection()` declaration: use a bounded, closed Zod object without credential, payment-card, government-identity, health, or biometric field names.',
55
+ invalid_variable_declaration: 'Fix the typed `variable()` declaration: use a bounded closed schema, a matching JSON default, plain Portal metadata, existing requiredFor tool names, and one consistent definition per key.',
56
+ invalid_managed_collection_source: 'Bind the declared source connector and select read-only scan operations whose closed normalized envelopes use the collection record schema exactly.',
55
57
  unknown_connector_alias: 'The tool calls a connector alias not declared in `use`/`provides`; add it or fix the alias (see `suggestions`).',
56
58
  connector_not_in_catalog: 'The referenced connector is not in the resolved catalog; add it to the project connectors or correct the reference.',
57
59
  unknown_operation: 'The connector has no such operation; use an operation declared on that connector (see `didYouMean`/`suggestions`).',