@constructive-io/errors 0.18.0 → 0.20.0

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.
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * GENERATED FILE — DO NOT EDIT BY HAND.
3
3
  *
4
- * Source of truth: the constructive-db error audit (801 distinct codes
4
+ * Source of truth: the constructive-db error audit (824 distinct codes
5
5
  * raised via EXCEPTION/THROW across deploy sources + generated output).
6
6
  * Regenerate with `python3 scripts/generate-registry.py` (see README.md).
7
7
  *
@@ -9,7 +9,7 @@
9
9
  * codes carry their raw message (with %-args rendered as {{argN}}). Curated
10
10
  * entries in `registry.ts` override anything here (typed context + refined copy).
11
11
  *
12
- * Counts: 801 total, 591 public, 210 internal.
12
+ * Counts: 824 total, 604 public, 220 internal.
13
13
  */
14
14
  import { type DefinedError } from '../define';
15
15
  import type { ErrorContext } from '../types';
@@ -24,4 +24,4 @@ export declare const generatedRegistry: Record<string, DefinedError<ErrorContext
24
24
  /** Audit metadata for each generated code. */
25
25
  export declare const GENERATED_CODE_META: Record<string, GeneratedCodeMeta>;
26
26
  /** Total number of codes collected from constructive-db. */
27
- export declare const GENERATED_CODE_COUNT = 801;
27
+ export declare const GENERATED_CODE_COUNT = 824;
@@ -2,7 +2,7 @@
2
2
  /**
3
3
  * GENERATED FILE — DO NOT EDIT BY HAND.
4
4
  *
5
- * Source of truth: the constructive-db error audit (801 distinct codes
5
+ * Source of truth: the constructive-db error audit (824 distinct codes
6
6
  * raised via EXCEPTION/THROW across deploy sources + generated output).
7
7
  * Regenerate with `python3 scripts/generate-registry.py` (see README.md).
8
8
  *
@@ -10,7 +10,7 @@
10
10
  * codes carry their raw message (with %-args rendered as {{argN}}). Curated
11
11
  * entries in `registry.ts` override anything here (typed context + refined copy).
12
12
  *
13
- * Counts: 801 total, 591 public, 210 internal.
13
+ * Counts: 824 total, 604 public, 220 internal.
14
14
  */
15
15
  import { defineError } from '../define';
16
16
  /** Every constructive-db error code, keyed by code. */
@@ -20,6 +20,7 @@ export const generatedRegistry = {
20
20
  'ACCOUNT_LOCKED_EXCEED_ATTEMPTS': defineError({ code: 'ACCOUNT_LOCKED_EXCEED_ATTEMPTS', class: 'public', http: 423, message: 'Account locked exceed attempts.' }),
21
21
  'ACCOUNT_NOT_FOUND': defineError({ code: 'ACCOUNT_NOT_FOUND', class: 'public', http: 404, message: 'Account not found.' }),
22
22
  'ACTOR_CLAIM_REQUIRED': defineError({ code: 'ACTOR_CLAIM_REQUIRED', class: 'internal', http: 500, message: 'Actor claim required.' }),
23
+ 'ALREADY_AUTHENTICATED_USE_LINK': defineError({ code: 'ALREADY_AUTHENTICATED_USE_LINK', class: 'public', http: 409, message: 'Already authenticated use link.' }),
23
24
  'ALREADY_SCHEDULED': defineError({ code: 'ALREADY_SCHEDULED', class: 'public', http: 409, message: 'Already scheduled.' }),
24
25
  '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' }),
25
26
  'API_KEYS_DISABLED': defineError({ code: 'API_KEYS_DISABLED', class: 'public', http: 403, message: 'Api keys disabled.' }),
@@ -34,6 +35,9 @@ export const generatedRegistry = {
34
35
  'APP_INSTALLATION_MISSING': defineError({ code: 'APP_INSTALLATION_MISSING', class: 'public', http: 400, message: 'App installation missing.' }),
35
36
  'APP_INSTALL_NO_SERVICE': defineError({ code: 'APP_INSTALL_NO_SERVICE', class: 'public', http: 400, message: 'App install no service.' }),
36
37
  'ASSIGN_PROFILES_CAPABILITY_REQUIRED': defineError({ code: 'ASSIGN_PROFILES_CAPABILITY_REQUIRED', class: 'internal', http: 500, message: 'Assign profiles capability required.' }),
38
+ 'AST_OPTIONS_NOT_OBJECT': defineError({ code: 'AST_OPTIONS_NOT_OBJECT', class: 'internal', http: 500, message: 'Ast options not object.' }),
39
+ 'AST_OPTION_REQUIRED': defineError({ code: 'AST_OPTION_REQUIRED', class: 'internal', http: 500, message: 'Ast option required.' }),
40
+ 'AST_OPTION_UNKNOWN': defineError({ code: 'AST_OPTION_UNKNOWN', class: 'internal', http: 500, message: 'Ast option unknown.' }),
37
41
  'ATTRIBUTION_REQUIRED': defineError({ code: 'ATTRIBUTION_REQUIRED', class: 'internal', http: 500, message: 'Attribution required.' }),
38
42
  '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.' }),
39
43
  'AUTHZ_COLUMN_SECURITY_COLUMNS_REQUIRED': defineError({ code: 'AUTHZ_COLUMN_SECURITY_COLUMNS_REQUIRED', class: 'public', http: 400, message: 'Authz column security columns required.' }),
