@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.
- package/CHANGELOG.md +6 -0
- package/dist/args.d.ts +15 -0
- package/dist/args.js +7 -0
- package/dist/args.js.map +1 -1
- package/dist/commands/config.js +71 -6
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/dev.d.ts +8 -0
- package/dist/commands/dev.js +84 -0
- package/dist/commands/dev.js.map +1 -0
- package/dist/commands/pages.d.ts +14 -0
- package/dist/commands/pages.js +113 -0
- package/dist/commands/pages.js.map +1 -0
- package/dist/context.d.ts +1 -1
- package/dist/help.d.ts +1 -1
- package/dist/help.js +58 -2
- package/dist/help.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/migrate/appwrite/plugin.d.ts +2 -0
- package/dist/migrate/appwrite/plugin.js +103 -0
- package/dist/migrate/appwrite/plugin.js.map +1 -0
- package/dist/migrate/authentik/plugin.d.ts +2 -0
- package/dist/migrate/authentik/plugin.js +135 -0
- package/dist/migrate/authentik/plugin.js.map +1 -0
- package/dist/migrate/azure-ad-b2c/plugin.d.ts +8 -0
- package/dist/migrate/azure-ad-b2c/plugin.js +165 -0
- package/dist/migrate/azure-ad-b2c/plugin.js.map +1 -0
- package/dist/migrate/cognito/plugin.d.ts +5 -0
- package/dist/migrate/cognito/plugin.js +170 -0
- package/dist/migrate/cognito/plugin.js.map +1 -0
- package/dist/migrate/corbado/plugin.d.ts +2 -0
- package/dist/migrate/corbado/plugin.js +63 -0
- package/dist/migrate/corbado/plugin.js.map +1 -0
- package/dist/migrate/entra-external-id/plugin.d.ts +8 -0
- package/dist/migrate/entra-external-id/plugin.js +12 -0
- package/dist/migrate/entra-external-id/plugin.js.map +1 -0
- package/dist/migrate/export/appwrite-config.d.ts +28 -0
- package/dist/migrate/export/appwrite-config.js +170 -0
- package/dist/migrate/export/appwrite-config.js.map +1 -0
- package/dist/migrate/export/appwrite.d.ts +51 -0
- package/dist/migrate/export/appwrite.js +288 -0
- package/dist/migrate/export/appwrite.js.map +1 -0
- package/dist/migrate/export/authentik-config.d.ts +45 -0
- package/dist/migrate/export/authentik-config.js +357 -0
- package/dist/migrate/export/authentik-config.js.map +1 -0
- package/dist/migrate/export/authentik.d.ts +110 -0
- package/dist/migrate/export/authentik.js +838 -0
- package/dist/migrate/export/authentik.js.map +1 -0
- package/dist/migrate/export/azure-config.d.ts +58 -0
- package/dist/migrate/export/azure-config.js +344 -0
- package/dist/migrate/export/azure-config.js.map +1 -0
- package/dist/migrate/export/azure.d.ts +85 -0
- package/dist/migrate/export/azure.js +373 -0
- package/dist/migrate/export/azure.js.map +1 -0
- package/dist/migrate/export/cognito-config.d.ts +25 -0
- package/dist/migrate/export/cognito-config.js +273 -0
- package/dist/migrate/export/cognito-config.js.map +1 -0
- package/dist/migrate/export/cognito.d.ts +103 -0
- package/dist/migrate/export/cognito.js +441 -0
- package/dist/migrate/export/cognito.js.map +1 -0
- package/dist/migrate/export/corbado-config.d.ts +20 -0
- package/dist/migrate/export/corbado-config.js +63 -0
- package/dist/migrate/export/corbado-config.js.map +1 -0
- package/dist/migrate/export/corbado.d.ts +37 -0
- package/dist/migrate/export/corbado.js +132 -0
- package/dist/migrate/export/corbado.js.map +1 -0
- package/dist/migrate/export/firebase-config.d.ts +24 -0
- package/dist/migrate/export/firebase-config.js +215 -0
- package/dist/migrate/export/firebase-config.js.map +1 -0
- package/dist/migrate/export/firebase.d.ts +102 -0
- package/dist/migrate/export/firebase.js +464 -0
- package/dist/migrate/export/firebase.js.map +1 -0
- package/dist/migrate/export/frontegg-config.d.ts +29 -0
- package/dist/migrate/export/frontegg-config.js +238 -0
- package/dist/migrate/export/frontegg-config.js.map +1 -0
- package/dist/migrate/export/frontegg.d.ts +67 -0
- package/dist/migrate/export/frontegg.js +410 -0
- package/dist/migrate/export/frontegg.js.map +1 -0
- package/dist/migrate/export/fusionauth-config.d.ts +26 -0
- package/dist/migrate/export/fusionauth-config.js +226 -0
- package/dist/migrate/export/fusionauth-config.js.map +1 -0
- package/dist/migrate/export/fusionauth.d.ts +99 -0
- package/dist/migrate/export/fusionauth.js +642 -0
- package/dist/migrate/export/fusionauth.js.map +1 -0
- package/dist/migrate/export/hanko-config.d.ts +27 -0
- package/dist/migrate/export/hanko-config.js +265 -0
- package/dist/migrate/export/hanko-config.js.map +1 -0
- package/dist/migrate/export/hanko.d.ts +52 -0
- package/dist/migrate/export/hanko.js +605 -0
- package/dist/migrate/export/hanko.js.map +1 -0
- package/dist/migrate/export/keycloak-config.d.ts +19 -0
- package/dist/migrate/export/keycloak-config.js +219 -0
- package/dist/migrate/export/keycloak-config.js.map +1 -0
- package/dist/migrate/export/keycloak.d.ts +155 -0
- package/dist/migrate/export/keycloak.js +878 -0
- package/dist/migrate/export/keycloak.js.map +1 -0
- package/dist/migrate/export/ldap.d.ts +53 -0
- package/dist/migrate/export/ldap.js +277 -0
- package/dist/migrate/export/ldap.js.map +1 -0
- package/dist/migrate/export/logto-config.d.ts +27 -0
- package/dist/migrate/export/logto-config.js +264 -0
- package/dist/migrate/export/logto-config.js.map +1 -0
- package/dist/migrate/export/logto.d.ts +150 -0
- package/dist/migrate/export/logto.js +809 -0
- package/dist/migrate/export/logto.js.map +1 -0
- package/dist/migrate/export/magic-config.d.ts +14 -0
- package/dist/migrate/export/magic-config.js +28 -0
- package/dist/migrate/export/magic-config.js.map +1 -0
- package/dist/migrate/export/magic.d.ts +31 -0
- package/dist/migrate/export/magic.js +93 -0
- package/dist/migrate/export/magic.js.map +1 -0
- package/dist/migrate/export/mini-yaml.d.ts +19 -0
- package/dist/migrate/export/mini-yaml.js +581 -0
- package/dist/migrate/export/mini-yaml.js.map +1 -0
- package/dist/migrate/export/nhost-config.d.ts +26 -0
- package/dist/migrate/export/nhost-config.js +360 -0
- package/dist/migrate/export/nhost-config.js.map +1 -0
- package/dist/migrate/export/nhost.d.ts +64 -0
- package/dist/migrate/export/nhost.js +304 -0
- package/dist/migrate/export/nhost.js.map +1 -0
- package/dist/migrate/export/onelogin.d.ts +22 -0
- package/dist/migrate/export/onelogin.js +123 -0
- package/dist/migrate/export/onelogin.js.map +1 -0
- package/dist/migrate/export/ory-config.d.ts +58 -0
- package/dist/migrate/export/ory-config.js +451 -0
- package/dist/migrate/export/ory-config.js.map +1 -0
- package/dist/migrate/export/ory.d.ts +81 -0
- package/dist/migrate/export/ory.js +555 -0
- package/dist/migrate/export/ory.js.map +1 -0
- package/dist/migrate/export/password-detect.d.ts +29 -0
- package/dist/migrate/export/password-detect.js +81 -0
- package/dist/migrate/export/password-detect.js.map +1 -0
- package/dist/migrate/export/pingone.d.ts +36 -0
- package/dist/migrate/export/pingone.js +218 -0
- package/dist/migrate/export/pingone.js.map +1 -0
- package/dist/migrate/export/pocketbase-config.d.ts +28 -0
- package/dist/migrate/export/pocketbase-config.js +180 -0
- package/dist/migrate/export/pocketbase-config.js.map +1 -0
- package/dist/migrate/export/pocketbase.d.ts +52 -0
- package/dist/migrate/export/pocketbase.js +243 -0
- package/dist/migrate/export/pocketbase.js.map +1 -0
- package/dist/migrate/export/project-files.d.ts +15 -0
- package/dist/migrate/export/project-files.js +43 -0
- package/dist/migrate/export/project-files.js.map +1 -0
- package/dist/migrate/export/propelauth-config.d.ts +18 -0
- package/dist/migrate/export/propelauth-config.js +58 -0
- package/dist/migrate/export/propelauth-config.js.map +1 -0
- package/dist/migrate/export/propelauth-harness.test-helper.d.ts +62 -0
- package/dist/migrate/export/propelauth-harness.test-helper.js +109 -0
- package/dist/migrate/export/propelauth-harness.test-helper.js.map +1 -0
- package/dist/migrate/export/propelauth.d.ts +48 -0
- package/dist/migrate/export/propelauth.js +255 -0
- package/dist/migrate/export/propelauth.js.map +1 -0
- package/dist/migrate/export/source-lines.d.ts +17 -0
- package/dist/migrate/export/source-lines.js +43 -0
- package/dist/migrate/export/source-lines.js.map +1 -0
- package/dist/migrate/export/sso-metadata.d.ts +47 -0
- package/dist/migrate/export/sso-metadata.js +180 -0
- package/dist/migrate/export/sso-metadata.js.map +1 -0
- package/dist/migrate/export/stytch-config.d.ts +22 -0
- package/dist/migrate/export/stytch-config.js +102 -0
- package/dist/migrate/export/stytch-config.js.map +1 -0
- package/dist/migrate/export/stytch.d.ts +68 -0
- package/dist/migrate/export/stytch.js +510 -0
- package/dist/migrate/export/stytch.js.map +1 -0
- package/dist/migrate/export/supabase-config.d.ts +48 -0
- package/dist/migrate/export/supabase-config.js +408 -0
- package/dist/migrate/export/supabase-config.js.map +1 -0
- package/dist/migrate/export/supabase.d.ts +86 -0
- package/dist/migrate/export/supabase.js +524 -0
- package/dist/migrate/export/supabase.js.map +1 -0
- package/dist/migrate/export/supertokens-config.d.ts +20 -0
- package/dist/migrate/export/supertokens-config.js +150 -0
- package/dist/migrate/export/supertokens-config.js.map +1 -0
- package/dist/migrate/export/supertokens.d.ts +125 -0
- package/dist/migrate/export/supertokens.js +464 -0
- package/dist/migrate/export/supertokens.js.map +1 -0
- package/dist/migrate/export/table.d.ts +35 -0
- package/dist/migrate/export/table.js +248 -0
- package/dist/migrate/export/table.js.map +1 -0
- package/dist/migrate/export/userfront-config.d.ts +15 -0
- package/dist/migrate/export/userfront-config.js +49 -0
- package/dist/migrate/export/userfront-config.js.map +1 -0
- package/dist/migrate/export/userfront.d.ts +38 -0
- package/dist/migrate/export/userfront.js +189 -0
- package/dist/migrate/export/userfront.js.map +1 -0
- package/dist/migrate/export/workos-config.d.ts +23 -0
- package/dist/migrate/export/workos-config.js +125 -0
- package/dist/migrate/export/workos-config.js.map +1 -0
- package/dist/migrate/export/workos.d.ts +46 -0
- package/dist/migrate/export/workos.js +272 -0
- package/dist/migrate/export/workos.js.map +1 -0
- package/dist/migrate/export/zitadel-config.d.ts +37 -0
- package/dist/migrate/export/zitadel-config.js +279 -0
- package/dist/migrate/export/zitadel-config.js.map +1 -0
- package/dist/migrate/export/zitadel.d.ts +82 -0
- package/dist/migrate/export/zitadel.js +447 -0
- package/dist/migrate/export/zitadel.js.map +1 -0
- package/dist/migrate/firebase/plugin.d.ts +2 -0
- package/dist/migrate/firebase/plugin.js +152 -0
- package/dist/migrate/firebase/plugin.js.map +1 -0
- package/dist/migrate/framework/builtins.js +35 -6
- package/dist/migrate/framework/builtins.js.map +1 -1
- package/dist/migrate/framework/orchestrator.js +3 -2
- package/dist/migrate/framework/orchestrator.js.map +1 -1
- package/dist/migrate/framework/plugin.d.ts +2 -0
- package/dist/migrate/frontegg/plugin.d.ts +2 -0
- package/dist/migrate/frontegg/plugin.js +78 -0
- package/dist/migrate/frontegg/plugin.js.map +1 -0
- package/dist/migrate/fusionauth/plugin.d.ts +2 -0
- package/dist/migrate/fusionauth/plugin.js +109 -0
- package/dist/migrate/fusionauth/plugin.js.map +1 -0
- package/dist/migrate/hanko/plugin.d.ts +2 -0
- package/dist/migrate/hanko/plugin.js +100 -0
- package/dist/migrate/hanko/plugin.js.map +1 -0
- package/dist/migrate/keycloak/plugin.d.ts +2 -0
- package/dist/migrate/keycloak/plugin.js +148 -0
- package/dist/migrate/keycloak/plugin.js.map +1 -0
- package/dist/migrate/ldap/plugin.d.ts +2 -0
- package/dist/migrate/ldap/plugin.js +73 -0
- package/dist/migrate/ldap/plugin.js.map +1 -0
- package/dist/migrate/logto/plugin.d.ts +2 -0
- package/dist/migrate/logto/plugin.js +131 -0
- package/dist/migrate/logto/plugin.js.map +1 -0
- package/dist/migrate/magic/plugin.d.ts +2 -0
- package/dist/migrate/magic/plugin.js +56 -0
- package/dist/migrate/magic/plugin.js.map +1 -0
- package/dist/migrate/nhost/plugin.d.ts +2 -0
- package/dist/migrate/nhost/plugin.js +115 -0
- package/dist/migrate/nhost/plugin.js.map +1 -0
- package/dist/migrate/oidc/plugin.d.ts +2 -0
- package/dist/migrate/oidc/plugin.js +73 -0
- package/dist/migrate/oidc/plugin.js.map +1 -0
- package/dist/migrate/onelogin/plugin.d.ts +2 -0
- package/dist/migrate/onelogin/plugin.js +61 -0
- package/dist/migrate/onelogin/plugin.js.map +1 -0
- package/dist/migrate/ory/plugin.d.ts +2 -0
- package/dist/migrate/ory/plugin.js +186 -0
- package/dist/migrate/ory/plugin.js.map +1 -0
- package/dist/migrate/ping-identity/plugin.d.ts +2 -0
- package/dist/migrate/ping-identity/plugin.js +100 -0
- package/dist/migrate/ping-identity/plugin.js.map +1 -0
- package/dist/migrate/pocketbase/plugin.d.ts +2 -0
- package/dist/migrate/pocketbase/plugin.js +99 -0
- package/dist/migrate/pocketbase/plugin.js.map +1 -0
- package/dist/migrate/propelauth/plugin.d.ts +2 -0
- package/dist/migrate/propelauth/plugin.js +65 -0
- package/dist/migrate/propelauth/plugin.js.map +1 -0
- package/dist/migrate/saml/plugin.d.ts +2 -0
- package/dist/migrate/saml/plugin.js +79 -0
- package/dist/migrate/saml/plugin.js.map +1 -0
- package/dist/migrate/stytch/plugin.d.ts +2 -0
- package/dist/migrate/stytch/plugin.js +97 -0
- package/dist/migrate/stytch/plugin.js.map +1 -0
- package/dist/migrate/supabase/plugin.d.ts +2 -0
- package/dist/migrate/supabase/plugin.js +149 -0
- package/dist/migrate/supabase/plugin.js.map +1 -0
- package/dist/migrate/supertokens/plugin.d.ts +2 -0
- package/dist/migrate/supertokens/plugin.js +114 -0
- package/dist/migrate/supertokens/plugin.js.map +1 -0
- package/dist/migrate/user-table/plugin.d.ts +2 -0
- package/dist/migrate/user-table/plugin.js +62 -0
- package/dist/migrate/user-table/plugin.js.map +1 -0
- package/dist/migrate/userfront/plugin.d.ts +2 -0
- package/dist/migrate/userfront/plugin.js +60 -0
- package/dist/migrate/userfront/plugin.js.map +1 -0
- package/dist/migrate/workos/plugin.d.ts +2 -0
- package/dist/migrate/workos/plugin.js +81 -0
- package/dist/migrate/workos/plugin.js.map +1 -0
- package/dist/migrate/zitadel/plugin.d.ts +2 -0
- package/dist/migrate/zitadel/plugin.js +114 -0
- package/dist/migrate/zitadel/plugin.js.map +1 -0
- package/dist/run.js +4 -0
- package/dist/run.js.map +1 -1
- package/package.json +6 -5
|
@@ -0,0 +1,410 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FRONTEGG_REGIONS = void 0;
|
|
4
|
+
exports.fronteggApiRoot = fronteggApiRoot;
|
|
5
|
+
exports.fronteggApi = fronteggApi;
|
|
6
|
+
exports.listOf = listOf;
|
|
7
|
+
exports.optional = optional;
|
|
8
|
+
exports.metadataOf = metadataOf;
|
|
9
|
+
exports.exportFrontegg = exportFrontegg;
|
|
10
|
+
exports.mapFronteggUser = mapFronteggUser;
|
|
11
|
+
exports.mapSsoConfig = mapSsoConfig;
|
|
12
|
+
const record_set_1 = require("./record-set");
|
|
13
|
+
const translate_kit_1 = require("./translate-kit");
|
|
14
|
+
const vendor_http_1 = require("./vendor-http");
|
|
15
|
+
/**
|
|
16
|
+
* `atlas migrate export frontegg` — a Frontegg environment onto the canonical
|
|
17
|
+
* bundle models, read with the environment's client id and API key on this
|
|
18
|
+
* machine (`POST /auth/vendor` → a management token).
|
|
19
|
+
*
|
|
20
|
+
* - users (email, verified flag, phone, name, picture, metadata and
|
|
21
|
+
* vendorMetadata, usernames, locked / disabled state) with each account
|
|
22
|
+
* (tenant) membership and its roles;
|
|
23
|
+
* - accounts (tenants) → organizations (verified SSO domains included), roles
|
|
24
|
+
* and their permissions, user groups (kept on the user, their roles folded
|
|
25
|
+
* into the member's roles), invitations, and each account's SAML / OIDC
|
|
26
|
+
* SSO configuration;
|
|
27
|
+
* - password hashes: Frontegg never returns them (its API and its docs only
|
|
28
|
+
* IMPORT bcrypt / scrypt / firebase hashes). Turn on the `frontegg`
|
|
29
|
+
* lazy-migration preset: Atlas checks each password against Frontegg on
|
|
30
|
+
* the user's first sign-in.
|
|
31
|
+
*
|
|
32
|
+
* Authenticator-app and SMS second factors, passkeys, social-login provider
|
|
33
|
+
* user ids and API token secrets are not exportable: they are reported as left
|
|
34
|
+
* out with what to do instead.
|
|
35
|
+
*/
|
|
36
|
+
exports.FRONTEGG_REGIONS = {
|
|
37
|
+
eu: 'https://api.frontegg.com',
|
|
38
|
+
us: 'https://api.us.frontegg.com',
|
|
39
|
+
ca: 'https://api.ca.frontegg.com',
|
|
40
|
+
au: 'https://api.au.frontegg.com',
|
|
41
|
+
};
|
|
42
|
+
const PAGE = 200;
|
|
43
|
+
/** The API root for a region name (or an explicit override). */
|
|
44
|
+
function fronteggApiRoot(region, baseUrl) {
|
|
45
|
+
if (baseUrl)
|
|
46
|
+
return baseUrl.replace(/\/+$/, '');
|
|
47
|
+
const key = (region ?? 'eu').trim().toLowerCase();
|
|
48
|
+
const root = exports.FRONTEGG_REGIONS[key];
|
|
49
|
+
if (!root)
|
|
50
|
+
throw new Error(`Unknown Frontegg region "${region}": use eu, us, ca or au.`);
|
|
51
|
+
return root;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Authenticates with the environment credentials (`POST /auth/vendor`) and
|
|
55
|
+
* renews the management token a minute before it expires.
|
|
56
|
+
*/
|
|
57
|
+
function fronteggApi(c) {
|
|
58
|
+
if (!c.clientId || !c.apiKey)
|
|
59
|
+
throw new Error('Frontegg needs the environment client id and API key.');
|
|
60
|
+
const root = fronteggApiRoot(c.region, c.baseUrl);
|
|
61
|
+
const now = c.now ?? Date.now;
|
|
62
|
+
const auth = new vendor_http_1.VendorHttp({ vendor: 'Frontegg', baseUrl: root, fetchImpl: c.fetchImpl, sleep: c.sleep });
|
|
63
|
+
let token;
|
|
64
|
+
let expiresAt = 0;
|
|
65
|
+
const authHeaders = async () => {
|
|
66
|
+
if (!token || now() >= expiresAt - 60_000) {
|
|
67
|
+
// A refused login must not look like "feature off" to optional().
|
|
68
|
+
const { body } = await auth.post('/auth/vendor', { clientId: c.clientId, secret: c.apiKey }).catch((err) => {
|
|
69
|
+
throw err instanceof vendor_http_1.VendorApiError ? new Error(`Frontegg refused the environment credentials (${err.status}): check the client id and API key.`) : err;
|
|
70
|
+
});
|
|
71
|
+
const t = (0, record_set_1.str)(body?.token);
|
|
72
|
+
if (!t)
|
|
73
|
+
throw new Error('Frontegg did not return a management token: check the client id and API key.');
|
|
74
|
+
token = t;
|
|
75
|
+
const secs = typeof body.expiresIn === 'number' ? body.expiresIn : 3600;
|
|
76
|
+
expiresAt = now() + secs * 1000;
|
|
77
|
+
}
|
|
78
|
+
return { authorization: `Bearer ${token}` };
|
|
79
|
+
};
|
|
80
|
+
const make = (extra) => new vendor_http_1.VendorHttp({ vendor: 'Frontegg', baseUrl: root, fetchImpl: c.fetchImpl, sleep: c.sleep, headers: async () => ({ ...(await authHeaders()), ...extra }) });
|
|
81
|
+
const cache = new Map();
|
|
82
|
+
return {
|
|
83
|
+
http: make({}),
|
|
84
|
+
tenant(tenantId) {
|
|
85
|
+
let client = cache.get(tenantId);
|
|
86
|
+
if (!client) {
|
|
87
|
+
client = make({ 'frontegg-tenant-id': tenantId });
|
|
88
|
+
cache.set(tenantId, client);
|
|
89
|
+
}
|
|
90
|
+
return client;
|
|
91
|
+
},
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
/** A body that is a list, or wraps one under a known key. */
|
|
95
|
+
function listOf(body, ...keys) {
|
|
96
|
+
if (Array.isArray(body))
|
|
97
|
+
return (0, record_set_1.objs)(body);
|
|
98
|
+
if (!(0, record_set_1.isObj)(body))
|
|
99
|
+
return [];
|
|
100
|
+
for (const k of ['items', ...keys])
|
|
101
|
+
if (Array.isArray(body[k]))
|
|
102
|
+
return (0, record_set_1.objs)(body[k]);
|
|
103
|
+
return [];
|
|
104
|
+
}
|
|
105
|
+
/** A call whose "not available" answers (feature off, no permission) mean "nothing there". */
|
|
106
|
+
async function optional(http, path) {
|
|
107
|
+
try {
|
|
108
|
+
return (await http.get(path)).body;
|
|
109
|
+
}
|
|
110
|
+
catch (err) {
|
|
111
|
+
if (err instanceof vendor_http_1.VendorApiError && [400, 401, 403, 404, 405].includes(err.status))
|
|
112
|
+
return null;
|
|
113
|
+
throw err;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
/** Every page of a listing, stopping on a short page, the reported page count, or a page that repeats. */
|
|
117
|
+
async function* pages(http, path, idOf, keys) {
|
|
118
|
+
const seen = new Set();
|
|
119
|
+
for (let page = 0;; page++) {
|
|
120
|
+
const sep = path.includes('?') ? '&' : '?';
|
|
121
|
+
let body;
|
|
122
|
+
try {
|
|
123
|
+
body = (await http.get(`${path}${sep}_limit=${PAGE}&_offset=${page}`)).body;
|
|
124
|
+
}
|
|
125
|
+
catch (err) {
|
|
126
|
+
if (page === 0 && err instanceof vendor_http_1.VendorApiError && [400, 403, 404].includes(err.status))
|
|
127
|
+
return;
|
|
128
|
+
throw err;
|
|
129
|
+
}
|
|
130
|
+
const items = listOf(body, ...keys);
|
|
131
|
+
const fresh = items.filter((o) => {
|
|
132
|
+
const id = idOf(o);
|
|
133
|
+
if (id === undefined)
|
|
134
|
+
return true;
|
|
135
|
+
if (seen.has(id))
|
|
136
|
+
return false;
|
|
137
|
+
seen.add(id);
|
|
138
|
+
return true;
|
|
139
|
+
});
|
|
140
|
+
if (fresh.length > 0)
|
|
141
|
+
yield fresh;
|
|
142
|
+
const totalPages = (0, record_set_1.isObj)(body) && (0, record_set_1.isObj)(body._metadata) && typeof body._metadata.totalPages === 'number' ? body._metadata.totalPages : undefined;
|
|
143
|
+
if (items.length < PAGE || fresh.length === 0 || (totalPages !== undefined && page + 1 >= totalPages))
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
/** A metadata field: Frontegg stores it as a JSON string. */
|
|
148
|
+
function metadataOf(v) {
|
|
149
|
+
if ((0, record_set_1.isObj)(v))
|
|
150
|
+
return (0, record_set_1.bag)(v);
|
|
151
|
+
const s = (0, record_set_1.str)(v);
|
|
152
|
+
if (!s)
|
|
153
|
+
return undefined;
|
|
154
|
+
try {
|
|
155
|
+
const parsed = JSON.parse(s);
|
|
156
|
+
return (0, record_set_1.bag)(parsed);
|
|
157
|
+
}
|
|
158
|
+
catch {
|
|
159
|
+
return undefined;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
const SOCIAL_PROVIDERS = new Set(['google', 'github', 'facebook', 'microsoft', 'linkedin', 'slack', 'apple', 'twitter', 'x', 'gitlab', 'discord']);
|
|
163
|
+
async function exportFrontegg(opts) {
|
|
164
|
+
const set = new record_set_1.RecordSet();
|
|
165
|
+
const progress = opts.onProgress ?? (() => undefined);
|
|
166
|
+
const api = fronteggApi(opts);
|
|
167
|
+
const http = api.http;
|
|
168
|
+
const root = fronteggApiRoot(opts.region, opts.baseUrl);
|
|
169
|
+
progress('accounts (tenants)');
|
|
170
|
+
const tenants = [];
|
|
171
|
+
const tenantIds = new Set();
|
|
172
|
+
for await (const batch of pages(http, '/tenants/resources/tenants/v2', (o) => (0, record_set_1.str)(o.tenantId), ['tenants'])) {
|
|
173
|
+
for (const t of batch) {
|
|
174
|
+
const id = (0, record_set_1.str)(t.tenantId);
|
|
175
|
+
if (!id || tenantIds.has(id))
|
|
176
|
+
continue;
|
|
177
|
+
tenantIds.add(id);
|
|
178
|
+
tenants.push(t);
|
|
179
|
+
if ((0, record_set_1.str)(t.parentTenantId))
|
|
180
|
+
set.warn('Some accounts are sub-accounts: Atlas organizations are flat, so each one is imported on its own and the parent link is kept in public_metadata.frontegg_parent_tenant_id.');
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
progress('permissions and roles');
|
|
184
|
+
const permissionKeys = new Map();
|
|
185
|
+
for (const p of listOf(await optional(http, '/identity/resources/permissions/v1'))) {
|
|
186
|
+
const id = (0, record_set_1.str)(p.id);
|
|
187
|
+
const key = (0, record_set_1.str)(p.key);
|
|
188
|
+
if (id && key)
|
|
189
|
+
permissionKeys.set(id, key);
|
|
190
|
+
}
|
|
191
|
+
const roleKeys = new Map(); // Frontegg role id → Atlas role key
|
|
192
|
+
const addRole = (r) => {
|
|
193
|
+
const raw = (0, record_set_1.str)(r.key) ?? (0, record_set_1.str)(r.name);
|
|
194
|
+
if (!raw)
|
|
195
|
+
return undefined;
|
|
196
|
+
const key = (0, translate_kit_1.keyOf)(raw);
|
|
197
|
+
const id = (0, record_set_1.str)(r.id);
|
|
198
|
+
if (id)
|
|
199
|
+
roleKeys.set(id, key);
|
|
200
|
+
const tenantId = (0, record_set_1.str)(r.tenantId);
|
|
201
|
+
const org = tenantId && tenantIds.has(tenantId) ? tenantId : undefined;
|
|
202
|
+
const permissions = (Array.isArray(r.permissions) ? r.permissions : [])
|
|
203
|
+
.map((p) => ((0, record_set_1.isObj)(p) ? ((0, record_set_1.str)(p.key) ?? permissionKeys.get((0, record_set_1.str)(p.id) ?? '')) : (permissionKeys.get(String(p)) ?? undefined)))
|
|
204
|
+
.filter((p) => !!p);
|
|
205
|
+
set.add('role', (0, record_set_1.compact)({ key, name: (0, record_set_1.str)(r.name) ?? raw, description: (0, record_set_1.str)(r.description), scope: 'organization', organization_id: org, permissions }), `org:${org ?? ''}:${key}`);
|
|
206
|
+
return key;
|
|
207
|
+
};
|
|
208
|
+
for await (const batch of pages(http, '/identity/resources/roles/v2', (o) => (0, record_set_1.str)(o.id), ['roles']))
|
|
209
|
+
for (const r of batch)
|
|
210
|
+
addRole(r);
|
|
211
|
+
progress('user groups');
|
|
212
|
+
// userId → groups of one account, with the role keys each group grants there.
|
|
213
|
+
const groupsOf = new Map();
|
|
214
|
+
for (const tid of tenantIds) {
|
|
215
|
+
for await (const batch of pages(api.tenant(tid), '/identity/resources/groups/v2?_groupsRelations=rolesAndUsers', (o) => (0, record_set_1.str)(o.id), ['groups'])) {
|
|
216
|
+
for (const g of batch) {
|
|
217
|
+
const name = (0, record_set_1.str)(g.name);
|
|
218
|
+
if (!name)
|
|
219
|
+
continue;
|
|
220
|
+
const roles = (0, record_set_1.objs)(g.roles).map(addRole).filter((k) => !!k);
|
|
221
|
+
for (const m of (0, record_set_1.objs)(g.users)) {
|
|
222
|
+
const uid = (0, record_set_1.str)(m.id);
|
|
223
|
+
if (!uid)
|
|
224
|
+
continue;
|
|
225
|
+
const list = groupsOf.get(uid) ?? [];
|
|
226
|
+
list.push({ tenantId: tid, name, roles });
|
|
227
|
+
groupsOf.set(uid, list);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
progress('single sign-on');
|
|
233
|
+
const domainsOf = new Map();
|
|
234
|
+
for (const tid of tenantIds) {
|
|
235
|
+
const body = await optional(api.tenant(tid), '/team/resources/sso/v1/configurations');
|
|
236
|
+
for (const c of listOf(body, 'configurations')) {
|
|
237
|
+
const conn = mapSsoConfig(c, tid);
|
|
238
|
+
if (!conn)
|
|
239
|
+
continue;
|
|
240
|
+
set.add('sso_connection', conn, conn.id);
|
|
241
|
+
domainsOf.set(tid, [...new Set([...(domainsOf.get(tid) ?? []), ...(conn.domains ?? [])])]);
|
|
242
|
+
if (conn.protocol === 'oidc')
|
|
243
|
+
set.warn(`Account ${tid} OIDC SSO: Frontegg does not return the client secret; enter it in Atlas after the import.`);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
for (const t of tenants) {
|
|
247
|
+
const id = (0, record_set_1.str)(t.tenantId);
|
|
248
|
+
set.add('organization', (0, record_set_1.compact)({
|
|
249
|
+
id,
|
|
250
|
+
name: (0, record_set_1.str)(t.name) ?? id,
|
|
251
|
+
image_url: (0, record_set_1.str)(t.logoUrl),
|
|
252
|
+
domains: domainsOf.get(id),
|
|
253
|
+
public_metadata: (0, record_set_1.bag)({ ...metadataOf(t.metadata), ...((0, record_set_1.str)(t.parentTenantId) ? { frontegg_parent_tenant_id: (0, record_set_1.str)(t.parentTenantId) } : {}) }),
|
|
254
|
+
created_at: (0, record_set_1.str)(t.createdAt),
|
|
255
|
+
}));
|
|
256
|
+
}
|
|
257
|
+
progress('usernames');
|
|
258
|
+
const usernames = new Map();
|
|
259
|
+
for await (const batch of pages(http, '/identity/resources/usernames/v1', (o) => `${(0, record_set_1.str)(o.userId)}:${(0, record_set_1.str)(o.username)}`, ['usernames'])) {
|
|
260
|
+
for (const u of batch) {
|
|
261
|
+
const uid = (0, record_set_1.str)(u.userId);
|
|
262
|
+
const name = (0, record_set_1.str)(u.username);
|
|
263
|
+
if (uid && name)
|
|
264
|
+
usernames.set(uid, name);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
progress('users');
|
|
268
|
+
const emailOf = new Map();
|
|
269
|
+
for await (const batch of pages(http, '/identity/resources/users/v3?_sortBy=id&_order=ASC', (o) => (0, record_set_1.str)(o.id), ['users'])) {
|
|
270
|
+
for (const u of batch) {
|
|
271
|
+
const user = mapFronteggUser(u, usernames);
|
|
272
|
+
if (!user) {
|
|
273
|
+
set.omit('user', u.invisible === true ? 'invisible (support) user' : 'no email, phone number or username');
|
|
274
|
+
continue;
|
|
275
|
+
}
|
|
276
|
+
const groups = groupsOf.get(user.id) ?? [];
|
|
277
|
+
if (groups.length)
|
|
278
|
+
user.private_metadata = { ...user.private_metadata, frontegg_groups: groups.map((g) => ({ tenant_id: g.tenantId, name: g.name })) };
|
|
279
|
+
set.add('user', user, user.id);
|
|
280
|
+
const email = user.emails?.[0]?.email;
|
|
281
|
+
if (email)
|
|
282
|
+
emailOf.set(user.id, email);
|
|
283
|
+
for (const m of (0, record_set_1.objs)(u.tenants)) {
|
|
284
|
+
const tid = (0, record_set_1.str)(m.tenantId);
|
|
285
|
+
if (!tid)
|
|
286
|
+
continue;
|
|
287
|
+
if (!tenantIds.has(tid)) {
|
|
288
|
+
set.omit('membership', 'account not in the tenant listing');
|
|
289
|
+
continue;
|
|
290
|
+
}
|
|
291
|
+
const direct = (0, record_set_1.objs)(m.roles).map(addRole).filter((k) => !!k);
|
|
292
|
+
const viaGroups = groups.filter((g) => g.tenantId === tid).flatMap((g) => g.roles);
|
|
293
|
+
const all = [...new Set([...direct, ...viaGroups])];
|
|
294
|
+
if (all.length > 1)
|
|
295
|
+
set.warn('Some members hold several Frontegg roles; Atlas seats each member with one role (the first, direct roles before group roles).');
|
|
296
|
+
set.add('membership', (0, record_set_1.compact)({ organization_id: tid, user_id: user.id, role: all[0] ?? 'member' }), `${tid}:${user.id}`);
|
|
297
|
+
}
|
|
298
|
+
if (u.mfaEnrolled === true)
|
|
299
|
+
set.omit('mfa_factor', 'Frontegg does not export authenticator-app or SMS second factors; re-enrol in Atlas');
|
|
300
|
+
if (SOCIAL_PROVIDERS.has(((0, record_set_1.str)(u.provider) ?? '').toLowerCase())) {
|
|
301
|
+
set.omit('identity', "Frontegg does not export social accounts' provider user ids: they relink by verified email on first social sign-in");
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
if (set.count('user') > 0) {
|
|
306
|
+
set.warn('No password hashes: Frontegg never returns them. Turn on the frontegg lazy-migration preset so each password moves on its first sign-in.');
|
|
307
|
+
}
|
|
308
|
+
progress('invitations');
|
|
309
|
+
for (const inv of listOf(await optional(http, '/identity/resources/tenants/invites/v1/all'))) {
|
|
310
|
+
const id = (0, record_set_1.str)(inv.id);
|
|
311
|
+
const tid = (0, record_set_1.str)(inv.tenantId);
|
|
312
|
+
const email = emailOf.get((0, record_set_1.str)(inv.userId) ?? '');
|
|
313
|
+
if (!id || !tid || !tenantIds.has(tid) || !email) {
|
|
314
|
+
set.omit('invitation', 'invitation without a known account or user email');
|
|
315
|
+
continue;
|
|
316
|
+
}
|
|
317
|
+
const role = (0, record_set_1.strs)(inv.roleIds).map((r) => roleKeys.get(r)).find((r) => !!r);
|
|
318
|
+
const record = (0, record_set_1.compact)({ id, organization_id: tid, email, role, status: 'pending', expires_at: (0, record_set_1.str)(inv.expires) });
|
|
319
|
+
set.add('invitation', record, id);
|
|
320
|
+
}
|
|
321
|
+
progress('api tokens');
|
|
322
|
+
let tokens = 0;
|
|
323
|
+
for (const tid of tenantIds) {
|
|
324
|
+
const scope = api.tenant(tid);
|
|
325
|
+
tokens += listOf(await optional(scope, '/identity/resources/tenants/api-tokens/v1')).length;
|
|
326
|
+
tokens += listOf(await optional(scope, '/identity/resources/tenants/access-tokens/v1'), 'accessTokens').length;
|
|
327
|
+
}
|
|
328
|
+
if (tokens)
|
|
329
|
+
set.omit('api_key', 'Frontegg never reveals API token secrets: reissue them as Atlas API keys', tokens);
|
|
330
|
+
set.manifest = { origin: root, settings: { region: (opts.region ?? 'eu').toLowerCase() } };
|
|
331
|
+
return set;
|
|
332
|
+
}
|
|
333
|
+
/** One Frontegg user (v3 listing) → a user record. */
|
|
334
|
+
function mapFronteggUser(u, usernames = new Map()) {
|
|
335
|
+
const id = (0, record_set_1.str)(u.id) ?? (0, record_set_1.str)(u.sub);
|
|
336
|
+
if (!id || u.invisible === true)
|
|
337
|
+
return null;
|
|
338
|
+
const email = (0, record_set_1.str)(u.email)?.toLowerCase();
|
|
339
|
+
const phone = (0, record_set_1.e164)(u.phoneNumber);
|
|
340
|
+
const username = usernames.get(id);
|
|
341
|
+
const memberships = (0, record_set_1.objs)(u.tenants);
|
|
342
|
+
const disabled = memberships.length > 0 && memberships.every((m) => m.isDisabled === true);
|
|
343
|
+
const user = (0, record_set_1.compact)({
|
|
344
|
+
id,
|
|
345
|
+
emails: email ? [{ email, verified: u.verified === true, primary: true }] : [],
|
|
346
|
+
// Frontegg verifies a number before storing it, but does not say so in the listing: the safe default is unverified.
|
|
347
|
+
phones: phone ? [{ phone, verified: false, primary: !email }] : [],
|
|
348
|
+
username,
|
|
349
|
+
name: (0, record_set_1.str)(u.name),
|
|
350
|
+
image_url: (0, record_set_1.str)(u.profilePictureUrl),
|
|
351
|
+
banned: disabled ? true : undefined,
|
|
352
|
+
locked: u.isLocked === true ? true : undefined,
|
|
353
|
+
public_metadata: metadataOf(u.metadata),
|
|
354
|
+
private_metadata: (0, record_set_1.bag)({
|
|
355
|
+
...metadataOf(u.vendorMetadata),
|
|
356
|
+
...((0, record_set_1.str)(u.externalId) ? { frontegg_external_id: (0, record_set_1.str)(u.externalId) } : {}),
|
|
357
|
+
...(u.superUser === true ? { frontegg_super_user: true } : {}),
|
|
358
|
+
}),
|
|
359
|
+
created_at: (0, record_set_1.str)(u.createdAt),
|
|
360
|
+
last_sign_in_at: (0, record_set_1.str)(u.lastLogin),
|
|
361
|
+
});
|
|
362
|
+
return user.emails?.length || user.phones?.length || user.username ? user : null;
|
|
363
|
+
}
|
|
364
|
+
/**
|
|
365
|
+
* One SSO configuration of an account → a connection. The listing's exact
|
|
366
|
+
* shape is not in the public reference beyond its create request, so both the
|
|
367
|
+
* flat request names (`ssoEndpoint`, `publicCertificate`, `acsUrl`,
|
|
368
|
+
* `spEntityId`, `oidcClientId`) and `configMetadata` are read.
|
|
369
|
+
*/
|
|
370
|
+
function mapSsoConfig(c, tenantId) {
|
|
371
|
+
const type = ((0, record_set_1.str)(c.type) ?? '').toLowerCase();
|
|
372
|
+
const meta = (0, record_set_1.isObj)(c.configMetadata) ? c.configMetadata : {};
|
|
373
|
+
const domains = (Array.isArray(c.domains) ? c.domains : [])
|
|
374
|
+
.map((d) => ((0, record_set_1.isObj)(d) ? (d.validated === false ? undefined : (0, record_set_1.str)(d.domain)) : (0, record_set_1.str)(d)))
|
|
375
|
+
.filter((d) => !!d);
|
|
376
|
+
const base = { name: (0, record_set_1.str)(c.name), organization_id: tenantId, domains: [...new Set(domains)], enabled: c.enabled === false ? false : undefined };
|
|
377
|
+
const rawId = (0, record_set_1.str)(c.id);
|
|
378
|
+
if (type === 'oidc' || (!type && (0, record_set_1.str)(c.oidcClientId))) {
|
|
379
|
+
const clientId = (0, record_set_1.str)(c.oidcClientId);
|
|
380
|
+
if (!clientId)
|
|
381
|
+
return null;
|
|
382
|
+
return (0, record_set_1.compact)({
|
|
383
|
+
id: rawId ?? `${tenantId}:oidc`,
|
|
384
|
+
...base,
|
|
385
|
+
name: base.name ?? `${tenantId} OIDC`,
|
|
386
|
+
protocol: 'oidc',
|
|
387
|
+
oidc: (0, record_set_1.compact)({ issuer: (0, record_set_1.str)(meta.issuer), discovery_url: (0, record_set_1.str)(meta.discoveryUrl) ?? (0, record_set_1.str)(meta.wellKnownUrl), client_id: clientId, scopes: (0, record_set_1.strs)(meta.scopes) }),
|
|
388
|
+
});
|
|
389
|
+
}
|
|
390
|
+
const sso = (0, record_set_1.str)(c.ssoEndpoint);
|
|
391
|
+
const cert = (0, record_set_1.str)(c.publicCertificate);
|
|
392
|
+
const entity = (0, record_set_1.str)(meta.entityId) ?? (0, record_set_1.str)(meta.idpEntityId) ?? (0, record_set_1.str)(meta.issuer);
|
|
393
|
+
if (!sso && !cert && !entity)
|
|
394
|
+
return null;
|
|
395
|
+
return (0, record_set_1.compact)({
|
|
396
|
+
id: rawId ?? `${tenantId}:saml`,
|
|
397
|
+
...base,
|
|
398
|
+
name: base.name ?? `${tenantId} SAML`,
|
|
399
|
+
protocol: 'saml',
|
|
400
|
+
saml: (0, record_set_1.compact)({
|
|
401
|
+
idp_entity_id: entity,
|
|
402
|
+
idp_sso_url: sso,
|
|
403
|
+
idp_certificate: cert,
|
|
404
|
+
idp_metadata_url: (0, record_set_1.str)(meta.metadataUrl),
|
|
405
|
+
sp_entity_id: (0, record_set_1.str)(c.spEntityId),
|
|
406
|
+
sp_acs_url: (0, record_set_1.str)(c.acsUrl),
|
|
407
|
+
}),
|
|
408
|
+
});
|
|
409
|
+
}
|
|
410
|
+
//# sourceMappingURL=frontegg.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frontegg.js","sourceRoot":"","sources":["../../../src/migrate/export/frontegg.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { TranslationResult } from '../framework/plugin';
|
|
2
|
+
import { type Obj } from './record-set';
|
|
3
|
+
import { type VendorHttp } from './vendor-http';
|
|
4
|
+
/**
|
|
5
|
+
* `atlas migrate fusionauth config` — a FusionAuth tenant's settings → Atlas
|
|
6
|
+
* config: password validation rules, breach detection and password history,
|
|
7
|
+
* multi-factor policy, token and session lifetimes, WebAuthn, application
|
|
8
|
+
* registration and OAuth redirect URLs, application roles, and identity
|
|
9
|
+
* providers (social providers become Atlas providers; SAML v2 / OpenID Connect
|
|
10
|
+
* move with the data export as SSO connections). Lambdas, webhooks, themes,
|
|
11
|
+
* the email server, entities and FusionAuth acting as a SAML IdP are reported
|
|
12
|
+
* as manual.
|
|
13
|
+
*/
|
|
14
|
+
export interface FusionAuthConfigSnapshot {
|
|
15
|
+
baseUrl?: string;
|
|
16
|
+
tenants: Obj[];
|
|
17
|
+
applications: Obj[];
|
|
18
|
+
identityProviders: Obj[];
|
|
19
|
+
lambdas: Obj[];
|
|
20
|
+
webhooks: Obj[];
|
|
21
|
+
themes: Obj[];
|
|
22
|
+
}
|
|
23
|
+
export declare function fetchFusionAuthConfig(http: VendorHttp, baseUrl?: string, warn?: (m: string) => void): Promise<FusionAuthConfigSnapshot>;
|
|
24
|
+
export declare function translateFusionAuthConfig(snap: FusionAuthConfigSnapshot, opts?: {
|
|
25
|
+
tenantId?: string;
|
|
26
|
+
}): TranslationResult;
|