@atlasauth/cli 0.10.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 (145) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/args.d.ts +145 -0
  3. package/dist/args.js +53 -0
  4. package/dist/args.js.map +1 -1
  5. package/dist/commands/admin.d.ts +49 -0
  6. package/dist/commands/admin.js +353 -0
  7. package/dist/commands/admin.js.map +1 -0
  8. package/dist/commands/id-accounts.d.ts +13 -0
  9. package/dist/commands/id-accounts.js +195 -0
  10. package/dist/commands/id-accounts.js.map +1 -0
  11. package/dist/commands/init.js +13 -8
  12. package/dist/commands/init.js.map +1 -1
  13. package/dist/commands/migrate.d.ts +6 -2
  14. package/dist/commands/migrate.js +13 -3
  15. package/dist/commands/migrate.js.map +1 -1
  16. package/dist/config-http.d.ts +2 -0
  17. package/dist/config-http.js +1 -0
  18. package/dist/config-http.js.map +1 -1
  19. package/dist/config.d.ts +2 -0
  20. package/dist/config.js.map +1 -1
  21. package/dist/context.d.ts +1 -0
  22. package/dist/context.js +1 -1
  23. package/dist/context.js.map +1 -1
  24. package/dist/help.d.ts +1 -1
  25. package/dist/help.js +99 -0
  26. package/dist/help.js.map +1 -1
  27. package/dist/migrate/auth0/plugin.d.ts +2 -0
  28. package/dist/migrate/auth0/plugin.js +126 -0
  29. package/dist/migrate/auth0/plugin.js.map +1 -0
  30. package/dist/migrate/clerk/plugin.d.ts +2 -0
  31. package/dist/migrate/clerk/plugin.js +76 -0
  32. package/dist/migrate/clerk/plugin.js.map +1 -0
  33. package/dist/migrate/descope/plugin.d.ts +2 -0
  34. package/dist/migrate/descope/plugin.js +83 -0
  35. package/dist/migrate/descope/plugin.js.map +1 -0
  36. package/dist/migrate/export/auth0-config.d.ts +29 -0
  37. package/dist/migrate/export/auth0-config.js +249 -0
  38. package/dist/migrate/export/auth0-config.js.map +1 -0
  39. package/dist/migrate/export/auth0.d.ts +62 -0
  40. package/dist/migrate/export/auth0.js +575 -0
  41. package/dist/migrate/export/auth0.js.map +1 -0
  42. package/dist/migrate/export/clerk-config.d.ts +26 -0
  43. package/dist/migrate/export/clerk-config.js +227 -0
  44. package/dist/migrate/export/clerk-config.js.map +1 -0
  45. package/dist/migrate/export/clerk.d.ts +46 -0
  46. package/dist/migrate/export/clerk.js +486 -0
  47. package/dist/migrate/export/clerk.js.map +1 -0
  48. package/dist/migrate/export/descope.d.ts +35 -0
  49. package/dist/migrate/export/descope.js +208 -0
  50. package/dist/migrate/export/descope.js.map +1 -0
  51. package/dist/migrate/export/fake-vendor.test-helper.d.ts +27 -0
  52. package/dist/migrate/export/fake-vendor.test-helper.js +41 -0
  53. package/dist/migrate/export/fake-vendor.test-helper.js.map +1 -0
  54. package/dist/migrate/export/frameworks/app-users.d.ts +42 -0
  55. package/dist/migrate/export/frameworks/app-users.js +161 -0
  56. package/dist/migrate/export/frameworks/app-users.js.map +1 -0
  57. package/dist/migrate/export/frameworks/authjs.d.ts +41 -0
  58. package/dist/migrate/export/frameworks/authjs.js +146 -0
  59. package/dist/migrate/export/frameworks/authjs.js.map +1 -0
  60. package/dist/migrate/export/frameworks/devise.d.ts +39 -0
  61. package/dist/migrate/export/frameworks/devise.js +218 -0
  62. package/dist/migrate/export/frameworks/devise.js.map +1 -0
  63. package/dist/migrate/export/frameworks/django.d.ts +45 -0
  64. package/dist/migrate/export/frameworks/django.js +315 -0
  65. package/dist/migrate/export/frameworks/django.js.map +1 -0
  66. package/dist/migrate/export/frameworks/lucia.d.ts +42 -0
  67. package/dist/migrate/export/frameworks/lucia.js +263 -0
  68. package/dist/migrate/export/frameworks/lucia.js.map +1 -0
  69. package/dist/migrate/export/frameworks/tables.d.ts +90 -0
  70. package/dist/migrate/export/frameworks/tables.js +325 -0
  71. package/dist/migrate/export/frameworks/tables.js.map +1 -0
  72. package/dist/migrate/export/frameworks/webauthn.d.ts +25 -0
  73. package/dist/migrate/export/frameworks/webauthn.js +130 -0
  74. package/dist/migrate/export/frameworks/webauthn.js.map +1 -0
  75. package/dist/migrate/export/kinde-descope-config.d.ts +38 -0
  76. package/dist/migrate/export/kinde-descope-config.js +172 -0
  77. package/dist/migrate/export/kinde-descope-config.js.map +1 -0
  78. package/dist/migrate/export/kinde.d.ts +57 -0
  79. package/dist/migrate/export/kinde.js +333 -0
  80. package/dist/migrate/export/kinde.js.map +1 -0
  81. package/dist/migrate/export/okta-config.d.ts +30 -0
  82. package/dist/migrate/export/okta-config.js +205 -0
  83. package/dist/migrate/export/okta-config.js.map +1 -0
  84. package/dist/migrate/export/okta.d.ts +43 -0
  85. package/dist/migrate/export/okta.js +337 -0
  86. package/dist/migrate/export/okta.js.map +1 -0
  87. package/dist/migrate/export/plugin-kit.d.ts +25 -0
  88. package/dist/migrate/export/plugin-kit.js +82 -0
  89. package/dist/migrate/export/plugin-kit.js.map +1 -0
  90. package/dist/migrate/export/record-set.d.ts +44 -0
  91. package/dist/migrate/export/record-set.js +98 -0
  92. package/dist/migrate/export/record-set.js.map +1 -0
  93. package/dist/migrate/export/translate-kit.d.ts +46 -0
  94. package/dist/migrate/export/translate-kit.js +148 -0
  95. package/dist/migrate/export/translate-kit.js.map +1 -0
  96. package/dist/migrate/export/vendor-http.d.ts +46 -0
  97. package/dist/migrate/export/vendor-http.js +138 -0
  98. package/dist/migrate/export/vendor-http.js.map +1 -0
  99. package/dist/migrate/export/zip.d.ts +8 -0
  100. package/dist/migrate/export/zip.js +66 -0
  101. package/dist/migrate/export/zip.js.map +1 -0
  102. package/dist/migrate/framework/builtins.d.ts +2 -0
  103. package/dist/migrate/framework/builtins.js +23 -0
  104. package/dist/migrate/framework/builtins.js.map +1 -0
  105. package/dist/migrate/framework/commands.d.ts +20 -0
  106. package/dist/migrate/framework/commands.js +58 -0
  107. package/dist/migrate/framework/commands.js.map +1 -0
  108. package/dist/migrate/framework/custom.d.ts +12 -0
  109. package/dist/migrate/framework/custom.js +96 -0
  110. package/dist/migrate/framework/custom.js.map +1 -0
  111. package/dist/migrate/framework/orchestrator.d.ts +113 -0
  112. package/dist/migrate/framework/orchestrator.js +531 -0
  113. package/dist/migrate/framework/orchestrator.js.map +1 -0
  114. package/dist/migrate/framework/plugin.d.ts +165 -0
  115. package/dist/migrate/framework/plugin.js +3 -0
  116. package/dist/migrate/framework/plugin.js.map +1 -0
  117. package/dist/migrate/framework/registry.d.ts +11 -0
  118. package/dist/migrate/framework/registry.js +44 -0
  119. package/dist/migrate/framework/registry.js.map +1 -0
  120. package/dist/migrate/framework/report.d.ts +17 -0
  121. package/dist/migrate/framework/report.js +103 -0
  122. package/dist/migrate/framework/report.js.map +1 -0
  123. package/dist/migrate/frameworks/plugins.d.ts +29 -0
  124. package/dist/migrate/frameworks/plugins.js +402 -0
  125. package/dist/migrate/frameworks/plugins.js.map +1 -0
  126. package/dist/migrate/frameworks/report.d.ts +92 -0
  127. package/dist/migrate/frameworks/report.js +207 -0
  128. package/dist/migrate/frameworks/report.js.map +1 -0
  129. package/dist/migrate/frameworks/translate-js.d.ts +5 -0
  130. package/dist/migrate/frameworks/translate-js.js +503 -0
  131. package/dist/migrate/frameworks/translate-js.js.map +1 -0
  132. package/dist/migrate/frameworks/translate-rails-django.d.ts +3 -0
  133. package/dist/migrate/frameworks/translate-rails-django.js +1391 -0
  134. package/dist/migrate/frameworks/translate-rails-django.js.map +1 -0
  135. package/dist/migrate/kinde/plugin.d.ts +2 -0
  136. package/dist/migrate/kinde/plugin.js +105 -0
  137. package/dist/migrate/kinde/plugin.js.map +1 -0
  138. package/dist/migrate/okta/plugin.d.ts +2 -0
  139. package/dist/migrate/okta/plugin.js +105 -0
  140. package/dist/migrate/okta/plugin.js.map +1 -0
  141. package/dist/project.d.ts +1 -0
  142. package/dist/project.js.map +1 -1
  143. package/dist/run.js +4 -0
  144. package/dist/run.js.map +1 -1
  145. package/package.json +7 -6
