@atlasauth/cli 0.25.0 → 0.26.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 (546) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/README.md +26 -5
  3. package/dist/args.d.ts +631 -0
  4. package/dist/args.js +304 -0
  5. package/dist/args.js.map +1 -0
  6. package/dist/cli.d.ts +2 -0
  7. package/dist/cli.js +19 -0
  8. package/dist/cli.js.map +1 -0
  9. package/dist/commands/actions-gallery.d.ts +8 -0
  10. package/dist/commands/actions-gallery.js +197 -0
  11. package/dist/commands/actions-gallery.js.map +1 -0
  12. package/dist/commands/actions.d.ts +13 -0
  13. package/dist/commands/actions.js +135 -0
  14. package/dist/commands/actions.js.map +1 -0
  15. package/dist/commands/admin.d.ts +49 -0
  16. package/dist/commands/admin.js +353 -0
  17. package/dist/commands/admin.js.map +1 -0
  18. package/dist/commands/api-keys.d.ts +4 -0
  19. package/dist/commands/api-keys.js +96 -0
  20. package/dist/commands/api-keys.js.map +1 -0
  21. package/dist/commands/auth.d.ts +25 -0
  22. package/dist/commands/auth.js +102 -0
  23. package/dist/commands/auth.js.map +1 -0
  24. package/dist/commands/config.d.ts +128 -0
  25. package/dist/commands/config.js +1822 -0
  26. package/dist/commands/config.js.map +1 -0
  27. package/dist/commands/csp.d.ts +32 -0
  28. package/dist/commands/csp.js +180 -0
  29. package/dist/commands/csp.js.map +1 -0
  30. package/dist/commands/dev.d.ts +8 -0
  31. package/dist/commands/dev.js +84 -0
  32. package/dist/commands/dev.js.map +1 -0
  33. package/dist/commands/doctor-scan.d.ts +27 -0
  34. package/dist/commands/doctor-scan.js +221 -0
  35. package/dist/commands/doctor-scan.js.map +1 -0
  36. package/dist/commands/fga.d.ts +10 -0
  37. package/dist/commands/fga.js +146 -0
  38. package/dist/commands/fga.js.map +1 -0
  39. package/dist/commands/golive.d.ts +40 -0
  40. package/dist/commands/golive.js +297 -0
  41. package/dist/commands/golive.js.map +1 -0
  42. package/dist/commands/id-accounts.d.ts +13 -0
  43. package/dist/commands/id-accounts.js +195 -0
  44. package/dist/commands/id-accounts.js.map +1 -0
  45. package/dist/commands/import-better-auth.d.ts +3 -0
  46. package/dist/commands/import-better-auth.js +164 -0
  47. package/dist/commands/import-better-auth.js.map +1 -0
  48. package/dist/commands/import-jsonl.d.ts +50 -0
  49. package/dist/commands/import-jsonl.js +252 -0
  50. package/dist/commands/import-jsonl.js.map +1 -0
  51. package/dist/commands/import.d.ts +3 -0
  52. package/dist/commands/import.js +133 -0
  53. package/dist/commands/import.js.map +1 -0
  54. package/dist/commands/info.d.ts +75 -0
  55. package/dist/commands/info.js +362 -0
  56. package/dist/commands/info.js.map +1 -0
  57. package/dist/commands/init-next.d.ts +4 -0
  58. package/dist/commands/init-next.js +86 -0
  59. package/dist/commands/init-next.js.map +1 -0
  60. package/dist/commands/init.d.ts +3 -0
  61. package/dist/commands/init.js +525 -0
  62. package/dist/commands/init.js.map +1 -0
  63. package/dist/commands/integrations.d.ts +8 -0
  64. package/dist/commands/integrations.js +112 -0
  65. package/dist/commands/integrations.js.map +1 -0
  66. package/dist/commands/listen.d.ts +17 -0
  67. package/dist/commands/listen.js +223 -0
  68. package/dist/commands/listen.js.map +1 -0
  69. package/dist/commands/mcp.d.ts +38 -0
  70. package/dist/commands/mcp.js +111 -0
  71. package/dist/commands/mcp.js.map +1 -0
  72. package/dist/commands/migrate.d.ts +16 -0
  73. package/dist/commands/migrate.js +114 -0
  74. package/dist/commands/migrate.js.map +1 -0
  75. package/dist/commands/move-origin.d.ts +11 -0
  76. package/dist/commands/move-origin.js +95 -0
  77. package/dist/commands/move-origin.js.map +1 -0
  78. package/dist/commands/operator.d.ts +18 -0
  79. package/dist/commands/operator.js +238 -0
  80. package/dist/commands/operator.js.map +1 -0
  81. package/dist/commands/orgs.d.ts +4 -0
  82. package/dist/commands/orgs.js +72 -0
  83. package/dist/commands/orgs.js.map +1 -0
  84. package/dist/commands/pages.d.ts +14 -0
  85. package/dist/commands/pages.js +113 -0
  86. package/dist/commands/pages.js.map +1 -0
  87. package/dist/commands/partner-platforms.d.ts +10 -0
  88. package/dist/commands/partner-platforms.js +157 -0
  89. package/dist/commands/partner-platforms.js.map +1 -0
  90. package/dist/commands/project-commands.d.ts +38 -0
  91. package/dist/commands/project-commands.js +431 -0
  92. package/dist/commands/project-commands.js.map +1 -0
  93. package/dist/commands/referrals.d.ts +69 -0
  94. package/dist/commands/referrals.js +1056 -0
  95. package/dist/commands/referrals.js.map +1 -0
  96. package/dist/commands/resources.d.ts +44 -0
  97. package/dist/commands/resources.js +234 -0
  98. package/dist/commands/resources.js.map +1 -0
  99. package/dist/commands/sessions.d.ts +4 -0
  100. package/dist/commands/sessions.js +28 -0
  101. package/dist/commands/sessions.js.map +1 -0
  102. package/dist/commands/setup-guide.d.ts +3 -0
  103. package/dist/commands/setup-guide.js +38 -0
  104. package/dist/commands/setup-guide.js.map +1 -0
  105. package/dist/commands/shared.d.ts +38 -0
  106. package/dist/commands/shared.js +69 -0
  107. package/dist/commands/shared.js.map +1 -0
  108. package/dist/commands/status.d.ts +3 -0
  109. package/dist/commands/status.js +77 -0
  110. package/dist/commands/status.js.map +1 -0
  111. package/dist/commands/users.d.ts +4 -0
  112. package/dist/commands/users.js +111 -0
  113. package/dist/commands/users.js.map +1 -0
  114. package/dist/commands/webhooks.d.ts +34 -0
  115. package/dist/commands/webhooks.js +301 -0
  116. package/dist/commands/webhooks.js.map +1 -0
  117. package/dist/config-http.d.ts +38 -0
  118. package/dist/config-http.js +70 -0
  119. package/dist/config-http.js.map +1 -0
  120. package/dist/config.d.ts +64 -0
  121. package/dist/config.js +69 -0
  122. package/dist/config.js.map +1 -0
  123. package/dist/context.d.ts +89 -0
  124. package/dist/context.js +32 -0
  125. package/dist/context.js.map +1 -0
  126. package/dist/define-config.d.ts +9 -0
  127. package/dist/define-config.js +8 -0
  128. package/dist/define-config.js.map +1 -0
  129. package/dist/errors.d.ts +15 -0
  130. package/dist/errors.js +25 -0
  131. package/dist/errors.js.map +1 -0
  132. package/dist/help.d.ts +8 -0
  133. package/dist/help.js +926 -0
  134. package/dist/help.js.map +1 -0
  135. package/dist/import/csv.d.ts +6 -0
  136. package/dist/import/csv.js +63 -0
  137. package/dist/import/csv.js.map +1 -0
  138. package/dist/import/vendors.d.ts +57 -0
  139. package/dist/import/vendors.js +568 -0
  140. package/dist/import/vendors.js.map +1 -0
  141. package/dist/index.d.ts +33 -0
  142. package/dist/index.js +81 -0
  143. package/dist/index.js.map +1 -0
  144. package/dist/io.d.ts +21 -0
  145. package/dist/io.js +28 -0
  146. package/dist/io.js.map +1 -0
  147. package/dist/migrate/appwrite/plugin.d.ts +2 -0
  148. package/dist/migrate/appwrite/plugin.js +103 -0
  149. package/dist/migrate/appwrite/plugin.js.map +1 -0
  150. package/dist/migrate/auth0/plugin.d.ts +2 -0
  151. package/dist/migrate/auth0/plugin.js +126 -0
  152. package/dist/migrate/auth0/plugin.js.map +1 -0
  153. package/dist/migrate/authentik/plugin.d.ts +2 -0
  154. package/dist/migrate/authentik/plugin.js +135 -0
  155. package/dist/migrate/authentik/plugin.js.map +1 -0
  156. package/dist/migrate/azure-ad-b2c/plugin.d.ts +8 -0
  157. package/dist/migrate/azure-ad-b2c/plugin.js +165 -0
  158. package/dist/migrate/azure-ad-b2c/plugin.js.map +1 -0
  159. package/dist/migrate/better-auth/integration.d.ts +59 -0
  160. package/dist/migrate/better-auth/integration.js +81 -0
  161. package/dist/migrate/better-auth/integration.js.map +1 -0
  162. package/dist/migrate/better-auth/orchestrator.d.ts +43 -0
  163. package/dist/migrate/better-auth/orchestrator.js +525 -0
  164. package/dist/migrate/better-auth/orchestrator.js.map +1 -0
  165. package/dist/migrate/better-auth/output.d.ts +20 -0
  166. package/dist/migrate/better-auth/output.js +146 -0
  167. package/dist/migrate/better-auth/output.js.map +1 -0
  168. package/dist/migrate/better-auth/translate.d.ts +77 -0
  169. package/dist/migrate/better-auth/translate.js +1989 -0
  170. package/dist/migrate/better-auth/translate.js.map +1 -0
  171. package/dist/migrate/clerk/plugin.d.ts +2 -0
  172. package/dist/migrate/clerk/plugin.js +76 -0
  173. package/dist/migrate/clerk/plugin.js.map +1 -0
  174. package/dist/migrate/cognito/plugin.d.ts +5 -0
  175. package/dist/migrate/cognito/plugin.js +170 -0
  176. package/dist/migrate/cognito/plugin.js.map +1 -0
  177. package/dist/migrate/corbado/plugin.d.ts +2 -0
  178. package/dist/migrate/corbado/plugin.js +63 -0
  179. package/dist/migrate/corbado/plugin.js.map +1 -0
  180. package/dist/migrate/descope/plugin.d.ts +2 -0
  181. package/dist/migrate/descope/plugin.js +83 -0
  182. package/dist/migrate/descope/plugin.js.map +1 -0
  183. package/dist/migrate/entra-external-id/plugin.d.ts +8 -0
  184. package/dist/migrate/entra-external-id/plugin.js +12 -0
  185. package/dist/migrate/entra-external-id/plugin.js.map +1 -0
  186. package/dist/migrate/export/appwrite-config.d.ts +28 -0
  187. package/dist/migrate/export/appwrite-config.js +170 -0
  188. package/dist/migrate/export/appwrite-config.js.map +1 -0
  189. package/dist/migrate/export/appwrite.d.ts +51 -0
  190. package/dist/migrate/export/appwrite.js +288 -0
  191. package/dist/migrate/export/appwrite.js.map +1 -0
  192. package/dist/migrate/export/auth0-config.d.ts +29 -0
  193. package/dist/migrate/export/auth0-config.js +249 -0
  194. package/dist/migrate/export/auth0-config.js.map +1 -0
  195. package/dist/migrate/export/auth0.d.ts +62 -0
  196. package/dist/migrate/export/auth0.js +575 -0
  197. package/dist/migrate/export/auth0.js.map +1 -0
  198. package/dist/migrate/export/authentik-config.d.ts +45 -0
  199. package/dist/migrate/export/authentik-config.js +357 -0
  200. package/dist/migrate/export/authentik-config.js.map +1 -0
  201. package/dist/migrate/export/authentik.d.ts +110 -0
  202. package/dist/migrate/export/authentik.js +838 -0
  203. package/dist/migrate/export/authentik.js.map +1 -0
  204. package/dist/migrate/export/azure-config.d.ts +58 -0
  205. package/dist/migrate/export/azure-config.js +344 -0
  206. package/dist/migrate/export/azure-config.js.map +1 -0
  207. package/dist/migrate/export/azure.d.ts +85 -0
  208. package/dist/migrate/export/azure.js +373 -0
  209. package/dist/migrate/export/azure.js.map +1 -0
  210. package/dist/migrate/export/clerk-config.d.ts +26 -0
  211. package/dist/migrate/export/clerk-config.js +227 -0
  212. package/dist/migrate/export/clerk-config.js.map +1 -0
  213. package/dist/migrate/export/clerk.d.ts +46 -0
  214. package/dist/migrate/export/clerk.js +486 -0
  215. package/dist/migrate/export/clerk.js.map +1 -0
  216. package/dist/migrate/export/cognito-config.d.ts +25 -0
  217. package/dist/migrate/export/cognito-config.js +273 -0
  218. package/dist/migrate/export/cognito-config.js.map +1 -0
  219. package/dist/migrate/export/cognito.d.ts +103 -0
  220. package/dist/migrate/export/cognito.js +441 -0
  221. package/dist/migrate/export/cognito.js.map +1 -0
  222. package/dist/migrate/export/corbado-config.d.ts +20 -0
  223. package/dist/migrate/export/corbado-config.js +63 -0
  224. package/dist/migrate/export/corbado-config.js.map +1 -0
  225. package/dist/migrate/export/corbado.d.ts +37 -0
  226. package/dist/migrate/export/corbado.js +132 -0
  227. package/dist/migrate/export/corbado.js.map +1 -0
  228. package/dist/migrate/export/descope.d.ts +35 -0
  229. package/dist/migrate/export/descope.js +208 -0
  230. package/dist/migrate/export/descope.js.map +1 -0
  231. package/dist/migrate/export/fake-vendor.test-helper.d.ts +27 -0
  232. package/dist/migrate/export/fake-vendor.test-helper.js +41 -0
  233. package/dist/migrate/export/fake-vendor.test-helper.js.map +1 -0
  234. package/dist/migrate/export/firebase-config.d.ts +24 -0
  235. package/dist/migrate/export/firebase-config.js +215 -0
  236. package/dist/migrate/export/firebase-config.js.map +1 -0
  237. package/dist/migrate/export/firebase.d.ts +102 -0
  238. package/dist/migrate/export/firebase.js +464 -0
  239. package/dist/migrate/export/firebase.js.map +1 -0
  240. package/dist/migrate/export/frameworks/app-users.d.ts +42 -0
  241. package/dist/migrate/export/frameworks/app-users.js +161 -0
  242. package/dist/migrate/export/frameworks/app-users.js.map +1 -0
  243. package/dist/migrate/export/frameworks/authjs.d.ts +41 -0
  244. package/dist/migrate/export/frameworks/authjs.js +146 -0
  245. package/dist/migrate/export/frameworks/authjs.js.map +1 -0
  246. package/dist/migrate/export/frameworks/devise.d.ts +39 -0
  247. package/dist/migrate/export/frameworks/devise.js +218 -0
  248. package/dist/migrate/export/frameworks/devise.js.map +1 -0
  249. package/dist/migrate/export/frameworks/django.d.ts +45 -0
  250. package/dist/migrate/export/frameworks/django.js +315 -0
  251. package/dist/migrate/export/frameworks/django.js.map +1 -0
  252. package/dist/migrate/export/frameworks/lucia.d.ts +42 -0
  253. package/dist/migrate/export/frameworks/lucia.js +263 -0
  254. package/dist/migrate/export/frameworks/lucia.js.map +1 -0
  255. package/dist/migrate/export/frameworks/tables.d.ts +90 -0
  256. package/dist/migrate/export/frameworks/tables.js +325 -0
  257. package/dist/migrate/export/frameworks/tables.js.map +1 -0
  258. package/dist/migrate/export/frameworks/webauthn.d.ts +25 -0
  259. package/dist/migrate/export/frameworks/webauthn.js +130 -0
  260. package/dist/migrate/export/frameworks/webauthn.js.map +1 -0
  261. package/dist/migrate/export/frontegg-config.d.ts +29 -0
  262. package/dist/migrate/export/frontegg-config.js +238 -0
  263. package/dist/migrate/export/frontegg-config.js.map +1 -0
  264. package/dist/migrate/export/frontegg.d.ts +67 -0
  265. package/dist/migrate/export/frontegg.js +410 -0
  266. package/dist/migrate/export/frontegg.js.map +1 -0
  267. package/dist/migrate/export/fusionauth-config.d.ts +26 -0
  268. package/dist/migrate/export/fusionauth-config.js +226 -0
  269. package/dist/migrate/export/fusionauth-config.js.map +1 -0
  270. package/dist/migrate/export/fusionauth.d.ts +99 -0
  271. package/dist/migrate/export/fusionauth.js +642 -0
  272. package/dist/migrate/export/fusionauth.js.map +1 -0
  273. package/dist/migrate/export/hanko-config.d.ts +27 -0
  274. package/dist/migrate/export/hanko-config.js +265 -0
  275. package/dist/migrate/export/hanko-config.js.map +1 -0
  276. package/dist/migrate/export/hanko.d.ts +52 -0
  277. package/dist/migrate/export/hanko.js +605 -0
  278. package/dist/migrate/export/hanko.js.map +1 -0
  279. package/dist/migrate/export/keycloak-config.d.ts +19 -0
  280. package/dist/migrate/export/keycloak-config.js +219 -0
  281. package/dist/migrate/export/keycloak-config.js.map +1 -0
  282. package/dist/migrate/export/keycloak.d.ts +155 -0
  283. package/dist/migrate/export/keycloak.js +878 -0
  284. package/dist/migrate/export/keycloak.js.map +1 -0
  285. package/dist/migrate/export/kinde-descope-config.d.ts +38 -0
  286. package/dist/migrate/export/kinde-descope-config.js +172 -0
  287. package/dist/migrate/export/kinde-descope-config.js.map +1 -0
  288. package/dist/migrate/export/kinde.d.ts +57 -0
  289. package/dist/migrate/export/kinde.js +333 -0
  290. package/dist/migrate/export/kinde.js.map +1 -0
  291. package/dist/migrate/export/ldap.d.ts +53 -0
  292. package/dist/migrate/export/ldap.js +277 -0
  293. package/dist/migrate/export/ldap.js.map +1 -0
  294. package/dist/migrate/export/logto-config.d.ts +27 -0
  295. package/dist/migrate/export/logto-config.js +264 -0
  296. package/dist/migrate/export/logto-config.js.map +1 -0
  297. package/dist/migrate/export/logto.d.ts +150 -0
  298. package/dist/migrate/export/logto.js +809 -0
  299. package/dist/migrate/export/logto.js.map +1 -0
  300. package/dist/migrate/export/magic-config.d.ts +14 -0
  301. package/dist/migrate/export/magic-config.js +28 -0
  302. package/dist/migrate/export/magic-config.js.map +1 -0
  303. package/dist/migrate/export/magic.d.ts +31 -0
  304. package/dist/migrate/export/magic.js +93 -0
  305. package/dist/migrate/export/magic.js.map +1 -0
  306. package/dist/migrate/export/mini-yaml.d.ts +19 -0
  307. package/dist/migrate/export/mini-yaml.js +581 -0
  308. package/dist/migrate/export/mini-yaml.js.map +1 -0
  309. package/dist/migrate/export/nhost-config.d.ts +26 -0
  310. package/dist/migrate/export/nhost-config.js +360 -0
  311. package/dist/migrate/export/nhost-config.js.map +1 -0
  312. package/dist/migrate/export/nhost.d.ts +64 -0
  313. package/dist/migrate/export/nhost.js +304 -0
  314. package/dist/migrate/export/nhost.js.map +1 -0
  315. package/dist/migrate/export/okta-config.d.ts +30 -0
  316. package/dist/migrate/export/okta-config.js +205 -0
  317. package/dist/migrate/export/okta-config.js.map +1 -0
  318. package/dist/migrate/export/okta.d.ts +43 -0
  319. package/dist/migrate/export/okta.js +337 -0
  320. package/dist/migrate/export/okta.js.map +1 -0
  321. package/dist/migrate/export/onelogin.d.ts +22 -0
  322. package/dist/migrate/export/onelogin.js +123 -0
  323. package/dist/migrate/export/onelogin.js.map +1 -0
  324. package/dist/migrate/export/ory-config.d.ts +58 -0
  325. package/dist/migrate/export/ory-config.js +451 -0
  326. package/dist/migrate/export/ory-config.js.map +1 -0
  327. package/dist/migrate/export/ory.d.ts +81 -0
  328. package/dist/migrate/export/ory.js +555 -0
  329. package/dist/migrate/export/ory.js.map +1 -0
  330. package/dist/migrate/export/password-detect.d.ts +29 -0
  331. package/dist/migrate/export/password-detect.js +81 -0
  332. package/dist/migrate/export/password-detect.js.map +1 -0
  333. package/dist/migrate/export/pingone.d.ts +36 -0
  334. package/dist/migrate/export/pingone.js +218 -0
  335. package/dist/migrate/export/pingone.js.map +1 -0
  336. package/dist/migrate/export/plugin-kit.d.ts +25 -0
  337. package/dist/migrate/export/plugin-kit.js +82 -0
  338. package/dist/migrate/export/plugin-kit.js.map +1 -0
  339. package/dist/migrate/export/pocketbase-config.d.ts +28 -0
  340. package/dist/migrate/export/pocketbase-config.js +180 -0
  341. package/dist/migrate/export/pocketbase-config.js.map +1 -0
  342. package/dist/migrate/export/pocketbase.d.ts +52 -0
  343. package/dist/migrate/export/pocketbase.js +243 -0
  344. package/dist/migrate/export/pocketbase.js.map +1 -0
  345. package/dist/migrate/export/project-files.d.ts +15 -0
  346. package/dist/migrate/export/project-files.js +43 -0
  347. package/dist/migrate/export/project-files.js.map +1 -0
  348. package/dist/migrate/export/propelauth-config.d.ts +18 -0
  349. package/dist/migrate/export/propelauth-config.js +58 -0
  350. package/dist/migrate/export/propelauth-config.js.map +1 -0
  351. package/dist/migrate/export/propelauth-harness.test-helper.d.ts +62 -0
  352. package/dist/migrate/export/propelauth-harness.test-helper.js +109 -0
  353. package/dist/migrate/export/propelauth-harness.test-helper.js.map +1 -0
  354. package/dist/migrate/export/propelauth.d.ts +48 -0
  355. package/dist/migrate/export/propelauth.js +255 -0
  356. package/dist/migrate/export/propelauth.js.map +1 -0
  357. package/dist/migrate/export/record-set.d.ts +44 -0
  358. package/dist/migrate/export/record-set.js +98 -0
  359. package/dist/migrate/export/record-set.js.map +1 -0
  360. package/dist/migrate/export/source-lines.d.ts +17 -0
  361. package/dist/migrate/export/source-lines.js +43 -0
  362. package/dist/migrate/export/source-lines.js.map +1 -0
  363. package/dist/migrate/export/sso-metadata.d.ts +47 -0
  364. package/dist/migrate/export/sso-metadata.js +180 -0
  365. package/dist/migrate/export/sso-metadata.js.map +1 -0
  366. package/dist/migrate/export/stytch-config.d.ts +22 -0
  367. package/dist/migrate/export/stytch-config.js +102 -0
  368. package/dist/migrate/export/stytch-config.js.map +1 -0
  369. package/dist/migrate/export/stytch.d.ts +68 -0
  370. package/dist/migrate/export/stytch.js +510 -0
  371. package/dist/migrate/export/stytch.js.map +1 -0
  372. package/dist/migrate/export/supabase-config.d.ts +48 -0
  373. package/dist/migrate/export/supabase-config.js +408 -0
  374. package/dist/migrate/export/supabase-config.js.map +1 -0
  375. package/dist/migrate/export/supabase.d.ts +86 -0
  376. package/dist/migrate/export/supabase.js +524 -0
  377. package/dist/migrate/export/supabase.js.map +1 -0
  378. package/dist/migrate/export/supertokens-config.d.ts +20 -0
  379. package/dist/migrate/export/supertokens-config.js +150 -0
  380. package/dist/migrate/export/supertokens-config.js.map +1 -0
  381. package/dist/migrate/export/supertokens.d.ts +125 -0
  382. package/dist/migrate/export/supertokens.js +464 -0
  383. package/dist/migrate/export/supertokens.js.map +1 -0
  384. package/dist/migrate/export/table.d.ts +35 -0
  385. package/dist/migrate/export/table.js +248 -0
  386. package/dist/migrate/export/table.js.map +1 -0
  387. package/dist/migrate/export/translate-kit.d.ts +46 -0
  388. package/dist/migrate/export/translate-kit.js +148 -0
  389. package/dist/migrate/export/translate-kit.js.map +1 -0
  390. package/dist/migrate/export/userfront-config.d.ts +15 -0
  391. package/dist/migrate/export/userfront-config.js +49 -0
  392. package/dist/migrate/export/userfront-config.js.map +1 -0
  393. package/dist/migrate/export/userfront.d.ts +38 -0
  394. package/dist/migrate/export/userfront.js +189 -0
  395. package/dist/migrate/export/userfront.js.map +1 -0
  396. package/dist/migrate/export/vendor-http.d.ts +46 -0
  397. package/dist/migrate/export/vendor-http.js +138 -0
  398. package/dist/migrate/export/vendor-http.js.map +1 -0
  399. package/dist/migrate/export/workos-config.d.ts +23 -0
  400. package/dist/migrate/export/workos-config.js +125 -0
  401. package/dist/migrate/export/workos-config.js.map +1 -0
  402. package/dist/migrate/export/workos.d.ts +46 -0
  403. package/dist/migrate/export/workos.js +272 -0
  404. package/dist/migrate/export/workos.js.map +1 -0
  405. package/dist/migrate/export/zip.d.ts +8 -0
  406. package/dist/migrate/export/zip.js +66 -0
  407. package/dist/migrate/export/zip.js.map +1 -0
  408. package/dist/migrate/export/zitadel-config.d.ts +37 -0
  409. package/dist/migrate/export/zitadel-config.js +279 -0
  410. package/dist/migrate/export/zitadel-config.js.map +1 -0
  411. package/dist/migrate/export/zitadel.d.ts +82 -0
  412. package/dist/migrate/export/zitadel.js +447 -0
  413. package/dist/migrate/export/zitadel.js.map +1 -0
  414. package/dist/migrate/firebase/plugin.d.ts +2 -0
  415. package/dist/migrate/firebase/plugin.js +152 -0
  416. package/dist/migrate/firebase/plugin.js.map +1 -0
  417. package/dist/migrate/framework/builtins.d.ts +2 -0
  418. package/dist/migrate/framework/builtins.js +52 -0
  419. package/dist/migrate/framework/builtins.js.map +1 -0
  420. package/dist/migrate/framework/commands.d.ts +20 -0
  421. package/dist/migrate/framework/commands.js +58 -0
  422. package/dist/migrate/framework/commands.js.map +1 -0
  423. package/dist/migrate/framework/custom.d.ts +12 -0
  424. package/dist/migrate/framework/custom.js +96 -0
  425. package/dist/migrate/framework/custom.js.map +1 -0
  426. package/dist/migrate/framework/orchestrator.d.ts +113 -0
  427. package/dist/migrate/framework/orchestrator.js +532 -0
  428. package/dist/migrate/framework/orchestrator.js.map +1 -0
  429. package/dist/migrate/framework/plugin.d.ts +167 -0
  430. package/dist/migrate/framework/plugin.js +3 -0
  431. package/dist/migrate/framework/plugin.js.map +1 -0
  432. package/dist/migrate/framework/registry.d.ts +11 -0
  433. package/dist/migrate/framework/registry.js +44 -0
  434. package/dist/migrate/framework/registry.js.map +1 -0
  435. package/dist/migrate/framework/report.d.ts +17 -0
  436. package/dist/migrate/framework/report.js +103 -0
  437. package/dist/migrate/framework/report.js.map +1 -0
  438. package/dist/migrate/frameworks/plugins.d.ts +29 -0
  439. package/dist/migrate/frameworks/plugins.js +402 -0
  440. package/dist/migrate/frameworks/plugins.js.map +1 -0
  441. package/dist/migrate/frameworks/report.d.ts +92 -0
  442. package/dist/migrate/frameworks/report.js +207 -0
  443. package/dist/migrate/frameworks/report.js.map +1 -0
  444. package/dist/migrate/frameworks/translate-js.d.ts +5 -0
  445. package/dist/migrate/frameworks/translate-js.js +503 -0
  446. package/dist/migrate/frameworks/translate-js.js.map +1 -0
  447. package/dist/migrate/frameworks/translate-rails-django.d.ts +3 -0
  448. package/dist/migrate/frameworks/translate-rails-django.js +1391 -0
  449. package/dist/migrate/frameworks/translate-rails-django.js.map +1 -0
  450. package/dist/migrate/frontegg/plugin.d.ts +2 -0
  451. package/dist/migrate/frontegg/plugin.js +78 -0
  452. package/dist/migrate/frontegg/plugin.js.map +1 -0
  453. package/dist/migrate/fusionauth/plugin.d.ts +2 -0
  454. package/dist/migrate/fusionauth/plugin.js +109 -0
  455. package/dist/migrate/fusionauth/plugin.js.map +1 -0
  456. package/dist/migrate/hanko/plugin.d.ts +2 -0
  457. package/dist/migrate/hanko/plugin.js +100 -0
  458. package/dist/migrate/hanko/plugin.js.map +1 -0
  459. package/dist/migrate/keycloak/plugin.d.ts +2 -0
  460. package/dist/migrate/keycloak/plugin.js +148 -0
  461. package/dist/migrate/keycloak/plugin.js.map +1 -0
  462. package/dist/migrate/kinde/plugin.d.ts +2 -0
  463. package/dist/migrate/kinde/plugin.js +105 -0
  464. package/dist/migrate/kinde/plugin.js.map +1 -0
  465. package/dist/migrate/ldap/plugin.d.ts +2 -0
  466. package/dist/migrate/ldap/plugin.js +73 -0
  467. package/dist/migrate/ldap/plugin.js.map +1 -0
  468. package/dist/migrate/logto/plugin.d.ts +2 -0
  469. package/dist/migrate/logto/plugin.js +131 -0
  470. package/dist/migrate/logto/plugin.js.map +1 -0
  471. package/dist/migrate/magic/plugin.d.ts +2 -0
  472. package/dist/migrate/magic/plugin.js +56 -0
  473. package/dist/migrate/magic/plugin.js.map +1 -0
  474. package/dist/migrate/nhost/plugin.d.ts +2 -0
  475. package/dist/migrate/nhost/plugin.js +115 -0
  476. package/dist/migrate/nhost/plugin.js.map +1 -0
  477. package/dist/migrate/oidc/plugin.d.ts +2 -0
  478. package/dist/migrate/oidc/plugin.js +73 -0
  479. package/dist/migrate/oidc/plugin.js.map +1 -0
  480. package/dist/migrate/okta/plugin.d.ts +2 -0
  481. package/dist/migrate/okta/plugin.js +105 -0
  482. package/dist/migrate/okta/plugin.js.map +1 -0
  483. package/dist/migrate/onelogin/plugin.d.ts +2 -0
  484. package/dist/migrate/onelogin/plugin.js +61 -0
  485. package/dist/migrate/onelogin/plugin.js.map +1 -0
  486. package/dist/migrate/ory/plugin.d.ts +2 -0
  487. package/dist/migrate/ory/plugin.js +186 -0
  488. package/dist/migrate/ory/plugin.js.map +1 -0
  489. package/dist/migrate/ping-identity/plugin.d.ts +2 -0
  490. package/dist/migrate/ping-identity/plugin.js +100 -0
  491. package/dist/migrate/ping-identity/plugin.js.map +1 -0
  492. package/dist/migrate/pocketbase/plugin.d.ts +2 -0
  493. package/dist/migrate/pocketbase/plugin.js +99 -0
  494. package/dist/migrate/pocketbase/plugin.js.map +1 -0
  495. package/dist/migrate/propelauth/plugin.d.ts +2 -0
  496. package/dist/migrate/propelauth/plugin.js +65 -0
  497. package/dist/migrate/propelauth/plugin.js.map +1 -0
  498. package/dist/migrate/saml/plugin.d.ts +2 -0
  499. package/dist/migrate/saml/plugin.js +79 -0
  500. package/dist/migrate/saml/plugin.js.map +1 -0
  501. package/dist/migrate/stytch/plugin.d.ts +2 -0
  502. package/dist/migrate/stytch/plugin.js +97 -0
  503. package/dist/migrate/stytch/plugin.js.map +1 -0
  504. package/dist/migrate/supabase/plugin.d.ts +2 -0
  505. package/dist/migrate/supabase/plugin.js +149 -0
  506. package/dist/migrate/supabase/plugin.js.map +1 -0
  507. package/dist/migrate/supertokens/plugin.d.ts +2 -0
  508. package/dist/migrate/supertokens/plugin.js +114 -0
  509. package/dist/migrate/supertokens/plugin.js.map +1 -0
  510. package/dist/migrate/user-table/plugin.d.ts +2 -0
  511. package/dist/migrate/user-table/plugin.js +62 -0
  512. package/dist/migrate/user-table/plugin.js.map +1 -0
  513. package/dist/migrate/userfront/plugin.d.ts +2 -0
  514. package/dist/migrate/userfront/plugin.js +60 -0
  515. package/dist/migrate/userfront/plugin.js.map +1 -0
  516. package/dist/migrate/workos/plugin.d.ts +2 -0
  517. package/dist/migrate/workos/plugin.js +81 -0
  518. package/dist/migrate/workos/plugin.js.map +1 -0
  519. package/dist/migrate/zitadel/plugin.d.ts +2 -0
  520. package/dist/migrate/zitadel/plugin.js +114 -0
  521. package/dist/migrate/zitadel/plugin.js.map +1 -0
  522. package/dist/output.d.ts +41 -0
  523. package/dist/output.js +72 -0
  524. package/dist/output.js.map +1 -0
  525. package/dist/project.d.ts +64 -0
  526. package/dist/project.js +86 -0
  527. package/dist/project.js.map +1 -0
  528. package/dist/prompt.d.ts +15 -0
  529. package/dist/prompt.js +46 -0
  530. package/dist/prompt.js.map +1 -0
  531. package/dist/redact.d.ts +41 -0
  532. package/dist/redact.js +115 -0
  533. package/dist/redact.js.map +1 -0
  534. package/dist/run.d.ts +12 -0
  535. package/dist/run.js +169 -0
  536. package/dist/run.js.map +1 -0
  537. package/dist/secrets.d.ts +41 -0
  538. package/dist/secrets.js +142 -0
  539. package/dist/secrets.js.map +1 -0
  540. package/dist/serialize.d.ts +30 -0
  541. package/dist/serialize.js +131 -0
  542. package/dist/serialize.js.map +1 -0
  543. package/dist/version.d.ts +7 -0
  544. package/dist/version.js +21 -0
  545. package/dist/version.js.map +1 -0
  546. package/package.json +3 -3
