@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-account-reset-quarantine-postgres.d.ts
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { type PlatformAccountResetExecuteRequest, type PlatformAccountResetResult } from './platform-account-reset.js';
|
|
2
|
+
import { type PlatformAccountResetMutationOutcome, type PlatformAccountResetPool } from './platform-account-reset-operation-postgres.js';
|
|
3
|
+
import type { PlatformAccountResetPreparedPreviewValidation } from './platform-account-reset-preview-postgres.js';
|
|
4
|
+
import { type PlatformAccountResetPreviewResult } from './platform-account-reset-preview-result.js';
|
|
5
|
+
import { assertPlatformAuthInventorySourceFence } from './platform-auth-inventory-source-fence-postgres.js';
|
|
6
|
+
import type { PlatformAuthInventorySourceManifest } from './platform-auth-inventory-sources.js';
|
|
7
|
+
export type PlatformAccountResetQuarantineBoundary = 'canonical_validated' | 'operation_transitioned' | 'reservations_inserted' | 'principals_suspended' | 'authorization_codes_revoked' | 'consent_revoked' | 'device_authorizations_revoked' | 'developer_grants_revoked' | 'deployments_archived' | 'cleanup_ledger_stamped' | 'targets_transitioned' | 'event_appended';
|
|
8
|
+
interface QuarantineOptions {
|
|
9
|
+
readonly preview: {
|
|
10
|
+
prepareUsable(input: {
|
|
11
|
+
readonly operationId: string;
|
|
12
|
+
readonly releaseSha: string;
|
|
13
|
+
readonly expectedGeneration: number;
|
|
14
|
+
readonly previewChecksum: string;
|
|
15
|
+
}, deadline?: number): Promise<PlatformAccountResetPreparedPreviewValidation>;
|
|
16
|
+
assertPrepared(connection: Parameters<typeof assertPlatformAuthInventorySourceFence>[0], input: {
|
|
17
|
+
readonly operationId: string;
|
|
18
|
+
readonly releaseSha: string;
|
|
19
|
+
readonly expectedGeneration: number;
|
|
20
|
+
readonly previewChecksum: string;
|
|
21
|
+
}, prepared: PlatformAccountResetPreparedPreviewValidation): Promise<PlatformAccountResetPreviewResult>;
|
|
22
|
+
assertUsable(input: {
|
|
23
|
+
readonly operationId: string;
|
|
24
|
+
readonly releaseSha: string;
|
|
25
|
+
readonly expectedGeneration: number;
|
|
26
|
+
readonly previewChecksum: string;
|
|
27
|
+
}): Promise<PlatformAccountResetPreviewResult>;
|
|
28
|
+
};
|
|
29
|
+
readonly sourceAvailability: PlatformAuthInventorySourceManifest;
|
|
30
|
+
readonly releaseSha: string;
|
|
31
|
+
readonly workosRealm: string;
|
|
32
|
+
readonly approvedTargetSetFingerprint: string;
|
|
33
|
+
readonly actorFingerprint: string;
|
|
34
|
+
readonly googleRealm?: string;
|
|
35
|
+
readonly now?: () => Date;
|
|
36
|
+
readonly localCaptureTimeoutMs?: number;
|
|
37
|
+
readonly fault?: (boundary: PlatformAccountResetQuarantineBoundary) => void | Promise<void>;
|
|
38
|
+
}
|
|
39
|
+
export declare class PostgresPlatformAccountResetQuarantineStore {
|
|
40
|
+
#private;
|
|
41
|
+
constructor(pool: PlatformAccountResetPool, options: QuarantineOptions);
|
|
42
|
+
quarantine(rawRequest: PlatformAccountResetExecuteRequest): Promise<PlatformAccountResetResult>;
|
|
43
|
+
apply(rawRequest: PlatformAccountResetExecuteRequest): Promise<PlatformAccountResetMutationOutcome>;
|
|
44
|
+
}
|
|
45
|
+
export {};
|
|
46
|
+
//# sourceMappingURL=platform-account-reset-quarantine-postgres.d.ts.map
|
package/node_modules/@noodle-borg/service/dist/platform-account-reset-quarantine-postgres.d.ts.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform-account-reset-quarantine-postgres.d.ts","sourceRoot":"","sources":["../src/platform-account-reset-quarantine-postgres.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,kCAAkC,EAEvC,KAAK,0BAA0B,EAChC,MAAM,6BAA6B,CAAC;AAMrC,OAAO,EAOL,KAAK,mCAAmC,EACxC,KAAK,wBAAwB,EAG9B,MAAM,gDAAgD,CAAC;AAExD,OAAO,KAAK,EAAE,6CAA6C,EAAE,MAAM,8CAA8C,CAAC;AAClH,OAAO,EAEL,KAAK,iCAAiC,EACvC,MAAM,4CAA4C,CAAC;AAEpD,OAAO,EACL,sCAAsC,EAKvC,MAAM,oDAAoD,CAAC;AAC5D,OAAO,KAAK,EAAE,mCAAmC,EAAE,MAAM,sCAAsC,CAAC;AAEhG,MAAM,MAAM,sCAAsC,GAC9C,qBAAqB,GACrB,wBAAwB,GACxB,uBAAuB,GACvB,sBAAsB,GACtB,6BAA6B,GAC7B,iBAAiB,GACjB,+BAA+B,GAC/B,0BAA0B,GAC1B,sBAAsB,GACtB,wBAAwB,GACxB,sBAAsB,GACtB,gBAAgB,CAAC;AAErB,UAAU,iBAAiB;IACzB,QAAQ,CAAC,OAAO,EAAE;QAChB,aAAa,CACX,KAAK,EAAE;YACL,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;YAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;YAC5B,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;YACpC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;SAClC,EACD,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,6CAA6C,CAAC,CAAC;QAC1D,cAAc,CACZ,UAAU,EAAE,UAAU,CAAC,OAAO,sCAAsC,CAAC,CAAC,CAAC,CAAC,EACxE,KAAK,EAAE;YACL,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;YAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;YAC5B,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;YACpC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;SAClC,EACD,QAAQ,EAAE,6CAA6C,GACtD,OAAO,CAAC,iCAAiC,CAAC,CAAC;QAC9C,YAAY,CAAC,KAAK,EAAE;YAClB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;YAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;YAC5B,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;YACpC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;SAClC,GAAG,OAAO,CAAC,iCAAiC,CAAC,CAAC;KAChD,CAAC;IACF,QAAQ,CAAC,kBAAkB,EAAE,mCAAmC,CAAC;IACjE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,4BAA4B,EAAE,MAAM,CAAC;IAC9C,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,CAAC;IACxC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,QAAQ,EAAE,sCAAsC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7F;AAKD,qBAAa,2CAA2C;;gBAI1C,IAAI,EAAE,wBAAwB,EAAE,OAAO,EAAE,iBAAiB;IAShE,UAAU,CACd,UAAU,EAAE,kCAAkC,GAC7C,OAAO,CAAC,0BAA0B,CAAC;IAIhC,KAAK,CACT,UAAU,EAAE,kCAAkC,GAC7C,OAAO,CAAC,mCAAmC,CAAC;CA6WhD"}
|
|
@@ -0,0 +1,283 @@
|
|
|
1
|
+
import { PlatformAccountResetExecuteRequestSchema, } from './platform-account-reset.js';
|
|
2
|
+
import { remainingPlatformAccountResetDispatchMilliseconds, runPlatformAccountResetWithDispatchLock, } from './platform-account-reset-dispatch-lock-postgres.js';
|
|
3
|
+
import { canonicalJson, sha256Canonical } from './platform-account-reset-fingerprint.js';
|
|
4
|
+
import { assertPlatformAccountResetActionReplay, assertPlatformAccountResetApprovedTargetSet, assertPlatformAccountResetRequestMatches, loadPlatformAccountResetFrozenResources, loadPlatformAccountResetTargets, lockPlatformAccountResetOperation, parsePlatformAccountResetSafeResult, platformAccountResetActionEvidence, } from './platform-account-reset-operation-postgres.js';
|
|
5
|
+
import { loadPlatformAccountResetContactEvidence } from './platform-account-reset-preview-evidence-postgres.js';
|
|
6
|
+
import { PlatformAccountResetPreviewError, } from './platform-account-reset-preview-result.js';
|
|
7
|
+
import { PostgresPlatformAuthLegacyInventorySources } from './platform-auth-inventory-legacy-sources-postgres.js';
|
|
8
|
+
import { assertPlatformAuthInventorySourceFence, lockPlatformAuthInventorySourceFenceTargets, PLATFORM_ACCOUNT_RESET_EXECUTION_TABLES, readPlatformAuthInventorySourceEpoch, runPlatformAuthInventorySourceFenceTransaction, } from './platform-auth-inventory-source-fence-postgres.js';
|
|
9
|
+
const DEFAULT_LOCAL_CAPTURE_TIMEOUT_MS = 5_000;
|
|
10
|
+
const MAX_LOCAL_CAPTURE_TIMEOUT_MS = 60_000;
|
|
11
|
+
export class PostgresPlatformAccountResetQuarantineStore {
|
|
12
|
+
#pool;
|
|
13
|
+
#options;
|
|
14
|
+
constructor(pool, options) {
|
|
15
|
+
this.#pool = pool;
|
|
16
|
+
this.#options = {
|
|
17
|
+
...options,
|
|
18
|
+
googleRealm: options.googleRealm ?? 'accounts.google.com',
|
|
19
|
+
now: options.now ?? (() => new Date()),
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
async quarantine(rawRequest) {
|
|
23
|
+
return (await this.apply(rawRequest)).result;
|
|
24
|
+
}
|
|
25
|
+
async apply(rawRequest) {
|
|
26
|
+
const request = PlatformAccountResetExecuteRequestSchema.parse(rawRequest);
|
|
27
|
+
if (request.action !== 'quarantine')
|
|
28
|
+
throw new PlatformAccountResetPreviewError('operation_conflict');
|
|
29
|
+
return runPlatformAccountResetWithDispatchLock(this.#pool, {
|
|
30
|
+
operationId: request.operationId,
|
|
31
|
+
timeoutMs: this.#localCaptureTimeout(),
|
|
32
|
+
task: (context) => this.#applyLocked(request, context.replayLifecycle, context.deadline),
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
async #applyLocked(request, replayLifecycle, deadline) {
|
|
36
|
+
const evidence = platformAccountResetActionEvidence(request, this.#options.actorFingerprint);
|
|
37
|
+
const previewEvidence = {
|
|
38
|
+
operationId: request.operationId,
|
|
39
|
+
releaseSha: request.releaseSha,
|
|
40
|
+
expectedGeneration: request.expectedGeneration,
|
|
41
|
+
previewChecksum: request.previewChecksum,
|
|
42
|
+
};
|
|
43
|
+
const prepared = replayLifecycle === 'quarantined'
|
|
44
|
+
? undefined
|
|
45
|
+
: await this.#options.preview.prepareUsable(previewEvidence, deadline);
|
|
46
|
+
return runPlatformAuthInventorySourceFenceTransaction(this.#pool, async (connection) => {
|
|
47
|
+
await this.#assertSourceFence(connection);
|
|
48
|
+
const operation = await lockPlatformAccountResetOperation(connection, request.operationId);
|
|
49
|
+
assertPlatformAccountResetApprovedTargetSet(operation, this.#options.approvedTargetSetFingerprint);
|
|
50
|
+
const resources = await loadPlatformAccountResetFrozenResources(connection, request.operationId);
|
|
51
|
+
if (operation.lifecycle === 'quarantined') {
|
|
52
|
+
const result = assertPlatformAccountResetActionReplay(evidence, {
|
|
53
|
+
idempotencyKeyHash: operation.quarantine_idempotency_key_hash,
|
|
54
|
+
requestFingerprint: operation.quarantine_request_fingerprint,
|
|
55
|
+
reasonFingerprint: operation.quarantine_reason_fingerprint,
|
|
56
|
+
actorFingerprint: operation.quarantine_actor_fingerprint,
|
|
57
|
+
safeResult: operation.quarantine_safe_result,
|
|
58
|
+
});
|
|
59
|
+
return {
|
|
60
|
+
result,
|
|
61
|
+
registry: this.#registryPlan(resources.apps, operation.quarantined_at),
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
const validated = prepared === undefined
|
|
65
|
+
? undefined
|
|
66
|
+
: await this.#options.preview.assertPrepared(connection, previewEvidence, prepared);
|
|
67
|
+
if (operation.lifecycle !== 'previewed' || validated === undefined)
|
|
68
|
+
throw new PlatformAccountResetPreviewError('operation_conflict');
|
|
69
|
+
assertPlatformAccountResetRequestMatches(operation, request, this.#options);
|
|
70
|
+
this.#assertStoredPreview(operation.safe_result, validated);
|
|
71
|
+
const targets = await loadPlatformAccountResetTargets(connection, request.operationId, 'previewed');
|
|
72
|
+
await lockPlatformAuthInventorySourceFenceTargets(connection, targets);
|
|
73
|
+
await this.#assertCurrentCoordination(connection, operation.source_epoch, request);
|
|
74
|
+
const contacts = await loadPlatformAccountResetContactEvidence(connection, targets, this.#options.sourceAvailability);
|
|
75
|
+
if (contacts.normalizedContacts.size !== 3 ||
|
|
76
|
+
contacts.missingCount !== 0 ||
|
|
77
|
+
contacts.ambiguousCount !== 0)
|
|
78
|
+
throw new PlatformAccountResetPreviewError('operation_conflict');
|
|
79
|
+
await this.#assertSuspensionTrigger(connection);
|
|
80
|
+
const result = this.#quarantineResult(parsePlatformAccountResetSafeResult(operation.safe_result), resources.resourceCount);
|
|
81
|
+
await this.#fault('canonical_validated');
|
|
82
|
+
const operationTransitioned = await connection.query(`WITH authority AS MATERIALIZED (
|
|
83
|
+
SELECT clock_timestamp() AS quarantined_at
|
|
84
|
+
)
|
|
85
|
+
UPDATE platform_account_reset_operations operation
|
|
86
|
+
SET lifecycle = 'quarantined',
|
|
87
|
+
quarantined_at = authority.quarantined_at,
|
|
88
|
+
finalize_after = authority.quarantined_at + interval '24 hours',
|
|
89
|
+
quarantine_idempotency_key_hash = $2,
|
|
90
|
+
quarantine_request_fingerprint = $3,
|
|
91
|
+
quarantine_reason_fingerprint = $4,
|
|
92
|
+
quarantine_actor_fingerprint = $5,
|
|
93
|
+
quarantine_safe_result = $6::jsonb,
|
|
94
|
+
updated_at = authority.quarantined_at
|
|
95
|
+
FROM authority
|
|
96
|
+
WHERE operation.operation_id = $1 AND operation.lifecycle = 'previewed'
|
|
97
|
+
AND operation.preview_expires_at > authority.quarantined_at
|
|
98
|
+
RETURNING operation.quarantined_at::text AS quarantined_at,
|
|
99
|
+
operation.finalize_after::text AS finalize_after`, [
|
|
100
|
+
request.operationId,
|
|
101
|
+
evidence.idempotencyKeyHash,
|
|
102
|
+
evidence.requestFingerprint,
|
|
103
|
+
evidence.reasonFingerprint,
|
|
104
|
+
evidence.actorFingerprint,
|
|
105
|
+
JSON.stringify(result),
|
|
106
|
+
]);
|
|
107
|
+
if (operationTransitioned.rows.length !== 1)
|
|
108
|
+
throw new PlatformAccountResetPreviewError('operation_conflict');
|
|
109
|
+
const quarantinedAtValue = operationTransitioned.rows[0]?.quarantined_at;
|
|
110
|
+
const finalizeAfterValue = operationTransitioned.rows[0]?.finalize_after;
|
|
111
|
+
const quarantinedAt = validTimestamp(quarantinedAtValue);
|
|
112
|
+
validTimestamp(finalizeAfterValue);
|
|
113
|
+
await this.#fault('operation_transitioned');
|
|
114
|
+
for (const target of targets) {
|
|
115
|
+
const normalizedEmail = contacts.normalizedContacts.get(target);
|
|
116
|
+
if (normalizedEmail === undefined)
|
|
117
|
+
throw new PlatformAccountResetPreviewError('operation_conflict');
|
|
118
|
+
await connection.query(`INSERT INTO platform_account_reset_email_reservations
|
|
119
|
+
(operation_id, realm, normalized_email, principal_id, expires_at, created_at)
|
|
120
|
+
VALUES ($1, $2, $3, $4, $5, $6)`, [
|
|
121
|
+
request.operationId,
|
|
122
|
+
this.#options.workosRealm,
|
|
123
|
+
normalizedEmail,
|
|
124
|
+
target,
|
|
125
|
+
finalizeAfterValue,
|
|
126
|
+
quarantinedAtValue,
|
|
127
|
+
]);
|
|
128
|
+
}
|
|
129
|
+
await this.#fault('reservations_inserted');
|
|
130
|
+
const suspended = await connection.query(`UPDATE platform_principals
|
|
131
|
+
SET status = 'suspended', suspended_at = $2
|
|
132
|
+
WHERE principal_id = ANY($1::text[]) AND status = 'active'
|
|
133
|
+
RETURNING principal_id`, [targets, quarantinedAtValue]);
|
|
134
|
+
if (suspended.rows.length !== 3)
|
|
135
|
+
throw new PlatformAccountResetPreviewError('principal_not_active');
|
|
136
|
+
await this.#fault('principals_suspended');
|
|
137
|
+
await connection.query(`DELETE FROM oauth_authorization_codes
|
|
138
|
+
WHERE owner_subject = ANY($1::text[])
|
|
139
|
+
AND identity_kind IS DISTINCT FROM 'customer'`, [targets]);
|
|
140
|
+
await this.#fault('authorization_codes_revoked');
|
|
141
|
+
await connection.query(`DELETE FROM oauth_consent_grant_provenance
|
|
142
|
+
WHERE owner_subject = ANY($1::text[]) AND identity_kind = 'platform'`, [targets]);
|
|
143
|
+
await connection.query(`DELETE FROM oauth_consent_grants
|
|
144
|
+
WHERE owner_subject = ANY($1::text[]) AND identity_kind = 'platform'`, [targets]);
|
|
145
|
+
await this.#fault('consent_revoked');
|
|
146
|
+
await connection.query(`DELETE FROM oauth_device_authorizations
|
|
147
|
+
WHERE owner_subject = ANY($1::text[])
|
|
148
|
+
AND identity_kind IS DISTINCT FROM 'customer'`, [targets]);
|
|
149
|
+
await this.#fault('device_authorizations_revoked');
|
|
150
|
+
await connection.query(`UPDATE developer_access_grants
|
|
151
|
+
SET revoked_at = $2, updated_at = $2
|
|
152
|
+
WHERE subject = ANY($1::text[]) AND revoked_at IS NULL`, [targets, quarantinedAtValue]);
|
|
153
|
+
await this.#fault('developer_grants_revoked');
|
|
154
|
+
const archived = await connection.query(`UPDATE deploy_records
|
|
155
|
+
SET archived_at = $2
|
|
156
|
+
WHERE deployment_id = ANY($1::text[]) AND archived_at IS NULL
|
|
157
|
+
RETURNING deployment_id`, [resources.deploymentIds, quarantinedAtValue]);
|
|
158
|
+
if (archived.rows.length !== resources.deploymentIds.length)
|
|
159
|
+
throw new PlatformAccountResetPreviewError('operation_conflict');
|
|
160
|
+
await this.#fault('deployments_archived');
|
|
161
|
+
const archivedIds = archived.rows.map((row) => row.deployment_id);
|
|
162
|
+
const stamped = await connection.query(`UPDATE platform_account_reset_cleanup_ledger
|
|
163
|
+
SET quarantine_archive_at = $3, updated_at = $3
|
|
164
|
+
WHERE operation_id = $1 AND provider = 'postgres'
|
|
165
|
+
AND resource_kind = 'deployment'
|
|
166
|
+
AND provider_locator::jsonb->>'deploymentId' = ANY($2::text[])
|
|
167
|
+
AND quarantine_archive_at IS NULL
|
|
168
|
+
RETURNING ledger_id`, [request.operationId, archivedIds, quarantinedAtValue]);
|
|
169
|
+
if (stamped.rows.length !== archivedIds.length)
|
|
170
|
+
throw new PlatformAccountResetPreviewError('operation_conflict');
|
|
171
|
+
await this.#fault('cleanup_ledger_stamped');
|
|
172
|
+
const targetsTransitioned = await connection.query(`UPDATE platform_account_reset_targets
|
|
173
|
+
SET lifecycle = 'quarantined', updated_at = $2
|
|
174
|
+
WHERE operation_id = $1 AND lifecycle = 'previewed'
|
|
175
|
+
RETURNING principal_id`, [request.operationId, quarantinedAtValue]);
|
|
176
|
+
if (targetsTransitioned.rows.length !== 3)
|
|
177
|
+
throw new PlatformAccountResetPreviewError('operation_conflict');
|
|
178
|
+
await this.#fault('targets_transitioned');
|
|
179
|
+
await connection.query(`INSERT INTO platform_account_reset_events
|
|
180
|
+
(operation_id, event_type, target_set_fingerprint, event_fingerprint,
|
|
181
|
+
target_count, resource_count, blocker_count, created_at)
|
|
182
|
+
VALUES ($1, 'quarantined', $2, $3, 3, $4, 0, $5)`, [
|
|
183
|
+
request.operationId,
|
|
184
|
+
result.targetSetFingerprint,
|
|
185
|
+
sha256Canonical({
|
|
186
|
+
schemaVersion: 1,
|
|
187
|
+
label: 'platform_account_reset_event:quarantined',
|
|
188
|
+
operationId: request.operationId,
|
|
189
|
+
requestFingerprint: evidence.requestFingerprint,
|
|
190
|
+
result,
|
|
191
|
+
}),
|
|
192
|
+
resources.resourceCount,
|
|
193
|
+
quarantinedAtValue,
|
|
194
|
+
]);
|
|
195
|
+
await this.#fault('event_appended');
|
|
196
|
+
return {
|
|
197
|
+
result,
|
|
198
|
+
registry: {
|
|
199
|
+
action: 'quarantine',
|
|
200
|
+
apps: resources.apps,
|
|
201
|
+
archivedAt: quarantinedAt.toISOString(),
|
|
202
|
+
},
|
|
203
|
+
};
|
|
204
|
+
}, this.#transactionOptions(deadline));
|
|
205
|
+
}
|
|
206
|
+
async #assertSourceFence(connection) {
|
|
207
|
+
await new PostgresPlatformAuthLegacyInventorySources({
|
|
208
|
+
googleRealm: this.#options.googleRealm,
|
|
209
|
+
sourceAvailability: this.#options.sourceAvailability,
|
|
210
|
+
excludedSubjects: [],
|
|
211
|
+
}).assertManifest(connection);
|
|
212
|
+
await assertPlatformAuthInventorySourceFence(connection, this.#options.sourceAvailability);
|
|
213
|
+
}
|
|
214
|
+
async #assertCurrentCoordination(connection, storedSourceEpoch, request) {
|
|
215
|
+
if (Number(await readPlatformAuthInventorySourceEpoch(connection)) !== Number(storedSourceEpoch))
|
|
216
|
+
throw new PlatformAccountResetPreviewError('source_epoch_mismatch');
|
|
217
|
+
const rollout = await connection.query(`SELECT generation::text, lifecycle, workos_percentage
|
|
218
|
+
FROM platform_auth_rollout_state WHERE singleton = true FOR SHARE`);
|
|
219
|
+
const state = rollout.rows[0];
|
|
220
|
+
if (state === undefined || Number(state.generation) !== request.expectedGeneration)
|
|
221
|
+
throw new PlatformAccountResetPreviewError('generation_mismatch');
|
|
222
|
+
if (state.lifecycle !== 'google' || state.workos_percentage !== 0)
|
|
223
|
+
throw new PlatformAccountResetPreviewError('operation_conflict');
|
|
224
|
+
}
|
|
225
|
+
async #assertSuspensionTrigger(connection) {
|
|
226
|
+
const installed = await connection.query(`SELECT 1 FROM pg_trigger
|
|
227
|
+
WHERE tgrelid = to_regclass('platform_principals')
|
|
228
|
+
AND tgname = 'platform_principal_suspension_revokes_refresh_tokens_trigger'
|
|
229
|
+
AND NOT tgisinternal AND tgenabled <> 'D'`);
|
|
230
|
+
if (installed.rows[0] === undefined)
|
|
231
|
+
throw new PlatformAccountResetPreviewError('operation_conflict');
|
|
232
|
+
}
|
|
233
|
+
#assertStoredPreview(value, validated) {
|
|
234
|
+
const stored = parsePlatformAccountResetSafeResult(value);
|
|
235
|
+
const { workosRealmFingerprint: _realm, previewExpiresAt: _expiry, ...safe } = validated;
|
|
236
|
+
if (canonicalJson(stored) !== canonicalJson(safe))
|
|
237
|
+
throw new PlatformAccountResetPreviewError('operation_conflict');
|
|
238
|
+
}
|
|
239
|
+
#quarantineResult(preview, resourceCount) {
|
|
240
|
+
return {
|
|
241
|
+
...preview,
|
|
242
|
+
lifecycle: 'quarantined',
|
|
243
|
+
counts: {
|
|
244
|
+
...preview.counts,
|
|
245
|
+
suspendedPrincipalCount: 3,
|
|
246
|
+
cleanupPendingCount: resourceCount,
|
|
247
|
+
},
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
#registryPlan(apps, quarantinedAt) {
|
|
251
|
+
const at = quarantinedAt === null ? new Date(Number.NaN) : new Date(quarantinedAt);
|
|
252
|
+
if (!Number.isFinite(at.getTime()))
|
|
253
|
+
throw new PlatformAccountResetPreviewError('operation_conflict');
|
|
254
|
+
return { action: 'quarantine', apps, archivedAt: at.toISOString() };
|
|
255
|
+
}
|
|
256
|
+
async #fault(boundary) {
|
|
257
|
+
await this.#options.fault?.(boundary);
|
|
258
|
+
}
|
|
259
|
+
#transactionOptions(deadline) {
|
|
260
|
+
const timeout = deadline === undefined
|
|
261
|
+
? this.#localCaptureTimeout()
|
|
262
|
+
: remainingPlatformAccountResetDispatchMilliseconds(deadline, this.#localCaptureTimeout());
|
|
263
|
+
return {
|
|
264
|
+
lockTables: PLATFORM_ACCOUNT_RESET_EXECUTION_TABLES,
|
|
265
|
+
lockTimeoutMs: timeout,
|
|
266
|
+
statementTimeoutMs: timeout,
|
|
267
|
+
};
|
|
268
|
+
}
|
|
269
|
+
#localCaptureTimeout() {
|
|
270
|
+
return Math.min(this.#options.localCaptureTimeoutMs !== undefined &&
|
|
271
|
+
Number.isSafeInteger(this.#options.localCaptureTimeoutMs) &&
|
|
272
|
+
this.#options.localCaptureTimeoutMs > 0
|
|
273
|
+
? this.#options.localCaptureTimeoutMs
|
|
274
|
+
: DEFAULT_LOCAL_CAPTURE_TIMEOUT_MS, MAX_LOCAL_CAPTURE_TIMEOUT_MS);
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
function validTimestamp(value) {
|
|
278
|
+
const timestamp = value === undefined ? new Date(Number.NaN) : new Date(value);
|
|
279
|
+
if (!Number.isFinite(timestamp.getTime()))
|
|
280
|
+
throw new PlatformAccountResetPreviewError('operation_conflict');
|
|
281
|
+
return timestamp;
|
|
282
|
+
}
|
|
283
|
+
//# sourceMappingURL=platform-account-reset-quarantine-postgres.js.map
|
package/node_modules/@noodle-borg/service/dist/platform-account-reset-quarantine-postgres.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform-account-reset-quarantine-postgres.js","sourceRoot":"","sources":["../src/platform-account-reset-quarantine-postgres.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { PlatformAccountResetResult } from './platform-account-reset.js';
|
|
2
|
+
import { type PlatformAccountResetCleanupResource } from './platform-account-reset-ownership-postgres.js';
|
|
3
|
+
import type { PlatformAuthInventorySourceManifest } from './platform-auth-inventory-sources.js';
|
|
4
|
+
import type { PlatformIdentityQueryable } from './platform-identity-postgres.js';
|
|
5
|
+
export declare function assertPlatformAccountResetRollbackEligibility(connection: PlatformIdentityQueryable, input: {
|
|
6
|
+
readonly operationId: string;
|
|
7
|
+
readonly targets: readonly string[];
|
|
8
|
+
readonly frozenContacts: ReadonlyMap<string, string>;
|
|
9
|
+
readonly frozenCleanupResources: readonly PlatformAccountResetCleanupResource[];
|
|
10
|
+
readonly sourceAvailability: PlatformAuthInventorySourceManifest;
|
|
11
|
+
readonly baseResult: PlatformAccountResetResult;
|
|
12
|
+
}): Promise<string>;
|
|
13
|
+
//# sourceMappingURL=platform-account-reset-rollback-eligibility-postgres.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform-account-reset-rollback-eligibility-postgres.d.ts","sourceRoot":"","sources":["../src/platform-account-reset-rollback-eligibility-postgres.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AAE9E,OAAO,EAEL,KAAK,mCAAmC,EACzC,MAAM,gDAAgD,CAAC;AAMxD,OAAO,KAAK,EAAE,mCAAmC,EAAE,MAAM,sCAAsC,CAAC;AAChG,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AAcjF,wBAAsB,6CAA6C,CACjE,UAAU,EAAE,yBAAyB,EACrC,KAAK,EAAE;IACL,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrD,QAAQ,CAAC,sBAAsB,EAAE,SAAS,mCAAmC,EAAE,CAAC;IAChF,QAAQ,CAAC,kBAAkB,EAAE,mCAAmC,CAAC;IACjE,QAAQ,CAAC,UAAU,EAAE,0BAA0B,CAAC;CACjD,GACA,OAAO,CAAC,MAAM,CAAC,CA0FjB"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { canonicalJson, sha256Canonical } from './platform-account-reset-fingerprint.js';
|
|
2
|
+
import { loadPlatformAccountResetOwnershipSnapshot, } from './platform-account-reset-ownership-postgres.js';
|
|
3
|
+
import { loadPlatformAccountResetContactEvidence, loadPlatformAccountResetCustomerEvidence, } from './platform-account-reset-preview-evidence-postgres.js';
|
|
4
|
+
import { PlatformAccountResetPreviewError } from './platform-account-reset-preview-result.js';
|
|
5
|
+
export async function assertPlatformAccountResetRollbackEligibility(connection, input) {
|
|
6
|
+
const verified = await connection.query(`SELECT 1 FROM platform_verified_emails
|
|
7
|
+
WHERE principal_id = ANY($1::text[])
|
|
8
|
+
LIMIT 1`, [input.targets]);
|
|
9
|
+
if (verified.rows[0] !== undefined)
|
|
10
|
+
throw new PlatformAccountResetPreviewError('operation_conflict');
|
|
11
|
+
const customerEvidence = await loadPlatformAccountResetCustomerEvidence(connection, input.targets);
|
|
12
|
+
if (customerEvidence.length !== 0)
|
|
13
|
+
throw new PlatformAccountResetPreviewError('operation_conflict');
|
|
14
|
+
const contactEvidence = await loadPlatformAccountResetContactEvidence(connection, input.targets, input.sourceAvailability);
|
|
15
|
+
if (contactEvidence.missingCount !== 0 ||
|
|
16
|
+
contactEvidence.ambiguousCount !== 0 ||
|
|
17
|
+
canonicalJson(orderedEntries(contactEvidence.normalizedContacts)) !==
|
|
18
|
+
canonicalJson(orderedEntries(input.frozenContacts)))
|
|
19
|
+
throw new PlatformAccountResetPreviewError('operation_conflict');
|
|
20
|
+
const personal = await connection.query(`SELECT binding.principal_subject, binding.org_slug,
|
|
21
|
+
binding.billing_identity_issuer, binding.billing_subject,
|
|
22
|
+
binding.billing_account_id,
|
|
23
|
+
defaults.billing_account_id AS default_billing_account_id,
|
|
24
|
+
home.billing_account_id AS home_billing_account_id,
|
|
25
|
+
home.home_owner_identity_issuer, home.home_owner_subject
|
|
26
|
+
FROM personal_workspace_bindings binding
|
|
27
|
+
LEFT JOIN billing_account_defaults defaults
|
|
28
|
+
ON defaults.identity_issuer = binding.billing_identity_issuer
|
|
29
|
+
AND defaults.subject = binding.billing_subject
|
|
30
|
+
LEFT JOIN org_billing_home_accounts home ON home.org_slug = binding.org_slug
|
|
31
|
+
WHERE binding.principal_subject = ANY($1::text[])
|
|
32
|
+
ORDER BY binding.principal_subject, binding.org_slug`, [input.targets]);
|
|
33
|
+
if (personal.rows.length !== input.targets.length ||
|
|
34
|
+
personal.rows.some((row) => row.billing_identity_issuer !== 'https://accounts.google.com' ||
|
|
35
|
+
row.billing_subject !== row.principal_subject ||
|
|
36
|
+
row.billing_account_id !== row.default_billing_account_id ||
|
|
37
|
+
row.billing_account_id !== row.home_billing_account_id ||
|
|
38
|
+
row.home_owner_identity_issuer !== 'https://accounts.google.com' ||
|
|
39
|
+
row.home_owner_subject !== row.principal_subject))
|
|
40
|
+
throw new PlatformAccountResetPreviewError('operation_conflict');
|
|
41
|
+
const ownership = await loadPlatformAccountResetOwnershipSnapshot(connection, {
|
|
42
|
+
targetPrincipalIds: input.targets,
|
|
43
|
+
quarantine: {
|
|
44
|
+
operationId: input.operationId,
|
|
45
|
+
cleanupResources: input.frozenCleanupResources,
|
|
46
|
+
},
|
|
47
|
+
});
|
|
48
|
+
if (ownership.blockers.length !== 0)
|
|
49
|
+
throw new PlatformAccountResetPreviewError('operation_conflict');
|
|
50
|
+
const frozenLocalResources = input.frozenCleanupResources
|
|
51
|
+
.filter((resource) => resource.provider !== 'workos')
|
|
52
|
+
.sort((left, right) => canonicalJson(left).localeCompare(canonicalJson(right)));
|
|
53
|
+
if (canonicalJson(ownership.cleanupResources) !== canonicalJson(frozenLocalResources) ||
|
|
54
|
+
!sameCounts(ownership.counts, ownership.cleanupResources.length, input.baseResult.counts))
|
|
55
|
+
throw new PlatformAccountResetPreviewError('operation_conflict');
|
|
56
|
+
return sha256Canonical({
|
|
57
|
+
schemaVersion: 1,
|
|
58
|
+
label: 'platform_account_reset_rollback_eligibility',
|
|
59
|
+
targets: input.targets,
|
|
60
|
+
frozenContacts: orderedEntries(input.frozenContacts),
|
|
61
|
+
contactEvidence: [...contactEvidence.evidenceByTarget].sort(([left], [right]) => left.localeCompare(right)),
|
|
62
|
+
personal: personal.rows,
|
|
63
|
+
ownershipFingerprint: ownership.ownershipFingerprint,
|
|
64
|
+
cleanupSetFingerprint: ownership.cleanupSetFingerprint,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
function sameCounts(actual, actualCleanupResourceCount, expected) {
|
|
68
|
+
return (actual.personalOrganizationCount === expected.personalOrganizationCount &&
|
|
69
|
+
actual.soleOwnedOrganizationCount === expected.soleOwnedOrganizationCount &&
|
|
70
|
+
actual.ownerOnlyAppCount === expected.ownerOnlyAppCount &&
|
|
71
|
+
actual.preservedSharedOrganizationCount === expected.preservedSharedOrganizationCount &&
|
|
72
|
+
actual.membershipCount === expected.membershipCount &&
|
|
73
|
+
actual.billingAccountCount === expected.billingAccountCount &&
|
|
74
|
+
actual.credentialCount === expected.credentialCount &&
|
|
75
|
+
actual.providerObjectCount + expected.cleanupPendingCount - actualCleanupResourceCount ===
|
|
76
|
+
expected.providerObjectCount);
|
|
77
|
+
}
|
|
78
|
+
function orderedEntries(values) {
|
|
79
|
+
return [...values].sort(([left], [right]) => left.localeCompare(right));
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=platform-account-reset-rollback-eligibility-postgres.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform-account-reset-rollback-eligibility-postgres.js","sourceRoot":"","sources":["../src/platform-account-reset-rollback-eligibility-postgres.ts"],"names":[],"mappings":"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"}
|
package/node_modules/@noodle-borg/service/dist/platform-account-reset-rollback-local-postgres.d.ts
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { type PlatformAccountResetResult } from './platform-account-reset.js';
|
|
2
|
+
import type { PlatformAuthInventorySourceManifest } from './platform-auth-inventory-sources.js';
|
|
3
|
+
import type { PlatformIdentityQueryable } from './platform-identity-postgres.js';
|
|
4
|
+
export interface PlatformAccountResetCanonicalCleanupResource {
|
|
5
|
+
readonly provider: 'postgres' | 'object_storage' | 'github' | 'stripe' | 'workos';
|
|
6
|
+
readonly resourceKind: string;
|
|
7
|
+
readonly locator: Readonly<Record<string, unknown>>;
|
|
8
|
+
readonly locatorFingerprint: string;
|
|
9
|
+
}
|
|
10
|
+
export interface PlatformAccountResetRollbackLocalInspection {
|
|
11
|
+
readonly operationId: string;
|
|
12
|
+
readonly sourceEpoch: number;
|
|
13
|
+
readonly rolloutGeneration: number;
|
|
14
|
+
readonly releaseSha: string;
|
|
15
|
+
readonly targetSetFingerprint: string;
|
|
16
|
+
readonly targets: readonly string[];
|
|
17
|
+
readonly contacts: ReadonlyMap<string, string>;
|
|
18
|
+
readonly workosResources: readonly PlatformAccountResetCanonicalCleanupResource[];
|
|
19
|
+
readonly baseResult: PlatformAccountResetResult;
|
|
20
|
+
readonly evidenceFingerprint: string;
|
|
21
|
+
}
|
|
22
|
+
interface RollbackLocalOptions {
|
|
23
|
+
readonly googleRealm: string;
|
|
24
|
+
readonly workosRealm: string;
|
|
25
|
+
readonly releaseSha: string;
|
|
26
|
+
readonly sourceAvailability: PlatformAuthInventorySourceManifest;
|
|
27
|
+
}
|
|
28
|
+
export declare function inspectPlatformAccountResetRollbackLocalEvidence(connection: PlatformIdentityQueryable, operationId: string, options: RollbackLocalOptions): Promise<PlatformAccountResetRollbackLocalInspection>;
|
|
29
|
+
export {};
|
|
30
|
+
//# sourceMappingURL=platform-account-reset-rollback-local-postgres.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"platform-account-reset-rollback-local-postgres.d.ts","sourceRoot":"","sources":["../src/platform-account-reset-rollback-local-postgres.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,0BAA0B,EAEhC,MAAM,6BAA6B,CAAC;AAQrC,OAAO,KAAK,EAAE,mCAAmC,EAAE,MAAM,sCAAsC,CAAC;AAChG,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,iCAAiC,CAAC;AA8BjF,MAAM,WAAW,4CAA4C;IAC3D,QAAQ,CAAC,QAAQ,EAAE,UAAU,GAAG,gBAAgB,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAClF,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACpD,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;CACrC;AAED,MAAM,WAAW,2CAA2C;IAC1D,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/C,QAAQ,CAAC,eAAe,EAAE,SAAS,4CAA4C,EAAE,CAAC;IAClF,QAAQ,CAAC,UAAU,EAAE,0BAA0B,CAAC;IAChD,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;CACtC;AAED,UAAU,oBAAoB;IAC5B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,kBAAkB,EAAE,mCAAmC,CAAC;CAClE;AAED,wBAAsB,gDAAgD,CACpE,UAAU,EAAE,yBAAyB,EACrC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,2CAA2C,CAAC,CAuPtD"}
|