@enterprisestandard/react-validators-valibot 0.0.5-beta.20260115.4 → 0.0.6

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/dist/index.d.ts CHANGED
@@ -1,107 +1,146 @@
1
- import { StandardSchemaV1, OidcCallbackParams, IdTokenClaims, TokenResponse, ScimUser, CreateTenantResponse } from '@enterprisestandard/react';
2
-
1
+ import { CreateTenantRequest, CreateTenantResponse, ESValidators, GroupResource, IdTokenClaims, JWTAssertionClaims, OidcCallbackParams, ScimUser, TokenResponse, WorkloadTokenResponse } from "@enterprisestandard/core";
2
+ import { StandardSchemaV1 } from "@standard-schema/spec";
3
3
  /**
4
- * Pre-built Valibot validators for OIDC/SSO flows
5
- *
6
- * These validators implement the StandardSchemaV1 interface and can be used
7
- * directly in SSOHandlerConfig.validation
8
- *
9
- * @example
10
- * ```typescript
11
- * import { createValibotValidators } from '@enterprisestandard/react-validators-valibot';
12
- *
13
- * const validators = createValibotValidators();
14
- *
15
- * const ssoConfig: SSOHandlerConfig = {
16
- * loginUrl: '/api/auth/login',
17
- * validation: validators,
18
- * };
19
- * ```
20
- */
21
- declare function createValibotValidators(): {
22
- callbackParams: StandardSchemaV1<unknown, OidcCallbackParams>;
23
- idTokenClaims: StandardSchemaV1<unknown, IdTokenClaims>;
24
- tokenResponse: StandardSchemaV1<unknown, TokenResponse>;
25
- };
26
- /**
27
- * Individual Valibot schema factories for custom usage
28
- */
4
+ * Individual Valibot schema factories for custom usage
5
+ */
29
6
  declare const valibotValidators: {
30
- /**
31
- * Creates a Valibot validator for OIDC callback parameters
32
- *
33
- * @example
34
- * ```typescript
35
- * import { valibotValidators } from '@enterprisestandard/react-validators-valibot';
36
- *
37
- * const callbackParams = valibotValidators.oidcCallbackParams();
38
- * ```
39
- */
40
- oidcCallbackParams: () => StandardSchemaV1<unknown, OidcCallbackParams>;
41
- /**
42
- * Creates a Valibot validator for ID token claims
43
- * Use v.object() with looseObject to extend with custom claims
44
- *
45
- * @example Extending with custom claims
46
- * ```typescript
47
- * import { valibotValidators } from '@enterprisestandard/react-validators-valibot';
48
- * import * as v from 'valibot';
49
- *
50
- * const customClaimsSchema = v.looseObject({
51
- * ...(valibotValidators.idTokenClaims() as any).entries,
52
- * custom_claim: v.string(),
53
- * roles: v.array(v.string()),
54
- * });
55
- * ```
56
- */
57
- idTokenClaims: () => StandardSchemaV1<unknown, IdTokenClaims>;
58
- /**
59
- * Creates a Valibot validator for token responses from IdP
60
- *
61
- * @example
62
- * ```typescript
63
- * import { valibotValidators } from '@enterprisestandard/react-validators-valibot';
64
- *
65
- * const tokenResponse = valibotValidators.tokenResponse();
66
- * ```
67
- */
68
- tokenResponse: () => StandardSchemaV1<unknown, TokenResponse>;
69
- /**
70
- * Creates a Valibot validator for SCIM User resources
71
- * Use v.object() to extend with custom SCIM extensions
72
- *
73
- * @example
74
- * ```typescript
75
- * import { valibotValidators } from '@enterprisestandard/react-validators-valibot';
76
- *
77
- * const userValidator = valibotValidators.scimUser();
78
- * ```
79
- *
80
- * @example Extending with custom SCIM schema extensions
81
- * ```typescript
82
- * import { valibotValidators } from '@enterprisestandard/react-validators-valibot';
83
- * import * as v from 'valibot';
84
- *
85
- * const customUserSchema = v.object({
86
- * ...(valibotValidators.scimUser() as any).entries,
87
- * 'urn:ietf:params:scim:schemas:extension:custom:2.0:User': v.object({
88
- * customField: v.string(),
89
- * }),
90
- * });
91
- * ```
92
- */
93
- scimUser: () => StandardSchemaV1<unknown, ScimUser>;
94
- /**
95
- * Creates a Valibot validator for tenant creation responses
96
- *
97
- * @example
98
- * ```typescript
99
- * import { valibotValidators } from '@enterprisestandard/react-validators-valibot';
100
- *
101
- * const tenantResponse = valibotValidators.createTenantResponse();
102
- * ```
103
- */
104
- createTenantResponse: () => StandardSchemaV1<unknown, CreateTenantResponse>;
7
+ /**
8
+ * Creates a Valibot validator for OIDC callback parameters
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * import { valibotValidators } from '@enterprisestandard/react-validators-valibot';
13
+ *
14
+ * const callbackParams = valibotValidators.oidcCallbackParams();
15
+ * ```
16
+ */
17
+ oidcCallbackParams: () => StandardSchemaV1<unknown, OidcCallbackParams>;
18
+ /**
19
+ * Creates a Valibot validator for ID token claims
20
+ * Use v.object() with looseObject to extend with custom claims
21
+ *
22
+ * @example Extending with custom claims
23
+ * ```typescript
24
+ * import { valibotValidators } from '@enterprisestandard/react-validators-valibot';
25
+ * import * as v from 'valibot';
26
+ *
27
+ * const customClaimsSchema = v.looseObject({
28
+ * ...(valibotValidators.idTokenClaims() as any).entries,
29
+ * custom_claim: v.string(),
30
+ * roles: v.array(v.string()),
31
+ * });
32
+ * ```
33
+ */
34
+ idTokenClaims: () => StandardSchemaV1<unknown, IdTokenClaims>;
35
+ /**
36
+ * Creates a Valibot validator for token responses from IdP
37
+ *
38
+ * @example
39
+ * ```typescript
40
+ * import { valibotValidators } from '@enterprisestandard/react-validators-valibot';
41
+ *
42
+ * const tokenResponse = valibotValidators.tokenResponse();
43
+ * ```
44
+ */
45
+ tokenResponse: () => StandardSchemaV1<unknown, TokenResponse>;
46
+ /**
47
+ * Creates a Valibot validator for SCIM User resources
48
+ * Use v.object() to extend with custom SCIM extensions
49
+ *
50
+ * @example
51
+ * ```typescript
52
+ * import { valibotValidators } from '@enterprisestandard/react-validators-valibot';
53
+ *
54
+ * const userValidator = valibotValidators.scimUser();
55
+ * ```
56
+ *
57
+ * @example Extending with custom SCIM schema extensions
58
+ * ```typescript
59
+ * import { valibotValidators } from '@enterprisestandard/react-validators-valibot';
60
+ * import * as v from 'valibot';
61
+ *
62
+ * const customUserSchema = v.object({
63
+ * ...(valibotValidators.scimUser() as any).entries,
64
+ * 'urn:ietf:params:scim:schemas:extension:custom:2.0:User': v.object({
65
+ * customField: v.string(),
66
+ * }),
67
+ * });
68
+ * ```
69
+ */
70
+ scimUser: () => StandardSchemaV1<unknown, ScimUser>;
71
+ /**
72
+ * Creates a Valibot validator for SCIM Group resources
73
+ *
74
+ * @example
75
+ * ```typescript
76
+ * import { valibotValidators } from '@enterprisestandard/react-validators-valibot';
77
+ *
78
+ * const groupValidator = valibotValidators.scimGroup();
79
+ * ```
80
+ */
81
+ scimGroup: () => StandardSchemaV1<unknown, GroupResource>;
82
+ /**
83
+ * Creates a Valibot validator for JWT Assertion Claims (workload identity)
84
+ *
85
+ * @example
86
+ * ```typescript
87
+ * import { valibotValidators } from '@enterprisestandard/react-validators-valibot';
88
+ *
89
+ * const jwtClaims = valibotValidators.jwtAssertionClaims();
90
+ * ```
91
+ */
92
+ jwtAssertionClaims: () => StandardSchemaV1<unknown, JWTAssertionClaims>;
93
+ /**
94
+ * Creates a Valibot validator for workload token responses
95
+ *
96
+ * @example
97
+ * ```typescript
98
+ * import { valibotValidators } from '@enterprisestandard/react-validators-valibot';
99
+ *
100
+ * const workloadToken = valibotValidators.workloadTokenResponse();
101
+ * ```
102
+ */
103
+ workloadTokenResponse: () => StandardSchemaV1<unknown, WorkloadTokenResponse>;
104
+ /**
105
+ * Creates a Valibot validator for tenant creation requests
106
+ *
107
+ * @example
108
+ * ```typescript
109
+ * import { valibotValidators } from '@enterprisestandard/react-validators-valibot';
110
+ *
111
+ * const tenantRequest = valibotValidators.createTenantRequest();
112
+ * ```
113
+ */
114
+ createTenantRequest: () => StandardSchemaV1<unknown, CreateTenantRequest>;
115
+ /**
116
+ * Creates a Valibot validator for tenant creation responses
117
+ *
118
+ * @example
119
+ * ```typescript
120
+ * import { valibotValidators } from '@enterprisestandard/react-validators-valibot';
121
+ *
122
+ * const tenantResponse = valibotValidators.createTenantResponse();
123
+ * ```
124
+ */
125
+ createTenantResponse: () => StandardSchemaV1<unknown, CreateTenantResponse>;
105
126
  };
