@chatlychat/react-native 0.0.0-stage → 0.1.0

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 (114) hide show
  1. package/README.md +208 -2
  2. package/dist/ChatlyProvider.d.ts +69 -0
  3. package/dist/ChatlyProvider.d.ts.map +1 -0
  4. package/dist/ChatlyProvider.js +146 -0
  5. package/dist/ChatlyProvider.js.map +1 -0
  6. package/dist/ChatlyWidget.d.ts +15 -0
  7. package/dist/ChatlyWidget.d.ts.map +1 -0
  8. package/dist/ChatlyWidget.js +122 -0
  9. package/dist/ChatlyWidget.js.map +1 -0
  10. package/dist/blocks/money.d.ts +56 -0
  11. package/dist/blocks/money.d.ts.map +1 -0
  12. package/dist/blocks/money.js +82 -0
  13. package/dist/blocks/money.js.map +1 -0
  14. package/dist/blocks/money.parity.spec.d.ts +2 -0
  15. package/dist/blocks/money.parity.spec.d.ts.map +1 -0
  16. package/dist/blocks/money.parity.spec.js +87 -0
  17. package/dist/blocks/money.parity.spec.js.map +1 -0
  18. package/dist/blocks/read-envelope.d.ts +15 -0
  19. package/dist/blocks/read-envelope.d.ts.map +1 -0
  20. package/dist/blocks/read-envelope.js +196 -0
  21. package/dist/blocks/read-envelope.js.map +1 -0
  22. package/dist/blocks/read-envelope.parity.spec.d.ts +2 -0
  23. package/dist/blocks/read-envelope.parity.spec.d.ts.map +1 -0
  24. package/dist/blocks/read-envelope.parity.spec.js +146 -0
  25. package/dist/blocks/read-envelope.parity.spec.js.map +1 -0
  26. package/dist/blocks/types.d.ts +171 -0
  27. package/dist/blocks/types.d.ts.map +1 -0
  28. package/dist/blocks/types.js +3 -0
  29. package/dist/blocks/types.js.map +1 -0
  30. package/dist/client/RealtimeClient.d.ts +29 -0
  31. package/dist/client/RealtimeClient.d.ts.map +1 -0
  32. package/dist/client/RealtimeClient.js +113 -0
  33. package/dist/client/RealtimeClient.js.map +1 -0
  34. package/dist/client/RealtimeClient.spec.d.ts +2 -0
  35. package/dist/client/RealtimeClient.spec.d.ts.map +1 -0
  36. package/dist/client/RealtimeClient.spec.js +123 -0
  37. package/dist/client/RealtimeClient.spec.js.map +1 -0
  38. package/dist/client/RestClient.d.ts +160 -0
  39. package/dist/client/RestClient.d.ts.map +1 -0
  40. package/dist/client/RestClient.js +395 -0
  41. package/dist/client/RestClient.js.map +1 -0
  42. package/dist/client/RestClient.spec.d.ts +2 -0
  43. package/dist/client/RestClient.spec.d.ts.map +1 -0
  44. package/dist/client/RestClient.spec.js +267 -0
  45. package/dist/client/RestClient.spec.js.map +1 -0
  46. package/dist/client/types.d.ts +148 -0
  47. package/dist/client/types.d.ts.map +1 -0
  48. package/dist/client/types.js +14 -0
  49. package/dist/client/types.js.map +1 -0
  50. package/dist/components/Composer.d.ts +35 -0
  51. package/dist/components/Composer.d.ts.map +1 -0
  52. package/dist/components/Composer.js +180 -0
  53. package/dist/components/Composer.js.map +1 -0
  54. package/dist/components/HelpCenter.d.ts +13 -0
  55. package/dist/components/HelpCenter.d.ts.map +1 -0
  56. package/dist/components/HelpCenter.js +96 -0
  57. package/dist/components/HelpCenter.js.map +1 -0
  58. package/dist/components/MessageBlocks.d.ts +41 -0
  59. package/dist/components/MessageBlocks.d.ts.map +1 -0
  60. package/dist/components/MessageBlocks.js +167 -0
  61. package/dist/components/MessageBlocks.js.map +1 -0
  62. package/dist/components/MessageBubble.d.ts +14 -0
  63. package/dist/components/MessageBubble.d.ts.map +1 -0
  64. package/dist/components/MessageBubble.js +87 -0
  65. package/dist/components/MessageBubble.js.map +1 -0
  66. package/dist/components/MessageBubble.spec.d.ts +2 -0
  67. package/dist/components/MessageBubble.spec.d.ts.map +1 -0
  68. package/dist/components/MessageBubble.spec.js +207 -0
  69. package/dist/components/MessageBubble.spec.js.map +1 -0
  70. package/dist/components/MessageCanvas.d.ts +39 -0
  71. package/dist/components/MessageCanvas.d.ts.map +1 -0
  72. package/dist/components/MessageCanvas.js +144 -0
  73. package/dist/components/MessageCanvas.js.map +1 -0
  74. package/dist/components/MessageCanvas.spec.d.ts +2 -0
  75. package/dist/components/MessageCanvas.spec.d.ts.map +1 -0
  76. package/dist/components/MessageCanvas.spec.js +142 -0
  77. package/dist/components/MessageCanvas.spec.js.map +1 -0
  78. package/dist/components/MessagesList.d.ts +8 -0
  79. package/dist/components/MessagesList.d.ts.map +1 -0
  80. package/dist/components/MessagesList.js +58 -0
  81. package/dist/components/MessagesList.js.map +1 -0
  82. package/dist/index.d.ts +48 -0
  83. package/dist/index.d.ts.map +1 -0
  84. package/dist/index.js +35 -0
  85. package/dist/index.js.map +1 -0
  86. package/dist/push/registerPushToken.d.ts +12 -0
  87. package/dist/push/registerPushToken.d.ts.map +1 -0
  88. package/dist/push/registerPushToken.js +32 -0
  89. package/dist/push/registerPushToken.js.map +1 -0
  90. package/dist/storage/TokenStore.d.ts +53 -0
  91. package/dist/storage/TokenStore.d.ts.map +1 -0
  92. package/dist/storage/TokenStore.js +89 -0
  93. package/dist/storage/TokenStore.js.map +1 -0
  94. package/dist/test/react-native-dom.d.ts +97 -0
  95. package/dist/test/react-native-dom.d.ts.map +1 -0
  96. package/dist/test/react-native-dom.js +155 -0
  97. package/dist/test/react-native-dom.js.map +1 -0
  98. package/dist/test/react-native-dom.spec.d.ts +2 -0
  99. package/dist/test/react-native-dom.spec.d.ts.map +1 -0
  100. package/dist/test/react-native-dom.spec.js +83 -0
  101. package/dist/test/react-native-dom.spec.js.map +1 -0
  102. package/dist/theme/ChatlyTheme.d.ts +37 -0
  103. package/dist/theme/ChatlyTheme.d.ts.map +1 -0
  104. package/dist/theme/ChatlyTheme.js +2 -0
  105. package/dist/theme/ChatlyTheme.js.map +1 -0
  106. package/dist/theme/defaultTheme.d.ts +7 -0
  107. package/dist/theme/defaultTheme.d.ts.map +1 -0
  108. package/dist/theme/defaultTheme.js +37 -0
  109. package/dist/theme/defaultTheme.js.map +1 -0
  110. package/dist/useChatly.d.ts +3 -0
  111. package/dist/useChatly.d.ts.map +1 -0
  112. package/dist/useChatly.js +10 -0
  113. package/dist/useChatly.js.map +1 -0
  114. package/package.json +50 -4
