@od-oneapp/storage 2026.1.1301

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.
Files changed (69) hide show
  1. package/README.md +854 -0
  2. package/dist/client-next.d.mts +61 -0
  3. package/dist/client-next.d.mts.map +1 -0
  4. package/dist/client-next.mjs +111 -0
  5. package/dist/client-next.mjs.map +1 -0
  6. package/dist/client-utils-Dx6W25iz.d.mts +43 -0
  7. package/dist/client-utils-Dx6W25iz.d.mts.map +1 -0
  8. package/dist/client.d.mts +28 -0
  9. package/dist/client.d.mts.map +1 -0
  10. package/dist/client.mjs +183 -0
  11. package/dist/client.mjs.map +1 -0
  12. package/dist/env-BVHLmQdh.mjs +128 -0
  13. package/dist/env-BVHLmQdh.mjs.map +1 -0
  14. package/dist/env.mjs +3 -0
  15. package/dist/health-check-D7LnnDec.mjs +746 -0
  16. package/dist/health-check-D7LnnDec.mjs.map +1 -0
  17. package/dist/health-check-im_huJ59.d.mts +116 -0
  18. package/dist/health-check-im_huJ59.d.mts.map +1 -0
  19. package/dist/index.d.mts +60 -0
  20. package/dist/index.d.mts.map +1 -0
  21. package/dist/index.mjs +3 -0
  22. package/dist/keys.d.mts +37 -0
  23. package/dist/keys.d.mts.map +1 -0
  24. package/dist/keys.mjs +253 -0
  25. package/dist/keys.mjs.map +1 -0
  26. package/dist/server-edge.d.mts +28 -0
  27. package/dist/server-edge.d.mts.map +1 -0
  28. package/dist/server-edge.mjs +88 -0
  29. package/dist/server-edge.mjs.map +1 -0
  30. package/dist/server-next.d.mts +183 -0
  31. package/dist/server-next.d.mts.map +1 -0
  32. package/dist/server-next.mjs +1353 -0
  33. package/dist/server-next.mjs.map +1 -0
  34. package/dist/server.d.mts +70 -0
  35. package/dist/server.d.mts.map +1 -0
  36. package/dist/server.mjs +384 -0
  37. package/dist/server.mjs.map +1 -0
  38. package/dist/types.d.mts +321 -0
  39. package/dist/types.d.mts.map +1 -0
  40. package/dist/types.mjs +3 -0
  41. package/dist/validation.d.mts +101 -0
  42. package/dist/validation.d.mts.map +1 -0
  43. package/dist/validation.mjs +590 -0
  44. package/dist/validation.mjs.map +1 -0
  45. package/dist/vercel-blob-07Sx0Akn.d.mts +31 -0
  46. package/dist/vercel-blob-07Sx0Akn.d.mts.map +1 -0
  47. package/dist/vercel-blob-DA8HaYuw.mjs +158 -0
  48. package/dist/vercel-blob-DA8HaYuw.mjs.map +1 -0
  49. package/package.json +111 -0
  50. package/src/actions/blob-upload.ts +171 -0
  51. package/src/actions/index.ts +23 -0
  52. package/src/actions/mediaActions.ts +1071 -0
  53. package/src/actions/productMediaActions.ts +538 -0
  54. package/src/auth-helpers.ts +386 -0
  55. package/src/capabilities.ts +225 -0
  56. package/src/client-next.ts +184 -0
  57. package/src/client-utils.ts +292 -0
  58. package/src/client.ts +102 -0
  59. package/src/constants.ts +88 -0
  60. package/src/health-check.ts +81 -0
  61. package/src/multi-storage.ts +230 -0
  62. package/src/multipart.ts +497 -0
  63. package/src/retry-utils.test.ts +118 -0
  64. package/src/retry-utils.ts +59 -0
  65. package/src/server-edge.ts +129 -0
  66. package/src/server-next.ts +14 -0
  67. package/src/server.ts +666 -0
  68. package/src/validation.test.ts +312 -0
  69. package/src/validation.ts +827 -0