106
-
107
- export { createValibotValidators, valibotValidators };
127
+ /**
128
+ * Pre-built Valibot validators for Enterprise Standard
129
+ *
130
+ * These validators implement the StandardSchemaV1 interface and can be used
131
+ * directly in Enterprise Standard configuration
132
+ *
133
+ * @example
134
+ * ```typescript
135
+ * import { createValidators } from '@enterprisestandard/react-validators-valibot';
136
+ *
137
+ * const validators = createValidators();
138
+ *
139
+ * const es = await enterpriseStandard(appId, {
140
+ * validators: createValidators(),
141
+ * // ... other config
142
+ * });
143
+ * ```
144
+ */
145
+ declare function createValidators(): ESValidators;
146
+ export { valibotValidators, createValidators };
package/dist/index.js CHANGED
@@ -1,284 +1 @@
1
- // src/index.ts
2
- import * as v from "valibot";
3
- function createValibotValidators() {
4
- const oidcCallbackParamsSchema = v.object({
5
- code: v.string(),
6
- state: v.optional(v.string()),
7
- session_state: v.optional(v.string()),
8
- error: v.optional(v.string()),
9
- error_description: v.optional(v.string()),
10
- error_uri: v.optional(v.string()),
11
- iss: v.optional(v.string())
12
- });
13
- const idTokenClaimsSchema = v.looseObject({
14
- sub: v.optional(v.string()),
15
- iss: v.optional(v.string()),
16
- aud: v.optional(v.string()),
17
- exp: v.optional(v.number()),
18
- iat: v.optional(v.number()),
19
- sid: v.optional(v.string()),
20
- name: v.optional(v.string()),
21
- email: v.optional(v.pipe(v.string(), v.email())),
22
- preferred_username: v.optional(v.string()),
23
- picture: v.optional(v.pipe(v.string(), v.url()))
24
- });
25
- const tokenResponseSchema = v.object({
26
- access_token: v.string(),
27
- id_token: v.string(),
28
- refresh_token: v.optional(v.string()),
29
- token_type: v.string(),
30
- expires_in: v.optional(v.number()),
31
- scope: v.optional(v.string()),
32
- refresh_expires_in: v.optional(v.number()),
33
- session_state: v.optional(v.string()),
34
- expires: v.optional(v.string())
35
- });
36
- return {
37
- callbackParams: oidcCallbackParamsSchema,
38
- idTokenClaims: idTokenClaimsSchema,
39
- tokenResponse: tokenResponseSchema
40
- };
41
- }
42
- var valibotValidators = {
43
- /**
44
- * Creates a Valibot validator for OIDC callback parameters
45
- *
46
- * @example
47
- * ```typescript
48
- * import { valibotValidators } from '@enterprisestandard/react-validators-valibot';
49
- *
50
- * const callbackParams = valibotValidators.oidcCallbackParams();
51
- * ```
52
- */
53
- oidcCallbackParams: () => v.object({
54
- code: v.string(),
55
- state: v.optional(v.string()),
56
- session_state: v.optional(v.string()),
57
- error: v.optional(v.string()),
58
- error_description: v.optional(v.string()),
59
- error_uri: v.optional(v.string()),
60
- iss: v.optional(v.string())
61
- }),
62
- /**
63
- * Creates a Valibot validator for ID token claims
64
- * Use v.object() with looseObject to extend with custom claims
65
- *
66
- * @example Extending with custom claims
67
- * ```typescript
68
- * import { valibotValidators } from '@enterprisestandard/react-validators-valibot';
69
- * import * as v from 'valibot';
70
- *
71
- * const customClaimsSchema = v.looseObject({
72
- * ...(valibotValidators.idTokenClaims() as any).entries,
73
- * custom_claim: v.string(),
74
- * roles: v.array(v.string()),
75
- * });
76
- * ```
77
- */
78
- idTokenClaims: () => v.looseObject({
79
- sub: v.optional(v.string()),
80
- iss: v.optional(v.string()),
81
- aud: v.optional(v.string()),
82
- exp: v.optional(v.number()),
83
- iat: v.optional(v.number()),
84
- sid: v.optional(v.string()),
85
- name: v.optional(v.string()),
86
- email: v.optional(v.pipe(v.string(), v.email())),
87
- preferred_username: v.optional(v.string()),
88
- picture: v.optional(v.pipe(v.string(), v.url()))
89
- }),
90
- /**
91
- * Creates a Valibot validator for token responses from IdP
92
- *
93
- * @example
94
- * ```typescript
95
- * import { valibotValidators } from '@enterprisestandard/react-validators-valibot';
96
- *
97
- * const tokenResponse = valibotValidators.tokenResponse();
98
- * ```
99
- */
100
- tokenResponse: () => v.object({
101
- access_token: v.string(),
102
- id_token: v.string(),
103
- refresh_token: v.optional(v.string()),
104
- token_type: v.string(),
105
- expires_in: v.optional(v.number()),
106
- scope: v.optional(v.string()),
107
- refresh_expires_in: v.optional(v.number()),
108
- session_state: v.optional(v.string()),
109
- expires: v.optional(v.string())
110
- }),
111
- /**
112
- * Creates a Valibot validator for SCIM User resources
113
- * Use v.object() to extend with custom SCIM extensions
114
- *
115
- * @example
116
- * ```typescript
117
- * import { valibotValidators } from '@enterprisestandard/react-validators-valibot';
118
- *
119
- * const userValidator = valibotValidators.scimUser();
120
- * ```
121
- *
122
- * @example Extending with custom SCIM schema extensions
123
- * ```typescript
124
- * import { valibotValidators } from '@enterprisestandard/react-validators-valibot';
125
- * import * as v from 'valibot';
126
- *
127
- * const customUserSchema = v.object({
128
- * ...(valibotValidators.scimUser() as any).entries,
129
- * 'urn:ietf:params:scim:schemas:extension:custom:2.0:User': v.object({
130
- * customField: v.string(),
131
- * }),
132
- * });
133
- * ```
134
- */
135
- scimUser: () => {
136
- const nameSchema = v.object({
137
- formatted: v.optional(v.string()),
138
- familyName: v.optional(v.string()),
139
- givenName: v.optional(v.string()),
140
- middleName: v.optional(v.string()),
141
- honorificPrefix: v.optional(v.string()),
142
- honorificSuffix: v.optional(v.string())
143
- });
144
- const emailSchema = v.object({
145
- value: v.pipe(v.string(), v.email()),
146
- display: v.optional(v.string()),
147
- type: v.optional(v.string()),
148
- primary: v.optional(v.boolean())
149
- });
150
- const phoneNumberSchema = v.object({
151
- value: v.string(),
152
- display: v.optional(v.string()),
153
- type: v.optional(v.string()),
154
- primary: v.optional(v.boolean())
155
- });
156
- const addressSchema = v.object({
157
- formatted: v.optional(v.string()),
158
- streetAddress: v.optional(v.string()),
159
- locality: v.optional(v.string()),
160
- region: v.optional(v.string()),
161
- postalCode: v.optional(v.string()),
162
- country: v.optional(v.string()),
163
- type: v.optional(v.string()),
164
- primary: v.optional(v.boolean())
165
- });
166
- const groupSchema = v.object({
167
- value: v.string(),
168
- $ref: v.optional(v.string()),
169
- display: v.optional(v.string()),
170
- type: v.optional(v.string())
171
- });
172
- const roleSchema = v.object({
173
- value: v.string(),
174
- display: v.optional(v.string()),
175
- type: v.optional(v.string()),
176
- primary: v.optional(v.boolean())
177
- });
178
- const enterpriseUserSchema = v.object({
179
- employeeNumber: v.optional(v.string()),
180
- costCenter: v.optional(v.string()),
181
- organization: v.optional(v.string()),
182
- division: v.optional(v.string()),
183
- department: v.optional(v.string()),
184
- manager: v.optional(
185
- v.object({
186
- value: v.optional(v.string()),
187
- $ref: v.optional(v.string()),
188
- displayName: v.optional(v.string())
189
- })
190
- )
191
- });
192
- return v.object({
193
- id: v.optional(v.string()),
194
- externalId: v.optional(v.string()),
195
- meta: v.optional(
196
- v.object({
197
- resourceType: v.optional(v.string()),
198
- created: v.optional(v.string()),
199
- lastModified: v.optional(v.string()),
200
- location: v.optional(v.string()),
201
- version: v.optional(v.string())
202
- })
203
- ),
204
- userName: v.string(),
205
- name: v.optional(nameSchema),
206
- displayName: v.optional(v.string()),
207
- nickName: v.optional(v.string()),
208
- profileUrl: v.optional(v.pipe(v.string(), v.url())),
209
- title: v.optional(v.string()),
210
- userType: v.optional(v.string()),
211
- preferredLanguage: v.optional(v.string()),
212
- locale: v.optional(v.string()),
213
- timezone: v.optional(v.string()),
214
- active: v.optional(v.boolean()),
215
- password: v.optional(v.string()),
216
- emails: v.optional(v.array(emailSchema)),
217
- phoneNumbers: v.optional(v.array(phoneNumberSchema)),
218
- ims: v.optional(
219
- v.array(
220
- v.object({
221
- value: v.string(),
222
- display: v.optional(v.string()),
223
- type: v.optional(v.string()),
224
- primary: v.optional(v.boolean())
225
- })
226
- )
227
- ),
228
- photos: v.optional(
229
- v.array(
230
- v.object({
231
- value: v.string(),
232
- display: v.optional(v.string()),
233
- type: v.optional(v.string()),
234
- primary: v.optional(v.boolean())
235
- })
236
- )
237
- ),
238
- addresses: v.optional(v.array(addressSchema)),
239
- groups: v.optional(v.array(groupSchema)),
240
- entitlements: v.optional(
241
- v.array(
242
- v.object({
243
- value: v.string(),
244
- display: v.optional(v.string()),
245
- type: v.optional(v.string()),
246
- primary: v.optional(v.boolean())
247
- })
248
- )
249
- ),
250
- roles: v.optional(v.array(roleSchema)),
251
- x509Certificates: v.optional(
252
- v.array(
253
- v.object({
254
- value: v.string(),
255
- display: v.optional(v.string()),
256
- type: v.optional(v.string()),
257
- primary: v.optional(v.boolean())
258
- })
259
- )
260
- ),
261
- "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User": v.optional(enterpriseUserSchema),
262
- schemas: v.optional(v.array(v.string()))
263
- });
264
- },
265
- /**
266
- * Creates a Valibot validator for tenant creation responses
267
- *
268
- * @example
269
- * ```typescript
270
- * import { valibotValidators } from '@enterprisestandard/react-validators-valibot';
271
- *
272
- * const tenantResponse = valibotValidators.createTenantResponse();
273
- * ```
274
- */
275
- createTenantResponse: () => v.object({
276
- tenantUrl: v.pipe(v.string(), v.url()),
277
- status: v.picklist(["pending", "processing", "completed", "failed"])
278
- })
279
- };
280
- export {
281
- createValibotValidators,
282
- valibotValidators
283
- };
284
- //# sourceMappingURL=index.js.map
1
+ import*as j from"valibot";var k={oidcCallbackParams:()=>j.object({code:j.string(),state:j.optional(j.string()),session_state:j.optional(j.string()),error:j.optional(j.string()),error_description:j.optional(j.string()),error_uri:j.optional(j.string()),iss:j.optional(j.string())}),idTokenClaims:()=>j.looseObject({sub:j.optional(j.string()),iss:j.optional(j.string()),aud:j.optional(j.string()),exp:j.optional(j.number()),iat:j.optional(j.number()),sid:j.optional(j.string()),name:j.optional(j.string()),email:j.optional(j.pipe(j.string(),j.email())),preferred_username:j.optional(j.string()),picture:j.optional(j.pipe(j.string(),j.url()))}),tokenResponse:()=>j.object({access_token:j.string(),id_token:j.string(),refresh_token:j.optional(j.string()),token_type:j.string(),expires_in:j.optional(j.number()),scope:j.optional(j.string()),refresh_expires_in:j.optional(j.number()),session_state:j.optional(j.string()),expires:j.optional(j.string())}),scimUser:()=>{let q=j.object({formatted:j.optional(j.string()),familyName:j.optional(j.string()),givenName:j.optional(j.string()),middleName:j.optional(j.string()),honorificPrefix:j.optional(j.string()),honorificSuffix:j.optional(j.string())}),z=j.object({value:j.pipe(j.string(),j.email()),display:j.optional(j.string()),type:j.optional(j.string()),primary:j.optional(j.boolean())}),A=j.object({value:j.string(),display:j.optional(j.string()),type:j.optional(j.string()),primary:j.optional(j.boolean())}),B=j.object({formatted:j.optional(j.string()),streetAddress:j.optional(j.string()),locality:j.optional(j.string()),region:j.optional(j.string()),postalCode:j.optional(j.string()),country:j.optional(j.string()),type:j.optional(j.string()),primary:j.optional(j.boolean())}),C=j.object({value:j.string(),$ref:j.optional(j.string()),display:j.optional(j.string()),type:j.optional(j.string())}),D=j.object({value:j.string(),display:j.optional(j.string()),type:j.optional(j.string()),primary:j.optional(j.boolean())}),F=j.object({employeeNumber:j.optional(j.string()),costCenter:j.optional(j.string()),organization:j.optional(j.string()),division:j.optional(j.string()),department:j.optional(j.string()),manager:j.optional(j.object({value:j.optional(j.string()),$ref:j.optional(j.string()),displayName:j.optional(j.string())}))});return j.object({id:j.optional(j.string()),externalId:j.optional(j.string()),meta:j.optional(j.object({resourceType:j.optional(j.string()),created:j.optional(j.string()),lastModified:j.optional(j.string()),location:j.optional(j.string()),version:j.optional(j.string())})),userName:j.string(),name:j.optional(q),displayName:j.optional(j.string()),nickName:j.optional(j.string()),profileUrl:j.optional(j.pipe(j.string(),j.url())),title:j.optional(j.string()),userType:j.optional(j.string()),preferredLanguage:j.optional(j.string()),locale:j.optional(j.string()),timezone:j.optional(j.string()),active:j.optional(j.boolean()),password:j.optional(j.string()),emails:j.optional(j.array(z)),phoneNumbers:j.optional(j.array(A)),ims:j.optional(j.array(j.object({value:j.string(),display:j.optional(j.string()),type:j.optional(j.string()),primary:j.optional(j.boolean())}))),photos:j.optional(j.array(j.object({value:j.string(),display:j.optional(j.string()),type:j.optional(j.string()),primary:j.optional(j.boolean())}))),addresses:j.optional(j.array(B)),groups:j.optional(j.array(C)),entitlements:j.optional(j.array(j.object({value:j.string(),display:j.optional(j.string()),type:j.optional(j.string()),primary:j.optional(j.boolean())}))),roles:j.optional(j.array(D)),x509Certificates:j.optional(j.array(j.object({value:j.string(),display:j.optional(j.string()),type:j.optional(j.string()),primary:j.optional(j.boolean())}))),"urn:ietf:params:scim:schemas:extension:enterprise:2.0:User":j.optional(F),schemas:j.optional(j.array(j.string()))})},scimGroup:()=>{let q=j.object({value:j.string(),$ref:j.optional(j.string()),display:j.optional(j.string()),type:j.optional(j.picklist(["User","Group"]))});return j.object({id:j.optional(j.string()),externalId:j.optional(j.string()),meta:j.optional(j.object({resourceType:j.optional(j.string()),created:j.optional(j.string()),lastModified:j.optional(j.string()),location:j.optional(j.string()),version:j.optional(j.string())})),displayName:j.string(),members:j.optional(j.array(q)),schemas:j.optional(j.array(j.string()))})},jwtAssertionClaims:()=>j.looseObject({iss:j.string(),sub:j.string(),aud:j.optional(j.union([j.string(),j.array(j.string())])),exp:j.number(),iat:j.number(),jti:j.optional(j.string()),scope:j.optional(j.string())}),workloadTokenResponse:()=>j.object({access_token:j.string(),token_type:j.string(),expires_in:j.optional(j.number()),scope:j.optional(j.string()),refresh_token:j.optional(j.string()),expires:j.optional(j.string())}),createTenantRequest:()=>j.object({appId:j.string(),companyId:j.string(),companyName:j.string(),environmentType:j.picklist(["POC","DEV","QA","PROD"]),email:j.pipe(j.string(),j.email()),webhookUrl:j.pipe(j.string(),j.url()),tenantUrl:j.string()}),createTenantResponse:()=>j.object({tenantUrl:j.pipe(j.string(),j.url()),status:j.picklist(["pending","processing","completed","failed"])})};function G(){return{sso:{callbackParams:k.oidcCallbackParams(),idTokenClaims:k.idTokenClaims(),tokenResponse:k.tokenResponse()},iam:{user:k.scimUser(),group:k.scimGroup()},workload:{jwtAssertionClaims:k.jwtAssertionClaims(),tokenResponse:k.workloadTokenResponse()},tenant:{createTenantRequest:k.createTenantRequest()}}}export{k as valibotValidators,G as createValidators};
package/package.json CHANGED
@@ -1,39 +1,30 @@
1
1
  {
2
2
  "name": "@enterprisestandard/react-validators-valibot",
3
- "version": "0.0.5-beta.20260115.4",
3
+ "version": "0.0.6",
4
4
  "description": "Valibot validators for @enterprisestandard/react SSO/OIDC flows",
5
5
  "type": "module",
6
- "main": "./dist/index.js",
7
- "module": "./dist/index.js",
8
- "types": "./dist/index.d.ts",
9
- "exports": {
10
- ".": {
11
- "import": "./dist/index.js",
12
- "types": "./dist/index.d.ts"
13
- }
14
- },
15
- "files": [
16
- "dist"
17
- ],
18
- "scripts": {},
19
- "keywords": [
20
- "enterprisestandard",
21
- "oidc",
22
- "oauth",
23
- "sso",
24
- "validation",
25
- "valibot",
26
- "standardschema"
27
- ],
28
6
  "author": "Enterprise Standard",
29
7
  "license": "Proprietary",
30
- "peerDependencies": {
31
- "@enterprisestandard/react": "^0.0.5",
32
- "valibot": "^1.0.0 || ^0.30.0"
8
+ "dependencies": {
9
+ "@enterprisestandard/core": "workspace:*",
10
+ "valibot": "^1.2.0"
33
11
  },
34
12
  "devDependencies": {
35
- "@enterprisestandard/react": "workspace:*",
36
- "typescript": "^5.7.3",
37
- "valibot": "^1.2.0"
13
+ "typescript": "^5.7.3"
14
+ },
15
+ "files": [
16
+ "dist"
17
+ ],
18
+ "module": "./dist/index.js",
19
+ "types": "./dist/index.d.ts",
20
+ "exports": {
21
+ ".": {
22
+ "import": {
23
+ "types": "./dist/index.d.ts",
24
+ "default": "./dist/index.js"
25
+ }
26
+ },
27
+ "./styles.css": "./dist/index.css",
28
+ "./package.json": "./package.json"
38
29
  }
39
30
  }
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import type {\n CreateTenantResponse,\n IdTokenClaims,\n OidcCallbackParams,\n ScimUser,\n StandardSchemaV1,\n TokenResponse,\n} from '@enterprisestandard/react';\nimport * as v from 'valibot';\n\n/**\n * Pre-built Valibot validators for OIDC/SSO flows\n *\n * These validators implement the StandardSchemaV1 interface and can be used\n * directly in SSOHandlerConfig.validation\n *\n * @example\n * ```typescript\n * import { createValibotValidators } from '@enterprisestandard/react-validators-valibot';\n *\n * const validators = createValibotValidators();\n *\n * const ssoConfig: SSOHandlerConfig = {\n * loginUrl: '/api/auth/login',\n * validation: validators,\n * };\n * ```\n */\nexport function createValibotValidators() {\n const oidcCallbackParamsSchema = v.object({\n code: v.string(),\n state: v.optional(v.string()),\n session_state: v.optional(v.string()),\n error: v.optional(v.string()),\n error_description: v.optional(v.string()),\n error_uri: v.optional(v.string()),\n iss: v.optional(v.string()),\n });\n\n const idTokenClaimsSchema = v.looseObject({\n sub: v.optional(v.string()),\n iss: v.optional(v.string()),\n aud: v.optional(v.string()),\n exp: v.optional(v.number()),\n iat: v.optional(v.number()),\n sid: v.optional(v.string()),\n name: v.optional(v.string()),\n email: v.optional(v.pipe(v.string(), v.email())),\n preferred_username: v.optional(v.string()),\n picture: v.optional(v.pipe(v.string(), v.url())),\n });\n\n const tokenResponseSchema = v.object({\n access_token: v.string(),\n id_token: v.string(),\n refresh_token: v.optional(v.string()),\n token_type: v.string(),\n expires_in: v.optional(v.number()),\n scope: v.optional(v.string()),\n refresh_expires_in: v.optional(v.number()),\n session_state: v.optional(v.string()),\n expires: v.optional(v.string()),\n });\n\n return {\n callbackParams: oidcCallbackParamsSchema as unknown as StandardSchemaV1<unknown, OidcCallbackParams>,\n idTokenClaims: idTokenClaimsSchema as unknown as StandardSchemaV1<unknown, IdTokenClaims>,\n tokenResponse: tokenResponseSchema as unknown as StandardSchemaV1<unknown, TokenResponse>,\n };\n}\n\n/**\n * Individual Valibot schema factories for custom usage\n */\nexport const valibotValidators = {\n /**\n * Creates a Valibot validator for OIDC callback parameters\n *\n * @example\n * ```typescript\n * import { valibotValidators } from '@enterprisestandard/react-validators-valibot';\n *\n * const callbackParams = valibotValidators.oidcCallbackParams();\n * ```\n */\n oidcCallbackParams: () =>\n v.object({\n code: v.string(),\n state: v.optional(v.string()),\n session_state: v.optional(v.string()),\n error: v.optional(v.string()),\n error_description: v.optional(v.string()),\n error_uri: v.optional(v.string()),\n iss: v.optional(v.string()),\n }) as unknown as StandardSchemaV1<unknown, OidcCallbackParams>,\n\n /**\n * Creates a Valibot validator for ID token claims\n * Use v.object() with looseObject to extend with custom claims\n *\n * @example Extending with custom claims\n * ```typescript\n * import { valibotValidators } from '@enterprisestandard/react-validators-valibot';\n * import * as v from 'valibot';\n *\n * const customClaimsSchema = v.looseObject({\n * ...(valibotValidators.idTokenClaims() as any).entries,\n * custom_claim: v.string(),\n * roles: v.array(v.string()),\n * });\n * ```\n */\n idTokenClaims: () =>\n v.looseObject({\n sub: v.optional(v.string()),\n iss: v.optional(v.string()),\n aud: v.optional(v.string()),\n exp: v.optional(v.number()),\n iat: v.optional(v.number()),\n sid: v.optional(v.string()),\n name: v.optional(v.string()),\n email: v.optional(v.pipe(v.string(), v.email())),\n preferred_username: v.optional(v.string()),\n picture: v.optional(v.pipe(v.string(), v.url())),\n }) as unknown as StandardSchemaV1<unknown, IdTokenClaims>,\n\n /**\n * Creates a Valibot validator for token responses from IdP\n *\n * @example\n * ```typescript\n * import { valibotValidators } from '@enterprisestandard/react-validators-valibot';\n *\n * const tokenResponse = valibotValidators.tokenResponse();\n * ```\n */\n tokenResponse: () =>\n v.object({\n access_token: v.string(),\n id_token: v.string(),\n refresh_token: v.optional(v.string()),\n token_type: v.string(),\n expires_in: v.optional(v.number()),\n scope: v.optional(v.string()),\n refresh_expires_in: v.optional(v.number()),\n session_state: v.optional(v.string()),\n expires: v.optional(v.string()),\n }) as unknown as StandardSchemaV1<unknown, TokenResponse>,\n\n /**\n * Creates a Valibot validator for SCIM User resources\n * Use v.object() to extend with custom SCIM extensions\n *\n * @example\n * ```typescript\n * import { valibotValidators } from '@enterprisestandard/react-validators-valibot';\n *\n * const userValidator = valibotValidators.scimUser();\n * ```\n *\n * @example Extending with custom SCIM schema extensions\n * ```typescript\n * import { valibotValidators } from '@enterprisestandard/react-validators-valibot';\n * import * as v from 'valibot';\n *\n * const customUserSchema = v.object({\n * ...(valibotValidators.scimUser() as any).entries,\n * 'urn:ietf:params:scim:schemas:extension:custom:2.0:User': v.object({\n * customField: v.string(),\n * }),\n * });\n * ```\n */\n scimUser: () => {\n const nameSchema = v.object({\n formatted: v.optional(v.string()),\n familyName: v.optional(v.string()),\n givenName: v.optional(v.string()),\n middleName: v.optional(v.string()),\n honorificPrefix: v.optional(v.string()),\n honorificSuffix: v.optional(v.string()),\n });\n\n const emailSchema = v.object({\n value: v.pipe(v.string(), v.email()),\n display: v.optional(v.string()),\n type: v.optional(v.string()),\n primary: v.optional(v.boolean()),\n });\n\n const phoneNumberSchema = v.object({\n value: v.string(),\n display: v.optional(v.string()),\n type: v.optional(v.string()),\n primary: v.optional(v.boolean()),\n });\n\n const addressSchema = v.object({\n formatted: v.optional(v.string()),\n streetAddress: v.optional(v.string()),\n locality: v.optional(v.string()),\n region: v.optional(v.string()),\n postalCode: v.optional(v.string()),\n country: v.optional(v.string()),\n type: v.optional(v.string()),\n primary: v.optional(v.boolean()),\n });\n\n const groupSchema = v.object({\n value: v.string(),\n $ref: v.optional(v.string()),\n display: v.optional(v.string()),\n type: v.optional(v.string()),\n });\n\n const roleSchema = v.object({\n value: v.string(),\n display: v.optional(v.string()),\n type: v.optional(v.string()),\n primary: v.optional(v.boolean()),\n });\n\n const enterpriseUserSchema = v.object({\n employeeNumber: v.optional(v.string()),\n costCenter: v.optional(v.string()),\n organization: v.optional(v.string()),\n division: v.optional(v.string()),\n department: v.optional(v.string()),\n manager: v.optional(\n v.object({\n value: v.optional(v.string()),\n $ref: v.optional(v.string()),\n displayName: v.optional(v.string()),\n }),\n ),\n });\n\n return v.object({\n id: v.optional(v.string()),\n externalId: v.optional(v.string()),\n meta: v.optional(\n v.object({\n resourceType: v.optional(v.string()),\n created: v.optional(v.string()),\n lastModified: v.optional(v.string()),\n location: v.optional(v.string()),\n version: v.optional(v.string()),\n }),\n ),\n userName: v.string(),\n name: v.optional(nameSchema),\n displayName: v.optional(v.string()),\n nickName: v.optional(v.string()),\n profileUrl: v.optional(v.pipe(v.string(), v.url())),\n title: v.optional(v.string()),\n userType: v.optional(v.string()),\n preferredLanguage: v.optional(v.string()),\n locale: v.optional(v.string()),\n timezone: v.optional(v.string()),\n active: v.optional(v.boolean()),\n password: v.optional(v.string()),\n emails: v.optional(v.array(emailSchema)),\n phoneNumbers: v.optional(v.array(phoneNumberSchema)),\n ims: v.optional(\n v.array(\n v.object({\n value: v.string(),\n display: v.optional(v.string()),\n type: v.optional(v.string()),\n primary: v.optional(v.boolean()),\n }),\n ),\n ),\n photos: v.optional(\n v.array(\n v.object({\n value: v.string(),\n display: v.optional(v.string()),\n type: v.optional(v.string()),\n primary: v.optional(v.boolean()),\n }),\n ),\n ),\n addresses: v.optional(v.array(addressSchema)),\n groups: v.optional(v.array(groupSchema)),\n entitlements: v.optional(\n v.array(\n v.object({\n value: v.string(),\n display: v.optional(v.string()),\n type: v.optional(v.string()),\n primary: v.optional(v.boolean()),\n }),\n ),\n ),\n roles: v.optional(v.array(roleSchema)),\n x509Certificates: v.optional(\n v.array(\n v.object({\n value: v.string(),\n display: v.optional(v.string()),\n type: v.optional(v.string()),\n primary: v.optional(v.boolean()),\n }),\n ),\n ),\n 'urn:ietf:params:scim:schemas:extension:enterprise:2.0:User': v.optional(enterpriseUserSchema),\n schemas: v.optional(v.array(v.string())),\n }) as unknown as StandardSchemaV1<unknown, ScimUser>;\n },\n\n /**\n * Creates a Valibot validator for tenant creation responses\n *\n * @example\n * ```typescript\n * import { valibotValidators } from '@enterprisestandard/react-validators-valibot';\n *\n * const tenantResponse = valibotValidators.createTenantResponse();\n * ```\n */\n createTenantResponse: () =>\n v.object({\n tenantUrl: v.pipe(v.string(), v.url()),\n status: v.picklist(['pending', 'processing', 'completed', 'failed']),\n }) as unknown as StandardSchemaV1<unknown, CreateTenantResponse>,\n};\n"],"mappings":";AAQA,YAAY,OAAO;AAoBZ,SAAS,0BAA0B;AACxC,QAAM,2BAA6B,SAAO;AAAA,IACxC,MAAQ,SAAO;AAAA,IACf,OAAS,WAAW,SAAO,CAAC;AAAA,IAC5B,eAAiB,WAAW,SAAO,CAAC;AAAA,IACpC,OAAS,WAAW,SAAO,CAAC;AAAA,IAC5B,mBAAqB,WAAW,SAAO,CAAC;AAAA,IACxC,WAAa,WAAW,SAAO,CAAC;AAAA,IAChC,KAAO,WAAW,SAAO,CAAC;AAAA,EAC5B,CAAC;AAED,QAAM,sBAAwB,cAAY;AAAA,IACxC,KAAO,WAAW,SAAO,CAAC;AAAA,IAC1B,KAAO,WAAW,SAAO,CAAC;AAAA,IAC1B,KAAO,WAAW,SAAO,CAAC;AAAA,IAC1B,KAAO,WAAW,SAAO,CAAC;AAAA,IAC1B,KAAO,WAAW,SAAO,CAAC;AAAA,IAC1B,KAAO,WAAW,SAAO,CAAC;AAAA,IAC1B,MAAQ,WAAW,SAAO,CAAC;AAAA,IAC3B,OAAS,WAAW,OAAO,SAAO,GAAK,QAAM,CAAC,CAAC;AAAA,IAC/C,oBAAsB,WAAW,SAAO,CAAC;AAAA,IACzC,SAAW,WAAW,OAAO,SAAO,GAAK,MAAI,CAAC,CAAC;AAAA,EACjD,CAAC;AAED,QAAM,sBAAwB,SAAO;AAAA,IACnC,cAAgB,SAAO;AAAA,IACvB,UAAY,SAAO;AAAA,IACnB,eAAiB,WAAW,SAAO,CAAC;AAAA,IACpC,YAAc,SAAO;AAAA,IACrB,YAAc,WAAW,SAAO,CAAC;AAAA,IACjC,OAAS,WAAW,SAAO,CAAC;AAAA,IAC5B,oBAAsB,WAAW,SAAO,CAAC;AAAA,IACzC,eAAiB,WAAW,SAAO,CAAC;AAAA,IACpC,SAAW,WAAW,SAAO,CAAC;AAAA,EAChC,CAAC;AAED,SAAO;AAAA,IACL,gBAAgB;AAAA,IAChB,eAAe;AAAA,IACf,eAAe;AAAA,EACjB;AACF;AAKO,IAAM,oBAAoB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAW/B,oBAAoB,MAChB,SAAO;AAAA,IACP,MAAQ,SAAO;AAAA,IACf,OAAS,WAAW,SAAO,CAAC;AAAA,IAC5B,eAAiB,WAAW,SAAO,CAAC;AAAA,IACpC,OAAS,WAAW,SAAO,CAAC;AAAA,IAC5B,mBAAqB,WAAW,SAAO,CAAC;AAAA,IACxC,WAAa,WAAW,SAAO,CAAC;AAAA,IAChC,KAAO,WAAW,SAAO,CAAC;AAAA,EAC5B,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAkBH,eAAe,MACX,cAAY;AAAA,IACZ,KAAO,WAAW,SAAO,CAAC;AAAA,IAC1B,KAAO,WAAW,SAAO,CAAC;AAAA,IAC1B,KAAO,WAAW,SAAO,CAAC;AAAA,IAC1B,KAAO,WAAW,SAAO,CAAC;AAAA,IAC1B,KAAO,WAAW,SAAO,CAAC;AAAA,IAC1B,KAAO,WAAW,SAAO,CAAC;AAAA,IAC1B,MAAQ,WAAW,SAAO,CAAC;AAAA,IAC3B,OAAS,WAAW,OAAO,SAAO,GAAK,QAAM,CAAC,CAAC;AAAA,IAC/C,oBAAsB,WAAW,SAAO,CAAC;AAAA,IACzC,SAAW,WAAW,OAAO,SAAO,GAAK,MAAI,CAAC,CAAC;AAAA,EACjD,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYH,eAAe,MACX,SAAO;AAAA,IACP,cAAgB,SAAO;AAAA,IACvB,UAAY,SAAO;AAAA,IACnB,eAAiB,WAAW,SAAO,CAAC;AAAA,IACpC,YAAc,SAAO;AAAA,IACrB,YAAc,WAAW,SAAO,CAAC;AAAA,IACjC,OAAS,WAAW,SAAO,CAAC;AAAA,IAC5B,oBAAsB,WAAW,SAAO,CAAC;AAAA,IACzC,eAAiB,WAAW,SAAO,CAAC;AAAA,IACpC,SAAW,WAAW,SAAO,CAAC;AAAA,EAChC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA0BH,UAAU,MAAM;AACd,UAAM,aAAe,SAAO;AAAA,MAC1B,WAAa,WAAW,SAAO,CAAC;AAAA,MAChC,YAAc,WAAW,SAAO,CAAC;AAAA,MACjC,WAAa,WAAW,SAAO,CAAC;AAAA,MAChC,YAAc,WAAW,SAAO,CAAC;AAAA,MACjC,iBAAmB,WAAW,SAAO,CAAC;AAAA,MACtC,iBAAmB,WAAW,SAAO,CAAC;AAAA,IACxC,CAAC;AAED,UAAM,cAAgB,SAAO;AAAA,MAC3B,OAAS,OAAO,SAAO,GAAK,QAAM,CAAC;AAAA,MACnC,SAAW,WAAW,SAAO,CAAC;AAAA,MAC9B,MAAQ,WAAW,SAAO,CAAC;AAAA,MAC3B,SAAW,WAAW,UAAQ,CAAC;AAAA,IACjC,CAAC;AAED,UAAM,oBAAsB,SAAO;AAAA,MACjC,OAAS,SAAO;AAAA,MAChB,SAAW,WAAW,SAAO,CAAC;AAAA,MAC9B,MAAQ,WAAW,SAAO,CAAC;AAAA,MAC3B,SAAW,WAAW,UAAQ,CAAC;AAAA,IACjC,CAAC;AAED,UAAM,gBAAkB,SAAO;AAAA,MAC7B,WAAa,WAAW,SAAO,CAAC;AAAA,MAChC,eAAiB,WAAW,SAAO,CAAC;AAAA,MACpC,UAAY,WAAW,SAAO,CAAC;AAAA,MAC/B,QAAU,WAAW,SAAO,CAAC;AAAA,MAC7B,YAAc,WAAW,SAAO,CAAC;AAAA,MACjC,SAAW,WAAW,SAAO,CAAC;AAAA,MAC9B,MAAQ,WAAW,SAAO,CAAC;AAAA,MAC3B,SAAW,WAAW,UAAQ,CAAC;AAAA,IACjC,CAAC;AAED,UAAM,cAAgB,SAAO;AAAA,MAC3B,OAAS,SAAO;AAAA,MAChB,MAAQ,WAAW,SAAO,CAAC;AAAA,MAC3B,SAAW,WAAW,SAAO,CAAC;AAAA,MAC9B,MAAQ,WAAW,SAAO,CAAC;AAAA,IAC7B,CAAC;AAED,UAAM,aAAe,SAAO;AAAA,MAC1B,OAAS,SAAO;AAAA,MAChB,SAAW,WAAW,SAAO,CAAC;AAAA,MAC9B,MAAQ,WAAW,SAAO,CAAC;AAAA,MAC3B,SAAW,WAAW,UAAQ,CAAC;AAAA,IACjC,CAAC;AAED,UAAM,uBAAyB,SAAO;AAAA,MACpC,gBAAkB,WAAW,SAAO,CAAC;AAAA,MACrC,YAAc,WAAW,SAAO,CAAC;AAAA,MACjC,cAAgB,WAAW,SAAO,CAAC;AAAA,MACnC,UAAY,WAAW,SAAO,CAAC;AAAA,MAC/B,YAAc,WAAW,SAAO,CAAC;AAAA,MACjC,SAAW;AAAA,QACP,SAAO;AAAA,UACP,OAAS,WAAW,SAAO,CAAC;AAAA,UAC5B,MAAQ,WAAW,SAAO,CAAC;AAAA,UAC3B,aAAe,WAAW,SAAO,CAAC;AAAA,QACpC,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AAED,WAAS,SAAO;AAAA,MACd,IAAM,WAAW,SAAO,CAAC;AAAA,MACzB,YAAc,WAAW,SAAO,CAAC;AAAA,MACjC,MAAQ;AAAA,QACJ,SAAO;AAAA,UACP,cAAgB,WAAW,SAAO,CAAC;AAAA,UACnC,SAAW,WAAW,SAAO,CAAC;AAAA,UAC9B,cAAgB,WAAW,SAAO,CAAC;AAAA,UACnC,UAAY,WAAW,SAAO,CAAC;AAAA,UAC/B,SAAW,WAAW,SAAO,CAAC;AAAA,QAChC,CAAC;AAAA,MACH;AAAA,MACA,UAAY,SAAO;AAAA,MACnB,MAAQ,WAAS,UAAU;AAAA,MAC3B,aAAe,WAAW,SAAO,CAAC;AAAA,MAClC,UAAY,WAAW,SAAO,CAAC;AAAA,MAC/B,YAAc,WAAW,OAAO,SAAO,GAAK,MAAI,CAAC,CAAC;AAAA,MAClD,OAAS,WAAW,SAAO,CAAC;AAAA,MAC5B,UAAY,WAAW,SAAO,CAAC;AAAA,MAC/B,mBAAqB,WAAW,SAAO,CAAC;AAAA,MACxC,QAAU,WAAW,SAAO,CAAC;AAAA,MAC7B,UAAY,WAAW,SAAO,CAAC;AAAA,MAC/B,QAAU,WAAW,UAAQ,CAAC;AAAA,MAC9B,UAAY,WAAW,SAAO,CAAC;AAAA,MAC/B,QAAU,WAAW,QAAM,WAAW,CAAC;AAAA,MACvC,cAAgB,WAAW,QAAM,iBAAiB,CAAC;AAAA,MACnD,KAAO;AAAA,QACH;AAAA,UACE,SAAO;AAAA,YACP,OAAS,SAAO;AAAA,YAChB,SAAW,WAAW,SAAO,CAAC;AAAA,YAC9B,MAAQ,WAAW,SAAO,CAAC;AAAA,YAC3B,SAAW,WAAW,UAAQ,CAAC;AAAA,UACjC,CAAC;AAAA,QACH;AAAA,MACF;AAAA,MACA,QAAU;AAAA,QACN;AAAA,UACE,SAAO;AAAA,YACP,OAAS,SAAO;AAAA,YAChB,SAAW,WAAW,SAAO,CAAC;AAAA,YAC9B,MAAQ,WAAW,SAAO,CAAC;AAAA,YAC3B,SAAW,WAAW,UAAQ,CAAC;AAAA,UACjC,CAAC;AAAA,QACH;AAAA,MACF;AAAA,MACA,WAAa,WAAW,QAAM,aAAa,CAAC;AAAA,MAC5C,QAAU,WAAW,QAAM,WAAW,CAAC;AAAA,MACvC,cAAgB;AAAA,QACZ;AAAA,UACE,SAAO;AAAA,YACP,OAAS,SAAO;AAAA,YAChB,SAAW,WAAW,SAAO,CAAC;AAAA,YAC9B,MAAQ,WAAW,SAAO,CAAC;AAAA,YAC3B,SAAW,WAAW,UAAQ,CAAC;AAAA,UACjC,CAAC;AAAA,QACH;AAAA,MACF;AAAA,MACA,OAAS,WAAW,QAAM,UAAU,CAAC;AAAA,MACrC,kBAAoB;AAAA,QAChB;AAAA,UACE,SAAO;AAAA,YACP,OAAS,SAAO;AAAA,YAChB,SAAW,WAAW,SAAO,CAAC;AAAA,YAC9B,MAAQ,WAAW,SAAO,CAAC;AAAA,YAC3B,SAAW,WAAW,UAAQ,CAAC;AAAA,UACjC,CAAC;AAAA,QACH;AAAA,MACF;AAAA,MACA,8DAAgE,WAAS,oBAAoB;AAAA,MAC7F,SAAW,WAAW,QAAQ,SAAO,CAAC,CAAC;AAAA,IACzC,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,sBAAsB,MAClB,SAAO;AAAA,IACP,WAAa,OAAO,SAAO,GAAK,MAAI,CAAC;AAAA,IACrC,QAAU,WAAS,CAAC,WAAW,cAAc,aAAa,QAAQ,CAAC;AAAA,EACrE,CAAC;AACL;","names":[]}