@noodleseed/one 0.109.0 → 0.111.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 (299) hide show
  1. package/dist/commands/analytics-ops.d.ts.map +1 -1
  2. package/dist/commands/analytics-ops.js +36 -57
  3. package/dist/commands/analytics-ops.js.map +1 -1
  4. package/dist/commands/apps-ops.d.ts.map +1 -1
  5. package/dist/commands/apps-ops.js +12 -32
  6. package/dist/commands/apps-ops.js.map +1 -1
  7. package/dist/commands/archive-ops.d.ts.map +1 -1
  8. package/dist/commands/archive-ops.js +30 -48
  9. package/dist/commands/archive-ops.js.map +1 -1
  10. package/dist/commands/audit-ops.js +17 -40
  11. package/dist/commands/audit-ops.js.map +1 -1
  12. package/dist/commands/author-loop.d.ts.map +1 -1
  13. package/dist/commands/author-loop.js +27 -51
  14. package/dist/commands/author-loop.js.map +1 -1
  15. package/dist/commands/catalog-data-tenant-admin.d.ts.map +1 -1
  16. package/dist/commands/catalog-data-tenant-admin.js +35 -0
  17. package/dist/commands/catalog-data-tenant-admin.js.map +1 -1
  18. package/dist/commands/config-values.d.ts.map +1 -1
  19. package/dist/commands/config-values.js +24 -59
  20. package/dist/commands/config-values.js.map +1 -1
  21. package/dist/commands/deploy-ops.d.ts +0 -1
  22. package/dist/commands/deploy-ops.d.ts.map +1 -1
  23. package/dist/commands/deploy-ops.js +6 -42
  24. package/dist/commands/deploy-ops.js.map +1 -1
  25. package/dist/commands/deployments-ops.d.ts.map +1 -1
  26. package/dist/commands/deployments-ops.js +11 -39
  27. package/dist/commands/deployments-ops.js.map +1 -1
  28. package/dist/commands/devtools.d.ts.map +1 -1
  29. package/dist/commands/devtools.js +19 -35
  30. package/dist/commands/devtools.js.map +1 -1
  31. package/dist/commands/envs-ops.d.ts.map +1 -1
  32. package/dist/commands/envs-ops.js +10 -35
  33. package/dist/commands/envs-ops.js.map +1 -1
  34. package/dist/commands/github-shared.d.ts +1 -1
  35. package/dist/commands/github-shared.d.ts.map +1 -1
  36. package/dist/commands/github-shared.js +11 -33
  37. package/dist/commands/github-shared.js.map +1 -1
  38. package/dist/commands/logs-ops.d.ts.map +1 -1
  39. package/dist/commands/logs-ops.js +18 -30
  40. package/dist/commands/logs-ops.js.map +1 -1
  41. package/dist/commands/org-admin.d.ts.map +1 -1
  42. package/dist/commands/org-admin.js +13 -47
  43. package/dist/commands/org-admin.js.map +1 -1
  44. package/dist/commands/org-domains.js +5 -36
  45. package/dist/commands/org-domains.js.map +1 -1
  46. package/dist/commands/org-mcp-subdomain.d.ts +9 -0
  47. package/dist/commands/org-mcp-subdomain.d.ts.map +1 -0
  48. package/dist/commands/org-mcp-subdomain.js +144 -0
  49. package/dist/commands/org-mcp-subdomain.js.map +1 -0
  50. package/dist/commands/org-member-args.d.ts.map +1 -1
  51. package/dist/commands/org-member-args.js +22 -57
  52. package/dist/commands/org-member-args.js.map +1 -1
  53. package/dist/commands/org-openai-challenge.js +9 -40
  54. package/dist/commands/org-openai-challenge.js.map +1 -1
  55. package/dist/commands/project-setup.d.ts.map +1 -1
  56. package/dist/commands/project-setup.js +0 -4
  57. package/dist/commands/project-setup.js.map +1 -1
  58. package/dist/commands/resource-shared.d.ts +1 -1
  59. package/dist/commands/resource-shared.d.ts.map +1 -1
  60. package/dist/commands/resource-shared.js +6 -31
  61. package/dist/commands/resource-shared.js.map +1 -1
  62. package/dist/commands/service-ops.js +21 -40
  63. package/dist/commands/service-ops.js.map +1 -1
  64. package/dist/commands/session.d.ts.map +1 -1
  65. package/dist/commands/session.js +21 -52
  66. package/dist/commands/session.js.map +1 -1
  67. package/dist/commands/shared.d.ts +16 -0
  68. package/dist/commands/shared.d.ts.map +1 -1
  69. package/dist/commands/shared.js +45 -33
  70. package/dist/commands/shared.js.map +1 -1
  71. package/dist/first-run.d.ts.map +1 -1
  72. package/dist/first-run.js +0 -3
  73. package/dist/first-run.js.map +1 -1
  74. package/node_modules/@noodle-borg/control-plane/dist/contracts.d.ts +249 -0
  75. package/node_modules/@noodle-borg/control-plane/dist/contracts.d.ts.map +1 -0
  76. package/node_modules/@noodle-borg/control-plane/dist/contracts.js +2 -0
  77. package/node_modules/@noodle-borg/control-plane/dist/contracts.js.map +1 -0
  78. package/node_modules/@noodle-borg/control-plane/dist/in-memory-organization-store.d.ts +116 -0
  79. package/node_modules/@noodle-borg/control-plane/dist/in-memory-organization-store.d.ts.map +1 -0
  80. package/node_modules/@noodle-borg/control-plane/dist/in-memory-organization-store.js +302 -0
  81. package/node_modules/@noodle-borg/control-plane/dist/in-memory-organization-store.js.map +1 -0
  82. package/node_modules/@noodle-borg/control-plane/dist/index.d.ts +10 -0
  83. package/node_modules/@noodle-borg/control-plane/dist/index.d.ts.map +1 -0
  84. package/node_modules/@noodle-borg/control-plane/dist/index.js +8 -0
  85. package/node_modules/@noodle-borg/control-plane/dist/index.js.map +1 -0
  86. package/node_modules/@noodle-borg/control-plane/dist/mcp-subdomain-claims.d.ts +42 -0
  87. package/node_modules/@noodle-borg/control-plane/dist/mcp-subdomain-claims.d.ts.map +1 -0
  88. package/node_modules/@noodle-borg/control-plane/dist/mcp-subdomain-claims.js +181 -0
  89. package/node_modules/@noodle-borg/control-plane/dist/mcp-subdomain-claims.js.map +1 -0
  90. package/node_modules/@noodle-borg/control-plane/dist/organization-helpers.d.ts +13 -0
  91. package/node_modules/@noodle-borg/control-plane/dist/organization-helpers.d.ts.map +1 -0
  92. package/node_modules/@noodle-borg/control-plane/dist/organization-helpers.js +41 -0
  93. package/node_modules/@noodle-borg/control-plane/dist/organization-helpers.js.map +1 -0
  94. package/node_modules/@noodle-borg/control-plane/dist/postgres-contracts.d.ts +11 -0
  95. package/node_modules/@noodle-borg/control-plane/dist/postgres-contracts.d.ts.map +1 -0
  96. package/node_modules/@noodle-borg/control-plane/dist/postgres-contracts.js +2 -0
  97. package/node_modules/@noodle-borg/control-plane/dist/postgres-contracts.js.map +1 -0
  98. package/node_modules/@noodle-borg/control-plane/dist/postgres-mcp-subdomain-claims.d.ts +18 -0
  99. package/node_modules/@noodle-borg/control-plane/dist/postgres-mcp-subdomain-claims.d.ts.map +1 -0
  100. package/node_modules/@noodle-borg/control-plane/dist/postgres-mcp-subdomain-claims.js +173 -0
  101. package/node_modules/@noodle-borg/control-plane/dist/postgres-mcp-subdomain-claims.js.map +1 -0
  102. package/node_modules/@noodle-borg/control-plane/dist/postgres-mcp-subdomain-schema.d.ts +4 -0
  103. package/node_modules/@noodle-borg/control-plane/dist/postgres-mcp-subdomain-schema.d.ts.map +1 -0
  104. package/node_modules/@noodle-borg/control-plane/dist/postgres-mcp-subdomain-schema.js +134 -0
  105. package/node_modules/@noodle-borg/control-plane/dist/postgres-mcp-subdomain-schema.js.map +1 -0
  106. package/node_modules/@noodle-borg/{service/dist/store/postgres-control-plane.d.ts → control-plane/dist/postgres-organization-store.d.ts} +4 -3
  107. package/node_modules/@noodle-borg/control-plane/dist/postgres-organization-store.d.ts.map +1 -0
  108. package/node_modules/@noodle-borg/{service/dist/store/postgres-control-plane.js → control-plane/dist/postgres-organization-store.js} +4 -5
  109. package/node_modules/@noodle-borg/control-plane/dist/postgres-organization-store.js.map +1 -0
  110. package/node_modules/@noodle-borg/control-plane/dist/postgres-schema.d.ts +4 -0
  111. package/node_modules/@noodle-borg/control-plane/dist/postgres-schema.d.ts.map +1 -0
  112. package/node_modules/@noodle-borg/control-plane/dist/postgres-schema.js +90 -0
  113. package/node_modules/@noodle-borg/control-plane/dist/postgres-schema.js.map +1 -0
  114. package/node_modules/@noodle-borg/control-plane/dist/validation.d.ts +18 -0
  115. package/node_modules/@noodle-borg/control-plane/dist/validation.d.ts.map +1 -0
  116. package/node_modules/@noodle-borg/control-plane/dist/validation.js +91 -0
  117. package/node_modules/@noodle-borg/control-plane/dist/validation.js.map +1 -0
  118. package/node_modules/@noodle-borg/control-plane/package.json +30 -0
  119. package/node_modules/@noodle-borg/module/dist/contract.d.ts +11 -3
  120. package/node_modules/@noodle-borg/module/dist/contract.d.ts.map +1 -1
  121. package/node_modules/@noodle-borg/module/dist/contract.js +61 -12
  122. package/node_modules/@noodle-borg/module/dist/contract.js.map +1 -1
  123. package/node_modules/@noodle-borg/service/dist/developer-mcp/control-plane-adapter.d.ts +1 -1
  124. package/node_modules/@noodle-borg/service/dist/developer-mcp/control-plane-adapter.d.ts.map +1 -1
  125. package/node_modules/@noodle-borg/service/dist/developer-mcp/control-plane-adapter.js +6 -4
  126. package/node_modules/@noodle-borg/service/dist/developer-mcp/control-plane-adapter.js.map +1 -1
  127. package/node_modules/@noodle-borg/service/dist/developer-mcp/inspection.d.ts +3 -6
  128. package/node_modules/@noodle-borg/service/dist/developer-mcp/inspection.d.ts.map +1 -1
  129. package/node_modules/@noodle-borg/service/dist/developer-mcp/inspection.js.map +1 -1
  130. package/node_modules/@noodle-borg/service/dist/main.js +1 -1
  131. package/node_modules/@noodle-borg/service/dist/main.js.map +1 -1
  132. package/node_modules/@noodle-borg/service/dist/mcp-public-routing.d.ts +15 -28
  133. package/node_modules/@noodle-borg/service/dist/mcp-public-routing.d.ts.map +1 -1
  134. package/node_modules/@noodle-borg/service/dist/mcp-public-routing.js +15 -51
  135. package/node_modules/@noodle-borg/service/dist/mcp-public-routing.js.map +1 -1
  136. package/node_modules/@noodle-borg/service/dist/oauth/service-bootstrap.d.ts.map +1 -1
  137. package/node_modules/@noodle-borg/service/dist/oauth/service-bootstrap.js +7 -3
  138. package/node_modules/@noodle-borg/service/dist/oauth/service-bootstrap.js.map +1 -1
  139. package/node_modules/@noodle-borg/service/dist/oauth/service-principal-resource.d.ts +2 -1
  140. package/node_modules/@noodle-borg/service/dist/oauth/service-principal-resource.d.ts.map +1 -1
  141. package/node_modules/@noodle-borg/service/dist/oauth/service-principal-resource.js +7 -35
  142. package/node_modules/@noodle-borg/service/dist/oauth/service-principal-resource.js.map +1 -1
  143. package/node_modules/@noodle-borg/service/dist/operations/rollback-deployment.d.ts +2 -1
  144. package/node_modules/@noodle-borg/service/dist/operations/rollback-deployment.d.ts.map +1 -1
  145. package/node_modules/@noodle-borg/service/dist/operations/rollback-deployment.js +1 -1
  146. package/node_modules/@noodle-borg/service/dist/operations/rollback-deployment.js.map +1 -1
  147. package/node_modules/@noodle-borg/service/dist/options.d.ts +3 -3
  148. package/node_modules/@noodle-borg/service/dist/personal-workspace.d.ts +1 -3
  149. package/node_modules/@noodle-borg/service/dist/personal-workspace.d.ts.map +1 -1
  150. package/node_modules/@noodle-borg/service/dist/personal-workspace.js +2 -17
  151. package/node_modules/@noodle-borg/service/dist/personal-workspace.js.map +1 -1
  152. package/node_modules/@noodle-borg/service/dist/platform-auth-operator.d.ts +10 -10
  153. package/node_modules/@noodle-borg/service/dist/registry-helpers.d.ts +4 -2
  154. package/node_modules/@noodle-borg/service/dist/registry-helpers.d.ts.map +1 -1
  155. package/node_modules/@noodle-borg/service/dist/registry-helpers.js +8 -3
  156. package/node_modules/@noodle-borg/service/dist/registry-helpers.js.map +1 -1
  157. package/node_modules/@noodle-borg/service/dist/registry-status.d.ts +2 -3
  158. package/node_modules/@noodle-borg/service/dist/registry-status.d.ts.map +1 -1
  159. package/node_modules/@noodle-borg/service/dist/registry-status.js.map +1 -1
  160. package/node_modules/@noodle-borg/service/dist/registry.d.ts +2 -4
  161. package/node_modules/@noodle-borg/service/dist/registry.d.ts.map +1 -1
  162. package/node_modules/@noodle-borg/service/dist/registry.js.map +1 -1
  163. package/node_modules/@noodle-borg/service/dist/routes/apps.d.ts +3 -3
  164. package/node_modules/@noodle-borg/service/dist/routes/apps.d.ts.map +1 -1
  165. package/node_modules/@noodle-borg/service/dist/routes/apps.js +4 -2
  166. package/node_modules/@noodle-borg/service/dist/routes/apps.js.map +1 -1
  167. package/node_modules/@noodle-borg/service/dist/routes/auth-doctor-dispatch.d.ts +2 -2
  168. package/node_modules/@noodle-borg/service/dist/routes/auth-doctor-dispatch.d.ts.map +1 -1
  169. package/node_modules/@noodle-borg/service/dist/routes/auth-doctor-dispatch.js +1 -1
  170. package/node_modules/@noodle-borg/service/dist/routes/auth-doctor-dispatch.js.map +1 -1
  171. package/node_modules/@noodle-borg/service/dist/routes/auth-doctor-live.d.ts +2 -3
  172. package/node_modules/@noodle-borg/service/dist/routes/auth-doctor-live.d.ts.map +1 -1
  173. package/node_modules/@noodle-borg/service/dist/routes/auth-doctor-live.js +2 -1
  174. package/node_modules/@noodle-borg/service/dist/routes/auth-doctor-live.js.map +1 -1
  175. package/node_modules/@noodle-borg/service/dist/routes/contracts.d.ts +29 -0
  176. package/node_modules/@noodle-borg/service/dist/routes/contracts.d.ts.map +1 -1
  177. package/node_modules/@noodle-borg/service/dist/routes/contracts.js +39 -0
  178. package/node_modules/@noodle-borg/service/dist/routes/contracts.js.map +1 -1
  179. package/node_modules/@noodle-borg/service/dist/routes/control-plane.d.ts.map +1 -1
  180. package/node_modules/@noodle-borg/service/dist/routes/control-plane.js +4 -6
  181. package/node_modules/@noodle-borg/service/dist/routes/control-plane.js.map +1 -1
  182. package/node_modules/@noodle-borg/service/dist/routes/credential-auth-dispatch.d.ts +2 -2
  183. package/node_modules/@noodle-borg/service/dist/routes/credential-auth-dispatch.d.ts.map +1 -1
  184. package/node_modules/@noodle-borg/service/dist/routes/credential-auth-dispatch.js.map +1 -1
  185. package/node_modules/@noodle-borg/service/dist/routes/deployments.d.ts +3 -3
  186. package/node_modules/@noodle-borg/service/dist/routes/deployments.d.ts.map +1 -1
  187. package/node_modules/@noodle-borg/service/dist/routes/deployments.js +4 -2
  188. package/node_modules/@noodle-borg/service/dist/routes/deployments.js.map +1 -1
  189. package/node_modules/@noodle-borg/service/dist/routes/diagnostics.d.ts.map +1 -1
  190. package/node_modules/@noodle-borg/service/dist/routes/diagnostics.js +5 -6
  191. package/node_modules/@noodle-borg/service/dist/routes/diagnostics.js.map +1 -1
  192. package/node_modules/@noodle-borg/service/dist/routes/endpoint-enrichment.d.ts +2 -3
  193. package/node_modules/@noodle-borg/service/dist/routes/endpoint-enrichment.d.ts.map +1 -1
  194. package/node_modules/@noodle-borg/service/dist/routes/endpoint-enrichment.js.map +1 -1
  195. package/node_modules/@noodle-borg/service/dist/routes/envs.d.ts +3 -3
  196. package/node_modules/@noodle-borg/service/dist/routes/envs.d.ts.map +1 -1
  197. package/node_modules/@noodle-borg/service/dist/routes/envs.js +4 -2
  198. package/node_modules/@noodle-borg/service/dist/routes/envs.js.map +1 -1
  199. package/node_modules/@noodle-borg/service/dist/routes/openai-apps-challenge.d.ts.map +1 -1
  200. package/node_modules/@noodle-borg/service/dist/routes/openai-apps-challenge.js +1 -1
  201. package/node_modules/@noodle-borg/service/dist/routes/openai-apps-challenge.js.map +1 -1
  202. package/node_modules/@noodle-borg/service/dist/routes/org-admin-dispatch.d.ts.map +1 -1
  203. package/node_modules/@noodle-borg/service/dist/routes/org-admin-dispatch.js +13 -1
  204. package/node_modules/@noodle-borg/service/dist/routes/org-admin-dispatch.js.map +1 -1
  205. package/node_modules/@noodle-borg/service/dist/routes/org-admin.d.ts.map +1 -1
  206. package/node_modules/@noodle-borg/service/dist/routes/org-admin.js +10 -7
  207. package/node_modules/@noodle-borg/service/dist/routes/org-admin.js.map +1 -1
  208. package/node_modules/@noodle-borg/service/dist/routes/org-mcp-subdomain.d.ts +8 -0
  209. package/node_modules/@noodle-borg/service/dist/routes/org-mcp-subdomain.d.ts.map +1 -0
  210. package/node_modules/@noodle-borg/service/dist/routes/org-mcp-subdomain.js +175 -0
  211. package/node_modules/@noodle-borg/service/dist/routes/org-mcp-subdomain.js.map +1 -0
  212. package/node_modules/@noodle-borg/service/dist/routes/paths.d.ts +3 -0
  213. package/node_modules/@noodle-borg/service/dist/routes/paths.d.ts.map +1 -1
  214. package/node_modules/@noodle-borg/service/dist/routes/paths.js +11 -0
  215. package/node_modules/@noodle-borg/service/dist/routes/paths.js.map +1 -1
  216. package/node_modules/@noodle-borg/service/dist/routes/protected-resource-metadata.d.ts +2 -1
  217. package/node_modules/@noodle-borg/service/dist/routes/protected-resource-metadata.d.ts.map +1 -1
  218. package/node_modules/@noodle-borg/service/dist/routes/protected-resource-metadata.js +2 -2
  219. package/node_modules/@noodle-borg/service/dist/routes/protected-resource-metadata.js.map +1 -1
  220. package/node_modules/@noodle-borg/service/dist/routes/resource-read-dispatch.d.ts +3 -2
  221. package/node_modules/@noodle-borg/service/dist/routes/resource-read-dispatch.d.ts.map +1 -1
  222. package/node_modules/@noodle-borg/service/dist/routes/resource-read-dispatch.js +6 -6
  223. package/node_modules/@noodle-borg/service/dist/routes/resource-read-dispatch.js.map +1 -1
  224. package/node_modules/@noodle-borg/service/dist/routes/rollback.d.ts.map +1 -1
  225. package/node_modules/@noodle-borg/service/dist/routes/rollback.js +3 -3
  226. package/node_modules/@noodle-borg/service/dist/routes/rollback.js.map +1 -1
  227. package/node_modules/@noodle-borg/service/dist/serve-resource-auth.d.ts +3 -5
  228. package/node_modules/@noodle-borg/service/dist/serve-resource-auth.d.ts.map +1 -1
  229. package/node_modules/@noodle-borg/service/dist/serve-resource-auth.js +18 -15
  230. package/node_modules/@noodle-borg/service/dist/serve-resource-auth.js.map +1 -1
  231. package/node_modules/@noodle-borg/service/dist/service.d.ts.map +1 -1
  232. package/node_modules/@noodle-borg/service/dist/service.js +24 -35
  233. package/node_modules/@noodle-borg/service/dist/service.js.map +1 -1
  234. package/node_modules/@noodle-borg/service/dist/store/control-plane.d.ts +4 -94
  235. package/node_modules/@noodle-borg/service/dist/store/control-plane.d.ts.map +1 -1
  236. package/node_modules/@noodle-borg/service/dist/store/control-plane.js +25 -265
  237. package/node_modules/@noodle-borg/service/dist/store/control-plane.js.map +1 -1
  238. package/node_modules/@noodle-borg/service/dist/store/postgres-deploy-records.d.ts +1 -1
  239. package/node_modules/@noodle-borg/service/dist/store/postgres-deploy-records.js +1 -1
  240. package/node_modules/@noodle-borg/service/dist/store/postgres-mcp-subdomain.d.ts +13 -0
  241. package/node_modules/@noodle-borg/service/dist/store/postgres-mcp-subdomain.d.ts.map +1 -0
  242. package/node_modules/@noodle-borg/service/dist/store/postgres-mcp-subdomain.js +40 -0
  243. package/node_modules/@noodle-borg/service/dist/store/postgres-mcp-subdomain.js.map +1 -0
  244. package/node_modules/@noodle-borg/service/dist/store/postgres-schema.d.ts.map +1 -1
  245. package/node_modules/@noodle-borg/service/dist/store/postgres-schema.js +2 -84
  246. package/node_modules/@noodle-borg/service/dist/store/postgres-schema.js.map +1 -1
  247. package/node_modules/@noodle-borg/service/dist/store/postgres-signup.d.ts.map +1 -1
  248. package/node_modules/@noodle-borg/service/dist/store/postgres-signup.js +1 -1
  249. package/node_modules/@noodle-borg/service/dist/store/postgres-signup.js.map +1 -1
  250. package/node_modules/@noodle-borg/service/dist/store/postgres.d.ts +2 -2
  251. package/node_modules/@noodle-borg/service/dist/store/postgres.d.ts.map +1 -1
  252. package/node_modules/@noodle-borg/service/dist/store/postgres.js +5 -4
  253. package/node_modules/@noodle-borg/service/dist/store/postgres.js.map +1 -1
  254. package/node_modules/@noodle-borg/service/dist/store/validate.d.ts +2 -20
  255. package/node_modules/@noodle-borg/service/dist/store/validate.d.ts.map +1 -1
  256. package/node_modules/@noodle-borg/service/dist/store/validate.js +7 -85
  257. package/node_modules/@noodle-borg/service/dist/store/validate.js.map +1 -1
  258. package/node_modules/@noodle-borg/service/dist/store.d.ts +4 -209
  259. package/node_modules/@noodle-borg/service/dist/store.d.ts.map +1 -1
  260. package/node_modules/@noodle-borg/service/dist/store.js +1 -1
  261. package/node_modules/@noodle-borg/service/dist/store.js.map +1 -1
  262. package/node_modules/@noodle-borg/service/package.json +1 -0
  263. package/node_modules/@noodle-borg/transport-http/dist/handler.d.ts +2 -0
  264. package/node_modules/@noodle-borg/transport-http/dist/handler.d.ts.map +1 -1
  265. package/node_modules/@noodle-borg/transport-http/dist/handler.js +14 -8
  266. package/node_modules/@noodle-borg/transport-http/dist/handler.js.map +1 -1
  267. package/node_modules/@noodle-borg/transport-http/dist/identity-authorization.d.ts +1 -1
  268. package/node_modules/@noodle-borg/transport-http/dist/identity-authorization.d.ts.map +1 -1
  269. package/node_modules/@noodle-borg/transport-http/dist/index.d.ts +2 -1
  270. package/node_modules/@noodle-borg/transport-http/dist/index.d.ts.map +1 -1
  271. package/node_modules/@noodle-borg/transport-http/dist/index.js +1 -0
  272. package/node_modules/@noodle-borg/transport-http/dist/index.js.map +1 -1
  273. package/node_modules/@noodle-borg/transport-http/dist/public-routing.d.ts +42 -0
  274. package/node_modules/@noodle-borg/transport-http/dist/public-routing.d.ts.map +1 -1
  275. package/node_modules/@noodle-borg/transport-http/dist/public-routing.js +49 -0
  276. package/node_modules/@noodle-borg/transport-http/dist/public-routing.js.map +1 -1
  277. package/node_modules/@noodle-borg/transport-http/dist/routing.d.ts +3 -2
  278. package/node_modules/@noodle-borg/transport-http/dist/routing.d.ts.map +1 -1
  279. package/node_modules/@noodle-borg/transport-http/dist/routing.js +6 -3
  280. package/node_modules/@noodle-borg/transport-http/dist/routing.js.map +1 -1
  281. package/package.json +2 -1
  282. package/dist/banner.d.ts +0 -11
  283. package/dist/banner.d.ts.map +0 -1
  284. package/dist/banner.js +0 -183
  285. package/dist/banner.js.map +0 -1
  286. package/dist/commands/deploy-fire-progress.d.ts +0 -28
  287. package/dist/commands/deploy-fire-progress.d.ts.map +0 -1
  288. package/dist/commands/deploy-fire-progress.js +0 -64
  289. package/dist/commands/deploy-fire-progress.js.map +0 -1
  290. package/dist/fire.d.ts +0 -108
  291. package/dist/fire.d.ts.map +0 -1
  292. package/dist/fire.js +0 -511
  293. package/dist/fire.js.map +0 -1
  294. package/dist/flavor.d.ts +0 -19
  295. package/dist/flavor.d.ts.map +0 -1
  296. package/dist/flavor.js +0 -105
  297. package/dist/flavor.js.map +0 -1
  298. package/node_modules/@noodle-borg/service/dist/store/postgres-control-plane.d.ts.map +0 -1
  299. package/node_modules/@noodle-borg/service/dist/store/postgres-control-plane.js.map +0 -1
