@syncular/transport-http 0.0.6-185 → 0.0.6-201

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.js CHANGED
@@ -1,251 +1,30 @@
1
1
  /**
2
2
  * @syncular/transport-http - HTTP transport for Sync
3
3
  *
4
- * Provides typed API clients using openapi-fetch with auto-generated types.
5
- */
6
- import { resolveUrlFromBase, SyncTransportError } from '@syncular/core';
7
- import createClient from 'openapi-fetch';
8
- /**
9
- * Error thrown when unwrapping an API response fails.
10
- */
11
- class ApiResponseError extends Error {
12
- error;
13
- constructor(message, error) {
14
- super(message);
15
- this.error = error;
16
- this.name = 'ApiResponseError';
17
- }
18
- }
19
- /**
20
- * Helper to unwrap openapi-fetch responses.
21
- * Throws ApiResponseError if the response contains an error or no data.
22
- */
23
- function getErrorMessage(error) {
24
- if (error && typeof error === 'object' && 'error' in error) {
25
- const inner = error.error;
26
- if (typeof inner === 'string')
27
- return inner;
28
- }
29
- if (error && typeof error === 'object' && 'message' in error) {
30
- const msg = error.message;
31
- if (typeof msg === 'string')
32
- return msg;
33
- }
34
- return 'Request failed';
35
- }
36
- export async function unwrap(promise) {
37
- const { data, error } = await promise;
38
- if (error || !data) {
39
- throw new ApiResponseError(getErrorMessage(error), error);
40
- }
41
- return data;
42
- }
43
- async function executeWithAuthRetry(execute, options, operation, resolveAuthRetry) {
44
- const first = await execute(options?.signal);
45
- if (first.response.status !== 401 && first.response.status !== 403) {
46
- return first;
47
- }
48
- const shouldRetry = await resolveAuthRetry({ operation, status: first.response.status }, options);
49
- if (!shouldRetry) {
50
- return first;
51
- }
52
- return execute(options?.signal);
53
- }
54
- const SNAPSHOT_SCOPES_HEADER = 'x-syncular-snapshot-scopes';
55
- function resolveRequestUrl(baseUrl, path) {
56
- return resolveUrlFromBase(baseUrl, path, typeof location === 'undefined' ? undefined : location.origin);
57
- }
58
- function bytesToReadableStream(bytes) {
59
- return new ReadableStream({
60
- start(controller) {
61
- controller.enqueue(bytes);
62
- controller.close();
63
- },
64
- });
65
- }
66
- function encodeSnapshotScopes(scopeValues) {
67
- if (!scopeValues)
68
- return null;
69
- if (Object.keys(scopeValues).length === 0)
70
- return null;
71
- return JSON.stringify(scopeValues);
72
- }
73
- function applySnapshotScopesHeader(headers, scopeValues) {
74
- const encodedScopes = encodeSnapshotScopes(scopeValues);
75
- if (!encodedScopes)
76
- return;
77
- headers.set(SNAPSHOT_SCOPES_HEADER, encodedScopes);
78
- }
79
- function resolveSnapshotChunkRequestUrl(baseUrl, chunkId, scopeValues) {
80
- const requestUrl = new URL(resolveRequestUrl(baseUrl, `/sync/snapshot-chunks/${encodeURIComponent(chunkId)}`));
81
- const encodedScopes = encodeSnapshotScopes(scopeValues);
82
- if (encodedScopes) {
83
- requestUrl.searchParams.set('scopes', encodedScopes);
84
- }
85
- return requestUrl.toString();
86
- }
87
- /**
88
- * Create a typed API client for the full Syncular API.
89
- *
90
- * Returns an openapi-fetch client with full type safety for all endpoints.
91
- *
92
- * @example
93
- * ```typescript
94
- * const client = createApiClient({
95
- * baseUrl: 'https://api.example.com',
96
- * getHeaders: () => ({ Authorization: `Bearer ${token}` }),
97
- * });
98
- *
99
- * // Sync endpoints
100
- * const { data } = await client.POST('/sync', { body: { clientId: 'c1', pull: { ... } } });
101
- *
102
- * // Console endpoints
103
- * const { data: stats } = await client.GET('/console/stats');
104
- * const { data: commits } = await client.GET('/console/commits', {
105
- * params: { query: { limit: 50 } }
106
- * });
107
- * ```
108
- */
109
- export function createApiClient(options) {
110
- const client = createClient({
111
- baseUrl: options.baseUrl,
112
- ...(options.fetch && { fetch: options.fetch }),
113
- });
114
- const getHeaders = options.getHeaders;
115
- const transportPath = options.transportPath ?? 'direct';
116
- client.use({
117
- async onRequest({ request }) {
118
- if (getHeaders) {
119
- const headers = await getHeaders();
120
- for (const [key, value] of Object.entries(headers)) {
121
- request.headers.set(key, value);
122
- }
123
- }
124
- if (!request.headers.has('x-syncular-transport-path')) {
125
- request.headers.set('x-syncular-transport-path', transportPath);
126
- }
127
- return request;
128
- },
129
- });
130
- return client;
131
- }
132
- /**
133
- * Create a SyncTransport from an API client or options.
134
- *
135
- * The transport includes both sync and blob operations via the typed OpenAPI client.
136
- *
137
- * @example
138
- * ```typescript
139
- * // From options (convenience)
140
- * const transport = createHttpTransport({
141
- * baseUrl: 'https://api.example.com',
142
- * getHeaders: () => ({ Authorization: `Bearer ${token}` }),
143
- * });
144
- *
145
- * // Or from an existing client
146
- * const client = createApiClient({ baseUrl: 'https://api.example.com' });
147
- * const transport = createHttpTransport(client);
148
- *
149
- * // Use with Client
150
- * const syncClient = new Client({ transport, ... });
151
- * ```
4
+ * Provides:
5
+ * - a lightweight fetch-based SyncTransport for client runtime use
6
+ * - a separately exported typed API client for advanced/console use
152
7
  */
