@atlasauth/cli 0.12.0 → 0.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (276) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/args.d.ts +15 -0
  3. package/dist/args.js +7 -0
  4. package/dist/args.js.map +1 -1
  5. package/dist/commands/config.js +71 -6
  6. package/dist/commands/config.js.map +1 -1
  7. package/dist/commands/dev.d.ts +8 -0
  8. package/dist/commands/dev.js +84 -0
  9. package/dist/commands/dev.js.map +1 -0
  10. package/dist/commands/pages.d.ts +14 -0
  11. package/dist/commands/pages.js +113 -0
  12. package/dist/commands/pages.js.map +1 -0
  13. package/dist/context.d.ts +1 -1
  14. package/dist/help.d.ts +1 -1
  15. package/dist/help.js +58 -2
  16. package/dist/help.js.map +1 -1
  17. package/dist/index.d.ts +1 -0
  18. package/dist/index.js +3 -1
  19. package/dist/index.js.map +1 -1
  20. package/dist/migrate/appwrite/plugin.d.ts +2 -0
  21. package/dist/migrate/appwrite/plugin.js +103 -0
  22. package/dist/migrate/appwrite/plugin.js.map +1 -0
  23. package/dist/migrate/authentik/plugin.d.ts +2 -0
  24. package/dist/migrate/authentik/plugin.js +135 -0
  25. package/dist/migrate/authentik/plugin.js.map +1 -0
  26. package/dist/migrate/azure-ad-b2c/plugin.d.ts +8 -0
  27. package/dist/migrate/azure-ad-b2c/plugin.js +165 -0
  28. package/dist/migrate/azure-ad-b2c/plugin.js.map +1 -0
  29. package/dist/migrate/cognito/plugin.d.ts +5 -0
  30. package/dist/migrate/cognito/plugin.js +170 -0
  31. package/dist/migrate/cognito/plugin.js.map +1 -0
  32. package/dist/migrate/corbado/plugin.d.ts +2 -0
  33. package/dist/migrate/corbado/plugin.js +63 -0
  34. package/dist/migrate/corbado/plugin.js.map +1 -0
  35. package/dist/migrate/entra-external-id/plugin.d.ts +8 -0
  36. package/dist/migrate/entra-external-id/plugin.js +12 -0
  37. package/dist/migrate/entra-external-id/plugin.js.map +1 -0
  38. package/dist/migrate/export/appwrite-config.d.ts +28 -0
  39. package/dist/migrate/export/appwrite-config.js +170 -0
  40. package/dist/migrate/export/appwrite-config.js.map +1 -0
  41. package/dist/migrate/export/appwrite.d.ts +51 -0
  42. package/dist/migrate/export/appwrite.js +288 -0
  43. package/dist/migrate/export/appwrite.js.map +1 -0
  44. package/dist/migrate/export/authentik-config.d.ts +45 -0
  45. package/dist/migrate/export/authentik-config.js +357 -0
  46. package/dist/migrate/export/authentik-config.js.map +1 -0
  47. package/dist/migrate/export/authentik.d.ts +110 -0
  48. package/dist/migrate/export/authentik.js +838 -0
  49. package/dist/migrate/export/authentik.js.map +1 -0
  50. package/dist/migrate/export/azure-config.d.ts +58 -0
  51. package/dist/migrate/export/azure-config.js +344 -0
  52. package/dist/migrate/export/azure-config.js.map +1 -0
  53. package/dist/migrate/export/azure.d.ts +85 -0
  54. package/dist/migrate/export/azure.js +373 -0
  55. package/dist/migrate/export/azure.js.map +1 -0
  56. package/dist/migrate/export/cognito-config.d.ts +25 -0
  57. package/dist/migrate/export/cognito-config.js +273 -0
  58. package/dist/migrate/export/cognito-config.js.map +1 -0
  59. package/dist/migrate/export/cognito.d.ts +103 -0
  60. package/dist/migrate/export/cognito.js +441 -0
  61. package/dist/migrate/export/cognito.js.map +1 -0
  62. package/dist/migrate/export/corbado-config.d.ts +20 -0
  63. package/dist/migrate/export/corbado-config.js +63 -0
  64. package/dist/migrate/export/corbado-config.js.map +1 -0
  65. package/dist/migrate/export/corbado.d.ts +37 -0
  66. package/dist/migrate/export/corbado.js +132 -0
  67. package/dist/migrate/export/corbado.js.map +1 -0
  68. package/dist/migrate/export/firebase-config.d.ts +24 -0
  69. package/dist/migrate/export/firebase-config.js +215 -0
  70. package/dist/migrate/export/firebase-config.js.map +1 -0
  71. package/dist/migrate/export/firebase.d.ts +102 -0
  72. package/dist/migrate/export/firebase.js +464 -0
  73. package/dist/migrate/export/firebase.js.map +1 -0
  74. package/dist/migrate/export/frontegg-config.d.ts +29 -0
  75. package/dist/migrate/export/frontegg-config.js +238 -0
  76. package/dist/migrate/export/frontegg-config.js.map +1 -0
  77. package/dist/migrate/export/frontegg.d.ts +67 -0
  78. package/dist/migrate/export/frontegg.js +410 -0
  79. package/dist/migrate/export/frontegg.js.map +1 -0
  80. package/dist/migrate/export/fusionauth-config.d.ts +26 -0
  81. package/dist/migrate/export/fusionauth-config.js +226 -0
  82. package/dist/migrate/export/fusionauth-config.js.map +1 -0
  83. package/dist/migrate/export/fusionauth.d.ts +99 -0
  84. package/dist/migrate/export/fusionauth.js +642 -0
  85. package/dist/migrate/export/fusionauth.js.map +1 -0
  86. package/dist/migrate/export/hanko-config.d.ts +27 -0
  87. package/dist/migrate/export/hanko-config.js +265 -0
  88. package/dist/migrate/export/hanko-config.js.map +1 -0
  89. package/dist/migrate/export/hanko.d.ts +52 -0
  90. package/dist/migrate/export/hanko.js +605 -0
  91. package/dist/migrate/export/hanko.js.map +1 -0
  92. package/dist/migrate/export/keycloak-config.d.ts +19 -0
  93. package/dist/migrate/export/keycloak-config.js +219 -0
  94. package/dist/migrate/export/keycloak-config.js.map +1 -0
  95. package/dist/migrate/export/keycloak.d.ts +155 -0
  96. package/dist/migrate/export/keycloak.js +878 -0
  97. package/dist/migrate/export/keycloak.js.map +1 -0
  98. package/dist/migrate/export/ldap.d.ts +53 -0
  99. package/dist/migrate/export/ldap.js +277 -0
  100. package/dist/migrate/export/ldap.js.map +1 -0
  101. package/dist/migrate/export/logto-config.d.ts +27 -0
  102. package/dist/migrate/export/logto-config.js +264 -0
  103. package/dist/migrate/export/logto-config.js.map +1 -0
  104. package/dist/migrate/export/logto.d.ts +150 -0
  105. package/dist/migrate/export/logto.js +809 -0
  106. package/dist/migrate/export/logto.js.map +1 -0
  107. package/dist/migrate/export/magic-config.d.ts +14 -0
  108. package/dist/migrate/export/magic-config.js +28 -0
  109. package/dist/migrate/export/magic-config.js.map +1 -0
  110. package/dist/migrate/export/magic.d.ts +31 -0
  111. package/dist/migrate/export/magic.js +93 -0
  112. package/dist/migrate/export/magic.js.map +1 -0
  113. package/dist/migrate/export/mini-yaml.d.ts +19 -0
  114. package/dist/migrate/export/mini-yaml.js +581 -0
  115. package/dist/migrate/export/mini-yaml.js.map +1 -0
  116. package/dist/migrate/export/nhost-config.d.ts +26 -0
  117. package/dist/migrate/export/nhost-config.js +360 -0
  118. package/dist/migrate/export/nhost-config.js.map +1 -0
  119. package/dist/migrate/export/nhost.d.ts +64 -0
  120. package/dist/migrate/export/nhost.js +304 -0
  121. package/dist/migrate/export/nhost.js.map +1 -0
  122. package/dist/migrate/export/onelogin.d.ts +22 -0
  123. package/dist/migrate/export/onelogin.js +123 -0
  124. package/dist/migrate/export/onelogin.js.map +1 -0
  125. package/dist/migrate/export/ory-config.d.ts +58 -0
  126. package/dist/migrate/export/ory-config.js +451 -0
  127. package/dist/migrate/export/ory-config.js.map +1 -0
  128. package/dist/migrate/export/ory.d.ts +81 -0
  129. package/dist/migrate/export/ory.js +555 -0
  130. package/dist/migrate/export/ory.js.map +1 -0
  131. package/dist/migrate/export/password-detect.d.ts +29 -0
  132. package/dist/migrate/export/password-detect.js +81 -0
  133. package/dist/migrate/export/password-detect.js.map +1 -0
  134. package/dist/migrate/export/pingone.d.ts +36 -0
  135. package/dist/migrate/export/pingone.js +218 -0
  136. package/dist/migrate/export/pingone.js.map +1 -0
  137. package/dist/migrate/export/pocketbase-config.d.ts +28 -0
  138. package/dist/migrate/export/pocketbase-config.js +180 -0
  139. package/dist/migrate/export/pocketbase-config.js.map +1 -0
  140. package/dist/migrate/export/pocketbase.d.ts +52 -0
  141. package/dist/migrate/export/pocketbase.js +243 -0
  142. package/dist/migrate/export/pocketbase.js.map +1 -0
  143. package/dist/migrate/export/project-files.d.ts +15 -0
  144. package/dist/migrate/export/project-files.js +43 -0
  145. package/dist/migrate/export/project-files.js.map +1 -0
  146. package/dist/migrate/export/propelauth-config.d.ts +18 -0
  147. package/dist/migrate/export/propelauth-config.js +58 -0
  148. package/dist/migrate/export/propelauth-config.js.map +1 -0
  149. package/dist/migrate/export/propelauth-harness.test-helper.d.ts +62 -0
  150. package/dist/migrate/export/propelauth-harness.test-helper.js +109 -0
  151. package/dist/migrate/export/propelauth-harness.test-helper.js.map +1 -0
  152. package/dist/migrate/export/propelauth.d.ts +48 -0
  153. package/dist/migrate/export/propelauth.js +255 -0
  154. package/dist/migrate/export/propelauth.js.map +1 -0
  155. package/dist/migrate/export/source-lines.d.ts +17 -0
  156. package/dist/migrate/export/source-lines.js +43 -0
  157. package/dist/migrate/export/source-lines.js.map +1 -0
  158. package/dist/migrate/export/sso-metadata.d.ts +47 -0
  159. package/dist/migrate/export/sso-metadata.js +180 -0
  160. package/dist/migrate/export/sso-metadata.js.map +1 -0
  161. package/dist/migrate/export/stytch-config.d.ts +22 -0
  162. package/dist/migrate/export/stytch-config.js +102 -0
  163. package/dist/migrate/export/stytch-config.js.map +1 -0
  164. package/dist/migrate/export/stytch.d.ts +68 -0
  165. package/dist/migrate/export/stytch.js +510 -0
  166. package/dist/migrate/export/stytch.js.map +1 -0
  167. package/dist/migrate/export/supabase-config.d.ts +48 -0
  168. package/dist/migrate/export/supabase-config.js +408 -0
  169. package/dist/migrate/export/supabase-config.js.map +1 -0
  170. package/dist/migrate/export/supabase.d.ts +86 -0
  171. package/dist/migrate/export/supabase.js +524 -0
  172. package/dist/migrate/export/supabase.js.map +1 -0
  173. package/dist/migrate/export/supertokens-config.d.ts +20 -0
  174. package/dist/migrate/export/supertokens-config.js +150 -0
  175. package/dist/migrate/export/supertokens-config.js.map +1 -0
  176. package/dist/migrate/export/supertokens.d.ts +125 -0
  177. package/dist/migrate/export/supertokens.js +464 -0
  178. package/dist/migrate/export/supertokens.js.map +1 -0
  179. package/dist/migrate/export/table.d.ts +35 -0
  180. package/dist/migrate/export/table.js +248 -0
  181. package/dist/migrate/export/table.js.map +1 -0
  182. package/dist/migrate/export/userfront-config.d.ts +15 -0
  183. package/dist/migrate/export/userfront-config.js +49 -0
  184. package/dist/migrate/export/userfront-config.js.map +1 -0
  185. package/dist/migrate/export/userfront.d.ts +38 -0
  186. package/dist/migrate/export/userfront.js +189 -0
  187. package/dist/migrate/export/userfront.js.map +1 -0
  188. package/dist/migrate/export/workos-config.d.ts +23 -0
  189. package/dist/migrate/export/workos-config.js +125 -0
  190. package/dist/migrate/export/workos-config.js.map +1 -0
  191. package/dist/migrate/export/workos.d.ts +46 -0
  192. package/dist/migrate/export/workos.js +272 -0
  193. package/dist/migrate/export/workos.js.map +1 -0
  194. package/dist/migrate/export/zitadel-config.d.ts +37 -0
  195. package/dist/migrate/export/zitadel-config.js +279 -0
  196. package/dist/migrate/export/zitadel-config.js.map +1 -0
  197. package/dist/migrate/export/zitadel.d.ts +82 -0
  198. package/dist/migrate/export/zitadel.js +447 -0
  199. package/dist/migrate/export/zitadel.js.map +1 -0
  200. package/dist/migrate/firebase/plugin.d.ts +2 -0
  201. package/dist/migrate/firebase/plugin.js +152 -0
  202. package/dist/migrate/firebase/plugin.js.map +1 -0
  203. package/dist/migrate/framework/builtins.js +35 -6
  204. package/dist/migrate/framework/builtins.js.map +1 -1
  205. package/dist/migrate/framework/orchestrator.js +3 -2
  206. package/dist/migrate/framework/orchestrator.js.map +1 -1
  207. package/dist/migrate/framework/plugin.d.ts +2 -0
  208. package/dist/migrate/frontegg/plugin.d.ts +2 -0
  209. package/dist/migrate/frontegg/plugin.js +78 -0
  210. package/dist/migrate/frontegg/plugin.js.map +1 -0
  211. package/dist/migrate/fusionauth/plugin.d.ts +2 -0
  212. package/dist/migrate/fusionauth/plugin.js +109 -0
  213. package/dist/migrate/fusionauth/plugin.js.map +1 -0
  214. package/dist/migrate/hanko/plugin.d.ts +2 -0
  215. package/dist/migrate/hanko/plugin.js +100 -0
  216. package/dist/migrate/hanko/plugin.js.map +1 -0
  217. package/dist/migrate/keycloak/plugin.d.ts +2 -0
  218. package/dist/migrate/keycloak/plugin.js +148 -0
  219. package/dist/migrate/keycloak/plugin.js.map +1 -0
  220. package/dist/migrate/ldap/plugin.d.ts +2 -0
  221. package/dist/migrate/ldap/plugin.js +73 -0
  222. package/dist/migrate/ldap/plugin.js.map +1 -0
  223. package/dist/migrate/logto/plugin.d.ts +2 -0
  224. package/dist/migrate/logto/plugin.js +131 -0
  225. package/dist/migrate/logto/plugin.js.map +1 -0
  226. package/dist/migrate/magic/plugin.d.ts +2 -0
  227. package/dist/migrate/magic/plugin.js +56 -0
  228. package/dist/migrate/magic/plugin.js.map +1 -0
  229. package/dist/migrate/nhost/plugin.d.ts +2 -0
  230. package/dist/migrate/nhost/plugin.js +115 -0
  231. package/dist/migrate/nhost/plugin.js.map +1 -0
  232. package/dist/migrate/oidc/plugin.d.ts +2 -0
  233. package/dist/migrate/oidc/plugin.js +73 -0
  234. package/dist/migrate/oidc/plugin.js.map +1 -0
  235. package/dist/migrate/onelogin/plugin.d.ts +2 -0
  236. package/dist/migrate/onelogin/plugin.js +61 -0
  237. package/dist/migrate/onelogin/plugin.js.map +1 -0
  238. package/dist/migrate/ory/plugin.d.ts +2 -0
  239. package/dist/migrate/ory/plugin.js +186 -0
  240. package/dist/migrate/ory/plugin.js.map +1 -0
  241. package/dist/migrate/ping-identity/plugin.d.ts +2 -0
  242. package/dist/migrate/ping-identity/plugin.js +100 -0
  243. package/dist/migrate/ping-identity/plugin.js.map +1 -0
  244. package/dist/migrate/pocketbase/plugin.d.ts +2 -0
  245. package/dist/migrate/pocketbase/plugin.js +99 -0
  246. package/dist/migrate/pocketbase/plugin.js.map +1 -0
  247. package/dist/migrate/propelauth/plugin.d.ts +2 -0
  248. package/dist/migrate/propelauth/plugin.js +65 -0
  249. package/dist/migrate/propelauth/plugin.js.map +1 -0
  250. package/dist/migrate/saml/plugin.d.ts +2 -0
  251. package/dist/migrate/saml/plugin.js +79 -0
  252. package/dist/migrate/saml/plugin.js.map +1 -0
  253. package/dist/migrate/stytch/plugin.d.ts +2 -0
  254. package/dist/migrate/stytch/plugin.js +97 -0
  255. package/dist/migrate/stytch/plugin.js.map +1 -0
  256. package/dist/migrate/supabase/plugin.d.ts +2 -0
  257. package/dist/migrate/supabase/plugin.js +149 -0
  258. package/dist/migrate/supabase/plugin.js.map +1 -0
  259. package/dist/migrate/supertokens/plugin.d.ts +2 -0
  260. package/dist/migrate/supertokens/plugin.js +114 -0
  261. package/dist/migrate/supertokens/plugin.js.map +1 -0
  262. package/dist/migrate/user-table/plugin.d.ts +2 -0
  263. package/dist/migrate/user-table/plugin.js +62 -0
  264. package/dist/migrate/user-table/plugin.js.map +1 -0
  265. package/dist/migrate/userfront/plugin.d.ts +2 -0
  266. package/dist/migrate/userfront/plugin.js +60 -0
  267. package/dist/migrate/userfront/plugin.js.map +1 -0
  268. package/dist/migrate/workos/plugin.d.ts +2 -0
  269. package/dist/migrate/workos/plugin.js +81 -0
  270. package/dist/migrate/workos/plugin.js.map +1 -0
  271. package/dist/migrate/zitadel/plugin.d.ts +2 -0
  272. package/dist/migrate/zitadel/plugin.js +114 -0
  273. package/dist/migrate/zitadel/plugin.js.map +1 -0
  274. package/dist/run.js +4 -0
  275. package/dist/run.js.map +1 -1
  276. package/package.json +6 -5
