@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,62 @@
|
|
|
1
|
+
import { type JsonValue } from "../../api/client.js";
|
|
2
|
+
export interface Job {
|
|
3
|
+
id: string;
|
|
4
|
+
type: string;
|
|
5
|
+
status: string;
|
|
6
|
+
createdAt?: string;
|
|
7
|
+
updatedAt?: string;
|
|
8
|
+
progress?: JsonValue;
|
|
9
|
+
result?: JsonValue;
|
|
10
|
+
error?: JsonValue;
|
|
11
|
+
}
|
|
12
|
+
export interface JobEvent {
|
|
13
|
+
id: string;
|
|
14
|
+
type: string;
|
|
15
|
+
createdAt?: string;
|
|
16
|
+
}
|
|
17
|
+
export interface JobFilters {
|
|
18
|
+
[key: string]: string | number | boolean | null | undefined;
|
|
19
|
+
}
|
|
20
|
+
export interface JobsResource {
|
|
21
|
+
jobs: Job[];
|
|
22
|
+
loading: boolean;
|
|
23
|
+
error: unknown;
|
|
24
|
+
reload: () => Promise<void>;
|
|
25
|
+
}
|
|
26
|
+
export interface JobResource {
|
|
27
|
+
job: Job | null;
|
|
28
|
+
loading: boolean;
|
|
29
|
+
error: unknown;
|
|
30
|
+
reload: () => Promise<Job | null>;
|
|
31
|
+
}
|
|
32
|
+
export declare function useJobs(filters?: JobFilters): JobsResource;
|
|
33
|
+
export declare function useJob(jobId: string | null | undefined): JobResource;
|
|
34
|
+
export interface JobNotificationsOptions {
|
|
35
|
+
limit?: number;
|
|
36
|
+
}
|
|
37
|
+
export declare function useJobNotifications({ limit }?: JobNotificationsOptions): {
|
|
38
|
+
notifications: Job[];
|
|
39
|
+
loading: boolean;
|
|
40
|
+
error: unknown;
|
|
41
|
+
dismiss: (jobId: string) => void;
|
|
42
|
+
reload: () => Promise<void>;
|
|
43
|
+
};
|
|
44
|
+
export interface JobNotificationBannerProps {
|
|
45
|
+
job: Job;
|
|
46
|
+
onDismiss?: (jobId: string) => void;
|
|
47
|
+
}
|
|
48
|
+
export declare function JobNotificationBanner({ job, onDismiss }: JobNotificationBannerProps): import("react").JSX.Element;
|
|
49
|
+
export interface JobNotificationListProps {
|
|
50
|
+
notifications: readonly Job[];
|
|
51
|
+
onDismiss?: (jobId: string) => void;
|
|
52
|
+
}
|
|
53
|
+
export declare function JobNotificationList({ notifications, onDismiss }: JobNotificationListProps): import("react").JSX.Element;
|
|
54
|
+
export interface JobListProps {
|
|
55
|
+
filters?: JobFilters;
|
|
56
|
+
}
|
|
57
|
+
export declare function JobList({ filters }: JobListProps): import("react").JSX.Element;
|
|
58
|
+
export interface JobDetailProps {
|
|
59
|
+
jobId: string;
|
|
60
|
+
}
|
|
61
|
+
export declare function JobDetail({ jobId }: JobDetailProps): import("react").JSX.Element;
|
|
62
|
+
//# sourceMappingURL=jobs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jobs.d.ts","sourceRoot":"","sources":["../../../src/ui/react/jobs.tsx"],"names":[],"mappings":"AACA,OAAO,EAAqB,KAAK,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAKxE,MAAM,WAAW,GAAG;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AACD,MAAM,WAAW,QAAQ;IAAG,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE;AAC1E,MAAM,WAAW,UAAU;IAAG,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAA;CAAE;AAC3F,MAAM,WAAW,YAAY;IAAG,IAAI,EAAE,GAAG,EAAE,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAAE;AAC5G,MAAM,WAAW,WAAW;IAAG,GAAG,EAAE,GAAG,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,CAAA;CAAE;AAQrH,wBAAgB,OAAO,CAAC,OAAO,GAAE,UAAe,GAAG,YAAY,CAoB9D;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,WAAW,CAiBpE;AAED,MAAM,WAAW,uBAAuB;IAAG,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE;AAC3D,wBAAgB,mBAAmB,CAAC,EAAE,KAAU,EAAE,GAAE,uBAA4B;;;;qBAI1C,MAAM;kBAvDiD,OAAO,CAAC,IAAI,CAAC;EAyDzG;AAED,MAAM,WAAW,0BAA0B;IAAG,GAAG,EAAE,GAAG,CAAC;IAAC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CAAE;AAC7F,wBAAgB,qBAAqB,CAAC,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,0BAA0B,+BAKnF;AAED,MAAM,WAAW,wBAAwB;IAAG,aAAa,EAAE,SAAS,GAAG,EAAE,CAAC;IAAC,SAAS,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;CAAE;AAChH,wBAAgB,mBAAmB,CAAC,EAAE,aAAa,EAAE,SAAS,EAAE,EAAE,wBAAwB,+BAAuH;AAEjN,MAAM,WAAW,YAAY;IAAG,OAAO,CAAC,EAAE,UAAU,CAAA;CAAE;AACtD,wBAAgB,OAAO,CAAC,EAAE,OAAY,EAAE,EAAE,YAAY,+BAGrD;AAED,MAAM,WAAW,cAAc;IAAG,KAAK,EAAE,MAAM,CAAA;CAAE;AACjD,wBAAgB,SAAS,CAAC,EAAE,KAAK,EAAE,EAAE,cAAc,+BAYlD"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useEffect, useMemo, useState } from "react";
|
|
3
|
+
import { apiFetch, apiJson } from "../../api/client.js";
|
|
4
|
+
import { isJsonValue } from "../../input.js";
|
|
5
|
+
import { ResourceState, StatusBadge } from "./foundation.js";
|
|
6
|
+
import { useLiveEvent, useLiveEvents } from "./live-events.js";
|
|
7
|
+
function jobQuery(filters) {
|
|
8
|
+
const query = new URLSearchParams();
|
|
9
|
+
for (const [key, value] of Object.entries(filters))
|
|
10
|
+
if (value !== undefined && value !== null && value !== "")
|
|
11
|
+
query.set(key, String(value));
|
|
12
|
+
return query.toString() ? `/api/jobs?${query}` : "/api/jobs";
|
|
13
|
+
}
|
|
14
|
+
export function useJobs(filters = {}) {
|
|
15
|
+
const key = useMemo(() => JSON.stringify(filters), [filters]);
|
|
16
|
+
const path = useMemo(() => jobQuery(parseJobFilters(key)), [key]);
|
|
17
|
+
const [jobs, setJobs] = useState([]);
|
|
18
|
+
const [loading, setLoading] = useState(true);
|
|
19
|
+
const [error, setError] = useState(null);
|
|
20
|
+
const { connection } = useLiveEvents();
|
|
21
|
+
const reload = useCallback(async () => {
|
|
22
|
+
setLoading(true);
|
|
23
|
+
try {
|
|
24
|
+
const result = await apiFetch(path, { validateJson: isJobsResponse });
|
|
25
|
+
setJobs(result instanceof Response ? [] : result.jobs);
|
|
26
|
+
setError(null);
|
|
27
|
+
}
|
|
28
|
+
catch (cause) {
|
|
29
|
+
setError(cause);
|
|
30
|
+
}
|
|
31
|
+
finally {
|
|
32
|
+
setLoading(false);
|
|
33
|
+
}
|
|
34
|
+
}, [path]);
|
|
35
|
+
useEffect(() => { void reload(); }, [reload]);
|
|
36
|
+
useEffect(() => { if (connection === "open")
|
|
37
|
+
void reload(); }, [connection, reload]);
|
|
38
|
+
useLiveEvent((event) => event.what.startsWith("job."), () => { void reload(); });
|
|
39
|
+
return { jobs, loading, error, reload };
|
|
40
|
+
}
|
|
41
|
+
export function useJob(jobId) {
|
|
42
|
+
const [job, setJob] = useState(null);
|
|
43
|
+
const [loading, setLoading] = useState(Boolean(jobId));
|
|
44
|
+
const [error, setError] = useState(null);
|
|
45
|
+
const reload = useCallback(async () => {
|
|
46
|
+
if (!jobId)
|
|
47
|
+
return null;
|
|
48
|
+
setLoading(true);
|
|
49
|
+
try {
|
|
50
|
+
const result = await apiFetch(`/api/jobs/${encodeURIComponent(jobId)}`, { validateJson: isJobResponse });
|
|
51
|
+
const next = result instanceof Response ? null : result.job;
|
|
52
|
+
setJob(next);
|
|
53
|
+
setError(null);
|
|
54
|
+
return next;
|
|
55
|
+
}
|
|
56
|
+
catch (cause) {
|
|
57
|
+
setError(cause);
|
|
58
|
+
throw cause;
|
|
59
|
+
}
|
|
60
|
+
finally {
|
|
61
|
+
setLoading(false);
|
|
62
|
+
}
|
|
63
|
+
}, [jobId]);
|
|
64
|
+
useEffect(() => { void reload().catch(() => undefined); }, [reload]);
|
|
65
|
+
useLiveEvent((event) => event.details.jobId === jobId, () => { void reload().catch(() => undefined); });
|
|
66
|
+
return { job, loading, error, reload };
|
|
67
|
+
}
|
|
68
|
+
export function useJobNotifications({ limit = 20 } = {}) {
|
|
69
|
+
const { jobs, loading, error, reload } = useJobs({ limit });
|
|
70
|
+
const [dismissed, setDismissed] = useState(() => new Set());
|
|
71
|
+
const notifications = jobs.filter((job) => ["succeeded", "failed", "cancelled"].includes(job.status) && !dismissed.has(job.id));
|
|
72
|
+
const dismiss = useCallback((jobId) => setDismissed((current) => new Set([...current, jobId])), []);
|
|
73
|
+
return { notifications, loading, error, dismiss, reload };
|
|
74
|
+
}
|
|
75
|
+
export function JobNotificationBanner({ job, onDismiss }) {
|
|
76
|
+
const failed = job.status === "failed";
|
|
77
|
+
const cancelled = job.status === "cancelled";
|
|
78
|
+
const message = failed ? `${job.type} failed.` : cancelled ? `${job.type} was cancelled.` : `${job.type} finished.`;
|
|
79
|
+
return _jsxs("aside", { className: `cf-ui-job-banner cf-ui-job-${job.status}`, role: "status", "aria-live": "polite", children: [_jsx("span", { children: message }), _jsx("button", { type: "button", onClick: () => onDismiss?.(job.id), "aria-label": "Dismiss notification", children: "Dismiss" })] });
|
|
80
|
+
}
|
|
81
|
+
export function JobNotificationList({ notifications, onDismiss }) { return _jsx(_Fragment, { children: notifications.map((job) => _jsx(JobNotificationBanner, { job: job, onDismiss: onDismiss }, job.id)) }); }
|
|
82
|
+
export function JobList({ filters = {} }) {
|
|
83
|
+
const resource = useJobs(filters);
|
|
84
|
+
return _jsxs("section", { className: "cf-ui-card", children: [_jsx("h1", { children: "Jobs" }), _jsx(ResourceState, { ...resource, empty: "No jobs found.", children: resource.jobs.length ? _jsx("div", { className: "cf-ui-table-wrap", children: _jsxs("table", { children: [_jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { children: "Job" }), _jsx("th", { children: "Status" }), _jsx("th", { children: "Updated" })] }) }), _jsx("tbody", { children: resource.jobs.map((job) => _jsxs("tr", { children: [_jsxs("th", { scope: "row", children: [_jsx("a", { href: `/admin/jobs/${encodeURIComponent(job.id)}`, children: job.type }), _jsx("small", { children: job.id })] }), _jsx("td", { children: _jsx(StatusBadge, { state: job.status }) }), _jsx("td", { children: job.updatedAt || job.createdAt || "—" })] }, job.id)) })] }) }) : null })] });
|
|
85
|
+
}
|
|
86
|
+
export function JobDetail({ jobId }) {
|
|
87
|
+
const resource = useJob(jobId);
|
|
88
|
+
const [events, setEvents] = useState([]);
|
|
89
|
+
const reloadEvents = useCallback(async () => {
|
|
90
|
+
if (!jobId)
|
|
91
|
+
return;
|
|
92
|
+
const result = await apiFetch(`/api/jobs/${encodeURIComponent(jobId)}/events`, { validateJson: isJobEventsResponse });
|
|
93
|
+
setEvents(result instanceof Response ? [] : result.events);
|
|
94
|
+
}, [jobId]);
|
|
95
|
+
useEffect(() => { void reloadEvents().catch(() => undefined); }, [reloadEvents, resource.job?.updatedAt]);
|
|
96
|
+
const cancel = async () => { await apiJson(`/api/jobs/${encodeURIComponent(jobId)}/cancel`, {}, { method: "POST" }); await resource.reload(); };
|
|
97
|
+
const job = resource.job;
|
|
98
|
+
return _jsx("section", { className: "cf-ui-card", children: _jsx(ResourceState, { ...resource, empty: "Job not found.", children: job ? _jsxs(_Fragment, { children: [_jsxs("header", { children: [_jsx("h1", { children: job.type }), _jsx(StatusBadge, { state: job.status }), _jsx("small", { children: job.id })] }), ["queued", "running"].includes(job.status) ? _jsx("button", { type: "button", onClick: cancel, children: "Cancel job" }) : null, _jsx("h2", { children: "Progress" }), _jsx("pre", { children: JSON.stringify(job.progress, null, 2) }), _jsx("h2", { children: "Result" }), _jsx("pre", { children: JSON.stringify(job.result, null, 2) }), job.error ? _jsxs(_Fragment, { children: [_jsx("h2", { children: "Error" }), _jsx("pre", { children: JSON.stringify(job.error, null, 2) })] }) : null, _jsx("h2", { children: "Events" }), events.length ? _jsx("ol", { children: events.map((event) => _jsxs("li", { children: [_jsx("strong", { children: event.type }), " ", _jsx("small", { children: event.createdAt })] }, event.id)) }) : _jsx("p", { children: "No events." })] }) : null }) });
|
|
99
|
+
}
|
|
100
|
+
function isJobsResponse(value) { if (!isObject(value))
|
|
101
|
+
return false; const jobs = Reflect.get(value, "jobs"); return Array.isArray(jobs) && jobs.every(isJob); }
|
|
102
|
+
function isJobResponse(value) { return isObject(value) && isJob(Reflect.get(value, "job")); }
|
|
103
|
+
function isJobEventsResponse(value) { if (!isObject(value))
|
|
104
|
+
return false; const events = Reflect.get(value, "events"); return Array.isArray(events) && events.every(isJobEvent); }
|
|
105
|
+
function isJob(value) { return isObject(value) && typeof Reflect.get(value, "id") === "string" && typeof Reflect.get(value, "type") === "string" && typeof Reflect.get(value, "status") === "string" && optionalString(value, "createdAt") && optionalString(value, "updatedAt") && optionalJson(value, "progress") && optionalJson(value, "result") && optionalJson(value, "error"); }
|
|
106
|
+
function isJobEvent(value) { return isObject(value) && typeof Reflect.get(value, "id") === "string" && typeof Reflect.get(value, "type") === "string" && optionalString(value, "createdAt"); }
|
|
107
|
+
function isObject(value) { return value !== null && typeof value === "object" && !Array.isArray(value); }
|
|
108
|
+
function optionalString(value, key) { const field = Reflect.get(value, key); return field === undefined || typeof field === "string"; }
|
|
109
|
+
function optionalJson(value, key) { const field = Reflect.get(value, key); return field === undefined || isJsonValue(field); }
|
|
110
|
+
function parseJobFilters(value) { const parsed = JSON.parse(value); if (!isObject(parsed))
|
|
111
|
+
return {}; const result = {}; for (const [key, item] of Object.entries(parsed))
|
|
112
|
+
if (item === null || ["string", "number", "boolean"].includes(typeof item))
|
|
113
|
+
result[key] = item === null || typeof item === "string" || typeof item === "number" || typeof item === "boolean" ? item : undefined; return result; }
|
|
114
|
+
//# sourceMappingURL=jobs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jobs.js","sourceRoot":"","sources":["../../../src/ui/react/jobs.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAClE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAkB,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAiB/D,SAAS,QAAQ,CAAC,OAAmB;IACnC,MAAM,KAAK,GAAG,IAAI,eAAe,EAAE,CAAC;IACpC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,EAAE;YAAE,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7I,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,aAAa,KAAK,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,OAAO,GAAe,EAAE;IAC9C,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9D,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAClE,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAQ,EAAE,CAAC,CAAC;IAC5C,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAU,IAAI,CAAC,CAAC;IAClD,MAAM,EAAE,UAAU,EAAE,GAAG,aAAa,EAAE,CAAC;IACvC,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,IAAmB,EAAE;QACnD,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,EAAE,YAAY,EAAE,cAAc,EAAE,CAAC,CAAC;YACtE,OAAO,CAAC,MAAM,YAAY,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACvD,QAAQ,CAAC,IAAI,CAAC,CAAC;QACjB,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAAC,CAAC;gBACrC,CAAC;YAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAAC,CAAC;IAChC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IACX,SAAS,CAAC,GAAG,EAAE,GAAG,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAC9C,SAAS,CAAC,GAAG,EAAE,GAAG,IAAI,UAAU,KAAK,MAAM;QAAE,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;IACrF,YAAY,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,GAAG,KAAK,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACjF,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,KAAgC;IACrD,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,QAAQ,CAAa,IAAI,CAAC,CAAC;IACjD,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IACvD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAU,IAAI,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,IAAyB,EAAE;QACzD,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QACxB,UAAU,CAAC,IAAI,CAAC,CAAC;QACjB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,aAAa,kBAAkB,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,YAAY,EAAE,aAAa,EAAE,CAAC,CAAC;YACzG,MAAM,IAAI,GAAG,MAAM,YAAY,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;YAC5D,MAAM,CAAC,IAAI,CAAC,CAAC;YAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAAC,OAAO,IAAI,CAAC;QAC5C,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YAAC,MAAM,KAAK,CAAC;QAAC,CAAC;gBAClD,CAAC;YAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAAC,CAAC;IAChC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IACZ,SAAS,CAAC,GAAG,EAAE,GAAG,KAAK,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IACrE,YAAY,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,KAAK,KAAK,EAAE,GAAG,EAAE,GAAG,KAAK,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxG,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AACzC,CAAC;AAGD,MAAM,UAAU,mBAAmB,CAAC,EAAE,KAAK,GAAG,EAAE,EAAE,GAA4B,EAAE;IAC9E,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5D,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAc,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC;IACzE,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAChI,MAAM,OAAO,GAAG,WAAW,CAAC,CAAC,KAAa,EAAE,EAAE,CAAC,YAAY,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC5G,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AAC5D,CAAC;AAGD,MAAM,UAAU,qBAAqB,CAAC,EAAE,GAAG,EAAE,SAAS,EAA8B;IAClF,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC;IACvC,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,KAAK,WAAW,CAAC;IAC7C,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,iBAAiB,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,IAAI,YAAY,CAAC;IACpH,OAAO,iBAAO,SAAS,EAAE,8BAA8B,GAAG,CAAC,MAAM,EAAE,EAAE,IAAI,EAAC,QAAQ,eAAW,QAAQ,aAAC,yBAAO,OAAO,GAAQ,EAAA,iBAAQ,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,gBAAa,sBAAsB,wBAAiB,IAAQ,CAAC;AACnP,CAAC;AAGD,MAAM,UAAU,mBAAmB,CAAC,EAAE,aAAa,EAAE,SAAS,EAA4B,IAAI,OAAO,4BAAG,aAAa,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAC,qBAAqB,IAAc,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,SAAS,IAAtC,GAAG,CAAC,EAAE,CAAoC,CAAC,GAAI,CAAC,CAAC,CAAC;AAGjN,MAAM,UAAU,OAAO,CAAC,EAAE,OAAO,GAAG,EAAE,EAAgB;IACpD,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAClC,OAAO,mBAAS,SAAS,EAAC,YAAY,aAAC,gCAAa,EAAA,KAAC,aAAa,OAAK,QAAQ,EAAE,KAAK,EAAC,gBAAgB,YAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,cAAK,SAAS,EAAC,kBAAkB,YAAC,4BAAO,0BAAO,yBAAI,+BAAY,EAAA,kCAAe,EAAA,mCAAgB,IAAK,GAAQ,EAAA,0BAAQ,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,yBAAiB,cAAI,KAAK,EAAC,KAAK,aAAC,YAAG,IAAI,EAAE,eAAe,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,YAAG,GAAG,CAAC,IAAI,GAAK,EAAA,0BAAQ,GAAG,CAAC,EAAE,GAAS,IAAK,EAAA,uBAAI,KAAC,WAAW,IAAC,KAAK,EAAE,GAAG,CAAC,MAAM,GAAI,GAAK,EAAA,uBAAK,GAAG,CAAC,SAAS,IAAI,GAAG,CAAC,SAAS,IAAI,GAAG,GAAM,KAAnN,GAAG,CAAC,EAAE,CAAkN,CAAC,GAAS,IAAQ,GAAM,CAAC,CAAC,CAAC,IAAI,GAAiB,IAAU,CAAC;AAC7iB,CAAC;AAGD,MAAM,UAAU,SAAS,CAAC,EAAE,KAAK,EAAkB;IACjD,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IAC/B,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAa,EAAE,CAAC,CAAC;IACrD,MAAM,YAAY,GAAG,WAAW,CAAC,KAAK,IAAmB,EAAE;QACzD,IAAI,CAAC,KAAK;YAAE,OAAO;QACnB,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,aAAa,kBAAkB,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,YAAY,EAAE,mBAAmB,EAAE,CAAC,CAAC;QACtH,SAAS,CAAC,MAAM,YAAY,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC7D,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IACZ,SAAS,CAAC,GAAG,EAAE,GAAG,KAAK,YAAY,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,YAAY,EAAE,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC;IAC1G,MAAM,MAAM,GAAG,KAAK,IAAmB,EAAE,GAAG,MAAM,OAAO,CAAC,aAAa,kBAAkB,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/J,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC;IACzB,OAAO,kBAAS,SAAS,EAAC,YAAY,YAAC,KAAC,aAAa,OAAK,QAAQ,EAAE,KAAK,EAAC,gBAAgB,YAAE,GAAG,CAAC,CAAC,CAAC,8BAAE,6BAAQ,uBAAK,GAAG,CAAC,IAAI,GAAM,EAAA,KAAC,WAAW,IAAC,KAAK,EAAE,GAAG,CAAC,MAAM,GAAI,EAAA,0BAAQ,GAAG,CAAC,EAAE,GAAS,IAAS,EAAC,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,iBAAQ,IAAI,EAAC,QAAQ,EAAC,OAAO,EAAE,MAAM,2BAAqB,CAAC,CAAC,CAAC,IAAI,EAAC,oCAAiB,EAAA,wBAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAO,EAAA,kCAAe,EAAA,wBAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAO,EAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,8BAAE,iCAAc,EAAA,wBAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,GAAO,IAAG,CAAC,CAAC,CAAC,IAAI,EAAC,kCAAe,EAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,uBAAK,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,yBAAmB,2BAAS,KAAK,CAAC,IAAI,GAAU,OAAC,0BAAQ,KAAK,CAAC,SAAS,GAAS,KAAxE,KAAK,CAAC,EAAE,CAAqE,CAAC,GAAM,CAAC,CAAC,CAAC,qCAAiB,IAAI,CAAC,CAAC,CAAC,IAAI,GAAiB,GAAU,CAAC;AAC/tB,CAAC;AAKD,SAAS,cAAc,CAAC,KAAc,IAA2B,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;IAAE,OAAO,KAAK,CAAC,CAAC,MAAM,IAAI,GAAY,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACzM,SAAS,aAAa,CAAC,KAAc,IAA0B,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5H,SAAS,mBAAmB,CAAC,KAAc,IAAgC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;IAAE,OAAO,KAAK,CAAC,CAAC,MAAM,MAAM,GAAY,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;AAChO,SAAS,KAAK,CAAC,KAAc,IAAkB,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,QAAQ,IAAI,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,QAAQ,IAAI,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,QAAQ,IAAI,cAAc,CAAC,KAAK,EAAE,WAAW,CAAC,IAAI,cAAc,CAAC,KAAK,EAAE,WAAW,CAAC,IAAI,YAAY,CAAC,KAAK,EAAE,UAAU,CAAC,IAAI,YAAY,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,YAAY,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AAC9Y,SAAS,UAAU,CAAC,KAAc,IAAuB,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,QAAQ,IAAI,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,QAAQ,IAAI,cAAc,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;AAC1N,SAAS,QAAQ,CAAC,KAAc,IAAqB,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnI,SAAS,cAAc,CAAC,KAAa,EAAE,GAAW,IAAa,MAAM,KAAK,GAAY,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC;AACzK,SAAS,YAAY,CAAC,KAAa,EAAE,GAAW,IAAa,MAAM,KAAK,GAAY,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,OAAO,KAAK,KAAK,SAAS,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAChK,SAAS,eAAe,CAAC,KAAa,IAAgB,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;IAAE,OAAO,EAAE,CAAC,CAAC,MAAM,MAAM,GAAe,EAAE,CAAC,CAAC,KAAK,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;IAAE,IAAI,IAAI,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,QAAQ,CAAC,OAAO,IAAI,CAAC;QAAE,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,MAAM,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
import type { AppEvent } from "../../core/events/index.js";
|
|
3
|
+
export type LiveEventConnection = "connecting" | "disabled" | "unsupported" | "open" | "error" | "reconnecting" | "closed" | "unavailable";
|
|
4
|
+
export type LiveEventListener = (event: AppEvent) => void;
|
|
5
|
+
export type LiveEventMatcher = (event: AppEvent) => boolean;
|
|
6
|
+
export interface LiveEventsContextValue {
|
|
7
|
+
connection: LiveEventConnection;
|
|
8
|
+
subscribe: (listener: LiveEventListener) => () => void;
|
|
9
|
+
}
|
|
10
|
+
export interface LiveEventsProviderProps {
|
|
11
|
+
children?: ReactNode;
|
|
12
|
+
url?: string;
|
|
13
|
+
enabled?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export declare function LiveEventsProvider({ children, url, enabled }: LiveEventsProviderProps): import("react").JSX.Element;
|
|
16
|
+
export declare function useLiveEvents(): LiveEventsContextValue;
|
|
17
|
+
export declare function useLiveEvent(matcher: LiveEventMatcher | null | undefined, callback: LiveEventListener): void;
|
|
18
|
+
//# sourceMappingURL=live-events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"live-events.d.ts","sourceRoot":"","sources":["../../../src/ui/react/live-events.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAgF,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AACrH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAG3D,MAAM,MAAM,mBAAmB,GAAG,YAAY,GAAG,UAAU,GAAG,aAAa,GAAG,MAAM,GAAG,OAAO,GAAG,cAAc,GAAG,QAAQ,GAAG,aAAa,CAAC;AAC3I,MAAM,MAAM,iBAAiB,GAAG,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;AAC1D,MAAM,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,QAAQ,KAAK,OAAO,CAAC;AAC5D,MAAM,WAAW,sBAAsB;IAAG,UAAU,EAAE,mBAAmB,CAAC;IAAC,SAAS,EAAE,CAAC,QAAQ,EAAE,iBAAiB,KAAK,MAAM,IAAI,CAAA;CAAE;AACnI,MAAM,WAAW,uBAAuB;IAAG,QAAQ,CAAC,EAAE,SAAS,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE;AAKlG,wBAAgB,kBAAkB,CAAC,EAAE,QAAQ,EAAE,GAAmB,EAAE,OAAc,EAAE,EAAE,uBAAuB,+BAwC5G;AAED,wBAAgB,aAAa,IAAI,sBAAsB,CAAgE;AAEvH,wBAAgB,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,GAAG,SAAS,EAAE,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAO5G"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState } from "react";
|
|
3
|
+
import { isJsonValue } from "../../input.js";
|
|
4
|
+
const unavailableContext = { connection: "unavailable", subscribe: () => () => undefined };
|
|
5
|
+
const LiveEventsContext = createContext(null);
|
|
6
|
+
export function LiveEventsProvider({ children, url = "/api/events", enabled = true }) {
|
|
7
|
+
const listeners = useRef(new Set());
|
|
8
|
+
const [connection, setConnection] = useState(enabled ? "connecting" : "disabled");
|
|
9
|
+
const subscribe = useCallback((listener) => {
|
|
10
|
+
listeners.current.add(listener);
|
|
11
|
+
return () => { listeners.current.delete(listener); };
|
|
12
|
+
}, []);
|
|
13
|
+
useEffect(() => {
|
|
14
|
+
if (!enabled || typeof WebSocket === "undefined") {
|
|
15
|
+
setConnection(enabled ? "unsupported" : "disabled");
|
|
16
|
+
return undefined;
|
|
17
|
+
}
|
|
18
|
+
let socket;
|
|
19
|
+
let timer;
|
|
20
|
+
let stopped = false;
|
|
21
|
+
let attempts = 0;
|
|
22
|
+
const connect = () => {
|
|
23
|
+
if (stopped)
|
|
24
|
+
return;
|
|
25
|
+
const target = new URL(url, window.location.href);
|
|
26
|
+
target.protocol = target.protocol === "https:" ? "wss:" : "ws:";
|
|
27
|
+
socket = new WebSocket(target);
|
|
28
|
+
socket.onopen = () => { attempts = 0; setConnection("open"); };
|
|
29
|
+
socket.onmessage = ({ data }) => {
|
|
30
|
+
if (typeof data !== "string")
|
|
31
|
+
return;
|
|
32
|
+
try {
|
|
33
|
+
const payload = JSON.parse(data);
|
|
34
|
+
const event = readTransportEvent(payload);
|
|
35
|
+
if (event)
|
|
36
|
+
for (const listener of listeners.current)
|
|
37
|
+
listener(event);
|
|
38
|
+
}
|
|
39
|
+
catch { /* Ignore malformed transport messages. */ }
|
|
40
|
+
};
|
|
41
|
+
socket.onerror = () => setConnection("error");
|
|
42
|
+
socket.onclose = () => {
|
|
43
|
+
if (stopped)
|
|
44
|
+
return;
|
|
45
|
+
setConnection("reconnecting");
|
|
46
|
+
const delay = Math.min(30000, 500 * (2 ** attempts++));
|
|
47
|
+
timer = setTimeout(connect, delay);
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
connect();
|
|
51
|
+
return () => { stopped = true; if (timer !== undefined)
|
|
52
|
+
clearTimeout(timer); socket?.close(); setConnection("closed"); };
|
|
53
|
+
}, [enabled, url]);
|
|
54
|
+
const value = useMemo(() => ({ connection, subscribe }), [connection, subscribe]);
|
|
55
|
+
return _jsx(LiveEventsContext.Provider, { value: value, children: children });
|
|
56
|
+
}
|
|
57
|
+
export function useLiveEvents() { return useContext(LiveEventsContext) || unavailableContext; }
|
|
58
|
+
export function useLiveEvent(matcher, callback) {
|
|
59
|
+
const { subscribe } = useLiveEvents();
|
|
60
|
+
const matcherRef = useRef(matcher);
|
|
61
|
+
const callbackRef = useRef(callback);
|
|
62
|
+
matcherRef.current = matcher;
|
|
63
|
+
callbackRef.current = callback;
|
|
64
|
+
useEffect(() => subscribe((event) => { if (!matcherRef.current || matcherRef.current(event))
|
|
65
|
+
callbackRef.current(event); }), [subscribe]);
|
|
66
|
+
}
|
|
67
|
+
function readTransportEvent(value) {
|
|
68
|
+
if (value === null || typeof value !== "object" || Array.isArray(value))
|
|
69
|
+
return null;
|
|
70
|
+
const nested = Reflect.get(value, "event");
|
|
71
|
+
const candidate = nested ?? value;
|
|
72
|
+
if (candidate === null || typeof candidate !== "object" || Array.isArray(candidate))
|
|
73
|
+
return null;
|
|
74
|
+
const id = Reflect.get(candidate, "id");
|
|
75
|
+
const details = Reflect.get(candidate, "details");
|
|
76
|
+
if (typeof id !== "string" || typeof Reflect.get(candidate, "what") !== "string" || details === null || typeof details !== "object" || Array.isArray(details))
|
|
77
|
+
return null;
|
|
78
|
+
return {
|
|
79
|
+
id,
|
|
80
|
+
what: String(Reflect.get(candidate, "what")),
|
|
81
|
+
who: String(Reflect.get(candidate, "who") || "system"),
|
|
82
|
+
where: String(Reflect.get(candidate, "where") || "application"),
|
|
83
|
+
when: String(Reflect.get(candidate, "when") || ""),
|
|
84
|
+
details: jsonObject(details),
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
function jsonObject(value) {
|
|
88
|
+
const result = {};
|
|
89
|
+
for (const [key, item] of Object.entries(value))
|
|
90
|
+
if (isJsonValue(item))
|
|
91
|
+
result[key] = item;
|
|
92
|
+
return result;
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=live-events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"live-events.js","sourceRoot":"","sources":["../../../src/ui/react/live-events.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import type { ComponentType, ReactNode } from "react";
|
|
2
|
+
import type { JsonObject, JsonValue } from "../../api/client.js";
|
|
3
|
+
export interface UiRecord {
|
|
4
|
+
id?: string;
|
|
5
|
+
name?: string;
|
|
6
|
+
type?: string;
|
|
7
|
+
status?: string;
|
|
8
|
+
state?: string;
|
|
9
|
+
feature?: string;
|
|
10
|
+
component?: string;
|
|
11
|
+
who?: string;
|
|
12
|
+
operation?: string;
|
|
13
|
+
resource?: string;
|
|
14
|
+
display_name?: string;
|
|
15
|
+
email?: string;
|
|
16
|
+
provider?: string;
|
|
17
|
+
is_admin?: boolean | number;
|
|
18
|
+
description?: string;
|
|
19
|
+
label?: string;
|
|
20
|
+
system?: boolean | number;
|
|
21
|
+
package_name?: string;
|
|
22
|
+
version?: string;
|
|
23
|
+
health?: string;
|
|
24
|
+
healthcheck_mode?: string;
|
|
25
|
+
allow_self_healing?: boolean | number;
|
|
26
|
+
active?: boolean | number;
|
|
27
|
+
user_count?: number;
|
|
28
|
+
created_at?: string;
|
|
29
|
+
updated_at?: string;
|
|
30
|
+
createdAt?: string;
|
|
31
|
+
updatedAt?: string;
|
|
32
|
+
group_name?: string;
|
|
33
|
+
scope_name?: string;
|
|
34
|
+
entitlement?: string;
|
|
35
|
+
value?: JsonValue;
|
|
36
|
+
progress?: JsonValue;
|
|
37
|
+
result?: JsonValue;
|
|
38
|
+
error?: JsonValue;
|
|
39
|
+
scopes?: readonly (string | UiRecord)[];
|
|
40
|
+
tenants?: readonly UiRecord[];
|
|
41
|
+
groups?: readonly UiRecord[];
|
|
42
|
+
users?: readonly UiRecord[];
|
|
43
|
+
healthchecks?: readonly UiRecord[];
|
|
44
|
+
circuit_breakers?: readonly UiRecord[];
|
|
45
|
+
entitlements?: readonly UiRecord[];
|
|
46
|
+
circuit_breaker?: UiRecord | null;
|
|
47
|
+
details?: JsonValue;
|
|
48
|
+
metadata?: JsonValue;
|
|
49
|
+
reason?: string;
|
|
50
|
+
automated?: boolean | number;
|
|
51
|
+
registeredFeatures?: readonly UiRecord[];
|
|
52
|
+
domains?: readonly string[];
|
|
53
|
+
ui?: boolean;
|
|
54
|
+
api?: boolean;
|
|
55
|
+
admin?: boolean;
|
|
56
|
+
}
|
|
57
|
+
export interface AdminLinkItem {
|
|
58
|
+
key: string;
|
|
59
|
+
label: string;
|
|
60
|
+
href: string;
|
|
61
|
+
}
|
|
62
|
+
export interface AdminSelection {
|
|
63
|
+
key: string;
|
|
64
|
+
id: string | null;
|
|
65
|
+
}
|
|
66
|
+
export interface ApplicationAdminSection {
|
|
67
|
+
key: string;
|
|
68
|
+
label: string;
|
|
69
|
+
href?: string;
|
|
70
|
+
render?: (selection: AdminSelection) => ReactNode;
|
|
71
|
+
component?: ComponentType<{
|
|
72
|
+
selection: AdminSelection;
|
|
73
|
+
}>;
|
|
74
|
+
}
|
|
75
|
+
export declare function recordValue(value: JsonValue | undefined): UiRecord | null;
|
|
76
|
+
export declare function recordField(value: JsonObject | null, key: string): UiRecord | null;
|
|
77
|
+
export declare function recordArray(value: JsonValue | undefined): UiRecord[];
|
|
78
|
+
export declare function recordArrayField(value: JsonObject | null, key: string): UiRecord[];
|
|
79
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/ui/react/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { isJsonValue } from "../../input.js";
|
|
2
|
+
export function recordValue(value) { return isUiRecord(value) ? value : null; }
|
|
3
|
+
export function recordField(value, key) { return value ? recordValue(value[key]) : null; }
|
|
4
|
+
export function recordArray(value) { return Array.isArray(value) && value.every(isUiRecord) ? [...value] : []; }
|
|
5
|
+
export function recordArrayField(value, key) { return recordArray(value?.[key]); }
|
|
6
|
+
function isUiRecord(value) {
|
|
7
|
+
if (value === null || typeof value !== "object" || Array.isArray(value))
|
|
8
|
+
return false;
|
|
9
|
+
const stringFields = ["id", "name", "type", "status", "state", "feature", "component", "who", "operation", "resource", "display_name", "email", "provider", "description", "label", "package_name", "version", "health", "healthcheck_mode", "created_at", "updated_at", "createdAt", "updatedAt", "group_name", "scope_name", "entitlement", "reason"];
|
|
10
|
+
const scalarFields = ["is_admin", "system", "allow_self_healing", "active", "automated"];
|
|
11
|
+
const recordArrays = ["tenants", "groups", "users", "healthchecks", "circuit_breakers", "entitlements"];
|
|
12
|
+
if (!stringFields.every((key) => optionalString(value, key)))
|
|
13
|
+
return false;
|
|
14
|
+
if (!scalarFields.every((key) => optionalBooleanNumber(value, key)))
|
|
15
|
+
return false;
|
|
16
|
+
const userCount = Reflect.get(value, "user_count");
|
|
17
|
+
if (userCount !== undefined && typeof userCount !== "number")
|
|
18
|
+
return false;
|
|
19
|
+
if (!recordArrays.every((key) => optionalRecordArray(value, key)))
|
|
20
|
+
return false;
|
|
21
|
+
const scopes = Reflect.get(value, "scopes");
|
|
22
|
+
if (scopes !== undefined && (!Array.isArray(scopes) || !scopes.every((scope) => typeof scope === "string" || isUiRecord(scope))))
|
|
23
|
+
return false;
|
|
24
|
+
const circuit = Reflect.get(value, "circuit_breaker");
|
|
25
|
+
if (circuit !== undefined && circuit !== null && !isUiRecord(circuit))
|
|
26
|
+
return false;
|
|
27
|
+
return ["value", "progress", "result", "error", "details", "metadata"].every((key) => { const field = Reflect.get(value, key); return field === undefined || isJsonValue(field); });
|
|
28
|
+
}
|
|
29
|
+
function optionalString(value, key) { const field = Reflect.get(value, key); return field === undefined || typeof field === "string"; }
|
|
30
|
+
function optionalBooleanNumber(value, key) { const field = Reflect.get(value, key); return field === undefined || typeof field === "boolean" || typeof field === "number"; }
|
|
31
|
+
function optionalRecordArray(value, key) { const field = Reflect.get(value, key); return key === "healthchecks" ? field === undefined || (Array.isArray(field) && field.every((item) => typeof item === "string" || isUiRecord(item))) : field === undefined || (Array.isArray(field) && field.every(isUiRecord)); }
|
|
32
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/ui/react/types.ts"],"names":[],"mappings":"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"}
|
package/dist/ui/ssr.d.ts
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/** @jsxImportSource hono/jsx */
|
|
2
|
+
import type { MiddlewareHandler } from "hono";
|
|
3
|
+
import type { Child } from "hono/jsx";
|
|
4
|
+
export interface SiteMeta {
|
|
5
|
+
name?: string;
|
|
6
|
+
property?: string;
|
|
7
|
+
content: string;
|
|
8
|
+
}
|
|
9
|
+
export interface SiteScript {
|
|
10
|
+
src: string;
|
|
11
|
+
type?: string;
|
|
12
|
+
async?: boolean;
|
|
13
|
+
defer?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface SsrDocumentOptions {
|
|
16
|
+
title?: string;
|
|
17
|
+
description?: string;
|
|
18
|
+
canonicalUrl?: string;
|
|
19
|
+
lang?: string;
|
|
20
|
+
bodyClass?: string;
|
|
21
|
+
bodyData?: Record<string, string>;
|
|
22
|
+
themeColor?: string;
|
|
23
|
+
siteName?: string;
|
|
24
|
+
openGraph?: {
|
|
25
|
+
title?: string;
|
|
26
|
+
description?: string;
|
|
27
|
+
type?: string;
|
|
28
|
+
url?: string;
|
|
29
|
+
image?: string;
|
|
30
|
+
};
|
|
31
|
+
meta?: readonly SiteMeta[];
|
|
32
|
+
stylesheets?: readonly string[];
|
|
33
|
+
scripts?: readonly SiteScript[];
|
|
34
|
+
}
|
|
35
|
+
export interface SiteDocumentProps extends SsrDocumentOptions {
|
|
36
|
+
children?: Child;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Render a complete, metadata-aware site document for Worker responses.
|
|
40
|
+
* Content sites provide their own children and stylesheets; the base owns the
|
|
41
|
+
* document contract and safe attribute rendering.
|
|
42
|
+
*/
|
|
43
|
+
export declare function SiteDocument({ children, ...options }: SiteDocumentProps): import("hono/jsx/jsx-dev-runtime").JSX.Element;
|
|
44
|
+
export declare function renderSiteDocument(document: SiteDocumentProps): string;
|
|
45
|
+
/**
|
|
46
|
+
* Create the standard Worker-side HTML shell. This is intentionally separate from
|
|
47
|
+
* the React UI exports: Hono JSX is excellent for edge-rendered documents, while
|
|
48
|
+
* React remains the right runtime for the interactive browser admin components.
|
|
49
|
+
*
|
|
50
|
+
* Usage:
|
|
51
|
+
* app.use("/admin/*", createSsrRenderer({ title: "Administration" }));
|
|
52
|
+
* app.get("/admin", (c) => c.render(<AdminLanding />));
|
|
53
|
+
*/
|
|
54
|
+
export declare function createSsrRenderer(options?: SsrDocumentOptions): MiddlewareHandler;
|
|
55
|
+
//# sourceMappingURL=ssr.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ssr.d.ts","sourceRoot":"","sources":["../../src/ui/ssr.tsx"],"names":[],"mappings":"AAAA,gCAAgC;AAIhC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,MAAM,CAAC;AAC9C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEtC,MAAM,WAAW,QAAQ;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE;QACV,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,IAAI,CAAC,EAAE,SAAS,QAAQ,EAAE,CAAC;IAC3B,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,OAAO,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,iBAAkB,SAAQ,kBAAkB;IAC3D,QAAQ,CAAC,EAAE,KAAK,CAAC;CAClB;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,EAAE,QAAQ,EAAE,GAAG,OAAO,EAAE,EAAE,iBAAiB,kDAyCvE;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,MAAM,CAEtE;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,GAAE,kBAAuB,GAC/B,iBAAiB,CAEnB"}
|
package/dist/ui/ssr.js
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "hono/jsx/jsx-runtime";
|
|
2
|
+
/** @jsxImportSource hono/jsx */
|
|
3
|
+
import { jsxRenderer } from "hono/jsx-renderer";
|
|
4
|
+
import { renderToString } from "hono/jsx/dom/server";
|
|
5
|
+
/**
|
|
6
|
+
* Render a complete, metadata-aware site document for Worker responses.
|
|
7
|
+
* Content sites provide their own children and stylesheets; the base owns the
|
|
8
|
+
* document contract and safe attribute rendering.
|
|
9
|
+
*/
|
|
10
|
+
export function SiteDocument({ children, ...options }) {
|
|
11
|
+
const { title = "Cloudflare Worker", description, canonicalUrl, lang = "en", bodyClass, bodyData = {}, themeColor, siteName, openGraph, meta = [], stylesheets = [], scripts = [], } = options;
|
|
12
|
+
const graph = openGraph || {};
|
|
13
|
+
return (_jsxs("html", { lang: lang, children: [_jsxs("head", { children: [_jsx("meta", { charSet: "utf-8" }), _jsx("meta", { name: "viewport", content: "width=device-width, initial-scale=1" }), _jsx("title", { children: title }), description ? _jsx("meta", { name: "description", content: description }) : null, canonicalUrl ? _jsx("link", { rel: "canonical", href: canonicalUrl }) : null, themeColor ? _jsx("meta", { name: "theme-color", content: themeColor }) : null, siteName ? _jsx("meta", { property: "og:site_name", content: siteName }) : null, graph.title || title ? _jsx("meta", { property: "og:title", content: graph.title || title }) : null, graph.description || description ? _jsx("meta", { property: "og:description", content: graph.description || description }) : null, graph.type ? _jsx("meta", { property: "og:type", content: graph.type }) : null, graph.url || canonicalUrl ? _jsx("meta", { property: "og:url", content: graph.url || canonicalUrl }) : null, graph.image ? _jsx("meta", { property: "og:image", content: graph.image }) : null, meta.map((item, index) => _jsx("meta", { ...item }, `${item.name || item.property}-${index}`)), stylesheets.map((href) => _jsx("link", { rel: "stylesheet", href: href }, href))] }), _jsxs("body", { class: bodyClass, ...Object.fromEntries(Object.entries(bodyData).map(([key, value]) => [`data-${key}`, value])), children: [children, scripts.map((script) => _jsx("script", { src: script.src, type: script.type, async: script.async, defer: script.defer }, script.src))] })] }));
|
|
14
|
+
}
|
|
15
|
+
export function renderSiteDocument(document) {
|
|
16
|
+
return renderToString(_jsx(SiteDocument, { ...document }));
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Create the standard Worker-side HTML shell. This is intentionally separate from
|
|
20
|
+
* the React UI exports: Hono JSX is excellent for edge-rendered documents, while
|
|
21
|
+
* React remains the right runtime for the interactive browser admin components.
|
|
22
|
+
*
|
|
23
|
+
* Usage:
|
|
24
|
+
* app.use("/admin/*", createSsrRenderer({ title: "Administration" }));
|
|
25
|
+
* app.get("/admin", (c) => c.render(<AdminLanding />));
|
|
26
|
+
*/
|
|
27
|
+
export function createSsrRenderer(options = {}) {
|
|
28
|
+
return jsxRenderer(({ children }) => _jsx(SiteDocument, { ...options, children: children }));
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=ssr.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ssr.js","sourceRoot":"","sources":["../../src/ui/ssr.tsx"],"names":[],"mappings":"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"}
|
|
@@ -17,6 +17,11 @@
|
|
|
17
17
|
.cf-ui-admin-title, .cf-ui-nav-label { margin: 0 0 .5rem; font-weight: 700; }
|
|
18
18
|
.cf-ui-nav-label { color: var(--cf-ui-muted); font-size: .72rem; letter-spacing: .08em; text-transform: uppercase; }
|
|
19
19
|
.cf-ui-admin-content { min-width: 0; padding: 2rem 1rem; }
|
|
20
|
+
.cf-ui-admin-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: .75rem; margin-top: 1rem; }
|
|
21
|
+
.cf-ui-admin-grid a { display: grid; gap: .2rem; padding: 1rem; border: 1px solid var(--cf-ui-border); border-radius: .6rem; color: inherit; text-decoration: none; }
|
|
22
|
+
.cf-ui-admin-grid a:hover { border-color: var(--cf-ui-primary); color: var(--cf-ui-primary); }
|
|
23
|
+
.cf-ui-admin-grid span { color: var(--cf-ui-muted); font-size: .9rem; }
|
|
24
|
+
.cf-ui-back { margin: 0 0 1rem; padding: .45rem .65rem; border: 1px solid var(--cf-ui-border); border-radius: .4rem; background: var(--cf-ui-bg); color: inherit; cursor: pointer; }
|
|
20
25
|
.cf-ui-card { padding: 1rem; border: 1px solid var(--cf-ui-border); border-radius: .65rem; background: var(--cf-ui-bg); }
|
|
21
26
|
.cf-ui-card + .cf-ui-card { margin-top: 1rem; }
|
|
22
27
|
.cf-ui-card-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 1rem; }
|
|
@@ -38,6 +43,22 @@
|
|
|
38
43
|
.cf-ui-card button { padding: .45rem .65rem; border: 1px solid var(--cf-ui-border); border-radius: .4rem; background: var(--cf-ui-bg); color: inherit; cursor: pointer; }
|
|
39
44
|
.cf-ui-card button:disabled { cursor: wait; opacity: .6; }
|
|
40
45
|
.cf-ui-check-list label { display: flex; align-items: center; gap: .35rem; }
|
|
46
|
+
.cf-ui-filter-bar { display: flex; flex-wrap: wrap; gap: .5rem; margin: 1rem 0; }
|
|
47
|
+
.cf-ui-filter-bar input, .cf-ui-filter-bar select, .cf-ui-filter-bar button, .cf-ui-breaker select { padding: .45rem .6rem; border: 1px solid var(--cf-ui-border); border-radius: .4rem; background: var(--cf-ui-bg); color: inherit; }
|
|
48
|
+
.cf-ui-list-row { display: flex; justify-content: space-between; gap: 1rem; padding: .75rem 0; border-bottom: 1px solid var(--cf-ui-border); }
|
|
49
|
+
.cf-ui-feature-row { display: grid; grid-template-columns: auto minmax(0, 1fr) auto auto auto; align-items: center; gap: 1rem; padding: .9rem 0; border-bottom: 1px solid var(--cf-ui-border); }
|
|
50
|
+
.cf-ui-feature-row h2, .cf-ui-breaker h2 { margin: 0; font-size: 1rem; }
|
|
51
|
+
.cf-ui-health-icon { font-size: 1.4rem; line-height: 1; }
|
|
52
|
+
.cf-ui-status-badge { display: inline-flex; align-items: center; gap: .25rem; }
|
|
53
|
+
.cf-ui-active-pill { display: inline-block; padding: .15rem .45rem; border-radius: 999px; font-size: .8rem; font-weight: 700; }
|
|
54
|
+
.cf-ui-active-pill.active { background: #dff3e7; color: #26734d; }
|
|
55
|
+
.cf-ui-active-pill.inactive { background: #eee; color: var(--cf-ui-muted); }
|
|
56
|
+
.cf-ui-scope-list { display: grid; gap: .35rem; padding: 0; list-style: none; }
|
|
57
|
+
.cf-ui-scope-list label { display: flex; gap: .4rem; align-items: center; }
|
|
58
|
+
.cf-ui-feature-heading { display: flex; align-items: center; gap: .75rem; }
|
|
59
|
+
.cf-ui-feature-heading h1 { margin-bottom: 0; }
|
|
60
|
+
.cf-ui-feature-heading p { margin-top: .2rem; }
|
|
61
|
+
code { white-space: pre-wrap; word-break: break-word; }
|
|
41
62
|
.cf-ui-job-banner { display: flex; align-items: center; justify-content: space-between; gap: 1rem; position: fixed; right: 1rem; bottom: 1rem; z-index: 10; max-width: min(32rem, calc(100vw - 2rem)); padding: .8rem 1rem; border: 1px solid var(--cf-ui-border); border-radius: .6rem; background: var(--cf-ui-bg); box-shadow: 0 .5rem 2rem #0002; }
|
|
42
63
|
.cf-ui-job-banner button { border: 0; background: transparent; color: inherit; cursor: pointer; text-decoration: underline; }
|
|
43
|
-
@media (max-width: 720px) { .cf-ui-admin-shell { grid-template-columns: 1fr; } .cf-ui-admin-nav { border-right: 0; border-bottom: 1px solid var(--cf-ui-border); } .cf-ui-breaker { grid-template-columns: 1fr; } }
|
|
64
|
+
@media (max-width: 720px) { .cf-ui-admin-shell { grid-template-columns: 1fr; } .cf-ui-admin-nav { border-right: 0; border-bottom: 1px solid var(--cf-ui-border); } .cf-ui-breaker { grid-template-columns: 1fr; } .cf-ui-feature-row { grid-template-columns: auto 1fr; } }
|