@atlasauth/cli 0.12.0 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (276) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/args.d.ts +15 -0
  3. package/dist/args.js +7 -0
  4. package/dist/args.js.map +1 -1
  5. package/dist/commands/config.js +71 -6
  6. package/dist/commands/config.js.map +1 -1
  7. package/dist/commands/dev.d.ts +8 -0
  8. package/dist/commands/dev.js +84 -0
  9. package/dist/commands/dev.js.map +1 -0
  10. package/dist/commands/pages.d.ts +14 -0
  11. package/dist/commands/pages.js +113 -0
  12. package/dist/commands/pages.js.map +1 -0
  13. package/dist/context.d.ts +1 -1
  14. package/dist/help.d.ts +1 -1
  15. package/dist/help.js +58 -2
  16. package/dist/help.js.map +1 -1
  17. package/dist/index.d.ts +1 -0
  18. package/dist/index.js +3 -1
  19. package/dist/index.js.map +1 -1
  20. package/dist/migrate/appwrite/plugin.d.ts +2 -0
  21. package/dist/migrate/appwrite/plugin.js +103 -0
  22. package/dist/migrate/appwrite/plugin.js.map +1 -0
  23. package/dist/migrate/authentik/plugin.d.ts +2 -0
  24. package/dist/migrate/authentik/plugin.js +135 -0
  25. package/dist/migrate/authentik/plugin.js.map +1 -0
  26. package/dist/migrate/azure-ad-b2c/plugin.d.ts +8 -0
  27. package/dist/migrate/azure-ad-b2c/plugin.js +165 -0
  28. package/dist/migrate/azure-ad-b2c/plugin.js.map +1 -0
  29. package/dist/migrate/cognito/plugin.d.ts +5 -0
  30. package/dist/migrate/cognito/plugin.js +170 -0
  31. package/dist/migrate/cognito/plugin.js.map +1 -0
  32. package/dist/migrate/corbado/plugin.d.ts +2 -0
  33. package/dist/migrate/corbado/plugin.js +63 -0
  34. package/dist/migrate/corbado/plugin.js.map +1 -0
  35. package/dist/migrate/entra-external-id/plugin.d.ts +8 -0
  36. package/dist/migrate/entra-external-id/plugin.js +12 -0
  37. package/dist/migrate/entra-external-id/plugin.js.map +1 -0
  38. package/dist/migrate/export/appwrite-config.d.ts +28 -0
  39. package/dist/migrate/export/appwrite-config.js +170 -0
  40. package/dist/migrate/export/appwrite-config.js.map +1 -0
  41. package/dist/migrate/export/appwrite.d.ts +51 -0
  42. package/dist/migrate/export/appwrite.js +288 -0
  43. package/dist/migrate/export/appwrite.js.map +1 -0
  44. package/dist/migrate/export/authentik-config.d.ts +45 -0
  45. package/dist/migrate/export/authentik-config.js +357 -0
  46. package/dist/migrate/export/authentik-config.js.map +1 -0
  47. package/dist/migrate/export/authentik.d.ts +110 -0
  48. package/dist/migrate/export/authentik.js +838 -0
  49. package/dist/migrate/export/authentik.js.map +1 -0
  50. package/dist/migrate/export/azure-config.d.ts +58 -0
  51. package/dist/migrate/export/azure-config.js +344 -0
  52. package/dist/migrate/export/azure-config.js.map +1 -0
  53. package/dist/migrate/export/azure.d.ts +85 -0
  54. package/dist/migrate/export/azure.js +373 -0
  55. package/dist/migrate/export/azure.js.map +1 -0
  56. package/dist/migrate/export/cognito-config.d.ts +25 -0
  57. package/dist/migrate/export/cognito-config.js +273 -0
  58. package/dist/migrate/export/cognito-config.js.map +1 -0
  59. package/dist/migrate/export/cognito.d.ts +103 -0
  60. package/dist/migrate/export/cognito.js +441 -0
  61. package/dist/migrate/export/cognito.js.map +1 -0
  62. package/dist/migrate/export/corbado-config.d.ts +20 -0
  63. package/dist/migrate/export/corbado-config.js +63 -0
  64. package/dist/migrate/export/corbado-config.js.map +1 -0
  65. package/dist/migrate/export/corbado.d.ts +37 -0
  66. package/dist/migrate/export/corbado.js +132 -0
  67. package/dist/migrate/export/corbado.js.map +1 -0
  68. package/dist/migrate/export/firebase-config.d.ts +24 -0
  69. package/dist/migrate/export/firebase-config.js +215 -0
  70. package/dist/migrate/export/firebase-config.js.map +1 -0
  71. package/dist/migrate/export/firebase.d.ts +102 -0
  72. package/dist/migrate/export/firebase.js +464 -0
  73. package/dist/migrate/export/firebase.js.map +1 -0
  74. package/dist/migrate/export/frontegg-config.d.ts +29 -0
  75. package/dist/migrate/export/frontegg-config.js +238 -0
  76. package/dist/migrate/export/frontegg-config.js.map +1 -0
  77. package/dist/migrate/export/frontegg.d.ts +67 -0
  78. package/dist/migrate/export/frontegg.js +410 -0
  79. package/dist/migrate/export/frontegg.js.map +1 -0
  80. package/dist/migrate/export/fusionauth-config.d.ts +26 -0
  81. package/dist/migrate/export/fusionauth-config.js +226 -0
  82. package/dist/migrate/export/fusionauth-config.js.map +1 -0
  83. package/dist/migrate/export/fusionauth.d.ts +99 -0
  84. package/dist/migrate/export/fusionauth.js +642 -0
  85. package/dist/migrate/export/fusionauth.js.map +1 -0
  86. package/dist/migrate/export/hanko-config.d.ts +27 -0
  87. package/dist/migrate/export/hanko-config.js +265 -0
  88. package/dist/migrate/export/hanko-config.js.map +1 -0
  89. package/dist/migrate/export/hanko.d.ts +52 -0
  90. package/dist/migrate/export/hanko.js +605 -0
  91. package/dist/migrate/export/hanko.js.map +1 -0
  92. package/dist/migrate/export/keycloak-config.d.ts +19 -0
  93. package/dist/migrate/export/keycloak-config.js +219 -0
  94. package/dist/migrate/export/keycloak-config.js.map +1 -0
  95. package/dist/migrate/export/keycloak.d.ts +155 -0
  96. package/dist/migrate/export/keycloak.js +878 -0
  97. package/dist/migrate/export/keycloak.js.map +1 -0
  98. package/dist/migrate/export/ldap.d.ts +53 -0
  99. package/dist/migrate/export/ldap.js +277 -0
  100. package/dist/migrate/export/ldap.js.map +1 -0
  101. package/dist/migrate/export/logto-config.d.ts +27 -0
  102. package/dist/migrate/export/logto-config.js +264 -0
  103. package/dist/migrate/export/logto-config.js.map +1 -0
  104. package/dist/migrate/export/logto.d.ts +150 -0
  105. package/dist/migrate/export/logto.js +809 -0
  106. package/dist/migrate/export/logto.js.map +1 -0
  107. package/dist/migrate/export/magic-config.d.ts +14 -0
  108. package/dist/migrate/export/magic-config.js +28 -0
  109. package/dist/migrate/export/magic-config.js.map +1 -0
  110. package/dist/migrate/export/magic.d.ts +31 -0
  111. package/dist/migrate/export/magic.js +93 -0
  112. package/dist/migrate/export/magic.js.map +1 -0
  113. package/dist/migrate/export/mini-yaml.d.ts +19 -0
  114. package/dist/migrate/export/mini-yaml.js +581 -0
  115. package/dist/migrate/export/mini-yaml.js.map +1 -0
  116. package/dist/migrate/export/nhost-config.d.ts +26 -0
  117. package/dist/migrate/export/nhost-config.js +360 -0
  118. package/dist/migrate/export/nhost-config.js.map +1 -0
  119. package/dist/migrate/export/nhost.d.ts +64 -0
  120. package/dist/migrate/export/nhost.js +304 -0
  121. package/dist/migrate/export/nhost.js.map +1 -0
  122. package/dist/migrate/export/onelogin.d.ts +22 -0
  123. package/dist/migrate/export/onelogin.js +123 -0
  124. package/dist/migrate/export/onelogin.js.map +1 -0
  125. package/dist/migrate/export/ory-config.d.ts +58 -0
  126. package/dist/migrate/export/ory-config.js +451 -0
  127. package/dist/migrate/export/ory-config.js.map +1 -0
  128. package/dist/migrate/export/ory.d.ts +81 -0
  129. package/dist/migrate/export/ory.js +555 -0
  130. package/dist/migrate/export/ory.js.map +1 -0
  131. package/dist/migrate/export/password-detect.d.ts +29 -0
  132. package/dist/migrate/export/password-detect.js +81 -0
  133. package/dist/migrate/export/password-detect.js.map +1 -0
  134. package/dist/migrate/export/pingone.d.ts +36 -0
  135. package/dist/migrate/export/pingone.js +218 -0
  136. package/dist/migrate/export/pingone.js.map +1 -0
  137. package/dist/migrate/export/pocketbase-config.d.ts +28 -0
  138. package/dist/migrate/export/pocketbase-config.js +180 -0
  139. package/dist/migrate/export/pocketbase-config.js.map +1 -0
  140. package/dist/migrate/export/pocketbase.d.ts +52 -0
  141. package/dist/migrate/export/pocketbase.js +243 -0
  142. package/dist/migrate/export/pocketbase.js.map +1 -0
  143. package/dist/migrate/export/project-files.d.ts +15 -0
  144. package/dist/migrate/export/project-files.js +43 -0
  145. package/dist/migrate/export/project-files.js.map +1 -0
  146. package/dist/migrate/export/propelauth-config.d.ts +18 -0
  147. package/dist/migrate/export/propelauth-config.js +58 -0
  148. package/dist/migrate/export/propelauth-config.js.map +1 -0
  149. package/dist/migrate/export/propelauth-harness.test-helper.d.ts +62 -0
  150. package/dist/migrate/export/propelauth-harness.test-helper.js +109 -0
  151. package/dist/migrate/export/propelauth-harness.test-helper.js.map +1 -0
  152. package/dist/migrate/export/propelauth.d.ts +48 -0
  153. package/dist/migrate/export/propelauth.js +255 -0
  154. package/dist/migrate/export/propelauth.js.map +1 -0
  155. package/dist/migrate/export/source-lines.d.ts +17 -0
  156. package/dist/migrate/export/source-lines.js +43 -0
  157. package/dist/migrate/export/source-lines.js.map +1 -0
  158. package/dist/migrate/export/sso-metadata.d.ts +47 -0
  159. package/dist/migrate/export/sso-metadata.js +180 -0
  160. package/dist/migrate/export/sso-metadata.js.map +1 -0
  161. package/dist/migrate/export/stytch-config.d.ts +22 -0
  162. package/dist/migrate/export/stytch-config.js +102 -0
  163. package/dist/migrate/export/stytch-config.js.map +1 -0
  164. package/dist/migrate/export/stytch.d.ts +68 -0
  165. package/dist/migrate/export/stytch.js +510 -0
  166. package/dist/migrate/export/stytch.js.map +1 -0
  167. package/dist/migrate/export/supabase-config.d.ts +48 -0
  168. package/dist/migrate/export/supabase-config.js +408 -0
  169. package/dist/migrate/export/supabase-config.js.map +1 -0
  170. package/dist/migrate/export/supabase.d.ts +86 -0
  171. package/dist/migrate/export/supabase.js +524 -0
  172. package/dist/migrate/export/supabase.js.map +1 -0
  173. package/dist/migrate/export/supertokens-config.d.ts +20 -0
  174. package/dist/migrate/export/supertokens-config.js +150 -0
  175. package/dist/migrate/export/supertokens-config.js.map +1 -0
  176. package/dist/migrate/export/supertokens.d.ts +125 -0
  177. package/dist/migrate/export/supertokens.js +464 -0
  178. package/dist/migrate/export/supertokens.js.map +1 -0
  179. package/dist/migrate/export/table.d.ts +35 -0
  180. package/dist/migrate/export/table.js +248 -0
  181. package/dist/migrate/export/table.js.map +1 -0
  182. package/dist/migrate/export/userfront-config.d.ts +15 -0
  183. package/dist/migrate/export/userfront-config.js +49 -0
  184. package/dist/migrate/export/userfront-config.js.map +1 -0
  185. package/dist/migrate/export/userfront.d.ts +38 -0
  186. package/dist/migrate/export/userfront.js +189 -0
  187. package/dist/migrate/export/userfront.js.map +1 -0
  188. package/dist/migrate/export/workos-config.d.ts +23 -0
  189. package/dist/migrate/export/workos-config.js +125 -0
  190. package/dist/migrate/export/workos-config.js.map +1 -0
  191. package/dist/migrate/export/workos.d.ts +46 -0
  192. package/dist/migrate/export/workos.js +272 -0
  193. package/dist/migrate/export/workos.js.map +1 -0
  194. package/dist/migrate/export/zitadel-config.d.ts +37 -0
  195. package/dist/migrate/export/zitadel-config.js +279 -0
  196. package/dist/migrate/export/zitadel-config.js.map +1 -0
  197. package/dist/migrate/export/zitadel.d.ts +82 -0
  198. package/dist/migrate/export/zitadel.js +447 -0
  199. package/dist/migrate/export/zitadel.js.map +1 -0
  200. package/dist/migrate/firebase/plugin.d.ts +2 -0
  201. package/dist/migrate/firebase/plugin.js +152 -0
  202. package/dist/migrate/firebase/plugin.js.map +1 -0
  203. package/dist/migrate/framework/builtins.js +35 -6
  204. package/dist/migrate/framework/builtins.js.map +1 -1
  205. package/dist/migrate/framework/orchestrator.js +3 -2
  206. package/dist/migrate/framework/orchestrator.js.map +1 -1
  207. package/dist/migrate/framework/plugin.d.ts +2 -0
  208. package/dist/migrate/frontegg/plugin.d.ts +2 -0
  209. package/dist/migrate/frontegg/plugin.js +78 -0
  210. package/dist/migrate/frontegg/plugin.js.map +1 -0
  211. package/dist/migrate/fusionauth/plugin.d.ts +2 -0
  212. package/dist/migrate/fusionauth/plugin.js +109 -0
  213. package/dist/migrate/fusionauth/plugin.js.map +1 -0
  214. package/dist/migrate/hanko/plugin.d.ts +2 -0
  215. package/dist/migrate/hanko/plugin.js +100 -0
  216. package/dist/migrate/hanko/plugin.js.map +1 -0
  217. package/dist/migrate/keycloak/plugin.d.ts +2 -0
  218. package/dist/migrate/keycloak/plugin.js +148 -0
  219. package/dist/migrate/keycloak/plugin.js.map +1 -0
  220. package/dist/migrate/ldap/plugin.d.ts +2 -0
  221. package/dist/migrate/ldap/plugin.js +73 -0
  222. package/dist/migrate/ldap/plugin.js.map +1 -0
  223. package/dist/migrate/logto/plugin.d.ts +2 -0
  224. package/dist/migrate/logto/plugin.js +131 -0
  225. package/dist/migrate/logto/plugin.js.map +1 -0
  226. package/dist/migrate/magic/plugin.d.ts +2 -0
  227. package/dist/migrate/magic/plugin.js +56 -0
  228. package/dist/migrate/magic/plugin.js.map +1 -0
  229. package/dist/migrate/nhost/plugin.d.ts +2 -0
  230. package/dist/migrate/nhost/plugin.js +115 -0
  231. package/dist/migrate/nhost/plugin.js.map +1 -0
  232. package/dist/migrate/oidc/plugin.d.ts +2 -0
  233. package/dist/migrate/oidc/plugin.js +73 -0
  234. package/dist/migrate/oidc/plugin.js.map +1 -0
  235. package/dist/migrate/onelogin/plugin.d.ts +2 -0
  236. package/dist/migrate/onelogin/plugin.js +61 -0
  237. package/dist/migrate/onelogin/plugin.js.map +1 -0
  238. package/dist/migrate/ory/plugin.d.ts +2 -0
  239. package/dist/migrate/ory/plugin.js +186 -0
  240. package/dist/migrate/ory/plugin.js.map +1 -0
  241. package/dist/migrate/ping-identity/plugin.d.ts +2 -0
  242. package/dist/migrate/ping-identity/plugin.js +100 -0
  243. package/dist/migrate/ping-identity/plugin.js.map +1 -0
  244. package/dist/migrate/pocketbase/plugin.d.ts +2 -0
  245. package/dist/migrate/pocketbase/plugin.js +99 -0
  246. package/dist/migrate/pocketbase/plugin.js.map +1 -0
  247. package/dist/migrate/propelauth/plugin.d.ts +2 -0
  248. package/dist/migrate/propelauth/plugin.js +65 -0
  249. package/dist/migrate/propelauth/plugin.js.map +1 -0
  250. package/dist/migrate/saml/plugin.d.ts +2 -0
  251. package/dist/migrate/saml/plugin.js +79 -0
  252. package/dist/migrate/saml/plugin.js.map +1 -0
  253. package/dist/migrate/stytch/plugin.d.ts +2 -0
  254. package/dist/migrate/stytch/plugin.js +97 -0
  255. package/dist/migrate/stytch/plugin.js.map +1 -0
  256. package/dist/migrate/supabase/plugin.d.ts +2 -0
  257. package/dist/migrate/supabase/plugin.js +149 -0
  258. package/dist/migrate/supabase/plugin.js.map +1 -0
  259. package/dist/migrate/supertokens/plugin.d.ts +2 -0
  260. package/dist/migrate/supertokens/plugin.js +114 -0
  261. package/dist/migrate/supertokens/plugin.js.map +1 -0
  262. package/dist/migrate/user-table/plugin.d.ts +2 -0
  263. package/dist/migrate/user-table/plugin.js +62 -0
  264. package/dist/migrate/user-table/plugin.js.map +1 -0
  265. package/dist/migrate/userfront/plugin.d.ts +2 -0
  266. package/dist/migrate/userfront/plugin.js +60 -0
  267. package/dist/migrate/userfront/plugin.js.map +1 -0
  268. package/dist/migrate/workos/plugin.d.ts +2 -0
  269. package/dist/migrate/workos/plugin.js +81 -0
  270. package/dist/migrate/workos/plugin.js.map +1 -0
  271. package/dist/migrate/zitadel/plugin.d.ts +2 -0
  272. package/dist/migrate/zitadel/plugin.js +114 -0
  273. package/dist/migrate/zitadel/plugin.js.map +1 -0
  274. package/dist/run.js +4 -0
  275. package/dist/run.js.map +1 -1
  276. package/package.json +6 -5
