@zitadel/config 0.1.0-alpha.14 → 0.1.0-alpha.15

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.
@@ -5,6 +5,11 @@ which fields the user sees at each step, which credentials are checked,
5
5
  and how one step transitions to the next. The Zitadel flow engine runs
6
6
  these on the platform; the widget renders whatever the engine emits.
7
7
 
8
+ Flows and schemas work together: the user schema in
9
+ `.zitadel/schemas/` defines **what** data exists, the flow defines
10
+ **when and where** users are asked to provide it. If you add a property
11
+ to the schema, users won't see a new field until a flow step lists it.
12
+
8
13
  ## What's in a flow file
9
14
 
10
15
  - `purposes` — entry step for each purpose (`login`, `register`, …). A
@@ -16,22 +21,32 @@ these on the platform; the widget renders whatever the engine emits.
16
21
  - `user_schema` — pins the flow to one specific user-schema revision.
17
22
  - `audience` (optional) — scopes the flow to specific apps or teams.
18
23
 
19
- ## What you can do
24
+ ## Making changes
25
+
26
+ The common workflow:
27
+
28
+ 1. Edit the flow (and, if it needs new data, the schema in
29
+ `.zitadel/schemas/` first).
30
+ 2. Run `zitadel plan` to preview the change.
31
+ 3. Run `zitadel apply` to publish it.
32
+
33
+ Typical edits:
20
34
 
21
- - **Add or remove a step** — extend `steps[]`.
22
35
  - **Change which fields a step collects** — edit `steps[].fields[]`.
23
36
  Values must be properties of the pinned schema (or reserved credential
24
37
  tokens).
38
+ - **Add or remove a step** — extend `steps[]`.
25
39
  - **Rewire transitions** — edit `steps[].transitions` to point at a
26
40
  different next step, or use `action: switch` / `pivot` to jump to
27
41
  another flow.
28
42
  - **Add another flow** — drop a new JSON file with its own `purposes`
29
43
  and `audience` (e.g. a per-team login).
30
44
 
31
- ## Applying changes
45
+ ## Schema revisions
32
46
 
33
- `zitadel plan` previews the change; `zitadel apply` PUTs the updated
34
- flow to the platform. When the pinned user-schema is edited, the flow
35
- stays pinned to the old revision `apply` prints the new revision id so
36
- you can copy it into `user_schema` (and update `steps[].fields[]` for
37
- any added/removed properties) when you're ready to adopt it.
47
+ Editing a schema publishes a new immutable revision. When you `apply` a
48
+ schema edit, the CLI rewrites `user_schema` in the flow files pinned to
49
+ the old revision and updates the flows in the same run the plan
50
+ announces the re-pin beforehand, and the rewrite shows up in your git
51
+ diff. Remember to update `steps[].fields[]` yourself when the edit
52
+ added or removed properties the flow should collect.
@@ -1,32 +1,135 @@
1
1
  # `.zitadel/schemas/`
2
2
 