@@ -0,0 +1,357 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AUTHENTIK_CONFIG_ENDPOINTS = void 0;
4
+ exports.snapshotFromBlueprint = snapshotFromBlueprint;
5
+ exports.fetchAuthentikConfig = fetchAuthentikConfig;
6
+ exports.timedeltaMs = timedeltaMs;
7
+ exports.translateAuthentikConfig = translateAuthentikConfig;
8
+ const authentik_1 = require("./authentik");
9
+ const mini_yaml_1 = require("./mini-yaml");
10
+ const vendor_http_1 = require("./vendor-http");
11
+ const record_set_1 = require("./record-set");
12
+ const translate_kit_1 = require("./translate-kit");
13
+ // ── readers ─────────────────────────────────────────────────────────────────
14
+ /** `key: !Env NAME` → `key: "@env:NAME"`: tagged values are references, not values. */
15
+ function neutralizeTags(text) {
16
+ return text
17
+ .split('\n')
18
+ .map((line) => {
19
+ const m = /^(\s*(?:-\s+)?[^\s#:][^:#]*:\s+)!([A-Za-z]+)\s+(.*?)\s*$/.exec(line);
20
+ if (!m)
21
+ return line;
22
+ const first = m[3].replace(/^[[(]\s*/, '').split(/[\s,\])]/)[0].replace(/^['"]|['"]$/g, '');
23
+ return `${m[1]}"@${m[2].toLowerCase()}:${first}"`;
24
+ })
25
+ .join('\n');
26
+ }
27
+ function snapshotFromBlueprint(text, file, baseUrl) {
28
+ const doc = (0, mini_yaml_1.parseYaml)(neutralizeTags(text));
29
+ const root = (0, record_set_1.isObj)(doc.value) ? doc.value : {};
30
+ const entries = [];
31
+ (0, record_set_1.objs)(root.entries).forEach((e, i) => {
32
+ const model = (0, record_set_1.str)(e.model)?.toLowerCase();
33
+ if (!model)
34
+ return;
35
+ entries.push({
36
+ model,
37
+ identifiers: (0, record_set_1.isObj)(e.identifiers) ? e.identifiers : {},
38
+ attrs: (0, record_set_1.isObj)(e.attrs) ? e.attrs : {},
39
+ file,
40
+ line: doc.line(`entries.${i}.model`) ?? doc.line(`entries.${i}`),
41
+ });
42
+ });
43
+ return { origin: `authentik blueprint ${file}`, baseUrl, entries, complete: false };
44
+ }
45
+ exports.AUTHENTIK_CONFIG_ENDPOINTS = [
46
+ ['/policies/password/', 'authentik_policies_password.passwordpolicy'],
47
+ ['/stages/password/', 'authentik_stages_password.passwordstage'],
48
+ ['/stages/user_login/', 'authentik_stages_user_login.userloginstage'],
49
+ ['/stages/user_write/', 'authentik_stages_user_write.userwritestage'],
50
+ ['/stages/identification/', 'authentik_stages_identification.identificationstage'],
51
+ ['/stages/email/', 'authentik_stages_email.emailstage'],
52
+ ['/stages/authenticator/totp/', 'authentik_stages_authenticator_totp.authenticatortotpstage'],
53
+ ['/stages/authenticator/webauthn/', 'authentik_stages_authenticator_webauthn.authenticatorwebauthnstage'],
54
+ ['/stages/authenticator/sms/', 'authentik_stages_authenticator_sms.authenticatorsmsstage'],
55
+ ['/stages/authenticator/static/', 'authentik_stages_authenticator_static.authenticatorstaticstage'],
56
+ ['/stages/authenticator/validate/', 'authentik_stages_authenticator_validate.authenticatorvalidatestage'],
57
+ ['/flows/instances/', 'authentik_flows.flow'],
58
+ ['/sources/oauth/', 'authentik_sources_oauth.oauthsource'],
59
+ ['/sources/saml/', 'authentik_sources_saml.samlsource'],
60
+ ['/sources/ldap/', 'authentik_sources_ldap.ldapsource'],
61
+ ['/providers/oauth2/', 'authentik_providers_oauth2.oauth2provider'],
62
+ ['/providers/saml/', 'authentik_providers_saml.samlprovider'],
63
+ ['/core/applications/', 'authentik_core.application'],
64
+ ['/core/brands/', 'authentik_brands.brand'],
65
+ ];
66
+ /** Read the settings objects through the API (the token needs read access to them). */
67
+ async function fetchAuthentikConfig(o) {
68
+ const base = o.baseUrl.replace(/\/+$/, '');
69
+ const http = new vendor_http_1.VendorHttp({ vendor: 'authentik', baseUrl: `${base}/api/v3`, headers: { authorization: `Bearer ${o.token}` }, fetchImpl: o.fetchImpl, sleep: o.sleep });
70
+ const entries = [];
71
+ let missing = 0;
72
+ for (const [path, model] of exports.AUTHENTIK_CONFIG_ENDPOINTS) {
73
+ let list;
74
+ try {
75
+ list = await (0, authentik_1.authentikList)(http, path);
76
+ }
77
+ catch (err) {
78
+ // An authentik without that object type, or a token that cannot read it.
79
+ if (err instanceof vendor_http_1.VendorApiError && [403, 404].includes(err.status)) {
80
+ missing++;
81
+ continue;
82
+ }
83
+ throw err;
84
+ }
85
+ for (const attrs of list)
86
+ entries.push({ model, identifiers: { pk: attrs.pk ?? attrs.pbm_uuid, name: attrs.name, slug: attrs.slug }, attrs });
87
+ }
88
+ return { origin: `authentik ${base.replace(/^https?:\/\//, '')}`, baseUrl: base, entries, complete: missing === 0 };
89
+ }
90
+ // ── translation ─────────────────────────────────────────────────────────────
91
+ const UNITS = { weeks: 604_800_000, days: 86_400_000, hours: 3_600_000, minutes: 60_000, seconds: 1000, milliseconds: 1 };
92
+ /** authentik's timedelta strings: `hours=1,minutes=30`, `seconds=0`, `days=1`. */
93
+ function timedeltaMs(v) {
94
+ if (typeof v === 'number')
95
+ return v;
96
+ const s = (0, record_set_1.str)(v);
97
+ if (!s)
98
+ return undefined;
99
+ let total = 0;
100
+ for (const part of s.split(/[,;\s]+/).filter(Boolean)) {
101
+ const m = /^([a-z]+)=(-?\d+(?:\.\d+)?)$/.exec(part);
102
+ const unit = m ? UNITS[m[1]] : undefined;
103
+ if (!m || unit === undefined)
104
+ return undefined;
105
+ total += Number(m[2]) * unit;
106
+ }
107
+ return total;
108
+ }
109
+ const isRef = (v) => typeof v === 'string' && v.startsWith('@');
110
+ /** A literal string attribute (a tagged reference or an empty value is not one). */
111
+ const lit = (v) => (isRef(v) ? undefined : (0, record_set_1.str)(v));
112
+ const num = (v) => (typeof v === 'number' ? v : typeof v === 'string' && /^\d+$/.test(v) ? Number(v) : undefined);
113
+ /** The `@env:NAME` a tagged value reads, for the report. */
114
+ const envName = (v) => (typeof v === 'string' && v.startsWith('@env:') ? v.slice(5) : undefined);
115
+ const OIDC_SOURCE_TYPES = new Set(['openidconnect', 'okta', 'keycloak', 'authentik', 'entraid_oidc']);
116
+ function translateAuthentikConfig(snap) {
117
+ const b = new translate_kit_1.ConfigBuilder();
118
+ const m = (suffix) => snap.entries.filter((e) => e.model.endsWith(`.${suffix}`));
119
+ const add = (status, area, e, attr, note, atlas) => {
120
+ const name = (0, record_set_1.str)(e.identifiers.name) ?? (0, record_set_1.str)(e.identifiers.slug) ?? (0, record_set_1.str)(e.attrs.name) ?? (0, record_set_1.str)(e.attrs.slug) ?? '?';
121
+ b.report.push({
122
+ status,
123
+ area,
124
+ setting: `${e.model} ${name}${attr ? `.${attr}` : ''}`,
125
+ note,
126
+ ...(atlas ? { atlas } : {}),
127
+ ...(e.file ? { file: e.file, line: e.line } : {}),
128
+ });
129
+ };
130
+ // ── passwords ──
131
+ const policies = m('passwordpolicy');
132
+ policies.forEach((p, i) => {
133
+ if (i > 0) {
134
+ add('differs', 'passwords', p, null, 'Atlas has one password policy: only the first authentik policy was translated; fold the rules of this one into it.');
135
+ return;
136
+ }
137
+ const min = num(p.attrs.length_min);
138
+ if (min !== undefined) {
139
+ b.set('passwordPolicy.minLength', Math.max(min, 6));
140
+ add(min >= 6 ? 'mapped' : 'differs', 'passwords', p, 'length_min', min >= 6 ? `Minimum ${min} characters.` : `authentik allowed ${min} characters; Atlas requires at least 6.`, 'auth_config.passwordPolicy.minLength');
141
+ }
142
+ for (const [attr, key, label] of [
143
+ ['amount_digits', 'requireNumber', 'a digit'],
144
+ ['amount_uppercase', 'requireUppercase', 'an uppercase letter'],
145
+ ['amount_lowercase', 'requireLowercase', 'a lowercase letter'],
146
+ ['amount_symbols', 'requireSymbol', 'a symbol'],
147
+ ]) {
148
+ if ((num(p.attrs[attr]) ?? 0) > 0) {
149
+ b.set(`passwordPolicy.${key}`, true);
150
+ add('mapped', 'passwords', p, attr, `Passwords need ${label}${(num(p.attrs[attr]) ?? 0) > 1 ? ' (Atlas asks for one, not a count)' : ''}.`, `auth_config.passwordPolicy.${key}`);
151
+ }
152
+ }
153
+ if (p.attrs.check_have_i_been_pwned === true)
154
+ add('manual', 'passwords', p, 'check_have_i_been_pwned', 'Turn on breached-password protection in Atlas attack protection (the Have I Been Pwned check does not carry over).');
155
+ if (p.attrs.check_zxcvbn === true)
156
+ add('differs', 'passwords', p, 'check_zxcvbn', 'The zxcvbn strength score has no Atlas setting; Atlas rejects common and breached passwords instead.');
157
+ if ((0, record_set_1.str)(p.attrs.password_field) && p.attrs.password_field !== 'password')
158
+ add('differs', 'passwords', p, 'password_field', 'Policy applied to a custom prompt field; Atlas applies its policy to the password field.');
159
+ });
160
+ // ── sessions ──
161
+ for (const s of m('userloginstage')) {
162
+ const ms = timedeltaMs(s.attrs.session_duration);
163
+ if (ms === 0)
164
+ add('differs', 'sessions', s, 'session_duration', 'authentik ended the session with the browser (seconds=0); Atlas sessions persist until their idle and absolute limits (auth_config.session).');
165
+ else if (ms !== undefined) {
166
+ b.set('session.absoluteMs', (0, translate_kit_1.clampSessionMs)(ms));
167
+ add((0, translate_kit_1.clampSessionMs)(ms) === ms ? 'mapped' : 'differs', 'sessions', s, 'session_duration', 'Session duration becomes the absolute session lifetime.', 'auth_config.session.absoluteMs');
168
+ }
169
+ if (s.attrs.terminate_other_sessions === true)
170
+ add('manual', 'sessions', s, 'terminate_other_sessions', 'Signing in no longer ends the user\'s other sessions: use a session limit or revoke sessions from an Action.');
171
+ if ((0, record_set_1.str)(s.attrs.network_binding) && s.attrs.network_binding !== 'no_binding')
172
+ add('differs', 'sessions', s, 'network_binding', 'Sessions are not bound to the client network; Atlas applies device and risk checks instead.');
173
+ if ((0, record_set_1.str)(s.attrs.geoip_binding) && s.attrs.geoip_binding !== 'no_binding')
174
+ add('differs', 'sessions', s, 'geoip_binding', 'Sessions are not bound to the client location; Atlas applies device and risk checks instead.');
175
+ if (timedeltaMs(s.attrs.remember_me_offset))
176
+ add('differs', 'sessions', s, 'remember_me_offset', 'Atlas has no separate "remember me" lifetime.');
177
+ }
178
+ // ── sign-up, sign-in methods ──
179
+ const flows = m('flow');
180
+ const enrollment = flows.find((f) => f.attrs.designation === 'enrollment');
181
+ if (enrollment) {
182
+ b.set('signUpMode', 'public');
183
+ add('mapped', 'sign-up', enrollment, 'designation', 'An enrollment flow exists: public sign-up.', 'auth_config.signUpMode');
184
+ }
185
+ else if (snap.complete) {
186
+ b.set('signUpMode', 'restricted');
187
+ b.add('mapped', 'sign-up', 'flows (no enrollment flow)', 'No enrollment flow: sign-up is closed (invitations and imports still work).', 'auth_config.signUpMode');
188
+ }
189
+ const recovery = flows.find((f) => f.attrs.designation === 'recovery');
190
+ if (recovery)
191
+ add('mapped', 'sign-in', recovery, 'designation', 'A recovery flow exists: password reset by email is on in Atlas by default.', 'auth_config.strategies.password');
192
+ for (const s of m('identificationstage')) {
193
+ const passwordless = s.attrs.passwordless_flow;
194
+ if (passwordless !== undefined && passwordless !== null && passwordless !== '') {
195
+ b.set('strategies.passkey', true);
196
+ add('mapped', 'sign-in', s, 'passwordless_flow', 'Passwordless (WebAuthn) sign-in becomes passkey sign-in.', 'auth_config.strategies.passkey');
197
+ }
198
+ const fields = (0, record_set_1.strs)(s.attrs.user_fields);
199
+ if (fields.length)
200
+ add('differs', 'sign-in', s, 'user_fields', `Sign-in by ${fields.join(', ')}: Atlas accepts the identifiers the sign-up form collects (email, username, phone); check the instance's sign-in identifiers.`);
201
+ if ((0, record_set_1.strs)(s.attrs.sources).length)
202
+ add('mapped', 'sign-in', s, 'sources', 'The social and SAML sources offered here are translated below.');
203
+ }
204
+ for (const s of m('userwritestage')) {
205
+ if (s.attrs.create_users_as_inactive === true)
206
+ add('differs', 'sign-up', s, 'create_users_as_inactive', 'New users were created inactive until activated by another stage; Atlas holds sign-ups with its email verification and approval settings instead.');
207
+ }
208
+ for (const s of m('emailstage')) {
209
+ add('manual', 'email', s, null, `Connect your own email provider in Atlas (SMTP host ${lit(s.attrs.host) ?? 'from authentik settings'} is not copied) and recreate the template "${lit(s.attrs.template) ?? 'email/…'}" as an Atlas email template.`);
210
+ const exp = num(s.attrs.token_expiry);
211
+ if (exp !== undefined)
212
+ add('differs', 'email', s, 'token_expiry', `Links expired after ${exp} minutes; Atlas uses its own link and code lifetimes.`);
213
+ }
214
+ // ── multi-factor ──
215
+ for (const s of m('authenticatortotpstage')) {
216
+ b.set('mfa.factors.totp', true);
217
+ add('mapped', 'multi-factor', s, null, `Authenticator-app second factor on${num(s.attrs.digits) === 8 || s.attrs.digits === '8' ? ' (8-digit devices keep their shape when imported)' : ''}. Enrolled devices move with the database export (seeds included).`, 'auth_config.mfa.factors.totp');
218
+ }
219
+ for (const s of m('authenticatorwebauthnstage')) {
220
+ b.set('mfa.factors.passkey', true);
221
+ add('mapped', 'multi-factor', s, null, 'WebAuthn second factor on. Devices move only with the database export and the same RP id (your authentik host).', 'auth_config.mfa.factors.passkey');
222
+ if (lit(s.attrs.authenticator_attachment))
223
+ add('differs', 'multi-factor', s, 'authenticator_attachment', 'Atlas lets the user pick a platform or roaming authenticator.');
224
+ }
225
+ for (const s of m('authenticatorsmsstage')) {
226
+ b.set('mfa.factors.sms', true);
227
+ add('mapped', 'multi-factor', s, null, 'SMS second factor on.', 'auth_config.mfa.factors.sms');
228
+ add('manual', 'multi-factor', s, 'provider', `Connect your own SMS provider (${lit(s.attrs.provider) ?? 'twilio / generic'}); its credentials are not copied.`);
229
+ }
230
+ for (const s of m('authenticatorstaticstage')) {
231
+ add('differs', 'multi-factor', s, null, 'Static recovery tokens move as backup codes with the database export; Atlas generates its own codes for new enrolments.', 'auth_config.mfa');
232
+ }
233
+ for (const s of m('authenticatorvalidatestage')) {
234
+ const action = lit(s.attrs.not_configured_action);
235
+ add('differs', 'multi-factor', s, 'not_configured_action', action === 'deny' ? 'Users without a factor were refused: turn on "require a second factor" in the Atlas MFA settings.' : action === 'configure' ? 'Users without a factor had to enrol one: turn on "require a second factor" in the Atlas MFA settings.' : 'Users without a factor skipped the check; Atlas asks for a second factor only from users who enrolled one unless you require it.', 'auth_config.mfa');
236
+ }
237
+ // ── social and SAML sources ──
238
+ for (const s of m('oauthsource')) {
239
+ if (s.attrs.enabled === false)
240
+ continue;
241
+ const slug = lit(s.identifiers.slug) ?? lit(s.attrs.slug) ?? '?';
242
+ const type = lit(s.attrs.provider_type)?.toLowerCase() ?? '';
243
+ const key = OIDC_SOURCE_TYPES.has(type) ? null : (0, translate_kit_1.socialKey)(type);
244
+ const clientId = lit(s.attrs.consumer_key);
245
+ if (key) {
246
+ b.socialProvider({ atlasKey: key, vendorName: slug, area: 'sources', setting: `${s.model} ${slug}.provider_type`, clientId });
247
+ const last = b.report[b.report.length - 1];
248
+ if (s.file)
249
+ Object.assign(last, { file: s.file, line: s.line });
250
+ continue;
251
+ }
252
+ if (OIDC_SOURCE_TYPES.has(type) || type === 'oauth' || type === '') {
253
+ const providerKey = slug.toLowerCase().replace(/[^a-z0-9]+/g, '_').replace(/^_+|_+$/g, '').slice(0, 48) || 'oidc';
254
+ const upper = providerKey.toUpperCase();
255
+ const doc = {
256
+ provider_key: providerKey,
257
+ display_name: (0, record_set_1.str)(s.attrs.name) ?? slug,
258
+ protocol: 'oidc',
259
+ client_id: clientId ?? b.placeholder(`${upper}_CLIENT_ID`, `${slug} client id`),
260
+ client_secret: b.placeholder(`${upper}_CLIENT_SECRET`, `${slug} client secret`),
261
+ enabled: true,
262
+ allow_sign_in: true,
263
+ allow_sign_up: s.attrs.enrollment_flow !== null,
264
+ };
265
+ const wellKnown = lit(s.attrs.oidc_well_known_url);
266
+ if (wellKnown)
267
+ doc.discovery_url = wellKnown;
268
+ if (lit(s.attrs.authorization_url))
269
+ doc.authorization_url = lit(s.attrs.authorization_url);
270
+ if (lit(s.attrs.access_token_url))
271
+ doc.token_url = lit(s.attrs.access_token_url);
272
+ if (lit(s.attrs.profile_url))
273
+ doc.userinfo_url = lit(s.attrs.profile_url);
274
+ b.push('custom_oauth_providers', doc);
275
+ b.providers[slug] = providerKey;
276
+ add('differs', 'sources', s, 'provider_type', `Source "${slug}" (${type || 'oauth'}) becomes the custom OIDC provider "${providerKey}". Add Atlas's redirect URI to the upstream app and set ${upper}_CLIENT_SECRET. Imported identities keep provider "${slug}"; map it with provider_map ${slug}=${providerKey}.`, `custom_oauth_providers ${providerKey}`);
277
+ continue;
278
+ }
279
+ add('manual', 'sources', s, 'provider_type', `"${type}" is not a built-in Atlas provider: add it as a custom OAuth provider with the same upstream app.`, 'custom_oauth_providers');
280
+ }
281
+ for (const s of m('samlsource')) {
282
+ add('mapped', 'sources', s, null, 'SAML source: moves with the data export as an SSO connection. Give the IdP Atlas\'s ACS URL and entity id (they replace authentik\'s) before turning it on.', 'sso_connections');
283
+ }
284
+ for (const s of m('ldapsource')) {
285
+ add('manual', 'sources', s, null, 'LDAP source: authentik checks these passwords against your directory. Connect the directory to Atlas (SCIM or an LDAP-backed connection), or let those users move by lazy migration (the authentik preset signs them in through authentik first).');
286
+ }
287
+ // ── applications, providers, the bridge ──
288
+ const providers = m('oauth2provider');
289
+ const apps = m('application');
290
+ const redirects = new Set();
291
+ let wildcard = false;
292
+ for (const p of providers) {
293
+ const list = Array.isArray(p.attrs.redirect_uris) ? p.attrs.redirect_uris : typeof p.attrs.redirect_uris === 'string' ? p.attrs.redirect_uris.split('\n').map((url) => ({ matching_mode: 'strict', url })) : [];
294
+ for (const r of list) {
295
+ const url = (0, record_set_1.isObj)(r) ? lit(r.url) : lit(r);
296
+ const regex = (0, record_set_1.isObj)(r) && r.matching_mode === 'regex';
297
+ if (!url)
298
+ continue;
299
+ if (regex || url.includes('*'))
300
+ wildcard = true;
301
+ else
302
+ redirects.add(url);
303
+ }
304
+ if (p.attrs.signing_key === null || p.attrs.signing_key === '') {
305
+ add('manual', 'providers', p, 'signing_key', 'No signing key: authentik signs tokens with the client secret (HS256), which the session bridge cannot verify. Select a certificate on the provider before the cutover.');
306
+ }
307
+ }
308
+ for (const url of redirects)
309
+ b.push('redirect_urls', { url });
310
+ if (redirects.size || wildcard) {
311
+ const p = providers[0];
312
+ add(wildcard ? 'differs' : 'mapped', 'providers', p, 'redirect_uris', `${redirects.size} redirect URI(s) become redirect URLs${wildcard ? '; regex and wildcard URIs are not translated (Atlas redirect URLs are exact: list each one)' : ''}.`, 'redirect_urls');
313
+ }
314
+ for (const a of apps) {
315
+ add('manual', 'applications', a, null, 'Application: the policy bindings that decide who may open it become Atlas roles or organization membership checks in your app; the launch URL and icon are not copied.');
316
+ }
317
+ for (const p of m('samlprovider'))
318
+ add('manual', 'providers', p, null, 'SAML provider (authentik as the identity provider): configure Atlas as the SAML IdP for that service provider, or keep authentik for it.');
319
+ for (const br of m('brand')) {
320
+ add('manual', 'branding', br, 'branding_title', `Brand "${lit(br.attrs.branding_title) ?? lit(br.attrs.domain) ?? ''}": recreate the logo, title and colours in Atlas branding.`);
321
+ }
322
+ // Bridge and lazy presets, when the snapshot tells enough.
323
+ const result = {};
324
+ // The application of the one provider: linked by primary key (API), or the only application (blueprint).
325
+ const linked = providers.length === 1
326
+ ? (apps.find((a) => a.attrs.provider !== undefined && !isRef(a.attrs.provider) && String(a.attrs.provider) === String(providers[0].identifiers.pk)) ?? (apps.length === 1 ? apps[0] : undefined))
327
+ : undefined;
328
+ const appSlug = lit(linked?.attrs.slug ?? linked?.identifiers.slug);
329
+ const only = providers.length === 1 && appSlug ? { p: providers[0], slug: appSlug } : undefined;
330
+ if (snap.baseUrl && only) {
331
+ const clientId = lit(only.p.attrs.client_id);
332
+ result.bridge = { preset: 'authentik', vars: { issuer: `${snap.baseUrl}/application/o/${only.slug}`, ...(clientId ? { client_id: clientId } : {}) } };
333
+ add('mapped', 'bridge', only.p, 'client_id', `The bridge accepts tokens of "${only.slug}" (issuer ${snap.baseUrl}/application/o/${only.slug}/).`, 'migrations authentik bridge');
334
+ }
335
+ else if (providers.length > 1) {
336
+ add('differs', 'bridge', providers[0], null, `${providers.length} OAuth2 providers: the bridge accepts one provider's tokens at a time; pass --set authentik-issuer and --set authentik-client-id for the one your app uses.`);
337
+ }
338
+ const subModes = [...new Set(providers.map((p) => lit(p.attrs.sub_mode) ?? 'hashed_user_id'))];
339
+ for (const mode of subModes) {
340
+ if (mode === 'user_uuid' || mode === 'user_upn')
341
+ add('differs', 'providers', providers.find((p) => (lit(p.attrs.sub_mode) ?? 'hashed_user_id') === mode), 'sub_mode', `Subject mode ${mode}: export with --set authentik-sub-mode=${mode}; lazy migration cannot read it from a session, so use the database export.`);
342
+ }
343
+ if (subModes.length > 1)
344
+ add('differs', 'providers', providers[0], 'sub_mode', `Providers use different subject modes (${subModes.join(', ')}); the export keys users by one of them.`);
345
+ const authFlow = flows.find((f) => f.attrs.designation === 'authentication');
346
+ if (snap.baseUrl) {
347
+ const subMode = subModes.length === 1 && ['hashed_user_id', 'user_id', 'user_username', 'user_email'].includes(subModes[0]) ? subModes[0] : undefined;
348
+ result.lazy = { preset: 'authentik', config: { base_url: snap.baseUrl, ...(lit(authFlow?.attrs.slug ?? authFlow?.identifiers.slug) ? { flow_slug: lit(authFlow?.attrs.slug ?? authFlow?.identifiers.slug) } : {}), ...(subMode ? { sub_mode: subMode } : {}) } };
349
+ }
350
+ // Env names a blueprint read, for the operator.
351
+ for (const e of snap.entries)
352
+ for (const [k, v] of Object.entries(e.attrs))
353
+ if (envName(v) && /secret|password|token/i.test(k))
354
+ add('manual', 'secrets', e, k, `Read from the environment (${envName(v)}) in the blueprint: set the Atlas value separately, secrets are never copied.`);
355
+ return b.result(snap.origin, result);
356
+ }
357
+ //# sourceMappingURL=authentik-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authentik-config.js","sourceRoot":"","sources":["../../../src/migrate/export/authentik-config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,110 @@
1
+ import type { PasswordHash } from '@atlasauth/migrate';
2
+ import { type Tables } from './frameworks/tables';
3
+ import { RecordSet, type Obj } from './record-set';
4
+ import { VendorHttp } from './vendor-http';
5
+ /**
6
+ * `atlas migrate export authentik` — a self-hosted authentik (goauthentik)
7
+ * instance onto the canonical bundle models. Two ways in:
8
+ *
9
+ * DATABASE DUMP (the full export): authentik's API never returns password
10
+ * hashes, TOTP seeds, recovery codes or WebAuthn public keys, so the owner
11
+ * dumps authentik's own PostgreSQL tables (one `<table>.csv|json|ndjson` per
12
+ * table, `psql \copy`) and the exporter reads them on this machine:
13
+ *
14
+ * authentik_core_user → user (Django password digest verbatim,
15
+ * `!…` unusable passwords dropped)
16
+ * authentik_install_id → the hashed `sub` (see below); never
17
+ * written to the bundle (old installs
18
+ * use the SECRET_KEY as the install id)
19
+ * authentik_core_group (+ parentage, user_groups / user_ak_groups)
20
+ * → app roles (default) or organizations;
21
+ * superuser groups → the `admin` role
22
+ * authentik_rbac_role (+ user_roles, group_roles)
23
+ * → app roles `rbac:<name>`
24
+ * authentik_core_usersourceconnection (+ oauth / saml subtables, sources)
25
+ * → identities; SAML sources → SSO connections
26
+ * authentik_core_token → API keys (sha256 of the plaintext key,
27
+ * so `api` and `app_password` tokens keep working)
28
+ * authentik_stages_authenticator_* → TOTP (hex seed → base32, 6/8 digits,
29
+ * its step), static recovery tokens,
30
+ * WebAuthn passkeys, SMS / email factors
31
+ *
32
+ * API (no hashes): `/api/v3` with an API token — users, groups, roles,
33
+ * source links, API keys (`view_key`). Passwords then move by lazy
34
+ * migration (the `authentik` preset) and factors are re-enrolled.
35
+ *
36
+ * THE USER ID. Atlas keys imported users by the subject the vendor's tokens
37
+ * carry. authentik's OAuth2/OIDC providers choose `sub` per provider
38
+ * (`sub_mode`, core: authentik/providers/oauth2/id_token.py `_resolve_sub`):
39
+ * hashed_user_id (default) sha256(f"{pk}-{install_id}") hex — `User.uid`
40
+ * user_id the integer pk user_uuid the user's uuid
41
+ * user_username / user_email user_upn attributes.upn, else uid
42
+ * The export uses one mode (`--set authentik-sub-mode`, or the one every
43
+ * provider in the dump uses) and keeps the other ids in private metadata.
44
+ */
45
+ export type AuthentikSubMode = 'hashed_user_id' | 'user_id' | 'user_uuid' | 'user_username' | 'user_email' | 'user_upn';
46
+ export declare const AUTHENTIK_SUB_MODES: readonly AuthentikSubMode[];
47
+ export interface AuthentikExportOptions {
48
+ /** authentik's tables (a dump directory read with `readDumpDir`): the full export. */
49
+ tables?: Tables;
50
+ /** The authentik URL (`https://auth.example.com`): the API export, and the SAML ACS URLs. */
51
+ baseUrl?: string;
52
+ /** An authentik API token (Directory → Tokens, intent API) for the API export. */
53
+ token?: string;
54
+ /** Which `sub` the apps' tokens carry; default: the mode the providers use, else hashed_user_id. */
55
+ subMode?: AuthentikSubMode;
56
+ /** The install id for `hashed_user_id` when the dump has no `authentik_install_id` table. */
57
+ installId?: string;
58
+ groupsAs?: 'roles' | 'organizations' | 'skip';
59
+ /** The WebAuthn RP id for passkeys registered before authentik stored one per device. */
60
+ rpId?: string;
61
+ /** authentik has no verified-email flag: treat every address as verified. Default false. */
62
+ trustEmails?: boolean;
63
+ /** Carry the stored upstream OAuth access tokens of social links. Default false. */
64
+ oauthTokens?: boolean;
65
+ now?: Date;
66
+ fetchImpl?: typeof fetch;
67
+ sleep?: (ms: number) => Promise<void>;
68
+ onProgress?: (message: string) => void;
69
+ }
70
+ /** One user as the dump or the API has it (the API never has `password`). */
71
+ interface AkUser {
72
+ pk: string;
73
+ uuid?: string;
74
+ /** `User.uid` when the API reported it. */
75
+ uid?: string;
76
+ username?: string;
77
+ email?: string;
78
+ name?: string;
79
+ password?: string;
80
+ isActive: boolean;
81
+ type?: string;
82
+ path?: string;
83
+ attributes: Obj;
84
+ lastLogin?: string | number;
85
+ dateJoined?: string | number;
86
+ }
87
+ export declare function exportAuthentik(opts: AuthentikExportOptions): Promise<RecordSet>;
88
+ /** `User.uid` (authentik/core/models.py): sha256 of "<pk>-<install id>", hex. */
89
+ export declare function authentikUid(pk: string, installId: string): string;
90
+ /** The id a user's tokens carry as `sub` under a provider's sub_mode; undefined when the user has none. */
91
+ export declare function authentikSubject(u: AkUser, mode: AuthentikSubMode, installId?: string): string | undefined;
92
+ /**
93
+ * A Django password digest (authentik uses Django's default hashers) as a
94
+ * bundle password, in a form Atlas's registry verifies:
95
+ * pbkdf2_sha256$… / pbkdf2_sha1$… → pbkdf2_django (verbatim)
96
+ * bcrypt_sha256$$2b$… → bcrypt_sha256_django (verbatim)
97
+ * argon2$argon2id$v=19$… → argon2, the argon2-cffi PHC string
98
+ * (a version-less hash is Argon2 v1.0: `v=16`)
99
+ * bcrypt$$2b$… → bcrypt, the plain bcrypt digest
100
+ * scrypt$<n>$<salt>$<r>$<p>$<hash> → scrypt with its parameters (64-byte key)
101
+ * Null for an unusable (`!…`) or unknown digest.
102
+ */
103
+ export declare function djangoPassword(digest: string | undefined): PasswordHash | null;
104
+ /** RFC 4648 base32, unpadded. */
105
+ export declare function base32(bytes: Buffer): string;
106
+ export declare function exportAuthentikDump(tables: Tables, opts?: Omit<AuthentikExportOptions, 'tables'>): RecordSet;
107
+ /** Every page of an authentik list endpoint (`{ pagination: { next }, results }`, next = 0 on the last page). */
108
+ export declare function authentikList(http: VendorHttp, path: string): Promise<Obj[]>;
109
+ export declare function exportAuthentikApi(opts: AuthentikExportOptions): Promise<RecordSet>;
110
+ export {};