@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
@@ -0,0 +1,92 @@
1
+ import { validateJsonSchema } from '@noodle-borg/app-package';
2
+ import { z } from 'zod';
3
+ const fieldName = z
4
+ .string()
5
+ .min(1)
6
+ .max(64)
7
+ .regex(/^(?!(?:__proto__|constructor|prototype)$)[A-Za-z_][A-Za-z0-9_]*$/);
8
+ const fieldList = z.array(fieldName).max(128);
9
+ const plainText = (max) => z
10
+ .string()
11
+ .trim()
12
+ .min(1)
13
+ .max(max)
14
+ .regex(/^[^<>\p{Cc}]+$/u);
15
+ export const managedCollectionControlFields = {
16
+ management: z
17
+ .object({ assignment: z.literal(true).optional(), notes: z.literal(true).optional() })
18
+ .strict()
19
+ .optional(),
20
+ fields: z
21
+ .record(fieldName, z.object({ label: plainText(120).optional(), help: plainText(1000).optional() }).strict())
22
+ .optional(),
23
+ publicFields: fieldList.optional(),
24
+ editableFields: fieldList.optional(),
25
+ summaryFields: fieldList.optional(),
26
+ filterFields: fieldList.optional(),
27
+ sortFields: fieldList.optional(),
28
+ };
29
+ const controlsSchema = z.object(managedCollectionControlFields).strict();
30
+ /** Validate presentation/exposure against actual record fields, independently of application names. */
31
+ export function validateManagedCollectionControls(controls, schema, external, path, errors) {
32
+ const fail = (suffix, message) => errors.push({ code: 'invalid_managed_collection', path: `${path}.${suffix}`, message });
33
+ if (!controlsSchema.safeParse(controls).success) {
34
+ fail('fields', 'invalid collection management or field metadata');
35
+ return;
36
+ }
37
+ const properties = isObject(schema.properties) ? schema.properties : {};
38
+ for (const key of [
39
+ 'publicFields',
40
+ 'editableFields',
41
+ 'summaryFields',
42
+ 'filterFields',
43
+ 'sortFields',
44
+ ]) {
45
+ const names = controls[key] ?? [];
46
+ if (new Set(names).size !== names.length)
47
+ fail(key, 'duplicate field reference');
48
+ for (const name of names) {
49
+ if (!Object.hasOwn(properties, name))
50
+ fail(key, 'field is not declared in the record schema');
51
+ if ((key === 'filterFields' || key === 'sortFields') &&
52
+ (!isObject(properties[name]) ||
53
+ !['string', 'number', 'integer', 'boolean'].includes(String(properties[name].type))))
54
+ fail(key, 'filter and sort fields must be scalar values');
55
+ }
56
+ }
57
+ for (const name of Object.keys(controls.fields ?? {}))
58
+ if (!Object.hasOwn(properties, name))
59
+ fail('fields', 'metadata must name a declared field');
60
+ if (external &&
61
+ (controls.management !== undefined ||
62
+ (controls.publicFields?.length ?? 0) > 0 ||
63
+ (controls.editableFields?.length ?? 0) > 0))
64
+ fail('management', 'external reference collections cannot enable record writes, assignment or notes');
65
+ if ((controls.publicFields?.length ?? 0) > 0 && Array.isArray(schema.required)) {
66
+ for (const name of schema.required) {
67
+ if (typeof name !== 'string' || controls.publicFields?.includes(name))
68
+ continue;
69
+ const property = properties[name];
70
+ if (!isObject(property) ||
71
+ !Object.hasOwn(property, 'default') ||
72
+ validateJsonSchema(property, property.default).length > 0)
73
+ fail('publicFields', 'required non-public fields need valid creation defaults');
74
+ }
75
+ }
76
+ for (const property of Object.values(properties)) {
77
+ if (isObject(property) &&
78
+ Object.hasOwn(property, 'default') &&
79
+ validateJsonSchema(property, property.default).length > 0)
80
+ fail('recordSchema', 'creation default does not match its field schema');
81
+ }
82
+ }
83
+ export function projectManagedCollectionControls(value) {
84
+ return controlsSchema.parse(Object.fromEntries(Object.keys(managedCollectionControlFields).flatMap((key) => {
85
+ const entry = value[key];
86
+ return entry === undefined ? [] : [[key, structuredClone(entry)]];
87
+ })));
88
+ }
89
+ function isObject(value) {
90
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
91
+ }
92
+ //# sourceMappingURL=managed-collection-controls.js.map
@@ -0,0 +1,50 @@
1
+ import { z } from 'zod';
2
+ import type { ArtifactManagedCollection } from './artifact/types.js';
3
+ import type { ConnectorCatalog } from './catalog/types.js';
4
+ import type { CompileError } from './errors.js';
5
+ import { type DeclaredConnectorRef } from './fulfilment-emit.js';
6
+ export declare const MAX_MANAGED_COLLECTIONS = 16;
7
+ export declare const MAX_MANAGED_COLLECTION_NAME_LENGTH = 64;
8
+ export declare const MAX_MANAGED_COLLECTION_TITLE_LENGTH = 120;
9
+ export declare const MAX_MANAGED_COLLECTION_DESCRIPTION_LENGTH = 1000;
10
+ export declare const MAX_MANAGED_COLLECTION_SCHEMA_VERSION = 2147483647;
11
+ export declare const MAX_MANAGED_COLLECTION_RECORD_SCHEMA_BYTES: number;
12
+ export declare const MAX_MANAGED_COLLECTION_RECORD_SCHEMA_DEPTH = 12;
13
+ export declare const MAX_MANAGED_COLLECTION_RECORD_FIELDS = 128;
14
+ export declare const managedCollectionManifestSchema: z.ZodObject<{
15
+ management: z.ZodOptional<z.ZodObject<{
16
+ assignment: z.ZodOptional<z.ZodLiteral<true>>;
17
+ notes: z.ZodOptional<z.ZodLiteral<true>>;
18
+ }, z.core.$strict>>;
19
+ fields: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
20
+ label: z.ZodOptional<z.ZodString>;
21
+ help: z.ZodOptional<z.ZodString>;
22
+ }, z.core.$strict>>>;
23
+ publicFields: z.ZodOptional<z.ZodArray<z.ZodString>>;
24
+ editableFields: z.ZodOptional<z.ZodArray<z.ZodString>>;
25
+ summaryFields: z.ZodOptional<z.ZodArray<z.ZodString>>;
26
+ filterFields: z.ZodOptional<z.ZodArray<z.ZodString>>;
27
+ sortFields: z.ZodOptional<z.ZodArray<z.ZodString>>;
28
+ name: z.ZodString;
29
+ title: z.ZodString;
30
+ description: z.ZodString;
31
+ schemaVersion: z.ZodNumber;
32
+ recordSchema: z.ZodRecord<z.ZodString, z.ZodUnknown>;
33
+ behavior: z.ZodOptional<z.ZodObject<{
34
+ kind: z.ZodLiteral<"request">;
35
+ }, z.core.$strict>>;
36
+ source: z.ZodOptional<z.ZodObject<{
37
+ connector: z.ZodString;
38
+ scan: z.ZodString;
39
+ }, z.core.$strict>>;
40
+ }, z.core.$strict>;
41
+ export type ManagedCollectionManifest = z.infer<typeof managedCollectionManifestSchema>;
42
+ /**
43
+ * Validate and lower reusable collection intent. Operator lifecycle, grants, residency, and
44
+ * retention deliberately do not enter this compiled definition.
45
+ */
46
+ export declare function compileManagedCollections(collections: readonly ManagedCollectionManifest[], toolNames: readonly string[], errors: CompileError[], options?: {
47
+ readonly catalog?: ConnectorCatalog;
48
+ readonly declared?: Readonly<Record<string, DeclaredConnectorRef>>;
49
+ }): readonly ArtifactManagedCollection[];
50
+ //# sourceMappingURL=managed-collections.d.ts.map
@@ -0,0 +1,373 @@
1
+ import { canonicalJson, sha256Canonical } from '@noodle-borg/app-package';
2
+ import { z } from 'zod';
3
+ import { computeSignatureHash } from './catalog/signature.js';
4
+ import { computeConnectionConfigRevision } from './fulfilment-emit.js';
5
+ import { managedCollectionControlFields, projectManagedCollectionControls, validateManagedCollectionControls, } from './managed-collection-controls.js';
6
+ export const MAX_MANAGED_COLLECTIONS = 16;
7
+ export const MAX_MANAGED_COLLECTION_NAME_LENGTH = 64;
8
+ export const MAX_MANAGED_COLLECTION_TITLE_LENGTH = 120;
9
+ export const MAX_MANAGED_COLLECTION_DESCRIPTION_LENGTH = 1_000;
10
+ export const MAX_MANAGED_COLLECTION_SCHEMA_VERSION = 2_147_483_647;
11
+ export const MAX_MANAGED_COLLECTION_RECORD_SCHEMA_BYTES = 64 * 1024;
12
+ export const MAX_MANAGED_COLLECTION_RECORD_SCHEMA_DEPTH = 12;
13
+ export const MAX_MANAGED_COLLECTION_RECORD_FIELDS = 128;
14
+ const collectionNameSchema = z
15
+ .string()
16
+ .min(1)
17
+ .max(MAX_MANAGED_COLLECTION_NAME_LENGTH)
18
+ .regex(/^[a-z][a-z0-9_]*$/, 'must start with a letter and use lowercase letters, numbers, and underscores');
19
+ const jsonSchemaSchema = z.record(z.string(), z.unknown());
20
+ const sourceSchema = z
21
+ .object({
22
+ connector: collectionNameSchema,
23
+ scan: collectionNameSchema,
24
+ })
25
+ .strict();
26
+ export const managedCollectionManifestSchema = z
27
+ .object({
28
+ name: collectionNameSchema,
29
+ title: z.string().trim().min(1).max(MAX_MANAGED_COLLECTION_TITLE_LENGTH),
30
+ description: z.string().trim().min(1).max(MAX_MANAGED_COLLECTION_DESCRIPTION_LENGTH),
31
+ schemaVersion: z.number().int().positive().max(MAX_MANAGED_COLLECTION_SCHEMA_VERSION),
32
+ recordSchema: jsonSchemaSchema,
33
+ behavior: z
34
+ .object({ kind: z.literal('request') })
35
+ .strict()
36
+ .optional(),
37
+ source: sourceSchema.optional(),
38
+ ...managedCollectionControlFields,
39
+ })
40
+ .strict();
41
+ const PROHIBITED_FIELD_NAME = /(?:card|cvv|cvc|password|passcode|token|secret|passport|governmentid|nationalid|socialsecurity|health|biometric)/i;
42
+ const SUBSCHEMA_MAP_KEYS = [
43
+ 'properties',
44
+ 'patternProperties',
45
+ '$defs',
46
+ 'dependentSchemas',
47
+ ];
48
+ const SUBSCHEMA_KEYS = [
49
+ 'items',
50
+ 'additionalProperties',
51
+ 'propertyNames',
52
+ 'not',
53
+ 'contains',
54
+ 'if',
55
+ 'then',
56
+ 'else',
57
+ ];
58
+ const SUBSCHEMA_LIST_KEYS = ['prefixItems', 'allOf', 'anyOf', 'oneOf'];
59
+ /**
60
+ * Validate and lower reusable collection intent. Operator lifecycle, grants, residency, and
61
+ * retention deliberately do not enter this compiled definition.
62
+ */
63
+ export function compileManagedCollections(collections, toolNames, errors, options = {}) {
64
+ const compiled = [];
65
+ const seen = new Set();
66
+ collections.forEach((collection, index) => {
67
+ const path = `server.collections.${index}`;
68
+ if (seen.has(collection.name)) {
69
+ errors.push({
70
+ code: 'invalid_managed_collection',
71
+ path: `${path}.name`,
72
+ message: `duplicate managed collection name "${collection.name}"`,
73
+ });
74
+ return;
75
+ }
76
+ seen.add(collection.name);
77
+ const futureToolName = `submit_${collection.name}`;
78
+ const collision = toolNames.indexOf(futureToolName);
79
+ if (collision >= 0) {
80
+ errors.push({
81
+ code: 'reserved_name',
82
+ path: `tools.${collision}.name`,
83
+ message: `tool name "${futureToolName}" is reserved for managed collection "${collection.name}"`,
84
+ });
85
+ }
86
+ const schemaErrorsBefore = errors.length;
87
+ validateRecordSchema(collection.recordSchema, `${path}.recordSchema`, errors);
88
+ validateManagedCollectionControls(projectManagedCollectionControls(collection), collection.recordSchema, collection.source !== undefined, path, errors);
89
+ if (errors.length !== schemaErrorsBefore)
90
+ return;
91
+ const source = compileCollectionSource(collection, path, errors, options);
92
+ if (collection.source !== undefined && source === undefined)
93
+ return;
94
+ compiled.push({
95
+ name: collection.name,
96
+ title: collection.title,
97
+ description: collection.description,
98
+ schemaVersion: collection.schemaVersion,
99
+ schemaDigest: sha256Canonical(collection.recordSchema),
100
+ recordSchema: collection.recordSchema,
101
+ ...projectManagedCollectionControls(collection),
102
+ ...(collection.behavior === undefined ? {} : { behavior: collection.behavior }),
103
+ source: source ?? { authority: 'native' },
104
+ });
105
+ });
106
+ return compiled;
107
+ }
108
+ function compileCollectionSource(collection, path, errors, options) {
109
+ if (collection.source === undefined)
110
+ return { authority: 'native' };
111
+ const declared = options.declared?.[collection.source.connector];
112
+ if (declared === undefined) {
113
+ sourceError(errors, `${path}.source.connector`, `connector alias "${collection.source.connector}" is not declared`);
114
+ return undefined;
115
+ }
116
+ if (declared.binding === undefined) {
117
+ sourceError(errors, `${path}.source.connector`, 'external collection sources require an operator-bound connector');
118
+ return undefined;
119
+ }
120
+ const connector = options.catalog?.get(declared.id, declared.version);
121
+ if (options.catalog !== undefined && connector === undefined) {
122
+ sourceError(errors, `${path}.source.connector`, `connector "${declared.id}" version "${declared.version}" is not in the catalog`);
123
+ return undefined;
124
+ }
125
+ const scan = resolveSourceOperation({
126
+ alias: collection.source.connector,
127
+ name: collection.source.scan,
128
+ connector,
129
+ declared,
130
+ recordSchema: collection.recordSchema,
131
+ path: `${path}.source.scan`,
132
+ errors,
133
+ });
134
+ if (scan === undefined)
135
+ return undefined;
136
+ return {
137
+ authority: 'external',
138
+ connectorAlias: collection.source.connector,
139
+ connectorId: declared.id,
140
+ connectorVersion: declared.version,
141
+ scan,
142
+ };
143
+ }
144
+ function resolveSourceOperation(input) {
145
+ if (input.connector === undefined) {
146
+ return { resolved: false, connector: input.alias, operation: input.name };
147
+ }
148
+ const operation = input.connector.operations[input.name];
149
+ if (operation === undefined) {
150
+ sourceError(input.errors, input.path, `operation "${input.name}" does not exist on connector "${input.connector.id}"`);
151
+ return undefined;
152
+ }
153
+ if (operation.type !== 'read') {
154
+ sourceError(input.errors, input.path, `source operation "${input.name}" must be classified as read`);
155
+ return undefined;
156
+ }
157
+ const contractError = validateScanSignature(operation, input.recordSchema);
158
+ if (contractError !== undefined) {
159
+ sourceError(input.errors, input.path, contractError);
160
+ return undefined;
161
+ }
162
+ const binding = input.declared.binding;
163
+ const credentialPresentation = binding === undefined ? undefined : input.connector.credentialProfiles?.[binding.profile];
164
+ if (binding === undefined || credentialPresentation === undefined) {
165
+ sourceError(input.errors, input.path, `source operation "${input.name}" requires a valid bound credential profile`);
166
+ return undefined;
167
+ }
168
+ const credentialRequirement = input.connector.operationCredentials?.[input.name];
169
+ if (credentialRequirement !== undefined &&
170
+ !credentialRequirement.profiles.includes(binding.profile)) {
171
+ sourceError(input.errors, input.path, `source operation "${input.name}" does not permit credential profile "${binding.profile}"`);
172
+ return undefined;
173
+ }
174
+ return {
175
+ resolved: true,
176
+ alias: input.alias,
177
+ connectorId: input.declared.id,
178
+ connectorVersion: input.declared.version,
179
+ operation: input.name,
180
+ signatureHash: computeSignatureHash(input.name, operation),
181
+ credentialBinding: {
182
+ bindingId: input.alias,
183
+ connectionId: binding.connection.id,
184
+ connectionConfigRevision: computeConnectionConfigRevision(binding.connection),
185
+ profile: binding.profile,
186
+ presentation: credentialPresentation,
187
+ requiredScopes: [...(credentialRequirement?.scopes ?? [])],
188
+ ...(credentialRequirement?.audience === undefined
189
+ ? {}
190
+ : { requiredAudience: credentialRequirement.audience }),
191
+ },
192
+ };
193
+ }
194
+ function validateScanSignature(operation, recordSchema) {
195
+ const input = operation.input;
196
+ if (!isClosedObjectWithKeys(input, ['mode', 'cursor', 'checkpoint', 'limit'])) {
197
+ return 'scan input must be a closed object containing only mode, cursor, checkpoint and limit';
198
+ }
199
+ const inputProperties = input.properties;
200
+ if (!hasTypes(inputProperties, {
201
+ mode: 'string',
202
+ cursor: 'string',
203
+ checkpoint: 'string',
204
+ limit: 'integer',
205
+ })) {
206
+ return 'scan input fields do not match the normalized source contract';
207
+ }
208
+ if (!sameStrings(input.required, ['mode', 'limit']))
209
+ return 'scan input must require mode and limit only';
210
+ const modeEnum = inputProperties.mode?.enum;
211
+ if (!sameStrings(modeEnum, ['snapshot', 'changes']))
212
+ return 'scan mode must allow snapshot and changes';
213
+ const output = operation.output;
214
+ if (!isClosedObjectWithKeys(output, [
215
+ 'records',
216
+ 'deletedIds',
217
+ 'nextCursor',
218
+ 'checkpoint',
219
+ 'complete',
220
+ 'resetRequired',
221
+ ])) {
222
+ return 'scan output must match the normalized source page envelope';
223
+ }
224
+ if (!sameStrings(output.required, ['records', 'deletedIds', 'complete'])) {
225
+ return 'scan output must require records, deletedIds and complete only';
226
+ }
227
+ const properties = output.properties;
228
+ if (!hasTypes(properties, {
229
+ records: 'array',
230
+ deletedIds: 'array',
231
+ nextCursor: 'string',
232
+ checkpoint: 'string',
233
+ complete: 'boolean',
234
+ resetRequired: 'boolean',
235
+ })) {
236
+ return 'scan output fields do not match the normalized source page contract';
237
+ }
238
+ const item = properties.records?.items;
239
+ if (!isRecord(item) || !isClosedObjectWithKeys(item, ['id', 'version', 'record'])) {
240
+ return 'scan records must contain closed id, optional version and record objects';
241
+ }
242
+ if (!sameStrings(item.required, ['id', 'record']))
243
+ return 'scan records must require id and record only';
244
+ const itemProperties = item.properties;
245
+ if (itemProperties.id?.type !== 'string' || itemProperties.version?.type !== 'string') {
246
+ return 'scan record id and version must be strings';
247
+ }
248
+ if (sha256Canonical(itemProperties.record) !== sha256Canonical(recordSchema)) {
249
+ return 'scan record schema must exactly match the managed collection record schema';
250
+ }
251
+ const deletedItems = properties.deletedIds?.items;
252
+ if (!isRecord(deletedItems) || deletedItems.type !== 'string')
253
+ return 'deletedIds must be an array of strings';
254
+ return undefined;
255
+ }
256
+ function isClosedObjectWithKeys(value, keys) {
257
+ if (!isRecord(value) ||
258
+ value.type !== 'object' ||
259
+ value.additionalProperties !== false ||
260
+ !isRecord(value.properties))
261
+ return false;
262
+ return sameStrings(Object.keys(value.properties), keys);
263
+ }
264
+ function hasTypes(properties, expected) {
265
+ return Object.entries(expected).every(([key, type]) => properties[key]?.type === type);
266
+ }
267
+ function sameStrings(value, expected) {
268
+ return (Array.isArray(value) &&
269
+ value.every((entry) => typeof entry === 'string') &&
270
+ [...value].sort().join('\u0000') === [...expected].sort().join('\u0000'));
271
+ }
272
+ function sourceError(errors, path, message) {
273
+ errors.push({ code: 'invalid_managed_collection_source', path, message });
274
+ }
275
+ function validateRecordSchema(schema, path, errors) {
276
+ const bytes = new TextEncoder().encode(canonicalJson(schema)).byteLength;
277
+ if (bytes > MAX_MANAGED_COLLECTION_RECORD_SCHEMA_BYTES) {
278
+ errors.push({
279
+ code: 'invalid_managed_collection',
280
+ path,
281
+ message: `record schema is ${bytes} UTF-8 bytes; the limit is ${MAX_MANAGED_COLLECTION_RECORD_SCHEMA_BYTES} bytes`,
282
+ });
283
+ return;
284
+ }
285
+ if (schema.type !== 'object' || schema.additionalProperties !== false) {
286
+ errors.push({
287
+ code: 'invalid_managed_collection',
288
+ path,
289
+ message: 'record schema must be a closed object with additionalProperties false',
290
+ });
291
+ return;
292
+ }
293
+ const state = { fields: 0, failure: undefined };
294
+ inspectSchema(schema, path, 1, state);
295
+ if (state.failure !== undefined)
296
+ errors.push(state.failure);
297
+ }
298
+ function inspectSchema(node, path, depth, state) {
299
+ if (state.failure !== undefined ||
300
+ node === null ||
301
+ typeof node !== 'object' ||
302
+ Array.isArray(node)) {
303
+ return;
304
+ }
305
+ if (depth > MAX_MANAGED_COLLECTION_RECORD_SCHEMA_DEPTH) {
306
+ state.failure = {
307
+ code: 'invalid_managed_collection',
308
+ path,
309
+ message: `record schema depth exceeds ${MAX_MANAGED_COLLECTION_RECORD_SCHEMA_DEPTH}`,
310
+ };
311
+ return;
312
+ }
313
+ const schema = node;
314
+ if (schema.type === 'object' && schema.additionalProperties !== false) {
315
+ state.failure = {
316
+ code: 'invalid_managed_collection',
317
+ path,
318
+ message: 'every record object must set additionalProperties to false',
319
+ };
320
+ return;
321
+ }
322
+ const properties = schema.properties;
323
+ if (isRecord(properties)) {
324
+ for (const [name, child] of Object.entries(properties)) {
325
+ state.fields += 1;
326
+ if (state.fields > MAX_MANAGED_COLLECTION_RECORD_FIELDS) {
327
+ state.failure = {
328
+ code: 'invalid_managed_collection',
329
+ path,
330
+ message: `record schema declares more than ${MAX_MANAGED_COLLECTION_RECORD_FIELDS} fields`,
331
+ };
332
+ return;
333
+ }
334
+ if (PROHIBITED_FIELD_NAME.test(name.replace(/[^a-z0-9]/giu, ''))) {
335
+ state.failure = {
336
+ code: 'invalid_managed_collection',
337
+ path: `${path}.properties.${name}`,
338
+ message: 'managed collection record schemas cannot declare prohibited sensitive fields',
339
+ };
340
+ return;
341
+ }
342
+ inspectSchema(child, `${path}.properties.${name}`, depth + 1, state);
343
+ }
344
+ }
345
+ for (const key of SUBSCHEMA_MAP_KEYS) {
346
+ if (key === 'properties')
347
+ continue;
348
+ const map = schema[key];
349
+ if (!isRecord(map))
350
+ continue;
351
+ for (const [name, child] of Object.entries(map)) {
352
+ inspectSchema(child, `${path}.${key}.${name}`, depth + 1, state);
353
+ }
354
+ }
355
+ for (const key of SUBSCHEMA_KEYS) {
356
+ const child = schema[key];
357
+ if (child !== undefined && typeof child !== 'boolean') {
358
+ inspectSchema(child, `${path}.${key}`, depth + 1, state);
359
+ }
360
+ }
361
+ for (const key of SUBSCHEMA_LIST_KEYS) {
362
+ const children = schema[key];
363
+ if (!Array.isArray(children))
364
+ continue;
365
+ children.forEach((child, index) => {
366
+ inspectSchema(child, `${path}.${key}.${index}`, depth + 1, state);
367
+ });
368
+ }
369
+ }
370
+ function isRecord(value) {
371
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
372
+ }
373
+ //# sourceMappingURL=managed-collections.js.map