@authowl/core 0.11.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
@@ -1,5 +1,6 @@
1
- import { O as OrganizationMembership, a as TransportErrorKind, H as HasParams } from './transport-BObDKlIh.js';
2
- export { A as AuthConfig, R as ResolvedAuthConfig, r as resolveConfig, s as sessionCookieName } from './transport-BObDKlIh.js';
1
+ import { O as OrganizationMembership, H as HasParams } from './organization-membership-B3m6PbmO.js';
2
+ export { A as AuthConfig, R as ResolvedAuthConfig, r as resolveConfig, s as sessionCookieName } from './organization-membership-B3m6PbmO.js';
3
+ import { a as TransportErrorKind } from './transport-DcWDTRd4.js';
3
4
 
4
5
  /**
5
6
  * Stateless verification of an AuthOwl project JWT for SERVER-side authorization
@@ -89,7 +90,10 @@ interface paths {
89
90
  };
90
91
  readonly get?: never;
91
92
  readonly put?: never;
92
- /** 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
+ */
93
97
  readonly post: operations["startUserExport"];
94
98
  readonly delete?: never;
95
99
  readonly options?: never;
@@ -97,6 +101,180 @@ interface paths {
97
101
  readonly patch?: never;
98
102
  readonly trace?: never;
99
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
+ };
100
278
  readonly "/users/{userId}": {
101
279
  readonly parameters: {
102
280
  readonly query?: never;
@@ -354,6 +532,46 @@ interface paths {
354
532
  readonly patch?: never;
355
533
  readonly trace?: never;
356
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
+ };
357
575
  readonly "/events": {
358
576
  readonly parameters: {
359
577
  readonly query?: never;
@@ -618,6 +836,73 @@ interface components {
618
836
  readonly phone?: string | null;
619
837
  readonly banned?: boolean;
620
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
+ };
621
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. */
622
907
  readonly MetadataObject: {
623
908
  readonly [key: string]: unknown;
@@ -737,10 +1022,71 @@ interface components {
737
1022
  readonly description?: string;
738
1023
  readonly events: readonly components["schemas"]["WebhookSubscriptionEventType"][];
739
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
+ };
740
1048
  /** @enum {string} */
741
- 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
+ };
742
1086
  /** @enum {string} */
743
- 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";
744
1090
  readonly WebhookEndpoint: {
745
1091
  /** Format: uuid */
746
1092
  readonly id: string;
@@ -789,9 +1135,35 @@ interface components {
789
1135
  /** Format: uuid */
790
1136
  readonly id: string;
791
1137
  /** @enum {string} */
1138
+ readonly format: "ndjson" | "csv";
1139
+ /** @enum {string} */
792
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;
793
1145
  /** Format: date-time */
794
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;
795
1167
  };
796
1168
  readonly Page: {
797
1169
  readonly data: readonly unknown[];
@@ -824,6 +1196,9 @@ interface components {
824
1196
  readonly DeliveryPage: components["schemas"]["Page"] & {
825
1197
  readonly data?: readonly components["schemas"]["WebhookDelivery"][];
826
1198
  };
1199
+ readonly MessagePage: components["schemas"]["Page"] & {
1200
+ readonly data?: readonly components["schemas"]["Message"][];
1201
+ };
827
1202
  };
828
1203
  responses: {
829
1204
  /** @description Invalid request */
@@ -873,6 +1248,15 @@ interface components {
873
1248
  readonly "application/problem+json": components["schemas"]["Problem"];
874
1249
  };
875
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
+ };
876
1260
  /** @description Plan rate limit exceeded */
877
1261
  readonly RateLimited: {
878
1262
  headers: {
@@ -886,6 +1270,15 @@ interface components {
886
1270
  readonly "application/problem+json": components["schemas"]["Problem"];
887
1271
  };
888
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
+ };
889
1282
  /** @description User page */
890
1283
  readonly UserPage: {
891
1284
  headers: {
@@ -958,73 +1351,293 @@ interface components {
958
1351
  readonly "application/json": components["schemas"]["WebhookPage"];
959
1352
  };
960
1353
  };
961
- /** @description Webhook delivery page */
962
- readonly DeliveryPage: {
963
- headers: {
964
- readonly [name: string]: unknown;
965
- };
966
- content: {
967
- 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
+ };
968
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"];
969
1583
  };
970
1584
  };
971
- parameters: {
972
- readonly Limit: number;
973
- readonly Cursor: string;
974
- readonly UserId: string;
975
- readonly SessionId: string;
976
- readonly OrganizationId: string;
977
- readonly RoleId: string;
978
- readonly InvitationId: string;
979
- readonly WebhookId: string;
980
- readonly DeliveryId: string;
981
- };
982
- requestBodies: never;
983
- headers: never;
984
- pathItems: never;
985
- }
986
- interface operations {
987
- readonly getOpenApiDocument: {
1585
+ readonly downloadPasswordHashUserExport: {
988
1586
  readonly parameters: {
989
1587
  readonly query?: never;
990
1588
  readonly header?: never;
991
- readonly path?: never;
1589
+ readonly path: {
1590
+ readonly exportId: components["parameters"]["ExportId"];
1591
+ };
992
1592
  readonly cookie?: never;
993
1593
  };
994
1594
  readonly requestBody?: never;
995
1595
  readonly responses: {
996
- /** @description OpenAPI document */
1596
+ /** @description Encrypted-at-rest CSV or NDJSON export stream */
997
1597
  readonly 200: {
998
1598
  headers: {
999
1599
  readonly [name: string]: unknown;
1000
1600
  };
1001
1601
  content: {
1002
- readonly "application/json": Record<string, never>;
1602
+ readonly "text/csv": string;
1603
+ readonly "application/x-ndjson": string;
1003
1604
  };
1004
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"];
1005
1610
  };
1006
1611
  };
1007
- readonly listUsers: {
1612
+ readonly dryRunUserImport: {
1008
1613
  readonly parameters: {
1009
- readonly query?: {
1010
- readonly limit?: components["parameters"]["Limit"];
1011
- readonly cursor?: components["parameters"]["Cursor"];
1012
- readonly query?: string;
1013
- };
1614
+ readonly query?: never;
1014
1615
  readonly header?: never;
1015
1616
  readonly path?: never;
1016
1617
  readonly cookie?: never;
1017
1618
  };
1018
- readonly requestBody?: never;
1619
+ readonly requestBody: {
1620
+ readonly content: {
1621
+ readonly "application/x-ndjson": string;
1622
+ };
1623
+ };
1019
1624
  readonly responses: {
1020
- readonly 200: components["responses"]["UserPage"];
1021
- 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
+ };
1022
1634
  readonly 401: components["responses"]["Unauthorized"];
1023
1635
  readonly 403: components["responses"]["Forbidden"];
1636
+ readonly 422: components["responses"]["ImportValidationFailed"];
1024
1637
  readonly 429: components["responses"]["RateLimited"];
1025
1638
  };
1026
1639
  };
1027
- readonly createUser: {
1640
+ readonly createUserImport: {
1028
1641
  readonly parameters: {
1029
1642
  readonly query?: never;
1030
1643
  readonly header?: never;
@@ -1033,45 +1646,75 @@ interface operations {
1033
1646
  };
1034
1647
  readonly requestBody: {
1035
1648
  readonly content: {
1036
- readonly "application/json": components["schemas"]["CreateUser"];
1649
+ readonly "application/x-ndjson": string;
1037
1650
  };
1038
1651
  };
1039
1652
  readonly responses: {
1040
- /** @description User created */
1653
+ /** @description Import batch completed */
1041
1654
  readonly 201: {
1042
1655
  headers: {
1043
1656
  readonly [name: string]: unknown;
1044
1657
  };
1045
1658
  content: {
1046
- readonly "application/json": components["schemas"]["User"];
1659
+ readonly "application/json": components["schemas"]["ImportBatch"];
1047
1660
  };
1048
1661
  };
1049
- readonly 400: components["responses"]["InvalidRequest"];
1050
1662
  readonly 401: components["responses"]["Unauthorized"];
1051
1663
  readonly 403: components["responses"]["Forbidden"];
1664
+ readonly 422: components["responses"]["ImportValidationFailed"];
1052
1665
  readonly 429: components["responses"]["RateLimited"];
1053
1666
  };
1054
1667
  };
1055
- readonly startUserExport: {
1668
+ readonly getUserImport: {
1056
1669
  readonly parameters: {
1057
1670
  readonly query?: never;
1058
1671
  readonly header?: never;
1059
- readonly path?: never;
1672
+ readonly path: {
1673
+ readonly importId: components["parameters"]["ImportId"];
1674
+ };
1060
1675
  readonly cookie?: never;
1061
1676
  };
1062
1677
  readonly requestBody?: never;
1063
1678
  readonly responses: {
1064
- /** @description Export accepted */
1065
- readonly 202: {
1679
+ /** @description Import batch */
1680
+ readonly 200: {
1066
1681
  headers: {
1067
1682
  readonly [name: string]: unknown;
1068
1683
  };
1069
1684
  content: {
1070
- 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;
1071
1713
  };
1072
1714
  };
1073
1715
  readonly 401: components["responses"]["Unauthorized"];
1074
1716
  readonly 403: components["responses"]["Forbidden"];
1717
+ readonly 404: components["responses"]["NotFound"];
1075
1718
  readonly 429: components["responses"]["RateLimited"];
1076
1719
  };
1077
1720
  };
@@ -1796,6 +2439,92 @@ interface operations {
1796
2439
  readonly 429: components["responses"]["RateLimited"];
1797
2440
  };
1798
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
+ };
1799
2528
  readonly listEvents: {
1800
2529
  readonly parameters: {
1801
2530
  readonly query?: {
@@ -2153,7 +2882,7 @@ interface operations {
2153
2882
  * Generated from packages/auth-core/openapi/v1.json.
2154
2883
  * Do not edit directly. Run `pnpm admin:generate`.
2155
2884
  */
2156
- declare const ADMIN_API_SPEC_SHA256 = "dc1953d9d9b9e1f7002fa045f12788280e5865bacfda94b1d133e9580aa87d62";
2885
+ declare const ADMIN_API_SPEC_SHA256 = "3e6f30e32508bbe3d398e6add18d0cf88776b1da5bbc1535570999fc994f8d4d";
2157
2886
  declare const adminOperations: {
2158
2887
  readonly getOpenApiDocument: {
2159
2888
  readonly method: "GET";
@@ -2195,6 +2924,90 @@ declare const adminOperations: {
2195
2924
  };
2196
2925
  };
2197
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
+ };
2198
3011
  readonly getUser: {
2199
3012
  readonly method: "GET";
2200
3013
  readonly path: "/users/{userId}";
@@ -2460,6 +3273,36 @@ declare const adminOperations: {
2460
3273
  readonly "204": null;
2461
3274
  };
2462
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
+ };
2463
3306
  readonly listEvents: {
2464
3307
  readonly method: "GET";
2465
3308
  readonly path: "/events";
@@ -2602,7 +3445,7 @@ declare const adminOperations: {
2602
3445
  type AdminOperationId = keyof typeof adminOperations;
2603
3446
 
2604
3447
  type Operation = operations[AdminOperationId];
2605
- type ParameterKind = 'query' | 'path';
3448
+ type ParameterKind = 'query' | 'path' | 'header';
2606
3449
  type ParameterInput<O extends Operation, K extends ParameterKind> = O extends {
2607
3450
  parameters: infer P;
2608
3451
  } ? K extends keyof P ? [NonNullable<P[K]>] extends [never] ? object : undefined extends P[K] ? {
@@ -2641,7 +3484,7 @@ type ResponseBody<Response> = Response extends {
2641
3484
  type Simplify<T> = {
2642
3485
  [K in keyof T]: T[K];
2643
3486
  } & object;
2644
- 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]> & {
2645
3488
  signal?: AbortSignal;
2646
3489
  }>;
2647
3490
  type AdminOperationResult<Id extends AdminOperationId> = ResponseBody<SuccessResponse<operations[Id]>>;