3
- User-schema files. Each JSON file describes one editable user type — the
4
- shape of the user records the platform stores and the login/register
5
- flows collect (email, name, phoneNumber, custom claims, etc.). A project
6
- can hold as many schemas as you need (e.g. one for end users, one for
7
- internal admins).
8
-
9
- ## What's in a schema file
10
-
11
- - `objectType` — groups revisions of the same logical user type. Do not
12
- rename it after the first `apply`; the platform correlates history by
13
- this key.
14
- - `properties` / `required` — the user's attributes and which of them
15
- must be present on every user.
16
- - `x-auth-methods` — which credentials this user type supports
17
- (password, passkey, …).
18
-
19
- ## What you can do
20
-
21
- - **Add or edit a property** — extend `properties`, mark it `required`
22
- if it must be present on every user.
23
- - **Enable or disable an auth method** — flip an `x-auth-methods` entry.
24
- - **Add another user type** — drop a new JSON file next to this one.
25
-
26
- ## Applying changes
27
-
28
- `zitadel plan` previews the change; `zitadel apply` publishes it. Editing
29
- a schema publishes a **new immutable revision** — existing users keep
30
- validating against the previous revision. Flows that reference this
31
- schema stay pinned to the old revision until you re-pin them; see
32
- `.zitadel/flows/README.md`.
3
+ This folder contains your project's user schemas.
4
+
5
+ A user schema defines **what information is stored about a user** and
6
+ **how that type of user can authenticate**.
7
+
8
+ You can have as many schemas as you need. For example:
9
+
10
+ - `customer.json`
11
+ - `employee.json`
12
+ - `admin.json`
13
+
14
+ Here's a simplified example:
15
+
16
+ ``` json
17
+ {
18
+ "objectType": "customer",
19
+ "properties": {
20
+ "firstName": {
21
+ "type": "string"
22
+ },
23
+ "company": {
24
+ "type": "string"
25
+ }
26
+ },
27
+ "required": [
28
+ "firstName"
29
+ ],
30
+ "x-auth-methods": {
31
+ "password": { "enabled": true, "position": 1 },
32
+ "passkey": { "enabled": true, "position": 2 }
33
+ }
34
+ }
35
+ ```
36
+
37
+ Each schema is made up of four main sections:
38
+
39
+ ## `objectType`
40
+
41
+ Identifies this type of user.
42
+
43
+ Once you've applied a schema for the first time, don't rename it.
44
+ Zitadel uses it to recognise future revisions of the same user type.
45
+
46
+ ## `properties`
47
+
48
+ Defines the information stored for users of this type.
49
+
50
+ For example:
51
+
52
+ - First name
53
+ - Last name
54
+ - Company
55
+ - Phone number
56
+ - Custom attributes
57
+
58
+ Every property becomes available to the rest of the identity system,
59
+ including login and registration flows.
60
+
61
+ ## `required`
62
+
63
+ Lists which properties every user must provide.
64
+
65
+ Properties that aren't listed here are optional.
66
+
67
+ ## `x-auth-methods`
68
+
69
+ Controls how users of this type can authenticate.
70
+
71
+ For example:
72
+
73
+ - Password
74
+ - Passkeys
75
+ - Social login
76
+
77
+ ------------------------------------------------------------------------
78
+
79
+ # Making changes
80
+
81
+ The most common workflow looks like this:
82
+
83
+ 1. Update your schema.
84
+ 2. If you've added, removed or renamed fields, update the corresponding
85
+ login flow in `.zitadel/flows/`.
86
+ 3. Run `zitadel plan` to preview the changes.
87
+ 4. Run `zitadel apply` to publish them.
88
+
89
+ ## Why do I need to update the login flow?
90
+
91
+ The schema defines **what data exists**.
92
+
93
+ The login flow defines **when and where users are asked to provide that
94
+ data**.
95
+
96
+ For example, if you add a `company` property to your schema, users won't
97
+ see a new field on the registration form until you also update the
98
+ registration flow.
99
+
100
+ Likewise, if you remove or rename a property, you'll usually need to
101
+ update any login flows that reference it.
102
+
103
+ ------------------------------------------------------------------------
104
+
105
+ # Common changes
106
+
107
+ ## Add a new field
108
+
109
+ Add it under `properties`.
110
+
111
+ If every user must provide it, also add it to `required`.
112
+
113
+ Finally, update the login flow if users should be able to enter it.
114
+
115
+ ## Make a field optional
116
+
117
+ Remove it from `required`.
118
+
119
+ ## Enable passkeys
120
+
121
+ Set `"passkey": { "enabled": true }` in `x-auth-methods`.
122
+
123
+ ## Create another user type
124
+
125
+ Create another JSON file in this directory.
126
+
127
+ ------------------------------------------------------------------------
128
+
129
+ ## Next step
130
+
131
+ Once you've updated your schema, continue with:
132
+
133
+ .zitadel/flows/
134
+
135
+ to update your login and registration flows.
package/dist/index.d.mts CHANGED
@@ -1,3 +1,4 @@
1
1
  import { a as DefaultConfigRenderOptions, c as getDefaultLoginFlow, i as DEFAULT_SCHEMA_CONFIG_PATH, l as flowsReadmeContent, n as DEFAULT_FLOW_CONFIG_PATH, o as defaultHumanUserSchemaUrl, r as DEFAULT_FLOW_SCHEMA_URI, s as getDefaultHumanUserSchema, t as DEFAULT_BUILTIN_SCHEMA_BASE, u as schemasReadmeContent } from "./defaults-DzfOT2_7.mjs";