@@ -0,0 +1,395 @@
1
+ /**
2
+ * Thin wrapper around the widget REST surface (see `apps/widget/src/client.ts`).
3
+ *
4
+ * All write endpoints accept the `publicId` + `visitorToken` in the JSON body.
5
+ * The visitor token is persisted via `TokenStore` and rotated whenever
6
+ * `/v1/widget/init` returns a fresh one.
7
+ */
8
+ import { Platform } from 'react-native';
9
+ import { IdentityStore, TokenStore } from '../storage/TokenStore';
10
+ const DEFAULT_API_HOST = 'api.chatly.com';
11
+ export class RestClient {
12
+ constructor(config) {
13
+ this.tokenCache = null;
14
+ /** `undefined` = not yet read from disk; `null` = read, nothing stored. */
15
+ this.identityCache = undefined;
16
+ this.publicId = config.publicId;
17
+ const host = config.apiHost ?? DEFAULT_API_HOST;
18
+ const scheme = config.secure === false ? 'http' : 'https';
19
+ this.apiUrl = `${scheme}://${host}`;
20
+ this.tokenStore = new TokenStore(config.publicId);
21
+ this.identityStore = new IdentityStore(config.publicId);
22
+ }
23
+ get baseUrl() {
24
+ return this.apiUrl;
25
+ }
26
+ async getToken() {
27
+ if (this.tokenCache !== null) {
28
+ return this.tokenCache;
29
+ }
30
+ this.tokenCache = await this.tokenStore.get();
31
+ return this.tokenCache;
32
+ }
33
+ /**
34
+ * Forget this device's session entirely. Backs `logout()`.
35
+ *
36
+ * Drops the remembered identity too: after a logout, a stale-session
37
+ * recovery must NOT quietly re-identify as the person who just signed out.
38
+ */
39
+ async clearToken() {
40
+ await this.dropToken();
41
+ this.identityCache = null;
42
+ await this.identityStore.clear();
43
+ }
44
+ /** Drop only the session credential, keeping the remembered identity so a
45
+ * recovery can replay it. */
46
+ async dropToken() {
47
+ this.tokenCache = null;
48
+ await this.tokenStore.clear();
49
+ }
50
+ /**
51
+ * The identity to replay after the server refuses a stale session.
52
+ *
53
+ * Only offered when we hold BOTH an external id and its hash — mirroring
54
+ * `rememberedIdentity()` in `apps/widget/src/client.ts`. On a channel with
55
+ * identity verification enabled a claim without a hash is refused, and on a
56
+ * channel without it a legacy token is still accepted, so an unverifiable
57
+ * replay could only ever turn one refusal into two. Without both, the SDK
58
+ * re-inits anonymously and history returns as soon as the host app calls
59
+ * `identify()` again.
60
+ */
61
+ async rememberedIdentity() {
62
+ if (this.identityCache === undefined) {
63
+ this.identityCache = await this.identityStore.get();
64
+ }
65
+ return this.identityCache ?? undefined;
66
+ }
67
+ async init(identity) {
68
+ const token = await this.getToken();
69
+ const body = {
70
+ publicId: this.publicId,
71
+ visitorToken: token ?? undefined,
72
+ locale: 'en-US',
73
+ timezone: 'UTC',
74
+ page: { url: `app://${Platform.OS}`, title: 'native' },
75
+ };
76
+ if (identity !== undefined) {
77
+ body.identity = identity;
78
+ }
79
+ const parsed = await this.post('/v1/widget/init', body);
80
+ if (parsed.session.token) {
81
+ this.tokenCache = parsed.session.token;
82
+ await this.tokenStore.set(parsed.session.token);
83
+ }
84
+ // Remembered only once the server has ACCEPTED the identity, and only
85
+ // when it carries a hash — see `rememberedIdentity()`.
86
+ if (identity !== undefined && identity.userHash !== undefined) {
87
+ this.identityCache = identity;
88
+ await this.identityStore.set(identity);
89
+ }
90
+ return parsed;
91
+ }
92
+ async start(body, attachments) {
93
+ return this.post('/v1/widget/conversations', {
94
+ publicId: this.publicId,
95
+ visitorToken: (await this.getToken()) ?? '',
96
+ body,
97
+ ...(attachments !== undefined && attachments.length > 0 ? { attachments } : {}),
98
+ });
99
+ }
100
+ async reply(conversationId, body, attachments) {
101
+ return this.post('/v1/widget/messages', {
102
+ publicId: this.publicId,
103
+ visitorToken: (await this.getToken()) ?? '',
104
+ conversationId,
105
+ body,
106
+ ...(attachments !== undefined && attachments.length > 0 ? { attachments } : {}),
107
+ });
108
+ }
109
+ /**
110
+ * A card's `postback` action: a reply the bot reads, optionally invisible.
111
+ *
112
+ * `silent` is what makes a filter chip work — the agent hears "under_50"
113
+ * and the shopper does not see their own tap echoed as a message bubble.
114
+ * It is a separate method rather than an option on `reply` because the two
115
+ * differ in whether anything renders.
116
+ */
117
+ async postback(conversationId, input) {
118
+ return this.post('/v1/widget/messages', {
119
+ publicId: this.publicId,
120
+ visitorToken: (await this.getToken()) ?? '',
121
+ conversationId,
122
+ body: input.value,
123
+ ...(input.payload === undefined ? {} : { payload: input.payload }),
124
+ ...(input.silent === true ? { silent: true } : {}),
125
+ });
126
+ }
127
+ /**
128
+ * Report what the APP did about a `host_event` card action.
129
+ *
130
+ * This is the other half of the one feature a native SDK exists for. A card
131
+ * saying "Pay $48.20" cannot run Stripe from inside a chat library — the
132
+ * app does it, with the buyer's real session and a native payment sheet —
133
+ * and then has to say what happened, or the shopper is left looking at a
134
+ * card with nothing under it and the bot asks again.
135
+ *
136
+ * `text` appends a visible line under the card. `status: 'failed'` with no
137
+ * text is legitimate: the bot is told, and the shopper sees the card
138
+ * unchanged rather than an error they can do nothing about.
139
+ */
140
+ async reportAction(conversationId, input) {
141
+ return this.post(`/v1/widget/conversations/${encodeURIComponent(conversationId)}/action-result`, {
142
+ publicId: this.publicId,
143
+ visitorToken: (await this.getToken()) ?? '',
144
+ messageId: input.messageId,
145
+ actionId: input.actionId,
146
+ status: input.status,
147
+ ...(input.text === undefined ? {} : { text: input.text }),
148
+ ...(input.data === undefined ? {} : { data: input.data }),
149
+ });
150
+ }
151
+ /** A `step` card action: ask for the first step of a flow and post it. */
152
+ async requestCanvasStep(conversationId, canvasId, params) {
153
+ return this.post(`/v1/widget/conversations/${encodeURIComponent(conversationId)}/canvas-step`, {
154
+ publicId: this.publicId,
155
+ visitorToken: (await this.getToken()) ?? '',
156
+ canvasId,
157
+ ...(params === undefined ? {} : { params }),
158
+ });
159
+ }
160
+ /**
161
+ * Submit a canvas step.
162
+ *
163
+ * `errors` comes back keyed by field name when the server refuses, and the
164
+ * canvas comes back either way — a refused submission returns the SAME
165
+ * canvas with messages on it, which is why the renderer replaces what it
166
+ * holds rather than keeping its own copy.
167
+ */
168
+ async submitCanvas(conversationId, input) {
169
+ return this.post(`/v1/widget/conversations/${encodeURIComponent(conversationId)}/canvas`, {
170
+ publicId: this.publicId,
171
+ visitorToken: (await this.getToken()) ?? '',
172
+ messageId: input.messageId,
173
+ actionId: input.actionId,
174
+ values: input.values,
175
+ });
176
+ }
177
+ /**
178
+ * Uploads raw bytes to the public widget upload endpoint and returns the
179
+ * persisted [Attachment] reference. The widget surface accepts only JSON,
180
+ * so the bytes are base64-encoded before transport. The server enforces
181
+ * the size cap — clients must not pre-check.
182
+ */
183
+ async uploadAttachment(input) {
184
+ const data = bytesToBase64(input.bytes);
185
+ return this.post('/v1/widget/uploads/presign', {
186
+ publicId: this.publicId,
187
+ visitorToken: (await this.getToken()) ?? '',
188
+ filename: input.filename,
189
+ mimeType: input.mimeType,
190
+ data,
191
+ });
192
+ }
193
+ async listConversations(limit = 20) {
194
+ return this.post('/v1/widget/conversations/list', {
195
+ publicId: this.publicId,
196
+ visitorToken: (await this.getToken()) ?? '',
197
+ limit,
198
+ });
199
+ }
200
+ async listMessages(conversationId, limit = 50) {
201
+ return this.post('/v1/widget/messages/list', {
202
+ publicId: this.publicId,
203
+ visitorToken: (await this.getToken()) ?? '',
204
+ conversationId,
205
+ limit,
206
+ });
207
+ }
208
+ async searchKb(query, limit = 8) {
209
+ return this.post('/v1/widget/kb/search', {
210
+ publicId: this.publicId,
211
+ visitorToken: (await this.getToken()) ?? undefined,
212
+ query,
213
+ limit,
214
+ });
215
+ }
216
+ async getKbArticle(slug) {
217
+ return this.post('/v1/widget/kb/article', {
218
+ publicId: this.publicId,
219
+ visitorToken: (await this.getToken()) ?? undefined,
220
+ slug,
221
+ });
222
+ }
223
+ async registerPushToken(input) {
224
+ const visitorToken = await this.getToken();
225
+ if (visitorToken === null) {
226
+ throw new Error('[chatly] cannot register push token before init()');
227
+ }
228
+ return this.post('/v1/widget/push/register', {
229
+ publicId: this.publicId,
230
+ visitorToken,
231
+ platform: input.platform,
232
+ token: input.token,
233
+ ...(input.appVersion !== undefined ? { appVersion: input.appVersion } : {}),
234
+ });
235
+ }
236
+ /**
237
+ * @param idempotencyKey minted once per logical call and REUSED on the
238
+ * stale-session replay below, so a replayed write coalesces server-side
239
+ * instead of double-sending.
240
+ * @param isRetry set only by `recoverSession`, to bound recovery to a
241
+ * single attempt. A second refusal is a real error and is thrown.
242
+ */
243
+ async post(path, body, idempotencyKey, isRetry = false) {
244
+ const key = idempotencyKey ?? newIdempotencyKey();
245
+ const res = await fetch(`${this.apiUrl}${path}`, {
246
+ method: 'POST',
247
+ headers: {
248
+ 'content-type': 'application/json',
249
+ accept: 'application/json',
250
+ 'idempotency-key': key,
251
+ },
252
+ body: JSON.stringify(body),
253
+ });
254
+ if (!res.ok) {
255
+ const text = await safeText(res);
256
+ if (res.status === 403 && !isRetry && isStaleSession(text)) {
257
+ return this.recoverSession(path, body, key);
258
+ }
259
+ throw new Error(`[chatly] ${path} failed: ${res.status} ${text}`);
260
+ }
261
+ return (await res.json());
262
+ }
263
+ /**
264
+ * The server refused the token in this device's storage. Get a new one and
265
+ * replay the call, once.
266
+ *
267
+ * This is what a mid-session mobile visitor hits on the deploy that closes
268
+ * the identity-verification bypass: the token in the token store predates
269
+ * signed visitor sessions, and on a channel with verification enabled it is
270
+ * refused rather than honoured. Without this the app surfaces one failed
271
+ * send and only self-heals on the NEXT launch, because the dead token stays
272
+ * on disk. Handled here rather than surfaced, because from the visitor's
273
+ * side nothing has gone wrong.
274
+ *
275
+ * The dead token is cleared from the token store, not just the in-memory
276
+ * cache — otherwise the next launch repeats the failure.
277
+ */
278
+ async recoverSession(path, body, idempotencyKey) {
279
+ const retry = { ...body };
280
+ const identity = await this.rememberedIdentity();
281
+ await this.dropToken();
282
+ if (path === '/v1/widget/init') {
283
+ // Re-boot in place: drop the dead token and keep whatever identity the
284
+ // caller asked for, falling back to the remembered one.
285
+ delete retry['visitorToken'];
286
+ if (retry['identity'] === undefined && identity !== undefined) {
287
+ retry['identity'] = identity;
288
+ }
289
+ }
290
+ else {
291
+ await this.init(identity);
292
+ retry['visitorToken'] = this.tokenCache ?? '';
293
+ }
294
+ return this.post(path, retry, idempotencyKey, true);
295
+ }
296
+ }
297
+ /**
298
+ * Does this 403 mean "your session token is no good", as opposed to any of
299
+ * the other things a widget call can be forbidden for (a disallowed origin, a
300
+ * missing identity hash)? Only the session codes are cured by fetching a new
301
+ * token; retrying the others would just fail again, more slowly.
302
+ *
303
+ * Both `visitor_session_upgrade_required` and `visitor_session_invalid` are
304
+ * matched by prefix, so a future third session code recovers for free.
305
+ */
306
+ function isStaleSession(responseText) {
307
+ try {
308
+ /*
309
+ * The API NESTS every error: `app-exception.filter.ts` ends with
310
+ * `send({ error: body })`, so a refusal is `{ error: { code, ... } }`.
311
+ * This read `body.code` at the top level, which is `undefined` for every
312
+ * real response — so it returned false every time and the recovery below
313
+ * never fired. A visitor holding an expired token got the failures this
314
+ * client was written to absorb.
315
+ *
316
+ * The third place with this exact bug: the widget (fixed 2026-10-08),
317
+ * `sdk-js`, and here. Each was written by reading the previous one.
318
+ */
319
+ const body = JSON.parse(responseText);
320
+ const code = body.error?.code ?? body.code;
321
+ return typeof code === 'string' && code.startsWith('visitor_session_');
322
+ }
323
+ catch {
324
+ return false;
325
+ }
326
+ }
327
+ /**
328
+ * Lightweight UUID-ish token for the `Idempotency-Key` header. RN has
329
+ * `crypto.randomUUID` on modern Hermes builds but it's not universal — fall
330
+ * back to a time + random hex string when missing.
331
+ */
332
+ function newIdempotencyKey() {
333
+ const g = globalThis;
334
+ if (g.crypto?.randomUUID !== undefined) {
335
+ return g.crypto.randomUUID();
336
+ }
337
+ const t = Date.now().toString(36);
338
+ const r = Math.floor(Math.random() * 1e16).toString(36);
339
+ return `rn-${t}-${r}`;
340
+ }
341
+ /**
342
+ * Base64-encodes a Uint8Array without pulling in `Buffer`. RN exposes
343
+ * `globalThis.btoa` on Hermes; older builds need the manual path.
344
+ */
345
+ function bytesToBase64(bytes) {
346
+ const g = globalThis;
347
+ let binary = '';
348
+ // Chunk to avoid blowing the call stack on large fromCharCode applies.
349
+ const chunkSize = 0x8000;
350
+ for (let i = 0; i < bytes.length; i += chunkSize) {
351
+ binary += String.fromCharCode.apply(null, Array.from(bytes.subarray(i, i + chunkSize)));
352
+ }
353
+ if (g.btoa !== undefined) {
354
+ return g.btoa(binary);
355
+ }
356
+ const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
357
+ // Every index below is the result of bit-masks that produce values in
358
+ // [0, 63] and `chars` is exactly 64 characters long, so the lookup is always
359
+ // defined. `charAt` says that in the type system — it returns `string`, not
360
+ // `string | undefined` — where `chars[n]!` only asserted it past
361
+ // `noUncheckedIndexedAccess`. Same output for every reachable index.
362
+ const at = (n) => chars.charAt(n);
363
+ let result = '';
364
+ let i = 0;
365
+ for (; i + 2 < binary.length; i += 3) {
366
+ const a = binary.charCodeAt(i);
367
+ const b = binary.charCodeAt(i + 1);
368
+ const c = binary.charCodeAt(i + 2);
369
+ result +=
370
+ at(a >> 2) +
371
+ at(((a & 0x03) << 4) | (b >> 4)) +
372
+ at(((b & 0x0f) << 2) | (c >> 6)) +
373
+ at(c & 0x3f);
374
+ }
375
+ if (i < binary.length) {
376
+ const a = binary.charCodeAt(i);
377
+ if (i + 1 === binary.length) {
378
+ result += at(a >> 2) + at((a & 0x03) << 4) + '==';
379
+ }
380
+ else {
381
+ const b = binary.charCodeAt(i + 1);
382
+ result += at(a >> 2) + at(((a & 0x03) << 4) | (b >> 4)) + at((b & 0x0f) << 2) + '=';
383
+ }
384
+ }
385
+ return result;
386
+ }
387
+ async function safeText(res) {
388
+ try {
389
+ return await res.text();
390
+ }
391
+ catch {
392
+ return '';
393
+ }
394
+ }
395
+ //# sourceMappingURL=RestClient.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RestClient.js","sourceRoot":"","sources":["../../src/client/RestClient.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExC,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAclE,MAAM,gBAAgB,GAAG,gBAAgB,CAAC;AAE1C,MAAM,OAAO,UAAU;IASrB,YAAmB,MAAoB;QAJ/B,eAAU,GAAkB,IAAI,CAAC;QACzC,2EAA2E;QACnE,kBAAa,GAAsC,SAAS,CAAC;QAGnE,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAChC,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,IAAI,gBAAgB,CAAC;QAChD,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;QAC1D,IAAI,CAAC,MAAM,GAAG,GAAG,MAAM,MAAM,IAAI,EAAE,CAAC;QACpC,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAClD,IAAI,CAAC,aAAa,GAAG,IAAI,aAAa,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC1D,CAAC;IAED,IAAW,OAAO;QAChB,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAEM,KAAK,CAAC,QAAQ;QACnB,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;YAC7B,OAAO,IAAI,CAAC,UAAU,CAAC;QACzB,CAAC;QACD,IAAI,CAAC,UAAU,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;QAC9C,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,UAAU;QACrB,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACvB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;IACnC,CAAC;IAED;kCAC8B;IACtB,KAAK,CAAC,SAAS;QACrB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IAChC,CAAC;IAED;;;;;;;;;;OAUG;IACK,KAAK,CAAC,kBAAkB;QAC9B,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;YACrC,IAAI,CAAC,aAAa,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC;QACtD,CAAC;QACD,OAAO,IAAI,CAAC,aAAa,IAAI,SAAS,CAAC;IACzC,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,QAAyB;QACzC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACpC,MAAM,IAAI,GAA4B;YACpC,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,YAAY,EAAE,KAAK,IAAI,SAAS;YAChC,MAAM,EAAE,OAAO;YACf,QAAQ,EAAE,KAAK;YACf,IAAI,EAAE,EAAE,GAAG,EAAE,SAAS,QAAQ,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE;SACvD,CAAC;QACF,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAC3B,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAe,iBAAiB,EAAE,IAAI,CAAC,CAAC;QACtE,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;YACvC,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAClD,CAAC;QACD,sEAAsE;QACtE,uDAAuD;QACvD,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC9D,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC;YAC9B,MAAM,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACzC,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAEM,KAAK,CAAC,KAAK,CAAC,IAAY,EAAE,WAA0B;QACzD,OAAO,IAAI,CAAC,IAAI,CAAgB,0BAA0B,EAAE;YAC1D,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,YAAY,EAAE,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE;YAC3C,IAAI;YACJ,GAAG,CAAC,WAAW,KAAK,SAAS,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAChF,CAAC,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,KAAK,CAChB,cAAsB,EACtB,IAAY,EACZ,WAA0B;QAE1B,OAAO,IAAI,CAAC,IAAI,CAAU,qBAAqB,EAAE;YAC/C,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,YAAY,EAAE,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE;YAC3C,cAAc;YACd,IAAI;YACJ,GAAG,CAAC,WAAW,KAAK,SAAS,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAChF,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;OAOG;IACI,KAAK,CAAC,QAAQ,CACnB,cAAsB,EACtB,KAA6E;QAE7E,OAAO,IAAI,CAAC,IAAI,CAAU,qBAAqB,EAAE;YAC/C,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,YAAY,EAAE,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE;YAC3C,cAAc;YACd,IAAI,EAAE,KAAK,CAAC,KAAK;YACjB,GAAG,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;YAClE,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACnD,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;;;;OAYG;IACI,KAAK,CAAC,YAAY,CACvB,cAAsB,EACtB,KAMC;QAED,OAAO,IAAI,CAAC,IAAI,CACd,4BAA4B,kBAAkB,CAAC,cAAc,CAAC,gBAAgB,EAC9E;YACE,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,YAAY,EAAE,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE;YAC3C,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;YACzD,GAAG,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;SAC1D,CACF,CAAC;IACJ,CAAC;IAED,0EAA0E;IACnE,KAAK,CAAC,iBAAiB,CAC5B,cAAsB,EACtB,QAAgB,EAChB,MAAgC;QAEhC,OAAO,IAAI,CAAC,IAAI,CACd,4BAA4B,kBAAkB,CAAC,cAAc,CAAC,cAAc,EAC5E;YACE,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,YAAY,EAAE,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE;YAC3C,QAAQ;YACR,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;SAC5C,CACF,CAAC;IACJ,CAAC;IAED;;;;;;;OAOG;IACI,KAAK,CAAC,YAAY,CACvB,cAAsB,EACtB,KAA+E;QAE/E,OAAO,IAAI,CAAC,IAAI,CACd,4BAA4B,kBAAkB,CAAC,cAAc,CAAC,SAAS,EACvE;YACE,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,YAAY,EAAE,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE;YAC3C,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,MAAM,EAAE,KAAK,CAAC,MAAM;SACrB,CACF,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,gBAAgB,CAAC,KAI7B;QACC,MAAM,IAAI,GAAG,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACxC,OAAO,IAAI,CAAC,IAAI,CAAa,4BAA4B,EAAE;YACzD,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,YAAY,EAAE,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE;YAC3C,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,IAAI;SACL,CAAC,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,iBAAiB,CAAC,KAAK,GAAG,EAAE;QACvC,OAAO,IAAI,CAAC,IAAI,CAA2C,+BAA+B,EAAE;YAC1F,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,YAAY,EAAE,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE;YAC3C,KAAK;SACN,CAAC,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,YAAY,CACvB,cAAsB,EACtB,KAAK,GAAG,EAAE;QAEV,OAAO,IAAI,CAAC,IAAI,CAA6B,0BAA0B,EAAE;YACvE,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,YAAY,EAAE,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE;YAC3C,cAAc;YACd,KAAK;SACN,CAAC,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,QAAQ,CAAC,KAAa,EAAE,KAAK,GAAG,CAAC;QAC5C,OAAO,IAAI,CAAC,IAAI,CAA0B,sBAAsB,EAAE;YAChE,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,YAAY,EAAE,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,SAAS;YAClD,KAAK;YACL,KAAK;SACN,CAAC,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,YAAY,CAAC,IAAY;QACpC,OAAO,IAAI,CAAC,IAAI,CAAyB,uBAAuB,EAAE;YAChE,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,YAAY,EAAE,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC,IAAI,SAAS;YAClD,IAAI;SACL,CAAC,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,iBAAiB,CAAC,KAI9B;QACC,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC3C,IAAI,YAAY,KAAK,IAAI,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;QACvE,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAmC,0BAA0B,EAAE;YAC7E,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,YAAY;YACZ,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,GAAG,CAAC,KAAK,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC5E,CAAC,CAAC;IACL,CAAC;IAED;;;;;;OAMG;IACK,KAAK,CAAC,IAAI,CAChB,IAAY,EACZ,IAAa,EACb,cAAuB,EACvB,OAAO,GAAG,KAAK;QAEf,MAAM,GAAG,GAAG,cAAc,IAAI,iBAAiB,EAAE,CAAC;QAClD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,EAAE,EAAE;YAC/C,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,MAAM,EAAE,kBAAkB;gBAC1B,iBAAiB,EAAE,GAAG;aACvB;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC;YACjC,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3D,OAAO,IAAI,CAAC,cAAc,CAAI,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;YACjD,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,YAAY,IAAI,YAAY,GAAG,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC;QACpE,CAAC;QACD,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAM,CAAC;IACjC,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACK,KAAK,CAAC,cAAc,CAAI,IAAY,EAAE,IAAa,EAAE,cAAsB;QACjF,MAAM,KAAK,GAAG,EAAE,GAAI,IAAgC,EAAE,CAAC;QACvD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACjD,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACvB,IAAI,IAAI,KAAK,iBAAiB,EAAE,CAAC;YAC/B,uEAAuE;YACvE,wDAAwD;YACxD,OAAO,KAAK,CAAC,cAAc,CAAC,CAAC;YAC7B,IAAI,KAAK,CAAC,UAAU,CAAC,KAAK,SAAS,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC9D,KAAK,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC;YAC/B,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC1B,KAAK,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC;QAChD,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAI,IAAI,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,CAAC,CAAC;IACzD,CAAC;CACF;AAED;;;;;;;;GAQG;AACH,SAAS,cAAc,CAAC,YAAoB;IAC1C,IAAI,CAAC;QACH;;;;;;;;;;WAUG;QACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAmD,CAAC;QACxF,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC;QAC3C,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,CAAC;IACzE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,iBAAiB;IACxB,MAAM,CAAC,GAAG,UAAwD,CAAC;IACnE,IAAI,CAAC,CAAC,MAAM,EAAE,UAAU,KAAK,SAAS,EAAE,CAAC;QACvC,OAAO,CAAC,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;IAC/B,CAAC;IACD,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IAClC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACxD,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;AACxB,CAAC;AAED;;;GAGG;AACH,SAAS,aAAa,CAAC,KAAiB;IACtC,MAAM,CAAC,GAAG,UAA8C,CAAC;IACzD,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,uEAAuE;IACvE,MAAM,SAAS,GAAG,MAAM,CAAC;IACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC;QACjD,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IAC1F,CAAC;IACD,IAAI,CAAC,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACxB,CAAC;IACD,MAAM,KAAK,GAAG,kEAAkE,CAAC;IACjF,sEAAsE;IACtE,6EAA6E;IAC7E,4EAA4E;IAC5E,iEAAiE;IACjE,qEAAqE;IACrE,MAAM,EAAE,GAAG,CAAC,CAAS,EAAU,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAClD,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACnC,MAAM,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QACnC,MAAM;YACJ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;gBACV,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;gBAChC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;gBAChC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACjB,CAAC;IACD,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;QACtB,MAAM,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC;YAC5B,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;QACpD,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACnC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,GAAG,CAAC;QACtF,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,GAAa;IACnC,IAAI,CAAC;QACH,OAAO,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=RestClient.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RestClient.spec.d.ts","sourceRoot":"","sources":["../../src/client/RestClient.spec.ts"],"names":[],"mappings":""}