@@ -0,0 +1,41 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { validateDomain, validateSlug } from './validation.js';
3
+ export function memberKey(org, subject) {
4
+ return `${org}/${subject}`;
5
+ }
6
+ export function domainKey(org, domain) {
7
+ return `${org}/${domain}`;
8
+ }
9
+ export function domainFromEmail(email) {
10
+ const at = email.lastIndexOf('@');
11
+ if (at < 0)
12
+ return undefined;
13
+ try {
14
+ return validateDomain(email.slice(at + 1));
15
+ }
16
+ catch {
17
+ return undefined;
18
+ }
19
+ }
20
+ export function normalizeSignupAllowlistValue(kind, value) {
21
+ return kind === 'domain' ? validateDomain(value) : value.trim().toLowerCase();
22
+ }
23
+ export function signupKey(kind, value) {
24
+ return `${kind}/${value}`;
25
+ }
26
+ export function personalOrgSlug(identity) {
27
+ const localPart = identity.email.split('@')[0] ?? 'user';
28
+ const base = slugPart(localPart).slice(0, 52) || 'user';
29
+ return validateSlug('org', `u-${base}${personalOrgSlugSuffix(identity.subject)}`);
30
+ }
31
+ /** Immutable suffix used to discover and bind legacy email-derived personal organization slugs. */
32
+ export function personalOrgSlugSuffix(subject) {
33
+ return `-${createHash('sha256').update(subject).digest('hex').slice(0, 8)}`;
34
+ }
35
+ function slugPart(value) {
36
+ return value
37
+ .toLowerCase()
38
+ .replace(/[^a-z0-9]+/g, '-')
39
+ .replace(/^-+|-+$/g, '');
40
+ }
41
+ //# sourceMappingURL=organization-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"organization-helpers.js","sourceRoot":"","sources":["../src/organization-helpers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/D,MAAM,UAAU,SAAS,CAAC,GAAW,EAAE,OAAe;IACpD,OAAO,GAAG,GAAG,IAAI,OAAO,EAAE,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,GAAW,EAAE,MAAc;IACnD,OAAO,GAAG,GAAG,IAAI,MAAM,EAAE,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAa;IAC3C,MAAM,EAAE,GAAG,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IAClC,IAAI,EAAE,GAAG,CAAC;QAAE,OAAO,SAAS,CAAC;IAC7B,IAAI,CAAC;QACH,OAAO,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,6BAA6B,CAAC,IAAyB,EAAE,KAAa;IACpF,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AAChF,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAyB,EAAE,KAAa;IAChE,OAAO,GAAG,IAAI,IAAI,KAAK,EAAE,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,QAG/B;IACC,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC;IACzD,MAAM,IAAI,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC;IACxD,OAAO,YAAY,CAAC,KAAK,EAAE,KAAK,IAAI,GAAG,qBAAqB,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AACpF,CAAC;AAED,mGAAmG;AACnG,MAAM,UAAU,qBAAqB,CAAC,OAAe;IACnD,OAAO,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;AAC9E,CAAC;AAED,SAAS,QAAQ,CAAC,KAAa;IAC7B,OAAO,KAAK;SACT,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AAC7B,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { PoolClient } from 'pg';
2
+ export type EnsureDefaultOrgBillingTx = (client: PoolClient, input: {
3
+ readonly org: string;
4
+ readonly owner: {
5
+ readonly identityIssuer?: string;
6
+ readonly subject: string;
7
+ readonly email: string;
8
+ };
9
+ readonly reason: 'organization-created';
10
+ }, createdAt: Date) => Promise<void>;
11
+ //# sourceMappingURL=postgres-contracts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres-contracts.d.ts","sourceRoot":"","sources":["../src/postgres-contracts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAErC,MAAM,MAAM,yBAAyB,GAAG,CACtC,MAAM,EAAE,UAAU,EAClB,KAAK,EAAE;IACL,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE;QACd,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;QACjC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;KACxB,CAAC;IACF,QAAQ,CAAC,MAAM,EAAE,sBAAsB,CAAC;CACzC,EACD,SAAS,EAAE,IAAI,KACZ,OAAO,CAAC,IAAI,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=postgres-contracts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres-contracts.js","sourceRoot":"","sources":["../src/postgres-contracts.ts"],"names":[],"mappings":""}
@@ -0,0 +1,18 @@
1
+ import type { Pool, PoolClient } from 'pg';
2
+ import type { ActiveMcpSubdomainClaim, ChangeMcpSubdomainInput, McpSubdomainMutationResult, McpSubdomainSetting } from './contracts.js';
3
+ type ChangedMcpSubdomainResult = Omit<McpSubdomainMutationResult, 'changed' | 'changedAt'> & {
4
+ readonly changed: true;
5
+ readonly changedAt: string;
6
+ };
7
+ export interface PostgresMcpSubdomainMutationOptions {
8
+ readonly now?: () => Date;
9
+ /** Called after state and mutation rows are staged but before commit. */
10
+ readonly recordAudit?: (client: Pick<PoolClient, 'query'>, result: ChangedMcpSubdomainResult, input: ChangeMcpSubdomainInput) => Promise<void>;
11
+ }
12
+ export declare function getActiveMcpSubdomainRow(pool: Pool, org: string): Promise<ActiveMcpSubdomainClaim | undefined>;
13
+ export declare function resolveActiveMcpSubdomainRow(pool: Pool, mcpSubdomain: string): Promise<ActiveMcpSubdomainClaim | undefined>;
14
+ export declare function getMcpSubdomainSettingRow(pool: Pool, org: string): Promise<McpSubdomainSetting | undefined>;
15
+ /** Exact-owner, globally unique, permanently retiring mutation in one PostgreSQL transaction. */
16
+ export declare function changeMcpSubdomainRow(pool: Pool, input: ChangeMcpSubdomainInput, options?: PostgresMcpSubdomainMutationOptions): Promise<McpSubdomainMutationResult>;
17
+ export {};
18
+ //# sourceMappingURL=postgres-mcp-subdomain-claims.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres-mcp-subdomain-claims.d.ts","sourceRoot":"","sources":["../src/postgres-mcp-subdomain-claims.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC3C,OAAO,KAAK,EACV,uBAAuB,EACvB,uBAAuB,EACvB,0BAA0B,EAC1B,mBAAmB,EACpB,MAAM,gBAAgB,CAAC;AAWxB,KAAK,yBAAyB,GAAG,IAAI,CAAC,0BAA0B,EAAE,SAAS,GAAG,WAAW,CAAC,GAAG;IAC3F,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B,CAAC;AAqBF,MAAM,WAAW,mCAAmC;IAClD,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,yEAAyE;IACzE,QAAQ,CAAC,WAAW,CAAC,EAAE,CACrB,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,EACjC,MAAM,EAAE,yBAAyB,EACjC,KAAK,EAAE,uBAAuB,KAC3B,OAAO,CAAC,IAAI,CAAC,CAAC;CACpB;AAED,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,IAAI,EACV,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,uBAAuB,GAAG,SAAS,CAAC,CAQ9C;AAED,wBAAsB,4BAA4B,CAChD,IAAI,EAAE,IAAI,EACV,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,uBAAuB,GAAG,SAAS,CAAC,CAQ9C;AAED,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,IAAI,EACV,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,mBAAmB,GAAG,SAAS,CAAC,CAe1C;AAED,iGAAiG;AACjG,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,uBAAuB,EAC9B,OAAO,GAAE,mCAAwC,GAChD,OAAO,CAAC,0BAA0B,CAAC,CAqHrC"}
@@ -0,0 +1,173 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { McpSubdomainCooldownError, McpSubdomainIdempotencyConflictError, McpSubdomainOwnerRequiredError, McpSubdomainUnavailableError, } from './mcp-subdomain-claims.js';
3
+ import { validateMcpSubdomain, validateSlug } from './validation.js';
4
+ const MCP_SUBDOMAIN_COOLDOWN_MS = 30 * 24 * 60 * 60 * 1000;
5
+ export async function getActiveMcpSubdomainRow(pool, org) {
6
+ const { rows } = await pool.query(`SELECT subdomain, org_slug, claimed_at
7
+ FROM org_mcp_subdomain_claims
8
+ WHERE org_slug = $1 AND state = 'active'`, [validateSlug('org', org)]);
9
+ return rows[0] === undefined ? undefined : claimRowToRecord(rows[0]);
10
+ }
11
+ export async function resolveActiveMcpSubdomainRow(pool, mcpSubdomain) {
12
+ const { rows } = await pool.query(`SELECT subdomain, org_slug, claimed_at
13
+ FROM org_mcp_subdomain_claims
14
+ WHERE subdomain = $1 AND state = 'active'`, [validateMcpSubdomain(mcpSubdomain)]);
15
+ return rows[0] === undefined ? undefined : claimRowToRecord(rows[0]);
16
+ }
17
+ export async function getMcpSubdomainSettingRow(pool, org) {
18
+ const { rows } = await pool.query(`SELECT claims.subdomain, claims.org_slug, claims.claimed_at,
19
+ (SELECT max(changed_at)
20
+ FROM org_mcp_subdomain_mutations
21
+ WHERE org_slug = claims.org_slug AND outcome = 'changed') AS last_changed_at
22
+ FROM org_mcp_subdomain_claims AS claims
23
+ WHERE claims.org_slug = $1 AND claims.state = 'active'`, [validateSlug('org', org)]);
24
+ const row = rows[0];
25
+ if (row === undefined)
26
+ return undefined;
27
+ const claim = claimRowToRecord(row);
28
+ const changeAllowedAt = cooldownBoundary(row.last_changed_at);
29
+ return { ...claim, ...(changeAllowedAt === undefined ? {} : { changeAllowedAt }) };
30
+ }
31
+ /** Exact-owner, globally unique, permanently retiring mutation in one PostgreSQL transaction. */
32
+ export async function changeMcpSubdomainRow(pool, input, options = {}) {
33
+ const org = validateSlug('org', input.org);
34
+ if (input.idempotencyKey.length === 0)
35
+ throw new Error('idempotency key must not be empty');
36
+ const keyHash = `sha256:${digest(input.idempotencyKey)}`;
37
+ const fingerprint = `v1:${digest(input.mcpSubdomain)}`;
38
+ const now = (options.now ?? (() => new Date()))();
39
+ const client = await pool.connect();
40
+ try {
41
+ await client.query('BEGIN');
42
+ const { rowCount: orgCount } = await client.query('SELECT slug FROM orgs WHERE slug = $1 FOR UPDATE', [org]);
43
+ if (orgCount !== 1)
44
+ throw new McpSubdomainOwnerRequiredError();
45
+ const { rows: memberRows } = await client.query(`SELECT role FROM org_members
46
+ WHERE org_slug = $1 AND subject = $2
47
+ FOR UPDATE`, [org, input.actor.subject]);
48
+ if (memberRows[0]?.role !== 'owner')
49
+ throw new McpSubdomainOwnerRequiredError();
50
+ const { rows: replayRows } = await client.query(`SELECT request_fingerprint, outcome, previous_subdomain, current_subdomain,
51
+ recorded_at, changed_at
52
+ FROM org_mcp_subdomain_mutations
53
+ WHERE org_slug = $1 AND idempotency_key_hash = $2
54
+ FOR UPDATE`, [org, keyHash]);
55
+ const replay = replayRows[0];
56
+ if (replay !== undefined) {
57
+ if (replay.request_fingerprint !== fingerprint) {
58
+ throw new McpSubdomainIdempotencyConflictError();
59
+ }
60
+ const result = await replayResult(client, org, replay);
61
+ await client.query('COMMIT');
62
+ return result;
63
+ }
64
+ const mcpSubdomain = validateMcpSubdomain(input.mcpSubdomain);
65
+ const { rows: claimRows } = await client.query(`SELECT subdomain, org_slug, claimed_at
66
+ FROM org_mcp_subdomain_claims
67
+ WHERE org_slug = $1 AND state = 'active'
68
+ FOR UPDATE`, [org]);
69
+ const current = claimRows[0];
70
+ if (current === undefined) {
71
+ throw new Error(`active MCP subdomain claim missing for organization "${org}"`);
72
+ }
73
+ const lastChangedAt = await latestChangedAt(client, org);
74
+ const changeAllowedAt = cooldownBoundary(lastChangedAt);
75
+ if (mcpSubdomain === current.subdomain) {
76
+ await client.query(`INSERT INTO org_mcp_subdomain_mutations
77
+ (org_slug, idempotency_key_hash, request_fingerprint, outcome,
78
+ previous_subdomain, current_subdomain, actor_principal_id, recorded_at, changed_at)
79
+ VALUES ($1, $2, $3, 'noop', $4, $4, $5, $6, NULL)`, [org, keyHash, fingerprint, current.subdomain, input.actor.subject, now]);
80
+ const result = {
81
+ orgSlug: org,
82
+ previousMcpSubdomain: current.subdomain,
83
+ mcpSubdomain,
84
+ changed: false,
85
+ replayed: false,
86
+ ...(changeAllowedAt === undefined ? {} : { changeAllowedAt }),
87
+ auditCommitted: false,
88
+ };
89
+ await client.query('COMMIT');
90
+ return result;
91
+ }
92
+ if (changeAllowedAt !== undefined && now.getTime() < Date.parse(changeAllowedAt)) {
93
+ throw new McpSubdomainCooldownError(changeAllowedAt);
94
+ }
95
+ await client.query(`UPDATE org_mcp_subdomain_claims
96
+ SET state = 'retired', retired_at = $2, retired_by_principal = $3
97
+ WHERE org_slug = $1 AND state = 'active'`, [org, now, input.actor.subject]);
98
+ await client.query(`INSERT INTO org_mcp_subdomain_claims (subdomain, org_slug, state, claimed_at)
99
+ VALUES ($1, $2, 'active', $3)`, [mcpSubdomain, org, now]);
100
+ await client.query(`INSERT INTO org_mcp_subdomain_mutations
101
+ (org_slug, idempotency_key_hash, request_fingerprint, outcome,
102
+ previous_subdomain, current_subdomain, actor_principal_id, recorded_at, changed_at)
103
+ VALUES ($1, $2, $3, 'changed', $4, $5, $6, $7, $7)`, [org, keyHash, fingerprint, current.subdomain, mcpSubdomain, input.actor.subject, now]);
104
+ const changedAt = now.toISOString();
105
+ const result = {
106
+ orgSlug: org,
107
+ previousMcpSubdomain: current.subdomain,
108
+ mcpSubdomain,
109
+ changed: true,
110
+ replayed: false,
111
+ changedAt,
112
+ changeAllowedAt: new Date(now.getTime() + MCP_SUBDOMAIN_COOLDOWN_MS).toISOString(),
113
+ auditCommitted: options.recordAudit !== undefined,
114
+ };
115
+ if (options.recordAudit !== undefined)
116
+ await options.recordAudit(client, result, input);
117
+ await client.query('COMMIT');
118
+ return result;
119
+ }
120
+ catch (error) {
121
+ await client.query('ROLLBACK').catch(() => undefined);
122
+ if (isUniqueViolation(error))
123
+ throw new McpSubdomainUnavailableError();
124
+ throw error;
125
+ }
126
+ finally {
127
+ client.release();
128
+ }
129
+ }
130
+ async function replayResult(client, org, row) {
131
+ const changed = row.outcome === 'changed';
132
+ const changedAt = row.changed_at === null ? undefined : new Date(row.changed_at).toISOString();
133
+ const priorChangedAt = changed
134
+ ? row.changed_at
135
+ : await latestChangedAt(client, org, new Date(row.recorded_at));
136
+ const changeAllowedAt = cooldownBoundary(priorChangedAt);
137
+ return {
138
+ orgSlug: org,
139
+ previousMcpSubdomain: row.previous_subdomain,
140
+ mcpSubdomain: row.current_subdomain,
141
+ changed,
142
+ replayed: true,
143
+ ...(changedAt === undefined ? {} : { changedAt }),
144
+ ...(changeAllowedAt === undefined ? {} : { changeAllowedAt }),
145
+ auditCommitted: changed,
146
+ };
147
+ }
148
+ async function latestChangedAt(queryable, org, atOrBefore) {
149
+ const { rows } = await queryable.query(`SELECT max(changed_at) AS changed_at
150
+ FROM org_mcp_subdomain_mutations
151
+ WHERE org_slug = $1 AND outcome = 'changed'
152
+ AND ($2::timestamptz IS NULL OR changed_at <= $2)`, [org, atOrBefore ?? null]);
153
+ return rows[0]?.changed_at ?? null;
154
+ }
155
+ function cooldownBoundary(value) {
156
+ return value === null
157
+ ? undefined
158
+ : new Date(new Date(value).getTime() + MCP_SUBDOMAIN_COOLDOWN_MS).toISOString();
159
+ }
160
+ function digest(value) {
161
+ return createHash('sha256').update(value).digest('hex');
162
+ }
163
+ function isUniqueViolation(error) {
164
+ return typeof error === 'object' && error !== null && 'code' in error && error.code === '23505';
165
+ }
166
+ function claimRowToRecord(row) {
167
+ return {
168
+ mcpSubdomain: row.subdomain,
169
+ orgSlug: row.org_slug,
170
+ claimedAt: new Date(row.claimed_at).toISOString(),
171
+ };
172
+ }
173
+ //# sourceMappingURL=postgres-mcp-subdomain-claims.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres-mcp-subdomain-claims.js","sourceRoot":"","sources":["../src/postgres-mcp-subdomain-claims.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Pool } from 'pg';
2
+ /** Install and reconcile the append-only MCP-subdomain claim ledger in one organization-locked migration. */
3
+ export declare function ensureMcpSubdomainClaimSchema(pool: Pool): Promise<void>;
4
+ //# sourceMappingURL=postgres-mcp-subdomain-schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres-mcp-subdomain-schema.d.ts","sourceRoot":"","sources":["../src/postgres-mcp-subdomain-schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAE/B,6GAA6G;AAC7G,wBAAsB,6BAA6B,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAiI7E"}
@@ -0,0 +1,134 @@
1
+ /** Install and reconcile the append-only MCP-subdomain claim ledger in one organization-locked migration. */
2
+ export async function ensureMcpSubdomainClaimSchema(pool) {
3
+ const client = await pool.connect();
4
+ try {
5
+ await client.query('BEGIN');
6
+ await client.query('LOCK TABLE orgs IN SHARE ROW EXCLUSIVE MODE');
7
+ await client.query(`
8
+ CREATE TABLE IF NOT EXISTS org_mcp_subdomain_claims (
9
+ subdomain text PRIMARY KEY,
10
+ org_slug text NOT NULL REFERENCES orgs(slug) ON DELETE RESTRICT,
11
+ state text NOT NULL CHECK (state IN ('active', 'retired')),
12
+ claimed_at timestamptz NOT NULL DEFAULT now(),
13
+ retired_at timestamptz,
14
+ retired_by_principal text,
15
+ CONSTRAINT org_mcp_subdomain_claim_label_valid CHECK (
16
+ subdomain ~ '^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$'
17
+ AND subdomain NOT IN ('deploy', 'healthz', 'readyz', 'v1', 'o', 'mcp', 'local')
18
+ ),
19
+ CONSTRAINT org_mcp_subdomain_claim_retirement_valid CHECK (
20
+ (state = 'active' AND retired_at IS NULL AND retired_by_principal IS NULL)
21
+ OR
22
+ (state = 'retired' AND retired_at IS NOT NULL AND retired_by_principal IS NOT NULL)
23
+ )
24
+ )
25
+ `);
26
+ await client.query(`
27
+ CREATE UNIQUE INDEX IF NOT EXISTS org_mcp_subdomain_claims_one_active_org_idx
28
+ ON org_mcp_subdomain_claims (org_slug)
29
+ WHERE state = 'active'
30
+ `);
31
+ await client.query(`
32
+ CREATE TABLE IF NOT EXISTS org_mcp_subdomain_mutations (
33
+ org_slug text NOT NULL REFERENCES orgs(slug) ON DELETE RESTRICT,
34
+ idempotency_key_hash text NOT NULL,
35
+ request_fingerprint text NOT NULL,
36
+ outcome text NOT NULL CHECK (outcome IN ('changed', 'noop')),
37
+ previous_subdomain text NOT NULL,
38
+ current_subdomain text NOT NULL,
39
+ actor_principal_id text NOT NULL,
40
+ recorded_at timestamptz NOT NULL,
41
+ changed_at timestamptz,
42
+ PRIMARY KEY (org_slug, idempotency_key_hash),
43
+ CONSTRAINT org_mcp_subdomain_mutation_change_valid CHECK (
44
+ (outcome = 'changed' AND changed_at IS NOT NULL)
45
+ OR (outcome = 'noop' AND changed_at IS NULL)
46
+ )
47
+ )
48
+ `);
49
+ await client.query(`
50
+ CREATE OR REPLACE FUNCTION guard_org_mcp_subdomain_claim_mutation()
51
+ RETURNS trigger
52
+ LANGUAGE plpgsql
53
+ AS $function$
54
+ BEGIN
55
+ IF TG_OP = 'DELETE' THEN
56
+ RAISE EXCEPTION 'MCP subdomain claims are append-only' USING ERRCODE = '23514';
57
+ END IF;
58
+ IF OLD.subdomain IS DISTINCT FROM NEW.subdomain
59
+ OR OLD.org_slug IS DISTINCT FROM NEW.org_slug
60
+ OR OLD.claimed_at IS DISTINCT FROM NEW.claimed_at
61
+ OR OLD.state <> 'active'
62
+ OR NEW.state <> 'retired'
63
+ OR OLD.retired_at IS NOT NULL
64
+ OR OLD.retired_by_principal IS NOT NULL
65
+ OR NEW.retired_at IS NULL
66
+ OR NEW.retired_by_principal IS NULL THEN
67
+ RAISE EXCEPTION 'invalid MCP subdomain claim transition' USING ERRCODE = '23514';
68
+ END IF;
69
+ RETURN NEW;
70
+ END
71
+ $function$
72
+ `);
73
+ await client.query(`
74
+ DROP TRIGGER IF EXISTS guard_org_mcp_subdomain_claim_mutation
75
+ ON org_mcp_subdomain_claims
76
+ `);
77
+ await client.query(`
78
+ CREATE TRIGGER guard_org_mcp_subdomain_claim_mutation
79
+ BEFORE UPDATE OR DELETE ON org_mcp_subdomain_claims
80
+ FOR EACH ROW EXECUTE FUNCTION guard_org_mcp_subdomain_claim_mutation()
81
+ `);
82
+ await client.query(`
83
+ INSERT INTO org_mcp_subdomain_claims (subdomain, org_slug, state, claimed_at)
84
+ SELECT slug, slug, 'active', created_at
85
+ FROM orgs
86
+ WHERE slug <> 'local'
87
+ ON CONFLICT (subdomain) DO NOTHING
88
+ `);
89
+ const { rows } = await client.query(`
90
+ SELECT count(*)::text AS invalid_count
91
+ FROM (
92
+ SELECT orgs.slug
93
+ FROM orgs
94
+ LEFT JOIN org_mcp_subdomain_claims AS claims
95
+ ON claims.org_slug = orgs.slug AND claims.state = 'active'
96
+ WHERE orgs.slug <> 'local'
97
+ GROUP BY orgs.slug
98
+ HAVING count(claims.subdomain) <> 1
99
+ ) AS invalid_orgs
100
+ `);
101
+ if (rows[0]?.invalid_count !== '0') {
102
+ throw new Error('MCP subdomain backfill did not establish one active claim per hosted org');
103
+ }
104
+ await client.query(`
105
+ CREATE OR REPLACE FUNCTION claim_default_org_mcp_subdomain()
106
+ RETURNS trigger
107
+ LANGUAGE plpgsql
108
+ AS $function$
109
+ BEGIN
110
+ IF NEW.slug <> 'local' THEN
111
+ INSERT INTO org_mcp_subdomain_claims (subdomain, org_slug, state, claimed_at)
112
+ VALUES (NEW.slug, NEW.slug, 'active', NEW.created_at);
113
+ END IF;
114
+ RETURN NEW;
115
+ END
116
+ $function$
117
+ `);
118
+ await client.query('DROP TRIGGER IF EXISTS claim_default_org_mcp_subdomain ON orgs');
119
+ await client.query(`
120
+ CREATE TRIGGER claim_default_org_mcp_subdomain
121
+ AFTER INSERT ON orgs
122
+ FOR EACH ROW EXECUTE FUNCTION claim_default_org_mcp_subdomain()
123
+ `);
124
+ await client.query('COMMIT');
125
+ }
126
+ catch (error) {
127
+ await client.query('ROLLBACK').catch(() => undefined);
128
+ throw error;
129
+ }
130
+ finally {
131
+ client.release();
132
+ }
133
+ }
134
+ //# sourceMappingURL=postgres-mcp-subdomain-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres-mcp-subdomain-schema.js","sourceRoot":"","sources":["../src/postgres-mcp-subdomain-schema.ts"],"names":[],"mappings":"AAEA,6GAA6G;AAC7G,MAAM,CAAC,KAAK,UAAU,6BAA6B,CAAC,IAAU;IAC5D,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;IACpC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC5B,MAAM,MAAM,CAAC,KAAK,CAAC,6CAA6C,CAAC,CAAC;QAClE,MAAM,MAAM,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;KAkBlB,CAAC,CAAC;QACH,MAAM,MAAM,CAAC,KAAK,CAAC;;;;KAIlB,CAAC,CAAC;QACH,MAAM,MAAM,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;KAiBlB,CAAC,CAAC;QACH,MAAM,MAAM,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;;;;;;;KAuBlB,CAAC,CAAC;QACH,MAAM,MAAM,CAAC,KAAK,CAAC;;;KAGlB,CAAC,CAAC;QACH,MAAM,MAAM,CAAC,KAAK,CAAC;;;;KAIlB,CAAC,CAAC;QACH,MAAM,MAAM,CAAC,KAAK,CAAC;;;;;;KAMlB,CAAC,CAAC;QACH,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,KAAK,CAA4B;;;;;;;;;;;KAW9D,CAAC,CAAC;QACH,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,aAAa,KAAK,GAAG,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,0EAA0E,CAAC,CAAC;QAC9F,CAAC;QACD,MAAM,MAAM,CAAC,KAAK,CAAC;;;;;;;;;;;;;KAalB,CAAC,CAAC;QACH,MAAM,MAAM,CAAC,KAAK,CAAC,gEAAgE,CAAC,CAAC;QACrF,MAAM,MAAM,CAAC,KAAK,CAAC;;;;KAIlB,CAAC,CAAC;QACH,MAAM,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACtD,MAAM,KAAK,CAAC;IACd,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,OAAO,EAAE,CAAC;IACnB,CAAC;AACH,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import type { Pool } from 'pg';
2
- import type { CreateOrgWithOwnerInput, OrgDomainRecord, OrgInvitationRecord, OrgMemberRecord, OrgOpenAIAppsChallengeRecord, OrgRecord, OrgRole, SignupAllowlistKind, SignupAllowlistRecord, WelcomeEmailRecord } from '../store.js';
2
+ import type { CreateOrgWithOwnerInput, OrgDomainRecord, OrgInvitationRecord, OrgMemberRecord, OrgOpenAIAppsChallengeRecord, OrgRecord, OrgRole, SignupAllowlistKind, SignupAllowlistRecord, WelcomeEmailRecord } from './contracts.js';
3
+ import type { EnsureDefaultOrgBillingTx } from './postgres-contracts.js';
3
4
  export declare function createOrgRow(pool: Pool, input: {
4
5
  readonly slug: string;
5
6
  readonly displayName?: string;
@@ -17,7 +18,7 @@ export declare function markWelcomeEmailFailedRow(pool: Pool, input: {
17
18
  readonly nextAttemptAt: Date;
18
19
  }): Promise<void>;
19
20
  export declare function getWelcomeEmailRow(pool: Pool, subject: string): Promise<WelcomeEmailRecord | undefined>;
20
- export declare function createOrgWithOwnerRow(pool: Pool, input: CreateOrgWithOwnerInput, now: () => Date): Promise<OrgRecord>;
21
+ export declare function createOrgWithOwnerRow(pool: Pool, input: CreateOrgWithOwnerInput, now: () => Date, ensureDefaultOrgBilling: EnsureDefaultOrgBillingTx): Promise<OrgRecord>;
21
22
  export declare function getOrgRow(pool: Pool, slug: string): Promise<OrgRecord | undefined>;
22
23
  export declare function updateOrgRow(pool: Pool, input: {
23
24
  readonly slug: string;
@@ -106,4 +107,4 @@ export declare function revokeOrgInvitationRows(pool: Pool, input: {
106
107
  readonly org: string;
107
108
  readonly email: string;
108
109
  }): Promise<number>;
109
- //# sourceMappingURL=postgres-control-plane.d.ts.map
110
+ //# sourceMappingURL=postgres-organization-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres-organization-store.d.ts","sourceRoot":"","sources":["../src/postgres-organization-store.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,5 @@
1
1
  import { randomUUID } from 'node:crypto';
2
- import { ensureDefaultOrgBillingTx } from '../billing/postgres.js';
3
- import { validateDomain, validateOpenAIAppsChallenge, validateOrgMembershipDomain, validateOrgRole, validateSignupAllowlistKind, validateSlug, validateUserOwnedOrgSlug, } from '../store.js';
2
+ import { validateDomain, validateOpenAIAppsChallenge, validateOrgMembershipDomain, validateOrgRole, validateSignupAllowlistKind, validateSlug, validateUserOwnedOrgSlug, } from './validation.js';
4
3
  export async function createOrgRow(pool, input) {
5
4
  const slug = validateSlug('org', input.slug);
6
5
  const { rows } = await pool.query(`INSERT INTO orgs (slug, display_name)
@@ -42,7 +41,7 @@ export async function getWelcomeEmailRow(pool, subject) {
42
41
  const { rows } = await pool.query('SELECT * FROM welcome_email_outbox WHERE subject = $1', [subject]);
43
42
  return rows[0] ? welcomeEmailRowToRecord(rows[0]) : undefined;
44
43
  }
45
- export async function createOrgWithOwnerRow(pool, input, now) {
44
+ export async function createOrgWithOwnerRow(pool, input, now, ensureDefaultOrgBilling) {
46
45
  const slug = validateUserOwnedOrgSlug(input.slug);
47
46
  const client = await pool.connect();
48
47
  try {
@@ -64,7 +63,7 @@ export async function createOrgWithOwnerRow(pool, input, now) {
64
63
  email = EXCLUDED.email,
65
64
  role = 'owner'`, [slug, input.owner.subject, input.owner.email.toLowerCase()]);
66
65
  const billingCreatedAt = now();
67
- await ensureDefaultOrgBillingTx(client, {
66
+ await ensureDefaultOrgBilling(client, {
68
67
  org: slug,
69
68
  owner: input.owner,
70
69
  reason: 'organization-created',
@@ -351,4 +350,4 @@ function welcomeEmailRowToRecord(row) {
351
350
  ...(row.last_error_code === 'delivery_failed' ? { lastErrorCode: 'delivery_failed' } : {}),
352
351
  };
353
352
  }
354
- //# sourceMappingURL=postgres-control-plane.js.map
353
+ //# sourceMappingURL=postgres-organization-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres-organization-store.js","sourceRoot":"","sources":["../src/postgres-organization-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Pool } from 'pg';
2
+ /** Idempotent organization, membership, signup, and onboarding persistence schema. */
3
+ export declare function ensureOrganizationSchema(pool: Pool): Promise<void>;
4
+ //# sourceMappingURL=postgres-schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres-schema.d.ts","sourceRoot":"","sources":["../src/postgres-schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,IAAI,CAAC;AAG/B,sFAAsF;AACtF,wBAAsB,wBAAwB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAsFxE"}
@@ -0,0 +1,90 @@
1
+ import { ensureMcpSubdomainClaimSchema } from './postgres-mcp-subdomain-schema.js';
2
+ /** Idempotent organization, membership, signup, and onboarding persistence schema. */
3
+ export async function ensureOrganizationSchema(pool) {
4
+ await pool.query(`
5
+ CREATE TABLE IF NOT EXISTS orgs (
6
+ slug text PRIMARY KEY,
7
+ display_name text,
8
+ created_at timestamptz NOT NULL DEFAULT now()
9
+ )
10
+ `);
11
+ await pool.query(`
12
+ CREATE TABLE IF NOT EXISTS org_members (
13
+ org_slug text NOT NULL REFERENCES orgs(slug) ON DELETE CASCADE,
14
+ subject text NOT NULL,
15
+ email text NOT NULL,
16
+ role text NOT NULL,
17
+ created_at timestamptz NOT NULL DEFAULT now(),
18
+ PRIMARY KEY (org_slug, subject)
19
+ )
20
+ `);
21
+ await pool.query(`
22
+ CREATE TABLE IF NOT EXISTS welcome_email_outbox (
23
+ subject text PRIMARY KEY,
24
+ org_slug text NOT NULL REFERENCES orgs(slug) ON DELETE CASCADE,
25
+ email text NOT NULL,
26
+ first_name text,
27
+ created_at timestamptz NOT NULL DEFAULT now(),
28
+ attempt_count integer NOT NULL DEFAULT 0,
29
+ next_attempt_at timestamptz NOT NULL DEFAULT now(),
30
+ lease_expires_at timestamptz,
31
+ sent_at timestamptz,
32
+ provider_message_id text,
33
+ last_error_code text
34
+ )
35
+ `);
36
+ await pool.query(`ALTER TABLE welcome_email_outbox ADD COLUMN IF NOT EXISTS first_name text`);
37
+ await pool.query(`
38
+ CREATE INDEX IF NOT EXISTS welcome_email_outbox_pending_idx
39
+ ON welcome_email_outbox (next_attempt_at, created_at)
40
+ WHERE sent_at IS NULL
41
+ `);
42
+ await pool.query(`
43
+ CREATE TABLE IF NOT EXISTS org_domains (
44
+ org_slug text NOT NULL REFERENCES orgs(slug) ON DELETE CASCADE,
45
+ domain text NOT NULL,
46
+ challenge text NOT NULL,
47
+ created_at timestamptz NOT NULL DEFAULT now(),
48
+ verified_at timestamptz,
49
+ last_checked_at timestamptz,
50
+ PRIMARY KEY (org_slug, domain)
51
+ )
52
+ `);
53
+ await pool.query(`
54
+ CREATE TABLE IF NOT EXISTS org_openai_apps_challenges (
55
+ org_slug text PRIMARY KEY REFERENCES orgs(slug) ON DELETE CASCADE,
56
+ challenge text NOT NULL,
57
+ updated_at timestamptz NOT NULL DEFAULT now(),
58
+ updated_by_subject text,
59
+ updated_by_email text
60
+ )
61
+ `);
62
+ await pool.query(`
63
+ CREATE TABLE IF NOT EXISTS signup_allowlist (
64
+ kind text NOT NULL CHECK (kind IN ('subject', 'domain')),
65
+ value text NOT NULL,
66
+ created_at timestamptz NOT NULL DEFAULT now(),
67
+ created_by_subject text,
68
+ PRIMARY KEY (kind, value)
69
+ )
70
+ `);
71
+ await pool.query(`
72
+ CREATE TABLE IF NOT EXISTS org_invitations (
73
+ token_hash text PRIMARY KEY,
74
+ org_slug text NOT NULL REFERENCES orgs(slug) ON DELETE CASCADE,
75
+ email text NOT NULL,
76
+ role text NOT NULL,
77
+ created_at timestamptz NOT NULL DEFAULT now(),
78
+ expires_at timestamptz NOT NULL,
79
+ created_by_subject text NOT NULL,
80
+ created_by_email text,
81
+ accepted_at timestamptz
82
+ )
83
+ `);
84
+ await pool.query(`
85
+ CREATE INDEX IF NOT EXISTS org_invitations_org_email_idx
86
+ ON org_invitations (org_slug, email, expires_at)
87
+ `);
88
+ await ensureMcpSubdomainClaimSchema(pool);
89
+ }
90
+ //# sourceMappingURL=postgres-schema.js.map