2
+ import { USER_PROPERTY_DEFAULTS, normalizeFlowBody, normalizeSchemaBody } from "./normalize.mjs";
2
3
  import { createFlowDefinitionRequestSchema, flowConfigSchema, schemaConfigSchema } from "./schemas.mjs";
3
- export { DEFAULT_BUILTIN_SCHEMA_BASE, DEFAULT_FLOW_CONFIG_PATH, DEFAULT_FLOW_SCHEMA_URI, DEFAULT_SCHEMA_CONFIG_PATH, DefaultConfigRenderOptions, createFlowDefinitionRequestSchema, defaultHumanUserSchemaUrl, flowConfigSchema, flowsReadmeContent, getDefaultHumanUserSchema, getDefaultLoginFlow, schemaConfigSchema, schemasReadmeContent };
4
+ export { DEFAULT_BUILTIN_SCHEMA_BASE, DEFAULT_FLOW_CONFIG_PATH, DEFAULT_FLOW_SCHEMA_URI, DEFAULT_SCHEMA_CONFIG_PATH, DefaultConfigRenderOptions, USER_PROPERTY_DEFAULTS, createFlowDefinitionRequestSchema, defaultHumanUserSchemaUrl, flowConfigSchema, flowsReadmeContent, getDefaultHumanUserSchema, getDefaultLoginFlow, normalizeFlowBody, normalizeSchemaBody, schemaConfigSchema, schemasReadmeContent };
package/dist/index.mjs CHANGED
@@ -1,3 +1,4 @@
1
1
  import { a as defaultHumanUserSchemaUrl, c as flowsReadmeContent, i as DEFAULT_SCHEMA_CONFIG_PATH, l as schemasReadmeContent, n as DEFAULT_FLOW_CONFIG_PATH, o as getDefaultHumanUserSchema, r as DEFAULT_FLOW_SCHEMA_URI, s as getDefaultLoginFlow, t as DEFAULT_BUILTIN_SCHEMA_BASE } from "./defaults-B2iIPSSl.mjs";
2
+ import { USER_PROPERTY_DEFAULTS, normalizeFlowBody, normalizeSchemaBody } from "./normalize.mjs";
2
3
  import { createFlowDefinitionRequestSchema, flowConfigSchema, schemaConfigSchema } from "./schemas.mjs";
