@atlasauth/cli 0.11.0 → 0.12.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.
Files changed (127) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/dist/args.d.ts +106 -0
  3. package/dist/args.js +38 -0
  4. package/dist/args.js.map +1 -1
  5. package/dist/commands/init.js +13 -8
  6. package/dist/commands/init.js.map +1 -1
  7. package/dist/commands/migrate.d.ts +6 -2
  8. package/dist/commands/migrate.js +13 -3
  9. package/dist/commands/migrate.js.map +1 -1
  10. package/dist/help.d.ts +1 -1
  11. package/dist/help.js +38 -0
  12. package/dist/help.js.map +1 -1
  13. package/dist/migrate/auth0/plugin.d.ts +2 -0
  14. package/dist/migrate/auth0/plugin.js +126 -0
  15. package/dist/migrate/auth0/plugin.js.map +1 -0
  16. package/dist/migrate/clerk/plugin.d.ts +2 -0
  17. package/dist/migrate/clerk/plugin.js +76 -0
  18. package/dist/migrate/clerk/plugin.js.map +1 -0
  19. package/dist/migrate/descope/plugin.d.ts +2 -0
  20. package/dist/migrate/descope/plugin.js +83 -0
  21. package/dist/migrate/descope/plugin.js.map +1 -0
  22. package/dist/migrate/export/auth0-config.d.ts +29 -0
  23. package/dist/migrate/export/auth0-config.js +249 -0
  24. package/dist/migrate/export/auth0-config.js.map +1 -0
  25. package/dist/migrate/export/auth0.d.ts +62 -0
  26. package/dist/migrate/export/auth0.js +575 -0
  27. package/dist/migrate/export/auth0.js.map +1 -0
  28. package/dist/migrate/export/clerk-config.d.ts +26 -0
  29. package/dist/migrate/export/clerk-config.js +227 -0
  30. package/dist/migrate/export/clerk-config.js.map +1 -0
  31. package/dist/migrate/export/clerk.d.ts +46 -0
  32. package/dist/migrate/export/clerk.js +486 -0
  33. package/dist/migrate/export/clerk.js.map +1 -0
  34. package/dist/migrate/export/descope.d.ts +35 -0
  35. package/dist/migrate/export/descope.js +208 -0
  36. package/dist/migrate/export/descope.js.map +1 -0
  37. package/dist/migrate/export/fake-vendor.test-helper.d.ts +27 -0
  38. package/dist/migrate/export/fake-vendor.test-helper.js +41 -0
  39. package/dist/migrate/export/fake-vendor.test-helper.js.map +1 -0
  40. package/dist/migrate/export/frameworks/app-users.d.ts +42 -0
  41. package/dist/migrate/export/frameworks/app-users.js +161 -0
  42. package/dist/migrate/export/frameworks/app-users.js.map +1 -0
  43. package/dist/migrate/export/frameworks/authjs.d.ts +41 -0
  44. package/dist/migrate/export/frameworks/authjs.js +146 -0
  45. package/dist/migrate/export/frameworks/authjs.js.map +1 -0
  46. package/dist/migrate/export/frameworks/devise.d.ts +39 -0
  47. package/dist/migrate/export/frameworks/devise.js +218 -0
  48. package/dist/migrate/export/frameworks/devise.js.map +1 -0
  49. package/dist/migrate/export/frameworks/django.d.ts +45 -0
  50. package/dist/migrate/export/frameworks/django.js +315 -0
  51. package/dist/migrate/export/frameworks/django.js.map +1 -0
  52. package/dist/migrate/export/frameworks/lucia.d.ts +42 -0
  53. package/dist/migrate/export/frameworks/lucia.js +263 -0
  54. package/dist/migrate/export/frameworks/lucia.js.map +1 -0
  55. package/dist/migrate/export/frameworks/tables.d.ts +90 -0
  56. package/dist/migrate/export/frameworks/tables.js +325 -0
  57. package/dist/migrate/export/frameworks/tables.js.map +1 -0
  58. package/dist/migrate/export/frameworks/webauthn.d.ts +25 -0
  59. package/dist/migrate/export/frameworks/webauthn.js +130 -0
  60. package/dist/migrate/export/frameworks/webauthn.js.map +1 -0
  61. package/dist/migrate/export/kinde-descope-config.d.ts +38 -0
  62. package/dist/migrate/export/kinde-descope-config.js +172 -0
  63. package/dist/migrate/export/kinde-descope-config.js.map +1 -0
  64. package/dist/migrate/export/kinde.d.ts +57 -0
  65. package/dist/migrate/export/kinde.js +333 -0
  66. package/dist/migrate/export/kinde.js.map +1 -0
  67. package/dist/migrate/export/okta-config.d.ts +30 -0
  68. package/dist/migrate/export/okta-config.js +205 -0
  69. package/dist/migrate/export/okta-config.js.map +1 -0
  70. package/dist/migrate/export/okta.d.ts +43 -0
  71. package/dist/migrate/export/okta.js +337 -0
  72. package/dist/migrate/export/okta.js.map +1 -0
  73. package/dist/migrate/export/plugin-kit.d.ts +25 -0
  74. package/dist/migrate/export/plugin-kit.js +82 -0
  75. package/dist/migrate/export/plugin-kit.js.map +1 -0
  76. package/dist/migrate/export/record-set.d.ts +44 -0
  77. package/dist/migrate/export/record-set.js +98 -0
  78. package/dist/migrate/export/record-set.js.map +1 -0
  79. package/dist/migrate/export/translate-kit.d.ts +46 -0
  80. package/dist/migrate/export/translate-kit.js +148 -0
  81. package/dist/migrate/export/translate-kit.js.map +1 -0
  82. package/dist/migrate/export/vendor-http.d.ts +46 -0
  83. package/dist/migrate/export/vendor-http.js +138 -0
  84. package/dist/migrate/export/vendor-http.js.map +1 -0
  85. package/dist/migrate/export/zip.d.ts +8 -0
  86. package/dist/migrate/export/zip.js +66 -0
  87. package/dist/migrate/export/zip.js.map +1 -0
  88. package/dist/migrate/framework/builtins.d.ts +2 -0
  89. package/dist/migrate/framework/builtins.js +23 -0
  90. package/dist/migrate/framework/builtins.js.map +1 -0
  91. package/dist/migrate/framework/commands.d.ts +20 -0
  92. package/dist/migrate/framework/commands.js +58 -0
  93. package/dist/migrate/framework/commands.js.map +1 -0
  94. package/dist/migrate/framework/custom.d.ts +12 -0
  95. package/dist/migrate/framework/custom.js +96 -0
  96. package/dist/migrate/framework/custom.js.map +1 -0
  97. package/dist/migrate/framework/orchestrator.d.ts +113 -0
  98. package/dist/migrate/framework/orchestrator.js +531 -0
  99. package/dist/migrate/framework/orchestrator.js.map +1 -0
  100. package/dist/migrate/framework/plugin.d.ts +165 -0
  101. package/dist/migrate/framework/plugin.js +3 -0
  102. package/dist/migrate/framework/plugin.js.map +1 -0
  103. package/dist/migrate/framework/registry.d.ts +11 -0
  104. package/dist/migrate/framework/registry.js +44 -0
  105. package/dist/migrate/framework/registry.js.map +1 -0
  106. package/dist/migrate/framework/report.d.ts +17 -0
  107. package/dist/migrate/framework/report.js +103 -0
  108. package/dist/migrate/framework/report.js.map +1 -0
  109. package/dist/migrate/frameworks/plugins.d.ts +29 -0
  110. package/dist/migrate/frameworks/plugins.js +402 -0
  111. package/dist/migrate/frameworks/plugins.js.map +1 -0
  112. package/dist/migrate/frameworks/report.d.ts +92 -0
  113. package/dist/migrate/frameworks/report.js +207 -0
  114. package/dist/migrate/frameworks/report.js.map +1 -0
  115. package/dist/migrate/frameworks/translate-js.d.ts +5 -0
  116. package/dist/migrate/frameworks/translate-js.js +503 -0
  117. package/dist/migrate/frameworks/translate-js.js.map +1 -0
  118. package/dist/migrate/frameworks/translate-rails-django.d.ts +3 -0
  119. package/dist/migrate/frameworks/translate-rails-django.js +1391 -0
  120. package/dist/migrate/frameworks/translate-rails-django.js.map +1 -0
  121. package/dist/migrate/kinde/plugin.d.ts +2 -0
  122. package/dist/migrate/kinde/plugin.js +105 -0
  123. package/dist/migrate/kinde/plugin.js.map +1 -0
  124. package/dist/migrate/okta/plugin.d.ts +2 -0
  125. package/dist/migrate/okta/plugin.js +105 -0
  126. package/dist/migrate/okta/plugin.js.map +1 -0
  127. package/package.json +5 -4
