@spacefast/common 0.0.21 → 0.0.24

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.
Files changed (182) hide show
  1. package/dist/agents/connect-targets.d.ts +9 -6
  2. package/dist/agents/connect-targets.js +9 -6
  3. package/dist/config/domains.d.ts +1 -1
  4. package/dist/config/domains.js +1 -0
  5. package/dist/config/index.d.ts +0 -1
  6. package/dist/config/index.js +0 -1
  7. package/dist/contracts/abuse.d.ts +2 -0
  8. package/dist/contracts/abuse.js +12 -0
  9. package/dist/contracts/access.d.ts +121 -9
  10. package/dist/contracts/access.js +73 -9
  11. package/dist/contracts/activity.d.ts +1 -1
  12. package/dist/contracts/activity.js +0 -9
  13. package/dist/contracts/api-keys.d.ts +21 -21
  14. package/dist/contracts/beta.js +1 -1
  15. package/dist/contracts/billing.d.ts +1 -34
  16. package/dist/contracts/billing.js +4 -53
  17. package/dist/contracts/builds.d.ts +8 -8
  18. package/dist/contracts/builds.js +10 -3
  19. package/dist/contracts/cli.d.ts +10 -0
  20. package/dist/contracts/cli.js +10 -0
  21. package/dist/contracts/collab-public.d.ts +63 -0
  22. package/dist/contracts/collab-public.js +46 -0
  23. package/dist/contracts/comments.d.ts +283 -54
  24. package/dist/contracts/comments.js +173 -52
  25. package/dist/contracts/common.d.ts +3 -3
  26. package/dist/contracts/device-auth.d.ts +6 -6
  27. package/dist/contracts/device-auth.js +1 -1
  28. package/dist/contracts/docs.d.ts +5 -5
  29. package/dist/contracts/domains.d.ts +36 -36
  30. package/dist/contracts/enums.d.ts +33 -30
  31. package/dist/contracts/enums.js +52 -38
  32. package/dist/contracts/error-code-meta.d.ts +37 -126
  33. package/dist/contracts/error-code-meta.js +12 -41
  34. package/dist/contracts/error-codes.d.ts +1 -1
  35. package/dist/contracts/error-codes.js +10 -32
  36. package/dist/contracts/execution.d.ts +35 -57
  37. package/dist/contracts/execution.js +41 -40
  38. package/dist/contracts/feature-lifecycle-core.d.ts +0 -6
  39. package/dist/contracts/feature-lifecycle-core.js +2 -31
  40. package/dist/contracts/feature-lifecycle.d.ts +8 -38
  41. package/dist/contracts/feature-lifecycle.js +16 -48
  42. package/dist/contracts/features.d.ts +15 -13
  43. package/dist/contracts/features.js +39 -38
  44. package/dist/contracts/functions.d.ts +97 -70
  45. package/dist/contracts/functions.js +101 -34
  46. package/dist/contracts/git.d.ts +1 -1
  47. package/dist/contracts/grants.d.ts +7 -3
  48. package/dist/contracts/grants.js +18 -9
  49. package/dist/contracts/internal.d.ts +14 -1
  50. package/dist/contracts/internal.js +17 -7
  51. package/dist/contracts/oauth-resources.d.ts +4 -3
  52. package/dist/contracts/oauth-resources.js +12 -3
  53. package/dist/contracts/operations.d.ts +90 -5
  54. package/dist/contracts/operations.js +75 -1
  55. package/dist/contracts/pages.d.ts +6 -1
  56. package/dist/contracts/pages.js +24 -1
  57. package/dist/contracts/plan-policy.d.ts +1 -3
  58. package/dist/contracts/plan-policy.js +1 -2
  59. package/dist/contracts/platform.d.ts +61 -148
  60. package/dist/contracts/platform.js +70 -126
  61. package/dist/contracts/publish-archive.d.ts +498 -0
  62. package/dist/contracts/publish-archive.js +25 -0
  63. package/dist/contracts/resources.d.ts +12 -24
  64. package/dist/contracts/resources.js +32 -12
  65. package/dist/contracts/runtime-api.d.ts +369 -175
  66. package/dist/contracts/runtime-api.js +372 -348
  67. package/dist/contracts/runtime-app.d.ts +127 -120
  68. package/dist/contracts/runtime-app.js +19 -10
  69. package/dist/contracts/runtime-db.d.ts +1 -1
  70. package/dist/contracts/runtime-services.d.ts +219 -0
  71. package/dist/contracts/runtime-services.js +437 -0
  72. package/dist/contracts/runtime-storage.d.ts +45 -32
  73. package/dist/contracts/runtime-storage.js +30 -8
  74. package/dist/contracts/space-config.d.ts +10 -16
  75. package/dist/contracts/space-config.js +14 -10
  76. package/dist/contracts/spaces.d.ts +241 -436
  77. package/dist/contracts/spaces.js +128 -145
  78. package/dist/contracts/superadmin-activity.d.ts +57 -4
  79. package/dist/contracts/superadmin-activity.js +48 -2
  80. package/dist/contracts/superadmin-search.d.ts +126 -0
  81. package/dist/contracts/superadmin-search.js +61 -0
  82. package/dist/contracts/superadmin-spaces.d.ts +358 -89
  83. package/dist/contracts/superadmin-spaces.js +97 -24
  84. package/dist/contracts/superadmin-teams.d.ts +28 -10
  85. package/dist/contracts/superadmin-teams.js +5 -8
  86. package/dist/contracts/superadmin.d.ts +0 -32
  87. package/dist/contracts/superadmin.js +3 -11
  88. package/dist/contracts/tags.d.ts +9 -9
  89. package/dist/contracts/teams.d.ts +44 -2
  90. package/dist/contracts/teams.js +43 -23
  91. package/dist/contracts/transfers.d.ts +0 -49
  92. package/dist/contracts/transfers.js +2 -6
  93. package/dist/contracts/usage.d.ts +61 -0
  94. package/dist/contracts/usage.js +64 -0
  95. package/dist/contracts/variables.d.ts +2 -7
  96. package/dist/contracts/variables.js +6 -5
  97. package/dist/contracts/webhooks.d.ts +2 -2
  98. package/dist/contracts/zero.d.ts +87 -56
  99. package/dist/contracts/zero.js +82 -20
  100. package/dist/dashboard-paths/index.d.ts +1 -1
  101. package/dist/dashboard-paths/index.js +1 -0
  102. package/dist/docs/agent-prose.d.ts +1 -1
  103. package/dist/docs/agent-prose.js +62 -66
  104. package/dist/docs/agent-setup.js +49 -23
  105. package/dist/docs/agent-solutions.d.ts +4 -4
  106. package/dist/docs/agent-solutions.js +8 -8
  107. package/dist/docs/catalog.d.ts +19 -19
  108. package/dist/docs/catalog.js +30 -19
  109. package/dist/docs/error-docs.js +63 -151
  110. package/dist/docs/skills.d.ts +3 -3
  111. package/dist/docs/skills.js +1 -1
  112. package/dist/test-helpers/fetch-stub.d.ts +16 -0
  113. package/dist/test-helpers/fetch-stub.js +24 -0
  114. package/dist/utils/build-settings.js +9 -3
  115. package/dist/utils/canonical-json.d.ts +10 -0
  116. package/dist/utils/canonical-json.js +21 -0
  117. package/dist/utils/cast-transport.d.ts +28 -0
  118. package/dist/utils/cast-transport.js +52 -0
  119. package/dist/utils/claim-token.d.ts +0 -8
  120. package/dist/utils/claim-token.js +3 -15
  121. package/dist/utils/credential-policy.d.ts +1 -1
  122. package/dist/utils/env-file.d.ts +17 -0
  123. package/dist/utils/env-file.js +96 -0
  124. package/dist/utils/error-code.d.ts +2 -0
  125. package/dist/utils/error-code.js +7 -0
  126. package/dist/utils/generate-space-name.d.ts +8 -10
  127. package/dist/utils/generate-space-name.js +206 -21
  128. package/dist/utils/grant-decision.fixtures.json +2938 -0
  129. package/dist/utils/grants.d.ts +2 -0
  130. package/dist/utils/grants.js +25 -2
  131. package/dist/utils/gravatar.d.ts +9 -0
  132. package/dist/utils/gravatar.js +31 -0
  133. package/dist/utils/idempotency.d.ts +6 -0
  134. package/dist/utils/idempotency.js +28 -0
  135. package/dist/utils/local-space-state.d.ts +1 -5
  136. package/dist/utils/local-space-state.js +7 -26
  137. package/dist/utils/page-fonts.d.ts +2 -2
  138. package/dist/utils/page-fonts.js +22 -4
  139. package/dist/utils/pages.d.ts +1 -2
  140. package/dist/utils/pages.js +21 -5
  141. package/dist/utils/publish-form-data.d.ts +12 -0
  142. package/dist/utils/publish-form-data.js +10 -0
  143. package/dist/utils/publish-policy.d.ts +20 -0
  144. package/dist/utils/publish-policy.fixtures.json +397 -0
  145. package/dist/utils/publish-policy.js +36 -19
  146. package/dist/utils/push-new.d.ts +7 -0
  147. package/dist/utils/push-new.js +7 -0
  148. package/dist/utils/query-keys.d.ts +0 -1
  149. package/dist/utils/query-keys.js +0 -1
  150. package/dist/utils/runtime-paths.d.ts +5 -0
  151. package/dist/utils/runtime-paths.js +5 -0
  152. package/dist/utils/runtime-upload-batch.d.ts +0 -5
  153. package/dist/utils/runtime-upload-batch.js +1 -27
  154. package/dist/utils/runtime-upload.d.ts +3 -13
  155. package/dist/utils/runtime-upload.js +4 -14
  156. package/dist/utils/space-config.d.ts +0 -33
  157. package/dist/utils/space-config.js +5 -326
  158. package/dist/utils/storage-policy.d.ts +1 -1
  159. package/dist/utils/storage-policy.js +3 -1
  160. package/dist/utils/structured-error.d.ts +14 -0
  161. package/dist/utils/structured-error.js +22 -0
  162. package/dist/utils/version-path.js +12 -3
  163. package/dist/vocabulary.d.ts +5 -3
  164. package/dist/vocabulary.js +13 -10
  165. package/package.json +10 -5
  166. package/dist/config/postgres-budget.d.ts +0 -129
  167. package/dist/config/postgres-budget.js +0 -140
  168. package/dist/config/postgres-budget.json +0 -51
  169. package/dist/contracts/archives.d.ts +0 -331
  170. package/dist/contracts/archives.js +0 -120
  171. package/dist/contracts/deployments.d.ts +0 -574
  172. package/dist/contracts/deployments.js +0 -97
  173. package/dist/contracts/sites.d.ts +0 -416
  174. package/dist/contracts/sites.js +0 -168
  175. package/dist/contracts/superadmin-queues.d.ts +0 -414
  176. package/dist/contracts/superadmin-queues.js +0 -202
  177. package/dist/contracts/superadmin-runtime.d.ts +0 -27
  178. package/dist/contracts/superadmin-runtime.js +0 -38
  179. package/dist/index.d.ts +0 -1
  180. package/dist/index.js +0 -1
  181. package/dist/utils/api.d.ts +0 -4
  182. package/dist/utils/api.js +0 -13