3
- export { DEFAULT_BUILTIN_SCHEMA_BASE, DEFAULT_FLOW_CONFIG_PATH, DEFAULT_FLOW_SCHEMA_URI, DEFAULT_SCHEMA_CONFIG_PATH, createFlowDefinitionRequestSchema, defaultHumanUserSchemaUrl, flowConfigSchema, flowsReadmeContent, getDefaultHumanUserSchema, getDefaultLoginFlow, schemaConfigSchema, schemasReadmeContent };
4
+ export { DEFAULT_BUILTIN_SCHEMA_BASE, DEFAULT_FLOW_CONFIG_PATH, DEFAULT_FLOW_SCHEMA_URI, DEFAULT_SCHEMA_CONFIG_PATH, USER_PROPERTY_DEFAULTS, createFlowDefinitionRequestSchema, defaultHumanUserSchemaUrl, flowConfigSchema, flowsReadmeContent, getDefaultHumanUserSchema, getDefaultLoginFlow, normalizeFlowBody, normalizeSchemaBody, schemaConfigSchema, schemasReadmeContent };
@@ -0,0 +1,40 @@
1
+ //#region src/normalize.d.ts
2
+ /**
3
+ * Canonical-form normalizers for the two repo-config resource kinds.
4
+ *
5
+ * The sync engine compares `.zitadel/**` files against server responses;
6
+ * the server echoes fields the author never wrote (an empty `audience`
7
+ * on flows) and the meta-schema declares defaults an author may or may
8
+ * not spell out (`x-editable` et al on schema properties). Normalizing
9
+ * both sides before hashing or diffing keeps a one-field edit rendering
10
+ * as a one-field diff.
11
+ *
12
+ * Normalized bodies are for COMPARISON. Never upload them, and never
13
+ * write a normalized schema body to a file: the server stores schema
14
+ * bytes verbatim without materializing meta-schema defaults, so a
15
+ * stripped `"x-editable": true` would vanish from the next published
16
+ * revision. (Flow write-back may reuse {@link normalizeFlowBody} —
17
+ * everything it strips is pure transport noise.)
18
+ */
19
+ /**
20
+ * Property-level defaults declared by the user-property meta-schema
21
+ * (`api/openapi/endpoints/schemas/user-property.json`). A property that
22
+ * spells one of these out is semantically identical to one that omits it.
23
+ */
24
+ declare const USER_PROPERTY_DEFAULTS: Readonly<Record<string, boolean>>;
25
+ /**
26
+ * Return a deep copy of a bare flow-definition body with server-echoed
27
+ * noise removed: an empty `audience` and any detail-envelope keys.
28
+ */
29
+ declare function normalizeFlowBody(body: object): object;
30
+ /**
31
+ * Return a deep copy of a user-schema body with meta-schema property
32
+ * defaults stripped: a property carrying `"x-editable": true` (or the
33
+ * other {@link USER_PROPERTY_DEFAULTS}) normalizes to one omitting it.
34
+ * Only exact default values are removed; `$id` and every other field
35
+ * pass through untouched.
36
+ */
37
+ declare function normalizeSchemaBody(body: object): object;
38
+ //#endregion
39
+ export { USER_PROPERTY_DEFAULTS, normalizeFlowBody, normalizeSchemaBody };
40
+ //# sourceMappingURL=normalize.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize.d.mts","names":[],"sources":["../src/normalize.ts"],"mappings":";;AAuBA;;;;;AAqCA;;;;;AAkBA;;;;;;;;;;;cAvDa,sBAAA,EAAwB,QAAA,CAAS,MAAA;;;;;iBAqC9B,iBAAA,CAAkB,IAAA;;;;;;;;iBAkBlB,mBAAA,CAAoB,IAAA"}
@@ -0,0 +1,82 @@
1
+ //#region src/normalize.ts
2
+ /**
3
+ * Canonical-form normalizers for the two repo-config resource kinds.
4
+ *
5
+ * The sync engine compares `.zitadel/**` files against server responses;
6
+ * the server echoes fields the author never wrote (an empty `audience`
7
+ * on flows) and the meta-schema declares defaults an author may or may
8
+ * not spell out (`x-editable` et al on schema properties). Normalizing
9
+ * both sides before hashing or diffing keeps a one-field edit rendering
10
+ * as a one-field diff.
11
+ *
12
+ * Normalized bodies are for COMPARISON. Never upload them, and never
13
+ * write a normalized schema body to a file: the server stores schema
14
+ * bytes verbatim without materializing meta-schema defaults, so a
15
+ * stripped `"x-editable": true` would vanish from the next published
16
+ * revision. (Flow write-back may reuse {@link normalizeFlowBody} —
17
+ * everything it strips is pure transport noise.)
18
+ */
19
+ /**
20
+ * Property-level defaults declared by the user-property meta-schema
21
+ * (`api/openapi/endpoints/schemas/user-property.json`). A property that
22
+ * spells one of these out is semantically identical to one that omits it.
23
+ */
24
+ const USER_PROPERTY_DEFAULTS = {
25
+ "x-editable": true,
26
+ "x-sensitive": false,
27
+ "x-mfa": false
28
+ };
29
+ /**
30
+ * Keys of the flow-definition detail envelope. `fetch` in the flow syncer
31
+ * already unwraps the envelope; stripping them here as well makes the
32
+ * normalizer safe on raw detail responses.
33
+ */
34
+ const FLOW_ENVELOPE_KEYS = [
35
+ "id",
36
+ "project_id",
37
+ "schema_uri",
38
+ "created_at",
39
+ "updated_at"
40
+ ];
41
+ function isPlainObject(value) {
42
+ return typeof value === "object" && value !== null && !Array.isArray(value);
43
+ }
44
+ /**
45
+ * An `audience` counts as empty when it scopes nothing: no keys, or only
46
+ * `team_ids`/`app_ids` that are null or empty arrays. Unknown keys keep
47
+ * the audience — better a noisy diff than a silently dropped scope.
48
+ */
49
+ function isEmptyAudience(value) {
50
+ if (!isPlainObject(value)) return false;
51
+ return Object.entries(value).every(([key, entry]) => (key === "team_ids" || key === "app_ids") && (entry === null || entry === void 0 || Array.isArray(entry) && entry.length === 0));
52
+ }
53
+ /**
54
+ * Return a deep copy of a bare flow-definition body with server-echoed
55
+ * noise removed: an empty `audience` and any detail-envelope keys.
56
+ */
57
+ function normalizeFlowBody(body) {
58
+ const result = structuredClone(body);
59
+ for (const key of FLOW_ENVELOPE_KEYS) delete result[key];
60
+ if ("audience" in result && isEmptyAudience(result.audience)) delete result.audience;
61
+ return result;
62
+ }
63
+ /**
64
+ * Return a deep copy of a user-schema body with meta-schema property
65
+ * defaults stripped: a property carrying `"x-editable": true` (or the
66
+ * other {@link USER_PROPERTY_DEFAULTS}) normalizes to one omitting it.
67
+ * Only exact default values are removed; `$id` and every other field
68
+ * pass through untouched.
69
+ */
70
+ function normalizeSchemaBody(body) {
71
+ const result = structuredClone(body);
72
+ if (!isPlainObject(result.properties)) return result;
73
+ for (const property of Object.values(result.properties)) {
74
+ if (!isPlainObject(property)) continue;
75
+ for (const [key, defaultValue] of Object.entries(USER_PROPERTY_DEFAULTS)) if (property[key] === defaultValue) delete property[key];
76
+ }
77
+ return result;
78
+ }
79
+ //#endregion
80
+ export { USER_PROPERTY_DEFAULTS, normalizeFlowBody, normalizeSchemaBody };
81
+
82
+ //# sourceMappingURL=normalize.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize.mjs","names":[],"sources":["../src/normalize.ts"],"sourcesContent":["/**\n * Canonical-form normalizers for the two repo-config resource kinds.\n *\n * The sync engine compares `.zitadel/**` files against server responses;\n * the server echoes fields the author never wrote (an empty `audience`\n * on flows) and the meta-schema declares defaults an author may or may\n * not spell out (`x-editable` et al on schema properties). Normalizing\n * both sides before hashing or diffing keeps a one-field edit rendering\n * as a one-field diff.\n *\n * Normalized bodies are for COMPARISON. Never upload them, and never\n * write a normalized schema body to a file: the server stores schema\n * bytes verbatim without materializing meta-schema defaults, so a\n * stripped `\"x-editable\": true` would vanish from the next published\n * revision. (Flow write-back may reuse {@link normalizeFlowBody} —\n * everything it strips is pure transport noise.)\n */\n\n/**\n * Property-level defaults declared by the user-property meta-schema\n * (`api/openapi/endpoints/schemas/user-property.json`). A property that\n * spells one of these out is semantically identical to one that omits it.\n */\nexport const USER_PROPERTY_DEFAULTS: Readonly<Record<string, boolean>> = {\n \"x-editable\": true,\n \"x-sensitive\": false,\n \"x-mfa\": false,\n};\n\n/**\n * Keys of the flow-definition detail envelope. `fetch` in the flow syncer\n * already unwraps the envelope; stripping them here as well makes the\n * normalizer safe on raw detail responses.\n */\nconst FLOW_ENVELOPE_KEYS = [\"id\", \"project_id\", \"schema_uri\", \"created_at\", \"updated_at\"];\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\n/**\n * An `audience` counts as empty when it scopes nothing: no keys, or only\n * `team_ids`/`app_ids` that are null or empty arrays. Unknown keys keep\n * the audience — better a noisy diff than a silently dropped scope.\n */\nfunction isEmptyAudience(value: unknown): boolean {\n if (!isPlainObject(value)) {\n return false;\n }\n return Object.entries(value).every(\n ([key, entry]) =>\n (key === \"team_ids\" || key === \"app_ids\") &&\n (entry === null || entry === undefined || (Array.isArray(entry) && entry.length === 0)),\n );\n}\n\n/**\n * Return a deep copy of a bare flow-definition body with server-echoed\n * noise removed: an empty `audience` and any detail-envelope keys.\n */\nexport function normalizeFlowBody(body: object): object {\n const result = structuredClone(body) as Record<string, unknown>;\n for (const key of FLOW_ENVELOPE_KEYS) {\n delete result[key];\n }\n if (\"audience\" in result && isEmptyAudience(result.audience)) {\n delete result.audience;\n }\n return result;\n}\n\n/**\n * Return a deep copy of a user-schema body with meta-schema property\n * defaults stripped: a property carrying `\"x-editable\": true` (or the\n * other {@link USER_PROPERTY_DEFAULTS}) normalizes to one omitting it.\n * Only exact default values are removed; `$id` and every other field\n * pass through untouched.\n */\nexport function normalizeSchemaBody(body: object): object {\n const result = structuredClone(body) as Record<string, unknown>;\n if (!isPlainObject(result.properties)) {\n return result;\n }\n for (const property of Object.values(result.properties)) {\n if (!isPlainObject(property)) {\n continue;\n }\n for (const [key, defaultValue] of Object.entries(USER_PROPERTY_DEFAULTS)) {\n if (property[key] === defaultValue) {\n delete property[key];\n }\n }\n }\n return result;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAuBA,MAAa,yBAA4D;CACvE,cAAc;CACd,eAAe;CACf,SAAS;CACV;;;;;;AAOD,MAAM,qBAAqB;CAAC;CAAM;CAAc;CAAc;CAAc;CAAa;AAEzF,SAAS,cAAc,OAAkD;AACvE,QAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,MAAM;;;;;;;AAQ7E,SAAS,gBAAgB,OAAyB;AAChD,KAAI,CAAC,cAAc,MAAM,CACvB,QAAO;AAET,QAAO,OAAO,QAAQ,MAAM,CAAC,OAC1B,CAAC,KAAK,YACJ,QAAQ,cAAc,QAAQ,eAC9B,UAAU,QAAQ,UAAU,KAAA,KAAc,MAAM,QAAQ,MAAM,IAAI,MAAM,WAAW,GACvF;;;;;;AAOH,SAAgB,kBAAkB,MAAsB;CACtD,MAAM,SAAS,gBAAgB,KAAK;AACpC,MAAK,MAAM,OAAO,mBAChB,QAAO,OAAO;AAEhB,KAAI,cAAc,UAAU,gBAAgB,OAAO,SAAS,CAC1D,QAAO,OAAO;AAEhB,QAAO;;;;;;;;;AAUT,SAAgB,oBAAoB,MAAsB;CACxD,MAAM,SAAS,gBAAgB,KAAK;AACpC,KAAI,CAAC,cAAc,OAAO,WAAW,CACnC,QAAO;AAET,MAAK,MAAM,YAAY,OAAO,OAAO,OAAO,WAAW,EAAE;AACvD,MAAI,CAAC,cAAc,SAAS,CAC1B;AAEF,OAAK,MAAM,CAAC,KAAK,iBAAiB,OAAO,QAAQ,uBAAuB,CACtE,KAAI,SAAS,SAAS,aACpB,QAAO,SAAS;;AAItB,QAAO"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zitadel/config",
3
- "version": "0.1.0-alpha.14",
3
+ "version": "0.1.0-alpha.15",
4
4
  "description": "Versioned Zitadel local config schemas and defaults",
5
5
  "homepage": "https://github.com/zitadel/nextgen/tree/main/packages/config#readme",
6
6
  "bugs": {
@@ -35,6 +35,11 @@
35
35
  "types": "./dist/schemas.d.mts",
36
36
  "import": "./dist/schemas.mjs"
37
37
  },
38
+ "./normalize": {
39
+ "@zitadel/source": "./src/normalize.ts",
40
+ "types": "./dist/normalize.d.mts",
41
+ "import": "./dist/normalize.mjs"
42
+ },
38
43
  "./defaults/default-human-user.json": "./defaults/default-human-user.json",
39
44
  "./defaults/default-login.json": "./defaults/default-login.json",
40
45
  "./package.json": "./package.json"
@@ -43,7 +48,7 @@
43
48
  "access": "public"
44
49
  },
45
50
  "dependencies": {
46
- "@zitadel/api": "0.1.0-alpha.14"
51
+ "@zitadel/api": "0.1.0-alpha.15"
47
52
  },
48
53
  "devDependencies": {
49
54
  "tsdown": "^0.21.10",