@@ -0,0 +1,26 @@
1
+ import type { TranslationResult } from '../framework/plugin';
2
+ import { type Obj } from './record-set';
3
+ /**
4
+ * `atlas migrate clerk config` — a Clerk instance's settings → Atlas config.
5
+ *
6
+ * Read from Clerk's PUBLIC environment document (`GET https://<frontend
7
+ * api>/v1/environment`, what clerk-js loads with the publishable key) and,
8
+ * with the secret key, the Backend API's JWT templates, redirect URLs,
9
+ * organization roles and permissions. Atlas mirrors Clerk's model, so most
10
+ * settings map 1:1.
11
+ */
12
+ export interface ClerkConfigSnapshot {
13
+ frontendApi: string;
14
+ environment: Obj;
15
+ jwtTemplates?: Obj[];
16
+ redirectUrls?: Obj[];
17
+ roles?: Obj[];
18
+ permissions?: Obj[];
19
+ }
20
+ export declare function fetchClerkConfig(opts: {
21
+ publishableKey: string;
22
+ secretKey?: string;
23
+ fetchImpl?: typeof fetch;
24
+ apiUrl?: string;
25
+ }): Promise<ClerkConfigSnapshot>;
26
+ export declare function translateClerkConfig(snap: ClerkConfigSnapshot): TranslationResult;
@@ -0,0 +1,227 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fetchClerkConfig = fetchClerkConfig;
4
+ exports.translateClerkConfig = translateClerkConfig;
5
+ const backend_1 = require("@atlasauth/backend");
6
+ const record_set_1 = require("./record-set");
7
+ const translate_kit_1 = require("./translate-kit");
8
+ const vendor_http_1 = require("./vendor-http");
9
+ async function fetchClerkConfig(opts) {
10
+ const frontendApi = (0, backend_1.clerkFrontendApiFromPublishableKey)(opts.publishableKey);
11
+ if (!frontendApi)
12
+ throw new Error('That is not a Clerk publishable key (pk_test_… / pk_live_…).');
13
+ const fapi = new vendor_http_1.VendorHttp({ vendor: 'Clerk', baseUrl: `https://${frontendApi}`, fetchImpl: opts.fetchImpl });
14
+ const { body: environment } = await fapi.get('/v1/environment');
15
+ const snap = { frontendApi, environment: (0, record_set_1.isObj)(environment) ? environment : {} };
16
+ if (opts.secretKey) {
17
+ const bapi = new vendor_http_1.VendorHttp({ vendor: 'Clerk', baseUrl: opts.apiUrl ?? 'https://api.clerk.com', headers: { authorization: `Bearer ${opts.secretKey}` }, fetchImpl: opts.fetchImpl });
18
+ const list = async (path) => {
19
+ try {
20
+ const { body } = await bapi.get(path);
21
+ return Array.isArray(body) ? (0, record_set_1.objs)(body) : (0, record_set_1.isObj)(body) ? (0, record_set_1.objs)(body.data) : [];
22
+ }
23
+ catch (err) {
24
+ if (err instanceof vendor_http_1.VendorApiError && [403, 404, 422].includes(err.status))
25
+ return [];
26
+ throw err;
27
+ }
28
+ };
29
+ snap.jwtTemplates = await list('/v1/jwt_templates');
30
+ snap.redirectUrls = await list('/v1/redirect_urls');
31
+ snap.roles = await list('/v1/organization_roles?limit=500');
32
+ snap.permissions = await list('/v1/organization_permissions?limit=500');
33
+ }
34
+ return snap;
35
+ }
36
+ const AREA_ATTR = 'user & authentication';
37
+ function translateClerkConfig(snap) {
38
+ const b = new translate_kit_1.ConfigBuilder();
39
+ const env = snap.environment;
40
+ const us = (0, record_set_1.isObj)(env.user_settings) ? env.user_settings : {};
41
+ const attrs = (0, record_set_1.isObj)(us.attributes) ? us.attributes : {};
42
+ const attr = (name) => ((0, record_set_1.isObj)(attrs[name]) ? attrs[name] : {});
43
+ const on = (name) => attr(name).enabled === true;
44
+ // ── identifiers and first factors ──
45
+ const email = attr('email_address');
46
+ if (on('email_address')) {
47
+ const first = (0, record_set_1.strs)(email.first_factors);
48
+ b.set('strategies.emailCode', first.includes('email_code'));
49
+ b.set('strategies.emailLink', first.includes('email_link'));
50
+ b.add('mapped', AREA_ATTR, 'attributes.email_address.first_factors', `Email sign-in: ${first.join(', ') || 'identifier only'}.`, 'auth_config.strategies.emailCode / emailLink');
51
+ const verifyAtSignUp = email.verify_at_sign_up === true || (0, record_set_1.strs)(email.verifications).length > 0;
52
+ b.set('requireEmailVerification', verifyAtSignUp);
53
+ b.add('mapped', AREA_ATTR, 'attributes.email_address.verify_at_sign_up', verifyAtSignUp ? 'Email addresses are verified at sign-up.' : 'Email addresses are not verified at sign-up.', 'auth_config.requireEmailVerification');
54
+ }
55
+ if (on('phone_number')) {
56
+ b.set('strategies.phoneCode', (0, record_set_1.strs)(attr('phone_number').first_factors).includes('phone_code'));
57
+ b.add('mapped', AREA_ATTR, 'attributes.phone_number', 'SMS code sign-in.', 'auth_config.strategies.phoneCode');
58
+ }
59
+ if (on('username')) {
60
+ b.set('strategies.username', true);
61
+ const u = (0, record_set_1.isObj)(us.username_settings) ? us.username_settings : {};
62
+ if (typeof u.min_length === 'number')
63
+ b.set('accountUx.username.minLength', u.min_length);
64
+ if (typeof u.max_length === 'number')
65
+ b.set('accountUx.username.maxLength', u.max_length);
66
+ b.add('mapped', AREA_ATTR, 'attributes.username', 'Usernames, with the same length limits.', 'auth_config.strategies.username');
67
+ }
68
+ const password = on('password');
69
+ b.set('strategies.password', password);
70
+ if (password)
71
+ b.add('mapped', AREA_ATTR, 'attributes.password', 'Password sign-in. Imported Clerk users keep their bcrypt digest and are re-hashed to Argon2id on first sign-in.', 'auth_config.strategies.password');
72
+ if (on('passkey')) {
73
+ b.set('strategies.passkey', true);
74
+ b.add('differs', AREA_ATTR, 'attributes.passkey', 'Passkey sign-in is on, but Clerk does not export passkeys: users register a new one in Atlas.', 'auth_config.strategies.passkey');
75
+ }
76
+ if (on('web3_wallet'))
77
+ b.add('differs', AREA_ATTR, 'attributes.web3_wallet', 'Atlas signs wallets in with Sign-In with Ethereum (strategies.siwe); wallet-only Clerk users are not exported (no email to carry).', 'auth_config.strategies.siwe');
78
+ for (const name of ['first_name', 'last_name']) {
79
+ if (attr(name).required === true)
80
+ b.add('manual', AREA_ATTR, `attributes.${name}.required`, 'Make the name a required identity trait in Atlas (identityTraits) if sign-up must collect it.', 'auth_config.identityTraits');
81
+ }
82
+ // ── second factors ──
83
+ const totp = on('authenticator_app');
84
+ const sms2fa = attr('phone_number').used_for_second_factor === true;
85
+ const backup = on('backup_code');
86
+ b.set('mfa.factors.totp', totp);
87
+ if (totp)
88
+ b.add('mapped', 'multi-factor', 'attributes.authenticator_app', 'Authenticator apps. TOTP secrets move only from the dashboard CSV export.', 'auth_config.mfa.factors.totp');
89
+ if (sms2fa)
90
+ b.add('differs', 'multi-factor', 'attributes.phone_number.used_for_second_factor', 'SMS second factor: Atlas offers SMS as a first factor and recommends TOTP or passkeys for the second.', 'auth_config.mfa');
91
+ if (backup)
92
+ b.add('mapped', 'multi-factor', 'attributes.backup_code', 'Backup codes. Clerk does not export them: users generate new ones.', 'auth_config.mfa.backupCodes');
93
+ const signIn = (0, record_set_1.isObj)(us.sign_in) ? us.sign_in : {};
94
+ if ((0, record_set_1.isObj)(signIn.second_factor) && signIn.second_factor.required === true) {
95
+ b.set('mfaPolicy', 'required');
96
+ b.add('mapped', 'multi-factor', 'sign_in.second_factor.required', 'Every user must use a second factor.', 'auth_config.mfaPolicy');
97
+ }
98
+ // ── sign-up mode ──
99
+ const signUp = (0, record_set_1.isObj)(us.sign_up) ? us.sign_up : {};
100
+ const mode = (0, record_set_1.str)(signUp.mode) ?? 'public';
101
+ if (mode === 'restricted' || mode === 'waitlist') {
102
+ b.set('signUpMode', 'restricted');
103
+ b.add(mode === 'waitlist' ? 'differs' : 'mapped', 'restrictions', 'sign_up.mode', mode === 'waitlist' ? 'Clerk waitlist: Atlas restricts sign-up to invitations and the allowlist; collect waitlist sign-ups yourself.' : 'Sign-up by invitation / allowlist only.', 'auth_config.signUpMode');
104
+ }
105
+ else {
106
+ b.set('signUpMode', 'public');
107
+ b.add('mapped', 'restrictions', 'sign_up.mode', 'Public sign-up.', 'auth_config.signUpMode');
108
+ }
109
+ // ── password policy ──
110
+ const pw = (0, record_set_1.isObj)(us.password_settings) ? us.password_settings : {};
111
+ if (typeof pw.min_length === 'number') {
112
+ b.set('passwordPolicy.minLength', Math.max(8, pw.min_length));
113
+ b.add(pw.min_length < 8 ? 'differs' : 'mapped', 'password', 'password_settings.min_length', pw.min_length < 8 ? `Clerk allows ${pw.min_length}; Atlas requires at least 8 (existing passwords still sign in).` : `${pw.min_length}.`, 'auth_config.passwordPolicy.minLength');
114
+ }
115
+ if (typeof pw.max_length === 'number' && pw.max_length > 0) {
116
+ b.set('passwordPolicy.maxLength', Math.min(256, pw.max_length));
117
+ b.add('mapped', 'password', 'password_settings.max_length', `${Math.min(256, pw.max_length)}.`, 'auth_config.passwordPolicy.maxLength');
118
+ }
119
+ if (pw.disable_hibp !== undefined) {
120
+ b.set('passwordPolicy.checkBreaches', pw.disable_hibp !== true);
121
+ b.add('mapped', 'password', 'password_settings.disable_hibp', pw.disable_hibp === true ? 'Breached-password check off.' : 'Breached passwords are refused.', 'auth_config.passwordPolicy.checkBreaches');
122
+ }
123
+ for (const k of ['require_special_char', 'require_numbers', 'require_uppercase', 'require_lowercase']) {
124
+ if (pw[k] === true)
125
+ b.add('differs', 'password', `password_settings.${k}`, 'Atlas follows NIST 800-63B (length and breach checks, no composition rules); this rule is dropped.', 'auth_config.passwordPolicy');
126
+ }
127
+ // ── social providers ──
128
+ const social = (0, record_set_1.isObj)(us.social) ? us.social : {};
129
+ for (const [strategy, cfg] of Object.entries(social)) {
130
+ if (!(0, record_set_1.isObj)(cfg) || cfg.enabled !== true)
131
+ continue;
132
+ const key = (0, translate_kit_1.socialKey)(strategy);
133
+ if (key) {
134
+ b.socialProvider({ atlasKey: key, vendorName: strategy, area: 'SSO connections', setting: `social.${strategy}`, allowSignUp: cfg.authenticatable !== false });
135
+ if (cfg.authenticatable === false)
136
+ b.add('differs', 'SSO connections', `social.${strategy}.authenticatable`, 'Connect-only in Clerk; in Atlas it can sign in too (turn allow_sign_in off to match).', `oauth_providers ${key}`);
137
+ }
138
+ else if (strategy.startsWith('oauth_custom_')) {
139
+ b.add('manual', 'SSO connections', `social.${strategy}`, `Custom OAuth provider "${(0, record_set_1.str)(cfg.name) ?? strategy}": recreate it in Atlas as a custom OAuth/OIDC provider with its endpoints.`, 'custom_oauth_providers');
140
+ }
141
+ else {
142
+ b.add('manual', 'SSO connections', `social.${strategy}`, `"${(0, record_set_1.str)(cfg.name) ?? strategy}" is not a built-in Atlas provider; add it as a custom OAuth provider.`, 'custom_oauth_providers');
143
+ }
144
+ }
145
+ if ((0, record_set_1.isObj)(us.enterprise_sso) && us.enterprise_sso.enabled === true) {
146
+ b.add('mapped', 'SSO connections', 'enterprise_sso', 'Enterprise connections (SAML / OIDC) move with the data export as Atlas SSO connections. Give each IdP Atlas\'s new ACS URL and entity id.', 'sso_connections');
147
+ }
148
+ // ── sessions ──
149
+ const authConfig = (0, record_set_1.isObj)(env.auth_config) ? env.auth_config : {};
150
+ if (authConfig.single_session_mode !== undefined) {
151
+ b.set('session.multiSession', authConfig.single_session_mode !== true);
152
+ b.add('mapped', 'sessions', 'auth_config.single_session_mode', authConfig.single_session_mode === true ? 'One signed-in account per browser.' : 'Multi-session (account switching).', 'auth_config.session.multiSession');
153
+ }
154
+ b.add('manual', 'sessions', 'session lifetime / inactivity timeout', "Clerk's session lifetime is not in its public settings: copy it from Clerk's dashboard (Sessions) into auth_config.session.absoluteMs / idleMs.", 'auth_config.session');
155
+ // ── organizations ──
156
+ const orgs = (0, record_set_1.isObj)(env.organization_settings) ? env.organization_settings : {};
157
+ if (orgs.enabled === true) {
158
+ if (typeof orgs.max_allowed_memberships === 'number' && orgs.max_allowed_memberships > 0) {
159
+ b.set('organizations.defaultMaxAllowedMemberships', orgs.max_allowed_memberships);
160
+ b.add('mapped', 'organizations', 'organization_settings.max_allowed_memberships', `${orgs.max_allowed_memberships} members per organization.`, 'auth_config.organizations.defaultMaxAllowedMemberships');
161
+ }
162
+ const actions = (0, record_set_1.isObj)(orgs.actions) ? orgs.actions : {};
163
+ if (actions.admin_delete !== undefined) {
164
+ b.set('organizations.allowDeletionFromApp', actions.admin_delete === true);
165
+ b.add('mapped', 'organizations', 'organization_settings.actions.admin_delete', actions.admin_delete === true ? 'Admins can delete their organization.' : 'Admins cannot delete organizations.', 'auth_config.organizations.allowDeletionFromApp');
166
+ }
167
+ const domains = (0, record_set_1.isObj)(orgs.domains) ? orgs.domains : {};
168
+ if (domains.enabled === true)
169
+ b.add('mapped', 'organizations', 'organization_settings.domains', `Verified domains (${(0, record_set_1.strs)(domains.enrollment_modes).join(', ') || 'manual'}) move with each organization.`, 'organizations.domains');
170
+ const creator = (0, record_set_1.str)((0, record_set_1.isObj)(orgs.creator_role) ? orgs.creator_role.key : orgs.creator_role);
171
+ if (creator) {
172
+ b.set('organizations.creatorRole', creator.startsWith('org:') ? creator : `org:${creator}`);
173
+ b.add('mapped', 'organizations', 'organization_settings.creator_role', `Creators are seated as ${creator}.`, 'auth_config.organizations.creatorRole');
174
+ }
175
+ }
176
+ // ── roles, permissions, JWT templates, redirect URLs (Backend API) ──
177
+ for (const p of snap.permissions ?? []) {
178
+ const key = (0, record_set_1.str)(p.key);
179
+ if (!key || /^org:sys_/.test(key))
180
+ continue;
181
+ b.push('permissions', { key: key.replace(/^org:/, ''), name: (0, record_set_1.str)(p.name) ?? key, description: (0, record_set_1.str)(p.description) ?? '' });
182
+ }
183
+ if (snap.permissions?.length)
184
+ b.add('mapped', 'organizations', 'organization_permissions', `${b.collections.permissions.length} custom permission(s); Clerk's system permissions are built into Atlas.`, 'permissions');
185
+ for (const r of snap.roles ?? []) {
186
+ const key = (0, record_set_1.str)(r.key);
187
+ if (!key)
188
+ continue;
189
+ const atlasKey = key.startsWith('org:') ? key : `org:${(0, translate_kit_1.keyOf)(key)}`;
190
+ b.roles[key] = atlasKey;
191
+ b.push('roles', {
192
+ key: atlasKey,
193
+ name: (0, record_set_1.str)(r.name) ?? key,
194
+ description: (0, record_set_1.str)(r.description) ?? '',
195
+ permissions: (0, record_set_1.objs)(r.permissions).map((p) => (0, record_set_1.str)(p.key)).filter((p) => !!p).map((p) => p.replace(/^org:/, '')),
196
+ });
197
+ }
198
+ if (snap.roles?.length)
199
+ b.add('mapped', 'organizations', 'organization_roles', `${snap.roles.length} role(s), same keys.`, 'roles');
200
+ for (const t of snap.jwtTemplates ?? []) {
201
+ const name = (0, record_set_1.str)(t.name);
202
+ if (!name)
203
+ continue;
204
+ b.push('jwt_templates', { name, claims: ((0, record_set_1.isObj)(t.claims) ? t.claims : {}), lifetime: typeof t.lifetime === 'number' ? t.lifetime : 60, ...(typeof t.allowed_clock_skew === 'number' ? { allowed_clock_skew: t.allowed_clock_skew } : {}) });
205
+ b.add(t.custom_signing_key === true ? 'differs' : 'mapped', 'JWT templates', `jwt_templates.${name}`, t.custom_signing_key === true ? 'Template kept; Atlas signs it with the instance key (the custom signing key is not copied).' : 'Same shortcodes ({{user.id}}, {{org.role}} …).', `jwt_templates ${name}`);
206
+ }
207
+ for (const r of snap.redirectUrls ?? []) {
208
+ const url = (0, record_set_1.str)(r.url);
209
+ if (url)
210
+ b.push('redirect_urls', { url });
211
+ }
212
+ if (snap.redirectUrls?.length)
213
+ b.add('mapped', 'paths', 'redirect_urls', 'Native / OAuth redirect URLs.', 'redirect_urls');
214
+ const display = (0, record_set_1.isObj)(env.display_config) ? env.display_config : {};
215
+ for (const [setting, atlas] of [
216
+ ['sign_in_url', 'NEXT_PUBLIC_ATLAS_SIGN_IN_URL'],
217
+ ['sign_up_url', 'NEXT_PUBLIC_ATLAS_SIGN_UP_URL'],
218
+ ]) {
219
+ const v = (0, record_set_1.str)(display[setting]);
220
+ if (v)
221
+ b.add('differs', 'paths', `display_config.${setting}`, `Clerk hosts ${v}; Atlas uses its own hosted pages or your routes (set ${atlas}).`, atlas);
222
+ }
223
+ return b.result(`Clerk instance ${snap.frontendApi}`, {
224
+ bridge: { preset: 'clerk', vars: { frontend_api: snap.frontendApi } },
225
+ });
226
+ }
227
+ //# sourceMappingURL=clerk-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clerk-config.js","sourceRoot":"","sources":["../../../src/migrate/export/clerk-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import type { PasswordHash } from '@atlasauth/migrate';
2
+ import { RecordSet } from './record-set';
3
+ /**
4
+ * `atlas migrate export clerk` — everything Clerk lets an instance owner take
5
+ * out, mapped onto the canonical bundle models.
6
+ *
7
+ * Two sources, merged by Clerk user id:
8
+ * - the Backend API (secret key, on this machine only): users with their
9
+ * emails, phones, social and enterprise accounts and all three metadata
10
+ * bags; organizations, domains, memberships, roles and permissions,
11
+ * pending invitations, enterprise (SAML/OIDC) connections, API keys and
12
+ * the instance's public signing keys;
13
+ * - the dashboard CSV export (Users → Export), the ONLY place Clerk hands
14
+ * out password digests (`password_digest` + `password_hasher`) and TOTP
15
+ * secrets (`totp_secret`). The API never returns either.
16
+ *
17
+ * Clerk cannot export passkeys (only their names) or backup codes: those
18
+ * users enrol again. Sessions are not exported — Clerk session tokens are
19
+ * JWTs, bridged by the `clerk` bridge preset (JWKS) instead.
20
+ */
21
+ export interface ClerkExportOptions {
22
+ secretKey?: string;
23
+ /** Defaults to https://api.clerk.com. */
24
+ apiUrl?: string;
25
+ /** The dashboard CSV export text, when the owner downloaded one. */
26
+ csv?: string;
27
+ fetchImpl?: typeof fetch;
28
+ sleep?: (ms: number) => Promise<void>;
29
+ /** Skip API-key secrets (they are read one call per key). */
30
+ skipApiKeys?: boolean;
31
+ onProgress?: (message: string) => void;
32
+ }
33
+ export declare function exportClerk(opts: ClerkExportOptions): Promise<RecordSet>;
34
+ /**
35
+ * A Clerk `password_digest` + `password_hasher` → the bundle's password hash
36
+ * (an Atlas hash-registry algorithm with its parameters). Formats per Clerk's
37
+ * `createUser` reference. Returns a reason when the digest cannot move: those
38
+ * users sign in through lazy migration (Clerk's verify_password) instead.
39
+ */
40
+ export declare function clerkPasswordHash(hasher: string, digest: string): PasswordHash | {
41
+ reason: string;
42
+ };
43
+ /** Clerk role keys carry an `org:` prefix; the bundle uses the bare key. */
44
+ export declare function roleKey(key: string): string;
45
+ /** `org:invoices:read` → `invoices:read`; system permissions keep their `sys_` key. */
46
+ export declare function permissionKey(key: string): string;