@noodleseed/one 0.63.0 → 0.64.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 (440) hide show
  1. package/dist/auth-discovery.d.ts +17 -0
  2. package/dist/auth-discovery.d.ts.map +1 -0
  3. package/dist/auth-discovery.js +54 -0
  4. package/dist/auth-discovery.js.map +1 -0
  5. package/dist/cli.d.ts.map +1 -1
  6. package/dist/cli.js +3 -0
  7. package/dist/cli.js.map +1 -1
  8. package/dist/commands/catalog-data-platform-auth.d.ts +7 -0
  9. package/dist/commands/catalog-data-platform-auth.d.ts.map +1 -0
  10. package/dist/commands/catalog-data-platform-auth.js +47 -0
  11. package/dist/commands/catalog-data-platform-auth.js.map +1 -0
  12. package/dist/commands/catalog.d.ts.map +1 -1
  13. package/dist/commands/catalog.js +6 -3
  14. package/dist/commands/catalog.js.map +1 -1
  15. package/dist/commands/docs-mcp.d.ts +3 -3
  16. package/dist/commands/docs-mcp.js +3 -3
  17. package/dist/commands/platform-auth-finalization-args.d.ts +13 -0
  18. package/dist/commands/platform-auth-finalization-args.d.ts.map +1 -0
  19. package/dist/commands/platform-auth-finalization-args.js +29 -0
  20. package/dist/commands/platform-auth-finalization-args.js.map +1 -0
  21. package/dist/commands/platform-auth-migration-args.d.ts +71 -0
  22. package/dist/commands/platform-auth-migration-args.d.ts.map +1 -0
  23. package/dist/commands/platform-auth-migration-args.js +320 -0
  24. package/dist/commands/platform-auth-migration-args.js.map +1 -0
  25. package/dist/commands/platform-auth-migration-ops.d.ts +3 -0
  26. package/dist/commands/platform-auth-migration-ops.d.ts.map +1 -0
  27. package/dist/commands/platform-auth-migration-ops.js +369 -0
  28. package/dist/commands/platform-auth-migration-ops.js.map +1 -0
  29. package/dist/commands/project-setup.js +1 -1
  30. package/dist/commands/project-setup.js.map +1 -1
  31. package/dist/config.d.ts +4 -4
  32. package/dist/config.d.ts.map +1 -1
  33. package/dist/control-plane.d.ts +0 -11
  34. package/dist/control-plane.d.ts.map +1 -1
  35. package/dist/control-plane.js +1 -8
  36. package/dist/control-plane.js.map +1 -1
  37. package/dist/doctor.d.ts.map +1 -1
  38. package/dist/doctor.js +3 -5
  39. package/dist/doctor.js.map +1 -1
  40. package/node_modules/@noodle-borg/agent-kit/dist/curated/command-groups.d.ts.map +1 -1
  41. package/node_modules/@noodle-borg/agent-kit/dist/curated/command-groups.js +4 -0
  42. package/node_modules/@noodle-borg/agent-kit/dist/curated/command-groups.js.map +1 -1
  43. package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.d.ts.map +1 -1
  44. package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.js +1 -0
  45. package/node_modules/@noodle-borg/agent-kit/dist/generated/surface.js.map +1 -1
  46. package/node_modules/@noodle-borg/auth/dist/jwt-issuer.d.ts +2 -2
  47. package/node_modules/@noodle-borg/auth/dist/jwt-issuer.d.ts.map +1 -1
  48. package/node_modules/@noodle-borg/auth/dist/jwt-issuer.js +1 -1
  49. package/node_modules/@noodle-borg/auth/dist/verify.d.ts +1 -1
  50. package/node_modules/@noodle-borg/auth/dist/verify.d.ts.map +1 -1
  51. package/node_modules/@noodle-borg/service/dist/auth/deploy-gate.d.ts +26 -0
  52. package/node_modules/@noodle-borg/service/dist/auth/deploy-gate.d.ts.map +1 -1
  53. package/node_modules/@noodle-borg/service/dist/auth/deploy-gate.js +105 -1
  54. package/node_modules/@noodle-borg/service/dist/auth/deploy-gate.js.map +1 -1
  55. package/node_modules/@noodle-borg/service/dist/control-plane-auth-bootstrap.d.ts +25 -0
  56. package/node_modules/@noodle-borg/service/dist/control-plane-auth-bootstrap.d.ts.map +1 -0
  57. package/node_modules/@noodle-borg/service/dist/control-plane-auth-bootstrap.js +99 -0
  58. package/node_modules/@noodle-borg/service/dist/control-plane-auth-bootstrap.js.map +1 -0
  59. package/node_modules/@noodle-borg/service/dist/index.d.ts +15 -0
  60. package/node_modules/@noodle-borg/service/dist/index.d.ts.map +1 -1
  61. package/node_modules/@noodle-borg/service/dist/index.js +15 -0
  62. package/node_modules/@noodle-borg/service/dist/index.js.map +1 -1
  63. package/node_modules/@noodle-borg/service/dist/main.js +112 -19
  64. package/node_modules/@noodle-borg/service/dist/main.js.map +1 -1
  65. package/node_modules/@noodle-borg/service/dist/oauth/app.d.ts +1 -1
  66. package/node_modules/@noodle-borg/service/dist/oauth/app.d.ts.map +1 -1
  67. package/node_modules/@noodle-borg/service/dist/oauth/app.js +9 -1
  68. package/node_modules/@noodle-borg/service/dist/oauth/app.js.map +1 -1
  69. package/node_modules/@noodle-borg/service/dist/oauth/authorization-initiation.d.ts +24 -0
  70. package/node_modules/@noodle-borg/service/dist/oauth/authorization-initiation.d.ts.map +1 -0
  71. package/node_modules/@noodle-borg/service/dist/oauth/authorization-initiation.js +88 -0
  72. package/node_modules/@noodle-borg/service/dist/oauth/authorization-initiation.js.map +1 -0
  73. package/node_modules/@noodle-borg/service/dist/oauth/branding.d.ts +2 -0
  74. package/node_modules/@noodle-borg/service/dist/oauth/branding.d.ts.map +1 -1
  75. package/node_modules/@noodle-borg/service/dist/oauth/branding.js +3 -2
  76. package/node_modules/@noodle-borg/service/dist/oauth/branding.js.map +1 -1
  77. package/node_modules/@noodle-borg/service/dist/oauth/consent-claims.d.ts +1 -1
  78. package/node_modules/@noodle-borg/service/dist/oauth/consent-claims.d.ts.map +1 -1
  79. package/node_modules/@noodle-borg/service/dist/oauth/consent-token.d.ts +5 -0
  80. package/node_modules/@noodle-borg/service/dist/oauth/consent-token.d.ts.map +1 -0
  81. package/node_modules/@noodle-borg/service/dist/oauth/consent-token.js +19 -0
  82. package/node_modules/@noodle-borg/service/dist/oauth/consent-token.js.map +1 -0
  83. package/node_modules/@noodle-borg/service/dist/oauth/consent.js +1 -1
  84. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-page.d.ts.map +1 -1
  85. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-page.js +216 -28
  86. package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-page.js.map +1 -1
  87. package/node_modules/@noodle-borg/service/dist/oauth/first-party-client.d.ts +13 -0
  88. package/node_modules/@noodle-borg/service/dist/oauth/first-party-client.d.ts.map +1 -0
  89. package/node_modules/@noodle-borg/service/dist/oauth/first-party-client.js +62 -0
  90. package/node_modules/@noodle-borg/service/dist/oauth/first-party-client.js.map +1 -0
  91. package/node_modules/@noodle-borg/service/dist/oauth/metadata.d.ts +4 -0
  92. package/node_modules/@noodle-borg/service/dist/oauth/metadata.d.ts.map +1 -0
  93. package/node_modules/@noodle-borg/service/dist/oauth/metadata.js +20 -0
  94. package/node_modules/@noodle-borg/service/dist/oauth/metadata.js.map +1 -0
  95. package/node_modules/@noodle-borg/service/dist/oauth/paths.d.ts.map +1 -1
  96. package/node_modules/@noodle-borg/service/dist/oauth/paths.js +2 -0
  97. package/node_modules/@noodle-borg/service/dist/oauth/paths.js.map +1 -1
  98. package/node_modules/@noodle-borg/service/dist/oauth/platform-principal-guard.d.ts +15 -0
  99. package/node_modules/@noodle-borg/service/dist/oauth/platform-principal-guard.d.ts.map +1 -0
  100. package/node_modules/@noodle-borg/service/dist/oauth/platform-principal-guard.js +58 -0
  101. package/node_modules/@noodle-borg/service/dist/oauth/platform-principal-guard.js.map +1 -0
  102. package/node_modules/@noodle-borg/service/dist/oauth/platform-principal-postgres.d.ts +8 -0
  103. package/node_modules/@noodle-borg/service/dist/oauth/platform-principal-postgres.d.ts.map +1 -0
  104. package/node_modules/@noodle-borg/service/dist/oauth/platform-principal-postgres.js +49 -0
  105. package/node_modules/@noodle-borg/service/dist/oauth/platform-principal-postgres.js.map +1 -0
  106. package/node_modules/@noodle-borg/service/dist/oauth/postgres-time.d.ts +3 -0
  107. package/node_modules/@noodle-borg/service/dist/oauth/postgres-time.d.ts.map +1 -0
  108. package/node_modules/@noodle-borg/service/dist/oauth/postgres-time.js +7 -0
  109. package/node_modules/@noodle-borg/service/dist/oauth/postgres-time.js.map +1 -0
  110. package/node_modules/@noodle-borg/service/dist/oauth/provider.d.ts +20 -25
  111. package/node_modules/@noodle-borg/service/dist/oauth/provider.d.ts.map +1 -1
  112. package/node_modules/@noodle-borg/service/dist/oauth/provider.js +105 -196
  113. package/node_modules/@noodle-borg/service/dist/oauth/provider.js.map +1 -1
  114. package/node_modules/@noodle-borg/service/dist/oauth/service-bootstrap.d.ts +36 -0
  115. package/node_modules/@noodle-borg/service/dist/oauth/service-bootstrap.d.ts.map +1 -0
  116. package/node_modules/@noodle-borg/service/dist/oauth/service-bootstrap.js +157 -0
  117. package/node_modules/@noodle-borg/service/dist/oauth/service-bootstrap.js.map +1 -0
  118. package/node_modules/@noodle-borg/service/dist/oauth/store-postgres-schema.d.ts +4 -0
  119. package/node_modules/@noodle-borg/service/dist/oauth/store-postgres-schema.d.ts.map +1 -0
  120. package/node_modules/@noodle-borg/service/dist/oauth/store-postgres-schema.js +110 -0
  121. package/node_modules/@noodle-borg/service/dist/oauth/store-postgres-schema.js.map +1 -0
  122. package/node_modules/@noodle-borg/service/dist/oauth/store-postgres.d.ts +7 -4
  123. package/node_modules/@noodle-borg/service/dist/oauth/store-postgres.d.ts.map +1 -1
  124. package/node_modules/@noodle-borg/service/dist/oauth/store-postgres.js +63 -120
  125. package/node_modules/@noodle-borg/service/dist/oauth/store-postgres.js.map +1 -1
  126. package/node_modules/@noodle-borg/service/dist/oauth/store.d.ts +19 -6
  127. package/node_modules/@noodle-borg/service/dist/oauth/store.d.ts.map +1 -1
  128. package/node_modules/@noodle-borg/service/dist/oauth/store.js +24 -2
  129. package/node_modules/@noodle-borg/service/dist/oauth/store.js.map +1 -1
  130. package/node_modules/@noodle-borg/service/dist/oauth/tokens.d.ts +1 -1
  131. package/node_modules/@noodle-borg/service/dist/oauth/tokens.d.ts.map +1 -1
  132. package/node_modules/@noodle-borg/service/dist/oauth/tokens.js +1 -1
  133. package/node_modules/@noodle-borg/service/dist/oauth/tokens.js.map +1 -1
  134. package/node_modules/@noodle-borg/service/dist/oauth/upstream-callback-availability.d.ts +4 -0
  135. package/node_modules/@noodle-borg/service/dist/oauth/upstream-callback-availability.d.ts.map +1 -0
  136. package/node_modules/@noodle-borg/service/dist/oauth/upstream-callback-availability.js +8 -0
  137. package/node_modules/@noodle-borg/service/dist/oauth/upstream-callback-availability.js.map +1 -0
  138. package/node_modules/@noodle-borg/service/dist/oauth/upstream-callback-handler.d.ts +34 -0
  139. package/node_modules/@noodle-borg/service/dist/oauth/upstream-callback-handler.d.ts.map +1 -0
  140. package/node_modules/@noodle-borg/service/dist/oauth/upstream-callback-handler.js +109 -0
  141. package/node_modules/@noodle-borg/service/dist/oauth/upstream-callback-handler.js.map +1 -0
  142. package/node_modules/@noodle-borg/service/dist/oauth/upstream-callback-support.d.ts +22 -0
  143. package/node_modules/@noodle-borg/service/dist/oauth/upstream-callback-support.d.ts.map +1 -0
  144. package/node_modules/@noodle-borg/service/dist/oauth/upstream-callback-support.js +30 -0
  145. package/node_modules/@noodle-borg/service/dist/oauth/upstream-callback-support.js.map +1 -0
  146. package/node_modules/@noodle-borg/service/dist/oauth/upstream-consent.d.ts +21 -0
  147. package/node_modules/@noodle-borg/service/dist/oauth/upstream-consent.d.ts.map +1 -0
  148. package/node_modules/@noodle-borg/service/dist/oauth/upstream-consent.js +56 -0
  149. package/node_modules/@noodle-borg/service/dist/oauth/upstream-consent.js.map +1 -0
  150. package/node_modules/@noodle-borg/service/dist/oauth/upstream-federation.d.ts +30 -0
  151. package/node_modules/@noodle-borg/service/dist/oauth/upstream-federation.d.ts.map +1 -0
  152. package/node_modules/@noodle-borg/service/dist/oauth/upstream-federation.js +94 -0
  153. package/node_modules/@noodle-borg/service/dist/oauth/upstream-federation.js.map +1 -0
  154. package/node_modules/@noodle-borg/service/dist/oauth/upstream-human.d.ts +33 -0
  155. package/node_modules/@noodle-borg/service/dist/oauth/upstream-human.d.ts.map +1 -0
  156. package/node_modules/@noodle-borg/service/dist/oauth/upstream-human.js +27 -0
  157. package/node_modules/@noodle-borg/service/dist/oauth/upstream-human.js.map +1 -0
  158. package/node_modules/@noodle-borg/service/dist/oauth/upstream-provider-choice.d.ts +13 -0
  159. package/node_modules/@noodle-borg/service/dist/oauth/upstream-provider-choice.d.ts.map +1 -0
  160. package/node_modules/@noodle-borg/service/dist/oauth/upstream-provider-choice.js +63 -0
  161. package/node_modules/@noodle-borg/service/dist/oauth/upstream-provider-choice.js.map +1 -0
  162. package/node_modules/@noodle-borg/service/dist/oauth/upstream-rollout-store.d.ts +20 -0
  163. package/node_modules/@noodle-borg/service/dist/oauth/upstream-rollout-store.d.ts.map +1 -0
  164. package/node_modules/@noodle-borg/service/dist/oauth/upstream-rollout-store.js +40 -0
  165. package/node_modules/@noodle-borg/service/dist/oauth/upstream-rollout-store.js.map +1 -0
  166. package/node_modules/@noodle-borg/service/dist/oauth/workos-events.d.ts +115 -0
  167. package/node_modules/@noodle-borg/service/dist/oauth/workos-events.d.ts.map +1 -0
  168. package/node_modules/@noodle-borg/service/dist/oauth/workos-events.js +310 -0
  169. package/node_modules/@noodle-borg/service/dist/oauth/workos-events.js.map +1 -0
  170. package/node_modules/@noodle-borg/service/dist/oauth/workos.d.ts +65 -0
  171. package/node_modules/@noodle-borg/service/dist/oauth/workos.d.ts.map +1 -0
  172. package/node_modules/@noodle-borg/service/dist/oauth/workos.js +85 -0
  173. package/node_modules/@noodle-borg/service/dist/oauth/workos.js.map +1 -0
  174. package/node_modules/@noodle-borg/service/dist/options.d.ts +11 -2
  175. package/node_modules/@noodle-borg/service/dist/options.d.ts.map +1 -1
  176. package/node_modules/@noodle-borg/service/dist/personal-workspace.d.ts +2 -0
  177. package/node_modules/@noodle-borg/service/dist/personal-workspace.d.ts.map +1 -1
  178. package/node_modules/@noodle-borg/service/dist/personal-workspace.js +8 -2
  179. package/node_modules/@noodle-borg/service/dist/personal-workspace.js.map +1 -1
  180. package/node_modules/@noodle-borg/service/dist/platform-auth-configuration.d.ts +67 -0
  181. package/node_modules/@noodle-borg/service/dist/platform-auth-configuration.d.ts.map +1 -0
  182. package/node_modules/@noodle-borg/service/dist/platform-auth-configuration.js +54 -0
  183. package/node_modules/@noodle-borg/service/dist/platform-auth-configuration.js.map +1 -0
  184. package/node_modules/@noodle-borg/service/dist/platform-auth-frozen-candidate-postgres.d.ts +25 -0
  185. package/node_modules/@noodle-borg/service/dist/platform-auth-frozen-candidate-postgres.d.ts.map +1 -0
  186. package/node_modules/@noodle-borg/service/dist/platform-auth-frozen-candidate-postgres.js +61 -0
  187. package/node_modules/@noodle-borg/service/dist/platform-auth-frozen-candidate-postgres.js.map +1 -0
  188. package/node_modules/@noodle-borg/service/dist/platform-auth-inventory-legacy-sources-postgres.d.ts +32 -0
  189. package/node_modules/@noodle-borg/service/dist/platform-auth-inventory-legacy-sources-postgres.d.ts.map +1 -0
  190. package/node_modules/@noodle-borg/service/dist/platform-auth-inventory-legacy-sources-postgres.js +231 -0
  191. package/node_modules/@noodle-borg/service/dist/platform-auth-inventory-legacy-sources-postgres.js.map +1 -0
  192. package/node_modules/@noodle-borg/service/dist/platform-auth-inventory-local-postgres.d.ts +29 -0
  193. package/node_modules/@noodle-borg/service/dist/platform-auth-inventory-local-postgres.d.ts.map +1 -0
  194. package/node_modules/@noodle-borg/service/dist/platform-auth-inventory-local-postgres.js +350 -0
  195. package/node_modules/@noodle-borg/service/dist/platform-auth-inventory-local-postgres.js.map +1 -0
  196. package/node_modules/@noodle-borg/service/dist/platform-auth-inventory-local-subjects-postgres.d.ts +50 -0
  197. package/node_modules/@noodle-borg/service/dist/platform-auth-inventory-local-subjects-postgres.d.ts.map +1 -0
  198. package/node_modules/@noodle-borg/service/dist/platform-auth-inventory-local-subjects-postgres.js +239 -0
  199. package/node_modules/@noodle-borg/service/dist/platform-auth-inventory-local-subjects-postgres.js.map +1 -0
  200. package/node_modules/@noodle-borg/service/dist/platform-auth-inventory-paging.d.ts +66 -0
  201. package/node_modules/@noodle-borg/service/dist/platform-auth-inventory-paging.d.ts.map +1 -0
  202. package/node_modules/@noodle-borg/service/dist/platform-auth-inventory-paging.js +77 -0
  203. package/node_modules/@noodle-borg/service/dist/platform-auth-inventory-paging.js.map +1 -0
  204. package/node_modules/@noodle-borg/service/dist/platform-auth-inventory-postgres.d.ts +40 -0
  205. package/node_modules/@noodle-borg/service/dist/platform-auth-inventory-postgres.d.ts.map +1 -0
  206. package/node_modules/@noodle-borg/service/dist/platform-auth-inventory-postgres.js +355 -0
  207. package/node_modules/@noodle-borg/service/dist/platform-auth-inventory-postgres.js.map +1 -0
  208. package/node_modules/@noodle-borg/service/dist/platform-auth-inventory-progress-postgres.d.ts +41 -0
  209. package/node_modules/@noodle-borg/service/dist/platform-auth-inventory-progress-postgres.d.ts.map +1 -0
  210. package/node_modules/@noodle-borg/service/dist/platform-auth-inventory-progress-postgres.js +230 -0
  211. package/node_modules/@noodle-borg/service/dist/platform-auth-inventory-progress-postgres.js.map +1 -0
  212. package/node_modules/@noodle-borg/service/dist/platform-auth-inventory-source-fence-postgres.d.ts +20 -0
  213. package/node_modules/@noodle-borg/service/dist/platform-auth-inventory-source-fence-postgres.d.ts.map +1 -0
  214. package/node_modules/@noodle-borg/service/dist/platform-auth-inventory-source-fence-postgres.js +126 -0
  215. package/node_modules/@noodle-borg/service/dist/platform-auth-inventory-source-fence-postgres.js.map +1 -0
  216. package/node_modules/@noodle-borg/service/dist/platform-auth-inventory-sources.d.ts +8 -0
  217. package/node_modules/@noodle-borg/service/dist/platform-auth-inventory-sources.d.ts.map +1 -0
  218. package/node_modules/@noodle-borg/service/dist/platform-auth-inventory-sources.js +86 -0
  219. package/node_modules/@noodle-borg/service/dist/platform-auth-inventory-sources.js.map +1 -0
  220. package/node_modules/@noodle-borg/service/dist/platform-auth-migration-postgres.d.ts +42 -0
  221. package/node_modules/@noodle-borg/service/dist/platform-auth-migration-postgres.d.ts.map +1 -0
  222. package/node_modules/@noodle-borg/service/dist/platform-auth-migration-postgres.js +368 -0
  223. package/node_modules/@noodle-borg/service/dist/platform-auth-migration-postgres.js.map +1 -0
  224. package/node_modules/@noodle-borg/service/dist/platform-auth-migration-runs-postgres.d.ts +86 -0
  225. package/node_modules/@noodle-borg/service/dist/platform-auth-migration-runs-postgres.d.ts.map +1 -0
  226. package/node_modules/@noodle-borg/service/dist/platform-auth-migration-runs-postgres.js +474 -0
  227. package/node_modules/@noodle-borg/service/dist/platform-auth-migration-runs-postgres.js.map +1 -0
  228. package/node_modules/@noodle-borg/service/dist/platform-auth-migration-schema.d.ts +17 -0
  229. package/node_modules/@noodle-borg/service/dist/platform-auth-migration-schema.d.ts.map +1 -0
  230. package/node_modules/@noodle-borg/service/dist/platform-auth-migration-schema.js +435 -0
  231. package/node_modules/@noodle-borg/service/dist/platform-auth-migration-schema.js.map +1 -0
  232. package/node_modules/@noodle-borg/service/dist/platform-auth-migration.d.ts +202 -0
  233. package/node_modules/@noodle-borg/service/dist/platform-auth-migration.d.ts.map +1 -0
  234. package/node_modules/@noodle-borg/service/dist/platform-auth-migration.js +313 -0
  235. package/node_modules/@noodle-borg/service/dist/platform-auth-migration.js.map +1 -0
  236. package/node_modules/@noodle-borg/service/dist/platform-auth-operator-batches.d.ts +48 -0
  237. package/node_modules/@noodle-borg/service/dist/platform-auth-operator-batches.d.ts.map +1 -0
  238. package/node_modules/@noodle-borg/service/dist/platform-auth-operator-batches.js +158 -0
  239. package/node_modules/@noodle-borg/service/dist/platform-auth-operator-batches.js.map +1 -0
  240. package/node_modules/@noodle-borg/service/dist/platform-auth-operator-effects.d.ts +43 -0
  241. package/node_modules/@noodle-borg/service/dist/platform-auth-operator-effects.d.ts.map +1 -0
  242. package/node_modules/@noodle-borg/service/dist/platform-auth-operator-effects.js +92 -0
  243. package/node_modules/@noodle-borg/service/dist/platform-auth-operator-effects.js.map +1 -0
  244. package/node_modules/@noodle-borg/service/dist/platform-auth-operator-operation-postgres.d.ts +31 -0
  245. package/node_modules/@noodle-borg/service/dist/platform-auth-operator-operation-postgres.d.ts.map +1 -0
  246. package/node_modules/@noodle-borg/service/dist/platform-auth-operator-operation-postgres.js +94 -0
  247. package/node_modules/@noodle-borg/service/dist/platform-auth-operator-operation-postgres.js.map +1 -0
  248. package/node_modules/@noodle-borg/service/dist/platform-auth-operator-ports.d.ts +102 -0
  249. package/node_modules/@noodle-borg/service/dist/platform-auth-operator-ports.d.ts.map +1 -0
  250. package/node_modules/@noodle-borg/service/dist/platform-auth-operator-ports.js +2 -0
  251. package/node_modules/@noodle-borg/service/dist/platform-auth-operator-ports.js.map +1 -0
  252. package/node_modules/@noodle-borg/service/dist/platform-auth-operator-postgres.d.ts +17 -0
  253. package/node_modules/@noodle-borg/service/dist/platform-auth-operator-postgres.d.ts.map +1 -0
  254. package/node_modules/@noodle-borg/service/dist/platform-auth-operator-postgres.js +367 -0
  255. package/node_modules/@noodle-borg/service/dist/platform-auth-operator-postgres.js.map +1 -0
  256. package/node_modules/@noodle-borg/service/dist/platform-auth-operator-remote-status.d.ts +10 -0
  257. package/node_modules/@noodle-borg/service/dist/platform-auth-operator-remote-status.d.ts.map +1 -0
  258. package/node_modules/@noodle-borg/service/dist/platform-auth-operator-remote-status.js +37 -0
  259. package/node_modules/@noodle-borg/service/dist/platform-auth-operator-remote-status.js.map +1 -0
  260. package/node_modules/@noodle-borg/service/dist/platform-auth-operator-rollout.d.ts +36 -0
  261. package/node_modules/@noodle-borg/service/dist/platform-auth-operator-rollout.d.ts.map +1 -0
  262. package/node_modules/@noodle-borg/service/dist/platform-auth-operator-rollout.js +156 -0
  263. package/node_modules/@noodle-borg/service/dist/platform-auth-operator-rollout.js.map +1 -0
  264. package/node_modules/@noodle-borg/service/dist/platform-auth-operator-schema.d.ts +4 -0
  265. package/node_modules/@noodle-borg/service/dist/platform-auth-operator-schema.d.ts.map +1 -0
  266. package/node_modules/@noodle-borg/service/dist/platform-auth-operator-schema.js +162 -0
  267. package/node_modules/@noodle-borg/service/dist/platform-auth-operator-schema.js.map +1 -0
  268. package/node_modules/@noodle-borg/service/dist/platform-auth-operator-state-postgres.d.ts +92 -0
  269. package/node_modules/@noodle-borg/service/dist/platform-auth-operator-state-postgres.d.ts.map +1 -0
  270. package/node_modules/@noodle-borg/service/dist/platform-auth-operator-state-postgres.js +271 -0
  271. package/node_modules/@noodle-borg/service/dist/platform-auth-operator-state-postgres.js.map +1 -0
  272. package/node_modules/@noodle-borg/service/dist/platform-auth-operator-state-support.d.ts +13 -0
  273. package/node_modules/@noodle-borg/service/dist/platform-auth-operator-state-support.d.ts.map +1 -0
  274. package/node_modules/@noodle-borg/service/dist/platform-auth-operator-state-support.js +67 -0
  275. package/node_modules/@noodle-borg/service/dist/platform-auth-operator-state-support.js.map +1 -0
  276. package/node_modules/@noodle-borg/service/dist/platform-auth-operator-support.d.ts +15 -0
  277. package/node_modules/@noodle-borg/service/dist/platform-auth-operator-support.d.ts.map +1 -0
  278. package/node_modules/@noodle-borg/service/dist/platform-auth-operator-support.js +47 -0
  279. package/node_modules/@noodle-borg/service/dist/platform-auth-operator-support.js.map +1 -0
  280. package/node_modules/@noodle-borg/service/dist/platform-auth-operator.d.ts +1569 -0
  281. package/node_modules/@noodle-borg/service/dist/platform-auth-operator.d.ts.map +1 -0
  282. package/node_modules/@noodle-borg/service/dist/platform-auth-operator.js +274 -0
  283. package/node_modules/@noodle-borg/service/dist/platform-auth-operator.js.map +1 -0
  284. package/node_modules/@noodle-borg/service/dist/platform-auth-remote-verification-postgres-support.d.ts +41 -0
  285. package/node_modules/@noodle-borg/service/dist/platform-auth-remote-verification-postgres-support.d.ts.map +1 -0
  286. package/node_modules/@noodle-borg/service/dist/platform-auth-remote-verification-postgres-support.js +163 -0
  287. package/node_modules/@noodle-borg/service/dist/platform-auth-remote-verification-postgres-support.js.map +1 -0
  288. package/node_modules/@noodle-borg/service/dist/platform-auth-remote-verification-postgres.d.ts +34 -0
  289. package/node_modules/@noodle-borg/service/dist/platform-auth-remote-verification-postgres.d.ts.map +1 -0
  290. package/node_modules/@noodle-borg/service/dist/platform-auth-remote-verification-postgres.js +274 -0
  291. package/node_modules/@noodle-borg/service/dist/platform-auth-remote-verification-postgres.js.map +1 -0
  292. package/node_modules/@noodle-borg/service/dist/platform-auth-remote-verification-schema.d.ts +3 -0
  293. package/node_modules/@noodle-borg/service/dist/platform-auth-remote-verification-schema.d.ts.map +1 -0
  294. package/node_modules/@noodle-borg/service/dist/platform-auth-remote-verification-schema.js +120 -0
  295. package/node_modules/@noodle-borg/service/dist/platform-auth-remote-verification-schema.js.map +1 -0
  296. package/node_modules/@noodle-borg/service/dist/platform-auth-remote-verification.d.ts +79 -0
  297. package/node_modules/@noodle-borg/service/dist/platform-auth-remote-verification.d.ts.map +1 -0
  298. package/node_modules/@noodle-borg/service/dist/platform-auth-remote-verification.js +88 -0
  299. package/node_modules/@noodle-borg/service/dist/platform-auth-remote-verification.js.map +1 -0
  300. package/node_modules/@noodle-borg/service/dist/platform-auth-rollback-guard.d.ts +6 -0
  301. package/node_modules/@noodle-borg/service/dist/platform-auth-rollback-guard.d.ts.map +1 -0
  302. package/node_modules/@noodle-borg/service/dist/platform-auth-rollback-guard.js +38 -0
  303. package/node_modules/@noodle-borg/service/dist/platform-auth-rollback-guard.js.map +1 -0
  304. package/node_modules/@noodle-borg/service/dist/platform-auth-rollout-postgres.d.ts +61 -0
  305. package/node_modules/@noodle-borg/service/dist/platform-auth-rollout-postgres.d.ts.map +1 -0
  306. package/node_modules/@noodle-borg/service/dist/platform-auth-rollout-postgres.js +292 -0
  307. package/node_modules/@noodle-borg/service/dist/platform-auth-rollout-postgres.js.map +1 -0
  308. package/node_modules/@noodle-borg/service/dist/platform-auth-rollout-readiness-postgres.d.ts +19 -0
  309. package/node_modules/@noodle-borg/service/dist/platform-auth-rollout-readiness-postgres.d.ts.map +1 -0
  310. package/node_modules/@noodle-borg/service/dist/platform-auth-rollout-readiness-postgres.js +121 -0
  311. package/node_modules/@noodle-borg/service/dist/platform-auth-rollout-readiness-postgres.js.map +1 -0
  312. package/node_modules/@noodle-borg/service/dist/platform-auth-rollout-support.d.ts +119 -0
  313. package/node_modules/@noodle-borg/service/dist/platform-auth-rollout-support.d.ts.map +1 -0
  314. package/node_modules/@noodle-borg/service/dist/platform-auth-rollout-support.js +194 -0
  315. package/node_modules/@noodle-borg/service/dist/platform-auth-rollout-support.js.map +1 -0
  316. package/node_modules/@noodle-borg/service/dist/platform-auth-runtime.d.ts +36 -0
  317. package/node_modules/@noodle-borg/service/dist/platform-auth-runtime.d.ts.map +1 -0
  318. package/node_modules/@noodle-borg/service/dist/platform-auth-runtime.js +93 -0
  319. package/node_modules/@noodle-borg/service/dist/platform-auth-runtime.js.map +1 -0
  320. package/node_modules/@noodle-borg/service/dist/platform-auth-service-bootstrap.d.ts +32 -0
  321. package/node_modules/@noodle-borg/service/dist/platform-auth-service-bootstrap.d.ts.map +1 -0
  322. package/node_modules/@noodle-borg/service/dist/platform-auth-service-bootstrap.js +68 -0
  323. package/node_modules/@noodle-borg/service/dist/platform-auth-service-bootstrap.js.map +1 -0
  324. package/node_modules/@noodle-borg/service/dist/platform-identity-maintenance.d.ts +36 -0
  325. package/node_modules/@noodle-borg/service/dist/platform-identity-maintenance.d.ts.map +1 -0
  326. package/node_modules/@noodle-borg/service/dist/platform-identity-maintenance.js +92 -0
  327. package/node_modules/@noodle-borg/service/dist/platform-identity-maintenance.js.map +1 -0
  328. package/node_modules/@noodle-borg/service/dist/platform-identity-postgres.d.ts +23 -0
  329. package/node_modules/@noodle-borg/service/dist/platform-identity-postgres.d.ts.map +1 -0
  330. package/node_modules/@noodle-borg/service/dist/platform-identity-postgres.js +231 -0
  331. package/node_modules/@noodle-borg/service/dist/platform-identity-postgres.js.map +1 -0
  332. package/node_modules/@noodle-borg/service/dist/platform-identity-schema-postgres.d.ts +13 -0
  333. package/node_modules/@noodle-borg/service/dist/platform-identity-schema-postgres.d.ts.map +1 -0
  334. package/node_modules/@noodle-borg/service/dist/platform-identity-schema-postgres.js +399 -0
  335. package/node_modules/@noodle-borg/service/dist/platform-identity-schema-postgres.js.map +1 -0
  336. package/node_modules/@noodle-borg/service/dist/platform-identity-sync-enqueue.d.ts +18 -0
  337. package/node_modules/@noodle-borg/service/dist/platform-identity-sync-enqueue.d.ts.map +1 -0
  338. package/node_modules/@noodle-borg/service/dist/platform-identity-sync-enqueue.js +25 -0
  339. package/node_modules/@noodle-borg/service/dist/platform-identity-sync-enqueue.js.map +1 -0
  340. package/node_modules/@noodle-borg/service/dist/platform-identity-sync-evidence-postgres.d.ts +15 -0
  341. package/node_modules/@noodle-borg/service/dist/platform-identity-sync-evidence-postgres.d.ts.map +1 -0
  342. package/node_modules/@noodle-borg/service/dist/platform-identity-sync-evidence-postgres.js +74 -0
  343. package/node_modules/@noodle-borg/service/dist/platform-identity-sync-evidence-postgres.js.map +1 -0
  344. package/node_modules/@noodle-borg/service/dist/platform-identity-sync-postgres.d.ts +19 -0
  345. package/node_modules/@noodle-borg/service/dist/platform-identity-sync-postgres.d.ts.map +1 -0
  346. package/node_modules/@noodle-borg/service/dist/platform-identity-sync-postgres.js +249 -0
  347. package/node_modules/@noodle-borg/service/dist/platform-identity-sync-postgres.js.map +1 -0
  348. package/node_modules/@noodle-borg/service/dist/platform-identity-sync-recovery-postgres.d.ts +34 -0
  349. package/node_modules/@noodle-borg/service/dist/platform-identity-sync-recovery-postgres.d.ts.map +1 -0
  350. package/node_modules/@noodle-borg/service/dist/platform-identity-sync-recovery-postgres.js +275 -0
  351. package/node_modules/@noodle-borg/service/dist/platform-identity-sync-recovery-postgres.js.map +1 -0
  352. package/node_modules/@noodle-borg/service/dist/platform-identity-sync.d.ts +98 -0
  353. package/node_modules/@noodle-borg/service/dist/platform-identity-sync.d.ts.map +1 -0
  354. package/node_modules/@noodle-borg/service/dist/platform-identity-sync.js +179 -0
  355. package/node_modules/@noodle-borg/service/dist/platform-identity-sync.js.map +1 -0
  356. package/node_modules/@noodle-borg/service/dist/platform-identity.d.ts +110 -0
  357. package/node_modules/@noodle-borg/service/dist/platform-identity.d.ts.map +1 -0
  358. package/node_modules/@noodle-borg/service/dist/platform-identity.js +312 -0
  359. package/node_modules/@noodle-borg/service/dist/platform-identity.js.map +1 -0
  360. package/node_modules/@noodle-borg/service/dist/routes/auth-discovery.d.ts +6 -0
  361. package/node_modules/@noodle-borg/service/dist/routes/auth-discovery.d.ts.map +1 -0
  362. package/node_modules/@noodle-borg/service/dist/routes/auth-discovery.js +36 -0
  363. package/node_modules/@noodle-borg/service/dist/routes/auth-discovery.js.map +1 -0
  364. package/node_modules/@noodle-borg/service/dist/routes/billing-read.d.ts.map +1 -1
  365. package/node_modules/@noodle-borg/service/dist/routes/billing-read.js +3 -9
  366. package/node_modules/@noodle-borg/service/dist/routes/billing-read.js.map +1 -1
  367. package/node_modules/@noodle-borg/service/dist/routes/billing-stripe.d.ts.map +1 -1
  368. package/node_modules/@noodle-borg/service/dist/routes/billing-stripe.js +3 -3
  369. package/node_modules/@noodle-borg/service/dist/routes/billing-stripe.js.map +1 -1
  370. package/node_modules/@noodle-borg/service/dist/routes/github-run-claim.d.ts.map +1 -1
  371. package/node_modules/@noodle-borg/service/dist/routes/github-run-claim.js +3 -1
  372. package/node_modules/@noodle-borg/service/dist/routes/github-run-claim.js.map +1 -1
  373. package/node_modules/@noodle-borg/service/dist/routes/platform-auth-migration-dispatch.d.ts +8 -0
  374. package/node_modules/@noodle-borg/service/dist/routes/platform-auth-migration-dispatch.d.ts.map +1 -0
  375. package/node_modules/@noodle-borg/service/dist/routes/platform-auth-migration-dispatch.js +40 -0
  376. package/node_modules/@noodle-borg/service/dist/routes/platform-auth-migration-dispatch.js.map +1 -0
  377. package/node_modules/@noodle-borg/service/dist/routes/platform-auth-migration.d.ts +13 -0
  378. package/node_modules/@noodle-borg/service/dist/routes/platform-auth-migration.d.ts.map +1 -0
  379. package/node_modules/@noodle-borg/service/dist/routes/platform-auth-migration.js +158 -0
  380. package/node_modules/@noodle-borg/service/dist/routes/platform-auth-migration.js.map +1 -0
  381. package/node_modules/@noodle-borg/service/dist/serve-options.d.ts +21 -3
  382. package/node_modules/@noodle-borg/service/dist/serve-options.d.ts.map +1 -1
  383. package/node_modules/@noodle-borg/service/dist/serve.d.ts.map +1 -1
  384. package/node_modules/@noodle-borg/service/dist/serve.js +61 -146
  385. package/node_modules/@noodle-borg/service/dist/serve.js.map +1 -1
  386. package/node_modules/@noodle-borg/service/dist/service-resource-cleanup.d.ts +1 -0
  387. package/node_modules/@noodle-borg/service/dist/service-resource-cleanup.d.ts.map +1 -1
  388. package/node_modules/@noodle-borg/service/dist/service-resource-cleanup.js +3 -0
  389. package/node_modules/@noodle-borg/service/dist/service-resource-cleanup.js.map +1 -1
  390. package/node_modules/@noodle-borg/service/dist/service.d.ts.map +1 -1
  391. package/node_modules/@noodle-borg/service/dist/service.js +17 -29
  392. package/node_modules/@noodle-borg/service/dist/service.js.map +1 -1
  393. package/node_modules/@noodle-borg/service/dist/store/control-plane.d.ts.map +1 -1
  394. package/node_modules/@noodle-borg/service/dist/store/control-plane.js +60 -19
  395. package/node_modules/@noodle-borg/service/dist/store/control-plane.js.map +1 -1
  396. package/node_modules/@noodle-borg/service/dist/store/postgres-control-plane.d.ts +1 -2
  397. package/node_modules/@noodle-borg/service/dist/store/postgres-control-plane.d.ts.map +1 -1
  398. package/node_modules/@noodle-borg/service/dist/store/postgres-control-plane.js +0 -40
  399. package/node_modules/@noodle-borg/service/dist/store/postgres-control-plane.js.map +1 -1
  400. package/node_modules/@noodle-borg/service/dist/store/postgres-personal-workspace.d.ts +5 -0
  401. package/node_modules/@noodle-borg/service/dist/store/postgres-personal-workspace.d.ts.map +1 -0
  402. package/node_modules/@noodle-borg/service/dist/store/postgres-personal-workspace.js +176 -0
  403. package/node_modules/@noodle-borg/service/dist/store/postgres-personal-workspace.js.map +1 -0
  404. package/node_modules/@noodle-borg/service/dist/store/postgres-schema.d.ts +2 -0
  405. package/node_modules/@noodle-borg/service/dist/store/postgres-schema.d.ts.map +1 -1
  406. package/node_modules/@noodle-borg/service/dist/store/postgres-schema.js +43 -1
  407. package/node_modules/@noodle-borg/service/dist/store/postgres-schema.js.map +1 -1
  408. package/node_modules/@noodle-borg/service/dist/store/postgres-signup.js +2 -1
  409. package/node_modules/@noodle-borg/service/dist/store/postgres-signup.js.map +1 -1
  410. package/node_modules/@noodle-borg/service/dist/workos-directory.d.ts +71 -0
  411. package/node_modules/@noodle-borg/service/dist/workos-directory.d.ts.map +1 -0
  412. package/node_modules/@noodle-borg/service/dist/workos-directory.js +175 -0
  413. package/node_modules/@noodle-borg/service/dist/workos-directory.js.map +1 -0
  414. package/node_modules/@noodle-borg/service/package.json +1 -0
  415. package/node_modules/@workos-inc/node/LICENSE +21 -0
  416. package/node_modules/@workos-inc/node/README.md +140 -0
  417. package/node_modules/@workos-inc/node/lib/factory-B8vTFojy.d.cts +9727 -0
  418. package/node_modules/@workos-inc/node/lib/factory-B8vTFojy.d.mts +9727 -0
  419. package/node_modules/@workos-inc/node/lib/factory-CoKXdPX2.cjs +8426 -0
  420. package/node_modules/@workos-inc/node/lib/factory-CoKXdPX2.cjs.map +1 -0
  421. package/node_modules/@workos-inc/node/lib/factory-MKPb5Egh.mjs +8241 -0
  422. package/node_modules/@workos-inc/node/lib/factory-MKPb5Egh.mjs.map +1 -0
  423. package/node_modules/@workos-inc/node/lib/index.cjs +449 -0
  424. package/node_modules/@workos-inc/node/lib/index.cjs.map +1 -0
  425. package/node_modules/@workos-inc/node/lib/index.d.cts +478 -0
  426. package/node_modules/@workos-inc/node/lib/index.d.mts +478 -0
  427. package/node_modules/@workos-inc/node/lib/index.mjs +394 -0
  428. package/node_modules/@workos-inc/node/lib/index.mjs.map +1 -0
  429. package/node_modules/@workos-inc/node/lib/index.worker.cjs +60 -0
  430. package/node_modules/@workos-inc/node/lib/index.worker.cjs.map +1 -0
  431. package/node_modules/@workos-inc/node/lib/index.worker.d.cts +16 -0
  432. package/node_modules/@workos-inc/node/lib/index.worker.d.mts +16 -0
  433. package/node_modules/@workos-inc/node/lib/index.worker.mjs +35 -0
  434. package/node_modules/@workos-inc/node/lib/index.worker.mjs.map +1 -0
  435. package/node_modules/@workos-inc/node/lib/webapi-BgpV54gi.mjs +3224 -0
  436. package/node_modules/@workos-inc/node/lib/webapi-BgpV54gi.mjs.map +1 -0
  437. package/node_modules/@workos-inc/node/lib/webapi-BzGFatFp.cjs +3271 -0
  438. package/node_modules/@workos-inc/node/lib/webapi-BzGFatFp.cjs.map +1 -0
  439. package/node_modules/@workos-inc/node/package.json +96 -0
  440. package/package.json +2 -1