@@ -71,6 +75,17 @@ export const generatedRegistry = {
71
75
  'BAD_VIEW_EXPRESSION': defineError({ code: 'BAD_VIEW_EXPRESSION', class: 'public', http: 400, message: 'Bad view expression.' }),
72
76
  'BEHAVIOR_FRAGMENT_EMPTY': defineError({ code: 'BEHAVIOR_FRAGMENT_EMPTY', class: 'internal', http: 500, message: 'Behavior fragment empty.' }),
73
77
  'BILLING_DISPUTE_BALANCE_NOT_FOUND': defineError({ code: 'BILLING_DISPUTE_BALANCE_NOT_FOUND', class: 'internal', http: 500, message: 'Billing dispute balance not found.' }),
78
+ 'BILLING_ENTITY_BUSY': defineError({ code: 'BILLING_ENTITY_BUSY', class: 'public', http: 400, message: 'Billing entity busy.' }),
79
+ 'BILLING_HEALTH_INVALID': defineError({ code: 'BILLING_HEALTH_INVALID', class: 'internal', http: 500, message: 'Billing health invalid.' }),
80
+ 'BILLING_NOT_READY': defineError({ code: 'BILLING_NOT_READY', class: 'public', http: 400, message: 'Billing not ready.' }),
81
+ 'BILLING_OBSERVATION_INVALID': defineError({ code: 'BILLING_OBSERVATION_INVALID', class: 'internal', http: 500, message: 'Billing observation invalid.' }),
82
+ 'BILLING_OPERATION_CONFLICT': defineError({ code: 'BILLING_OPERATION_CONFLICT', class: 'public', http: 400, message: 'Billing operation conflict.' }),
83
+ 'BILLING_OPERATION_INVALID': defineError({ code: 'BILLING_OPERATION_INVALID', class: 'public', http: 400, message: 'Billing operation invalid.' }),
84
+ 'BILLING_OPERATION_NOT_FOUND': defineError({ code: 'BILLING_OPERATION_NOT_FOUND', class: 'internal', http: 500, message: 'Billing operation not found.' }),
85
+ 'BILLING_OPERATION_SETTLED': defineError({ code: 'BILLING_OPERATION_SETTLED', class: 'internal', http: 500, message: 'Billing operation settled.' }),
86
+ 'BILLING_OPERATION_STATE_INVALID': defineError({ code: 'BILLING_OPERATION_STATE_INVALID', class: 'internal', http: 500, message: 'Billing operation state invalid.' }),
87
+ 'BILLING_RECONCILE_BOUNDS_REQUIRED': defineError({ code: 'BILLING_RECONCILE_BOUNDS_REQUIRED', class: 'internal', http: 500, message: 'Billing reconcile bounds required.' }),
88
+ 'BILLING_SCHEDULED_CHANGE_INVALID': defineError({ code: 'BILLING_SCHEDULED_CHANGE_INVALID', class: 'internal', http: 500, message: 'Billing scheduled change invalid.' }),
74
89
  'BLUEPRINT_MODULE_NOT_INSTALLED': defineError({ code: 'BLUEPRINT_MODULE_NOT_INSTALLED', class: 'public', http: 400, message: 'Blueprint module not installed.' }),
75
90
  'BLUEPRINT_MODULE_REF_AMBIGUOUS': defineError({ code: 'BLUEPRINT_MODULE_REF_AMBIGUOUS', class: 'public', http: 400, message: 'Blueprint module ref ambiguous.' }),
76
91
  'BLUEPRINT_MODULE_REF_INVALID': defineError({ code: 'BLUEPRINT_MODULE_REF_INVALID', class: 'public', http: 400, message: 'Blueprint module ref invalid.' }),
@@ -362,7 +377,7 @@ export const generatedRegistry = {
362
377
  'GRAPH_TREE_NOT_FOUND': defineError({ code: 'GRAPH_TREE_NOT_FOUND', class: 'internal', http: 500, message: 'Graph tree not found.' }),
363
378
  'GRAPH_VALIDATION_FAILED': defineError({ code: 'GRAPH_VALIDATION_FAILED', class: 'internal', http: 500, message: 'GRAPH_VALIDATION_FAILED: graph {{arg0}} failed pre-execution validation: {{arg1}}', positional: ['arg0', 'arg1'] }),
364
379
  'GROUPS_REQ_ENTITIES': defineError({ code: 'GROUPS_REQ_ENTITIES', class: 'public', http: 400, message: 'Groups req entities.' }),
365
- 'GUARD_STEP_UP': defineError({ code: 'GUARD_STEP_UP', class: 'internal', http: 500, message: 'GUARD_STEP_UP: unknown event {{arg0}}, expected INSERT, UPDATE, or DELETE', positional: ['arg0'] }),
380
+ 'GUARD_STEP_UP': defineError({ code: 'GUARD_STEP_UP', class: 'internal', http: 500, message: 'GUARD_STEP_UP: min_age anchor takes fk_col or anchor_conditions, not both' }),
366
381
  'GUARD_STEP_UP_CONDITIONS_CONDITION_FIELD_CONFLICT': defineError({ code: 'GUARD_STEP_UP_CONDITIONS_CONDITION_FIELD_CONFLICT', class: 'public', http: 403, message: 'Guard step up conditions condition field conflict.' }),
367
382
  'GUARD_STEP_UP_CONDITIONS_WATCH_FIELDS_CONFLICT': defineError({ code: 'GUARD_STEP_UP_CONDITIONS_WATCH_FIELDS_CONFLICT', class: 'public', http: 403, message: 'Guard step up conditions watch fields conflict.' }),
368
383
  'GUARD_STEP_UP_CONDITION_FIELD_NOT_FOUND': defineError({ code: 'GUARD_STEP_UP_CONDITION_FIELD_NOT_FOUND', class: 'public', http: 404, message: 'Guard step up condition field not found.' }),
@@ -410,6 +425,10 @@ export const generatedRegistry = {
410
425
  'HISTORY': defineError({ code: 'HISTORY', class: 'internal', http: 500, message: 'HISTORY: history {{arg0}}.{{arg1}} registration has no copy_fields', positional: ['arg0', 'arg1'] }),
411
426
  'HOSTNAME_BINDING_SYNC': defineError({ code: 'HOSTNAME_BINDING_SYNC', class: 'internal', http: 500, message: 'HOSTNAME_BINDING_SYNC: unknown event {{arg0}}, expected UPSERT or DELETE', positional: ['arg0'] }),
412
427
  'HOSTNAME_CLAIMED_IN_OTHER_PLANE': defineError({ code: 'HOSTNAME_CLAIMED_IN_OTHER_PLANE', class: 'public', http: 400, message: 'Hostname claimed in other plane.' }),
428
+ 'IDENTIFIER_CLAIM_LIMIT': defineError({ code: 'IDENTIFIER_CLAIM_LIMIT', class: 'public', http: 429, message: 'Identifier claim limit.' }),
429
+ 'IDENTIFIER_CONFLICT': defineError({ code: 'IDENTIFIER_CONFLICT', class: 'public', http: 400, message: 'Identifier conflict.' }),
430
+ 'IDENTIFIER_UNVERIFIED_AMBIGUOUS': defineError({ code: 'IDENTIFIER_UNVERIFIED_AMBIGUOUS', class: 'public', http: 400, message: 'Identifier unverified ambiguous.' }),
431
+ 'IDENTIFIER_VERIFIED_ELSEWHERE': defineError({ code: 'IDENTIFIER_VERIFIED_ELSEWHERE', class: 'public', http: 400, message: 'Identifier verified elsewhere.' }),
413
432
  'IDENTITY_ACCOUNT_NOT_FOUND': defineError({ code: 'IDENTITY_ACCOUNT_NOT_FOUND', class: 'public', http: 404, message: 'Identity account not found.' }),
414
433
  'IDENTITY_ALREADY_LINKED': defineError({ code: 'IDENTITY_ALREADY_LINKED', class: 'public', http: 409, message: 'Identity already linked.' }),
415
434
  'IDENTITY_LINK_AVAILABLE': defineError({ code: 'IDENTITY_LINK_AVAILABLE', class: 'public', http: 400, message: 'Identity link available.' }),
@@ -447,6 +466,7 @@ export const generatedRegistry = {
447
466
  'INVALID_TOKEN': defineError({ code: 'INVALID_TOKEN', class: 'public', http: 401, message: 'Invalid token.' }),
448
467
  'INVALID_USER': defineError({ code: 'INVALID_USER', class: 'public', http: 400, message: 'Invalid user.' }),
449
468
  'INVALID_WORKER_ID': defineError({ code: 'INVALID_WORKER_ID', class: 'internal', http: 500, message: 'Invalid worker id.' }),
469
+ 'INVITE_ACCOUNT_EXISTS_UNVERIFIED': defineError({ code: 'INVITE_ACCOUNT_EXISTS_UNVERIFIED', class: 'public', http: 400, message: 'Invite account exists unverified.' }),
450
470
  'INVITE_ADDRESS_REQUIRED': defineError({ code: 'INVITE_ADDRESS_REQUIRED', class: 'public', http: 400, message: 'Invite address required.' }),
451
471
  'INVITE_EMAIL_NOT_FOUND': defineError({ code: 'INVITE_EMAIL_NOT_FOUND', class: 'public', http: 404, message: 'Invite email not found.' }),
452
472
  'INVITE_LIMIT': defineError({ code: 'INVITE_LIMIT', class: 'public', http: 429, message: 'Invite limit.' }),
@@ -535,6 +555,7 @@ export const generatedRegistry = {
535
555
  'MERKLE_REF_NOT_FOUND': defineError({ code: 'MERKLE_REF_NOT_FOUND', class: 'public', http: 404, message: 'Merkle ref not found.' }),
536
556
  'METER_RATE_LIMIT': defineError({ code: 'METER_RATE_LIMIT', class: 'internal', http: 500, message: 'METER_RATE_LIMIT: unknown event {{arg0}}, expected INSERT or UPDATE', positional: ['arg0'] }),
537
557
  'MFA_CHALLENGE_EXPIRED': defineError({ code: 'MFA_CHALLENGE_EXPIRED', class: 'public', http: 403, message: 'Mfa challenge expired.' }),
558
+ 'MFA_IDENTIFIER_UNVERIFIED': defineError({ code: 'MFA_IDENTIFIER_UNVERIFIED', class: 'public', http: 403, message: 'Mfa identifier unverified.' }),
538
559
  'MFA_REQUIRED': defineError({ code: 'MFA_REQUIRED', class: 'public', http: 403, message: 'Mfa required.' }),
539
560
  'MISSING_FIXTURE_TYPE': defineError({ code: 'MISSING_FIXTURE_TYPE', class: 'internal', http: 500, message: 'Missing fixture type.' }),
540
561
  'MISSING_REQUIRED_FIELD': defineError({ code: 'MISSING_REQUIRED_FIELD', class: 'public', http: 400, message: 'Missing required field.' }),
@@ -714,6 +735,7 @@ export const generatedRegistry = {
714
735
  'SITE_SURFACE_NOT_PROVISIONED': defineError({ code: 'SITE_SURFACE_NOT_PROVISIONED', class: 'public', http: 400, message: 'Site surface not provisioned.' }),
715
736
  'SMS_SIGN_IN_DISABLED': defineError({ code: 'SMS_SIGN_IN_DISABLED', class: 'public', http: 403, message: 'Sms sign in disabled.' }),
716
737
  'SMS_SIGN_UP_DISABLED': defineError({ code: 'SMS_SIGN_UP_DISABLED', class: 'public', http: 403, message: 'Sms sign up disabled.' }),
738
+ 'SMS_VERIFICATION_DISABLED': defineError({ code: 'SMS_VERIFICATION_DISABLED', class: 'public', http: 403, message: 'Sms verification disabled.' }),
717
739
  'SOURCE_COMMIT_NOT_FOUND': defineError({ code: 'SOURCE_COMMIT_NOT_FOUND', class: 'internal', http: 500, message: 'Source commit not found.' }),
718
740
  'SOURCE_EMAILS_NOT_FOUND': defineError({ code: 'SOURCE_EMAILS_NOT_FOUND', class: 'internal', http: 500, message: 'Source emails not found.' }),
719
741
  'SOURCE_SECRETS_NOT_FOUND': defineError({ code: 'SOURCE_SECRETS_NOT_FOUND', class: 'internal', http: 500, message: 'Source secrets not found.' }),
@@ -791,6 +813,7 @@ export const generatedRegistry = {
791
813
  'TRIGGER_WHEN_AST_ROW_UNAVAILABLE': defineError({ code: 'TRIGGER_WHEN_AST_ROW_UNAVAILABLE', class: 'public', http: 400, message: 'Trigger when ast row unavailable.' }),
792
814
  'TRUST_LADDER_OPTION_INVALID': defineError({ code: 'TRUST_LADDER_OPTION_INVALID', class: 'internal', http: 500, message: 'Trust ladder option invalid.' }),
793
815
  'UNAUTHENTICATED': defineError({ code: 'UNAUTHENTICATED', class: 'public', http: 401, message: 'Unauthenticated.' }),
816
+ 'UNKNOWN_METER': defineError({ code: 'UNKNOWN_METER', class: 'public', http: 400, message: 'Unknown meter.' }),
794
817
  'UNKNOWN_POLICY_TYPE': defineError({ code: 'UNKNOWN_POLICY_TYPE', class: 'public', http: 400, message: 'Unknown policy type.' }),
795
818
  'UNKNOWN_VIEW_TYPE': defineError({ code: 'UNKNOWN_VIEW_TYPE', class: 'public', http: 400, message: 'Unknown view type.', positional: ['arg0'] }),
796
819
  'UNSUPPORTED': defineError({ code: 'UNSUPPORTED', class: 'internal', http: 500, message: 'UNSUPPORTED POLICY ({{arg0}})', positional: ['arg0'] }),
@@ -824,6 +847,7 @@ export const GENERATED_CODE_META = {
824
847
  'ACCOUNT_LOCKED_EXCEED_ATTEMPTS': { class: 'public', dynamic: false, generatedOnly: false },
825
848
  'ACCOUNT_NOT_FOUND': { class: 'public', dynamic: false, generatedOnly: false },
826
849
  'ACTOR_CLAIM_REQUIRED': { class: 'internal', dynamic: false, generatedOnly: true },
850
+ 'ALREADY_AUTHENTICATED_USE_LINK': { class: 'public', dynamic: false, generatedOnly: false },
827
851
  'ALREADY_SCHEDULED': { class: 'public', dynamic: false, generatedOnly: true },
828
852
  'ALTER_TABLE_ADD_COLUMN': { class: 'internal', dynamic: true, generatedOnly: false },
829
853
  'API_KEYS_DISABLED': { class: 'public', dynamic: false, generatedOnly: true },
@@ -838,6 +862,9 @@ export const GENERATED_CODE_META = {
838
862
  'APP_INSTALLATION_MISSING': { class: 'public', dynamic: false, generatedOnly: false },
839
863
  'APP_INSTALL_NO_SERVICE': { class: 'public', dynamic: false, generatedOnly: false },
840
864
  'ASSIGN_PROFILES_CAPABILITY_REQUIRED': { class: 'internal', dynamic: false, generatedOnly: false },
865
+ 'AST_OPTIONS_NOT_OBJECT': { class: 'internal', dynamic: false, generatedOnly: false },
866
+ 'AST_OPTION_REQUIRED': { class: 'internal', dynamic: false, generatedOnly: false },
867
+ 'AST_OPTION_UNKNOWN': { class: 'internal', dynamic: false, generatedOnly: false },
841
868
  'ATTRIBUTION_REQUIRED': { class: 'internal', dynamic: false, generatedOnly: true },
842
869
  'AUTHZ_COLUMN_SECURITY_AUTHZ_NODE_REQUIRED': { class: 'public', dynamic: false, generatedOnly: false },
843
870
  'AUTHZ_COLUMN_SECURITY_COLUMNS_REQUIRED': { class: 'public', dynamic: false, generatedOnly: false },
@@ -875,6 +902,17 @@ export const GENERATED_CODE_META = {
875
902
  'BAD_VIEW_EXPRESSION': { class: 'public', dynamic: false, generatedOnly: false },
876
903
  'BEHAVIOR_FRAGMENT_EMPTY': { class: 'internal', dynamic: false, generatedOnly: false },
877
904
  'BILLING_DISPUTE_BALANCE_NOT_FOUND': { class: 'internal', dynamic: false, generatedOnly: false },
905
+ 'BILLING_ENTITY_BUSY': { class: 'public', dynamic: false, generatedOnly: true },
906
+ 'BILLING_HEALTH_INVALID': { class: 'internal', dynamic: false, generatedOnly: true },
907
+ 'BILLING_NOT_READY': { class: 'public', dynamic: false, generatedOnly: false },
908
+ 'BILLING_OBSERVATION_INVALID': { class: 'internal', dynamic: false, generatedOnly: true },
909
+ 'BILLING_OPERATION_CONFLICT': { class: 'public', dynamic: false, generatedOnly: true },
910
+ 'BILLING_OPERATION_INVALID': { class: 'public', dynamic: false, generatedOnly: true },
911
+ 'BILLING_OPERATION_NOT_FOUND': { class: 'internal', dynamic: false, generatedOnly: true },
912
+ 'BILLING_OPERATION_SETTLED': { class: 'internal', dynamic: false, generatedOnly: true },
913
+ 'BILLING_OPERATION_STATE_INVALID': { class: 'internal', dynamic: false, generatedOnly: true },
914
+ 'BILLING_RECONCILE_BOUNDS_REQUIRED': { class: 'internal', dynamic: false, generatedOnly: true },
915
+ 'BILLING_SCHEDULED_CHANGE_INVALID': { class: 'internal', dynamic: false, generatedOnly: true },
878
916
  'BLUEPRINT_MODULE_NOT_INSTALLED': { class: 'public', dynamic: false, generatedOnly: false },
879
917
  'BLUEPRINT_MODULE_REF_AMBIGUOUS': { class: 'public', dynamic: false, generatedOnly: false },
880
918
  'BLUEPRINT_MODULE_REF_INVALID': { class: 'public', dynamic: false, generatedOnly: false },
@@ -1214,6 +1252,10 @@ export const GENERATED_CODE_META = {
1214
1252
  'HISTORY': { class: 'internal', dynamic: true, generatedOnly: false },
1215
1253
  'HOSTNAME_BINDING_SYNC': { class: 'internal', dynamic: true, generatedOnly: false },
1216
1254
  'HOSTNAME_CLAIMED_IN_OTHER_PLANE': { class: 'public', dynamic: false, generatedOnly: true },
1255
+ 'IDENTIFIER_CLAIM_LIMIT': { class: 'public', dynamic: false, generatedOnly: false },
1256
+ 'IDENTIFIER_CONFLICT': { class: 'public', dynamic: false, generatedOnly: false },
1257
+ 'IDENTIFIER_UNVERIFIED_AMBIGUOUS': { class: 'public', dynamic: false, generatedOnly: false },
1258
+ 'IDENTIFIER_VERIFIED_ELSEWHERE': { class: 'public', dynamic: false, generatedOnly: false },
1217
1259
  'IDENTITY_ACCOUNT_NOT_FOUND': { class: 'public', dynamic: false, generatedOnly: false },
1218
1260
  'IDENTITY_ALREADY_LINKED': { class: 'public', dynamic: false, generatedOnly: false },
1219
1261
  'IDENTITY_LINK_AVAILABLE': { class: 'public', dynamic: false, generatedOnly: false },
@@ -1251,6 +1293,7 @@ export const GENERATED_CODE_META = {
1251
1293
  'INVALID_TOKEN': { class: 'public', dynamic: false, generatedOnly: false },
1252
1294
  'INVALID_USER': { class: 'public', dynamic: false, generatedOnly: false },
1253
1295
  'INVALID_WORKER_ID': { class: 'internal', dynamic: false, generatedOnly: true },
1296
+ 'INVITE_ACCOUNT_EXISTS_UNVERIFIED': { class: 'public', dynamic: false, generatedOnly: false },
1254
1297
  'INVITE_ADDRESS_REQUIRED': { class: 'public', dynamic: false, generatedOnly: false },
1255
1298
  'INVITE_EMAIL_NOT_FOUND': { class: 'public', dynamic: false, generatedOnly: false },
1256
1299
  'INVITE_LIMIT': { class: 'public', dynamic: false, generatedOnly: false },
@@ -1339,6 +1382,7 @@ export const GENERATED_CODE_META = {
1339
1382
  'MERKLE_REF_NOT_FOUND': { class: 'public', dynamic: false, generatedOnly: false },
1340
1383
  'METER_RATE_LIMIT': { class: 'internal', dynamic: true, generatedOnly: false },
1341
1384
  'MFA_CHALLENGE_EXPIRED': { class: 'public', dynamic: false, generatedOnly: false },
1385
+ 'MFA_IDENTIFIER_UNVERIFIED': { class: 'public', dynamic: false, generatedOnly: false },
1342
1386
  'MFA_REQUIRED': { class: 'public', dynamic: false, generatedOnly: false },
1343
1387
  'MISSING_FIXTURE_TYPE': { class: 'internal', dynamic: false, generatedOnly: false },
1344
1388
  'MISSING_REQUIRED_FIELD': { class: 'public', dynamic: false, generatedOnly: false },
@@ -1518,6 +1562,7 @@ export const GENERATED_CODE_META = {
1518
1562
  'SITE_SURFACE_NOT_PROVISIONED': { class: 'public', dynamic: false, generatedOnly: false },
1519
1563
  'SMS_SIGN_IN_DISABLED': { class: 'public', dynamic: false, generatedOnly: true },
1520
1564
  'SMS_SIGN_UP_DISABLED': { class: 'public', dynamic: false, generatedOnly: true },
1565
+ 'SMS_VERIFICATION_DISABLED': { class: 'public', dynamic: false, generatedOnly: false },
1521
1566
  'SOURCE_COMMIT_NOT_FOUND': { class: 'internal', dynamic: false, generatedOnly: false },
1522
1567
  'SOURCE_EMAILS_NOT_FOUND': { class: 'internal', dynamic: false, generatedOnly: false },
1523
1568
  'SOURCE_SECRETS_NOT_FOUND': { class: 'internal', dynamic: false, generatedOnly: false },
@@ -1595,6 +1640,7 @@ export const GENERATED_CODE_META = {
1595
1640
  'TRIGGER_WHEN_AST_ROW_UNAVAILABLE': { class: 'public', dynamic: false, generatedOnly: false },
1596
1641
  'TRUST_LADDER_OPTION_INVALID': { class: 'internal', dynamic: false, generatedOnly: false },
1597
1642
  'UNAUTHENTICATED': { class: 'public', dynamic: false, generatedOnly: false },
1643
+ 'UNKNOWN_METER': { class: 'public', dynamic: false, generatedOnly: true },
1598
1644
  'UNKNOWN_POLICY_TYPE': { class: 'public', dynamic: false, generatedOnly: false },
1599
1645
  'UNKNOWN_VIEW_TYPE': { class: 'public', dynamic: true, generatedOnly: false },
1600
1646
  'UNSUPPORTED': { class: 'internal', dynamic: true, generatedOnly: false },
@@ -1622,4 +1668,4 @@ export const GENERATED_CODE_META = {
1622
1668
  'WITH_CHECK_NOT_ALLOWED': { class: 'public', dynamic: false, generatedOnly: false },
1623
1669
  };
1624
1670
  /** Total number of codes collected from constructive-db. */
1625
- export const GENERATED_CODE_COUNT = 801;
1671
+ export const GENERATED_CODE_COUNT = 824;
package/esm/registry.d.ts CHANGED
@@ -47,6 +47,15 @@ export declare const registry: {
47
47
  reason?: string;
48
48
  }>;
49
49
  readonly ACCOUNT_EXISTS: import("./define").DefinedError<import("./types").EmptyContext>;
50
+ readonly ALREADY_AUTHENTICATED_USE_LINK: import("./define").DefinedError<import("./types").EmptyContext>;
51
+ readonly IDENTIFIER_CONFLICT: import("./define").DefinedError<import("./types").EmptyContext>;
52
+ readonly IDENTIFIER_VERIFIED_ELSEWHERE: import("./define").DefinedError<import("./types").EmptyContext>;
53
+ readonly IDENTIFIER_UNVERIFIED_AMBIGUOUS: import("./define").DefinedError<import("./types").EmptyContext>;
54
+ readonly IDENTIFIER_CLAIM_LIMIT: import("./define").DefinedError<{
55
+ limit?: number;
56
+ }>;
57
+ readonly MFA_IDENTIFIER_UNVERIFIED: import("./define").DefinedError<import("./types").EmptyContext>;
58
+ readonly SMS_VERIFICATION_DISABLED: import("./define").DefinedError<import("./types").EmptyContext>;
50
59
  readonly ACCOUNT_NOT_FOUND: import("./define").DefinedError<import("./types").EmptyContext>;
51
60
  readonly NO_ACCOUNT_EXISTS: import("./define").DefinedError<{
52
61
  userId?: string;
@@ -79,6 +88,7 @@ export declare const registry: {
79
88
  readonly SINGLETON_TABLE: import("./define").DefinedError<import("./types").EmptyContext>;
80
89
  readonly INVITE_NOT_FOUND: import("./define").DefinedError<import("./types").EmptyContext>;
81
90
  readonly INVITE_LIMIT: import("./define").DefinedError<import("./types").EmptyContext>;
91
+ readonly INVITE_ACCOUNT_EXISTS_UNVERIFIED: import("./define").DefinedError<import("./types").EmptyContext>;
82
92
  readonly INVITE_EMAIL_NOT_FOUND: import("./define").DefinedError<import("./types").EmptyContext>;
83
93
  readonly INVITE_PHONE_NOT_FOUND: import("./define").DefinedError<import("./types").EmptyContext>;
84
94
  readonly INVITE_ADDRESS_REQUIRED: import("./define").DefinedError<import("./types").EmptyContext>;
@@ -104,6 +114,21 @@ export declare const registry: {
104
114
  limit?: number;
105
115
  }>;
106
116
  readonly RATE_LIMITED: import("./define").DefinedError<import("./types").EmptyContext>;
117
+ readonly BILLING_NOT_READY: import("./define").DefinedError<{
118
+ database_id?: string;
119
+ checked_at?: string | null;
120
+ ready?: boolean | null;
121
+ }>;
122
+ readonly BILLING_ENTITY_BUSY: import("./define").DefinedError<{
123
+ entity_id?: string;
124
+ }>;
125
+ readonly BILLING_OPERATION_CONFLICT: import("./define").DefinedError<{
126
+ operation_id?: string;
127
+ }>;
128
+ readonly BILLING_OPERATION_INVALID: import("./define").DefinedError<import("./types").EmptyContext>;
129
+ readonly UNKNOWN_METER: import("./define").DefinedError<{
130
+ meter_slug?: string;
131
+ }>;
107
132
  readonly QUERY_TOO_DEEP: import("./define").DefinedError<{
108
133
  depth?: number;
109
134
  limit?: number;
package/esm/registry.js CHANGED
@@ -83,6 +83,50 @@ export const registry = {
83
83
  http: 409,
84
84
  message: 'An account with this email already exists. Please sign in or use a different email.'
85
85
  }),
86
+ ALREADY_AUTHENTICATED_USE_LINK: defineError({
87
+ code: 'ALREADY_AUTHENTICATED_USE_LINK',
88
+ class: 'public',
89
+ http: 409,
90
+ message: 'You are already signed in. Add this email or phone number to your current account instead of creating a new one.'
91
+ }),
92
+ IDENTIFIER_CONFLICT: defineError({
93
+ code: 'IDENTIFIER_CONFLICT',
94
+ class: 'public',
95
+ http: 409,
96
+ message: 'The email and phone number belong to different accounts. Provide only one of them.'
97
+ }),
98
+ // Verified-only identifier uniqueness: an email/phone may sit unverified on
99
+ // several accounts, but only one account may hold it verified.
100
+ IDENTIFIER_VERIFIED_ELSEWHERE: defineError({
101
+ code: 'IDENTIFIER_VERIFIED_ELSEWHERE',
102
+ class: 'public',
103
+ http: 409,
104
+ message: 'This email or phone number is already verified on another account. Sign in to that account or use a different one.'
105
+ }),
106
+ IDENTIFIER_UNVERIFIED_AMBIGUOUS: defineError({
107
+ code: 'IDENTIFIER_UNVERIFIED_AMBIGUOUS',
108
+ class: 'public',
109
+ http: 409,
110
+ message: 'This email or phone number is pending verification on more than one account. Verify it first to continue.'
111
+ }),
112
+ IDENTIFIER_CLAIM_LIMIT: defineError({
113
+ code: 'IDENTIFIER_CLAIM_LIMIT',
114
+ class: 'public',
115
+ http: 429,
116
+ message: 'This account has too many unverified emails or phone numbers. Verify or remove one before adding another.'
117
+ }),
118
+ MFA_IDENTIFIER_UNVERIFIED: defineError({
119
+ code: 'MFA_IDENTIFIER_UNVERIFIED',
120
+ class: 'public',
121
+ http: 403,
122
+ message: 'Verify this email or phone number before using it for multi-factor authentication.'
123
+ }),
124
+ SMS_VERIFICATION_DISABLED: defineError({
125
+ code: 'SMS_VERIFICATION_DISABLED',
126
+ class: 'public',
127
+ http: 403,
128
+ message: 'Phone number verification is not enabled.'
129
+ }),
86
130
  ACCOUNT_NOT_FOUND: defineError({
87
131
  code: 'ACCOUNT_NOT_FOUND',
88
132
  class: 'public',
@@ -277,6 +321,12 @@ export const registry = {
277
321
  http: 429,
278
322
  message: 'This invitation has reached its usage limit. Please request a new invitation.'
279
323
  }),
324
+ INVITE_ACCOUNT_EXISTS_UNVERIFIED: defineError({
325
+ code: 'INVITE_ACCOUNT_EXISTS_UNVERIFIED',
326
+ class: 'public',
327
+ http: 409,
328
+ message: 'An unverified account already exists for this identifier and has no active invitation. Ask the user to verify their account instead.'
329
+ }),
280
330
  INVITE_EMAIL_NOT_FOUND: defineError({
281
331
  code: 'INVITE_EMAIL_NOT_FOUND',
282
332
  class: 'public',
@@ -381,6 +431,39 @@ export const registry = {
381
431
  message: 'Too many requests. Please slow down and try again shortly.'
382
432
  }),
383
433
  // ===========================================================================
434
+ // Billing provider operations (public)
435
+ // ===========================================================================
436
+ BILLING_NOT_READY: defineError({
437
+ code: 'BILLING_NOT_READY',
438
+ class: 'public',
439
+ http: 409,
440
+ message: 'Billing is not ready for this database yet. Please try again shortly.'
441
+ }),
442
+ BILLING_ENTITY_BUSY: defineError({
443
+ code: 'BILLING_ENTITY_BUSY',
444
+ class: 'public',
445
+ http: 409,
446
+ message: 'Another billing operation is already in progress for this account. Please wait for it to finish.'
447
+ }),
448
+ BILLING_OPERATION_CONFLICT: defineError({
449
+ code: 'BILLING_OPERATION_CONFLICT',
450
+ class: 'public',
451
+ http: 409,
452
+ message: 'This billing operation ID was already used for a different request.'
453
+ }),
454
+ BILLING_OPERATION_INVALID: defineError({
455
+ code: 'BILLING_OPERATION_INVALID',
456
+ class: 'public',
457
+ http: 400,
458
+ message: 'The billing operation request is invalid.'
459
+ }),
460
+ UNKNOWN_METER: defineError({
461
+ code: 'UNKNOWN_METER',
462
+ class: 'public',
463
+ http: 404,
464
+ message: 'The requested meter does not exist.'
465
+ }),
466
+ // ===========================================================================
384
467
  // Request protection (public, dynamic) — raised by the GraphQL runtime when a
385
468
  // request exceeds the bounds resolved from database_settings/api_settings.
386
469
  // Each carries the limit that was in force so a client can adapt rather than
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * GENERATED FILE — DO NOT EDIT BY HAND.
3
3
  *
4
- * Source of truth: the constructive-db error audit (801 distinct codes
4
+ * Source of truth: the constructive-db error audit (824 distinct codes
5
5
  * raised via EXCEPTION/THROW across deploy sources + generated output).
6
6
  * Regenerate with `python3 scripts/generate-registry.py` (see README.md).
7
7
  *
@@ -9,7 +9,7 @@
9
9
  * codes carry their raw message (with %-args rendered as {{argN}}). Curated
10
10
  * entries in `registry.ts` override anything here (typed context + refined copy).
11
11
  *
12
- * Counts: 801 total, 591 public, 210 internal.
12
+ * Counts: 824 total, 604 public, 220 internal.
13
13
  */
14
14
  import { type DefinedError } from '../define';
15
15
  import type { ErrorContext } from '../types';
@@ -24,4 +24,4 @@ export declare const generatedRegistry: Record<string, DefinedError<ErrorContext
24
24
  /** Audit metadata for each generated code. */
25
25
  export declare const GENERATED_CODE_META: Record<string, GeneratedCodeMeta>;
26
26
  /** Total number of codes collected from constructive-db. */
27
- export declare const GENERATED_CODE_COUNT = 801;
27
+ export declare const GENERATED_CODE_COUNT = 824;
@@ -5,7 +5,7 @@ exports.GENERATED_CODE_COUNT = exports.GENERATED_CODE_META = exports.generatedRe
5
5
  /**
6
6
  * GENERATED FILE — DO NOT EDIT BY HAND.
7
7
  *
8
- * Source of truth: the constructive-db error audit (801 distinct codes
8
+ * Source of truth: the constructive-db error audit (824 distinct codes
9
9
  * raised via EXCEPTION/THROW across deploy sources + generated output).
10
10
  * Regenerate with `python3 scripts/generate-registry.py` (see README.md).
11
11
  *
@@ -13,7 +13,7 @@ exports.GENERATED_CODE_COUNT = exports.GENERATED_CODE_META = exports.generatedRe
13
13
  * codes carry their raw message (with %-args rendered as {{argN}}). Curated
14
14
  * entries in `registry.ts` override anything here (typed context + refined copy).
15
15
  *
16
- * Counts: 801 total, 591 public, 210 internal.
16
+ * Counts: 824 total, 604 public, 220 internal.
17
17
  */
18
18
  const define_1 = require("../define");
19
19
  /** Every constructive-db error code, keyed by code. */
@@ -23,6 +23,7 @@ exports.generatedRegistry = {
23
23
  'ACCOUNT_LOCKED_EXCEED_ATTEMPTS': (0, define_1.defineError)({ code: 'ACCOUNT_LOCKED_EXCEED_ATTEMPTS', class: 'public', http: 423, message: 'Account locked exceed attempts.' }),
24
24
  'ACCOUNT_NOT_FOUND': (0, define_1.defineError)({ code: 'ACCOUNT_NOT_FOUND', class: 'public', http: 404, message: 'Account not found.' }),
25
25
  'ACTOR_CLAIM_REQUIRED': (0, define_1.defineError)({ code: 'ACTOR_CLAIM_REQUIRED', class: 'internal', http: 500, message: 'Actor claim required.' }),
26
+ 'ALREADY_AUTHENTICATED_USE_LINK': (0, define_1.defineError)({ code: 'ALREADY_AUTHENTICATED_USE_LINK', class: 'public', http: 409, message: 'Already authenticated use link.' }),
26
27
  'ALREADY_SCHEDULED': (0, define_1.defineError)({ code: 'ALREADY_SCHEDULED', class: 'public', http: 409, message: 'Already scheduled.' }),
27
28
  'ALTER_TABLE_ADD_COLUMN': (0, define_1.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' }),
28
29
  'API_KEYS_DISABLED': (0, define_1.defineError)({ code: 'API_KEYS_DISABLED', class: 'public', http: 403, message: 'Api keys disabled.' }),
@@ -37,6 +38,9 @@ exports.generatedRegistry = {
37
38
  'APP_INSTALLATION_MISSING': (0, define_1.defineError)({ code: 'APP_INSTALLATION_MISSING', class: 'public', http: 400, message: 'App installation missing.' }),
38
39
  'APP_INSTALL_NO_SERVICE': (0, define_1.defineError)({ code: 'APP_INSTALL_NO_SERVICE', class: 'public', http: 400, message: 'App install no service.' }),
39
40
  'ASSIGN_PROFILES_CAPABILITY_REQUIRED': (0, define_1.defineError)({ code: 'ASSIGN_PROFILES_CAPABILITY_REQUIRED', class: 'internal', http: 500, message: 'Assign profiles capability required.' }),
41
+ 'AST_OPTIONS_NOT_OBJECT': (0, define_1.defineError)({ code: 'AST_OPTIONS_NOT_OBJECT', class: 'internal', http: 500, message: 'Ast options not object.' }),
42
+ 'AST_OPTION_REQUIRED': (0, define_1.defineError)({ code: 'AST_OPTION_REQUIRED', class: 'internal', http: 500, message: 'Ast option required.' }),
43
+ 'AST_OPTION_UNKNOWN': (0, define_1.defineError)({ code: 'AST_OPTION_UNKNOWN', class: 'internal', http: 500, message: 'Ast option unknown.' }),
40
44
  'ATTRIBUTION_REQUIRED': (0, define_1.defineError)({ code: 'ATTRIBUTION_REQUIRED', class: 'internal', http: 500, message: 'Attribution required.' }),
41
45
  'AUTHZ_COLUMN_SECURITY_AUTHZ_NODE_REQUIRED': (0, define_1.defineError)({ code: 'AUTHZ_COLUMN_SECURITY_AUTHZ_NODE_REQUIRED', class: 'public', http: 400, message: 'Authz column security authz node required.' }),
42
46
  'AUTHZ_COLUMN_SECURITY_COLUMNS_REQUIRED': (0, define_1.defineError)({ code: 'AUTHZ_COLUMN_SECURITY_COLUMNS_REQUIRED', class: 'public', http: 400, message: 'Authz column security columns required.' }),
@@ -74,6 +78,17 @@ exports.generatedRegistry = {
74
78
  'BAD_VIEW_EXPRESSION': (0, define_1.defineError)({ code: 'BAD_VIEW_EXPRESSION', class: 'public', http: 400, message: 'Bad view expression.' }),
75
79
  'BEHAVIOR_FRAGMENT_EMPTY': (0, define_1.defineError)({ code: 'BEHAVIOR_FRAGMENT_EMPTY', class: 'internal', http: 500, message: 'Behavior fragment empty.' }),
76
80
  'BILLING_DISPUTE_BALANCE_NOT_FOUND': (0, define_1.defineError)({ code: 'BILLING_DISPUTE_BALANCE_NOT_FOUND', class: 'internal', http: 500, message: 'Billing dispute balance not found.' }),
81
+ 'BILLING_ENTITY_BUSY': (0, define_1.defineError)({ code: 'BILLING_ENTITY_BUSY', class: 'public', http: 400, message: 'Billing entity busy.' }),
82
+ 'BILLING_HEALTH_INVALID': (0, define_1.defineError)({ code: 'BILLING_HEALTH_INVALID', class: 'internal', http: 500, message: 'Billing health invalid.' }),
83
+ 'BILLING_NOT_READY': (0, define_1.defineError)({ code: 'BILLING_NOT_READY', class: 'public', http: 400, message: 'Billing not ready.' }),
84
+ 'BILLING_OBSERVATION_INVALID': (0, define_1.defineError)({ code: 'BILLING_OBSERVATION_INVALID', class: 'internal', http: 500, message: 'Billing observation invalid.' }),
85
+ 'BILLING_OPERATION_CONFLICT': (0, define_1.defineError)({ code: 'BILLING_OPERATION_CONFLICT', class: 'public', http: 400, message: 'Billing operation conflict.' }),
86
+ 'BILLING_OPERATION_INVALID': (0, define_1.defineError)({ code: 'BILLING_OPERATION_INVALID', class: 'public', http: 400, message: 'Billing operation invalid.' }),
87
+ 'BILLING_OPERATION_NOT_FOUND': (0, define_1.defineError)({ code: 'BILLING_OPERATION_NOT_FOUND', class: 'internal', http: 500, message: 'Billing operation not found.' }),
88
+ 'BILLING_OPERATION_SETTLED': (0, define_1.defineError)({ code: 'BILLING_OPERATION_SETTLED', class: 'internal', http: 500, message: 'Billing operation settled.' }),
89
+ 'BILLING_OPERATION_STATE_INVALID': (0, define_1.defineError)({ code: 'BILLING_OPERATION_STATE_INVALID', class: 'internal', http: 500, message: 'Billing operation state invalid.' }),
90
+ 'BILLING_RECONCILE_BOUNDS_REQUIRED': (0, define_1.defineError)({ code: 'BILLING_RECONCILE_BOUNDS_REQUIRED', class: 'internal', http: 500, message: 'Billing reconcile bounds required.' }),
91
+ 'BILLING_SCHEDULED_CHANGE_INVALID': (0, define_1.defineError)({ code: 'BILLING_SCHEDULED_CHANGE_INVALID', class: 'internal', http: 500, message: 'Billing scheduled change invalid.' }),
77
92
  'BLUEPRINT_MODULE_NOT_INSTALLED': (0, define_1.defineError)({ code: 'BLUEPRINT_MODULE_NOT_INSTALLED', class: 'public', http: 400, message: 'Blueprint module not installed.' }),
78
93
  'BLUEPRINT_MODULE_REF_AMBIGUOUS': (0, define_1.defineError)({ code: 'BLUEPRINT_MODULE_REF_AMBIGUOUS', class: 'public', http: 400, message: 'Blueprint module ref ambiguous.' }),
79
94
  'BLUEPRINT_MODULE_REF_INVALID': (0, define_1.defineError)({ code: 'BLUEPRINT_MODULE_REF_INVALID', class: 'public', http: 400, message: 'Blueprint module ref invalid.' }),
@@ -365,7 +380,7 @@ exports.generatedRegistry = {
365
380
  'GRAPH_TREE_NOT_FOUND': (0, define_1.defineError)({ code: 'GRAPH_TREE_NOT_FOUND', class: 'internal', http: 500, message: 'Graph tree not found.' }),
366
381
  'GRAPH_VALIDATION_FAILED': (0, define_1.defineError)({ code: 'GRAPH_VALIDATION_FAILED', class: 'internal', http: 500, message: 'GRAPH_VALIDATION_FAILED: graph {{arg0}} failed pre-execution validation: {{arg1}}', positional: ['arg0', 'arg1'] }),
367
382
  'GROUPS_REQ_ENTITIES': (0, define_1.defineError)({ code: 'GROUPS_REQ_ENTITIES', class: 'public', http: 400, message: 'Groups req entities.' }),
368
- 'GUARD_STEP_UP': (0, define_1.defineError)({ code: 'GUARD_STEP_UP', class: 'internal', http: 500, message: 'GUARD_STEP_UP: unknown event {{arg0}}, expected INSERT, UPDATE, or DELETE', positional: ['arg0'] }),
383
+ 'GUARD_STEP_UP': (0, define_1.defineError)({ code: 'GUARD_STEP_UP', class: 'internal', http: 500, message: 'GUARD_STEP_UP: min_age anchor takes fk_col or anchor_conditions, not both' }),
369
384
  'GUARD_STEP_UP_CONDITIONS_CONDITION_FIELD_CONFLICT': (0, define_1.defineError)({ code: 'GUARD_STEP_UP_CONDITIONS_CONDITION_FIELD_CONFLICT', class: 'public', http: 403, message: 'Guard step up conditions condition field conflict.' }),
370
385
  'GUARD_STEP_UP_CONDITIONS_WATCH_FIELDS_CONFLICT': (0, define_1.defineError)({ code: 'GUARD_STEP_UP_CONDITIONS_WATCH_FIELDS_CONFLICT', class: 'public', http: 403, message: 'Guard step up conditions watch fields conflict.' }),
371
386
  'GUARD_STEP_UP_CONDITION_FIELD_NOT_FOUND': (0, define_1.defineError)({ code: 'GUARD_STEP_UP_CONDITION_FIELD_NOT_FOUND', class: 'public', http: 404, message: 'Guard step up condition field not found.' }),
@@ -413,6 +428,10 @@ exports.generatedRegistry = {
413
428
  'HISTORY': (0, define_1.defineError)({ code: 'HISTORY', class: 'internal', http: 500, message: 'HISTORY: history {{arg0}}.{{arg1}} registration has no copy_fields', positional: ['arg0', 'arg1'] }),
414
429
  'HOSTNAME_BINDING_SYNC': (0, define_1.defineError)({ code: 'HOSTNAME_BINDING_SYNC', class: 'internal', http: 500, message: 'HOSTNAME_BINDING_SYNC: unknown event {{arg0}}, expected UPSERT or DELETE', positional: ['arg0'] }),
415
430
  'HOSTNAME_CLAIMED_IN_OTHER_PLANE': (0, define_1.defineError)({ code: 'HOSTNAME_CLAIMED_IN_OTHER_PLANE', class: 'public', http: 400, message: 'Hostname claimed in other plane.' }),
431
+ 'IDENTIFIER_CLAIM_LIMIT': (0, define_1.defineError)({ code: 'IDENTIFIER_CLAIM_LIMIT', class: 'public', http: 429, message: 'Identifier claim limit.' }),
432
+ 'IDENTIFIER_CONFLICT': (0, define_1.defineError)({ code: 'IDENTIFIER_CONFLICT', class: 'public', http: 400, message: 'Identifier conflict.' }),
433
+ 'IDENTIFIER_UNVERIFIED_AMBIGUOUS': (0, define_1.defineError)({ code: 'IDENTIFIER_UNVERIFIED_AMBIGUOUS', class: 'public', http: 400, message: 'Identifier unverified ambiguous.' }),
434
+ 'IDENTIFIER_VERIFIED_ELSEWHERE': (0, define_1.defineError)({ code: 'IDENTIFIER_VERIFIED_ELSEWHERE', class: 'public', http: 400, message: 'Identifier verified elsewhere.' }),
416
435
  'IDENTITY_ACCOUNT_NOT_FOUND': (0, define_1.defineError)({ code: 'IDENTITY_ACCOUNT_NOT_FOUND', class: 'public', http: 404, message: 'Identity account not found.' }),
417
436
  'IDENTITY_ALREADY_LINKED': (0, define_1.defineError)({ code: 'IDENTITY_ALREADY_LINKED', class: 'public', http: 409, message: 'Identity already linked.' }),
418
437
  'IDENTITY_LINK_AVAILABLE': (0, define_1.defineError)({ code: 'IDENTITY_LINK_AVAILABLE', class: 'public', http: 400, message: 'Identity link available.' }),
@@ -450,6 +469,7 @@ exports.generatedRegistry = {
450
469
  'INVALID_TOKEN': (0, define_1.defineError)({ code: 'INVALID_TOKEN', class: 'public', http: 401, message: 'Invalid token.' }),
451
470
  'INVALID_USER': (0, define_1.defineError)({ code: 'INVALID_USER', class: 'public', http: 400, message: 'Invalid user.' }),
452
471
  'INVALID_WORKER_ID': (0, define_1.defineError)({ code: 'INVALID_WORKER_ID', class: 'internal', http: 500, message: 'Invalid worker id.' }),
472
+ 'INVITE_ACCOUNT_EXISTS_UNVERIFIED': (0, define_1.defineError)({ code: 'INVITE_ACCOUNT_EXISTS_UNVERIFIED', class: 'public', http: 400, message: 'Invite account exists unverified.' }),
453
473
  'INVITE_ADDRESS_REQUIRED': (0, define_1.defineError)({ code: 'INVITE_ADDRESS_REQUIRED', class: 'public', http: 400, message: 'Invite address required.' }),
454
474
  'INVITE_EMAIL_NOT_FOUND': (0, define_1.defineError)({ code: 'INVITE_EMAIL_NOT_FOUND', class: 'public', http: 404, message: 'Invite email not found.' }),
455
475
  'INVITE_LIMIT': (0, define_1.defineError)({ code: 'INVITE_LIMIT', class: 'public', http: 429, message: 'Invite limit.' }),
@@ -538,6 +558,7 @@ exports.generatedRegistry = {
538
558
  'MERKLE_REF_NOT_FOUND': (0, define_1.defineError)({ code: 'MERKLE_REF_NOT_FOUND', class: 'public', http: 404, message: 'Merkle ref not found.' }),
539
559
  'METER_RATE_LIMIT': (0, define_1.defineError)({ code: 'METER_RATE_LIMIT', class: 'internal', http: 500, message: 'METER_RATE_LIMIT: unknown event {{arg0}}, expected INSERT or UPDATE', positional: ['arg0'] }),
540
560
  'MFA_CHALLENGE_EXPIRED': (0, define_1.defineError)({ code: 'MFA_CHALLENGE_EXPIRED', class: 'public', http: 403, message: 'Mfa challenge expired.' }),
561
+ 'MFA_IDENTIFIER_UNVERIFIED': (0, define_1.defineError)({ code: 'MFA_IDENTIFIER_UNVERIFIED', class: 'public', http: 403, message: 'Mfa identifier unverified.' }),
541
562
  'MFA_REQUIRED': (0, define_1.defineError)({ code: 'MFA_REQUIRED', class: 'public', http: 403, message: 'Mfa required.' }),
542
563
  'MISSING_FIXTURE_TYPE': (0, define_1.defineError)({ code: 'MISSING_FIXTURE_TYPE', class: 'internal', http: 500, message: 'Missing fixture type.' }),
543
564
  'MISSING_REQUIRED_FIELD': (0, define_1.defineError)({ code: 'MISSING_REQUIRED_FIELD', class: 'public', http: 400, message: 'Missing required field.' }),
@@ -717,6 +738,7 @@ exports.generatedRegistry = {
717
738
  'SITE_SURFACE_NOT_PROVISIONED': (0, define_1.defineError)({ code: 'SITE_SURFACE_NOT_PROVISIONED', class: 'public', http: 400, message: 'Site surface not provisioned.' }),
718
739
  'SMS_SIGN_IN_DISABLED': (0, define_1.defineError)({ code: 'SMS_SIGN_IN_DISABLED', class: 'public', http: 403, message: 'Sms sign in disabled.' }),
719
740
  'SMS_SIGN_UP_DISABLED': (0, define_1.defineError)({ code: 'SMS_SIGN_UP_DISABLED', class: 'public', http: 403, message: 'Sms sign up disabled.' }),
741
+ 'SMS_VERIFICATION_DISABLED': (0, define_1.defineError)({ code: 'SMS_VERIFICATION_DISABLED', class: 'public', http: 403, message: 'Sms verification disabled.' }),
720
742
  'SOURCE_COMMIT_NOT_FOUND': (0, define_1.defineError)({ code: 'SOURCE_COMMIT_NOT_FOUND', class: 'internal', http: 500, message: 'Source commit not found.' }),
721
743
  'SOURCE_EMAILS_NOT_FOUND': (0, define_1.defineError)({ code: 'SOURCE_EMAILS_NOT_FOUND', class: 'internal', http: 500, message: 'Source emails not found.' }),
722
744
  'SOURCE_SECRETS_NOT_FOUND': (0, define_1.defineError)({ code: 'SOURCE_SECRETS_NOT_FOUND', class: 'internal', http: 500, message: 'Source secrets not found.' }),
@@ -794,6 +816,7 @@ exports.generatedRegistry = {
794
816
  'TRIGGER_WHEN_AST_ROW_UNAVAILABLE': (0, define_1.defineError)({ code: 'TRIGGER_WHEN_AST_ROW_UNAVAILABLE', class: 'public', http: 400, message: 'Trigger when ast row unavailable.' }),
795
817
  'TRUST_LADDER_OPTION_INVALID': (0, define_1.defineError)({ code: 'TRUST_LADDER_OPTION_INVALID', class: 'internal', http: 500, message: 'Trust ladder option invalid.' }),
796
818
  'UNAUTHENTICATED': (0, define_1.defineError)({ code: 'UNAUTHENTICATED', class: 'public', http: 401, message: 'Unauthenticated.' }),
819
+ 'UNKNOWN_METER': (0, define_1.defineError)({ code: 'UNKNOWN_METER', class: 'public', http: 400, message: 'Unknown meter.' }),
797
820
  'UNKNOWN_POLICY_TYPE': (0, define_1.defineError)({ code: 'UNKNOWN_POLICY_TYPE', class: 'public', http: 400, message: 'Unknown policy type.' }),
798
821
  'UNKNOWN_VIEW_TYPE': (0, define_1.defineError)({ code: 'UNKNOWN_VIEW_TYPE', class: 'public', http: 400, message: 'Unknown view type.', positional: ['arg0'] }),
799
822
  'UNSUPPORTED': (0, define_1.defineError)({ code: 'UNSUPPORTED', class: 'internal', http: 500, message: 'UNSUPPORTED POLICY ({{arg0}})', positional: ['arg0'] }),
@@ -827,6 +850,7 @@ exports.GENERATED_CODE_META = {
827
850
  'ACCOUNT_LOCKED_EXCEED_ATTEMPTS': { class: 'public', dynamic: false, generatedOnly: false },
828
851
  'ACCOUNT_NOT_FOUND': { class: 'public', dynamic: false, generatedOnly: false },
829
852
  'ACTOR_CLAIM_REQUIRED': { class: 'internal', dynamic: false, generatedOnly: true },
853
+ 'ALREADY_AUTHENTICATED_USE_LINK': { class: 'public', dynamic: false, generatedOnly: false },
830
854
  'ALREADY_SCHEDULED': { class: 'public', dynamic: false, generatedOnly: true },
831
855
  'ALTER_TABLE_ADD_COLUMN': { class: 'internal', dynamic: true, generatedOnly: false },
832
856
  'API_KEYS_DISABLED': { class: 'public', dynamic: false, generatedOnly: true },
@@ -841,6 +865,9 @@ exports.GENERATED_CODE_META = {
841
865
  'APP_INSTALLATION_MISSING': { class: 'public', dynamic: false, generatedOnly: false },
842
866
  'APP_INSTALL_NO_SERVICE': { class: 'public', dynamic: false, generatedOnly: false },
843
867
  'ASSIGN_PROFILES_CAPABILITY_REQUIRED': { class: 'internal', dynamic: false, generatedOnly: false },
868
+ 'AST_OPTIONS_NOT_OBJECT': { class: 'internal', dynamic: false, generatedOnly: false },
869
+ 'AST_OPTION_REQUIRED': { class: 'internal', dynamic: false, generatedOnly: false },
870
+ 'AST_OPTION_UNKNOWN': { class: 'internal', dynamic: false, generatedOnly: false },
844
871
  'ATTRIBUTION_REQUIRED': { class: 'internal', dynamic: false, generatedOnly: true },
845
872
  'AUTHZ_COLUMN_SECURITY_AUTHZ_NODE_REQUIRED': { class: 'public', dynamic: false, generatedOnly: false },
846
873
  'AUTHZ_COLUMN_SECURITY_COLUMNS_REQUIRED': { class: 'public', dynamic: false, generatedOnly: false },
@@ -878,6 +905,17 @@ exports.GENERATED_CODE_META = {
878
905
  'BAD_VIEW_EXPRESSION': { class: 'public', dynamic: false, generatedOnly: false },
879
906
  'BEHAVIOR_FRAGMENT_EMPTY': { class: 'internal', dynamic: false, generatedOnly: false },
880
907
  'BILLING_DISPUTE_BALANCE_NOT_FOUND': { class: 'internal', dynamic: false, generatedOnly: false },
908
+ 'BILLING_ENTITY_BUSY': { class: 'public', dynamic: false, generatedOnly: true },
909
+ 'BILLING_HEALTH_INVALID': { class: 'internal', dynamic: false, generatedOnly: true },
910
+ 'BILLING_NOT_READY': { class: 'public', dynamic: false, generatedOnly: false },
911
+ 'BILLING_OBSERVATION_INVALID': { class: 'internal', dynamic: false, generatedOnly: true },
912
+ 'BILLING_OPERATION_CONFLICT': { class: 'public', dynamic: false, generatedOnly: true },
913
+ 'BILLING_OPERATION_INVALID': { class: 'public', dynamic: false, generatedOnly: true },
914
+ 'BILLING_OPERATION_NOT_FOUND': { class: 'internal', dynamic: false, generatedOnly: true },
915
+ 'BILLING_OPERATION_SETTLED': { class: 'internal', dynamic: false, generatedOnly: true },
916
+ 'BILLING_OPERATION_STATE_INVALID': { class: 'internal', dynamic: false, generatedOnly: true },
917
+ 'BILLING_RECONCILE_BOUNDS_REQUIRED': { class: 'internal', dynamic: false, generatedOnly: true },
918
+ 'BILLING_SCHEDULED_CHANGE_INVALID': { class: 'internal', dynamic: false, generatedOnly: true },
881
919
  'BLUEPRINT_MODULE_NOT_INSTALLED': { class: 'public', dynamic: false, generatedOnly: false },
882
920
  'BLUEPRINT_MODULE_REF_AMBIGUOUS': { class: 'public', dynamic: false, generatedOnly: false },
883
921
  'BLUEPRINT_MODULE_REF_INVALID': { class: 'public', dynamic: false, generatedOnly: false },
@@ -1217,6 +1255,10 @@ exports.GENERATED_CODE_META = {
1217
1255
  'HISTORY': { class: 'internal', dynamic: true, generatedOnly: false },
1218
1256
  'HOSTNAME_BINDING_SYNC': { class: 'internal', dynamic: true, generatedOnly: false },
1219
1257
  'HOSTNAME_CLAIMED_IN_OTHER_PLANE': { class: 'public', dynamic: false, generatedOnly: true },
1258
+ 'IDENTIFIER_CLAIM_LIMIT': { class: 'public', dynamic: false, generatedOnly: false },
1259
+ 'IDENTIFIER_CONFLICT': { class: 'public', dynamic: false, generatedOnly: false },
1260
+ 'IDENTIFIER_UNVERIFIED_AMBIGUOUS': { class: 'public', dynamic: false, generatedOnly: false },
1261
+ 'IDENTIFIER_VERIFIED_ELSEWHERE': { class: 'public', dynamic: false, generatedOnly: false },
1220
1262
  'IDENTITY_ACCOUNT_NOT_FOUND': { class: 'public', dynamic: false, generatedOnly: false },
1221
1263
  'IDENTITY_ALREADY_LINKED': { class: 'public', dynamic: false, generatedOnly: false },
1222
1264
  'IDENTITY_LINK_AVAILABLE': { class: 'public', dynamic: false, generatedOnly: false },
@@ -1254,6 +1296,7 @@ exports.GENERATED_CODE_META = {
1254
1296
  'INVALID_TOKEN': { class: 'public', dynamic: false, generatedOnly: false },
1255
1297
  'INVALID_USER': { class: 'public', dynamic: false, generatedOnly: false },
1256
1298
  'INVALID_WORKER_ID': { class: 'internal', dynamic: false, generatedOnly: true },
1299
+ 'INVITE_ACCOUNT_EXISTS_UNVERIFIED': { class: 'public', dynamic: false, generatedOnly: false },
1257
1300
  'INVITE_ADDRESS_REQUIRED': { class: 'public', dynamic: false, generatedOnly: false },
1258
1301
  'INVITE_EMAIL_NOT_FOUND': { class: 'public', dynamic: false, generatedOnly: false },
1259
1302
  'INVITE_LIMIT': { class: 'public', dynamic: false, generatedOnly: false },
@@ -1342,6 +1385,7 @@ exports.GENERATED_CODE_META = {
1342
1385
  'MERKLE_REF_NOT_FOUND': { class: 'public', dynamic: false, generatedOnly: false },
1343
1386
  'METER_RATE_LIMIT': { class: 'internal', dynamic: true, generatedOnly: false },
1344
1387
  'MFA_CHALLENGE_EXPIRED': { class: 'public', dynamic: false, generatedOnly: false },
1388
+ 'MFA_IDENTIFIER_UNVERIFIED': { class: 'public', dynamic: false, generatedOnly: false },
1345
1389
  'MFA_REQUIRED': { class: 'public', dynamic: false, generatedOnly: false },
1346
1390
  'MISSING_FIXTURE_TYPE': { class: 'internal', dynamic: false, generatedOnly: false },
1347
1391
  'MISSING_REQUIRED_FIELD': { class: 'public', dynamic: false, generatedOnly: false },
@@ -1521,6 +1565,7 @@ exports.GENERATED_CODE_META = {
1521
1565
  'SITE_SURFACE_NOT_PROVISIONED': { class: 'public', dynamic: false, generatedOnly: false },
1522
1566
  'SMS_SIGN_IN_DISABLED': { class: 'public', dynamic: false, generatedOnly: true },
1523
1567
  'SMS_SIGN_UP_DISABLED': { class: 'public', dynamic: false, generatedOnly: true },
1568
+ 'SMS_VERIFICATION_DISABLED': { class: 'public', dynamic: false, generatedOnly: false },
1524
1569
  'SOURCE_COMMIT_NOT_FOUND': { class: 'internal', dynamic: false, generatedOnly: false },
1525
1570
  'SOURCE_EMAILS_NOT_FOUND': { class: 'internal', dynamic: false, generatedOnly: false },
1526
1571
  'SOURCE_SECRETS_NOT_FOUND': { class: 'internal', dynamic: false, generatedOnly: false },
@@ -1598,6 +1643,7 @@ exports.GENERATED_CODE_META = {
1598
1643
  'TRIGGER_WHEN_AST_ROW_UNAVAILABLE': { class: 'public', dynamic: false, generatedOnly: false },
1599
1644
  'TRUST_LADDER_OPTION_INVALID': { class: 'internal', dynamic: false, generatedOnly: false },
1600
1645
  'UNAUTHENTICATED': { class: 'public', dynamic: false, generatedOnly: false },
1646
+ 'UNKNOWN_METER': { class: 'public', dynamic: false, generatedOnly: true },
1601
1647
  'UNKNOWN_POLICY_TYPE': { class: 'public', dynamic: false, generatedOnly: false },
1602
1648
  'UNKNOWN_VIEW_TYPE': { class: 'public', dynamic: true, generatedOnly: false },
1603
1649
  'UNSUPPORTED': { class: 'internal', dynamic: true, generatedOnly: false },
@@ -1625,4 +1671,4 @@ exports.GENERATED_CODE_META = {
1625
1671
  'WITH_CHECK_NOT_ALLOWED': { class: 'public', dynamic: false, generatedOnly: false },
1626
1672
  };
1627
1673
  /** Total number of codes collected from constructive-db. */
1628
- exports.GENERATED_CODE_COUNT = 801;
1674
+ exports.GENERATED_CODE_COUNT = 824;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@constructive-io/errors",
3
- "version": "0.18.0",
3
+ "version": "0.20.0",
4
4
  "author": "Constructive <developers@constructive.io>",
5
5
  "description": "Canonical Constructive error system: registry, codes, i18n messages, and cross-source (PostgreSQL/GraphQL/client) parsing. Zero runtime dependencies.",
6
6
  "main": "index.js",
@@ -41,5 +41,5 @@
41
41
  "makage": "^0.8.0",
42
42
  "ts-node": "^10.9.2"
43
43
  },
44
- "gitHead": "baa84094b8541eb5000701b0060aa5b298032dc7"
44
+ "gitHead": "e05686fb94c5e22c954436f18c25aa4439b9e83e"
45
45
  }
package/registry.d.ts CHANGED
@@ -47,6 +47,15 @@ export declare const registry: {
47
47
  reason?: string;
48
48
  }>;
49
49
  readonly ACCOUNT_EXISTS: import("./define").DefinedError<import("./types").EmptyContext>;
50
+ readonly ALREADY_AUTHENTICATED_USE_LINK: import("./define").DefinedError<import("./types").EmptyContext>;
51
+ readonly IDENTIFIER_CONFLICT: import("./define").DefinedError<import("./types").EmptyContext>;
52
+ readonly IDENTIFIER_VERIFIED_ELSEWHERE: import("./define").DefinedError<import("./types").EmptyContext>;
53
+ readonly IDENTIFIER_UNVERIFIED_AMBIGUOUS: import("./define").DefinedError<import("./types").EmptyContext>;
54
+ readonly IDENTIFIER_CLAIM_LIMIT: import("./define").DefinedError<{
55
+ limit?: number;
56
+ }>;
57
+ readonly MFA_IDENTIFIER_UNVERIFIED: import("./define").DefinedError<import("./types").EmptyContext>;
58
+ readonly SMS_VERIFICATION_DISABLED: import("./define").DefinedError<import("./types").EmptyContext>;
50
59
  readonly ACCOUNT_NOT_FOUND: import("./define").DefinedError<import("./types").EmptyContext>;
51
60
  readonly NO_ACCOUNT_EXISTS: import("./define").DefinedError<{
52
61
  userId?: string;
@@ -79,6 +88,7 @@ export declare const registry: {
79
88
  readonly SINGLETON_TABLE: import("./define").DefinedError<import("./types").EmptyContext>;
80
89
  readonly INVITE_NOT_FOUND: import("./define").DefinedError<import("./types").EmptyContext>;
81
90
  readonly INVITE_LIMIT: import("./define").DefinedError<import("./types").EmptyContext>;
91
+ readonly INVITE_ACCOUNT_EXISTS_UNVERIFIED: import("./define").DefinedError<import("./types").EmptyContext>;
82
92
  readonly INVITE_EMAIL_NOT_FOUND: import("./define").DefinedError<import("./types").EmptyContext>;
83
93
  readonly INVITE_PHONE_NOT_FOUND: import("./define").DefinedError<import("./types").EmptyContext>;
84
94
  readonly INVITE_ADDRESS_REQUIRED: import("./define").DefinedError<import("./types").EmptyContext>;
@@ -104,6 +114,21 @@ export declare const registry: {
104
114
  limit?: number;
105
115
  }>;
106
116
  readonly RATE_LIMITED: import("./define").DefinedError<import("./types").EmptyContext>;
117
+ readonly BILLING_NOT_READY: import("./define").DefinedError<{
118
+ database_id?: string;
119
+ checked_at?: string | null;
120
+ ready?: boolean | null;
121
+ }>;
122
+ readonly BILLING_ENTITY_BUSY: import("./define").DefinedError<{
123
+ entity_id?: string;
124
+ }>;
125
+ readonly BILLING_OPERATION_CONFLICT: import("./define").DefinedError<{
126
+ operation_id?: string;
127
+ }>;
128
+ readonly BILLING_OPERATION_INVALID: import("./define").DefinedError<import("./types").EmptyContext>;
129
+ readonly UNKNOWN_METER: import("./define").DefinedError<{
130
+ meter_slug?: string;
131
+ }>;
107
132
  readonly QUERY_TOO_DEEP: import("./define").DefinedError<{
108
133
  depth?: number;
109
134
  limit?: number;
package/registry.js CHANGED
@@ -89,6 +89,50 @@ exports.registry = {
89
89
  http: 409,
90
90
  message: 'An account with this email already exists. Please sign in or use a different email.'
91
91
  }),
92
+ ALREADY_AUTHENTICATED_USE_LINK: (0, define_1.defineError)({
93
+ code: 'ALREADY_AUTHENTICATED_USE_LINK',
94
+ class: 'public',
95
+ http: 409,
96
+ message: 'You are already signed in. Add this email or phone number to your current account instead of creating a new one.'
97
+ }),
98
+ IDENTIFIER_CONFLICT: (0, define_1.defineError)({
99
+ code: 'IDENTIFIER_CONFLICT',
100
+ class: 'public',
101
+ http: 409,
102
+ message: 'The email and phone number belong to different accounts. Provide only one of them.'
103
+ }),
104
+ // Verified-only identifier uniqueness: an email/phone may sit unverified on
105
+ // several accounts, but only one account may hold it verified.
106
+ IDENTIFIER_VERIFIED_ELSEWHERE: (0, define_1.defineError)({
107
+ code: 'IDENTIFIER_VERIFIED_ELSEWHERE',
108
+ class: 'public',
109
+ http: 409,
110
+ message: 'This email or phone number is already verified on another account. Sign in to that account or use a different one.'
111
+ }),
112
+ IDENTIFIER_UNVERIFIED_AMBIGUOUS: (0, define_1.defineError)({
113
+ code: 'IDENTIFIER_UNVERIFIED_AMBIGUOUS',
114
+ class: 'public',
115
+ http: 409,
116
+ message: 'This email or phone number is pending verification on more than one account. Verify it first to continue.'
117
+ }),
118
+ IDENTIFIER_CLAIM_LIMIT: (0, define_1.defineError)({
119
+ code: 'IDENTIFIER_CLAIM_LIMIT',
120
+ class: 'public',
121
+ http: 429,
122
+ message: 'This account has too many unverified emails or phone numbers. Verify or remove one before adding another.'
123
+ }),
124
+ MFA_IDENTIFIER_UNVERIFIED: (0, define_1.defineError)({
125
+ code: 'MFA_IDENTIFIER_UNVERIFIED',
126
+ class: 'public',
127
+ http: 403,
128
+ message: 'Verify this email or phone number before using it for multi-factor authentication.'
129
+ }),
130
+ SMS_VERIFICATION_DISABLED: (0, define_1.defineError)({
131
+ code: 'SMS_VERIFICATION_DISABLED',
132
+ class: 'public',
133
+ http: 403,
134
+ message: 'Phone number verification is not enabled.'
135
+ }),
92
136
  ACCOUNT_NOT_FOUND: (0, define_1.defineError)({
93
137
  code: 'ACCOUNT_NOT_FOUND',
94
138
  class: 'public',
@@ -283,6 +327,12 @@ exports.registry = {
283
327
  http: 429,
284
328
  message: 'This invitation has reached its usage limit. Please request a new invitation.'
285
329
  }),
330
+ INVITE_ACCOUNT_EXISTS_UNVERIFIED: (0, define_1.defineError)({
331
+ code: 'INVITE_ACCOUNT_EXISTS_UNVERIFIED',
332
+ class: 'public',
333
+ http: 409,
334
+ message: 'An unverified account already exists for this identifier and has no active invitation. Ask the user to verify their account instead.'
335
+ }),
286
336
  INVITE_EMAIL_NOT_FOUND: (0, define_1.defineError)({
287
337
  code: 'INVITE_EMAIL_NOT_FOUND',
288
338
  class: 'public',
@@ -387,6 +437,39 @@ exports.registry = {
387
437
  message: 'Too many requests. Please slow down and try again shortly.'
388
438
  }),
389
439
  // ===========================================================================
440
+ // Billing provider operations (public)
441
+ // ===========================================================================
442
+ BILLING_NOT_READY: (0, define_1.defineError)({
443
+ code: 'BILLING_NOT_READY',
444
+ class: 'public',
445
+ http: 409,
446
+ message: 'Billing is not ready for this database yet. Please try again shortly.'
447
+ }),
448
+ BILLING_ENTITY_BUSY: (0, define_1.defineError)({
449
+ code: 'BILLING_ENTITY_BUSY',
450
+ class: 'public',
451
+ http: 409,
452
+ message: 'Another billing operation is already in progress for this account. Please wait for it to finish.'
453
+ }),
454
+ BILLING_OPERATION_CONFLICT: (0, define_1.defineError)({
455
+ code: 'BILLING_OPERATION_CONFLICT',
456
+ class: 'public',
457
+ http: 409,
458
+ message: 'This billing operation ID was already used for a different request.'
459
+ }),
460
+ BILLING_OPERATION_INVALID: (0, define_1.defineError)({
461
+ code: 'BILLING_OPERATION_INVALID',
462
+ class: 'public',
463
+ http: 400,
464
+ message: 'The billing operation request is invalid.'
465
+ }),
466
+ UNKNOWN_METER: (0, define_1.defineError)({
467
+ code: 'UNKNOWN_METER',
468
+ class: 'public',
469
+ http: 404,
470
+ message: 'The requested meter does not exist.'
471
+ }),
472
+ // ===========================================================================
390
473
  // Request protection (public, dynamic) — raised by the GraphQL runtime when a
391
474
  // request exceeds the bounds resolved from database_settings/api_settings.
392
475
  // Each carries the limit that was in force so a client can adapt rather than