@authowl/core 0.12.0 → 0.13.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.
package/dist/server.d.ts CHANGED
@@ -90,7 +90,10 @@ interface paths {
90
90
  };
91
91
  readonly get?: never;
92
92
  readonly put?: never;
93
- /** Start a project user export */
93
+ /**
94
+ * Start an ordinary project user export
95
+ * @description Creates a queued CSV or NDJSON export without password hashes. The artifact is generated by the user-export processor and expires after 24 hours.
96
+ */
94
97
  readonly post: operations["startUserExport"];
95
98
  readonly delete?: never;
96
99
  readonly options?: never;
@@ -98,6 +101,180 @@ interface paths {
98
101
  readonly patch?: never;
99
102
  readonly trace?: never;
100
103
  };
104
+ readonly "/users/export/{exportId}": {
105
+ readonly parameters: {
106
+ readonly query?: never;
107
+ readonly header?: never;
108
+ readonly path: {
109
+ readonly exportId: components["parameters"]["ExportId"];
110
+ };
111
+ readonly cookie?: never;
112
+ };
113
+ /** Get an ordinary user export */
114
+ readonly get: operations["getUserExport"];
115
+ readonly put?: never;
116
+ readonly post?: never;
117
+ readonly delete?: never;
118
+ readonly options?: never;
119
+ readonly head?: never;
120
+ readonly patch?: never;
121
+ readonly trace?: never;
122
+ };
123
+ readonly "/users/export/{exportId}/download": {
124
+ readonly parameters: {
125
+ readonly query?: never;
126
+ readonly header?: never;
127
+ readonly path: {
128
+ readonly exportId: components["parameters"]["ExportId"];
129
+ };
130
+ readonly cookie?: never;
131
+ };
132
+ /** Download an ordinary user export */
133
+ readonly get: operations["downloadUserExport"];
134
+ readonly put?: never;
135
+ readonly post?: never;
136
+ readonly delete?: never;
137
+ readonly options?: never;
138
+ readonly head?: never;
139
+ readonly patch?: never;
140
+ readonly trace?: never;
141
+ };
142
+ readonly "/users/export/hashes": {
143
+ readonly parameters: {
144
+ readonly query?: never;
145
+ readonly header?: never;
146
+ readonly path?: never;
147
+ readonly cookie?: never;
148
+ };
149
+ readonly get?: never;
150
+ readonly put?: never;
151
+ /**
152
+ * Start a password-hash user export
153
+ * @description Requires a dedicated secret key whose only scope is users:export_hashes plus a one-time approval created by a freshly reauthenticated workspace owner.
154
+ */
155
+ readonly post: operations["startPasswordHashUserExport"];
156
+ readonly delete?: never;
157
+ readonly options?: never;
158
+ readonly head?: never;
159
+ readonly patch?: never;
160
+ readonly trace?: never;
161
+ };
162
+ readonly "/users/export/hashes/{exportId}": {
163
+ readonly parameters: {
164
+ readonly query?: never;
165
+ readonly header?: never;
166
+ readonly path: {
167
+ readonly exportId: components["parameters"]["ExportId"];
168
+ };
169
+ readonly cookie?: never;
170
+ };
171
+ /** Get a password-hash export */
172
+ readonly get: operations["getPasswordHashUserExport"];
173
+ readonly put?: never;
174
+ readonly post?: never;
175
+ readonly delete?: never;
176
+ readonly options?: never;
177
+ readonly head?: never;
178
+ readonly patch?: never;
179
+ readonly trace?: never;
180
+ };
181
+ readonly "/users/export/hashes/{exportId}/download": {
182
+ readonly parameters: {
183
+ readonly query?: never;
184
+ readonly header?: never;
185
+ readonly path: {
186
+ readonly exportId: components["parameters"]["ExportId"];
187
+ };
188
+ readonly cookie?: never;
189
+ };
190
+ /** Download a password-hash export */
191
+ readonly get: operations["downloadPasswordHashUserExport"];
192
+ readonly put?: never;
193
+ readonly post?: never;
194
+ readonly delete?: never;
195
+ readonly options?: never;
196
+ readonly head?: never;
197
+ readonly patch?: never;
198
+ readonly trace?: never;
199
+ };
200
+ readonly "/imports/dry-run": {
201
+ readonly parameters: {
202
+ readonly query?: never;
203
+ readonly header?: never;
204
+ readonly path?: never;
205
+ readonly cookie?: never;
206
+ };
207
+ readonly get?: never;
208
+ readonly put?: never;
209
+ /**
210
+ * Validate a canonical user import stream without writing users
211
+ * @description The first NDJSON line must be an authowl.user-import.v1 manifest. Every following line must be one canonical user record. Provider-specific exports must be converted by a CLI or dashboard adapter before reaching this endpoint.
212
+ */
213
+ readonly post: operations["dryRunUserImport"];
214
+ readonly delete?: never;
215
+ readonly options?: never;
216
+ readonly head?: never;
217
+ readonly patch?: never;
218
+ readonly trace?: never;
219
+ };
220
+ readonly "/imports": {
221
+ readonly parameters: {
222
+ readonly query?: never;
223
+ readonly header?: never;
224
+ readonly path?: never;
225
+ readonly cookie?: never;
226
+ };
227
+ readonly get?: never;
228
+ readonly put?: never;
229
+ /**
230
+ * Import a canonical user stream
231
+ * @description Valid rows are written under row-level savepoints. Validation and identity conflicts are retained in the downloadable report. Reusing the same source provider, namespace, and external id updates the same AuthOwl user.
232
+ */
233
+ readonly post: operations["createUserImport"];
234
+ readonly delete?: never;
235
+ readonly options?: never;
236
+ readonly head?: never;
237
+ readonly patch?: never;
238
+ readonly trace?: never;
239
+ };
240
+ readonly "/imports/{importId}": {
241
+ readonly parameters: {
242
+ readonly query?: never;
243
+ readonly header?: never;
244
+ readonly path: {
245
+ readonly importId: components["parameters"]["ImportId"];
246
+ };
247
+ readonly cookie?: never;
248
+ };
249
+ /** Get an import batch */
250
+ readonly get: operations["getUserImport"];
251
+ readonly put?: never;
252
+ readonly post?: never;
253
+ readonly delete?: never;
254
+ readonly options?: never;
255
+ readonly head?: never;
256
+ readonly patch?: never;
257
+ readonly trace?: never;
258
+ };
259
+ readonly "/imports/{importId}/report": {
260
+ readonly parameters: {
261
+ readonly query?: never;
262
+ readonly header?: never;
263
+ readonly path: {
264
+ readonly importId: components["parameters"]["ImportId"];
265
+ };
266
+ readonly cookie?: never;
267
+ };
268
+ /** Download an import result report */
269
+ readonly get: operations["downloadUserImportReport"];
270
+ readonly put?: never;
271
+ readonly post?: never;
272
+ readonly delete?: never;
273
+ readonly options?: never;
274
+ readonly head?: never;
275
+ readonly patch?: never;
276
+ readonly trace?: never;
277
+ };
101
278
  readonly "/users/{userId}": {
102
279
  readonly parameters: {
103
280
  readonly query?: never;
@@ -355,6 +532,46 @@ interface paths {
355
532
  readonly patch?: never;
356
533
  readonly trace?: never;
357
534
  };
535
+ readonly "/messages": {
536
+ readonly parameters: {
537
+ readonly query?: never;
538
+ readonly header?: never;
539
+ readonly path?: never;
540
+ readonly cookie?: never;
541
+ };
542
+ /** List privacy-safe message deliveries */
543
+ readonly get: operations["listMessages"];
544
+ readonly put?: never;
545
+ /**
546
+ * Queue one transactional message
547
+ * @description Requires a dedicated secret key whose only scope is messages:send. The provider and credential ownership remain server-side routing concerns.
548
+ */
549
+ readonly post: operations["sendMessage"];
550
+ readonly delete?: never;
551
+ readonly options?: never;
552
+ readonly head?: never;
553
+ readonly patch?: never;
554
+ readonly trace?: never;
555
+ };
556
+ readonly "/messages/{messageId}": {
557
+ readonly parameters: {
558
+ readonly query?: never;
559
+ readonly header?: never;
560
+ readonly path: {
561
+ readonly messageId: string;
562
+ };
563
+ readonly cookie?: never;
564
+ };
565
+ /** Get one privacy-safe message delivery */
566
+ readonly get: operations["getMessage"];
567
+ readonly put?: never;
568
+ readonly post?: never;
569
+ readonly delete?: never;
570
+ readonly options?: never;
571
+ readonly head?: never;
572
+ readonly patch?: never;
573
+ readonly trace?: never;
574
+ };
358
575
  readonly "/events": {
359
576
  readonly parameters: {
360
577
  readonly query?: never;
@@ -619,6 +836,73 @@ interface components {
619
836
  readonly phone?: string | null;
620
837
  readonly banned?: boolean;
621
838
  };
839
+ readonly ImportDryRun: {
840
+ /** Format: uuid */
841
+ readonly id: string;
842
+ /** @constant */
843
+ readonly mode: "dry_run";
844
+ /** @constant */
845
+ readonly status: "validated";
846
+ /** @constant */
847
+ readonly schema_version: "authowl.user-import.v1";
848
+ readonly source: {
849
+ /** @enum {string} */
850
+ readonly provider: "clerk" | "auth0" | "firebase" | "supabase" | "authowl" | "custom";
851
+ readonly namespace: string;
852
+ readonly version: string | null;
853
+ };
854
+ readonly counts: {
855
+ readonly total: number;
856
+ readonly valid: number;
857
+ readonly invalid: number;
858
+ };
859
+ readonly bytes_received: number;
860
+ readonly errors_truncated: boolean;
861
+ readonly errors: readonly {
862
+ readonly line: number;
863
+ /** @enum {string} */
864
+ readonly code: "INVALID_JSON" | "UNEXPECTED_RECORD" | "INVALID_USER" | "DUPLICATE_EXTERNAL_ID";
865
+ readonly path: string | null;
866
+ readonly message: string;
867
+ }[];
868
+ /** Format: date-time */
869
+ readonly created_at: string;
870
+ /** Format: date-time */
871
+ readonly completed_at: string;
872
+ };
873
+ readonly ImportBatch: {
874
+ /** Format: uuid */
875
+ readonly id: string;
876
+ /** @constant */
877
+ readonly mode: "commit";
878
+ /** @constant */
879
+ readonly status: "completed";
880
+ /** @constant */
881
+ readonly schema_version: "authowl.user-import.v1";
882
+ readonly source: {
883
+ /** @enum {string} */
884
+ readonly provider: "clerk" | "auth0" | "firebase" | "supabase" | "authowl" | "custom";
885
+ readonly namespace: string;
886
+ readonly version: string | null;
887
+ };
888
+ readonly counts: {
889
+ readonly total: number;
890
+ readonly valid: number;
891
+ readonly invalid: number;
892
+ readonly created: number;
893
+ readonly updated: number;
894
+ readonly unchanged: number;
895
+ readonly failed: number;
896
+ };
897
+ readonly bytes_received: number;
898
+ readonly errors_truncated: boolean;
899
+ /** Format: date-time */
900
+ readonly report_expires_at: string;
901
+ /** Format: date-time */
902
+ readonly created_at: string;
903
+ /** Format: date-time */
904
+ readonly completed_at: string;
905
+ };
622
906
  /** @description JSON metadata object. Reserved prototype keys and the authowl_ prefix are rejected at every depth. Encoded object size is limited to 8192 bytes. */
623
907
  readonly MetadataObject: {
624
908
  readonly [key: string]: unknown;
@@ -738,10 +1022,71 @@ interface components {
738
1022
  readonly description?: string;
739
1023
  readonly events: readonly components["schemas"]["WebhookSubscriptionEventType"][];
740
1024
  };
1025
+ readonly SendMessage: {
1026
+ readonly to: string;
1027
+ /**
1028
+ * @description Defaults to auto.
1029
+ * @enum {string}
1030
+ */
1031
+ readonly channel?: "sms" | "whatsapp" | "auto";
1032
+ /**
1033
+ * @description Defaults to transactional.
1034
+ * @enum {string}
1035
+ */
1036
+ readonly purpose?: "transactional";
1037
+ readonly template: string;
1038
+ /**
1039
+ * @description Defaults to en.
1040
+ * @enum {string}
1041
+ */
1042
+ readonly locale?: "en" | "ar";
1043
+ readonly variables: {
1044
+ readonly [key: string]: string;
1045
+ };
1046
+ readonly customerReference?: string;
1047
+ };
741
1048
  /** @enum {string} */
742
- readonly WebhookSubscriptionEventType: "user.created" | "user.updated" | "user.deleted" | "user.banned" | "session.created" | "session.updated" | "session.revoked" | "organization.created" | "organization.updated" | "organization.deleted" | "organization_membership.created" | "organization_membership.deleted" | "mfa.enrolled" | "mfa.reset";
1049
+ readonly MessageState: "preparing" | "queued" | "accepted" | "skipped" | "delivered" | "failed" | "unknown" | "canceled";
1050
+ readonly Message: {
1051
+ /** Format: uuid */
1052
+ readonly id: string;
1053
+ readonly state: components["schemas"]["MessageState"];
1054
+ /** @enum {string} */
1055
+ readonly purpose: "transactional" | "auth_otp";
1056
+ /** @enum {string} */
1057
+ readonly requested_channel: "sms" | "whatsapp" | "auto";
1058
+ /** @enum {string|null} */
1059
+ readonly actual_channel: "sms" | "whatsapp" | null;
1060
+ readonly customer_reference: string | null;
1061
+ readonly masked_recipient: string;
1062
+ readonly sms: null | {
1063
+ /** @enum {string|null} */
1064
+ readonly encoding: "gsm7" | "ucs2" | null;
1065
+ readonly segments: number | null;
1066
+ };
1067
+ readonly billing: {
1068
+ /** @enum {string} */
1069
+ readonly credential_mode: "managed" | "byok";
1070
+ readonly unit: string | null;
1071
+ readonly units: number | null;
1072
+ readonly charged_piasters: number;
1073
+ readonly reserved_piasters: number;
1074
+ };
1075
+ readonly failure: null | {
1076
+ readonly code: string;
1077
+ readonly retryable: boolean;
1078
+ };
1079
+ /** Format: date-time */
1080
+ readonly created_at: string;
1081
+ /** Format: date-time */
1082
+ readonly updated_at: string;
1083
+ /** Format: date-time */
1084
+ readonly delivered_at: string | null;
1085
+ };
743
1086
  /** @enum {string} */
744
- readonly WebhookEventType: "user.created" | "user.updated" | "user.deleted" | "user.banned" | "session.created" | "session.updated" | "session.revoked" | "organization.created" | "organization.updated" | "organization.deleted" | "organization_membership.created" | "organization_membership.deleted" | "mfa.enrolled" | "mfa.reset" | "webhook.test";
1087
+ readonly WebhookSubscriptionEventType: "user.created" | "user.updated" | "user.deleted" | "user.banned" | "session.created" | "session.updated" | "session.revoked" | "organization.created" | "organization.updated" | "organization.deleted" | "organization_membership.created" | "organization_membership.deleted" | "mfa.enrolled" | "mfa.reset" | "message.accepted" | "message.skipped" | "message.delivered" | "message.failed";
1088
+ /** @enum {string} */
1089
+ readonly WebhookEventType: "user.created" | "user.updated" | "user.deleted" | "user.banned" | "session.created" | "session.updated" | "session.revoked" | "organization.created" | "organization.updated" | "organization.deleted" | "organization_membership.created" | "organization_membership.deleted" | "mfa.enrolled" | "mfa.reset" | "message.accepted" | "message.skipped" | "message.delivered" | "message.failed" | "webhook.test";
745
1090
  readonly WebhookEndpoint: {
746
1091
  /** Format: uuid */
747
1092
  readonly id: string;
@@ -790,9 +1135,35 @@ interface components {
790
1135
  /** Format: uuid */
791
1136
  readonly id: string;
792
1137
  /** @enum {string} */
1138
+ readonly format: "ndjson" | "csv";
1139
+ /** @enum {string} */
793
1140
  readonly status: "pending" | "processing" | "completed" | "failed";
1141
+ readonly includes_password_hashes: boolean;
1142
+ readonly total_rows: number;
1143
+ readonly artifact_bytes: number;
1144
+ readonly failure_code: string | null;
794
1145
  /** Format: date-time */
795
1146
  readonly created_at: string;
1147
+ /** Format: date-time */
1148
+ readonly completed_at: string | null;
1149
+ /** Format: date-time */
1150
+ readonly expires_at: string | null;
1151
+ readonly download_url: string | null;
1152
+ };
1153
+ readonly ExportRequest: {
1154
+ /**
1155
+ * @default ndjson
1156
+ * @enum {string}
1157
+ */
1158
+ readonly format: "ndjson" | "csv";
1159
+ };
1160
+ readonly HashExportRequest: {
1161
+ /**
1162
+ * @default ndjson
1163
+ * @enum {string}
1164
+ */
1165
+ readonly format: "ndjson" | "csv";
1166
+ readonly approval_token: string;
796
1167
  };
797
1168
  readonly Page: {
798
1169
  readonly data: readonly unknown[];
@@ -825,6 +1196,9 @@ interface components {
825
1196
  readonly DeliveryPage: components["schemas"]["Page"] & {
826
1197
  readonly data?: readonly components["schemas"]["WebhookDelivery"][];
827
1198
  };
1199
+ readonly MessagePage: components["schemas"]["Page"] & {
1200
+ readonly data?: readonly components["schemas"]["Message"][];
1201
+ };
828
1202
  };
829
1203
  responses: {
830
1204
  /** @description Invalid request */
@@ -874,6 +1248,15 @@ interface components {
874
1248
  readonly "application/problem+json": components["schemas"]["Problem"];
875
1249
  };
876
1250
  };
1251
+ /** @description The request conflicts with an existing resource or idempotency record */
1252
+ readonly Conflict: {
1253
+ headers: {
1254
+ readonly [name: string]: unknown;
1255
+ };
1256
+ content: {
1257
+ readonly "application/problem+json": components["schemas"]["Problem"];
1258
+ };
1259
+ };
877
1260
  /** @description Plan rate limit exceeded */
878
1261
  readonly RateLimited: {
879
1262
  headers: {
@@ -887,6 +1270,15 @@ interface components {
887
1270
  readonly "application/problem+json": components["schemas"]["Problem"];
888
1271
  };
889
1272
  };
1273
+ /** @description The canonical stream envelope, encoding, or hard limits are invalid */
1274
+ readonly ImportValidationFailed: {
1275
+ headers: {
1276
+ readonly [name: string]: unknown;
1277
+ };
1278
+ content: {
1279
+ readonly "application/problem+json": components["schemas"]["Problem"];
1280
+ };
1281
+ };
890
1282
  /** @description User page */
891
1283
  readonly UserPage: {
892
1284
  headers: {
@@ -959,73 +1351,293 @@ interface components {
959
1351
  readonly "application/json": components["schemas"]["WebhookPage"];
960
1352
  };
961
1353
  };
962
- /** @description Webhook delivery page */
963
- readonly DeliveryPage: {
964
- headers: {
965
- readonly [name: string]: unknown;
966
- };
967
- content: {
968
- readonly "application/json": components["schemas"]["DeliveryPage"];
1354
+ /** @description Webhook delivery page */
1355
+ readonly DeliveryPage: {
1356
+ headers: {
1357
+ readonly [name: string]: unknown;
1358
+ };
1359
+ content: {
1360
+ readonly "application/json": components["schemas"]["DeliveryPage"];
1361
+ };
1362
+ };
1363
+ };
1364
+ parameters: {
1365
+ readonly Limit: number;
1366
+ readonly Cursor: string;
1367
+ readonly UserId: string;
1368
+ readonly ImportId: string;
1369
+ readonly ExportId: string;
1370
+ readonly SessionId: string;
1371
+ readonly OrganizationId: string;
1372
+ readonly RoleId: string;
1373
+ readonly InvitationId: string;
1374
+ readonly WebhookId: string;
1375
+ readonly DeliveryId: string;
1376
+ };
1377
+ requestBodies: never;
1378
+ headers: never;
1379
+ pathItems: never;
1380
+ }
1381
+ interface operations {
1382
+ readonly getOpenApiDocument: {
1383
+ readonly parameters: {
1384
+ readonly query?: never;
1385
+ readonly header?: never;
1386
+ readonly path?: never;
1387
+ readonly cookie?: never;
1388
+ };
1389
+ readonly requestBody?: never;
1390
+ readonly responses: {
1391
+ /** @description OpenAPI document */
1392
+ readonly 200: {
1393
+ headers: {
1394
+ readonly [name: string]: unknown;
1395
+ };
1396
+ content: {
1397
+ readonly "application/json": Record<string, never>;
1398
+ };
1399
+ };
1400
+ };
1401
+ };
1402
+ readonly listUsers: {
1403
+ readonly parameters: {
1404
+ readonly query?: {
1405
+ readonly limit?: components["parameters"]["Limit"];
1406
+ readonly cursor?: components["parameters"]["Cursor"];
1407
+ readonly query?: string;
1408
+ };
1409
+ readonly header?: never;
1410
+ readonly path?: never;
1411
+ readonly cookie?: never;
1412
+ };
1413
+ readonly requestBody?: never;
1414
+ readonly responses: {
1415
+ readonly 200: components["responses"]["UserPage"];
1416
+ readonly 400: components["responses"]["InvalidRequest"];
1417
+ readonly 401: components["responses"]["Unauthorized"];
1418
+ readonly 403: components["responses"]["Forbidden"];
1419
+ readonly 429: components["responses"]["RateLimited"];
1420
+ };
1421
+ };
1422
+ readonly createUser: {
1423
+ readonly parameters: {
1424
+ readonly query?: never;
1425
+ readonly header?: never;
1426
+ readonly path?: never;
1427
+ readonly cookie?: never;
1428
+ };
1429
+ readonly requestBody: {
1430
+ readonly content: {
1431
+ readonly "application/json": components["schemas"]["CreateUser"];
1432
+ };
1433
+ };
1434
+ readonly responses: {
1435
+ /** @description User created */
1436
+ readonly 201: {
1437
+ headers: {
1438
+ readonly [name: string]: unknown;
1439
+ };
1440
+ content: {
1441
+ readonly "application/json": components["schemas"]["User"];
1442
+ };
1443
+ };
1444
+ readonly 400: components["responses"]["InvalidRequest"];
1445
+ readonly 401: components["responses"]["Unauthorized"];
1446
+ readonly 403: components["responses"]["Forbidden"];
1447
+ readonly 429: components["responses"]["RateLimited"];
1448
+ };
1449
+ };
1450
+ readonly startUserExport: {
1451
+ readonly parameters: {
1452
+ readonly query?: never;
1453
+ readonly header?: never;
1454
+ readonly path?: never;
1455
+ readonly cookie?: never;
1456
+ };
1457
+ readonly requestBody?: {
1458
+ readonly content: {
1459
+ readonly "application/json": components["schemas"]["ExportRequest"];
1460
+ };
1461
+ };
1462
+ readonly responses: {
1463
+ /** @description Export accepted */
1464
+ readonly 202: {
1465
+ headers: {
1466
+ readonly [name: string]: unknown;
1467
+ };
1468
+ content: {
1469
+ readonly "application/json": components["schemas"]["ExportJob"];
1470
+ };
1471
+ };
1472
+ readonly 400: components["responses"]["InvalidRequest"];
1473
+ readonly 401: components["responses"]["Unauthorized"];
1474
+ readonly 403: components["responses"]["Forbidden"];
1475
+ readonly 429: components["responses"]["RateLimited"];
1476
+ };
1477
+ };
1478
+ readonly getUserExport: {
1479
+ readonly parameters: {
1480
+ readonly query?: never;
1481
+ readonly header?: never;
1482
+ readonly path: {
1483
+ readonly exportId: components["parameters"]["ExportId"];
1484
+ };
1485
+ readonly cookie?: never;
1486
+ };
1487
+ readonly requestBody?: never;
1488
+ readonly responses: {
1489
+ /** @description Export job */
1490
+ readonly 200: {
1491
+ headers: {
1492
+ readonly [name: string]: unknown;
1493
+ };
1494
+ content: {
1495
+ readonly "application/json": components["schemas"]["ExportJob"];
1496
+ };
1497
+ };
1498
+ readonly 401: components["responses"]["Unauthorized"];
1499
+ readonly 403: components["responses"]["Forbidden"];
1500
+ readonly 404: components["responses"]["NotFound"];
1501
+ readonly 429: components["responses"]["RateLimited"];
1502
+ };
1503
+ };
1504
+ readonly downloadUserExport: {
1505
+ readonly parameters: {
1506
+ readonly query?: never;
1507
+ readonly header?: never;
1508
+ readonly path: {
1509
+ readonly exportId: components["parameters"]["ExportId"];
1510
+ };
1511
+ readonly cookie?: never;
1512
+ };
1513
+ readonly requestBody?: never;
1514
+ readonly responses: {
1515
+ /** @description CSV or NDJSON export stream */
1516
+ readonly 200: {
1517
+ headers: {
1518
+ readonly [name: string]: unknown;
1519
+ };
1520
+ content: {
1521
+ readonly "text/csv": string;
1522
+ readonly "application/x-ndjson": string;
1523
+ };
1524
+ };
1525
+ readonly 401: components["responses"]["Unauthorized"];
1526
+ readonly 403: components["responses"]["Forbidden"];
1527
+ readonly 404: components["responses"]["NotFound"];
1528
+ readonly 429: components["responses"]["RateLimited"];
1529
+ };
1530
+ };
1531
+ readonly startPasswordHashUserExport: {
1532
+ readonly parameters: {
1533
+ readonly query?: never;
1534
+ readonly header?: never;
1535
+ readonly path?: never;
1536
+ readonly cookie?: never;
1537
+ };
1538
+ readonly requestBody: {
1539
+ readonly content: {
1540
+ readonly "application/json": components["schemas"]["HashExportRequest"];
1541
+ };
1542
+ };
1543
+ readonly responses: {
1544
+ /** @description Privileged export accepted */
1545
+ readonly 202: {
1546
+ headers: {
1547
+ readonly [name: string]: unknown;
1548
+ };
1549
+ content: {
1550
+ readonly "application/json": components["schemas"]["ExportJob"];
1551
+ };
1552
+ };
1553
+ readonly 400: components["responses"]["InvalidRequest"];
1554
+ readonly 401: components["responses"]["Unauthorized"];
1555
+ readonly 403: components["responses"]["Forbidden"];
1556
+ readonly 429: components["responses"]["RateLimited"];
1557
+ };
1558
+ };
1559
+ readonly getPasswordHashUserExport: {
1560
+ readonly parameters: {
1561
+ readonly query?: never;
1562
+ readonly header?: never;
1563
+ readonly path: {
1564
+ readonly exportId: components["parameters"]["ExportId"];
1565
+ };
1566
+ readonly cookie?: never;
1567
+ };
1568
+ readonly requestBody?: never;
1569
+ readonly responses: {
1570
+ /** @description Privileged export job */
1571
+ readonly 200: {
1572
+ headers: {
1573
+ readonly [name: string]: unknown;
1574
+ };
1575
+ content: {
1576
+ readonly "application/json": components["schemas"]["ExportJob"];
1577
+ };
969
1578
  };
1579
+ readonly 401: components["responses"]["Unauthorized"];
1580
+ readonly 403: components["responses"]["Forbidden"];
1581
+ readonly 404: components["responses"]["NotFound"];
1582
+ readonly 429: components["responses"]["RateLimited"];
970
1583
  };
971
1584
  };
972
- parameters: {
973
- readonly Limit: number;
974
- readonly Cursor: string;
975
- readonly UserId: string;
976
- readonly SessionId: string;
977
- readonly OrganizationId: string;
978
- readonly RoleId: string;
979
- readonly InvitationId: string;
980
- readonly WebhookId: string;
981
- readonly DeliveryId: string;
982
- };
983
- requestBodies: never;
984
- headers: never;
985
- pathItems: never;
986
- }
987
- interface operations {
988
- readonly getOpenApiDocument: {
1585
+ readonly downloadPasswordHashUserExport: {
989
1586
  readonly parameters: {
990
1587
  readonly query?: never;
991
1588
  readonly header?: never;
992
- readonly path?: never;
1589
+ readonly path: {
1590
+ readonly exportId: components["parameters"]["ExportId"];
1591
+ };
993
1592
  readonly cookie?: never;
994
1593
  };
995
1594
  readonly requestBody?: never;
996
1595
  readonly responses: {
997
- /** @description OpenAPI document */
1596
+ /** @description Encrypted-at-rest CSV or NDJSON export stream */
998
1597
  readonly 200: {
999
1598
  headers: {
1000
1599
  readonly [name: string]: unknown;
1001
1600
  };
1002
1601
  content: {
1003
- readonly "application/json": Record<string, never>;
1602
+ readonly "text/csv": string;
1603
+ readonly "application/x-ndjson": string;
1004
1604
  };
1005
1605
  };
1606
+ readonly 401: components["responses"]["Unauthorized"];
1607
+ readonly 403: components["responses"]["Forbidden"];
1608
+ readonly 404: components["responses"]["NotFound"];
1609
+ readonly 429: components["responses"]["RateLimited"];
1006
1610
  };
1007
1611
  };
1008
- readonly listUsers: {
1612
+ readonly dryRunUserImport: {
1009
1613
  readonly parameters: {
1010
- readonly query?: {
1011
- readonly limit?: components["parameters"]["Limit"];
1012
- readonly cursor?: components["parameters"]["Cursor"];
1013
- readonly query?: string;
1014
- };
1614
+ readonly query?: never;
1015
1615
  readonly header?: never;
1016
1616
  readonly path?: never;
1017
1617
  readonly cookie?: never;
1018
1618
  };
1019
- readonly requestBody?: never;
1619
+ readonly requestBody: {
1620
+ readonly content: {
1621
+ readonly "application/x-ndjson": string;
1622
+ };
1623
+ };
1020
1624
  readonly responses: {
1021
- readonly 200: components["responses"]["UserPage"];
1022
- readonly 400: components["responses"]["InvalidRequest"];
1625
+ /** @description Validation batch completed */
1626
+ readonly 201: {
1627
+ headers: {
1628
+ readonly [name: string]: unknown;
1629
+ };
1630
+ content: {
1631
+ readonly "application/json": components["schemas"]["ImportDryRun"];
1632
+ };
1633
+ };
1023
1634
  readonly 401: components["responses"]["Unauthorized"];
1024
1635
  readonly 403: components["responses"]["Forbidden"];
1636
+ readonly 422: components["responses"]["ImportValidationFailed"];
1025
1637
  readonly 429: components["responses"]["RateLimited"];
1026
1638
  };
1027
1639
  };
1028
- readonly createUser: {
1640
+ readonly createUserImport: {
1029
1641
  readonly parameters: {
1030
1642
  readonly query?: never;
1031
1643
  readonly header?: never;
@@ -1034,45 +1646,75 @@ interface operations {
1034
1646
  };
1035
1647
  readonly requestBody: {
1036
1648
  readonly content: {
1037
- readonly "application/json": components["schemas"]["CreateUser"];
1649
+ readonly "application/x-ndjson": string;
1038
1650
  };
1039
1651
  };
1040
1652
  readonly responses: {
1041
- /** @description User created */
1653
+ /** @description Import batch completed */
1042
1654
  readonly 201: {
1043
1655
  headers: {
1044
1656
  readonly [name: string]: unknown;
1045
1657
  };
1046
1658
  content: {
1047
- readonly "application/json": components["schemas"]["User"];
1659
+ readonly "application/json": components["schemas"]["ImportBatch"];
1048
1660
  };
1049
1661
  };
1050
- readonly 400: components["responses"]["InvalidRequest"];
1051
1662
  readonly 401: components["responses"]["Unauthorized"];
1052
1663
  readonly 403: components["responses"]["Forbidden"];
1664
+ readonly 422: components["responses"]["ImportValidationFailed"];
1053
1665
  readonly 429: components["responses"]["RateLimited"];
1054
1666
  };
1055
1667
  };
1056
- readonly startUserExport: {
1668
+ readonly getUserImport: {
1057
1669
  readonly parameters: {
1058
1670
  readonly query?: never;
1059
1671
  readonly header?: never;
1060
- readonly path?: never;
1672
+ readonly path: {
1673
+ readonly importId: components["parameters"]["ImportId"];
1674
+ };
1061
1675
  readonly cookie?: never;
1062
1676
  };
1063
1677
  readonly requestBody?: never;
1064
1678
  readonly responses: {
1065
- /** @description Export accepted */
1066
- readonly 202: {
1679
+ /** @description Import batch */
1680
+ readonly 200: {
1067
1681
  headers: {
1068
1682
  readonly [name: string]: unknown;
1069
1683
  };
1070
1684
  content: {
1071
- readonly "application/json": components["schemas"]["ExportJob"];
1685
+ readonly "application/json": components["schemas"]["ImportBatch"];
1686
+ };
1687
+ };
1688
+ readonly 401: components["responses"]["Unauthorized"];
1689
+ readonly 403: components["responses"]["Forbidden"];
1690
+ readonly 404: components["responses"]["NotFound"];
1691
+ readonly 429: components["responses"]["RateLimited"];
1692
+ };
1693
+ };
1694
+ readonly downloadUserImportReport: {
1695
+ readonly parameters: {
1696
+ readonly query?: never;
1697
+ readonly header?: never;
1698
+ readonly path: {
1699
+ readonly importId: components["parameters"]["ImportId"];
1700
+ };
1701
+ readonly cookie?: never;
1702
+ };
1703
+ readonly requestBody?: never;
1704
+ readonly responses: {
1705
+ /** @description One NDJSON result per canonical user row */
1706
+ readonly 200: {
1707
+ headers: {
1708
+ readonly "Content-Disposition"?: string;
1709
+ readonly [name: string]: unknown;
1710
+ };
1711
+ content: {
1712
+ readonly "application/x-ndjson": string;
1072
1713
  };
1073
1714
  };
1074
1715
  readonly 401: components["responses"]["Unauthorized"];
1075
1716
  readonly 403: components["responses"]["Forbidden"];
1717
+ readonly 404: components["responses"]["NotFound"];
1076
1718
  readonly 429: components["responses"]["RateLimited"];
1077
1719
  };
1078
1720
  };
@@ -1797,6 +2439,92 @@ interface operations {
1797
2439
  readonly 429: components["responses"]["RateLimited"];
1798
2440
  };
1799
2441
  };
2442
+ readonly listMessages: {
2443
+ readonly parameters: {
2444
+ readonly query?: {
2445
+ readonly limit?: components["parameters"]["Limit"];
2446
+ readonly cursor?: components["parameters"]["Cursor"];
2447
+ readonly state?: components["schemas"]["MessageState"];
2448
+ readonly channel?: "sms" | "whatsapp" | "auto";
2449
+ };
2450
+ readonly header?: never;
2451
+ readonly path?: never;
2452
+ readonly cookie?: never;
2453
+ };
2454
+ readonly requestBody?: never;
2455
+ readonly responses: {
2456
+ /** @description Message delivery page */
2457
+ readonly 200: {
2458
+ headers: {
2459
+ readonly [name: string]: unknown;
2460
+ };
2461
+ content: {
2462
+ readonly "application/json": components["schemas"]["MessagePage"];
2463
+ };
2464
+ };
2465
+ readonly 400: components["responses"]["InvalidRequest"];
2466
+ readonly 401: components["responses"]["Unauthorized"];
2467
+ readonly 403: components["responses"]["Forbidden"];
2468
+ readonly 429: components["responses"]["RateLimited"];
2469
+ };
2470
+ };
2471
+ readonly sendMessage: {
2472
+ readonly parameters: {
2473
+ readonly query?: never;
2474
+ readonly header: {
2475
+ readonly "Idempotency-Key": string;
2476
+ };
2477
+ readonly path?: never;
2478
+ readonly cookie?: never;
2479
+ };
2480
+ readonly requestBody: {
2481
+ readonly content: {
2482
+ readonly "application/json": components["schemas"]["SendMessage"];
2483
+ };
2484
+ };
2485
+ readonly responses: {
2486
+ /** @description Message durably queued */
2487
+ readonly 202: {
2488
+ headers: {
2489
+ readonly [name: string]: unknown;
2490
+ };
2491
+ content: {
2492
+ readonly "application/json": components["schemas"]["Message"];
2493
+ };
2494
+ };
2495
+ readonly 400: components["responses"]["InvalidRequest"];
2496
+ readonly 401: components["responses"]["Unauthorized"];
2497
+ readonly 403: components["responses"]["Forbidden"];
2498
+ readonly 409: components["responses"]["Conflict"];
2499
+ readonly 429: components["responses"]["RateLimited"];
2500
+ };
2501
+ };
2502
+ readonly getMessage: {
2503
+ readonly parameters: {
2504
+ readonly query?: never;
2505
+ readonly header?: never;
2506
+ readonly path: {
2507
+ readonly messageId: string;
2508
+ };
2509
+ readonly cookie?: never;
2510
+ };
2511
+ readonly requestBody?: never;
2512
+ readonly responses: {
2513
+ /** @description Message delivery */
2514
+ readonly 200: {
2515
+ headers: {
2516
+ readonly [name: string]: unknown;
2517
+ };
2518
+ content: {
2519
+ readonly "application/json": components["schemas"]["Message"];
2520
+ };
2521
+ };
2522
+ readonly 401: components["responses"]["Unauthorized"];
2523
+ readonly 403: components["responses"]["Forbidden"];
2524
+ readonly 404: components["responses"]["NotFound"];
2525
+ readonly 429: components["responses"]["RateLimited"];
2526
+ };
2527
+ };
1800
2528
  readonly listEvents: {
1801
2529
  readonly parameters: {
1802
2530
  readonly query?: {
@@ -2154,7 +2882,7 @@ interface operations {
2154
2882
  * Generated from packages/auth-core/openapi/v1.json.
2155
2883
  * Do not edit directly. Run `pnpm admin:generate`.
2156
2884
  */
2157
- declare const ADMIN_API_SPEC_SHA256 = "dc1953d9d9b9e1f7002fa045f12788280e5865bacfda94b1d133e9580aa87d62";
2885
+ declare const ADMIN_API_SPEC_SHA256 = "3e6f30e32508bbe3d398e6add18d0cf88776b1da5bbc1535570999fc994f8d4d";
2158
2886
  declare const adminOperations: {
2159
2887
  readonly getOpenApiDocument: {
2160
2888
  readonly method: "GET";
@@ -2196,6 +2924,90 @@ declare const adminOperations: {
2196
2924
  };
2197
2925
  };
2198
2926
  };
2927
+ readonly getUserExport: {
2928
+ readonly method: "GET";
2929
+ readonly path: "/users/export/{exportId}";
2930
+ readonly successStatuses: readonly [200];
2931
+ readonly responseSchemas: {
2932
+ readonly "200": {
2933
+ readonly $ref: "#/components/schemas/ExportJob";
2934
+ };
2935
+ };
2936
+ };
2937
+ readonly downloadUserExport: {
2938
+ readonly method: "GET";
2939
+ readonly path: "/users/export/{exportId}/download";
2940
+ readonly successStatuses: readonly [200];
2941
+ readonly responseSchemas: {
2942
+ readonly "200": null;
2943
+ };
2944
+ };
2945
+ readonly startPasswordHashUserExport: {
2946
+ readonly method: "POST";
2947
+ readonly path: "/users/export/hashes";
2948
+ readonly successStatuses: readonly [202];
2949
+ readonly responseSchemas: {
2950
+ readonly "202": {
2951
+ readonly $ref: "#/components/schemas/ExportJob";
2952
+ };
2953
+ };
2954
+ };
2955
+ readonly getPasswordHashUserExport: {
2956
+ readonly method: "GET";
2957
+ readonly path: "/users/export/hashes/{exportId}";
2958
+ readonly successStatuses: readonly [200];
2959
+ readonly responseSchemas: {
2960
+ readonly "200": {
2961
+ readonly $ref: "#/components/schemas/ExportJob";
2962
+ };
2963
+ };
2964
+ };
2965
+ readonly downloadPasswordHashUserExport: {
2966
+ readonly method: "GET";
2967
+ readonly path: "/users/export/hashes/{exportId}/download";
2968
+ readonly successStatuses: readonly [200];
2969
+ readonly responseSchemas: {
2970
+ readonly "200": null;
2971
+ };
2972
+ };
2973
+ readonly dryRunUserImport: {
2974
+ readonly method: "POST";
2975
+ readonly path: "/imports/dry-run";
2976
+ readonly successStatuses: readonly [201];
2977
+ readonly responseSchemas: {
2978
+ readonly "201": {
2979
+ readonly $ref: "#/components/schemas/ImportDryRun";
2980
+ };
2981
+ };
2982
+ };
2983
+ readonly createUserImport: {
2984
+ readonly method: "POST";
2985
+ readonly path: "/imports";
2986
+ readonly successStatuses: readonly [201];
2987
+ readonly responseSchemas: {
2988
+ readonly "201": {
2989
+ readonly $ref: "#/components/schemas/ImportBatch";
2990
+ };
2991
+ };
2992
+ };
2993
+ readonly getUserImport: {
2994
+ readonly method: "GET";
2995
+ readonly path: "/imports/{importId}";
2996
+ readonly successStatuses: readonly [200];
2997
+ readonly responseSchemas: {
2998
+ readonly "200": {
2999
+ readonly $ref: "#/components/schemas/ImportBatch";
3000
+ };
3001
+ };
3002
+ };
3003
+ readonly downloadUserImportReport: {
3004
+ readonly method: "GET";
3005
+ readonly path: "/imports/{importId}/report";
3006
+ readonly successStatuses: readonly [200];
3007
+ readonly responseSchemas: {
3008
+ readonly "200": null;
3009
+ };
3010
+ };
2199
3011
  readonly getUser: {
2200
3012
  readonly method: "GET";
2201
3013
  readonly path: "/users/{userId}";
@@ -2461,6 +3273,36 @@ declare const adminOperations: {
2461
3273
  readonly "204": null;
2462
3274
  };
2463
3275
  };
3276
+ readonly listMessages: {
3277
+ readonly method: "GET";
3278
+ readonly path: "/messages";
3279
+ readonly successStatuses: readonly [200];
3280
+ readonly responseSchemas: {
3281
+ readonly "200": {
3282
+ readonly $ref: "#/components/schemas/MessagePage";
3283
+ };
3284
+ };
3285
+ };
3286
+ readonly sendMessage: {
3287
+ readonly method: "POST";
3288
+ readonly path: "/messages";
3289
+ readonly successStatuses: readonly [202];
3290
+ readonly responseSchemas: {
3291
+ readonly "202": {
3292
+ readonly $ref: "#/components/schemas/Message";
3293
+ };
3294
+ };
3295
+ };
3296
+ readonly getMessage: {
3297
+ readonly method: "GET";
3298
+ readonly path: "/messages/{messageId}";
3299
+ readonly successStatuses: readonly [200];
3300
+ readonly responseSchemas: {
3301
+ readonly "200": {
3302
+ readonly $ref: "#/components/schemas/Message";
3303
+ };
3304
+ };
3305
+ };
2464
3306
  readonly listEvents: {
2465
3307
  readonly method: "GET";
2466
3308
  readonly path: "/events";
@@ -2603,7 +3445,7 @@ declare const adminOperations: {
2603
3445
  type AdminOperationId = keyof typeof adminOperations;
2604
3446
 
2605
3447
  type Operation = operations[AdminOperationId];
2606
- type ParameterKind = 'query' | 'path';
3448
+ type ParameterKind = 'query' | 'path' | 'header';
2607
3449
  type ParameterInput<O extends Operation, K extends ParameterKind> = O extends {
2608
3450
  parameters: infer P;
2609
3451
  } ? K extends keyof P ? [NonNullable<P[K]>] extends [never] ? object : undefined extends P[K] ? {
@@ -2642,7 +3484,7 @@ type ResponseBody<Response> = Response extends {
2642
3484
  type Simplify<T> = {
2643
3485
  [K in keyof T]: T[K];
2644
3486
  } & object;
2645
- type AdminOperationInput<Id extends AdminOperationId> = Simplify<ParameterInput<operations[Id], 'path'> & ParameterInput<operations[Id], 'query'> & BodyInput<operations[Id]> & {
3487
+ type AdminOperationInput<Id extends AdminOperationId> = Simplify<ParameterInput<operations[Id], 'path'> & ParameterInput<operations[Id], 'query'> & ParameterInput<operations[Id], 'header'> & BodyInput<operations[Id]> & {
2646
3488
  signal?: AbortSignal;
2647
3489
  }>;
2648
3490
  type AdminOperationResult<Id extends AdminOperationId> = ResponseBody<SuccessResponse<operations[Id]>>;