@ionite/zod 0.0.21

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.
@@ -0,0 +1,250 @@
1
+ import { ApplicationValidators, AuthzEntityBase as AuthzEntityBaseType, Group as AuthzGroupType, BaseCustomer as BaseCustomerType, BaseTenant as BaseTenantType, BaseUser as BaseUserType, CreateTenantRequest, GroupResource, IAMAppValidators, IdTokenClaims, JWTAssertionClaims, OidcCallbackParams, Permission as PermissionType, RegisterIAMAppPayload, RegisterSSOAppPayload, Resource as ResourceType, Role as RoleType, ScimUser, SSOAppValidators, TenantConfigLocator, TenantResponse, TokenResponse, UpdateTenantRequest, WorkloadTokenResponse } from "@ionite/core";
2
+ import { StandardSchemaV1 } from "@standard-schema/spec";
3
+ import { z } from "zod";
4
+ /**
5
+ * Registration-time redirect-URI safety (AUDIT_HISTORY.md §10.2). An SSO `redirectUri` (or back-channel logout
6
+ * URI) registered with an EC MUST be an absolute web URL: `https:` anywhere, `http:` only for
7
+ * loopback (localhost dev). Non-web schemes (`javascript:`, `data:`, `file:`, …) and control-char
8
+ * smuggling (`java\nscript:`) are rejected so a malicious URI can never enter EC registration and
9
+ * later be reflected as an open-redirect / XSS sink. Kept in lock-step with the valibot package.
10
+ */
11
+ declare function isSafeRedirectUri(value: string): boolean;
12
+ type CustomerShape = {
13
+ userName: z.ZodString;
14
+ name: z.ZodString;
15
+ email: z.ZodType<string>;
16
+ id: z.ZodOptional<z.ZodString>;
17
+ avatar: z.ZodOptional<z.ZodType<string>>;
18
+ userType: z.ZodOptional<z.ZodString>;
19
+ };
20
+ type BaseUserShape = CustomerShape & {
21
+ ecid: z.ZodOptional<z.ZodType<string>>;
22
+ accountClass: z.ZodOptional<z.ZodString>;
23
+ };
24
+ declare const BaseUser: z.ZodObject<BaseUserShape> & z.ZodType<BaseUserType>;
25
+ /**
26
+ * Extend-base schema for CIAM customers (magic link request body). Mirrors
27
+ * `BaseUser` but binds to the `BaseCustomer` record type. Apps may `.extend()`
28
+ * this to add custom customer attributes.
29
+ */
30
+ declare const BaseCustomer: z.ZodObject<CustomerShape> & z.ZodType<BaseCustomerType>;
31
+ /**
32
+ * Narrow tenant config-locator schema (`{ source?, path, ttl? }`). Tenants store a pointer to their
33
+ * RemoteConfig that resolves against secrets sources declared on the root ES; it carries no
34
+ * connection details or credentials (those live only in the root env/bootstrap config).
35
+ */
36
+ declare const TenantConfigLocatorSchema: z.ZodType<TenantConfigLocator>;
37
+ type BaseTenantShape = {
38
+ id: z.ZodString;
39
+ companyId: z.ZodString;
40
+ companyName: z.ZodString;
41
+ environmentType: z.ZodType<CreateTenantRequest["environmentType"]>;
42
+ status: z.ZodType<"pending" | "processing" | "completed" | "failed" | "action_required">;
43
+ createdAt: z.ZodDate;
44
+ updatedAt: z.ZodDate;
45
+ configLocator: z.ZodType<TenantConfigLocator>;
46
+ email: z.ZodOptional<z.ZodString>;
47
+ webhookUrl: z.ZodOptional<z.ZodString>;
48
+ callbackUrl: z.ZodOptional<z.ZodString>;
49
+ tenantUrl: z.ZodOptional<z.ZodString>;
50
+ error: z.ZodOptional<z.ZodString>;
51
+ actionUrl: z.ZodOptional<z.ZodString>;
52
+ requestToken: z.ZodOptional<z.ZodString>;
53
+ expiresAt: z.ZodOptional<z.ZodString>;
54
+ };
55
+ declare const BaseTenant: z.ZodObject<BaseTenantShape> & z.ZodType<BaseTenantType>;
56
+ type BaseTenantCreateRequestSchemaShape = {
57
+ id: z.ZodString;
58
+ companyId: z.ZodString;
59
+ companyName: z.ZodString;
60
+ environmentType: z.ZodType<CreateTenantRequest["environmentType"]>;
61
+ configLocator: z.ZodType<TenantConfigLocator>;
62
+ email: z.ZodOptional<z.ZodType<string>>;
63
+ webhookUrl: z.ZodOptional<z.ZodType<string>>;
64
+ callbackUrl: z.ZodOptional<z.ZodType<string>>;
65
+ };
66
+ declare const BaseTenantCreateRequestSchema: z.ZodObject<BaseTenantCreateRequestSchemaShape> & z.ZodType<CreateTenantRequest>;
67
+ type BaseTenantUpdateRequestSchemaShape = {
68
+ id: z.ZodOptional<z.ZodString>;
69
+ companyId: z.ZodOptional<z.ZodString>;
70
+ companyName: z.ZodOptional<z.ZodString>;
71
+ environmentType: z.ZodOptional<z.ZodType<UpdateTenantRequest["environmentType"]>>;
72
+ configLocator: z.ZodOptional<z.ZodType<TenantConfigLocator>>;
73
+ email: z.ZodOptional<z.ZodType<string>>;
74
+ webhookUrl: z.ZodOptional<z.ZodType<string>>;
75
+ callbackUrl: z.ZodOptional<z.ZodType<string>>;
76
+ };
77
+ declare const BaseTenantUpdateRequestSchema: z.ZodObject<BaseTenantUpdateRequestSchemaShape> & z.ZodType<UpdateTenantRequest>;
78
+ /**
79
+ * Individual Zod schema factories for custom usage
80
+ */
81
+ declare const zodValidators: {
82
+ authzEntityBase: () => StandardSchemaV1<unknown, AuthzEntityBaseType>;
83
+ authzResource: () => StandardSchemaV1<unknown, ResourceType>;
84
+ authzPermission: () => StandardSchemaV1<unknown, PermissionType>;
85
+ authzRole: () => StandardSchemaV1<unknown, RoleType>;
86
+ authzGroup: () => StandardSchemaV1<unknown, AuthzGroupType>;
87
+ /**
88
+ * Creates a Zod validator for OIDC callback parameters
89
+ *
90
+ * @example
91
+ * ```typescript
92
+ * import { zodValidators } from '@ionite/zod';
93
+ *
94
+ * const callbackParams = zodValidators.oidcCallbackParams();
95
+ * ```
96
+ */
97
+ oidcCallbackParams: () => StandardSchemaV1<unknown, OidcCallbackParams>;
98
+ /**
99
+ * Creates a Zod validator for ID token claims
100
+ * Use .extend() to add custom claims validation
101
+ *
102
+ * @example Extending with custom claims
103
+ * ```typescript
104
+ * import { zodValidators } from '@ionite/zod';
105
+ * import { z } from 'zod';
106
+ *
107
+ * const customClaimsSchema = (zodValidators.idTokenClaims() as any)
108
+ * .extend({
109
+ * custom_claim: z.string(),
110
+ * roles: z.array(z.string()),
111
+ * });
112
+ * ```
113
+ */
114
+ idTokenClaims: () => StandardSchemaV1<unknown, IdTokenClaims>;
115
+ /**
116
+ * Creates a Zod validator for token responses from IdP
117
+ *
118
+ * @example
119
+ * ```typescript
120
+ * import { zodValidators } from '@ionite/zod';
121
+ *
122
+ * const tokenResponse = zodValidators.tokenResponse();
123
+ * ```
124
+ */
125
+ tokenResponse: () => StandardSchemaV1<unknown, TokenResponse>;
126
+ /**
127
+ * Creates a Zod validator for SCIM User resources
128
+ * Use .extend() to add custom SCIM extensions
129
+ *
130
+ * @example
131
+ * ```typescript
132
+ * import { zodValidators } from '@ionite/zod';
133
+ *
134
+ * const userValidator = zodValidators.scimUser();
135
+ * ```
136
+ *
137
+ * @example Extending with custom SCIM schema extensions
138
+ * ```typescript
139
+ * import { zodValidators } from '@ionite/zod';
140
+ * import { z } from 'zod';
141
+ *
142
+ * const customUserSchema = (zodValidators.scimUser() as any)
143
+ * .extend({
144
+ * 'urn:ietf:params:scim:schemas:extension:custom:2.0:User': z.object({
145
+ * customField: z.string(),
146
+ * }),
147
+ * });
148
+ * ```
149
+ */
150
+ scimUser: () => StandardSchemaV1<unknown, ScimUser>;
151
+ /**
152
+ * Creates a Zod validator for SCIM Group resources
153
+ *
154
+ * @example
155
+ * ```typescript
156
+ * import { zodValidators } from '@ionite/zod';
157
+ *
158
+ * const groupValidator = zodValidators.scimGroup();
159
+ * ```
160
+ */
161
+ scimGroup: () => StandardSchemaV1<unknown, GroupResource>;
162
+ /**
163
+ * Creates a Zod validator for JWT Assertion Claims (workload identity)
164
+ *
165
+ * @example
166
+ * ```typescript
167
+ * import { zodValidators } from '@ionite/zod';
168
+ *
169
+ * const jwtClaims = zodValidators.jwtAssertionClaims();
170
+ * ```
171
+ */
172
+ jwtAssertionClaims: () => StandardSchemaV1<unknown, JWTAssertionClaims>;
173
+ /**
174
+ * Creates a Zod validator for workload token responses
175
+ *
176
+ * @example
177
+ * ```typescript
178
+ * import { zodValidators } from '@ionite/zod';
179
+ *
180
+ * const workloadToken = zodValidators.workloadTokenResponse();
181
+ * ```
182
+ */
183
+ workloadTokenResponse: () => StandardSchemaV1<unknown, WorkloadTokenResponse>;
184
+ /**
185
+ * Creates a Zod validator for BaseUser (workforce user extend-base).
186
+ *
187
+ * @example
188
+ * ```typescript
189
+ * import { zodValidators } from '@ionite/zod';
190
+ *
191
+ * const baseUser = zodValidators.baseUser();
192
+ * ```
193
+ */
194
+ baseUser: () => StandardSchemaV1<unknown, BaseUserType>;
195
+ /**
196
+ * Creates a Zod validator for BaseCustomer (CIAM magic link request body).
197
+ *
198
+ * @example
199
+ * ```typescript
200
+ * import { zodValidators } from '@ionite/zod';
201
+ *
202
+ * const customer = zodValidators.customer();
203
+ * ```
204
+ */
205
+ customer: () => StandardSchemaV1<unknown, BaseCustomerType>;
206
+ /**
207
+ * Creates a Zod validator for tenant creation requests (`POST`).
208
+ * Use `extendedShape` to add app-specific attributes to the request body.
209
+ */
210
+ createTenantRequest: <TExtendedShape extends z.ZodRawShape = Record<never, z.ZodTypeAny>>(extendedShape?: TExtendedShape) => StandardSchemaV1<unknown, CreateTenantRequest<z.infer<z.ZodObject<TExtendedShape>>>>;
211
+ /**
212
+ * Creates a Zod validator for tenant update requests (`PUT`). Every field is optional; omitted
213
+ * fields are preserved from the stored record.
214
+ */
215
+ updateTenantRequest: <TExtendedShape extends z.ZodRawShape = Record<never, z.ZodTypeAny>>(extendedShape?: TExtendedShape) => StandardSchemaV1<unknown, UpdateTenantRequest<z.infer<z.ZodObject<TExtendedShape>>>>;
216
+ /**
217
+ * Creates a Zod validator for tenant management responses.
218
+ */
219
+ tenantResponse: () => StandardSchemaV1<unknown, TenantResponse>;
220
+ registerIAMAppPayload: () => StandardSchemaV1<unknown, RegisterIAMAppPayload>;
221
+ registerSSOAppPayload: () => StandardSchemaV1<unknown, RegisterSSOAppPayload>;
222
+ };
223
+ /**
224
+ * Pre-built Zod validators for ionite
225
+ *
226
+ * These validators implement the StandardSchemaV1 interface and can be used
227
+ * directly in ionite configuration
228
+ *
229
+ * @example
230
+ * ```typescript
231
+ * import { createValidators } from '@ionite/zod';
232
+ *
233
+ * const validators = createValidators();
234
+ *
235
+ * const ion = ionite(configSource, {
236
+ * validators,
237
+ * // ... other config
238
+ * });
239
+ * ```
240
+ */
241
+ declare function createValidators(): ApplicationValidators;
242
+ /**
243
+ * EC registration validators for IAM and SSO app registration handlers.
244
+ * Use with your EC's local registration handlers.
245
+ */
246
+ declare function createControlValidators(): {
247
+ iam: IAMAppValidators;
248
+ sso: SSOAppValidators;
249
+ };
250
+ export { zodValidators, isSafeRedirectUri, createValidators, createControlValidators, TenantConfigLocatorSchema, BaseUser, BaseTenantUpdateRequestSchema, BaseTenantCreateRequestSchema, BaseTenant, BaseCustomer };
package/dist/index.js ADDED
@@ -0,0 +1 @@
1
+ import{ION_SCIM_USER_EXTENSION_URN as O,isEcid as q,withValidate as H}from"@ionite/core";import{z as j}from"zod";function Z(k){for(let K=0;K<k.length;K++){let Q=k.charCodeAt(K);if(Q<=31||Q===127)return!1}let P;try{P=new URL(k)}catch{return!1}if(P.protocol==="https:")return!0;if(P.protocol==="http:"){let K=P.hostname.toLowerCase();return K==="localhost"||K==="127.0.0.1"||K==="[::1]"||K==="::1"}return!1}var $="must be an absolute https URL (http is allowed only for localhost)",N='must be a valid ECID formatted as "ecid:<realm>:<opaque>"',F=()=>j.string().refine(q,N).optional(),W=j.object({id:j.string(),name:j.string(),displayName:j.string().optional(),description:j.string(),externalId:j.string().optional(),metadata:j.record(j.string(),j.unknown()).optional()}),f=j.object({userName:j.string(),name:j.string(),email:j.email(),id:j.string().optional(),avatar:j.union([j.url(),j.literal("")]).optional(),userType:j.string().optional(),ecid:F(),accountClass:j.string().optional()}),y=j.object({userName:j.string(),name:j.string(),email:j.email(),id:j.string().optional(),avatar:j.union([j.url(),j.literal("")]).optional(),userType:j.string().optional()}),Y=j.object({source:j.string().optional(),path:j.string(),ttl:j.number().optional()}),v=j.object({id:j.string().min(1),companyId:j.string(),companyName:j.string(),environmentType:j.enum(["POC","DEV","QA","PROD"]),status:j.enum(["pending","processing","completed","failed","action_required"]),createdAt:j.date(),updatedAt:j.date(),configLocator:Y,email:j.string().optional(),webhookUrl:j.string().optional(),callbackUrl:j.string().optional(),tenantUrl:j.string().optional(),error:j.string().optional(),actionUrl:j.string().optional(),requestToken:j.string().optional(),expiresAt:j.string().optional()}),X=j.object({id:j.string(),companyId:j.string(),companyName:j.string(),environmentType:j.enum(["POC","DEV","QA","PROD"]),configLocator:Y,email:j.email().optional(),webhookUrl:j.url().optional(),callbackUrl:j.url().optional()}),b=j.object({id:j.string().optional(),companyId:j.string().optional(),companyName:j.string().optional(),environmentType:j.enum(["POC","DEV","QA","PROD"]).optional(),configLocator:Y.optional(),email:j.email().optional(),webhookUrl:j.url().optional(),callbackUrl:j.url().optional()}),J={authzEntityBase:()=>H(W),authzResource:()=>{let k=W.extend({type:j.string(),parent:j.lazy(()=>j.union([j.string(),k])).optional()});return H(k)},authzPermission:()=>{let k=W.extend({requestable:j.boolean().optional(),action:j.string().optional(),permissionTypes:j.array(j.string()).optional(),resourceTypes:j.array(j.string()).optional(),applyToSubResources:j.boolean().optional(),assignableSubjectTypes:j.array(j.enum(["user","customer","workload"])).optional(),recommendedSubjectTypes:j.array(j.enum(["user","customer","workload"])).optional()});return H(k)},authzRole:()=>{let k=J.authzPermission(),P=W.extend({requestable:j.boolean().optional(),roles:j.array(j.union([j.string(),j.lazy(()=>P)])).optional(),permissions:j.array(j.union([j.string(),k])).optional(),assignableSubjectTypes:j.array(j.enum(["user","customer","workload"])).optional(),recommendedSubjectTypes:j.array(j.enum(["user","customer","workload"])).optional()});return H(P)},authzGroup:()=>{let k=J.authzRole(),P=J.authzPermission(),K=J.authzResource(),Q=W.extend({requestable:j.boolean().optional(),groups:j.array(j.union([j.string(),j.lazy(()=>Q)])).optional(),roles:j.array(j.union([j.string(),k])).optional(),permissions:j.array(j.union([j.string(),P])).optional(),resources:j.array(j.union([j.string(),K])).optional(),assignableSubjectTypes:j.array(j.enum(["user","customer","workload"])).optional(),recommendedSubjectTypes:j.array(j.enum(["user","customer","workload"])).optional()});return H(Q)},oidcCallbackParams:()=>j.object({code:j.string(),state:j.string().optional(),session_state:j.string().optional(),error:j.string().optional(),error_description:j.string().optional(),error_uri:j.string().optional(),iss:j.string().optional()}),idTokenClaims:()=>j.object({sub:j.string(),iss:j.string(),aud:j.union([j.string(),j.array(j.string()).nonempty()]),exp:j.number(),iat:j.number().optional(),sid:j.string().optional(),name:j.string().optional(),email:j.union([j.email(),j.string().regex(/^[^@]+@localhost$/i)]).optional(),preferred_username:j.string().optional(),picture:j.url().optional()}).passthrough(),tokenResponse:()=>j.object({access_token:j.string(),id_token:j.string(),refresh_token:j.string().optional(),token_type:j.string(),expires_in:j.number().optional(),scope:j.string().optional(),refresh_expires_in:j.number().optional(),session_state:j.string().optional(),expires:j.string().optional()}),scimUser:()=>{let k=j.object({formatted:j.string().optional(),familyName:j.string().optional(),givenName:j.string().optional(),middleName:j.string().optional(),honorificPrefix:j.string().optional(),honorificSuffix:j.string().optional()}),P=j.object({value:j.email(),display:j.string().optional(),type:j.string().optional(),primary:j.boolean().optional()}),K=j.object({value:j.string(),display:j.string().optional(),type:j.string().optional(),primary:j.boolean().optional()}),Q=j.object({formatted:j.string().optional(),streetAddress:j.string().optional(),locality:j.string().optional(),region:j.string().optional(),postalCode:j.string().optional(),country:j.string().optional(),type:j.string().optional(),primary:j.boolean().optional()}),D=j.object({value:j.string(),$ref:j.string().optional(),display:j.string().optional(),type:j.string().optional()}),G=j.object({value:j.string(),display:j.string().optional(),type:j.string().optional(),primary:j.boolean().optional()}),L=j.object({employeeNumber:j.string().optional(),costCenter:j.string().optional(),organization:j.string().optional(),division:j.string().optional(),department:j.string().optional(),manager:j.object({value:j.string().optional(),$ref:j.string().optional(),displayName:j.string().optional()}).optional()});return j.object({id:j.string().optional(),externalId:j.string().optional(),meta:j.object({resourceType:j.string().optional(),created:j.string().optional(),lastModified:j.string().optional(),location:j.string().optional(),version:j.string().optional()}).optional(),userName:j.string(),name:k.optional(),displayName:j.string().optional(),nickName:j.string().optional(),profileUrl:j.url().optional(),title:j.string().optional(),userType:j.string().optional(),preferredLanguage:j.string().optional(),locale:j.string().optional(),timezone:j.string().optional(),active:j.boolean().optional(),password:j.never().optional(),emails:j.array(P).optional(),phoneNumbers:j.array(K).optional(),ims:j.array(j.object({value:j.string(),display:j.string().optional(),type:j.string().optional(),primary:j.boolean().optional()})).optional(),photos:j.array(j.object({value:j.string(),display:j.string().optional(),type:j.string().optional(),primary:j.boolean().optional()})).optional(),addresses:j.array(Q).optional(),groups:j.array(D).optional(),entitlements:j.array(j.object({value:j.string(),display:j.string().optional(),type:j.string().optional(),primary:j.boolean().optional()})).optional(),roles:j.array(G).optional(),x509Certificates:j.array(j.object({value:j.string(),display:j.string().optional(),type:j.string().optional(),primary:j.boolean().optional()})).optional(),"urn:ietf:params:scim:schemas:extension:enterprise:2.0:User":L.optional(),[O]:j.object({ecid:F(),accountClass:j.string().optional()}).optional(),schemas:j.array(j.string()).optional()})},scimGroup:()=>{let k=j.object({value:j.string(),$ref:j.string().optional(),display:j.string().optional(),type:j.enum(["User","Group"]).optional()});return j.object({id:j.string().optional(),externalId:j.string().optional(),meta:j.object({resourceType:j.string().optional(),created:j.string().optional(),lastModified:j.string().optional(),location:j.string().optional(),version:j.string().optional()}).optional(),displayName:j.string(),members:j.array(k).optional(),"urn:ionite:params:scim:schemas:extension:authz:2.0:Group":j.object({type:j.enum(["group","role","permission"]).optional(),requestable:j.boolean().optional(),description:j.string().optional(),resources:j.array(j.string()).optional()}).optional(),schemas:j.array(j.string()).optional()})},jwtAssertionClaims:()=>j.object({iss:j.string(),sub:j.string(),aud:j.union([j.string(),j.array(j.string())]).optional(),exp:j.number(),iat:j.number(),jti:j.string().optional(),scope:j.string().optional()}).passthrough(),workloadTokenResponse:()=>j.object({access_token:j.string(),token_type:j.string(),expires_in:j.number().optional(),scope:j.string().optional(),refresh_token:j.string().optional(),expires:j.string().optional()}),baseUser:()=>f,customer:()=>y,createTenantRequest:(k)=>k?X.extend(k):X,updateTenantRequest:(k)=>k?b.extend(k):b,tenantResponse:()=>j.union([j.object({tenantUrl:j.url().optional(),status:j.enum(["pending","processing","completed","failed"]),error:j.string().optional()}),j.object({status:j.literal("action_required"),actionUrl:j.url(),requestToken:j.string(),expiresAt:j.string()})]),registerIAMAppPayload:()=>j.object({id:j.string().min(1),companyId:j.string().min(1),companyName:j.string().min(1),environmentType:j.enum(["POC","DEV","QA","PROD"]),tenantUrl:j.url().optional(),displayName:j.string().optional(),productId:j.string().optional(),applicationId:j.string().optional(),scimBaseUrl:j.url().optional(),workload:j.record(j.string(),j.unknown()).optional()}),registerSSOAppPayload:()=>j.object({redirectUris:j.array(j.string().refine(Z,{message:`redirectUri ${$}`})).min(1),backchannelLogoutUri:j.string().refine(Z,{message:`backchannelLogoutUri ${$}`}).optional(),displayName:j.string().optional(),defaultScope:j.string().optional(),issuerTenant:j.string().optional(),applicationId:j.string().optional()})};function x(){return{sso:{callbackParams:H(J.oidcCallbackParams()),idTokenClaims:H(J.idTokenClaims()),tokenResponse:H(J.tokenResponse())},iam:{user:H(J.scimUser()),group:H(J.scimGroup())},workload:{jwtAssertionClaims:H(J.jwtAssertionClaims()),tokenResponse:H(J.workloadTokenResponse())},tenant:{createTenantRequest:H(J.createTenantRequest()),updateTenantRequest:H(J.updateTenantRequest()),tenantResponse:H(J.tenantResponse())},ciam:{customer:H(J.customer()),callbackParams:H(J.oidcCallbackParams()),idTokenClaims:H(J.idTokenClaims()),tokenResponse:H(J.tokenResponse())}}}function I(){return{iam:{registerIAMAppPayload:H(J.registerIAMAppPayload())},sso:{registerSSOAppPayload:H(J.registerSSOAppPayload())}}}export{J as zodValidators,Z as isSafeRedirectUri,x as createValidators,I as createControlValidators,Y as TenantConfigLocatorSchema,f as BaseUser,b as BaseTenantUpdateRequestSchema,X as BaseTenantCreateRequestSchema,v as BaseTenant,y as BaseCustomer};
package/package.json ADDED
@@ -0,0 +1,34 @@
1
+ {
2
+ "name": "@ionite/zod",
3
+ "version": "0.0.21",
4
+ "description": "Zod validators for ionite (SSO, IAM, workload, tenant, CIAM)",
5
+ "type": "module",
6
+ "engines": {
7
+ "node": ">=20.6"
8
+ },
9
+ "author": "ionite",
10
+ "license": "Proprietary",
11
+ "dependencies": {
12
+ "@ionite/core": "^0.0.21",
13
+ "@standard-schema/spec": "^1.1.0",
14
+ "zod": "^4.4.3"
15
+ },
16
+ "devDependencies": {
17
+ "typescript": "^6.0.3"
18
+ },
19
+ "files": [
20
+ "dist"
21
+ ],
22
+ "module": "./dist/index.js",
23
+ "types": "./dist/index.d.ts",
24
+ "exports": {
25
+ ".": {
26
+ "import": {
27
+ "types": "./dist/index.d.ts",
28
+ "default": "./dist/index.js"
29
+ }
30
+ },
31
+ "./styles.css": "./dist/index.css",
32
+ "./package.json": "./package.json"
33
+ }
34
+ }