@@ -0,0 +1,355 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { PostgresPlatformAuthLegacyInventorySources } from './platform-auth-inventory-legacy-sources-postgres.js';
3
+ import { PostgresPlatformAuthInventoryLocalFreezer } from './platform-auth-inventory-local-postgres.js';
4
+ import { compareInventoryText, completedInventory, inventoryProgress, PLATFORM_AUTH_INVENTORY_REMOTE_PAGE_SIZE, } from './platform-auth-inventory-paging.js';
5
+ import { PostgresPlatformAuthInventoryProgressStore } from './platform-auth-inventory-progress-postgres.js';
6
+ import { PlatformAuthMigrationError, } from './platform-auth-migration.js';
7
+ import { normalizePlatformIdentityEmail } from './platform-identity.js';
8
+ export { PLATFORM_AUTH_INVENTORY_SOURCES, } from './platform-auth-inventory-sources.js';
9
+ /**
10
+ * Authoritative, repeatable-read inventory. Internal frozen rows retain the source universe for later fences;
11
+ * this boundary returns aggregate counts and digests only.
12
+ */
13
+ export class PostgresPlatformAuthInventoryStore {
14
+ #pool;
15
+ #googleRealm;
16
+ #workosRealmFingerprint;
17
+ #loadWorkosUsers;
18
+ #workosPageSource;
19
+ #progressStore;
20
+ #localFreezer;
21
+ #legacySources;
22
+ constructor(pool, options = {}) {
23
+ this.#pool = pool;
24
+ this.#googleRealm = options.googleRealm ?? 'accounts.google.com';
25
+ this.#workosRealmFingerprint = hash(options.workosRealm ?? 'default');
26
+ const workosUsers = options.workosUsers ?? [];
27
+ this.#loadWorkosUsers =
28
+ typeof workosUsers === 'function' ? workosUsers : () => Promise.resolve(workosUsers);
29
+ this.#workosPageSource = options.workosPageSource;
30
+ const excludedSubjects = options.excludedSubjects ?? [];
31
+ this.#progressStore = new PostgresPlatformAuthInventoryProgressStore(pool);
32
+ this.#localFreezer = new PostgresPlatformAuthInventoryLocalFreezer(pool, {
33
+ googleRealm: this.#googleRealm,
34
+ workosRealmFingerprint: this.#workosRealmFingerprint,
35
+ ...(options.sourceAvailability === undefined
36
+ ? {}
37
+ : { sourceAvailability: options.sourceAvailability }),
38
+ excludedSubjects,
39
+ });
40
+ this.#legacySources = new PostgresPlatformAuthLegacyInventorySources({
41
+ googleRealm: this.#googleRealm,
42
+ ...(options.sourceAvailability === undefined
43
+ ? {}
44
+ : { sourceAvailability: options.sourceAvailability }),
45
+ excludedSubjects,
46
+ });
47
+ }
48
+ async inspect(runId) {
49
+ if (this.#workosPageSource !== undefined) {
50
+ const advanced = await this.advance(runId);
51
+ if (advanced.state !== 'completed' || advanced.checksum === null)
52
+ throw new PlatformAuthMigrationError('inventory_unavailable');
53
+ return {
54
+ candidateCount: advanced.candidateCount,
55
+ excludedCount: advanced.excludedCount,
56
+ blockers: advanced.blockers,
57
+ checksum: advanced.checksum,
58
+ };
59
+ }
60
+ return this.#inspectLegacy(runId);
61
+ }
62
+ async advance(runId) {
63
+ if (this.#workosPageSource === undefined) {
64
+ const completed = await this.#inspectLegacy(runId);
65
+ return {
66
+ state: 'completed',
67
+ phase: 'completed',
68
+ remotePages: 0,
69
+ remoteUsers: 0,
70
+ localSubjects: completed.candidateCount + completed.excludedCount,
71
+ candidateCount: completed.candidateCount,
72
+ excludedCount: completed.excludedCount,
73
+ blockers: completed.blockers,
74
+ checksum: completed.checksum,
75
+ };
76
+ }
77
+ await this.#bindPagedRun(runId);
78
+ const completed = await this.#completed(runId);
79
+ if (completed !== undefined)
80
+ return completed;
81
+ let claim;
82
+ try {
83
+ claim = await this.#progressStore.claim(runId);
84
+ }
85
+ catch {
86
+ throw new PlatformAuthMigrationError('inventory_unavailable');
87
+ }
88
+ if (claim.kind === 'terminal')
89
+ throw new PlatformAuthMigrationError('inventory_unavailable');
90
+ if (claim.kind === 'busy')
91
+ return inventoryProgress(claim.progress);
92
+ if (claim.lease.progress.phase === 'local')
93
+ return this.#advanceLocal(runId, claim.lease.token);
94
+ if (claim.lease.progress.phase === 'completed')
95
+ return (await this.#completed(runId)) ?? inventoryProgress(claim.lease.progress);
96
+ const after = claim.lease.progress.remote_after ?? undefined;
97
+ let page;
98
+ try {
99
+ page = await this.#workosPageSource.listPage({
100
+ limit: PLATFORM_AUTH_INVENTORY_REMOTE_PAGE_SIZE,
101
+ ...(after === undefined ? {} : { after }),
102
+ });
103
+ }
104
+ catch {
105
+ await this.#progressStore.release(runId, claim.lease.token).catch(() => undefined);
106
+ throw new PlatformAuthMigrationError('inventory_unavailable');
107
+ }
108
+ let committed;
109
+ try {
110
+ committed = await this.#progressStore.commitRemotePage({
111
+ runId,
112
+ leaseToken: claim.lease.token,
113
+ ...(after === undefined ? {} : { after }),
114
+ users: page.users,
115
+ ...(page.nextAfter === undefined ? {} : { nextAfter: page.nextAfter }),
116
+ });
117
+ }
118
+ catch (error) {
119
+ if (error instanceof Error && error.message === 'invalid_remote_inventory_page')
120
+ await this.#progressStore.markTerminal(runId, claim.lease.token).catch(() => undefined);
121
+ else
122
+ await this.#progressStore.release(runId, claim.lease.token).catch(() => undefined);
123
+ throw new PlatformAuthMigrationError('inventory_unavailable');
124
+ }
125
+ if (committed.terminal)
126
+ throw new PlatformAuthMigrationError('inventory_unavailable');
127
+ if (committed.progress.phase !== 'local')
128
+ return inventoryProgress(committed.progress);
129
+ const localClaim = await this.#progressStore.claim(runId).catch(() => undefined);
130
+ if (localClaim?.kind !== 'leased')
131
+ return inventoryProgress(committed.progress);
132
+ return this.#advanceLocal(runId, localClaim.lease.token);
133
+ }
134
+ async #advanceLocal(runId, leaseToken) {
135
+ try {
136
+ const result = await this.#localFreezer.advance({ runId, leaseToken });
137
+ return inventoryProgress(result.progress, result.checksum);
138
+ }
139
+ catch (error) {
140
+ await this.#progressStore.release(runId, leaseToken).catch(() => undefined);
141
+ if (error instanceof PlatformAuthMigrationError)
142
+ throw error;
143
+ throw new PlatformAuthMigrationError('inventory_unavailable');
144
+ }
145
+ }
146
+ async #completed(runId) {
147
+ const result = await this.#pool.query("SELECT state, frozen_checksum, safe_result FROM identity_migration_runs WHERE id = $1 AND kind = 'inventory'", [runId]);
148
+ const row = result.rows[0];
149
+ if (row?.state !== 'completed')
150
+ return undefined;
151
+ const completed = completedInventory(row.safe_result, row.frozen_checksum);
152
+ const progress = await this.#progressStore.read(runId);
153
+ return progress === undefined
154
+ ? {
155
+ state: 'completed',
156
+ phase: 'completed',
157
+ remotePages: 0,
158
+ remoteUsers: 0,
159
+ localSubjects: completed.candidateCount + completed.excludedCount,
160
+ candidateCount: completed.candidateCount,
161
+ excludedCount: completed.excludedCount,
162
+ blockers: completed.blockers,
163
+ checksum: completed.checksum,
164
+ }
165
+ : inventoryProgress(progress, completed.checksum);
166
+ }
167
+ async #bindPagedRun(runId) {
168
+ const current = await this.#pool.query("SELECT state, workos_realm_fingerprint FROM identity_migration_runs WHERE id = $1 AND kind = 'inventory'", [runId]);
169
+ const row = current.rows[0];
170
+ if (row?.workos_realm_fingerprint === this.#workosRealmFingerprint)
171
+ return;
172
+ if (row?.state !== 'running' || row.workos_realm_fingerprint !== null)
173
+ throw new PlatformAuthMigrationError('inventory_unavailable');
174
+ const result = await this.#pool.query(`UPDATE identity_migration_runs SET workos_realm_fingerprint = $2
175
+ WHERE id = $1 AND kind = 'inventory' AND state = 'running'
176
+ AND workos_realm_fingerprint IS NULL
177
+ RETURNING workos_realm_fingerprint`, [runId, this.#workosRealmFingerprint]);
178
+ if (result.rows[0]?.workos_realm_fingerprint !== this.#workosRealmFingerprint)
179
+ throw new PlatformAuthMigrationError('inventory_unavailable');
180
+ }
181
+ async #inspectLegacy(runId) {
182
+ const existing = await this.#pool.query("SELECT state, frozen_checksum, safe_result FROM identity_migration_runs WHERE id = $1 AND kind = 'inventory' AND state IN ('running', 'completed')", [runId]);
183
+ const existingRun = existing.rows[0];
184
+ if (existingRun === undefined)
185
+ throw new PlatformAuthMigrationError('inventory_unavailable');
186
+ if (existingRun.state === 'completed') {
187
+ return completedInventory(existingRun.safe_result, existingRun.frozen_checksum);
188
+ }
189
+ let workosUsers;
190
+ try {
191
+ workosUsers = await this.#loadWorkosUsers();
192
+ }
193
+ catch {
194
+ throw new PlatformAuthMigrationError('inventory_unavailable');
195
+ }
196
+ // Build the remote lookup once. A migration may legitimately approach the documented
197
+ // 200,000-user coordination threshold, so scanning the complete WorkOS snapshot once per
198
+ // candidate would turn inventory into an accidental O(local users x remote users) operation.
199
+ const workosIndex = indexWorkosUsers(workosUsers);
200
+ const workosSnapshotFingerprint = hash(workosIndex.fingerprintRows);
201
+ const connection = this.#pool.connect === undefined ? this.#pool : await this.#pool.connect();
202
+ try {
203
+ await connection.query('BEGIN ISOLATION LEVEL REPEATABLE READ');
204
+ await connection.query('SELECT pg_advisory_xact_lock(hashtextextended($1, 0))', [
205
+ 'platform-auth-inventory:v1',
206
+ ]);
207
+ const run = await connection.query("SELECT id, state, frozen_checksum, safe_result FROM identity_migration_runs WHERE id = $1 AND kind = 'inventory' AND state IN ('running', 'completed') FOR UPDATE", [runId]);
208
+ const runRow = run.rows[0];
209
+ if (runRow === undefined)
210
+ throw new PlatformAuthMigrationError('inventory_unavailable');
211
+ if (runRow.state === 'completed') {
212
+ const safe = completedInventory(runRow.safe_result, runRow.frozen_checksum);
213
+ await connection.query('COMMIT');
214
+ return safe;
215
+ }
216
+ await this.#legacySources.assertManifest(connection);
217
+ const discovered = await this.#legacySources.discover(connection);
218
+ const sources = discovered.sources;
219
+ const emails = await this.#legacySources.emails(connection, [...sources.values()]);
220
+ const emailOwners = await this.#legacySources.emailOwners(connection);
221
+ const blockers = {};
222
+ const checksumEntries = [];
223
+ for (const source of [...sources.values()].sort((a, b) => compareInventoryText(a.subject, b.subject))) {
224
+ const currentEmails = [...new Set(emails.get(source.subject) ?? [])].sort(compareInventoryText);
225
+ const codes = [];
226
+ if (source.identityDrift || source.excludedEvidence)
227
+ codes.push('ambiguous_platform_customer_evidence');
228
+ if (currentEmails.length === 0)
229
+ codes.push('missing_verified_email');
230
+ if (currentEmails.length > 1)
231
+ codes.push('multiple_current_verified_emails');
232
+ if (source.subject.length > 64)
233
+ codes.push('external_id_too_long');
234
+ if (currentEmails.some((email) => (emailOwners.get(email)?.size ?? 0) > 1))
235
+ codes.push('shared_verified_email');
236
+ if (currentEmails.some((email) => workosConflict(workosIndex, source.subject, email)))
237
+ codes.push('conflicting_workos_user');
238
+ for (const code of codes)
239
+ blockers[code] = (blockers[code] ?? 0) + 1;
240
+ const provenance = [...source.provenance].sort();
241
+ const sourceFingerprint = hash({
242
+ subject: source.subject,
243
+ realm: source.realm,
244
+ provenance,
245
+ });
246
+ const email = currentEmails.length === 1 ? currentEmails[0] : undefined;
247
+ const candidateFingerprint = hash({
248
+ sourceFingerprint,
249
+ principalFingerprint: source.principalId === undefined ? undefined : hash(source.principalId),
250
+ emailFingerprint: email === undefined ? undefined : hash(email),
251
+ provenance,
252
+ blockerCodes: codes,
253
+ });
254
+ await connection.query(`INSERT INTO platform_auth_inventory_candidates
255
+ (migration_run_id, source_subject, source_realm, principal_id, normalized_email, email_fingerprint, provenance, blocker_codes, source_fingerprint, candidate_fingerprint)
256
+ VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)
257
+ ON CONFLICT (migration_run_id, source_subject) DO NOTHING`, [
258
+ runId,
259
+ source.subject,
260
+ source.realm ?? this.#googleRealm,
261
+ source.principalId ?? null,
262
+ email ?? null,
263
+ email === undefined ? null : hash(email),
264
+ provenance,
265
+ codes,
266
+ sourceFingerprint,
267
+ candidateFingerprint,
268
+ ]);
269
+ checksumEntries.push({
270
+ sourceFingerprint,
271
+ emailFingerprint: email === undefined ? undefined : hash(email),
272
+ provenance,
273
+ blockerCodes: codes,
274
+ candidateFingerprint,
275
+ });
276
+ }
277
+ const safe = {
278
+ candidateCount: sources.size,
279
+ excludedCount: discovered.excludedCount,
280
+ blockers,
281
+ };
282
+ // The existing opaque evidence column now commits to both excluded actors and the complete remote
283
+ // snapshot. Downstream lineage recomputes the inventory checksum from this frozen digest without
284
+ // retaining provider identifiers or emails.
285
+ const inventoryEvidenceFingerprint = hash({
286
+ excluded: discovered.excludedFingerprint,
287
+ workosSnapshot: workosSnapshotFingerprint,
288
+ });
289
+ const checksum = hash({
290
+ algorithm: 'inventory-v1',
291
+ googleRealm: this.#googleRealm,
292
+ workosRealm: this.#workosRealmFingerprint,
293
+ safe,
294
+ excludedFingerprint: inventoryEvidenceFingerprint,
295
+ candidates: checksumEntries,
296
+ });
297
+ const completed = await connection.query(`UPDATE identity_migration_runs
298
+ SET frozen_checksum = $2, source_fingerprint = $3, excluded_fingerprint = $4,
299
+ workos_realm_fingerprint = $5, google_realm = $6,
300
+ inventory_format = 'v1', safe_result = $7, state = 'completed', completed_at = now()
301
+ WHERE id = $1 AND state = 'running' RETURNING id`, [
302
+ runId,
303
+ checksum,
304
+ hash(checksumEntries),
305
+ inventoryEvidenceFingerprint,
306
+ this.#workosRealmFingerprint,
307
+ this.#googleRealm,
308
+ JSON.stringify(safe),
309
+ ]);
310
+ if (completed.rows[0] === undefined)
311
+ throw new PlatformAuthMigrationError('inventory_unavailable');
312
+ await connection.query('COMMIT');
313
+ return { ...safe, checksum };
314
+ }
315
+ catch (error) {
316
+ await connection.query('ROLLBACK').catch(() => undefined);
317
+ throw error;
318
+ }
319
+ finally {
320
+ connection.release?.();
321
+ }
322
+ }
323
+ }
324
+ function indexWorkosUsers(users) {
325
+ const byEmail = new Map();
326
+ const byExternalId = new Map();
327
+ const fingerprintRows = users.map((user) => {
328
+ const normalizedEmail = normalizePlatformIdentityEmail(user.normalizedEmail);
329
+ const normalized = { ...user, normalizedEmail };
330
+ const emailUsers = byEmail.get(normalizedEmail) ?? [];
331
+ emailUsers.push(normalized);
332
+ byEmail.set(normalizedEmail, emailUsers);
333
+ if (user.externalId !== undefined) {
334
+ const externalUsers = byExternalId.get(user.externalId) ?? [];
335
+ externalUsers.push(normalized);
336
+ byExternalId.set(user.externalId, externalUsers);
337
+ }
338
+ return { externalId: user.externalId, normalizedEmail, verified: user.verified };
339
+ });
340
+ fingerprintRows.sort((a, b) => compareInventoryText(a.externalId ?? '', b.externalId ?? '') ||
341
+ compareInventoryText(a.normalizedEmail, b.normalizedEmail) ||
342
+ Number(a.verified) - Number(b.verified));
343
+ return { byEmail, byExternalId, fingerprintRows };
344
+ }
345
+ function workosConflict(index, subject, email) {
346
+ const matches = index.byEmail.get(email) ?? [];
347
+ const externalMatches = index.byExternalId.get(subject) ?? [];
348
+ return (matches.length > 1 ||
349
+ matches.some((user) => !user.verified || user.externalId !== subject) ||
350
+ externalMatches.some((user) => !user.verified || user.normalizedEmail !== email));
351
+ }
352
+ function hash(value) {
353
+ return createHash('sha256').update(JSON.stringify(value)).digest('hex');
354
+ }
355
+ //# sourceMappingURL=platform-auth-inventory-postgres.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform-auth-inventory-postgres.js","sourceRoot":"","sources":["../src/platform-auth-inventory-postgres.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,0CAA0C,EAAE,MAAM,sDAAsD,CAAC;AAClH,OAAO,EAAE,yCAAyC,EAAE,MAAM,6CAA6C,CAAC;AACxG,OAAO,EACL,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,EACjB,wCAAwC,GAGzC,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,0CAA0C,EAAE,MAAM,gDAAgD,CAAC;AAE5G,OAAO,EAGL,0BAA0B,GAC3B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,8BAA8B,EAAE,MAAM,wBAAwB,CAAC;AAOxE,OAAO,EACL,+BAA+B,GAGhC,MAAM,sCAAsC,CAAC;AAI9C;;;GAGG;AACH,MAAM,OAAO,kCAAkC;IACpC,KAAK,CAAO;IACZ,YAAY,CAAS;IACrB,uBAAuB,CAAS;IAChC,gBAAgB,CAAgD;IAChE,iBAAiB,CAA8C;IAC/D,cAAc,CAA6C;IAC3D,aAAa,CAA4C;IACzD,cAAc,CAA6C;IACpE,YACE,IAAU,EACV,UAcI,EAAE;QAEN,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,WAAW,IAAI,qBAAqB,CAAC;QACjE,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,OAAO,CAAC,WAAW,IAAI,SAAS,CAAC,CAAC;QACtE,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC;QAC9C,IAAI,CAAC,gBAAgB;YACnB,OAAO,WAAW,KAAK,UAAU,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACvF,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC;QAClD,MAAM,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,IAAI,EAAE,CAAC;QACxD,IAAI,CAAC,cAAc,GAAG,IAAI,0CAA0C,CAAC,IAAI,CAAC,CAAC;QAC3E,IAAI,CAAC,aAAa,GAAG,IAAI,yCAAyC,CAAC,IAAI,EAAE;YACvE,WAAW,EAAE,IAAI,CAAC,YAAY;YAC9B,sBAAsB,EAAE,IAAI,CAAC,uBAAuB;YACpD,GAAG,CAAC,OAAO,CAAC,kBAAkB,KAAK,SAAS;gBAC1C,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,EAAE,kBAAkB,EAAE,OAAO,CAAC,kBAAkB,EAAE,CAAC;YACvD,gBAAgB;SACjB,CAAC,CAAC;QACH,IAAI,CAAC,cAAc,GAAG,IAAI,0CAA0C,CAAC;YACnE,WAAW,EAAE,IAAI,CAAC,YAAY;YAC9B,GAAG,CAAC,OAAO,CAAC,kBAAkB,KAAK,SAAS;gBAC1C,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,EAAE,kBAAkB,EAAE,OAAO,CAAC,kBAAkB,EAAE,CAAC;YACvD,gBAAgB;SACjB,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,KAAa;QACzB,IAAI,IAAI,CAAC,iBAAiB,KAAK,SAAS,EAAE,CAAC;YACzC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC3C,IAAI,QAAQ,CAAC,KAAK,KAAK,WAAW,IAAI,QAAQ,CAAC,QAAQ,KAAK,IAAI;gBAC9D,MAAM,IAAI,0BAA0B,CAAC,uBAAuB,CAAC,CAAC;YAChE,OAAO;gBACL,cAAc,EAAE,QAAQ,CAAC,cAAc;gBACvC,aAAa,EAAE,QAAQ,CAAC,aAAa;gBACrC,QAAQ,EAAE,QAAQ,CAAC,QAAQ;gBAC3B,QAAQ,EAAE,QAAQ,CAAC,QAAQ;aAC5B,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,KAAa;QACzB,IAAI,IAAI,CAAC,iBAAiB,KAAK,SAAS,EAAE,CAAC;YACzC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YACnD,OAAO;gBACL,KAAK,EAAE,WAAW;gBAClB,KAAK,EAAE,WAAW;gBAClB,WAAW,EAAE,CAAC;gBACd,WAAW,EAAE,CAAC;gBACd,aAAa,EAAE,SAAS,CAAC,cAAc,GAAG,SAAS,CAAC,aAAa;gBACjE,cAAc,EAAE,SAAS,CAAC,cAAc;gBACxC,aAAa,EAAE,SAAS,CAAC,aAAa;gBACtC,QAAQ,EAAE,SAAS,CAAC,QAAQ;gBAC5B,QAAQ,EAAE,SAAS,CAAC,QAAQ;aAC7B,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAChC,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAC/C,IAAI,SAAS,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QAC9C,IAAI,KAA+E,CAAC;QACpF,IAAI,CAAC;YACH,KAAK,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACjD,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,0BAA0B,CAAC,uBAAuB,CAAC,CAAC;QAChE,CAAC;QACD,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU;YAAE,MAAM,IAAI,0BAA0B,CAAC,uBAAuB,CAAC,CAAC;QAC7F,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO,iBAAiB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACpE,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,KAAK,OAAO;YAAE,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAChG,IAAI,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,KAAK,WAAW;YAC5C,OAAO,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,iBAAiB,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACnF,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,IAAI,SAAS,CAAC;QAC7D,IAAI,IAAsE,CAAC;QAC3E,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC;gBAC3C,KAAK,EAAE,wCAAwC;gBAC/C,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;aAC1C,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YACnF,MAAM,IAAI,0BAA0B,CAAC,uBAAuB,CAAC,CAAC;QAChE,CAAC;QACD,IAAI,SAEH,CAAC;QACF,IAAI,CAAC;YACH,SAAS,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,gBAAgB,CAAC;gBACrD,KAAK;gBACL,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK;gBAC7B,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;gBACzC,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,GAAG,CAAC,IAAI,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;aACvE,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,KAAK,+BAA+B;gBAC7E,MAAM,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;;gBACrF,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YACxF,MAAM,IAAI,0BAA0B,CAAC,uBAAuB,CAAC,CAAC;QAChE,CAAC;QACD,IAAI,SAAS,CAAC,QAAQ;YAAE,MAAM,IAAI,0BAA0B,CAAC,uBAAuB,CAAC,CAAC;QACtF,IAAI,SAAS,CAAC,QAAQ,CAAC,KAAK,KAAK,OAAO;YAAE,OAAO,iBAAiB,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QACvF,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACjF,IAAI,UAAU,EAAE,IAAI,KAAK,QAAQ;YAAE,OAAO,iBAAiB,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;QAChF,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC3D,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,KAAa,EAAE,UAAkB;QACnD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC;YACvE,OAAO,iBAAiB,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC7D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YAC5E,IAAI,KAAK,YAAY,0BAA0B;gBAAE,MAAM,KAAK,CAAC;YAC7D,MAAM,IAAI,0BAA0B,CAAC,uBAAuB,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,KAAa;QAC5B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAKnC,8GAA8G,EAC9G,CAAC,KAAK,CAAC,CACR,CAAC;QACF,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3B,IAAI,GAAG,EAAE,KAAK,KAAK,WAAW;YAAE,OAAO,SAAS,CAAC;QACjD,MAAM,SAAS,GAAG,kBAAkB,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,eAAe,CAAC,CAAC;QAC3E,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvD,OAAO,QAAQ,KAAK,SAAS;YAC3B,CAAC,CAAC;gBACE,KAAK,EAAE,WAAW;gBAClB,KAAK,EAAE,WAAW;gBAClB,WAAW,EAAE,CAAC;gBACd,WAAW,EAAE,CAAC;gBACd,aAAa,EAAE,SAAS,CAAC,cAAc,GAAG,SAAS,CAAC,aAAa;gBACjE,cAAc,EAAE,SAAS,CAAC,cAAc;gBACxC,aAAa,EAAE,SAAS,CAAC,aAAa;gBACtC,QAAQ,EAAE,SAAS,CAAC,QAAQ;gBAC5B,QAAQ,EAAE,SAAS,CAAC,QAAQ;aAC7B;YACH,CAAC,CAAC,iBAAiB,CAAC,QAAQ,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;IACtD,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,KAAa;QAC/B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAIpC,0GAA0G,EAC1G,CAAC,KAAK,CAAC,CACR,CAAC;QACF,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5B,IAAI,GAAG,EAAE,wBAAwB,KAAK,IAAI,CAAC,uBAAuB;YAAE,OAAO;QAC3E,IAAI,GAAG,EAAE,KAAK,KAAK,SAAS,IAAI,GAAG,CAAC,wBAAwB,KAAK,IAAI;YACnE,MAAM,IAAI,0BAA0B,CAAC,uBAAuB,CAAC,CAAC;QAChE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CACnC;;;yCAGmC,EACnC,CAAC,KAAK,EAAE,IAAI,CAAC,uBAAuB,CAAC,CACtC,CAAC;QACF,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,wBAAwB,KAAK,IAAI,CAAC,uBAAuB;YAC3E,MAAM,IAAI,0BAA0B,CAAC,uBAAuB,CAAC,CAAC;IAClE,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,KAAa;QAChC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CAKrC,oJAAoJ,EACpJ,CAAC,KAAK,CAAC,CACR,CAAC;QACF,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACrC,IAAI,WAAW,KAAK,SAAS;YAAE,MAAM,IAAI,0BAA0B,CAAC,uBAAuB,CAAC,CAAC;QAC7F,IAAI,WAAW,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;YACtC,OAAO,kBAAkB,CAAC,WAAW,CAAC,WAAW,EAAE,WAAW,CAAC,eAAe,CAAC,CAAC;QAClF,CAAC;QACD,IAAI,WAA2C,CAAC;QAChD,IAAI,CAAC;YACH,WAAW,GAAG,MAAM,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAC9C,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,0BAA0B,CAAC,uBAAuB,CAAC,CAAC;QAChE,CAAC;QACD,qFAAqF;QACrF,yFAAyF;QACzF,6FAA6F;QAC7F,MAAM,WAAW,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;QAClD,MAAM,yBAAyB,GAAG,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;QACpE,MAAM,UAAU,GACd,IAAI,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QAC7E,IAAI,CAAC;YACH,MAAM,UAAU,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;YAChE,MAAM,UAAU,CAAC,KAAK,CAAC,uDAAuD,EAAE;gBAC9E,4BAA4B;aAC7B,CAAC,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,UAAU,CAAC,KAAK,CAMhC,mKAAmK,EACnK,CAAC,KAAK,CAAC,CACR,CAAC;YACF,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC3B,IAAI,MAAM,KAAK,SAAS;gBAAE,MAAM,IAAI,0BAA0B,CAAC,uBAAuB,CAAC,CAAC;YACxF,IAAI,MAAM,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;gBACjC,MAAM,IAAI,GAAG,kBAAkB,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,eAAe,CAAC,CAAC;gBAC5E,MAAM,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBACjC,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;YACrD,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YAClE,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC;YACnC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YACnF,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;YACtE,MAAM,QAAQ,GAAqD,EAAE,CAAC;YACtE,MAAM,eAAe,GAAc,EAAE,CAAC;YACtC,KAAK,MAAM,MAAM,IAAI,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACvD,oBAAoB,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAC3C,EAAE,CAAC;gBACF,MAAM,aAAa,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CACvE,oBAAoB,CACrB,CAAC;gBACF,MAAM,KAAK,GAA8B,EAAE,CAAC;gBAC5C,IAAI,MAAM,CAAC,aAAa,IAAI,MAAM,CAAC,gBAAgB;oBACjD,KAAK,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;gBACrD,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;oBAAE,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;gBACrE,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC;oBAAE,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;gBAC7E,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,EAAE;oBAAE,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;gBACnE,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;oBACxE,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;gBACtC,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,cAAc,CAAC,WAAW,EAAE,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;oBACnF,KAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC;gBACxC,KAAK,MAAM,IAAI,IAAI,KAAK;oBAAE,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBACrE,MAAM,UAAU,GAAG,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC;gBACjD,MAAM,iBAAiB,GAAG,IAAI,CAAC;oBAC7B,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,UAAU;iBACX,CAAC,CAAC;gBACH,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;gBACxE,MAAM,oBAAoB,GAAG,IAAI,CAAC;oBAChC,iBAAiB;oBACjB,oBAAoB,EAClB,MAAM,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;oBACzE,gBAAgB,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;oBAC/D,UAAU;oBACV,YAAY,EAAE,KAAK;iBACpB,CAAC,CAAC;gBACH,MAAM,UAAU,CAAC,KAAK,CACpB;;;qEAG2D,EAC3D;oBACE,KAAK;oBACL,MAAM,CAAC,OAAO;oBACd,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,YAAY;oBACjC,MAAM,CAAC,WAAW,IAAI,IAAI;oBAC1B,KAAK,IAAI,IAAI;oBACb,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;oBACxC,UAAU;oBACV,KAAK;oBACL,iBAAiB;oBACjB,oBAAoB;iBACrB,CACF,CAAC;gBACF,eAAe,CAAC,IAAI,CAAC;oBACnB,iBAAiB;oBACjB,gBAAgB,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;oBAC/D,UAAU;oBACV,YAAY,EAAE,KAAK;oBACnB,oBAAoB;iBACrB,CAAC,CAAC;YACL,CAAC;YACD,MAAM,IAAI,GAAG;gBACX,cAAc,EAAE,OAAO,CAAC,IAAI;gBAC5B,aAAa,EAAE,UAAU,CAAC,aAAa;gBACvC,QAAQ;aACT,CAAC;YACF,kGAAkG;YAClG,iGAAiG;YACjG,4CAA4C;YAC5C,MAAM,4BAA4B,GAAG,IAAI,CAAC;gBACxC,QAAQ,EAAE,UAAU,CAAC,mBAAmB;gBACxC,cAAc,EAAE,yBAAyB;aAC1C,CAAC,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC;gBACpB,SAAS,EAAE,cAAc;gBACzB,WAAW,EAAE,IAAI,CAAC,YAAY;gBAC9B,WAAW,EAAE,IAAI,CAAC,uBAAuB;gBACzC,IAAI;gBACJ,mBAAmB,EAAE,4BAA4B;gBACjD,UAAU,EAAE,eAAe;aAC5B,CAAC,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,KAAK,CACtC;;;;2DAImD,EACnD;gBACE,KAAK;gBACL,QAAQ;gBACR,IAAI,CAAC,eAAe,CAAC;gBACrB,4BAA4B;gBAC5B,IAAI,CAAC,uBAAuB;gBAC5B,IAAI,CAAC,YAAY;gBACjB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;aACrB,CACF,CAAC;YACF,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,SAAS;gBACjC,MAAM,IAAI,0BAA0B,CAAC,uBAAuB,CAAC,CAAC;YAChE,MAAM,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACjC,OAAO,EAAE,GAAG,IAAI,EAAE,QAAQ,EAAE,CAAC;QAC/B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YAC1D,MAAM,KAAK,CAAC;QACd,CAAC;gBAAS,CAAC;YACT,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC;QACzB,CAAC;IACH,CAAC;CACF;AAkBD,SAAS,gBAAgB,CAAC,KAAqC;IAC7D,MAAM,OAAO,GAAG,IAAI,GAAG,EAAiC,CAAC;IACzD,MAAM,YAAY,GAAG,IAAI,GAAG,EAAiC,CAAC;IAC9D,MAAM,eAAe,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACzC,MAAM,eAAe,GAAG,8BAA8B,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC7E,MAAM,UAAU,GAAG,EAAE,GAAG,IAAI,EAAE,eAAe,EAAE,CAAC;QAChD,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC;QACtD,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;QACzC,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;YAClC,MAAM,aAAa,GAAG,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;YAC9D,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC/B,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;QACnD,CAAC;QACD,OAAO,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,eAAe,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC;IACnF,CAAC,CAAC,CAAC;IACH,eAAe,CAAC,IAAI,CAClB,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACP,oBAAoB,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,EAAE,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC;QAC5D,oBAAoB,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC,eAAe,CAAC;QAC1D,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAC1C,CAAC;IACF,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,CAAC;AACpD,CAAC;AAED,SAAS,cAAc,CAAC,KAA2B,EAAE,OAAe,EAAE,KAAa;IACjF,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IAC/C,MAAM,eAAe,GAAG,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;IAC9D,OAAO,CACL,OAAO,CAAC,MAAM,GAAG,CAAC;QAClB,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU,KAAK,OAAO,CAAC;QACrE,eAAe,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,eAAe,KAAK,KAAK,CAAC,CACjF,CAAC;AACJ,CAAC;AAED,SAAS,IAAI,CAAC,KAAc;IAC1B,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC1E,CAAC"}
@@ -0,0 +1,41 @@
1
+ import { type InventoryLease, type InventoryProgressRow, type PlatformAuthInventoryRemoteUser } from './platform-auth-inventory-paging.js';
2
+ import type { PlatformIdentityQueryable } from './platform-identity-postgres.js';
3
+ type Connection = PlatformIdentityQueryable & {
4
+ release?: () => void;
5
+ };
6
+ type Pool = PlatformIdentityQueryable & {
7
+ connect?: () => Promise<Connection>;
8
+ };
9
+ export type InventoryLeaseClaim = {
10
+ readonly kind: 'leased';
11
+ readonly lease: InventoryLease;
12
+ } | {
13
+ readonly kind: 'busy';
14
+ readonly progress: InventoryProgressRow;
15
+ } | {
16
+ readonly kind: 'terminal';
17
+ readonly progress: InventoryProgressRow;
18
+ };
19
+ export declare class PostgresPlatformAuthInventoryProgressStore {
20
+ #private;
21
+ constructor(pool: Pool);
22
+ claim(runId: string): Promise<InventoryLeaseClaim>;
23
+ release(runId: string, leaseToken: string): Promise<void>;
24
+ markTerminal(runId: string, leaseToken: string): Promise<InventoryProgressRow>;
25
+ commitRemotePage(input: {
26
+ readonly runId: string;
27
+ readonly leaseToken: string;
28
+ readonly after?: string;
29
+ readonly users: readonly PlatformAuthInventoryRemoteUser[];
30
+ readonly nextAfter?: string;
31
+ }): Promise<{
32
+ readonly progress: InventoryProgressRow;
33
+ readonly terminal: boolean;
34
+ }>;
35
+ read(runId: string): Promise<InventoryProgressRow | undefined>;
36
+ }
37
+ export declare const PROGRESS_COLUMNS = "phase, remote_after, remote_page_count, remote_user_count,\n remote_chain_hash, local_after_subject, local_source_epoch, local_snapshot_at,\n local_subject_count, candidate_count, excluded_count, candidate_chain_hash,\n excluded_chain_hash, artifact_counts, blocker_counts, terminal_error, lease_token_hash,\n lease_expires_at";
38
+ export declare function markPlatformAuthInventoryTerminal(pool: PlatformIdentityQueryable, runId: string, leaseToken: string): Promise<InventoryProgressRow>;
39
+ export declare function lockPlatformAuthInventoryLocalProgress(pool: PlatformIdentityQueryable, runId: string, leaseToken: string): Promise<InventoryProgressRow>;
40
+ export {};
41
+ //# sourceMappingURL=platform-auth-inventory-progress-postgres.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"platform-auth-inventory-progress-postgres.d.ts","sourceRoot":"","sources":["../src/platform-auth-inventory-progress-postgres.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,oBAAoB,EAQzB,KAAK,+BAA+B,EACrC,MAAM,qCAAqC,CAAC;AAE7C,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAEjF,KAAK,UAAU,GAAG,yBAAyB,GAAG;IAAE,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;CAAE,CAAC;AACvE,KAAK,IAAI,GAAG,yBAAyB,GAAG;IAAE,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,UAAU,CAAC,CAAA;CAAE,CAAC;AAEhF,MAAM,MAAM,mBAAmB,GAC3B;IAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAA;CAAE,GAC3D;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,oBAAoB,CAAA;CAAE,GAClE;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,oBAAoB,CAAA;CAAE,CAAC;AAE3E,qBAAa,0CAA0C;;gBAGzC,IAAI,EAAE,IAAI;IAIhB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAuClD,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IASzD,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAI9E,gBAAgB,CAAC,KAAK,EAAE;QAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,KAAK,EAAE,SAAS,+BAA+B,EAAE,CAAC;QAC3D,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;KAC7B,GAAG,OAAO,CAAC;QAAE,QAAQ,CAAC,QAAQ,EAAE,oBAAoB,CAAC;QAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC;IAsH9E,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,GAAG,SAAS,CAAC;CAsCrE;AAED,eAAO,MAAM,gBAAgB,+UAIV,CAAC;AAEpB,wBAAsB,iCAAiC,CACrD,IAAI,EAAE,yBAAyB,EAC/B,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,oBAAoB,CAAC,CAY/B;AAED,wBAAsB,sCAAsC,CAC1D,IAAI,EAAE,yBAAyB,EAC/B,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,oBAAoB,CAAC,CAiB/B"}
@@ -0,0 +1,230 @@
1
+ import { inventoryChain, inventoryChainSeed, inventoryHash, newInventoryLeaseToken, PLATFORM_AUTH_INVENTORY_LEASE_SECONDS, PLATFORM_AUTH_INVENTORY_REMOTE_PAGE_SIZE, PLATFORM_AUTH_INVENTORY_REMOTE_USER_LIMIT, } from './platform-auth-inventory-paging.js';
2
+ import { normalizePlatformIdentityEmail } from './platform-identity.js';
3
+ export class PostgresPlatformAuthInventoryProgressStore {
4
+ #pool;
5
+ constructor(pool) {
6
+ this.#pool = pool;
7
+ }
8
+ async claim(runId) {
9
+ return this.#transaction(async (connection) => {
10
+ const run = await connection.query("SELECT state FROM identity_migration_runs WHERE id = $1 AND kind = 'inventory' FOR UPDATE", [runId]);
11
+ if (run.rows[0]?.state !== 'running')
12
+ throw new Error('inventory_run_unavailable');
13
+ await connection.query(`INSERT INTO platform_auth_inventory_progress
14
+ (migration_run_id, phase, remote_chain_hash, candidate_chain_hash, excluded_chain_hash)
15
+ VALUES ($1, 'remote', $2, $3, $4)
16
+ ON CONFLICT (migration_run_id) DO NOTHING`, [
17
+ runId,
18
+ inventoryChainSeed('remote'),
19
+ inventoryChainSeed('candidate'),
20
+ inventoryChainSeed('excluded'),
21
+ ]);
22
+ const progress = await this.#lockedProgress(connection, runId);
23
+ if (progress.terminal_error !== null)
24
+ return { kind: 'terminal', progress };
25
+ const token = newInventoryLeaseToken();
26
+ const claimed = await connection.query(`UPDATE platform_auth_inventory_progress
27
+ SET lease_token_hash = $2,
28
+ lease_expires_at = now() + ($3::text || ' seconds')::interval,
29
+ updated_at = now()
30
+ WHERE migration_run_id = $1
31
+ AND (lease_token_hash IS NULL OR lease_expires_at <= now())
32
+ RETURNING ${PROGRESS_COLUMNS}`, [runId, inventoryHash(token), PLATFORM_AUTH_INVENTORY_LEASE_SECONDS]);
33
+ const row = claimed.rows[0];
34
+ return row === undefined
35
+ ? { kind: 'busy', progress }
36
+ : { kind: 'leased', lease: { token, progress: row } };
37
+ });
38
+ }
39
+ async release(runId, leaseToken) {
40
+ await this.#pool.query(`UPDATE platform_auth_inventory_progress
41
+ SET lease_token_hash = NULL, lease_expires_at = NULL, updated_at = now()
42
+ WHERE migration_run_id = $1 AND lease_token_hash = $2`, [runId, inventoryHash(leaseToken)]);
43
+ }
44
+ async markTerminal(runId, leaseToken) {
45
+ return markPlatformAuthInventoryTerminal(this.#pool, runId, leaseToken);
46
+ }
47
+ async commitRemotePage(input) {
48
+ const normalized = normalizeRemotePage(input.users);
49
+ return this.#transaction(async (connection) => {
50
+ const progress = await this.#lockedProgress(connection, input.runId);
51
+ assertLease(progress, input.leaseToken, 'remote');
52
+ if ((progress.remote_after ?? undefined) !== input.after)
53
+ throw new Error('stale_inventory_lease');
54
+ const inputCursorFingerprint = inventoryHash(input.after ?? null);
55
+ const nextCursorFingerprint = input.nextAfter === undefined ? undefined : inventoryHash(input.nextAfter);
56
+ const invalidShape = normalized.length > PLATFORM_AUTH_INVENTORY_REMOTE_PAGE_SIZE ||
57
+ (normalized.length === 0 && input.nextAfter !== undefined) ||
58
+ (input.nextAfter !== undefined && input.nextAfter === input.after) ||
59
+ progress.remote_user_count + normalized.length >
60
+ PLATFORM_AUTH_INVENTORY_REMOTE_USER_LIMIT ||
61
+ (progress.remote_user_count + normalized.length >=
62
+ PLATFORM_AUTH_INVENTORY_REMOTE_USER_LIMIT &&
63
+ input.nextAfter !== undefined);
64
+ const seenCursor = nextCursorFingerprint === undefined
65
+ ? false
66
+ : (await connection.query(`SELECT 1 FROM platform_auth_inventory_remote_pages
67
+ WHERE migration_run_id = $1 AND input_cursor_fingerprint = $2 LIMIT 1`, [input.runId, nextCursorFingerprint])).rows[0] !== undefined;
68
+ const duplicateRemote = normalized.length === 0
69
+ ? false
70
+ : (await connection.query(`SELECT 1 FROM platform_auth_inventory_remote_users
71
+ WHERE migration_run_id = $1 AND remote_user_id = ANY($2::text[]) LIMIT 1`, [input.runId, normalized.map((user) => user.id)])).rows[0] !== undefined;
72
+ if (invalidShape || seenCursor || duplicateRemote || duplicateIds(normalized)) {
73
+ const terminal = await connection.query(`UPDATE platform_auth_inventory_progress
74
+ SET terminal_error = 'inventory_unavailable', lease_token_hash = NULL,
75
+ lease_expires_at = NULL, updated_at = now()
76
+ WHERE migration_run_id = $1 AND lease_token_hash = $2
77
+ RETURNING ${PROGRESS_COLUMNS}`, [input.runId, inventoryHash(input.leaseToken)]);
78
+ const row = terminal.rows[0];
79
+ if (row === undefined)
80
+ throw new Error('stale_inventory_lease');
81
+ return { progress: row, terminal: true };
82
+ }
83
+ const pageNumber = progress.remote_page_count;
84
+ const pageFingerprint = inventoryHash({
85
+ inputCursorFingerprint,
86
+ nextCursorFingerprint,
87
+ users: normalized.map(remoteFingerprintEntry),
88
+ });
89
+ await connection.query(`INSERT INTO platform_auth_inventory_remote_pages
90
+ (migration_run_id, page_number, input_cursor_fingerprint, next_cursor,
91
+ next_cursor_fingerprint, row_count, page_fingerprint)
92
+ VALUES ($1, $2, $3, $4, $5, $6, $7)`, [
93
+ input.runId,
94
+ pageNumber,
95
+ inputCursorFingerprint,
96
+ input.nextAfter ?? null,
97
+ nextCursorFingerprint ?? null,
98
+ normalized.length,
99
+ pageFingerprint,
100
+ ]);
101
+ if (normalized.length > 0) {
102
+ await connection.query(`INSERT INTO platform_auth_inventory_remote_users
103
+ (migration_run_id, remote_user_id, external_id, normalized_email, verified,
104
+ page_number, ordinal, row_fingerprint)
105
+ SELECT $1, remote.id, remote.external_id, remote.email, remote.verified,
106
+ $2, remote.ordinal, remote.row_fingerprint
107
+ FROM unnest($3::text[], $4::text[], $5::text[], $6::boolean[], $7::integer[], $8::text[])
108
+ AS remote(id, external_id, email, verified, ordinal, row_fingerprint)`, [
109
+ input.runId,
110
+ pageNumber,
111
+ normalized.map((user) => user.id),
112
+ normalized.map((user) => user.externalId ?? null),
113
+ normalized.map((user) => user.normalizedEmail),
114
+ normalized.map((user) => user.verified),
115
+ normalized.map((_, ordinal) => ordinal),
116
+ normalized.map((user) => inventoryHash(remoteFingerprintEntry(user))),
117
+ ]);
118
+ }
119
+ let chain = progress.remote_chain_hash;
120
+ for (const user of normalized)
121
+ chain = inventoryChain(chain, remoteFingerprintEntry(user));
122
+ const updated = await connection.query(`UPDATE platform_auth_inventory_progress
123
+ SET phase = $3, remote_after = $4, remote_page_count = remote_page_count + 1,
124
+ remote_user_count = remote_user_count + $5, remote_chain_hash = $6,
125
+ lease_token_hash = NULL, lease_expires_at = NULL, updated_at = now()
126
+ WHERE migration_run_id = $1 AND lease_token_hash = $2
127
+ RETURNING ${PROGRESS_COLUMNS}`, [
128
+ input.runId,
129
+ inventoryHash(input.leaseToken),
130
+ input.nextAfter === undefined ? 'local' : 'remote',
131
+ input.nextAfter ?? null,
132
+ normalized.length,
133
+ chain,
134
+ ]);
135
+ const row = updated.rows[0];
136
+ if (row === undefined)
137
+ throw new Error('stale_inventory_lease');
138
+ return { progress: row, terminal: false };
139
+ });
140
+ }
141
+ async read(runId) {
142
+ const result = await this.#pool.query(`SELECT ${PROGRESS_COLUMNS} FROM platform_auth_inventory_progress
143
+ WHERE migration_run_id = $1`, [runId]);
144
+ return result.rows[0];
145
+ }
146
+ async #lockedProgress(connection, runId) {
147
+ const result = await connection.query(`SELECT ${PROGRESS_COLUMNS} FROM platform_auth_inventory_progress
148
+ WHERE migration_run_id = $1 FOR UPDATE`, [runId]);
149
+ const row = result.rows[0];
150
+ if (row === undefined)
151
+ throw new Error('inventory_progress_unavailable');
152
+ return row;
153
+ }
154
+ async #transaction(task) {
155
+ const connection = this.#pool.connect === undefined ? this.#pool : await this.#pool.connect();
156
+ try {
157
+ await connection.query('BEGIN');
158
+ const result = await task(connection);
159
+ await connection.query('COMMIT');
160
+ return result;
161
+ }
162
+ catch (error) {
163
+ await connection.query('ROLLBACK').catch(() => undefined);
164
+ throw error;
165
+ }
166
+ finally {
167
+ connection.release?.();
168
+ }
169
+ }
170
+ }
171
+ export const PROGRESS_COLUMNS = `phase, remote_after, remote_page_count, remote_user_count,
172
+ remote_chain_hash, local_after_subject, local_source_epoch, local_snapshot_at,
173
+ local_subject_count, candidate_count, excluded_count, candidate_chain_hash,
174
+ excluded_chain_hash, artifact_counts, blocker_counts, terminal_error, lease_token_hash,
175
+ lease_expires_at`;
176
+ export async function markPlatformAuthInventoryTerminal(pool, runId, leaseToken) {
177
+ const result = await pool.query(`UPDATE platform_auth_inventory_progress
178
+ SET terminal_error = 'inventory_unavailable', lease_token_hash = NULL,
179
+ lease_expires_at = NULL, updated_at = now()
180
+ WHERE migration_run_id = $1 AND lease_token_hash = $2
181
+ RETURNING ${PROGRESS_COLUMNS}`, [runId, inventoryHash(leaseToken)]);
182
+ const row = result.rows[0];
183
+ if (row === undefined)
184
+ throw new Error('stale_inventory_lease');
185
+ return row;
186
+ }
187
+ export async function lockPlatformAuthInventoryLocalProgress(pool, runId, leaseToken) {
188
+ const result = await pool.query(`SELECT ${PROGRESS_COLUMNS} FROM platform_auth_inventory_progress
189
+ WHERE migration_run_id = $1 FOR UPDATE`, [runId]);
190
+ const row = result.rows[0];
191
+ if (row === undefined ||
192
+ row.phase !== 'local' ||
193
+ row.terminal_error !== null ||
194
+ row.lease_token_hash !== inventoryHash(leaseToken) ||
195
+ row.lease_expires_at === null ||
196
+ new Date(row.lease_expires_at).getTime() <= Date.now())
197
+ throw new Error('stale_inventory_lease');
198
+ return row;
199
+ }
200
+ function normalizeRemotePage(users) {
201
+ return users.map((user) => {
202
+ if (user.id.trim() !== user.id ||
203
+ user.id.length === 0 ||
204
+ user.id.length > 256 ||
205
+ (user.externalId !== undefined &&
206
+ (user.externalId.trim() !== user.externalId || user.externalId.length === 0)))
207
+ throw new Error('invalid_remote_inventory_page');
208
+ return { ...user, normalizedEmail: normalizePlatformIdentityEmail(user.normalizedEmail) };
209
+ });
210
+ }
211
+ function remoteFingerprintEntry(user) {
212
+ return {
213
+ idFingerprint: inventoryHash(user.id),
214
+ externalId: user.externalId,
215
+ normalizedEmail: user.normalizedEmail,
216
+ verified: user.verified,
217
+ };
218
+ }
219
+ function duplicateIds(users) {
220
+ return new Set(users.map((user) => user.id)).size !== users.length;
221
+ }
222
+ function assertLease(progress, leaseToken, phase) {
223
+ if (progress.phase !== phase ||
224
+ progress.terminal_error !== null ||
225
+ progress.lease_token_hash !== inventoryHash(leaseToken) ||
226
+ progress.lease_expires_at === null ||
227
+ new Date(progress.lease_expires_at).getTime() <= Date.now())
228
+ throw new Error('stale_inventory_lease');
229
+ }
230
+ //# sourceMappingURL=platform-auth-inventory-progress-postgres.js.map