@substrio/sdk 0.0.0-stage → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,345 @@
1
+ // Generated by packages/substrio-sdk/scripts/gen_errors.mjs from src/substrio/api/substrio_error.h and
2
+ // src/substrio/api/substrio_error_strings.cpp. Do not edit: change those and run
3
+ // node packages/substrio-sdk/scripts/gen_errors.mjs
4
+
5
+ // Every substrio error: its wire name (the `code` of an error reply) to its
6
+ // numeric code, HTTP status and message, in code order.
7
+ export const SUBSTRIO_ERRORS = Object.freeze({
8
+ SUCCESS: Object.freeze({ hex: 0x0000, status: 200, message: "Operation completed successfully" }),
9
+ UNKNOWN: Object.freeze({ hex: 0x0001, status: 500, message: "An unknown error occurred" }),
10
+ NOT_IMPLEMENTED: Object.freeze({ hex: 0x0002, status: 501, message: "This feature is not implemented" }),
11
+ SYSTEM_CLOSED: Object.freeze({ hex: 0x0100, status: 503, message: "Database system is closed" }),
12
+ SYSTEM_ALREADY_OPEN: Object.freeze({ hex: 0x0101, status: 409, message: "Database system is already open" }),
13
+ INVALID_ARGUMENT: Object.freeze({ hex: 0x0102, status: 400, message: "That value is not accepted." }),
14
+ INVALID_HANDLE: Object.freeze({ hex: 0x0103, status: 400, message: "That handle is not open." }),
15
+ THREAD_INIT_FAILED: Object.freeze({ hex: 0x0104, status: 500, message: "Thread initialization failed" }),
16
+ SHUTDOWN_IN_PROGRESS: Object.freeze({ hex: 0x0105, status: 503, message: "System is shutting down" }),
17
+ INTERNAL: Object.freeze({ hex: 0x0106, status: 500, message: "Something went wrong on our side. Try again." }),
18
+ NULL_TREE: Object.freeze({ hex: 0x0107, status: 500, message: "Index tree is not initialized" }),
19
+ NULL_SYSTEM: Object.freeze({ hex: 0x0108, status: 500, message: "Tree is not bound to a system" }),
20
+ BARRIER_UNSUPPORTED: Object.freeze({ hex: 0x0109, status: 500, message: "Process-wide memory barrier unavailable" }),
21
+ STORAGE_IO: Object.freeze({ hex: 0x1000, status: 500, message: "We could not read or save that just now. Try again." }),
22
+ DISK_FULL: Object.freeze({ hex: 0x1001, status: 503, message: "Disk storage is full" }),
23
+ FILE_NOT_FOUND: Object.freeze({ hex: 0x1002, status: 404, message: "File not found" }),
24
+ PERMISSION_DENIED: Object.freeze({ hex: 0x1003, status: 403, message: "You do not have access to that." }),
25
+ FILE_CORRUPT: Object.freeze({ hex: 0x1004, status: 500, message: "File is corrupted" }),
26
+ MMAP_FAILED: Object.freeze({ hex: 0x1005, status: 500, message: "Memory mapping failed" }),
27
+ FSYNC_FAILED: Object.freeze({ hex: 0x1006, status: 500, message: "File sync failed" }),
28
+ LOCK_FAILED: Object.freeze({ hex: 0x1007, status: 409, message: "File lock failed" }),
29
+ NOT_A_DATABASE: Object.freeze({ hex: 0x1008, status: 500, message: "File is not a database" }),
30
+ OLD_FORMAT: Object.freeze({ hex: 0x1009, status: 500, message: "Database file is in an older format than this build reads" }),
31
+ NEWER_FORMAT: Object.freeze({ hex: 0x100A, status: 500, message: "Database file is in a newer format than this build reads" }),
32
+ OUT_OF_MEMORY: Object.freeze({ hex: 0x2000, status: 503, message: "Out of memory" }),
33
+ BUFFER_TOO_SMALL: Object.freeze({ hex: 0x2001, status: 500, message: "Buffer too small" }),
34
+ ALLOCATOR_FAULT: Object.freeze({ hex: 0x2002, status: 500, message: "Memory allocator fault" }),
35
+ TRANSACTION_CONFLICT: Object.freeze({ hex: 0x3000, status: 409, message: "Transaction conflict, please retry" }),
36
+ RETRY: Object.freeze({ hex: 0x3001, status: 409, message: "Operation should be retried" }),
37
+ TRANSACTION_READ_ONLY: Object.freeze({ hex: 0x3002, status: 403, message: "Transaction is read-only" }),
38
+ TRANSACTION_NOT_FOUND: Object.freeze({ hex: 0x3003, status: 404, message: "Transaction not found" }),
39
+ DEADLOCK_DETECTED: Object.freeze({ hex: 0x3004, status: 409, message: "Deadlock detected" }),
40
+ TIMEOUT: Object.freeze({ hex: 0x3005, status: 504, message: "Operation timed out" }),
41
+ NO_ACTIVE_TRANSACTION: Object.freeze({ hex: 0x3006, status: 400, message: "No active transaction" }),
42
+ LWW_STALE: Object.freeze({ hex: 0x3007, status: 409, message: "A newer version exists" }),
43
+ CANCELLED: Object.freeze({ hex: 0x3008, status: 409, message: "Operation cancelled" }),
44
+ KEY_NOT_FOUND: Object.freeze({ hex: 0x4000, status: 404, message: "We could not find that." }),
45
+ KEY_TOO_LARGE: Object.freeze({ hex: 0x4001, status: 400, message: "Key exceeds maximum size" }),
46
+ VALUE_TOO_LARGE: Object.freeze({ hex: 0x4002, status: 413, message: "Value exceeds maximum size" }),
47
+ KEY_EMPTY: Object.freeze({ hex: 0x4003, status: 400, message: "Key cannot be empty" }),
48
+ KEY_EXISTS: Object.freeze({ hex: 0x4004, status: 409, message: "Key already exists" }),
49
+ MISSING_INDEX: Object.freeze({ hex: 0x4005, status: 400, message: "Required index not found" }),
50
+ OWNERSHIP_REQUIRED: Object.freeze({ hex: 0x4006, status: 403, message: "Record ownership required" }),
51
+ KEY_PREFIX_COLLISION: Object.freeze({ hex: 0x4007, status: 409, message: "Key prefix collision" }),
52
+ KEY_DELETED: Object.freeze({ hex: 0x4008, status: 404, message: "Key was deleted" }),
53
+ UNIQUE: Object.freeze({ hex: 0x4009, status: 409, message: "A unique field already holds the value" }),
54
+ ID_RESERVED: Object.freeze({ hex: 0x400A, status: 400, message: "_id is assigned by the collection; use put(doc) to choose an id" }),
55
+ INVALID_ID: Object.freeze({ hex: 0x400B, status: 400, message: "_id names no document: it must be a base62 id string or a positive whole number" }),
56
+ ID_MISMATCH: Object.freeze({ hex: 0x400C, status: 400, message: "the body's _id is not the id in the path" }),
57
+ INDEX_DUPLICATES: Object.freeze({ hex: 0x400D, status: 409, message: "documents already share a value of the field: it cannot be declared unique" }),
58
+ FIELD_IDS_EXHAUSTED: Object.freeze({ hex: 0x400E, status: 507, message: "every index field id of the collection is taken: a member of this document that a wildcard index rule covers cannot be keyed, so nothing was written" }),
59
+ ID_PAST_ROWS: Object.freeze({ hex: 0x400F, status: 507, message: "the collection is a table SQL made, whose row is its id: an id of 2^32 - 1 or more has no row, so nothing was written" }),
60
+ ID_NOT_ISSUED: Object.freeze({ hex: 0x4010, status: 400, message: "the collection is a table SQL made, whose row is its id: a given id is taken only once its generator issued it, so nothing was written" }),
61
+ ENGINE_GATE_HELD: Object.freeze({ hex: 0x4011, status: 500, message: "a writer of a table SQL made ran inside the SQL engine's gate as a reader: the engine cannot wait for its own reader" }),
62
+ ROW_STALE: Object.freeze({ hex: 0x4012, status: 409, message: "the document changed since this row was read: nothing was written, and the row now holds the document as it is; read it and write again" }),
63
+ CURSOR_EXHAUSTED: Object.freeze({ hex: 0x5000, status: 200, message: "Cursor exhausted" }),
64
+ CURSOR_INVALIDATED: Object.freeze({ hex: 0x5001, status: 409, message: "Cursor invalidated" }),
65
+ INVALID_RANGE: Object.freeze({ hex: 0x5002, status: 400, message: "That range is not accepted." }),
66
+ BATCH_OP_FAILED: Object.freeze({ hex: 0x5003, status: 500, message: "Batch operation failed" }),
67
+ NODE_NOT_FOUND: Object.freeze({ hex: 0x6000, status: 404, message: "Node not found" }),
68
+ EDGE_NOT_FOUND: Object.freeze({ hex: 0x6001, status: 404, message: "Edge not found" }),
69
+ PROPERTY_NOT_FOUND: Object.freeze({ hex: 0x6002, status: 404, message: "Property not found" }),
70
+ INVALID_EDGE: Object.freeze({ hex: 0x6003, status: 400, message: "That edge is not accepted." }),
71
+ PATH_NOT_FOUND: Object.freeze({ hex: 0x6004, status: 404, message: "Path not found" }),
72
+ GRAPH_CYCLE_DETECTED: Object.freeze({ hex: 0x6005, status: 409, message: "Cycle detected" }),
73
+ DIMENSION_MISMATCH: Object.freeze({ hex: 0x7000, status: 400, message: "Dimension mismatch" }),
74
+ POINT_NOT_FOUND: Object.freeze({ hex: 0x7001, status: 404, message: "Point not found" }),
75
+ INVALID_BOUNDS: Object.freeze({ hex: 0x7002, status: 400, message: "Those bounds are not accepted." }),
76
+ INVALID_RADIUS: Object.freeze({ hex: 0x7003, status: 400, message: "That radius is not accepted." }),
77
+ SCHEMA_VIOLATION: Object.freeze({ hex: 0x8000, status: 400, message: "Schema violation" }),
78
+ TYPE_MISMATCH: Object.freeze({ hex: 0x8001, status: 400, message: "Type mismatch" }),
79
+ CONSTRAINT_VIOLATION: Object.freeze({ hex: 0x8002, status: 409, message: "Constraint violation" }),
80
+ TOO_MANY_FIELDS: Object.freeze({ hex: 0x8003, status: 400, message: "a collection names at most 4096 distinct fields (the keys of a document and of every object inside it, together); this document would need more" }),
81
+ SCHEMA_REFUSED: Object.freeze({ hex: 0x8004, status: 400, message: "The document does not match the collection's schema" }),
82
+ SCHEMA_VIOLATORS: Object.freeze({ hex: 0x8005, status: 409, message: "stored documents already break the constraint: it is not declared" }),
83
+ SECRET_FIELD: Object.freeze({ hex: 0x8006, status: 400, message: "a secret field cannot be filtered, sorted, grouped, aggregated, joined on or selected by name" }),
84
+ TYPE_TAG_NOT_FIRST: Object.freeze({ hex: 0x8007, status: 400, message: "the $type tag must be the first member of its object" }),
85
+ STORAGE_QUOTA_EXCEEDED: Object.freeze({ hex: 0x9000, status: 507, message: "Storage quota exceeded" }),
86
+ DOCUMENT_QUOTA_EXCEEDED: Object.freeze({ hex: 0x9001, status: 507, message: "Document quota exceeded" }),
87
+ BANDWIDTH_QUOTA_EXCEEDED: Object.freeze({ hex: 0x9002, status: 429, message: "Bandwidth quota exceeded" }),
88
+ RATE_LIMIT_EXCEEDED: Object.freeze({ hex: 0x9003, status: 429, message: "Too many requests. Wait a moment and try again." }),
89
+ REQUEST_TOO_LARGE: Object.freeze({ hex: 0x9004, status: 413, message: "Request payload too large" }),
90
+ CONCURRENT_LIMIT: Object.freeze({ hex: 0x9005, status: 429, message: "Concurrent request limit exceeded" }),
91
+ COLLECTION_LIMIT: Object.freeze({ hex: 0x9006, status: 413, message: "Collection limit exceeded" }),
92
+ INDEX_LIMIT: Object.freeze({ hex: 0x9007, status: 413, message: "Index limit exceeded" }),
93
+ FUNCTION_LIMIT: Object.freeze({ hex: 0x9008, status: 429, message: "Cloud function limit exceeded" }),
94
+ CF_CPU_TIMEOUT: Object.freeze({ hex: 0x9009, status: 408, message: "Cloud function exceeded CPU time limit" }),
95
+ CF_MEMORY_EXCEEDED: Object.freeze({ hex: 0x900A, status: 413, message: "Cloud function exceeded memory limit" }),
96
+ CF_EXECUTION_FAILED: Object.freeze({ hex: 0x900B, status: 500, message: "Cloud function execution error" }),
97
+ SERVER_BUSY: Object.freeze({ hex: 0x900C, status: 503, message: "The server is busy; retry shortly" }),
98
+ CF_TENANT_MEMORY: Object.freeze({ hex: 0x900D, status: 503, message: "The tenant's function memory budget is full; retry shortly" }),
99
+ CF_WALL_TIMEOUT: Object.freeze({ hex: 0x900E, status: 504, message: "Cloud function exceeded its wall-clock limit" }),
100
+ CF_SERVER_MEMORY: Object.freeze({ hex: 0x900F, status: 503, message: "The server is low on memory and starts no new function container; retry shortly" }),
101
+ KEY_RATE_LIMIT_EXCEEDED: Object.freeze({ hex: 0x9010, status: 429, message: "This key's own request rate limit is exceeded" }),
102
+ REALTIME_LIMIT: Object.freeze({ hex: 0x9011, status: 429, message: "This tenant's realtime_connections_limit is at its cap" }),
103
+ CRON_LIMIT: Object.freeze({ hex: 0x9012, status: 429, message: "This tenant's cron_limit is at its cap" }),
104
+ SPACE_FULL: Object.freeze({ hex: 0x9013, status: 507, message: "The account's space is full: free space (delete data or an app) or raise the account's space" }),
105
+ TOKEN_EXPIRED: Object.freeze({ hex: 0xA000, status: 401, message: "Your sign-in has expired. Sign in again." }),
106
+ TOKEN_INVALID: Object.freeze({ hex: 0xA001, status: 401, message: "Your sign-in is not valid. Sign in again." }),
107
+ TOKEN_REVOKED: Object.freeze({ hex: 0xA002, status: 401, message: "Your sign-in was ended. Sign in again." }),
108
+ SESSION_EXPIRED: Object.freeze({ hex: 0xA003, status: 401, message: "Your session has expired. Sign in again." }),
109
+ ACCOUNT_SUSPENDED: Object.freeze({ hex: 0xA004, status: 403, message: "This account is suspended." }),
110
+ TENANT_SUSPENDED: Object.freeze({ hex: 0xA005, status: 403, message: "Tenant has been suspended" }),
111
+ IP_BLOCKED: Object.freeze({ hex: 0xA006, status: 403, message: "IP address is blocked" }),
112
+ INSUFFICIENT_PERMISSIONS: Object.freeze({ hex: 0xA007, status: 403, message: "You do not have access to do that." }),
113
+ CREDENTIAL_REQUIRED: Object.freeze({ hex: 0xA008, status: 401, message: "Authentication credentials required" }),
114
+ OAUTH_INVALID: Object.freeze({ hex: 0xA009, status: 401, message: "The sign-in provider's answer was not accepted. Try again." }),
115
+ PROVIDER_NOT_CONFIGURED: Object.freeze({ hex: 0xA00A, status: 409, message: "Authentication provider not configured" }),
116
+ PROVIDER_DISABLED: Object.freeze({ hex: 0xA00B, status: 403, message: "Authentication provider is disabled" }),
117
+ TENANT_READ_ONLY: Object.freeze({ hex: 0xA00C, status: 423, message: "Tenant is read-only: writes are refused" }),
118
+ APPROVAL_REQUIRED: Object.freeze({ hex: 0xA00D, status: 403, message: "This call is irreversible and a person must approve it: show the person approve_url, and once they approve, repeat the same call" }),
119
+ APPROVAL_INVALID: Object.freeze({ hex: 0xA00E, status: 403, message: "No such approval" }),
120
+ APPROVAL_DENIED: Object.freeze({ hex: 0xA00F, status: 403, message: "A person denied this call; a repeat is refused until the approval lapses" }),
121
+ AGENT_BUDGET_EXHAUSTED: Object.freeze({ hex: 0xA010, status: 403, message: "This agent session spent its request budget (its own or one of its parents')" }),
122
+ KEY_BUDGET_EXHAUSTED: Object.freeze({ hex: 0xA011, status: 403, message: "This key spent its own request budget" }),
123
+ EMAIL_VERIFICATION_REQUIRED: Object.freeze({ hex: 0xA012, status: 403, message: "Verify your email address to continue" }),
124
+ LIVE_BY_PROMOTE: Object.freeze({ hex: 0xA013, status: 409, message: "This app changes only by promote: change its dev sandbox and promote the version" }),
125
+ TENANT_MOVED: Object.freeze({ hex: 0xA014, status: 308, message: "This app moved to another server: send the request to the address in Location" }),
126
+ GRANT_REQUIRED: Object.freeze({ hex: 0xA015, status: 403, message: "This app has not been granted the capability the call needs; the system admin grants it (tenant.update grants)" }),
127
+ KEY_ORIGIN_REFUSED: Object.freeze({ hex: 0xA016, status: 403, message: "A publishable key is refused here: the request's Origin is not one of its origins, or the route does not take one" }),
128
+ APPROVAL_PENDING: Object.freeze({ hex: 0xA017, status: 403, message: "No person has approved this call yet: show the person approve_url, and once they approve, repeat the same call" }),
129
+ APPROVAL_SPENT: Object.freeze({ hex: 0xA018, status: 403, message: "This exact call already ran with its approval; a repeat is refused until the approval lapses" }),
130
+ APPROVAL_EXPIRED: Object.freeze({ hex: 0xA019, status: 403, message: "The approval lapsed before it was used: repeat the call without it to ask again" }),
131
+ APPROVAL_MISMATCH: Object.freeze({ hex: 0xA01A, status: 403, message: "The approval names another call or another session: it works only for the exact call that asked for it" }),
132
+ WEBHOOK_SIGNATURE_INVALID: Object.freeze({ hex: 0xA01B, status: 400, message: "The payment provider webhook's signature does not verify" }),
133
+ BILLING_NOT_SET_UP: Object.freeze({ hex: 0xA01C, status: 503, message: "Billing is not set up: the payment provider's keys are not set" }),
134
+ EMAIL_TAKEN: Object.freeze({ hex: 0xA01D, status: 409, message: "That email already has an account. Sign in instead." }),
135
+ CREDENTIALS_MISMATCH: Object.freeze({ hex: 0xA01E, status: 401, message: "That email and password do not match." }),
136
+ PASSWORD_LENGTH: Object.freeze({ hex: 0xA01F, status: 400, message: "Use a password of 8 to 128 characters." }),
137
+ EMAIL_INVALID: Object.freeze({ hex: 0xA020, status: 400, message: "Enter a valid email address." }),
138
+ USER_NOT_FOUND: Object.freeze({ hex: 0xA021, status: 404, message: "We could not find that person." }),
139
+ ACCOUNT_LOCKED: Object.freeze({ hex: 0xA022, status: 423, message: "This account is locked. Reset your password to sign in again." }),
140
+ SECRET_KEY_IN_URL: Object.freeze({ hex: 0xA023, status: 400, message: "A secret key was sent in the URL (access_token): only a publishable key may be; send a secret key in the Authorization header, from a server" }),
141
+ RECIPIENT_UNSUBSCRIBED: Object.freeze({ hex: 0xA024, status: 409, message: "You turned off this app's email, so no code was sent. Ask for a link to turn it back on." }),
142
+ APP_OVER_PLAN: Object.freeze({ hex: 0xA025, status: 403, message: "This app is paused: the account's plan allows fewer apps than it owns. Move it into the first max_apps on the account's Apps page (account.apps.order), or upgrade." }),
143
+ QUERY_TOO_COMPLEX: Object.freeze({ hex: 0xB000, status: 400, message: "Query is too complex" }),
144
+ QUERY_TIMEOUT: Object.freeze({ hex: 0xB001, status: 504, message: "Query execution timed out" }),
145
+ RESULT_SET_TOO_LARGE: Object.freeze({ hex: 0xB002, status: 413, message: "Result set exceeds maximum size" }),
146
+ SORT_LIMIT_EXCEEDED: Object.freeze({ hex: 0xB003, status: 400, message: "Sort operation exceeds limit" }),
147
+ SCAN_LIMIT_EXCEEDED: Object.freeze({ hex: 0xB004, status: 400, message: "Scan operation exceeds limit" }),
148
+ INVALID_QUERY_SYNTAX: Object.freeze({ hex: 0xB005, status: 400, message: "That query does not parse." }),
149
+ SQL_FAILED: Object.freeze({ hex: 0xB006, status: 400, message: "The SQL statement did not parse or run" }),
150
+ TENANT_NOT_FOUND: Object.freeze({ hex: 0xC000, status: 404, message: "Tenant not found" }),
151
+ TENANT_ALREADY_EXISTS: Object.freeze({ hex: 0xC001, status: 409, message: "Tenant already exists" }),
152
+ TENANT_INVALID: Object.freeze({ hex: 0xC002, status: 400, message: "That app is not one this server knows." }),
153
+ TENANT_CANNOT_DROP_DEFAULT: Object.freeze({ hex: 0xC003, status: 403, message: "Cannot drop the default tenant" }),
154
+ COLLECTION_NOT_FOUND: Object.freeze({ hex: 0xC004, status: 404, message: "Collection not found" }),
155
+ COLLECTION_ALREADY_EXISTS: Object.freeze({ hex: 0xC005, status: 409, message: "Collection already exists" }),
156
+ FUNCTION_NOT_FOUND: Object.freeze({ hex: 0xC006, status: 404, message: "Function not found" }),
157
+ THREAD_NOT_FOUND: Object.freeze({ hex: 0xC007, status: 404, message: "Thread not found" }),
158
+ MESSAGE_NOT_FOUND: Object.freeze({ hex: 0xC008, status: 404, message: "Message not found" }),
159
+ DATABASE_ERROR: Object.freeze({ hex: 0xC009, status: 500, message: "Database error" }),
160
+ ACCOUNT_NOT_FOUND: Object.freeze({ hex: 0xC00A, status: 404, message: "Account not found" }),
161
+ ACCOUNT_MEMBER_NOT_FOUND: Object.freeze({ hex: 0xC00B, status: 404, message: "No such member of the account" }),
162
+ ACCOUNT_LAST_OWNER: Object.freeze({ hex: 0xC00C, status: 409, message: "An account keeps at least one owner" }),
163
+ ACCOUNT_HAS_APPS: Object.freeze({ hex: 0xC00D, status: 409, message: "The account still owns apps" }),
164
+ ACCOUNT_LIMIT: Object.freeze({ hex: 0xC00E, status: 409, message: "An account limit is reached" }),
165
+ ACCOUNT_KEY_NOT_FOUND: Object.freeze({ hex: 0xC00F, status: 404, message: "No such key of the account" }),
166
+ ACCOUNT_INVITE_NOT_FOUND: Object.freeze({ hex: 0xC010, status: 404, message: "No such invite, or it was used or revoked" }),
167
+ ACCOUNT_INVITE_EXPIRED: Object.freeze({ hex: 0xC011, status: 409, message: "The invite has expired" }),
168
+ ACCOUNT_INVITE_EMAIL: Object.freeze({ hex: 0xC012, status: 403, message: "The invite is for another verified email address" }),
169
+ UNDO_TOKEN_NOT_FOUND: Object.freeze({ hex: 0xC013, status: 404, message: "No such undo token for this app, or it was used" }),
170
+ UNDO_TOKEN_EXPIRED: Object.freeze({ hex: 0xC014, status: 410, message: "The undo token has expired" }),
171
+ UNDO_RESOURCE_CHANGED: Object.freeze({ hex: 0xC015, status: 409, message: "The resource changed after this undo token was issued" }),
172
+ APP_OWNED_BY_ANOTHER_ACCOUNT: Object.freeze({ hex: 0xC016, status: 409, message: "The app belongs to another account" }),
173
+ KEY_EXPIRED: Object.freeze({ hex: 0xC017, status: 401, message: "The tenant key has expired" }),
174
+ TENANT_KEY_NOT_FOUND: Object.freeze({ hex: 0xC018, status: 404, message: "No such key of the tenant" }),
175
+ TENANT_SLUG_RESERVED: Object.freeze({ hex: 0xC019, status: 409, message: "This slug was renamed away recently and is held for its former account" }),
176
+ TENANT_NOTE_TOO_LONG: Object.freeze({ hex: 0xC01A, status: 400, message: "The suspension note is longer than the 127 bytes the record holds; shorten it (nothing is cut)" }),
177
+ TENANT_JOBS_DISABLED: Object.freeze({ hex: 0xC01B, status: 409, message: "This tenant's background work is switched off; nothing queued is lost and tenant.resume starts it again" }),
178
+ TOOL_BAD_NAME: Object.freeze({ hex: 0xC020, status: 400, message: "A tool's name is 1 to 63 bytes of lowercase letters, digits, '-' and '_', not starting with '-' or '_'" }),
179
+ TOOL_HASH_MISMATCH: Object.freeze({ hex: 0xC021, status: 400, message: "The uploaded bytes do not hash to the declared sha256" }),
180
+ TOOL_BAD_SIZE: Object.freeze({ hex: 0xC022, status: 400, message: "The tool's image is empty or larger than the per-tenant limit" }),
181
+ TOOL_BAD_FORMAT: Object.freeze({ hex: 0xC023, status: 400, message: "The tool's image is not an executable this platform runs" }),
182
+ TOOL_TOO_MANY: Object.freeze({ hex: 0xC024, status: 409, message: "This tenant already has as many tools installed as it may" }),
183
+ TOOL_STORAGE_IO: Object.freeze({ hex: 0xC025, status: 500, message: "The tool's image could not be stored" }),
184
+ TOOL_NOT_INSTALLED: Object.freeze({ hex: 0xC026, status: 404, message: "No such tool version is installed" }),
185
+ TOOL_TOO_MANY_BYTES: Object.freeze({ hex: 0xC027, status: 409, message: "This tenant's installed tool images already total as many bytes as it may" }),
186
+ TOOL_LIMIT_OUT_OF_RANGE: Object.freeze({ hex: 0xC028, status: 400, message: "A tool limit is above the ceiling this platform allows for it" }),
187
+ TOOL_BAD_ARGS: Object.freeze({ hex: 0xC029, status: 400, message: "tool.run's args, env or stdin are not shaped as this operation requires" }),
188
+ TOOL_CONFINEMENT_UNAVAILABLE: Object.freeze({ hex: 0xC02A, status: 503, message: "This host cannot confine a tool process; tool.run never runs one unconfined" }),
189
+ TOOL_SPAWN_FAILED: Object.freeze({ hex: 0xC02B, status: 500, message: "The tool process could not be started" }),
190
+ DIRECT_CHANGES: Object.freeze({ hex: 0xC02C, status: 409, message: "A function deployed outside a version would be overwritten or deleted; send direct:\"replace\" or direct:\"keep\"" }),
191
+ HOST_NOT_FOUND: Object.freeze({ hex: 0xC02D, status: 404, message: "Host not found" }),
192
+ HOST_HAS_NODES: Object.freeze({ hex: 0xC02E, status: 409, message: "The host still carries nodes; move them off it first" }),
193
+ NODE_LABEL_NOT_FOUND: Object.freeze({ hex: 0xC02F, status: 404, message: "Node label not found; node_label.set defines it" }),
194
+ NODE_LABEL_IN_USE: Object.freeze({ hex: 0xC030, status: 409, message: "A host still carries the node label; take it off the host first" }),
195
+ NODE_LABEL_LIMIT: Object.freeze({ hex: 0xC031, status: 409, message: "Every one of the 64 node labels is defined; delete one first" }),
196
+ HOST_CAPABILITY_MISSING: Object.freeze({ hex: 0xC032, status: 409, message: "The host lacks a capability the operation needs (the detail names it); run host.probe first" }),
197
+ HOST_AT_CAPACITY: Object.freeze({ hex: 0xC033, status: 409, message: "The host holds as many apps as its max_tenants allows; raise it or place the app on another host" }),
198
+ HOST_HAS_APPS: Object.freeze({ hex: 0xC034, status: 409, message: "Apps are still placed on the host; tenant.place moves them off it" }),
199
+ SETTING_IS_PLATFORM: Object.freeze({ hex: 0xC035, status: 403, message: "The key is a server-wide platform setting; a system admin sets it with platform.setting.set" }),
200
+ NO_CALL_CONTEXT: Object.freeze({ hex: 0xC036, status: 400, message: "The host call was made outside a function's call: no database or function context is bound" }),
201
+ LEDGER_UNAVAILABLE: Object.freeze({ hex: 0xC037, status: 503, message: "The app's ledger could not be opened" }),
202
+ APP_QUERY_NOT_INDEXED: Object.freeze({ hex: 0xC038, status: 400, message: "An offered query's where field is not declared indexed on its collection (index.create kind collection)" }),
203
+ APP_QUERY_FIELD_NOT_EXPOSED: Object.freeze({ hex: 0xC039, status: 400, message: "The reader names a field the offered query does not select" }),
204
+ APP_USE_UNKNOWN_APP: Object.freeze({ hex: 0xC03A, status: 200, message: "The word names an app that does not exist yet; kept, and refused per call until it does" }),
205
+ SECRET_NOT_FOUND: Object.freeze({ hex: 0xC03B, status: 404, message: "The app has no secret of this key; secret.list names the ones it has" }),
206
+ EDIT_NO_MATCH: Object.freeze({ hex: 0xC03C, status: 409, message: "The unit does not hold the edit's old text as given; read it again (version.unit) and edit what it holds" }),
207
+ EDIT_AMBIGUOUS: Object.freeze({ hex: 0xC03D, status: 400, message: "The edit's old text occurs more than once; give more of the surrounding text, or replace_all" }),
208
+ MODULE_NOT_FOUND: Object.freeze({ hex: 0xC040, status: 400, message: "An import names a file the version does not hold; commit the file or fix the specifier" }),
209
+ IMPORT_OUTSIDE_PROJECT: Object.freeze({ hex: 0xC041, status: 400, message: "An import climbs above the version's root; import only files of the version" }),
210
+ IMPORT_NEEDS_VERSION: Object.freeze({ hex: 0xC042, status: 400, message: "A function deployed outside a version imports a file; ship it in a version (version.commit, then version.live.set)" }),
211
+ PACKAGE_NOT_FOUND: Object.freeze({ hex: 0xC043, status: 400, message: "A bare import names a package the version does not hold under node_modules; add it with package.add" }),
212
+ PACKAGE_NOT_EXPORTED: Object.freeze({ hex: 0xC044, status: 400, message: "The package's \"exports\" names no entry for the imported subpath; import one it exports" }),
213
+ PACKAGE_NOT_ESM: Object.freeze({ hex: 0xC045, status: 400, message: "The package's entry is CommonJS by its own package.json; only ES module packages load" }),
214
+ PACKAGE_MANIFEST_INVALID: Object.freeze({ hex: 0xC046, status: 400, message: "The package's package.json is not a JSON object; add the package again with package.add" }),
215
+ HOST_TAKEN: Object.freeze({ hex: 0xC048, status: 409, message: "Another app holds this host's label (under one root or another); choose another label" }),
216
+ HOST_INVALID: Object.freeze({ hex: 0xC049, status: 400, message: "The host is not <label>.<root domain> with a label of lowercase letters, digits and inner hyphens (1 to 63); the detail says why and suggestion is the nearest valid host" }),
217
+ HOST_RESERVED: Object.freeze({ hex: 0xC04A, status: 409, message: "The label belongs to the platform (www, api, mcp, platform), to an app's own host, or to sandbox hosts (it holds --); choose another label" }),
218
+ ENV_HOST_NOT_FOUND: Object.freeze({ hex: 0xC04B, status: 404, message: "This app has no such host; env.host.list names its hosts" }),
219
+ ENVIRONMENT_NOT_FOUND: Object.freeze({ hex: 0xC04C, status: 404, message: "No such environment: live, a sandbox from sandbox.list, or a host from env.host.list" }),
220
+ ROOT_DOMAIN_UNKNOWN: Object.freeze({ hex: 0xC04D, status: 404, message: "The host is not under a root domain of this platform; env.host.list answers the roots a host may be bound under" }),
221
+ ROOT_DOMAIN_DISABLED: Object.freeze({ hex: 0xC04E, status: 409, message: "The root domain is disabled: no host is bound under it until the platform admin enables it" }),
222
+ ROOT_DOMAIN_IN_USE: Object.freeze({ hex: 0xC04F, status: 409, message: "Test hosts are bound under the root domain (hosts is their count); they are removed with env.host.remove first" }),
223
+ FEATURED_APP_NOT_FOUND: Object.freeze({ hex: 0xC050, status: 404, message: "No featured app has this name; featured.list names every one" }),
224
+ FEATURED_NEEDS_PLANS: Object.freeze({ hex: 0xC052, status: 400, message: "Only an app open to other accounts' keys whose plans file has a featured block (title, summary, admin) can be featured" }),
225
+ JET_KEY_NEEDS_APP: Object.freeze({ hex: 0xC053, status: 400, message: "A key for a featured app belongs to one of the account's apps; jet.key.create makes it for the app named" }),
226
+ FEATURED_ALWAYS_ON: Object.freeze({ hex: 0xC054, status: 409, message: "Every account has every featured app, always on: there is nothing to disable. A key stops with account.key.revoke" }),
227
+ BILLING_KEY_NOT_TEST: Object.freeze({ hex: 0xC060, status: 503, message: "The payment provider key set is not a test key (sk_test_ or rk_test_); the platform takes test keys only, so nothing was sent" }),
228
+ CART_EMPTY: Object.freeze({ hex: 0xC061, status: 400, message: "The cart buys nothing: name at least one plan in items, or funds" }),
229
+ CART_PLAN_NOT_FOUND: Object.freeze({ hex: 0xC062, status: 400, message: "The app has no plan by this id; billing.catalog lists every plan" }),
230
+ CART_PLAN_NOT_FOR_SALE: Object.freeze({ hex: 0xC063, status: 400, message: "This plan is free: featured.enable or account.plan.change puts the account on it, no cart needed" }),
231
+ CART_APP_REPEATED: Object.freeze({ hex: 0xC064, status: 400, message: "The cart names this app twice; one plan an app" }),
232
+ CART_COVERED: Object.freeze({ hex: 0xC065, status: 400, message: "The cart's Substrio plan already includes this app at this plan or a higher one; take it out" }),
233
+ CART_MIXED: Object.freeze({ hex: 0xC066, status: 400, message: "Every plan in one cart has the first one's currency and interval; buy the other in a cart of its own" }),
234
+ FUNDS_OUT_OF_RANGE: Object.freeze({ hex: 0xC067, status: 400, message: "Funds are from 500 to 1000000 in the minor unit (5.00 to 10,000.00)" }),
235
+ CART_NOT_FOUND: Object.freeze({ hex: 0xC068, status: 404, message: "The account has no cart by this id; billing.cart.create makes one" }),
236
+ CART_CLOSED: Object.freeze({ hex: 0xC069, status: 409, message: "The cart's checkout has started or is paid, so it no longer changes; make a new cart" }),
237
+ CHECKOUT_PERSON_ONLY: Object.freeze({ hex: 0xC06A, status: 403, message: "Paying is the person's own: give them the cart's checkout_url to pay on" }),
238
+ PAYMENT_NOT_DONE: Object.freeze({ hex: 0xC06B, status: 409, message: "The cart is not paid: the person pays on its checkout page (billing.checkout.start), then this call" }),
239
+ PAYMENT_PROCESSING: Object.freeze({ hex: 0xC06C, status: 409, message: "The payment is still being processed by the provider; ask again shortly" }),
240
+ SUBSCRIPTION_NONE: Object.freeze({ hex: 0xC06D, status: 404, message: "The account has no subscription to cancel" }),
241
+ PROVIDER_ANSWER_INVALID: Object.freeze({ hex: 0xC06E, status: 503, message: "The payment provider's answer was not the object asked for (the field names it); nothing was applied, ask again" }),
242
+ PLAN_LIMIT: Object.freeze({ hex: 0xC06F, status: 409, message: "The account's plan allows no more of this (the field names it); account.plan.summary shows the plans that raise it" }),
243
+ SPACE_ADDON_NOT_ON_PLAN: Object.freeze({ hex: 0xC070, status: 400, message: "The plan the account would be on sells no space add-on; a plan with space_addon (Scale) does" }),
244
+ SPACE_ADDON_HELD: Object.freeze({ hex: 0xC071, status: 409, message: "The account holds space add-on blocks the new plan does not sell; release them first (a cart with space_blocks 0)" }),
245
+ SPACE_ADDON_IN_USE: Object.freeze({ hex: 0xC072, status: 409, message: "The account uses more than the space it would keep; delete data first, then release the blocks" }),
246
+ PLAN_NOT_ON_SALE: Object.freeze({ hex: 0xC073, status: 409, message: "This plan is priced but not on sale yet: it cannot be bought or moved to until the platform sells it (account.plan.summary shows what can be)" }),
247
+ MCP_TOOL_NOT_FOUND: Object.freeze({ hex: 0xC080, status: 404, message: "The app's MCP manifest has no tool of this name; mcp.tool.list names the ones it has" }),
248
+ MCP_TOOL_INVALID: Object.freeze({ hex: 0xC081, status: 400, message: "The tool is not one the app's /mcp can serve; field names the member at fault" }),
249
+ MCP_TEST_USER_NOT_FOUND: Object.freeze({ hex: 0xC082, status: 404, message: "The app has no user of this id to call the tool as; user.list names its people" }),
250
+ MCP_TOOL_FROM_ROUTE: Object.freeze({ hex: 0xC083, status: 409, message: "The tool is a route's own; its function takes it out with tools: {\"<route>\": false} (functions/<name>.json)" }),
251
+ MCP_RESULT_INVALID: Object.freeze({ hex: 0xC084, status: 502, message: "The app's function answered an _mcp that is no tools/call result; field names the member at fault" }),
252
+ MCP_OPERATIONS_IDENTITY_ONLY: Object.freeze({ hex: 0xC085, status: 403, message: "operations declares the platform's own operations: only the platform's identity app declares it" }),
253
+ MCP_LINK_NOT_LINKED: Object.freeze({ hex: 0xC086, status: 403, message: "The caller has no user of that app linked to their Substrio sign-in: they sign in there once" }),
254
+ MCP_LINK_NOT_OFFERED: Object.freeze({ hex: 0xC087, status: 404, message: "That app offers this app no such tool" }),
255
+ CALLER_USERS_REFUSED: Object.freeze({ hex: 0xC088, status: 403, message: "Only a featured app's entry, called by another app, reads that app's users; an app you merely use never reads yours" }),
256
+ NO_CALLER_APP: Object.freeze({ hex: 0xC089, status: 400, message: "This entry was called by no app (a route, a schedule or a direct call), so there are no caller users to read" }),
257
+ SELF_FIELD_REFUSED: Object.freeze({ hex: 0xC08A, status: 403, message: "The app has not marked this field of the person as one they may edit themself; field names it" }),
258
+ KEY_AUTOMATION_NEEDS_PERSON: Object.freeze({ hex: 0xC090, status: 403, message: "Only a person signed in as themselves makes an automation key; a key, an agent or the system key makes agent keys" }),
259
+ MCP_IDENTITY_FUNCTION_NOT_DEPLOYED: Object.freeze({ hex: 0xC091, status: 500, message: "A function the release ships for the identity app was not deployed at start; the next start tries again" }),
260
+ PACKAGE_REGISTRY_UNSET: Object.freeze({ hex: 0xC0A0, status: 503, message: "package.add has no registry: the platform setting package_registry_origin is unset" }),
261
+ PACKAGE_UNKNOWN: Object.freeze({ hex: 0xC0A1, status: 404, message: "The registry has no package of that name" }),
262
+ PACKAGE_NAME_INVALID: Object.freeze({ hex: 0xC0A2, status: 400, message: "Not an npm package name: lowercase letters, digits, - . _ ~, an optional @scope/" }),
263
+ PACKAGE_RANGE_INVALID: Object.freeze({ hex: 0xC0A3, status: 400, message: "Not a version, a range or a dist-tag" }),
264
+ PACKAGE_VERSION_NOT_FOUND: Object.freeze({ hex: 0xC0A4, status: 404, message: "No published version of the package meets the range or tag" }),
265
+ PACKAGE_VERSION_CONFLICT: Object.freeze({ hex: 0xC0A5, status: 409, message: "One package name would need two versions; a version holds one of each name" }),
266
+ PACKAGE_REGISTRY_FAILED: Object.freeze({ hex: 0xC0A6, status: 502, message: "The registry could not be reached or answered with an error" }),
267
+ PACKAGE_TARBALL_OUTSIDE_REGISTRY: Object.freeze({ hex: 0xC0A7, status: 502, message: "The registry names a tarball outside its own origin; only the configured registry is fetched from" }),
268
+ PACKAGE_INTEGRITY_MISMATCH: Object.freeze({ hex: 0xC0A8, status: 502, message: "The tarball's SHA-512 is not the registry's dist.integrity, or the registry gives no sha512" }),
269
+ PACKAGE_TARBALL_INVALID: Object.freeze({ hex: 0xC0A9, status: 502, message: "The tarball is not a gzip tar of a package: a link, an unsafe path, or no package.json" }),
270
+ PACKAGE_TOO_LARGE: Object.freeze({ hex: 0xC0AA, status: 413, message: "The package unpacks past 256 MiB, or its metadata past 64 MiB" }),
271
+ ADOPT_DISABLED: Object.freeze({ hex: 0xC0B0, status: 409, message: "This server adopts no file: it was started without --adopt-dir (or its kernel has no openat2); file.upload stores the bytes instead" }),
272
+ ADOPT_SOURCE_NOT_FOUND: Object.freeze({ hex: 0xC0B1, status: 404, message: "No file of this name is beneath the server's adopt directory; source names it relative to that directory" }),
273
+ ADOPT_SOURCE_OUTSIDE: Object.freeze({ hex: 0xC0B2, status: 400, message: "The source is outside the server's adopt directory (an absolute name, or .. past it)" }),
274
+ ADOPT_SOURCE_SYMLINK: Object.freeze({ hex: 0xC0B3, status: 400, message: "The source's name passes a symbolic link; name the file itself" }),
275
+ ADOPT_SOURCE_NOT_REGULAR: Object.freeze({ hex: 0xC0B4, status: 400, message: "The source is not a regular file (a directory, a pipe, a device or a socket)" }),
276
+ ADOPT_SOURCE_LINKED: Object.freeze({ hex: 0xC0B5, status: 409, message: "The source has another name (a hard link), which would stay a writable name of the stored file; remove the other name first" }),
277
+ ADOPT_CROSS_DEVICE: Object.freeze({ hex: 0xC0B6, status: 409, message: "The source is on another filesystem than the app's file store, so it cannot be renamed in; move it onto the store's filesystem first" }),
278
+ ADOPT_SOURCE_CHANGED: Object.freeze({ hex: 0xC0B7, status: 409, message: "The source was written, or its name moved, while it was hashed; adopt it again once nothing writes it" }),
279
+ CONSOLE_LINK_NEEDS_PERSON: Object.freeze({ hex: 0xC0B8, status: 403, message: "Only a person mints a console link: an agent session for its own person, or the person signed in to the console; a key, the master key or an agent token is no person" }),
280
+ CONSOLE_LINK_UNKNOWN: Object.freeze({ hex: 0xC0B9, status: 404, message: "No live console link has this token: it is mistyped, or a newer link replaced it; the agent mints a new one" }),
281
+ CONSOLE_LINK_USED: Object.freeze({ hex: 0xC0BA, status: 410, message: "This console link was already used; each signs in once, so the agent mints a new one" }),
282
+ CONSOLE_LINK_EXPIRED: Object.freeze({ hex: 0xC0BB, status: 410, message: "This console link is past its life; the agent mints a new one" }),
283
+ CONSOLE_LINK_STEP_UP: Object.freeze({ hex: 0xC0BC, status: 403, message: "This session came from your agent's console link: sign in again with your email code or second factor to decide approvals or make an automation key" }),
284
+ AGENT_CODE_INVALID: Object.freeze({ hex: 0xC0BD, status: 401, message: "This connect code is unknown, already used or past its life; ask your owner for a new one on the console's Agents page" }),
285
+ AGENT_ALREADY_CONNECTED: Object.freeze({ hex: 0xC0BE, status: 409, message: "This connection already acts for your owner, so the connect code is not needed and was not used. A substrio_ae_ code is for an agent with no connection" }),
286
+ AGENT_TOOL_UNKNOWN: Object.freeze({ hex: 0xC0BF, status: 404, message: "No tool of this name reaches this credential; GET /v1/_agent/tools names the ones that do" }),
287
+ CPU_HISTORY_OFF: Object.freeze({ hex: 0xC0C0, status: 409, message: "This server keeps no usage minutes (usage_history_minutes is 0), so it has no CPU a minute to answer; tenant.usage has the totals" }),
288
+ SUBSCRIPTION_NOT_FOUND: Object.freeze({ hex: 0xC0C1, status: 404, message: "There is no subscription of yours by this id; subscriptions.mine lists them" }),
289
+ PLAN_FEATURE_REQUIRED: Object.freeze({ hex: 0xC0C2, status: 403, message: "Your plan at this app does not include this feature; the app's plans name the ones that do" }),
290
+ SUBSCRIBERS_NOT_VISIBLE: Object.freeze({ hex: 0xC0C3, status: 403, message: "Only the selling app and the apps of its own account read its subscribers" }),
291
+ SUBSCRIPTION_PERSON_REQUIRED: Object.freeze({ hex: 0xC0C4, status: 403, message: "This is a person's own call: sign in as the person (an agent or a key cannot buy or list for them)" }),
292
+ PLAN_FEATURE_UNKNOWN: Object.freeze({ hex: 0xC0C5, status: 403, message: "The route's plan gate names a feature the app's plans file does not have" }),
293
+ FILE_EXISTS: Object.freeze({ hex: 0xC0C6, status: 409, message: "A file already exists at the destination path; choose another path, or move with replace: true" }),
294
+ APP_NOT_NAMED: Object.freeze({ hex: 0xC0C7, status: 400, message: "This call runs at an app and the request names none: send X-Substrio-Tenant: <app>, or call the app's own host" }),
295
+ SYSTEM_PROTECTED: Object.freeze({ hex: 0xC0C8, status: 403, message: "This account or app is the platform's own and cannot be deleted" }),
296
+ SHELL_SYNTAX: Object.freeze({ hex: 0xC0D0, status: 400, message: "The command is not in the shell's grammar (the detail says where); nothing ran" }),
297
+ SHELL_UNKNOWN_COMMAND: Object.freeze({ hex: 0xC0D1, status: 400, message: "The shell has no such command; the detail lists the ones it has" }),
298
+ SHELL_UNKNOWN_VARIABLE: Object.freeze({ hex: 0xC0D2, status: 400, message: "The shell has no such variable: PWD HOME SRC SITE FILES BRANCH and ? are the ones it has" }),
299
+ SHELL_PATH_OUTSIDE: Object.freeze({ hex: 0xC0D3, status: 400, message: "The path is under no mount: /src, /site and /files are the shell's whole file system" }),
300
+ SHELL_READ_ONLY: Object.freeze({ hex: 0xC0D4, status: 400, message: "/site is the live release, read only: change /src and ship a version" }),
301
+ SHELL_WRITE_NOT_GRANTED: Object.freeze({ hex: 0xC0D5, status: 403, message: "The command writes, and the caller's grant reads only; nothing landed" }),
302
+ SHELL_FILES_DELETE: Object.freeze({ hex: 0xC0D6, status: 403, message: "A stored file is deleted with file.delete, which asks a person first; nothing landed" }),
303
+ SHELL_OFFSET_WRITES: Object.freeze({ hex: 0xC0D7, status: 400, message: "offset continues a command's output, and this command writes: run it without offset" }),
304
+ SHELL_CPU_BUDGET: Object.freeze({ hex: 0xC0D8, status: 408, message: "The command ran past the shell's CPU budget; nothing landed: narrow it" }),
305
+ SHELL_PIPE_BUDGET: Object.freeze({ hex: 0xC0D9, status: 413, message: "One stage of the command wrote past the shell's pipe budget; nothing landed: narrow it" }),
306
+ DASHBOARD_INVALID: Object.freeze({ hex: 0xC0E0, status: 400, message: "The app's dashboard file is not one the console can draw; field names the path in it (nav[2].panels[0].source.route) and the detail what is wrong" }),
307
+ REGION_NOT_FOUND: Object.freeze({ hex: 0xC0F0, status: 404, message: "No region of this slug; region.list names them" }),
308
+ REGION_IN_USE: Object.freeze({ hex: 0xC0F1, status: 409, message: "A host still names this region; host.update moves or clears it first" }),
309
+ REGION_LIMIT: Object.freeze({ hex: 0xC0F2, status: 409, message: "The platform holds the most regions it can; region.remove frees one" }),
310
+ REGION_UNAVAILABLE: Object.freeze({ hex: 0xC0F3, status: 409, message: "This region is not offered: it is hidden, unknown or serves no apps yet; region.choices lists the ones you can pick" }),
311
+ REGION_FULL: Object.freeze({ hex: 0xC0F4, status: 409, message: "Every host in this region is at its app limit; pick another region from region.choices or try again later" }),
312
+ HOST_NOT_PROBED: Object.freeze({ hex: 0xC0F5, status: 409, message: "This host has not been probed, so its CPU and systemd are unknown; host.probe first" }),
313
+ HOST_NO_SYSTEMD: Object.freeze({ hex: 0xC0F6, status: 409, message: "This host runs no systemd, which a node's service needs" }),
314
+ HOST_NGINX_PRESENT: Object.freeze({ hex: 0xC0F7, status: 409, message: "nginx is installed or running on this host; the platform serves :80 and :443 itself and never shares a host with a proxy" }),
315
+ RELEASE_NOT_FOUND: Object.freeze({ hex: 0xC0F8, status: 404, message: "The master holds no release of this id; release.list names them" }),
316
+ RELEASE_NOT_PACKED: Object.freeze({ hex: 0xC0F9, status: 409, message: "This release has no packed tarball (.tar.zst and .sha256) beside its folder, so it cannot be sent to a host" }),
317
+ RELEASE_ISA_UNKNOWN: Object.freeze({ hex: 0xC0FA, status: 409, message: "This release's manifest names no instruction set, so no host can be checked against it" }),
318
+ HOST_CPU_MISSING: Object.freeze({ hex: 0xC0FB, status: 409, message: "This host's CPU lacks features the release needs; the detail names them" }),
319
+ HOST_NODE_LIMIT: Object.freeze({ hex: 0xC0FC, status: 409, message: "This host holds the most nodes it can; host.node.undeploy frees a slot" }),
320
+ NODE_BUSY: Object.freeze({ hex: 0xC0FD, status: 409, message: "A deploy or undeploy of this node is under way; host.node.list shows when it ends" }),
321
+ TEST_TENANT_REQUIRED: Object.freeze({ hex: 0xC570, status: 403, message: "Only a test tenant (tenant.create test=true) has fetch stubs and a clock" }),
322
+ ARCHIVE_INVALID: Object.freeze({ hex: 0xC580, status: 400, message: "The archive is not one app.archive made, or an entry does not match its manifest.json; detail names the entry. Nothing was written" }),
323
+ ARCHIVE_PASSPHRASE_WRONG: Object.freeze({ hex: 0xC581, status: 400, message: "The X-Substrio-Passphrase header does not open the archive's sealed.bin; send the passphrase it was downloaded with, or none to restore without the sealed part. Nothing was written" }),
324
+ WASM_MODULE_INVALID: Object.freeze({ hex: 0xC590, status: 400, message: "The Wasm module is not valid, lacks an export the platform calls (substrio_fetch, substrio_in, substrio_alloc, memory) or imports something the platform does not provide; the detail names it. Nothing was deployed" }),
325
+ WASM_COMPILE_FAILED: Object.freeze({ hex: 0xC591, status: 422, message: "The Wasm module is valid but was not compiled within the deploy's time and memory limits. Nothing was deployed" }),
326
+ WASM_CELLS_UNSUPPORTED: Object.freeze({ hex: 0xC592, status: 409, message: "This server runs tenant code in cells, where a Wasm function cannot run yet. Nothing was deployed" }),
327
+ RUST_COMPILE_FAILED: Object.freeze({ hex: 0xC593, status: 422, message: "The Rust source did not compile; the detail is the compiler's own diagnostics, with the line and column of each error. Nothing was deployed" }),
328
+ RUST_TOOLCHAIN_UNAVAILABLE: Object.freeze({ hex: 0xC594, status: 503, message: "This server cannot compile Rust: its release has no Rust toolchain (a release ships one; a dev build needs SUBSTRIO_RUST), or the tools jail could not run it (the detail says why). Nothing was deployed" }),
329
+ SERIALIZATION: Object.freeze({ hex: 0xF000, status: 500, message: "Serialization error" }),
330
+ DESERIALIZATION: Object.freeze({ hex: 0xF001, status: 400, message: "Deserialization error" }),
331
+ PIPELINE_TOO_LARGE: Object.freeze({ hex: 0xF002, status: 400, message: "Pipeline too large" }),
332
+ INVALID_JSON: Object.freeze({ hex: 0xF003, status: 400, message: "The request body is not valid JSON." }),
333
+ EMPTY_PAYLOAD: Object.freeze({ hex: 0xF004, status: 400, message: "Request payload is empty" }),
334
+ BODY_REQUIRED: Object.freeze({ hex: 0xF005, status: 400, message: "Request body is required" }),
335
+ METHOD_NOT_ALLOWED: Object.freeze({ hex: 0xF006, status: 405, message: "HTTP method not allowed" }),
336
+ ENDPOINT_NOT_FOUND: Object.freeze({ hex: 0xF007, status: 404, message: "API endpoint not found" }),
337
+ MISSING_FIELD: Object.freeze({ hex: 0xF008, status: 400, message: "Required field is missing" }),
338
+ UNSUPPORTED_OPERATION: Object.freeze({ hex: 0xF009, status: 400, message: "Operation not supported" }),
339
+ NO_WAIT_IN_QUERY: Object.freeze({ hex: 0xF00A, status: 400, message: "Cannot wait inside an open query cursor: $whereJS runs per row while the query holds its position; do the waiting work before or after the query" }),
340
+ NO_WAIT_IN_TRANSACTION: Object.freeze({ hex: 0xF00B, status: 400, message: "Cannot wait inside db.transaction: it holds the database's writer gate for its whole body; do the waiting work before or after the transaction" }),
341
+ NO_WAIT_IN_UPSERT: Object.freeze({ hex: 0xF00C, status: 400, message: "Cannot wait inside an upsert: it holds the collection's upsert gate from its find to its insert; do the waiting work before or after the upsert" }),
342
+ NO_WAIT_IN_ENGINE_GATE: Object.freeze({ hex: 0xF00D, status: 400, message: "Cannot wait for a script transaction inside a query's sink or a registered function's call: it holds the database's engine gate, which the transaction needs to open" }),
343
+ FETCH_FAILED: Object.freeze({ hex: 0xF00E, status: 502, message: "The fetch's upstream could not be reached or broke off" }),
344
+ CRITICAL_SEGFAULT: Object.freeze({ hex: 0xFFFF, status: 500, message: "Critical system failure" }),
345
+ });