@@ -0,0 +1,321 @@
1
+ import { QuotaInfo, StorageErrorCode, ValidationOptions } from "./validation.mjs";
2
+
3
+ //#region types.d.ts
4
+ interface ListOptions {
5
+ cursor?: string;
6
+ limit?: number;
7
+ prefix?: string;
8
+ }
9
+ interface R2Credentials {
10
+ accessKeyId: string;
11
+ accountId: string;
12
+ bucket: string;
13
+ secretAccessKey: string;
14
+ name?: string;
15
+ }
16
+ interface EnhancedR2Credentials extends R2Credentials {
17
+ customDomain?: string;
18
+ defaultPartSize?: number;
19
+ defaultQueueSize?: number;
20
+ }
21
+ interface StorageConfig {
22
+ cloudflareR2?: EnhancedR2Credentials | EnhancedR2Credentials[];
23
+ cloudflareImages?: {
24
+ accountId: string;
25
+ apiToken: string;
26
+ signingKey?: string;
27
+ deliveryUrl?: string;
28
+ };
29
+ provider: StorageProviderType;
30
+ vercelBlob?: {
31
+ token: string;
32
+ };
33
+ }
34
+ interface MultiStorageConfig {
35
+ providers: {
36
+ [key: string]: StorageConfig;
37
+ };
38
+ defaultProvider?: string;
39
+ routing?: {
40
+ images?: string;
41
+ documents?: string;
42
+ [key: string]: string | undefined;
43
+ };
44
+ }
45
+ interface StorageObject {
46
+ access?: 'public' | 'private';
47
+ contentType?: string;
48
+ etag?: string;
49
+ key: string;
50
+ lastModified?: Date;
51
+ size: number;
52
+ downloadUrl?: string;
53
+ url: string;
54
+ metadata?: Record<string, any>;
55
+ }
56
+ interface StorageProvider {
57
+ delete(key: string): Promise<void>;
58
+ download(key: string): Promise<Blob>;
59
+ exists(key: string): Promise<boolean>;
60
+ getMetadata(key: string): Promise<StorageObject>;
61
+ getUrl(key: string, options?: {
62
+ expiresIn?: number;
63
+ }): Promise<string>;
64
+ list(options?: ListOptions): Promise<StorageObject[]>;
65
+ upload(key: string, data: ArrayBuffer | Blob | Buffer | File | ReadableStream, options?: UploadOptions): Promise<StorageObject>;
66
+ createMultipartUpload?(key: string, options?: UploadOptions): Promise<{
67
+ uploadId: string;
68
+ key: string;
69
+ }>;
70
+ uploadPart?(uploadId: string, partNumber: number, data: ArrayBuffer | Blob | Buffer, options?: UploadOptions): Promise<{
71
+ etag: string;
72
+ partNumber: number;
73
+ }>;
74
+ completeMultipartUpload?(uploadId: string, parts: Array<{
75
+ etag: string;
76
+ partNumber: number;
77
+ }>): Promise<StorageObject>;
78
+ abortMultipartUpload?(uploadId: string): Promise<void>;
79
+ getPresignedUploadUrl?(key: string, options?: {
80
+ expiresIn?: number;
81
+ contentType?: string;
82
+ }): Promise<PresignedUploadUrl>;
83
+ getCapabilities?(): StorageCapabilities;
84
+ }
85
+ type StorageProviderType = 'cloudflare-r2' | 'cloudflare-images' | 'vercel-blob' | 'multi';
86
+ interface UploadOptions {
87
+ public?: boolean;
88
+ cacheControlMaxAge?: number;
89
+ contentType?: string;
90
+ metadata?: Record<string, string>;
91
+ addRandomSuffix?: boolean;
92
+ allowOverwrite?: boolean;
93
+ multipart?: boolean;
94
+ abortSignal?: AbortSignal;
95
+ clientPayload?: string;
96
+ requireSignedURLs?: boolean;
97
+ variants?: string[];
98
+ id?: string;
99
+ fileName?: string;
100
+ expiresAfter?: string;
101
+ partSize?: number;
102
+ queueSize?: number;
103
+ leavePartsOnError?: boolean;
104
+ onProgress?: (progress: UploadProgress) => void;
105
+ provider?: string;
106
+ }
107
+ interface ClientUploadOptions {
108
+ handleUploadUrl?: string;
109
+ onProgress?: (progress: UploadProgress) => void;
110
+ onError?: (error: Error) => void;
111
+ }
112
+ interface OnBeforeGenerateTokenResult {
113
+ allowed: boolean;
114
+ token?: string;
115
+ allowedContentTypes?: string[];
116
+ maximumSizeInBytes?: number;
117
+ tokenPayload?: string;
118
+ }
119
+ interface HandleUploadConfig {
120
+ onBeforeGenerateToken?: (pathname: string, clientPayload?: string) => Promise<OnBeforeGenerateTokenResult>;
121
+ onUploadCompleted?: (blob: {
122
+ url: string;
123
+ pathname: string;
124
+ contentType?: string;
125
+ contentDisposition?: string;
126
+ size: number;
127
+ }, clientPayload?: string) => Promise<void>;
128
+ }
129
+ interface UploadProgress {
130
+ loaded: number;
131
+ total: number;
132
+ part?: number;
133
+ key: string;
134
+ percentage?: number;
135
+ }
136
+ interface StreamUploadOptions extends UploadOptions {
137
+ highWaterMark?: number;
138
+ }
139
+ interface MultipartUploadResult extends StorageObject {
140
+ uploadId?: string;
141
+ etag?: string;
142
+ parts?: Array<{
143
+ partNumber: number;
144
+ etag: string;
145
+ }>;
146
+ }
147
+ interface CloudflareImagesVariant {
148
+ id: string;
149
+ options: {
150
+ fit?: 'scale-down' | 'contain' | 'cover' | 'crop' | 'pad';
151
+ width?: number;
152
+ height?: number;
153
+ quality?: number;
154
+ format?: 'auto' | 'avif' | 'webp' | 'json' | 'jpeg' | 'png';
155
+ metadata?: 'keep' | 'copyright' | 'none';
156
+ background?: string;
157
+ rotate?: 0 | 90 | 180 | 270 | 360;
158
+ sharpen?: number;
159
+ blur?: number;
160
+ brightness?: number;
161
+ contrast?: number;
162
+ gamma?: number;
163
+ gravity?: 'auto' | 'left' | 'right' | 'top' | 'bottom' | 'center' | {
164
+ x?: number;
165
+ y?: number;
166
+ };
167
+ border?: {
168
+ color?: string;
169
+ width?: number;
170
+ };
171
+ compression?: 'fast' | 'balanced' | 'best';
172
+ dpr?: number;
173
+ onerror?: 'redirect';
174
+ trim?: {
175
+ top?: number;
176
+ right?: number;
177
+ bottom?: number;
178
+ left?: number;
179
+ };
180
+ anim?: boolean;
181
+ };
182
+ neverRequireSignedURLs?: boolean;
183
+ }
184
+ interface DirectUploadResponse {
185
+ uploadURL: string;
186
+ id: string;
187
+ }
188
+ interface CloudflareImagesBatchToken {
189
+ token: string;
190
+ expiresAt: string;
191
+ }
192
+ interface CloudflareImagesSigningKey {
193
+ name: string;
194
+ value: string;
195
+ }
196
+ interface CloudflareImagesListOptions extends ListOptions {
197
+ perPage?: number;
198
+ page?: number;
199
+ sortOrder?: 'asc' | 'desc';
200
+ }
201
+ interface CloudflareImagesStats {
202
+ count: {
203
+ current: number;
204
+ allowed: number;
205
+ };
206
+ }
207
+ interface CloudflareImagesTransformOptions {
208
+ width?: number;
209
+ height?: number;
210
+ fit?: 'scale-down' | 'contain' | 'cover' | 'crop' | 'pad';
211
+ gravity?: 'auto' | 'left' | 'right' | 'top' | 'bottom' | 'center' | {
212
+ x?: number;
213
+ y?: number;
214
+ };
215
+ quality?: number;
216
+ format?: 'auto' | 'avif' | 'webp' | 'json' | 'jpeg' | 'png';
217
+ anim?: boolean;
218
+ background?: string;
219
+ blur?: number;
220
+ border?: {
221
+ color?: string;
222
+ width?: number;
223
+ };
224
+ brightness?: number;
225
+ compression?: 'fast' | 'balanced' | 'best';
226
+ contrast?: number;
227
+ dpr?: number;
228
+ gamma?: number;
229
+ metadata?: 'keep' | 'copyright' | 'none';
230
+ onerror?: 'redirect';
231
+ rotate?: 0 | 90 | 180 | 270 | 360;
232
+ sharpen?: number;
233
+ trim?: {
234
+ top?: number;
235
+ right?: number;
236
+ bottom?: number;
237
+ left?: number;
238
+ };
239
+ }
240
+ interface MediaActionResponse<T = void> {
241
+ success: boolean;
242
+ data?: T;
243
+ error?: string;
244
+ }
245
+ interface BulkDeleteResponse {
246
+ succeeded: string[];
247
+ failed: Array<{
248
+ key: string;
249
+ error: string;
250
+ }>;
251
+ }
252
+ interface BulkMoveResponse {
253
+ succeeded: Array<{
254
+ sourceKey: string;
255
+ destinationKey: string;
256
+ }>;
257
+ failed: Array<{
258
+ sourceKey: string;
259
+ destinationKey: string;
260
+ error: string;
261
+ }>;
262
+ }
263
+ interface VercelBlobOptions {
264
+ access?: 'public' | 'private';
265
+ addRandomSuffix?: boolean;
266
+ allowOverwrite?: boolean;
267
+ cacheControlMaxAge?: number;
268
+ clientPayload?: string;
269
+ contentType?: string;
270
+ multipart?: boolean;
271
+ onUploadProgress?: (event: {
272
+ loaded: number;
273
+ total?: number;
274
+ percentage?: number;
275
+ }) => void;
276
+ token?: string;
277
+ }
278
+ interface PresignedUploadUrl {
279
+ url: string;
280
+ fields: Record<string, string>;
281
+ expiresAt: Date;
282
+ }
283
+ interface MultipartUploadOptions {
284
+ partSize?: number;
285
+ queueSize?: number;
286
+ leavePartsOnError?: boolean;
287
+ onProgress?: (event: {
288
+ key: string;
289
+ loaded: number;
290
+ total: number;
291
+ part: number;
292
+ percentage: number;
293
+ }) => void;
294
+ }
295
+ interface StorageCapabilities {
296
+ multipart: boolean;
297
+ presignedUrls: boolean;
298
+ progressTracking: boolean;
299
+ abortSignal: boolean;
300
+ metadata: boolean;
301
+ customDomains: boolean;
302
+ edgeCompatible: boolean;
303
+ versioning: boolean;
304
+ encryption: boolean;
305
+ directoryListing: boolean;
306
+ }
307
+ interface BlobListResponse {
308
+ blobs: Array<{
309
+ url: string;
310
+ pathname: string;
311
+ size: number;
312
+ uploadedAt: Date;
313
+ contentType?: string;
314
+ contentDisposition?: string;
315
+ }>;
316
+ hasMore: boolean;
317
+ cursor?: string;
318
+ }
319
+ //#endregion
320
+ export { BlobListResponse, BulkDeleteResponse, BulkMoveResponse, ClientUploadOptions, CloudflareImagesBatchToken, CloudflareImagesListOptions, CloudflareImagesSigningKey, CloudflareImagesStats, CloudflareImagesTransformOptions, CloudflareImagesVariant, DirectUploadResponse, EnhancedR2Credentials, HandleUploadConfig, ListOptions, MediaActionResponse, MultiStorageConfig, MultipartUploadOptions, MultipartUploadResult, OnBeforeGenerateTokenResult, PresignedUploadUrl, type QuotaInfo, R2Credentials, StorageCapabilities, StorageConfig, StorageErrorCode, StorageObject, StorageProvider, StorageProviderType, StreamUploadOptions, UploadOptions, UploadProgress, type ValidationOptions, VercelBlobOptions };
321
+ //# sourceMappingURL=types.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.mts","names":[],"sources":["../types.ts"],"mappings":"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"}
package/dist/types.mjs ADDED
@@ -0,0 +1,3 @@
1
+ import { StorageErrorCode } from "./validation.mjs";
2
+
3
+ export { StorageErrorCode };
@@ -0,0 +1,101 @@
1
+ import { validateStorageKey } from "./keys.mjs";
2
+
3
+ //#region src/validation.d.ts
4
+ declare enum StorageErrorCode {
5
+ INVALID_KEY = "INVALID_KEY",
6
+ INVALID_FILE_SIZE = "INVALID_FILE_SIZE",
7
+ INVALID_MIME_TYPE = "INVALID_MIME_TYPE",
8
+ INVALID_OPTIONS = "INVALID_OPTIONS",
9
+ PROVIDER_ERROR = "PROVIDER_ERROR",
10
+ PROVIDER_UNAVAILABLE = "PROVIDER_UNAVAILABLE",
11
+ PROVIDER_QUOTA_EXCEEDED = "PROVIDER_QUOTA_EXCEEDED",
12
+ NETWORK_ERROR = "NETWORK_ERROR",
13
+ TIMEOUT = "TIMEOUT",
14
+ CONNECTION_FAILED = "CONNECTION_FAILED",
15
+ UPLOAD_FAILED = "UPLOAD_FAILED",
16
+ UPLOAD_CANCELLED = "UPLOAD_CANCELLED",
17
+ UPLOAD_PARTIAL = "UPLOAD_PARTIAL",
18
+ DOWNLOAD_FAILED = "DOWNLOAD_FAILED",
19
+ FILE_NOT_FOUND = "FILE_NOT_FOUND",
20
+ ACCESS_DENIED = "ACCESS_DENIED",
21
+ CONFIG_ERROR = "CONFIG_ERROR",
22
+ MISSING_CREDENTIALS = "MISSING_CREDENTIALS",
23
+ INVALID_CONFIG = "INVALID_CONFIG"
24
+ }
25
+ declare class StorageError extends Error {
26
+ readonly code: StorageErrorCode;
27
+ readonly details?: Record<string, any>;
28
+ readonly retryable: boolean;
29
+ constructor(message: string, code: StorageErrorCode, details?: Record<string, any>, retryable?: boolean);
30
+ }
31
+ declare class ValidationError extends StorageError {
32
+ constructor(message: string, details?: Record<string, any>);
33
+ }
34
+ declare class ProviderError extends StorageError {
35
+ constructor(message: string, provider: string, details?: Record<string, any>, retryable?: boolean);
36
+ }
37
+ declare class NetworkError extends StorageError {
38
+ constructor(message: string, details?: Record<string, any>, retryable?: boolean);
39
+ }
40
+ declare class UploadError extends StorageError {
41
+ constructor(message: string, details?: Record<string, any>, retryable?: boolean);
42
+ }
43
+ declare class DownloadError extends StorageError {
44
+ constructor(message: string, details?: Record<string, any>, retryable?: boolean);
45
+ }
46
+ declare class ConfigError extends StorageError {
47
+ constructor(message: string, details?: Record<string, any>);
48
+ }
49
+ interface ValidationOptions {
50
+ maxFileSize?: number;
51
+ allowedMimeTypes?: string[];
52
+ allowedExtensions?: string[];
53
+ maxKeyLength?: number;
54
+ forbiddenKeyPatterns?: RegExp[];
55
+ requireContentType?: boolean;
56
+ }
57
+ interface QuotaInfo {
58
+ used: number;
59
+ limit: number;
60
+ remaining: number;
61
+ resetAt?: Date;
62
+ provider: string;
63
+ }
64
+ declare function validateFileSize(size: number, maxSize: number): {
65
+ valid: boolean;
66
+ error?: string;
67
+ };
68
+ declare function validateMimeType(mimeType: string, allowedTypes?: string[]): {
69
+ valid: boolean;
70
+ error?: string;
71
+ };
72
+ declare function validateFileExtension(filename: string, contentType: string): {
73
+ valid: boolean;
74
+ error?: string;
75
+ };
76
+ declare function validateUploadOptions(options: {
77
+ fileSize?: number;
78
+ contentType?: string;
79
+ key?: string;
80
+ }, validationOptions?: ValidationOptions): {
81
+ valid: boolean;
82
+ errors: string[];
83
+ };
84
+ declare function isRetryableError(error: unknown): boolean;
85
+ declare function getErrorCode(error: unknown): StorageErrorCode;
86
+ declare function createStorageError(error: unknown, context?: {
87
+ operation?: string;
88
+ provider?: string;
89
+ key?: string;
90
+ }): StorageError;
91
+ declare function getQuotaInfo(used: number, limit: number, provider: string): QuotaInfo;
92
+ declare function isQuotaExceeded(used: number, limit: number): boolean;
93
+ declare function formatFileSize(bytes: number): string;
94
+ declare function parseFileSize(sizeString: string): number;
95
+ declare function validateUrlForSSRF(url: string): {
96
+ valid: boolean;
97
+ error?: string;
98
+ };
99
+ //#endregion
100
+ export { ConfigError, DownloadError, NetworkError, ProviderError, QuotaInfo, StorageError, StorageErrorCode, UploadError, ValidationError, ValidationOptions, createStorageError, formatFileSize, getErrorCode, getQuotaInfo, isQuotaExceeded, isRetryableError, parseFileSize, validateFileExtension, validateFileSize, validateMimeType, validateStorageKey, validateUploadOptions, validateUrlForSSRF };
101
+ //# sourceMappingURL=validation.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.mts","names":[],"sources":["../src/validation.ts"],"mappings":";;;aAkBY,gBAAA;EAEV,WAAA;EACA,iBAAA;EACA,iBAAA;EACA,eAAA;EAGA,cAAA;EACA,oBAAA;EACA,uBAAA;EAGA,aAAA;EACA,OAAA;EACA,iBAAA;EAGA,aAAA;EACA,gBAAA;EACA,cAAA;EAGA,eAAA;EACA,cAAA;EACA,aAAA;EAGA,YAAA;EACA,mBAAA;EACA,cAAA;AAAA;AAAA,cAMW,YAAA,SAAqB,KAAA;EAAA,SAChB,IAAA,EAAM,gBAAA;EAAA,SACN,OAAA,GAAU,MAAA;EAAA,SACV,SAAA;cAGd,OAAA,UACA,IAAA,EAAM,gBAAA,EACN,OAAA,GAAU,MAAA,eACV,SAAA;AAAA;AAAA,cAaS,eAAA,SAAwB,YAAA;cACvB,OAAA,UAAiB,OAAA,GAAU,MAAA;AAAA;AAAA,cAS5B,aAAA,SAAsB,YAAA;cAE/B,OAAA,UACA,QAAA,UACA,OAAA,GAAU,MAAA,eACV,SAAA;AAAA;AAAA,cAUS,YAAA,SAAqB,YAAA;cACpB,OAAA,UAAiB,OAAA,GAAU,MAAA,eAAqB,SAAA;AAAA;AAAA,cASjD,WAAA,SAAoB,YAAA;cACnB,OAAA,UAAiB,OAAA,GAAU,MAAA,eAAqB,SAAA;AAAA;AAAA,cASjD,aAAA,SAAsB,YAAA;cACrB,OAAA,UAAiB,OAAA,GAAU,MAAA,eAAqB,SAAA;AAAA;AAAA,cASjD,WAAA,SAAoB,YAAA;cACnB,OAAA,UAAiB,OAAA,GAAU,MAAA;AAAA;AAAA,UASxB,iBAAA;EACf,WAAA;EACA,gBAAA;EACA,iBAAA;EACA,YAAA;EACA,oBAAA,GAAuB,MAAA;EACvB,kBAAA;AAAA;AAAA,UAMe,SAAA;EACf,IAAA;EACA,KAAA;EACA,SAAA;EACA,OAAA,GAAU,IAAA;EACV,QAAA;AAAA;AAAA,iBAUc,gBAAA,CACd,IAAA,UACA,OAAA;EACG,KAAA;EAAgB,KAAA;AAAA;AAAA,iBAyIL,gBAAA,CACd,QAAA,UACA,YAAA;EACG,KAAA;EAAgB,KAAA;AAAA;AAAA,iBAuEL,qBAAA,CACd,QAAA,UACA,WAAA;EACG,KAAA;EAAgB,KAAA;AAAA;AAAA,iBAwDL,qBAAA,CACd,OAAA;EACE,QAAA;EACA,WAAA;EACA,GAAA;AAAA,GAEF,iBAAA,GAAmB,iBAAA;EAChB,KAAA;EAAgB,MAAA;AAAA;AAAA,iBA2EL,gBAAA,CAAiB,KAAA;AAAA,iBA+CjB,YAAA,CAAa,KAAA,YAAiB,gBAAA;AAAA,iBA6C9B,kBAAA,CACd,KAAA,WACA,OAAA;EACE,SAAA;EACA,QAAA;EACA,GAAA;AAAA,IAED,YAAA;AAAA,iBA2Ba,YAAA,CAAa,IAAA,UAAc,KAAA,UAAe,QAAA,WAAmB,SAAA;AAAA,iBAiB7D,eAAA,CAAgB,IAAA,UAAc,KAAA;AAAA,iBAU9B,cAAA,CAAe,KAAA;AAAA,iBAgBf,aAAA,CAAc,UAAA;AAAA,iBAsGd,kBAAA,CAAmB,GAAA;EACjC,KAAA;EACA,KAAA;AAAA"}