@noodleseed/one 0.83.0 → 0.84.1
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.
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +4 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/author-loop.d.ts.map +1 -1
- package/dist/commands/author-loop.js +7 -7
- package/dist/commands/author-loop.js.map +1 -1
- package/dist/commands/catalog-data-platform-auth.d.ts.map +1 -1
- package/dist/commands/catalog-data-platform-auth.js +70 -2
- package/dist/commands/catalog-data-platform-auth.js.map +1 -1
- package/dist/commands/platform-account-reset-args.d.ts +40 -0
- package/dist/commands/platform-account-reset-args.d.ts.map +1 -0
- package/dist/commands/platform-account-reset-args.js +181 -0
- package/dist/commands/platform-account-reset-args.js.map +1 -0
- package/dist/commands/platform-account-reset-files.d.ts +9 -0
- package/dist/commands/platform-account-reset-files.d.ts.map +1 -0
- package/dist/commands/platform-account-reset-files.js +45 -0
- package/dist/commands/platform-account-reset-files.js.map +1 -0
- package/dist/commands/platform-account-reset-ops.d.ts +3 -0
- package/dist/commands/platform-account-reset-ops.d.ts.map +1 -0
- package/dist/commands/platform-account-reset-ops.js +162 -0
- package/dist/commands/platform-account-reset-ops.js.map +1 -0
- package/dist/plugin-mode/build-readiness-recorder.d.ts.map +1 -1
- package/dist/plugin-mode/build-readiness-recorder.js +3 -1
- package/dist/plugin-mode/build-readiness-recorder.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/generated/example-files.js +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/generated/example-files.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-authoring-refs.d.ts.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-authoring-refs.js +3 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-authoring-refs.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-embedded-assistant-ref.js +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-embedded-assistant-ref.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/dist/skill-operations-refs.js +2 -2
- package/node_modules/@noodle-borg/agent-kit/dist/skill-operations-refs.js.map +1 -1
- package/node_modules/@noodle-borg/agent-kit/package.json +1 -1
- package/node_modules/@noodle-borg/service/dist/billing/enforcement-activation.d.ts +4 -4
- package/node_modules/@noodle-borg/service/dist/billing/read-contract.d.ts +6 -6
- package/node_modules/@noodle-borg/service/dist/index.d.ts +4 -1
- package/node_modules/@noodle-borg/service/dist/index.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/index.js +2 -0
- package/node_modules/@noodle-borg/service/dist/index.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/main.js +5 -0
- package/node_modules/@noodle-borg/service/dist/main.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-flow.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-flow.js +1 -0
- package/node_modules/@noodle-borg/service/dist/oauth/developer-grant-flow.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/provider.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/provider.js +1 -0
- package/node_modules/@noodle-borg/service/dist/oauth/provider.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/store-postgres-schema.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/store-postgres-schema.js +17 -0
- package/node_modules/@noodle-borg/service/dist/oauth/store-postgres-schema.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/store-postgres.d.ts +2 -2
- package/node_modules/@noodle-borg/service/dist/oauth/store-postgres.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/store-postgres.js +25 -5
- package/node_modules/@noodle-borg/service/dist/oauth/store-postgres.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/store.d.ts +5 -3
- package/node_modules/@noodle-borg/service/dist/oauth/store.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/store.js +5 -5
- package/node_modules/@noodle-borg/service/dist/oauth/store.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/upstream-callback-handler.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/upstream-callback-handler.js +7 -2
- package/node_modules/@noodle-borg/service/dist/oauth/upstream-callback-handler.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/upstream-callback-support.d.ts +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/upstream-callback-support.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/upstream-callback-support.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/upstream-consent.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/upstream-consent.js +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/upstream-consent.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/upstream-federation.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/oauth/upstream-federation.js +6 -1
- package/node_modules/@noodle-borg/service/dist/oauth/upstream-federation.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/options.d.ts +13 -0
- package/node_modules/@noodle-borg/service/dist/options.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-config.d.ts +9 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-config.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-config.js +24 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-config.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-dispatch-lock-postgres.d.ts +12 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-dispatch-lock-postgres.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-dispatch-lock-postgres.js +110 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-dispatch-lock-postgres.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-fingerprint.d.ts +9 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-fingerprint.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-fingerprint.js +46 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-fingerprint.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-operation-postgres.d.ts +77 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-operation-postgres.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-operation-postgres.js +144 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-operation-postgres.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-operator.d.ts +29 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-operator.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-operator.js +59 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-operator.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-ownership-helpers.d.ts +11 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-ownership-helpers.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-ownership-helpers.js +22 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-ownership-helpers.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-ownership-postgres.d.ts +41 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-ownership-postgres.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-ownership-postgres.js +314 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-ownership-postgres.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-ownership-resources-postgres.d.ts +14 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-ownership-resources-postgres.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-ownership-resources-postgres.js +210 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-ownership-resources-postgres.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-ownership-rollback-postgres.d.ts +11 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-ownership-rollback-postgres.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-ownership-rollback-postgres.js +71 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-ownership-rollback-postgres.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-ports.d.ts +12 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-ports.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-ports.js +2 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-ports.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-preview-evidence-postgres.d.ts +22 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-preview-evidence-postgres.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-preview-evidence-postgres.js +177 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-preview-evidence-postgres.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-preview-local-postgres.d.ts +35 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-preview-local-postgres.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-preview-local-postgres.js +184 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-preview-local-postgres.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-preview-persistence-postgres.d.ts +11 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-preview-persistence-postgres.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-preview-persistence-postgres.js +120 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-preview-persistence-postgres.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-preview-postgres.d.ts +79 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-preview-postgres.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-preview-postgres.js +286 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-preview-postgres.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-preview-result.d.ts +21 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-preview-result.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-preview-result.js +81 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-preview-result.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-quarantine-postgres.d.ts +46 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-quarantine-postgres.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-quarantine-postgres.js +283 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-quarantine-postgres.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-rollback-eligibility-postgres.d.ts +13 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-rollback-eligibility-postgres.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-rollback-eligibility-postgres.js +81 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-rollback-eligibility-postgres.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-rollback-local-postgres.d.ts +30 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-rollback-local-postgres.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-rollback-local-postgres.js +248 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-rollback-local-postgres.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-rollback-postgres.d.ts +29 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-rollback-postgres.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-rollback-postgres.js +281 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-rollback-postgres.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-rollback-preview-postgres.d.ts +55 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-rollback-preview-postgres.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-rollback-preview-postgres.js +262 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-rollback-preview-postgres.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-schema-postgres.d.ts +7 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-schema-postgres.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-schema-postgres.js +439 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset-schema-postgres.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset.d.ts +276 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset.js +141 -0
- package/node_modules/@noodle-borg/service/dist/platform-account-reset.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/platform-auth-configuration.d.ts +1 -1
- package/node_modules/@noodle-borg/service/dist/platform-auth-inventory-legacy-sources-postgres.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/platform-auth-inventory-legacy-sources-postgres.js +5 -1
- package/node_modules/@noodle-borg/service/dist/platform-auth-inventory-legacy-sources-postgres.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/platform-auth-inventory-local-subjects-postgres.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/platform-auth-inventory-local-subjects-postgres.js +10 -1
- package/node_modules/@noodle-borg/service/dist/platform-auth-inventory-local-subjects-postgres.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/platform-auth-inventory-source-fence-postgres.d.ts +5 -10
- package/node_modules/@noodle-borg/service/dist/platform-auth-inventory-source-fence-postgres.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/platform-auth-inventory-source-fence-postgres.js +86 -47
- package/node_modules/@noodle-borg/service/dist/platform-auth-inventory-source-fence-postgres.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/platform-auth-inventory-source-fence-transaction-postgres.d.ts +17 -0
- package/node_modules/@noodle-borg/service/dist/platform-auth-inventory-source-fence-transaction-postgres.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/platform-auth-inventory-source-fence-transaction-postgres.js +240 -0
- package/node_modules/@noodle-borg/service/dist/platform-auth-inventory-source-fence-transaction-postgres.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/platform-auth-operator.d.ts +63 -63
- package/node_modules/@noodle-borg/service/dist/platform-auth-rollout-support.d.ts +1 -1
- package/node_modules/@noodle-borg/service/dist/platform-auth-runtime.d.ts +18 -1
- package/node_modules/@noodle-borg/service/dist/platform-auth-runtime.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/platform-auth-runtime.js +97 -2
- package/node_modules/@noodle-borg/service/dist/platform-auth-runtime.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/platform-auth-service-bootstrap.d.ts +4 -1
- package/node_modules/@noodle-borg/service/dist/platform-auth-service-bootstrap.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/platform-auth-service-bootstrap.js +4 -0
- package/node_modules/@noodle-borg/service/dist/platform-auth-service-bootstrap.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/platform-identity-postgres.d.ts +7 -2
- package/node_modules/@noodle-borg/service/dist/platform-identity-postgres.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/platform-identity-postgres.js +24 -2
- package/node_modules/@noodle-borg/service/dist/platform-identity-postgres.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/platform-identity-schema-postgres.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/platform-identity-schema-postgres.js +4 -0
- package/node_modules/@noodle-borg/service/dist/platform-identity-schema-postgres.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/platform-identity-sync-postgres.d.ts +7 -1
- package/node_modules/@noodle-borg/service/dist/platform-identity-sync-postgres.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/platform-identity-sync-postgres.js +121 -8
- package/node_modules/@noodle-borg/service/dist/platform-identity-sync-postgres.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/platform-identity-sync-recovery-postgres.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/platform-identity-sync-recovery-postgres.js +11 -1
- package/node_modules/@noodle-borg/service/dist/platform-identity-sync-recovery-postgres.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/platform-identity-sync.d.ts +5 -3
- package/node_modules/@noodle-borg/service/dist/platform-identity-sync.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/platform-identity-sync.js +15 -1
- package/node_modules/@noodle-borg/service/dist/platform-identity-sync.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/platform-identity.d.ts +23 -2
- package/node_modules/@noodle-borg/service/dist/platform-identity.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/platform-identity.js +21 -0
- package/node_modules/@noodle-borg/service/dist/platform-identity.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/registry-state.d.ts +8 -0
- package/node_modules/@noodle-borg/service/dist/registry-state.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/registry-state.js +15 -2
- package/node_modules/@noodle-borg/service/dist/registry-state.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/registry.d.ts +2 -0
- package/node_modules/@noodle-borg/service/dist/registry.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/registry.js +4 -1
- package/node_modules/@noodle-borg/service/dist/registry.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/routes/platform-account-reset-dispatch.d.ts +8 -0
- package/node_modules/@noodle-borg/service/dist/routes/platform-account-reset-dispatch.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/platform-account-reset-dispatch.js +36 -0
- package/node_modules/@noodle-borg/service/dist/routes/platform-account-reset-dispatch.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/platform-account-reset.d.ts +22 -0
- package/node_modules/@noodle-borg/service/dist/routes/platform-account-reset.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/platform-account-reset.js +201 -0
- package/node_modules/@noodle-borg/service/dist/routes/platform-account-reset.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/private-platform-auth-dispatch.d.ts +18 -0
- package/node_modules/@noodle-borg/service/dist/routes/private-platform-auth-dispatch.d.ts.map +1 -0
- package/node_modules/@noodle-borg/service/dist/routes/private-platform-auth-dispatch.js +36 -0
- package/node_modules/@noodle-borg/service/dist/routes/private-platform-auth-dispatch.js.map +1 -0
- package/node_modules/@noodle-borg/service/dist/serve-options.d.ts +2 -1
- package/node_modules/@noodle-borg/service/dist/serve-options.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/serve.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/serve.js +16 -1
- package/node_modules/@noodle-borg/service/dist/serve.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/service.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/service.js +4 -5
- package/node_modules/@noodle-borg/service/dist/service.js.map +1 -1
- package/node_modules/@noodle-borg/service/dist/workos-directory.d.ts +22 -3
- package/node_modules/@noodle-borg/service/dist/workos-directory.d.ts.map +1 -1
- package/node_modules/@noodle-borg/service/dist/workos-directory.js +56 -5
- package/node_modules/@noodle-borg/service/dist/workos-directory.js.map +1 -1
- package/package.json +1 -1
package/node_modules/@noodle-borg/service/dist/platform-auth-inventory-source-fence-postgres.js
CHANGED
|
@@ -1,12 +1,56 @@
|
|
|
1
|
+
import { PLATFORM_AUTH_INVENTORY_SOURCE_FENCE_LOCK_PREFIX } from './platform-auth-inventory-source-fence-transaction-postgres.js';
|
|
1
2
|
import { PLATFORM_AUTH_INVENTORY_AUTHORITY_SOURCES, } from './platform-auth-inventory-sources.js';
|
|
2
3
|
import { PlatformAuthMigrationError } from './platform-auth-migration.js';
|
|
4
|
+
export { acquirePlatformAuthInventorySourceFence, releasePlatformAuthInventorySourceFence, runPlatformAuthInventorySourceFenceTransaction, } from './platform-auth-inventory-source-fence-transaction-postgres.js';
|
|
3
5
|
const SOURCE_FENCE_TRIGGER = 'platform_auth_inventory_source_epoch_trigger';
|
|
4
|
-
const
|
|
6
|
+
export const PLATFORM_ACCOUNT_RESET_PREVIEW_TABLES = [
|
|
7
|
+
'apps',
|
|
8
|
+
'billing_account_defaults',
|
|
9
|
+
'billing_account_members',
|
|
10
|
+
'billing_accounts',
|
|
11
|
+
'billing_stripe_customers',
|
|
12
|
+
'billing_stripe_subscription_bindings',
|
|
13
|
+
'deploy_records',
|
|
14
|
+
'developer_access_grants',
|
|
15
|
+
'environments',
|
|
16
|
+
'oauth_authorization_codes',
|
|
17
|
+
'oauth_consent_grant_provenance',
|
|
18
|
+
'oauth_consent_grants',
|
|
19
|
+
'oauth_device_authorizations',
|
|
20
|
+
'oauth_refresh_tokens',
|
|
21
|
+
'org_billing_home_accounts',
|
|
22
|
+
'org_billing_links',
|
|
23
|
+
'org_members',
|
|
24
|
+
'orgs',
|
|
25
|
+
'personal_workspace_bindings',
|
|
26
|
+
'platform_auth_rollout_state',
|
|
27
|
+
'platform_identity_links',
|
|
28
|
+
'platform_principals',
|
|
29
|
+
'platform_verified_emails',
|
|
30
|
+
'repo_connections',
|
|
31
|
+
'state_handle_records',
|
|
32
|
+
'welcome_email_outbox',
|
|
33
|
+
'workos_import_attempt_evidence',
|
|
34
|
+
'workos_import_ledger',
|
|
35
|
+
];
|
|
36
|
+
export const PLATFORM_ACCOUNT_RESET_EXECUTION_TABLES = [
|
|
37
|
+
...PLATFORM_ACCOUNT_RESET_PREVIEW_TABLES,
|
|
38
|
+
'identity_migration_runs',
|
|
39
|
+
'platform_account_reset_cleanup_ledger',
|
|
40
|
+
'platform_account_reset_email_reservations',
|
|
41
|
+
'platform_account_reset_events',
|
|
42
|
+
'platform_account_reset_operations',
|
|
43
|
+
'platform_account_reset_rollback_previews',
|
|
44
|
+
'platform_account_reset_targets',
|
|
45
|
+
'platform_auth_inventory_candidates',
|
|
46
|
+
'platform_identity_sync_outbox',
|
|
47
|
+
];
|
|
5
48
|
export const PLATFORM_AUTH_INVENTORY_CANONICAL_TABLES = [
|
|
6
49
|
'platform_principals',
|
|
7
50
|
'platform_identity_links',
|
|
8
51
|
'platform_verified_emails',
|
|
9
52
|
];
|
|
53
|
+
const PLATFORM_AUTH_INVENTORY_COMPANION_TABLES = ['oauth_consent_grant_provenance'];
|
|
10
54
|
/** Installs additive, statement-level change evidence without serializing writers on a counter row. */
|
|
11
55
|
export async function ensurePlatformAuthInventorySourceFenceSchema(pool) {
|
|
12
56
|
await pool.query(`
|
|
@@ -30,7 +74,7 @@ export async function ensurePlatformAuthInventorySourceFenceSchema(pool) {
|
|
|
30
74
|
CREATE OR REPLACE FUNCTION platform_auth_inventory_bump_source_epoch() RETURNS trigger AS $$
|
|
31
75
|
BEGIN
|
|
32
76
|
PERFORM pg_advisory_xact_lock_shared(
|
|
33
|
-
hashtextextended('${
|
|
77
|
+
hashtextextended('${PLATFORM_AUTH_INVENTORY_SOURCE_FENCE_LOCK_PREFIX}' || TG_TABLE_SCHEMA, 0)
|
|
34
78
|
);
|
|
35
79
|
PERFORM nextval(
|
|
36
80
|
format('%I.%I', TG_TABLE_SCHEMA, 'platform_auth_inventory_source_epoch_seq')::regclass
|
|
@@ -43,57 +87,60 @@ export async function ensurePlatformAuthInventorySourceFenceSchema(pool) {
|
|
|
43
87
|
}
|
|
44
88
|
/** Reconciles triggers after later service schema initializers create their owned source tables. */
|
|
45
89
|
export async function installPlatformAuthInventorySourceFenceTriggers(pool) {
|
|
46
|
-
const foundation = await pool.query(`SELECT
|
|
47
|
-
|
|
90
|
+
const foundation = await pool.query(`SELECT current_schema() AS schema_name,
|
|
91
|
+
to_regclass(format(
|
|
92
|
+
'%I.%I', current_schema(), 'platform_auth_inventory_source_epoch_seq'
|
|
93
|
+
))::text AS sequence,
|
|
94
|
+
to_regprocedure(format(
|
|
95
|
+
'%I.%I()', current_schema(), 'platform_auth_inventory_bump_source_epoch'
|
|
96
|
+
))::text AS fn`);
|
|
48
97
|
const foundationRow = foundation.rows[0];
|
|
49
|
-
if (foundationRow === undefined ||
|
|
98
|
+
if (foundationRow === undefined ||
|
|
99
|
+
foundationRow.schema_name === null ||
|
|
100
|
+
foundationRow.sequence === null ||
|
|
101
|
+
foundationRow.fn === null)
|
|
50
102
|
return;
|
|
103
|
+
const schema = quoteIdentifier(foundationRow.schema_name);
|
|
51
104
|
for (const table of [
|
|
52
105
|
...PLATFORM_AUTH_INVENTORY_CANONICAL_TABLES,
|
|
53
106
|
...PLATFORM_AUTH_INVENTORY_AUTHORITY_SOURCES,
|
|
107
|
+
...PLATFORM_AUTH_INVENTORY_COMPANION_TABLES,
|
|
54
108
|
]) {
|
|
55
|
-
const relation = await pool.query('SELECT relkind::text FROM pg_class WHERE oid = to_regclass($1)', [table]);
|
|
109
|
+
const relation = await pool.query('SELECT relkind::text FROM pg_class WHERE oid = to_regclass($1)', [`${schema}.${quoteIdentifier(table)}`]);
|
|
56
110
|
if (relation.rows[0]?.relkind !== 'r' && relation.rows[0]?.relkind !== 'p')
|
|
57
111
|
continue;
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
AND tgfoid = to_regprocedure('platform_auth_inventory_bump_source_epoch()')`, [table, SOURCE_FENCE_TRIGGER]);
|
|
62
|
-
if (installed.rows[0] !== undefined)
|
|
63
|
-
continue;
|
|
64
|
-
await pool.query(`CREATE TRIGGER ${SOURCE_FENCE_TRIGGER}
|
|
65
|
-
AFTER INSERT OR UPDATE OR DELETE OR TRUNCATE ON "${table}"
|
|
66
|
-
FOR EACH STATEMENT EXECUTE FUNCTION platform_auth_inventory_bump_source_epoch()`);
|
|
112
|
+
await pool.query(`CREATE OR REPLACE TRIGGER ${SOURCE_FENCE_TRIGGER}
|
|
113
|
+
AFTER INSERT OR UPDATE OR DELETE OR TRUNCATE ON ${schema}.${quoteIdentifier(table)}
|
|
114
|
+
FOR EACH STATEMENT EXECUTE FUNCTION ${schema}.platform_auth_inventory_bump_source_epoch()`);
|
|
67
115
|
}
|
|
68
116
|
}
|
|
69
117
|
export async function assertPlatformAuthInventorySourceFence(pool, manifest) {
|
|
70
118
|
const required = [
|
|
71
119
|
...PLATFORM_AUTH_INVENTORY_CANONICAL_TABLES,
|
|
72
120
|
...PLATFORM_AUTH_INVENTORY_AUTHORITY_SOURCES.filter((source) => manifest[source] === 'configured'),
|
|
121
|
+
...(manifest.oauth_consent_grants === 'configured'
|
|
122
|
+
? PLATFORM_AUTH_INVENTORY_COMPANION_TABLES
|
|
123
|
+
: []),
|
|
73
124
|
];
|
|
74
125
|
const coverage = await pool.query(`SELECT required.table_name
|
|
75
126
|
FROM unnest($1::text[]) AS required(table_name)
|
|
76
|
-
WHERE to_regclass(required.table_name) IS NULL
|
|
127
|
+
WHERE to_regclass(format('%I.%I', current_schema(), required.table_name)) IS NULL
|
|
77
128
|
OR NOT EXISTS (
|
|
78
129
|
SELECT 1 FROM pg_trigger trigger
|
|
79
|
-
WHERE trigger.tgrelid =
|
|
130
|
+
WHERE trigger.tgrelid =
|
|
131
|
+
to_regclass(format('%I.%I', current_schema(), required.table_name))
|
|
80
132
|
AND trigger.tgname = $2 AND NOT trigger.tgisinternal
|
|
81
133
|
AND trigger.tgenabled <> 'D'
|
|
82
134
|
AND trigger.tgfoid =
|
|
83
|
-
to_regprocedure(
|
|
135
|
+
to_regprocedure(format(
|
|
136
|
+
'%I.%I()', current_schema(), 'platform_auth_inventory_bump_source_epoch'
|
|
137
|
+
))
|
|
84
138
|
)`, [required, SOURCE_FENCE_TRIGGER]);
|
|
85
139
|
if (coverage.rows.length !== 0)
|
|
86
140
|
throw new PlatformAuthMigrationError('inventory_unavailable');
|
|
87
141
|
}
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
hashtextextended($1 || current_schema(), 0)
|
|
91
|
-
)`, [SOURCE_FENCE_LOCK_PREFIX]);
|
|
92
|
-
}
|
|
93
|
-
export async function releasePlatformAuthInventorySourceFence(connection) {
|
|
94
|
-
await connection.query(`SELECT pg_advisory_unlock(
|
|
95
|
-
hashtextextended($1 || current_schema(), 0)
|
|
96
|
-
)`, [SOURCE_FENCE_LOCK_PREFIX]);
|
|
142
|
+
function quoteIdentifier(value) {
|
|
143
|
+
return `"${value.replaceAll('"', '""')}"`;
|
|
97
144
|
}
|
|
98
145
|
export async function readPlatformAuthInventorySourceEpoch(pool) {
|
|
99
146
|
const result = await pool.query('SELECT last_value::text AS epoch FROM platform_auth_inventory_source_epoch_seq');
|
|
@@ -102,25 +149,17 @@ export async function readPlatformAuthInventorySourceEpoch(pool) {
|
|
|
102
149
|
throw new PlatformAuthMigrationError('inventory_unavailable');
|
|
103
150
|
return epoch;
|
|
104
151
|
}
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
await
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
await connection.query('ROLLBACK').catch(() => undefined);
|
|
118
|
-
throw error;
|
|
119
|
-
}
|
|
120
|
-
finally {
|
|
121
|
-
if (sourceFenceHeld)
|
|
122
|
-
await releasePlatformAuthInventorySourceFence(connection).catch(() => undefined);
|
|
123
|
-
connection.release?.();
|
|
124
|
-
}
|
|
152
|
+
/** Serializes reset previews/execution for the same immutable principal IDs, independent of input order. */
|
|
153
|
+
export async function lockPlatformAuthInventorySourceFenceTargets(connection, principalIds) {
|
|
154
|
+
const targets = [...new Set(principalIds)].sort((left, right) => left.localeCompare(right));
|
|
155
|
+
for (const target of targets)
|
|
156
|
+
await connection.query(`SELECT pg_advisory_xact_lock(
|
|
157
|
+
hashtextextended('platform-account-reset-target:' || $1, 0)
|
|
158
|
+
)`, [target]);
|
|
159
|
+
await connection.query(`SELECT principal_id
|
|
160
|
+
FROM platform_principals
|
|
161
|
+
WHERE principal_id = ANY($1::text[])
|
|
162
|
+
ORDER BY principal_id
|
|
163
|
+
FOR SHARE`, [targets]);
|
|
125
164
|
}
|
|
126
165
|
//# sourceMappingURL=platform-auth-inventory-source-fence-postgres.js.map
|
package/node_modules/@noodle-borg/service/dist/platform-auth-inventory-source-fence-postgres.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"platform-auth-inventory-source-fence-postgres.js","sourceRoot":"","sources":["../src/platform-auth-inventory-source-fence-postgres.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,yCAAyC,GAE1C,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"platform-auth-inventory-source-fence-postgres.js","sourceRoot":"","sources":["../src/platform-auth-inventory-source-fence-postgres.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gDAAgD,EAAE,MAAM,gEAAgE,CAAC;AAClI,OAAO,EACL,yCAAyC,GAE1C,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAG1E,OAAO,EACL,uCAAuC,EACvC,uCAAuC,EACvC,8CAA8C,GAC/C,MAAM,gEAAgE,CAAC;AAExE,MAAM,oBAAoB,GAAG,8CAA8C,CAAC;AAC5E,MAAM,CAAC,MAAM,qCAAqC,GAAG;IACnD,MAAM;IACN,0BAA0B;IAC1B,yBAAyB;IACzB,kBAAkB;IAClB,0BAA0B;IAC1B,sCAAsC;IACtC,gBAAgB;IAChB,yBAAyB;IACzB,cAAc;IACd,2BAA2B;IAC3B,gCAAgC;IAChC,sBAAsB;IACtB,6BAA6B;IAC7B,sBAAsB;IACtB,2BAA2B;IAC3B,mBAAmB;IACnB,aAAa;IACb,MAAM;IACN,6BAA6B;IAC7B,6BAA6B;IAC7B,yBAAyB;IACzB,qBAAqB;IACrB,0BAA0B;IAC1B,kBAAkB;IAClB,sBAAsB;IACtB,sBAAsB;IACtB,gCAAgC;IAChC,sBAAsB;CACd,CAAC;AACX,MAAM,CAAC,MAAM,uCAAuC,GAAG;IACrD,GAAG,qCAAqC;IACxC,yBAAyB;IACzB,uCAAuC;IACvC,2CAA2C;IAC3C,+BAA+B;IAC/B,mCAAmC;IACnC,0CAA0C;IAC1C,gCAAgC;IAChC,oCAAoC;IACpC,+BAA+B;CACvB,CAAC;AACX,MAAM,CAAC,MAAM,wCAAwC,GAAG;IACtD,qBAAqB;IACrB,yBAAyB;IACzB,0BAA0B;CAClB,CAAC;AACX,MAAM,wCAAwC,GAAG,CAAC,gCAAgC,CAAU,CAAC;AAE7F,uGAAuG;AACvG,MAAM,CAAC,KAAK,UAAU,4CAA4C,CAChE,IAA+B;IAE/B,MAAM,IAAI,CAAC,KAAK,CAAC;;;;GAIhB,CAAC,CAAC;IACH,MAAM,IAAI,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;4BAgBS,gDAAgD;;;;;;;;GAQzE,CAAC,CAAC;IACH,MAAM,+CAA+C,CAAC,IAAI,CAAC,CAAC;AAC9D,CAAC;AAED,oGAAoG;AACpG,MAAM,CAAC,KAAK,UAAU,+CAA+C,CACnE,IAA+B;IAE/B,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,KAAK,CAKjC;;;;;;2BAMuB,CACxB,CAAC;IACF,MAAM,aAAa,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACzC,IACE,aAAa,KAAK,SAAS;QAC3B,aAAa,CAAC,WAAW,KAAK,IAAI;QAClC,aAAa,CAAC,QAAQ,KAAK,IAAI;QAC/B,aAAa,CAAC,EAAE,KAAK,IAAI;QAEzB,OAAO;IACT,MAAM,MAAM,GAAG,eAAe,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;IAC1D,KAAK,MAAM,KAAK,IAAI;QAClB,GAAG,wCAAwC;QAC3C,GAAG,yCAAyC;QAC5C,GAAG,wCAAwC;KAC5C,EAAE,CAAC;QACF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAC/B,gEAAgE,EAChE,CAAC,GAAG,MAAM,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC,CACxC,CAAC;QACF,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,KAAK,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,KAAK,GAAG;YAAE,SAAS;QACrF,MAAM,IAAI,CAAC,KAAK,CACd,6BAA6B,oBAAoB;2DACI,MAAM,IAAI,eAAe,CAAC,KAAK,CAAC;+CAC5C,MAAM,8CAA8C,CAC9F,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sCAAsC,CAC1D,IAA+B,EAC/B,QAA6C;IAE7C,MAAM,QAAQ,GAAG;QACf,GAAG,wCAAwC;QAC3C,GAAG,yCAAyC,CAAC,MAAM,CACjD,CAAC,MAAM,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,YAAY,CAC9C;QACD,GAAG,CAAC,QAAQ,CAAC,oBAAoB,KAAK,YAAY;YAChD,CAAC,CAAC,wCAAwC;YAC1C,CAAC,CAAC,EAAE,CAAC;KACR,CAAC;IACF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,KAAK,CAC/B;;;;;;;;;;;;;cAaU,EACV,CAAC,QAAQ,EAAE,oBAAoB,CAAC,CACjC,CAAC;IACF,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,0BAA0B,CAAC,uBAAuB,CAAC,CAAC;AAChG,CAAC;AAED,SAAS,eAAe,CAAC,KAAa;IACpC,OAAO,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC;AAC5C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oCAAoC,CACxD,IAA+B;IAE/B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,CAC7B,gFAAgF,CACjF,CAAC;IACF,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;IACpC,IAAI,KAAK,KAAK,SAAS;QAAE,MAAM,IAAI,0BAA0B,CAAC,uBAAuB,CAAC,CAAC;IACvF,OAAO,KAAK,CAAC;AACf,CAAC;AAED,4GAA4G;AAC5G,MAAM,CAAC,KAAK,UAAU,2CAA2C,CAC/D,UAAqC,EACrC,YAA+B;IAE/B,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5F,KAAK,MAAM,MAAM,IAAI,OAAO;QAC1B,MAAM,UAAU,CAAC,KAAK,CACpB;;SAEG,EACH,CAAC,MAAM,CAAC,CACT,CAAC;IACJ,MAAM,UAAU,CAAC,KAAK,CACpB;;;;gBAIY,EACZ,CAAC,OAAO,CAAC,CACV,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { PlatformIdentityQueryable } from './platform-identity-postgres.js';
|
|
2
|
+
type FenceConnection = PlatformIdentityQueryable & {
|
|
3
|
+
release?: (error?: Error) => void;
|
|
4
|
+
};
|
|
5
|
+
type FencePool = PlatformIdentityQueryable & {
|
|
6
|
+
connect?: () => Promise<FenceConnection>;
|
|
7
|
+
};
|
|
8
|
+
export declare const PLATFORM_AUTH_INVENTORY_SOURCE_FENCE_LOCK_PREFIX = "platform-auth-inventory-source-fence:v1:";
|
|
9
|
+
export declare function acquirePlatformAuthInventorySourceFence(connection: PlatformIdentityQueryable): Promise<void>;
|
|
10
|
+
export declare function releasePlatformAuthInventorySourceFence(connection: PlatformIdentityQueryable): Promise<void>;
|
|
11
|
+
export declare function runPlatformAuthInventorySourceFenceTransaction<T>(pool: FencePool, task: (connection: FenceConnection) => Promise<T>, options?: {
|
|
12
|
+
readonly lockTables?: readonly string[];
|
|
13
|
+
readonly lockTimeoutMs?: number;
|
|
14
|
+
readonly statementTimeoutMs?: number;
|
|
15
|
+
}): Promise<T>;
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=platform-auth-inventory-source-fence-transaction-postgres.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform-auth-inventory-source-fence-transaction-postgres.d.ts","sourceRoot":"","sources":["../src/platform-auth-inventory-source-fence-transaction-postgres.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAEjF,KAAK,eAAe,GAAG,yBAAyB,GAAG;IAAE,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,KAAK,KAAK,IAAI,CAAA;CAAE,CAAC;AACzF,KAAK,SAAS,GAAG,yBAAyB,GAAG;IAAE,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,eAAe,CAAC,CAAA;CAAE,CAAC;AAE1F,eAAO,MAAM,gDAAgD,6CACjB,CAAC;AAE7C,wBAAsB,uCAAuC,CAC3D,UAAU,EAAE,yBAAyB,GACpC,OAAO,CAAC,IAAI,CAAC,CAOf;AAED,wBAAsB,uCAAuC,CAC3D,UAAU,EAAE,yBAAyB,GACpC,OAAO,CAAC,IAAI,CAAC,CASf;AAED,wBAAsB,8CAA8C,CAAC,CAAC,EACpE,IAAI,EAAE,SAAS,EACf,IAAI,EAAE,CAAC,UAAU,EAAE,eAAe,KAAK,OAAO,CAAC,CAAC,CAAC,EACjD,OAAO,GAAE;IACP,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACxC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;CACjC,GACL,OAAO,CAAC,CAAC,CAAC,CAmGZ"}
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
import { PlatformAuthMigrationError } from './platform-auth-migration.js';
|
|
2
|
+
export const PLATFORM_AUTH_INVENTORY_SOURCE_FENCE_LOCK_PREFIX = 'platform-auth-inventory-source-fence:v1:';
|
|
3
|
+
export async function acquirePlatformAuthInventorySourceFence(connection) {
|
|
4
|
+
await connection.query(`SELECT pg_advisory_lock(
|
|
5
|
+
hashtextextended($1 || current_schema(), 0)
|
|
6
|
+
)`, [PLATFORM_AUTH_INVENTORY_SOURCE_FENCE_LOCK_PREFIX]);
|
|
7
|
+
}
|
|
8
|
+
export async function releasePlatformAuthInventorySourceFence(connection) {
|
|
9
|
+
const unlocked = await connection.query(`SELECT pg_advisory_unlock(
|
|
10
|
+
hashtextextended($1 || current_schema(), 0)
|
|
11
|
+
) AS unlocked`, [PLATFORM_AUTH_INVENTORY_SOURCE_FENCE_LOCK_PREFIX]);
|
|
12
|
+
if (unlocked.rows[0]?.unlocked !== true)
|
|
13
|
+
throw new PlatformAuthMigrationError('inventory_unavailable');
|
|
14
|
+
}
|
|
15
|
+
export async function runPlatformAuthInventorySourceFenceTransaction(pool, task, options = {}) {
|
|
16
|
+
const lockTables = validatedPlatformAuthInventoryFenceTables(options.lockTables);
|
|
17
|
+
const deadline = platformAuthInventoryFenceDeadline(options);
|
|
18
|
+
const connection = pool.connect === undefined
|
|
19
|
+
? pool
|
|
20
|
+
: await connectPlatformAuthInventoryFenceWithinDeadline(pool.connect.bind(pool), deadline);
|
|
21
|
+
const taskConnection = budgetedPlatformAuthInventoryFenceConnection(connection, deadline, options);
|
|
22
|
+
let sourceFenceHeld = false;
|
|
23
|
+
let transactionStarted = false;
|
|
24
|
+
let completed = false;
|
|
25
|
+
let result;
|
|
26
|
+
let failed = false;
|
|
27
|
+
let failure;
|
|
28
|
+
try {
|
|
29
|
+
if (lockTables.length === 0) {
|
|
30
|
+
await acquirePlatformAuthInventorySourceFenceWithinDeadline(connection, deadline);
|
|
31
|
+
sourceFenceHeld = true;
|
|
32
|
+
}
|
|
33
|
+
await queryPlatformAuthInventoryFenceWithinDeadline(connection, 'BEGIN ISOLATION LEVEL REPEATABLE READ', undefined, deadline);
|
|
34
|
+
transactionStarted = true;
|
|
35
|
+
await setPlatformAuthInventoryFenceTransactionTimeouts(connection, options, deadline);
|
|
36
|
+
if (lockTables.length !== 0)
|
|
37
|
+
await queryPlatformAuthInventoryFenceWithinDeadline(connection, `LOCK TABLE ${lockTables.map((table) => `"${table}"`).join(', ')} IN SHARE MODE`, undefined, deadline);
|
|
38
|
+
if (lockTables.length !== 0) {
|
|
39
|
+
await acquirePlatformAuthInventorySourceFenceWithinDeadline(connection, deadline);
|
|
40
|
+
sourceFenceHeld = true;
|
|
41
|
+
}
|
|
42
|
+
result = await runPlatformAuthInventoryFenceWithinDeadline(task(taskConnection.connection), deadline);
|
|
43
|
+
await setPlatformAuthInventoryFenceTransactionTimeouts(connection, options, deadline);
|
|
44
|
+
await queryPlatformAuthInventoryFenceWithinDeadline(connection, 'COMMIT', undefined, deadline);
|
|
45
|
+
transactionStarted = false;
|
|
46
|
+
completed = true;
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
failed = true;
|
|
50
|
+
failure = error;
|
|
51
|
+
}
|
|
52
|
+
taskConnection.abort();
|
|
53
|
+
let cleanupFailed = false;
|
|
54
|
+
let cleanupFailure;
|
|
55
|
+
if (transactionStarted) {
|
|
56
|
+
try {
|
|
57
|
+
await queryPlatformAuthInventoryFenceWithinDeadline(connection, 'ROLLBACK', undefined, deadline);
|
|
58
|
+
transactionStarted = false;
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
cleanupFailed = true;
|
|
62
|
+
cleanupFailure = error;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
if (sourceFenceHeld && !cleanupFailed) {
|
|
66
|
+
try {
|
|
67
|
+
await releasePlatformAuthInventorySourceFenceWithinDeadline(connection, deadline);
|
|
68
|
+
sourceFenceHeld = false;
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
cleanupFailed = true;
|
|
72
|
+
cleanupFailure = error;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
const unsafeFailure = cleanupFailed ||
|
|
76
|
+
failure instanceof PlatformAuthInventoryFenceDeadlineError ||
|
|
77
|
+
platformAuthInventoryFenceDeadlineElapsed(deadline)
|
|
78
|
+
? platformAuthInventoryFenceError(cleanupFailure ?? failure)
|
|
79
|
+
: undefined;
|
|
80
|
+
try {
|
|
81
|
+
connection.release?.(unsafeFailure);
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
cleanupFailed = true;
|
|
85
|
+
cleanupFailure ??= error;
|
|
86
|
+
}
|
|
87
|
+
if (failed)
|
|
88
|
+
throw failure;
|
|
89
|
+
if (cleanupFailed)
|
|
90
|
+
throw cleanupFailure;
|
|
91
|
+
if (!completed)
|
|
92
|
+
throw new PlatformAuthMigrationError('inventory_unavailable');
|
|
93
|
+
return result;
|
|
94
|
+
}
|
|
95
|
+
class PlatformAuthInventoryFenceDeadlineError extends PlatformAuthMigrationError {
|
|
96
|
+
constructor() {
|
|
97
|
+
super('inventory_unavailable');
|
|
98
|
+
this.name = 'PlatformAuthInventoryFenceDeadlineError';
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
async function connectPlatformAuthInventoryFenceWithinDeadline(connect, deadline) {
|
|
102
|
+
const acquisition = connect();
|
|
103
|
+
try {
|
|
104
|
+
return await runPlatformAuthInventoryFenceWithinDeadline(acquisition, deadline);
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
void acquisition.then((connection) => {
|
|
108
|
+
try {
|
|
109
|
+
connection.release?.(platformAuthInventoryFenceError(error));
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
// The pool already rejected acquisition; there is no further safe cleanup path.
|
|
113
|
+
}
|
|
114
|
+
}, () => undefined);
|
|
115
|
+
throw error;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
async function queryPlatformAuthInventoryFenceWithinDeadline(connection, sql, values, deadline) {
|
|
119
|
+
assertPlatformAuthInventoryFenceWithinDeadline(deadline);
|
|
120
|
+
return runPlatformAuthInventoryFenceWithinDeadline(values === undefined ? connection.query(sql) : connection.query(sql, values), deadline);
|
|
121
|
+
}
|
|
122
|
+
async function releasePlatformAuthInventorySourceFenceWithinDeadline(connection, deadline) {
|
|
123
|
+
const unlocked = await queryPlatformAuthInventoryFenceWithinDeadline(connection, `SELECT pg_advisory_unlock(
|
|
124
|
+
hashtextextended($1 || current_schema(), 0)
|
|
125
|
+
) AS unlocked`, [PLATFORM_AUTH_INVENTORY_SOURCE_FENCE_LOCK_PREFIX], deadline);
|
|
126
|
+
if (unlocked.rows[0]?.unlocked !== true)
|
|
127
|
+
throw new PlatformAuthMigrationError('inventory_unavailable');
|
|
128
|
+
}
|
|
129
|
+
function platformAuthInventoryFenceError(error) {
|
|
130
|
+
return error instanceof Error ? error : new PlatformAuthMigrationError('inventory_unavailable');
|
|
131
|
+
}
|
|
132
|
+
function platformAuthInventoryFenceDeadlineElapsed(deadline) {
|
|
133
|
+
return deadline !== undefined && performance.now() >= deadline;
|
|
134
|
+
}
|
|
135
|
+
async function setPlatformAuthInventoryFenceTransactionTimeouts(connection, options, deadline = platformAuthInventoryFenceDeadline(options)) {
|
|
136
|
+
for (const [setting, timeout] of [
|
|
137
|
+
['lock_timeout', options.lockTimeoutMs],
|
|
138
|
+
['statement_timeout', options.statementTimeoutMs],
|
|
139
|
+
]) {
|
|
140
|
+
if (timeout === undefined)
|
|
141
|
+
continue;
|
|
142
|
+
if (!Number.isSafeInteger(timeout) || timeout <= 0)
|
|
143
|
+
throw new PlatformAuthMigrationError('inventory_unavailable');
|
|
144
|
+
const remaining = remainingPlatformAuthInventoryFenceMilliseconds(deadline);
|
|
145
|
+
await queryPlatformAuthInventoryFenceWithinDeadline(connection, `SET LOCAL ${setting} TO '${Math.min(timeout, remaining)}ms'`, undefined, deadline);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
function validatedPlatformAuthInventoryFenceTables(tables) {
|
|
149
|
+
const validated = [...new Set(tables ?? [])].sort();
|
|
150
|
+
if (validated.some((table) => !/^[a-z][a-z0-9_]*$/.test(table)))
|
|
151
|
+
throw new PlatformAuthMigrationError('inventory_unavailable');
|
|
152
|
+
return validated;
|
|
153
|
+
}
|
|
154
|
+
function platformAuthInventoryFenceDeadline(options) {
|
|
155
|
+
const configured = [options.lockTimeoutMs, options.statementTimeoutMs].filter((value) => value !== undefined);
|
|
156
|
+
for (const timeout of configured)
|
|
157
|
+
if (!Number.isSafeInteger(timeout) || timeout <= 0)
|
|
158
|
+
throw new PlatformAuthMigrationError('inventory_unavailable');
|
|
159
|
+
return configured.length === 0 ? undefined : performance.now() + Math.min(...configured);
|
|
160
|
+
}
|
|
161
|
+
async function acquirePlatformAuthInventorySourceFenceWithinDeadline(connection, deadline) {
|
|
162
|
+
if (deadline === undefined) {
|
|
163
|
+
await acquirePlatformAuthInventorySourceFence(connection);
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
for (;;) {
|
|
167
|
+
assertPlatformAuthInventoryFenceWithinDeadline(deadline);
|
|
168
|
+
const acquired = await queryPlatformAuthInventoryFenceWithinDeadline(connection, `SELECT pg_try_advisory_lock(
|
|
169
|
+
hashtextextended($1 || current_schema(), 0)
|
|
170
|
+
) AS acquired`, [PLATFORM_AUTH_INVENTORY_SOURCE_FENCE_LOCK_PREFIX], deadline);
|
|
171
|
+
if (acquired.rows[0]?.acquired === true)
|
|
172
|
+
return;
|
|
173
|
+
await delayPlatformAuthInventoryFence(Math.min(10, remainingPlatformAuthInventoryFenceMilliseconds(deadline)));
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
function budgetedPlatformAuthInventoryFenceConnection(connection, deadline, options) {
|
|
177
|
+
if (deadline === undefined)
|
|
178
|
+
return { connection, abort: () => undefined };
|
|
179
|
+
let aborted = false;
|
|
180
|
+
let pending = Promise.resolve();
|
|
181
|
+
return {
|
|
182
|
+
connection: {
|
|
183
|
+
query: (sql, values) => {
|
|
184
|
+
const query = pending.then(async () => {
|
|
185
|
+
if (aborted)
|
|
186
|
+
throw new PlatformAuthMigrationError('inventory_unavailable');
|
|
187
|
+
await setPlatformAuthInventoryFenceTransactionTimeouts(connection, options, deadline);
|
|
188
|
+
if (aborted)
|
|
189
|
+
throw new PlatformAuthMigrationError('inventory_unavailable');
|
|
190
|
+
return queryPlatformAuthInventoryFenceWithinDeadline(connection, sql, values, deadline);
|
|
191
|
+
});
|
|
192
|
+
pending = query.then(() => undefined, () => undefined);
|
|
193
|
+
return query;
|
|
194
|
+
},
|
|
195
|
+
},
|
|
196
|
+
abort: () => {
|
|
197
|
+
aborted = true;
|
|
198
|
+
},
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
async function runPlatformAuthInventoryFenceWithinDeadline(operation, deadline) {
|
|
202
|
+
if (deadline === undefined)
|
|
203
|
+
return operation;
|
|
204
|
+
let remaining;
|
|
205
|
+
try {
|
|
206
|
+
remaining = remainingPlatformAuthInventoryFenceMilliseconds(deadline);
|
|
207
|
+
}
|
|
208
|
+
catch (error) {
|
|
209
|
+
void operation.catch(() => undefined);
|
|
210
|
+
throw error;
|
|
211
|
+
}
|
|
212
|
+
let timeout;
|
|
213
|
+
try {
|
|
214
|
+
return await Promise.race([
|
|
215
|
+
operation,
|
|
216
|
+
new Promise((_, reject) => {
|
|
217
|
+
timeout = setTimeout(() => reject(new PlatformAuthInventoryFenceDeadlineError()), remaining);
|
|
218
|
+
}),
|
|
219
|
+
]);
|
|
220
|
+
}
|
|
221
|
+
finally {
|
|
222
|
+
if (timeout !== undefined)
|
|
223
|
+
clearTimeout(timeout);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
function remainingPlatformAuthInventoryFenceMilliseconds(deadline) {
|
|
227
|
+
if (deadline === undefined)
|
|
228
|
+
return Number.MAX_SAFE_INTEGER;
|
|
229
|
+
const remaining = Math.ceil(deadline - performance.now());
|
|
230
|
+
if (remaining <= 0)
|
|
231
|
+
throw new PlatformAuthInventoryFenceDeadlineError();
|
|
232
|
+
return remaining;
|
|
233
|
+
}
|
|
234
|
+
function assertPlatformAuthInventoryFenceWithinDeadline(deadline) {
|
|
235
|
+
remainingPlatformAuthInventoryFenceMilliseconds(deadline);
|
|
236
|
+
}
|
|
237
|
+
function delayPlatformAuthInventoryFence(milliseconds) {
|
|
238
|
+
return new Promise((resolve) => setTimeout(resolve, milliseconds));
|
|
239
|
+
}
|
|
240
|
+
//# sourceMappingURL=platform-auth-inventory-source-fence-transaction-postgres.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform-auth-inventory-source-fence-transaction-postgres.js","sourceRoot":"","sources":["../src/platform-auth-inventory-source-fence-transaction-postgres.ts"],"names":[],"mappings":"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"}
|