@spacefast/common 0.0.26 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agents/connect-targets.d.ts +6 -146
- package/dist/agents/connect-targets.js +63 -295
- package/dist/agents/private-key-oauth.d.ts +31 -1
- package/dist/agents/private-key-oauth.js +124 -33
- 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 +1 -2
- package/dist/brand-assets.js +4 -7
- package/dist/brand.d.ts +17 -0
- package/dist/brand.js +24 -4
- package/dist/config/domains.d.ts +55 -28
- package/dist/config/domains.js +85 -41
- 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 +21 -27
- package/dist/contracts/access.js +33 -64
- package/dist/contracts/activity.d.ts +18 -1
- package/dist/contracts/activity.js +70 -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.js +7 -11
- package/dist/contracts/bootstrap.d.ts +791 -0
- package/dist/contracts/bootstrap.js +51 -0
- package/dist/contracts/builds.d.ts +192 -7
- package/dist/contracts/builds.js +84 -21
- 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 +45 -35
- 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 +18 -29
- 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 +17 -0
- package/dist/contracts/crons.js +33 -15
- 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 +6 -10
- package/dist/contracts/docs.js +5 -13
- package/dist/contracts/domains.d.ts +499 -102
- package/dist/contracts/domains.js +169 -58
- package/dist/contracts/email-preferences.d.ts +3 -3
- package/dist/contracts/email-preferences.js +6 -7
- package/dist/contracts/enums.d.ts +26 -26
- package/dist/contracts/enums.js +61 -54
- package/dist/contracts/error-code-meta.d.ts +273 -7
- package/dist/contracts/error-code-meta.js +81 -5
- package/dist/contracts/error-codes.d.ts +5 -5
- package/dist/contracts/error-codes.js +79 -16
- package/dist/contracts/events.d.ts +100 -20
- package/dist/contracts/events.js +107 -20
- package/dist/contracts/execution.d.ts +47 -66
- package/dist/contracts/execution.js +51 -64
- package/dist/contracts/feature-lifecycle.d.ts +70 -14
- package/dist/contracts/feature-lifecycle.js +86 -15
- package/dist/contracts/features.d.ts +100 -37
- package/dist/contracts/features.js +21 -27
- 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 +218 -211
- package/dist/contracts/functions.js +273 -260
- package/dist/contracts/grant-copy.d.ts +43 -0
- package/dist/contracts/grant-copy.js +44 -0
- package/dist/contracts/grants.d.ts +64 -56
- package/dist/contracts/grants.js +124 -23
- package/dist/contracts/ids.d.ts +4 -1
- package/dist/contracts/ids.js +4 -1
- package/dist/contracts/internal.d.ts +5 -4
- package/dist/contracts/internal.js +12 -3
- package/dist/contracts/mcp.d.ts +17 -0
- package/dist/contracts/mcp.js +23 -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 +121 -10
- package/dist/contracts/oauth-resources.js +130 -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 +11 -5
- package/dist/contracts/pages.d.ts +29 -5
- 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.d.ts +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 +116 -18
- package/dist/contracts/publish-archive.js +6 -3
- package/dist/contracts/push-new.d.ts +4 -4
- package/dist/contracts/quotas.js +3 -3
- package/dist/contracts/realtime.d.ts +52 -0
- package/dist/contracts/realtime.js +54 -0
- package/dist/contracts/repository-connections.d.ts +1 -1
- package/dist/contracts/repository-connections.js +6 -2
- package/dist/contracts/resources.d.ts +105 -14
- package/dist/contracts/resources.js +145 -21
- package/dist/contracts/route-inventory.d.ts +358 -0
- package/dist/contracts/route-inventory.js +141 -0
- package/dist/contracts/runtime-api.d.ts +112 -35
- package/dist/contracts/runtime-api.js +86 -66
- package/dist/contracts/runtime-app.d.ts +11 -21
- 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 +45 -19
- package/dist/contracts/runtime-db.js +85 -20
- package/dist/contracts/runtime-purge.js +3 -5
- package/dist/contracts/runtime-services.d.ts +43 -75
- package/dist/contracts/runtime-services.js +29 -49
- package/dist/contracts/runtime-storage.d.ts +14 -14
- package/dist/contracts/runtime-storage.js +28 -13
- package/dist/contracts/sf-config-v1.d.ts +14 -18
- package/dist/contracts/slugs.js +13 -4
- package/dist/contracts/space-config.d.ts +235 -28
- package/dist/contracts/space-config.js +246 -91
- package/dist/contracts/spaces.d.ts +360 -255
- package/dist/contracts/spaces.js +190 -122
- 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 +435 -186
- package/dist/contracts/superadmin-spaces.js +131 -25
- package/dist/contracts/superadmin-teams.d.ts +3 -0
- package/dist/contracts/superadmin-teams.js +1 -2
- package/dist/contracts/superadmin-tenants.d.ts +627 -6
- package/dist/contracts/superadmin-tenants.js +32 -7
- package/dist/contracts/superadmin.d.ts +98 -16
- package/dist/contracts/superadmin.js +63 -10
- package/dist/contracts/tags.d.ts +85 -58
- package/dist/contracts/tags.js +44 -34
- package/dist/contracts/teams.d.ts +72 -9
- package/dist/contracts/teams.js +84 -25
- 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 +1 -0
- 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 +57 -64
- package/dist/contracts/zero.js +68 -66
- 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 +11 -17
- package/dist/docs/agent-prose.js +62 -37
- package/dist/docs/agent-setup.d.ts +72 -41
- package/dist/docs/agent-setup.js +336 -436
- package/dist/docs/catalog.d.ts +147 -89
- package/dist/docs/catalog.js +157 -42
- package/dist/docs/error-docs.d.ts +2102 -1
- package/dist/docs/error-docs.js +285 -16
- 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 +117 -117
- package/dist/docs/skills.js +120 -72
- 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/utils/browser-credential.d.ts +13 -6
- package/dist/utils/browser-credential.js +14 -7
- package/dist/utils/build-settings.d.ts +16 -0
- package/dist/utils/build-settings.js +63 -17
- package/dist/utils/canonical-json.d.ts +3 -5
- package/dist/utils/canonical-json.js +3 -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 +2 -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 +123 -57
- package/dist/utils/egress-policy.fixtures.json +1 -1
- package/dist/utils/generate-space-name.d.ts +3 -8
- package/dist/utils/generate-space-name.js +3 -8
- package/dist/utils/grants.d.ts +0 -1
- package/dist/utils/grants.js +4 -7
- 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 +15 -15
- package/dist/utils/local-space-state.js +34 -23
- 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 +3 -5
- package/dist/utils/one-shot-replay.js +3 -5
- package/dist/utils/page-colors.d.ts +4 -10
- package/dist/utils/page-colors.js +11 -35
- package/dist/utils/page-fonts.js +6 -11
- package/dist/utils/page-preview.d.ts +0 -1
- package/dist/utils/page-preview.js +0 -1
- package/dist/utils/pages.d.ts +22 -11
- package/dist/utils/pages.js +70 -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 +10 -23
- package/dist/utils/publish-policy.js +63 -116
- 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 +4 -0
- package/dist/utils/runtime-upload.js +5 -0
- package/dist/utils/secure-local-file.d.ts +3 -3
- package/dist/utils/secure-local-file.js +18 -24
- package/dist/utils/space-config.d.ts +11 -14
- package/dist/utils/space-config.js +10 -16
- package/dist/utils/static-runtime-policy.d.ts +5 -8
- 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 +17 -84
- package/dist/utils/storage-policy.js +1 -2
- package/dist/utils/upload-session.js +8 -14
- 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 +7 -7
- package/dist/vocabulary.js +30 -16
- package/package.json +14 -2
- 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/docs/catalog.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
import { DOCS_BASE_URL } from "../config/domains.js";
|
|
1
2
|
import type { CliDisclosureTier } from "../vocabulary.js";
|
|
2
3
|
/** Which part of the docs a page belongs to (runtime list + derived type). */
|
|
3
4
|
export declare const DOC_KINDS: readonly ["guide", "cli", "api", "recipe", "workflow", "error"];
|
|
4
|
-
/** Which part of the docs a page belongs to. */
|
|
5
5
|
export type DocKind = (typeof DOC_KINDS)[number];
|
|
6
6
|
/** One searchable documentation page. */
|
|
7
7
|
export interface DocEntry {
|
|
@@ -22,8 +22,12 @@ export interface DocEntry {
|
|
|
22
22
|
/** Short printable body shown by `sf docs <topic>`. */
|
|
23
23
|
readonly body: string;
|
|
24
24
|
}
|
|
25
|
-
/**
|
|
26
|
-
|
|
25
|
+
/**
|
|
26
|
+
* Base URL all bundled docs links resolve against. Owned by the domain registry
|
|
27
|
+
* (`../config/domains.ts`) and re-exported here, where every docs caller
|
|
28
|
+
* already looks for it.
|
|
29
|
+
*/
|
|
30
|
+
export { DOCS_BASE_URL };
|
|
27
31
|
export declare const DOCS_CATALOG: readonly [{
|
|
28
32
|
readonly slug: "quickstart";
|
|
29
33
|
readonly title: "Quickstart";
|
|
@@ -31,7 +35,7 @@ export declare const DOCS_CATALOG: readonly [{
|
|
|
31
35
|
readonly tier: "essential";
|
|
32
36
|
readonly summary: "Publish your first space in under two minutes.";
|
|
33
37
|
readonly keywords: readonly ["start", "getting started", "first", "new", "setup", "hello world"];
|
|
34
|
-
readonly url:
|
|
38
|
+
readonly url: `${string}/quickstart`;
|
|
35
39
|
readonly body: "Install the CLI, run `sf init` in your working directory, then `sf publish` to take the current build live on a new space.";
|
|
36
40
|
}, {
|
|
37
41
|
readonly slug: "publishing";
|
|
@@ -40,7 +44,7 @@ export declare const DOCS_CATALOG: readonly [{
|
|
|
40
44
|
readonly tier: "essential";
|
|
41
45
|
readonly summary: "How `sf publish` builds, uploads, and goes live.";
|
|
42
46
|
readonly keywords: readonly ["publish", "go live", "upload", "release", "artifact"];
|
|
43
|
-
readonly url:
|
|
47
|
+
readonly url: `${string}/publish`;
|
|
44
48
|
readonly body: "`sf publish` snapshots your output directory into an immutable version and promotes it to the production channel. Use `--no-wait` to return before serving finishes.";
|
|
45
49
|
}, {
|
|
46
50
|
readonly slug: "spaces/rename";
|
|
@@ -49,7 +53,7 @@ export declare const DOCS_CATALOG: readonly [{
|
|
|
49
53
|
readonly tier: "full";
|
|
50
54
|
readonly summary: "Change a space slug and its managed view.fast address without breaking old links.";
|
|
51
55
|
readonly keywords: readonly ["space", "rename", "slug", "view.fast", "redirect", "managed hostname"];
|
|
52
|
-
readonly url:
|
|
56
|
+
readonly url: `${string}/operate/spaces`;
|
|
53
57
|
readonly body: "Run `sf spaces update --space <space> --slug <new-slug> --wait`, or PATCH `/v1/spaces/{spaceId}` with `{ \"slug\": \"<new-slug>\" }`. The managed view.fast hostname changes with the slug. Former managed addresses and branch aliases redirect directly to their current counterparts with a temporary, path- and query-preserving 307 for the life of the space unless an operator explicitly releases them. Custom domains stay attached, and immutable version URLs do not change.";
|
|
54
58
|
}, {
|
|
55
59
|
readonly slug: "versions-and-rollback";
|
|
@@ -58,7 +62,7 @@ export declare const DOCS_CATALOG: readonly [{
|
|
|
58
62
|
readonly tier: "essential";
|
|
59
63
|
readonly summary: "Every publish is an immutable version you can roll back to.";
|
|
60
64
|
readonly keywords: readonly ["version", "rollback", "history", "revert", "channel", "promote"];
|
|
61
|
-
readonly url:
|
|
65
|
+
readonly url: `${string}/rollback`;
|
|
62
66
|
readonly body: "List versions with `sf versions`, promote one to a channel, and undo a bad publish instantly with `sf rollback`.";
|
|
63
67
|
}, {
|
|
64
68
|
readonly slug: "anonymous-publish";
|
|
@@ -67,7 +71,7 @@ export declare const DOCS_CATALOG: readonly [{
|
|
|
67
71
|
readonly tier: "essential";
|
|
68
72
|
readonly summary: "Publish without an account, then claim the space with its key.";
|
|
69
73
|
readonly keywords: readonly ["anonymous", "claim", "unclaimed", "agent", "token", "adopt"];
|
|
70
|
-
readonly url:
|
|
74
|
+
readonly url: `${string}/anonymous-publish`;
|
|
71
75
|
readonly body: "Publish without logging in to get an instant URL and a space key; run `sf spaces claim` with that key to bind the space to your account.";
|
|
72
76
|
}, {
|
|
73
77
|
readonly slug: "agents";
|
|
@@ -76,7 +80,7 @@ export declare const DOCS_CATALOG: readonly [{
|
|
|
76
80
|
readonly tier: "essential";
|
|
77
81
|
readonly summary: "Let an AI agent publish and operate spaces via the CLI, API, or MCP.";
|
|
78
82
|
readonly keywords: readonly ["agent", "ai", "mcp", "model context protocol", "automation", "assistant"];
|
|
79
|
-
readonly url:
|
|
83
|
+
readonly url: `${string}/agents`;
|
|
80
84
|
readonly body: "Agents use the same REST API and CLI as humans. Install the MCP server with `sf mcp install` so an assistant can publish, inspect, and manage spaces with structured tools.";
|
|
81
85
|
}, {
|
|
82
86
|
readonly slug: "workflow/publish-curl";
|
|
@@ -85,17 +89,17 @@ export declare const DOCS_CATALOG: readonly [{
|
|
|
85
89
|
readonly tier: "full";
|
|
86
90
|
readonly summary: "Publish a file or zipped output folder directly to /v1/publish. No account, CLI install, or MCP setup is required for anonymous publishes.";
|
|
87
91
|
readonly keywords: readonly ["publish", "curl", "anonymous", "no install", "claim"];
|
|
88
|
-
readonly url:
|
|
92
|
+
readonly url: `${string}/agents#publish-with-curl`;
|
|
89
93
|
readonly body: "curl publish file folder archive zip anonymous no account no install live URL immutable version claim link /v1/publish";
|
|
90
94
|
}, {
|
|
91
95
|
readonly slug: "workflow/publish-receipt";
|
|
92
96
|
readonly title: "Publish receipt fields";
|
|
93
97
|
readonly kind: "workflow";
|
|
94
98
|
readonly tier: "full";
|
|
95
|
-
readonly summary: "Use the receipt as the source of truth. For anonymous publishes, claim.url is the private-site door and claim.claimUrl is the browser claim link; liveUrl and immutableUrl identify resources for automation.";
|
|
99
|
+
readonly summary: "Use the receipt as the source of truth. For anonymous publishes, claim.url is the private-site door and claim.claimUrl is the browser claim link; space.liveUrl and version.immutableUrl identify resources for automation.";
|
|
96
100
|
readonly keywords: readonly ["receipt", "share", "claim", "diagnostics"];
|
|
97
|
-
readonly url:
|
|
98
|
-
readonly body: "receipt liveUrl open url immutableUrl claim expiresAt diagnostics links finalize promote upload errors docsUrl";
|
|
101
|
+
readonly url: `${string}/api#publish`;
|
|
102
|
+
readonly body: "receipt space.liveUrl open url version.immutableUrl claim expiresAt diagnostics links finalize promote upload errors docsUrl";
|
|
99
103
|
}, {
|
|
100
104
|
readonly slug: "workflow/continue-after-claim";
|
|
101
105
|
readonly title: "Keep publishing after the user claims";
|
|
@@ -103,7 +107,7 @@ export declare const DOCS_CATALOG: readonly [{
|
|
|
103
107
|
readonly tier: "full";
|
|
104
108
|
readonly summary: "After the owner claims an anonymous space with continuation enabled, exchange the saved space key once for a durable space-scoped access token, save it over the key, and keep publishing.";
|
|
105
109
|
readonly keywords: readonly ["continue", "exchange", "claim token", "space_claimed_credential_available", "continuation"];
|
|
106
|
-
readonly url:
|
|
110
|
+
readonly url: `${string}/agents#continue-after-claim`;
|
|
107
111
|
readonly body: "continue continuation space key claim token exchange voucher publish execute POST /v1/claim/exchange space_claimed_credential_available continuation_used continuation_unavailable durable access token state.json update after claim";
|
|
108
112
|
}, {
|
|
109
113
|
readonly slug: "workflow/secret-handling";
|
|
@@ -112,7 +116,7 @@ export declare const DOCS_CATALOG: readonly [{
|
|
|
112
116
|
readonly tier: "full";
|
|
113
117
|
readonly summary: "Treat space keys, upload tokens, device codes, API keys, auth files, and .spacefast state as credentials. Do not print, commit, archive, or log them.";
|
|
114
118
|
readonly keywords: readonly ["secret", "token", "claim token", "redact"];
|
|
115
|
-
readonly url:
|
|
119
|
+
readonly url: `${string}/agents#secret-handling`;
|
|
116
120
|
readonly body: "secret handling claim token upload token device code API key auth file .spacefast state redact logs transcripts archive";
|
|
117
121
|
}, {
|
|
118
122
|
readonly slug: "workflow/cli-surface";
|
|
@@ -121,17 +125,17 @@ export declare const DOCS_CATALOG: readonly [{
|
|
|
121
125
|
readonly tier: "full";
|
|
122
126
|
readonly summary: "Use sf for repeat work: publish, versions, rollback, logs, domains, sharing, teams, API calls, and On-Device MCP serving.";
|
|
123
127
|
readonly keywords: readonly ["sf", "cli", "spacefast", "mcp", "json"];
|
|
124
|
-
readonly url:
|
|
128
|
+
readonly url: `${string}/cli`;
|
|
125
129
|
readonly body: "sf spacefast CLI publish versions rollback logs domains share teams api mcp setup profile login --json";
|
|
126
130
|
}, {
|
|
127
131
|
readonly slug: "workflow/mcp-local";
|
|
128
132
|
readonly title: "On-Device MCP through the CLI";
|
|
129
133
|
readonly kind: "workflow";
|
|
130
134
|
readonly tier: "full";
|
|
131
|
-
readonly summary: "Run sf mcp for stdio
|
|
132
|
-
readonly keywords: readonly ["mcp", "stdio", "
|
|
133
|
-
readonly url:
|
|
134
|
-
readonly body: "MCP on-device local CLI stdio
|
|
135
|
+
readonly summary: "Run sf mcp for the stdio On-Device MCP server in the local checkout.";
|
|
136
|
+
readonly keywords: readonly ["mcp", "stdio", "on-device", "local"];
|
|
137
|
+
readonly url: `${string}/agents#mcp`;
|
|
138
|
+
readonly body: "MCP on-device local CLI stdio sf mcp roots files workspace tool calls structuredContent apps";
|
|
135
139
|
}, {
|
|
136
140
|
readonly slug: "workflow/space-files";
|
|
137
141
|
readonly title: "Space file conventions";
|
|
@@ -139,7 +143,7 @@ export declare const DOCS_CATALOG: readonly [{
|
|
|
139
143
|
readonly tier: "full";
|
|
140
144
|
readonly summary: "Spacefast recognizes _redirects, _headers, nearest 404.html, and sf.jsonc. Published artifacts are served as files; server code is not executed.";
|
|
141
145
|
readonly keywords: readonly ["_redirects", "_headers", "sf.jsonc", "spacefast.jsonc", "404"];
|
|
142
|
-
readonly url:
|
|
146
|
+
readonly url: `${string}/configuration`;
|
|
143
147
|
readonly body: "_redirects _headers 404.html sf.jsonc artifact server code not executed proxy rewrite headers";
|
|
144
148
|
}, {
|
|
145
149
|
readonly slug: "workflow/domains-diagnostics";
|
|
@@ -148,7 +152,7 @@ export declare const DOCS_CATALOG: readonly [{
|
|
|
148
152
|
readonly tier: "full";
|
|
149
153
|
readonly summary: "Use domain diagnostics for attach, verification, DNS, nameserver, and rollback-safe recovery steps.";
|
|
150
154
|
readonly keywords: readonly ["domain", "dns", "verification"];
|
|
151
|
-
readonly url:
|
|
155
|
+
readonly url: `${string}/domains`;
|
|
152
156
|
readonly body: "domains DNS diagnostics attach verification nameservers custom domain certificate recovery instructions";
|
|
153
157
|
}, {
|
|
154
158
|
readonly slug: "workflow/logs-diagnostics";
|
|
@@ -157,17 +161,17 @@ export declare const DOCS_CATALOG: readonly [{
|
|
|
157
161
|
readonly tier: "full";
|
|
158
162
|
readonly summary: "Use access logs for traffic questions, runtime logs for serving diagnostics, and build logs for publish/finalize failures.";
|
|
159
163
|
readonly keywords: readonly ["logs", "diagnostics", "build logs"];
|
|
160
|
-
readonly url:
|
|
164
|
+
readonly url: `${string}/builds#watch-and-manage-builds`;
|
|
161
165
|
readonly body: "logs access runtime build diagnostics publish finalize failures request id docsUrl suggestions recovery";
|
|
162
166
|
}, {
|
|
163
167
|
readonly slug: "workflow/agent-auth";
|
|
164
|
-
readonly title: "
|
|
168
|
+
readonly title: "Machine OAuth clients";
|
|
165
169
|
readonly kind: "workflow";
|
|
166
170
|
readonly tier: "full";
|
|
167
|
-
readonly summary: "
|
|
168
|
-
readonly keywords: readonly ["oauth", "
|
|
169
|
-
readonly url:
|
|
170
|
-
readonly body: "OAuth
|
|
171
|
+
readonly summary: "Use team-owned OAuth clients with private_key_jwt and SPACEFAST_AGENT_CONFIG for On-Device MCP and automation. Do not use broad shared API keys.";
|
|
172
|
+
readonly keywords: readonly ["oauth", "client credentials", "private_key_jwt", "SPACEFAST_AGENT_CONFIG"];
|
|
173
|
+
readonly url: `${string}/agents#agent-accounts`;
|
|
174
|
+
readonly body: "OAuth client private_key_jwt SPACEFAST_AGENT_CONFIG client credentials scoped token mcp automation teams";
|
|
171
175
|
}, {
|
|
172
176
|
readonly slug: "custom-domains";
|
|
173
177
|
readonly title: "Custom domains";
|
|
@@ -175,7 +179,7 @@ export declare const DOCS_CATALOG: readonly [{
|
|
|
175
179
|
readonly tier: "full";
|
|
176
180
|
readonly summary: "Attach your own domain and let Spacefast manage TLS.";
|
|
177
181
|
readonly keywords: readonly ["domain", "dns", "https", "tls", "certificate", "cname", "nameserver"];
|
|
178
|
-
readonly url:
|
|
182
|
+
readonly url: `${string}/domains`;
|
|
179
183
|
readonly body: "Add a domain with `sf domains add`, point DNS at Spacefast, and a certificate is issued automatically. Inspect status with `sf domains check`.";
|
|
180
184
|
}, {
|
|
181
185
|
readonly slug: "configuration";
|
|
@@ -184,7 +188,7 @@ export declare const DOCS_CATALOG: readonly [{
|
|
|
184
188
|
readonly tier: "full";
|
|
185
189
|
readonly summary: "Ship space metadata and SPA settings alongside your files.";
|
|
186
190
|
readonly keywords: readonly ["config", "sf.jsonc", "spacefast.jsonc", "metadata", "spa", "schema", "settings"];
|
|
187
|
-
readonly url:
|
|
191
|
+
readonly url: `${string}/configuration`;
|
|
188
192
|
readonly body: "Add `sf.jsonc` at your publish root so configuration travels with each version and rolls back with it. `sf init` scaffolds it with a `$schema` pointer for autocomplete.";
|
|
189
193
|
}, {
|
|
190
194
|
readonly slug: "environment-variables";
|
|
@@ -193,7 +197,7 @@ export declare const DOCS_CATALOG: readonly [{
|
|
|
193
197
|
readonly tier: "full";
|
|
194
198
|
readonly summary: "Set build-time configuration and secrets per space.";
|
|
195
199
|
readonly keywords: readonly ["env", "environment", "secrets", "config", "variables", "dotenv"];
|
|
196
|
-
readonly url:
|
|
200
|
+
readonly url: `${string}/configuration`;
|
|
197
201
|
readonly body: "Manage a space's variables with `sf env set` / `sf env ls`, or import a dotenv file with `sf env import`. Secret values are masked in `--json` output.";
|
|
198
202
|
}, {
|
|
199
203
|
readonly slug: "access-control";
|
|
@@ -202,7 +206,7 @@ export declare const DOCS_CATALOG: readonly [{
|
|
|
202
206
|
readonly tier: "full";
|
|
203
207
|
readonly summary: "Create scoped Grants, invite People, and manage Links or credentials.";
|
|
204
208
|
readonly keywords: readonly ["access", "share", "people", "links", "private", "team", "public"];
|
|
205
|
-
readonly url:
|
|
209
|
+
readonly url: `${string}/access`;
|
|
206
210
|
readonly body: "Use `sf share grant`, `sf share people`, `sf share link`, `sf share password`, or `sf share token`. Inspect one route with `sf share check`; every audience uses the same path, capability, target, and constraint evaluator.";
|
|
207
211
|
}, {
|
|
208
212
|
readonly slug: "redirects";
|
|
@@ -211,7 +215,7 @@ export declare const DOCS_CATALOG: readonly [{
|
|
|
211
215
|
readonly tier: "full";
|
|
212
216
|
readonly summary: "Declare redirect rules that travel with each version.";
|
|
213
217
|
readonly keywords: readonly ["redirect", "rewrite", "routing", "301", "302", "_redirects"];
|
|
214
|
-
readonly url:
|
|
218
|
+
readonly url: `${string}/redirects`;
|
|
215
219
|
readonly body: "Add a `_redirects` file at your publish root to redirect, rewrite, or proxy; it compiles at finalize and rolls back with the version. Inspect resolution with `sf routing inspect`.";
|
|
216
220
|
}, {
|
|
217
221
|
readonly slug: "headers";
|
|
@@ -220,7 +224,7 @@ export declare const DOCS_CATALOG: readonly [{
|
|
|
220
224
|
readonly tier: "full";
|
|
221
225
|
readonly summary: "Attach supported response headers by path.";
|
|
222
226
|
readonly keywords: readonly ["headers", "cache", "security", "_headers", "cors"];
|
|
223
|
-
readonly url:
|
|
227
|
+
readonly url: `${string}/headers`;
|
|
224
228
|
readonly body: "Add a `_headers` file at your publish root to set or remove supported response headers per path.";
|
|
225
229
|
}, {
|
|
226
230
|
readonly slug: "builds";
|
|
@@ -229,7 +233,7 @@ export declare const DOCS_CATALOG: readonly [{
|
|
|
229
233
|
readonly tier: "full";
|
|
230
234
|
readonly summary: "Connect a repository so pushes build and publish automatically.";
|
|
231
235
|
readonly keywords: readonly ["build", "git", "github", "ci", "push", "connect", "preview"];
|
|
232
|
-
readonly url:
|
|
236
|
+
readonly url: `${string}/builds`;
|
|
233
237
|
readonly body: "Connect a repository with `sf git connect`; each push runs your build on Spacefast and publishes a version. Branch and pull-request previews are private by default; use Open for yourself or create a scoped Link for reviewers.";
|
|
234
238
|
}, {
|
|
235
239
|
readonly slug: "runtimes";
|
|
@@ -238,7 +242,7 @@ export declare const DOCS_CATALOG: readonly [{
|
|
|
238
242
|
readonly tier: "full";
|
|
239
243
|
readonly summary: "Run code on a space with Zero or Functions.";
|
|
240
244
|
readonly keywords: readonly ["runtime", "zero", "functions", "server", "dynamic", "code", "backend", "sf.jsonc"];
|
|
241
|
-
readonly url:
|
|
245
|
+
readonly url: `${string}/runtimes`;
|
|
242
246
|
readonly body: "A space serves published files until you declare a `runtime` block in sf.jsonc. Every space has its own runtime site. Zero is a capsule with its own database and transactions; Functions is a Cloudflare worker with one `fetch` handler and any npm package. Both are available on every plan and compile during `sf publish`.";
|
|
243
247
|
}, {
|
|
244
248
|
readonly slug: "runtimes/zero";
|
|
@@ -247,7 +251,7 @@ export declare const DOCS_CATALOG: readonly [{
|
|
|
247
251
|
readonly tier: "full";
|
|
248
252
|
readonly summary: "A capsule with a database: schema, queries, mutations, endpoints.";
|
|
249
253
|
readonly keywords: readonly ["zero", "capsule", "database", "schema", "query", "mutation", "endpoint", "transaction", "sql", "sf dev"];
|
|
250
|
-
readonly url:
|
|
254
|
+
readonly url: `${string}/zero-runtime`;
|
|
251
255
|
readonly body: "Zero is for apps where the data is the point. Write one capsule — schema, queries, mutations, endpoints — start it locally with `sf dev`, and `sf publish` puts it live with its own database and dedicated runtime site on every plan.";
|
|
252
256
|
}, {
|
|
253
257
|
readonly slug: "runtimes/functions";
|
|
@@ -256,7 +260,7 @@ export declare const DOCS_CATALOG: readonly [{
|
|
|
256
260
|
readonly tier: "full";
|
|
257
261
|
readonly summary: "A worker for your space: one `fetch` handler, any npm package.";
|
|
258
262
|
readonly keywords: readonly ["functions", "worker", "fetch", "ssr", "cloudflare", "npm", "handler", "server", "api"];
|
|
259
|
-
readonly url:
|
|
263
|
+
readonly url: `${string}/runtimes/functions`;
|
|
260
264
|
readonly body: "Functions runs a Cloudflare worker for your space: a default export with a `fetch` method, served from your space's own origin, so requests no file answers reach your code. It is available on every plan. Opt into a database with `\"database\": true`. Automatic Next.js builds use a private, version-scoped origin cache for the Data Cache, `revalidateTag()`, `revalidatePath()`, and ISR regeneration leases; no cache credential enters the worker.";
|
|
261
265
|
}, {
|
|
262
266
|
readonly slug: "collab";
|
|
@@ -265,7 +269,7 @@ export declare const DOCS_CATALOG: readonly [{
|
|
|
265
269
|
readonly tier: "full";
|
|
266
270
|
readonly summary: "Leave comments directly on a space.";
|
|
267
271
|
readonly keywords: readonly ["comments", "collaboration", "feedback"];
|
|
268
|
-
readonly url:
|
|
272
|
+
readonly url: `${string}/collab`;
|
|
269
273
|
readonly body: "Leave comments directly on a live space and archive them from the dashboard or with `sf comments`.";
|
|
270
274
|
}, {
|
|
271
275
|
readonly slug: "analytics";
|
|
@@ -274,7 +278,7 @@ export declare const DOCS_CATALOG: readonly [{
|
|
|
274
278
|
readonly tier: "full";
|
|
275
279
|
readonly summary: "See traffic and visitor counts for a space.";
|
|
276
280
|
readonly keywords: readonly ["analytics", "traffic", "visitors", "stats", "metrics", "pageviews"];
|
|
277
|
-
readonly url:
|
|
281
|
+
readonly url: `${string}/cli`;
|
|
278
282
|
readonly body: "Inspect a space's traffic with `sf analytics`; history depth and granularity depend on the team's plan.";
|
|
279
283
|
}, {
|
|
280
284
|
readonly slug: "proxy-routes";
|
|
@@ -283,7 +287,7 @@ export declare const DOCS_CATALOG: readonly [{
|
|
|
283
287
|
readonly tier: "reference";
|
|
284
288
|
readonly summary: "Proxy selected paths to an upstream origin.";
|
|
285
289
|
readonly keywords: readonly ["proxy", "upstream", "route", "api", "backend", "rewrite"];
|
|
286
|
-
readonly url:
|
|
290
|
+
readonly url: `${string}/proxy-routes`;
|
|
287
291
|
readonly body: "Forward specific path prefixes to an external upstream so a space can front an external API without exposing its origin.";
|
|
288
292
|
}, {
|
|
289
293
|
readonly slug: "image-acceleration";
|
|
@@ -292,7 +296,7 @@ export declare const DOCS_CATALOG: readonly [{
|
|
|
292
296
|
readonly tier: "reference";
|
|
293
297
|
readonly summary: "Serve optimized, resized images from your space.";
|
|
294
298
|
readonly keywords: readonly ["image", "images", "optimization", "resize", "cdn", "acceleration"];
|
|
295
|
-
readonly url:
|
|
299
|
+
readonly url: `${string}/image-acceleration`;
|
|
296
300
|
readonly body: "Spacefast can resize and re-encode images on the fly so you ship one source asset and serve device-appropriate variants.";
|
|
297
301
|
}, {
|
|
298
302
|
readonly slug: "integrations/nextjs";
|
|
@@ -301,8 +305,8 @@ export declare const DOCS_CATALOG: readonly [{
|
|
|
301
305
|
readonly tier: "reference";
|
|
302
306
|
readonly summary: "Build and publish a full Next.js app with OpenNext.";
|
|
303
307
|
readonly keywords: readonly ["nextjs", "next", "react", "framework", "integration", "opennext", "isr", "data cache", "revalidateTag", "revalidatePath"];
|
|
304
|
-
readonly url:
|
|
305
|
-
readonly body: "Run `sf publish` in a Next.js project. Spacefast
|
|
308
|
+
readonly url: `${string}/integrations/nextjs`;
|
|
309
|
+
readonly body: "Run `sf publish` in a Next.js project. Spacefast reads the resolved build mode from Next itself: `output: \"export\"` ships the generated browser files directly, while server-rendered apps are bundled with pinned OpenNext and publish their browser assets plus a Functions worker. The automatic adapter keeps the Next Data Cache and tag invalidations in private origin storage scoped to the exact space and version, so cached data survives cold Worker isolates; `revalidateTag()` and `revalidatePath()` invalidate that same store. Concurrent stale ISR requests share a 30-second regeneration lease, with at most 4,096 leases active for one version. Each cached value is limited to 4 MiB; one version may retain 128 MiB, 4,096 entries, and 8,192 tags. A project with its own `open-next.config.ts` owns its adapters instead of receiving Spacefast's automatic cache config.";
|
|
306
310
|
}, {
|
|
307
311
|
readonly slug: "integrations/vite";
|
|
308
312
|
readonly title: "Vite integration";
|
|
@@ -310,7 +314,7 @@ export declare const DOCS_CATALOG: readonly [{
|
|
|
310
314
|
readonly tier: "reference";
|
|
311
315
|
readonly summary: "Publish a Vite build to a space.";
|
|
312
316
|
readonly keywords: readonly ["vite", "react", "vue", "svelte", "framework", "integration", "build"];
|
|
313
|
-
readonly url:
|
|
317
|
+
readonly url: `${string}/integrations/vite`;
|
|
314
318
|
readonly body: "Run your Vite build and publish `dist/` with `sf publish`; `sf init` detects Vite and preconfigures the output directory.";
|
|
315
319
|
}, {
|
|
316
320
|
readonly slug: "limits";
|
|
@@ -319,7 +323,7 @@ export declare const DOCS_CATALOG: readonly [{
|
|
|
319
323
|
readonly tier: "reference";
|
|
320
324
|
readonly summary: "File counts, sizes, and rate limits per plan.";
|
|
321
325
|
readonly keywords: readonly ["limits", "quota", "size", "rate limit", "plan", "storage"];
|
|
322
|
-
readonly url:
|
|
326
|
+
readonly url: `${string}/account/plans`;
|
|
323
327
|
readonly body: "Reference for per-space file counts, archive and file size ceilings, and rate limits, which vary by plan.";
|
|
324
328
|
}, {
|
|
325
329
|
readonly slug: "troubleshooting";
|
|
@@ -328,7 +332,7 @@ export declare const DOCS_CATALOG: readonly [{
|
|
|
328
332
|
readonly tier: "reference";
|
|
329
333
|
readonly summary: "Diagnose failed publishes, builds, and domains.";
|
|
330
334
|
readonly keywords: readonly ["troubleshoot", "debug", "error", "doctor", "diagnose", "fix"];
|
|
331
|
-
readonly url:
|
|
335
|
+
readonly url: `${string}/troubleshooting`;
|
|
332
336
|
readonly body: "Common publish, build, and domain failures and how to resolve them. Run `sf doctor` to check your local setup and auth state.";
|
|
333
337
|
}, {
|
|
334
338
|
readonly slug: "migrate-from";
|
|
@@ -337,7 +341,7 @@ export declare const DOCS_CATALOG: readonly [{
|
|
|
337
341
|
readonly tier: "reference";
|
|
338
342
|
readonly summary: "Move from Netlify, Vercel, and other hosts.";
|
|
339
343
|
readonly keywords: readonly ["migrate", "netlify", "vercel", "cloudflare", "github pages", "here.now", "import"];
|
|
340
|
-
readonly url:
|
|
344
|
+
readonly url: `${string}/migrate-from`;
|
|
341
345
|
readonly body: "Step-by-step migrations that map another host's build output, redirects, and headers onto a Spacefast space.";
|
|
342
346
|
}, {
|
|
343
347
|
readonly slug: "cli";
|
|
@@ -346,7 +350,7 @@ export declare const DOCS_CATALOG: readonly [{
|
|
|
346
350
|
readonly tier: "essential";
|
|
347
351
|
readonly summary: "Install, authenticate, and the first-publish command path.";
|
|
348
352
|
readonly keywords: readonly ["cli", "sf", "command", "install", "overview", "help"];
|
|
349
|
-
readonly url:
|
|
353
|
+
readonly url: `${string}/cli`;
|
|
350
354
|
readonly body: "Run `sf help` for the essential commands, `sf help --full` for everything. The CLI emits a `{ data }` / `{ error }` JSON envelope under `--json`.";
|
|
351
355
|
}, {
|
|
352
356
|
readonly slug: "cli/publish";
|
|
@@ -355,7 +359,7 @@ export declare const DOCS_CATALOG: readonly [{
|
|
|
355
359
|
readonly tier: "essential";
|
|
356
360
|
readonly summary: "Build, upload, and take the current output live on a space.";
|
|
357
361
|
readonly keywords: readonly ["publish", "sf publish", "go live", "upload", "release"];
|
|
358
|
-
readonly url:
|
|
362
|
+
readonly url: `${string}/cli`;
|
|
359
363
|
readonly body: "`sf publish [DIR]` snapshots a directory into an immutable version and promotes it to the production channel. Add `--no-wait` to return before serving finishes.";
|
|
360
364
|
}, {
|
|
361
365
|
readonly slug: "login";
|
|
@@ -364,7 +368,7 @@ export declare const DOCS_CATALOG: readonly [{
|
|
|
364
368
|
readonly tier: "essential";
|
|
365
369
|
readonly summary: "Authenticate the CLI with your Spacefast account.";
|
|
366
370
|
readonly keywords: readonly ["login", "auth", "authenticate", "token", "device", "signin"];
|
|
367
|
-
readonly url:
|
|
371
|
+
readonly url: `${string}/cli`;
|
|
368
372
|
readonly body: "`sf login` starts the device-authorization flow; for non-interactive use pass `--token` or set `SPACEFAST_TOKEN`.";
|
|
369
373
|
}, {
|
|
370
374
|
readonly slug: "init";
|
|
@@ -373,7 +377,7 @@ export declare const DOCS_CATALOG: readonly [{
|
|
|
373
377
|
readonly tier: "essential";
|
|
374
378
|
readonly summary: "Scaffold an sf.jsonc config in the current directory.";
|
|
375
379
|
readonly keywords: readonly ["init", "config", "scaffold", "sf.jsonc", "setup"];
|
|
376
|
-
readonly url:
|
|
380
|
+
readonly url: `${string}/cli`;
|
|
377
381
|
readonly body: "`sf init` detects your framework and writes a starter `sf.jsonc` so subsequent `sf publish` runs are zero-config.";
|
|
378
382
|
}, {
|
|
379
383
|
readonly slug: "claim";
|
|
@@ -382,7 +386,7 @@ export declare const DOCS_CATALOG: readonly [{
|
|
|
382
386
|
readonly tier: "essential";
|
|
383
387
|
readonly summary: "Attach an anonymously-published space to your account.";
|
|
384
388
|
readonly keywords: readonly ["claim", "anonymous", "attach", "token", "adopt", "spaces"];
|
|
385
|
-
readonly url:
|
|
389
|
+
readonly url: `${string}/cli`;
|
|
386
390
|
readonly body: "After an agent publishes anonymously, run `sf spaces claim` with the space key to bind the space to your account.";
|
|
387
391
|
}, {
|
|
388
392
|
readonly slug: "cli/spaces";
|
|
@@ -391,7 +395,7 @@ export declare const DOCS_CATALOG: readonly [{
|
|
|
391
395
|
readonly tier: "full";
|
|
392
396
|
readonly summary: "List, inspect, download, duplicate, transfer, and remove spaces.";
|
|
393
397
|
readonly keywords: readonly ["spaces", "space", "ls", "get", "download", "duplicate", "rm", "transfer"];
|
|
394
|
-
readonly url:
|
|
398
|
+
readonly url: `${string}/cli`;
|
|
395
399
|
readonly body: "The `sf spaces` group manages spaces: `ls`, `get`, `claim`, `download`, `duplicate`, `transfer`, and `rm`. Use `sf spaces download --version <ref>` to retrieve one immutable version.";
|
|
396
400
|
}, {
|
|
397
401
|
readonly slug: "cli/versions";
|
|
@@ -400,7 +404,7 @@ export declare const DOCS_CATALOG: readonly [{
|
|
|
400
404
|
readonly tier: "full";
|
|
401
405
|
readonly summary: "List, inspect, and remove immutable versions.";
|
|
402
406
|
readonly keywords: readonly ["versions", "version", "ls", "get", "rm", "rollback", "history"];
|
|
403
|
-
readonly url:
|
|
407
|
+
readonly url: `${string}/cli`;
|
|
404
408
|
readonly body: "`sf versions ls` shows a space's history; `sf versions get` inspects one and `sf rollback` promotes an earlier version back to live.";
|
|
405
409
|
}, {
|
|
406
410
|
readonly slug: "cli/channels";
|
|
@@ -409,7 +413,7 @@ export declare const DOCS_CATALOG: readonly [{
|
|
|
409
413
|
readonly tier: "full";
|
|
410
414
|
readonly summary: "List channels and see which version each points at.";
|
|
411
415
|
readonly keywords: readonly ["channels", "channel", "promote", "production", "preview", "history"];
|
|
412
|
-
readonly url:
|
|
416
|
+
readonly url: `${string}/cli`;
|
|
413
417
|
readonly body: "`sf channels ls` lists a space's channels and their current version; `sf channels history` shows past pointer moves. Move a channel with `sf promote`.";
|
|
414
418
|
}, {
|
|
415
419
|
readonly slug: "cli/domains";
|
|
@@ -418,7 +422,7 @@ export declare const DOCS_CATALOG: readonly [{
|
|
|
418
422
|
readonly tier: "full";
|
|
419
423
|
readonly summary: "Add, check, and manage custom domains and DNS.";
|
|
420
424
|
readonly keywords: readonly ["domains", "domain", "dns", "add", "check", "nameservers", "diagnostics"];
|
|
421
|
-
readonly url:
|
|
425
|
+
readonly url: `${string}/cli`;
|
|
422
426
|
readonly body: "The `sf domains` group covers `add`, `check`, `diagnostics`, `ls`, `rm`, and a full `dns` subtree for managing records and nameservers.";
|
|
423
427
|
}, {
|
|
424
428
|
readonly slug: "cli/env";
|
|
@@ -427,7 +431,7 @@ export declare const DOCS_CATALOG: readonly [{
|
|
|
427
431
|
readonly tier: "full";
|
|
428
432
|
readonly summary: "Set, list, import, and pull a space's variables.";
|
|
429
433
|
readonly keywords: readonly ["env", "environment", "variables", "secrets", "set", "import", "pull"];
|
|
430
|
-
readonly url:
|
|
434
|
+
readonly url: `${string}/cli`;
|
|
431
435
|
readonly body: "`sf env set` / `sf env ls` manage a space's variables; `sf env import` loads a dotenv file and `sf env pull` writes them back out.";
|
|
432
436
|
}, {
|
|
433
437
|
readonly slug: "cli/builds";
|
|
@@ -436,7 +440,7 @@ export declare const DOCS_CATALOG: readonly [{
|
|
|
436
440
|
readonly tier: "full";
|
|
437
441
|
readonly summary: "List, inspect, and retry cloud builds.";
|
|
438
442
|
readonly keywords: readonly ["builds", "build", "ls", "logs", "retry", "cancel", "ci"];
|
|
439
|
-
readonly url:
|
|
443
|
+
readonly url: `${string}/cli`;
|
|
440
444
|
readonly body: "`sf builds ls` lists cloud builds; `sf builds logs`, `sf builds retry`, and `sf builds cancel` operate on a single build.";
|
|
441
445
|
}, {
|
|
442
446
|
readonly slug: "cli/git";
|
|
@@ -445,7 +449,7 @@ export declare const DOCS_CATALOG: readonly [{
|
|
|
445
449
|
readonly tier: "full";
|
|
446
450
|
readonly summary: "Connect a repository for push-to-publish builds.";
|
|
447
451
|
readonly keywords: readonly ["git", "github", "connect", "repository", "ci", "sync", "disconnect"];
|
|
448
|
-
readonly url:
|
|
452
|
+
readonly url: `${string}/cli`;
|
|
449
453
|
readonly body: "`sf git connect` links a repository so pushes build and publish automatically; `sf git ls`, `sf git sync`, and `sf git disconnect` manage the connection.";
|
|
450
454
|
}, {
|
|
451
455
|
readonly slug: "cli/access";
|
|
@@ -454,7 +458,7 @@ export declare const DOCS_CATALOG: readonly [{
|
|
|
454
458
|
readonly tier: "full";
|
|
455
459
|
readonly summary: "Emergency visitor-session revocation.";
|
|
456
460
|
readonly keywords: readonly ["access", "sessions", "revoke", "logout"];
|
|
457
|
-
readonly url:
|
|
461
|
+
readonly url: `${string}/cli`;
|
|
458
462
|
readonly body: "Use `sf access logout-all` to revoke every opened visitor session. Define audience-specific network restrictions on the corresponding Grant.";
|
|
459
463
|
}, {
|
|
460
464
|
readonly slug: "cli/teams";
|
|
@@ -463,16 +467,16 @@ export declare const DOCS_CATALOG: readonly [{
|
|
|
463
467
|
readonly tier: "full";
|
|
464
468
|
readonly summary: "Create teams, invite members, and switch context.";
|
|
465
469
|
readonly keywords: readonly ["teams", "team", "members", "invitations", "switch", "create"];
|
|
466
|
-
readonly url:
|
|
470
|
+
readonly url: `${string}/cli`;
|
|
467
471
|
readonly body: "`sf teams create` makes a team, `sf teams invitations add` invites people, `sf teams members ls` lists them, and `sf teams switch` sets the active team.";
|
|
468
472
|
}, {
|
|
469
473
|
readonly slug: "cli/api-keys";
|
|
470
474
|
readonly title: "sf api-keys";
|
|
471
475
|
readonly kind: "cli";
|
|
472
476
|
readonly tier: "full";
|
|
473
|
-
readonly summary: "Create and revoke API keys for the
|
|
477
|
+
readonly summary: "Create and revoke API keys for the Spacefast API.";
|
|
474
478
|
readonly keywords: readonly ["api-keys", "api key", "token", "create", "revoke", "list", "credential"];
|
|
475
|
-
readonly url:
|
|
479
|
+
readonly url: `${string}/cli`;
|
|
476
480
|
readonly body: "`sf api-keys create` mints a bearer key (shown once, masked in `--json`); `sf api-keys list` and `sf api-keys revoke` manage existing keys.";
|
|
477
481
|
}, {
|
|
478
482
|
readonly slug: "cli/analytics";
|
|
@@ -481,7 +485,7 @@ export declare const DOCS_CATALOG: readonly [{
|
|
|
481
485
|
readonly tier: "full";
|
|
482
486
|
readonly summary: "Print traffic and visitor counts for a space.";
|
|
483
487
|
readonly keywords: readonly ["analytics", "traffic", "visitors", "stats", "metrics"];
|
|
484
|
-
readonly url:
|
|
488
|
+
readonly url: `${string}/cli`;
|
|
485
489
|
readonly body: "`sf analytics` reports a space's traffic; history depth and granularity depend on the team's plan.";
|
|
486
490
|
}, {
|
|
487
491
|
readonly slug: "cli/api";
|
|
@@ -490,7 +494,7 @@ export declare const DOCS_CATALOG: readonly [{
|
|
|
490
494
|
readonly tier: "full";
|
|
491
495
|
readonly summary: "Call the core public API through a safe escape hatch.";
|
|
492
496
|
readonly keywords: readonly ["api", "sf api", "http", "raw", "request", "curl", "endpoint"];
|
|
493
|
-
readonly url:
|
|
497
|
+
readonly url: `${string}/cli`;
|
|
494
498
|
readonly body: "`sf api <METHOD> /v1/...` calls only the core public contract with resolved CLI credentials. JSON envelopes print verbatim; cursor lists support `--paginate`, and non-JSON bodies require `--output` or `--raw-stdout`.";
|
|
495
499
|
}, {
|
|
496
500
|
readonly slug: "cli/mcp";
|
|
@@ -499,7 +503,7 @@ export declare const DOCS_CATALOG: readonly [{
|
|
|
499
503
|
readonly tier: "full";
|
|
500
504
|
readonly summary: "Run and install the Spacefast MCP server.";
|
|
501
505
|
readonly keywords: readonly ["mcp", "model context protocol", "agent", "install", "server", "tools"];
|
|
502
|
-
readonly url:
|
|
506
|
+
readonly url: `${string}/cli`;
|
|
503
507
|
readonly body: "`sf mcp` runs the MCP server so an AI assistant can call Spacefast tools; `sf mcp install` wires it into a supported client's config.";
|
|
504
508
|
}, {
|
|
505
509
|
readonly slug: "cli/docs";
|
|
@@ -508,7 +512,7 @@ export declare const DOCS_CATALOG: readonly [{
|
|
|
508
512
|
readonly tier: "full";
|
|
509
513
|
readonly summary: "Search the offline documentation index from the CLI.";
|
|
510
514
|
readonly keywords: readonly ["docs", "search", "help", "reference", "offline", "topic"];
|
|
511
|
-
readonly url:
|
|
515
|
+
readonly url: `${string}/cli`;
|
|
512
516
|
readonly body: "`sf docs` lists documentation topics and `sf docs <topic>` prints a page. The index ships with the CLI and mirrors the machine-readable `GET /v1/docs` API.";
|
|
513
517
|
}, {
|
|
514
518
|
readonly slug: "json-output";
|
|
@@ -517,17 +521,17 @@ export declare const DOCS_CATALOG: readonly [{
|
|
|
517
521
|
readonly tier: "full";
|
|
518
522
|
readonly summary: "Machine-readable envelopes and stable exit codes for scripts.";
|
|
519
523
|
readonly keywords: readonly ["json", "exit code", "scripting", "envelope", "automation", "ci", "agent"];
|
|
520
|
-
readonly url:
|
|
524
|
+
readonly url: `${string}/cli`;
|
|
521
525
|
readonly body: "Pass `--json` for a `{ data }` success or `{ error }` failure envelope on stdout/stderr. Exit codes are stable so scripts and agents can branch on them.";
|
|
522
526
|
}, {
|
|
523
527
|
readonly slug: "api";
|
|
524
|
-
readonly title: "
|
|
528
|
+
readonly title: "API overview";
|
|
525
529
|
readonly kind: "api";
|
|
526
530
|
readonly tier: "full";
|
|
527
|
-
readonly summary: "Authenticate and call the Spacefast
|
|
528
|
-
readonly keywords: readonly ["api", "rest", "http", "
|
|
529
|
-
readonly url:
|
|
530
|
-
readonly body: "The
|
|
531
|
+
readonly summary: "Authenticate and call the Spacefast API.";
|
|
532
|
+
readonly keywords: readonly ["api", "rest", "http", "spacefast", "endpoint", "openapi", "bearer"];
|
|
533
|
+
readonly url: `${string}/api`;
|
|
534
|
+
readonly body: "The Spacefast API uses bearer API keys and returns the same `{ data }` / `{ error }` envelope as the CLI. Create a key with `sf api-keys create`.";
|
|
531
535
|
}, {
|
|
532
536
|
readonly slug: "api/publish";
|
|
533
537
|
readonly title: "Publish API";
|
|
@@ -535,7 +539,7 @@ export declare const DOCS_CATALOG: readonly [{
|
|
|
535
539
|
readonly tier: "full";
|
|
536
540
|
readonly summary: "Publish a version in a single authenticated request.";
|
|
537
541
|
readonly keywords: readonly ["api", "publish", "upload", "version", "archive", "http"];
|
|
538
|
-
readonly url:
|
|
542
|
+
readonly url: `${string}/api`;
|
|
539
543
|
readonly body: "Send your files in one authenticated publish request to create an immutable version and take it live; the response carries the space and live URL.";
|
|
540
544
|
}, {
|
|
541
545
|
readonly slug: "api/spaces";
|
|
@@ -544,7 +548,7 @@ export declare const DOCS_CATALOG: readonly [{
|
|
|
544
548
|
readonly tier: "full";
|
|
545
549
|
readonly summary: "Create, list, and update spaces over HTTP.";
|
|
546
550
|
readonly keywords: readonly ["api", "spaces", "space", "create", "list", "endpoint"];
|
|
547
|
-
readonly url:
|
|
551
|
+
readonly url: `${string}/api`;
|
|
548
552
|
readonly body: "`GET /v1/spaces` lists spaces; `POST /v1/spaces` creates one. `PATCH /v1/spaces/{spaceId}` with a slug-only body renames the space and managed hostname. Former managed addresses temporarily 307 to the current hostname while immutable version URLs stay unchanged. Responses carry the space id, slug, and live URL.";
|
|
549
553
|
}, {
|
|
550
554
|
readonly slug: "api/versions";
|
|
@@ -553,7 +557,7 @@ export declare const DOCS_CATALOG: readonly [{
|
|
|
553
557
|
readonly tier: "full";
|
|
554
558
|
readonly summary: "List versions and promote them to channels over HTTP.";
|
|
555
559
|
readonly keywords: readonly ["api", "versions", "publish", "channel", "promote", "rollback"];
|
|
556
|
-
readonly url:
|
|
560
|
+
readonly url: `${string}/api`;
|
|
557
561
|
readonly body: "List a space's versions, then promote one to a channel to move traffic. Rolling back is promoting an earlier version.";
|
|
558
562
|
}, {
|
|
559
563
|
readonly slug: "api/domains";
|
|
@@ -562,8 +566,8 @@ export declare const DOCS_CATALOG: readonly [{
|
|
|
562
566
|
readonly tier: "reference";
|
|
563
567
|
readonly summary: "Attach and inspect custom domains over HTTP.";
|
|
564
568
|
readonly keywords: readonly ["api", "domains", "domain", "dns", "certificate", "endpoint"];
|
|
565
|
-
readonly url:
|
|
566
|
-
readonly body: "Add a custom domain, read its verification and certificate status, and manage DNS records through the
|
|
569
|
+
readonly url: `${string}/api`;
|
|
570
|
+
readonly body: "Add a custom domain, read its verification and certificate status, and manage DNS records through the Spacefast API.";
|
|
567
571
|
}, {
|
|
568
572
|
readonly slug: "api/teams";
|
|
569
573
|
readonly title: "Teams API";
|
|
@@ -571,7 +575,7 @@ export declare const DOCS_CATALOG: readonly [{
|
|
|
571
575
|
readonly tier: "reference";
|
|
572
576
|
readonly summary: "Manage teams, members, and invitations over HTTP.";
|
|
573
577
|
readonly keywords: readonly ["api", "teams", "team", "members", "invitations", "endpoint"];
|
|
574
|
-
readonly url:
|
|
578
|
+
readonly url: `${string}/api`;
|
|
575
579
|
readonly body: "Create teams, list members, and manage invitations programmatically. Webhooks and API keys are team-scoped.";
|
|
576
580
|
}, {
|
|
577
581
|
readonly slug: "api/docs";
|
|
@@ -580,8 +584,8 @@ export declare const DOCS_CATALOG: readonly [{
|
|
|
580
584
|
readonly tier: "reference";
|
|
581
585
|
readonly summary: "Fetch the machine-readable documentation index.";
|
|
582
586
|
readonly keywords: readonly ["api", "docs", "index", "discovery", "machine-readable", "v1/docs"];
|
|
583
|
-
readonly url:
|
|
584
|
-
readonly body: "`GET /v1/docs` returns the tier-aware docs index (filter with `q` and `category`); `GET /v1/docs/{slug}` returns one page. It mirrors the CLI's offline `sf docs`.";
|
|
587
|
+
readonly url: `${string}/api`;
|
|
588
|
+
readonly body: "`GET /v1/docs` returns the tier-aware docs index (filter with `q` and `category`); `GET /v1/docs/pages/{slug}` returns one page. It mirrors the CLI's offline `sf docs`.";
|
|
585
589
|
}, {
|
|
586
590
|
readonly slug: "api/webhooks";
|
|
587
591
|
readonly title: "Webhooks";
|
|
@@ -589,15 +593,69 @@ export declare const DOCS_CATALOG: readonly [{
|
|
|
589
593
|
readonly tier: "reference";
|
|
590
594
|
readonly summary: "Subscribe to version, build, and domain lifecycle events.";
|
|
591
595
|
readonly keywords: readonly ["api", "webhook", "events", "callback", "notifications", "build", "signature"];
|
|
592
|
-
readonly url:
|
|
596
|
+
readonly url: `${string}/webhooks`;
|
|
593
597
|
readonly body: "Register a team-scoped, signed webhook to receive version, build, domain, and transfer events. Verify the signature header before trusting a payload.";
|
|
594
598
|
}, {
|
|
595
|
-
readonly slug: "
|
|
596
|
-
readonly title: "
|
|
599
|
+
readonly slug: "sdk";
|
|
600
|
+
readonly title: "TypeScript SDK (@spacefast/sdk)";
|
|
601
|
+
readonly kind: "api";
|
|
602
|
+
readonly tier: "essential";
|
|
603
|
+
readonly summary: "The typed client for the API, generated from the OpenAPI spec.";
|
|
604
|
+
readonly keywords: readonly ["sdk", "typescript", "javascript", "client", "npm", "library", "types", "tanstack", "react-query", "node"];
|
|
605
|
+
readonly url: `${string}/sdk`;
|
|
606
|
+
readonly body: "`npm install @spacefast/sdk`, then `createSpacefastClient({ baseUrl: 'https://api.spacefast.com', apiKey })`. Paths, parameters, and responses are all typed from the same OpenAPI spec the API serves: `client.get('/v1/spaces/{spaceId}', { path: { spaceId } })` returns the space. Failures throw `SpacefastApiError` carrying the problem document (`status`, `code`, `pointer`, `next`, `requestId`). Subpaths: `/schema` for raw types, `/query` for TanStack Query factories (browser, cookie-authenticated), `/transport` for the HTTP core, `/publish` for the publish pipeline, `/openapi.json` for your own codegen.";
|
|
607
|
+
}, {
|
|
608
|
+
readonly slug: "api/partner";
|
|
609
|
+
readonly title: "Partner (tenant) API";
|
|
610
|
+
readonly kind: "api";
|
|
611
|
+
readonly tier: "reference";
|
|
612
|
+
readonly summary: "The tenant-facing partner API for running Spacefast as infra.";
|
|
613
|
+
readonly keywords: readonly ["api", "partner", "tenant", "infra", "openapi", "multi-tenant", "white label"];
|
|
614
|
+
readonly url: `${string}/partners`;
|
|
615
|
+
readonly body: `There is no partner route tree. Partners call the same \`/v1\` routes as everyone else: successes carry a \`{ data }\` envelope and failures are RFC 9457 problem documents (\`application/problem+json\` with a stable \`code\`), exactly as elsewhere in the API. A tenant-rooted credential's policy scope and response projection decide what it sees. "Partner" is a spec visibility tier: those operations, plus tenants and principals, are published as a second OpenAPI document at ${string}/openapi.partner.json, rendered at ${string}. Point \`openapi-typescript\` at that document for types. Configuration is not a set of endpoints: a tenant declares its integration in one designated space's published manifest (see \`partner/system-space\`).`;
|
|
616
|
+
}, {
|
|
617
|
+
readonly slug: "partner/onboarding";
|
|
618
|
+
readonly title: "Partner onboarding";
|
|
619
|
+
readonly kind: "api";
|
|
620
|
+
readonly tier: "reference";
|
|
621
|
+
readonly summary: "Bootstrap a tenant: one key, one space, one designation, one publish.";
|
|
622
|
+
readonly keywords: readonly ["partner", "onboarding", "tenant", "bootstrap", "partner_admin", "api key", "setup"];
|
|
623
|
+
readonly url: `${string}/partners#onboarding`;
|
|
624
|
+
readonly body: "Tenant creation is superadmin-side and mints one bootstrap tenant-rooted API key with the `partner_admin` preset (`tenants:*`, `principals:read`, and space/domain/publish actions over the tenant). From there it is four steps you drive yourself: create a space with that key, `PATCH /v1/tenants/{tenantId}` with `systemSpaceId` to designate it, publish the manifest, then read `manifestStatus` on `GET /v1/tenants/{tenantId}` to watch each declared item converge. Mint further keys through the normal API-key routes — every one is bounded to a subset of its grantor's policy.";
|
|
625
|
+
}, {
|
|
626
|
+
readonly slug: "partner/system-space";
|
|
627
|
+
readonly title: "The system space";
|
|
628
|
+
readonly kind: "api";
|
|
629
|
+
readonly tier: "reference";
|
|
630
|
+
readonly summary: "Your integration is a published space, so config versions and rolls back.";
|
|
631
|
+
readonly keywords: readonly ["partner", "system space", "manifest", "sf.jsonc", "systemSpaceId", "manifestStatus", "gitops", "reconciliation", "white label"];
|
|
632
|
+
readonly url: `${string}/partners#system-space`;
|
|
633
|
+
readonly body: "A tenant designates one ordinary space as its system space, and that space's live version *is* the integration definition: a top-level `system` section in `sf.jsonc` (presentation, hostname apex, API origin, token issuers, event subscriptions) plus `_pages/` and `theme.json` as the defaults layer. One config language, one validation pipeline, one publish flow — and `sf rollback` rolls back your configuration with it. Finalize, promote, and rollback all reconcile declared state against current state. Presentation, pages, theme, and subscriptions apply immediately; hostnames, API origins, and token issuers enter `pending` until their DNS, TLS, or key-possession check passes. Dropping an item from the manifest deactivates it. Per-item state lands in `manifestStatus` (`{ key, state, detail, since }` plus the source version id) on `GET /v1/tenants/{tenantId}`. There are no imperative config routes: the fix for a failed item is a new publish. Secrets are never declared — webhook secrets and API keys are minted by their own routes.";
|
|
634
|
+
}, {
|
|
635
|
+
readonly slug: "partner/tokens";
|
|
636
|
+
readonly title: "Partner tokens";
|
|
637
|
+
readonly kind: "api";
|
|
638
|
+
readonly tier: "reference";
|
|
639
|
+
readonly summary: "Let your own auth system mint tokens Spacefast verifies directly.";
|
|
640
|
+
readonly keywords: readonly ["partner", "token", "jwt", "issuer", "eddsa", "ed25519", "auth", "partner_token", "audience", "revocation"];
|
|
641
|
+
readonly url: `${string}/partners#tokens`;
|
|
642
|
+
readonly body: "Your customers never need a Spacefast credential: your auth system mints standard JWT access tokens and Spacefast verifies them. Declare the issuer in the system-space manifest with its pinned Ed25519 public keys — there is no issuer CRUD. The first publish returns `state: pending` with a challenge nonce in `manifestStatus`; sign it with the declared key and republish with the `proof` field, and the issuer activates. Proof of key possession lives in your repo next to the declaration. The token profile is strict: `typ` of `at+jwt`, `alg` of `EdDSA` only, the per-issuer minted `aud` (never a shared value), all of `iss`/`sub`/`client_id`/`jti`/`iat`/`exp` required, `exp - iat` at most 30 minutes, 300s clock skew; embedded or fetched keys are rejected. A verified token becomes a `partner_token` credential bound to one external principal, carrying a fixed least-privilege policy: publish, read, versions, and variables over that principal's subtree — never tenant or principal management. Revoke by removing the issuer or rotating its keys; worst-case acceptance of a revoked token is the shorter of a 30s cache TTL and the token's own expiry.";
|
|
643
|
+
}, {
|
|
644
|
+
readonly slug: "partner/principals";
|
|
645
|
+
readonly title: "Principals and ownership";
|
|
646
|
+
readonly kind: "api";
|
|
647
|
+
readonly tier: "reference";
|
|
648
|
+
readonly summary: "External principals are your customer directory; spaces have exactly one owner.";
|
|
649
|
+
readonly keywords: readonly ["partner", "principals", "external", "tenant", "ownership", "iam", "policy", "scope", "variables"];
|
|
650
|
+
readonly url: `${string}/partners#principals`;
|
|
651
|
+
readonly body: "Your customers are external principals inside your tenant. `GET /v1/principals` lists them within the caller's granted scope (a tenant-rooted key sees the whole tenant) and `GET /v1/principals/external/{principalId}` reads one. There is no create route: a principal is upserted implicitly in the same transaction as its first owned resource, and its identity is the normalized id — the display casing you first sent is preserved but never authoritative. Every space has exactly one owner: a team, an external principal, or an open claim token. IAM actions stay generic nouns (`tenants:read`, `tenants:write`, `principals:read`) rather than a `partner:*` namespace, evaluated per route like every other action, so a partner credential's reach is a policy fact and not a router branch. Per-principal environment variables live under `/v1/principals/{principalType}/{principalId}/variables`.";
|
|
652
|
+
}, {
|
|
653
|
+
readonly slug: "partner/events";
|
|
654
|
+
readonly title: "Partner events and notifications";
|
|
597
655
|
readonly kind: "api";
|
|
598
656
|
readonly tier: "reference";
|
|
599
|
-
readonly summary: "
|
|
600
|
-
readonly keywords: readonly ["
|
|
601
|
-
readonly url:
|
|
602
|
-
readonly body: "
|
|
657
|
+
readonly summary: "Tenant-owned webhooks, declared in the manifest — including customer email.";
|
|
658
|
+
readonly keywords: readonly ["partner", "events", "webhook", "subscriptions", "notifications", "email", "signature", "hmac"];
|
|
659
|
+
readonly url: `${string}/partners#events`;
|
|
660
|
+
readonly body: "Webhooks are the one event primitive, and their ownership generalizes from teams to tenants. Declare subscriptions in the system-space manifest (`url` plus an `events` selection) and reconciliation creates, updates, or disables the rows; delivery uses the same `Spacefast-Signature` HMAC and dual-secret rotation as team webhooks, so verify the signature before trusting a payload. Email white-labeling is not a separate endpoint: subscribe to `principal.notification.*` events (claim link issued, security notice, publish receipt) and send them yourself in your own voice. For a partner tenant these events replace Spacefast-sent email to your customers — no active subscription means no send, and Spacefast never falls back to sending as itself to someone else's customer.";
|
|
603
661
|
}, ...DocEntry[]];
|