@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,114 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.zitadelPlugin = void 0;
4
+ const node_path_1 = require("node:path");
5
+ const errors_1 = require("../../errors");
6
+ const zitadel_1 = require("../export/zitadel");
7
+ const zitadel_config_1 = require("../export/zitadel-config");
8
+ const plugin_kit_1 = require("../export/plugin-kit");
9
+ /**
10
+ * `atlas migrate zitadel` — ZITADEL Cloud and self-hosted ZITADEL: policies,
11
+ * applications, project roles and identity providers as Atlas config; users
12
+ * with their password hashes, TOTP secrets, verified email and phone, social
13
+ * and enterprise links, project roles (as app roles) and organizations with
14
+ * their members, from ZITADEL's own export (a file, or the admin API with a
15
+ * service-user token); a zero-logout bridge for ZITADEL ID tokens and JWT
16
+ * access tokens; lazy migration through the session API; and the code. The
17
+ * token stays on this machine.
18
+ */
19
+ const URL_SPEC = { flag: '--zitadel-url', env: 'ZITADEL_URL', label: 'your ZITADEL URL (https://<instance>.zitadel.cloud, or your own domain)', required: false };
20
+ const TOKEN = { flag: '--zitadel-token', env: 'ZITADEL_TOKEN', label: 'a service user\'s personal access token (IAM_OWNER to export, IAM_LOGIN_CLIENT for lazy migration)', required: false, secret: true };
21
+ const EXPORT_FILE = { flag: '--zitadel-export', env: 'ZITADEL_EXPORT_FILE', label: 'the JSON file `zitadel export` wrote (or a saved POST /admin/v1/export response)', required: false };
22
+ const ORGS = { flag: '--zitadel-orgs', env: 'ZITADEL_ORGS', label: 'how organizations move: auto (when there is more than one), all or skip', required: false };
23
+ function instanceUrl(p) {
24
+ const raw = p.credential(URL_SPEC);
25
+ return raw ? (0, zitadel_1.zitadelBase)(raw) : undefined;
26
+ }
27
+ function orgsMode(p) {
28
+ const raw = (p.credential(ORGS) ?? 'auto').trim().toLowerCase();
29
+ if (raw !== 'auto' && raw !== 'all' && raw !== 'skip')
30
+ throw new errors_1.CliError(`ZITADEL: --set zitadel-orgs takes auto, all or skip (got ${raw}).`);
31
+ return raw;
32
+ }
33
+ function readDocument(p, path) {
34
+ try {
35
+ return JSON.parse(p.ctx.readFile((0, node_path_1.resolve)(path)));
36
+ }
37
+ catch (err) {
38
+ throw new errors_1.CliError(`ZITADEL: could not read the export ${path}: ${err.message}`);
39
+ }
40
+ }
41
+ exports.zitadelPlugin = {
42
+ vendor: 'zitadel',
43
+ source: 'zitadel',
44
+ label: 'ZITADEL',
45
+ help: 'Move ZITADEL (Cloud or self-hosted): login, password and lockout policy, applications, project roles and identity providers as Atlas config; users with password hashes, TOTP secrets, verified email and phone, social and enterprise links, roles and organizations from ZITADEL\'s own export; a zero-logout bridge for ZITADEL ID tokens and JWT access tokens; lazy migration through the session API; and the code. Your service-user token stays on this machine.',
46
+ config: {
47
+ reads: 'a `zitadel export` file, or your instance through the admin API (policies, applications, roles, identity providers, actions)',
48
+ credentials: [EXPORT_FILE, URL_SPEC, TOKEN],
49
+ async translate(p) {
50
+ const file = p.credential(EXPORT_FILE);
51
+ const url = instanceUrl(p);
52
+ if (file)
53
+ return (0, zitadel_config_1.translateZitadelConfig)((0, zitadel_config_1.configSnapshotFromExport)(readDocument(p, file), file, url));
54
+ const token = p.credential(TOKEN);
55
+ if (!url || !token) {
56
+ throw new errors_1.CliError('ZITADEL: pass the export file (--set zitadel-export=<file>), or your instance URL and a service-user token (--set zitadel-url=… --set zitadel-token=…).');
57
+ }
58
+ return (0, zitadel_config_1.translateZitadelConfig)(await (0, plugin_kit_1.vendorStep)('ZITADEL', () => (0, zitadel_config_1.fetchZitadelConfig)({ instance: url, token, fetchImpl: p.fetch })));
59
+ },
60
+ },
61
+ export: {
62
+ reads: 'ZITADEL\'s export (a `zitadel export` file, or POST /admin/v1/export with a service-user token)',
63
+ credentials: [EXPORT_FILE, URL_SPEC, TOKEN, ORGS],
64
+ limits: [
65
+ 'Passkeys and security keys live only in ZITADEL\'s event store and are not exported: users register a passkey again.',
66
+ 'Password hashes and TOTP secrets need the export with passwords and secrets on (`zitadel export`, or an IAM_OWNER token on the admin API). With a narrower role the export lists users through the user API instead, and passwords move by lazy migration.',
67
+ 'Machine users (service accounts) are not exported: recreate them as Atlas API keys or M2M clients.',
68
+ 'Organizations become Atlas organizations when the instance has more than one (--set zitadel-orgs=all to always, skip to never); organization roles other than ORG_OWNER join as plain members.',
69
+ 'Sessions are opaque to Atlas: the bridge accepts ZITADEL ID tokens and JWT access tokens instead.',
70
+ ],
71
+ async run(p, writer, resume) {
72
+ const file = p.credential(EXPORT_FILE);
73
+ const orgs = orgsMode(p);
74
+ let set;
75
+ if (file) {
76
+ const url = instanceUrl(p);
77
+ set = await (0, plugin_kit_1.vendorStep)('ZITADEL', async () => (0, zitadel_1.mapZitadel)({ ...(0, zitadel_1.readZitadelExport)(readDocument(p, file)), instance: url }, { orgs }));
78
+ }
79
+ else {
80
+ const url = instanceUrl(p);
81
+ if (!url)
82
+ throw new errors_1.CliError('ZITADEL: pass the export file (--set zitadel-export=<file>), or your instance URL and a service-user token (--set zitadel-url=… --set zitadel-token=…).');
83
+ const token = (0, plugin_kit_1.need)(p, TOKEN);
84
+ set = await (0, plugin_kit_1.vendorStep)('ZITADEL', () => (0, zitadel_1.exportZitadelApi)({ instance: url, token, orgs, fetchImpl: p.fetch, onProgress: (m) => p.say(` reading ${m}`) }));
85
+ }
86
+ await (0, plugin_kit_1.writeRecordSet)(set, writer, resume, p.say);
87
+ },
88
+ },
89
+ bridge: {
90
+ preset: 'zitadel',
91
+ vars(p, t) {
92
+ const vars = { ...t?.bridge?.vars };
93
+ const url = instanceUrl(p);
94
+ if (url)
95
+ vars.issuer = url;
96
+ if (!vars.issuer)
97
+ throw new errors_1.CliError('ZITADEL: the bridge needs the issuer: pass your instance URL (--set zitadel-url=https://<instance>.zitadel.cloud).');
98
+ return vars;
99
+ },
100
+ },
101
+ lazy: {
102
+ preset: 'zitadel',
103
+ config(p, t) {
104
+ const config = { ...t?.lazy?.config };
105
+ const url = instanceUrl(p);
106
+ if (url)
107
+ config.base_url = url;
108
+ return config;
109
+ },
110
+ secret: TOKEN,
111
+ },
112
+ codemod: 'zitadel',
113
+ };
114
+ //# sourceMappingURL=plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../../src/migrate/zitadel/plugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import type { IO } from './io';
2
+ /**
3
+ * A single rendered column: a header plus a getter that pulls the raw value off
4
+ * a row. Getters (not keys) because a few columns are derived — a user's name
5
+ * joins first + last, a webhook's events join an array — and a getter keeps that
6
+ * shaping next to the column instead of forcing a pre-massaged row.
7
+ */
8
+ export interface Column<T> {
9
+ header: string;
10
+ get: (row: T) => unknown;
11
+ }
12
+ /**
13
+ * Epoch-millisecond timestamp → ISO-8601, the form every Atlas `*_at` field
14
+ * takes on the wire. Blank for null (e.g. a user who never signed in) so the
15
+ * column stays readable rather than printing `1970-...`.
16
+ */
17
+ export declare function fmtTime(value: unknown): string;
18
+ /**
19
+ * Hand-rolled fixed-width table — the only "formatting library" this CLI has.
20
+ * Columns are padded to the widest cell (header included); a dashed rule sits
21
+ * under the header; trailing padding on the last column is trimmed so lines
22
+ * don't carry invisible whitespace. Empty input prints a friendly placeholder
23
+ * rather than a bare header with no rows.
24
+ */
25
+ export declare function renderTable<T>(columns: Column<T>[], rows: T[]): string;
26
+ /** Pretty-print any value as the `--json` output on stdout. */
27
+ export declare function printJson(io: IO, value: unknown): void;
28
+ /**
29
+ * Print a cursor-paginated list as either raw JSON or a table, and — in table
30
+ * mode, when there is another page — a footer naming the exact flag to fetch
31
+ * it. Keeping the hint next to the data is what makes `--starting-after`
32
+ * discoverable without the user reading `--help`.
33
+ */
34
+ export declare function printList<T>(io: IO, opts: {
35
+ json: boolean;
36
+ columns: Column<T>[];
37
+ }, page: {
38
+ data: T[];
39
+ has_more?: boolean;
40
+ next_cursor?: string | null;
41
+ }, raw?: unknown): void;
package/dist/output.js ADDED
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fmtTime = fmtTime;
4
+ exports.renderTable = renderTable;
5
+ exports.printJson = printJson;
6
+ exports.printList = printList;
7
+ /** Render a value as a table cell: null/undefined blank, arrays joined, objects JSON. */
8
+ function cell(value) {
9
+ if (value === null || value === undefined)
10
+ return '';
11
+ if (Array.isArray(value))
12
+ return value.map((v) => cell(v)).join(', ');
13
+ if (typeof value === 'object')
14
+ return JSON.stringify(value);
15
+ return String(value);
16
+ }
17
+ /**
18
+ * Epoch-millisecond timestamp → ISO-8601, the form every Atlas `*_at` field
19
+ * takes on the wire. Blank for null (e.g. a user who never signed in) so the
20
+ * column stays readable rather than printing `1970-...`.
21
+ */
22
+ function fmtTime(value) {
23
+ if (value === null || value === undefined)
24
+ return '';
25
+ const n = Number(value);
26
+ if (!Number.isFinite(n))
27
+ return '';
28
+ return new Date(n).toISOString();
29
+ }
30
+ /**
31
+ * Hand-rolled fixed-width table — the only "formatting library" this CLI has.
32
+ * Columns are padded to the widest cell (header included); a dashed rule sits
33
+ * under the header; trailing padding on the last column is trimmed so lines
34
+ * don't carry invisible whitespace. Empty input prints a friendly placeholder
35
+ * rather than a bare header with no rows.
36
+ */
37
+ function renderTable(columns, rows) {
38
+ if (rows.length === 0)
39
+ return '(no results)';
40
+ const matrix = rows.map((row) => columns.map((col) => cell(col.get(row))));
41
+ const widths = columns.map((col, i) => Math.max(col.header.length, ...matrix.map((r) => r[i].length)));
42
+ const pad = (text, width) => text.padEnd(width);
43
+ const line = (fields) => fields.map((f, i) => pad(f, widths[i])).join(' ').replace(/\s+$/, '');
44
+ const lines = [
45
+ line(columns.map((c) => c.header)),
46
+ line(widths.map((w) => '-'.repeat(w))),
47
+ ...matrix.map((r) => line(r)),
48
+ ];
49
+ return lines.join('\n');
50
+ }
51
+ /** Pretty-print any value as the `--json` output on stdout. */
52
+ function printJson(io, value) {
53
+ io.out(JSON.stringify(value, null, 2));
54
+ }
55
+ /**
56
+ * Print a cursor-paginated list as either raw JSON or a table, and — in table
57
+ * mode, when there is another page — a footer naming the exact flag to fetch
58
+ * it. Keeping the hint next to the data is what makes `--starting-after`
59
+ * discoverable without the user reading `--help`.
60
+ */
61
+ function printList(io, opts, page, raw = page) {
62
+ if (opts.json) {
63
+ printJson(io, raw);
64
+ return;
65
+ }
66
+ io.out(renderTable(opts.columns, page.data));
67
+ if (page.has_more && page.next_cursor) {
68
+ io.out('');
69
+ io.out(`More results — fetch the next page with: --starting-after ${page.next_cursor}`);
70
+ }
71
+ }
72
+ //# sourceMappingURL=output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output.js","sourceRoot":"","sources":["../src/output.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ import { type ConfigHttp } from './config-http';
2
+ import type { RunContext } from './context';
3
+ /**
4
+ * The project manifest `atlas init` keeps at `~/.config/<product>/atlas.json`:
5
+ * PUBLIC values only (ids, publishable key, hosts, redirect URIs) plus the path
6
+ * of each secret file. `atlas env`, `atlas preflight --instance` and
7
+ * `atlas client rotate` read it, so they know where a secret lives without
8
+ * ever holding it in the manifest.
9
+ */
10
+ export type InstanceEnv = 'development' | 'production';
11
+ export interface ProjectInstance {
12
+ instance_id: string;
13
+ environment: InstanceEnv;
14
+ publishable_key: string;
15
+ frontend_api_host: string | null;
16
+ issuer: string | null;
17
+ discovery_url: string | null;
18
+ jwks_uri: string | null;
19
+ /** The file holding ATLAS_SECRET_KEY. */
20
+ secret_file: string;
21
+ oauth_client?: {
22
+ id: string;
23
+ client_id: string;
24
+ redirect_uris: string[];
25
+ secret_file: string | null;
26
+ };
27
+ webhook?: {
28
+ id: string;
29
+ url: string;
30
+ secret_file: string | null;
31
+ };
32
+ custom_domain?: {
33
+ host: string;
34
+ cname_target: string | null;
35
+ status: string;
36
+ };
37
+ email?: {
38
+ mode: 'managed' | 'development' | 'none';
39
+ from_address?: string | null;
40
+ };
41
+ }
42
+ export interface ProjectManifest {
43
+ product: string;
44
+ api_url: string;
45
+ instances: Partial<Record<InstanceEnv, ProjectInstance>>;
46
+ }
47
+ export declare const MANIFEST_FILE = "atlas.json";
48
+ export declare function manifestPath(env: NodeJS.ProcessEnv, product: string): string;
49
+ export declare function readManifest(env: NodeJS.ProcessEnv, product: string): ProjectManifest | undefined;
50
+ export declare function writeManifest(env: NodeJS.ProcessEnv, manifest: ProjectManifest): string;
51
+ /** Find the project + instance an instance id belongs to, scanning every product directory. */
52
+ export declare function findInstance(env: NodeJS.ProcessEnv, instanceId: string, product?: string): {
53
+ manifest: ProjectManifest;
54
+ instance: ProjectInstance;
55
+ } | undefined;
56
+ export declare function parseInstanceEnv(raw: string | undefined, fallback: InstanceEnv): InstanceEnv;
57
+ /** The raw HTTP client for a credential (the context's, or the real one). */
58
+ export declare function httpFor(ctx: RunContext, opts: {
59
+ secretKey: string;
60
+ apiUrl: string;
61
+ headers?: Record<string, string>;
62
+ }): ConfigHttp;
63
+ /** Read the instance secret key from the project's secret file. */
64
+ export declare function instanceSecretFromFile(instance: ProjectInstance): string;
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MANIFEST_FILE = void 0;
4
+ exports.manifestPath = manifestPath;
5
+ exports.readManifest = readManifest;
6
+ exports.writeManifest = writeManifest;
7
+ exports.findInstance = findInstance;
8
+ exports.parseInstanceEnv = parseInstanceEnv;
9
+ exports.httpFor = httpFor;
10
+ exports.instanceSecretFromFile = instanceSecretFromFile;
11
+ const node_fs_1 = require("node:fs");
12
+ const node_os_1 = require("node:os");
13
+ const node_path_1 = require("node:path");
14
+ const config_http_1 = require("./config-http");
15
+ const errors_1 = require("./errors");
16
+ const secrets_1 = require("./secrets");
17
+ exports.MANIFEST_FILE = 'atlas.json';
18
+ function manifestPath(env, product) {
19
+ return (0, node_path_1.join)((0, secrets_1.productDir)(env, product), exports.MANIFEST_FILE);
20
+ }
21
+ function readManifest(env, product) {
22
+ try {
23
+ return JSON.parse((0, node_fs_1.readFileSync)(manifestPath(env, product), 'utf8'));
24
+ }
25
+ catch {
26
+ return undefined;
27
+ }
28
+ }
29
+ function writeManifest(env, manifest) {
30
+ const dir = (0, secrets_1.productDir)(env, manifest.product);
31
+ (0, node_fs_1.mkdirSync)(dir, { recursive: true, mode: 0o700 });
32
+ const path = (0, node_path_1.join)(dir, exports.MANIFEST_FILE);
33
+ (0, node_fs_1.writeFileSync)(path, JSON.stringify(manifest, null, 2) + '\n', { mode: 0o600 });
34
+ (0, node_fs_1.chmodSync)(path, 0o600);
35
+ return path;
36
+ }
37
+ /** Find the project + instance an instance id belongs to, scanning every product directory. */
38
+ function findInstance(env, instanceId, product) {
39
+ const products = product ? [product] : listProducts(env);
40
+ for (const p of products) {
41
+ const m = readManifest(env, p);
42
+ for (const inst of Object.values(m?.instances ?? {})) {
43
+ if (inst && inst.instance_id === instanceId)
44
+ return { manifest: m, instance: inst };
45
+ }
46
+ }
47
+ return undefined;
48
+ }
49
+ function listProducts(env) {
50
+ const base = env.XDG_CONFIG_HOME?.trim() || (0, node_path_1.join)(env.HOME?.trim() || (0, node_os_1.homedir)(), '.config');
51
+ try {
52
+ return (0, node_fs_1.readdirSync)(base).filter((d) => {
53
+ try {
54
+ (0, node_fs_1.readFileSync)((0, node_path_1.join)(base, d, exports.MANIFEST_FILE));
55
+ return true;
56
+ }
57
+ catch {
58
+ return false;
59
+ }
60
+ });
61
+ }
62
+ catch {
63
+ return [];
64
+ }
65
+ }
66
+ function parseInstanceEnv(raw, fallback) {
67
+ if (raw === undefined)
68
+ return fallback;
69
+ if (raw !== 'development' && raw !== 'production') {
70
+ throw new errors_1.CliError(`--instance-env must be development or production, got '${raw}'.`);
71
+ }
72
+ return raw;
73
+ }
74
+ /** The raw HTTP client for a credential (the context's, or the real one). */
75
+ function httpFor(ctx, opts) {
76
+ return (ctx.makeHttp ?? config_http_1.createConfigHttp)(opts);
77
+ }
78
+ /** Read the instance secret key from the project's secret file. */
79
+ function instanceSecretFromFile(instance) {
80
+ const key = (0, secrets_1.readEnvFile)(instance.secret_file)?.ATLAS_SECRET_KEY;
81
+ if (!key) {
82
+ throw new errors_1.CliError(`No ATLAS_SECRET_KEY in ${instance.secret_file}. Re-run 'atlas init' with --rotate-secret to mint a new one.`);
83
+ }
84
+ return key;
85
+ }
86
+ //# sourceMappingURL=project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * The interactive input seam for `atlas login`. An interface (not a direct
3
+ * `readline` call) so tests script answers without a TTY, and so `secret()`
4
+ * can hide the key no matter where it's wired.
5
+ */
6
+ export interface Prompter {
7
+ /** A visible line of input, with an optional default shown in brackets. */
8
+ text(query: string, opts?: {
9
+ default?: string;
10
+ }): Promise<string>;
11
+ /** A hidden line of input — the terminal never echoes what's typed. */
12
+ secret(query: string): Promise<string>;
13
+ }
14
+ /** The real prompter, reading the TTY. Not exercised by unit tests (they inject). */
15
+ export declare function defaultPrompter(input?: NodeJS.ReadableStream, output?: NodeJS.WritableStream): Prompter;
package/dist/prompt.js ADDED
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.defaultPrompter = defaultPrompter;
4
+ const node_readline_1 = require("node:readline");
5
+ function ask(input, output, query) {
6
+ const rl = (0, node_readline_1.createInterface)({ input, output });
7
+ return new Promise((resolve) => {
8
+ rl.question(query, (answer) => {
9
+ rl.close();
10
+ resolve(answer);
11
+ });
12
+ });
13
+ }
14
+ /** The real prompter, reading the TTY. Not exercised by unit tests (they inject). */
15
+ function defaultPrompter(input = process.stdin, output = process.stdout) {
16
+ return {
17
+ async text(query, opts) {
18
+ const suffix = opts?.default ? ` [${opts.default}]` : '';
19
+ const answer = (await ask(input, output, `${query}${suffix}: `)).trim();
20
+ return answer || opts?.default || '';
21
+ },
22
+ secret(query) {
23
+ // Echo the prompt, then mute readline's output so the secret never lands
24
+ // on screen or in scrollback. `_writeToOutput` is readline's own hook;
25
+ // overriding it is the standard way to hide typed input.
26
+ return new Promise((resolve) => {
27
+ const rl = (0, node_readline_1.createInterface)({ input, output, terminal: true });
28
+ let muted = false;
29
+ const rlInternal = rl;
30
+ rlInternal._writeToOutput = (s) => {
31
+ if (!muted)
32
+ output.write(s);
33
+ };
34
+ output.write(`${query}: `);
35
+ muted = true;
36
+ rl.question('', (answer) => {
37
+ muted = false;
38
+ output.write('\n');
39
+ rl.close();
40
+ resolve(answer.trim());
41
+ });
42
+ });
43
+ },
44
+ };
45
+ }
46
+ //# sourceMappingURL=prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../src/prompt.ts"],"names":[],"mappings":";;AAyBA,0CAiCC;AA1DD,iDAAgD;AAchD,SAAS,GAAG,CAAC,KAA4B,EAAE,MAA6B,EAAE,KAAa;IACrF,MAAM,EAAE,GAAG,IAAA,+BAAe,EAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IAC9C,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE;QACrC,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,EAAE;YAC5B,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,MAAM,CAAC,CAAC;QAClB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC;AAED,qFAAqF;AACrF,SAAgB,eAAe,CAC7B,QAA+B,OAAO,CAAC,KAAK,EAC5C,SAAgC,OAAO,CAAC,MAAM;IAE9C,OAAO;QACL,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI;YACpB,MAAM,MAAM,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACzD,MAAM,MAAM,GAAG,CAAC,MAAM,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,KAAK,GAAG,MAAM,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACxE,OAAO,MAAM,IAAI,IAAI,EAAE,OAAO,IAAI,EAAE,CAAC;QACvC,CAAC;QAED,MAAM,CAAC,KAAK;YACV,yEAAyE;YACzE,uEAAuE;YACvE,yDAAyD;YACzD,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE;gBACrC,MAAM,EAAE,GAAG,IAAA,+BAAe,EAAC,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC9D,IAAI,KAAK,GAAG,KAAK,CAAC;gBAClB,MAAM,UAAU,GAAG,EAAyD,CAAC;gBAC7E,UAAU,CAAC,cAAc,GAAG,CAAC,CAAS,EAAE,EAAE;oBACxC,IAAI,CAAC,KAAK;wBAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC9B,CAAC,CAAC;gBACF,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC;gBAC3B,KAAK,GAAG,IAAI,CAAC;gBACb,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,MAAM,EAAE,EAAE;oBACzB,KAAK,GAAG,KAAK,CAAC;oBACd,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBACnB,EAAE,CAAC,KAAK,EAAE,CAAC;oBACX,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;gBACzB,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * The CLI's one output-side secret filter. Every change a plan prints, every
3
+ * `--json` report of plan / preflight / golive and every API error passes through
4
+ * here, so a resource added later cannot leak by forgetting to mask a field.
5
+ *
6
+ * - {@link isSecretKey}: a field name that holds a secret. Names that only mention
7
+ * the word (`token_endpoint`, `password_policy`, `secret_key_prefix`) are not.
8
+ * - {@link redactDeep}: masks secret-named strings at any depth, and scrubs the rest.
9
+ * - {@link scrubText}: removes known values, Atlas-key-shaped values and
10
+ * `name=value` pairs from free text.
11
+ * - {@link rememberResolved}: records what a `${VAR}` placeholder resolved to, so a
12
+ * secret under an unexpected key still cannot print. {@link scrubbingIO} applies
13
+ * those values to everything the command writes.
14
+ *
15
+ * The state is per `run()`; {@link resetRedaction} clears it.
16
+ */
17
+ import type { IO } from './io';
18
+ export declare const REDACTED = "<redacted>";
19
+ /** True for a field name whose string value is a secret. */
20
+ export declare function isSecretKey(key: string): boolean;
21
+ /** An unresolved `${VAR}` is a name, not a value: it stays visible (apply refuses it). */
22
+ export declare const isPlaceholder: (v: unknown) => boolean;
23
+ /** The secret formats Atlas mints: `atlas_<env>_<kind>_…`, and the legacy `sk_<env>_`, `psk_`, `dsk_`, `whsec_`. */
24
+ export declare const SECRET_VALUE_SOURCE = "\\b(?:atlas_(?:live|test)_(?:sk|psk|dsk|whsec|pl|at)_[A-Za-z0-9]+|(?:sk_(?:live|test)|psk|dsk|whsec)_[A-Za-z0-9_\\-+/=]+)";
25
+ /** Forget the remembered values and leave `--show-secrets` off. */
26
+ export declare function resetRedaction(): void;
27
+ /** `--show-secrets`: the caller has checked it is allowed here. */
28
+ export declare function setRevealSecrets(on: boolean): void;
29
+ export declare const revealingSecrets: () => boolean;
30
+ /** Remember what a `${VAR}` under `key` resolved to. Public values (a client id, a plain URL) stay printable. */
31
+ export declare function rememberResolved(key: string | undefined, value: string): void;
32
+ /** Remove known values, key-shaped values and secret `name=value` pairs from free text. */
33
+ export declare function scrubText(text: string): string;
34
+ /** A copy with every secret-named string masked and every other string scrubbed. */
35
+ export declare function redactDeep<T>(value: T, key?: string): T;
36
+ /**
37
+ * The sinks every command writes through, without any value `${VAR}` resolved to.
38
+ * Only remembered values: a secret a command prints on purpose (`--print-secret`)
39
+ * was never remembered, so it still prints.
40
+ */
41
+ export declare function scrubbingIO(io: IO): IO;
package/dist/redact.js ADDED
@@ -0,0 +1,115 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.revealingSecrets = exports.SECRET_VALUE_SOURCE = exports.isPlaceholder = exports.REDACTED = void 0;
4
+ exports.isSecretKey = isSecretKey;
5
+ exports.resetRedaction = resetRedaction;
6
+ exports.setRevealSecrets = setRevealSecrets;
7
+ exports.rememberResolved = rememberResolved;
8
+ exports.scrubText = scrubText;
9
+ exports.redactDeep = redactDeep;
10
+ exports.scrubbingIO = scrubbingIO;
11
+ exports.REDACTED = '<redacted>';
12
+ const SECRET_WORD = /secret|token|password|passwd|api_?key|private_?key|signing_?key|encryption_?key|access_?key|credential|authorization/;
13
+ /** The name describes the secret rather than holding it. */
14
+ const DESCRIBES_IT = /_(endpoint|url|uri|method|policy|prefix|format|ttl|seconds|lifetimes?|params|set|file|files|at|type|name|id|ref|hint|hasher|alg|algorithm|enabled|required|source|length|mode|count|version)$/;
15
+ /** True for a field name whose string value is a secret. */
16
+ function isSecretKey(key) {
17
+ const snake = key.replace(/([a-z0-9])([A-Z])/g, '$1_$2').toLowerCase();
18
+ // `has_secret`, `is_token`: a flag about the secret, never the secret.
19
+ return SECRET_WORD.test(snake) && !DESCRIBES_IT.test(snake) && !/^(has|is)_/.test(snake);
20
+ }
21
+ const PLACEHOLDER = /^\$\{[A-Z0-9_]+\}$/;
22
+ /** An unresolved `${VAR}` is a name, not a value: it stays visible (apply refuses it). */
23
+ const isPlaceholder = (v) => typeof v === 'string' && PLACEHOLDER.test(v);
24
+ exports.isPlaceholder = isPlaceholder;
25
+ /** The secret formats Atlas mints: `atlas_<env>_<kind>_…`, and the legacy `sk_<env>_`, `psk_`, `dsk_`, `whsec_`. */
26
+ exports.SECRET_VALUE_SOURCE = '\\b(?:atlas_(?:live|test)_(?:sk|psk|dsk|whsec|pl|at)_[A-Za-z0-9]+|(?:sk_(?:live|test)|psk|dsk|whsec)_[A-Za-z0-9_\\-+/=]+)';
27
+ const SECRET_VALUE = new RegExp(exports.SECRET_VALUE_SOURCE, 'g');
28
+ const KEY_VALUE = /(["']?)([A-Za-z][\w-]*)\1(\s*[:=]\s*)("(?:[^"\\]|\\.)*"|'[^']*'|[^\s,&;}"']+)/g;
29
+ const BEARER = /\bBearer\s+[A-Za-z0-9._~+/=-]{8,}/g;
30
+ const known = new Set();
31
+ let reveal = false;
32
+ /** Forget the remembered values and leave `--show-secrets` off. */
33
+ function resetRedaction() {
34
+ known.clear();
35
+ reveal = false;
36
+ }
37
+ /** `--show-secrets`: the caller has checked it is allowed here. */
38
+ function setRevealSecrets(on) {
39
+ reveal = on;
40
+ }
41
+ const revealingSecrets = () => reveal;
42
+ exports.revealingSecrets = revealingSecrets;
43
+ /** Below this a value is too short to scrub without mangling ordinary words; a secret-named key is masked anyway. */
44
+ const MIN_SCRUB_LENGTH = 6;
45
+ const PUBLIC_KEY = /(^|_)client_id$|^provider$|^from_address$/i;
46
+ function isPlainUrl(v) {
47
+ try {
48
+ const u = new URL(v);
49
+ return (u.protocol === 'https:' || u.protocol === 'http:') && !u.username && !u.password && !u.search;
50
+ }
51
+ catch {
52
+ return false;
53
+ }
54
+ }
55
+ /** Remember what a `${VAR}` under `key` resolved to. Public values (a client id, a plain URL) stay printable. */
56
+ function rememberResolved(key, value) {
57
+ if (value.length < MIN_SCRUB_LENGTH)
58
+ return;
59
+ if (!(key && isSecretKey(key)) && ((key && PUBLIC_KEY.test(key)) || isPlainUrl(value)))
60
+ return;
61
+ known.add(value);
62
+ known.add(JSON.stringify(value).slice(1, -1));
63
+ }
64
+ function scrubKnown(text) {
65
+ if (reveal || known.size === 0)
66
+ return text;
67
+ let out = text;
68
+ for (const v of [...known].sort((a, b) => b.length - a.length))
69
+ out = out.split(v).join(exports.REDACTED);
70
+ return out;
71
+ }
72
+ /** Remove known values, key-shaped values and secret `name=value` pairs from free text. */
73
+ function scrubText(text) {
74
+ if (reveal)
75
+ return text;
76
+ return scrubKnown(text)
77
+ .replace(SECRET_VALUE, exports.REDACTED)
78
+ .replace(BEARER, `Bearer ${exports.REDACTED}`)
79
+ .replace(KEY_VALUE, (match, _q, name, sep, value) => {
80
+ // `<value>` in a help line is a placeholder too.
81
+ if (!isSecretKey(name) || (0, exports.isPlaceholder)(value) || /^<[\w-]+>$/.test(value))
82
+ return match;
83
+ const quoted = value.startsWith('"') || value.startsWith("'");
84
+ // `client_secret: missing` is prose; `client_secret: 8f3a91c2…` and `token=abc` are not.
85
+ if (!quoted && sep.includes(':') && value.length < 8)
86
+ return match;
87
+ const q = quoted ? value[0] : '';
88
+ return `${match.slice(0, match.length - value.length)}${q}${exports.REDACTED}${q}`;
89
+ });
90
+ }
91
+ /** A copy with every secret-named string masked and every other string scrubbed. */
92
+ function redactDeep(value, key) {
93
+ if (reveal)
94
+ return value;
95
+ if (typeof value === 'string') {
96
+ if (key && isSecretKey(key) && value !== '' && !(0, exports.isPlaceholder)(value))
97
+ return exports.REDACTED;
98
+ return scrubText(value);
99
+ }
100
+ if (Array.isArray(value))
101
+ return value.map((v) => redactDeep(v, key));
102
+ if (value !== null && typeof value === 'object') {
103
+ return Object.fromEntries(Object.entries(value).map(([k, v]) => [k, redactDeep(v, k)]));
104
+ }
105
+ return value;
106
+ }
107
+ /**
108
+ * The sinks every command writes through, without any value `${VAR}` resolved to.
109
+ * Only remembered values: a secret a command prints on purpose (`--print-secret`)
110
+ * was never remembered, so it still prints.
111
+ */
112
+ function scrubbingIO(io) {
113
+ return { out: (t) => io.out(scrubKnown(t)), err: (t) => io.err(scrubKnown(t)) };
114
+ }
115
+ //# sourceMappingURL=redact.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redact.js","sourceRoot":"","sources":["../src/redact.ts"],"names":[],"mappings":"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"}