@@ -54,7 +54,7 @@ export declare const agentSolutions: readonly [{
54
54
  readonly summary: "Recommended: direct hosted MCP.";
55
55
  readonly description: "Connect ChatGPT-style cloud agents to Spacefast through hosted MCP; use inline files or signed uploads instead of local paths.";
56
56
  readonly commands: readonly ["https://mcp.spacefast.com"];
57
- readonly guideUrl: `${string}/getting-started/agents`;
57
+ readonly guideUrl: `${string}/agents`;
58
58
  readonly setupText: string;
59
59
  }, {
60
60
  readonly id: "claude-ai";
@@ -64,7 +64,7 @@ export declare const agentSolutions: readonly [{
64
64
  readonly summary: "Recommended: direct hosted MCP.";
65
65
  readonly description: "Connect the web Claude app to Spacefast through hosted MCP when it cannot read your local checkout.";
66
66
  readonly commands: readonly ["https://mcp.spacefast.com"];
67
- readonly guideUrl: `${string}/getting-started/agents`;
67
+ readonly guideUrl: `${string}/agents`;
68
68
  readonly setupText: string;
69
69
  }, {
70
70
  readonly id: "raycast";
@@ -74,7 +74,7 @@ export declare const agentSolutions: readonly [{
74
74
  readonly summary: "Recommended: direct hosted MCP.";
75
75
  readonly description: "Use hosted MCP for Raycast and similar clients that can connect to a remote MCP server but should not need a local Spacefast install.";
76
76
  readonly commands: readonly ["https://mcp.spacefast.com"];
77
- readonly guideUrl: `${string}/getting-started/agents`;
77
+ readonly guideUrl: `${string}/agents`;
78
78
  readonly setupText: string;
79
79
  }, {
80
80
  readonly id: "cursor";
@@ -84,7 +84,7 @@ export declare const agentSolutions: readonly [{
84
84
  readonly summary: "Recommended: local MCP when it needs the checkout.";
85
85
  readonly description: "Use On-Device MCP for editor agents that need local files; use hosted MCP instead when they only need cloud-safe tools.";
86
86
  readonly commands: readonly ["sf setup agent --agent auto --connect", "sf mcp install --agent auto --mode local --transport stdio --connect"];
87
- readonly guideUrl: `${string}/getting-started/agents`;
87
+ readonly guideUrl: `${string}/agents`;
88
88
  readonly setupText: string;
89
89
  }, {
90
90
  readonly id: "terminal";
@@ -89,8 +89,8 @@ export const agentSolutions = [
89
89
  summary: "Recommended: direct hosted MCP.",
90
90
  description: `Connect ChatGPT-style cloud agents to ${BRAND.productName} through hosted MCP; use inline files or signed uploads instead of local paths.`,
91
91
  commands: [hostedMcpEndpointUrl],
92
- guideUrl: `${DOCS_BASE_URL}/getting-started/agents`,
93
- setupText: hostedMcpText("ChatGPT", `${DOCS_BASE_URL}/getting-started/agents`),
92
+ guideUrl: `${DOCS_BASE_URL}/agents`,
93
+ setupText: hostedMcpText("ChatGPT", `${DOCS_BASE_URL}/agents`),
94
94
  },
95
95
  {
96
96
  id: "claude-ai",
@@ -100,8 +100,8 @@ export const agentSolutions = [
100
100
  summary: "Recommended: direct hosted MCP.",
101
101
  description: `Connect the web Claude app to ${BRAND.productName} through hosted MCP when it cannot read your local checkout.`,
102
102
  commands: [hostedMcpEndpointUrl],
103
- guideUrl: `${DOCS_BASE_URL}/getting-started/agents`,
104
- setupText: hostedMcpText("Claude.ai", `${DOCS_BASE_URL}/getting-started/agents`),
103
+ guideUrl: `${DOCS_BASE_URL}/agents`,
104
+ setupText: hostedMcpText("Claude.ai", `${DOCS_BASE_URL}/agents`),
105
105
  },
106
106
  {
107
107
  id: "raycast",
@@ -111,8 +111,8 @@ export const agentSolutions = [
111
111
  summary: "Recommended: direct hosted MCP.",
112
112
  description: `Use hosted MCP for Raycast and similar clients that can connect to a remote MCP server but should not need a local ${BRAND.productName} install.`,
113
113
  commands: [hostedMcpEndpointUrl],
114
- guideUrl: `${DOCS_BASE_URL}/getting-started/agents`,
115
- setupText: hostedMcpText("Raycast", `${DOCS_BASE_URL}/getting-started/agents`),
114
+ guideUrl: `${DOCS_BASE_URL}/agents`,
115
+ setupText: hostedMcpText("Raycast", `${DOCS_BASE_URL}/agents`),
116
116
  },
117
117
  {
118
118
  id: "cursor",
@@ -125,8 +125,8 @@ export const agentSolutions = [
125
125
  "sf setup agent --agent auto --connect",
126
126
  "sf mcp install --agent auto --mode local --transport stdio --connect",
127
127
  ],
128
- guideUrl: `${DOCS_BASE_URL}/getting-started/agents`,
129
- setupText: localMcpText("Cursor or another MCP client", `${DOCS_BASE_URL}/getting-started/agents`),
128
+ guideUrl: `${DOCS_BASE_URL}/agents`,
129
+ setupText: localMcpText("Cursor or another MCP client", `${DOCS_BASE_URL}/agents`),
130
130
  },
131
131
  {
132
132
  id: "terminal",
@@ -65,10 +65,10 @@ export declare const DOCS_CATALOG: readonly [{
65
65
  readonly title: "Anonymous publish and claim";
66
66
  readonly kind: "guide";
67
67
  readonly tier: "essential";
68
- readonly summary: "Publish without an account, then claim the space with its token.";
68
+ readonly summary: "Publish without an account, then claim the space with its key.";
69
69
  readonly keywords: readonly ["anonymous", "claim", "unclaimed", "agent", "token", "adopt"];
70
70
  readonly url: "https://spacefast.com/docs/anonymous-publish";
71
- readonly body: "Publish without logging in to get an instant URL and a claim token; run `sf spaces claim` with that token to bind the space to your account.";
71
+ 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
72
  }, {
73
73
  readonly slug: "agents";
74
74
  readonly title: "Agents and MCP";
@@ -92,7 +92,7 @@ export declare const DOCS_CATALOG: readonly [{
92
92
  readonly title: "Publish receipt fields";
93
93
  readonly kind: "workflow";
94
94
  readonly tier: "full";
95
- readonly summary: "Use the receipt as the source of truth. Present open.url and claim.url as the two user-facing links; liveUrl and immutableUrl identify resources for automation.";
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.";
96
96
  readonly keywords: readonly ["receipt", "share", "claim", "diagnostics"];
97
97
  readonly url: "https://spacefast.com/docs/api#publish";
98
98
  readonly body: "receipt liveUrl open url immutableUrl claim expiresAt diagnostics links finalize promote upload errors docsUrl";
@@ -101,16 +101,16 @@ export declare const DOCS_CATALOG: readonly [{
101
101
  readonly title: "Keep publishing after the user claims";
102
102
  readonly kind: "workflow";
103
103
  readonly tier: "full";
104
- readonly summary: "After the owner claims an anonymous space with continuation enabled, exchange the saved claim token once for a durable space-scoped access token, save it over the claim token, and keep publishing.";
104
+ 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
105
  readonly keywords: readonly ["continue", "exchange", "claim token", "space_claimed_credential_available", "continuation"];
106
106
  readonly url: "https://spacefast.com/docs/agents#continue-after-claim";
107
- readonly body: "continue continuation claim token exchange voucher publish execute POST /v1/anonymous-claim/exchange space_claimed_credential_available continuation_used continuation_unavailable durable access token state.json update after claim";
107
+ 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
108
  }, {
109
109
  readonly slug: "workflow/secret-handling";
110
110
  readonly title: "Secret handling rules";
111
111
  readonly kind: "workflow";
112
112
  readonly tier: "full";
113
- readonly summary: "Treat claim tokens, upload tokens, device codes, API keys, auth files, and .spacefast state as credentials. Do not print, commit, archive, or log them.";
113
+ 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
114
  readonly keywords: readonly ["secret", "token", "claim token", "redact"];
115
115
  readonly url: "https://spacefast.com/docs/agents#secret-handling";
116
116
  readonly body: "secret handling claim token upload token device code API key auth file .spacefast state redact logs transcripts archive";
@@ -239,7 +239,7 @@ export declare const DOCS_CATALOG: readonly [{
239
239
  readonly summary: "Run code on a space with Zero or Functions.";
240
240
  readonly keywords: readonly ["runtime", "zero", "functions", "server", "dynamic", "code", "backend", "sf.jsonc"];
241
241
  readonly url: "https://spacefast.com/docs/runtimes";
242
- readonly body: "A space serves static files until you declare a `runtime` block in sf.jsonc. Zero is a capsule with its own database and transactions; Functions is a worker with one `fetch` handler and any npm package. Both compile during `sf publish`. Zero runs on plans with dedicated runtime isolation; Functions remains in private beta.";
242
+ readonly body: "A space serves static 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
243
  }, {
244
244
  readonly slug: "runtimes/zero";
245
245
  readonly title: "Spacefast Zero";
@@ -248,7 +248,7 @@ export declare const DOCS_CATALOG: readonly [{
248
248
  readonly summary: "A capsule with a database: schema, queries, mutations, endpoints.";
249
249
  readonly keywords: readonly ["zero", "capsule", "database", "schema", "query", "mutation", "endpoint", "transaction", "sql", "sf dev"];
250
250
  readonly url: "https://spacefast.com/docs/runtimes/zero";
251
- 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 on a plan with dedicated runtime isolation.";
251
+ 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
252
  }, {
253
253
  readonly slug: "runtimes/functions";
254
254
  readonly title: "Spacefast Functions";
@@ -257,7 +257,7 @@ export declare const DOCS_CATALOG: readonly [{
257
257
  readonly summary: "A worker for your space: one `fetch` handler, any npm package.";
258
258
  readonly keywords: readonly ["functions", "worker", "fetch", "ssr", "cloudflare", "npm", "handler", "server", "api"];
259
259
  readonly url: "https://spacefast.com/docs/runtimes/functions";
260
- readonly body: "Functions runs a 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. Opt into a database with `\"database\": true`. Private beta the team needs the flag.";
260
+ 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
261
  }, {
262
262
  readonly slug: "collab";
263
263
  readonly title: "Comments";
@@ -299,10 +299,10 @@ export declare const DOCS_CATALOG: readonly [{
299
299
  readonly title: "Next.js integration";
300
300
  readonly kind: "guide";
301
301
  readonly tier: "reference";
302
- readonly summary: "Publish a Next.js static export to a space.";
303
- readonly keywords: readonly ["nextjs", "next", "react", "framework", "integration", "export"];
302
+ readonly summary: "Build and publish a full Next.js app with OpenNext.";
303
+ readonly keywords: readonly ["nextjs", "next", "react", "framework", "integration", "opennext", "isr", "data cache", "revalidateTag", "revalidatePath"];
304
304
  readonly url: "https://spacefast.com/docs/integrations/nextjs";
305
- readonly body: "Build your Next.js static export and publish the output directory with `sf publish`; `sf init` detects the framework and sets the output path.";
305
+ readonly body: "Run `sf publish` in a Next.js project. Spacefast builds it with pinned OpenNext and publishes the static assets plus its 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
306
  }, {
307
307
  readonly slug: "integrations/vite";
308
308
  readonly title: "Vite integration";
@@ -320,7 +320,7 @@ export declare const DOCS_CATALOG: readonly [{
320
320
  readonly summary: "File counts, sizes, and rate limits per plan.";
321
321
  readonly keywords: readonly ["limits", "quota", "size", "rate limit", "plan", "storage"];
322
322
  readonly url: "https://spacefast.com/docs/limits";
323
- readonly body: "Reference for per-space file counts, archive and file size ceilings, version retention, and rate limits, which vary by plan.";
323
+ readonly body: "Reference for per-space file counts, archive and file size ceilings, and rate limits, which vary by plan.";
324
324
  }, {
325
325
  readonly slug: "troubleshooting";
326
326
  readonly title: "Troubleshooting";
@@ -383,23 +383,23 @@ export declare const DOCS_CATALOG: readonly [{
383
383
  readonly summary: "Attach an anonymously-published space to your account.";
384
384
  readonly keywords: readonly ["claim", "anonymous", "attach", "token", "adopt", "spaces"];
385
385
  readonly url: "https://spacefast.com/docs/cli";
386
- readonly body: "After an agent publishes anonymously, run `sf spaces claim` with the claim token to bind the space to your account.";
386
+ readonly body: "After an agent publishes anonymously, run `sf spaces claim` with the space key to bind the space to your account.";
387
387
  }, {
388
388
  readonly slug: "cli/spaces";
389
389
  readonly title: "sf spaces";
390
390
  readonly kind: "cli";
391
391
  readonly tier: "full";
392
- readonly summary: "List, inspect, transfer, import, and remove spaces.";
393
- readonly keywords: readonly ["spaces", "space", "ls", "get", "rm", "transfer", "import", "export"];
392
+ readonly summary: "List, inspect, download, duplicate, transfer, and remove spaces.";
393
+ readonly keywords: readonly ["spaces", "space", "ls", "get", "download", "duplicate", "rm", "transfer"];
394
394
  readonly url: "https://spacefast.com/docs/cli";
395
- readonly body: "The `sf spaces` group manages spaces: `ls`, `get`, `claim`, `transfer`, `duplicate`, `import`/`export`, and `rm`.";
395
+ 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
396
  }, {
397
397
  readonly slug: "cli/versions";
398
398
  readonly title: "sf versions";
399
399
  readonly kind: "cli";
400
400
  readonly tier: "full";
401
- readonly summary: "List, inspect, download, and remove immutable versions.";
402
- readonly keywords: readonly ["versions", "version", "ls", "get", "download", "rollback", "history"];
401
+ readonly summary: "List, inspect, and remove immutable versions.";
402
+ readonly keywords: readonly ["versions", "version", "ls", "get", "rm", "rollback", "history"];
403
403
  readonly url: "https://spacefast.com/docs/cli";
404
404
  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
405
  }, {
@@ -69,10 +69,10 @@ const HAND_WRITTEN_DOCS_CATALOG = [
69
69
  title: "Anonymous publish and claim",
70
70
  kind: "guide",
71
71
  tier: "essential",
72
- summary: "Publish without an account, then claim the space with its token.",
72
+ summary: "Publish without an account, then claim the space with its key.",
73
73
  keywords: ["anonymous", "claim", "unclaimed", "agent", "token", "adopt"],
74
74
  url: `${DOCS_BASE_URL}/anonymous-publish`,
75
- body: "Publish without logging in to get an instant URL and a claim token; run `sf spaces claim` with that token to bind the space to your account.",
75
+ 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.",
76
76
  },
77
77
  {
78
78
  slug: "agents",
@@ -100,7 +100,7 @@ const HAND_WRITTEN_DOCS_CATALOG = [
100
100
  title: "Publish receipt fields",
101
101
  kind: "workflow",
102
102
  tier: "full",
103
- summary: "Use the receipt as the source of truth. Present open.url and claim.url as the two user-facing links; liveUrl and immutableUrl identify resources for automation.",
103
+ 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.",
104
104
  keywords: ["receipt", "share", "claim", "diagnostics"],
105
105
  url: `${DOCS_BASE_URL}/api#publish`,
106
106
  body: "receipt liveUrl open url immutableUrl claim expiresAt diagnostics links finalize promote upload errors docsUrl",
@@ -110,7 +110,7 @@ const HAND_WRITTEN_DOCS_CATALOG = [
110
110
  title: "Keep publishing after the user claims",
111
111
  kind: "workflow",
112
112
  tier: "full",
113
- summary: "After the owner claims an anonymous space with continuation enabled, exchange the saved claim token once for a durable space-scoped access token, save it over the claim token, and keep publishing.",
113
+ 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.",
114
114
  keywords: [
115
115
  "continue",
116
116
  "exchange",
@@ -119,14 +119,14 @@ const HAND_WRITTEN_DOCS_CATALOG = [
119
119
  "continuation",
120
120
  ],
121
121
  url: `${DOCS_BASE_URL}/agents#continue-after-claim`,
122
- body: "continue continuation claim token exchange voucher publish execute POST /v1/anonymous-claim/exchange space_claimed_credential_available continuation_used continuation_unavailable durable access token state.json update after claim",
122
+ 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",
123
123
  },
124
124
  {
125
125
  slug: "workflow/secret-handling",
126
126
  title: "Secret handling rules",
127
127
  kind: "workflow",
128
128
  tier: "full",
129
- summary: "Treat claim tokens, upload tokens, device codes, API keys, auth files, and .spacefast state as credentials. Do not print, commit, archive, or log them.",
129
+ 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.",
130
130
  keywords: ["secret", "token", "claim token", "redact"],
131
131
  url: `${DOCS_BASE_URL}/agents#secret-handling`,
132
132
  body: "secret handling claim token upload token device code API key auth file .spacefast state redact logs transcripts archive",
@@ -269,7 +269,7 @@ const HAND_WRITTEN_DOCS_CATALOG = [
269
269
  summary: "Run code on a space with Zero or Functions.",
270
270
  keywords: ["runtime", "zero", "functions", "server", "dynamic", "code", "backend", "sf.jsonc"],
271
271
  url: `${DOCS_BASE_URL}/runtimes`,
272
- body: "A space serves static files until you declare a `runtime` block in sf.jsonc. Zero is a capsule with its own database and transactions; Functions is a worker with one `fetch` handler and any npm package. Both compile during `sf publish`. Zero runs on plans with dedicated runtime isolation; Functions remains in private beta.",
272
+ body: "A space serves static 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`.",
273
273
  },
274
274
  {
275
275
  slug: "runtimes/zero",
@@ -290,7 +290,7 @@ const HAND_WRITTEN_DOCS_CATALOG = [
290
290
  "sf dev",
291
291
  ],
292
292
  url: `${DOCS_BASE_URL}/runtimes/zero`,
293
- 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 on a plan with dedicated runtime isolation.",
293
+ 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.",
294
294
  },
295
295
  {
296
296
  slug: "runtimes/functions",
@@ -310,7 +310,7 @@ const HAND_WRITTEN_DOCS_CATALOG = [
310
310
  "api",
311
311
  ],
312
312
  url: `${DOCS_BASE_URL}/runtimes/functions`,
313
- body: 'Functions runs a 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. Opt into a database with `"database": true`. Private beta the team needs the flag.',
313
+ 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.',
314
314
  },
315
315
  {
316
316
  slug: "collab",
@@ -357,10 +357,21 @@ const HAND_WRITTEN_DOCS_CATALOG = [
357
357
  title: "Next.js integration",
358
358
  kind: "guide",
359
359
  tier: "reference",
360
- summary: "Publish a Next.js static export to a space.",
361
- keywords: ["nextjs", "next", "react", "framework", "integration", "export"],
360
+ summary: "Build and publish a full Next.js app with OpenNext.",
361
+ keywords: [
362
+ "nextjs",
363
+ "next",
364
+ "react",
365
+ "framework",
366
+ "integration",
367
+ "opennext",
368
+ "isr",
369
+ "data cache",
370
+ "revalidateTag",
371
+ "revalidatePath",
372
+ ],
362
373
  url: `${DOCS_BASE_URL}/integrations/nextjs`,
363
- body: "Build your Next.js static export and publish the output directory with `sf publish`; `sf init` detects the framework and sets the output path.",
374
+ body: "Run `sf publish` in a Next.js project. Spacefast builds it with pinned OpenNext and publishes the static assets plus its 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.",
364
375
  },
365
376
  {
366
377
  slug: "integrations/vite",
@@ -380,7 +391,7 @@ const HAND_WRITTEN_DOCS_CATALOG = [
380
391
  summary: "File counts, sizes, and rate limits per plan.",
381
392
  keywords: ["limits", "quota", "size", "rate limit", "plan", "storage"],
382
393
  url: `${DOCS_BASE_URL}/limits`,
383
- body: "Reference for per-space file counts, archive and file size ceilings, version retention, and rate limits, which vary by plan.",
394
+ body: "Reference for per-space file counts, archive and file size ceilings, and rate limits, which vary by plan.",
384
395
  },
385
396
  {
386
397
  slug: "troubleshooting",
@@ -451,25 +462,25 @@ const HAND_WRITTEN_DOCS_CATALOG = [
451
462
  summary: "Attach an anonymously-published space to your account.",
452
463
  keywords: ["claim", "anonymous", "attach", "token", "adopt", "spaces"],
453
464
  url: `${DOCS_BASE_URL}/cli`,
454
- body: "After an agent publishes anonymously, run `sf spaces claim` with the claim token to bind the space to your account.",
465
+ body: "After an agent publishes anonymously, run `sf spaces claim` with the space key to bind the space to your account.",
455
466
  },
456
467
  {
457
468
  slug: "cli/spaces",
458
469
  title: "sf spaces",
459
470
  kind: "cli",
460
471
  tier: "full",
461
- summary: "List, inspect, transfer, import, and remove spaces.",
462
- keywords: ["spaces", "space", "ls", "get", "rm", "transfer", "import", "export"],
472
+ summary: "List, inspect, download, duplicate, transfer, and remove spaces.",
473
+ keywords: ["spaces", "space", "ls", "get", "download", "duplicate", "rm", "transfer"],
463
474
  url: `${DOCS_BASE_URL}/cli`,
464
- body: "The `sf spaces` group manages spaces: `ls`, `get`, `claim`, `transfer`, `duplicate`, `import`/`export`, and `rm`.",
475
+ 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.",
465
476
  },
466
477
  {
467
478
  slug: "cli/versions",
468
479
  title: "sf versions",
469
480
  kind: "cli",
470
481
  tier: "full",
471
- summary: "List, inspect, download, and remove immutable versions.",
472
- keywords: ["versions", "version", "ls", "get", "download", "rollback", "history"],
482
+ summary: "List, inspect, and remove immutable versions.",
483
+ keywords: ["versions", "version", "ls", "get", "rm", "rollback", "history"],
473
484
  url: `${DOCS_BASE_URL}/cli`,
474
485
  body: "`sf versions ls` shows a space's history; `sf versions get` inspects one and `sf rollback` promotes an earlier version back to live.",
475
486
  },