@agilesyndrome/cf-genai-base 5.0.2 → 6.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/CHANGELOG.md +99 -0
- package/CLI.md +9 -13
- package/CONTRACT.md +32 -15
- package/README.md +95 -28
- package/bin/cf-genai.js +24 -8
- package/dist/admin/auth.d.ts +12 -0
- package/dist/admin/auth.d.ts.map +1 -0
- package/dist/admin/auth.js +103 -0
- package/dist/admin/auth.js.map +1 -0
- package/dist/admin/index.d.ts +2 -0
- package/dist/admin/index.d.ts.map +1 -0
- package/dist/admin/index.js +2 -0
- package/dist/admin/index.js.map +1 -0
- package/dist/admin/router.d.ts +4 -0
- package/dist/admin/router.d.ts.map +1 -0
- package/dist/admin/router.js +24 -0
- package/dist/admin/router.js.map +1 -0
- package/dist/admin/types.d.ts +43 -0
- package/dist/admin/types.d.ts.map +1 -0
- package/dist/admin/types.js +2 -0
- package/dist/admin/types.js.map +1 -0
- package/dist/api/client.d.ts +34 -0
- package/dist/api/client.d.ts.map +1 -0
- package/dist/api/client.js +59 -0
- package/dist/api/client.js.map +1 -0
- package/dist/api/contracts.d.ts +31 -0
- package/dist/api/contracts.d.ts.map +1 -0
- package/dist/api/contracts.js +101 -0
- package/dist/api/contracts.js.map +1 -0
- package/dist/api/http.d.ts +12 -0
- package/dist/api/http.d.ts.map +1 -0
- package/dist/api/http.js +36 -0
- package/dist/api/http.js.map +1 -0
- package/dist/api/index.d.ts +14 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +11 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/testing.d.ts +10 -0
- package/dist/api/testing.d.ts.map +1 -0
- package/dist/api/testing.js +26 -0
- package/dist/api/testing.js.map +1 -0
- package/dist/app.d.ts +21 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +23 -0
- package/dist/app.js.map +1 -0
- package/dist/auth/constants.d.ts +9 -0
- package/dist/auth/constants.d.ts.map +1 -0
- package/{src → dist}/auth/constants.js +2 -2
- package/dist/auth/constants.js.map +1 -0
- package/dist/auth/domains.d.ts +3 -0
- package/dist/auth/domains.d.ts.map +1 -0
- package/dist/auth/domains.js +8 -0
- package/dist/auth/domains.js.map +1 -0
- package/dist/auth/encoding.d.ts +7 -0
- package/dist/auth/encoding.d.ts.map +1 -0
- package/dist/auth/encoding.js +41 -0
- package/dist/auth/encoding.js.map +1 -0
- package/dist/auth/groups/d1.d.ts +16 -0
- package/dist/auth/groups/d1.d.ts.map +1 -0
- package/dist/auth/groups/d1.js +66 -0
- package/dist/auth/groups/d1.js.map +1 -0
- package/dist/auth/groups/domain.d.ts +8 -0
- package/dist/auth/groups/domain.d.ts.map +1 -0
- package/dist/auth/groups/domain.js +99 -0
- package/dist/auth/groups/domain.js.map +1 -0
- package/dist/auth/groups/index.d.ts +7 -0
- package/dist/auth/groups/index.d.ts.map +1 -0
- package/dist/auth/groups/index.js +7 -0
- package/dist/auth/groups/index.js.map +1 -0
- package/dist/auth/groups/model.d.ts +38 -0
- package/dist/auth/groups/model.d.ts.map +1 -0
- package/dist/auth/groups/model.js +2 -0
- package/dist/auth/groups/model.js.map +1 -0
- package/dist/auth/groups/policy.d.ts +5 -0
- package/dist/auth/groups/policy.d.ts.map +1 -0
- package/dist/auth/groups/policy.js +8 -0
- package/dist/auth/groups/policy.js.map +1 -0
- package/dist/auth/groups/service.d.ts +20 -0
- package/dist/auth/groups/service.d.ts.map +1 -0
- package/dist/auth/groups/service.js +40 -0
- package/dist/auth/groups/service.js.map +1 -0
- package/dist/auth/groups/validation.d.ts +5 -0
- package/dist/auth/groups/validation.d.ts.map +1 -0
- package/dist/auth/groups/validation.js +22 -0
- package/dist/auth/groups/validation.js.map +1 -0
- package/dist/auth/groups/views/list.d.ts +10 -0
- package/dist/auth/groups/views/list.d.ts.map +1 -0
- package/dist/auth/groups/views/list.js +4 -0
- package/dist/auth/groups/views/list.js.map +1 -0
- package/dist/auth/identity/index.d.ts +58 -0
- package/dist/auth/identity/index.d.ts.map +1 -0
- package/dist/auth/identity/index.js +58 -0
- package/dist/auth/identity/index.js.map +1 -0
- package/dist/auth/impersonation/constants.d.ts +2 -0
- package/dist/auth/impersonation/constants.d.ts.map +1 -0
- package/dist/auth/impersonation/constants.js +2 -0
- package/dist/auth/impersonation/constants.js.map +1 -0
- package/dist/auth/impersonation/domain.d.ts +6 -0
- package/dist/auth/impersonation/domain.d.ts.map +1 -0
- package/dist/auth/impersonation/domain.js +16 -0
- package/dist/auth/impersonation/domain.js.map +1 -0
- package/dist/auth/impersonation/index.d.ts +6 -0
- package/dist/auth/impersonation/index.d.ts.map +1 -0
- package/dist/auth/impersonation/index.js +6 -0
- package/dist/auth/impersonation/index.js.map +1 -0
- package/dist/auth/impersonation/model.d.ts +12 -0
- package/dist/auth/impersonation/model.d.ts.map +1 -0
- package/dist/auth/impersonation/model.js +2 -0
- package/dist/auth/impersonation/model.js.map +1 -0
- package/dist/auth/impersonation/service.d.ts +4 -0
- package/dist/auth/impersonation/service.d.ts.map +1 -0
- package/dist/auth/impersonation/service.js +32 -0
- package/dist/auth/impersonation/service.js.map +1 -0
- package/dist/auth/impersonation/validation.d.ts +4 -0
- package/dist/auth/impersonation/validation.d.ts.map +1 -0
- package/dist/auth/impersonation/validation.js +14 -0
- package/dist/auth/impersonation/validation.js.map +1 -0
- package/dist/auth/index.d.ts +13 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +13 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/oauth-single/constants.d.ts +4 -0
- package/dist/auth/oauth-single/constants.d.ts.map +1 -0
- package/dist/auth/oauth-single/constants.js +5 -0
- package/dist/auth/oauth-single/constants.js.map +1 -0
- package/dist/auth/oauth-single/cookies.d.ts +10 -0
- package/dist/auth/oauth-single/cookies.d.ts.map +1 -0
- package/dist/auth/oauth-single/cookies.js +59 -0
- package/dist/auth/oauth-single/cookies.js.map +1 -0
- package/dist/auth/oauth-single/domain.d.ts +14 -0
- package/dist/auth/oauth-single/domain.d.ts.map +1 -0
- package/dist/auth/oauth-single/domain.js +12 -0
- package/dist/auth/oauth-single/domain.js.map +1 -0
- package/dist/auth/oauth-single/index.d.ts +31 -0
- package/dist/auth/oauth-single/index.d.ts.map +1 -0
- package/dist/auth/oauth-single/index.js +215 -0
- package/dist/auth/oauth-single/index.js.map +1 -0
- package/dist/auth/oauth-single/model.d.ts +75 -0
- package/dist/auth/oauth-single/model.d.ts.map +1 -0
- package/dist/auth/oauth-single/model.js +2 -0
- package/dist/auth/oauth-single/model.js.map +1 -0
- package/dist/auth/oauth-single/protocol.d.ts +9 -0
- package/dist/auth/oauth-single/protocol.d.ts.map +1 -0
- package/dist/auth/oauth-single/protocol.js +190 -0
- package/dist/auth/oauth-single/protocol.js.map +1 -0
- package/dist/auth/oauth-single/session.d.ts +7 -0
- package/dist/auth/oauth-single/session.d.ts.map +1 -0
- package/dist/auth/oauth-single/session.js +78 -0
- package/dist/auth/oauth-single/session.js.map +1 -0
- package/dist/auth/repositories.d.ts +58 -0
- package/dist/auth/repositories.d.ts.map +1 -0
- package/dist/auth/repositories.js +31 -0
- package/dist/auth/repositories.js.map +1 -0
- package/dist/auth/scopes/d1.d.ts +17 -0
- package/dist/auth/scopes/d1.d.ts.map +1 -0
- package/dist/auth/scopes/d1.js +54 -0
- package/dist/auth/scopes/d1.js.map +1 -0
- package/dist/auth/scopes/domain.d.ts +7 -0
- package/dist/auth/scopes/domain.d.ts.map +1 -0
- package/dist/auth/scopes/domain.js +25 -0
- package/dist/auth/scopes/domain.js.map +1 -0
- package/dist/auth/scopes/index.d.ts +4 -0
- package/dist/auth/scopes/index.d.ts.map +1 -0
- package/dist/auth/scopes/index.js +4 -0
- package/dist/auth/scopes/index.js.map +1 -0
- package/dist/auth/scopes/model.d.ts +26 -0
- package/dist/auth/scopes/model.d.ts.map +1 -0
- package/dist/auth/scopes/model.js +2 -0
- package/dist/auth/scopes/model.js.map +1 -0
- package/dist/auth/scopes/policy.d.ts +3 -0
- package/dist/auth/scopes/policy.d.ts.map +1 -0
- package/dist/auth/scopes/policy.js +4 -0
- package/dist/auth/scopes/policy.js.map +1 -0
- package/dist/auth/scopes/service.d.ts +4 -0
- package/dist/auth/scopes/service.d.ts.map +1 -0
- package/dist/auth/scopes/service.js +4 -0
- package/dist/auth/scopes/service.js.map +1 -0
- package/dist/auth/scopes/validation.d.ts +6 -0
- package/dist/auth/scopes/validation.d.ts.map +1 -0
- package/dist/auth/scopes/validation.js +33 -0
- package/dist/auth/scopes/validation.js.map +1 -0
- package/dist/auth/scopes/views/list.d.ts +9 -0
- package/dist/auth/scopes/views/list.d.ts.map +1 -0
- package/dist/auth/scopes/views/list.js +4 -0
- package/dist/auth/scopes/views/list.js.map +1 -0
- package/dist/auth/subscriptions/d1.d.ts +10 -0
- package/dist/auth/subscriptions/d1.d.ts.map +1 -0
- package/dist/auth/subscriptions/d1.js +86 -0
- package/dist/auth/subscriptions/d1.js.map +1 -0
- package/dist/auth/subscriptions/domain.d.ts +10 -0
- package/dist/auth/subscriptions/domain.d.ts.map +1 -0
- package/dist/auth/subscriptions/domain.js +33 -0
- package/dist/auth/subscriptions/domain.js.map +1 -0
- package/dist/auth/subscriptions/index.d.ts +6 -0
- package/dist/auth/subscriptions/index.d.ts.map +1 -0
- package/dist/auth/subscriptions/index.js +6 -0
- package/dist/auth/subscriptions/index.js.map +1 -0
- package/dist/auth/subscriptions/model.d.ts +20 -0
- package/dist/auth/subscriptions/model.d.ts.map +1 -0
- package/dist/auth/subscriptions/model.js +2 -0
- package/dist/auth/subscriptions/model.js.map +1 -0
- package/dist/auth/subscriptions/service.d.ts +12 -0
- package/dist/auth/subscriptions/service.d.ts.map +1 -0
- package/dist/auth/subscriptions/service.js +71 -0
- package/dist/auth/subscriptions/service.js.map +1 -0
- package/dist/auth/subscriptions/validation.d.ts +3 -0
- package/dist/auth/subscriptions/validation.d.ts.map +1 -0
- package/dist/auth/subscriptions/validation.js +21 -0
- package/dist/auth/subscriptions/validation.js.map +1 -0
- package/dist/auth/tenants/d1.d.ts +12 -0
- package/dist/auth/tenants/d1.d.ts.map +1 -0
- package/dist/auth/tenants/d1.js +40 -0
- package/dist/auth/tenants/d1.js.map +1 -0
- package/dist/auth/tenants/delete.d.ts +3 -0
- package/dist/auth/tenants/delete.d.ts.map +1 -0
- package/dist/auth/tenants/delete.js +28 -0
- package/dist/auth/tenants/delete.js.map +1 -0
- package/dist/auth/tenants/domain.d.ts +8 -0
- package/dist/auth/tenants/domain.d.ts.map +1 -0
- package/dist/auth/tenants/domain.js +64 -0
- package/dist/auth/tenants/domain.js.map +1 -0
- package/dist/auth/tenants/index.d.ts +7 -0
- package/dist/auth/tenants/index.d.ts.map +1 -0
- package/dist/auth/tenants/index.js +7 -0
- package/dist/auth/tenants/index.js.map +1 -0
- package/dist/auth/tenants/model.d.ts +28 -0
- package/dist/auth/tenants/model.d.ts.map +1 -0
- package/dist/auth/tenants/model.js +2 -0
- package/dist/auth/tenants/model.js.map +1 -0
- package/dist/auth/tenants/policy.d.ts +3 -0
- package/dist/auth/tenants/policy.d.ts.map +1 -0
- package/dist/auth/tenants/policy.js +4 -0
- package/dist/auth/tenants/policy.js.map +1 -0
- package/dist/auth/tenants/service.d.ts +14 -0
- package/dist/auth/tenants/service.d.ts.map +1 -0
- package/dist/auth/tenants/service.js +37 -0
- package/dist/auth/tenants/service.js.map +1 -0
- package/dist/auth/tenants/validation.d.ts +5 -0
- package/dist/auth/tenants/validation.d.ts.map +1 -0
- package/dist/auth/tenants/validation.js +21 -0
- package/dist/auth/tenants/validation.js.map +1 -0
- package/dist/auth/tenants/views/list.d.ts +8 -0
- package/dist/auth/tenants/views/list.d.ts.map +1 -0
- package/dist/auth/tenants/views/list.js +3 -0
- package/dist/auth/tenants/views/list.js.map +1 -0
- package/dist/auth/users/access.d.ts +9 -0
- package/dist/auth/users/access.d.ts.map +1 -0
- package/dist/auth/users/access.js +53 -0
- package/dist/auth/users/access.js.map +1 -0
- package/dist/auth/users/d1.d.ts +19 -0
- package/dist/auth/users/d1.d.ts.map +1 -0
- package/dist/auth/users/d1.js +68 -0
- package/dist/auth/users/d1.js.map +1 -0
- package/dist/auth/users/domain.d.ts +13 -0
- package/dist/auth/users/domain.d.ts.map +1 -0
- package/dist/auth/users/domain.js +129 -0
- package/dist/auth/users/domain.js.map +1 -0
- package/dist/auth/users/index.d.ts +7 -0
- package/dist/auth/users/index.d.ts.map +1 -0
- package/dist/auth/users/index.js +7 -0
- package/dist/auth/users/index.js.map +1 -0
- package/dist/auth/users/model.d.ts +44 -0
- package/dist/auth/users/model.d.ts.map +1 -0
- package/dist/auth/users/model.js +2 -0
- package/dist/auth/users/model.js.map +1 -0
- package/dist/auth/users/service.d.ts +8 -0
- package/dist/auth/users/service.d.ts.map +1 -0
- package/dist/auth/users/service.js +62 -0
- package/dist/auth/users/service.js.map +1 -0
- package/dist/auth/users/validation.d.ts +4 -0
- package/dist/auth/users/validation.d.ts.map +1 -0
- package/dist/auth/users/validation.js +23 -0
- package/dist/auth/users/validation.js.map +1 -0
- package/dist/cli/cli.d.ts +9 -0
- package/dist/cli/cli.d.ts.map +1 -0
- package/dist/cli/cli.js +201 -0
- package/dist/cli/cli.js.map +1 -0
- package/dist/cli/d1.d.ts +24 -0
- package/dist/cli/d1.d.ts.map +1 -0
- package/dist/cli/d1.js +175 -0
- package/dist/cli/d1.js.map +1 -0
- package/dist/cli/operations.d.ts +3 -0
- package/dist/cli/operations.d.ts.map +1 -0
- package/dist/cli/operations.js +63 -0
- package/dist/cli/operations.js.map +1 -0
- package/dist/cli/project.d.ts +136 -0
- package/dist/cli/project.d.ts.map +1 -0
- package/dist/cli/project.js +738 -0
- package/dist/cli/project.js.map +1 -0
- package/dist/cli/status.d.ts +24 -0
- package/dist/cli/status.d.ts.map +1 -0
- package/dist/cli/status.js +55 -0
- package/dist/cli/status.js.map +1 -0
- package/dist/cli/tenants.d.ts +9 -0
- package/dist/cli/tenants.d.ts.map +1 -0
- package/dist/cli/tenants.js +32 -0
- package/dist/cli/tenants.js.map +1 -0
- package/dist/cli/types.d.ts +43 -0
- package/dist/cli/types.d.ts.map +1 -0
- package/dist/cli/types.js +2 -0
- package/dist/cli/types.js.map +1 -0
- package/dist/cli/users.d.ts +8 -0
- package/dist/cli/users.d.ts.map +1 -0
- package/dist/cli/users.js +74 -0
- package/dist/cli/users.js.map +1 -0
- package/dist/cli/version.d.ts +12 -0
- package/dist/cli/version.d.ts.map +1 -0
- package/dist/cli/version.js +60 -0
- package/dist/cli/version.js.map +1 -0
- package/dist/core/circuits/availability.d.ts +48 -0
- package/dist/core/circuits/availability.d.ts.map +1 -0
- package/dist/core/circuits/availability.js +87 -0
- package/dist/core/circuits/availability.js.map +1 -0
- package/dist/core/circuits/d1.d.ts +11 -0
- package/dist/core/circuits/d1.d.ts.map +1 -0
- package/dist/core/circuits/d1.js +83 -0
- package/dist/core/circuits/d1.js.map +1 -0
- package/dist/core/circuits/domain.d.ts +7 -0
- package/dist/core/circuits/domain.d.ts.map +1 -0
- package/dist/core/circuits/domain.js +36 -0
- package/dist/core/circuits/domain.js.map +1 -0
- package/dist/core/circuits/index.d.ts +6 -0
- package/dist/core/circuits/index.d.ts.map +1 -0
- package/dist/core/circuits/index.js +6 -0
- package/dist/core/circuits/index.js.map +1 -0
- package/dist/core/circuits/model.d.ts +50 -0
- package/dist/core/circuits/model.d.ts.map +1 -0
- package/dist/core/circuits/model.js +2 -0
- package/dist/core/circuits/model.js.map +1 -0
- package/dist/core/circuits/service.d.ts +9 -0
- package/dist/core/circuits/service.d.ts.map +1 -0
- package/dist/core/circuits/service.js +63 -0
- package/dist/core/circuits/service.js.map +1 -0
- package/dist/core/circuits/validation.d.ts +4 -0
- package/dist/core/circuits/validation.d.ts.map +1 -0
- package/dist/core/circuits/validation.js +35 -0
- package/dist/core/circuits/validation.js.map +1 -0
- package/dist/core/constants.d.ts +9 -0
- package/dist/core/constants.d.ts.map +1 -0
- package/{src → dist}/core/constants.js +2 -1
- package/dist/core/constants.js.map +1 -0
- package/dist/core/database/index.d.ts +14 -0
- package/dist/core/database/index.d.ts.map +1 -0
- package/dist/core/database/index.js +65 -0
- package/dist/core/database/index.js.map +1 -0
- package/dist/core/domains.d.ts +2 -0
- package/dist/core/domains.d.ts.map +1 -0
- package/dist/core/domains.js +7 -0
- package/dist/core/domains.js.map +1 -0
- package/dist/core/events/audit.d.ts +8 -0
- package/dist/core/events/audit.d.ts.map +1 -0
- package/dist/core/events/audit.js +27 -0
- package/dist/core/events/audit.js.map +1 -0
- package/dist/core/events/domain.d.ts +19 -0
- package/dist/core/events/domain.d.ts.map +1 -0
- package/dist/core/events/domain.js +39 -0
- package/dist/core/events/domain.js.map +1 -0
- package/dist/core/events/hub.d.ts +10 -0
- package/dist/core/events/hub.d.ts.map +1 -0
- package/dist/core/events/hub.js +56 -0
- package/dist/core/events/hub.js.map +1 -0
- package/dist/core/events/index.d.ts +57 -0
- package/dist/core/events/index.d.ts.map +1 -0
- package/dist/core/events/index.js +170 -0
- package/dist/core/events/index.js.map +1 -0
- package/dist/core/healthchecks/d1.d.ts +7 -0
- package/dist/core/healthchecks/d1.d.ts.map +1 -0
- package/dist/core/healthchecks/d1.js +43 -0
- package/dist/core/healthchecks/d1.js.map +1 -0
- package/dist/core/healthchecks/domain.d.ts +7 -0
- package/dist/core/healthchecks/domain.d.ts.map +1 -0
- package/dist/core/healthchecks/domain.js +51 -0
- package/dist/core/healthchecks/domain.js.map +1 -0
- package/dist/core/healthchecks/features.d.ts +19 -0
- package/dist/core/healthchecks/features.d.ts.map +1 -0
- package/dist/core/healthchecks/features.js +100 -0
- package/dist/core/healthchecks/features.js.map +1 -0
- package/dist/core/healthchecks/index.d.ts +6 -0
- package/dist/core/healthchecks/index.d.ts.map +1 -0
- package/dist/core/healthchecks/index.js +6 -0
- package/dist/core/healthchecks/index.js.map +1 -0
- package/dist/core/healthchecks/model.d.ts +64 -0
- package/dist/core/healthchecks/model.d.ts.map +1 -0
- package/dist/core/healthchecks/model.js +2 -0
- package/dist/core/healthchecks/model.js.map +1 -0
- package/dist/core/healthchecks/service.d.ts +8 -0
- package/dist/core/healthchecks/service.d.ts.map +1 -0
- package/dist/core/healthchecks/service.js +29 -0
- package/dist/core/healthchecks/service.js.map +1 -0
- package/dist/core/healthchecks/validation.d.ts +5 -0
- package/dist/core/healthchecks/validation.d.ts.map +1 -0
- package/dist/core/healthchecks/validation.js +51 -0
- package/dist/core/healthchecks/validation.js.map +1 -0
- package/dist/core/index.d.ts +9 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +9 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/jobs/d1.d.ts +19 -0
- package/dist/core/jobs/d1.d.ts.map +1 -0
- package/dist/core/jobs/d1.js +139 -0
- package/dist/core/jobs/d1.js.map +1 -0
- package/dist/core/jobs/domain.d.ts +8 -0
- package/dist/core/jobs/domain.d.ts.map +1 -0
- package/dist/core/jobs/domain.js +59 -0
- package/dist/core/jobs/domain.js.map +1 -0
- package/dist/core/jobs/events.d.ts +3 -0
- package/dist/core/jobs/events.d.ts.map +1 -0
- package/dist/core/jobs/events.js +25 -0
- package/dist/core/jobs/events.js.map +1 -0
- package/dist/core/jobs/index.d.ts +7 -0
- package/dist/core/jobs/index.d.ts.map +1 -0
- package/dist/core/jobs/index.js +7 -0
- package/dist/core/jobs/index.js.map +1 -0
- package/dist/core/jobs/model.d.ts +86 -0
- package/dist/core/jobs/model.d.ts.map +1 -0
- package/dist/core/jobs/model.js +2 -0
- package/dist/core/jobs/model.js.map +1 -0
- package/dist/core/jobs/service.d.ts +39 -0
- package/dist/core/jobs/service.d.ts.map +1 -0
- package/dist/core/jobs/service.js +84 -0
- package/dist/core/jobs/service.js.map +1 -0
- package/dist/core/jobs/validation.d.ts +8 -0
- package/dist/core/jobs/validation.d.ts.map +1 -0
- package/dist/core/jobs/validation.js +39 -0
- package/dist/core/jobs/validation.js.map +1 -0
- package/dist/core/security/index.d.ts +30 -0
- package/dist/core/security/index.d.ts.map +1 -0
- package/dist/core/security/index.js +138 -0
- package/dist/core/security/index.js.map +1 -0
- package/dist/data/context.d.ts +20 -0
- package/dist/data/context.d.ts.map +1 -0
- package/dist/data/context.js +65 -0
- package/dist/data/context.js.map +1 -0
- package/dist/data/index.d.ts +5 -0
- package/dist/data/index.d.ts.map +1 -0
- package/{src → dist}/data/index.js +2 -0
- package/dist/data/index.js.map +1 -0
- package/dist/data/json.d.ts +3 -0
- package/dist/data/json.d.ts.map +1 -0
- package/dist/data/json.js +14 -0
- package/dist/data/json.js.map +1 -0
- package/dist/data/model.d.ts +96 -0
- package/dist/data/model.d.ts.map +1 -0
- package/dist/data/model.js +3 -0
- package/dist/data/model.js.map +1 -0
- package/dist/data/policy.d.ts +14 -0
- package/dist/data/policy.d.ts.map +1 -0
- package/dist/data/policy.js +89 -0
- package/dist/data/policy.js.map +1 -0
- package/dist/data/reader.d.ts +9 -0
- package/dist/data/reader.d.ts.map +1 -0
- package/dist/data/reader.js +203 -0
- package/dist/data/reader.js.map +1 -0
- package/dist/data/resources.d.ts +9 -0
- package/dist/data/resources.d.ts.map +1 -0
- package/dist/data/resources.js +129 -0
- package/dist/data/resources.js.map +1 -0
- package/dist/domain/app-domain.d.ts +36 -0
- package/dist/domain/app-domain.d.ts.map +1 -0
- package/dist/domain/app-domain.js +79 -0
- package/dist/domain/app-domain.js.map +1 -0
- package/dist/domain/index.d.ts +3 -0
- package/dist/domain/index.d.ts.map +1 -0
- package/dist/domain/index.js +3 -0
- package/dist/domain/index.js.map +1 -0
- package/dist/domain/model.d.ts +37 -0
- package/dist/domain/model.d.ts.map +1 -0
- package/dist/domain/model.js +2 -0
- package/dist/domain/model.js.map +1 -0
- package/dist/features/index.d.ts +25 -0
- package/dist/features/index.d.ts.map +1 -0
- package/dist/features/index.js +61 -0
- package/dist/features/index.js.map +1 -0
- package/dist/features/llm/client.d.ts +3 -0
- package/dist/features/llm/client.d.ts.map +1 -0
- package/dist/features/llm/client.js +327 -0
- package/dist/features/llm/client.js.map +1 -0
- package/dist/features/llm/config.d.ts +7 -0
- package/dist/features/llm/config.d.ts.map +1 -0
- package/dist/features/llm/config.js +93 -0
- package/dist/features/llm/config.js.map +1 -0
- package/dist/features/llm/constants.d.ts +5 -0
- package/dist/features/llm/constants.d.ts.map +1 -0
- package/dist/features/llm/constants.js +6 -0
- package/dist/features/llm/constants.js.map +1 -0
- package/dist/features/llm/errors.d.ts +12 -0
- package/dist/features/llm/errors.d.ts.map +1 -0
- package/dist/features/llm/errors.js +19 -0
- package/dist/features/llm/errors.js.map +1 -0
- package/dist/features/llm/feature.d.ts +6 -0
- package/dist/features/llm/feature.d.ts.map +1 -0
- package/dist/features/llm/feature.js +37 -0
- package/dist/features/llm/feature.js.map +1 -0
- package/dist/features/llm/index.d.ts +9 -0
- package/dist/features/llm/index.d.ts.map +1 -0
- package/dist/features/llm/index.js +6 -0
- package/dist/features/llm/index.js.map +1 -0
- package/dist/features/llm/model.d.ts +171 -0
- package/dist/features/llm/model.d.ts.map +1 -0
- package/dist/features/llm/model.js +2 -0
- package/dist/features/llm/model.js.map +1 -0
- package/dist/features/llm/schema.d.ts +4 -0
- package/dist/features/llm/schema.d.ts.map +1 -0
- package/dist/features/llm/schema.js +82 -0
- package/dist/features/llm/schema.js.map +1 -0
- package/dist/features/llm/service.d.ts +29 -0
- package/dist/features/llm/service.d.ts.map +1 -0
- package/dist/features/llm/service.js +55 -0
- package/dist/features/llm/service.js.map +1 -0
- package/dist/features/messaging/constants.d.ts +3 -0
- package/dist/features/messaging/constants.d.ts.map +1 -0
- package/dist/features/messaging/constants.js +4 -0
- package/dist/features/messaging/constants.js.map +1 -0
- package/dist/features/messaging/domain.d.ts +9 -0
- package/dist/features/messaging/domain.d.ts.map +1 -0
- package/dist/features/messaging/domain.js +14 -0
- package/dist/features/messaging/domain.js.map +1 -0
- package/dist/features/messaging/feature.d.ts +7 -0
- package/dist/features/messaging/feature.d.ts.map +1 -0
- package/dist/features/messaging/feature.js +23 -0
- package/dist/features/messaging/feature.js.map +1 -0
- package/dist/features/messaging/index.d.ts +12 -0
- package/dist/features/messaging/index.d.ts.map +1 -0
- package/dist/features/messaging/index.js +8 -0
- package/dist/features/messaging/index.js.map +1 -0
- package/dist/features/messaging/jobs.d.ts +38 -0
- package/dist/features/messaging/jobs.d.ts.map +1 -0
- package/dist/features/messaging/jobs.js +40 -0
- package/dist/features/messaging/jobs.js.map +1 -0
- package/dist/features/messaging/models.d.ts +65 -0
- package/dist/features/messaging/models.d.ts.map +1 -0
- package/dist/features/messaging/models.js +97 -0
- package/dist/features/messaging/models.js.map +1 -0
- package/dist/features/messaging/resources.d.ts +8 -0
- package/dist/features/messaging/resources.d.ts.map +1 -0
- package/dist/features/messaging/resources.js +11 -0
- package/dist/features/messaging/resources.js.map +1 -0
- package/dist/features/messaging/store.d.ts +46 -0
- package/dist/features/messaging/store.d.ts.map +1 -0
- package/dist/features/messaging/store.js +208 -0
- package/dist/features/messaging/store.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/{src → dist}/index.js +7 -2
- package/dist/index.js.map +1 -0
- package/dist/input.d.ts +18 -0
- package/dist/input.d.ts.map +1 -0
- package/dist/input.js +49 -0
- package/dist/input.js.map +1 -0
- package/dist/repository/model.d.ts +61 -0
- package/dist/repository/model.d.ts.map +1 -0
- package/dist/repository/model.js +2 -0
- package/dist/repository/model.js.map +1 -0
- package/dist/repository.d.ts +11 -0
- package/dist/repository.d.ts.map +1 -0
- package/dist/repository.js +118 -0
- package/dist/repository.js.map +1 -0
- package/dist/runtime/domains.d.ts +14 -0
- package/dist/runtime/domains.d.ts.map +1 -0
- package/dist/runtime/domains.js +42 -0
- package/dist/runtime/domains.js.map +1 -0
- package/dist/runtime/features.d.ts +10 -0
- package/dist/runtime/features.d.ts.map +1 -0
- package/dist/runtime/features.js +37 -0
- package/dist/runtime/features.js.map +1 -0
- package/dist/runtime/health.d.ts +6 -0
- package/dist/runtime/health.d.ts.map +1 -0
- package/dist/runtime/health.js +28 -0
- package/dist/runtime/health.js.map +1 -0
- package/dist/runtime/hono.d.ts +30 -0
- package/dist/runtime/hono.d.ts.map +1 -0
- package/dist/runtime/hono.js +50 -0
- package/dist/runtime/hono.js.map +1 -0
- package/dist/runtime/model.d.ts +133 -0
- package/dist/runtime/model.d.ts.map +1 -0
- package/dist/runtime/model.js +2 -0
- package/dist/runtime/model.js.map +1 -0
- package/dist/runtime/responses.d.ts +9 -0
- package/dist/runtime/responses.d.ts.map +1 -0
- package/dist/runtime/responses.js +14 -0
- package/dist/runtime/responses.js.map +1 -0
- package/dist/runtime/worker.d.ts +10 -0
- package/dist/runtime/worker.d.ts.map +1 -0
- package/dist/runtime/worker.js +216 -0
- package/dist/runtime/worker.js.map +1 -0
- package/dist/ui/index.d.ts +3 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +3 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/react/admin-access.d.ts +2 -0
- package/dist/ui/react/admin-access.d.ts.map +1 -0
- package/dist/ui/react/admin-access.js +47 -0
- package/dist/ui/react/admin-access.js.map +1 -0
- package/dist/ui/react/admin-audit.d.ts +2 -0
- package/dist/ui/react/admin-audit.d.ts.map +1 -0
- package/dist/ui/react/admin-audit.js +13 -0
- package/dist/ui/react/admin-audit.js.map +1 -0
- package/dist/ui/react/admin-catalogs.d.ts +6 -0
- package/dist/ui/react/admin-catalogs.d.ts.map +1 -0
- package/dist/ui/react/admin-catalogs.js +37 -0
- package/dist/ui/react/admin-catalogs.js.map +1 -0
- package/dist/ui/react/admin-dashboard.d.ts +39 -0
- package/dist/ui/react/admin-dashboard.d.ts.map +1 -0
- package/dist/ui/react/admin-dashboard.js +135 -0
- package/dist/ui/react/admin-dashboard.js.map +1 -0
- package/dist/ui/react/admin-details.d.ts +27 -0
- package/dist/ui/react/admin-details.d.ts.map +1 -0
- package/dist/ui/react/admin-details.js +82 -0
- package/dist/ui/react/admin-details.js.map +1 -0
- package/dist/ui/react/admin-shell.d.ts +20 -0
- package/dist/ui/react/admin-shell.d.ts.map +1 -0
- package/dist/ui/react/admin-shell.js +24 -0
- package/dist/ui/react/admin-shell.js.map +1 -0
- package/dist/ui/react/bootstrap.d.ts +9 -0
- package/dist/ui/react/bootstrap.d.ts.map +1 -0
- package/dist/ui/react/bootstrap.js +45 -0
- package/dist/ui/react/bootstrap.js.map +1 -0
- package/dist/ui/react/foundation.d.ts +35 -0
- package/dist/ui/react/foundation.d.ts.map +1 -0
- package/dist/ui/react/foundation.js +62 -0
- package/dist/ui/react/foundation.js.map +1 -0
- package/dist/ui/react/index.d.ts +12 -0
- package/dist/ui/react/index.d.ts.map +1 -0
- package/dist/ui/react/index.js +12 -0
- package/dist/ui/react/index.js.map +1 -0
- package/dist/ui/react/jobs.d.ts +62 -0
- package/dist/ui/react/jobs.d.ts.map +1 -0
- package/dist/ui/react/jobs.js +114 -0
- package/dist/ui/react/jobs.js.map +1 -0
- package/dist/ui/react/live-events.d.ts +18 -0
- package/dist/ui/react/live-events.d.ts.map +1 -0
- package/dist/ui/react/live-events.js +94 -0
- package/dist/ui/react/live-events.js.map +1 -0
- package/dist/ui/react/types.d.ts +79 -0
- package/dist/ui/react/types.d.ts.map +1 -0
- package/dist/ui/react/types.js +32 -0
- package/dist/ui/react/types.js.map +1 -0
- package/dist/ui/ssr.d.ts +55 -0
- package/dist/ui/ssr.d.ts.map +1 -0
- package/dist/ui/ssr.js +30 -0
- package/dist/ui/ssr.js.map +1 -0
- package/{src → dist}/ui/styles.css +22 -1
- package/migrations/0007_messaging.sql +52 -0
- package/migrations/0008_messaging_tenant_integrity.sql +44 -0
- package/migrations/0009_healthcheck_measurements.sql +3 -0
- package/migrations/0010_admin_dashboard_refinements.sql +24 -0
- package/package.json +162 -21
- package/changelog.md +0 -25
- package/src/admin/index.js +0 -1
- package/src/admin/routes.js +0 -64
- package/src/api/client.js +0 -8
- package/src/api/contracts.js +0 -24
- package/src/api/index.js +0 -7
- package/src/api/jobs.js +0 -37
- package/src/api/testing.js +0 -13
- package/src/app.js +0 -5
- package/src/auth/encoding.js +0 -6
- package/src/auth/groups.js +0 -5
- package/src/auth/impersonation.js +0 -15
- package/src/auth/index.js +0 -8
- package/src/auth/oauth-single.js +0 -204
- package/src/auth/scopes.js +0 -32
- package/src/auth/subscriptions.js +0 -42
- package/src/auth/tenants.js +0 -34
- package/src/auth/users.js +0 -40
- package/src/cli/cli.js +0 -133
- package/src/cli/d1.js +0 -165
- package/src/cli/operations.js +0 -34
- package/src/cli/project.js +0 -560
- package/src/cli/status.js +0 -46
- package/src/cli/tenants.js +0 -16
- package/src/cli/users.js +0 -34
- package/src/cli/version.js +0 -54
- package/src/core/circuits.js +0 -134
- package/src/core/d1.js +0 -54
- package/src/core/event-hub.js +0 -29
- package/src/core/events.js +0 -63
- package/src/core/identity.js +0 -39
- package/src/core/index.js +0 -7
- package/src/core/jobs.js +0 -185
- package/src/core/security.js +0 -88
- package/src/data/context.js +0 -16
- package/src/data/reader.js +0 -63
- package/src/data/resources.js +0 -42
- package/src/repository.js +0 -63
- package/src/runtime/features.js +0 -17
- package/src/runtime/health.js +0 -17
- package/src/runtime/worker.js +0 -58
- package/src/ui/index.js +0 -1
- package/src/ui/react/admin-access.jsx +0 -29
- package/src/ui/react/admin-catalogs.jsx +0 -39
- package/src/ui/react/admin-shell.jsx +0 -17
- package/src/ui/react/foundation.jsx +0 -40
- package/src/ui/react/index.jsx +0 -6
- package/src/ui/react/jobs.jsx +0 -63
- package/src/ui/react/live-events.jsx +0 -55
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import type { DataPage, DataResourceInput, DataRow, DataScope, DataScopeReader } from "../data/model.js";
|
|
2
|
+
export interface RepositoryRelation {
|
|
3
|
+
repository: string;
|
|
4
|
+
localKey?: string;
|
|
5
|
+
foreignKey?: string;
|
|
6
|
+
many?: boolean;
|
|
7
|
+
where?: DataRow;
|
|
8
|
+
options?: Record<string, unknown>;
|
|
9
|
+
}
|
|
10
|
+
export interface RepositoryHookContext {
|
|
11
|
+
env: RepositoryEnvironment;
|
|
12
|
+
context: unknown;
|
|
13
|
+
repository: Repository;
|
|
14
|
+
}
|
|
15
|
+
export type RepositoryHook<Input = unknown, Output = Input> = (value: Input, context: RepositoryHookContext) => Output | Promise<Output>;
|
|
16
|
+
export interface RepositoryHooks {
|
|
17
|
+
list?: RepositoryHook<DataRow[]>;
|
|
18
|
+
page?: RepositoryHook<DataPage>;
|
|
19
|
+
find?: RepositoryHook<DataRow | null>;
|
|
20
|
+
findOne?: RepositoryHook<DataRow | null>;
|
|
21
|
+
beforeInsert?: RepositoryHook<DataRow>;
|
|
22
|
+
afterInsert?: RepositoryHook<DataRow>;
|
|
23
|
+
beforeUpdate?: RepositoryHook<DataRow>;
|
|
24
|
+
afterUpdate?: RepositoryHook<DataRow | null>;
|
|
25
|
+
}
|
|
26
|
+
export interface RepositoryDefinitionInput {
|
|
27
|
+
name?: string;
|
|
28
|
+
resource?: string;
|
|
29
|
+
scope?: DataScope;
|
|
30
|
+
relations?: Record<string, RepositoryRelation>;
|
|
31
|
+
hooks?: RepositoryHooks;
|
|
32
|
+
resourceDefinition?: DataResourceInput | null;
|
|
33
|
+
}
|
|
34
|
+
export interface RepositoryDefinition {
|
|
35
|
+
name: string;
|
|
36
|
+
resource: string;
|
|
37
|
+
scope: DataScope;
|
|
38
|
+
relations: Record<string, RepositoryRelation>;
|
|
39
|
+
hooks: RepositoryHooks;
|
|
40
|
+
resourceDefinition: DataResourceInput | null;
|
|
41
|
+
}
|
|
42
|
+
export interface RepositoryEnvironment {
|
|
43
|
+
data?: Partial<Record<DataScope, DataScopeReader>>;
|
|
44
|
+
[key: string]: unknown;
|
|
45
|
+
}
|
|
46
|
+
export interface Repository {
|
|
47
|
+
name: string;
|
|
48
|
+
resource: string;
|
|
49
|
+
list(options?: Record<string, unknown>): Promise<DataRow[]>;
|
|
50
|
+
page(options?: Record<string, unknown>): Promise<DataPage>;
|
|
51
|
+
count(options?: Record<string, unknown>): Promise<number>;
|
|
52
|
+
find(id: unknown): Promise<DataRow | null>;
|
|
53
|
+
findOne(where: DataRow, options?: Record<string, unknown>): Promise<DataRow | null>;
|
|
54
|
+
insert(values: DataRow): Promise<DataRow>;
|
|
55
|
+
update(id: unknown, changes: DataRow): Promise<DataRow | null>;
|
|
56
|
+
updateWhere(where: DataRow, changes: DataRow): Promise<number>;
|
|
57
|
+
delete(id: unknown): Promise<D1Result<unknown>>;
|
|
58
|
+
deleteWhere(where: DataRow): Promise<D1Result<unknown>>;
|
|
59
|
+
link(relation: string, record: DataRow): Promise<unknown>;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/repository/model.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/repository/model.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Repository, RepositoryDefinition, RepositoryDefinitionInput, RepositoryEnvironment } from "./repository/model.js";
|
|
2
|
+
export type * from "./repository/model.js";
|
|
3
|
+
export declare class RepositoryError extends Error {
|
|
4
|
+
readonly status: number;
|
|
5
|
+
constructor(message: string, status?: number);
|
|
6
|
+
}
|
|
7
|
+
export declare function defineRepository({ name, resource, scope, relations, hooks, resourceDefinition, }?: RepositoryDefinitionInput): RepositoryDefinition;
|
|
8
|
+
export declare function createRepositories(env: RepositoryEnvironment, definitions?: readonly RepositoryDefinitionInput[], { context }?: {
|
|
9
|
+
context?: unknown;
|
|
10
|
+
}): Record<string, Repository>;
|
|
11
|
+
//# sourceMappingURL=repository.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repository.d.ts","sourceRoot":"","sources":["../src/repository.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,UAAU,EACV,oBAAoB,EACpB,yBAAyB,EACzB,qBAAqB,EAEtB,MAAM,uBAAuB,CAAC;AAE/B,mBAAmB,uBAAuB,CAAC;AAE3C,qBAAa,eAAgB,SAAQ,KAAK;IACxC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IAExB,YAAY,OAAO,EAAE,MAAM,EAAE,MAAM,SAAM,EAIxC;CACF;AAED,wBAAgB,gBAAgB,CAC9B,EACE,IAAI,EACJ,QAAQ,EACR,KAAgB,EAChB,SAAc,EACd,KAAU,EACV,kBAAyB,GAC1B,GAAE,yBAA8B,GAChC,oBAAoB,CAatB;AAED,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,qBAAqB,EAC1B,WAAW,GAAE,SAAS,yBAAyB,EAAO,EACtD,EAAE,OAAO,EAAE,GAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAA;CAAO,GACtC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAwG5B"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { auditLog } from "./core/events/index.js";
|
|
2
|
+
export class RepositoryError extends Error {
|
|
3
|
+
status;
|
|
4
|
+
constructor(message, status = 500) {
|
|
5
|
+
super(message);
|
|
6
|
+
this.name = "RepositoryError";
|
|
7
|
+
this.status = status;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
export function defineRepository({ name, resource, scope = "tenant", relations = {}, hooks = {}, resourceDefinition = null, } = {}) {
|
|
11
|
+
if (!/^[a-z][a-z0-9_-]*$/.test(String(name || ""))) {
|
|
12
|
+
throw new TypeError("Repositories require a safe name");
|
|
13
|
+
}
|
|
14
|
+
if (!resource)
|
|
15
|
+
throw new TypeError(`Repository ${name} requires a data resource`);
|
|
16
|
+
return {
|
|
17
|
+
name: String(name),
|
|
18
|
+
resource: String(resource),
|
|
19
|
+
scope,
|
|
20
|
+
relations: { ...relations },
|
|
21
|
+
hooks: { ...hooks },
|
|
22
|
+
resourceDefinition,
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
export function createRepositories(env, definitions = [], { context } = {}) {
|
|
26
|
+
const specs = new Map(definitions.map((definition) => {
|
|
27
|
+
const spec = defineRepository(definition);
|
|
28
|
+
return [spec.name, spec];
|
|
29
|
+
}));
|
|
30
|
+
const repositories = new Map();
|
|
31
|
+
const get = (name) => {
|
|
32
|
+
const result = repositories.get(String(name));
|
|
33
|
+
if (!result)
|
|
34
|
+
throw new RepositoryError(`Unknown repository: ${name}`, 500);
|
|
35
|
+
return result;
|
|
36
|
+
};
|
|
37
|
+
// Build every repository before exposing any of them so relations can point forward.
|
|
38
|
+
for (const spec of specs.values())
|
|
39
|
+
repositories.set(spec.name, createRepository(spec));
|
|
40
|
+
return Object.fromEntries(repositories);
|
|
41
|
+
function createRepository(spec) {
|
|
42
|
+
const reader = () => {
|
|
43
|
+
const data = env?.data;
|
|
44
|
+
const scopedReader = data?.[spec.scope];
|
|
45
|
+
if (!scopedReader) {
|
|
46
|
+
throw new RepositoryError(`Data scope ${spec.scope} is unavailable`, 500);
|
|
47
|
+
}
|
|
48
|
+
return scopedReader;
|
|
49
|
+
};
|
|
50
|
+
const invoke = async (hook, value) => {
|
|
51
|
+
return typeof hook === "function"
|
|
52
|
+
? hook(value, { env, context, repository: api })
|
|
53
|
+
: value;
|
|
54
|
+
};
|
|
55
|
+
const api = {
|
|
56
|
+
name: spec.name,
|
|
57
|
+
resource: spec.resource,
|
|
58
|
+
async list(options) {
|
|
59
|
+
return invoke(spec.hooks.list, await reader().list(spec.resource, options));
|
|
60
|
+
},
|
|
61
|
+
async page(options) {
|
|
62
|
+
return invoke(spec.hooks.page, await reader().page(spec.resource, options));
|
|
63
|
+
},
|
|
64
|
+
async count(options) {
|
|
65
|
+
return reader().count(spec.resource, options);
|
|
66
|
+
},
|
|
67
|
+
async find(id) {
|
|
68
|
+
return invoke(spec.hooks.find, await reader().get(spec.resource, id));
|
|
69
|
+
},
|
|
70
|
+
async findOne(where, options = {}) {
|
|
71
|
+
const rows = await reader().list(spec.resource, { ...options, where, limit: 1 });
|
|
72
|
+
return invoke(spec.hooks.findOne, rows[0] || null);
|
|
73
|
+
},
|
|
74
|
+
async insert(values) {
|
|
75
|
+
const result = await reader().insert(spec.resource, await invoke(spec.hooks.beforeInsert, values));
|
|
76
|
+
auditLog({ who: "repository", operation: "create", resource: spec.name });
|
|
77
|
+
return invoke(spec.hooks.afterInsert, result);
|
|
78
|
+
},
|
|
79
|
+
async update(id, changes) {
|
|
80
|
+
const result = await reader().update(spec.resource, id, await invoke(spec.hooks.beforeUpdate, changes));
|
|
81
|
+
auditLog({ who: "repository", operation: "update", resource: spec.name });
|
|
82
|
+
return invoke(spec.hooks.afterUpdate, result);
|
|
83
|
+
},
|
|
84
|
+
async updateWhere(where, changes) {
|
|
85
|
+
return reader().updateWhere(spec.resource, where, await invoke(spec.hooks.beforeUpdate, changes));
|
|
86
|
+
},
|
|
87
|
+
async delete(id) {
|
|
88
|
+
const result = await reader().delete(spec.resource, id);
|
|
89
|
+
auditLog({ who: "repository", operation: "delete", resource: spec.name });
|
|
90
|
+
return result;
|
|
91
|
+
},
|
|
92
|
+
async deleteWhere(where) {
|
|
93
|
+
return reader().deleteWhere(spec.resource, where);
|
|
94
|
+
},
|
|
95
|
+
async link(relation, record) {
|
|
96
|
+
const relationSpec = spec.relations[relation];
|
|
97
|
+
if (!relationSpec) {
|
|
98
|
+
throw new RepositoryError(`Unknown relation ${spec.name}.${relation}`, 500);
|
|
99
|
+
}
|
|
100
|
+
const target = get(relationSpec.repository);
|
|
101
|
+
const localKey = relationSpec.localKey || "id";
|
|
102
|
+
const foreignKey = relationSpec.foreignKey || `${spec.name}_id`;
|
|
103
|
+
const value = record?.[localKey];
|
|
104
|
+
if (value === undefined || value === null) {
|
|
105
|
+
return relationSpec.many === false ? null : [];
|
|
106
|
+
}
|
|
107
|
+
return relationSpec.many === false
|
|
108
|
+
? target.findOne({ [foreignKey]: value })
|
|
109
|
+
: target.list({
|
|
110
|
+
where: { [foreignKey]: value, ...(relationSpec.where || {}) },
|
|
111
|
+
...(relationSpec.options || {}),
|
|
112
|
+
});
|
|
113
|
+
},
|
|
114
|
+
};
|
|
115
|
+
return api;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=repository.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repository.js","sourceRoot":"","sources":["../src/repository.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { AppDomain } from "../domain/index.js";
|
|
2
|
+
import type { HealthProvider, RuntimeBindings, RuntimeState } from "./model.js";
|
|
3
|
+
/** Public operational health belongs to a domain even though it has no D1 model. */
|
|
4
|
+
export declare class RuntimeHealthDomain extends AppDomain<unknown, RuntimeBindings, RuntimeState> {
|
|
5
|
+
constructor(health?: HealthProvider);
|
|
6
|
+
}
|
|
7
|
+
/** Exposes the current user's available tenant context; it is not an admin API. */
|
|
8
|
+
export declare class TenantContextDomain extends AppDomain<unknown, RuntimeBindings, RuntimeState> {
|
|
9
|
+
constructor();
|
|
10
|
+
}
|
|
11
|
+
export declare function createRuntimeDomains(options?: {
|
|
12
|
+
health?: HealthProvider;
|
|
13
|
+
}): readonly [RuntimeHealthDomain, TenantContextDomain];
|
|
14
|
+
//# sourceMappingURL=domains.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domains.d.ts","sourceRoot":"","sources":["../../src/runtime/domains.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAA6B,MAAM,oBAAoB,CAAC;AAG1E,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAIhF,oFAAoF;AACpF,qBAAa,mBAAoB,SAAQ,SAAS,CAAC,OAAO,EAAE,eAAe,EAAE,YAAY,CAAC;IACxF,YAAY,MAAM,CAAC,EAAE,cAAc,EAKlC;CACF;AAUD,mFAAmF;AACnF,qBAAa,mBAAoB,SAAQ,SAAS,CAAC,OAAO,EAAE,eAAe,EAAE,YAAY,CAAC;IACxF,cAGC;CACF;AAcD,wBAAgB,oBAAoB,CAAC,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,cAAc,CAAA;CAAO,uDAE7E"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { AppDomain } from "../domain/index.js";
|
|
2
|
+
import { listFeatureHealth } from "../core/healthchecks/index.js";
|
|
3
|
+
import { healthResponse } from "./health.js";
|
|
4
|
+
/** Public operational health belongs to a domain even though it has no D1 model. */
|
|
5
|
+
export class RuntimeHealthDomain extends AppDomain {
|
|
6
|
+
constructor(health) {
|
|
7
|
+
super({ name: "runtime.health", basePath: "/health", auth: "public" });
|
|
8
|
+
const handler = (context) => respondWithHealth(context, health);
|
|
9
|
+
this.route({ method: "GET", handler });
|
|
10
|
+
this.route({ method: "GET", absolutePath: "/api/health", handler });
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
async function respondWithHealth(context, health) {
|
|
14
|
+
const details = health ? await health(context.env, context) : {};
|
|
15
|
+
const features = context.env?.DB
|
|
16
|
+
? await listFeatureHealth(context.env, { who: "system:read" }).catch(() => [])
|
|
17
|
+
: [];
|
|
18
|
+
return healthResponse(context.env, features.length ? { ...details, features } : details);
|
|
19
|
+
}
|
|
20
|
+
/** Exposes the current user's available tenant context; it is not an admin API. */
|
|
21
|
+
export class TenantContextDomain extends AppDomain {
|
|
22
|
+
constructor() {
|
|
23
|
+
super({ name: "auth.tenant-context", basePath: "/api/tenant", auth: "user" });
|
|
24
|
+
this.route({ method: "GET", handler: tenantContext });
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
async function tenantContext({ state }) {
|
|
28
|
+
if (!state.data)
|
|
29
|
+
return Response.json({ error: "Data context is unavailable." }, { status: 500 });
|
|
30
|
+
const context = await state.data.context();
|
|
31
|
+
if (context.invalidTenant) {
|
|
32
|
+
return Response.json({ error: "The requested tenant is not available." }, { status: 400 });
|
|
33
|
+
}
|
|
34
|
+
const tenant = context.tenantId
|
|
35
|
+
? { id: context.tenantId, name: context.tenants?.find((candidate) => candidate.id === context.tenantId)?.name ?? null }
|
|
36
|
+
: null;
|
|
37
|
+
return Response.json({ tenant, tenants: context.tenants ?? [] });
|
|
38
|
+
}
|
|
39
|
+
export function createRuntimeDomains(options = {}) {
|
|
40
|
+
return [new RuntimeHealthDomain(options.health), new TenantContextDomain()];
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=domains.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domains.js","sourceRoot":"","sources":["../../src/runtime/domains.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { FeatureManifest } from "../core/healthchecks/model.js";
|
|
2
|
+
import type { FeatureManifestOptions, RuntimeBindings } from "./model.js";
|
|
3
|
+
/**
|
|
4
|
+
* Registration is idempotent per D1 binding and feature set. The cache only avoids
|
|
5
|
+
* duplicate work inside a warm isolate; D1 remains the durable source of truth.
|
|
6
|
+
*/
|
|
7
|
+
export declare function ensureFeatureManifests(env: RuntimeBindings, features?: readonly FeatureManifest[], { who }?: FeatureManifestOptions): Promise<void>;
|
|
8
|
+
/** Run live health measurements without reusing the warm-isolate registration promise. */
|
|
9
|
+
export declare function refreshFeatureManifests(env: RuntimeBindings, features?: readonly FeatureManifest[], { who }?: FeatureManifestOptions): Promise<void>;
|
|
10
|
+
//# sourceMappingURL=features.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features.d.ts","sourceRoot":"","sources":["../../src/runtime/features.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AACrE,OAAO,KAAK,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAO1E;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,eAAe,EACpB,QAAQ,GAAE,SAAS,eAAe,EAAO,EACzC,EAAE,GAAqB,EAAE,GAAE,sBAA2B,GACrD,OAAO,CAAC,IAAI,CAAC,CAsBf;AAED,0FAA0F;AAC1F,wBAAsB,uBAAuB,CAC3C,GAAG,EAAE,eAAe,EACpB,QAAQ,GAAE,SAAS,eAAe,EAAO,EACzC,EAAE,GAAqB,EAAE,GAAE,sBAA2B,GACrD,OAAO,CAAC,IAAI,CAAC,CAKf"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { evaluateCircuitBreaker, listCircuitBreakers } from "../core/circuits/index.js";
|
|
2
|
+
import { registerFeatureManifests } from "../core/healthchecks/index.js";
|
|
3
|
+
const featureRegistrationPromises = new WeakMap();
|
|
4
|
+
/**
|
|
5
|
+
* Registration is idempotent per D1 binding and feature set. The cache only avoids
|
|
6
|
+
* duplicate work inside a warm isolate; D1 remains the durable source of truth.
|
|
7
|
+
*/
|
|
8
|
+
export function ensureFeatureManifests(env, features = [], { who = "system:update" } = {}) {
|
|
9
|
+
if (!env || typeof env !== "object" || !env.DB)
|
|
10
|
+
return Promise.resolve();
|
|
11
|
+
const key = features.map((feature) => String(feature?.name || "feature")).join("|");
|
|
12
|
+
let registrations = featureRegistrationPromises.get(env.DB);
|
|
13
|
+
if (!registrations) {
|
|
14
|
+
registrations = new Map();
|
|
15
|
+
featureRegistrationPromises.set(env.DB, registrations);
|
|
16
|
+
}
|
|
17
|
+
let promise = registrations.get(key);
|
|
18
|
+
if (!promise) {
|
|
19
|
+
promise = (async () => {
|
|
20
|
+
await registerFeatureManifests(env, features, { who });
|
|
21
|
+
const breakers = await listCircuitBreakers(env, { who });
|
|
22
|
+
await Promise.all(breakers.map((breaker) => evaluateCircuitBreaker(env, breaker.id, { who })));
|
|
23
|
+
})();
|
|
24
|
+
registrations.set(key, promise);
|
|
25
|
+
promise.catch(() => registrations?.delete(key));
|
|
26
|
+
}
|
|
27
|
+
return promise;
|
|
28
|
+
}
|
|
29
|
+
/** Run live health measurements without reusing the warm-isolate registration promise. */
|
|
30
|
+
export async function refreshFeatureManifests(env, features = [], { who = "system:update" } = {}) {
|
|
31
|
+
if (!env?.DB)
|
|
32
|
+
return;
|
|
33
|
+
await registerFeatureManifests(env, features, { who });
|
|
34
|
+
const breakers = await listCircuitBreakers(env, { who });
|
|
35
|
+
await Promise.all(breakers.map((breaker) => evaluateCircuitBreaker(env, breaker.id, { who })));
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=features.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"features.js","sourceRoot":"","sources":["../../src/runtime/features.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACxF,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAC;AAIzE,MAAM,2BAA2B,GAAG,IAAI,OAAO,EAG5C,CAAC;AAEJ;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CACpC,GAAoB,EACpB,QAAQ,GAA+B,EAAE,EACzC,EAAE,GAAG,GAAG,eAAe,EAAE,GAA2B,EAAE;IAEtD,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IACzE,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,IAAI,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpF,IAAI,aAAa,GAAG,2BAA2B,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC5D,IAAI,CAAC,aAAa,EAAE,CAAC;QACnB,aAAa,GAAG,IAAI,GAAG,EAAE,CAAC;QAC1B,2BAA2B,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;IACzD,CAAC;IAED,IAAI,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACrC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,GAAG,CAAC,KAAK,IAAI,EAAE;YACpB,MAAM,wBAAwB,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;YACvD,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;YACzD,MAAM,OAAO,CAAC,GAAG,CACf,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,sBAAsB,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAC5E,CAAC;QACJ,CAAC,CAAC,EAAE,CAAC;QACL,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAChC,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,aAAa,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,0FAA0F;AAC1F,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAC3C,GAAoB,EACpB,QAAQ,GAA+B,EAAE,EACzC,EAAE,GAAG,GAAG,eAAe,EAAE,GAA2B,EAAE;IAEtD,IAAI,CAAC,GAAG,EAAE,EAAE;QAAE,OAAO;IACrB,MAAM,wBAAwB,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IACvD,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,GAAG,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC;IACzD,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,sBAAsB,CAAC,GAAG,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;AACjG,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { BootSpec, BootValidation, HealthDetails, RuntimeBindings } from "./model.js";
|
|
2
|
+
export declare function validateBoot(env: RuntimeBindings, { bindings, required }?: BootSpec): BootValidation;
|
|
3
|
+
export declare function assertBoot(env: RuntimeBindings, spec?: BootSpec): BootValidation;
|
|
4
|
+
export declare function methodNotAllowed(allow?: string): Response;
|
|
5
|
+
export declare function healthResponse(env: RuntimeBindings, details?: HealthDetails): Response;
|
|
6
|
+
//# sourceMappingURL=health.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../src/runtime/health.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAE3F,wBAAgB,YAAY,CAAC,GAAG,EAAE,eAAe,EAAE,EAAE,QAAa,EAAE,QAAa,EAAE,GAAE,QAAa,GAAG,cAAc,CAUlH;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,eAAe,EAAE,IAAI,GAAE,QAAa,GAAG,cAAc,CAQpF;AAED,wBAAgB,gBAAgB,CAAC,KAAK,SAAQ,GAAG,QAAQ,CAExD;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,eAAe,EAAE,OAAO,GAAE,aAAkB,GAAG,QAAQ,CAO1F"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export function validateBoot(env, { bindings = [], required = [] } = {}) {
|
|
2
|
+
const missingBindings = bindings.filter((name) => !env?.[name]);
|
|
3
|
+
const missingValues = required.filter((name) => !env?.[name] || String(env[name]).startsWith("replace-with-"));
|
|
4
|
+
return {
|
|
5
|
+
ok: missingBindings.length === 0 && missingValues.length === 0,
|
|
6
|
+
missingBindings,
|
|
7
|
+
missingValues,
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
export function assertBoot(env, spec = {}) {
|
|
11
|
+
const result = validateBoot(env, spec);
|
|
12
|
+
if (!result.ok) {
|
|
13
|
+
throw new Error(`Worker boot validation failed: ${[...result.missingBindings, ...result.missingValues].join(", ")}`);
|
|
14
|
+
}
|
|
15
|
+
return result;
|
|
16
|
+
}
|
|
17
|
+
export function methodNotAllowed(allow = "GET") {
|
|
18
|
+
return new Response("Method Not Allowed", { status: 405, headers: { Allow: allow } });
|
|
19
|
+
}
|
|
20
|
+
export function healthResponse(env, details = {}) {
|
|
21
|
+
return Response.json({
|
|
22
|
+
ok: true,
|
|
23
|
+
version: String(env.BUILD_SHA || "unknown").slice(0, 7),
|
|
24
|
+
build_number: env.BUILD_NUMBER ? String(env.BUILD_NUMBER) : null,
|
|
25
|
+
...details,
|
|
26
|
+
}, { headers: { "Cache-Control": "no-store" } });
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=health.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/runtime/health.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,YAAY,CAAC,GAAoB,EAAE,EAAE,QAAQ,GAAG,EAAE,EAAE,QAAQ,GAAG,EAAE,EAAE,GAAa,EAAE;IAChG,MAAM,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAChE,MAAM,aAAa,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAC7C,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,eAAe,CAAC,CAC9D,CAAC;IACF,OAAO;QACL,EAAE,EAAE,eAAe,CAAC,MAAM,KAAK,CAAC,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;QAC9D,eAAe;QACf,aAAa;KACd,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,GAAoB,EAAE,IAAI,GAAa,EAAE;IAClE,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACvC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,kCAAkC,CAAC,GAAG,MAAM,CAAC,eAAe,EAAE,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACpG,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAK,GAAG,KAAK;IAC5C,OAAO,IAAI,QAAQ,CAAC,oBAAoB,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;AACxF,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAAoB,EAAE,OAAO,GAAkB,EAAE;IAC9E,OAAO,QAAQ,CAAC,IAAI,CAAC;QACnB,EAAE,EAAE,IAAI;QACR,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,SAAS,IAAI,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;QACvD,YAAY,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,IAAI;QAChE,GAAG,OAAO;KACX,EAAE,EAAE,OAAO,EAAE,EAAE,eAAe,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;AACnD,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { Hono } from "hono";
|
|
2
|
+
export type RuntimeExecutionContext = ExecutionContext;
|
|
3
|
+
/**
|
|
4
|
+
* The public worker middleware contract predates Hono. This adapter lets existing
|
|
5
|
+
* features keep that contract while Hono owns ordering, dispatch, and fallthrough.
|
|
6
|
+
* New runtime middleware should prefer Hono's `(c, next)` shape directly.
|
|
7
|
+
*/
|
|
8
|
+
export type WorkerLayer<Env extends object = Record<string, unknown>, State = object> = (request: Request, env: Env, ctx: RuntimeExecutionContext, next: (request?: Request) => Promise<Response>, state: State) => Response | Promise<Response>;
|
|
9
|
+
export interface HonoRuntimeOptions<Env extends object, State> {
|
|
10
|
+
layers?: readonly WorkerLayer<Env, State>[];
|
|
11
|
+
terminal: (request: Request, env: Env, ctx: RuntimeExecutionContext, state: State) => Response | Promise<Response>;
|
|
12
|
+
}
|
|
13
|
+
declare const STATE_KEY = "__cfgenai_runtime_state";
|
|
14
|
+
declare const CONTEXT_KEY = "__cfgenai_execution_context";
|
|
15
|
+
type RuntimeBindings<Env extends object, State> = Env & {
|
|
16
|
+
[STATE_KEY]?: State;
|
|
17
|
+
[CONTEXT_KEY]?: ExecutionContext;
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Build one Hono application per Worker instance. State is attached to a short-lived
|
|
21
|
+
* environment facade for each request, never to the Hono app or module globals.
|
|
22
|
+
*/
|
|
23
|
+
export declare function createHonoRuntime<Env extends object, State>(options: HonoRuntimeOptions<Env, State>): {
|
|
24
|
+
app: Hono<{
|
|
25
|
+
Bindings: RuntimeBindings<Env, State>;
|
|
26
|
+
}, import("hono/types").BlankSchema, "/">;
|
|
27
|
+
fetch(request: Request, env: Env, ctx: ExecutionContext, state: State): Promise<Response> | Response;
|
|
28
|
+
};
|
|
29
|
+
export {};
|
|
30
|
+
//# sourceMappingURL=hono.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hono.d.ts","sourceRoot":"","sources":["../../src/runtime/hono.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAG5B,MAAM,MAAM,uBAAuB,GAAG,gBAAgB,CAAC;AAEvD;;;;GAIG;AACH,MAAM,MAAM,WAAW,CAAC,GAAG,SAAS,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,GAAG,MAAM,IAAI,CACtF,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,uBAAuB,EAC5B,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,EAC9C,KAAK,EAAE,KAAK,KACT,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;AAElC,MAAM,WAAW,kBAAkB,CAAC,GAAG,SAAS,MAAM,EAAE,KAAK;IAC3D,MAAM,CAAC,EAAE,SAAS,WAAW,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,CAAC;IAC5C,QAAQ,EAAE,CACR,OAAO,EAAE,OAAO,EAChB,GAAG,EAAE,GAAG,EACR,GAAG,EAAE,uBAAuB,EAC5B,KAAK,EAAE,KAAK,KACT,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;CACnC;AAED,QAAA,MAAM,SAAS,4BAA4B,CAAC;AAC5C,QAAA,MAAM,WAAW,gCAAgC,CAAC;AAElD,KAAK,eAAe,CAAC,GAAG,SAAS,MAAM,EAAE,KAAK,IAAI,GAAG,GAAG;IACtD,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC;IACpB,CAAC,WAAW,CAAC,CAAC,EAAE,gBAAgB,CAAC;CAClC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,SAAS,MAAM,EAAE,KAAK,EACzD,OAAO,EAAE,kBAAkB,CAAC,GAAG,EAAE,KAAK,CAAC;;kBAEN,eAAe,CAAC,GAAG,EAAE,KAAK,CAAC;;mBA2C3C,OAAO,OAAO,GAAG,OAAO,gBAAgB,SAAS,KAAK;EASxE"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { Hono } from "hono";
|
|
2
|
+
const STATE_KEY = "__cfgenai_runtime_state";
|
|
3
|
+
const CONTEXT_KEY = "__cfgenai_execution_context";
|
|
4
|
+
/**
|
|
5
|
+
* Build one Hono application per Worker instance. State is attached to a short-lived
|
|
6
|
+
* environment facade for each request, never to the Hono app or module globals.
|
|
7
|
+
*/
|
|
8
|
+
export function createHonoRuntime(options) {
|
|
9
|
+
const app = new Hono();
|
|
10
|
+
// Leave classification to createWorker's single error boundary.
|
|
11
|
+
app.onError((error) => { throw error; });
|
|
12
|
+
for (const layer of options.layers ?? []) {
|
|
13
|
+
const middleware = async (c, next) => {
|
|
14
|
+
const state = c.env[STATE_KEY];
|
|
15
|
+
const executionContext = c.env[CONTEXT_KEY];
|
|
16
|
+
if (!state || !executionContext)
|
|
17
|
+
return c.text("Runtime request state is missing.", 500);
|
|
18
|
+
let downstreamCalled = false;
|
|
19
|
+
const nextRequest = async (_request = c.req.raw) => {
|
|
20
|
+
downstreamCalled = true;
|
|
21
|
+
await next();
|
|
22
|
+
return c.res;
|
|
23
|
+
};
|
|
24
|
+
const response = await layer(c.req.raw, c.env, executionContext, nextRequest, state);
|
|
25
|
+
// Hono stores the downstream response on c.res. Returning it here preserves the
|
|
26
|
+
// old middleware contract while allowing Hono to continue its normal unwind.
|
|
27
|
+
return response instanceof Response ? response : downstreamCalled ? c.res : c.res;
|
|
28
|
+
};
|
|
29
|
+
app.use("*", middleware);
|
|
30
|
+
}
|
|
31
|
+
app.all("*", (c) => {
|
|
32
|
+
const state = c.env[STATE_KEY];
|
|
33
|
+
const executionContext = c.env[CONTEXT_KEY];
|
|
34
|
+
if (!state || !executionContext)
|
|
35
|
+
return c.text("Runtime request state is missing.", 500);
|
|
36
|
+
return options.terminal(c.req.raw, c.env, executionContext, state);
|
|
37
|
+
});
|
|
38
|
+
return {
|
|
39
|
+
app,
|
|
40
|
+
fetch(request, env, ctx, state) {
|
|
41
|
+
const requestEnv = {
|
|
42
|
+
...env,
|
|
43
|
+
[STATE_KEY]: state,
|
|
44
|
+
[CONTEXT_KEY]: ctx,
|
|
45
|
+
};
|
|
46
|
+
return app.fetch(request, requestEnv, ctx);
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=hono.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hono.js","sourceRoot":"","sources":["../../src/runtime/hono.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AA4B5B,MAAM,SAAS,GAAG,yBAAyB,CAAC;AAC5C,MAAM,WAAW,GAAG,6BAA6B,CAAC;AAOlD;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,OAAuC;IAEvC,MAAM,GAAG,GAAG,IAAI,IAAI,EAA6C,CAAC;IAClE,gEAAgE;IAChE,GAAG,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,GAAG,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAEzC,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;QACzC,MAAM,UAAU,GAAiE,KAAK,EACpF,CAAC,EACD,IAAI,EACJ,EAAE;YACF,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAC/B,MAAM,gBAAgB,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YAC5C,IAAI,CAAC,KAAK,IAAI,CAAC,gBAAgB;gBAAE,OAAO,CAAC,CAAC,IAAI,CAAC,mCAAmC,EAAE,GAAG,CAAC,CAAC;YAEzF,IAAI,gBAAgB,GAAG,KAAK,CAAC;YAC7B,MAAM,WAAW,GAAG,KAAK,EAAE,QAAQ,GAAY,CAAC,CAAC,GAAG,CAAC,GAAG,EAAqB,EAAE;gBAC7E,gBAAgB,GAAG,IAAI,CAAC;gBACxB,MAAM,IAAI,EAAE,CAAC;gBACb,OAAO,CAAC,CAAC,GAAG,CAAC;YACf,CAAC,CAAC;YACF,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,CAAC,CAAC,GAAG,CAAC,GAAG,EACT,CAAC,CAAC,GAAG,EACL,gBAAgB,EAChB,WAAW,EACX,KAAK,CACN,CAAC;YAEF,gFAAgF;YAChF,6EAA6E;YAC7E,OAAO,QAAQ,YAAY,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QACpF,CAAC,CAAC;QACF,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IAC3B,CAAC;IAED,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE;QACjB,MAAM,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC/B,MAAM,gBAAgB,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;QAC5C,IAAI,CAAC,KAAK,IAAI,CAAC,gBAAgB;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC,mCAAmC,EAAE,GAAG,CAAC,CAAC;QACzF,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,GAAG,EAAE,gBAAgB,EAAE,KAAK,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,GAAG;QACH,KAAK,CAAC,OAAgB,EAAE,GAAQ,EAAE,GAAqB,EAAE,KAAY;YACnE,MAAM,UAAU,GAAgC;gBAC9C,GAAG,GAAG;gBACN,CAAC,SAAS,CAAC,EAAE,KAAK;gBAClB,CAAC,WAAW,CAAC,EAAE,GAAG;aACnB,CAAC;YACF,OAAO,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC;QAC7C,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import type { AdminBindings, AdminIdentity, AdminRequestState } from "../admin/types.js";
|
|
2
|
+
import type { AnyAppDomain, AppDefinition, AppDefinitionInput } from "../app.js";
|
|
3
|
+
import type { AppEvent, EventHandler } from "../core/events/index.js";
|
|
4
|
+
import type { DataActorContext, DataReader, DataResourceInput } from "../data/model.js";
|
|
5
|
+
import type { Repository, RepositoryDefinitionInput } from "../repository/model.js";
|
|
6
|
+
import type { CircuitBreakerInput } from "../core/circuits/model.js";
|
|
7
|
+
import type { HealthcheckInput } from "../core/healthchecks/model.js";
|
|
8
|
+
import type { WorkerLayer } from "./hono.js";
|
|
9
|
+
export interface RuntimeFeature<Env extends RuntimeBindings = RuntimeBindings, State extends RuntimeState = RuntimeState> {
|
|
10
|
+
name: string;
|
|
11
|
+
id?: string;
|
|
12
|
+
displayName?: string;
|
|
13
|
+
packageName?: string;
|
|
14
|
+
version?: string;
|
|
15
|
+
domains?: readonly AnyAppDomain[];
|
|
16
|
+
healthcheck?: (env: Env, options?: FeatureManifestOptions) => HealthcheckInput | readonly HealthcheckInput[] | Promise<HealthcheckInput | readonly HealthcheckInput[]>;
|
|
17
|
+
healthchecks?: readonly HealthcheckInput[];
|
|
18
|
+
circuitBreakers?: readonly CircuitBreakerInput[];
|
|
19
|
+
middleware?: WorkerLayer<RuntimeRequestEnvironment<Env>, State>;
|
|
20
|
+
getUser?: (request: Request, env: Env) => AdminIdentity | null | Promise<AdminIdentity | null>;
|
|
21
|
+
eventHandler?: EventHandler<Env, ExecutionContext>;
|
|
22
|
+
event_handler?: EventHandler<Env, ExecutionContext>;
|
|
23
|
+
/** Environment values required when this feature handles a request. */
|
|
24
|
+
requiredEnvironment?: (context: {
|
|
25
|
+
request: Request;
|
|
26
|
+
url: URL;
|
|
27
|
+
}) => readonly string[];
|
|
28
|
+
[key: string]: unknown;
|
|
29
|
+
}
|
|
30
|
+
/** Shared options implemented by first-party and external App SDK features. */
|
|
31
|
+
export interface RuntimeFeatureOptions<Env extends RuntimeBindings = RuntimeBindings, State extends RuntimeState = RuntimeState> {
|
|
32
|
+
name?: string;
|
|
33
|
+
displayName?: string;
|
|
34
|
+
domains?: readonly AnyAppDomain[];
|
|
35
|
+
healthcheck?: RuntimeFeature<Env, State>["healthcheck"];
|
|
36
|
+
healthchecks?: readonly HealthcheckInput[];
|
|
37
|
+
circuitBreakers?: readonly CircuitBreakerInput[];
|
|
38
|
+
boot?: (env: RuntimeRequestEnvironment<Env>, context: {
|
|
39
|
+
request: Request;
|
|
40
|
+
ctx: RuntimeExecutionContext;
|
|
41
|
+
state: State;
|
|
42
|
+
}) => void | Promise<void>;
|
|
43
|
+
middleware?: WorkerLayer<RuntimeRequestEnvironment<Env>, State>;
|
|
44
|
+
}
|
|
45
|
+
type RuntimeExecutionContext = Parameters<WorkerLayer>[2];
|
|
46
|
+
export interface RuntimeBindings extends AdminBindings {
|
|
47
|
+
BUILD_SHA?: string;
|
|
48
|
+
BUILD_NUMBER?: string | number;
|
|
49
|
+
EVENT_HUB?: DurableObjectNamespace;
|
|
50
|
+
[key: string]: unknown;
|
|
51
|
+
}
|
|
52
|
+
export interface RuntimeState extends AdminRequestState {
|
|
53
|
+
requestId: string;
|
|
54
|
+
user?: AdminIdentity | null;
|
|
55
|
+
data?: DataReader;
|
|
56
|
+
context?: RuntimeRequestContext;
|
|
57
|
+
tenantId?: string;
|
|
58
|
+
}
|
|
59
|
+
export type RuntimeEventEmitter = (what: string, where?: string, details?: Record<string, unknown>, when?: Date) => Promise<AppEvent | null>;
|
|
60
|
+
export interface RuntimeRequestContext {
|
|
61
|
+
request: Request;
|
|
62
|
+
env: RuntimeRequestEnvironment;
|
|
63
|
+
ctx: ExecutionContext;
|
|
64
|
+
state: RuntimeState;
|
|
65
|
+
data?: DataReader;
|
|
66
|
+
userId: string | null;
|
|
67
|
+
who: string;
|
|
68
|
+
isAuthenticated: boolean;
|
|
69
|
+
isAdmin: boolean;
|
|
70
|
+
event: RuntimeEventEmitter;
|
|
71
|
+
}
|
|
72
|
+
export type RuntimeRequestEnvironment<Env extends RuntimeBindings = RuntimeBindings> = Env & {
|
|
73
|
+
app?: Readonly<AppDefinition>;
|
|
74
|
+
features?: RuntimeFeature[];
|
|
75
|
+
data?: DataReader;
|
|
76
|
+
repositories?: Record<string, Repository>;
|
|
77
|
+
user?: AdminIdentity | null;
|
|
78
|
+
authUser?: AdminIdentity["authUser"];
|
|
79
|
+
userId?: string | null;
|
|
80
|
+
requestId?: string;
|
|
81
|
+
context?: RuntimeRequestContext;
|
|
82
|
+
eventHubBinding?: string;
|
|
83
|
+
eventHandler?: (event: AppEvent, env: RuntimeRequestEnvironment, ctx: ExecutionContext) => Promise<AppEvent | null>;
|
|
84
|
+
event?: RuntimeEventEmitter;
|
|
85
|
+
};
|
|
86
|
+
export type RuntimeMiddleware<Env extends RuntimeBindings, State extends RuntimeState> = WorkerLayer<RuntimeRequestEnvironment<Env>, State>;
|
|
87
|
+
export interface CreateWorkerOptions<Env extends RuntimeBindings = RuntimeBindings, State extends RuntimeState = RuntimeState> {
|
|
88
|
+
fetch: (request: Request, env: RuntimeRequestEnvironment<Env>, ctx: ExecutionContext, state: State) => Response | Promise<Response>;
|
|
89
|
+
scheduled?: (controller: ScheduledController, env: Env, ctx: ExecutionContext) => void | Promise<void>;
|
|
90
|
+
app?: AppDefinitionInput;
|
|
91
|
+
authorize?: (context: {
|
|
92
|
+
request: Request;
|
|
93
|
+
url: URL;
|
|
94
|
+
user: AdminIdentity;
|
|
95
|
+
env: RuntimeRequestEnvironment<Env>;
|
|
96
|
+
ctx: ExecutionContext;
|
|
97
|
+
state: State;
|
|
98
|
+
}) => boolean | Promise<boolean>;
|
|
99
|
+
middleware?: readonly RuntimeMiddleware<Env, State>[];
|
|
100
|
+
publicTenantId?: string | null;
|
|
101
|
+
health?: HealthProvider;
|
|
102
|
+
boot?: (env: Env, context: {
|
|
103
|
+
request: Request;
|
|
104
|
+
ctx: ExecutionContext;
|
|
105
|
+
}) => unknown;
|
|
106
|
+
/** Bindings required before any request-specific work begins. */
|
|
107
|
+
requiredBindings?: readonly string[];
|
|
108
|
+
security?: boolean;
|
|
109
|
+
eventHubBinding?: string;
|
|
110
|
+
}
|
|
111
|
+
export type HealthDetails = Record<string, unknown>;
|
|
112
|
+
export type HealthProvider = (env: RuntimeBindings, context: {
|
|
113
|
+
request: Request;
|
|
114
|
+
ctx: ExecutionContext;
|
|
115
|
+
state: RuntimeState;
|
|
116
|
+
}) => HealthDetails | Promise<HealthDetails>;
|
|
117
|
+
export interface FeatureManifestOptions {
|
|
118
|
+
who?: string;
|
|
119
|
+
}
|
|
120
|
+
export interface BootSpec {
|
|
121
|
+
bindings?: readonly string[];
|
|
122
|
+
required?: readonly string[];
|
|
123
|
+
}
|
|
124
|
+
export interface BootValidation {
|
|
125
|
+
ok: boolean;
|
|
126
|
+
missingBindings: string[];
|
|
127
|
+
missingValues: string[];
|
|
128
|
+
}
|
|
129
|
+
export type DomainResourceDefinition = DataResourceInput;
|
|
130
|
+
export type DomainRepositoryDefinition = RepositoryDefinitionInput;
|
|
131
|
+
export type ResolvedDataContext = DataActorContext;
|
|
132
|
+
export {};
|
|
133
|
+
//# sourceMappingURL=model.d.ts.map
|