@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,279 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.configSnapshotFromExport = configSnapshotFromExport;
|
|
4
|
+
exports.fetchZitadelPolicies = fetchZitadelPolicies;
|
|
5
|
+
exports.fetchZitadelConfig = fetchZitadelConfig;
|
|
6
|
+
exports.translateZitadelConfig = translateZitadelConfig;
|
|
7
|
+
const zitadel_1 = require("./zitadel");
|
|
8
|
+
const record_set_1 = require("./record-set");
|
|
9
|
+
const translate_kit_1 = require("./translate-kit");
|
|
10
|
+
const vendor_http_1 = require("./vendor-http");
|
|
11
|
+
const num = (v) => {
|
|
12
|
+
const n = typeof v === 'number' ? v : typeof v === 'string' && v.trim() ? Number(v) : NaN;
|
|
13
|
+
return Number.isFinite(n) ? n : undefined;
|
|
14
|
+
};
|
|
15
|
+
const sub = (o, camel) => {
|
|
16
|
+
const v = (0, zitadel_1.g)(o, camel);
|
|
17
|
+
return (0, record_set_1.isObj)(v) ? v : undefined;
|
|
18
|
+
};
|
|
19
|
+
const flag = (o, camel) => {
|
|
20
|
+
const v = (0, zitadel_1.g)(o, camel);
|
|
21
|
+
return typeof v === 'boolean' ? v : undefined;
|
|
22
|
+
};
|
|
23
|
+
// ── reading ─────────────────────────────────────────────────────────────────
|
|
24
|
+
/** An export document (`{ orgs }`) as a config snapshot; no instance defaults. */
|
|
25
|
+
function configSnapshotFromExport(doc, origin, instance) {
|
|
26
|
+
const snap = (0, zitadel_1.readZitadelExport)(doc);
|
|
27
|
+
return { origin, orgs: snap.orgs, idpTemplates: [], defaults: {}, instance };
|
|
28
|
+
}
|
|
29
|
+
/** The instance's default policies, best effort (a narrow role or an old version answers 4xx for some). */
|
|
30
|
+
async function fetchZitadelPolicies(http) {
|
|
31
|
+
const policy = async (path) => {
|
|
32
|
+
try {
|
|
33
|
+
const { body } = await http.get(path);
|
|
34
|
+
return (0, record_set_1.isObj)(body) && (0, record_set_1.isObj)(body.policy) ? body.policy : undefined;
|
|
35
|
+
}
|
|
36
|
+
catch (err) {
|
|
37
|
+
if (err instanceof vendor_http_1.VendorApiError && err.status > 0 && err.status < 500)
|
|
38
|
+
return undefined;
|
|
39
|
+
throw err;
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
const factors = async (path) => {
|
|
43
|
+
try {
|
|
44
|
+
const { body } = await http.get(path);
|
|
45
|
+
return (0, record_set_1.isObj)(body) ? (0, record_set_1.strs)(body.result) : undefined;
|
|
46
|
+
}
|
|
47
|
+
catch (err) {
|
|
48
|
+
if (err instanceof vendor_http_1.VendorApiError && err.status > 0 && err.status < 500)
|
|
49
|
+
return undefined;
|
|
50
|
+
throw err;
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
return {
|
|
54
|
+
login: await policy('/admin/v1/policies/login'),
|
|
55
|
+
passwordComplexity: await policy('/admin/v1/policies/password/complexity'),
|
|
56
|
+
lockout: await policy('/admin/v1/policies/lockout'),
|
|
57
|
+
secondFactors: await factors('/admin/v1/policies/login/second_factors'),
|
|
58
|
+
multiFactors: await factors('/admin/v1/policies/login/multi_factors'),
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
/** Read the instance through the Admin API (an IAM_OWNER token): the export WITHOUT secrets, plus the default policies. */
|
|
62
|
+
async function fetchZitadelConfig(o) {
|
|
63
|
+
const http = (0, zitadel_1.zitadelHttp)(o);
|
|
64
|
+
const instance = (0, zitadel_1.zitadelBase)(o.instance);
|
|
65
|
+
const { body } = await http.post('/admin/v1/export', { withPasswords: false, withOtp: false, responseOutput: true });
|
|
66
|
+
const snap = (0, zitadel_1.readZitadelExport)(body);
|
|
67
|
+
return { origin: `ZITADEL ${instance.replace(/^https?:\/\//, '')}`, orgs: snap.orgs, idpTemplates: await (0, zitadel_1.fetchIdpTemplates)(http), defaults: await fetchZitadelPolicies(http), instance };
|
|
68
|
+
}
|
|
69
|
+
// ── translation ─────────────────────────────────────────────────────────────
|
|
70
|
+
/** The first organization that overrides a policy, or the instance default; notes when organizations disagree. */
|
|
71
|
+
function pick(snap, camel, fallback) {
|
|
72
|
+
const found = snap.orgs.map((o) => sub(o, camel)).filter((p) => p !== undefined);
|
|
73
|
+
const distinct = new Set(found.map((p) => JSON.stringify(p)));
|
|
74
|
+
return { value: fallback ?? found[0], overridden: fallback ? found.length : distinct.size > 1 ? distinct.size : 0 };
|
|
75
|
+
}
|
|
76
|
+
const SECOND_FACTORS = {
|
|
77
|
+
SECOND_FACTOR_TYPE_OTP: { atlas: 'totp', label: 'Authenticator apps' },
|
|
78
|
+
SECOND_FACTOR_TYPE_U2F: { atlas: 'passkey', label: 'Security keys' },
|
|
79
|
+
SECOND_FACTOR_TYPE_OTP_EMAIL: { atlas: 'emailCode', label: 'Email code' },
|
|
80
|
+
SECOND_FACTOR_TYPE_OTP_SMS: { atlas: 'sms', label: 'SMS code' },
|
|
81
|
+
};
|
|
82
|
+
function translateZitadelConfig(snap) {
|
|
83
|
+
const b = new translate_kit_1.ConfigBuilder();
|
|
84
|
+
const add = (status, area, setting, note, atlas) => b.add(status, area, setting, note, atlas);
|
|
85
|
+
// ── login policy ──
|
|
86
|
+
const login = pick(snap, 'loginPolicy', snap.defaults.login);
|
|
87
|
+
const lp = login.value;
|
|
88
|
+
if (login.overridden)
|
|
89
|
+
add('differs', 'login policy', 'loginPolicy', `${login.overridden} organization(s) override the instance login policy; Atlas settings are instance-wide, so the ${snap.defaults.login ? 'instance default' : 'first organization\'s policy'} is used. Check the others by hand.`);
|
|
90
|
+
if (lp) {
|
|
91
|
+
if (flag(lp, 'allowRegister') !== undefined) {
|
|
92
|
+
const open = flag(lp, 'allowRegister') === true;
|
|
93
|
+
b.set('signUpMode', open ? 'public' : 'restricted');
|
|
94
|
+
add('mapped', 'login policy', 'loginPolicy.allowRegister', open ? 'Public sign-up.' : 'Sign-up closed (invitations and the allowlist still work).', 'auth_config.signUpMode');
|
|
95
|
+
}
|
|
96
|
+
if (flag(lp, 'allowUsernamePassword') !== undefined) {
|
|
97
|
+
const on = flag(lp, 'allowUsernamePassword') === true;
|
|
98
|
+
b.set('strategies.password', on);
|
|
99
|
+
add('mapped', 'login policy', 'loginPolicy.allowUsernamePassword', on ? 'Password sign-in on.' : 'Password sign-in off.', 'auth_config.strategies.password');
|
|
100
|
+
}
|
|
101
|
+
if (flag(lp, 'allowExternalIdp') === false)
|
|
102
|
+
add('differs', 'login policy', 'loginPolicy.allowExternalIdp', 'External sign-in is off in ZITADEL: leave the social providers below disabled in Atlas.');
|
|
103
|
+
if ((0, record_set_1.str)((0, zitadel_1.g)(lp, 'passwordlessType')) === 'PASSWORDLESS_TYPE_ALLOWED') {
|
|
104
|
+
b.set('strategies.passkey', true);
|
|
105
|
+
add('mapped', 'login policy', 'loginPolicy.passwordlessType', 'Passwordless (passkey) sign-in on.', 'auth_config.strategies.passkey');
|
|
106
|
+
}
|
|
107
|
+
if (flag(lp, 'forceMfa') === true) {
|
|
108
|
+
b.set('mfaPolicy', 'required');
|
|
109
|
+
add(flag(lp, 'forceMfaLocalOnly') === true ? 'differs' : 'mapped', 'login policy', 'loginPolicy.forceMfa', flag(lp, 'forceMfaLocalOnly') === true ? 'MFA is required for every user in Atlas; ZITADEL required it only for password sign-ins (forceMfaLocalOnly).' : 'MFA always required.', 'auth_config.mfaPolicy');
|
|
110
|
+
}
|
|
111
|
+
if (flag(lp, 'hidePasswordReset') === true)
|
|
112
|
+
add('differs', 'login policy', 'loginPolicy.hidePasswordReset', 'Atlas shows "Forgot password?" whenever password sign-in is on.');
|
|
113
|
+
if (flag(lp, 'ignoreUnknownUsernames') === true)
|
|
114
|
+
add('mapped', 'login policy', 'loginPolicy.ignoreUnknownUsernames', 'Atlas answers uniformly for unknown users.');
|
|
115
|
+
const redirect = (0, record_set_1.str)((0, zitadel_1.g)(lp, 'defaultRedirectUri'));
|
|
116
|
+
if (redirect) {
|
|
117
|
+
b.push('redirect_urls', { url: redirect });
|
|
118
|
+
add('mapped', 'login policy', 'loginPolicy.defaultRedirectUri', 'Becomes a redirect URL.', 'redirect_urls');
|
|
119
|
+
}
|
|
120
|
+
for (const field of ['passwordCheckLifetime', 'externalLoginCheckLifetime', 'secondFactorCheckLifetime', 'multiFactorCheckLifetime', 'mfaInitSkipLifetime']) {
|
|
121
|
+
if ((0, zitadel_1.g)(lp, field) !== undefined)
|
|
122
|
+
add('differs', 'login policy', `loginPolicy.${field}`, `ZITADEL re-checks this factor after ${String((0, zitadel_1.g)(lp, field))}; Atlas sessions have one lifetime (auth_config.session) and sensitive actions use step-up (auth_config.stepUp).`, 'auth_config.stepUp');
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
const second = snap.defaults.secondFactors ?? [...new Set(snap.orgs.flatMap((o) => (0, record_set_1.strs)((0, zitadel_1.g)(o, 'secondFactors'))))];
|
|
126
|
+
const multi = snap.defaults.multiFactors ?? [...new Set(snap.orgs.flatMap((o) => (0, record_set_1.strs)((0, zitadel_1.g)(o, 'multiFactors'))))];
|
|
127
|
+
for (const f of second) {
|
|
128
|
+
const known = SECOND_FACTORS[f];
|
|
129
|
+
if (!known) {
|
|
130
|
+
add('manual', 'login policy', `secondFactors ${f}`, 'No Atlas counterpart.');
|
|
131
|
+
continue;
|
|
132
|
+
}
|
|
133
|
+
b.set(`mfa.factors.${known.atlas}`, true);
|
|
134
|
+
add('mapped', 'login policy', `secondFactors ${f}`, `${known.label} second factor.${known.atlas === 'totp' ? ' Seeds move with the export (`withOtp`).' : known.atlas === 'passkey' ? ' ZITADEL does not export security keys: users register again.' : ''}`, `auth_config.mfa.factors.${known.atlas}`);
|
|
135
|
+
}
|
|
136
|
+
if (multi.includes('MULTI_FACTOR_TYPE_U2F_WITH_VERIFICATION')) {
|
|
137
|
+
b.set('mfa.factors.passkey', true);
|
|
138
|
+
add('mapped', 'login policy', 'multiFactors MULTI_FACTOR_TYPE_U2F_WITH_VERIFICATION', 'Passkeys with user verification.', 'auth_config.mfa.factors.passkey');
|
|
139
|
+
}
|
|
140
|
+
// ── password complexity, lockout ──
|
|
141
|
+
const complexity = pick(snap, 'passwordComplexityPolicy', snap.defaults.passwordComplexity);
|
|
142
|
+
const pc = complexity.value;
|
|
143
|
+
if (complexity.overridden)
|
|
144
|
+
add('differs', 'password policy', 'passwordComplexityPolicy', `${complexity.overridden} organization(s) override the password policy; Atlas has one instance-wide policy.`);
|
|
145
|
+
if (pc) {
|
|
146
|
+
const min = num((0, zitadel_1.g)(pc, 'minLength'));
|
|
147
|
+
if (min !== undefined) {
|
|
148
|
+
b.set('passwordPolicy.minLength', Math.max(min, 6));
|
|
149
|
+
add('mapped', 'password policy', 'passwordComplexityPolicy.minLength', `Minimum ${min} characters.`, 'auth_config.passwordPolicy.minLength');
|
|
150
|
+
}
|
|
151
|
+
for (const [field, key, label] of [['hasUppercase', 'requireUppercase', 'an uppercase letter'], ['hasLowercase', 'requireLowercase', 'a lowercase letter'], ['hasNumber', 'requireNumber', 'a digit'], ['hasSymbol', 'requireSymbol', 'a symbol']]) {
|
|
152
|
+
if (flag(pc, field) === true) {
|
|
153
|
+
b.set(`passwordPolicy.${key}`, true);
|
|
154
|
+
add('mapped', 'password policy', `passwordComplexityPolicy.${field}`, `Requires ${label}.`, `auth_config.passwordPolicy.${key}`);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
const lock = pick(snap, 'lockoutPolicy', snap.defaults.lockout).value;
|
|
159
|
+
if (lock) {
|
|
160
|
+
if (num((0, zitadel_1.g)(lock, 'maxPasswordAttempts')))
|
|
161
|
+
add('differs', 'lockout', 'lockoutPolicy.maxPasswordAttempts', `ZITADEL locks an account after ${String((0, zitadel_1.g)(lock, 'maxPasswordAttempts'))} failed passwords; Atlas throttles failed sign-ins per account and per IP with its own thresholds.`);
|
|
162
|
+
if (num((0, zitadel_1.g)(lock, 'maxOtpAttempts')))
|
|
163
|
+
add('differs', 'lockout', 'lockoutPolicy.maxOtpAttempts', 'Atlas limits second-factor attempts with its own thresholds.');
|
|
164
|
+
}
|
|
165
|
+
const domain = pick(snap, 'domainPolicy', undefined).value;
|
|
166
|
+
if (flag(domain, 'userLoginMustBeDomain') === true)
|
|
167
|
+
add('differs', 'login policy', 'domainPolicy.userLoginMustBeDomain', 'ZITADEL login names carried the organization domain (user@org.domain); Atlas users sign in with their email address or username (kept from the export).');
|
|
168
|
+
const privacy = pick(snap, 'privacyPolicy', undefined).value;
|
|
169
|
+
if (privacy)
|
|
170
|
+
add('manual', 'privacy policy', 'privacyPolicy', `Terms of service, privacy and help links (${[(0, record_set_1.str)((0, zitadel_1.g)(privacy, 'tosLink')), (0, record_set_1.str)((0, zitadel_1.g)(privacy, 'privacyLink')), (0, record_set_1.str)((0, zitadel_1.g)(privacy, 'helpLink'))].filter(Boolean).join(', ') || 'none set'}): publish them as Atlas policies and turn on policy acceptance.`);
|
|
171
|
+
if (pick(snap, 'labelPolicy', undefined).value)
|
|
172
|
+
add('manual', 'branding', 'labelPolicy', 'Colors, logo, icon and font: recreate them in the Atlas branding designer (per organization when needed). Custom login texts are rewritten in Atlas\'s localization.');
|
|
173
|
+
// ── projects, roles, applications ──
|
|
174
|
+
const roles = new Map();
|
|
175
|
+
let roleAssertions = 0;
|
|
176
|
+
const redirects = new Set();
|
|
177
|
+
const origins = new Set();
|
|
178
|
+
for (const org of snap.orgs) {
|
|
179
|
+
for (const r of (0, record_set_1.objs)((0, zitadel_1.g)(org, 'projectRoles'))) {
|
|
180
|
+
const key = (0, record_set_1.str)((0, zitadel_1.g)(r, 'roleKey'));
|
|
181
|
+
if (key && !roles.has(key))
|
|
182
|
+
roles.set(key, r);
|
|
183
|
+
}
|
|
184
|
+
for (const p of (0, record_set_1.objs)((0, zitadel_1.g)(org, 'projects'))) {
|
|
185
|
+
if (flag(sub(p, 'project'), 'projectRoleAssertion') === true)
|
|
186
|
+
roleAssertions++;
|
|
187
|
+
}
|
|
188
|
+
for (const a of (0, record_set_1.objs)((0, zitadel_1.g)(org, 'oidcApps'))) {
|
|
189
|
+
const app = sub(a, 'app') ?? a;
|
|
190
|
+
const name = (0, record_set_1.str)((0, zitadel_1.g)(app, 'name')) ?? (0, record_set_1.str)((0, zitadel_1.g)(a, 'appId')) ?? 'application';
|
|
191
|
+
for (const u of [...(0, record_set_1.strs)((0, zitadel_1.g)(app, 'redirectUris')), ...(0, record_set_1.strs)((0, zitadel_1.g)(app, 'postLogoutRedirectUris'))])
|
|
192
|
+
redirects.add(u);
|
|
193
|
+
for (const o of (0, record_set_1.strs)((0, zitadel_1.g)(app, 'additionalOrigins')))
|
|
194
|
+
origins.add(o);
|
|
195
|
+
const type = (0, record_set_1.str)((0, zitadel_1.g)(app, 'appType'));
|
|
196
|
+
if (type === 'OIDC_APP_TYPE_NATIVE')
|
|
197
|
+
add('manual', `applications ${name}`, 'appType NATIVE', 'A native app: register its bundle id / package name under auth_config.nativeApps and use the Atlas native SDK.', 'auth_config.nativeApps');
|
|
198
|
+
if ((0, record_set_1.strs)((0, zitadel_1.g)(app, 'grantTypes')).includes('OIDC_GRANT_TYPE_CLIENT_CREDENTIALS'))
|
|
199
|
+
add('manual', `applications ${name}`, 'grantTypes client_credentials', 'A service application: create an Atlas M2M client for it.', 'oauth_clients');
|
|
200
|
+
if ((0, record_set_1.str)((0, zitadel_1.g)(app, 'authMethodType')) === 'OIDC_AUTH_METHOD_TYPE_PRIVATE_KEY_JWT')
|
|
201
|
+
add('manual', `applications ${name}`, 'authMethodType private_key_jwt', 'Client authentication with a signed JWT: register the application\'s public key in Atlas.');
|
|
202
|
+
}
|
|
203
|
+
for (const a of (0, record_set_1.objs)((0, zitadel_1.g)(org, 'apiApps')))
|
|
204
|
+
add('manual', `applications ${(0, record_set_1.str)((0, zitadel_1.g)(sub(a, 'app') ?? a, 'name')) ?? 'api'}`, 'API application', 'A ZITADEL API application (token introspection / JWT profile): register the API as a resource server in Atlas and verify Atlas tokens with the instance JWKS.', 'resource_servers');
|
|
205
|
+
for (const action of (0, record_set_1.objs)((0, zitadel_1.g)(org, 'actions'))) {
|
|
206
|
+
const name = (0, record_set_1.str)((0, zitadel_1.g)(sub(action, 'action') ?? action, 'name')) ?? (0, record_set_1.str)((0, zitadel_1.g)(action, 'actionId')) ?? 'action';
|
|
207
|
+
add('manual', 'actions', `action ${name}`, 'A ZITADEL Action (script on a flow trigger): rebuild it as an Atlas Action or webhook.');
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
let exact = 0;
|
|
211
|
+
for (const url of redirects) {
|
|
212
|
+
if (url.includes('*')) {
|
|
213
|
+
add('differs', 'applications', `redirectUris ${url}`, 'Atlas redirect URLs are exact (no wildcards); list each URL.', 'redirect_urls');
|
|
214
|
+
continue;
|
|
215
|
+
}
|
|
216
|
+
b.push('redirect_urls', { url });
|
|
217
|
+
exact++;
|
|
218
|
+
}
|
|
219
|
+
if (exact)
|
|
220
|
+
add('mapped', 'applications', 'oidcApps redirectUris', `${exact} redirect / post-logout URL(s) become redirect URLs.`, 'redirect_urls');
|
|
221
|
+
if (origins.size) {
|
|
222
|
+
b.instance.allowed_origins = [...origins].filter((o) => !o.includes('*'));
|
|
223
|
+
add('mapped', 'applications', 'additionalOrigins', 'Allowed origins for the browser SDK.', 'instance.allowed_origins');
|
|
224
|
+
}
|
|
225
|
+
for (const [key, r] of roles) {
|
|
226
|
+
b.push('roles', { key: (0, translate_kit_1.keyOf)(key), name: (0, record_set_1.str)((0, zitadel_1.g)(r, 'displayName')) ?? key, description: (0, record_set_1.str)((0, zitadel_1.g)(r, 'group')) ?? '', permissions: [] });
|
|
227
|
+
if ((0, translate_kit_1.keyOf)(key) !== key)
|
|
228
|
+
b.roles[key] = (0, translate_kit_1.keyOf)(key);
|
|
229
|
+
}
|
|
230
|
+
if (roles.size)
|
|
231
|
+
add('mapped', 'projects', 'projectRoles', `${roles.size} project role(s) become app roles; user grants move with the data export. Roles of different projects share one namespace in Atlas.`, 'roles');
|
|
232
|
+
if (roleAssertions)
|
|
233
|
+
add('manual', 'projects', 'projectRoleAssertion', 'ZITADEL put roles in the urn:zitadel:iam:org:project:roles claim: add the roles claim your apps read as an Atlas JWT template / session claim.', 'jwt_templates');
|
|
234
|
+
// ── identity providers ──
|
|
235
|
+
for (const idp of (0, zitadel_1.collectIdps)({ orgs: snap.orgs, idpTemplates: snap.idpTemplates, source: 'api' }).values()) {
|
|
236
|
+
const where = `identity provider ${idp.name}`;
|
|
237
|
+
const social = (0, translate_kit_1.socialKey)(idp.kind);
|
|
238
|
+
const clientId = (0, record_set_1.str)((0, zitadel_1.g)(idp.config, 'clientId'));
|
|
239
|
+
if (social) {
|
|
240
|
+
b.socialProvider({ atlasKey: social, vendorName: social, area: 'identity providers', setting: where, clientId, scopes: (0, record_set_1.strs)((0, zitadel_1.g)(idp.config, 'scopes')).length ? (0, record_set_1.strs)((0, zitadel_1.g)(idp.config, 'scopes')) : undefined });
|
|
241
|
+
}
|
|
242
|
+
else if (idp.kind === 'oidc') {
|
|
243
|
+
const providerKey = (0, translate_kit_1.keyOf)(idp.name).replace(/:/g, '_').slice(0, 48) || 'oidc';
|
|
244
|
+
const upper = providerKey.toUpperCase();
|
|
245
|
+
const issuer = (0, record_set_1.str)((0, zitadel_1.g)(idp.config, 'issuer'));
|
|
246
|
+
const doc = {
|
|
247
|
+
provider_key: providerKey,
|
|
248
|
+
display_name: idp.name,
|
|
249
|
+
protocol: 'oidc',
|
|
250
|
+
client_id: clientId ?? b.placeholder(`${upper}_CLIENT_ID`, `${idp.name} client id`),
|
|
251
|
+
client_secret: b.placeholder(`${upper}_CLIENT_SECRET`, `${idp.name} client secret`),
|
|
252
|
+
enabled: true,
|
|
253
|
+
allow_sign_in: true,
|
|
254
|
+
allow_sign_up: true,
|
|
255
|
+
};
|
|
256
|
+
if (issuer) {
|
|
257
|
+
doc.issuer = issuer;
|
|
258
|
+
doc.discovery_url = `${issuer.replace(/\/+$/, '')}/.well-known/openid-configuration`;
|
|
259
|
+
}
|
|
260
|
+
if ((0, record_set_1.strs)((0, zitadel_1.g)(idp.config, 'scopes')).length)
|
|
261
|
+
doc.scopes = (0, record_set_1.strs)((0, zitadel_1.g)(idp.config, 'scopes'));
|
|
262
|
+
b.push('custom_oauth_providers', doc);
|
|
263
|
+
b.providers[idp.name] = providerKey;
|
|
264
|
+
add('differs', 'identity providers', where, `Generic OIDC provider "${idp.name}"${issuer ? ` (issuer ${issuer})` : ''} moves with the data export as an SSO connection when it serves an organization, and as the custom OIDC provider "${providerKey}" for sign-in. Add Atlas's redirect URI at the provider and set ${upper}_CLIENT_SECRET.`, `custom_oauth_providers ${providerKey}`);
|
|
265
|
+
}
|
|
266
|
+
else if (idp.kind === 'saml') {
|
|
267
|
+
add('mapped', 'identity providers', where, 'SAML provider: moves with the data export as an SSO connection. Give the IdP Atlas\'s ACS URL and entity id before turning it on.', 'sso_connections');
|
|
268
|
+
}
|
|
269
|
+
else {
|
|
270
|
+
add('manual', 'identity providers', where, `A ${idp.kind} identity provider has no built-in Atlas provider: add it as a custom OAuth provider, or let those users sign in with email.`, 'custom_oauth_providers');
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
const vars = snap.instance ? { issuer: snap.instance } : {};
|
|
274
|
+
return b.result(snap.origin, {
|
|
275
|
+
bridge: { preset: 'zitadel', vars },
|
|
276
|
+
...(snap.instance ? { lazy: { preset: 'zitadel', config: { base_url: snap.instance } } } : {}),
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
//# sourceMappingURL=zitadel-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zitadel-config.js","sourceRoot":"","sources":["../../../src/migrate/export/zitadel-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import type { PasswordHash } from '@atlasauth/migrate';
|
|
2
|
+
import { RecordSet, type Obj } from './record-set';
|
|
3
|
+
import { VendorHttp } from './vendor-http';
|
|
4
|
+
/**
|
|
5
|
+
* `atlas migrate export zitadel` — a ZITADEL instance (ZITADEL Cloud or
|
|
6
|
+
* self-hosted) onto the canonical bundle models. Two ways in, both on the
|
|
7
|
+
* owner's machine, and both read ZITADEL's own EXPORT document (the
|
|
8
|
+
* `ImportData` the `zitadel export` command and `POST /admin/v1/export` write,
|
|
9
|
+
* with `withPasswords` / `withOtp` on):
|
|
10
|
+
*
|
|
11
|
+
* - the FILE a `zitadel export` run (or a saved admin export response) wrote;
|
|
12
|
+
* - the ADMIN API, `POST /admin/v1/export` with a service-user token that has
|
|
13
|
+
* the IAM_OWNER role. When the export endpoint is refused or missing (older
|
|
14
|
+
* versions, a user that is only IAM_OWNER_VIEWER) the exporter falls back to
|
|
15
|
+
* listing users with the v2 user API: profile, email and phone, but no
|
|
16
|
+
* password hashes, TOTP seeds or social links.
|
|
17
|
+
*
|
|
18
|
+
* The export carries, per organization: the human users with their hashed
|
|
19
|
+
* password (the exact `$2a$…`, `$argon2id$…`, `$scrypt$…`, `$pbkdf2-…` string
|
|
20
|
+
* ZITADEL verifies), TOTP secret, social-login links, profile, verified email
|
|
21
|
+
* and phone; project roles and user grants; organization members and domains;
|
|
22
|
+
* identity providers. The ZITADEL user id is the `sub` of every ZITADEL token,
|
|
23
|
+
* so it is the user id here.
|
|
24
|
+
*
|
|
25
|
+
* Not exportable: passkeys and U2F keys (ZITADEL keeps them only in its event
|
|
26
|
+
* store), machine users' keys, and live sessions (ZITADEL sessions are opaque;
|
|
27
|
+
* the bridge accepts ID tokens and JWT access tokens instead).
|
|
28
|
+
*
|
|
29
|
+
* Schemas: github.com/zitadel/zitadel proto/zitadel/admin.proto
|
|
30
|
+
* (`ImportDataOrg`, `ExportDataRequest`) and management.proto
|
|
31
|
+
* (`ImportHumanUserRequest`).
|
|
32
|
+
*/
|
|
33
|
+
export interface ZitadelSnapshot {
|
|
34
|
+
/** `ImportDataOrg` objects (camelCase from the API, either case from a file). */
|
|
35
|
+
orgs: Obj[];
|
|
36
|
+
/** Identity provider templates (`POST /admin/v1/idps/templates/_search`), to type the links an export names only by id. */
|
|
37
|
+
idpTemplates: Obj[];
|
|
38
|
+
source: 'file' | 'api' | 'users';
|
|
39
|
+
/** The instance URL (`https://acme-abc123.zitadel.cloud`), when known. */
|
|
40
|
+
instance?: string;
|
|
41
|
+
}
|
|
42
|
+
export interface ZitadelMapOptions {
|
|
43
|
+
/** Organizations become Atlas organizations: `all`, `skip`, or `auto` (when the instance has more than one). */
|
|
44
|
+
orgs?: 'auto' | 'all' | 'skip';
|
|
45
|
+
}
|
|
46
|
+
/** A field by its camelCase name, falling back to snake_case (the files `zitadel export` writes use either). */
|
|
47
|
+
export declare function g(o: Obj | undefined, camel: string): unknown;
|
|
48
|
+
/** The orgs in an export document: `{ orgs: [...] }`, a bare array, or one org object. */
|
|
49
|
+
export declare function readZitadelExport(doc: unknown): ZitadelSnapshot;
|
|
50
|
+
/**
|
|
51
|
+
* A ZITADEL `hashedPassword` ({ value, algorithm }) as a bundle password; null
|
|
52
|
+
* when Atlas cannot verify it. ZITADEL stores the self-describing encoding its
|
|
53
|
+
* hasher (passwap) verifies, so those are recognised by Atlas on their own
|
|
54
|
+
* ("auto"); the one bare form (a hex MD5) is mapped by the algorithm hint.
|
|
55
|
+
*/
|
|
56
|
+
export declare function zitadelPassword(hashed: unknown): PasswordHash | null;
|
|
57
|
+
export interface Idp {
|
|
58
|
+
id: string;
|
|
59
|
+
name: string;
|
|
60
|
+
/** `google`, `github`, `oidc`, `saml`, `jwt`, `ldap` … */
|
|
61
|
+
kind: string;
|
|
62
|
+
config: Obj;
|
|
63
|
+
}
|
|
64
|
+
/** The identity providers an export names, keyed by config id; templates from the API fill gaps. */
|
|
65
|
+
export declare function collectIdps(snap: ZitadelSnapshot): Map<string, Idp>;
|
|
66
|
+
export declare function mapZitadel(snap: ZitadelSnapshot, opts?: ZitadelMapOptions): RecordSet;
|
|
67
|
+
export interface ZitadelApiOptions {
|
|
68
|
+
/** `https://acme-abc123.zitadel.cloud` or your own domain; a bare host gets https. */
|
|
69
|
+
instance: string;
|
|
70
|
+
/** A service user's personal access token (IAM_OWNER, or IAM_OWNER_VIEWER for the no-secrets fallback). */
|
|
71
|
+
token: string;
|
|
72
|
+
pageSize?: number;
|
|
73
|
+
fetchImpl?: typeof fetch;
|
|
74
|
+
sleep?: (ms: number) => Promise<void>;
|
|
75
|
+
onProgress?: (message: string) => void;
|
|
76
|
+
}
|
|
77
|
+
export declare function zitadelBase(raw: string): string;
|
|
78
|
+
export declare function zitadelHttp(o: Pick<ZitadelApiOptions, 'instance' | 'token' | 'fetchImpl' | 'sleep'>): VendorHttp;
|
|
79
|
+
/** Identity provider templates, to type the links; best effort (an older instance or a narrow role answers 4xx). */
|
|
80
|
+
export declare function fetchIdpTemplates(http: VendorHttp): Promise<Obj[]>;
|
|
81
|
+
export declare function fetchZitadel(o: ZitadelApiOptions): Promise<ZitadelSnapshot>;
|
|
82
|
+
export declare function exportZitadelApi(o: ZitadelApiOptions & ZitadelMapOptions): Promise<RecordSet>;
|