@spacefast/common 0.0.13 → 0.0.18
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/client-registry.d.ts +22 -0
- package/dist/agents/client-registry.js +41 -0
- package/dist/agents/connect-targets.d.ts +51 -6
- package/dist/agents/connect-targets.js +93 -28
- package/dist/brand.d.ts +0 -11
- package/dist/brand.js +0 -20
- package/dist/config/domains.d.ts +15 -6
- package/dist/config/domains.js +24 -10
- package/dist/config/postgres-budget.d.ts +3 -0
- package/dist/config/postgres-budget.js +6 -1
- package/dist/config/postgres-budget.json +2 -1
- package/dist/contracts/abuse.js +1 -1
- package/dist/contracts/access.d.ts +149 -44
- package/dist/contracts/access.js +94 -8
- package/dist/contracts/activity.js +5 -1
- package/dist/contracts/api-keys.js +9 -9
- package/dist/contracts/archives.js +11 -11
- package/dist/contracts/beta.js +1 -1
- package/dist/contracts/builds.js +14 -14
- package/dist/contracts/channels.js +2 -2
- package/dist/contracts/comments.d.ts +86 -15
- package/dist/contracts/comments.js +116 -20
- package/dist/contracts/common.d.ts +12 -12
- package/dist/contracts/common.js +33 -30
- package/dist/contracts/continuation.js +5 -5
- package/dist/contracts/data-source-routes.js +1 -1
- package/dist/contracts/device-auth.d.ts +6 -6
- package/dist/contracts/device-auth.js +12 -12
- package/dist/contracts/docs.d.ts +10 -10
- package/dist/contracts/domains.js +39 -33
- package/dist/contracts/enums.d.ts +2 -10
- package/dist/contracts/enums.js +0 -2
- package/dist/contracts/error-code-meta.d.ts +116 -47
- package/dist/contracts/error-code-meta.js +37 -16
- package/dist/contracts/error-codes.d.ts +7 -4
- package/dist/contracts/error-codes.js +46 -21
- package/dist/contracts/events.d.ts +10 -3
- package/dist/contracts/events.js +33 -5
- package/dist/contracts/execution.d.ts +26 -0
- package/dist/contracts/execution.js +21 -0
- package/dist/contracts/feature-lifecycle.d.ts +21 -24
- package/dist/contracts/feature-lifecycle.js +28 -26
- package/dist/contracts/features.js +4 -4
- package/dist/contracts/functions.d.ts +8 -140
- package/dist/contracts/functions.js +9 -19
- package/dist/contracts/git.d.ts +1 -1
- package/dist/contracts/grants.d.ts +96 -79
- package/dist/contracts/grants.js +130 -43
- package/dist/contracts/ids.d.ts +2 -2
- package/dist/contracts/ids.js +2 -4
- package/dist/contracts/internal.js +2 -2
- package/dist/contracts/mcp.d.ts +17 -556
- package/dist/contracts/mcp.js +9 -103
- package/dist/contracts/me.js +3 -4
- package/dist/contracts/notifications.d.ts +108 -0
- package/dist/contracts/notifications.js +54 -0
- package/dist/contracts/oauth-resources.d.ts +18 -1
- package/dist/contracts/oauth-resources.js +22 -2
- package/dist/contracts/operations.d.ts +2 -50
- package/dist/contracts/operations.js +0 -19
- package/dist/contracts/pages.d.ts +8 -4
- package/dist/contracts/pages.js +16 -3
- package/dist/contracts/platform.js +10 -8
- package/dist/contracts/problem-document.d.ts +14 -0
- package/dist/contracts/problem-document.js +35 -0
- package/dist/contracts/push-new.d.ts +21 -6
- package/dist/contracts/push-new.js +3 -7
- package/dist/contracts/resources.d.ts +8 -7
- package/dist/contracts/resources.js +9 -6
- package/dist/contracts/runtime-api.d.ts +162 -92
- package/dist/contracts/runtime-api.js +99 -27
- package/dist/contracts/runtime-app.d.ts +41 -11
- package/dist/contracts/runtime-app.js +22 -1
- package/dist/contracts/runtime-db.d.ts +424 -0
- package/dist/contracts/runtime-db.js +108 -0
- package/dist/contracts/runtime-storage.d.ts +120 -0
- package/dist/contracts/runtime-storage.js +40 -0
- package/dist/contracts/sf-config-v1.d.ts +49 -1
- package/dist/contracts/sf-config-v1.js +2 -2
- package/dist/contracts/sites.d.ts +1 -0
- package/dist/contracts/sites.js +20 -12
- package/dist/contracts/space-config.d.ts +62 -22
- package/dist/contracts/space-config.js +173 -47
- package/dist/contracts/spaces.d.ts +79 -45
- package/dist/contracts/spaces.js +66 -50
- package/dist/contracts/superadmin-spaces.d.ts +13 -2
- package/dist/contracts/superadmin-spaces.js +15 -0
- package/dist/contracts/superadmin-tenants.js +4 -4
- package/dist/contracts/superadmin.d.ts +4 -0
- package/dist/contracts/superadmin.js +14 -1
- package/dist/contracts/tags.d.ts +17 -17
- package/dist/contracts/tags.js +1 -1
- package/dist/contracts/teams.js +25 -16
- package/dist/contracts/theme-json.js +1 -1
- package/dist/contracts/transfers.js +4 -4
- package/dist/contracts/variables.js +3 -3
- package/dist/contracts/zero.d.ts +204 -338
- package/dist/contracts/zero.js +94 -98
- package/dist/dashboard-paths/index.d.ts +16 -1
- package/dist/dashboard-paths/index.js +18 -0
- package/dist/docs/agent-handoff-document.d.ts +2 -2
- package/dist/docs/agent-handoff-document.js +8 -7
- package/dist/docs/agent-prose.d.ts +22 -3
- package/dist/docs/agent-prose.js +221 -51
- package/dist/docs/agent-setup.d.ts +13 -10
- package/dist/docs/agent-setup.js +279 -53
- package/dist/docs/agent-solutions.d.ts +6 -6
- package/dist/docs/agent-solutions.js +23 -21
- package/dist/docs/catalog.d.ts +29 -74
- package/dist/docs/catalog.js +65 -92
- package/dist/docs/error-docs.js +293 -221
- package/dist/docs/skill-distribution.d.ts +2 -0
- package/dist/docs/skill-distribution.js +7 -4
- package/dist/docs/skills.d.ts +546 -0
- package/dist/docs/skills.js +340 -0
- package/dist/utils/browser-credential.d.ts +19 -0
- package/dist/utils/browser-credential.js +62 -0
- package/dist/utils/comment-avatars.d.ts +7 -0
- package/dist/utils/comment-avatars.js +42 -0
- package/dist/utils/content-type.d.ts +3 -3
- package/dist/utils/content-type.js +38 -61
- package/dist/utils/domain-diagnostics.d.ts +5 -5
- package/dist/utils/domain-diagnostics.js +21 -10
- package/dist/utils/local-space-state.d.ts +78 -4
- package/dist/utils/local-space-state.js +383 -82
- package/dist/utils/one-shot-replay.d.ts +14 -0
- package/dist/utils/one-shot-replay.js +21 -0
- package/dist/utils/page-preview.d.ts +7 -0
- package/dist/utils/page-preview.js +9 -0
- package/dist/utils/pages.d.ts +2 -11
- package/dist/utils/pages.js +58 -14
- package/dist/utils/publish-form-data.d.ts +22 -0
- package/dist/utils/publish-form-data.js +26 -0
- package/dist/utils/publish-policy.js +20 -4
- package/dist/utils/query-keys.d.ts +7 -4
- package/dist/utils/query-keys.js +13 -4
- package/dist/utils/runtime-paths.d.ts +3 -0
- package/dist/utils/runtime-paths.js +7 -0
- package/dist/utils/secure-local-file.d.ts +73 -0
- package/dist/utils/secure-local-file.js +1373 -0
- package/dist/utils/space-config.d.ts +13 -4
- package/dist/utils/space-config.js +123 -15
- package/dist/utils/storage-policy.d.ts +20 -0
- package/dist/utils/storage-policy.fixtures.json +174 -0
- package/dist/utils/storage-policy.js +193 -0
- package/dist/utils/upload-session.d.ts +12 -1
- package/dist/utils/upload-session.js +37 -2
- package/dist/utils/version-file-browser.d.ts +13 -0
- package/dist/utils/version-file-browser.js +59 -0
- package/package.json +19 -1
- package/dist/contracts/mounts.d.ts +0 -142
- package/dist/contracts/mounts.js +0 -56
- package/dist/utils/asset-fingerprint.d.ts +0 -64
- package/dist/utils/asset-fingerprint.js +0 -620
package/dist/docs/error-docs.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
// Error reference content (internal-docs/platform.md "Global API Conventions"):
|
|
2
|
-
// every
|
|
2
|
+
// every problem document `type` points at `https://spacefast.com/docs/errors/{code}`,
|
|
3
3
|
// and those pages are GENERATED from this table — one entry per member of
|
|
4
4
|
// `ERROR_CODES`, asserted complete by the conformance suite so links never rot
|
|
5
5
|
// and pages never go missing. apps/www renders the HTML pages and writes the
|
|
6
6
|
// `.md` twins from the same entries.
|
|
7
7
|
import { BRAND } from "../brand.js";
|
|
8
|
-
import {
|
|
8
|
+
import { serviceOrigin } from "../config/domains.js";
|
|
9
|
+
import { errorDocsUrl, errorTitle, PROBLEM_CONTENT_TYPE, } from "../contracts/error-codes.js";
|
|
9
10
|
// Restore upgrade-oriented recovery copy here when paid plan checkout is live.
|
|
10
11
|
export const ERROR_DOCS = {
|
|
11
12
|
abuse_report_invalid_transition: {
|
|
@@ -28,21 +29,17 @@ export const ERROR_DOCS = {
|
|
|
28
29
|
summary: "The authorization request was denied by the user.",
|
|
29
30
|
fix: "Restart the login flow and approve the request to continue.",
|
|
30
31
|
},
|
|
31
|
-
access_scope_suggestion: {
|
|
32
|
-
summary: "Published dependencies cluster under paths that may be useful as explicit public scopes.",
|
|
33
|
-
fix: "If those files are safe for anyone to read, make only the suggested scopes Public. Otherwise leave access unchanged.",
|
|
34
|
-
},
|
|
35
32
|
agent_handoff_declined: {
|
|
36
33
|
summary: "The app-private agent handoff cannot be redeemed.",
|
|
37
|
-
fix: "Ask the user to create a fresh handoff for this
|
|
34
|
+
fix: "Ask the user to create a fresh handoff for this space and client, then redeem that new link once.",
|
|
38
35
|
},
|
|
39
36
|
agent_handoff_limit_reached: {
|
|
40
|
-
summary: "This user already has the maximum number of pending handoffs for the
|
|
41
|
-
fix: "Redeem or revoke an existing pending handoff for the
|
|
37
|
+
summary: "This user already has the maximum number of pending handoffs for the space.",
|
|
38
|
+
fix: "Redeem or revoke an existing pending handoff for the space before creating another.",
|
|
42
39
|
},
|
|
43
40
|
agent_handoff_origin_unsupported: {
|
|
44
41
|
summary: "The dashboard origin this deployment is configured with cannot mint canonical agent handoff links.",
|
|
45
|
-
fix: "Point SPACEFAST_DASHBOARD_URL at a valid HTTP(S) origin
|
|
42
|
+
fix: "Point SPACEFAST_DASHBOARD_URL at a valid HTTP(S) origin. If you cannot change it, contact support.",
|
|
46
43
|
},
|
|
47
44
|
ambiguous_space_slug: {
|
|
48
45
|
summary: "The slug matches spaces in more than one of your teams, so it cannot be resolved.",
|
|
@@ -50,11 +47,11 @@ export const ERROR_DOCS = {
|
|
|
50
47
|
},
|
|
51
48
|
anonymous_expired: {
|
|
52
49
|
summary: "This anonymous space expired before it was claimed.",
|
|
53
|
-
fix: "Publish a fresh space and share its claim link right away this time. If you meant to update a space
|
|
50
|
+
fix: "Publish a fresh space and share its claim link right away this time. If you meant to update a live space, check .spacefast/ (or your saved receipt) for its spaceId. Publish to that space with its credential instead of creating a new space.",
|
|
54
51
|
},
|
|
55
52
|
anonymous_pool_unavailable: {
|
|
56
53
|
summary: "No pooled capacity is available for anonymous publishes right now.",
|
|
57
|
-
fix: "Retry shortly
|
|
54
|
+
fix: "Retry shortly. Capacity replenishes automatically.",
|
|
58
55
|
},
|
|
59
56
|
anonymous_publish_rate_limited: {
|
|
60
57
|
summary: "Too many anonymous publishes came from this network in a short window.",
|
|
@@ -65,8 +62,8 @@ export const ERROR_DOCS = {
|
|
|
65
62
|
fix: "Log in to publish into an authenticated space, or claim/delete an existing anonymous space before creating another.",
|
|
66
63
|
},
|
|
67
64
|
api_key_scope_underivable: {
|
|
68
|
-
summary: "A concrete access policy
|
|
69
|
-
fix: "Point scope at a resource you can already reach (an existing space owned by a team)
|
|
65
|
+
summary: "A concrete access policy cannot be derived from the requested scope and permissions.",
|
|
66
|
+
fix: "Point scope at a resource you can already reach (an existing space owned by a team). Request only permissions your credential already has.",
|
|
70
67
|
},
|
|
71
68
|
archive_body_required: {
|
|
72
69
|
summary: "This request must carry an archive body but none was provided.",
|
|
@@ -81,12 +78,12 @@ export const ERROR_DOCS = {
|
|
|
81
78
|
fix: "Pass the code returned by the authorization step.",
|
|
82
79
|
},
|
|
83
80
|
authorization_pending: {
|
|
84
|
-
summary: "The device login
|
|
81
|
+
summary: "The device login is not approved yet.",
|
|
85
82
|
fix: "Keep polling at the advised interval until the user approves the request.",
|
|
86
83
|
},
|
|
87
84
|
billing_receipt_invalid: {
|
|
88
|
-
summary: "The store receipt or notification
|
|
89
|
-
fix: "Re-check the transaction id or purchase token and retry
|
|
85
|
+
summary: "The store receipt or notification cannot be verified with the payment provider.",
|
|
86
|
+
fix: "Re-check the transaction id or purchase token and retry. Contact support if it persists.",
|
|
90
87
|
},
|
|
91
88
|
billing_receipt_not_bound_to_team: {
|
|
92
89
|
summary: "The store purchase was made under a different account token than this team's.",
|
|
@@ -105,7 +102,7 @@ export const ERROR_DOCS = {
|
|
|
105
102
|
fix: "Check the product id against the store catalog returned by the billing endpoints.",
|
|
106
103
|
},
|
|
107
104
|
build_command_missing: {
|
|
108
|
-
summary: "A build or install command
|
|
105
|
+
summary: "A build or install command cannot be found during the build run.",
|
|
109
106
|
fix: "Check the command spelling and ensure its tool is declared in package.json or available in the build image.",
|
|
110
107
|
},
|
|
111
108
|
build_execution_unavailable: {
|
|
@@ -122,10 +119,10 @@ export const ERROR_DOCS = {
|
|
|
122
119
|
},
|
|
123
120
|
build_no_index_html: {
|
|
124
121
|
summary: "The build produced output but no index.html at the site root.",
|
|
125
|
-
fix: "
|
|
122
|
+
fix: "Ensure your build writes an index.html to the output directory. Otherwise point the output directory at the folder that contains index.html.",
|
|
126
123
|
},
|
|
127
124
|
build_not_created: {
|
|
128
|
-
summary: "The build
|
|
125
|
+
summary: "The build cannot be created.",
|
|
129
126
|
fix: "Verify the build request payload and retry.",
|
|
130
127
|
},
|
|
131
128
|
build_oom: {
|
|
@@ -150,7 +147,7 @@ export const ERROR_DOCS = {
|
|
|
150
147
|
},
|
|
151
148
|
channel_name_reserved: {
|
|
152
149
|
summary: "The channel name collides with a reserved hostname suffix and cannot be used.",
|
|
153
|
-
fix: "Choose a different channel name
|
|
150
|
+
fix: "Choose a different channel name. V-prefixed numeric names and ver- prefixes are reserved.",
|
|
154
151
|
},
|
|
155
152
|
channel_pointer_moved: {
|
|
156
153
|
summary: "The channel was promoted to a different version since you read it.",
|
|
@@ -184,6 +181,10 @@ export const ERROR_DOCS = {
|
|
|
184
181
|
summary: "The sf.jsonc configuration file exceeds the maximum size.",
|
|
185
182
|
fix: "Keep the configuration file under the documented size limit (256 KB).",
|
|
186
183
|
},
|
|
184
|
+
config_functions_key_removed: {
|
|
185
|
+
summary: "The sf.jsonc configuration still uses the removed top-level functions key.",
|
|
186
|
+
fix: 'Replace the functions block with a runtime block: set runtime.kind to "functions" and move entry, compatibilityDate, and database under it.',
|
|
187
|
+
},
|
|
187
188
|
config_invalid: {
|
|
188
189
|
summary: "The space configuration failed validation.",
|
|
189
190
|
fix: "Fix the reported fields against the published schema at /schemas/sf.json.",
|
|
@@ -192,20 +193,32 @@ export const ERROR_DOCS = {
|
|
|
192
193
|
summary: "A meta field in the space configuration exceeds its maximum length.",
|
|
193
194
|
fix: "Shorten the meta title, description, or other reported field.",
|
|
194
195
|
},
|
|
196
|
+
config_name_too_long: {
|
|
197
|
+
summary: "The name in the space configuration exceeds its maximum length.",
|
|
198
|
+
fix: "Shorten the name in sf.jsonc to 255 characters or fewer.",
|
|
199
|
+
},
|
|
200
|
+
config_runtime_entry_missing: {
|
|
201
|
+
summary: "The declared runtime has no entry module to compile.",
|
|
202
|
+
fix: "Name the entry in sf.jsonc: runtime.entry for functions, runtime.server and runtime.client for zero. Remove the runtime block to publish static files instead.",
|
|
203
|
+
},
|
|
204
|
+
config_runtime_invalid_kind: {
|
|
205
|
+
summary: "The runtime block in the space configuration declares an unknown kind.",
|
|
206
|
+
fix: 'Set runtime.kind to "zero" or "functions" in sf.jsonc.',
|
|
207
|
+
},
|
|
195
208
|
config_templates_over_limit: {
|
|
196
209
|
summary: "The configuration declares more template files than the plan allows.",
|
|
197
210
|
fix: "Reduce the number of template entries in sf.jsonc. Still stuck? POST /v1/feedback with the error code and request id.",
|
|
198
211
|
},
|
|
199
212
|
continuation_unavailable: {
|
|
200
|
-
summary: "This claim token can no longer be exchanged for an
|
|
213
|
+
summary: "This claim token can no longer be exchanged for an API key.",
|
|
201
214
|
fix: "If the space is claimed, ask its owner for an API key (dashboard: Account → API keys). If it is still unclaimed, keep using the claim token as bearer auth instead of exchanging it. Still stuck? POST /v1/feedback with the error code and request id.",
|
|
202
215
|
},
|
|
203
216
|
continuation_used: {
|
|
204
|
-
summary: "This claim token was already exchanged for a durable
|
|
205
|
-
fix: "Authenticate with the exchanged
|
|
217
|
+
summary: "This claim token was already exchanged for a durable API key.",
|
|
218
|
+
fix: "Authenticate with the exchanged API key (check .spacefast/state.json or wherever it was saved). If it was lost, ask the space owner to create a new API key.",
|
|
206
219
|
},
|
|
207
220
|
credential_expired: {
|
|
208
|
-
summary: "The credential used for this request
|
|
221
|
+
summary: "The credential used for this request is expired.",
|
|
209
222
|
fix: "Create a new API key or sign in again.",
|
|
210
223
|
},
|
|
211
224
|
credential_not_yet_valid: {
|
|
@@ -222,7 +235,7 @@ export const ERROR_DOCS = {
|
|
|
222
235
|
},
|
|
223
236
|
csam_blocked: {
|
|
224
237
|
summary: "The content was blocked because it matched known child sexual abuse material.",
|
|
225
|
-
fix: "This action is final and reported as required by law
|
|
238
|
+
fix: "This action is final and reported as required by law. Do not retry.",
|
|
226
239
|
},
|
|
227
240
|
csam_policy_floor: {
|
|
228
241
|
summary: "CSAM enforcement policy cannot be set below the mandatory account-suspend floor.",
|
|
@@ -236,6 +249,10 @@ export const ERROR_DOCS = {
|
|
|
236
249
|
summary: "This request tried to change data location through an immutable path.",
|
|
237
250
|
fix: "Data location is fixed when the space is created and cannot be changed afterwards. Create a new space in the region you want.",
|
|
238
251
|
},
|
|
252
|
+
db_not_available: {
|
|
253
|
+
summary: "The live version has no database to read.",
|
|
254
|
+
fix: 'Publish a Zero app, or declare `"database": true` under `runtime` in sf.jsonc for a Functions app.',
|
|
255
|
+
},
|
|
239
256
|
device_authorization_failed: {
|
|
240
257
|
summary: "The device login request failed and cannot be completed.",
|
|
241
258
|
fix: "Start a new device login flow.",
|
|
@@ -253,7 +270,7 @@ export const ERROR_DOCS = {
|
|
|
253
270
|
fix: "Follow the capability rule in the error details and submit only the compatible fields.",
|
|
254
271
|
},
|
|
255
272
|
dns_import_partial_visibility: {
|
|
256
|
-
summary: "The DNS import
|
|
273
|
+
summary: "The DNS import cannot see the full zone, so importing would lose records.",
|
|
257
274
|
fix: "Verify delegation and retry once the full zone is visible.",
|
|
258
275
|
},
|
|
259
276
|
dns_provider_auth_expired: {
|
|
@@ -285,7 +302,7 @@ export const ERROR_DOCS = {
|
|
|
285
302
|
fix: "Use the provider workflow template or primary-domain action for this provider-managed zone.",
|
|
286
303
|
},
|
|
287
304
|
dns_provider_credentials_expired: {
|
|
288
|
-
summary: "The DNS provider credentials
|
|
305
|
+
summary: "The DNS provider credentials are expired or revoked.",
|
|
289
306
|
fix: "Reconnect the provider account or replace the API token.",
|
|
290
307
|
},
|
|
291
308
|
dns_provider_feature_descriptors: {
|
|
@@ -341,8 +358,8 @@ export const ERROR_DOCS = {
|
|
|
341
358
|
fix: "Refresh the provider snapshot, review the new diff, and retry the change against the latest record ids.",
|
|
342
359
|
},
|
|
343
360
|
dns_provider_snapshot_unavailable: {
|
|
344
|
-
summary: `${BRAND.productName}
|
|
345
|
-
fix: "Retry refresh after the cache or provider recovers
|
|
361
|
+
summary: `${BRAND.productName} cannot cache the latest DNS provider snapshot.`,
|
|
362
|
+
fix: "Retry refresh after the cache or provider recovers. Do not edit connected-provider records from stale data.",
|
|
346
363
|
},
|
|
347
364
|
dns_provider_temporarily_unavailable: {
|
|
348
365
|
summary: "The DNS provider is rate-limited, degraded, or temporarily unavailable.",
|
|
@@ -361,12 +378,12 @@ export const ERROR_DOCS = {
|
|
|
361
378
|
fix: "Preview and run the advertised template so provider-specific side effects and receipts are captured.",
|
|
362
379
|
},
|
|
363
380
|
dns_provider_zone_not_found: {
|
|
364
|
-
summary: "The connected DNS provider zone
|
|
381
|
+
summary: "The connected DNS provider zone cannot be found.",
|
|
365
382
|
fix: "Refresh the provider account, reattach the zone, or reconnect the provider.",
|
|
366
383
|
},
|
|
367
384
|
dns_record_conflicts_with_managed: {
|
|
368
385
|
summary: `The DNS change conflicts with a record ${BRAND.productName} manages for this domain.`,
|
|
369
|
-
fix: "Remove or adjust the conflicting record
|
|
386
|
+
fix: "Remove or adjust the conflicting record. Managed records cannot be overridden.",
|
|
370
387
|
},
|
|
371
388
|
dns_record_managed: {
|
|
372
389
|
summary: `This DNS record is managed by ${BRAND.productName} and cannot be edited directly.`,
|
|
@@ -386,7 +403,7 @@ export const ERROR_DOCS = {
|
|
|
386
403
|
},
|
|
387
404
|
domain_facet_already_managed: {
|
|
388
405
|
summary: `This facet of the domain is already managed by ${BRAND.productName}.`,
|
|
389
|
-
fix: "No action is needed
|
|
406
|
+
fix: "No action is needed. The facet is already active.",
|
|
390
407
|
},
|
|
391
408
|
domain_facet_external: {
|
|
392
409
|
summary: `This facet of the domain is managed outside ${BRAND.productName}.`,
|
|
@@ -426,7 +443,7 @@ export const ERROR_DOCS = {
|
|
|
426
443
|
},
|
|
427
444
|
domain_reserved_suffix: {
|
|
428
445
|
summary: `The hostname is under a ${BRAND.productName}-managed suffix and cannot be added as a domain.`,
|
|
429
|
-
fix: `Use a domain you own
|
|
446
|
+
fix: `Use a domain you own. ${BRAND.productName} assigns default and management hostnames automatically.`,
|
|
430
447
|
},
|
|
431
448
|
domain_transfer_active: {
|
|
432
449
|
summary: "The domain has a transfer in progress, which blocks this operation.",
|
|
@@ -453,7 +470,7 @@ export const ERROR_DOCS = {
|
|
|
453
470
|
fix: "Adjust the category ranges so each severity is covered by at most one policy.",
|
|
454
471
|
},
|
|
455
472
|
expired_token: {
|
|
456
|
-
summary: "The token
|
|
473
|
+
summary: "The token is expired.",
|
|
457
474
|
fix: "Request a new token and retry.",
|
|
458
475
|
},
|
|
459
476
|
export_archive_not_ready: {
|
|
@@ -486,23 +503,23 @@ export const ERROR_DOCS = {
|
|
|
486
503
|
},
|
|
487
504
|
idempotency_conflict_in_progress: {
|
|
488
505
|
summary: "Another request with the same Idempotency-Key is still in flight.",
|
|
489
|
-
fix: "Wait for the original request to finish
|
|
506
|
+
fix: "Wait for the original request to finish. Its response will be replayed.",
|
|
490
507
|
},
|
|
491
508
|
idempotency_key_reused: {
|
|
492
509
|
summary: "The Idempotency-Key was reused with a different request body.",
|
|
493
|
-
fix: "Use a fresh key for new requests
|
|
510
|
+
fix: "Use a fresh key for new requests. Keys bind to one exact request body.",
|
|
494
511
|
},
|
|
495
512
|
import_archive_not_uploaded: {
|
|
496
513
|
summary: "The import has no uploaded archive yet.",
|
|
497
514
|
fix: "Upload the archive to the import's upload target, then finalize.",
|
|
498
515
|
},
|
|
499
516
|
import_not_cancelable: {
|
|
500
|
-
summary: "The import
|
|
501
|
-
fix: "Wait for the import to finish
|
|
517
|
+
summary: "The import is past the point where it can be canceled.",
|
|
518
|
+
fix: "Wait for the import to finish. Completed imports can be deleted as versions.",
|
|
502
519
|
},
|
|
503
520
|
import_not_waiting_for_archive: {
|
|
504
521
|
summary: "The import is not waiting for an archive upload.",
|
|
505
|
-
fix: "Check the import status
|
|
522
|
+
fix: "Check the import status. If the archive step is complete, continue to the next step.",
|
|
506
523
|
},
|
|
507
524
|
incumbent_controls_dns: {
|
|
508
525
|
summary: "Another team controls this domain's DNS, so the operation is blocked.",
|
|
@@ -518,7 +535,7 @@ export const ERROR_DOCS = {
|
|
|
518
535
|
},
|
|
519
536
|
internal_error: {
|
|
520
537
|
summary: "Something went wrong on our side.",
|
|
521
|
-
fix: "Retry the request
|
|
538
|
+
fix: "Retry the request. If it persists, contact support with the requestId.",
|
|
522
539
|
},
|
|
523
540
|
invalid_claim_token: {
|
|
524
541
|
summary: "The claim token is invalid or does not match this space.",
|
|
@@ -533,7 +550,7 @@ export const ERROR_DOCS = {
|
|
|
533
550
|
fix: "Pick a region from the documented data locations, or use auto.",
|
|
534
551
|
},
|
|
535
552
|
invalid_device_code: {
|
|
536
|
-
summary: "The device code is invalid or
|
|
553
|
+
summary: "The device code is invalid or expired.",
|
|
537
554
|
fix: "Start a new device login flow.",
|
|
538
555
|
},
|
|
539
556
|
invalid_domain: {
|
|
@@ -557,11 +574,11 @@ export const ERROR_DOCS = {
|
|
|
557
574
|
fix: "Restart the login flow to obtain a new grant.",
|
|
558
575
|
},
|
|
559
576
|
invalid_idempotency_key: {
|
|
560
|
-
summary: "The Idempotency-Key
|
|
561
|
-
fix: "Send a non-empty Idempotency-Key
|
|
577
|
+
summary: "The Idempotency-Key is missing or invalid, or an anonymous publish omitted its secret replay principal.",
|
|
578
|
+
fix: "Send a non-empty Idempotency-Key of at most 255 characters. Credential-free publish retries also need a stable, secret X-Spacefast-Idempotency-Principal containing 64 hexadecimal characters.",
|
|
562
579
|
},
|
|
563
580
|
invalid_publish_archive: {
|
|
564
|
-
summary: "The uploaded archive
|
|
581
|
+
summary: "The uploaded archive cannot be read as a valid zip.",
|
|
565
582
|
fix: "Re-create the archive as a standard zip and upload again.",
|
|
566
583
|
},
|
|
567
584
|
invalid_publish_path: {
|
|
@@ -574,7 +591,7 @@ export const ERROR_DOCS = {
|
|
|
574
591
|
},
|
|
575
592
|
invalid_request: {
|
|
576
593
|
summary: "The request is malformed.",
|
|
577
|
-
fix: "Fix the field referenced by
|
|
594
|
+
fix: "Fix the field referenced by pointer and details, then retry.",
|
|
578
595
|
},
|
|
579
596
|
invalid_runtime_event: {
|
|
580
597
|
summary: "The runtime event payload is not recognized.",
|
|
@@ -590,7 +607,7 @@ export const ERROR_DOCS = {
|
|
|
590
607
|
},
|
|
591
608
|
invalid_user_code: {
|
|
592
609
|
summary: "The user code does not match a pending device login.",
|
|
593
|
-
fix: "Enter the code exactly as shown by your CLI
|
|
610
|
+
fix: "Enter the code exactly as shown by your CLI. Codes expire after a few minutes.",
|
|
594
611
|
},
|
|
595
612
|
invalid_version_path: {
|
|
596
613
|
summary: "A file path in the version is not a valid space path.",
|
|
@@ -602,7 +619,7 @@ export const ERROR_DOCS = {
|
|
|
602
619
|
},
|
|
603
620
|
invalid_webhook_payload: {
|
|
604
621
|
summary: "The webhook configuration payload is malformed.",
|
|
605
|
-
fix: "Fix the field referenced by
|
|
622
|
+
fix: "Fix the field referenced by pointer and retry.",
|
|
606
623
|
},
|
|
607
624
|
invalid_webhook_signature: {
|
|
608
625
|
summary: "The webhook signature did not verify.",
|
|
@@ -610,7 +627,7 @@ export const ERROR_DOCS = {
|
|
|
610
627
|
},
|
|
611
628
|
invalid_webhook_url: {
|
|
612
629
|
summary: "The webhook URL is not an allowed public HTTPS endpoint.",
|
|
613
|
-
fix: "Use a public HTTPS URL
|
|
630
|
+
fix: "Use a public HTTPS URL. Private networks and link-local addresses are blocked.",
|
|
614
631
|
},
|
|
615
632
|
invalid_zero_realtime_event: {
|
|
616
633
|
summary: "The Zero realtime event payload is malformed or scoped to the wrong space.",
|
|
@@ -629,7 +646,7 @@ export const ERROR_DOCS = {
|
|
|
629
646
|
fix: "Sign in as the invited email, or ask an admin to invite your current address.",
|
|
630
647
|
},
|
|
631
648
|
invitation_expired: {
|
|
632
|
-
summary: "The invitation
|
|
649
|
+
summary: "The invitation is expired and can no longer be accepted.",
|
|
633
650
|
fix: "Ask a team admin to send a fresh invitation, then accept the new one.",
|
|
634
651
|
},
|
|
635
652
|
invitation_not_pending: {
|
|
@@ -642,7 +659,7 @@ export const ERROR_DOCS = {
|
|
|
642
659
|
},
|
|
643
660
|
job_not_found: {
|
|
644
661
|
summary: "The background job was not found.",
|
|
645
|
-
fix: "Verify the job id
|
|
662
|
+
fix: "Verify the job id. Completed jobs are eventually pruned.",
|
|
646
663
|
},
|
|
647
664
|
job_not_promotable: {
|
|
648
665
|
summary: "The job cannot be promoted in its current state.",
|
|
@@ -674,7 +691,7 @@ export const ERROR_DOCS = {
|
|
|
674
691
|
},
|
|
675
692
|
malware_detected: {
|
|
676
693
|
summary: "Malware was detected in the uploaded content.",
|
|
677
|
-
fix: "Remove the flagged files
|
|
694
|
+
fix: "Remove the flagged files. Contact support if you believe this is a false positive.",
|
|
678
695
|
},
|
|
679
696
|
managed_domain_protected: {
|
|
680
697
|
summary: "This is a system-managed view.fast hostname and cannot be mutated like a custom domain.",
|
|
@@ -682,24 +699,24 @@ export const ERROR_DOCS = {
|
|
|
682
699
|
},
|
|
683
700
|
manifest_body_too_large: {
|
|
684
701
|
summary: "The upload manifest body exceeds the maximum size.",
|
|
685
|
-
fix: "Keep the manifest under 16 MB
|
|
702
|
+
fix: "Keep the manifest under 16 MB. Split very large publishes into batches.",
|
|
686
703
|
},
|
|
687
704
|
manifest_duplicate_path: {
|
|
688
705
|
summary: "The upload manifest declares the same path more than once.",
|
|
689
|
-
fix: "Deduplicate paths
|
|
706
|
+
fix: "Deduplicate paths. Comparisons use the canonical (decoded, NFC) form.",
|
|
690
707
|
},
|
|
691
708
|
manifest_too_many_files: {
|
|
692
709
|
summary: "The upload manifest declares more files than the allowed ceiling.",
|
|
693
710
|
fix: "Reduce the file count or split content across multiple spaces.",
|
|
694
711
|
},
|
|
695
|
-
mcp_acted_for_team_deleted: {
|
|
696
|
-
summary: "This MCP approval or execution run acted only for a team that has since been deleted, so it can no longer be approved, denied, or canceled.",
|
|
697
|
-
fix: "Nothing to do — the record is read-only history. Restore the deleted team within its recovery window if you still need to act on it.",
|
|
698
|
-
},
|
|
699
712
|
member_already_exists: {
|
|
700
713
|
summary: "This user is already a member of the team.",
|
|
701
714
|
fix: "Update the existing member's role instead of inviting again.",
|
|
702
715
|
},
|
|
716
|
+
method_not_allowed: {
|
|
717
|
+
summary: "The requested HTTP method is not supported for this endpoint.",
|
|
718
|
+
fix: "Use one of the methods listed in the Allow response header.",
|
|
719
|
+
},
|
|
703
720
|
missing_route_param: {
|
|
704
721
|
summary: "A required route parameter is missing from the request path.",
|
|
705
722
|
fix: "Check the endpoint path in the API reference and include every parameter.",
|
|
@@ -708,6 +725,10 @@ export const ERROR_DOCS = {
|
|
|
708
725
|
summary: "The selected move target no longer has capacity for the space.",
|
|
709
726
|
fix: "Retry the move with a different target or after capacity is freed.",
|
|
710
727
|
},
|
|
728
|
+
name_managed_by_config: {
|
|
729
|
+
summary: "The space name is managed by sf.jsonc while its live version declares one.",
|
|
730
|
+
fix: "Change name in sf.jsonc and publish, or remove name from the file to rename the space through the API.",
|
|
731
|
+
},
|
|
711
732
|
nameserver_delegation_required: {
|
|
712
733
|
summary: `This operation requires the domain to be delegated to ${BRAND.productName} nameservers.`,
|
|
713
734
|
fix: "Update the domain's nameservers at the registrar, then retry once delegation propagates.",
|
|
@@ -718,7 +739,7 @@ export const ERROR_DOCS = {
|
|
|
718
739
|
},
|
|
719
740
|
noop_publish: {
|
|
720
741
|
summary: "The publish matched the live version exactly, so nothing changed.",
|
|
721
|
-
fix: "No action needed
|
|
742
|
+
fix: "No action needed. The existing live version already serves this content.",
|
|
722
743
|
},
|
|
723
744
|
not_enrolled: {
|
|
724
745
|
summary: "This account is not enrolled in the private beta, so the API cannot be used yet.",
|
|
@@ -742,7 +763,7 @@ export const ERROR_DOCS = {
|
|
|
742
763
|
},
|
|
743
764
|
plan_grant_already_revoked: {
|
|
744
765
|
summary: "This plan grant was already revoked.",
|
|
745
|
-
fix: "Nothing to do
|
|
766
|
+
fix: "Nothing to do. Create a new grant if the team should regain the plan.",
|
|
746
767
|
},
|
|
747
768
|
placement_invalid_burstable: {
|
|
748
769
|
summary: "The placement burstable option was used with an unsupported placement mode.",
|
|
@@ -766,15 +787,15 @@ export const ERROR_DOCS = {
|
|
|
766
787
|
},
|
|
767
788
|
provider_error: {
|
|
768
789
|
summary: "The hosting provider reported an error.",
|
|
769
|
-
fix: "Retry
|
|
790
|
+
fix: "Retry. If the error persists, contact support with the requestId.",
|
|
770
791
|
},
|
|
771
792
|
provider_job_failed: {
|
|
772
793
|
summary: "A hosting-provider job failed while processing this operation.",
|
|
773
|
-
fix: "Retry the operation
|
|
794
|
+
fix: "Retry the operation. If it keeps failing, contact support with the operation id.",
|
|
774
795
|
},
|
|
775
796
|
provider_job_timeout: {
|
|
776
797
|
summary: "A hosting-provider job timed out while processing this operation.",
|
|
777
|
-
fix: "Retry the operation
|
|
798
|
+
fix: "Retry the operation. If the provider is slow right now, wait and retry again.",
|
|
778
799
|
},
|
|
779
800
|
provider_runtime_feature_unsupported: {
|
|
780
801
|
summary: "The hosting provider does not support this runtime feature.",
|
|
@@ -786,10 +807,10 @@ export const ERROR_DOCS = {
|
|
|
786
807
|
},
|
|
787
808
|
proxy_upstream_denied: {
|
|
788
809
|
summary: "The proxy upstream is on a denied network and cannot be used.",
|
|
789
|
-
fix: "Proxy only to public HTTPS upstreams
|
|
810
|
+
fix: "Proxy only to public HTTPS upstreams. Private and internal addresses are blocked.",
|
|
790
811
|
},
|
|
791
812
|
proxy_upstream_unresolved: {
|
|
792
|
-
summary: "The proxy upstream hostname
|
|
813
|
+
summary: "The proxy upstream hostname cannot be resolved.",
|
|
793
814
|
fix: "Verify the upstream DNS name resolves publicly, then publish again.",
|
|
794
815
|
},
|
|
795
816
|
publish_archive_compression_ratio_exceeded: {
|
|
@@ -810,7 +831,7 @@ export const ERROR_DOCS = {
|
|
|
810
831
|
},
|
|
811
832
|
publish_base_changed: {
|
|
812
833
|
summary: "Someone published new space settings after the base you loaded, so saving would overwrite their change.",
|
|
813
|
-
fix: "Reload the latest settings, review the difference, and save again
|
|
834
|
+
fix: "Reload the latest settings, review the difference, and save again. Pass force only to overwrite deliberately.",
|
|
814
835
|
},
|
|
815
836
|
publish_bytes_missing: {
|
|
816
837
|
summary: "The publish has no complete staged content to materialize.",
|
|
@@ -837,7 +858,7 @@ export const ERROR_DOCS = {
|
|
|
837
858
|
fix: "Trim the inline payload, or switch to an upload-based publish for larger content.",
|
|
838
859
|
},
|
|
839
860
|
publish_not_cancelable: {
|
|
840
|
-
summary: "The publish
|
|
861
|
+
summary: "The publish is past the point where it can be canceled.",
|
|
841
862
|
fix: "Wait for the publish to finish, then roll back by promoting a previous version if needed.",
|
|
842
863
|
},
|
|
843
864
|
publish_path_collision: {
|
|
@@ -848,13 +869,9 @@ export const ERROR_DOCS = {
|
|
|
848
869
|
summary: "A publish path is not a relative, normalized POSIX path.",
|
|
849
870
|
fix: "Use forward-slash relative paths without traversal segments or control characters.",
|
|
850
871
|
},
|
|
851
|
-
publish_reference_missing: {
|
|
852
|
-
summary: "Published HTML, CSS, or JavaScript references an internal path that is not in the version.",
|
|
853
|
-
fix: "Publish the missing artifact, or correct the reference to a route that this version serves.",
|
|
854
|
-
},
|
|
855
872
|
publish_setup_failed: {
|
|
856
873
|
summary: "Provisioning for this publish failed.",
|
|
857
|
-
fix: "Retry the publish
|
|
874
|
+
fix: "Retry the publish. If it persists, contact support with the requestId.",
|
|
858
875
|
},
|
|
859
876
|
publish_snapshot_empty: {
|
|
860
877
|
summary: "An empty snapshot was sent without an explicit base version.",
|
|
@@ -862,11 +879,11 @@ export const ERROR_DOCS = {
|
|
|
862
879
|
},
|
|
863
880
|
publish_upload_failed: {
|
|
864
881
|
summary: "Uploading the publish content failed.",
|
|
865
|
-
fix: "Retry the publish
|
|
882
|
+
fix: "Retry the publish. Partial uploads are resumable through the upload session.",
|
|
866
883
|
},
|
|
867
884
|
publish_verification_failed: {
|
|
868
885
|
summary: "Post-publish verification did not see the new content serving.",
|
|
869
|
-
fix: "Retry
|
|
886
|
+
fix: "Retry. If the space still serves stale content, contact support.",
|
|
870
887
|
},
|
|
871
888
|
queue_not_found: {
|
|
872
889
|
summary: "The named job queue does not exist.",
|
|
@@ -877,13 +894,17 @@ export const ERROR_DOCS = {
|
|
|
877
894
|
fix: "Wait for the window in the Retry-After header to pass, then retry.",
|
|
878
895
|
},
|
|
879
896
|
registration_expired: {
|
|
880
|
-
summary: "The domain registration
|
|
897
|
+
summary: "The domain registration is expired.",
|
|
881
898
|
fix: "Renew the domain at its registrar before retrying.",
|
|
882
899
|
},
|
|
883
900
|
registration_expiring: {
|
|
884
901
|
summary: "The domain registration is about to expire, which blocks this operation.",
|
|
885
902
|
fix: "Renew the domain first, then retry.",
|
|
886
903
|
},
|
|
904
|
+
resource_revision_changed: {
|
|
905
|
+
summary: "The resource changed after you loaded it, so the stale write was rejected.",
|
|
906
|
+
fix: "Use the current resource returned in error.details.current, reapply the intended fields, and send its revision as expectedRevision.",
|
|
907
|
+
},
|
|
887
908
|
routing_rules_over_plan: {
|
|
888
909
|
summary: "The published _redirects and _headers exceed the plan's routing-rule allowance.",
|
|
889
910
|
fix: "Reduce the rule count. Still stuck? POST /v1/feedback with the error code and request id.",
|
|
@@ -894,12 +915,16 @@ export const ERROR_DOCS = {
|
|
|
894
915
|
},
|
|
895
916
|
runtime_api_not_found: {
|
|
896
917
|
summary: "The runtime management endpoint was not found.",
|
|
897
|
-
fix: "Send the request with the management hostname as the Host header
|
|
918
|
+
fix: "Send the request with the management hostname as the Host header. Management routes are not served on public hostnames.",
|
|
898
919
|
},
|
|
899
920
|
runtime_callback_forbidden: {
|
|
900
|
-
summary: "The runtime callback
|
|
921
|
+
summary: "The runtime callback cannot be authenticated.",
|
|
901
922
|
fix: "Verify the callback secret configuration for this runtime.",
|
|
902
923
|
},
|
|
924
|
+
runtime_dev_unsupported: {
|
|
925
|
+
summary: "`sf dev` cannot run this runtime locally yet.",
|
|
926
|
+
fix: "Run your framework's own dev server (`next dev`, `vite`, …) and publish with `sf publish` when you are ready.",
|
|
927
|
+
},
|
|
903
928
|
runtime_engine_zip_missing: {
|
|
904
929
|
summary: "The runtime engine artifact is missing from this deployment.",
|
|
905
930
|
fix: "Rebuild the control plane so dist/runtime-engine.zip exists.",
|
|
@@ -910,26 +935,30 @@ export const ERROR_DOCS = {
|
|
|
910
935
|
},
|
|
911
936
|
runtime_instance_mismatch: {
|
|
912
937
|
summary: "The request reached a different runtime instance than the one it was issued for.",
|
|
913
|
-
fix: "Re-request instructions
|
|
938
|
+
fix: "Re-request instructions. The space is on another instance now.",
|
|
914
939
|
},
|
|
915
940
|
runtime_jti_missing: {
|
|
916
941
|
summary: "The runtime token is missing its replay-protection id.",
|
|
917
|
-
fix: "Mint a fresh runtime token
|
|
942
|
+
fix: "Mint a fresh runtime token. Tokens must carry a jti claim.",
|
|
918
943
|
},
|
|
919
944
|
runtime_jti_replayed: {
|
|
920
|
-
summary: "The runtime token was already used
|
|
945
|
+
summary: "The runtime token was already used. Replays are rejected.",
|
|
921
946
|
fix: "Mint a fresh runtime token for each request.",
|
|
922
947
|
},
|
|
923
948
|
runtime_jwks_key_missing: {
|
|
924
949
|
summary: "No signing key matching the token's key id was found.",
|
|
925
|
-
fix: "Refresh the runtime JWKS
|
|
950
|
+
fix: "Refresh the runtime JWKS to load the current signing keys.",
|
|
951
|
+
},
|
|
952
|
+
runtime_kind_mismatch: {
|
|
953
|
+
summary: "This operation is only available for a different runtime kind.",
|
|
954
|
+
fix: "Check `sf runtime status` for what the live version actually runs, then use the surface that runtime supports.",
|
|
926
955
|
},
|
|
927
956
|
runtime_management_unavailable: {
|
|
928
957
|
summary: "The runtime management surface is unavailable for this site.",
|
|
929
|
-
fix: "Retry shortly
|
|
958
|
+
fix: "Retry shortly. If the site stays unreachable, contact support.",
|
|
930
959
|
},
|
|
931
960
|
runtime_not_provisioned: {
|
|
932
|
-
summary: "The space
|
|
961
|
+
summary: "The space does not serve a published version yet, so it has no runtime data to read.",
|
|
933
962
|
fix: "Publish a version first. If a publish is already running, wait for it — the operation receipt reports progress.",
|
|
934
963
|
},
|
|
935
964
|
runtime_operation_missing: {
|
|
@@ -942,14 +971,14 @@ export const ERROR_DOCS = {
|
|
|
942
971
|
},
|
|
943
972
|
runtime_token_bad_signature: {
|
|
944
973
|
summary: "The runtime token signature did not verify.",
|
|
945
|
-
fix: "Mint a fresh token
|
|
974
|
+
fix: "Mint a fresh token. Verify clocks and JWKS freshness if it persists.",
|
|
946
975
|
},
|
|
947
976
|
runtime_token_expired: {
|
|
948
|
-
summary: "The runtime token
|
|
949
|
-
fix: "Mint a fresh runtime token
|
|
977
|
+
summary: "The runtime token is expired.",
|
|
978
|
+
fix: "Mint a fresh runtime token. Step tokens are short-lived by design.",
|
|
950
979
|
},
|
|
951
980
|
runtime_token_invalid: {
|
|
952
|
-
summary: "The runtime token
|
|
981
|
+
summary: "The runtime token cannot be parsed or validated.",
|
|
953
982
|
fix: "Mint a fresh runtime token.",
|
|
954
983
|
},
|
|
955
984
|
runtime_unauthorized: {
|
|
@@ -961,24 +990,28 @@ export const ERROR_DOCS = {
|
|
|
961
990
|
fix: "Follow the upload instructions returned when the session was created.",
|
|
962
991
|
},
|
|
963
992
|
runtime_upload_required: {
|
|
964
|
-
summary: "This step requires uploaded content that
|
|
993
|
+
summary: "This step requires uploaded content, but that content is not uploaded yet.",
|
|
965
994
|
fix: "Complete the uploads for this session, then retry the step.",
|
|
966
995
|
},
|
|
967
996
|
scan_pending: {
|
|
968
997
|
summary: "The content is still being scanned for safety and cannot be served yet.",
|
|
969
|
-
fix: "Wait for the scan to finish
|
|
998
|
+
fix: "Wait for the scan to finish. Serving resumes automatically once it clears.",
|
|
970
999
|
},
|
|
971
1000
|
secret_variable_in_template: {
|
|
972
1001
|
summary: "A secret variable was referenced in a template, which is blocked.",
|
|
973
|
-
fix: "
|
|
1002
|
+
fix: "Use only non-secret variables in templates. Remove the secret reference.",
|
|
1003
|
+
},
|
|
1004
|
+
service_booting: {
|
|
1005
|
+
summary: "The process that received this request is still starting and cannot serve it yet.",
|
|
1006
|
+
fix: "Wait for the Retry-After window, then send the same request again.",
|
|
974
1007
|
},
|
|
975
1008
|
service_signature_invalid: {
|
|
976
|
-
summary: "The service request signature
|
|
1009
|
+
summary: "The service request signature cannot be verified.",
|
|
977
1010
|
fix: "Sign the exact request method, path, body digest, timestamp, and a fresh nonce.",
|
|
978
1011
|
},
|
|
979
1012
|
site_already_deleted: {
|
|
980
1013
|
summary: "The site was already deleted.",
|
|
981
|
-
fix: "No action needed
|
|
1014
|
+
fix: "No action needed. The site is gone.",
|
|
982
1015
|
},
|
|
983
1016
|
site_has_live_spaces: {
|
|
984
1017
|
summary: "The site still has live spaces assigned to it, so it cannot be deleted.",
|
|
@@ -998,11 +1031,11 @@ export const ERROR_DOCS = {
|
|
|
998
1031
|
},
|
|
999
1032
|
slow_down: {
|
|
1000
1033
|
summary: "The device login is being polled faster than the advised interval.",
|
|
1001
|
-
fix: "Increase the polling interval
|
|
1034
|
+
fix: "Increase the polling interval. Aggressive polling invalidates the flow.",
|
|
1002
1035
|
},
|
|
1003
1036
|
slug_invalid: {
|
|
1004
1037
|
summary: "The slug does not meet the structural rules for managed names.",
|
|
1005
|
-
fix: "Use lowercase letters, numbers, and single dashes within the allowed length
|
|
1038
|
+
fix: "Use lowercase letters, numbers, and single dashes within the allowed length. The error message identifies the failed rule.",
|
|
1006
1039
|
},
|
|
1007
1040
|
slug_reserved: {
|
|
1008
1041
|
summary: "The slug is reserved for infrastructure, product, or impersonation protection.",
|
|
@@ -1025,8 +1058,8 @@ export const ERROR_DOCS = {
|
|
|
1025
1058
|
fix: "Wait briefly and retry the upload.",
|
|
1026
1059
|
},
|
|
1027
1060
|
space_already_claimed: {
|
|
1028
|
-
summary: "The space was already claimed
|
|
1029
|
-
fix: "If you
|
|
1061
|
+
summary: "The space was already claimed. A claim can only succeed once.",
|
|
1062
|
+
fix: "If you published this space, exchange your claim token once at POST /v1/anonymous-claim/exchange. Keep publishing to the same spaceId with that durable API key. Otherwise ask the owner for access — do not publish a duplicate space.",
|
|
1030
1063
|
},
|
|
1031
1064
|
space_capacity_warming: {
|
|
1032
1065
|
summary: "This space is waiting on serving capacity that is being provisioned in the background.",
|
|
@@ -1038,15 +1071,15 @@ export const ERROR_DOCS = {
|
|
|
1038
1071
|
},
|
|
1039
1072
|
space_claimed_credential_available: {
|
|
1040
1073
|
summary: "The space was claimed and its owner kept agent publishing enabled; this claim token now works exactly once as an exchange voucher.",
|
|
1041
|
-
fix: "POST /v1/anonymous-claim/exchange with this claim token as bearer auth. Save the returned
|
|
1074
|
+
fix: "POST /v1/anonymous-claim/exchange with this claim token as bearer auth. Save the returned API key (e.g. .spacefast/state.json), then retry the request with it as Authorization: Bearer. Do not publish a new space.",
|
|
1042
1075
|
},
|
|
1043
1076
|
space_disabled: {
|
|
1044
1077
|
summary: "The space is disabled and cannot be served or modified.",
|
|
1045
|
-
fix: "Check the disabled reason on the space
|
|
1078
|
+
fix: "Check the disabled reason on the space. It explains the path to restore it.",
|
|
1046
1079
|
},
|
|
1047
1080
|
space_expired: {
|
|
1048
1081
|
summary: "The space expired and is no longer served.",
|
|
1049
|
-
fix: "If it is within the recovery window, claim or restore it
|
|
1082
|
+
fix: "If it is within the recovery window, claim or restore it. Otherwise publish again.",
|
|
1050
1083
|
},
|
|
1051
1084
|
space_has_active_publish: {
|
|
1052
1085
|
summary: "The space has a publish in progress, which blocks this operation.",
|
|
@@ -1077,8 +1110,8 @@ export const ERROR_DOCS = {
|
|
|
1077
1110
|
fix: "Re-export from a current runtime, or upgrade before exporting.",
|
|
1078
1111
|
},
|
|
1079
1112
|
space_move_would_strand_zero_data: {
|
|
1080
|
-
summary: "The Space runs Zero, whose database
|
|
1081
|
-
fix: "Nothing was moved and no data was lost. Migrating Zero data between sites is not implemented
|
|
1113
|
+
summary: "The Space runs Zero, whose database and object storage live on the site the Space is placed on. Relocating it would strand that data on the old site, so the move is refused.",
|
|
1114
|
+
fix: "Nothing was moved and no data was lost. Migrating Zero data between sites is not implemented. Contact support if the space genuinely has to be relocated.",
|
|
1082
1115
|
},
|
|
1083
1116
|
space_moving: {
|
|
1084
1117
|
summary: "The space is moving between sites, which blocks this operation.",
|
|
@@ -1090,12 +1123,24 @@ export const ERROR_DOCS = {
|
|
|
1090
1123
|
},
|
|
1091
1124
|
space_not_disabled: {
|
|
1092
1125
|
summary: "The space is not disabled, so it cannot be restored.",
|
|
1093
|
-
fix: "No action needed
|
|
1126
|
+
fix: "No action needed. The space is already active.",
|
|
1094
1127
|
},
|
|
1095
1128
|
space_not_restorable: {
|
|
1096
1129
|
summary: "The space is past its recovery window and cannot be restored.",
|
|
1097
1130
|
fix: "Publish the content to a new space.",
|
|
1098
1131
|
},
|
|
1132
|
+
space_person_already_member: {
|
|
1133
|
+
summary: "The email already belongs to a member of the space.",
|
|
1134
|
+
fix: "Use the existing member entry instead of sending another invitation.",
|
|
1135
|
+
},
|
|
1136
|
+
space_person_invitation_pending: {
|
|
1137
|
+
summary: "A Person invitation is already pending for this email.",
|
|
1138
|
+
fix: "Resend or update the pending invitation instead of creating another one.",
|
|
1139
|
+
},
|
|
1140
|
+
space_person_self_invite: {
|
|
1141
|
+
summary: "The inviter already belongs to the space.",
|
|
1142
|
+
fix: "Use your existing space access instead of inviting yourself.",
|
|
1143
|
+
},
|
|
1099
1144
|
space_ref_ambiguous: {
|
|
1100
1145
|
summary: "The space reference matches more than one accessible space.",
|
|
1101
1146
|
fix: "Use the spc_ id, or scope the reference with a teamRef.",
|
|
@@ -1118,35 +1163,7 @@ export const ERROR_DOCS = {
|
|
|
1118
1163
|
},
|
|
1119
1164
|
static_control_file_not_supported: {
|
|
1120
1165
|
summary: "This control file is not supported by the static runtime.",
|
|
1121
|
-
fix: "Remove the file
|
|
1122
|
-
},
|
|
1123
|
-
static_mount_path_conflict: {
|
|
1124
|
-
summary: "The requested mount path overlaps another static mount on this space.",
|
|
1125
|
-
fix: "Choose a path that is not equal to, above, or below an existing mount path.",
|
|
1126
|
-
},
|
|
1127
|
-
static_mount_source_not_ready: {
|
|
1128
|
-
summary: "The website version that owns this mount is not ready.",
|
|
1129
|
-
fix: "Wait for the website version to finish finalizing, then retry.",
|
|
1130
|
-
},
|
|
1131
|
-
static_mount_target_forbidden: {
|
|
1132
|
-
summary: "The target space is not an authorized space in the same team.",
|
|
1133
|
-
fix: "Choose another space in the source space's team and authenticate with read access to its versions.",
|
|
1134
|
-
},
|
|
1135
|
-
static_mount_target_in_use: {
|
|
1136
|
-
summary: "A static mount dependency blocks changing or deleting this space.",
|
|
1137
|
-
fix: "Remove the reported static mount before retrying the operation.",
|
|
1138
|
-
},
|
|
1139
|
-
static_mount_target_not_live: {
|
|
1140
|
-
summary: "The target space does not have a production version to mount.",
|
|
1141
|
-
fix: "Publish or promote a ready version on the target space, then retry.",
|
|
1142
|
-
},
|
|
1143
|
-
static_mount_target_not_ready: {
|
|
1144
|
-
summary: "The target production version is not ready for static delivery.",
|
|
1145
|
-
fix: "Wait for the target version to finish finalizing, then retry.",
|
|
1146
|
-
},
|
|
1147
|
-
static_mount_target_not_static: {
|
|
1148
|
-
summary: "The target production version contains runtime functions.",
|
|
1149
|
-
fix: "Promote a fully static target version or serve the dynamic application without a static mount.",
|
|
1166
|
+
fix: "Remove the file. See the routing docs for supported convention files.",
|
|
1150
1167
|
},
|
|
1151
1168
|
static_runtime_control_path_not_supported: {
|
|
1152
1169
|
summary: "This control path is not supported by the static runtime.",
|
|
@@ -1156,33 +1173,73 @@ export const ERROR_DOCS = {
|
|
|
1156
1173
|
summary: "This operation only applies to static-runtime spaces.",
|
|
1157
1174
|
fix: "Target a static-runtime space.",
|
|
1158
1175
|
},
|
|
1176
|
+
storage_auth_required: {
|
|
1177
|
+
summary: "This storage operation requires an authenticated Zero user.",
|
|
1178
|
+
fix: "Sign in to the hosted Zero app, then retry the storage operation.",
|
|
1179
|
+
},
|
|
1159
1180
|
storage_bucket_unavailable: {
|
|
1160
1181
|
summary: "No usable internal storage bucket is configured for this operation.",
|
|
1161
1182
|
fix: "Check the storage bucket registry and credential environment references, then retry.",
|
|
1162
1183
|
},
|
|
1184
|
+
storage_content_blocked: {
|
|
1185
|
+
summary: "The object contains executable or active web content that Zero storage does not serve.",
|
|
1186
|
+
fix: "Upload a passive file type without HTML, script, SVG, PHP, or executable bytes.",
|
|
1187
|
+
},
|
|
1188
|
+
storage_delete_forbidden: {
|
|
1189
|
+
summary: "The current Zero user did not upload this object.",
|
|
1190
|
+
fix: "Sign in as the original uploader before deleting the object.",
|
|
1191
|
+
},
|
|
1192
|
+
storage_empty_file: {
|
|
1193
|
+
summary: "The Zero storage upload is empty.",
|
|
1194
|
+
fix: "Upload a file containing at least 1 byte.",
|
|
1195
|
+
},
|
|
1196
|
+
storage_file_too_large: {
|
|
1197
|
+
summary: "The Zero storage object exceeds the 5 MiB file limit.",
|
|
1198
|
+
fix: "Upload a smaller object.",
|
|
1199
|
+
},
|
|
1200
|
+
storage_key_invalid: {
|
|
1201
|
+
summary: "The Zero storage key is malformed.",
|
|
1202
|
+
fix: "Use the public or private object key returned by storage.upload.",
|
|
1203
|
+
},
|
|
1204
|
+
storage_object_not_found: {
|
|
1205
|
+
summary: "The requested Zero storage object does not exist.",
|
|
1206
|
+
fix: "Check the object key or upload the object again.",
|
|
1207
|
+
},
|
|
1208
|
+
storage_quota_already_unlimited: {
|
|
1209
|
+
summary: "The team already has unlimited storage.",
|
|
1210
|
+
fix: "No quota override is needed.",
|
|
1211
|
+
},
|
|
1212
|
+
storage_quota_decrease_not_supported: {
|
|
1213
|
+
summary: "This control cannot reduce a team's storage quota.",
|
|
1214
|
+
fix: "Use a billing or plan change to reduce the quota.",
|
|
1215
|
+
},
|
|
1163
1216
|
storage_quota_exceeded: {
|
|
1164
|
-
summary: "The
|
|
1165
|
-
fix: "Delete
|
|
1217
|
+
summary: "The operation would exceed its storage allowance.",
|
|
1218
|
+
fix: "Delete unused Zero objects or old versions, reduce the upload size, then retry.",
|
|
1219
|
+
},
|
|
1220
|
+
storage_unavailable: {
|
|
1221
|
+
summary: "The Zero runtime cannot read or persist object storage.",
|
|
1222
|
+
fix: "Retry on a healthy runtime. Contact support if the failure persists.",
|
|
1166
1223
|
},
|
|
1167
1224
|
storage_usage_unavailable: {
|
|
1168
|
-
summary: "Storage usage
|
|
1225
|
+
summary: "Storage usage cannot be computed right now.",
|
|
1169
1226
|
fix: "Retry shortly.",
|
|
1170
1227
|
},
|
|
1171
1228
|
stripe_error: {
|
|
1172
1229
|
summary: "The billing provider reported an error.",
|
|
1173
|
-
fix: "Retry
|
|
1230
|
+
fix: "Retry. If it persists, check the team's billing settings.",
|
|
1174
1231
|
},
|
|
1175
1232
|
superseded_by_publish: {
|
|
1176
1233
|
summary: "A newer publish superseded this operation, so it was skipped.",
|
|
1177
|
-
fix: "No action needed
|
|
1234
|
+
fix: "No action needed. The newer publish already carries the change.",
|
|
1178
1235
|
},
|
|
1179
1236
|
takeover_notice_window: {
|
|
1180
|
-
summary: "The hostname was recently bound elsewhere
|
|
1237
|
+
summary: "The hostname was recently bound elsewhere. A takeover notice window applies.",
|
|
1181
1238
|
fix: "Retry after the notice window, or have the current holder release the binding.",
|
|
1182
1239
|
},
|
|
1183
1240
|
team_member_quota_exceeded: {
|
|
1184
1241
|
summary: "Inviting this person would exceed the team's seat limit.",
|
|
1185
|
-
fix: "Remove a team member or cancel a pending invitation to free a seat
|
|
1242
|
+
fix: "Remove a team member or cancel a pending invitation to free a seat. Pending invitations count toward the limit.",
|
|
1186
1243
|
},
|
|
1187
1244
|
team_ref_required: {
|
|
1188
1245
|
summary: "A team reference is required for this operation.",
|
|
@@ -1202,7 +1259,7 @@ export const ERROR_DOCS = {
|
|
|
1202
1259
|
},
|
|
1203
1260
|
event_rate_limited: {
|
|
1204
1261
|
summary: "Too many event submissions came from this client in a short window.",
|
|
1205
|
-
fix: "Drop or batch events
|
|
1262
|
+
fix: "Drop or batch events. Event delivery is best-effort and never required.",
|
|
1206
1263
|
},
|
|
1207
1264
|
template_file_too_large: {
|
|
1208
1265
|
summary: "A template file exceeds the maximum size for substitution.",
|
|
@@ -1229,7 +1286,7 @@ export const ERROR_DOCS = {
|
|
|
1229
1286
|
fix: "Use a credential issued for this tenant.",
|
|
1230
1287
|
},
|
|
1231
1288
|
tenant_past_due: {
|
|
1232
|
-
summary: "The tenant is past due
|
|
1289
|
+
summary: "The tenant is past due. Mutations are rejected while serving continues.",
|
|
1233
1290
|
fix: "Settle the outstanding balance to restore full access.",
|
|
1234
1291
|
},
|
|
1235
1292
|
tenant_selection_required: {
|
|
@@ -1242,7 +1299,7 @@ export const ERROR_DOCS = {
|
|
|
1242
1299
|
},
|
|
1243
1300
|
theme_value_invalid: {
|
|
1244
1301
|
summary: "A theme value in the configuration is outside the allowed grammar.",
|
|
1245
|
-
fix: "Use allowed CSS values
|
|
1302
|
+
fix: "Use allowed CSS values. The offending key is dropped with a warning otherwise.",
|
|
1246
1303
|
},
|
|
1247
1304
|
transfer_cross_tenant_unsupported: {
|
|
1248
1305
|
summary: "Spaces cannot be transferred across tenants.",
|
|
@@ -1250,15 +1307,15 @@ export const ERROR_DOCS = {
|
|
|
1250
1307
|
},
|
|
1251
1308
|
transfer_move_failed: {
|
|
1252
1309
|
summary: "The space move backing this transfer failed.",
|
|
1253
|
-
fix: "Retry the transfer
|
|
1310
|
+
fix: "Retry the transfer. If it persists, contact support with the transfer id.",
|
|
1254
1311
|
},
|
|
1255
1312
|
transfer_not_cancelable: {
|
|
1256
|
-
summary: "The transfer
|
|
1313
|
+
summary: "The transfer is past the point where it can be canceled.",
|
|
1257
1314
|
fix: "Wait for the transfer to finish.",
|
|
1258
1315
|
},
|
|
1259
1316
|
transfer_push_failed: {
|
|
1260
|
-
summary: "The source runtime
|
|
1261
|
-
fix: "Retry the move
|
|
1317
|
+
summary: "The source runtime cannot push the space blobs into the transfer bucket.",
|
|
1318
|
+
fix: "Retry the move. If it persists, check the source runtime and bucket configuration.",
|
|
1262
1319
|
},
|
|
1263
1320
|
transfer_source_changed: {
|
|
1264
1321
|
summary: "The space changed since the transfer was created, so it must be re-confirmed.",
|
|
@@ -1269,12 +1326,12 @@ export const ERROR_DOCS = {
|
|
|
1269
1326
|
fix: "Pick a different target team or account.",
|
|
1270
1327
|
},
|
|
1271
1328
|
transfer_verify_failed: {
|
|
1272
|
-
summary: "The target runtime
|
|
1273
|
-
fix: "Retry the move
|
|
1329
|
+
summary: "The target runtime cannot verify transferred blob content.",
|
|
1330
|
+
fix: "Retry the move. If it persists, check the target runtime and bucket integrity.",
|
|
1274
1331
|
},
|
|
1275
1332
|
unauthorized: {
|
|
1276
1333
|
summary: "The request carried no valid credential.",
|
|
1277
|
-
fix: "Send a bearer
|
|
1334
|
+
fix: "Send a bearer API key, use an agent OAuth client, or sign in.",
|
|
1278
1335
|
},
|
|
1279
1336
|
unsupported_publish_media_type: {
|
|
1280
1337
|
summary: "The publish content-type is not supported.",
|
|
@@ -1302,11 +1359,11 @@ export const ERROR_DOCS = {
|
|
|
1302
1359
|
},
|
|
1303
1360
|
validation_error: {
|
|
1304
1361
|
summary: "A request field failed validation.",
|
|
1305
|
-
fix: "Fix the field referenced by
|
|
1362
|
+
fix: "Fix the field referenced by pointer and details, then retry.",
|
|
1306
1363
|
},
|
|
1307
1364
|
variable_cascade_failed: {
|
|
1308
1365
|
summary: "Republishing spaces after a variable change failed.",
|
|
1309
|
-
fix: "Check the operation's diagnostics
|
|
1366
|
+
fix: "Check the operation's diagnostics. Live content keeps serving the previous values.",
|
|
1310
1367
|
},
|
|
1311
1368
|
verification_required: {
|
|
1312
1369
|
summary: "Domain verification is required before this operation.",
|
|
@@ -1329,7 +1386,7 @@ export const ERROR_DOCS = {
|
|
|
1329
1386
|
fix: "Start a new version.",
|
|
1330
1387
|
},
|
|
1331
1388
|
version_closed: {
|
|
1332
|
-
summary: "The version's upload session is closed
|
|
1389
|
+
summary: "The version's upload session is closed. No more files can be added.",
|
|
1333
1390
|
fix: "Start a new version for additional changes.",
|
|
1334
1391
|
},
|
|
1335
1392
|
version_expired: {
|
|
@@ -1358,7 +1415,7 @@ export const ERROR_DOCS = {
|
|
|
1358
1415
|
},
|
|
1359
1416
|
version_in_use: {
|
|
1360
1417
|
summary: "The version is referenced by one or more channels and cannot be deleted.",
|
|
1361
|
-
fix: "Promote another version on those channels first
|
|
1418
|
+
fix: "Promote another version on those channels first. Details lists them.",
|
|
1362
1419
|
},
|
|
1363
1420
|
version_live: {
|
|
1364
1421
|
summary: "The version is live and cannot be deleted.",
|
|
@@ -1370,7 +1427,7 @@ export const ERROR_DOCS = {
|
|
|
1370
1427
|
},
|
|
1371
1428
|
version_not_finalizable: {
|
|
1372
1429
|
summary: "The version cannot be finalized in its current status.",
|
|
1373
|
-
fix: "Only uploaded versions finalize
|
|
1430
|
+
fix: "Only uploaded versions finalize. Check the version status.",
|
|
1374
1431
|
},
|
|
1375
1432
|
version_not_found: {
|
|
1376
1433
|
summary: "The version was not found.",
|
|
@@ -1386,10 +1443,10 @@ export const ERROR_DOCS = {
|
|
|
1386
1443
|
},
|
|
1387
1444
|
version_not_ready: {
|
|
1388
1445
|
summary: "The version is not ready yet.",
|
|
1389
|
-
fix: "Wait for finalize to complete
|
|
1446
|
+
fix: "Wait for finalize to complete. The operation receipt reports progress.",
|
|
1390
1447
|
},
|
|
1391
1448
|
version_quota_exceeded: {
|
|
1392
|
-
summary: "The space
|
|
1449
|
+
summary: "The space is at its version quota.",
|
|
1393
1450
|
fix: "Delete old versions. Still stuck? POST /v1/feedback with the error code and request id.",
|
|
1394
1451
|
},
|
|
1395
1452
|
version_total_bytes_exceeded: {
|
|
@@ -1410,7 +1467,7 @@ export const ERROR_DOCS = {
|
|
|
1410
1467
|
},
|
|
1411
1468
|
zero_ai_unavailable: {
|
|
1412
1469
|
summary: "The local Zero AI service is not configured.",
|
|
1413
|
-
fix: "Configure an AI handler
|
|
1470
|
+
fix: "Configure an AI handler in the project, then restart `sf dev` before calling the AI service.",
|
|
1414
1471
|
},
|
|
1415
1472
|
zero_artifact_abi_mismatch: {
|
|
1416
1473
|
summary: "The Zero endpoint artifact was built for a different runner ABI.",
|
|
@@ -1421,15 +1478,15 @@ export const ERROR_DOCS = {
|
|
|
1421
1478
|
fix: "Rebuild the Zero project and verify the generated zero endpoint artifacts are uploaded.",
|
|
1422
1479
|
},
|
|
1423
1480
|
zero_artifact_malformed: {
|
|
1424
|
-
summary: "The Zero endpoint artifact
|
|
1425
|
-
fix: "Rebuild the Zero project
|
|
1481
|
+
summary: "The Zero endpoint artifact cannot be parsed.",
|
|
1482
|
+
fix: "Rebuild the Zero project. Do not edit generated artifact JSON by hand.",
|
|
1426
1483
|
},
|
|
1427
1484
|
zero_artifact_path_invalid: {
|
|
1428
1485
|
summary: "The Zero endpoint artifact path is invalid.",
|
|
1429
1486
|
fix: "Rebuild the Zero routes so all artifact paths stay inside the version bundle.",
|
|
1430
1487
|
},
|
|
1431
1488
|
zero_artifact_unreadable: {
|
|
1432
|
-
summary: "The Zero endpoint artifact
|
|
1489
|
+
summary: "The Zero endpoint artifact cannot be read by the runtime.",
|
|
1433
1490
|
fix: "Verify the version finalized with all generated Zero files present.",
|
|
1434
1491
|
},
|
|
1435
1492
|
zero_auth_unavailable: {
|
|
@@ -1453,15 +1510,15 @@ export const ERROR_DOCS = {
|
|
|
1453
1510
|
fix: "Send a valid blob body within the configured local size limits.",
|
|
1454
1511
|
},
|
|
1455
1512
|
zero_bootstrap_encode_failed: {
|
|
1456
|
-
summary: "The Zero runner
|
|
1457
|
-
fix: "Retry with valid request metadata
|
|
1513
|
+
summary: "The Zero runner cannot encode the JavaScript bootstrap data.",
|
|
1514
|
+
fix: "Retry with valid request metadata. Report the issue if it persists.",
|
|
1458
1515
|
},
|
|
1459
1516
|
zero_bytecode_hash_mismatch: {
|
|
1460
1517
|
summary: "The Zero endpoint bytecode hash does not match its artifact metadata.",
|
|
1461
1518
|
fix: "Rebuild and republish so bytecode and endpoint metadata are from the same build.",
|
|
1462
1519
|
},
|
|
1463
1520
|
zero_bytecode_invalid: {
|
|
1464
|
-
summary: "The Zero endpoint bytecode
|
|
1521
|
+
summary: "The Zero endpoint bytecode cannot be loaded by QuickJS.",
|
|
1465
1522
|
fix: "Rebuild the project with the current Zero runner and redeploy.",
|
|
1466
1523
|
},
|
|
1467
1524
|
zero_bytecode_path_invalid: {
|
|
@@ -1469,27 +1526,51 @@ export const ERROR_DOCS = {
|
|
|
1469
1526
|
fix: "Rebuild the Zero routes so bytecode paths stay inside the version bundle.",
|
|
1470
1527
|
},
|
|
1471
1528
|
zero_bytecode_unreadable: {
|
|
1472
|
-
summary: "The Zero endpoint bytecode file
|
|
1529
|
+
summary: "The Zero endpoint bytecode file cannot be read.",
|
|
1473
1530
|
fix: "Verify the version finalized with the generated bytecode files present.",
|
|
1474
1531
|
},
|
|
1475
1532
|
zero_capabilities_encode_failed: {
|
|
1476
|
-
summary: "The runtime
|
|
1477
|
-
fix: "Rebuild with valid capability metadata
|
|
1533
|
+
summary: "The runtime cannot encode the Zero endpoint capabilities.",
|
|
1534
|
+
fix: "Rebuild with valid capability metadata. Report the failure if it persists.",
|
|
1478
1535
|
},
|
|
1479
1536
|
zero_client_bundle_not_loaded: {
|
|
1480
|
-
summary: "The local Zero dev client bundle
|
|
1481
|
-
fix: "Restart
|
|
1537
|
+
summary: "The local Zero dev client bundle is not generated or loaded.",
|
|
1538
|
+
fix: "Restart `sf dev` or run a fresh local build before loading the client route.",
|
|
1482
1539
|
},
|
|
1483
1540
|
zero_db_connect_failed: {
|
|
1484
|
-
summary: "The Zero runner
|
|
1541
|
+
summary: "The Zero runner cannot connect to the configured database.",
|
|
1485
1542
|
fix: "Verify DATABASE_URL or the generated MySQL connection variables and retry.",
|
|
1486
1543
|
},
|
|
1487
1544
|
zero_db_execute_failed: {
|
|
1488
1545
|
summary: "A Zero database write failed.",
|
|
1489
1546
|
fix: "Inspect the mutation, schema, and database logs, then retry after fixing the SQL issue.",
|
|
1490
1547
|
},
|
|
1548
|
+
zero_db_export_cursor_invalid: {
|
|
1549
|
+
summary: "The local database export cursor is invalid or belongs to another export.",
|
|
1550
|
+
fix: "Start a fresh export and use only cursors returned by that same table and schema.",
|
|
1551
|
+
},
|
|
1552
|
+
zero_db_export_failed: {
|
|
1553
|
+
summary: "The runtime cannot read a database export page.",
|
|
1554
|
+
fix: "Retry the export. If it repeats, inspect the live database and runtime logs.",
|
|
1555
|
+
},
|
|
1556
|
+
zero_db_export_page_too_large: {
|
|
1557
|
+
summary: "One database export page exceeded the 16 MiB response limit.",
|
|
1558
|
+
fix: "Retry with a smaller export page size.",
|
|
1559
|
+
},
|
|
1560
|
+
zero_db_export_query_invalid: {
|
|
1561
|
+
summary: "The local database export request has an invalid table or page size.",
|
|
1562
|
+
fix: "Use a declared table name and a page size within the documented limit.",
|
|
1563
|
+
},
|
|
1564
|
+
zero_db_export_schema_changed: {
|
|
1565
|
+
summary: "The database schema changed while an export was in progress.",
|
|
1566
|
+
fix: "Start a fresh export so every page uses the same schema.",
|
|
1567
|
+
},
|
|
1568
|
+
zero_db_export_schema_unavailable: {
|
|
1569
|
+
summary: "The live capsule has no stable schema hash for a complete export.",
|
|
1570
|
+
fix: "Publish the capsule with a current Zero schema, then start the export again.",
|
|
1571
|
+
},
|
|
1491
1572
|
zero_db_host_install_failed: {
|
|
1492
|
-
summary: "The Zero runner
|
|
1573
|
+
summary: "The Zero runner cannot install the database host bridge.",
|
|
1493
1574
|
fix: "Rebuild with a current runner and report the failure if it repeats.",
|
|
1494
1575
|
},
|
|
1495
1576
|
zero_db_operation_invalid: {
|
|
@@ -1509,7 +1590,7 @@ export const ERROR_DOCS = {
|
|
|
1509
1590
|
fix: "Inspect the query, schema, and database logs, then retry after fixing the SQL issue.",
|
|
1510
1591
|
},
|
|
1511
1592
|
zero_db_row_invalid: {
|
|
1512
|
-
summary: "A database row
|
|
1593
|
+
summary: "A database row cannot be converted into a Zero response value.",
|
|
1513
1594
|
fix: "Check the table schema and stored values for unsupported data.",
|
|
1514
1595
|
},
|
|
1515
1596
|
zero_db_sql_invalid: {
|
|
@@ -1525,7 +1606,7 @@ export const ERROR_DOCS = {
|
|
|
1525
1606
|
fix: "Rebuild with the current Zero runner and report the failure if it repeats.",
|
|
1526
1607
|
},
|
|
1527
1608
|
zero_db_transaction_commit_failed: {
|
|
1528
|
-
summary: "The Zero database transaction
|
|
1609
|
+
summary: "The Zero database transaction cannot be committed.",
|
|
1529
1610
|
fix: "Retry after checking database connectivity and transaction conflicts.",
|
|
1530
1611
|
},
|
|
1531
1612
|
zero_db_transaction_invalid: {
|
|
@@ -1537,13 +1618,21 @@ export const ERROR_DOCS = {
|
|
|
1537
1618
|
fix: "Rebuild with the current Zero runner and report the failure if it repeats.",
|
|
1538
1619
|
},
|
|
1539
1620
|
zero_db_transaction_rollback_failed: {
|
|
1540
|
-
summary: "The Zero database transaction
|
|
1621
|
+
summary: "The Zero database transaction cannot be rolled back cleanly.",
|
|
1541
1622
|
fix: "Inspect the affected database state before retrying, then report the failure.",
|
|
1542
1623
|
},
|
|
1543
1624
|
zero_db_transaction_start_failed: {
|
|
1544
|
-
summary: "The Zero database transaction
|
|
1625
|
+
summary: "The Zero database transaction cannot be started.",
|
|
1545
1626
|
fix: "Check database connectivity and retry the mutation.",
|
|
1546
1627
|
},
|
|
1628
|
+
zero_db_target_denied: {
|
|
1629
|
+
summary: "The application Zero database target is not a public TCP address.",
|
|
1630
|
+
fix: "Use a public database hostname whose complete DNS answer set contains only public addresses.",
|
|
1631
|
+
},
|
|
1632
|
+
zero_db_tls_required: {
|
|
1633
|
+
summary: "The application Zero database cannot be connected with verified pinned TLS.",
|
|
1634
|
+
fix: "Use the provider-managed database until verified external database TLS is supported.",
|
|
1635
|
+
},
|
|
1547
1636
|
zero_db_url_invalid: {
|
|
1548
1637
|
summary: "The Zero database URL is malformed.",
|
|
1549
1638
|
fix: "Set DATABASE_URL or the generated database variables to a valid MySQL connection URL.",
|
|
@@ -1561,7 +1650,7 @@ export const ERROR_DOCS = {
|
|
|
1561
1650
|
fix: "Use valid table, limit, and cursor parameters.",
|
|
1562
1651
|
},
|
|
1563
1652
|
zero_endpoint_compile_failed: {
|
|
1564
|
-
summary: "The runtime
|
|
1653
|
+
summary: "The runtime cannot compile the Zero endpoint bytecode.",
|
|
1565
1654
|
fix: "Inspect the compile diagnostics, fix the endpoint source, and publish again.",
|
|
1566
1655
|
},
|
|
1567
1656
|
zero_endpoint_conflict: {
|
|
@@ -1581,7 +1670,7 @@ export const ERROR_DOCS = {
|
|
|
1581
1670
|
fix: "Rebuild and republish the Zero project.",
|
|
1582
1671
|
},
|
|
1583
1672
|
zero_endpoint_index_malformed: {
|
|
1584
|
-
summary: "The Zero endpoint index
|
|
1673
|
+
summary: "The Zero endpoint index cannot be parsed.",
|
|
1585
1674
|
fix: "Rebuild the generated endpoint index and redeploy.",
|
|
1586
1675
|
},
|
|
1587
1676
|
zero_endpoint_index_path_invalid: {
|
|
@@ -1589,7 +1678,7 @@ export const ERROR_DOCS = {
|
|
|
1589
1678
|
fix: "Verify the runtime bundle was finalized with the standard Zero layout.",
|
|
1590
1679
|
},
|
|
1591
1680
|
zero_endpoint_index_unreadable: {
|
|
1592
|
-
summary: "The Zero endpoint index
|
|
1681
|
+
summary: "The Zero endpoint index cannot be read.",
|
|
1593
1682
|
fix: "Verify the version finalized with zero/endpoints-index.json present.",
|
|
1594
1683
|
},
|
|
1595
1684
|
zero_endpoint_invalid: {
|
|
@@ -1617,12 +1706,12 @@ export const ERROR_DOCS = {
|
|
|
1617
1706
|
fix: "Upgrade the team to a plan that includes Zero and dedicated runtime, then publish again.",
|
|
1618
1707
|
},
|
|
1619
1708
|
zero_envelope_encode_failed: {
|
|
1620
|
-
summary: "The PHP bridge
|
|
1621
|
-
fix: "Retry with valid request data
|
|
1709
|
+
summary: "The PHP bridge cannot encode the Zero runner request envelope.",
|
|
1710
|
+
fix: "Retry with valid request data. Report the issue if it persists.",
|
|
1622
1711
|
},
|
|
1623
1712
|
zero_js_context_init_failed: {
|
|
1624
|
-
summary: "The Zero runner
|
|
1625
|
-
fix: "Retry or rebuild the runner
|
|
1713
|
+
summary: "The Zero runner cannot initialize a QuickJS context.",
|
|
1714
|
+
fix: "Retry or rebuild the runner. Report persistent runtime initialization failures.",
|
|
1626
1715
|
},
|
|
1627
1716
|
zero_js_execution_failed: {
|
|
1628
1717
|
summary: "The Zero endpoint JavaScript threw during execution.",
|
|
@@ -1633,7 +1722,7 @@ export const ERROR_DOCS = {
|
|
|
1633
1722
|
fix: "Reduce synchronous work or database round trips in the handler.",
|
|
1634
1723
|
},
|
|
1635
1724
|
zero_js_globals_failed: {
|
|
1636
|
-
summary: "The Zero runner
|
|
1725
|
+
summary: "The Zero runner cannot install runtime globals for the endpoint.",
|
|
1637
1726
|
fix: "Rebuild with a current runner and report the failure if it repeats.",
|
|
1638
1727
|
},
|
|
1639
1728
|
zero_js_response_malformed: {
|
|
@@ -1641,7 +1730,7 @@ export const ERROR_DOCS = {
|
|
|
1641
1730
|
fix: "Return a valid Response or supported Zero handler result.",
|
|
1642
1731
|
},
|
|
1643
1732
|
zero_js_runtime_init_failed: {
|
|
1644
|
-
summary: "The Zero runner
|
|
1733
|
+
summary: "The Zero runner cannot initialize QuickJS.",
|
|
1645
1734
|
fix: "Retry on a healthy runtime or rebuild the runner binary.",
|
|
1646
1735
|
},
|
|
1647
1736
|
zero_log_query_invalid: {
|
|
@@ -1689,8 +1778,8 @@ export const ERROR_DOCS = {
|
|
|
1689
1778
|
fix: "Send the configured realtime client token by query, header, bearer token, or websocket subprotocol.",
|
|
1690
1779
|
},
|
|
1691
1780
|
zero_replay_failed: {
|
|
1692
|
-
summary: "The hosted Zero runtime
|
|
1693
|
-
fix: "Retry shortly
|
|
1781
|
+
summary: "The hosted Zero runtime cannot fetch realtime replay events.",
|
|
1782
|
+
fix: "Retry shortly. Check the central realtime and control-plane logs if it persists.",
|
|
1694
1783
|
},
|
|
1695
1784
|
zero_replay_query_invalid: {
|
|
1696
1785
|
summary: "The hosted Zero realtime replay query is invalid.",
|
|
@@ -1721,7 +1810,7 @@ export const ERROR_DOCS = {
|
|
|
1721
1810
|
fix: "Rebuild the generated routes and publish the version again.",
|
|
1722
1811
|
},
|
|
1723
1812
|
zero_run_compile_failed: {
|
|
1724
|
-
summary: "The runtime
|
|
1813
|
+
summary: "The runtime cannot compile a Zero run handler.",
|
|
1725
1814
|
fix: "Inspect the compile diagnostics, fix the run-handler source, and publish again.",
|
|
1726
1815
|
},
|
|
1727
1816
|
zero_run_duplicate: {
|
|
@@ -1761,19 +1850,19 @@ export const ERROR_DOCS = {
|
|
|
1761
1850
|
fix: "Rebuild and redeploy so the PHP bridge and Rust runner versions match.",
|
|
1762
1851
|
},
|
|
1763
1852
|
zero_runner_response_encode_failed: {
|
|
1764
|
-
summary: "The Zero runner
|
|
1853
|
+
summary: "The Zero runner cannot encode its response.",
|
|
1765
1854
|
fix: "Return JSON-serializable response metadata from the endpoint.",
|
|
1766
1855
|
},
|
|
1767
1856
|
zero_runner_stdin_invalid: {
|
|
1768
|
-
summary: "The Zero runner
|
|
1769
|
-
fix: "Retry
|
|
1857
|
+
summary: "The Zero runner cannot read its request envelope.",
|
|
1858
|
+
fix: "Retry. Report the runtime bridge failure if it persists.",
|
|
1770
1859
|
},
|
|
1771
1860
|
zero_runner_stdin_too_large: {
|
|
1772
1861
|
summary: "The Zero runner request envelope is too large.",
|
|
1773
1862
|
fix: "Reduce request headers, body size, or route parameters.",
|
|
1774
1863
|
},
|
|
1775
1864
|
zero_runner_unavailable: {
|
|
1776
|
-
summary: "The Zero runner process
|
|
1865
|
+
summary: "The Zero runner process cannot be started.",
|
|
1777
1866
|
fix: "Verify the runner binary is installed and executable in the runtime.",
|
|
1778
1867
|
},
|
|
1779
1868
|
zero_runs_invalid: {
|
|
@@ -1790,27 +1879,7 @@ export const ERROR_DOCS = {
|
|
|
1790
1879
|
},
|
|
1791
1880
|
zero_shopify_unavailable: {
|
|
1792
1881
|
summary: "The local Zero Shopify service is not configured.",
|
|
1793
|
-
fix: "Configure a Shopify handler
|
|
1794
|
-
},
|
|
1795
|
-
zero_source_compile_failed: {
|
|
1796
|
-
summary: "The Zero endpoint source fallback failed to compile.",
|
|
1797
|
-
fix: "Fix the endpoint source and rebuild bytecode.",
|
|
1798
|
-
},
|
|
1799
|
-
zero_source_hash_mismatch: {
|
|
1800
|
-
summary: "The Zero endpoint source hash does not match its artifact metadata.",
|
|
1801
|
-
fix: "Rebuild and republish so source and endpoint metadata are from the same build.",
|
|
1802
|
-
},
|
|
1803
|
-
zero_source_invalid: {
|
|
1804
|
-
summary: "The Zero endpoint source is invalid.",
|
|
1805
|
-
fix: "Fix the generated endpoint source and rebuild.",
|
|
1806
|
-
},
|
|
1807
|
-
zero_source_path_invalid: {
|
|
1808
|
-
summary: "The Zero endpoint source path is invalid.",
|
|
1809
|
-
fix: "Rebuild the Zero routes so source paths stay inside the version bundle.",
|
|
1810
|
-
},
|
|
1811
|
-
zero_source_unreadable: {
|
|
1812
|
-
summary: "The Zero endpoint source file could not be read.",
|
|
1813
|
-
fix: "Verify the version finalized with generated source files present.",
|
|
1882
|
+
fix: "Configure a Shopify handler in the project, then restart `sf dev` before calling the Shopify service.",
|
|
1814
1883
|
},
|
|
1815
1884
|
wp_cloud_anonymous_pool_required: {
|
|
1816
1885
|
summary: "This operation requires an anonymous pool site.",
|
|
@@ -1860,24 +1929,27 @@ export function errorDocMarkdown(code) {
|
|
|
1860
1929
|
"",
|
|
1861
1930
|
`**How to resolve:** ${doc.fix}`,
|
|
1862
1931
|
"",
|
|
1863
|
-
"## Error
|
|
1932
|
+
"## Error shape",
|
|
1864
1933
|
"",
|
|
1865
|
-
`Every ${PRODUCT} API error
|
|
1866
|
-
|
|
1867
|
-
"
|
|
1934
|
+
`Every ${PRODUCT} API error is an RFC 9457 problem document, served as`,
|
|
1935
|
+
`\`${PROBLEM_CONTENT_TYPE}\`. \`code\` is stable and machine-readable, \`type\` links to`,
|
|
1936
|
+
"this page, `title` is a short label, `status` repeats the HTTP status, and `detail`",
|
|
1937
|
+
"explains this occurrence. `pointer` (when present) is an RFC 6901 JSON Pointer at the",
|
|
1938
|
+
"offending field in the request body, and `details` may carry structured context. Match on",
|
|
1939
|
+
"`code`, never on `detail`.",
|
|
1868
1940
|
"",
|
|
1869
1941
|
"```json",
|
|
1870
1942
|
JSON.stringify({
|
|
1871
|
-
|
|
1872
|
-
|
|
1873
|
-
|
|
1874
|
-
|
|
1875
|
-
|
|
1876
|
-
|
|
1943
|
+
type: errorDocsUrl(code),
|
|
1944
|
+
title: errorTitle(code),
|
|
1945
|
+
status: 400,
|
|
1946
|
+
detail: doc.summary,
|
|
1947
|
+
code,
|
|
1948
|
+
requestId: "req_4mz0v8qk",
|
|
1877
1949
|
}, null, 2),
|
|
1878
1950
|
"```",
|
|
1879
1951
|
"",
|
|
1880
|
-
`See the full list of error codes in the [error reference](${
|
|
1952
|
+
`See the full list of error codes in the [error reference](${serviceOrigin("www", "prod")}/docs/errors).`,
|
|
1881
1953
|
"",
|
|
1882
1954
|
].join("\n");
|
|
1883
1955
|
}
|