8
+ import { SyncTransportError } from '@syncular/core';
9
+ import { applySnapshotScopesHeader, bytesToReadableStream, executeWithAuthRetry, getErrorMessage, resolveSnapshotChunkRequestUrl, unwrap, } from './shared.js';
10
+ import { createTransportApiClient, createTransportAuthRetryResolver, HTTP_TRANSPORT_SOURCE, } from './transport-client.js';
11
+ export { unwrap };
12
+ export { createApiClient } from './api-client.js';
153
13
  export function createHttpTransport(clientOrOptions) {
154
- const client = 'GET' in clientOrOptions
155
- ? clientOrOptions
156
- : createApiClient(clientOrOptions);
157
- const transportOptions = 'GET' in clientOrOptions ? undefined : clientOrOptions;
158
- const defaultAuthLifecycle = transportOptions?.authLifecycle;
159
- let refreshInFlight = null;
160
- const runRefreshSingleFlight = async (lifecycle, context) => {
161
- if (!lifecycle.refreshToken)
162
- return false;
163
- if (!refreshInFlight) {
164
- refreshInFlight = Promise.resolve(lifecycle.refreshToken(context))
165
- .then((result) => Boolean(result))
166
- .finally(() => {
167
- refreshInFlight = null;
168
- });
169
- }
170
- return refreshInFlight;
171
- };
172
- const resolveAuthRetry = async (context, options) => {
173
- if (options?.onAuthError) {
174
- return Boolean(await options.onAuthError());
175
- }
176
- const lifecycle = options?.authLifecycle ?? defaultAuthLifecycle;
177
- if (!lifecycle)
178
- return false;
179
- await lifecycle.onAuthExpired?.(context);
180
- const refreshResult = await runRefreshSingleFlight(lifecycle, context);
181
- if (lifecycle.retryWithFreshToken) {
182
- return Boolean(await lifecycle.retryWithFreshToken({ ...context, refreshResult }));
183
- }
184
- return refreshResult;
185
- };
186
- // Create blob operations using the typed OpenAPI client
187
- const blobs = {
188
- async initiateUpload(args) {
189
- const { data, error, response } = await executeWithAuthRetry((signal) => client.POST('/sync/blobs/upload', {
190
- body: args,
191
- ...(signal ? { signal } : {}),
192
- }), undefined, 'blobInitiateUpload', resolveAuthRetry);
193
- if (error || !data) {
194
- throw new SyncTransportError(`Blob upload init failed: ${getErrorMessage(error) || response.statusText}`, response.status);
195
- }
196
- return data;
197
- },
198
- async completeUpload(hash) {
199
- const { data, error } = await executeWithAuthRetry((signal) => client.POST('/sync/blobs/{hash}/complete', {
200
- params: { path: { hash } },
201
- ...(signal ? { signal } : {}),
202
- }), undefined, 'blobCompleteUpload', resolveAuthRetry);
203
- if (error || !data) {
204
- return {
205
- ok: false,
206
- error: getErrorMessage(error) || 'Complete upload failed',
207
- };
208
- }
209
- return data;
210
- },
211
- async getDownloadUrl(hash) {
212
- const { data, error, response } = await executeWithAuthRetry((signal) => client.GET('/sync/blobs/{hash}/url', {
213
- params: { path: { hash } },
214
- ...(signal ? { signal } : {}),
215
- }), undefined, 'blobGetDownloadUrl', resolveAuthRetry);
216
- if (error || !data) {
217
- throw new SyncTransportError(`Get download URL failed: ${getErrorMessage(error) || response.statusText}`, response.status);
218
- }
219
- return {
220
- url: data.url,
221
- expiresAt: data.expiresAt,
222
- };
223
- },
224
- };
225
- return {
226
- async sync(request, transportOptions) {
227
- const { data, error, response } = await executeWithAuthRetry((signal) => client.POST('/sync', {
228
- body: request,
229
- ...(signal ? { signal } : {}),
230
- }), transportOptions, 'sync', resolveAuthRetry);
14
+ const client = createTransportApiClient(clientOrOptions);
15
+ const resolveAuthRetry = createTransportAuthRetryResolver(clientOrOptions);
16
+ const transportOptions = 'baseUrl' in clientOrOptions ? clientOrOptions : undefined;
17
+ const transport = {
18
+ async sync(request, transportRequestOptions) {
19
+ const { data, error, response } = await executeWithAuthRetry((signal) => client.sync(request, signal), transportRequestOptions, 'sync', resolveAuthRetry);
231
20
  if (error || !data) {
232
21
  throw new SyncTransportError(`Sync failed: ${getErrorMessage(error) || response.statusText}`, response.status);
233
22
  }
234
23
  return data;
235
24
  },
236
25
  async fetchSnapshotChunk(request, options) {
237
- const encodedScopes = encodeSnapshotScopes(request.scopeValues);
238
26
  if (!transportOptions) {
239
- const { data, error, response } = await executeWithAuthRetry((signal) => client.GET('/sync/snapshot-chunks/{chunkId}', {
240
- params: { path: { chunkId: request.chunkId } },
241
- parseAs: 'blob',
242
- headers: encodedScopes
243
- ? {
244
- [SNAPSHOT_SCOPES_HEADER]: encodedScopes,
245
- }
246
- : undefined,
247
- ...(signal ? { signal } : {}),
248
- }), options, 'snapshotChunk', resolveAuthRetry);
27
+ const { data, error, response } = await executeWithAuthRetry((signal) => client.getSnapshotChunk(request.chunkId, request.scopeValues, signal), options, 'snapshotChunk', resolveAuthRetry);
249
28
  if (error || !data) {
250
29
  throw new SyncTransportError(`Snapshot chunk download failed: ${getErrorMessage(error) || response.statusText}`, response.status);
251
30
  }
@@ -346,8 +125,13 @@ export function createHttpTransport(clientOrOptions) {
346
125
  }
347
126
  return response.body;
348
127
  },
349
- // Include blob operations
350
- blobs,
351
128
  };
129
+ Object.defineProperty(transport, HTTP_TRANSPORT_SOURCE, {
130
+ configurable: false,
131
+ enumerable: false,
132
+ value: clientOrOptions,
133
+ writable: false,
134
+ });
135
+ return transport;
352
136
  }
353
137
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import type { ScopeValues, SyncAuthErrorContext, SyncAuthLifecycle, SyncAuthOperation, SyncTransportOptions } from '@syncular/core';
2
+ export type SyncTransportPath = 'direct' | 'relay';
3
+ export interface ClientOptions {
4
+ /** Base URL for the API (e.g., 'https://api.example.com') */
5
+ baseUrl: string;
6
+ /** Function to get headers for requests (e.g., for auth tokens) */
7
+ getHeaders?: () => Record<string, string> | Promise<Record<string, string>>;
8
+ /** Shared auth lifecycle for all transport operations. */
9
+ authLifecycle?: SyncAuthLifecycle;
10
+ /** Custom fetch implementation (defaults to globalThis.fetch) */
11
+ fetch?: typeof globalThis.fetch;
12
+ /**
13
+ * Transport path telemetry sent to the server.
14
+ * Defaults to 'direct'.
15
+ */
16
+ transportPath?: SyncTransportPath;
17
+ }
18
+ export type ApiResult<T> = {
19
+ data?: T;
20
+ error?: unknown;
21
+ response: Response;
22
+ };
23
+ export type ResolveAuthRetry = (context: SyncAuthErrorContext, options?: SyncTransportOptions) => Promise<boolean>;
24
+ export declare function getErrorMessage(error: unknown): string;
25
+ export declare function unwrap<T>(promise: Promise<{
26
+ data?: T;
27
+ error?: unknown;
28
+ }>): Promise<T>;
29
+ export declare function executeWithAuthRetry<T>(execute: (signal?: AbortSignal) => Promise<ApiResult<T>>, options: SyncTransportOptions | undefined, operation: SyncAuthOperation, resolveAuthRetry: ResolveAuthRetry): Promise<ApiResult<T>>;
30
+ export declare const SNAPSHOT_SCOPES_HEADER = "x-syncular-snapshot-scopes";
31
+ export declare function resolveRequestUrl(baseUrl: string, path: string): string;
32
+ export declare function bytesToReadableStream(bytes: Uint8Array): ReadableStream<Uint8Array>;
33
+ export declare function encodeSnapshotScopes(scopeValues: ScopeValues | undefined): string | null;
34
+ export declare function applySnapshotScopesHeader(headers: Headers, scopeValues: ScopeValues | undefined): void;
35
+ export declare function resolveSnapshotChunkRequestUrl(baseUrl: string, chunkId: string, scopeValues: ScopeValues | undefined): string;
36
+ //# sourceMappingURL=shared.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../src/shared.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACrB,MAAM,gBAAgB,CAAC;AAGxB,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEnD,MAAM,WAAW,aAAa;IAC5B,6DAA6D;IAC7D,OAAO,EAAE,MAAM,CAAC;IAChB,mEAAmE;IACnE,UAAU,CAAC,EAAE,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC5E,0DAA0D;IAC1D,aAAa,CAAC,EAAE,iBAAiB,CAAC;IAClC,iEAAiE;IACjE,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;IAChC;;;OAGG;IACH,aAAa,CAAC,EAAE,iBAAiB,CAAC;CACnC;AAED,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI;IACzB,IAAI,CAAC,EAAE,CAAC,CAAC;IACT,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,QAAQ,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,CAC7B,OAAO,EAAE,oBAAoB,EAC7B,OAAO,CAAC,EAAE,oBAAoB,KAC3B,OAAO,CAAC,OAAO,CAAC,CAAC;AAYtB,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAUtD;AAED,wBAAsB,MAAM,CAAC,CAAC,EAC5B,OAAO,EAAE,OAAO,CAAC;IAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,GAC9C,OAAO,CAAC,CAAC,CAAC,CAMZ;AAED,wBAAsB,oBAAoB,CAAC,CAAC,EAC1C,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EACxD,OAAO,EAAE,oBAAoB,GAAG,SAAS,EACzC,SAAS,EAAE,iBAAiB,EAC5B,gBAAgB,EAAE,gBAAgB,GACjC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAcvB;AAED,eAAO,MAAM,sBAAsB,+BAA+B,CAAC;AAEnE,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAMvE;AAED,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,UAAU,GAChB,cAAc,CAAC,UAAU,CAAC,CAO5B;AAED,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,WAAW,GAAG,SAAS,GACnC,MAAM,GAAG,IAAI,CAIf;AAED,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,WAAW,GAAG,SAAS,GACnC,IAAI,CAIN;AAED,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,WAAW,GAAG,SAAS,GACnC,MAAM,CAYR"}
package/dist/shared.js ADDED
@@ -0,0 +1,74 @@
1
+ import { resolveUrlFromBase } from '@syncular/core';
2
+ class ApiResponseError extends Error {
3
+ error;
4
+ constructor(message, error) {
5
+ super(message);
6
+ this.error = error;
7
+ this.name = 'ApiResponseError';
8
+ }
9
+ }
10
+ export function getErrorMessage(error) {
11
+ if (error && typeof error === 'object' && 'error' in error) {
12
+ const inner = error.error;
13
+ if (typeof inner === 'string')
14
+ return inner;
15
+ }
16
+ if (error && typeof error === 'object' && 'message' in error) {
17
+ const msg = error.message;
18
+ if (typeof msg === 'string')
19
+ return msg;
20
+ }
21
+ return 'Request failed';
22
+ }
23
+ export async function unwrap(promise) {
24
+ const { data, error } = await promise;
25
+ if (error || !data) {
26
+ throw new ApiResponseError(getErrorMessage(error), error);
27
+ }
28
+ return data;
29
+ }
30
+ export async function executeWithAuthRetry(execute, options, operation, resolveAuthRetry) {
31
+ const first = await execute(options?.signal);
32
+ if (first.response.status !== 401 && first.response.status !== 403) {
33
+ return first;
34
+ }
35
+ const shouldRetry = await resolveAuthRetry({ operation, status: first.response.status }, options);
36
+ if (!shouldRetry) {
37
+ return first;
38
+ }
39
+ return execute(options?.signal);
40
+ }
41
+ export const SNAPSHOT_SCOPES_HEADER = 'x-syncular-snapshot-scopes';
42
+ export function resolveRequestUrl(baseUrl, path) {
43
+ return resolveUrlFromBase(baseUrl, path, typeof location === 'undefined' ? undefined : location.origin);
44
+ }
45
+ export function bytesToReadableStream(bytes) {
46
+ return new ReadableStream({
47
+ start(controller) {
48
+ controller.enqueue(bytes);
49
+ controller.close();
50
+ },
51
+ });
52
+ }
53
+ export function encodeSnapshotScopes(scopeValues) {
54
+ if (!scopeValues)
55
+ return null;
56
+ if (Object.keys(scopeValues).length === 0)
57
+ return null;
58
+ return JSON.stringify(scopeValues);
59
+ }
60
+ export function applySnapshotScopesHeader(headers, scopeValues) {
61
+ const encodedScopes = encodeSnapshotScopes(scopeValues);
62
+ if (!encodedScopes)
63
+ return;
64
+ headers.set(SNAPSHOT_SCOPES_HEADER, encodedScopes);
65
+ }
66
+ export function resolveSnapshotChunkRequestUrl(baseUrl, chunkId, scopeValues) {
67
+ const requestUrl = new URL(resolveRequestUrl(baseUrl, `/sync/snapshot-chunks/${encodeURIComponent(chunkId)}`));
68
+ const encodedScopes = encodeSnapshotScopes(scopeValues);
69
+ if (encodedScopes) {
70
+ requestUrl.searchParams.set('scopes', encodedScopes);
71
+ }
72
+ return requestUrl.toString();
73
+ }
74
+ //# sourceMappingURL=shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../src/shared.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ import type { SyncCombinedRequest, SyncCombinedResponse } from '@syncular/core';
2
+ import type { SyncClient } from './api-client';
3
+ import { type ApiResult, type ClientOptions, type ResolveAuthRetry } from './shared';
4
+ export type { ClientOptions };
5
+ export declare const HTTP_TRANSPORT_SOURCE: unique symbol;
6
+ export type HttpTransportSource = SyncClient | ClientOptions;
7
+ interface TransportApiClient {
8
+ sync(request: SyncCombinedRequest, signal?: AbortSignal): Promise<ApiResult<SyncCombinedResponse>>;
9
+ initiateUpload(args: {
10
+ hash: string;
11
+ size: number;
12
+ mimeType: string;
13
+ }, signal?: AbortSignal): Promise<ApiResult<{
14
+ exists: boolean;
15
+ uploadUrl?: string;
16
+ uploadMethod?: 'PUT' | 'POST';
17
+ uploadHeaders?: Record<string, string>;
18
+ }>>;
19
+ completeUpload(hash: string, signal?: AbortSignal): Promise<ApiResult<{
20
+ ok: boolean;
21
+ error?: string;
22
+ }>>;
23
+ getDownloadUrl(hash: string, signal?: AbortSignal): Promise<ApiResult<{
24
+ url: string;
25
+ expiresAt: string;
26
+ }>>;
27
+ getSnapshotChunk(chunkId: string, scopeValues: Record<string, string | string[]> | undefined, signal?: AbortSignal): Promise<ApiResult<Blob>>;
28
+ }
29
+ export declare function createTransportApiClient(source: HttpTransportSource): TransportApiClient;
30
+ export declare function createTransportAuthRetryResolver(source: HttpTransportSource): ResolveAuthRetry;
31
+ //# sourceMappingURL=transport-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport-client.d.ts","sourceRoot":"","sources":["../src/transport-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,mBAAmB,EACnB,oBAAoB,EACrB,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EACL,KAAK,SAAS,EACd,KAAK,aAAa,EAElB,KAAK,gBAAgB,EAGtB,MAAM,UAAU,CAAC;AAElB,YAAY,EAAE,aAAa,EAAE,CAAC;AAE9B,eAAO,MAAM,qBAAqB,eAEjC,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,UAAU,GAAG,aAAa,CAAC;AAW7D,UAAU,kBAAkB;IAC1B,IAAI,CACF,OAAO,EAAE,mBAAmB,EAC5B,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC,CAAC;IAC5C,cAAc,CACZ,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,EACtD,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CACR,SAAS,CAAC;QACR,MAAM,EAAE,OAAO,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,YAAY,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;QAC9B,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACxC,CAAC,CACH,CAAC;IACF,cAAc,CACZ,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,SAAS,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;IACvD,cAAc,CACZ,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,SAAS,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;IAC1D,gBAAgB,CACd,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC,GAAG,SAAS,EAC1D,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;CAC7B;AAsOD,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,mBAAmB,GAC1B,kBAAkB,CAIpB;AAED,wBAAgB,gCAAgC,CAC9C,MAAM,EAAE,mBAAmB,GAC1B,gBAAgB,CAIlB"}