@@ -0,0 +1,373 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GRAPH = void 0;
4
+ exports.graphToken = graphToken;
5
+ exports.graphHttp = graphHttp;
6
+ exports.graphAll = graphAll;
7
+ exports.providerOfIssuer = providerOfIssuer;
8
+ exports.extensionAttributes = extensionAttributes;
9
+ exports.isDirectoryUser = isDirectoryUser;
10
+ exports.mapAzureUser = mapAzureUser;
11
+ exports.azureFactors = azureFactors;
12
+ exports.azureTenantInfo = azureTenantInfo;
13
+ exports.userExtensionNames = userExtensionNames;
14
+ exports.exportAzure = exportAzure;
15
+ const record_set_1 = require("./record-set");
16
+ const translate_kit_1 = require("./translate-kit");
17
+ const vendor_http_1 = require("./vendor-http");
18
+ exports.GRAPH = 'https://graph.microsoft.com/v1.0';
19
+ /** The client-credentials token for Microsoft Graph (sent to login.microsoftonline.com only). */
20
+ async function graphToken(tenant, clientId, clientSecret, fetchImpl = fetch) {
21
+ const res = await fetchImpl(`https://login.microsoftonline.com/${encodeURIComponent(tenant)}/oauth2/v2.0/token`, {
22
+ method: 'POST',
23
+ headers: { 'content-type': 'application/x-www-form-urlencoded', accept: 'application/json' },
24
+ body: new URLSearchParams({ grant_type: 'client_credentials', client_id: clientId, client_secret: clientSecret, scope: 'https://graph.microsoft.com/.default' }).toString(),
25
+ });
26
+ const text = await res.text();
27
+ let body = {};
28
+ try {
29
+ body = JSON.parse(text);
30
+ }
31
+ catch {
32
+ // not JSON: reported below
33
+ }
34
+ const token = (0, record_set_1.str)(body.access_token);
35
+ if (!res.ok || !token) {
36
+ const detail = ((0, record_set_1.str)(body.error_description) ?? (0, record_set_1.str)(body.error) ?? text.slice(0, 200)).split(/\r?\n/)[0];
37
+ throw new vendor_http_1.VendorApiError('Microsoft Entra', res.status, '/oauth2/v2.0/token', detail ?? '');
38
+ }
39
+ return token;
40
+ }
41
+ /** Graph over {@link VendorHttp}: a bearer from a token or client credentials, fetched once. */
42
+ function graphHttp(o) {
43
+ if (!o.accessToken && !(o.clientId && o.clientSecret))
44
+ throw new Error('Microsoft Graph needs an app registration\'s client id and secret (or an access token).');
45
+ let bearer = o.accessToken;
46
+ return new vendor_http_1.VendorHttp({
47
+ vendor: 'Microsoft Graph',
48
+ baseUrl: exports.GRAPH,
49
+ headers: async () => ({ authorization: `Bearer ${(bearer ??= await graphToken(o.tenant, o.clientId, o.clientSecret, o.fetchImpl))}` }),
50
+ fetchImpl: o.fetchImpl,
51
+ sleep: o.sleep,
52
+ });
53
+ }
54
+ /** Every page of a Graph collection (`@odata.nextLink`). */
55
+ async function graphAll(http, path) {
56
+ const out = [];
57
+ let next = path;
58
+ while (next) {
59
+ const res = await http.get(next);
60
+ const body = (0, record_set_1.isObj)(res.body) ? res.body : {};
61
+ out.push(...(0, record_set_1.objs)(body.value));
62
+ next = (0, record_set_1.str)(body['@odata.nextLink']);
63
+ }
64
+ return out;
65
+ }
66
+ const USER_FIELDS = [
67
+ 'id',
68
+ 'displayName',
69
+ 'givenName',
70
+ 'surname',
71
+ 'mail',
72
+ 'otherMails',
73
+ 'mobilePhone',
74
+ 'identities',
75
+ 'accountEnabled',
76
+ 'createdDateTime',
77
+ 'userPrincipalName',
78
+ 'userType',
79
+ 'creationType',
80
+ 'passwordPolicies',
81
+ 'lastPasswordChangeDateTime',
82
+ 'preferredLanguage',
83
+ 'city',
84
+ 'country',
85
+ 'jobTitle',
86
+ ];
87
+ /** Federated identity issuers → the provider an identity record carries. */
88
+ const ISSUERS = [
89
+ [/^(https?:\/\/)?(accounts\.)?google\.com\/?$/i, 'google'],
90
+ [/^(https?:\/\/)?(www\.)?facebook\.com\/?$/i, 'facebook'],
91
+ [/^(https?:\/\/)?appleid\.apple\.com\/?$/i, 'apple'],
92
+ [/^(https?:\/\/)?(www\.)?amazon\.com\/?$/i, 'amazon'],
93
+ [/^(https?:\/\/)?(www\.)?linkedin\.com\/?$/i, 'linkedin'],
94
+ [/^(https?:\/\/)?(www\.)?(twitter|x)\.com\/?$/i, 'x'],
95
+ [/^(https?:\/\/)?(www\.)?github\.com\/?$/i, 'github'],
96
+ [/^(MicrosoftAccount|live\.com|https:\/\/login\.live\.com)\/?$/i, 'microsoft'],
97
+ [/^https:\/\/login\.microsoftonline\.com\/9188040d-6c67-4c5b-b112-36a304b66dad\/v2\.0\/?$/i, 'microsoft'],
98
+ ];
99
+ /** The provider name for a federated identity's issuer (a social key, or the issuer itself for an OIDC / enterprise IdP). */
100
+ function providerOfIssuer(issuer) {
101
+ for (const [re, key] of ISSUERS)
102
+ if (re.test(issuer))
103
+ return { provider: key, kind: 'oauth' };
104
+ return { provider: issuer, kind: /^https:\/\//.test(issuer) ? 'oidc' : 'oauth' };
105
+ }
106
+ /** The extension attributes on a user (`extension_<appId>_<name>`) by bare name. */
107
+ function extensionAttributes(u) {
108
+ const out = {};
109
+ for (const [k, v] of Object.entries(u)) {
110
+ const m = /^extension_[0-9a-f]{32}_(.+)$/i.exec(k);
111
+ if (m && v !== null && v !== undefined)
112
+ out[m[1]] = v;
113
+ }
114
+ return out;
115
+ }
116
+ /** True for directory (admin / work) accounts: no consumer sign-in identity, only a userPrincipalName. */
117
+ function isDirectoryUser(u) {
118
+ const ids = (0, record_set_1.objs)(u.identities);
119
+ if ((0, record_set_1.str)(u.creationType) === 'LocalAccount')
120
+ return false;
121
+ return !ids.some((i) => (0, record_set_1.str)(i.signInType) !== 'userPrincipalName');
122
+ }
123
+ /** Map one Graph user onto a user record and its federated identities. */
124
+ function mapAzureUser(u) {
125
+ const id = (0, record_set_1.str)(u.id);
126
+ if (!id)
127
+ return null;
128
+ const emails = [];
129
+ const phones = [];
130
+ const identities = [];
131
+ let username;
132
+ let skippedIdentities = 0;
133
+ const addEmail = (raw, verified) => {
134
+ const e = (0, record_set_1.str)(raw)?.toLowerCase();
135
+ if (!e || !e.includes('@'))
136
+ return;
137
+ const existing = emails.find((x) => x.email === e);
138
+ if (existing)
139
+ existing.verified ||= verified;
140
+ else
141
+ emails.push({ email: e, verified, primary: false });
142
+ };
143
+ const addPhone = (raw, verified) => {
144
+ const p = (0, record_set_1.e164)(raw);
145
+ if (!p)
146
+ return;
147
+ const existing = phones.find((x) => x.phone === p);
148
+ if (existing)
149
+ existing.verified ||= verified;
150
+ else
151
+ phones.push({ phone: p, verified, primary: false });
152
+ };
153
+ for (const ident of (0, record_set_1.objs)(u.identities)) {
154
+ const type = (0, record_set_1.str)(ident.signInType) ?? '';
155
+ const value = (0, record_set_1.str)(ident.issuerAssignedId);
156
+ // Local sign-in names were verified by the user flow when the account was created (email / SMS code).
157
+ if (/^emailAddress\d*$/.test(type))
158
+ addEmail(value, true);
159
+ else if (type === 'userName')
160
+ username ??= value;
161
+ else if (type === 'phoneNumber')
162
+ addPhone(value, true);
163
+ else if (type === 'federated') {
164
+ const issuer = (0, record_set_1.str)(ident.issuer);
165
+ if (!issuer || !value) {
166
+ skippedIdentities++;
167
+ continue;
168
+ }
169
+ const { provider, kind } = providerOfIssuer(issuer);
170
+ identities.push((0, record_set_1.compact)({ user_id: id, provider, provider_user_id: value, kind, profile: { issuer } }));
171
+ }
172
+ }
173
+ addEmail(u.mail, false);
174
+ for (const m of (0, record_set_1.strs)(u.otherMails))
175
+ addEmail(m, false);
176
+ addPhone(u.mobilePhone, false);
177
+ if (emails[0])
178
+ emails[0].primary = true;
179
+ if (phones[0] && !emails.length)
180
+ phones[0].primary = true;
181
+ const custom = extensionAttributes(u);
182
+ const user = (0, record_set_1.compact)({
183
+ id,
184
+ emails: emails.length ? emails : undefined,
185
+ phones: phones.length ? phones : undefined,
186
+ username,
187
+ first_name: (0, record_set_1.str)(u.givenName),
188
+ last_name: (0, record_set_1.str)(u.surname),
189
+ name: (0, record_set_1.str)(u.displayName) === 'unknown' ? undefined : (0, record_set_1.str)(u.displayName),
190
+ banned: u.accountEnabled === false ? true : undefined,
191
+ public_metadata: Object.keys(custom).length ? custom : undefined,
192
+ private_metadata: (0, record_set_1.compact)({
193
+ azure_user_principal_name: (0, record_set_1.str)(u.userPrincipalName),
194
+ azure_creation_type: (0, record_set_1.str)(u.creationType),
195
+ azure_password_policies: (0, record_set_1.str)(u.passwordPolicies),
196
+ azure_profile: (0, record_set_1.compact)({ preferredLanguage: (0, record_set_1.str)(u.preferredLanguage), city: (0, record_set_1.str)(u.city), country: (0, record_set_1.str)(u.country), jobTitle: (0, record_set_1.str)(u.jobTitle) }),
197
+ }),
198
+ created_at: (0, record_set_1.str)(u.createdDateTime),
199
+ });
200
+ if (user.private_metadata && !Object.keys(user.private_metadata.azure_profile).length)
201
+ delete user.private_metadata.azure_profile;
202
+ if (!user.emails && !user.phones && !user.username) {
203
+ // A directory account (included on request) signs in by its userPrincipalName.
204
+ const upn = (0, record_set_1.str)(u.userPrincipalName) ?? (0, record_set_1.str)((0, record_set_1.objs)(u.identities).find((i) => (0, record_set_1.str)(i.signInType) === 'userPrincipalName')?.issuerAssignedId);
205
+ if (upn)
206
+ user.username = upn;
207
+ }
208
+ if (!user.emails && !user.phones && !user.username) {
209
+ // A federated-only account without an email claim: keep the object id reachable as a username-less user through its identity.
210
+ if (!identities.length)
211
+ return null;
212
+ user.username = `user_${id.replace(/-/g, '').slice(0, 20)}`;
213
+ }
214
+ return { user, identities, skippedIdentities };
215
+ }
216
+ /** Second factors from a user's authentication methods. */
217
+ function azureFactors(userId, phoneMethods, emailMethods) {
218
+ const out = [];
219
+ for (const m of phoneMethods) {
220
+ const phone = (0, record_set_1.e164)(m.phoneNumber);
221
+ if (phone && (0, record_set_1.str)(m.phoneType) !== 'office')
222
+ out.push({ user_id: userId, type: 'phone', phone, verified: true });
223
+ }
224
+ if (emailMethods.some((m) => (0, record_set_1.str)(m.emailAddress)))
225
+ out.push({ user_id: userId, type: 'email', verified: true });
226
+ return out;
227
+ }
228
+ /** Tenant id and initial domain (needs Organization.Read.All or Directory.Read.All; empty when not granted). */
229
+ async function azureTenantInfo(http) {
230
+ try {
231
+ const orgs = await graphAll(http, '/organization?$select=id,verifiedDomains');
232
+ const org = orgs[0];
233
+ if (!org)
234
+ return {};
235
+ const initial = (0, record_set_1.objs)(org.verifiedDomains).find((d) => d.isInitial === true);
236
+ return { tenantId: (0, record_set_1.str)(org.id), tenantName: (0, record_set_1.str)(initial?.name)?.replace(/\.onmicrosoft\.com$/i, '').toLowerCase() };
237
+ }
238
+ catch (err) {
239
+ if (err instanceof vendor_http_1.VendorApiError && err.status === 403)
240
+ return {};
241
+ throw err;
242
+ }
243
+ }
244
+ /** The extension attribute names registered for users (`extension_<app>_<name>`), for `$select`. */
245
+ async function userExtensionNames(http) {
246
+ try {
247
+ const res = await http.post('/directoryObjects/getAvailableExtensionProperties', { isSyncedFromOnPremises: false });
248
+ return (0, record_set_1.objs)((0, record_set_1.isObj)(res.body) ? res.body.value : undefined)
249
+ .filter((p) => (0, record_set_1.strs)(p.targetObjects).includes('User'))
250
+ .map((p) => (0, record_set_1.str)(p.name))
251
+ .filter((n) => !!n && /^extension_[0-9a-f]{32}_/i.test(n));
252
+ }
253
+ catch (err) {
254
+ if (err instanceof vendor_http_1.VendorApiError && [400, 401, 403, 404].includes(err.status))
255
+ return [];
256
+ throw err;
257
+ }
258
+ }
259
+ async function exportAzure(opts) {
260
+ const set = new record_set_1.RecordSet();
261
+ const label = opts.kind === 'b2c' ? 'Azure AD B2C' : 'Entra External ID';
262
+ const progress = opts.onProgress ?? (() => undefined);
263
+ const http = graphHttp(opts);
264
+ const info = await azureTenantInfo(http);
265
+ set.manifest.origin = `${label} tenant ${info.tenantName ? `${info.tenantName}.onmicrosoft.com` : opts.tenant}`;
266
+ // Groups → app roles.
267
+ const groups = [];
268
+ if (opts.groups !== 'skip') {
269
+ progress('groups');
270
+ try {
271
+ for (const g of await graphAll(http, '/groups?$select=id,displayName,description&$top=999')) {
272
+ const id = (0, record_set_1.str)(g.id);
273
+ const name = (0, record_set_1.str)(g.displayName);
274
+ if (!id || !name)
275
+ continue;
276
+ const key = (0, translate_kit_1.keyOf)(name);
277
+ groups.push({ id, key });
278
+ set.add('role', (0, record_set_1.compact)({ key, name, description: (0, record_set_1.str)(g.description), scope: 'app' }), key);
279
+ }
280
+ }
281
+ catch (err) {
282
+ if (!(err instanceof vendor_http_1.VendorApiError && err.status === 403))
283
+ throw err;
284
+ set.warn('Groups were not exported: the app registration lacks GroupMember.Read.All (or Group.Read.All).');
285
+ }
286
+ }
287
+ // Users.
288
+ progress('users');
289
+ const extensions = await userExtensionNames(http);
290
+ const select = [...USER_FIELDS, ...extensions].join(',');
291
+ const raw = await graphAll(http, `/users?$select=${select}&$top=999`);
292
+ const providers = new Set();
293
+ let directory = 0;
294
+ let skippedIdentities = 0;
295
+ let totpUsers = 0;
296
+ let fido2Users = 0;
297
+ let methodsDenied = false;
298
+ for (const u of raw) {
299
+ if (!opts.includeDirectoryUsers && isDirectoryUser(u)) {
300
+ directory++;
301
+ continue;
302
+ }
303
+ const mapped = mapAzureUser(u);
304
+ if (!mapped) {
305
+ set.omit('user', 'no email, phone number, username or federated identity');
306
+ continue;
307
+ }
308
+ set.add('user', mapped.user, mapped.user.id);
309
+ for (const i of mapped.identities) {
310
+ set.add('identity', i, `${i.provider}:${i.provider_user_id}`);
311
+ providers.add(i.provider);
312
+ }
313
+ skippedIdentities += mapped.skippedIdentities;
314
+ if (opts.authMethods && !methodsDenied) {
315
+ const uid = encodeURIComponent(mapped.user.id);
316
+ try {
317
+ const phone = await graphAll(http, `/users/${uid}/authentication/phoneMethods`);
318
+ const email = await graphAll(http, `/users/${uid}/authentication/emailMethods`);
319
+ for (const f of azureFactors(mapped.user.id, phone, email))
320
+ set.add('mfa_factor', f);
321
+ if ((await graphAll(http, `/users/${uid}/authentication/softwareOathMethods`)).length)
322
+ totpUsers++;
323
+ if ((await graphAll(http, `/users/${uid}/authentication/fido2Methods`)).length)
324
+ fido2Users++;
325
+ }
326
+ catch (err) {
327
+ if (!(err instanceof vendor_http_1.VendorApiError && (err.status === 403 || err.status === 401)))
328
+ throw err;
329
+ methodsDenied = true;
330
+ set.warn('Authentication methods were not exported: grant the app registration UserAuthenticationMethod.Read.All.');
331
+ }
332
+ }
333
+ }
334
+ if (directory)
335
+ set.omit('user', 'directory (admin / work) account that signs in with a userPrincipalName only', directory);
336
+ if (skippedIdentities)
337
+ set.omit('identity', 'federated identity without an issuer-assigned id (Graph keeps only an alternativeSecurityId); relinks by verified email on first sign-in', skippedIdentities);
338
+ if (totpUsers)
339
+ set.omit('mfa_factor', 'Microsoft never exports authenticator-app (software OATH) secrets: these users enrol again', totpUsers);
340
+ if (fido2Users)
341
+ set.omit('passkey', 'FIDO2 keys are bound to the Microsoft sign-in domain and never exported: these users register again', fido2Users);
342
+ // Group members → user roles.
343
+ if (groups.length) {
344
+ progress('group members');
345
+ const ids = new Set(set.list('user').map((u) => u.id));
346
+ const rolesOf = new Map();
347
+ for (const g of groups) {
348
+ for (const m of await graphAll(http, `/groups/${encodeURIComponent(g.id)}/members?$select=id&$top=999`)) {
349
+ const id = (0, record_set_1.str)(m.id);
350
+ if (!id || !ids.has(id))
351
+ continue;
352
+ rolesOf.set(id, [...(rolesOf.get(id) ?? []), g.key]);
353
+ }
354
+ }
355
+ for (const user of set.list('user')) {
356
+ const roles = rolesOf.get(user.id);
357
+ if (roles?.length)
358
+ user.roles = [...new Set(roles)];
359
+ }
360
+ }
361
+ if (set.count('user')) {
362
+ set.warn(opts.kind === 'b2c'
363
+ ? 'Azure AD B2C never exports passwords. Turn on the azure_ad_b2c lazy-migration preset with a ROPC user flow: each password is checked against B2C on its first Atlas sign-in, then stored as Argon2id. Accounts with MFA enforced in that flow, and federated accounts, cannot use ROPC.'
364
+ : 'Entra External ID never exports passwords. Turn on the entra_external_id lazy-migration preset (native authentication): each password is checked against External ID on its first Atlas sign-in, then stored as Argon2id.');
365
+ set.warn(opts.kind === 'b2c'
366
+ ? 'Users are keyed by their object id, the sub claim of default B2C user flows. If a custom policy issues another value as sub, map the bridge subject to the claim that carries the object id (oid).'
367
+ : 'Users are keyed by their object id (the oid claim); the entra_external_id bridge preset matches on oid.');
368
+ }
369
+ set.manifest.providers = [...providers].sort();
370
+ set.manifest.settings = (0, record_set_1.compact)({ kind: opts.kind, tenant_id: info.tenantId, tenant_name: info.tenantName, extension_attributes: extensions.length ? extensions : undefined });
371
+ return set;
372
+ }
373
+ //# sourceMappingURL=azure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"azure.js","sourceRoot":"","sources":["../../../src/migrate/export/azure.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import type { TranslationResult } from '../framework/plugin';
2
+ import type { CognitoApi } from './cognito';
3
+ import { type Obj } from './record-set';
4
+ /**
5
+ * `atlas migrate cognito config` — a user pool's settings → Atlas config,
6
+ * read with the owner's AWS credentials on this machine: DescribeUserPool
7
+ * (password policy, MFA, sign-in identifiers, verification, self sign-up,
8
+ * Lambda triggers), every app client (callback URLs, OAuth scopes, token
9
+ * lifetimes, auth flows), identity providers (social → Atlas providers,
10
+ * SAML / OIDC → SSO connections), resource servers (APIs and scopes) and
11
+ * groups (roles).
12
+ */
13
+ export interface CognitoConfigSnapshot {
14
+ poolId: string;
15
+ region: string;
16
+ pool: Obj;
17
+ clients: Obj[];
18
+ idps: Obj[];
19
+ resourceServers: Obj[];
20
+ groups: Obj[];
21
+ }
22
+ export declare function fetchCognitoConfig(api: CognitoApi, poolId: string, region: string): Promise<CognitoConfigSnapshot>;
23
+ /** A client's token validity in ms (`RefreshTokenValidity` with `TokenValidityUnits.RefreshToken`). */
24
+ export declare function validityMs(client: Obj, field: 'AccessToken' | 'IdToken' | 'RefreshToken'): number | undefined;
25
+ export declare function translateCognitoConfig(snap: CognitoConfigSnapshot): TranslationResult;