@@ -0,0 +1,575 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AUTH0_EXPORT_FIELDS = void 0;
4
+ exports.exportAuth0 = exportAuth0;
5
+ exports.managementToken = managementToken;
6
+ exports.parseLines = parseLines;
7
+ exports.roleKey = roleKey;
8
+ exports.auth0CustomHash = auth0CustomHash;
9
+ const node_zlib_1 = require("node:zlib");
10
+ const record_set_1 = require("./record-set");
11
+ const vendor_http_1 = require("./vendor-http");
12
+ /** Fields requested from the export job (json format allows whole metadata objects). */
13
+ exports.AUTH0_EXPORT_FIELDS = [
14
+ 'user_id',
15
+ 'email',
16
+ 'email_verified',
17
+ 'username',
18
+ 'phone_number',
19
+ 'phone_verified',
20
+ 'given_name',
21
+ 'family_name',
22
+ 'name',
23
+ 'nickname',
24
+ 'picture',
25
+ 'identities',
26
+ 'app_metadata',
27
+ 'user_metadata',
28
+ 'created_at',
29
+ 'last_login',
30
+ 'blocked',
31
+ ];
32
+ const ENTERPRISE_STRATEGIES = ['samlp', 'oidc', 'waad', 'adfs', 'okta', 'pingfederate', 'google-apps', 'ad'];
33
+ async function exportAuth0(opts) {
34
+ const set = new record_set_1.RecordSet();
35
+ const domain = opts.domain.replace(/^https?:\/\//, '').replace(/\/+$/, '');
36
+ if (!/^[a-z0-9.-]+$/i.test(domain))
37
+ throw new Error(`Not an Auth0 domain: ${opts.domain}`);
38
+ const progress = opts.onProgress ?? (() => undefined);
39
+ const sleep = opts.sleep ?? ((ms) => new Promise((r) => setTimeout(r, ms)));
40
+ const fetchImpl = opts.fetchImpl ?? fetch;
41
+ let token = opts.token;
42
+ const http = new vendor_http_1.VendorHttp({
43
+ vendor: 'Auth0',
44
+ baseUrl: `https://${domain}/api/v2`,
45
+ headers: async () => ({ authorization: `Bearer ${(token ??= await managementToken(domain, opts, fetchImpl))}` }),
46
+ fetchImpl,
47
+ sleep,
48
+ });
49
+ // Offline: only the files (users + hashes), no Management API calls at all.
50
+ const online = Boolean(opts.token || (opts.clientId && opts.clientSecret));
51
+ if (!online && opts.usersText === undefined) {
52
+ throw new Error('Auth0 export needs a Management API token (or M2M client id + secret), or a user export file.');
53
+ }
54
+ if (!online)
55
+ set.warn('Exported from files only: organizations, roles and enterprise connections need Management API access.');
56
+ const list = async (fn) => (online ? fn() : []);
57
+ // Enterprise connections first: identities point at them by name.
58
+ progress('connections');
59
+ const connectionIds = new Map();
60
+ for (const c of await list(() => pageAll(http, `/connections?${ENTERPRISE_STRATEGIES.map((s) => `strategy=${s}`).join('&')}`, 'connections'))) {
61
+ const added = addConnection(set, c, domain);
62
+ if (added)
63
+ connectionIds.set((0, record_set_1.str)(c.name), added);
64
+ }
65
+ progress('organizations');
66
+ const orgs = await list(() => checkpointAll(http, '/organizations', 'organizations'));
67
+ for (const o of orgs) {
68
+ const id = (0, record_set_1.str)(o.id);
69
+ const name = (0, record_set_1.str)(o.display_name) ?? (0, record_set_1.str)(o.name);
70
+ if (!id || !name)
71
+ continue;
72
+ set.add('organization', (0, record_set_1.compact)({
73
+ id,
74
+ name,
75
+ slug: (0, record_set_1.str)(o.name),
76
+ image_url: (0, record_set_1.str)((0, record_set_1.isObj)(o.branding) ? o.branding.logo_url : undefined),
77
+ public_metadata: (0, record_set_1.bag)(o.metadata),
78
+ }));
79
+ }
80
+ progress('roles');
81
+ const roles = await list(() => pageAll(http, '/roles', 'roles'));
82
+ const roleKeyById = new Map();
83
+ const userRoles = new Map();
84
+ for (const r of roles) {
85
+ const id = (0, record_set_1.str)(r.id);
86
+ const name = (0, record_set_1.str)(r.name);
87
+ if (!id || !name)
88
+ continue;
89
+ const key = roleKey(name);
90
+ roleKeyById.set(id, key);
91
+ const permissions = (await pageAll(http, `/roles/${id}/permissions`, 'permissions'))
92
+ .map((p) => (0, record_set_1.str)(p.permission_name))
93
+ .filter((p) => !!p);
94
+ set.add('role', (0, record_set_1.compact)({ key, name, description: (0, record_set_1.str)(r.description), scope: 'app', permissions }), `app:${key}`);
95
+ if (orgs.length)
96
+ set.add('role', (0, record_set_1.compact)({ key, name, description: (0, record_set_1.str)(r.description), scope: 'organization', permissions }), `org:${key}`);
97
+ for (const u of await checkpointAll(http, `/roles/${id}/users`, 'users')) {
98
+ const uid = (0, record_set_1.str)(u.user_id);
99
+ if (uid)
100
+ userRoles.set(uid, [...(userRoles.get(uid) ?? []), key]);
101
+ }
102
+ }
103
+ progress('users');
104
+ const userLines = opts.usersText !== undefined ? parseLines(opts.usersText) : await runExportJob(http, opts, fetchImpl, sleep, progress);
105
+ const secrets = opts.hashesText !== undefined ? indexHashes(parseLines(opts.hashesText)) : null;
106
+ const userIds = new Set();
107
+ let withHash = 0;
108
+ for (const u of userLines) {
109
+ const id = (0, record_set_1.str)(u.user_id);
110
+ if (!id)
111
+ continue;
112
+ const secret = secrets ? (secrets.byId.get(id) ?? secrets.byEmail.get((0, record_set_1.str)(u.email)?.toLowerCase() ?? '')) : undefined;
113
+ if (addUser(set, u, { roles: userRoles.get(id), secret, connectionIds })) {
114
+ userIds.add(id);
115
+ if (secret?.password)
116
+ withHash++;
117
+ }
118
+ }
119
+ const dbUsers = set.list('user').filter((u) => u.id.startsWith('auth0|')).length;
120
+ if (!secrets && dbUsers > 0) {
121
+ set.warn(`${dbUsers} database user(s) without password hashes: Auth0 releases hashes only through a support ticket. Import them later with --auth0-hashes-file, or turn on the auth0 lazy-migration preset so each password moves on its first sign-in.`);
122
+ }
123
+ else if (secrets && withHash < dbUsers) {
124
+ set.omit('password', 'no row in the hash export for this database user', dbUsers - withHash);
125
+ }
126
+ if (opts.authenticationMethods && online) {
127
+ progress('authentication methods');
128
+ for (const id of userIds)
129
+ await addAuthenticationMethods(set, http, id, opts.rpId ?? domain);
130
+ }
131
+ else {
132
+ set.warn('Second factors and passkeys were not read (pass --authentication-methods). Without them, users re-enrol MFA in Atlas.');
133
+ }
134
+ progress('organization members');
135
+ for (const o of orgs) {
136
+ const orgId = (0, record_set_1.str)(o.id);
137
+ if (!orgId)
138
+ continue;
139
+ for (const m of await checkpointAll(http, `/organizations/${orgId}/members?fields=user_id,roles&include_fields=true`, 'members')) {
140
+ const uid = (0, record_set_1.str)(m.user_id);
141
+ if (!uid || !userIds.has(uid))
142
+ continue;
143
+ const role = (0, record_set_1.objs)(m.roles).map((r) => roleKeyById.get((0, record_set_1.str)(r.id) ?? '') ?? ((0, record_set_1.str)(r.name) ? roleKey((0, record_set_1.str)(r.name)) : undefined)).find(Boolean) ?? 'member';
144
+ set.add('membership', { organization_id: orgId, user_id: uid, role }, `${orgId}:${uid}`);
145
+ if ((0, record_set_1.objs)(m.roles).length > 1)
146
+ set.warn(`Some organization members hold several Auth0 roles; Atlas seats each member with one role (the first).`);
147
+ }
148
+ for (const inv of await pageAll(http, `/organizations/${orgId}/invitations`, 'invitations')) {
149
+ const id = (0, record_set_1.str)(inv.id);
150
+ const email = (0, record_set_1.str)((0, record_set_1.isObj)(inv.invitee) ? inv.invitee.email : undefined);
151
+ if (!id || !email)
152
+ continue;
153
+ const roleIds = Array.isArray(inv.roles) ? inv.roles : [];
154
+ set.add('invitation', (0, record_set_1.compact)({
155
+ id,
156
+ organization_id: orgId,
157
+ email,
158
+ role: roleIds.map((r) => roleKeyById.get(String(r))).find(Boolean),
159
+ status: 'pending',
160
+ expires_at: (0, record_set_1.str)(inv.expires_at),
161
+ created_at: (0, record_set_1.str)(inv.created_at),
162
+ }));
163
+ }
164
+ }
165
+ progress('signing keys');
166
+ if (online) {
167
+ try {
168
+ const res = await fetchImpl(`https://${domain}/.well-known/jwks.json`, { headers: { accept: 'application/json' } });
169
+ if (res.ok) {
170
+ const body = (await res.json());
171
+ for (const k of (0, record_set_1.objs)(body.keys))
172
+ if ((0, record_set_1.str)(k.kid))
173
+ set.add('jwks', { kid: (0, record_set_1.str)(k.kid), jwk: k });
174
+ }
175
+ }
176
+ catch {
177
+ set.warn('The tenant JWKS could not be read; the bridge preset fetches it live instead.');
178
+ }
179
+ }
180
+ set.manifest = {
181
+ origin: domain,
182
+ rpId: opts.authenticationMethods ? (opts.rpId ?? domain) : null,
183
+ providers: [...new Set(set.list('identity').map((i) => i.provider))].sort(),
184
+ };
185
+ return set;
186
+ }
187
+ // ── tokens and paging ───────────────────────────────────────────────────────
188
+ async function managementToken(domain, opts, fetchImpl) {
189
+ if (!opts.clientId || !opts.clientSecret) {
190
+ throw new Error('Auth0 export needs a Management API token, or the client id and secret of a machine-to-machine application authorized for the Management API.');
191
+ }
192
+ const res = await fetchImpl(`https://${domain}/oauth/token`, {
193
+ method: 'POST',
194
+ headers: { 'content-type': 'application/json', accept: 'application/json' },
195
+ body: JSON.stringify({ grant_type: 'client_credentials', client_id: opts.clientId, client_secret: opts.clientSecret, audience: `https://${domain}/api/v2/` }),
196
+ });
197
+ const body = (await res.json().catch(() => ({})));
198
+ if (!res.ok || !body.access_token) {
199
+ throw new vendor_http_1.VendorApiError('Auth0', res.status, '/oauth/token', body.error_description ?? 'could not get a Management API token');
200
+ }
201
+ return body.access_token;
202
+ }
203
+ /** page/per_page listing with include_totals (Auth0's classic paging). */
204
+ async function pageAll(http, path, key) {
205
+ const out = [];
206
+ const sep = path.includes('?') ? '&' : '?';
207
+ for (let page = 0;; page++) {
208
+ const { body } = await http.get(`${path}${sep}page=${page}&per_page=100&include_totals=true`);
209
+ const rows = Array.isArray(body) ? body.filter(record_set_1.isObj) : (0, record_set_1.isObj)(body) ? (0, record_set_1.objs)(body[key]) : [];
210
+ out.push(...rows);
211
+ const total = (0, record_set_1.isObj)(body) && typeof body.total === 'number' ? body.total : undefined;
212
+ if (rows.length < 100 || (total !== undefined && out.length >= total))
213
+ return out;
214
+ }
215
+ }
216
+ /** Checkpoint paging (`from` / `take`, `next` in the body): no 1,000-row ceiling. */
217
+ async function checkpointAll(http, path, key) {
218
+ const out = [];
219
+ const sep = path.includes('?') ? '&' : '?';
220
+ let from;
221
+ for (;;) {
222
+ const { body } = await http.get(`${path}${sep}take=100${from ? `&from=${encodeURIComponent(from)}` : ''}`);
223
+ const rows = Array.isArray(body) ? body.filter(record_set_1.isObj) : (0, record_set_1.isObj)(body) ? (0, record_set_1.objs)(body[key]) : [];
224
+ out.push(...rows);
225
+ from = (0, record_set_1.isObj)(body) ? (0, record_set_1.str)(body.next) : undefined;
226
+ if (!from || rows.length === 0)
227
+ return out;
228
+ }
229
+ }
230
+ async function runExportJob(http, opts, fetchImpl, sleep, progress) {
231
+ const body = { format: 'json', fields: exports.AUTH0_EXPORT_FIELDS.map((name) => ({ name })) };
232
+ if (opts.connectionId)
233
+ body.connection_id = opts.connectionId;
234
+ let job;
235
+ try {
236
+ job = (await http.post('/jobs/users-exports', body)).body;
237
+ }
238
+ catch (err) {
239
+ if (err instanceof vendor_http_1.VendorApiError && (err.status === 403 || err.status === 402)) {
240
+ throw new Error(`Auth0 refused the user export job (${err.message}). Export jobs need a paid plan and the read:users scope; or download an export yourself and pass it with --auth0-users-file.`);
241
+ }
242
+ throw err;
243
+ }
244
+ const id = (0, record_set_1.str)(job.id);
245
+ if (!id)
246
+ throw new Error('Auth0 did not return an export job id.');
247
+ for (let i = 0;; i++) {
248
+ const { body: status } = await http.get(`/jobs/${id}`);
249
+ const state = (0, record_set_1.str)(status.status);
250
+ if (state === 'completed' && (0, record_set_1.str)(status.location)) {
251
+ // The location is a short-lived pre-signed URL: no Auth0 credentials go with it.
252
+ const res = await fetchImpl((0, record_set_1.str)(status.location));
253
+ if (!res.ok)
254
+ throw new vendor_http_1.VendorApiError('Auth0', res.status, 'export download', 'the export file could not be downloaded');
255
+ const raw = Buffer.from(await res.arrayBuffer());
256
+ const text = raw[0] === 0x1f && raw[1] === 0x8b ? (0, node_zlib_1.gunzipSync)(raw).toString('utf8') : raw.toString('utf8');
257
+ return parseLines(text);
258
+ }
259
+ if (state === 'failed')
260
+ throw new Error(`The Auth0 export job ${id} failed${(0, record_set_1.str)(status.summary) ? `: ${(0, record_set_1.str)(status.summary)}` : ''}.`);
261
+ if (i % 6 === 0)
262
+ progress(`waiting for export job ${id} (${state ?? 'pending'}${typeof status.time_left_seconds === 'number' ? `, ~${status.time_left_seconds}s left` : ''})`);
263
+ await sleep(5000);
264
+ }
265
+ }
266
+ /** NDJSON (Auth0's export format) or a JSON array / `{ users: [] }`. */
267
+ function parseLines(text) {
268
+ const t = text.trim();
269
+ if (!t)
270
+ return [];
271
+ if (t.startsWith('['))
272
+ return (0, record_set_1.objs)(JSON.parse(t));
273
+ try {
274
+ const one = JSON.parse(t);
275
+ if ((0, record_set_1.isObj)(one))
276
+ return Array.isArray(one.users) ? (0, record_set_1.objs)(one.users) : [one];
277
+ }
278
+ catch {
279
+ // NDJSON: one object per line.
280
+ }
281
+ return t
282
+ .split(/\r?\n/)
283
+ .filter((l) => l.trim())
284
+ .map((l) => JSON.parse(l))
285
+ .filter(record_set_1.isObj);
286
+ }
287
+ function indexHashes(rows) {
288
+ const byId = new Map();
289
+ const byEmail = new Map();
290
+ for (const r of rows) {
291
+ const oid = (0, record_set_1.isObj)(r._id) ? (0, record_set_1.str)(r._id.$oid) : (0, record_set_1.str)(r._id);
292
+ const id = (0, record_set_1.str)(r.user_id) ?? (oid ? `auth0|${oid}` : undefined);
293
+ const secret = {};
294
+ const hash = (0, record_set_1.str)(r.passwordHash) ?? (0, record_set_1.str)(r.password_hash);
295
+ if (hash)
296
+ secret.password = { algorithm: 'auto', hash };
297
+ else if ((0, record_set_1.isObj)(r.custom_password_hash)) {
298
+ const mapped = auth0CustomHash(r.custom_password_hash);
299
+ if ('reason' in mapped)
300
+ secret.passwordReason = mapped.reason;
301
+ else
302
+ secret.password = mapped;
303
+ }
304
+ // MFA secrets, when support includes them, in the bulk-import `mfa_factors` shape.
305
+ for (const f of (0, record_set_1.objs)(r.mfa_factors)) {
306
+ const totp = (0, record_set_1.isObj)(f.totp) ? (0, record_set_1.str)(f.totp.secret) : undefined;
307
+ if (totp)
308
+ (secret.totp ??= []).push(totp);
309
+ const phone = (0, record_set_1.isObj)(f.phone) ? (0, record_set_1.str)(f.phone.value) : undefined;
310
+ if (phone)
311
+ (secret.phones ??= []).push(phone);
312
+ const email = (0, record_set_1.isObj)(f.email) ? (0, record_set_1.str)(f.email.value) : undefined;
313
+ if (email)
314
+ (secret.emails ??= []).push(email);
315
+ }
316
+ if (id)
317
+ byId.set(id, secret);
318
+ const email = (0, record_set_1.str)(r.email)?.toLowerCase();
319
+ if (email && !byEmail.has(email))
320
+ byEmail.set(email, secret);
321
+ }
322
+ return { byId, byEmail };
323
+ }
324
+ function addUser(set, u, ctx) {
325
+ const id = (0, record_set_1.str)(u.user_id);
326
+ const email = (0, record_set_1.str)(u.email)?.toLowerCase();
327
+ const phone = (0, record_set_1.e164)(u.phone_number);
328
+ const user = (0, record_set_1.compact)({
329
+ id,
330
+ emails: email ? [{ email, verified: u.email_verified === true, primary: true }] : [],
331
+ phones: phone ? [{ phone, verified: u.phone_verified === true, primary: !email }] : [],
332
+ username: (0, record_set_1.str)(u.username),
333
+ first_name: (0, record_set_1.str)(u.given_name),
334
+ last_name: (0, record_set_1.str)(u.family_name),
335
+ name: (0, record_set_1.str)(u.given_name) || (0, record_set_1.str)(u.family_name) ? undefined : (0, record_set_1.str)(u.name) && (0, record_set_1.str)(u.name) !== email ? (0, record_set_1.str)(u.name) : undefined,
336
+ image_url: (0, record_set_1.str)(u.picture),
337
+ roles: ctx.roles,
338
+ banned: u.blocked === true ? true : undefined,
339
+ // app_metadata is server-controlled in Auth0 (often holds entitlements): it
340
+ // lands in the backend-only bag. user_metadata is user-editable.
341
+ private_metadata: (0, record_set_1.bag)(u.app_metadata),
342
+ unsafe_metadata: (0, record_set_1.bag)(u.user_metadata),
343
+ created_at: (0, record_set_1.str)(u.created_at),
344
+ last_sign_in_at: (0, record_set_1.str)(u.last_login),
345
+ });
346
+ if (ctx.secret?.password)
347
+ user.password = ctx.secret.password;
348
+ else if (ctx.secret?.passwordReason)
349
+ set.omit('password', ctx.secret.passwordReason);
350
+ if (!user.emails?.length && !user.phones?.length && !user.username) {
351
+ set.omit('user', 'no email, phone number or username');
352
+ return false;
353
+ }
354
+ set.add('user', user);
355
+ for (const i of (0, record_set_1.objs)(u.identities)) {
356
+ const provider = (0, record_set_1.str)(i.provider);
357
+ const sub = (0, record_set_1.str)(i.user_id);
358
+ if (!provider || !sub || provider === 'auth0' || provider === 'sms' || provider === 'email')
359
+ continue;
360
+ const connection = (0, record_set_1.str)(i.connection);
361
+ const enterprise = connection ? ctx.connectionIds.get(connection) : undefined;
362
+ set.add('identity', (0, record_set_1.compact)({
363
+ user_id: id,
364
+ provider: enterprise ? connection : provider,
365
+ provider_user_id: sub,
366
+ kind: enterprise ? (provider === 'samlp' || provider === 'adfs' ? 'saml' : 'oidc') : i.isSocial === true ? 'oauth' : 'enterprise',
367
+ sso_connection_id: enterprise,
368
+ profile: (0, record_set_1.bag)(i.profileData),
369
+ }));
370
+ }
371
+ for (const secret of ctx.secret?.totp ?? []) {
372
+ set.add('mfa_factor', { user_id: id, type: 'totp', secret_base32: secret.replace(/=+$/, '').toUpperCase(), digits: 6, period: 30, algorithm: 'SHA1', verified: true });
373
+ }
374
+ for (const p of ctx.secret?.phones ?? []) {
375
+ const n = (0, record_set_1.e164)(p);
376
+ if (n)
377
+ set.add('mfa_factor', { user_id: id, type: 'phone', phone: n, verified: true }, `phone:${id}:${n}`);
378
+ }
379
+ for (const _ of ctx.secret?.emails ?? [])
380
+ set.add('mfa_factor', { user_id: id, type: 'email', verified: true }, `email:${id}`);
381
+ return true;
382
+ }
383
+ async function addAuthenticationMethods(set, http, userId, rpId) {
384
+ let methods;
385
+ try {
386
+ methods = await pageAll(http, `/users/${encodeURIComponent(userId)}/authentication-methods`, 'authenticators');
387
+ }
388
+ catch (err) {
389
+ if (err instanceof vendor_http_1.VendorApiError && (err.status === 403 || err.status === 404))
390
+ return;
391
+ throw err;
392
+ }
393
+ for (const m of methods) {
394
+ const type = (0, record_set_1.str)(m.type);
395
+ if (m.confirmed === false)
396
+ continue;
397
+ if (type === 'phone' || type === 'sms') {
398
+ const phone = (0, record_set_1.e164)(m.phone_number);
399
+ if (phone)
400
+ set.add('mfa_factor', { user_id: userId, type: 'phone', phone, verified: true, created_at: (0, record_set_1.str)(m.created_at) }, `phone:${userId}:${phone}`);
401
+ }
402
+ else if (type === 'email') {
403
+ set.add('mfa_factor', { user_id: userId, type: 'email', verified: true, created_at: (0, record_set_1.str)(m.created_at) }, `email:${userId}`);
404
+ }
405
+ else if ((type === 'passkey' || type === 'webauthn-platform' || type === 'webauthn-roaming') && (0, record_set_1.str)(m.key_id) && (0, record_set_1.str)(m.public_key)) {
406
+ set.add('passkey', (0, record_set_1.compact)({
407
+ id: (0, record_set_1.str)(m.id),
408
+ user_id: userId,
409
+ credential_id: b64url((0, record_set_1.str)(m.key_id)),
410
+ public_key: b64url((0, record_set_1.str)(m.public_key)),
411
+ rp_id: (0, record_set_1.str)(m.relying_party_identifier) ?? rpId,
412
+ aaguid: (0, record_set_1.str)(m.aaguid),
413
+ name: (0, record_set_1.str)(m.name),
414
+ backed_up: m.credential_backed_up === true ? true : undefined,
415
+ created_at: (0, record_set_1.str)(m.created_at),
416
+ }));
417
+ }
418
+ else if (type === 'totp' || type === 'guardian' || type === 'push' || type === 'recovery-code' || type === 'webauthn-roaming' || type === 'webauthn-platform') {
419
+ set.omit('mfa_factor', `Auth0 does not return ${type} secrets by API (support export, or re-enrolment)`);
420
+ }
421
+ }
422
+ }
423
+ const b64url = (v) => v.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
424
+ /** Auth0 role names are free text: `Billing Admin` → `billing_admin`. */
425
+ function roleKey(name) {
426
+ return name.trim().toLowerCase().replace(/[^a-z0-9]+/g, '_').replace(/^_+|_+$/g, '') || 'role';
427
+ }
428
+ /**
429
+ * An Auth0 bulk-import `custom_password_hash` (users imported into Auth0 that
430
+ * never signed in since keep it) → the Atlas registry's algorithm + params.
431
+ */
432
+ function auth0CustomHash(c) {
433
+ const algorithm = (0, record_set_1.str)(c.algorithm)?.toLowerCase();
434
+ const hash = (0, record_set_1.isObj)(c.hash) ? c.hash : {};
435
+ const value = (0, record_set_1.str)(hash.value);
436
+ if (!algorithm || !value)
437
+ return { reason: 'custom_password_hash without algorithm or hash value' };
438
+ const salt = (0, record_set_1.isObj)(c.salt) ? c.salt : undefined;
439
+ const pwEnc = (0, record_set_1.isObj)(c.password) ? (0, record_set_1.str)(c.password.encoding) : undefined;
440
+ if (pwEnc && !['utf8', 'utf-8', 'ascii'].includes(pwEnc)) {
441
+ return { reason: `custom_password_hash password.encoding "${pwEnc}" is not supported` };
442
+ }
443
+ const encoding = (0, record_set_1.str)(hash.encoding) ?? (algorithm === 'scrypt' ? 'hex' : 'hex');
444
+ const saltParams = salt
445
+ ? { salt_position: (0, record_set_1.str)(salt.position) ?? 'prefix', salt_encoding: (0, record_set_1.str)(salt.encoding) ?? 'utf8' }
446
+ : {};
447
+ switch (algorithm) {
448
+ case 'bcrypt':
449
+ return { algorithm: 'bcrypt', hash: value };
450
+ case 'argon2':
451
+ return { algorithm: 'argon2', hash: value };
452
+ case 'pbkdf2':
453
+ // A PHC string `$pbkdf2-<digest>$i=<iterations>,l=<keylen>$<salt>$<hash>`.
454
+ return { algorithm: 'auto', hash: value };
455
+ case 'ldap':
456
+ // RFC 2307: Atlas verifies the SHA family ({SHA}, {SSHA}, {SSHA256}, {SSHA512}).
457
+ return /^\{S?SHA(256|512)?\}/i.test(value) ? { algorithm: 'ldap_ssha', hash: value } : { reason: 'custom_password_hash ldap scheme other than {SHA}/{SSHA} is not supported' };
458
+ case 'md5':
459
+ case 'sha1':
460
+ case 'sha256':
461
+ case 'sha512': {
462
+ const s = salt ? (0, record_set_1.str)(salt.value) : undefined;
463
+ if (!s)
464
+ return { algorithm, hash: value, params: { encoding } };
465
+ return { algorithm: `${algorithm}_salted`, hash: value, salt: s, params: { encoding, ...saltParams } };
466
+ }
467
+ case 'hmac': {
468
+ const digest = (0, record_set_1.str)(hash.digest)?.toLowerCase();
469
+ const key = (0, record_set_1.isObj)(hash.key) ? (0, record_set_1.str)(hash.key.value) : undefined;
470
+ if (digest !== 'sha256' || !key)
471
+ return { reason: `custom_password_hash hmac with digest "${digest ?? '?'}" is not supported (sha256 only)` };
472
+ if (salt)
473
+ return { reason: 'custom_password_hash hmac with a salt is not supported' };
474
+ return { algorithm: 'hmac_sha256', hash: value, params: { key, key_encoding: ((0, record_set_1.isObj)(hash.key) ? (0, record_set_1.str)(hash.key.encoding) : undefined) ?? 'utf8', encoding } };
475
+ }
476
+ case 'scrypt': {
477
+ const s = salt ? (0, record_set_1.str)(salt.value) : undefined;
478
+ const keylen = typeof c.keylen === 'number' ? c.keylen : undefined;
479
+ if (!s || !keylen)
480
+ return { reason: 'custom_password_hash scrypt needs salt and keylen' };
481
+ return {
482
+ algorithm: 'scrypt',
483
+ hash: value,
484
+ salt: s,
485
+ params: {
486
+ n: typeof c.cost === 'number' ? c.cost : 16384,
487
+ r: typeof c.blockSize === 'number' ? c.blockSize : 8,
488
+ p: typeof c.parallelization === 'number' ? c.parallelization : 1,
489
+ key_length: keylen,
490
+ encoding,
491
+ salt_encoding: (0, record_set_1.str)(salt?.encoding) ?? 'utf8',
492
+ },
493
+ };
494
+ }
495
+ default:
496
+ return { reason: `custom_password_hash algorithm "${algorithm}" is not supported` };
497
+ }
498
+ }
499
+ // ── enterprise connections ──────────────────────────────────────────────────
500
+ function addConnection(set, c, domain) {
501
+ const id = (0, record_set_1.str)(c.id);
502
+ const name = (0, record_set_1.str)(c.name);
503
+ const strategy = (0, record_set_1.str)(c.strategy);
504
+ if (!id || !name || !strategy)
505
+ return undefined;
506
+ const o = (0, record_set_1.isObj)(c.options) ? c.options : {};
507
+ const domains = Array.isArray(o.domain_aliases) ? o.domain_aliases.map((d) => (0, record_set_1.str)(d)).filter((d) => !!d) : [];
508
+ if (strategy === 'samlp' || strategy === 'adfs' || strategy === 'pingfederate') {
509
+ const cert = (0, record_set_1.str)(o.signingCert) ?? (0, record_set_1.str)(o.cert);
510
+ set.add('sso_connection', (0, record_set_1.compact)({
511
+ id,
512
+ name: (0, record_set_1.str)(c.display_name) ?? name,
513
+ protocol: 'saml',
514
+ domains,
515
+ saml: (0, record_set_1.compact)({
516
+ idp_entity_id: (0, record_set_1.str)(o.entityId) ?? (0, record_set_1.str)(o.issuer),
517
+ idp_sso_url: (0, record_set_1.str)(o.signInEndpoint) ?? (0, record_set_1.str)(o.pingFederateBaseUrl),
518
+ idp_certificate: cert ? pemFromAuth0Cert(cert) : undefined,
519
+ idp_metadata_url: (0, record_set_1.str)(o.metadataUrl) ?? (0, record_set_1.str)(o.adfs_server),
520
+ idp_metadata_xml: (0, record_set_1.str)(o.metadataXml),
521
+ sp_entity_id: `urn:auth0:${domain.split('.')[0]}:${name}`,
522
+ sp_acs_url: `https://${domain}/login/callback?connection=${encodeURIComponent(name)}`,
523
+ attribute_mapping: (0, record_set_1.isObj)(o.fieldsMap)
524
+ ? Object.fromEntries(Object.entries(o.fieldsMap).filter(([, v]) => typeof v === 'string'))
525
+ : undefined,
526
+ }),
527
+ }));
528
+ return id;
529
+ }
530
+ if (strategy === 'oidc' || strategy === 'okta' || strategy === 'waad' || strategy === 'google-apps') {
531
+ const issuer = strategy === 'waad'
532
+ ? (0, record_set_1.str)(o.tenant_domain)
533
+ ? `https://login.microsoftonline.com/${(0, record_set_1.str)(o.tenant_id) ?? (0, record_set_1.str)(o.tenant_domain)}/v2.0`
534
+ : undefined
535
+ : strategy === 'google-apps'
536
+ ? 'https://accounts.google.com'
537
+ : (0, record_set_1.str)(o.issuer) ?? ((0, record_set_1.str)(o.domain) ? `https://${(0, record_set_1.str)(o.domain)}` : undefined);
538
+ set.add('sso_connection', (0, record_set_1.compact)({
539
+ id,
540
+ name: (0, record_set_1.str)(c.display_name) ?? name,
541
+ protocol: 'oidc',
542
+ domains: strategy === 'google-apps' && (0, record_set_1.str)(o.domain) ? [...domains, (0, record_set_1.str)(o.domain)] : domains,
543
+ oidc: (0, record_set_1.compact)({
544
+ issuer,
545
+ discovery_url: (0, record_set_1.str)(o.discovery_url),
546
+ client_id: (0, record_set_1.str)(o.client_id),
547
+ client_secret: (0, record_set_1.str)(o.client_secret),
548
+ scopes: (0, record_set_1.str)(o.scope)?.split(/\s+/),
549
+ }),
550
+ }));
551
+ if (!(0, record_set_1.str)(o.client_secret))
552
+ set.warn(`Enterprise connection ${name}: Auth0 does not return its client secret; enter it in Atlas after the import.`);
553
+ return id;
554
+ }
555
+ set.warn(`Enterprise connection ${name} (${strategy}) has no Atlas counterpart and was not exported (LDAP/AD connector: use lazy migration).`);
556
+ return undefined;
557
+ }
558
+ /** Auth0 returns the IdP signing certificate as base64 DER or PEM. */
559
+ function pemFromAuth0Cert(cert) {
560
+ if (cert.includes('BEGIN CERTIFICATE'))
561
+ return cert;
562
+ const body = cert.replace(/\s+/g, '');
563
+ let der = body;
564
+ // Some tenants store the PEM itself base64-encoded.
565
+ try {
566
+ const decoded = Buffer.from(body, 'base64').toString('utf8');
567
+ if (decoded.includes('BEGIN CERTIFICATE'))
568
+ return decoded;
569
+ }
570
+ catch {
571
+ der = body;
572
+ }
573
+ return `-----BEGIN CERTIFICATE-----\n${der.match(/.{1,64}/g).join('\n')}\n-----END CERTIFICATE-----`;
574
+ }
575
+ //# sourceMappingURL=auth0.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth0.js","sourceRoot":"","sources":["../../../src/migrate/export/auth0.ts"],"names":[],"mappings":"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"}