@@ -0,0 +1,447 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.g = g;
4
+ exports.readZitadelExport = readZitadelExport;
5
+ exports.zitadelPassword = zitadelPassword;
6
+ exports.collectIdps = collectIdps;
7
+ exports.mapZitadel = mapZitadel;
8
+ exports.zitadelBase = zitadelBase;
9
+ exports.zitadelHttp = zitadelHttp;
10
+ exports.fetchIdpTemplates = fetchIdpTemplates;
11
+ exports.fetchZitadel = fetchZitadel;
12
+ exports.exportZitadelApi = exportZitadelApi;
13
+ const record_set_1 = require("./record-set");
14
+ const translate_kit_1 = require("./translate-kit");
15
+ const vendor_http_1 = require("./vendor-http");
16
+ /** A field by its camelCase name, falling back to snake_case (the files `zitadel export` writes use either). */
17
+ function g(o, camel) {
18
+ if (!o)
19
+ return undefined;
20
+ if (o[camel] !== undefined)
21
+ return o[camel];
22
+ return o[camel.replace(/[A-Z]/g, (m) => `_${m.toLowerCase()}`)];
23
+ }
24
+ const gs = (o, camel) => (0, record_set_1.str)(g(o, camel));
25
+ const go = (o, camel) => {
26
+ const v = g(o, camel);
27
+ return (0, record_set_1.isObj)(v) ? v : undefined;
28
+ };
29
+ const gl = (o, camel) => (0, record_set_1.objs)(g(o, camel));
30
+ // ── reading an export file ──────────────────────────────────────────────────
31
+ /** The orgs in an export document: `{ orgs: [...] }`, a bare array, or one org object. */
32
+ function readZitadelExport(doc) {
33
+ let orgs = [];
34
+ if (Array.isArray(doc))
35
+ orgs = (0, record_set_1.objs)(doc);
36
+ else if ((0, record_set_1.isObj)(doc)) {
37
+ const list = g(doc, 'orgs');
38
+ if (Array.isArray(list))
39
+ orgs = (0, record_set_1.objs)(list);
40
+ else if (g(doc, 'humanUsers') !== undefined || g(doc, 'orgId') !== undefined)
41
+ orgs = [doc];
42
+ }
43
+ if (!orgs.length)
44
+ throw new Error('No organizations found in the ZITADEL export (expected the JSON written by `zitadel export`: { "orgs": [ … ] }).');
45
+ return { orgs, idpTemplates: [], source: 'file' };
46
+ }
47
+ // ── password hashes ─────────────────────────────────────────────────────────
48
+ /**
49
+ * A ZITADEL `hashedPassword` ({ value, algorithm }) as a bundle password; null
50
+ * when Atlas cannot verify it. ZITADEL stores the self-describing encoding its
51
+ * hasher (passwap) verifies, so those are recognised by Atlas on their own
52
+ * ("auto"); the one bare form (a hex MD5) is mapped by the algorithm hint.
53
+ */
54
+ function zitadelPassword(hashed) {
55
+ const h = (0, record_set_1.isObj)(hashed) ? hashed : undefined;
56
+ const value = (0, record_set_1.str)(h?.value) ?? (typeof hashed === 'string' ? (0, record_set_1.str)(hashed) : undefined);
57
+ if (!value)
58
+ return null;
59
+ const hint = ((0, record_set_1.str)(h?.algorithm) ?? '').toLowerCase().replace(/[^a-z0-9]/g, '');
60
+ if (/^\$2[aby]\$\d{2}\$[./A-Za-z0-9]{53}$/.test(value))
61
+ return { algorithm: 'bcrypt', hash: value };
62
+ if (/^\$argon2(id|i|d)\$/.test(value))
63
+ return { algorithm: 'argon2', hash: value };
64
+ // $scrypt$ln=…, $pbkdf2-sha256$i=…, $1$ (md5-crypt), $5$ / $6$ (sha-crypt), $P$ / $H$ (phpass).
65
+ if (/^\$(scrypt|pbkdf2-sha(1|256|512))\$/.test(value) || /^\$(1|5|6)\$/.test(value) || /^\$[PH]\$/.test(value))
66
+ return { algorithm: 'auto', hash: value };
67
+ if ((hint === 'md5' || hint === 'md5plain') && /^[0-9a-f]{32}$/i.test(value))
68
+ return { algorithm: 'md5', hash: value.toLowerCase(), params: { encoding: 'hex' } };
69
+ return null;
70
+ }
71
+ /** `genericOidcIdps` → `oidc`, `googleIdps` → `google`, `azureAdIdps` → `microsoft`. */
72
+ function kindOfKey(key) {
73
+ const k = key.toLowerCase().replace(/idps?$/, '').replace(/^generic/, '').replace(/provider$/, '');
74
+ if (k.startsWith('azure'))
75
+ return 'microsoft';
76
+ if (k.startsWith('gitlab'))
77
+ return 'gitlab';
78
+ if (k.startsWith('github'))
79
+ return 'github';
80
+ return k || 'oidc';
81
+ }
82
+ function kindOfType(type) {
83
+ return kindOfKey(type.replace(/^IDP_TYPE_/, '').replace(/_/g, '').toLowerCase());
84
+ }
85
+ /** The identity providers an export names, keyed by config id; templates from the API fill gaps. */
86
+ function collectIdps(snap) {
87
+ const out = new Map();
88
+ for (const org of snap.orgs) {
89
+ for (const [key, list] of Object.entries(org)) {
90
+ if (!/idps$/i.test(key) || !Array.isArray(list))
91
+ continue;
92
+ for (const entry of (0, record_set_1.objs)(list)) {
93
+ const id = (0, record_set_1.str)(g(entry, 'idpId')) ?? (0, record_set_1.str)(entry.id);
94
+ if (!id)
95
+ continue;
96
+ const config = go(entry, 'idp') ?? entry;
97
+ out.set(id, { id, name: gs(config, 'name') ?? id, kind: kindOfKey(key), config });
98
+ }
99
+ }
100
+ }
101
+ for (const t of snap.idpTemplates) {
102
+ const id = (0, record_set_1.str)(t.id);
103
+ if (!id || out.has(id))
104
+ continue;
105
+ const type = (0, record_set_1.str)(t.type) ?? '';
106
+ // The template object nests its settings under the type's own key (`oidc`, `google`, `saml` …).
107
+ const tail = type.replace(/^IDP_TYPE_/, '').toLowerCase().replace(/_([a-z])/g, (_, c) => c.toUpperCase());
108
+ const nested = go(t, tail) ?? Object.entries(t).find(([k, v]) => k !== 'details' && (0, record_set_1.isObj)(v))?.[1];
109
+ out.set(id, { id, name: (0, record_set_1.str)(t.name) ?? id, kind: type ? kindOfType(type) : 'oidc', config: (0, record_set_1.isObj)(nested) ? nested : t });
110
+ }
111
+ return out;
112
+ }
113
+ /** An IdP as an SSO connection (OIDC or SAML); null for kinds Atlas has no connection type for. */
114
+ function ssoConnection(idp, organizationId) {
115
+ if (idp.kind === 'oidc') {
116
+ const issuer = gs(idp.config, 'issuer');
117
+ return (0, record_set_1.compact)({
118
+ id: idp.id,
119
+ name: idp.name,
120
+ organization_id: organizationId,
121
+ protocol: 'oidc',
122
+ oidc: (0, record_set_1.compact)({ issuer, discovery_url: issuer ? `${issuer.replace(/\/+$/, '')}/.well-known/openid-configuration` : undefined, client_id: gs(idp.config, 'clientId'), scopes: (0, record_set_1.strs)(g(idp.config, 'scopes')) }),
123
+ enabled: true,
124
+ });
125
+ }
126
+ if (idp.kind === 'saml') {
127
+ const xml = gs(idp.config, 'metadataXml');
128
+ // bytes arrive base64-encoded from the API; a file may hold the XML itself.
129
+ const metadata = xml && !xml.trimStart().startsWith('<') ? Buffer.from(xml, 'base64').toString('utf8') : xml;
130
+ return (0, record_set_1.compact)({
131
+ id: idp.id,
132
+ name: idp.name,
133
+ organization_id: organizationId,
134
+ protocol: 'saml',
135
+ saml: (0, record_set_1.compact)({ idp_metadata_xml: metadata, idp_metadata_url: gs(idp.config, 'metadataUrl') }),
136
+ enabled: true,
137
+ });
138
+ }
139
+ return null;
140
+ }
141
+ // ── mapping ─────────────────────────────────────────────────────────────────
142
+ /** ZITADEL TOTP defaults (pquerna/otp: SHA1, 6 digits, 30 seconds). */
143
+ const TOTP = { digits: 6, period: 30, algorithm: 'SHA1' };
144
+ const NOT_EXPORTABLE = 'ZITADEL keeps passkeys and security keys only in its event store; users register a passkey again.';
145
+ /** Metadata values are base64 bytes; JSON when they parse, else text. */
146
+ function decodeMetadata(value) {
147
+ const s = (0, record_set_1.str)(value);
148
+ if (!s)
149
+ return undefined;
150
+ const text = Buffer.from(s, 'base64').toString('utf8');
151
+ // eslint-disable-next-line no-control-regex -- intentionally detects control characters (non-text payload)
152
+ if (/[\u0000-\u0008\u000e-\u001f]/.test(text))
153
+ return s;
154
+ try {
155
+ return JSON.parse(text);
156
+ }
157
+ catch {
158
+ return text;
159
+ }
160
+ }
161
+ function mapZitadel(snap, opts = {}) {
162
+ const set = new record_set_1.RecordSet();
163
+ const idps = collectIdps(snap);
164
+ const providers = new Set();
165
+ const withOrgs = opts.orgs === 'all' || (opts.orgs !== 'skip' && snap.orgs.filter((o) => gs(go(o, 'org'), 'name')).length > 1);
166
+ let hashes = 0;
167
+ let unsupported = 0;
168
+ let withTotp = 0;
169
+ let badOtp = 0;
170
+ let machine = 0;
171
+ let unknownLinks = 0;
172
+ let otherOrgRoles = 0;
173
+ const seenUsers = new Set();
174
+ for (const org of snap.orgs) {
175
+ const orgId = gs(org, 'orgId') ?? gs(org, 'id');
176
+ const orgName = gs(go(org, 'org'), 'name') ?? gs(org, 'name');
177
+ if (withOrgs && orgId && orgName) {
178
+ const domains = gl(org, 'domains').flatMap((d) => (g(d, 'isVerified') === true && gs(d, 'domainName') ? [gs(d, 'domainName').toLowerCase()] : []));
179
+ set.add('organization', (0, record_set_1.compact)({ id: orgId, name: orgName, domains }), orgId);
180
+ }
181
+ // project roles → app roles; user grants → the roles users hold
182
+ for (const r of gl(org, 'projectRoles')) {
183
+ const key = gs(r, 'roleKey');
184
+ if (key)
185
+ set.add('role', (0, record_set_1.compact)({ key, name: gs(r, 'displayName'), description: gs(r, 'group'), scope: 'app' }), key);
186
+ }
187
+ const grants = new Map();
188
+ for (const grant of gl(org, 'userGrants')) {
189
+ const userId = gs(grant, 'userId');
190
+ if (!userId)
191
+ continue;
192
+ const roles = grants.get(userId) ?? new Set();
193
+ for (const k of (0, record_set_1.strs)(g(grant, 'roleKeys')))
194
+ roles.add(k);
195
+ grants.set(userId, roles);
196
+ }
197
+ const orgRoles = new Map();
198
+ for (const m of gl(org, 'orgMembers')) {
199
+ const userId = gs(m, 'userId');
200
+ if (userId)
201
+ orgRoles.set(userId, (0, record_set_1.strs)(g(m, 'roles')));
202
+ }
203
+ const metadata = new Map();
204
+ for (const entry of gl(org, 'userMetadata')) {
205
+ const userId = gs(entry, 'userId');
206
+ if (!userId)
207
+ continue;
208
+ const bag_ = metadata.get(userId) ?? {};
209
+ for (const item of (0, record_set_1.isObj)(g(entry, 'metadata')) ? [g(entry, 'metadata')] : gl(entry, 'metadata')) {
210
+ const key = gs(item, 'key');
211
+ const value = decodeMetadata(g(item, 'value'));
212
+ if (key && value !== undefined)
213
+ bag_[key] = value;
214
+ }
215
+ metadata.set(userId, bag_);
216
+ }
217
+ machine += gl(org, 'machineUsers').length;
218
+ for (const entry of gl(org, 'humanUsers')) {
219
+ const id = gs(entry, 'userId');
220
+ const u = go(entry, 'user') ?? entry;
221
+ if (!id)
222
+ continue;
223
+ if (seenUsers.has(id))
224
+ continue;
225
+ const profile = go(u, 'profile');
226
+ const email = go(u, 'email');
227
+ const phone = go(u, 'phone');
228
+ const address = gs(email, 'email')?.toLowerCase();
229
+ const userName = gs(u, 'userName');
230
+ const number = (0, record_set_1.e164)(gs(phone, 'phone'));
231
+ if (!address && !number && !userName) {
232
+ set.omit('user', 'User with no email address, phone number or username');
233
+ continue;
234
+ }
235
+ seenUsers.add(id);
236
+ let password;
237
+ const hashed = g(u, 'hashedPassword');
238
+ if (hashed !== undefined) {
239
+ hashes++;
240
+ const mapped = zitadelPassword(hashed);
241
+ if (mapped)
242
+ password = mapped;
243
+ else
244
+ unsupported++;
245
+ }
246
+ const roles = [...(grants.get(id) ?? [])];
247
+ const meta = (0, record_set_1.bag)(metadata.get(id));
248
+ set.add('user', (0, record_set_1.compact)({
249
+ id,
250
+ emails: address ? [{ email: address, verified: g(email, 'isEmailVerified') === true, primary: true }] : [],
251
+ phones: number ? [{ phone: number, verified: g(phone, 'isPhoneVerified') === true, primary: true }] : [],
252
+ username: userName && userName.toLowerCase() !== address ? userName : undefined,
253
+ first_name: gs(profile, 'firstName'),
254
+ last_name: gs(profile, 'lastName'),
255
+ name: gs(profile, 'displayName') ?? gs(profile, 'nickName'),
256
+ password,
257
+ roles,
258
+ private_metadata: meta ? { zitadel_metadata: meta } : undefined,
259
+ }), id);
260
+ // TOTP secret (exported only with `withOtp`)
261
+ const otp = gs(u, 'otpCode');
262
+ if (otp) {
263
+ withTotp++;
264
+ const secret = otp.replace(/\s|=+$/g, '').toUpperCase();
265
+ if (/^[A-Z2-7]+$/.test(secret)) {
266
+ const factor = { user_id: id, type: 'totp', secret_base32: secret, ...TOTP, verified: true };
267
+ set.add('mfa_factor', factor);
268
+ }
269
+ else
270
+ badOtp++;
271
+ }
272
+ // social and enterprise links
273
+ for (const link of gl(u, 'idps')) {
274
+ const configId = gs(link, 'configId');
275
+ const externalId = gs(link, 'externalUserId');
276
+ if (!configId || !externalId)
277
+ continue;
278
+ const idp = idps.get(configId);
279
+ if (!idp) {
280
+ unknownLinks++;
281
+ continue;
282
+ }
283
+ const social = (0, translate_kit_1.socialKey)(idp.kind);
284
+ const sso = social ? null : ssoConnection(idp, withOrgs ? orgId : undefined);
285
+ const provider = social ?? idp.name;
286
+ providers.add(provider);
287
+ set.add('identity', (0, record_set_1.compact)({
288
+ user_id: id,
289
+ provider,
290
+ provider_user_id: externalId,
291
+ kind: social ? 'oauth' : idp.kind === 'saml' ? 'saml' : idp.kind === 'oidc' ? 'oidc' : undefined,
292
+ sso_connection_id: sso ? idp.id : undefined,
293
+ email: address,
294
+ }), `${configId}\u0000${externalId}`);
295
+ }
296
+ // membership in the organization
297
+ if (withOrgs && orgId) {
298
+ const orgRole = orgRoles.get(id) ?? [];
299
+ if (orgRole.some((r) => r !== 'ORG_OWNER'))
300
+ otherOrgRoles++;
301
+ set.add('membership', { organization_id: orgId, user_id: id, role: orgRole.includes('ORG_OWNER') ? 'admin' : 'member' }, `${orgId}\u0000${id}`);
302
+ }
303
+ }
304
+ // SSO connections the organization owns
305
+ for (const idp of idps.values()) {
306
+ if (idp.kind !== 'oidc' && idp.kind !== 'saml')
307
+ continue;
308
+ const owns = Object.entries(org).some(([key, list]) => /idps$/i.test(key) && Array.isArray(list) && (0, record_set_1.objs)(list).some((e) => (gs(e, 'idpId') ?? (0, record_set_1.str)(e.id)) === idp.id));
309
+ if (!owns)
310
+ continue;
311
+ const record = ssoConnection(idp, withOrgs ? orgId : undefined);
312
+ if (record)
313
+ set.add('sso_connection', record, idp.id);
314
+ }
315
+ }
316
+ // Templates the API listed that no org file carried.
317
+ for (const idp of idps.values()) {
318
+ if (idp.kind !== 'oidc' && idp.kind !== 'saml')
319
+ continue;
320
+ const record = ssoConnection(idp, undefined);
321
+ if (record)
322
+ set.add('sso_connection', record, idp.id);
323
+ }
324
+ if (machine)
325
+ set.omit('machine_user', 'Machine (service) users are not exported: recreate service accounts as Atlas API keys or M2M clients', machine);
326
+ if (unsupported)
327
+ set.warn(`${unsupported} password hash(es) are in a format Atlas cannot verify: those users move by lazy migration (preset zitadel) or reset their password.`);
328
+ if (snap.source !== 'users') {
329
+ if (!hashes)
330
+ set.warn('The export carries no password hashes: run it with passwords included (`withPasswords`), or users move by lazy migration (preset zitadel).');
331
+ if (!withTotp)
332
+ set.warn('The export carries no TOTP secrets (run it with `withOtp`): users who use an authenticator enrol again in Atlas.');
333
+ }
334
+ else {
335
+ set.warn('Users were listed through the v2 user API: it never returns password hashes, TOTP secrets or social links, so passwords move by lazy migration (preset zitadel), authenticator users enrol again and social users sign in once with their provider (linked by verified email). Use an IAM_OWNER service user to export everything.');
336
+ }
337
+ if (badOtp)
338
+ set.warn(`${badOtp} TOTP secret(s) were not valid base32 and were left out; those users enrol an authenticator again.`);
339
+ if (unknownLinks)
340
+ set.warn(`${unknownLinks} social link(s) point at an identity provider the export does not describe and were left out: those users sign in once with their provider and are linked by verified email.`);
341
+ if (otherOrgRoles)
342
+ set.warn(`${otherOrgRoles} organization member(s) hold ZITADEL roles other than ORG_OWNER: they join as members; only owners become admins.`);
343
+ set.warn(NOT_EXPORTABLE);
344
+ set.manifest = (0, record_set_1.compact)({ origin: snap.instance ? `ZITADEL ${snap.instance.replace(/^https?:\/\//, '')}` : snap.source === 'file' ? 'ZITADEL export file' : 'ZITADEL', providers: [...providers].sort(), settings: { totp: { ...TOTP } } });
345
+ return set;
346
+ }
347
+ function zitadelBase(raw) {
348
+ const s = raw.trim().replace(/\/+$/, '');
349
+ return /^https?:\/\//.test(s) ? s : `https://${s}`;
350
+ }
351
+ function zitadelHttp(o) {
352
+ return new vendor_http_1.VendorHttp({ vendor: 'ZITADEL', baseUrl: zitadelBase(o.instance), headers: { authorization: `Bearer ${o.token}` }, fetchImpl: o.fetchImpl, sleep: o.sleep });
353
+ }
354
+ /** Identity provider templates, to type the links; best effort (an older instance or a narrow role answers 4xx). */
355
+ async function fetchIdpTemplates(http) {
356
+ try {
357
+ const { body } = await http.post('/admin/v1/idps/templates/_search', {});
358
+ return (0, record_set_1.isObj)(body) ? (0, record_set_1.objs)(body.result) : [];
359
+ }
360
+ catch (err) {
361
+ if (err instanceof vendor_http_1.VendorApiError && err.status > 0 && err.status < 500)
362
+ return [];
363
+ throw err;
364
+ }
365
+ }
366
+ /** A v2 user (`POST /v2/users`) in the import shape the mapper reads. */
367
+ function fromV2User(u) {
368
+ const id = (0, record_set_1.str)(u.userId);
369
+ const human = (0, record_set_1.isObj)(u.human) ? u.human : undefined;
370
+ if (!id || !human)
371
+ return null;
372
+ const profile = (0, record_set_1.isObj)(human.profile) ? human.profile : {};
373
+ const email = (0, record_set_1.isObj)(human.email) ? human.email : {};
374
+ const phone = (0, record_set_1.isObj)(human.phone) ? human.phone : {};
375
+ return {
376
+ orgId: (0, record_set_1.isObj)(u.details) ? (0, record_set_1.str)(u.details.resourceOwner) : undefined,
377
+ entry: {
378
+ userId: id,
379
+ user: {
380
+ userName: (0, record_set_1.str)(u.username),
381
+ profile: { firstName: (0, record_set_1.str)(profile.givenName), lastName: (0, record_set_1.str)(profile.familyName), displayName: (0, record_set_1.str)(profile.displayName), nickName: (0, record_set_1.str)(profile.nickName) },
382
+ email: { email: (0, record_set_1.str)(email.email), isEmailVerified: email.isVerified === true },
383
+ phone: { phone: (0, record_set_1.str)(phone.phone), isPhoneVerified: phone.isVerified === true },
384
+ },
385
+ },
386
+ };
387
+ }
388
+ async function fetchZitadel(o) {
389
+ const progress = o.onProgress ?? (() => undefined);
390
+ const http = zitadelHttp(o);
391
+ const instance = zitadelBase(o.instance);
392
+ progress('the instance export');
393
+ try {
394
+ const { body } = await http.post('/admin/v1/export', { withPasswords: true, withOtp: true, responseOutput: true });
395
+ const snap = readZitadelExport(body);
396
+ progress('identity providers');
397
+ return { ...snap, idpTemplates: await fetchIdpTemplates(http), source: 'api', instance };
398
+ }
399
+ catch (err) {
400
+ // The export endpoint is IAM_OWNER-only and absent from old versions: fall back to listing users.
401
+ if (!(err instanceof vendor_http_1.VendorApiError) || ![403, 404, 405, 501].includes(err.status))
402
+ throw err;
403
+ }
404
+ const size = o.pageSize ?? 100;
405
+ const orgsById = new Map();
406
+ for (let offset = 0;; offset += size) {
407
+ progress(`organizations (${orgsById.size} so far)`);
408
+ const { body } = await http.post('/admin/v1/orgs/_search', { query: { offset: String(offset), limit: size } });
409
+ const page = (0, record_set_1.isObj)(body) ? (0, record_set_1.objs)(body.result) : [];
410
+ for (const org of page) {
411
+ const id = (0, record_set_1.str)(org.id);
412
+ if (id)
413
+ orgsById.set(id, { orgId: id, org: { name: (0, record_set_1.str)(org.name) }, humanUsers: [] });
414
+ }
415
+ if (page.length < size)
416
+ break;
417
+ }
418
+ const fallbackOrg = (id) => {
419
+ const key = id ?? '';
420
+ if (!orgsById.has(key))
421
+ orgsById.set(key, { orgId: id, humanUsers: [] });
422
+ return orgsById.get(key);
423
+ };
424
+ let users = 0;
425
+ for (let offset = 0;; offset += size) {
426
+ progress(`users (${users} so far)`);
427
+ const { body } = await http.post('/v2/users', {
428
+ query: { offset: String(offset), limit: size, asc: true },
429
+ queries: [{ typeQuery: { type: 'TYPE_HUMAN' } }],
430
+ });
431
+ const page = (0, record_set_1.isObj)(body) ? (0, record_set_1.objs)(body.result) : [];
432
+ for (const u of page) {
433
+ const mapped = fromV2User(u);
434
+ if (!mapped)
435
+ continue;
436
+ users++;
437
+ fallbackOrg(mapped.orgId).humanUsers.push(mapped.entry);
438
+ }
439
+ if (page.length < size)
440
+ break;
441
+ }
442
+ return { orgs: [...orgsById.values()], idpTemplates: await fetchIdpTemplates(http), source: 'users', instance };
443
+ }
444
+ async function exportZitadelApi(o) {
445
+ return mapZitadel(await fetchZitadel(o), { orgs: o.orgs });
446
+ }
447
+ //# sourceMappingURL=zitadel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zitadel.js","sourceRoot":"","sources":["../../../src/migrate/export/zitadel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import type { MigrationPlugin } from '../framework/plugin';
2
+ export declare const firebasePlugin: MigrationPlugin;
@@ -0,0 +1,152 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.firebasePlugin = void 0;
4
+ const firebase_1 = require("../export/firebase");
5
+ const firebase_config_1 = require("../export/firebase-config");
6
+ const errors_1 = require("../../errors");
7
+ const plugin_kit_1 = require("../export/plugin-kit");
8
+ /**
9
+ * `atlas migrate firebase` (also Google Cloud Identity Platform) — the
10
+ * project's sign-in settings as Atlas config, its users with their Firebase
11
+ * scrypt hashes, identities, SMS second factors and tenants through the
12
+ * Identity Toolkit Admin API (or an auth:export file), the `firebase` bridge
13
+ * preset (a Firebase ID token becomes an Atlas session) and the `firebase`
14
+ * lazy-migration preset for passwords whose hashes were not exported.
15
+ * The service-account key stays on this machine; only Google sees its signature.
16
+ */
17
+ const PROJECT = { flag: '--firebase-project', env: 'FIREBASE_PROJECT_ID', label: 'your Firebase / Google Cloud project id', required: false };
18
+ const SERVICE_ACCOUNT = { flag: '--firebase-service-account', env: 'GOOGLE_APPLICATION_CREDENTIALS', label: 'a service-account key file (JSON) with Firebase Authentication Admin', required: false, secret: true };
19
+ const ACCESS_TOKEN = { flag: '--firebase-access-token', env: 'FIREBASE_ACCESS_TOKEN', label: 'an OAuth access token for the project (gcloud auth print-access-token)', required: false, secret: true };
20
+ const USERS_FILE = { flag: '--firebase-users-file', env: 'FIREBASE_USERS_FILE', label: 'a firebase auth:export file (JSON or CSV)', required: false };
21
+ const TENANT = { flag: '--firebase-tenant', env: 'FIREBASE_TENANT_ID', label: 'an Identity Platform tenant id, or "all" (every tenant, each as an organization)', required: false };
22
+ const ANONYMOUS = { flag: '--firebase-anonymous', env: 'FIREBASE_ANONYMOUS', label: '"include" to export anonymous users too', required: false };
23
+ const SIGNER_KEY = { flag: '--firebase-signer-key', env: 'FIREBASE_SIGNER_KEY', label: 'the password hash signer key (base64)', required: false, secret: true };
24
+ const SALT_SEPARATOR = { flag: '--firebase-salt-separator', env: 'FIREBASE_SALT_SEPARATOR', label: 'the password hash salt separator (base64)', required: false };
25
+ const ROUNDS = { flag: '--firebase-rounds', env: 'FIREBASE_ROUNDS', label: 'the password hash rounds', required: false };
26
+ const MEM_COST = { flag: '--firebase-mem-cost', env: 'FIREBASE_MEM_COST', label: 'the password hash memory cost', required: false };
27
+ const BRIDGE = { flag: '--firebase-bridge', env: 'FIREBASE_BRIDGE', label: 'what the bridge exchanges: id-token (default) or session-cookie (Admin SDK createSessionCookie)', required: false };
28
+ const COOKIE_NAME = { flag: '--firebase-cookie-name', env: 'FIREBASE_SESSION_COOKIE_NAME', label: 'the session cookie name your app sets (default session; __session is always read)', required: false };
29
+ const API_KEY = { flag: '--firebase-api-key', env: 'FIREBASE_API_KEY', label: 'the project Web API key (AIza…), for lazy migration', required: false };
30
+ /** The project id: the flag, else the service-account file's. */
31
+ function projectOf(p) {
32
+ const explicit = p.credential(PROJECT);
33
+ if (explicit)
34
+ return explicit.trim();
35
+ const sa = (0, plugin_kit_1.localFile)(p, SERVICE_ACCOUNT, 'text');
36
+ const fromKey = sa ? (0, firebase_1.parseServiceAccount)(sa).project_id : undefined;
37
+ if (fromKey)
38
+ return fromKey;
39
+ throw new errors_1.CliError('Firebase: pass the project id (--set firebase-project=<id> or FIREBASE_PROJECT_ID).');
40
+ }
41
+ function hashParams(p) {
42
+ const n = (spec) => {
43
+ const v = p.credential(spec);
44
+ if (v === undefined)
45
+ return undefined;
46
+ const num = Number(v);
47
+ if (!Number.isInteger(num))
48
+ throw new errors_1.CliError(`Firebase: ${spec.label} must be a whole number.`);
49
+ return num;
50
+ };
51
+ const out = {};
52
+ const signer = p.credential(SIGNER_KEY);
53
+ const sep = p.credential(SALT_SEPARATOR);
54
+ const rounds = n(ROUNDS);
55
+ const mem = n(MEM_COST);
56
+ if (signer)
57
+ out.signer_key = signer;
58
+ if (sep !== undefined)
59
+ out.salt_separator = sep;
60
+ if (rounds !== undefined)
61
+ out.rounds = rounds;
62
+ if (mem !== undefined)
63
+ out.mem_cost = mem;
64
+ return out;
65
+ }
66
+ function http(p, projectId) {
67
+ const token = p.credential(ACCESS_TOKEN);
68
+ const sa = (0, plugin_kit_1.localFile)(p, SERVICE_ACCOUNT, 'text');
69
+ if (!token && !sa) {
70
+ throw new errors_1.CliError('Firebase: pass a service-account key file (--set firebase-service-account=<path> or GOOGLE_APPLICATION_CREDENTIALS) or an access token (FIREBASE_ACCESS_TOKEN).');
71
+ }
72
+ return (0, firebase_1.firebaseHttp)({ accessToken: token, serviceAccount: sa ? (0, firebase_1.parseServiceAccount)(sa) : undefined, projectId, fetchImpl: p.fetch });
73
+ }
74
+ exports.firebasePlugin = {
75
+ vendor: 'firebase',
76
+ source: 'firebase',
77
+ label: 'Firebase Authentication',
78
+ help: 'Move a Firebase Authentication or Identity Platform project: its sign-in methods, providers, MFA and password policy as Atlas config; its users with their Firebase scrypt password hashes, social / OIDC / SAML links, SMS second factors and tenants; a zero-logout bridge for Firebase ID tokens; lazy migration for any password you could not export; and the code. The service-account key stays on this machine.',
79
+ config: {
80
+ reads: 'your Firebase project config via the Identity Toolkit admin API',
81
+ credentials: [PROJECT, SERVICE_ACCOUNT, ACCESS_TOKEN],
82
+ async translate(p) {
83
+ const projectId = projectOf(p);
84
+ const snap = await (0, plugin_kit_1.vendorStep)('Firebase', () => (0, firebase_config_1.fetchFirebaseConfig)(http(p, projectId), projectId));
85
+ return (0, firebase_config_1.translateFirebaseConfig)(snap);
86
+ },
87
+ },
88
+ export: {
89
+ reads: 'the Identity Toolkit admin API (accounts:batchGet, tenants, SAML providers, hash parameters) or a firebase auth:export file',
90
+ credentials: [PROJECT, SERVICE_ACCOUNT, ACCESS_TOKEN, USERS_FILE, TENANT, ANONYMOUS, SIGNER_KEY, SALT_SEPARATOR, ROUNDS, MEM_COST],
91
+ limits: [
92
+ 'TOTP second factors cannot be exported (Firebase keeps no exportable secret): those users enrol again. SMS second factors move by phone number.',
93
+ 'Password hashes need the project\'s hash parameters: read from the project config with an owner / Firebase Authentication Admin key, or passed as flags from Console → Authentication → Users → ⋮ → Password hash parameters. Without them, passwords move by lazy migration.',
94
+ 'The auth:export file keeps ten social providers only, has no OIDC / SAML / phone links, cannot hold a tenant, and its CSV has no second factors: export through the API for those.',
95
+ 'Sessions are not exported: the firebase bridge preset exchanges a Firebase ID token (and firebase_session_cookie a session cookie) instead.',
96
+ ],
97
+ async run(p, writer, resume) {
98
+ const projectId = projectOf(p);
99
+ const usersText = (0, plugin_kit_1.localFile)(p, USERS_FILE, 'text');
100
+ const set = await (0, plugin_kit_1.vendorStep)('Firebase', () => (0, firebase_1.exportFirebase)({
101
+ projectId,
102
+ usersText,
103
+ usersFileName: p.credential(USERS_FILE),
104
+ serviceAccountJson: usersText === undefined ? (0, plugin_kit_1.localFile)(p, SERVICE_ACCOUNT, 'text') : undefined,
105
+ accessToken: usersText === undefined ? p.credential(ACCESS_TOKEN) : undefined,
106
+ tenant: p.credential(TENANT),
107
+ hashParams: hashParams(p),
108
+ includeAnonymous: p.credential(ANONYMOUS) === 'include',
109
+ fetchImpl: p.fetch,
110
+ onProgress: (m) => p.say(` reading ${m}`),
111
+ }));
112
+ await (0, plugin_kit_1.writeRecordSet)(set, writer, resume, p.say);
113
+ },
114
+ },
115
+ bridge: {
116
+ preset: 'firebase',
117
+ presetFor(p) {
118
+ const mode = (p.credential(BRIDGE) ?? 'id-token').trim().toLowerCase();
119
+ if (mode === 'session-cookie')
120
+ return 'firebase_session_cookie';
121
+ if (mode !== 'id-token')
122
+ throw new errors_1.CliError(`Firebase: --set firebase-bridge takes id-token or session-cookie (got ${mode}).`);
123
+ return 'firebase';
124
+ },
125
+ vars(p, t) {
126
+ const vars = { ...t?.bridge?.vars };
127
+ const project = p.credential(PROJECT);
128
+ if (project)
129
+ vars.project_id = project.trim();
130
+ const cookie = p.credential(COOKIE_NAME);
131
+ if (cookie)
132
+ vars.cookie_name = cookie.trim();
133
+ return vars;
134
+ },
135
+ },
136
+ lazy: {
137
+ preset: 'firebase',
138
+ config(p, t) {
139
+ const config = { ...t?.lazy?.config };
140
+ const tenant = p.credential(TENANT);
141
+ if (tenant && tenant !== 'all')
142
+ config.tenant_id = tenant;
143
+ // The Web API key is public (it ships in the client config): it is preset config, not a secret.
144
+ const apiKey = p.credential(API_KEY);
145
+ if (apiKey)
146
+ config.api_key = apiKey;
147
+ return config;
148
+ },
149
+ },
150
+ codemod: 'firebase',
151
+ };
152
+ //# sourceMappingURL=plugin.js.map