@antasphere/chassis-server 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +82 -0
- package/dist/accounts/deletion.d.ts +163 -0
- package/dist/accounts/deletion.d.ts.map +1 -0
- package/dist/accounts/deletion.js +360 -0
- package/dist/accounts/deletion.js.map +1 -0
- package/dist/accounts/erasure-log.d.ts +66 -0
- package/dist/accounts/erasure-log.d.ts.map +1 -0
- package/dist/accounts/erasure-log.js +117 -0
- package/dist/accounts/erasure-log.js.map +1 -0
- package/dist/accounts/index.d.ts +6 -0
- package/dist/accounts/index.d.ts.map +1 -0
- package/dist/accounts/index.js +6 -0
- package/dist/accounts/index.js.map +1 -0
- package/dist/accounts/mint-refusal.d.ts +47 -0
- package/dist/accounts/mint-refusal.d.ts.map +1 -0
- package/dist/accounts/mint-refusal.js +59 -0
- package/dist/accounts/mint-refusal.js.map +1 -0
- package/dist/accounts/signup-duplicate.d.ts +14 -0
- package/dist/accounts/signup-duplicate.d.ts.map +1 -0
- package/dist/accounts/signup-duplicate.js +25 -0
- package/dist/accounts/signup-duplicate.js.map +1 -0
- package/dist/accounts/superadmin.d.ts +27 -0
- package/dist/accounts/superadmin.d.ts.map +1 -0
- package/dist/accounts/superadmin.js +46 -0
- package/dist/accounts/superadmin.js.map +1 -0
- package/dist/api/apikeys.d.ts +14 -0
- package/dist/api/apikeys.d.ts.map +1 -0
- package/dist/api/apikeys.js +124 -0
- package/dist/api/apikeys.js.map +1 -0
- package/dist/api/audit.d.ts +4 -0
- package/dist/api/audit.d.ts.map +1 -0
- package/dist/api/audit.js +75 -0
- package/dist/api/audit.js.map +1 -0
- package/dist/api/break-glass.d.ts +48 -0
- package/dist/api/break-glass.d.ts.map +1 -0
- package/dist/api/break-glass.js +217 -0
- package/dist/api/break-glass.js.map +1 -0
- package/dist/api/cli-auth.d.ts +84 -0
- package/dist/api/cli-auth.d.ts.map +1 -0
- package/dist/api/cli-auth.js +177 -0
- package/dist/api/cli-auth.js.map +1 -0
- package/dist/api/create-api.d.ts +123 -0
- package/dist/api/create-api.d.ts.map +1 -0
- package/dist/api/create-api.js +1165 -0
- package/dist/api/create-api.js.map +1 -0
- package/dist/api/demo-passes.d.ts +45 -0
- package/dist/api/demo-passes.d.ts.map +1 -0
- package/dist/api/demo-passes.js +143 -0
- package/dist/api/demo-passes.js.map +1 -0
- package/dist/api/errors.d.ts +5 -0
- package/dist/api/errors.d.ts.map +1 -0
- package/dist/api/errors.js +5 -0
- package/dist/api/errors.js.map +1 -0
- package/dist/api/export.d.ts +63 -0
- package/dist/api/export.d.ts.map +1 -0
- package/dist/api/export.js +393 -0
- package/dist/api/export.js.map +1 -0
- package/dist/api/files.d.ts +40 -0
- package/dist/api/files.d.ts.map +1 -0
- package/dist/api/files.js +150 -0
- package/dist/api/files.js.map +1 -0
- package/dist/api/index.d.ts +17 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +17 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/invitations.d.ts +50 -0
- package/dist/api/invitations.d.ts.map +1 -0
- package/dist/api/invitations.js +313 -0
- package/dist/api/invitations.js.map +1 -0
- package/dist/api/members.d.ts +25 -0
- package/dist/api/members.d.ts.map +1 -0
- package/dist/api/members.js +522 -0
- package/dist/api/members.js.map +1 -0
- package/dist/api/onboarding.d.ts +26 -0
- package/dist/api/onboarding.d.ts.map +1 -0
- package/dist/api/onboarding.js +23 -0
- package/dist/api/onboarding.js.map +1 -0
- package/dist/api/openapi-doc.d.ts +21 -0
- package/dist/api/openapi-doc.d.ts.map +1 -0
- package/dist/api/openapi-doc.js +25 -0
- package/dist/api/openapi-doc.js.map +1 -0
- package/dist/api/projects.d.ts +24 -0
- package/dist/api/projects.d.ts.map +1 -0
- package/dist/api/projects.js +624 -0
- package/dist/api/projects.js.map +1 -0
- package/dist/api/scope-routes.d.ts +12 -0
- package/dist/api/scope-routes.d.ts.map +1 -0
- package/dist/api/scope-routes.js +2 -0
- package/dist/api/scope-routes.js.map +1 -0
- package/dist/api/sso-connect.d.ts +70 -0
- package/dist/api/sso-connect.d.ts.map +1 -0
- package/dist/api/sso-connect.js +164 -0
- package/dist/api/sso-connect.js.map +1 -0
- package/dist/api/sso-logout.d.ts +41 -0
- package/dist/api/sso-logout.d.ts.map +1 -0
- package/dist/api/sso-logout.js +34 -0
- package/dist/api/sso-logout.js.map +1 -0
- package/dist/api/teams.d.ts +43 -0
- package/dist/api/teams.d.ts.map +1 -0
- package/dist/api/teams.js +447 -0
- package/dist/api/teams.js.map +1 -0
- package/dist/api/workspaces.d.ts +114 -0
- package/dist/api/workspaces.d.ts.map +1 -0
- package/dist/api/workspaces.js +462 -0
- package/dist/api/workspaces.js.map +1 -0
- package/dist/apikeys/index.d.ts +3 -0
- package/dist/apikeys/index.d.ts.map +1 -0
- package/dist/apikeys/index.js +3 -0
- package/dist/apikeys/index.js.map +1 -0
- package/dist/apikeys/peppers.d.ts +53 -0
- package/dist/apikeys/peppers.d.ts.map +1 -0
- package/dist/apikeys/peppers.js +97 -0
- package/dist/apikeys/peppers.js.map +1 -0
- package/dist/apikeys/service.d.ts +56 -0
- package/dist/apikeys/service.d.ts.map +1 -0
- package/dist/apikeys/service.js +196 -0
- package/dist/apikeys/service.js.map +1 -0
- package/dist/app.d.ts +65 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +142 -0
- package/dist/app.js.map +1 -0
- package/dist/audit/filters.d.ts +38 -0
- package/dist/audit/filters.d.ts.map +1 -0
- package/dist/audit/filters.js +97 -0
- package/dist/audit/filters.js.map +1 -0
- package/dist/audit/index.d.ts +3 -0
- package/dist/audit/index.d.ts.map +1 -0
- package/dist/audit/index.js +3 -0
- package/dist/audit/index.js.map +1 -0
- package/dist/audit/service.d.ts +65 -0
- package/dist/audit/service.d.ts.map +1 -0
- package/dist/audit/service.js +103 -0
- package/dist/audit/service.js.map +1 -0
- package/dist/boot.d.ts +8 -0
- package/dist/boot.d.ts.map +1 -0
- package/dist/boot.js +822 -0
- package/dist/boot.js.map +1 -0
- package/dist/constant-time.d.ts +3 -0
- package/dist/constant-time.d.ts.map +1 -0
- package/dist/constant-time.js +10 -0
- package/dist/constant-time.js.map +1 -0
- package/dist/email/driver.d.ts +16 -0
- package/dist/email/driver.d.ts.map +1 -0
- package/dist/email/driver.js +136 -0
- package/dist/email/driver.js.map +1 -0
- package/dist/email/index.d.ts +4 -0
- package/dist/email/index.d.ts.map +1 -0
- package/dist/email/index.js +4 -0
- package/dist/email/index.js.map +1 -0
- package/dist/email/shell.d.ts +72 -0
- package/dist/email/shell.d.ts.map +1 -0
- package/dist/email/shell.js +146 -0
- package/dist/email/shell.js.map +1 -0
- package/dist/email/templates.d.ts +83 -0
- package/dist/email/templates.d.ts.map +1 -0
- package/dist/email/templates.js +96 -0
- package/dist/email/templates.js.map +1 -0
- package/dist/entitlements/check.d.ts +140 -0
- package/dist/entitlements/check.d.ts.map +1 -0
- package/dist/entitlements/check.js +276 -0
- package/dist/entitlements/check.js.map +1 -0
- package/dist/entitlements/clock-skew.d.ts +27 -0
- package/dist/entitlements/clock-skew.d.ts.map +1 -0
- package/dist/entitlements/clock-skew.js +58 -0
- package/dist/entitlements/clock-skew.js.map +1 -0
- package/dist/entitlements/gate.d.ts +113 -0
- package/dist/entitlements/gate.d.ts.map +1 -0
- package/dist/entitlements/gate.js +430 -0
- package/dist/entitlements/gate.js.map +1 -0
- package/dist/entitlements/hub-machine-token.d.ts +83 -0
- package/dist/entitlements/hub-machine-token.d.ts.map +1 -0
- package/dist/entitlements/hub-machine-token.js +175 -0
- package/dist/entitlements/hub-machine-token.js.map +1 -0
- package/dist/entitlements/hub-subject.d.ts +32 -0
- package/dist/entitlements/hub-subject.d.ts.map +1 -0
- package/dist/entitlements/hub-subject.js +68 -0
- package/dist/entitlements/hub-subject.js.map +1 -0
- package/dist/entitlements/index.d.ts +9 -0
- package/dist/entitlements/index.d.ts.map +1 -0
- package/dist/entitlements/index.js +9 -0
- package/dist/entitlements/index.js.map +1 -0
- package/dist/entitlements/poster.d.ts +81 -0
- package/dist/entitlements/poster.d.ts.map +1 -0
- package/dist/entitlements/poster.js +169 -0
- package/dist/entitlements/poster.js.map +1 -0
- package/dist/entitlements/profiles.d.ts +121 -0
- package/dist/entitlements/profiles.d.ts.map +1 -0
- package/dist/entitlements/profiles.js +212 -0
- package/dist/entitlements/profiles.js.map +1 -0
- package/dist/entitlements/slot.d.ts +33 -0
- package/dist/entitlements/slot.d.ts.map +1 -0
- package/dist/entitlements/slot.js +75 -0
- package/dist/entitlements/slot.js.map +1 -0
- package/dist/env.d.ts +293 -0
- package/dist/env.d.ts.map +1 -0
- package/dist/env.js +383 -0
- package/dist/env.js.map +1 -0
- package/dist/files/http.d.ts +23 -0
- package/dist/files/http.d.ts.map +1 -0
- package/dist/files/http.js +66 -0
- package/dist/files/http.js.map +1 -0
- package/dist/files/index.d.ts +5 -0
- package/dist/files/index.d.ts.map +1 -0
- package/dist/files/index.js +5 -0
- package/dist/files/index.js.map +1 -0
- package/dist/files/serve.d.ts +43 -0
- package/dist/files/serve.d.ts.map +1 -0
- package/dist/files/serve.js +71 -0
- package/dist/files/serve.js.map +1 -0
- package/dist/files/service.d.ts +69 -0
- package/dist/files/service.d.ts.map +1 -0
- package/dist/files/service.js +188 -0
- package/dist/files/service.js.map +1 -0
- package/dist/files/spool.d.ts +21 -0
- package/dist/files/spool.d.ts.map +1 -0
- package/dist/files/spool.js +47 -0
- package/dist/files/spool.js.map +1 -0
- package/dist/identity/better-auth.d.ts +3927 -0
- package/dist/identity/better-auth.d.ts.map +1 -0
- package/dist/identity/better-auth.js +896 -0
- package/dist/identity/better-auth.js.map +1 -0
- package/dist/identity/demo-pass-plugin.d.ts +29 -0
- package/dist/identity/demo-pass-plugin.d.ts.map +1 -0
- package/dist/identity/demo-pass-plugin.js +88 -0
- package/dist/identity/demo-pass-plugin.js.map +1 -0
- package/dist/identity/demo-pass-rules.d.ts +84 -0
- package/dist/identity/demo-pass-rules.d.ts.map +1 -0
- package/dist/identity/demo-pass-rules.js +223 -0
- package/dist/identity/demo-pass-rules.js.map +1 -0
- package/dist/identity/demo-pass.d.ts +159 -0
- package/dist/identity/demo-pass.d.ts.map +1 -0
- package/dist/identity/demo-pass.js +319 -0
- package/dist/identity/demo-pass.js.map +1 -0
- package/dist/identity/hub-grant.d.ts +182 -0
- package/dist/identity/hub-grant.d.ts.map +1 -0
- package/dist/identity/hub-grant.js +594 -0
- package/dist/identity/hub-grant.js.map +1 -0
- package/dist/identity/hub-jwt.d.ts +22 -0
- package/dist/identity/hub-jwt.d.ts.map +1 -0
- package/dist/identity/hub-jwt.js +77 -0
- package/dist/identity/hub-jwt.js.map +1 -0
- package/dist/identity/hub-live-gate.d.ts +17 -0
- package/dist/identity/hub-live-gate.d.ts.map +1 -0
- package/dist/identity/hub-live-gate.js +146 -0
- package/dist/identity/hub-live-gate.js.map +1 -0
- package/dist/identity/hub-logout.d.ts +88 -0
- package/dist/identity/hub-logout.d.ts.map +1 -0
- package/dist/identity/hub-logout.js +158 -0
- package/dist/identity/hub-logout.js.map +1 -0
- package/dist/identity/hub-projection.d.ts +103 -0
- package/dist/identity/hub-projection.d.ts.map +1 -0
- package/dist/identity/hub-projection.js +130 -0
- package/dist/identity/hub-projection.js.map +1 -0
- package/dist/identity/hub-reconcile.d.ts +151 -0
- package/dist/identity/hub-reconcile.d.ts.map +1 -0
- package/dist/identity/hub-reconcile.js +400 -0
- package/dist/identity/hub-reconcile.js.map +1 -0
- package/dist/identity/hub-sso.d.ts +363 -0
- package/dist/identity/hub-sso.d.ts.map +1 -0
- package/dist/identity/hub-sso.js +536 -0
- package/dist/identity/hub-sso.js.map +1 -0
- package/dist/identity/hub-user-client.d.ts +222 -0
- package/dist/identity/hub-user-client.d.ts.map +1 -0
- package/dist/identity/hub-user-client.js +406 -0
- package/dist/identity/hub-user-client.js.map +1 -0
- package/dist/identity/index.d.ts +13 -0
- package/dist/identity/index.d.ts.map +1 -0
- package/dist/identity/index.js +13 -0
- package/dist/identity/index.js.map +1 -0
- package/dist/identity/oauth-jwt.d.ts +32 -0
- package/dist/identity/oauth-jwt.d.ts.map +1 -0
- package/dist/identity/oauth-jwt.js +122 -0
- package/dist/identity/oauth-jwt.js.map +1 -0
- package/dist/identity/resolve-membership.d.ts +28 -0
- package/dist/identity/resolve-membership.d.ts.map +1 -0
- package/dist/identity/resolve-membership.js +69 -0
- package/dist/identity/resolve-membership.js.map +1 -0
- package/dist/identity/signing-key.d.ts +49 -0
- package/dist/identity/signing-key.d.ts.map +1 -0
- package/dist/identity/signing-key.js +144 -0
- package/dist/identity/signing-key.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -0
- package/dist/invitations/index.d.ts +2 -0
- package/dist/invitations/index.d.ts.map +1 -0
- package/dist/invitations/index.js +2 -0
- package/dist/invitations/index.js.map +1 -0
- package/dist/invitations/service.d.ts +36 -0
- package/dist/invitations/service.d.ts.map +1 -0
- package/dist/invitations/service.js +122 -0
- package/dist/invitations/service.js.map +1 -0
- package/dist/jobs/index.d.ts +3 -0
- package/dist/jobs/index.d.ts.map +1 -0
- package/dist/jobs/index.js +3 -0
- package/dist/jobs/index.js.map +1 -0
- package/dist/jobs/pgboss.d.ts +119 -0
- package/dist/jobs/pgboss.d.ts.map +1 -0
- package/dist/jobs/pgboss.js +521 -0
- package/dist/jobs/pgboss.js.map +1 -0
- package/dist/jobs/timers.d.ts +127 -0
- package/dist/jobs/timers.d.ts.map +1 -0
- package/dist/jobs/timers.js +228 -0
- package/dist/jobs/timers.js.map +1 -0
- package/dist/logger.d.ts +17 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +64 -0
- package/dist/logger.js.map +1 -0
- package/dist/mcp/errors.d.ts +37 -0
- package/dist/mcp/errors.d.ts.map +1 -0
- package/dist/mcp/errors.js +77 -0
- package/dist/mcp/errors.js.map +1 -0
- package/dist/mcp/http.d.ts +35 -0
- package/dist/mcp/http.d.ts.map +1 -0
- package/dist/mcp/http.js +80 -0
- package/dist/mcp/http.js.map +1 -0
- package/dist/mcp/index.d.ts +8 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +8 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/inputs.d.ts +19 -0
- package/dist/mcp/inputs.d.ts.map +1 -0
- package/dist/mcp/inputs.js +28 -0
- package/dist/mcp/inputs.js.map +1 -0
- package/dist/mcp/projects.d.ts +31 -0
- package/dist/mcp/projects.d.ts.map +1 -0
- package/dist/mcp/projects.js +315 -0
- package/dist/mcp/projects.js.map +1 -0
- package/dist/mcp/server.d.ts +52 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +93 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/teams.d.ts +7 -0
- package/dist/mcp/teams.d.ts.map +1 -0
- package/dist/mcp/teams.js +62 -0
- package/dist/mcp/teams.js.map +1 -0
- package/dist/mcp/tool-kit.d.ts +67 -0
- package/dist/mcp/tool-kit.d.ts.map +1 -0
- package/dist/mcp/tool-kit.js +74 -0
- package/dist/mcp/tool-kit.js.map +1 -0
- package/dist/members/removal.d.ts +95 -0
- package/dist/members/removal.d.ts.map +1 -0
- package/dist/members/removal.js +143 -0
- package/dist/members/removal.js.map +1 -0
- package/dist/middleware/auth-body.d.ts +25 -0
- package/dist/middleware/auth-body.d.ts.map +1 -0
- package/dist/middleware/auth-body.js +55 -0
- package/dist/middleware/auth-body.js.map +1 -0
- package/dist/middleware/auth-context.d.ts +170 -0
- package/dist/middleware/auth-context.d.ts.map +1 -0
- package/dist/middleware/auth-context.js +251 -0
- package/dist/middleware/auth-context.js.map +1 -0
- package/dist/middleware/body-cap.d.ts +17 -0
- package/dist/middleware/body-cap.d.ts.map +1 -0
- package/dist/middleware/body-cap.js +31 -0
- package/dist/middleware/body-cap.js.map +1 -0
- package/dist/middleware/body-refusal.d.ts +20 -0
- package/dist/middleware/body-refusal.d.ts.map +1 -0
- package/dist/middleware/body-refusal.js +5 -0
- package/dist/middleware/body-refusal.js.map +1 -0
- package/dist/middleware/cross-site.d.ts +61 -0
- package/dist/middleware/cross-site.d.ts.map +1 -0
- package/dist/middleware/cross-site.js +59 -0
- package/dist/middleware/cross-site.js.map +1 -0
- package/dist/middleware/hub-managed.d.ts +45 -0
- package/dist/middleware/hub-managed.d.ts.map +1 -0
- package/dist/middleware/hub-managed.js +56 -0
- package/dist/middleware/hub-managed.js.map +1 -0
- package/dist/middleware/idempotency.d.ts +14 -0
- package/dist/middleware/idempotency.d.ts.map +1 -0
- package/dist/middleware/idempotency.js +222 -0
- package/dist/middleware/idempotency.js.map +1 -0
- package/dist/middleware/index.d.ts +12 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/middleware/index.js +12 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/middleware/json-depth.d.ts +32 -0
- package/dist/middleware/json-depth.d.ts.map +1 -0
- package/dist/middleware/json-depth.js +80 -0
- package/dist/middleware/json-depth.js.map +1 -0
- package/dist/middleware/no-store.d.ts +21 -0
- package/dist/middleware/no-store.d.ts.map +1 -0
- package/dist/middleware/no-store.js +32 -0
- package/dist/middleware/no-store.js.map +1 -0
- package/dist/middleware/oauth-public.d.ts +16 -0
- package/dist/middleware/oauth-public.d.ts.map +1 -0
- package/dist/middleware/oauth-public.js +50 -0
- package/dist/middleware/oauth-public.js.map +1 -0
- package/dist/middleware/rate-limit.d.ts +182 -0
- package/dist/middleware/rate-limit.d.ts.map +1 -0
- package/dist/middleware/rate-limit.js +277 -0
- package/dist/middleware/rate-limit.js.map +1 -0
- package/dist/middleware/request-id.d.ts +10 -0
- package/dist/middleware/request-id.d.ts.map +1 -0
- package/dist/middleware/request-id.js +42 -0
- package/dist/middleware/request-id.js.map +1 -0
- package/dist/middleware/scopes.d.ts +33 -0
- package/dist/middleware/scopes.d.ts.map +1 -0
- package/dist/middleware/scopes.js +139 -0
- package/dist/middleware/scopes.js.map +1 -0
- package/dist/middleware/security-headers.d.ts +53 -0
- package/dist/middleware/security-headers.d.ts.map +1 -0
- package/dist/middleware/security-headers.js +96 -0
- package/dist/middleware/security-headers.js.map +1 -0
- package/dist/observability/index.d.ts +3 -0
- package/dist/observability/index.d.ts.map +1 -0
- package/dist/observability/index.js +3 -0
- package/dist/observability/index.js.map +1 -0
- package/dist/observability/metrics.d.ts +17 -0
- package/dist/observability/metrics.d.ts.map +1 -0
- package/dist/observability/metrics.js +82 -0
- package/dist/observability/metrics.js.map +1 -0
- package/dist/observability/otel.d.ts +20 -0
- package/dist/observability/otel.d.ts.map +1 -0
- package/dist/observability/otel.js +54 -0
- package/dist/observability/otel.js.map +1 -0
- package/dist/pagination.d.ts +57 -0
- package/dist/pagination.d.ts.map +1 -0
- package/dist/pagination.js +90 -0
- package/dist/pagination.js.map +1 -0
- package/dist/platform/edition.d.ts +57 -0
- package/dist/platform/edition.d.ts.map +1 -0
- package/dist/platform/edition.js +90 -0
- package/dist/platform/edition.js.map +1 -0
- package/dist/platform/entitlements.d.ts +26 -0
- package/dist/platform/entitlements.d.ts.map +1 -0
- package/dist/platform/entitlements.js +28 -0
- package/dist/platform/entitlements.js.map +1 -0
- package/dist/platform/events.d.ts +87 -0
- package/dist/platform/events.d.ts.map +1 -0
- package/dist/platform/events.js +32 -0
- package/dist/platform/events.js.map +1 -0
- package/dist/platform/index.d.ts +8 -0
- package/dist/platform/index.d.ts.map +1 -0
- package/dist/platform/index.js +8 -0
- package/dist/platform/index.js.map +1 -0
- package/dist/platform/local-identity.d.ts +39 -0
- package/dist/platform/local-identity.d.ts.map +1 -0
- package/dist/platform/local-identity.js +87 -0
- package/dist/platform/local-identity.js.map +1 -0
- package/dist/platform/registry.d.ts +23 -0
- package/dist/platform/registry.d.ts.map +1 -0
- package/dist/platform/registry.js +5 -0
- package/dist/platform/registry.js.map +1 -0
- package/dist/platform/usage.d.ts +11 -0
- package/dist/platform/usage.d.ts.map +1 -0
- package/dist/platform/usage.js +12 -0
- package/dist/platform/usage.js.map +1 -0
- package/dist/platform/workspaces.d.ts +25 -0
- package/dist/platform/workspaces.d.ts.map +1 -0
- package/dist/platform/workspaces.js +44 -0
- package/dist/platform/workspaces.js.map +1 -0
- package/dist/projects/access.d.ts +40 -0
- package/dist/projects/access.d.ts.map +1 -0
- package/dist/projects/access.js +133 -0
- package/dist/projects/access.js.map +1 -0
- package/dist/projects/index.d.ts +2 -0
- package/dist/projects/index.d.ts.map +1 -0
- package/dist/projects/index.js +2 -0
- package/dist/projects/index.js.map +1 -0
- package/dist/route-label.d.ts +23 -0
- package/dist/route-label.d.ts.map +1 -0
- package/dist/route-label.js +29 -0
- package/dist/route-label.js.map +1 -0
- package/dist/routes/health.d.ts +30 -0
- package/dist/routes/health.d.ts.map +1 -0
- package/dist/routes/health.js +54 -0
- package/dist/routes/health.js.map +1 -0
- package/dist/routes/index.d.ts +3 -0
- package/dist/routes/index.d.ts.map +1 -0
- package/dist/routes/index.js +3 -0
- package/dist/routes/index.js.map +1 -0
- package/dist/routes/wellknown.d.ts +11 -0
- package/dist/routes/wellknown.d.ts.map +1 -0
- package/dist/routes/wellknown.js +45 -0
- package/dist/routes/wellknown.js.map +1 -0
- package/dist/secret.d.ts +30 -0
- package/dist/secret.d.ts.map +1 -0
- package/dist/secret.js +97 -0
- package/dist/secret.js.map +1 -0
- package/dist/setup-transport.d.ts +23 -0
- package/dist/setup-transport.d.ts.map +1 -0
- package/dist/setup-transport.js +52 -0
- package/dist/setup-transport.js.map +1 -0
- package/dist/state.d.ts +21 -0
- package/dist/state.d.ts.map +1 -0
- package/dist/state.js +4 -0
- package/dist/state.js.map +1 -0
- package/dist/storage/driver.d.ts +38 -0
- package/dist/storage/driver.d.ts.map +1 -0
- package/dist/storage/driver.js +14 -0
- package/dist/storage/driver.js.map +1 -0
- package/dist/storage/factory.d.ts +4 -0
- package/dist/storage/factory.d.ts.map +1 -0
- package/dist/storage/factory.js +20 -0
- package/dist/storage/factory.js.map +1 -0
- package/dist/storage/index.d.ts +4 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +4 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/local.d.ts +21 -0
- package/dist/storage/local.d.ts.map +1 -0
- package/dist/storage/local.js +88 -0
- package/dist/storage/local.js.map +1 -0
- package/dist/storage/s3.d.ts +29 -0
- package/dist/storage/s3.d.ts.map +1 -0
- package/dist/storage/s3.js +82 -0
- package/dist/storage/s3.js.map +1 -0
- package/dist/testing/fake-hub.d.ts +425 -0
- package/dist/testing/fake-hub.d.ts.map +1 -0
- package/dist/testing/fake-hub.js +1074 -0
- package/dist/testing/fake-hub.js.map +1 -0
- package/dist/testing/helpers.d.ts +124 -0
- package/dist/testing/helpers.d.ts.map +1 -0
- package/dist/testing/helpers.js +174 -0
- package/dist/testing/helpers.js.map +1 -0
- package/dist/testing/index.d.ts +12 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +12 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/setup-origins.d.ts +21 -0
- package/dist/testing/setup-origins.d.ts.map +1 -0
- package/dist/testing/setup-origins.js +57 -0
- package/dist/testing/setup-origins.js.map +1 -0
- package/dist/testing/sso-helpers.d.ts +43 -0
- package/dist/testing/sso-helpers.d.ts.map +1 -0
- package/dist/testing/sso-helpers.js +159 -0
- package/dist/testing/sso-helpers.js.map +1 -0
- package/dist/tool-definition.d.ts +382 -0
- package/dist/tool-definition.d.ts.map +1 -0
- package/dist/tool-definition.js +46 -0
- package/dist/tool-definition.js.map +1 -0
- package/dist/util/index.d.ts +8 -0
- package/dist/util/index.d.ts.map +1 -0
- package/dist/util/index.js +8 -0
- package/dist/util/index.js.map +1 -0
- package/package.json +161 -0
- package/src/accounts/deletion.ts +389 -0
- package/src/accounts/erasure-log.ts +140 -0
- package/src/accounts/index.ts +5 -0
- package/src/accounts/mint-refusal.ts +67 -0
- package/src/accounts/signup-duplicate.ts +21 -0
- package/src/accounts/superadmin.ts +46 -0
- package/src/api/apikeys.ts +147 -0
- package/src/api/audit.ts +83 -0
- package/src/api/break-glass.ts +294 -0
- package/src/api/cli-auth.ts +308 -0
- package/src/api/create-api.ts +1403 -0
- package/src/api/demo-passes.ts +207 -0
- package/src/api/errors.ts +13 -0
- package/src/api/export.ts +482 -0
- package/src/api/files.ts +200 -0
- package/src/api/index.ts +29 -0
- package/src/api/invitations.ts +396 -0
- package/src/api/members.ts +617 -0
- package/src/api/onboarding.ts +50 -0
- package/src/api/openapi-doc.ts +34 -0
- package/src/api/projects.ts +788 -0
- package/src/api/scope-routes.ts +12 -0
- package/src/api/sso-connect.ts +246 -0
- package/src/api/sso-logout.ts +76 -0
- package/src/api/teams.ts +575 -0
- package/src/api/workspaces.ts +649 -0
- package/src/apikeys/index.ts +2 -0
- package/src/apikeys/peppers.ts +118 -0
- package/src/apikeys/service.ts +223 -0
- package/src/app.ts +228 -0
- package/src/audit/filters.ts +101 -0
- package/src/audit/index.ts +9 -0
- package/src/audit/service.ts +154 -0
- package/src/boot.ts +953 -0
- package/src/constant-time.ts +9 -0
- package/src/email/driver.ts +139 -0
- package/src/email/index.ts +26 -0
- package/src/email/shell.ts +201 -0
- package/src/email/templates.ts +184 -0
- package/src/entitlements/check.ts +435 -0
- package/src/entitlements/clock-skew.ts +58 -0
- package/src/entitlements/gate.ts +636 -0
- package/src/entitlements/hub-machine-token.ts +205 -0
- package/src/entitlements/hub-subject.ts +77 -0
- package/src/entitlements/index.ts +37 -0
- package/src/entitlements/poster.ts +265 -0
- package/src/entitlements/profiles.ts +303 -0
- package/src/entitlements/slot.ts +105 -0
- package/src/env.ts +456 -0
- package/src/files/http.ts +77 -0
- package/src/files/index.ts +4 -0
- package/src/files/serve.ts +115 -0
- package/src/files/service.ts +209 -0
- package/src/files/spool.ts +58 -0
- package/src/identity/better-auth.ts +1103 -0
- package/src/identity/demo-pass-plugin.ts +121 -0
- package/src/identity/demo-pass-rules.ts +229 -0
- package/src/identity/demo-pass.ts +390 -0
- package/src/identity/hub-grant.ts +704 -0
- package/src/identity/hub-jwt.ts +78 -0
- package/src/identity/hub-live-gate.ts +167 -0
- package/src/identity/hub-logout.ts +174 -0
- package/src/identity/hub-projection.ts +251 -0
- package/src/identity/hub-reconcile.ts +572 -0
- package/src/identity/hub-sso.ts +696 -0
- package/src/identity/hub-user-client.ts +554 -0
- package/src/identity/index.ts +56 -0
- package/src/identity/oauth-jwt.ts +128 -0
- package/src/identity/resolve-membership.ts +104 -0
- package/src/identity/signing-key.ts +164 -0
- package/src/index.ts +65 -0
- package/src/invitations/index.ts +1 -0
- package/src/invitations/service.ts +171 -0
- package/src/jobs/index.ts +25 -0
- package/src/jobs/pgboss.ts +594 -0
- package/src/jobs/timers.ts +287 -0
- package/src/logger.ts +67 -0
- package/src/mcp/errors.ts +111 -0
- package/src/mcp/http.ts +129 -0
- package/src/mcp/index.ts +28 -0
- package/src/mcp/inputs.ts +33 -0
- package/src/mcp/projects.ts +480 -0
- package/src/mcp/server.ts +174 -0
- package/src/mcp/teams.ts +97 -0
- package/src/mcp/tool-kit.ts +148 -0
- package/src/members/removal.ts +216 -0
- package/src/middleware/auth-body.ts +58 -0
- package/src/middleware/auth-context.ts +384 -0
- package/src/middleware/body-cap.ts +33 -0
- package/src/middleware/body-refusal.ts +23 -0
- package/src/middleware/cross-site.ts +122 -0
- package/src/middleware/hub-managed.ts +61 -0
- package/src/middleware/idempotency.ts +264 -0
- package/src/middleware/index.ts +33 -0
- package/src/middleware/json-depth.ts +74 -0
- package/src/middleware/no-store.ts +30 -0
- package/src/middleware/oauth-public.ts +54 -0
- package/src/middleware/rate-limit.ts +432 -0
- package/src/middleware/request-id.ts +54 -0
- package/src/middleware/scopes.ts +150 -0
- package/src/middleware/security-headers.ts +129 -0
- package/src/observability/index.ts +2 -0
- package/src/observability/metrics.ts +102 -0
- package/src/observability/otel.ts +79 -0
- package/src/pagination.ts +118 -0
- package/src/platform/edition.ts +140 -0
- package/src/platform/entitlements.ts +47 -0
- package/src/platform/events.ts +71 -0
- package/src/platform/index.ts +7 -0
- package/src/platform/local-identity.ts +90 -0
- package/src/platform/registry.ts +28 -0
- package/src/platform/usage.ts +13 -0
- package/src/platform/workspaces.ts +41 -0
- package/src/projects/access.ts +160 -0
- package/src/projects/index.ts +7 -0
- package/src/route-label.ts +29 -0
- package/src/routes/health.ts +79 -0
- package/src/routes/index.ts +2 -0
- package/src/routes/wellknown.ts +67 -0
- package/src/secret.ts +115 -0
- package/src/setup-transport.ts +46 -0
- package/src/state.ts +23 -0
- package/src/storage/driver.ts +48 -0
- package/src/storage/factory.ts +34 -0
- package/src/storage/index.ts +3 -0
- package/src/storage/local.ts +93 -0
- package/src/storage/s3.ts +109 -0
- package/src/testing/fake-hub.ts +1316 -0
- package/src/testing/helpers.ts +254 -0
- package/src/testing/index.ts +11 -0
- package/src/testing/setup-origins.ts +58 -0
- package/src/testing/sso-helpers.ts +178 -0
- package/src/tool-definition.ts +463 -0
- package/src/util/index.ts +17 -0
- package/test/fixtures/onboarding-backfill.sql +13 -0
- package/test/fixtures/operator-user-id-backfill.sql +18 -0
- package/test/host/dr-lib.sh +253 -0
- package/test/host/drizzle/0000_chassis_baseline.sql +438 -0
- package/test/host/drizzle/0001_last_owner_guard.sql +42 -0
- package/test/host/drizzle/meta/0000_snapshot.json +3566 -0
- package/test/host/drizzle/meta/_journal.json +20 -0
- package/test/host/drizzle.config.ts +17 -0
- package/test/host/identity.ts +41 -0
- package/test/host/minimal-host.ts +35 -0
- package/test/host/minimal-tool.ts +123 -0
- package/test/integration/account-oracle-uniformity.test.ts +284 -0
- package/test/integration/account-recovery.test.ts +236 -0
- package/test/integration/account.test.ts +120 -0
- package/test/integration/api-quota.test.ts +208 -0
- package/test/integration/apikey-expiry.test.ts +178 -0
- package/test/integration/apikey-pepper-rotation.test.ts +190 -0
- package/test/integration/boot-posture.test.ts +169 -0
- package/test/integration/break-glass.test.ts +484 -0
- package/test/integration/cloud-lifecycle.test.ts +233 -0
- package/test/integration/credential-boundaries.test.ts +195 -0
- package/test/integration/default-workspace.test.ts +414 -0
- package/test/integration/demo-pass-rules.test.ts +332 -0
- package/test/integration/demo-pass.test.ts +1222 -0
- package/test/integration/dr-verify-real-dump.test.ts +154 -0
- package/test/integration/edition.test.ts +868 -0
- package/test/integration/email-change.test.ts +394 -0
- package/test/integration/empty-tool.test.ts +267 -0
- package/test/integration/entitlements-null-hook.test.ts +187 -0
- package/test/integration/entitlements.test.ts +693 -0
- package/test/integration/export-entries.test.ts +321 -0
- package/test/integration/files.test.ts +320 -0
- package/test/integration/first-boot-claim.test.ts +131 -0
- package/test/integration/gdpr.test.ts +532 -0
- package/test/integration/helpers.ts +29 -0
- package/test/integration/hub-grant.test.ts +505 -0
- package/test/integration/hub-live-gate.test.ts +612 -0
- package/test/integration/hub-managed-membership.test.ts +559 -0
- package/test/integration/hub-org-selector.test.ts +281 -0
- package/test/integration/hub-reconcile.test.ts +646 -0
- package/test/integration/hub-sso.test.ts +704 -0
- package/test/integration/hub-teams.test.ts +771 -0
- package/test/integration/idempotency.test.ts +261 -0
- package/test/integration/invite-verification.test.ts +210 -0
- package/test/integration/last-owner-race.test.ts +263 -0
- package/test/integration/m9-fixes.test.ts +290 -0
- package/test/integration/mcp-projects.test.ts +463 -0
- package/test/integration/member-removal-race.test.ts +466 -0
- package/test/integration/member-removal.test.ts +794 -0
- package/test/integration/oauth-mcp.test.ts +477 -0
- package/test/integration/oauth-workspace.test.ts +371 -0
- package/test/integration/observability.test.ts +183 -0
- package/test/integration/onboarding.test.ts +268 -0
- package/test/integration/orphan-purge.test.ts +451 -0
- package/test/integration/pagination.test.ts +344 -0
- package/test/integration/platform-core.test.ts +305 -0
- package/test/integration/platform.test.ts +246 -0
- package/test/integration/pool-survives-restart.test.ts +80 -0
- package/test/integration/projects-cloud.test.ts +193 -0
- package/test/integration/projects.test.ts +1310 -0
- package/test/integration/security-fixes.test.ts +190 -0
- package/test/integration/setup-transport.test.ts +118 -0
- package/test/integration/signin-wall.test.ts +103 -0
- package/test/integration/signing-key-rotation.test.ts +349 -0
- package/test/integration/sso-helpers.ts +15 -0
- package/test/integration/sso-logout.test.ts +283 -0
- package/test/integration/teams-cloud.test.ts +194 -0
- package/test/integration/teams.test.ts +551 -0
- package/test/integration/timers.test.ts +377 -0
- package/test/integration/two-factor.test.ts +301 -0
- package/test/integration/usage-window.test.ts +161 -0
- package/test/integration/workspace-create-cloud.test.ts +523 -0
- package/test/integration/workspace-create.test.ts +510 -0
- package/test/integration/workspace-scoping.test.ts +530 -0
- package/test/integration/zz-adv-replay-owner.test.ts +205 -0
- package/test/unit/apikey-peppers.test.ts +110 -0
- package/test/unit/apikey-prefix.test.ts +34 -0
- package/test/unit/audit-filters.test.ts +135 -0
- package/test/unit/auth-origins.test.ts +92 -0
- package/test/unit/body-cap.test.ts +84 -0
- package/test/unit/clock-skew.test.ts +68 -0
- package/test/unit/cross-site.test.ts +166 -0
- package/test/unit/declared-credits.test.ts +13 -0
- package/test/unit/demo-pass-rules.test.ts +192 -0
- package/test/unit/email-driver.test.ts +127 -0
- package/test/unit/end-pool.test.ts +181 -0
- package/test/unit/entitlement-check.test.ts +492 -0
- package/test/unit/entitlement-gate.test.ts +1333 -0
- package/test/unit/entitlement-profiles.test.ts +289 -0
- package/test/unit/erasure-log.test.ts +72 -0
- package/test/unit/error-mapping.test.ts +89 -0
- package/test/unit/export-entries.test.ts +85 -0
- package/test/unit/export-sanitize.test.ts +27 -0
- package/test/unit/files-head-route.test.ts +155 -0
- package/test/unit/files-http.test.ts +97 -0
- package/test/unit/head-rewrite.test.ts +72 -0
- package/test/unit/hub-create-org.test.ts +181 -0
- package/test/unit/hub-jwt.test.ts +93 -0
- package/test/unit/hub-sso-params.test.ts +39 -0
- package/test/unit/hub-subject.test.ts +83 -0
- package/test/unit/idempotency-crypto.test.ts +45 -0
- package/test/unit/json-depth.test.ts +88 -0
- package/test/unit/logger-redaction.test.ts +66 -0
- package/test/unit/mcp-errors.test.ts +110 -0
- package/test/unit/mcp-inputs.test.ts +106 -0
- package/test/unit/mcp-project-hints.test.ts +26 -0
- package/test/unit/no-store.test.ts +49 -0
- package/test/unit/no-tool-migration-filename.test.ts +70 -0
- package/test/unit/observability.test.ts +64 -0
- package/test/unit/openapi-doc.test.ts +93 -0
- package/test/unit/rate-limit-consume-on.test.ts +76 -0
- package/test/unit/rate-limit.test.ts +39 -0
- package/test/unit/readyz-storage.test.ts +157 -0
- package/test/unit/request-quota.test.ts +146 -0
- package/test/unit/scopes.test.ts +66 -0
- package/test/unit/security-headers.test.ts +131 -0
- package/test/unit/serve-content-type.test.ts +74 -0
- package/test/unit/setup-transport.test.ts +29 -0
- package/test/unit/storage-local.test.ts +53 -0
- package/test/unit/superadmin.test.ts +32 -0
- package/test/unit/timers.test.ts +287 -0
- package/test/unit/tool-definition-guards.test.ts +166 -0
- package/test/unit/tool-entitlements-guard.test.ts +168 -0
- package/test/unit/usage-poster.test.ts +542 -0
- package/test/unit/usage-window.test.ts +48 -0
- package/test/unit/workspace-create-audit.test.ts +48 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { EntitlementDecision, EntitlementService, MeteredAction, Principal, RequestQuota } from '@antasphere/chassis-contract';
|
|
2
|
+
/**
|
|
3
|
+
* Default EntitlementService: everything is allowed, bounded only by
|
|
4
|
+
* instance-level env caps. The cloud/central edition swaps this via the
|
|
5
|
+
* registry for a credits-backed implementation; handlers only ever call
|
|
6
|
+
* `entitlements.check(...)` and never know the difference.
|
|
7
|
+
*/
|
|
8
|
+
export interface InstanceCaps {
|
|
9
|
+
maxFileSizeMb: number;
|
|
10
|
+
/** General-API quota defaults: sustained per-minute + 1 s spike cap (env-driven). */
|
|
11
|
+
apiRequestsPerMinute: number;
|
|
12
|
+
apiRequestsBurstPerSecond: number;
|
|
13
|
+
}
|
|
14
|
+
export declare class AllowAllEntitlements implements EntitlementService {
|
|
15
|
+
private readonly caps;
|
|
16
|
+
constructor(caps: InstanceCaps);
|
|
17
|
+
check(_principal: Principal, action: MeteredAction): Promise<EntitlementDecision>;
|
|
18
|
+
/**
|
|
19
|
+
* One flat instance-level quota for every principal. A plan-aware edition
|
|
20
|
+
* returns different values per plan here — the enforcing middleware keys
|
|
21
|
+
* buckets by (quota size, principal), so per-plan variation needs no other
|
|
22
|
+
* change.
|
|
23
|
+
*/
|
|
24
|
+
getRequestQuota(_principal: Principal): Promise<RequestQuota>;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=entitlements.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entitlements.d.ts","sourceRoot":"","sources":["../../src/platform/entitlements.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,mBAAmB,EACnB,kBAAkB,EAClB,aAAa,EACb,SAAS,EACT,YAAY,EACb,MAAM,8BAA8B,CAAC;AAEtC;;;;;GAKG;AACH,MAAM,WAAW,YAAY;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,qFAAqF;IACrF,oBAAoB,EAAE,MAAM,CAAC;IAC7B,yBAAyB,EAAE,MAAM,CAAC;CACnC;AAED,qBAAa,oBAAqB,YAAW,kBAAkB;IACjD,OAAO,CAAC,QAAQ,CAAC,IAAI;gBAAJ,IAAI,EAAE,YAAY;IAEzC,KAAK,CAAC,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAUvF;;;;;OAKG;IACG,eAAe,CAAC,UAAU,EAAE,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC;CAMpE"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export class AllowAllEntitlements {
|
|
2
|
+
caps;
|
|
3
|
+
constructor(caps) {
|
|
4
|
+
this.caps = caps;
|
|
5
|
+
}
|
|
6
|
+
async check(_principal, action) {
|
|
7
|
+
if (action.key === 'files.upload' && action.unit === 'bytes') {
|
|
8
|
+
const max = this.caps.maxFileSizeMb * 1024 * 1024;
|
|
9
|
+
if (action.quantity > max) {
|
|
10
|
+
return { allowed: false, reason: `file exceeds MAX_FILE_SIZE_MB (${this.caps.maxFileSizeMb}MB)` };
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
return { allowed: true };
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* One flat instance-level quota for every principal. A plan-aware edition
|
|
17
|
+
* returns different values per plan here — the enforcing middleware keys
|
|
18
|
+
* buckets by (quota size, principal), so per-plan variation needs no other
|
|
19
|
+
* change.
|
|
20
|
+
*/
|
|
21
|
+
async getRequestQuota(_principal) {
|
|
22
|
+
return {
|
|
23
|
+
perMinute: this.caps.apiRequestsPerMinute,
|
|
24
|
+
burstPerSecond: this.caps.apiRequestsBurstPerSecond
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=entitlements.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entitlements.js","sourceRoot":"","sources":["../../src/platform/entitlements.ts"],"names":[],"mappings":"AAqBA,MAAM,OAAO,oBAAoB;IACF;IAA7B,YAA6B,IAAkB;QAAlB,SAAI,GAAJ,IAAI,CAAc;IAAG,CAAC;IAEnD,KAAK,CAAC,KAAK,CAAC,UAAqB,EAAE,MAAqB;QACtD,IAAI,MAAM,CAAC,GAAG,KAAK,cAAc,IAAI,MAAM,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC7D,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,GAAG,IAAI,GAAG,IAAI,CAAC;YAClD,IAAI,MAAM,CAAC,QAAQ,GAAG,GAAG,EAAE,CAAC;gBAC1B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,kCAAkC,IAAI,CAAC,IAAI,CAAC,aAAa,KAAK,EAAE,CAAC;YACpG,CAAC;QACH,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,eAAe,CAAC,UAAqB;QACzC,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC,oBAAoB;YACzC,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,yBAAyB;SACpD,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import type { Logger } from '../logger.js';
|
|
2
|
+
/**
|
|
3
|
+
* Internal event bus: domain modules publish, platform modules (and later
|
|
4
|
+
* rail/ee modules registered at boot) subscribe. Deliberately synchronous
|
|
5
|
+
* fan-out with error isolation — a failing subscriber never breaks the
|
|
6
|
+
* publisher's request path.
|
|
7
|
+
*/
|
|
8
|
+
export type PlatformEvents = {
|
|
9
|
+
/**
|
|
10
|
+
* Fired by the identity layer (Better Auth databaseHooks.user.create.after,
|
|
11
|
+
* wired in boot) for EVERY account entrance — setup, invitation accept,
|
|
12
|
+
* collaborator claim, future SSO JIT. Trustworthy by construction; call
|
|
13
|
+
* sites never emit it.
|
|
14
|
+
*/
|
|
15
|
+
'user.created': {
|
|
16
|
+
userId: string;
|
|
17
|
+
email: string;
|
|
18
|
+
};
|
|
19
|
+
'member.joined': {
|
|
20
|
+
workspaceId: string;
|
|
21
|
+
userId: string;
|
|
22
|
+
role: string;
|
|
23
|
+
};
|
|
24
|
+
'member.updated': {
|
|
25
|
+
workspaceId: string;
|
|
26
|
+
userId: string;
|
|
27
|
+
};
|
|
28
|
+
'member.removed': {
|
|
29
|
+
workspaceId: string;
|
|
30
|
+
userId: string;
|
|
31
|
+
};
|
|
32
|
+
'apikey.created': {
|
|
33
|
+
workspaceId: string;
|
|
34
|
+
apiKeyId: string;
|
|
35
|
+
};
|
|
36
|
+
'apikey.revoked': {
|
|
37
|
+
workspaceId: string;
|
|
38
|
+
apiKeyId: string;
|
|
39
|
+
};
|
|
40
|
+
'invitation.created': {
|
|
41
|
+
workspaceId: string;
|
|
42
|
+
invitationId: string;
|
|
43
|
+
};
|
|
44
|
+
'invitation.accepted': {
|
|
45
|
+
workspaceId: string;
|
|
46
|
+
invitationId: string;
|
|
47
|
+
userId: string;
|
|
48
|
+
};
|
|
49
|
+
'file.uploaded': {
|
|
50
|
+
workspaceId: string;
|
|
51
|
+
fileId: string;
|
|
52
|
+
sizeBytes: number;
|
|
53
|
+
};
|
|
54
|
+
/** workspaceId is null on the cloud edition — setup creates no workspace there. */
|
|
55
|
+
/** A person created ANOTHER workspace from inside the product (POST /workspaces). */
|
|
56
|
+
'workspace.created': {
|
|
57
|
+
workspaceId: string;
|
|
58
|
+
ownerUserId: string;
|
|
59
|
+
};
|
|
60
|
+
'setup.completed': {
|
|
61
|
+
workspaceId: string | null;
|
|
62
|
+
instanceId: string;
|
|
63
|
+
};
|
|
64
|
+
};
|
|
65
|
+
/**
|
|
66
|
+
* The events a bus carries: the chassis ones plus the tool's own (`TExtra`, a
|
|
67
|
+
* map of event name to payload, declared by the tool that instantiates the bus).
|
|
68
|
+
*/
|
|
69
|
+
export type EventMap<TExtra = {}> = PlatformEvents & TExtra;
|
|
70
|
+
type Handler<M, E extends keyof M> = (payload: M[E]) => void | Promise<void>;
|
|
71
|
+
export declare class EventBus<TExtra = {}> {
|
|
72
|
+
private readonly logger;
|
|
73
|
+
private handlers;
|
|
74
|
+
constructor(logger: Logger);
|
|
75
|
+
on<E extends keyof EventMap<TExtra>>(event: E, handler: Handler<EventMap<TExtra>, E>): () => void;
|
|
76
|
+
/**
|
|
77
|
+
* The SAME bus as the chassis sees it: the generic events only. The
|
|
78
|
+
* composition code is generic over the tool's event map, and a bus is
|
|
79
|
+
* invariant in it (it both takes and hands out payloads), so the chassis
|
|
80
|
+
* modules, written against the generic map, read the bus through this view.
|
|
81
|
+
* Sound as long as a tool never re-declares a chassis event name.
|
|
82
|
+
*/
|
|
83
|
+
chassisView(): EventBus;
|
|
84
|
+
emit<E extends keyof EventMap<TExtra>>(event: E, payload: EventMap<TExtra>[E]): void;
|
|
85
|
+
}
|
|
86
|
+
export {};
|
|
87
|
+
//# sourceMappingURL=events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../../src/platform/events.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAE3C;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG;IAC3B;;;;;OAKG;IACH,cAAc,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAClD,eAAe,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACvE,gBAAgB,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1D,gBAAgB,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1D,gBAAgB,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5D,gBAAgB,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5D,oBAAoB,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC;IACpE,qBAAqB,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IACrF,eAAe,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5E,mFAAmF;IACnF,qFAAqF;IACrF,mBAAmB,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;IAClE,iBAAiB,EAAE;QAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;CACvE,CAAC;AAEF;;;GAGG;AAEH,MAAM,MAAM,QAAQ,CAAC,MAAM,GAAG,EAAE,IAAI,cAAc,GAAG,MAAM,CAAC;AAE5D,KAAK,OAAO,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAG7E,qBAAa,QAAQ,CAAC,MAAM,GAAG,EAAE;IAGnB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAFnC,OAAO,CAAC,QAAQ,CAA4E;gBAE/D,MAAM,EAAE,MAAM;IAE3C,EAAE,CAAC,CAAC,SAAS,MAAM,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,IAAI;IAOjG;;;;;;OAMG;IACH,WAAW,IAAI,QAAQ;IAIvB,IAAI,CAAC,CAAC,SAAS,MAAM,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;CAOrF"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-object-type
|
|
2
|
+
export class EventBus {
|
|
3
|
+
logger;
|
|
4
|
+
handlers = new Map();
|
|
5
|
+
constructor(logger) {
|
|
6
|
+
this.logger = logger;
|
|
7
|
+
}
|
|
8
|
+
on(event, handler) {
|
|
9
|
+
const set = this.handlers.get(event) ?? new Set();
|
|
10
|
+
set.add(handler);
|
|
11
|
+
this.handlers.set(event, set);
|
|
12
|
+
return () => set.delete(handler);
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* The SAME bus as the chassis sees it: the generic events only. The
|
|
16
|
+
* composition code is generic over the tool's event map, and a bus is
|
|
17
|
+
* invariant in it (it both takes and hands out payloads), so the chassis
|
|
18
|
+
* modules, written against the generic map, read the bus through this view.
|
|
19
|
+
* Sound as long as a tool never re-declares a chassis event name.
|
|
20
|
+
*/
|
|
21
|
+
chassisView() {
|
|
22
|
+
return this;
|
|
23
|
+
}
|
|
24
|
+
emit(event, payload) {
|
|
25
|
+
for (const handler of this.handlers.get(event) ?? []) {
|
|
26
|
+
Promise.resolve(handler(payload)).catch((err) => {
|
|
27
|
+
this.logger.error({ err, event }, 'event handler failed');
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events.js","sourceRoot":"","sources":["../../src/platform/events.ts"],"names":[],"mappings":"AAuCA,mEAAmE;AACnE,MAAM,OAAO,QAAQ;IAGU;IAFrB,QAAQ,GAAG,IAAI,GAAG,EAAiE,CAAC;IAE5F,YAA6B,MAAc;QAAd,WAAM,GAAN,MAAM,CAAQ;IAAG,CAAC;IAE/C,EAAE,CAAmC,KAAQ,EAAE,OAAqC;QAClF,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC;QAClD,GAAG,CAAC,GAAG,CAAC,OAA2C,CAAC,CAAC;QACrD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC9B,OAAO,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,OAA2C,CAAC,CAAC;IACvE,CAAC;IAED;;;;;;OAMG;IACH,WAAW;QACT,OAAO,IAA2B,CAAC;IACrC,CAAC;IAED,IAAI,CAAmC,KAAQ,EAAE,OAA4B;QAC3E,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;YACrD,OAAO,CAAC,OAAO,CAAE,OAAwC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;gBAChF,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,sBAAsB,CAAC,CAAC;YAC5D,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { AllowAllEntitlements } from './entitlements.js';
|
|
2
|
+
export { EventBus } from './events.js';
|
|
3
|
+
export { type PlatformRegistry, createRegistry } from './registry.js';
|
|
4
|
+
export { NoopUsageSink } from './usage.js';
|
|
5
|
+
export { WorkspaceService } from './workspaces.js';
|
|
6
|
+
export { bindEditionSeams } from './edition.js';
|
|
7
|
+
export { LocalIdentityProvider } from './local-identity.js';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/platform/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,KAAK,gBAAgB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { AllowAllEntitlements } from './entitlements.js';
|
|
2
|
+
export { EventBus } from './events.js';
|
|
3
|
+
export { createRegistry } from './registry.js';
|
|
4
|
+
export { NoopUsageSink } from './usage.js';
|
|
5
|
+
export { WorkspaceService } from './workspaces.js';
|
|
6
|
+
export { bindEditionSeams } from './edition.js';
|
|
7
|
+
export { LocalIdentityProvider } from './local-identity.js';
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/platform/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAyB,cAAc,EAAE,MAAM,eAAe,CAAC;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { type Db } from '@antasphere/chassis-db';
|
|
2
|
+
import { type IdentityProvider, type InstanceAuthDescriptor, type Principal, type RequestContext } from '@antasphere/chassis-contract';
|
|
3
|
+
import type { Auth } from '../identity/better-auth.js';
|
|
4
|
+
import { type OnWorkspaceMiss } from '../identity/resolve-membership.js';
|
|
5
|
+
/**
|
|
6
|
+
* The template's default IdentityProvider: Better Auth sessions + a LIVE
|
|
7
|
+
* workspace_members re-check on every request. The membership row — not the
|
|
8
|
+
* cookie — is the authorization decision, so deactivating a member locks
|
|
9
|
+
* them out instantly regardless of cookie age.
|
|
10
|
+
*
|
|
11
|
+
* Workspace scoping (ADR 014, user-scoped credential model): a session
|
|
12
|
+
* resolves to exactly ONE workspace per request via the shared
|
|
13
|
+
* resolveMembership rule — the X-Workspace-Id header names it (ACTIVE
|
|
14
|
+
* membership required, else null: fail closed, an unknown workspace and a
|
|
15
|
+
* workspace the user does not belong to are indistinguishable); without the
|
|
16
|
+
* header the user's default membership wins, else the deterministic oldest
|
|
17
|
+
* active membership.
|
|
18
|
+
*
|
|
19
|
+
* API-key and OAuth-bearer resolution live in the auth-context middleware
|
|
20
|
+
* (they are credential formats, not identity sources) and share the SAME
|
|
21
|
+
* selection rule; this provider is the seam the central account service
|
|
22
|
+
* replaces later.
|
|
23
|
+
*/
|
|
24
|
+
export declare class LocalIdentityProvider implements IdentityProvider {
|
|
25
|
+
private readonly auth;
|
|
26
|
+
private readonly db;
|
|
27
|
+
private readonly hasGoogle;
|
|
28
|
+
private readonly hasOtp;
|
|
29
|
+
private readonly hasPasswordReset;
|
|
30
|
+
private readonly hasEmailChange;
|
|
31
|
+
/** Cloud only: one cached reconcile on a well-formed selector miss. */
|
|
32
|
+
private readonly onWorkspaceMiss?;
|
|
33
|
+
constructor(auth: Auth, db: Db, hasGoogle: boolean, hasOtp?: boolean, hasPasswordReset?: boolean, hasEmailChange?: boolean,
|
|
34
|
+
/** Cloud only: one cached reconcile on a well-formed selector miss. */
|
|
35
|
+
onWorkspaceMiss?: OnWorkspaceMiss | undefined);
|
|
36
|
+
resolve(ctx: RequestContext): Promise<Principal | null>;
|
|
37
|
+
describe(): InstanceAuthDescriptor;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=local-identity.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-identity.d.ts","sourceRoot":"","sources":["../../src/platform/local-identity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAEL,KAAK,gBAAgB,EACrB,KAAK,sBAAsB,EAC3B,KAAK,SAAS,EACd,KAAK,cAAc,EACpB,MAAM,8BAA8B,CAAC;AACtC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,mCAAmC,CAAC;AAE3C;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,qBAAsB,YAAW,gBAAgB;IAE1D,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,EAAE;IACnB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,gBAAgB;IACjC,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,uEAAuE;IACvE,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC;gBAPhB,IAAI,EAAE,IAAI,EACV,EAAE,EAAE,EAAE,EACN,SAAS,EAAE,OAAO,EAClB,MAAM,GAAE,OAAe,EACvB,gBAAgB,GAAE,OAAe,EACjC,cAAc,GAAE,OAAe;IAChD,uEAAuE;IACtD,eAAe,CAAC,EAAE,eAAe,GAAG,SAAS;IAG1D,OAAO,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IA8B7D,QAAQ,IAAI,sBAAsB;CAanC"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import {} from '@antasphere/chassis-db';
|
|
2
|
+
import { ACTIVE_WORKSPACE_HEADER } from '@antasphere/chassis-contract';
|
|
3
|
+
import { isWorkspaceSelector, resolveMembership } from '../identity/resolve-membership.js';
|
|
4
|
+
/**
|
|
5
|
+
* The template's default IdentityProvider: Better Auth sessions + a LIVE
|
|
6
|
+
* workspace_members re-check on every request. The membership row — not the
|
|
7
|
+
* cookie — is the authorization decision, so deactivating a member locks
|
|
8
|
+
* them out instantly regardless of cookie age.
|
|
9
|
+
*
|
|
10
|
+
* Workspace scoping (ADR 014, user-scoped credential model): a session
|
|
11
|
+
* resolves to exactly ONE workspace per request via the shared
|
|
12
|
+
* resolveMembership rule — the X-Workspace-Id header names it (ACTIVE
|
|
13
|
+
* membership required, else null: fail closed, an unknown workspace and a
|
|
14
|
+
* workspace the user does not belong to are indistinguishable); without the
|
|
15
|
+
* header the user's default membership wins, else the deterministic oldest
|
|
16
|
+
* active membership.
|
|
17
|
+
*
|
|
18
|
+
* API-key and OAuth-bearer resolution live in the auth-context middleware
|
|
19
|
+
* (they are credential formats, not identity sources) and share the SAME
|
|
20
|
+
* selection rule; this provider is the seam the central account service
|
|
21
|
+
* replaces later.
|
|
22
|
+
*/
|
|
23
|
+
export class LocalIdentityProvider {
|
|
24
|
+
auth;
|
|
25
|
+
db;
|
|
26
|
+
hasGoogle;
|
|
27
|
+
hasOtp;
|
|
28
|
+
hasPasswordReset;
|
|
29
|
+
hasEmailChange;
|
|
30
|
+
onWorkspaceMiss;
|
|
31
|
+
constructor(auth, db, hasGoogle, hasOtp = false, hasPasswordReset = false, hasEmailChange = false,
|
|
32
|
+
/** Cloud only: one cached reconcile on a well-formed selector miss. */
|
|
33
|
+
onWorkspaceMiss) {
|
|
34
|
+
this.auth = auth;
|
|
35
|
+
this.db = db;
|
|
36
|
+
this.hasGoogle = hasGoogle;
|
|
37
|
+
this.hasOtp = hasOtp;
|
|
38
|
+
this.hasPasswordReset = hasPasswordReset;
|
|
39
|
+
this.hasEmailChange = hasEmailChange;
|
|
40
|
+
this.onWorkspaceMiss = onWorkspaceMiss;
|
|
41
|
+
}
|
|
42
|
+
async resolve(ctx) {
|
|
43
|
+
const session = await this.auth.api.getSession({
|
|
44
|
+
headers: ctx.headers
|
|
45
|
+
});
|
|
46
|
+
if (!session?.user)
|
|
47
|
+
return null;
|
|
48
|
+
const requested = ctx.headers.get(ACTIVE_WORKSPACE_HEADER)?.trim() || null;
|
|
49
|
+
let row = await resolveMembership(this.db, session.user.id, requested);
|
|
50
|
+
if (!row && requested && this.onWorkspaceMiss && isWorkspaceSelector(requested)) {
|
|
51
|
+
// Unknown-workspace deep-link retry (cloud): the named workspace may
|
|
52
|
+
// be a hub org granted since the last pass. One cached reconcile, one
|
|
53
|
+
// re-run of the SAME lookup — no recursion.
|
|
54
|
+
await this.onWorkspaceMiss(session.user.id, requested);
|
|
55
|
+
row = await resolveMembership(this.db, session.user.id, requested);
|
|
56
|
+
}
|
|
57
|
+
if (!row)
|
|
58
|
+
return null;
|
|
59
|
+
return {
|
|
60
|
+
userId: session.user.id,
|
|
61
|
+
email: session.user.email,
|
|
62
|
+
name: session.user.name,
|
|
63
|
+
workspaceId: row.workspaceId,
|
|
64
|
+
role: row.role,
|
|
65
|
+
origin: row.origin,
|
|
66
|
+
via: 'session',
|
|
67
|
+
scopes: null,
|
|
68
|
+
...(row.accountRef ? { accountRef: row.accountRef } : {})
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
describe() {
|
|
72
|
+
// 'oauth' is always on: every instance is an OAuth 2.1 AS for its /mcp (M6).
|
|
73
|
+
const methods = ['password', 'api-key', 'oauth'];
|
|
74
|
+
if (this.hasOtp)
|
|
75
|
+
methods.push('email-otp');
|
|
76
|
+
if (this.hasGoogle)
|
|
77
|
+
methods.push('google');
|
|
78
|
+
return {
|
|
79
|
+
methods,
|
|
80
|
+
passwordReset: this.hasPasswordReset,
|
|
81
|
+
emailChange: this.hasEmailChange,
|
|
82
|
+
// Opt-in TOTP needs no email driver — always available on the template.
|
|
83
|
+
twoFactor: true
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=local-identity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-identity.js","sourceRoot":"","sources":["../../src/platform/local-identity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,MAAM,wBAAwB,CAAC;AACjD,OAAO,EACL,uBAAuB,EAKxB,MAAM,8BAA8B,CAAC;AAEtC,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EAElB,MAAM,mCAAmC,CAAC;AAE3C;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,OAAO,qBAAqB;IAEb;IACA;IACA;IACA;IACA;IACA;IAEA;IARnB,YACmB,IAAU,EACV,EAAM,EACN,SAAkB,EAClB,SAAkB,KAAK,EACvB,mBAA4B,KAAK,EACjC,iBAA0B,KAAK;IAChD,uEAAuE;IACtD,eAA6C;QAP7C,SAAI,GAAJ,IAAI,CAAM;QACV,OAAE,GAAF,EAAE,CAAI;QACN,cAAS,GAAT,SAAS,CAAS;QAClB,WAAM,GAAN,MAAM,CAAiB;QACvB,qBAAgB,GAAhB,gBAAgB,CAAiB;QACjC,mBAAc,GAAd,cAAc,CAAiB;QAE/B,oBAAe,GAAf,eAAe,CAA8B;IAC7D,CAAC;IAEJ,KAAK,CAAC,OAAO,CAAC,GAAmB;QAC/B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;YAC7C,OAAO,EAAE,GAAG,CAAC,OAAkB;SAChC,CAAC,CAAC;QACH,IAAI,CAAC,OAAO,EAAE,IAAI;YAAE,OAAO,IAAI,CAAC;QAEhC,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC;QAC3E,IAAI,GAAG,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;QACvE,IAAI,CAAC,GAAG,IAAI,SAAS,IAAI,IAAI,CAAC,eAAe,IAAI,mBAAmB,CAAC,SAAS,CAAC,EAAE,CAAC;YAChF,qEAAqE;YACrE,sEAAsE;YACtE,4CAA4C;YAC5C,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;YACvD,GAAG,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC;QACrE,CAAC;QACD,IAAI,CAAC,GAAG;YAAE,OAAO,IAAI,CAAC;QAEtB,OAAO;YACL,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE;YACvB,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK;YACzB,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,IAAI;YACvB,WAAW,EAAE,GAAG,CAAC,WAAW;YAC5B,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,GAAG,EAAE,SAAS;YACd,MAAM,EAAE,IAAI;YACZ,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC1D,CAAC;IACJ,CAAC;IAED,QAAQ;QACN,6EAA6E;QAC7E,MAAM,OAAO,GAAsC,CAAC,UAAU,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QACpF,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC3C,IAAI,IAAI,CAAC,SAAS;YAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC3C,OAAO;YACL,OAAO;YACP,aAAa,EAAE,IAAI,CAAC,gBAAgB;YACpC,WAAW,EAAE,IAAI,CAAC,cAAc;YAChC,wEAAwE;YACxE,SAAS,EAAE,IAAI;SAChB,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { EntitlementService, IdentityProvider, UsageSink } from '@antasphere/chassis-contract';
|
|
2
|
+
import type { EventBus } from './events.js';
|
|
3
|
+
import type { WorkspaceService } from './workspaces.js';
|
|
4
|
+
/**
|
|
5
|
+
* Boot-time module registry: the single place where seam implementations are
|
|
6
|
+
* bound. The template binds local defaults; a rail-connected or ee edition
|
|
7
|
+
* re-binds its own implementations here at boot (Cal.com/n8n pattern) and
|
|
8
|
+
* nothing else in the codebase changes.
|
|
9
|
+
*/
|
|
10
|
+
export interface PlatformRegistry<TExtra = {}> {
|
|
11
|
+
identity: IdentityProvider;
|
|
12
|
+
entitlements: EntitlementService;
|
|
13
|
+
usage: UsageSink;
|
|
14
|
+
events: EventBus<TExtra>;
|
|
15
|
+
/**
|
|
16
|
+
* Workspace lifecycle (ADR 014). Setup creates the FIRST workspace through
|
|
17
|
+
* it; product flows that open workspace creation (the cloud edition's lazy
|
|
18
|
+
* org projection) call it here instead of inserting rows themselves.
|
|
19
|
+
*/
|
|
20
|
+
workspaces: WorkspaceService;
|
|
21
|
+
}
|
|
22
|
+
export declare function createRegistry<TExtra = {}>(defaults: PlatformRegistry<TExtra>): PlatformRegistry<TExtra>;
|
|
23
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/platform/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACpG,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD;;;;;GAKG;AAEH,MAAM,WAAW,gBAAgB,CAAC,MAAM,GAAG,EAAE;IAC3C,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,YAAY,EAAE,kBAAkB,CAAC;IACjC,KAAK,EAAE,SAAS,CAAC;IACjB,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IACzB;;;;OAIG;IACH,UAAU,EAAE,gBAAgB,CAAC;CAC9B;AAGD,wBAAgB,cAAc,CAAC,MAAM,GAAG,EAAE,EAAE,QAAQ,EAAE,gBAAgB,CAAC,MAAM,CAAC,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAExG"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/platform/registry.ts"],"names":[],"mappings":"AAwBA,mEAAmE;AACnE,MAAM,UAAU,cAAc,CAAc,QAAkC;IAC5E,OAAO,EAAE,GAAG,QAAQ,EAAE,CAAC;AACzB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { UsageEvent, UsageSink } from '@antasphere/chassis-contract';
|
|
2
|
+
/**
|
|
3
|
+
* Default UsageSink: drop everything. Domain code always emits usage events
|
|
4
|
+
* (they double as local analytics hooks); only a rail-connected sink turns
|
|
5
|
+
* them into billing. Zero phone-home is the default posture — nothing leaves
|
|
6
|
+
* the instance unless an operator explicitly configures a sink.
|
|
7
|
+
*/
|
|
8
|
+
export declare class NoopUsageSink implements UsageSink {
|
|
9
|
+
emit(_event: UsageEvent): Promise<void>;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=usage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usage.d.ts","sourceRoot":"","sources":["../../src/platform/usage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAE1E;;;;;GAKG;AACH,qBAAa,aAAc,YAAW,SAAS;IACvC,IAAI,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAG9C"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default UsageSink: drop everything. Domain code always emits usage events
|
|
3
|
+
* (they double as local analytics hooks); only a rail-connected sink turns
|
|
4
|
+
* them into billing. Zero phone-home is the default posture — nothing leaves
|
|
5
|
+
* the instance unless an operator explicitly configures a sink.
|
|
6
|
+
*/
|
|
7
|
+
export class NoopUsageSink {
|
|
8
|
+
async emit(_event) {
|
|
9
|
+
// intentionally empty
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=usage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usage.js","sourceRoot":"","sources":["../../src/platform/usage.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,MAAM,OAAO,aAAa;IACxB,KAAK,CAAC,IAAI,CAAC,MAAkB;QAC3B,sBAAsB;IACxB,CAAC;CACF"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { type DbConn } from '@antasphere/chassis-db';
|
|
2
|
+
/**
|
|
3
|
+
* Workspace lifecycle — the template's one creation path (ADR 014). Setup
|
|
4
|
+
* creates the FIRST workspace through it; products that open their own
|
|
5
|
+
* workspace-creation flow (a hub's sign-up, a cloud edition's lazy org
|
|
6
|
+
* projection) call it via the platform registry instead of hand-rolling
|
|
7
|
+
* the two inserts. The template exposed no HTTP endpoint for this (workspace
|
|
8
|
+
* creation is a product decision); the chassis took that decision with
|
|
9
|
+
* `POST /workspaces` (api/workspaces.ts, PRDCT-2444): sessions only, capped
|
|
10
|
+
* per person, and still through THIS service — never a second insert path.
|
|
11
|
+
*/
|
|
12
|
+
export declare class WorkspaceService {
|
|
13
|
+
private readonly db;
|
|
14
|
+
constructor(db: DbConn);
|
|
15
|
+
/**
|
|
16
|
+
* Create a workspace with `ownerUserId` as its ACTIVE OWNER — one unit:
|
|
17
|
+
* pass a transaction handle (`conn`) to join an enclosing transaction
|
|
18
|
+
* (setup does), or omit it to run the two inserts on this service's
|
|
19
|
+
* connection inside their own transaction when it supports one.
|
|
20
|
+
*/
|
|
21
|
+
create(name: string, ownerUserId: string, conn?: DbConn): Promise<{
|
|
22
|
+
workspaceId: string;
|
|
23
|
+
}>;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=workspaces.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspaces.d.ts","sourceRoot":"","sources":["../../src/platform/workspaces.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgC,KAAK,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAEnF;;;;;;;;;GASG;AACH,qBAAa,gBAAgB;IACf,OAAO,CAAC,QAAQ,CAAC,EAAE;gBAAF,EAAE,EAAE,MAAM;IAEvC;;;;;OAKG;IACG,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,GAAE,MAAgB,GAAG,OAAO,CAAC;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;CAmB1G"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { workspaceMembers, workspaces } from '@antasphere/chassis-db';
|
|
2
|
+
/**
|
|
3
|
+
* Workspace lifecycle — the template's one creation path (ADR 014). Setup
|
|
4
|
+
* creates the FIRST workspace through it; products that open their own
|
|
5
|
+
* workspace-creation flow (a hub's sign-up, a cloud edition's lazy org
|
|
6
|
+
* projection) call it via the platform registry instead of hand-rolling
|
|
7
|
+
* the two inserts. The template exposed no HTTP endpoint for this (workspace
|
|
8
|
+
* creation is a product decision); the chassis took that decision with
|
|
9
|
+
* `POST /workspaces` (api/workspaces.ts, PRDCT-2444): sessions only, capped
|
|
10
|
+
* per person, and still through THIS service — never a second insert path.
|
|
11
|
+
*/
|
|
12
|
+
export class WorkspaceService {
|
|
13
|
+
db;
|
|
14
|
+
constructor(db) {
|
|
15
|
+
this.db = db;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Create a workspace with `ownerUserId` as its ACTIVE OWNER — one unit:
|
|
19
|
+
* pass a transaction handle (`conn`) to join an enclosing transaction
|
|
20
|
+
* (setup does), or omit it to run the two inserts on this service's
|
|
21
|
+
* connection inside their own transaction when it supports one.
|
|
22
|
+
*/
|
|
23
|
+
async create(name, ownerUserId, conn = this.db) {
|
|
24
|
+
const run = async (tx) => {
|
|
25
|
+
const [workspace] = await tx.insert(workspaces).values({ name }).returning({ id: workspaces.id });
|
|
26
|
+
if (!workspace)
|
|
27
|
+
throw new Error('workspace insert returned no row');
|
|
28
|
+
await tx.insert(workspaceMembers).values({
|
|
29
|
+
workspaceId: workspace.id,
|
|
30
|
+
userId: ownerUserId,
|
|
31
|
+
role: 'owner'
|
|
32
|
+
});
|
|
33
|
+
return { workspaceId: workspace.id };
|
|
34
|
+
};
|
|
35
|
+
// A DbConn may already BE a transaction (no .transaction on the type);
|
|
36
|
+
// when the caller hands us a plain Db, wrap the pair so a workspace can
|
|
37
|
+
// never exist without its owner membership.
|
|
38
|
+
if ('transaction' in conn && typeof conn.transaction === 'function') {
|
|
39
|
+
return conn.transaction(async (tx) => run(tx));
|
|
40
|
+
}
|
|
41
|
+
return run(conn);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
//# sourceMappingURL=workspaces.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspaces.js","sourceRoot":"","sources":["../../src/platform/workspaces.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAe,MAAM,wBAAwB,CAAC;AAEnF;;;;;;;;;GASG;AACH,MAAM,OAAO,gBAAgB;IACE;IAA7B,YAA6B,EAAU;QAAV,OAAE,GAAF,EAAE,CAAQ;IAAG,CAAC;IAE3C;;;;;OAKG;IACH,KAAK,CAAC,MAAM,CAAC,IAAY,EAAE,WAAmB,EAAE,OAAe,IAAI,CAAC,EAAE;QACpE,MAAM,GAAG,GAAG,KAAK,EAAE,EAAU,EAAE,EAAE;YAC/B,MAAM,CAAC,SAAS,CAAC,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC;YAClG,IAAI,CAAC,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;YACpE,MAAM,EAAE,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC;gBACvC,WAAW,EAAE,SAAS,CAAC,EAAE;gBACzB,MAAM,EAAE,WAAW;gBACnB,IAAI,EAAE,OAAO;aACd,CAAC,CAAC;YACH,OAAO,EAAE,WAAW,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC;QACvC,CAAC,CAAC;QACF,uEAAuE;QACvE,wEAAwE;QACxE,4CAA4C;QAC5C,IAAI,aAAa,IAAI,IAAI,IAAI,OAAO,IAAI,CAAC,WAAW,KAAK,UAAU,EAAE,CAAC;YACpE,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QACjD,CAAC;QACD,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;CACF"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { type SQL, type SQLWrapper } from 'drizzle-orm';
|
|
2
|
+
import type { Principal, ProjectRole } from '@antasphere/chassis-contract';
|
|
3
|
+
import { type DbConn } from '@antasphere/chassis-db';
|
|
4
|
+
export interface ProjectGrantOptions {
|
|
5
|
+
/** The least role that satisfies the predicate. */
|
|
6
|
+
atLeast: ProjectRole;
|
|
7
|
+
/** `write` adds the archived-write rule; `read` does not look at the archive. */
|
|
8
|
+
access: 'read' | 'write';
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* A boolean SQL expression over `projectId`, a column (or expression) of the
|
|
12
|
+
* CALLER's query that holds a project id: the tool's link table column, or
|
|
13
|
+
* `projects.id` itself. The aliases are prefixed so they cannot collide with
|
|
14
|
+
* the ones of the query the predicate is embedded in.
|
|
15
|
+
*
|
|
16
|
+
* **Pass a QUALIFIED reference when the predicate lands in a SELECT LIST.**
|
|
17
|
+
* drizzle renders a column object of a single-table select WITHOUT its table
|
|
18
|
+
* name there (`"id"`), and inside this subquery a bare `"id"` binds to the
|
|
19
|
+
* subquery's own tables: ambiguous at best, always-true at worst. A raw
|
|
20
|
+
* `sql\`"link_table"."project_id"\`` (or `PROJECTS_ID` below) is immune; a
|
|
21
|
+
* column object is safe in a WHERE, where drizzle always qualifies it.
|
|
22
|
+
*/
|
|
23
|
+
export declare function projectGrantPredicate(principal: Pick<Principal, 'userId' | 'workspaceId' | 'role' | 'origin'>, projectId: SQLWrapper, opts: ProjectGrantOptions): SQL;
|
|
24
|
+
/** `projects.id`, always qualified: safe in a select list as in a WHERE (see above). */
|
|
25
|
+
export declare const PROJECTS_ID: SQL;
|
|
26
|
+
/**
|
|
27
|
+
* The caller's effective role on a project AS A SQL EXPRESSION over a project
|
|
28
|
+
* id column: `manager`, `editor`, `viewer`, or NULL (no read). Built from the
|
|
29
|
+
* predicate above, never beside it. Archive-blind on purpose: a role is a
|
|
30
|
+
* READ fact, and whether an act is allowed on an archived project is the
|
|
31
|
+
* act's own question (`access: 'write'`, or the route's 409).
|
|
32
|
+
*/
|
|
33
|
+
export declare function projectRoleExpression(principal: Pick<Principal, 'userId' | 'workspaceId' | 'role' | 'origin'>, projectId: SQLWrapper): SQL<ProjectRole | null>;
|
|
34
|
+
/**
|
|
35
|
+
* The effective role of `principal` on one project of the request's
|
|
36
|
+
* workspace, or null. **null = 404**: no such project here, or a project the
|
|
37
|
+
* principal cannot read; the two must stay indistinguishable to the caller.
|
|
38
|
+
*/
|
|
39
|
+
export declare function projectRole(conn: DbConn, principal: Pick<Principal, 'userId' | 'workspaceId' | 'role' | 'origin'>, projectId: string): Promise<ProjectRole | null>;
|
|
40
|
+
//# sourceMappingURL=access.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"access.d.ts","sourceRoot":"","sources":["../../src/projects/access.ts"],"names":[],"mappings":"AAAA,OAAO,EAAO,KAAK,GAAG,EAAE,KAAK,UAAU,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAC3E,OAAO,EAAY,KAAK,MAAM,EAAE,MAAM,wBAAwB,CAAC;AA0C/D,MAAM,WAAW,mBAAmB;IAClC,mDAAmD;IACnD,OAAO,EAAE,WAAW,CAAC;IACrB,iFAAiF;IACjF,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,QAAQ,GAAG,aAAa,GAAG,MAAM,GAAG,QAAQ,CAAC,EACxE,SAAS,EAAE,UAAU,EACrB,IAAI,EAAE,mBAAmB,GACxB,GAAG,CAkDL;AAED,wFAAwF;AACxF,eAAO,MAAM,WAAW,EAAE,GAAgC,CAAC;AAE3D;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,QAAQ,GAAG,aAAa,GAAG,MAAM,GAAG,QAAQ,CAAC,EACxE,SAAS,EAAE,UAAU,GACpB,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,CAQzB;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAC/B,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,QAAQ,GAAG,aAAa,GAAG,MAAM,GAAG,QAAQ,CAAC,EACxE,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAO7B"}
|