diff --git a/packages/errors/__tests__/billing-refusals.test.ts b/packages/errors/__tests__/billing-refusals.test.ts new file mode 100644 index 000000000..f85a38127 --- /dev/null +++ b/packages/errors/__tests__/billing-refusals.test.ts @@ -0,0 +1,46 @@ +import { readFileSync } from 'fs'; +import { join } from 'path'; + +import { httpStatusFor, parse, toError } from '../src'; + +const inventory: Record = JSON.parse( + readFileSync(join(__dirname, '../scripts/db-error-inventory.json'), 'utf-8') +); + +/** The shape errors.raise_error gives node-postgres: P0001 with the payload in DETAIL. */ +const raised = (code: string, context: Record, errorClass: 'public' | 'internal') => + Object.assign(new Error(code), { + code: 'P0001', + detail: JSON.stringify({ code, context, class: errorClass }) + }); + +describe('billing refusals raised by constructive-db', () => { + it('answers a delete blocked by a live subscription as a 409 with its context', () => { + const context = { entity_id: '6f1c2f0e-0000-4000-8000-000000000001', external_subscription_id: 'sub_123' }; + const err = raised('BILLING_SUBSCRIPTION_ACTIVE', context, 'public'); + + expect(inventory.BILLING_SUBSCRIPTION_ACTIVE).toBeDefined(); + expect(httpStatusFor(parse(err).code)).toEqual({ status: 409, mapped: true }); + expect(toError(err)).toMatchObject({ + code: 'BILLING_SUBSCRIPTION_ACTIVE', + errorClass: 'public', + http: 409, + context + }); + }); + + it('answers an exhausted usage allowance as a 429', () => { + const err = raised('BILLING_QUOTA_EXCEEDED', {}, 'public'); + + expect(inventory.BILLING_QUOTA_EXCEEDED).toBeDefined(); + expect(toError(err)).toMatchObject({ errorClass: 'public', http: 429 }); + }); + + it('keeps a malformed checkout binding a registered internal 500', () => { + const err = raised('BILLING_CHECKOUT_BINDING_INVALID', { entity_id: null, operation_id: null }, 'internal'); + + expect(inventory.BILLING_CHECKOUT_BINDING_INVALID).toBeDefined(); + expect(httpStatusFor('BILLING_CHECKOUT_BINDING_INVALID')).toEqual({ status: 500, mapped: true }); + expect(toError(err)).toMatchObject({ errorClass: 'internal', http: 500 }); + }); +}); diff --git a/packages/errors/scripts/db-error-inventory.json b/packages/errors/scripts/db-error-inventory.json index 52ac88335..67348dce4 100644 --- a/packages/errors/scripts/db-error-inventory.json +++ b/packages/errors/scripts/db-error-inventory.json @@ -31,14 +31,6 @@ "n_generated": 4, "class": "public" }, - "ACTOR_CLAIM_REQUIRED": { - "count": 4, - "dynamic": false, - "sample": "ACTOR_CLAIM_REQUIRED", - "n_source": 0, - "n_generated": 4, - "class": "internal" - }, "ALREADY_AUTHENTICATED_USE_LINK": { "count": 8, "dynamic": false, @@ -47,13 +39,6 @@ "n_generated": 4, "class": "public" }, - "ALREADY_SCHEDULED": { - "count": 8, - "dynamic": false, - "sample": "ALREADY_SCHEDULED", - "n_source": 0, - "n_generated": 4 - }, "ALTER_TABLE_ADD_COLUMN": { "count": 16, "dynamic": true, @@ -178,14 +163,6 @@ "n_generated": 1, "class": "internal" }, - "ATTRIBUTION_REQUIRED": { - "count": 4, - "dynamic": false, - "sample": "ATTRIBUTION_REQUIRED", - "n_source": 0, - "n_generated": 4, - "class": "internal" - }, "AUTHZ_COLUMN_SECURITY_AUTHZ_NODE_REQUIRED": { "count": 2, "dynamic": false, @@ -290,7 +267,7 @@ "class": "public" }, "BAD_EXPRESSION": { - "count": 581, + "count": 575, "dynamic": true, "sample": "BAD_EXPRESSION % (unrecognized format)", "n_source": 2, @@ -465,6 +442,14 @@ "n_generated": 1, "class": "internal" }, + "BILLING_CHECKOUT_BINDING_INVALID": { + "count": 2, + "dynamic": false, + "sample": "BILLING_CHECKOUT_BINDING_INVALID", + "n_source": 0, + "n_generated": 2, + "class": "internal" + }, "BILLING_DISPUTE_BALANCE_NOT_FOUND": { "count": 4, "dynamic": false, @@ -545,12 +530,20 @@ "n_generated": 2, "class": "internal" }, + "BILLING_QUOTA_EXCEEDED": { + "count": 4, + "dynamic": false, + "sample": "BILLING_QUOTA_EXCEEDED", + "n_source": 1, + "n_generated": 1, + "class": "public" + }, "BILLING_RECONCILE_BOUNDS_REQUIRED": { - "count": 2, + "count": 4, "dynamic": false, "sample": "BILLING_RECONCILE_BOUNDS_REQUIRED", "n_source": 0, - "n_generated": 2, + "n_generated": 3, "class": "internal" }, "BILLING_SCHEDULED_CHANGE_INVALID": { @@ -561,6 +554,14 @@ "n_generated": 3, "class": "internal" }, + "BILLING_SUBSCRIPTION_ACTIVE": { + "count": 3, + "dynamic": false, + "sample": "BILLING_SUBSCRIPTION_ACTIVE", + "n_source": 1, + "n_generated": 2, + "class": "public" + }, "BLUEPRINT_MODULE_NOT_INSTALLED": { "count": 2, "dynamic": false, @@ -609,6 +610,14 @@ "n_generated": 1, "class": "internal" }, + "BOOTSTRAP_OWNER_NOT_ACTIVE": { + "count": 4, + "dynamic": false, + "sample": "BOOTSTRAP_OWNER_NOT_ACTIVE", + "n_source": 1, + "n_generated": 1, + "class": "internal" + }, "BOOTSTRAP_SOURCE_MISSING": { "count": 2, "dynamic": false, @@ -965,6 +974,14 @@ "n_generated": 1, "class": "internal" }, + "CONSTRUCT_BLUEPRINT_TABLES_ORG_MEMBERSHIP_NOT_FOUND": { + "count": 2, + "dynamic": false, + "sample": "CONSTRUCT_BLUEPRINT_TABLES_ORG_MEMBERSHIP_NOT_FOUND", + "n_source": 1, + "n_generated": 1, + "class": "internal" + }, "CONST_TYPE_FIELDS_IMMUTABLE": { "count": 4, "dynamic": false, @@ -1114,14 +1131,6 @@ "n_generated": 4, "class": "public" }, - "DATABASE_CLAIM_REQUIRED": { - "count": 4, - "dynamic": false, - "sample": "DATABASE_CLAIM_REQUIRED", - "n_source": 0, - "n_generated": 4, - "class": "internal" - }, "DATABASE_FIELD_RESERVED_WORD": { "count": 2, "dynamic": false, @@ -1219,9 +1228,9 @@ "class": "public" }, "DATA_BILLING_METER": { - "count": 2, + "count": 4, "dynamic": true, - "sample": "DATA_BILLING_METER: unknown event %, expected INSERT, DELETE, or UPDATE", + "sample": "DATA_BILLING_METER: unknown event %, expected INSERT, DELETE, UPDATE, GATE or GATE_UPDATE", "n_source": 1, "n_generated": 1 }, @@ -2299,20 +2308,12 @@ "n_generated": 4, "class": "public" }, - "ENTITY_CLAIM_REQUIRED": { - "count": 4, - "dynamic": false, - "sample": "ENTITY_CLAIM_REQUIRED", - "n_source": 0, - "n_generated": 4, - "class": "internal" - }, "ENTITY_ID_REQUIRED": { - "count": 16, + "count": 12, "dynamic": false, "sample": "ENTITY_ID_REQUIRED", "n_source": 3, - "n_generated": 7, + "n_generated": 3, "class": "public" }, "ENTITY_NOT_FOUND": { @@ -2331,14 +2332,6 @@ "n_generated": 4, "class": "internal" }, - "ENTITY_TYPE_CLAIM_REQUIRED": { - "count": 4, - "dynamic": false, - "sample": "ENTITY_TYPE_CLAIM_REQUIRED", - "n_source": 0, - "n_generated": 4, - "class": "internal" - }, "ENTITY_TYPE_MISMATCH": { "count": 2, "dynamic": false, @@ -2356,7 +2349,7 @@ "class": "public" }, "ENTITY_TYPE_PROVISION": { - "count": 16, + "count": 18, "dynamic": false, "sample": "ENTITY_TYPE_PROVISION", "n_source": 1, @@ -2364,11 +2357,11 @@ "class": "internal" }, "ENTITY_TYPE_REQUIRED": { - "count": 10, + "count": 6, "dynamic": false, "sample": "ENTITY_TYPE_REQUIRED", "n_source": 2, - "n_generated": 5, + "n_generated": 1, "class": "public" }, "ENUM_VALUES_CANNOT_BE_REMOVED": { @@ -2657,11 +2650,11 @@ "class": "internal" }, "FORBIDDEN": { - "count": 70, + "count": 80, "dynamic": false, "sample": "FORBIDDEN", - "n_source": 4, - "n_generated": 35, + "n_source": 6, + "n_generated": 38, "class": "public" }, "FOREIGN_KEY_CONSTRAINT_NOT_FOUND": { @@ -2672,14 +2665,6 @@ "n_generated": 1, "class": "internal" }, - "FREE_PLAN_REQUIRED": { - "count": 4, - "dynamic": false, - "sample": "FREE_PLAN_REQUIRED", - "n_source": 1, - "n_generated": 3, - "class": "internal" - }, "FUNCTION_BODY_DEPARSE_EMPTY": { "count": 2, "dynamic": false, @@ -3418,10 +3403,10 @@ "class": "public" }, "INTERNAL_ERROR": { - "count": 460, + "count": 464, "dynamic": false, "sample": "INTERNAL_ERROR", - "n_source": 96, + "n_source": 98, "n_generated": 4, "class": "internal" }, @@ -3550,13 +3535,6 @@ "n_generated": 4, "class": "public" }, - "INVALID_WORKER_ID": { - "count": 8, - "dynamic": false, - "sample": "INVALID_WORKER_ID", - "n_source": 0, - "n_generated": 6 - }, "INVITE_ACCOUNT_EXISTS_UNVERIFIED": { "count": 4, "dynamic": false, @@ -4011,7 +3989,7 @@ "class": "public" }, "LIMIT_TRACK_USAGE_UNKNOWN_EVENT": { - "count": 2, + "count": 4, "dynamic": false, "sample": "LIMIT_TRACK_USAGE_UNKNOWN_EVENT", "n_source": 1, @@ -4394,10 +4372,10 @@ "class": "public" }, "NOT_FOUND": { - "count": 76, + "count": 84, "dynamic": false, "sample": "NOT_FOUND", - "n_source": 20, + "n_source": 21, "n_generated": 3, "class": "public" }, @@ -4489,6 +4467,14 @@ "n_generated": 1, "class": "internal" }, + "PARENT_CURSOR_NOT_ADVANCED": { + "count": 7, + "dynamic": false, + "sample": "PARENT_CURSOR_NOT_ADVANCED", + "n_source": 1, + "n_generated": 4, + "class": "public" + }, "PARENT_ENTITY_TYPE_NOT_FOUND": { "count": 12, "dynamic": false, @@ -5153,6 +5139,30 @@ "n_generated": 4, "class": "public" }, + "SCHEDULE_FANOUT_LANE_INVALID": { + "count": 2, + "dynamic": false, + "sample": "SCHEDULE_FANOUT_LANE_INVALID", + "n_source": 1, + "n_generated": 1, + "class": "internal" + }, + "SCHEDULE_FANOUT_TASK_NOT_ALLOWED": { + "count": 6, + "dynamic": false, + "sample": "SCHEDULE_FANOUT_TASK_NOT_ALLOWED", + "n_source": 3, + "n_generated": 1, + "class": "internal" + }, + "SCHEDULE_FANOUT_TENANTS_PER_LANE_INVALID": { + "count": 2, + "dynamic": false, + "sample": "SCHEDULE_FANOUT_TENANTS_PER_LANE_INVALID", + "n_source": 1, + "n_generated": 1, + "class": "internal" + }, "SCOPE_TYPE_BACKFILL": { "count": 6, "dynamic": false, @@ -5793,20 +5803,12 @@ "n_generated": 3, "class": "public" }, - "STEP_UP_REQUIRED": { - "count": 19, - "dynamic": false, - "sample": "STEP_UP_REQUIRED", - "n_source": 1, - "n_generated": 10, - "class": "public" - }, "STEP_UP_REQUIRED_FRESH_AUTH": { - "count": 4, + "count": 23, "dynamic": false, "sample": "STEP_UP_REQUIRED_FRESH_AUTH", - "n_source": 1, - "n_generated": 3, + "n_source": 2, + "n_generated": 12, "class": "public" }, "STEP_UP_REQUIRED_MFA": { @@ -5826,11 +5828,12 @@ "class": "public" }, "STEP_UP_REQUIRED_PASSWORD_OR_MFA": { - "count": 2, + "count": 4, "dynamic": false, "sample": "STEP_UP_REQUIRED_PASSWORD_OR_MFA", "n_source": 1, - "n_generated": 1 + "n_generated": 3, + "class": "public" }, "STORAGE_API_NOT_PROVISIONED": { "count": 2, @@ -5936,22 +5939,6 @@ "n_generated": 1, "class": "internal" }, - "STORAGE_MODULE_ENTITY_FIELD_INVALID": { - "count": 2, - "dynamic": false, - "sample": "STORAGE_MODULE_ENTITY_FIELD_INVALID", - "n_source": 1, - "n_generated": 1, - "class": "internal" - }, - "STORAGE_MODULE_NOT_FOUND": { - "count": 2, - "dynamic": false, - "sample": "STORAGE_MODULE_NOT_FOUND", - "n_source": 1, - "n_generated": 1, - "class": "internal" - }, "STORAGE_PROMOTION_DESTINATION_MISMATCH": { "count": 7, "dynamic": false, @@ -6041,10 +6028,10 @@ "class": "public" }, "SUSPENSION_FORBIDDEN": { - "count": 2, + "count": 6, "dynamic": false, "sample": "SUSPENSION_FORBIDDEN", - "n_source": 1, + "n_source": 3, "n_generated": 1, "class": "public" }, @@ -6342,7 +6329,7 @@ "class": "public" }, "VALIDATE_BLUEPRINT_EXPECTED_STRING": { - "count": 42, + "count": 38, "dynamic": false, "sample": "VALIDATE_BLUEPRINT_EXPECTED_STRING", "n_source": 2, @@ -6358,7 +6345,7 @@ "class": "public" }, "VALIDATE_BLUEPRINT_INVALID": { - "count": 26, + "count": 30, "dynamic": false, "sample": "VALIDATE_BLUEPRINT_INVALID", "n_source": 1, diff --git a/packages/errors/src/generated/registry.generated.ts b/packages/errors/src/generated/registry.generated.ts index 063e20a51..cddbd8fe4 100644 --- a/packages/errors/src/generated/registry.generated.ts +++ b/packages/errors/src/generated/registry.generated.ts @@ -2,7 +2,7 @@ /** * GENERATED FILE — DO NOT EDIT BY HAND. * - * Source of truth: the constructive-db error audit (818 distinct codes + * Source of truth: the constructive-db error audit (816 distinct codes * raised via EXCEPTION/THROW across deploy sources + generated output). * Regenerate with `python3 scripts/generate-registry.py` (see README.md). * @@ -10,7 +10,7 @@ * codes carry their raw message (with %-args rendered as {{argN}}). Curated * entries in `registry.ts` override anything here (typed context + refined copy). * - * Counts: 818 total, 599 public, 219 internal. + * Counts: 816 total, 600 public, 216 internal. */ import { defineError, type DefinedError } from '../define'; import type { ErrorContext } from '../types'; @@ -28,9 +28,7 @@ export const generatedRegistry: Record> = { 'ACCOUNT_EXISTS': defineError({ code: 'ACCOUNT_EXISTS', class: 'public', http: 409, message: 'Account exists.' }), 'ACCOUNT_LOCKED_EXCEED_ATTEMPTS': defineError({ code: 'ACCOUNT_LOCKED_EXCEED_ATTEMPTS', class: 'public', http: 423, message: 'Account locked exceed attempts.' }), 'ACCOUNT_NOT_FOUND': defineError({ code: 'ACCOUNT_NOT_FOUND', class: 'public', http: 404, message: 'Account not found.' }), - 'ACTOR_CLAIM_REQUIRED': defineError({ code: 'ACTOR_CLAIM_REQUIRED', class: 'internal', http: 500, message: 'Actor claim required.' }), 'ALREADY_AUTHENTICATED_USE_LINK': defineError({ code: 'ALREADY_AUTHENTICATED_USE_LINK', class: 'public', http: 409, message: 'Already authenticated use link.' }), - 'ALREADY_SCHEDULED': defineError({ code: 'ALREADY_SCHEDULED', class: 'public', http: 409, message: 'Already scheduled.' }), 'ALTER_TABLE_ADD_COLUMN': defineError({ code: 'ALTER_TABLE_ADD_COLUMN', class: 'internal', http: 500, message: 'ALTER_TABLE_ADD_COLUMN: a column cannot be both generated and an identity column' }), 'API_KEYS_DISABLED': defineError({ code: 'API_KEYS_DISABLED', class: 'public', http: 403, message: 'Api keys disabled.' }), 'API_KEY_LIMIT_REACHED': defineError({ code: 'API_KEY_LIMIT_REACHED', class: 'public', http: 429, message: 'Api key limit reached.' }), @@ -47,7 +45,6 @@ export const generatedRegistry: Record> = { 'AST_OPTIONS_NOT_OBJECT': defineError({ code: 'AST_OPTIONS_NOT_OBJECT', class: 'internal', http: 500, message: 'Ast options not object.' }), 'AST_OPTION_REQUIRED': defineError({ code: 'AST_OPTION_REQUIRED', class: 'internal', http: 500, message: 'Ast option required.' }), 'AST_OPTION_UNKNOWN': defineError({ code: 'AST_OPTION_UNKNOWN', class: 'internal', http: 500, message: 'Ast option unknown.' }), - 'ATTRIBUTION_REQUIRED': defineError({ code: 'ATTRIBUTION_REQUIRED', class: 'internal', http: 500, message: 'Attribution required.' }), 'AUTHZ_COLUMN_SECURITY_AUTHZ_NODE_REQUIRED': defineError({ code: 'AUTHZ_COLUMN_SECURITY_AUTHZ_NODE_REQUIRED', class: 'public', http: 400, message: 'Authz column security authz node required.' }), 'AUTHZ_COLUMN_SECURITY_COLUMNS_REQUIRED': defineError({ code: 'AUTHZ_COLUMN_SECURITY_COLUMNS_REQUIRED', class: 'public', http: 400, message: 'Authz column security columns required.' }), 'AUTHZ_COLUMN_SECURITY_COLUMN_NOT_FOUND': defineError({ code: 'AUTHZ_COLUMN_SECURITY_COLUMN_NOT_FOUND', class: 'public', http: 404, message: 'Authz column security column not found.' }), @@ -83,6 +80,7 @@ export const generatedRegistry: Record> = { 'BAD_RLS_EXPRESSION': defineError({ code: 'BAD_RLS_EXPRESSION', class: 'public', http: 400, message: 'Bad rls expression.' }), 'BAD_VIEW_EXPRESSION': defineError({ code: 'BAD_VIEW_EXPRESSION', class: 'public', http: 400, message: 'Bad view expression.' }), 'BEHAVIOR_FRAGMENT_EMPTY': defineError({ code: 'BEHAVIOR_FRAGMENT_EMPTY', class: 'internal', http: 500, message: 'Behavior fragment empty.' }), + 'BILLING_CHECKOUT_BINDING_INVALID': defineError({ code: 'BILLING_CHECKOUT_BINDING_INVALID', class: 'internal', http: 500, message: 'Billing checkout binding invalid.' }), 'BILLING_DISPUTE_BALANCE_NOT_FOUND': defineError({ code: 'BILLING_DISPUTE_BALANCE_NOT_FOUND', class: 'internal', http: 500, message: 'Billing dispute balance not found.' }), 'BILLING_ENTITY_BUSY': defineError({ code: 'BILLING_ENTITY_BUSY', class: 'public', http: 400, message: 'Billing entity busy.' }), 'BILLING_HEALTH_INVALID': defineError({ code: 'BILLING_HEALTH_INVALID', class: 'internal', http: 500, message: 'Billing health invalid.' }), @@ -93,14 +91,17 @@ export const generatedRegistry: Record> = { 'BILLING_OPERATION_NOT_FOUND': defineError({ code: 'BILLING_OPERATION_NOT_FOUND', class: 'internal', http: 500, message: 'Billing operation not found.' }), 'BILLING_OPERATION_SETTLED': defineError({ code: 'BILLING_OPERATION_SETTLED', class: 'internal', http: 500, message: 'Billing operation settled.' }), 'BILLING_OPERATION_STATE_INVALID': defineError({ code: 'BILLING_OPERATION_STATE_INVALID', class: 'internal', http: 500, message: 'Billing operation state invalid.' }), + 'BILLING_QUOTA_EXCEEDED': defineError({ code: 'BILLING_QUOTA_EXCEEDED', class: 'public', http: 400, message: 'Billing quota exceeded.' }), 'BILLING_RECONCILE_BOUNDS_REQUIRED': defineError({ code: 'BILLING_RECONCILE_BOUNDS_REQUIRED', class: 'internal', http: 500, message: 'Billing reconcile bounds required.' }), 'BILLING_SCHEDULED_CHANGE_INVALID': defineError({ code: 'BILLING_SCHEDULED_CHANGE_INVALID', class: 'internal', http: 500, message: 'Billing scheduled change invalid.' }), + 'BILLING_SUBSCRIPTION_ACTIVE': defineError({ code: 'BILLING_SUBSCRIPTION_ACTIVE', class: 'public', http: 400, message: 'Billing subscription active.' }), 'BLUEPRINT_MODULE_NOT_INSTALLED': defineError({ code: 'BLUEPRINT_MODULE_NOT_INSTALLED', class: 'public', http: 400, message: 'Blueprint module not installed.' }), 'BLUEPRINT_MODULE_REF_AMBIGUOUS': defineError({ code: 'BLUEPRINT_MODULE_REF_AMBIGUOUS', class: 'public', http: 400, message: 'Blueprint module ref ambiguous.' }), 'BLUEPRINT_MODULE_REF_INVALID': defineError({ code: 'BLUEPRINT_MODULE_REF_INVALID', class: 'public', http: 400, message: 'Blueprint module ref invalid.' }), 'BLUEPRINT_MODULE_TABLE_UNKNOWN': defineError({ code: 'BLUEPRINT_MODULE_TABLE_UNKNOWN', class: 'public', http: 400, message: 'Blueprint module table unknown.' }), 'BM25': defineError({ code: 'BM25', class: 'public', http: 400, message: 'Bm25.' }), 'BOOTSTRAP_DATABASE_MISSING': defineError({ code: 'BOOTSTRAP_DATABASE_MISSING', class: 'internal', http: 500, message: 'Bootstrap database missing.' }), + 'BOOTSTRAP_OWNER_NOT_ACTIVE': defineError({ code: 'BOOTSTRAP_OWNER_NOT_ACTIVE', class: 'internal', http: 500, message: 'Bootstrap owner not active.' }), 'BOOTSTRAP_SOURCE_MISSING': defineError({ code: 'BOOTSTRAP_SOURCE_MISSING', class: 'internal', http: 500, message: 'Bootstrap source missing.' }), 'BOOTSTRAP_TARGET_NOT_EMPTY': defineError({ code: 'BOOTSTRAP_TARGET_NOT_EMPTY', class: 'internal', http: 500, message: 'Bootstrap target not empty.' }), 'BUILD_CONDITION_EXPR': defineError({ code: 'BUILD_CONDITION_EXPR', class: 'internal', http: 500, message: 'Build condition expr.' }), @@ -146,6 +147,7 @@ export const generatedRegistry: Record> = { 'CONSTRUCT_BLUEPRINT_PROVISIONS_WITHOUT_MODULE': defineError({ code: 'CONSTRUCT_BLUEPRINT_PROVISIONS_WITHOUT_MODULE', class: 'public', http: 400, message: 'Construct blueprint provisions without module.' }), 'CONSTRUCT_BLUEPRINT_SCHEMA_NOT_FOUND': defineError({ code: 'CONSTRUCT_BLUEPRINT_SCHEMA_NOT_FOUND', class: 'internal', http: 500, message: 'Construct blueprint schema not found.' }), 'CONSTRUCT_BLUEPRINT_STORAGE_ORG_MEMBERSHIP_NOT_FOUND': defineError({ code: 'CONSTRUCT_BLUEPRINT_STORAGE_ORG_MEMBERSHIP_NOT_FOUND', class: 'internal', http: 500, message: 'Construct blueprint storage org membership not found.' }), + 'CONSTRUCT_BLUEPRINT_TABLES_ORG_MEMBERSHIP_NOT_FOUND': defineError({ code: 'CONSTRUCT_BLUEPRINT_TABLES_ORG_MEMBERSHIP_NOT_FOUND', class: 'internal', http: 500, message: 'Construct blueprint tables org membership not found.' }), 'CONST_TYPE_FIELDS_IMMUTABLE': defineError({ code: 'CONST_TYPE_FIELDS_IMMUTABLE', class: 'public', http: 403, message: 'Const type fields immutable.' }), 'CONTENT_PRESET_CATALOG_MISSING': defineError({ code: 'CONTENT_PRESET_CATALOG_MISSING', class: 'internal', http: 500, message: 'Content preset catalog missing.' }), 'CONTENT_PRESET_EMPTY': defineError({ code: 'CONTENT_PRESET_EMPTY', class: 'public', http: 400, message: 'Content preset empty.' }), @@ -165,7 +167,6 @@ export const generatedRegistry: Record> = { 'CROSS_DATABASE_CHECK': defineError({ code: 'CROSS_DATABASE_CHECK', class: 'public', http: 400, message: 'Cross database check.' }), 'CROSS_DATABASE_REF': defineError({ code: 'CROSS_DATABASE_REF', class: 'public', http: 400, message: 'Cross database ref.' }), 'CSRF_TOKEN_REQUIRED': defineError({ code: 'CSRF_TOKEN_REQUIRED', class: 'public', http: 401, message: 'Csrf token required.' }), - 'DATABASE_CLAIM_REQUIRED': defineError({ code: 'DATABASE_CLAIM_REQUIRED', class: 'internal', http: 500, message: 'Database claim required.' }), 'DATABASE_FIELD_RESERVED_WORD': defineError({ code: 'DATABASE_FIELD_RESERVED_WORD', class: 'public', http: 400, message: 'Database field reserved word.' }), 'DATABASE_FUNCTION_RESERVED_WORD': defineError({ code: 'DATABASE_FUNCTION_RESERVED_WORD', class: 'public', http: 400, message: 'Database function reserved word.' }), 'DATABASE_HOSTNAME_IDENTITY_AMBIGUOUS': defineError({ code: 'DATABASE_HOSTNAME_IDENTITY_AMBIGUOUS', class: 'public', http: 400, message: 'Database hostname identity ambiguous.' }), @@ -178,7 +179,7 @@ export const generatedRegistry: Record> = { 'DATABASE_TRANSFER_NOT_PENDING': defineError({ code: 'DATABASE_TRANSFER_NOT_PENDING', class: 'public', http: 400, message: 'Database transfer not pending.' }), 'DATABASE_TRANSFER_NOT_SOURCE_OWNER': defineError({ code: 'DATABASE_TRANSFER_NOT_SOURCE_OWNER', class: 'public', http: 400, message: 'Database transfer not source owner.' }), 'DATABASE_TRANSFER_NOT_TARGET_OWNER': defineError({ code: 'DATABASE_TRANSFER_NOT_TARGET_OWNER', class: 'public', http: 400, message: 'Database transfer not target owner.' }), - 'DATA_BILLING_METER': defineError({ code: 'DATA_BILLING_METER', class: 'internal', http: 500, message: 'DATA_BILLING_METER: unknown event {{arg0}}, expected INSERT, DELETE, or UPDATE', positional: ['arg0'] }), + 'DATA_BILLING_METER': defineError({ code: 'DATA_BILLING_METER', class: 'internal', http: 500, message: 'DATA_BILLING_METER: unknown event {{arg0}}, expected INSERT, DELETE, UPDATE, GATE or GATE_UPDATE', positional: ['arg0'] }), 'DATA_COMPOSITE_FIELD_PRIVATE_SCHEMA_NOT_FOUND': defineError({ code: 'DATA_COMPOSITE_FIELD_PRIVATE_SCHEMA_NOT_FOUND', class: 'public', http: 404, message: 'Data composite field private schema not found.' }), 'DATA_COMPOSITE_FIELD_SOURCE_FIELDS_EMPTY': defineError({ code: 'DATA_COMPOSITE_FIELD_SOURCE_FIELDS_EMPTY', class: 'public', http: 400, message: 'Data composite field source fields empty.' }), 'DATA_COMPOSITE_FIELD_SOURCE_FIELDS_REQUIRED': defineError({ code: 'DATA_COMPOSITE_FIELD_SOURCE_FIELDS_REQUIRED', class: 'public', http: 400, message: 'Data composite field source fields required.' }), @@ -315,11 +316,9 @@ export const generatedRegistry: Record> = { 'DOMAIN_VERIFY_BAD_METHOD': defineError({ code: 'DOMAIN_VERIFY_BAD_METHOD', class: 'internal', http: 500, message: 'DOMAIN_VERIFY_BAD_METHOD: unsupported verification method {{arg0}}', positional: ['arg0'] }), 'DOMAIN_VERIFY_NO_CHALLENGE': defineError({ code: 'DOMAIN_VERIFY_NO_CHALLENGE', class: 'internal', http: 500, message: 'DOMAIN_VERIFY_NO_CHALLENGE: no outstanding {{arg0}} challenge for managed_domain {{arg1}}', positional: ['arg0', 'arg1'] }), 'EMAIL_NOT_VERIFIED': defineError({ code: 'EMAIL_NOT_VERIFIED', class: 'public', http: 400, message: 'Email not verified.' }), - 'ENTITY_CLAIM_REQUIRED': defineError({ code: 'ENTITY_CLAIM_REQUIRED', class: 'internal', http: 500, message: 'Entity claim required.' }), 'ENTITY_ID_REQUIRED': defineError({ code: 'ENTITY_ID_REQUIRED', class: 'public', http: 400, message: 'Entity id required.' }), 'ENTITY_NOT_FOUND': defineError({ code: 'ENTITY_NOT_FOUND', class: 'public', http: 404, message: 'Entity not found.' }), 'ENTITY_REQUIRED': defineError({ code: 'ENTITY_REQUIRED', class: 'internal', http: 500, message: 'Entity required.' }), - 'ENTITY_TYPE_CLAIM_REQUIRED': defineError({ code: 'ENTITY_TYPE_CLAIM_REQUIRED', class: 'internal', http: 500, message: 'Entity type claim required.' }), 'ENTITY_TYPE_MISMATCH': defineError({ code: 'ENTITY_TYPE_MISMATCH', class: 'public', http: 400, message: 'Entity type mismatch.' }), 'ENTITY_TYPE_NOT_FOUND': defineError({ code: 'ENTITY_TYPE_NOT_FOUND', class: 'public', http: 404, message: 'Entity type not found.' }), 'ENTITY_TYPE_PROVISION': defineError({ code: 'ENTITY_TYPE_PROVISION', class: 'internal', http: 500, message: 'Entity type provision.' }), @@ -362,7 +361,6 @@ export const generatedRegistry: Record> = { 'FILE_REF_FIELD': defineError({ code: 'FILE_REF_FIELD', class: 'internal', http: 500, message: 'File ref field.' }), 'FORBIDDEN': defineError({ code: 'FORBIDDEN', class: 'public', http: 403, message: 'Forbidden.' }), 'FOREIGN_KEY_CONSTRAINT_NOT_FOUND': defineError({ code: 'FOREIGN_KEY_CONSTRAINT_NOT_FOUND', class: 'internal', http: 500, message: 'Foreign key constraint not found.' }), - 'FREE_PLAN_REQUIRED': defineError({ code: 'FREE_PLAN_REQUIRED', class: 'internal', http: 500, message: 'Free plan required.' }), 'FUNCTION_BODY_DEPARSE_EMPTY': defineError({ code: 'FUNCTION_BODY_DEPARSE_EMPTY', class: 'internal', http: 500, message: 'Function body deparse empty.' }), 'FUNCTION_ENVELOPE_VIOLATION': defineError({ code: 'FUNCTION_ENVELOPE_VIOLATION', class: 'internal', http: 500, message: 'Function envelope violation.' }), 'FUNCTION_GRAPH_NOT_FOUND': defineError({ code: 'FUNCTION_GRAPH_NOT_FOUND', class: 'internal', http: 500, message: 'Function graph not found.' }), @@ -474,7 +472,6 @@ export const generatedRegistry: Record> = { 'INVALID_PAYLOAD_REF': defineError({ code: 'INVALID_PAYLOAD_REF', class: 'public', http: 400, message: 'Invalid payload ref.' }), 'INVALID_TOKEN': defineError({ code: 'INVALID_TOKEN', class: 'public', http: 401, message: 'Invalid token.' }), 'INVALID_USER': defineError({ code: 'INVALID_USER', class: 'public', http: 400, message: 'Invalid user.' }), - 'INVALID_WORKER_ID': defineError({ code: 'INVALID_WORKER_ID', class: 'internal', http: 500, message: 'Invalid worker id.' }), 'INVITE_ACCOUNT_EXISTS_UNVERIFIED': defineError({ code: 'INVITE_ACCOUNT_EXISTS_UNVERIFIED', class: 'public', http: 400, message: 'Invite account exists unverified.' }), 'INVITE_ADDRESS_REQUIRED': defineError({ code: 'INVITE_ADDRESS_REQUIRED', class: 'public', http: 400, message: 'Invite address required.' }), 'INVITE_EMAIL_NOT_FOUND': defineError({ code: 'INVITE_EMAIL_NOT_FOUND', class: 'public', http: 404, message: 'Invite email not found.' }), @@ -593,6 +590,7 @@ export const generatedRegistry: Record> = { 'OWNER_FIELD_NOT_FOUND': defineError({ code: 'OWNER_FIELD_NOT_FOUND', class: 'public', http: 404, message: 'Owner field not found.' }), 'OWNER_FIELD_NOT_IN_OWNER_TABLE': defineError({ code: 'OWNER_FIELD_NOT_IN_OWNER_TABLE', class: 'public', http: 400, message: 'Owner field not in owner table.' }), 'PAGES_MODULE': defineError({ code: 'PAGES_MODULE', class: 'internal', http: 500, message: 'Pages module.' }), + 'PARENT_CURSOR_NOT_ADVANCED': defineError({ code: 'PARENT_CURSOR_NOT_ADVANCED', class: 'public', http: 400, message: 'Parent cursor not advanced.' }), 'PARENT_ENTITY_TYPE_NOT_FOUND': defineError({ code: 'PARENT_ENTITY_TYPE_NOT_FOUND', class: 'public', http: 404, message: 'Parent entity type not found.' }), 'PARENT_EXECUTION_NOT_FOUND': defineError({ code: 'PARENT_EXECUTION_NOT_FOUND', class: 'internal', http: 500, message: 'Parent execution not found.' }), 'PASSWORD_INSECURE': defineError({ code: 'PASSWORD_INSECURE', class: 'public', http: 400, message: 'Password insecure.' }), @@ -678,6 +676,9 @@ export const generatedRegistry: Record> = { 'ROUTING_API_TABLES_SCOPE_REQUIRED': defineError({ code: 'ROUTING_API_TABLES_SCOPE_REQUIRED', class: 'public', http: 400, message: 'Routing api tables scope required.' }), 'ROUTING_SURFACE_NOT_PROVISIONED': defineError({ code: 'ROUTING_SURFACE_NOT_PROVISIONED', class: 'public', http: 400, message: 'Routing surface not provisioned.' }), 'ROW_LOCKED': defineError({ code: 'ROW_LOCKED', class: 'public', http: 423, message: 'Row locked.' }), + 'SCHEDULE_FANOUT_LANE_INVALID': defineError({ code: 'SCHEDULE_FANOUT_LANE_INVALID', class: 'internal', http: 500, message: 'Schedule fanout lane invalid.' }), + 'SCHEDULE_FANOUT_TASK_NOT_ALLOWED': defineError({ code: 'SCHEDULE_FANOUT_TASK_NOT_ALLOWED', class: 'internal', http: 500, message: 'Schedule fanout task not allowed.' }), + 'SCHEDULE_FANOUT_TENANTS_PER_LANE_INVALID': defineError({ code: 'SCHEDULE_FANOUT_TENANTS_PER_LANE_INVALID', class: 'internal', http: 500, message: 'Schedule fanout tenants per lane invalid.' }), 'SCOPE_TYPE_BACKFILL': defineError({ code: 'SCOPE_TYPE_BACKFILL', class: 'internal', http: 500, message: 'SCOPE_TYPE_BACKFILL: the membership types table must be resolved before generating a statement' }), 'SCOPE_TYPE_SYNC': defineError({ code: 'SCOPE_TYPE_SYNC', class: 'internal', http: 500, message: 'SCOPE_TYPE_SYNC: the scope type projection must be resolved before generating a body' }), 'SEARCH_BM25': defineError({ code: 'SEARCH_BM25', class: 'public', http: 400, message: 'Search bm25.' }), @@ -759,7 +760,6 @@ export const generatedRegistry: Record> = { 'SSO_STATE_TTL_INVALID': defineError({ code: 'SSO_STATE_TTL_INVALID', class: 'internal', http: 500, message: 'Sso state ttl invalid.' }), 'STATIC_SITES_LIMIT': defineError({ code: 'STATIC_SITES_LIMIT', class: 'public', http: 429, message: 'Static sites limit.' }), 'STEP_UP_INVALID_TYPE': defineError({ code: 'STEP_UP_INVALID_TYPE', class: 'public', http: 403, message: 'This action requires verification that is not configured correctly. Please contact support.' }), - 'STEP_UP_REQUIRED': defineError({ code: 'STEP_UP_REQUIRED', class: 'public', http: 403, message: 'Step up required.' }), 'STEP_UP_REQUIRED_FRESH_AUTH': defineError({ code: 'STEP_UP_REQUIRED_FRESH_AUTH', class: 'public', http: 403, message: 'Please verify your identity to continue.' }), 'STEP_UP_REQUIRED_MFA': defineError({ code: 'STEP_UP_REQUIRED_MFA', class: 'public', http: 403, message: 'Please enter a code from your authenticator app to continue.' }), 'STEP_UP_REQUIRED_PASSWORD': defineError({ code: 'STEP_UP_REQUIRED_PASSWORD', class: 'public', http: 403, message: 'Please re-enter your password to continue.' }), @@ -777,8 +777,6 @@ export const generatedRegistry: Record> = { 'STORAGE_GC_REF_CROSS_DATABASE': defineError({ code: 'STORAGE_GC_REF_CROSS_DATABASE', class: 'internal', http: 500, message: 'Storage gc ref cross database.' }), 'STORAGE_GC_REF_FIELD_MISSING': defineError({ code: 'STORAGE_GC_REF_FIELD_MISSING', class: 'internal', http: 500, message: 'Storage gc ref field missing.' }), 'STORAGE_GC_REF_TABLE_MISSING': defineError({ code: 'STORAGE_GC_REF_TABLE_MISSING', class: 'internal', http: 500, message: 'Storage gc ref table missing.' }), - 'STORAGE_MODULE_ENTITY_FIELD_INVALID': defineError({ code: 'STORAGE_MODULE_ENTITY_FIELD_INVALID', class: 'internal', http: 500, message: 'Storage module entity field invalid.' }), - 'STORAGE_MODULE_NOT_FOUND': defineError({ code: 'STORAGE_MODULE_NOT_FOUND', class: 'internal', http: 500, message: 'Storage module not found.' }), 'STORAGE_PROMOTION_DESTINATION_MISMATCH': defineError({ code: 'STORAGE_PROMOTION_DESTINATION_MISMATCH', class: 'internal', http: 500, message: 'Storage promotion destination mismatch.' }), 'STORAGE_PROMOTION_VISIBILITY_MISMATCH': defineError({ code: 'STORAGE_PROMOTION_VISIBILITY_MISMATCH', class: 'internal', http: 500, message: 'Storage promotion visibility mismatch.' }), 'STORAGE_STAGING_BUCKET_NO_DESTINATION': defineError({ code: 'STORAGE_STAGING_BUCKET_NO_DESTINATION', class: 'internal', http: 500, message: 'Storage staging bucket no destination.' }), @@ -850,9 +848,7 @@ export const GENERATED_CODE_META: Record = { 'ACCOUNT_EXISTS': { class: 'public', dynamic: false, generatedOnly: false }, 'ACCOUNT_LOCKED_EXCEED_ATTEMPTS': { class: 'public', dynamic: false, generatedOnly: false }, 'ACCOUNT_NOT_FOUND': { class: 'public', dynamic: false, generatedOnly: false }, - 'ACTOR_CLAIM_REQUIRED': { class: 'internal', dynamic: false, generatedOnly: true }, 'ALREADY_AUTHENTICATED_USE_LINK': { class: 'public', dynamic: false, generatedOnly: false }, - 'ALREADY_SCHEDULED': { class: 'public', dynamic: false, generatedOnly: true }, 'ALTER_TABLE_ADD_COLUMN': { class: 'internal', dynamic: true, generatedOnly: false }, 'API_KEYS_DISABLED': { class: 'public', dynamic: false, generatedOnly: true }, 'API_KEY_LIMIT_REACHED': { class: 'public', dynamic: false, generatedOnly: false }, @@ -869,7 +865,6 @@ export const GENERATED_CODE_META: Record = { 'AST_OPTIONS_NOT_OBJECT': { class: 'internal', dynamic: false, generatedOnly: false }, 'AST_OPTION_REQUIRED': { class: 'internal', dynamic: false, generatedOnly: false }, 'AST_OPTION_UNKNOWN': { class: 'internal', dynamic: false, generatedOnly: false }, - 'ATTRIBUTION_REQUIRED': { class: 'internal', dynamic: false, generatedOnly: true }, 'AUTHZ_COLUMN_SECURITY_AUTHZ_NODE_REQUIRED': { class: 'public', dynamic: false, generatedOnly: false }, 'AUTHZ_COLUMN_SECURITY_COLUMNS_REQUIRED': { class: 'public', dynamic: false, generatedOnly: false }, 'AUTHZ_COLUMN_SECURITY_COLUMN_NOT_FOUND': { class: 'public', dynamic: false, generatedOnly: false }, @@ -905,6 +900,7 @@ export const GENERATED_CODE_META: Record = { 'BAD_RLS_EXPRESSION': { class: 'public', dynamic: false, generatedOnly: false }, 'BAD_VIEW_EXPRESSION': { class: 'public', dynamic: false, generatedOnly: false }, 'BEHAVIOR_FRAGMENT_EMPTY': { class: 'internal', dynamic: false, generatedOnly: false }, + 'BILLING_CHECKOUT_BINDING_INVALID': { class: 'internal', dynamic: false, generatedOnly: true }, 'BILLING_DISPUTE_BALANCE_NOT_FOUND': { class: 'internal', dynamic: false, generatedOnly: false }, 'BILLING_ENTITY_BUSY': { class: 'public', dynamic: false, generatedOnly: true }, 'BILLING_HEALTH_INVALID': { class: 'internal', dynamic: false, generatedOnly: true }, @@ -915,14 +911,17 @@ export const GENERATED_CODE_META: Record = { 'BILLING_OPERATION_NOT_FOUND': { class: 'internal', dynamic: false, generatedOnly: true }, 'BILLING_OPERATION_SETTLED': { class: 'internal', dynamic: false, generatedOnly: true }, 'BILLING_OPERATION_STATE_INVALID': { class: 'internal', dynamic: false, generatedOnly: true }, + 'BILLING_QUOTA_EXCEEDED': { class: 'public', dynamic: false, generatedOnly: false }, 'BILLING_RECONCILE_BOUNDS_REQUIRED': { class: 'internal', dynamic: false, generatedOnly: true }, 'BILLING_SCHEDULED_CHANGE_INVALID': { class: 'internal', dynamic: false, generatedOnly: true }, + 'BILLING_SUBSCRIPTION_ACTIVE': { class: 'public', dynamic: false, generatedOnly: false }, 'BLUEPRINT_MODULE_NOT_INSTALLED': { class: 'public', dynamic: false, generatedOnly: false }, 'BLUEPRINT_MODULE_REF_AMBIGUOUS': { class: 'public', dynamic: false, generatedOnly: false }, 'BLUEPRINT_MODULE_REF_INVALID': { class: 'public', dynamic: false, generatedOnly: false }, 'BLUEPRINT_MODULE_TABLE_UNKNOWN': { class: 'public', dynamic: false, generatedOnly: false }, 'BM25': { class: 'public', dynamic: false, generatedOnly: false }, 'BOOTSTRAP_DATABASE_MISSING': { class: 'internal', dynamic: false, generatedOnly: false }, + 'BOOTSTRAP_OWNER_NOT_ACTIVE': { class: 'internal', dynamic: false, generatedOnly: false }, 'BOOTSTRAP_SOURCE_MISSING': { class: 'internal', dynamic: false, generatedOnly: false }, 'BOOTSTRAP_TARGET_NOT_EMPTY': { class: 'internal', dynamic: false, generatedOnly: false }, 'BUILD_CONDITION_EXPR': { class: 'internal', dynamic: false, generatedOnly: false }, @@ -968,6 +967,7 @@ export const GENERATED_CODE_META: Record = { 'CONSTRUCT_BLUEPRINT_PROVISIONS_WITHOUT_MODULE': { class: 'public', dynamic: false, generatedOnly: false }, 'CONSTRUCT_BLUEPRINT_SCHEMA_NOT_FOUND': { class: 'internal', dynamic: false, generatedOnly: false }, 'CONSTRUCT_BLUEPRINT_STORAGE_ORG_MEMBERSHIP_NOT_FOUND': { class: 'internal', dynamic: false, generatedOnly: false }, + 'CONSTRUCT_BLUEPRINT_TABLES_ORG_MEMBERSHIP_NOT_FOUND': { class: 'internal', dynamic: false, generatedOnly: false }, 'CONST_TYPE_FIELDS_IMMUTABLE': { class: 'public', dynamic: false, generatedOnly: false }, 'CONTENT_PRESET_CATALOG_MISSING': { class: 'internal', dynamic: false, generatedOnly: false }, 'CONTENT_PRESET_EMPTY': { class: 'public', dynamic: false, generatedOnly: false }, @@ -987,7 +987,6 @@ export const GENERATED_CODE_META: Record = { 'CROSS_DATABASE_CHECK': { class: 'public', dynamic: false, generatedOnly: false }, 'CROSS_DATABASE_REF': { class: 'public', dynamic: false, generatedOnly: false }, 'CSRF_TOKEN_REQUIRED': { class: 'public', dynamic: false, generatedOnly: false }, - 'DATABASE_CLAIM_REQUIRED': { class: 'internal', dynamic: false, generatedOnly: true }, 'DATABASE_FIELD_RESERVED_WORD': { class: 'public', dynamic: false, generatedOnly: false }, 'DATABASE_FUNCTION_RESERVED_WORD': { class: 'public', dynamic: false, generatedOnly: false }, 'DATABASE_HOSTNAME_IDENTITY_AMBIGUOUS': { class: 'public', dynamic: false, generatedOnly: false }, @@ -1137,11 +1136,9 @@ export const GENERATED_CODE_META: Record = { 'DOMAIN_VERIFY_BAD_METHOD': { class: 'internal', dynamic: true, generatedOnly: true }, 'DOMAIN_VERIFY_NO_CHALLENGE': { class: 'internal', dynamic: true, generatedOnly: true }, 'EMAIL_NOT_VERIFIED': { class: 'public', dynamic: false, generatedOnly: false }, - 'ENTITY_CLAIM_REQUIRED': { class: 'internal', dynamic: false, generatedOnly: true }, 'ENTITY_ID_REQUIRED': { class: 'public', dynamic: false, generatedOnly: false }, 'ENTITY_NOT_FOUND': { class: 'public', dynamic: false, generatedOnly: false }, 'ENTITY_REQUIRED': { class: 'internal', dynamic: false, generatedOnly: false }, - 'ENTITY_TYPE_CLAIM_REQUIRED': { class: 'internal', dynamic: false, generatedOnly: true }, 'ENTITY_TYPE_MISMATCH': { class: 'public', dynamic: false, generatedOnly: false }, 'ENTITY_TYPE_NOT_FOUND': { class: 'public', dynamic: false, generatedOnly: false }, 'ENTITY_TYPE_PROVISION': { class: 'internal', dynamic: false, generatedOnly: false }, @@ -1184,7 +1181,6 @@ export const GENERATED_CODE_META: Record = { 'FILE_REF_FIELD': { class: 'internal', dynamic: false, generatedOnly: false }, 'FORBIDDEN': { class: 'public', dynamic: false, generatedOnly: false }, 'FOREIGN_KEY_CONSTRAINT_NOT_FOUND': { class: 'internal', dynamic: false, generatedOnly: false }, - 'FREE_PLAN_REQUIRED': { class: 'internal', dynamic: false, generatedOnly: false }, 'FUNCTION_BODY_DEPARSE_EMPTY': { class: 'internal', dynamic: false, generatedOnly: false }, 'FUNCTION_ENVELOPE_VIOLATION': { class: 'internal', dynamic: false, generatedOnly: false }, 'FUNCTION_GRAPH_NOT_FOUND': { class: 'internal', dynamic: false, generatedOnly: false }, @@ -1296,7 +1292,6 @@ export const GENERATED_CODE_META: Record = { 'INVALID_PAYLOAD_REF': { class: 'public', dynamic: false, generatedOnly: false }, 'INVALID_TOKEN': { class: 'public', dynamic: false, generatedOnly: false }, 'INVALID_USER': { class: 'public', dynamic: false, generatedOnly: false }, - 'INVALID_WORKER_ID': { class: 'internal', dynamic: false, generatedOnly: true }, 'INVITE_ACCOUNT_EXISTS_UNVERIFIED': { class: 'public', dynamic: false, generatedOnly: false }, 'INVITE_ADDRESS_REQUIRED': { class: 'public', dynamic: false, generatedOnly: false }, 'INVITE_EMAIL_NOT_FOUND': { class: 'public', dynamic: false, generatedOnly: false }, @@ -1415,6 +1410,7 @@ export const GENERATED_CODE_META: Record = { 'OWNER_FIELD_NOT_FOUND': { class: 'public', dynamic: false, generatedOnly: false }, 'OWNER_FIELD_NOT_IN_OWNER_TABLE': { class: 'public', dynamic: false, generatedOnly: false }, 'PAGES_MODULE': { class: 'internal', dynamic: false, generatedOnly: false }, + 'PARENT_CURSOR_NOT_ADVANCED': { class: 'public', dynamic: false, generatedOnly: false }, 'PARENT_ENTITY_TYPE_NOT_FOUND': { class: 'public', dynamic: false, generatedOnly: false }, 'PARENT_EXECUTION_NOT_FOUND': { class: 'internal', dynamic: false, generatedOnly: false }, 'PASSWORD_INSECURE': { class: 'public', dynamic: false, generatedOnly: false }, @@ -1500,6 +1496,9 @@ export const GENERATED_CODE_META: Record = { 'ROUTING_API_TABLES_SCOPE_REQUIRED': { class: 'public', dynamic: false, generatedOnly: false }, 'ROUTING_SURFACE_NOT_PROVISIONED': { class: 'public', dynamic: false, generatedOnly: false }, 'ROW_LOCKED': { class: 'public', dynamic: false, generatedOnly: false }, + 'SCHEDULE_FANOUT_LANE_INVALID': { class: 'internal', dynamic: false, generatedOnly: false }, + 'SCHEDULE_FANOUT_TASK_NOT_ALLOWED': { class: 'internal', dynamic: false, generatedOnly: false }, + 'SCHEDULE_FANOUT_TENANTS_PER_LANE_INVALID': { class: 'internal', dynamic: false, generatedOnly: false }, 'SCOPE_TYPE_BACKFILL': { class: 'internal', dynamic: false, generatedOnly: false }, 'SCOPE_TYPE_SYNC': { class: 'internal', dynamic: true, generatedOnly: false }, 'SEARCH_BM25': { class: 'public', dynamic: false, generatedOnly: false }, @@ -1581,7 +1580,6 @@ export const GENERATED_CODE_META: Record = { 'SSO_STATE_TTL_INVALID': { class: 'internal', dynamic: false, generatedOnly: false }, 'STATIC_SITES_LIMIT': { class: 'public', dynamic: false, generatedOnly: false }, 'STEP_UP_INVALID_TYPE': { class: 'public', dynamic: false, generatedOnly: false }, - 'STEP_UP_REQUIRED': { class: 'public', dynamic: false, generatedOnly: false }, 'STEP_UP_REQUIRED_FRESH_AUTH': { class: 'public', dynamic: false, generatedOnly: false }, 'STEP_UP_REQUIRED_MFA': { class: 'public', dynamic: false, generatedOnly: false }, 'STEP_UP_REQUIRED_PASSWORD': { class: 'public', dynamic: false, generatedOnly: false }, @@ -1599,8 +1597,6 @@ export const GENERATED_CODE_META: Record = { 'STORAGE_GC_REF_CROSS_DATABASE': { class: 'internal', dynamic: false, generatedOnly: false }, 'STORAGE_GC_REF_FIELD_MISSING': { class: 'internal', dynamic: false, generatedOnly: false }, 'STORAGE_GC_REF_TABLE_MISSING': { class: 'internal', dynamic: false, generatedOnly: false }, - 'STORAGE_MODULE_ENTITY_FIELD_INVALID': { class: 'internal', dynamic: false, generatedOnly: false }, - 'STORAGE_MODULE_NOT_FOUND': { class: 'internal', dynamic: false, generatedOnly: false }, 'STORAGE_PROMOTION_DESTINATION_MISMATCH': { class: 'internal', dynamic: false, generatedOnly: false }, 'STORAGE_PROMOTION_VISIBILITY_MISMATCH': { class: 'internal', dynamic: false, generatedOnly: false }, 'STORAGE_STAGING_BUCKET_NO_DESTINATION': { class: 'internal', dynamic: false, generatedOnly: false }, @@ -1667,4 +1663,4 @@ export const GENERATED_CODE_META: Record = { }; /** Total number of codes collected from constructive-db. */ -export const GENERATED_CODE_COUNT = 818; +export const GENERATED_CODE_COUNT = 816; diff --git a/packages/errors/src/registry.ts b/packages/errors/src/registry.ts index 374e33c88..b6e96b741 100644 --- a/packages/errors/src/registry.ts +++ b/packages/errors/src/registry.ts @@ -386,6 +386,12 @@ export const registry = { message: 'You have reached a plan limit for this resource.', positional: ['resource', 'limit'] }), + BILLING_QUOTA_EXCEEDED: defineError({ + code: 'BILLING_QUOTA_EXCEEDED', + class: 'public', + http: 429, + message: 'You have used up your usage allowance for this resource.' + }), RATE_LIMITED: defineError({ code: 'RATE_LIMITED', class: 'public', @@ -420,6 +426,12 @@ export const registry = { http: 400, message: 'The billing operation request is invalid.' }), + BILLING_SUBSCRIPTION_ACTIVE: defineError<{ entity_id?: string; external_subscription_id?: string }>({ + code: 'BILLING_SUBSCRIPTION_ACTIVE', + class: 'public', + http: 409, + message: 'This account still has an active subscription. Cancel the subscription before deleting the account.' + }), UNKNOWN_METER: defineError<{ meter_slug?: string }>({ code: 'UNKNOWN_METER', class: 'public',