@spacefast/common 0.0.24 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/brand-assets/LICENSE-Haskoy.txt +93 -0
- package/brand-assets/haskoy-latin-variable.woff2 +0 -0
- package/brand-assets/spacefast-favicon.svg +4 -4
- package/brand-assets/spacefast-sf-full-bleed.svg +3 -3
- package/brand-assets/spacefast-wordmark.svg +2 -4
- package/dist/agents/connect-targets.d.ts +6 -146
- package/dist/agents/connect-targets.js +63 -295
- package/dist/agents/private-key-oauth.d.ts +31 -2
- package/dist/agents/private-key-oauth.js +166 -92
- package/dist/agents/registry/core.d.ts +292 -0
- package/dist/agents/registry/core.js +1388 -0
- package/dist/agents/registry/deeplink-probes.d.ts +23 -0
- package/dist/agents/registry/deeplink-probes.js +18 -0
- package/dist/agents/registry/node.d.ts +56 -0
- package/dist/agents/registry/node.js +339 -0
- package/dist/brand-assets-build.js +3 -6
- package/dist/brand-assets.d.ts +5 -15
- package/dist/brand-assets.js +12 -14
- package/dist/brand.d.ts +17 -0
- package/dist/brand.js +24 -4
- package/dist/config/domains.d.ts +79 -12
- package/dist/config/domains.js +128 -29
- package/dist/config/index.js +1 -2
- package/dist/contracts/abuse.js +9 -24
- package/dist/contracts/access-profiles.d.ts +86 -0
- package/dist/contracts/access-profiles.js +89 -0
- package/dist/contracts/access.d.ts +24 -30
- package/dist/contracts/access.js +33 -64
- package/dist/contracts/activity.d.ts +18 -1
- package/dist/contracts/activity.js +72 -26
- package/dist/contracts/analytics.js +8 -10
- package/dist/contracts/api-keys.d.ts +77 -52
- package/dist/contracts/api-keys.js +44 -24
- package/dist/contracts/application-journal.d.ts +216 -0
- package/dist/contracts/application-journal.js +167 -0
- package/dist/contracts/auth.d.ts +90 -17
- package/dist/contracts/auth.js +86 -17
- package/dist/contracts/beta.d.ts +9 -4
- package/dist/contracts/beta.js +20 -16
- package/dist/contracts/billing.d.ts +2 -1
- package/dist/contracts/billing.js +37 -11
- package/dist/contracts/bootstrap.d.ts +791 -0
- package/dist/contracts/bootstrap.js +51 -0
- package/dist/contracts/builds.d.ts +209 -18
- package/dist/contracts/builds.js +93 -27
- package/dist/contracts/channels.d.ts +43 -0
- package/dist/contracts/channels.js +25 -9
- package/dist/contracts/cli.d.ts +7 -0
- package/dist/contracts/cli.js +6 -0
- package/dist/contracts/collab-public.d.ts +1 -1
- package/dist/contracts/collab-public.js +5 -8
- package/dist/contracts/comments.d.ts +44 -34
- package/dist/contracts/comments.js +107 -77
- package/dist/contracts/commerce.d.ts +165 -0
- package/dist/contracts/commerce.js +146 -0
- package/dist/contracts/common.d.ts +3 -3
- package/dist/contracts/common.js +20 -31
- package/dist/contracts/content-contract-verification.d.ts +521 -0
- package/dist/contracts/content-contract-verification.js +320 -0
- package/dist/contracts/content-platform-fixture.d.ts +1278 -0
- package/dist/contracts/content-platform-fixture.js +44 -0
- package/dist/contracts/content-program.d.ts +994 -0
- package/dist/contracts/content-program.js +658 -0
- package/dist/contracts/content-sync.d.ts +290 -0
- package/dist/contracts/content-sync.js +167 -0
- package/dist/contracts/content.d.ts +432 -0
- package/dist/contracts/content.js +303 -0
- package/dist/contracts/continuation.d.ts +17 -1
- package/dist/contracts/continuation.js +23 -23
- package/dist/contracts/countries.js +3 -4
- package/dist/contracts/crons.d.ts +52 -0
- package/dist/contracts/crons.js +60 -0
- package/dist/contracts/dashboard-prefs.d.ts +56 -0
- package/dist/contracts/dashboard-prefs.js +51 -0
- package/dist/contracts/device-auth.d.ts +234 -37
- package/dist/contracts/device-auth.js +267 -53
- package/dist/contracts/docs.d.ts +1 -5
- package/dist/contracts/docs.js +7 -15
- package/dist/contracts/domains.d.ts +501 -93
- package/dist/contracts/domains.js +193 -55
- package/dist/contracts/email-preferences.d.ts +3 -3
- package/dist/contracts/email-preferences.js +6 -7
- package/dist/contracts/enums.d.ts +27 -26
- package/dist/contracts/enums.js +68 -61
- package/dist/contracts/error-code-meta.d.ts +283 -7
- package/dist/contracts/error-code-meta.js +97 -5
- package/dist/contracts/error-codes.d.ts +5 -5
- package/dist/contracts/error-codes.js +82 -17
- package/dist/contracts/events.d.ts +100 -20
- package/dist/contracts/events.js +107 -20
- package/dist/contracts/execution.d.ts +48 -64
- package/dist/contracts/execution.js +52 -62
- package/dist/contracts/feature-lifecycle.d.ts +73 -27
- package/dist/contracts/feature-lifecycle.js +86 -26
- package/dist/contracts/features.d.ts +68 -19
- package/dist/contracts/features.js +42 -41
- package/dist/contracts/fixtures/content-platform-v1.json +1108 -0
- package/dist/contracts/frame-session.d.ts +192 -0
- package/dist/contracts/frame-session.js +164 -0
- package/dist/contracts/functions.d.ts +338 -164
- package/dist/contracts/functions.js +367 -198
- package/dist/contracts/git.d.ts +27 -33
- package/dist/contracts/git.js +10 -11
- package/dist/contracts/grant-copy.d.ts +43 -0
- package/dist/contracts/grant-copy.js +44 -0
- package/dist/contracts/grants.d.ts +62 -54
- package/dist/contracts/grants.js +124 -23
- package/dist/contracts/ids.d.ts +4 -1
- package/dist/contracts/ids.js +6 -3
- package/dist/contracts/internal.d.ts +8 -18
- package/dist/contracts/internal.js +13 -14
- package/dist/contracts/mcp.d.ts +28 -0
- package/dist/contracts/mcp.js +28 -0
- package/dist/contracts/me.d.ts +6 -1
- package/dist/contracts/me.js +12 -6
- package/dist/contracts/notifications.d.ts +27 -29
- package/dist/contracts/notifications.js +9 -4
- package/dist/contracts/oauth-resources.d.ts +112 -10
- package/dist/contracts/oauth-resources.js +116 -11
- package/dist/contracts/oauth-scope-actions.d.ts +90 -0
- package/dist/contracts/oauth-scope-actions.js +126 -0
- package/dist/contracts/operations.d.ts +27 -4
- package/dist/contracts/operations.js +12 -6
- package/dist/contracts/pages.d.ts +31 -7
- package/dist/contracts/pages.js +22 -5
- package/dist/contracts/partner-notifications.d.ts +3 -0
- package/dist/contracts/partner-notifications.js +65 -0
- package/dist/contracts/{platform.d.ts → partner.d.ts} +29 -42
- package/dist/contracts/{platform.js → partner.js} +27 -40
- package/dist/contracts/plan-policy.js +1 -1
- package/dist/contracts/principal-assertion.d.ts +43 -0
- package/dist/contracts/principal-assertion.js +67 -0
- package/dist/contracts/principals.d.ts +73 -0
- package/dist/contracts/principals.js +59 -0
- package/dist/contracts/privacy.d.ts +11 -0
- package/dist/contracts/privacy.js +17 -0
- package/dist/contracts/problem-document.js +3 -4
- package/dist/contracts/publish-archive.d.ts +269 -161
- package/dist/contracts/publish-archive.js +11 -1
- package/dist/contracts/push-new.d.ts +8 -8
- package/dist/contracts/quotas.js +5 -5
- package/dist/contracts/realtime.d.ts +52 -0
- package/dist/contracts/realtime.js +54 -0
- package/dist/contracts/repository-connections.d.ts +44 -31
- package/dist/contracts/repository-connections.js +17 -5
- package/dist/contracts/resources.d.ts +105 -14
- package/dist/contracts/resources.js +150 -26
- package/dist/contracts/route-inventory.d.ts +358 -0
- package/dist/contracts/route-inventory.js +141 -0
- package/dist/contracts/runtime-api.d.ts +206 -82
- package/dist/contracts/runtime-api.js +131 -70
- package/dist/contracts/runtime-app.d.ts +13 -23
- package/dist/contracts/runtime-app.js +39 -24
- package/dist/contracts/runtime-components.d.ts +143 -0
- package/dist/contracts/runtime-components.js +199 -0
- package/dist/contracts/runtime-db.d.ts +49 -23
- package/dist/contracts/runtime-db.js +87 -22
- package/dist/contracts/runtime-purge.d.ts +8 -0
- package/dist/contracts/runtime-purge.js +5 -0
- package/dist/contracts/runtime-services.d.ts +43 -75
- package/dist/contracts/runtime-services.js +29 -49
- package/dist/contracts/runtime-storage.d.ts +15 -14
- package/dist/contracts/runtime-storage.js +30 -14
- package/dist/contracts/sf-config-v1.d.ts +48 -14
- package/dist/contracts/slugs.js +13 -4
- package/dist/contracts/space-config.d.ts +283 -19
- package/dist/contracts/space-config.js +430 -80
- package/dist/contracts/spaces.d.ts +376 -290
- package/dist/contracts/spaces.js +200 -135
- package/dist/contracts/superadmin-activity.d.ts +3 -43
- package/dist/contracts/superadmin-activity.js +6 -30
- package/dist/contracts/superadmin-emails.d.ts +1 -0
- package/dist/contracts/superadmin-emails.js +17 -1
- package/dist/contracts/superadmin-runtime.d.ts +199 -0
- package/dist/contracts/superadmin-runtime.js +141 -0
- package/dist/contracts/superadmin-search.d.ts +22 -2
- package/dist/contracts/superadmin-search.js +14 -6
- package/dist/contracts/superadmin-spaces.d.ts +438 -189
- package/dist/contracts/superadmin-spaces.js +131 -25
- package/dist/contracts/superadmin-teams.d.ts +5 -2
- package/dist/contracts/superadmin-teams.js +1 -2
- package/dist/contracts/superadmin-tenants.d.ts +627 -12
- package/dist/contracts/superadmin-tenants.js +32 -13
- package/dist/contracts/superadmin.d.ts +232 -37
- package/dist/contracts/superadmin.js +106 -22
- package/dist/contracts/tags.d.ts +85 -58
- package/dist/contracts/tags.js +47 -37
- package/dist/contracts/teams.d.ts +86 -26
- package/dist/contracts/teams.js +90 -31
- package/dist/contracts/tenants.d.ts +135 -0
- package/dist/contracts/tenants.js +120 -0
- package/dist/contracts/test-triggers.d.ts +70 -0
- package/dist/contracts/test-triggers.js +116 -0
- package/dist/contracts/theme-json.js +3 -8
- package/dist/contracts/transfers.d.ts +1 -0
- package/dist/contracts/transfers.js +3 -2
- package/dist/contracts/usage.d.ts +209 -0
- package/dist/contracts/usage.js +124 -12
- package/dist/contracts/variables.d.ts +2 -2
- package/dist/contracts/variables.js +9 -13
- package/dist/contracts/webhooks.d.ts +13 -5
- package/dist/contracts/webhooks.js +3 -1
- package/dist/contracts/zero.d.ts +72 -81
- package/dist/contracts/zero.js +80 -78
- package/dist/dashboard-paths/index.d.ts +24 -21
- package/dist/dashboard-paths/index.js +35 -47
- package/dist/dashboard-paths/route-reservations.generated.d.ts +2 -0
- package/dist/dashboard-paths/route-reservations.generated.js +36 -0
- package/dist/docs/agent-arrival.d.ts +92 -0
- package/dist/docs/agent-arrival.js +227 -0
- package/dist/docs/agent-output-policy.d.ts +6 -0
- package/dist/docs/agent-output-policy.js +22 -0
- package/dist/docs/agent-prose.d.ts +12 -18
- package/dist/docs/agent-prose.js +73 -51
- package/dist/docs/agent-setup.d.ts +72 -41
- package/dist/docs/agent-setup.js +339 -436
- package/dist/docs/catalog.d.ts +153 -95
- package/dist/docs/catalog.js +163 -48
- package/dist/docs/error-docs.d.ts +2098 -1
- package/dist/docs/error-docs.js +421 -144
- package/dist/docs/index-build.d.ts +0 -1
- package/dist/docs/index-build.js +2 -3
- package/dist/docs/page-context-prompt.d.ts +77 -0
- package/dist/docs/page-context-prompt.js +131 -0
- package/dist/docs/reference-urls.d.ts +46 -0
- package/dist/docs/reference-urls.js +79 -0
- package/dist/docs/search.d.ts +6 -8
- package/dist/docs/search.js +10 -13
- package/dist/docs/skill-distribution.d.ts +4 -1
- package/dist/docs/skill-distribution.js +10 -5
- package/dist/docs/skills.d.ts +120 -120
- package/dist/docs/skills.js +121 -73
- package/dist/docs/start-prompts.d.ts +45 -0
- package/dist/docs/start-prompts.js +62 -0
- package/dist/domain-exploration.js +9 -13
- package/dist/og-template.d.ts +56 -0
- package/dist/og-template.js +56 -0
- package/dist/slug-policy/index.js +5 -11
- package/dist/test-helpers/fetch-stub.js +1 -0
- package/dist/utils/browser-credential.d.ts +13 -6
- package/dist/utils/browser-credential.js +14 -7
- package/dist/utils/build-settings.d.ts +21 -1
- package/dist/utils/build-settings.js +133 -15
- package/dist/utils/canonical-json.d.ts +3 -5
- package/dist/utils/canonical-json.js +4 -5
- package/dist/utils/cast-transport.d.ts +5 -17
- package/dist/utils/cast-transport.js +6 -19
- package/dist/utils/claim-token.js +1 -2
- package/dist/utils/comment-avatars.js +4 -6
- package/dist/utils/concurrency.js +3 -3
- package/dist/utils/content-type.d.ts +7 -6
- package/dist/utils/content-type.js +73 -51
- package/dist/utils/credential-policy.d.ts +50 -6
- package/dist/utils/credential-policy.js +126 -59
- package/dist/utils/dns-instructions.js +9 -9
- package/dist/utils/egress-policy.fixtures.json +1 -1
- package/dist/utils/error-code.js +1 -0
- package/dist/utils/generate-space-name.d.ts +3 -8
- package/dist/utils/generate-space-name.js +3 -8
- package/dist/utils/grant-decision.fixtures.json +2 -2
- package/dist/utils/grants.d.ts +0 -1
- package/dist/utils/grants.js +7 -8
- package/dist/utils/gravatar.d.ts +2 -4
- package/dist/utils/gravatar.js +6 -12
- package/dist/utils/id-hints.js +14 -23
- package/dist/utils/idempotency.d.ts +3 -3
- package/dist/utils/idempotency.js +6 -7
- package/dist/utils/local-space-state.d.ts +23 -26
- package/dist/utils/local-space-state.js +46 -46
- package/dist/utils/oauth-signed-query.d.ts +3 -5
- package/dist/utils/oauth-signed-query.js +6 -9
- package/dist/utils/one-shot-replay.d.ts +7 -6
- package/dist/utils/one-shot-replay.js +3 -5
- package/dist/utils/page-colors.d.ts +15 -19
- package/dist/utils/page-colors.js +23 -45
- package/dist/utils/page-fonts.d.ts +1 -1
- package/dist/utils/page-fonts.js +8 -20
- package/dist/utils/page-preview.d.ts +0 -1
- package/dist/utils/page-preview.js +0 -1
- package/dist/utils/pages.d.ts +33 -3
- package/dist/utils/pages.js +83 -30
- package/dist/utils/privacy-regions.d.ts +19 -0
- package/dist/utils/privacy-regions.js +91 -0
- package/dist/utils/publish-form-data.d.ts +4 -5
- package/dist/utils/publish-form-data.js +2 -3
- package/dist/utils/publish-policy.d.ts +11 -17
- package/dist/utils/publish-policy.fixtures.json +11 -5
- package/dist/utils/publish-policy.js +65 -110
- package/dist/utils/query-client.d.ts +2 -0
- package/dist/utils/query-client.js +10 -1
- package/dist/utils/runtime-paths.d.ts +4 -4
- package/dist/utils/runtime-paths.js +6 -8
- package/dist/utils/runtime-upload.d.ts +9 -0
- package/dist/utils/runtime-upload.js +12 -0
- package/dist/utils/secure-local-file.d.ts +3 -3
- package/dist/utils/secure-local-file.js +23 -40
- package/dist/utils/space-config.d.ts +12 -15
- package/dist/utils/space-config.js +13 -16
- package/dist/utils/static-runtime-policy.d.ts +10 -7
- package/dist/utils/static-runtime-policy.fixtures.json +38 -41
- package/dist/utils/static-runtime-policy.generated.d.ts +16 -0
- package/dist/utils/static-runtime-policy.generated.js +70 -0
- package/dist/utils/static-runtime-policy.js +31 -132
- package/dist/utils/storage-policy.js +1 -2
- package/dist/utils/upload-session.d.ts +4 -1
- package/dist/utils/upload-session.js +41 -19
- package/dist/utils/version-path.js +11 -19
- package/dist/utils/wpcom-auth-redirects.d.ts +5 -14
- package/dist/utils/wpcom-auth-redirects.js +1 -4
- package/dist/vocabulary.d.ts +13 -13
- package/dist/vocabulary.js +52 -27
- package/package.json +15 -18
- package/dist/agents/client-registry.d.ts +0 -22
- package/dist/agents/client-registry.js +0 -41
- package/dist/docs/agent-handoff-document.d.ts +0 -15
- package/dist/docs/agent-handoff-document.js +0 -180
- package/dist/docs/agent-solutions.d.ts +0 -110
- package/dist/docs/agent-solutions.js +0 -183
- package/dist/utils/query-keys.d.ts +0 -84
- package/dist/utils/query-keys.js +0 -108
package/dist/contracts/zero.js
CHANGED
|
@@ -1,30 +1,28 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { appRoutePathSchema, EXECUTION_ENV_MAX_KEYS, executionBundleSchema, executionCapabilitiesSchema, executionEnvNameSchema, executionIdentifierSchema, executionInspectPolicySchema, executionSha256Schema, executionStaticFileSchema, httpMethodSchema, LAKEBED_SERVER_ENV_FILE, PLATFORM_ROUTE_PREFIX, runtimeRealtimeModeSchema, SERVER_ENV_FILE, } from "./execution.js";
|
|
3
3
|
/**
|
|
4
|
-
* Spacefast Zero: capsules
|
|
5
|
-
* together inside one parent-owned transaction
|
|
6
|
-
* on a dedicated wp.cloud site
|
|
4
|
+
* Spacefast Zero: capsules of schema, queries, mutations and endpoints that run
|
|
5
|
+
* together inside one parent-owned transaction, executed by the native runner
|
|
6
|
+
* on a dedicated wp.cloud site against that site's own MySQL.
|
|
7
7
|
*
|
|
8
|
-
* The transaction is what makes this a separate product rather than a
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
* for the narrow surface both products can host.
|
|
8
|
+
* The transaction is what makes this a separate product rather than a placement
|
|
9
|
+
* option for `./functions.js`: an isolate reaching the database over a relay
|
|
10
|
+
* cannot offer one. See `endpointIsPortable` in `./execution.js` for the narrow
|
|
11
|
+
* surface both products can host.
|
|
13
12
|
*/
|
|
14
13
|
export const ZERO_SOURCE_METADATA_KEY = "statticZero";
|
|
15
14
|
/**
|
|
16
|
-
* The tag a compiled capsule artifact carries
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
* space declares: a publish can carry this beside a worker.
|
|
15
|
+
* The tag a compiled capsule artifact carries everywhere it travels, so PHP and
|
|
16
|
+
* the Rust runner can tell what they were handed. It is a property of the
|
|
17
|
+
* artifact, not a kind a space declares: a publish can carry this beside a
|
|
18
|
+
* worker.
|
|
21
19
|
*/
|
|
22
20
|
export const ZERO_RUNTIME_KIND = "zero";
|
|
23
21
|
export const ZERO_PLATFORM_ROUTE_PREFIX = `${PLATFORM_ROUTE_PREFIX}/zero`;
|
|
24
22
|
/**
|
|
25
|
-
* Entry paths the Zero scaffold writes into `sf.jsonc#runtime`.
|
|
26
|
-
*
|
|
27
|
-
*
|
|
23
|
+
* Entry paths the Zero scaffold writes into `sf.jsonc#runtime`. Starting points
|
|
24
|
+
* only: a capsule's entries are whatever its `runtime.server`/`runtime.client`
|
|
25
|
+
* say, and nothing infers them.
|
|
28
26
|
*/
|
|
29
27
|
export const ZERO_CLIENT_ENTRY = "client/index.tsx";
|
|
30
28
|
export const ZERO_SERVER_ENTRY = "server/index.ts";
|
|
@@ -42,7 +40,7 @@ export const ZERO_RUNTIME_STORAGE_ROOT = "__spacefast/zero";
|
|
|
42
40
|
export const ZERO_RUNTIME_ARTIFACT_PATH = `${ZERO_RUNTIME_STORAGE_ROOT}/artifact.json`;
|
|
43
41
|
export const ZERO_RUNTIME_CONFIG_PATH = `${ZERO_RUNTIME_STORAGE_ROOT}/config.json`;
|
|
44
42
|
export const ZERO_RUNTIME_BINARY_PATH = `${ZERO_RUNTIME_STORAGE_ROOT}/bin/stattic-runtime`;
|
|
45
|
-
export const ZERO_RUNTIME_BINARY_COMPATIBILITY_TARGET = "
|
|
43
|
+
export const ZERO_RUNTIME_BINARY_COMPATIBILITY_TARGET = "linux-x86_64-gnu-v1";
|
|
46
44
|
export const ZERO_RUNTIME_BUNDLE_ROOT = `${ZERO_RUNTIME_STORAGE_ROOT}/bundles`;
|
|
47
45
|
export const ZERO_RUNTIME_SERVER_BUNDLE_PATH = `${ZERO_RUNTIME_BUNDLE_ROOT}/server.qjs.mjs`;
|
|
48
46
|
/** The compiled capsule client, served at the app root. */
|
|
@@ -51,15 +49,13 @@ export const ZERO_PUBLIC_CLIENT_BUNDLE_PATH = "client.js";
|
|
|
51
49
|
* Where platform-owned client bytes serve from: same origin as the space, one
|
|
52
50
|
* content-addressed directory per platform build.
|
|
53
51
|
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
56
|
-
*
|
|
57
|
-
*
|
|
58
|
-
* platform bytes change, so publishing a capsule a hundred times re-downloads
|
|
59
|
-
* the capsule's own bundle a hundred times and the platform's exactly once.
|
|
52
|
+
* Browsers have partitioned the HTTP cache by top-level site since 2020, so a
|
|
53
|
+
* shared third-party CDN buys nothing a same-origin URL does not, and costs a
|
|
54
|
+
* `script-src` hole. The digest changes only when the platform bytes change, so
|
|
55
|
+
* republishing a capsule re-downloads its own bundle but not the platform's.
|
|
60
56
|
*
|
|
61
57
|
* Underscore-prefixed by framework convention (`_next/static`, `_astro`), which
|
|
62
|
-
* is also how the runtime recognises it as immutable
|
|
58
|
+
* is also how the runtime recognises it as immutable. See `immutable_path` in
|
|
63
59
|
* `crates/stattic-runtime-core/src/finalize.rs`.
|
|
64
60
|
*/
|
|
65
61
|
export const ZERO_PLATFORM_ASSET_NAMESPACE = "_spacefast";
|
|
@@ -71,39 +67,33 @@ export function zeroPlatformAssetPath(digest, fileName) {
|
|
|
71
67
|
/**
|
|
72
68
|
* The compiled capsule server, which the QuickJS runner instantiates whole.
|
|
73
69
|
*
|
|
74
|
-
* 768 KiB is inherited, not measured: nobody has
|
|
75
|
-
*
|
|
76
|
-
*
|
|
77
|
-
*
|
|
78
|
-
* server code is handlers, not an application.
|
|
70
|
+
* 768 KiB is inherited, not measured: nobody has established what the runner
|
|
71
|
+
* actually tolerates. It binds a real resource, since the runner holds the
|
|
72
|
+
* module graph in the site's PHP-worker memory before executing anything, so it
|
|
73
|
+
* stays low deliberately.
|
|
79
74
|
*/
|
|
80
75
|
export const ZERO_SERVER_BUNDLE_MAX_BYTES = 786_432;
|
|
81
76
|
/**
|
|
82
77
|
* The tenant client bundle, and every other file the compile ships as content.
|
|
83
78
|
*
|
|
84
|
-
* This measures what the tenant publishes, and only that
|
|
79
|
+
* This measures what the tenant publishes, and only that. The SDK, the kit, the
|
|
85
80
|
* chart layer, preact, recharts and lucide are externals resolved through the
|
|
86
81
|
* shell's import map to {@link ZERO_PLATFORM_ASSET_ROOT}, so platform bytes are
|
|
87
|
-
* never weighed here
|
|
88
|
-
* author chose to bundle.
|
|
82
|
+
* never weighed here.
|
|
89
83
|
*
|
|
90
|
-
* 8 MiB matches the Functions per-entry cap
|
|
91
|
-
*
|
|
92
|
-
*
|
|
93
|
-
*
|
|
94
|
-
* modules are large — rather than at upload. It is a guardrail, not a budget;
|
|
95
|
-
* the size report is what an author should be reading.
|
|
84
|
+
* 8 MiB matches the Functions per-entry cap. A client bundle is static bytes to
|
|
85
|
+
* a browser, so nothing on the serving side binds it; the cap exists to fail an
|
|
86
|
+
* accidental hundred-megabyte dependency in tooling that can say which modules
|
|
87
|
+
* are large, rather than at upload.
|
|
96
88
|
*/
|
|
97
89
|
export const ZERO_CLIENT_BUNDLE_MAX_BYTES = 8 * 1024 * 1024;
|
|
98
90
|
/**
|
|
99
91
|
* A capsule's compiled server travels as version metadata, not as content, so a
|
|
100
|
-
* server-only change
|
|
101
|
-
*
|
|
102
|
-
*
|
|
103
|
-
*
|
|
104
|
-
*
|
|
105
|
-
* bundle uses (`functionsBundleStoragePath`) — an ordinary manifest entry, no
|
|
106
|
-
* artifact-specific plumbing.
|
|
92
|
+
* server-only change would leave the app shell byte-identical and the version
|
|
93
|
+
* intent's manifest comparison would read it as "no changes". The publish writes
|
|
94
|
+
* this one small file into the version instead: it holds a digest of everything
|
|
95
|
+
* the deploy would install, so any server, schema, or runtime-config change
|
|
96
|
+
* moves the manifest.
|
|
107
97
|
*/
|
|
108
98
|
export const ZERO_RUNTIME_DEPLOY_PATH = `${ZERO_RUNTIME_STORAGE_ROOT}/deploy.json`;
|
|
109
99
|
export const ZERO_MANAGED_TABLE_COLUMNS = ["id", "createdAt", "updatedAt"];
|
|
@@ -118,9 +108,8 @@ export const ZERO_RESERVED_APP_ROUTE_PATHS = [
|
|
|
118
108
|
`/${ZERO_PUBLIC_CLIENT_BUNDLE_PATH}`,
|
|
119
109
|
"/auth/callback",
|
|
120
110
|
];
|
|
121
|
-
// The whole platform namespace is reserved
|
|
122
|
-
//
|
|
123
|
-
// shell's import map already told the browser to fetch.
|
|
111
|
+
// The whole platform namespace is reserved: an endpoint claiming a path under it
|
|
112
|
+
// would shadow bytes the shell's import map already told the browser to fetch.
|
|
124
113
|
export const ZERO_RESERVED_APP_ROUTE_PREFIXES = [
|
|
125
114
|
"/auth/",
|
|
126
115
|
`/${ZERO_PLATFORM_ASSET_NAMESPACE}/`,
|
|
@@ -137,7 +126,7 @@ export const zeroEndpointSchema = z
|
|
|
137
126
|
path: zeroRoutePathSchema,
|
|
138
127
|
})
|
|
139
128
|
.strict();
|
|
140
|
-
function
|
|
129
|
+
function zeroEndpointRouteMatch(path) {
|
|
141
130
|
const segments = [];
|
|
142
131
|
let score = 0;
|
|
143
132
|
let splat = false;
|
|
@@ -166,17 +155,17 @@ export function zeroEndpointRoutesAmbiguous(left, right) {
|
|
|
166
155
|
(left.method === "HEAD" && right.method === "GET");
|
|
167
156
|
if (!methodsOverlap)
|
|
168
157
|
return false;
|
|
169
|
-
const
|
|
170
|
-
const
|
|
171
|
-
if (
|
|
158
|
+
const leftMatch = zeroEndpointRouteMatch(left.path);
|
|
159
|
+
const rightMatch = zeroEndpointRouteMatch(right.path);
|
|
160
|
+
if (leftMatch.score !== rightMatch.score)
|
|
172
161
|
return false;
|
|
173
|
-
if (!
|
|
162
|
+
if (!leftMatch.splat && leftMatch.segments.length < rightMatch.segments.length)
|
|
174
163
|
return false;
|
|
175
|
-
if (!
|
|
164
|
+
if (!rightMatch.splat && rightMatch.segments.length < leftMatch.segments.length)
|
|
176
165
|
return false;
|
|
177
|
-
return Array.from({ length: Math.min(
|
|
178
|
-
const segment =
|
|
179
|
-
const other =
|
|
166
|
+
return Array.from({ length: Math.min(leftMatch.segments.length, rightMatch.segments.length) }, (_, index) => index).every((index) => {
|
|
167
|
+
const segment = leftMatch.segments[index];
|
|
168
|
+
const other = rightMatch.segments[index];
|
|
180
169
|
return segment === null || other === null || segment === other;
|
|
181
170
|
});
|
|
182
171
|
}
|
|
@@ -264,12 +253,12 @@ export const zeroTableSchema = z
|
|
|
264
253
|
export const zeroDatabaseSchema = z.record(z.string(), zeroTableSchema);
|
|
265
254
|
const zeroSha256Schema = executionSha256Schema;
|
|
266
255
|
/**
|
|
267
|
-
* The compiled server travels inline in the finalize payload
|
|
268
|
-
* whole version one atomic write. Functions bundles
|
|
269
|
-
*
|
|
256
|
+
* The compiled server travels inline in the finalize payload, which keeps the
|
|
257
|
+
* whole version one atomic write. Functions bundles land in the content store
|
|
258
|
+
* first; see `functionsBundleRefSchema`.
|
|
270
259
|
*
|
|
271
|
-
* The client never travels this way
|
|
272
|
-
*
|
|
260
|
+
* The client never travels this way: it is content the browser fetches from the
|
|
261
|
+
* version tree, so it ships as a static file.
|
|
273
262
|
*/
|
|
274
263
|
export const zeroRuntimeBundleSchema = executionBundleSchema({
|
|
275
264
|
bundleRoot: ZERO_RUNTIME_BUNDLE_ROOT,
|
|
@@ -536,7 +525,7 @@ export const zeroCapsuleArtifactSchema = z
|
|
|
536
525
|
.strict(),
|
|
537
526
|
db: z
|
|
538
527
|
.object({
|
|
539
|
-
backend: z.literal("
|
|
528
|
+
backend: z.literal("mysql"),
|
|
540
529
|
migrations: z.array(zeroMigrationOperationSchema).default([]),
|
|
541
530
|
})
|
|
542
531
|
.strict(),
|
|
@@ -636,18 +625,13 @@ export const zeroDeployMetadataSchema = z
|
|
|
636
625
|
* What a live Zero capsule is, as the `capsule` member of a space's runtime
|
|
637
626
|
* status.
|
|
638
627
|
*
|
|
639
|
-
*
|
|
640
|
-
*
|
|
641
|
-
*
|
|
642
|
-
* than the publish that carries it. There is no kind tag either — the member it
|
|
643
|
-
* rides in already says which product answered.
|
|
628
|
+
* No `versionId`: the status response already names the live version, and
|
|
629
|
+
* repeating it would invite the two to disagree. `artifactId` stays because it
|
|
630
|
+
* identifies the built capsule rather than the publish that carries it.
|
|
644
631
|
*
|
|
645
|
-
* Every field is derived from the version's own finalize metadata,
|
|
646
|
-
*
|
|
647
|
-
*
|
|
648
|
-
* also why there are no counts of things listed here — a caller that wants
|
|
649
|
-
* `tables.length` can take it — and why the database is not a field: a capsule
|
|
650
|
-
* always owns one, so its presence already said so.
|
|
632
|
+
* Every field is derived from the version's own finalize metadata, so this is
|
|
633
|
+
* safe to answer for a space whose runtime is asleep, mid-move, or failing.
|
|
634
|
+
* Nothing here costs a call to the space's origin.
|
|
651
635
|
*/
|
|
652
636
|
export const zeroAppSchema = z
|
|
653
637
|
.object({
|
|
@@ -667,9 +651,27 @@ export const zeroAppSchema = z
|
|
|
667
651
|
endpoints: z.array(zeroEndpointSchema).default([]),
|
|
668
652
|
sockets: z.array(z.string()).default([]),
|
|
669
653
|
/**
|
|
670
|
-
*
|
|
671
|
-
*
|
|
672
|
-
*
|
|
654
|
+
* Compiled bundle sizes in bytes, read from the finalize payload's own
|
|
655
|
+
* declarations. Null — never 0 — when a legacy version's metadata predates
|
|
656
|
+
* size reporting, so absence stays honest. Meter these against
|
|
657
|
+
* {@link ZERO_SERVER_BUNDLE_MAX_BYTES} and {@link ZERO_CLIENT_BUNDLE_MAX_BYTES}.
|
|
658
|
+
*/
|
|
659
|
+
serverBundleSize: z
|
|
660
|
+
.number()
|
|
661
|
+
.int()
|
|
662
|
+
.nonnegative()
|
|
663
|
+
.nullable()
|
|
664
|
+
.describe("Compiled server bundle size in bytes, or null when this version's metadata does not record it."),
|
|
665
|
+
clientBundleSize: z
|
|
666
|
+
.number()
|
|
667
|
+
.int()
|
|
668
|
+
.nonnegative()
|
|
669
|
+
.nullable()
|
|
670
|
+
.describe("Compiled client bundle size in bytes, or null when this version's metadata does not record it."),
|
|
671
|
+
/**
|
|
672
|
+
* Migrations are operations, not names, so a count is the summary here. The
|
|
673
|
+
* operations themselves are the database surface's answer
|
|
674
|
+
* (`GET /v1/spaces/{id}/db`).
|
|
673
675
|
*/
|
|
674
676
|
migrationCount: z.number().int().nonnegative(),
|
|
675
677
|
/** Digest of the schema the live migration plan settled on, if it ran one. */
|
|
@@ -726,7 +728,7 @@ export function createZeroCapsuleArtifact(input) {
|
|
|
726
728
|
sockets: input.sockets ?? [],
|
|
727
729
|
},
|
|
728
730
|
db: {
|
|
729
|
-
backend: "
|
|
731
|
+
backend: "mysql",
|
|
730
732
|
migrations: [],
|
|
731
733
|
},
|
|
732
734
|
realtime: {
|
|
@@ -1,46 +1,49 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* Append-only: add a new top-level static dashboard route's first segment here
|
|
5
|
-
* before its route module lands. A repository structural test enforces this.
|
|
2
|
+
* `connect` is held for the team-level connect page (see
|
|
3
|
+
* `reservedSegmentActivationContract` in apps/my's dashboard route ledger).
|
|
6
4
|
*/
|
|
7
|
-
export declare const
|
|
8
|
-
/**
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
* here before its route module lands. A repository structural test enforces
|
|
13
|
-
* this.
|
|
14
|
-
*/
|
|
15
|
-
export declare const SPACE_SLUG_ROUTE_RESERVATIONS: readonly ["billing", "connect", "domains", "drop", "members", "new", "resume", "settings"];
|
|
5
|
+
export declare const UNBUILT_SPACE_SLUG_ROUTE_RESERVATIONS: readonly ["connect"];
|
|
6
|
+
/** Dashboard route first-segments that cannot be used as team slugs. */
|
|
7
|
+
export declare const TEAM_SLUG_ROUTE_RESERVATIONS: readonly ["accept-beta-invite", "accept-invitation", "access", "account", "approvals", "claim", "device", "drop", "new-team", "oauth", "push", "sign-in", "start", "terminal", "two-factor"];
|
|
8
|
+
/** Dashboard route first-segments that cannot be used as space slugs. */
|
|
9
|
+
export declare const SPACE_SLUG_ROUTE_RESERVATIONS: readonly ["agents", "api-keys", "billing", "domains", "drop", "handoffs", "members", "new", "resume", "settings", "variables", "webhooks", "connect"];
|
|
16
10
|
export type TeamSlugRouteReservation = (typeof TEAM_SLUG_ROUTE_RESERVATIONS)[number];
|
|
17
11
|
export type SpaceSlugRouteReservation = (typeof SPACE_SLUG_ROUTE_RESERVATIONS)[number];
|
|
18
12
|
export declare const TEAM_SLUG_ROUTE_RESERVATION_SET: ReadonlySet<string>;
|
|
19
13
|
export declare const SPACE_SLUG_ROUTE_RESERVATION_SET: ReadonlySet<string>;
|
|
20
14
|
/**
|
|
21
|
-
* The Runtime page's sections.
|
|
22
|
-
*
|
|
23
|
-
* space slugged "runtime" keeps its own Runtime page at
|
|
15
|
+
* The Runtime page's sections. Search params, not path segments, so `runtime`
|
|
16
|
+
* stays one route and a space slugged "runtime" keeps its own Runtime page at
|
|
24
17
|
* `/<team>/runtime/runtime`.
|
|
25
18
|
*/
|
|
26
19
|
export declare const SPACE_RUNTIME_SECTIONS: readonly ["overview", "database", "storage", "logs"];
|
|
27
20
|
export type SpaceRuntimeSection = (typeof SPACE_RUNTIME_SECTIONS)[number];
|
|
28
21
|
export declare const DEFAULT_SPACE_RUNTIME_SECTION: SpaceRuntimeSection;
|
|
29
|
-
|
|
30
|
-
|
|
22
|
+
/**
|
|
23
|
+
* What is left under a Space's Settings dialog. Builds, Integrations, and
|
|
24
|
+
* Variables are top-level Space surfaces with their own builders below.
|
|
25
|
+
*/
|
|
26
|
+
export type SpaceSettingsDestination = "advanced" | "data-sources";
|
|
27
|
+
export type TeamSettingsDestination = "access" | "activity" | "billing" | "integrations" | "usage";
|
|
28
|
+
/** Top-level team surfaces; the name comes from the old Settings > Developer group. */
|
|
29
|
+
export type TeamDeveloperSurface = "agents" | "api-keys" | "handoffs" | "variables" | "webhooks";
|
|
31
30
|
export declare function teamPath(teamSlug: string): string;
|
|
32
31
|
export declare function spacePath(teamSlug: string, spaceSlug: string): string;
|
|
33
32
|
export declare function versionDetailPath(teamSlug: string, spaceSlug: string, versionRef: string): string;
|
|
34
33
|
export declare function buildDetailPath(teamSlug: string, spaceSlug: string, buildId: string): string;
|
|
35
34
|
export declare function spaceDomainsPath(teamSlug: string, spaceSlug: string): string;
|
|
35
|
+
/** Build runs and the repository connection that produces them. */
|
|
36
|
+
export declare function spaceBuildsPath(teamSlug: string, spaceSlug: string): string;
|
|
37
|
+
export declare function spaceIntegrationsPath(teamSlug: string, spaceSlug: string): string;
|
|
38
|
+
export declare function spaceVariablesPath(teamSlug: string, spaceSlug: string): string;
|
|
36
39
|
/**
|
|
37
|
-
* The space's Runtime page. The default section
|
|
38
|
-
*
|
|
39
|
-
* the page itself are the same link.
|
|
40
|
+
* The space's Runtime page. The route strips the default section back out of the
|
|
41
|
+
* address bar, so a link to "overview" and a link to the page are the same link.
|
|
40
42
|
*/
|
|
41
43
|
export declare function spaceRuntimePath(teamSlug: string, spaceSlug: string, section?: SpaceRuntimeSection): string;
|
|
42
44
|
export declare function spaceSettingsPath(teamSlug: string, spaceSlug: string, destination?: SpaceSettingsDestination): string;
|
|
43
45
|
export declare function teamDomainsPath(teamSlug: string): string;
|
|
44
46
|
export declare function teamBillingPath(teamSlug: string): string;
|
|
47
|
+
export declare function teamDeveloperSurfacePath(teamSlug: string, surface: TeamDeveloperSurface): string;
|
|
45
48
|
export declare function teamDomainDetailPath(teamSlug: string, domainRef: string): string;
|
|
46
49
|
export declare function teamSettingsPath(teamSlug: string, destination?: TeamSettingsDestination): string;
|
|
@@ -1,55 +1,31 @@
|
|
|
1
|
+
import { DERIVED_SPACE_SLUG_ROUTE_RESERVATIONS, DERIVED_TEAM_SLUG_ROUTE_RESERVATIONS, } from "./route-reservations.generated.js";
|
|
1
2
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
3
|
+
* Reservations for a dashboard surface that has not shipped yet. Shipped
|
|
4
|
+
* surfaces are derived in route-reservations.generated.ts, so this is the only
|
|
5
|
+
* hand-authored list. Delete an entry once the generator starts deriving it;
|
|
6
|
+
* leaving both is a duplicate that fails this module's own test.
|
|
6
7
|
*/
|
|
7
|
-
|
|
8
|
-
"accept-beta-invite",
|
|
9
|
-
"accept-invitation",
|
|
10
|
-
"account",
|
|
11
|
-
"access",
|
|
12
|
-
// Not a TanStack route module: /agent* is the edge-served handoff-document
|
|
13
|
-
// surface (apps/my/public/_redirects + vite middleware, #417). Those rewrite
|
|
14
|
-
// rules deliberately swallow every /agent-prefixed path, so a team named
|
|
15
|
-
// "agent" could never reach its canonical dashboard. Reserved per the spec's
|
|
16
|
-
// own rule that a static first segment is reserved before the surface owning
|
|
17
|
-
// it ships (#417 predates this set; this closes that drift).
|
|
18
|
-
"agent",
|
|
19
|
-
"claim",
|
|
20
|
-
"device",
|
|
21
|
-
"drop",
|
|
22
|
-
"new-team",
|
|
23
|
-
"oauth",
|
|
24
|
-
"push",
|
|
25
|
-
"sign-in",
|
|
26
|
-
"start",
|
|
27
|
-
"terminal",
|
|
28
|
-
"two-factor",
|
|
29
|
-
];
|
|
8
|
+
const UNBUILT_TEAM_SLUG_ROUTE_RESERVATIONS = [];
|
|
30
9
|
/**
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
* Append-only: add a new static route directly below a team's first segment
|
|
34
|
-
* here before its route module lands. A repository structural test enforces
|
|
35
|
-
* this.
|
|
10
|
+
* `connect` is held for the team-level connect page (see
|
|
11
|
+
* `reservedSegmentActivationContract` in apps/my's dashboard route ledger).
|
|
36
12
|
*/
|
|
13
|
+
export const UNBUILT_SPACE_SLUG_ROUTE_RESERVATIONS = ["connect"];
|
|
14
|
+
/** Dashboard route first-segments that cannot be used as team slugs. */
|
|
15
|
+
export const TEAM_SLUG_ROUTE_RESERVATIONS = [
|
|
16
|
+
...DERIVED_TEAM_SLUG_ROUTE_RESERVATIONS,
|
|
17
|
+
...UNBUILT_TEAM_SLUG_ROUTE_RESERVATIONS,
|
|
18
|
+
];
|
|
19
|
+
/** Dashboard route first-segments that cannot be used as space slugs. */
|
|
37
20
|
export const SPACE_SLUG_ROUTE_RESERVATIONS = [
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
"domains",
|
|
41
|
-
"drop",
|
|
42
|
-
"members",
|
|
43
|
-
"new",
|
|
44
|
-
"resume",
|
|
45
|
-
"settings",
|
|
21
|
+
...DERIVED_SPACE_SLUG_ROUTE_RESERVATIONS,
|
|
22
|
+
...UNBUILT_SPACE_SLUG_ROUTE_RESERVATIONS,
|
|
46
23
|
];
|
|
47
24
|
export const TEAM_SLUG_ROUTE_RESERVATION_SET = new Set(TEAM_SLUG_ROUTE_RESERVATIONS);
|
|
48
25
|
export const SPACE_SLUG_ROUTE_RESERVATION_SET = new Set(SPACE_SLUG_ROUTE_RESERVATIONS);
|
|
49
26
|
/**
|
|
50
|
-
* The Runtime page's sections.
|
|
51
|
-
*
|
|
52
|
-
* space slugged "runtime" keeps its own Runtime page at
|
|
27
|
+
* The Runtime page's sections. Search params, not path segments, so `runtime`
|
|
28
|
+
* stays one route and a space slugged "runtime" keeps its own Runtime page at
|
|
53
29
|
* `/<team>/runtime/runtime`.
|
|
54
30
|
*/
|
|
55
31
|
export const SPACE_RUNTIME_SECTIONS = ["overview", "database", "storage", "logs"];
|
|
@@ -72,10 +48,19 @@ export function buildDetailPath(teamSlug, spaceSlug, buildId) {
|
|
|
72
48
|
export function spaceDomainsPath(teamSlug, spaceSlug) {
|
|
73
49
|
return `${spacePath(teamSlug, spaceSlug)}/domains`;
|
|
74
50
|
}
|
|
51
|
+
/** Build runs and the repository connection that produces them. */
|
|
52
|
+
export function spaceBuildsPath(teamSlug, spaceSlug) {
|
|
53
|
+
return `${spacePath(teamSlug, spaceSlug)}/builds`;
|
|
54
|
+
}
|
|
55
|
+
export function spaceIntegrationsPath(teamSlug, spaceSlug) {
|
|
56
|
+
return `${spacePath(teamSlug, spaceSlug)}/integrations`;
|
|
57
|
+
}
|
|
58
|
+
export function spaceVariablesPath(teamSlug, spaceSlug) {
|
|
59
|
+
return `${spacePath(teamSlug, spaceSlug)}/variables`;
|
|
60
|
+
}
|
|
75
61
|
/**
|
|
76
|
-
* The space's Runtime page. The default section
|
|
77
|
-
*
|
|
78
|
-
* the page itself are the same link.
|
|
62
|
+
* The space's Runtime page. The route strips the default section back out of the
|
|
63
|
+
* address bar, so a link to "overview" and a link to the page are the same link.
|
|
79
64
|
*/
|
|
80
65
|
export function spaceRuntimePath(teamSlug, spaceSlug, section = DEFAULT_SPACE_RUNTIME_SECTION) {
|
|
81
66
|
const root = `${spacePath(teamSlug, spaceSlug)}/runtime`;
|
|
@@ -89,7 +74,10 @@ export function teamDomainsPath(teamSlug) {
|
|
|
89
74
|
return `${teamPath(teamSlug)}/domains`;
|
|
90
75
|
}
|
|
91
76
|
export function teamBillingPath(teamSlug) {
|
|
92
|
-
return
|
|
77
|
+
return teamSettingsPath(teamSlug, "billing");
|
|
78
|
+
}
|
|
79
|
+
export function teamDeveloperSurfacePath(teamSlug, surface) {
|
|
80
|
+
return `${teamPath(teamSlug)}/${surface}`;
|
|
93
81
|
}
|
|
94
82
|
export function teamDomainDetailPath(teamSlug, domainRef) {
|
|
95
83
|
return `${teamDomainsPath(teamSlug)}/${dynamicSegment(domainRef)}`;
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export declare const DERIVED_TEAM_SLUG_ROUTE_RESERVATIONS: readonly ["accept-beta-invite", "accept-invitation", "access", "account", "approvals", "claim", "device", "drop", "new-team", "oauth", "push", "sign-in", "start", "terminal", "two-factor"];
|
|
2
|
+
export declare const DERIVED_SPACE_SLUG_ROUTE_RESERVATIONS: readonly ["agents", "api-keys", "billing", "domains", "drop", "handoffs", "members", "new", "resume", "settings", "variables", "webhooks"];
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
// @generated by `bun run check:dashboard-route-reservations -- --write`.
|
|
2
|
+
// Source: apps/my/src/routes (static first segments of route modules) and
|
|
3
|
+
// apps/my/public/_redirects (same-origin edge rules that claim a path before the
|
|
4
|
+
// router sees it). Add the route or the rule, regenerate, and the slug stops
|
|
5
|
+
// being claimable. Hand edits are overwritten.
|
|
6
|
+
export const DERIVED_TEAM_SLUG_ROUTE_RESERVATIONS = [
|
|
7
|
+
"accept-beta-invite",
|
|
8
|
+
"accept-invitation",
|
|
9
|
+
"access",
|
|
10
|
+
"account",
|
|
11
|
+
"approvals",
|
|
12
|
+
"claim",
|
|
13
|
+
"device",
|
|
14
|
+
"drop",
|
|
15
|
+
"new-team",
|
|
16
|
+
"oauth",
|
|
17
|
+
"push",
|
|
18
|
+
"sign-in",
|
|
19
|
+
"start",
|
|
20
|
+
"terminal",
|
|
21
|
+
"two-factor",
|
|
22
|
+
];
|
|
23
|
+
export const DERIVED_SPACE_SLUG_ROUTE_RESERVATIONS = [
|
|
24
|
+
"agents",
|
|
25
|
+
"api-keys",
|
|
26
|
+
"billing",
|
|
27
|
+
"domains",
|
|
28
|
+
"drop",
|
|
29
|
+
"handoffs",
|
|
30
|
+
"members",
|
|
31
|
+
"new",
|
|
32
|
+
"resume",
|
|
33
|
+
"settings",
|
|
34
|
+
"variables",
|
|
35
|
+
"webhooks",
|
|
36
|
+
];
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { type AnonymousAgentHandoffStatus } from "../contracts/device-auth.js";
|
|
2
|
+
export declare const AGENT_HANDOFF_REQUEST_FAILED_MESSAGE = "Request failed.";
|
|
3
|
+
export declare const AGENT_HANDOFF_INVALID_RESPONSE_MESSAGE = "Invalid agent handoff response.";
|
|
4
|
+
/**
|
|
5
|
+
* The messages that say nothing a person can act on. A UI showing an error
|
|
6
|
+
* detail line suppresses these, so it never renders "failed: Request failed."
|
|
7
|
+
*/
|
|
8
|
+
export declare const AGENT_HANDOFF_GENERIC_MESSAGES: ReadonlySet<string>;
|
|
9
|
+
export declare class AgentHandoffRequestError extends Error {
|
|
10
|
+
readonly code: string | null;
|
|
11
|
+
constructor(message: string, code?: string | null);
|
|
12
|
+
}
|
|
13
|
+
export type AgentArrivalConfig = {
|
|
14
|
+
/** Origin the anonymous handoff endpoints live on. */
|
|
15
|
+
apiOrigin: string;
|
|
16
|
+
/**
|
|
17
|
+
* Origins a minted link may legitimately carry, most likely first. A deploy
|
|
18
|
+
* may mint on the API origin or on a front-end origin that proxies
|
|
19
|
+
* `/handoffs/*` to it, so this is a list, not a guess. Defaults to the API
|
|
20
|
+
* origin alone.
|
|
21
|
+
*/
|
|
22
|
+
allowedOrigins?: readonly string[];
|
|
23
|
+
/** Transport seam: tests and the dashboard's attributed client swap it. */
|
|
24
|
+
fetch?: typeof globalThis.fetch;
|
|
25
|
+
/** Clock seam for the cadence and reuse policies. */
|
|
26
|
+
now?: () => number;
|
|
27
|
+
};
|
|
28
|
+
export type MintedAnonymousArrival = {
|
|
29
|
+
/** Ledger id of the handoff. Not a secret — the poll and analytics key off it. */
|
|
30
|
+
id: string;
|
|
31
|
+
/**
|
|
32
|
+
* Composes the copy-ready prompt for the task selected RIGHT NOW. It is a
|
|
33
|
+
* function, not a stored string, for two reasons: one handoff is reused
|
|
34
|
+
* across a visit while the task behind the prompt keeps changing, and the
|
|
35
|
+
* bearer stays captured in this closure instead of sitting in caller state.
|
|
36
|
+
* The result contains the one-use URL: clipboard only.
|
|
37
|
+
*/
|
|
38
|
+
promptFor: (context: string) => string;
|
|
39
|
+
/** Epoch ms. */
|
|
40
|
+
expiresAt: number;
|
|
41
|
+
};
|
|
42
|
+
/**
|
|
43
|
+
* Mints the signed-out handoff a copied prompt carries.
|
|
44
|
+
*
|
|
45
|
+
* The anonymous surface is anonymous by contract, so this deliberately sends no
|
|
46
|
+
* credentials: it works signed out, and a mint that carried a session would
|
|
47
|
+
* answer differently for gated accounts.
|
|
48
|
+
*/
|
|
49
|
+
export declare function mintAnonymousArrival(config: AgentArrivalConfig): Promise<MintedAnonymousArrival>;
|
|
50
|
+
/** Reads one anonymous handoff's fetch state by its non-secret ledger id. */
|
|
51
|
+
export declare function readAnonymousArrivalStatus(id: string, config: AgentArrivalConfig): Promise<AnonymousAgentHandoffStatus>;
|
|
52
|
+
export declare const AGENT_ARRIVAL_EAGER_POLL_MS = 2000;
|
|
53
|
+
export declare const AGENT_ARRIVAL_EAGER_WINDOW_MS: number;
|
|
54
|
+
export declare const AGENT_ARRIVAL_RELAXED_POLL_MS = 10000;
|
|
55
|
+
/**
|
|
56
|
+
* The handoff's own TTL is the clock: with no `since` to carry, "how much
|
|
57
|
+
* runway is left" says how long ago it was minted.
|
|
58
|
+
*/
|
|
59
|
+
export declare const AGENT_ARRIVAL_RELAXED_AFTER_MS: number;
|
|
60
|
+
/**
|
|
61
|
+
* One live handoff per visit is reused while it still has this much runway.
|
|
62
|
+
* Every copy gesture minting its own would spend rows against the caller's
|
|
63
|
+
* budget for a signal that only has to flip once.
|
|
64
|
+
*/
|
|
65
|
+
export declare const AGENT_ARRIVAL_REFRESH_RUNWAY_MS: number;
|
|
66
|
+
/** How long to wait before the next status read, or `false` to stop polling. */
|
|
67
|
+
export declare function anonymousArrivalPollDelayMs(status: AnonymousAgentHandoffStatus | undefined, now?: number): number | false;
|
|
68
|
+
/** The arrival itself: one fetch of the private URL is the whole signal. */
|
|
69
|
+
export declare function hasAgentArrived(status: AnonymousAgentHandoffStatus | undefined): boolean;
|
|
70
|
+
export type ComposedAnonymousPrompt = {
|
|
71
|
+
/** Ledger id to watch for the arrival. */
|
|
72
|
+
id: string;
|
|
73
|
+
/** Copy-ready text carrying the one-use URL. Clipboard only. */
|
|
74
|
+
prompt: string;
|
|
75
|
+
/** Epoch ms. */
|
|
76
|
+
expiresAt: number;
|
|
77
|
+
};
|
|
78
|
+
export type AnonymousArrival = {
|
|
79
|
+
/** The visit's handoff: minted once, reused while it still has runway. */
|
|
80
|
+
ensureMinted: () => Promise<MintedAnonymousArrival>;
|
|
81
|
+
/** ensureMinted, then the prompt for the task selected at this moment. */
|
|
82
|
+
promptFor: (context: string) => Promise<ComposedAnonymousPrompt>;
|
|
83
|
+
readStatus: (id: string) => Promise<AnonymousAgentHandoffStatus>;
|
|
84
|
+
nextPollDelayMs: (status: AnonymousAgentHandoffStatus | undefined) => number | false;
|
|
85
|
+
hasArrived: (status: AnonymousAgentHandoffStatus | undefined) => boolean;
|
|
86
|
+
};
|
|
87
|
+
/**
|
|
88
|
+
* One visit's arrival flow. Hold one of these for as long as the visitor is on
|
|
89
|
+
* the surface: the reuse discipline lives in the instance, so re-copies keep
|
|
90
|
+
* the same handoff instead of piling fresh rows behind one signal.
|
|
91
|
+
*/
|
|
92
|
+
export declare function createAnonymousArrival(config: AgentArrivalConfig): AnonymousArrival;
|