qca-sdk 0.3.0 → 0.5.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 (122) hide show
  1. package/README.md +275 -1
  2. package/dist/core/auth.d.ts +12 -0
  3. package/dist/core/auth.d.ts.map +1 -0
  4. package/dist/core/auth.js +34 -0
  5. package/dist/core/auth.js.map +1 -0
  6. package/dist/core/client.d.ts +14 -0
  7. package/dist/core/client.d.ts.map +1 -1
  8. package/dist/core/client.js +36 -11
  9. package/dist/core/client.js.map +1 -1
  10. package/dist/core/credentials.d.ts +3 -0
  11. package/dist/core/credentials.d.ts.map +1 -1
  12. package/dist/core/credentials.js +3 -1
  13. package/dist/core/credentials.js.map +1 -1
  14. package/dist/core/service-account-credential.d.ts +20 -0
  15. package/dist/core/service-account-credential.d.ts.map +1 -0
  16. package/dist/core/service-account-credential.js +139 -0
  17. package/dist/core/service-account-credential.js.map +1 -0
  18. package/dist/esm/core/auth.d.ts +12 -0
  19. package/dist/esm/core/auth.d.ts.map +1 -0
  20. package/dist/esm/core/auth.js +30 -0
  21. package/dist/esm/core/auth.js.map +1 -0
  22. package/dist/esm/core/client.d.ts +14 -0
  23. package/dist/esm/core/client.d.ts.map +1 -1
  24. package/dist/esm/core/client.js +36 -11
  25. package/dist/esm/core/client.js.map +1 -1
  26. package/dist/esm/core/credentials.d.ts +3 -0
  27. package/dist/esm/core/credentials.d.ts.map +1 -1
  28. package/dist/esm/core/credentials.js +1 -0
  29. package/dist/esm/core/credentials.js.map +1 -1
  30. package/dist/esm/core/service-account-credential.d.ts +20 -0
  31. package/dist/esm/core/service-account-credential.d.ts.map +1 -0
  32. package/dist/esm/core/service-account-credential.js +135 -0
  33. package/dist/esm/core/service-account-credential.js.map +1 -0
  34. package/dist/esm/forward/forwardClient.d.ts +4 -0
  35. package/dist/esm/forward/forwardClient.d.ts.map +1 -1
  36. package/dist/esm/forward/forwardClient.js +4 -0
  37. package/dist/esm/forward/forwardClient.js.map +1 -1
  38. package/dist/esm/forward/identity-service-account-token.d.ts +11 -0
  39. package/dist/esm/forward/identity-service-account-token.d.ts.map +1 -0
  40. package/dist/esm/forward/identity-service-account-token.js +18 -0
  41. package/dist/esm/forward/identity-service-account-token.js.map +1 -0
  42. package/dist/esm/forward/identity.d.ts +2 -0
  43. package/dist/esm/forward/identity.d.ts.map +1 -1
  44. package/dist/esm/forward/identity.js +2 -0
  45. package/dist/esm/forward/identity.js.map +1 -1
  46. package/dist/esm/forward/index.d.ts +9 -1
  47. package/dist/esm/forward/index.d.ts.map +1 -1
  48. package/dist/esm/forward/index.js +7 -1
  49. package/dist/esm/forward/index.js.map +1 -1
  50. package/dist/esm/forward/realtime/connection.d.ts +106 -0
  51. package/dist/esm/forward/realtime/connection.d.ts.map +1 -0
  52. package/dist/esm/forward/realtime/connection.js +465 -0
  53. package/dist/esm/forward/realtime/connection.js.map +1 -0
  54. package/dist/esm/forward/realtime/conversation.d.ts +31 -0
  55. package/dist/esm/forward/realtime/conversation.d.ts.map +1 -0
  56. package/dist/esm/forward/realtime/conversation.js +92 -0
  57. package/dist/esm/forward/realtime/conversation.js.map +1 -0
  58. package/dist/esm/forward/realtime/realtime.d.ts +9 -0
  59. package/dist/esm/forward/realtime/realtime.d.ts.map +1 -0
  60. package/dist/esm/forward/realtime/realtime.js +9 -0
  61. package/dist/esm/forward/realtime/realtime.js.map +1 -0
  62. package/dist/esm/forward/realtime/types.d.ts +204 -0
  63. package/dist/esm/forward/realtime/types.d.ts.map +1 -0
  64. package/dist/esm/forward/realtime/types.js +7 -0
  65. package/dist/esm/forward/realtime/types.js.map +1 -0
  66. package/dist/esm/forward/service-account-token.d.ts +15 -0
  67. package/dist/esm/forward/service-account-token.d.ts.map +1 -0
  68. package/dist/esm/forward/service-account-token.js +38 -0
  69. package/dist/esm/forward/service-account-token.js.map +1 -0
  70. package/dist/esm/forward/types.d.ts +35 -0
  71. package/dist/esm/forward/types.d.ts.map +1 -1
  72. package/dist/esm/index.d.ts +5 -0
  73. package/dist/esm/index.d.ts.map +1 -1
  74. package/dist/esm/index.js +4 -0
  75. package/dist/esm/index.js.map +1 -1
  76. package/dist/esm/version.d.ts +1 -1
  77. package/dist/esm/version.js +1 -1
  78. package/dist/forward/forwardClient.d.ts +4 -0
  79. package/dist/forward/forwardClient.d.ts.map +1 -1
  80. package/dist/forward/forwardClient.js +4 -0
  81. package/dist/forward/forwardClient.js.map +1 -1
  82. package/dist/forward/identity-service-account-token.d.ts +11 -0
  83. package/dist/forward/identity-service-account-token.d.ts.map +1 -0
  84. package/dist/forward/identity-service-account-token.js +22 -0
  85. package/dist/forward/identity-service-account-token.js.map +1 -0
  86. package/dist/forward/identity.d.ts +2 -0
  87. package/dist/forward/identity.d.ts.map +1 -1
  88. package/dist/forward/identity.js +2 -0
  89. package/dist/forward/identity.js.map +1 -1
  90. package/dist/forward/index.d.ts +9 -1
  91. package/dist/forward/index.d.ts.map +1 -1
  92. package/dist/forward/index.js +18 -1
  93. package/dist/forward/index.js.map +1 -1
  94. package/dist/forward/realtime/connection.d.ts +106 -0
  95. package/dist/forward/realtime/connection.d.ts.map +1 -0
  96. package/dist/forward/realtime/connection.js +473 -0
  97. package/dist/forward/realtime/connection.js.map +1 -0
  98. package/dist/forward/realtime/conversation.d.ts +31 -0
  99. package/dist/forward/realtime/conversation.d.ts.map +1 -0
  100. package/dist/forward/realtime/conversation.js +97 -0
  101. package/dist/forward/realtime/conversation.js.map +1 -0
  102. package/dist/forward/realtime/realtime.d.ts +9 -0
  103. package/dist/forward/realtime/realtime.d.ts.map +1 -0
  104. package/dist/forward/realtime/realtime.js +13 -0
  105. package/dist/forward/realtime/realtime.js.map +1 -0
  106. package/dist/forward/realtime/types.d.ts +204 -0
  107. package/dist/forward/realtime/types.d.ts.map +1 -0
  108. package/dist/forward/realtime/types.js +11 -0
  109. package/dist/forward/realtime/types.js.map +1 -0
  110. package/dist/forward/service-account-token.d.ts +15 -0
  111. package/dist/forward/service-account-token.d.ts.map +1 -0
  112. package/dist/forward/service-account-token.js +43 -0
  113. package/dist/forward/service-account-token.js.map +1 -0
  114. package/dist/forward/types.d.ts +35 -0
  115. package/dist/forward/types.d.ts.map +1 -1
  116. package/dist/index.d.ts +5 -0
  117. package/dist/index.d.ts.map +1 -1
  118. package/dist/index.js +13 -1
  119. package/dist/index.js.map +1 -1
  120. package/dist/version.d.ts +1 -1
  121. package/dist/version.js +1 -1
  122. package/package.json +12 -3
@@ -0,0 +1,473 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RealtimeConnection = exports.RealtimeServerError = exports.RealtimeConnectionClosedError = exports.RealtimeProtocolError = void 0;
4
+ exports.decodeRealtimeAudio = decodeRealtimeAudio;
5
+ const error_js_1 = require("../../core/error.js");
6
+ const types_js_1 = require("./types.js");
7
+ class RealtimeProtocolError extends error_js_1.APIConnectionError {
8
+ conversationId;
9
+ code;
10
+ constructor(message, conversationId, code = 'invalid_event') {
11
+ super(message);
12
+ this.conversationId = conversationId;
13
+ this.code = code;
14
+ }
15
+ }
16
+ exports.RealtimeProtocolError = RealtimeProtocolError;
17
+ class RealtimeConnectionClosedError extends error_js_1.APIConnectionError {
18
+ conversationId;
19
+ closeCode;
20
+ closeReason;
21
+ constructor(conversationId, closeCode, closeReason) {
22
+ super(`Realtime connection closed (${closeCode})`);
23
+ this.conversationId = conversationId;
24
+ this.closeCode = closeCode;
25
+ this.closeReason = closeReason;
26
+ }
27
+ }
28
+ exports.RealtimeConnectionClosedError = RealtimeConnectionClosedError;
29
+ class RealtimeServerError extends error_js_1.APIConnectionError {
30
+ event;
31
+ code;
32
+ retryable;
33
+ retry_after_ms;
34
+ constructor(event) {
35
+ const payload = event.payload;
36
+ super(typeof payload.message === 'string' ? payload.message : 'Realtime server error');
37
+ this.event = event;
38
+ this.code = String(payload.code);
39
+ this.retryable = typeof payload.retryable === 'boolean' ? payload.retryable : undefined;
40
+ this.retry_after_ms = typeof payload.retry_after_ms === 'number' ? payload.retry_after_ms : undefined;
41
+ }
42
+ }
43
+ exports.RealtimeServerError = RealtimeServerError;
44
+ const importWS = () => import('ws');
45
+ const CLIENT_MESSAGE_BYTES = 256 * 1024;
46
+ const terminalErrors = new Set(['provider_initialization_failed', 'context_restore_failed', 'provider_unavailable', 'service_restarting', 'event_persistence_failed']);
47
+ const base64 = /^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/;
48
+ function validTimestamp(value) {
49
+ if (typeof value !== 'string' || !/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d{1,9})?(?:Z|[+-]\d{2}:\d{2})$/.test(value) || !Number.isFinite(Date.parse(value)))
50
+ return false;
51
+ const year = Number(value.slice(0, 4)), month = Number(value.slice(5, 7)), day = Number(value.slice(8, 10));
52
+ const leap = year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);
53
+ return day > 0 && day <= [31, leap ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month - 1];
54
+ }
55
+ const isObject = (value) => value !== null && typeof value === 'object' && !Array.isArray(value);
56
+ function positive(value, fallback, name) {
57
+ const result = value ?? fallback;
58
+ if (!Number.isSafeInteger(result) || result <= 0 || result > 2 ** 31 - 1)
59
+ throw new error_js_1.QoderError(`${name} must be a positive integer within the timer/size limit`);
60
+ return result;
61
+ }
62
+ function wait(value, timeout, signal, label) {
63
+ return new Promise((resolve, reject) => {
64
+ const abort = () => finish(new error_js_1.APIUserAbortError(`${label} was aborted`));
65
+ const timer = setTimeout(() => finish(new error_js_1.APIConnectionTimeoutError(`${label} timed out`)), timeout);
66
+ let settled = false;
67
+ function finish(error, result) {
68
+ if (settled)
69
+ return;
70
+ settled = true;
71
+ clearTimeout(timer);
72
+ signal?.removeEventListener('abort', abort);
73
+ if (error)
74
+ reject(error);
75
+ else
76
+ resolve(result);
77
+ }
78
+ if (signal?.aborted)
79
+ abort();
80
+ else
81
+ signal?.addEventListener('abort', abort, { once: true });
82
+ value.then(result => finish(undefined, result), error => finish(error instanceof Error ? error : new error_js_1.APIConnectionError(label)));
83
+ });
84
+ }
85
+ function validateEvent(value, conversationId) {
86
+ const invalid = () => new RealtimeProtocolError('Invalid Realtime event envelope or payload', conversationId);
87
+ if (!isObject(value) || value.version !== types_js_1.REALTIME_VERSION || typeof value.type !== 'string' || !value.type
88
+ || !isObject(value.payload) || typeof value.event_id !== 'string' || !value.event_id
89
+ || !Number.isSafeInteger(value.sequence) || value.sequence < 0 || value.conversation_id !== conversationId
90
+ || !validTimestamp(value.timestamp)
91
+ || (value.work_id !== undefined && typeof value.work_id !== 'string')
92
+ || (value.announcement_id !== undefined && typeof value.announcement_id !== 'string'))
93
+ throw invalid();
94
+ const p = value.payload;
95
+ const required = {
96
+ 'voice.state': ['state'], 'voice.replaced': ['reason'], 'transcript.delta': ['role', 'text'], 'transcript.final': ['role', 'text'],
97
+ 'audio.delta': ['audio'], 'playback.interrupt': ['reason'], 'work.accepted': ['status', 'objective'], 'work.running': ['status'],
98
+ 'work.progress': ['kind', 'detail'], 'work.milestone': ['announcement_id', 'milestone_type', 'summary'],
99
+ 'work.completed': ['status', 'result'], 'work.failed': ['status'], 'connection.closed': ['request_id', 'outcome'], error: ['code', 'message'],
100
+ };
101
+ if ((required[value.type] ?? []).some(key => typeof p[key] !== 'string'))
102
+ throw invalid();
103
+ const optionalStrings = {
104
+ 'transcript.delta': ['item_id', 'response_id'], 'transcript.final': ['item_id', 'response_id'],
105
+ 'work.progress': ['title', 'event_id'], 'work.completed': ['event_id'], 'work.failed': ['event_id'],
106
+ };
107
+ if ((optionalStrings[value.type] ?? []).some(key => p[key] !== undefined && typeof p[key] !== 'string'))
108
+ throw invalid();
109
+ if (value.type === 'work.progress' && p.is_error !== undefined && typeof p.is_error !== 'boolean')
110
+ throw invalid();
111
+ if (value.type === 'error' && ((p.retryable !== undefined && typeof p.retryable !== 'boolean') || (p.retry_after_ms !== undefined && (!Number.isSafeInteger(p.retry_after_ms) || p.retry_after_ms < 0))))
112
+ throw invalid();
113
+ const statuses = { 'work.accepted': 'accepted', 'work.running': 'running', 'work.completed': 'completed', 'work.failed': 'failed' };
114
+ if (statuses[value.type] && p.status !== statuses[value.type])
115
+ throw invalid();
116
+ if (value.type === 'audio.delta' && (typeof p.audio !== 'string' || !p.audio || !base64.test(p.audio) || globalThis.atob(p.audio).length % 2))
117
+ throw invalid();
118
+ if (value.type === 'voice.ready') {
119
+ if (!isObject(p.config) || typeof p.provider !== 'string' || !isObject(p.input_audio) || !isObject(p.output_audio)
120
+ || p.input_audio.format !== 'pcm16' || p.input_audio.sample_rate !== 16000 || p.input_audio.channels !== 1
121
+ || p.output_audio.format !== 'pcm16' || p.output_audio.sample_rate !== 24000 || p.output_audio.channels !== 1
122
+ || !isObject(p.capabilities) || typeof p.capabilities.graceful_close !== 'boolean')
123
+ throw invalid();
124
+ }
125
+ if (value.type === 'work.failed' && (!isObject(p.error) || typeof p.error.code !== 'string'))
126
+ throw invalid();
127
+ if (value.type === 'connection.closed' && !['no_active_response', 'no_content', 'saved', 'saved_interrupted'].includes(p.outcome))
128
+ throw invalid();
129
+ return value;
130
+ }
131
+ /** Decode an audio.delta payload into raw 24 kHz PCM16 bytes; this does not play it. */
132
+ function decodeRealtimeAudio(event) {
133
+ if (event.type !== 'audio.delta' || typeof event.payload.audio !== 'string' || !event.payload.audio || !base64.test(event.payload.audio))
134
+ throw new error_js_1.QoderError('Expected a valid audio.delta Base64 payload');
135
+ const binary = globalThis.atob(event.payload.audio);
136
+ if (binary.length % 2)
137
+ throw new error_js_1.QoderError('PCM16 output must contain complete samples');
138
+ return Uint8Array.from(binary, char => char.charCodeAt(0));
139
+ }
140
+ /** A Node-only connection with one receiver and bounded input/output queues. No reconnect or replay. */
141
+ class RealtimeConnection {
142
+ socket;
143
+ options;
144
+ conversationId;
145
+ ready;
146
+ request_id = null;
147
+ queue = [];
148
+ queueBytes = 0;
149
+ lastSequence = -1;
150
+ maxQueuedEvents;
151
+ maxQueueBytes;
152
+ sendTimeout;
153
+ closeTimeout;
154
+ readyPromise;
155
+ readyResolve;
156
+ readyReject;
157
+ receiver;
158
+ terminal;
159
+ ended = false;
160
+ closing = false;
161
+ sendTail = Promise.resolve();
162
+ sendCount = 0;
163
+ sendBytes = 0;
164
+ graceful;
165
+ closeAck;
166
+ handshakeTimer;
167
+ readyTimer;
168
+ abort;
169
+ constructor(socket, options) {
170
+ this.socket = socket;
171
+ this.options = options;
172
+ this.conversationId = options.conversationId;
173
+ this.maxQueuedEvents = positive(options.maxQueuedEvents, 256, 'maxQueuedEvents');
174
+ this.maxQueueBytes = positive(options.maxQueueBytes, 4 * 1024 * 1024, 'maxQueueBytes');
175
+ this.sendTimeout = positive(options.sendTimeout, 30000, 'sendTimeout');
176
+ this.closeTimeout = positive(options.closeTimeout, 10000, 'closeTimeout');
177
+ this.readyPromise = new Promise((resolve, reject) => { this.readyResolve = resolve; this.readyReject = reject; });
178
+ void this.readyPromise.catch(() => { });
179
+ this.abort = () => this.fail(new error_js_1.APIUserAbortError('Realtime connection was aborted'));
180
+ options.signal?.addEventListener('abort', this.abort, { once: true });
181
+ socket.on('upgrade', response => { this.request_id = String(response.headers['x-request-id'] ?? response.headers['request-id'] ?? '') || null; });
182
+ socket.on('open', () => {
183
+ clearTimeout(this.handshakeTimer);
184
+ this.readyTimer = setTimeout(() => this.fail(new error_js_1.APIConnectionTimeoutError('Realtime ready timed out')), positive(options.readyTimeout, 60000, 'readyTimeout'));
185
+ });
186
+ socket.on('message', (data, binary) => this.onMessage(data, binary));
187
+ socket.on('error', error => this.fail(error.message === 'Opening handshake has timed out'
188
+ ? new error_js_1.APIConnectionTimeoutError('Realtime handshake timed out') : new error_js_1.APIConnectionError('Realtime WebSocket transport failed')));
189
+ socket.on('close', (code, reason) => this.finish(code === 1000 || code === 1001 ? undefined : new RealtimeConnectionClosedError(this.conversationId, code, reason.toString())));
190
+ socket.on('unexpected-response', (_request, response) => {
191
+ let raw = '';
192
+ let bytes = 0;
193
+ response.on('data', chunk => {
194
+ bytes += chunk.length;
195
+ if (bytes > 64 * 1024) {
196
+ response.destroy();
197
+ this.fail(new error_js_1.APIConnectionError('Realtime handshake error body exceeded its limit'));
198
+ }
199
+ else
200
+ raw += chunk.toString();
201
+ });
202
+ response.on('error', () => this.fail(new error_js_1.APIConnectionError('Realtime handshake response failed')));
203
+ response.on('end', () => {
204
+ let body = raw;
205
+ try {
206
+ body = JSON.parse(raw);
207
+ }
208
+ catch { /* Retain bounded gateway text. */ }
209
+ const headers = new Headers();
210
+ for (const [key, value] of Object.entries(response.headers))
211
+ if (value !== undefined)
212
+ headers.set(key, Array.isArray(value) ? value.join(', ') : value);
213
+ this.fail(error_js_1.APIError.generate(response.statusCode ?? 502, body, undefined, headers));
214
+ });
215
+ });
216
+ this.handshakeTimer = setTimeout(() => this.fail(new error_js_1.APIConnectionTimeoutError('Realtime handshake timed out')), positive(options.handshakeTimeout, 30000, 'handshakeTimeout'));
217
+ if (options.signal?.aborted)
218
+ this.abort();
219
+ }
220
+ /** @internal */
221
+ static async connect(client, options) {
222
+ if (typeof process === 'undefined' || !process.versions?.node)
223
+ throw new error_js_1.QoderError('Forward Realtime requires Node.js; browsers cannot provide Authorization headers');
224
+ if (typeof options.conversationId !== 'string' || !options.conversationId || options.conversationId.trim() !== options.conversationId || /[\x00-\x1f\x7f]/.test(options.conversationId))
225
+ throw new error_js_1.QoderError('conversationId must be nonempty without surrounding whitespace or control characters');
226
+ for (const [key, fallback] of Object.entries({ handshakeTimeout: 30000, readyTimeout: 60000, sendTimeout: 30000, closeTimeout: 10000, maxQueuedEvents: 256, maxQueueBytes: 4 * 1024 * 1024, maxReceiveBytes: 1024 * 1024 }))
227
+ positive(options[key], fallback, key);
228
+ const handshakeDeadline = Date.now() + (options.handshakeTimeout ?? 30000);
229
+ const preparationController = new AbortController();
230
+ const cancelPreparation = () => preparationController.abort();
231
+ options.signal?.addEventListener('abort', cancelPreparation, { once: true });
232
+ let preparation;
233
+ try {
234
+ preparation = await wait(Promise.all([client._prepareRealtimeRequest({ ...options, signal: preparationController.signal }), importWS()]), options.handshakeTimeout ?? 30000, options.signal, 'Realtime authentication');
235
+ }
236
+ finally {
237
+ options.signal?.removeEventListener('abort', cancelPreparation);
238
+ preparationController.abort();
239
+ }
240
+ if (options.signal?.aborted)
241
+ throw new error_js_1.APIUserAbortError('Realtime connection was aborted');
242
+ const [{ url, headers }, module] = preparation;
243
+ const handshakeRemaining = handshakeDeadline - Date.now();
244
+ if (handshakeRemaining <= 0)
245
+ throw new error_js_1.APIConnectionTimeoutError('Realtime handshake timed out');
246
+ const Socket = module.default;
247
+ const transport = options.transport ?? {};
248
+ const socket = new Socket(url, {
249
+ ...transport,
250
+ headers: Object.fromEntries(headers.entries()),
251
+ followRedirects: false,
252
+ perMessageDeflate: false,
253
+ handshakeTimeout: handshakeRemaining,
254
+ maxPayload: options.maxReceiveBytes ?? 1024 * 1024,
255
+ });
256
+ const connection = new RealtimeConnection(socket, { ...options, handshakeTimeout: handshakeRemaining });
257
+ await connection.readyPromise;
258
+ return connection;
259
+ }
260
+ onMessage(data, binary) {
261
+ if (this.ended)
262
+ return;
263
+ try {
264
+ if (binary)
265
+ throw new RealtimeProtocolError('Realtime expects UTF-8 JSON text frames', this.conversationId);
266
+ const buffer = Array.isArray(data) ? Buffer.concat(data) : data instanceof ArrayBuffer ? Buffer.from(data) : data;
267
+ let value;
268
+ try {
269
+ value = JSON.parse(buffer.toString());
270
+ }
271
+ catch {
272
+ throw new RealtimeProtocolError('Invalid Realtime JSON', this.conversationId);
273
+ }
274
+ const event = validateEvent(value, this.conversationId);
275
+ if (event.sequence <= this.lastSequence)
276
+ throw new RealtimeProtocolError('Realtime sequence did not increase', this.conversationId);
277
+ this.lastSequence = event.sequence;
278
+ const size = buffer.byteLength;
279
+ if (this.receiver) {
280
+ const receiver = this.receiver;
281
+ this.receiver = undefined;
282
+ receiver.resolve({ done: false, value: event });
283
+ }
284
+ else {
285
+ if (this.queue.length >= this.maxQueuedEvents || this.queueBytes + size > this.maxQueueBytes)
286
+ throw new RealtimeProtocolError('Realtime receive queue capacity exceeded', this.conversationId, 'queue_overflow');
287
+ this.queue.push({ event, bytes: size });
288
+ this.queueBytes += size;
289
+ }
290
+ if (event.type === 'voice.ready' && !this.ready) {
291
+ this.ready = event.payload;
292
+ clearTimeout(this.readyTimer);
293
+ this.readyResolve();
294
+ }
295
+ if (event.type === 'connection.closed' && event.payload.request_id === this.closeAck?.requestId)
296
+ this.closeAck?.resolve(event.payload);
297
+ if (event.type === 'voice.replaced')
298
+ this.fail(new RealtimeProtocolError('Realtime connection was replaced', this.conversationId, 'voice.replaced'));
299
+ if (event.type === 'error' && (!this.ready || terminalErrors.has(String(event.payload.code))))
300
+ this.fail(new RealtimeServerError(event));
301
+ }
302
+ catch (error) {
303
+ this.fail(error instanceof Error ? error : new error_js_1.APIConnectionError('Realtime receive failed'));
304
+ }
305
+ }
306
+ finish(error) {
307
+ if (this.ended)
308
+ return;
309
+ this.ended = true;
310
+ this.terminal = error;
311
+ clearTimeout(this.handshakeTimer);
312
+ clearTimeout(this.readyTimer);
313
+ this.options.signal?.removeEventListener('abort', this.abort);
314
+ this.readyReject(error ?? new RealtimeConnectionClosedError(this.conversationId, 1000, 'Closed before ready'));
315
+ this.closeAck?.reject(error ?? new RealtimeConnectionClosedError(this.conversationId, 1000, 'Closed without matching acknowledgement'));
316
+ if (this.receiver) {
317
+ const receiver = this.receiver;
318
+ this.receiver = undefined;
319
+ if (error)
320
+ receiver.reject(error);
321
+ else
322
+ receiver.resolve({ done: true, value: undefined });
323
+ }
324
+ }
325
+ fail(error) { this.finish(error); this.socket.terminate(); }
326
+ /** Read one event. Concurrent consumers are rejected instead of stealing each other's events. */
327
+ async receive(options = {}) {
328
+ if (this.receiver)
329
+ throw new error_js_1.QoderError('Only one Realtime event consumer is allowed');
330
+ if (options.signal?.aborted)
331
+ throw new error_js_1.APIUserAbortError('Realtime receive was aborted');
332
+ const queued = this.queue.shift();
333
+ if (queued) {
334
+ this.queueBytes -= queued.bytes;
335
+ return { done: false, value: queued.event };
336
+ }
337
+ if (this.ended) {
338
+ if (this.terminal)
339
+ throw this.terminal;
340
+ return { done: true, value: undefined };
341
+ }
342
+ let receiver;
343
+ const pending = new Promise((resolve, reject) => { this.receiver = receiver = { resolve, reject }; });
344
+ try {
345
+ return await wait(pending, positive(options.timeout, 2 ** 31 - 1, 'receive timeout'), options.signal, 'Realtime receive');
346
+ }
347
+ finally {
348
+ if (this.receiver === receiver)
349
+ this.receiver = undefined;
350
+ }
351
+ }
352
+ async *[Symbol.asyncIterator]() {
353
+ for (;;) {
354
+ const next = await this.receive();
355
+ if (next.done)
356
+ return;
357
+ yield next.value;
358
+ }
359
+ }
360
+ /** Serialize sends in call order; no input is automatically replayed. */
361
+ sendEvent(event, options = {}) {
362
+ const timeout = positive(options.timeout, this.sendTimeout, 'send timeout');
363
+ if (options.signal?.aborted)
364
+ return Promise.reject(new error_js_1.APIUserAbortError('Realtime send was aborted'));
365
+ if (!event || event.version !== types_js_1.REALTIME_VERSION || typeof event.type !== 'string' || !event.type || !isObject(event.payload))
366
+ throw new error_js_1.QoderError('Client events require version, type and object payload');
367
+ if (this.ended || this.socket.readyState !== 1)
368
+ throw this.terminal ?? new error_js_1.QoderError('Realtime connection is closed');
369
+ if (this.closing && !['connection.close', 'ping'].includes(event.type))
370
+ throw new error_js_1.QoderError('Realtime connection is closing');
371
+ if (event.type === 'text.message' && (typeof event.payload.text !== 'string' || !event.payload.text.trim() || new TextEncoder().encode(event.payload.text.trim()).length > 16 * 1024))
372
+ throw new error_js_1.QoderError('Realtime text must be nonempty and at most 16 KiB UTF-8');
373
+ if (event.type === 'audio.append' && (typeof event.payload.audio !== 'string' || !event.payload.audio || !base64.test(event.payload.audio) || globalThis.atob(event.payload.audio).length % 2))
374
+ throw new error_js_1.QoderError('Audio append requires nonempty Base64 PCM16');
375
+ if (event.type === 'connection.close') {
376
+ const id = event.payload.request_id;
377
+ if (typeof id !== 'string' || !id || id.trim() !== id || Buffer.byteLength(id) > 128 || /[\x00-\x1f\x7f]/.test(id))
378
+ throw new error_js_1.QoderError('Invalid connection.close request_id');
379
+ }
380
+ const json = JSON.stringify(event);
381
+ const bytes = Buffer.byteLength(json);
382
+ if (bytes > CLIENT_MESSAGE_BYTES)
383
+ throw new error_js_1.QoderError('Realtime client JSON message exceeds 256 KiB');
384
+ if (this.sendCount >= this.maxQueuedEvents || this.sendBytes + bytes > this.maxQueueBytes)
385
+ throw new error_js_1.QoderError('Realtime send queue capacity exceeded');
386
+ this.sendCount++;
387
+ this.sendBytes += bytes;
388
+ const result = this.sendTail.then(async () => {
389
+ if (this.ended)
390
+ throw this.terminal ?? new error_js_1.QoderError('Realtime connection is closed');
391
+ if (options.signal?.aborted)
392
+ throw new error_js_1.APIUserAbortError('Realtime send was aborted');
393
+ const written = new Promise((resolve, reject) => this.socket.send(json, { binary: false }, error => error ? reject(new error_js_1.APIConnectionError('Realtime send failed')) : resolve()));
394
+ try {
395
+ await wait(written, timeout, options.signal, 'Realtime send');
396
+ }
397
+ catch (error) {
398
+ this.fail(error);
399
+ throw error;
400
+ }
401
+ }).finally(() => { this.sendCount--; this.sendBytes -= bytes; });
402
+ this.sendTail = result.catch(() => { });
403
+ const deadline = wait(result, timeout, options.signal, 'Realtime send');
404
+ return deadline.catch(error => { this.fail(error); throw error; });
405
+ }
406
+ sendText(text, options) {
407
+ if (typeof text !== 'string' || !text.trim() || new TextEncoder().encode(text.trim()).length > 16 * 1024)
408
+ throw new error_js_1.QoderError('Realtime text must be nonempty and at most 16 KiB UTF-8');
409
+ return this.sendEvent({ version: types_js_1.REALTIME_VERSION, type: 'text.message', payload: { text: text.trim() } }, options);
410
+ }
411
+ appendAudio(pcm, options) {
412
+ if (!(pcm instanceof Uint8Array) || !pcm.byteLength || pcm.byteLength % 2)
413
+ throw new error_js_1.QoderError('Audio must contain nonempty, complete PCM16 samples');
414
+ if (pcm.byteLength > CLIENT_MESSAGE_BYTES * 3 / 4)
415
+ throw new error_js_1.QoderError('Realtime client JSON message exceeds 256 KiB');
416
+ return this.sendEvent({ version: types_js_1.REALTIME_VERSION, type: 'audio.append', payload: { audio: Buffer.from(pcm.buffer, pcm.byteOffset, pcm.byteLength).toString('base64') } }, options);
417
+ }
418
+ interrupt(options) { return this.sendEvent({ version: types_js_1.REALTIME_VERSION, type: 'interrupt', payload: {} }, options); }
419
+ ping(options) { return this.sendEvent({ version: types_js_1.REALTIME_VERSION, type: 'ping', payload: {} }, options); }
420
+ playbackStarted(receipt = {}, options) { return this.playback('playback.started', receipt, options); }
421
+ playbackEnded(receipt = {}, options) { return this.playback('playback.ended', receipt, options); }
422
+ playbackCancelled(receipt = {}, options) { return this.playback('playback.cancelled', receipt, options); }
423
+ playback(type, receipt, options) {
424
+ for (const value of Object.values(receipt))
425
+ if (typeof value !== 'string' || !value)
426
+ throw new error_js_1.QoderError('Playback identifiers must be nonempty strings');
427
+ return this.sendEvent({ version: types_js_1.REALTIME_VERSION, type, payload: { ...receipt } }, options);
428
+ }
429
+ /** Send connection.close, require its matching persistence acknowledgement, then release transport. */
430
+ closeGracefully(options = {}) {
431
+ if (this.graceful)
432
+ return this.graceful;
433
+ if (this.ended)
434
+ return Promise.reject(this.terminal ?? new error_js_1.QoderError('Realtime connection is closed'));
435
+ if (!this.ready.capabilities.graceful_close)
436
+ return Promise.reject(new error_js_1.QoderError('Server does not support graceful close'));
437
+ const requestId = options.requestId ?? globalThis.crypto.randomUUID();
438
+ if (!requestId || requestId.trim() !== requestId || Buffer.byteLength(requestId) > 128 || /[\x00-\x1f\x7f]/.test(requestId))
439
+ throw new error_js_1.QoderError('Close requestId must be 1–128 UTF-8 bytes without surrounding whitespace or control characters');
440
+ const timeout = positive(options.timeout, this.closeTimeout, 'close timeout');
441
+ if (options.signal?.aborted)
442
+ return Promise.reject(new error_js_1.APIUserAbortError('Realtime graceful close was aborted'));
443
+ this.closing = true;
444
+ const acknowledgement = new Promise((resolve, reject) => { this.closeAck = { requestId, resolve, reject }; });
445
+ void acknowledgement.catch(() => { });
446
+ this.graceful = (async () => {
447
+ try {
448
+ const confirmed = wait(acknowledgement, timeout, options.signal, 'Realtime graceful close');
449
+ void confirmed.catch(() => { });
450
+ await this.sendEvent({ version: types_js_1.REALTIME_VERSION, type: 'connection.close', payload: { request_id: requestId } }, options);
451
+ return await confirmed;
452
+ }
453
+ finally {
454
+ this.close();
455
+ }
456
+ })();
457
+ return this.graceful;
458
+ }
459
+ /** Transport close does not promise history persistence or cancel background Work. */
460
+ close() {
461
+ this.finish();
462
+ if (this.socket.readyState === 1) {
463
+ this.socket.close(1000);
464
+ const timer = setTimeout(() => this.socket.terminate(), 1000);
465
+ timer.unref();
466
+ this.socket.once('close', () => clearTimeout(timer));
467
+ }
468
+ else
469
+ this.socket.terminate();
470
+ }
471
+ }
472
+ exports.RealtimeConnection = RealtimeConnection;
473
+ //# sourceMappingURL=connection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"connection.js","sourceRoot":"","sources":["../../../src/forward/realtime/connection.ts"],"names":[],"mappings":";;;AA8GA,kDAKC;AAhHD,kDAA6H;AAC7H,yCAAyK;AAmBzK,MAAa,qBAAsB,SAAQ,6BAAkB;IACrB;IAAiC;IAAvE,YAAY,OAAe,EAAW,cAAsB,EAAW,OAAO,eAAe;QAAI,KAAK,CAAC,OAAO,CAAC,CAAC;QAA1E,mBAAc,GAAd,cAAc,CAAQ;QAAW,SAAI,GAAJ,IAAI,CAAkB;IAAoB,CAAC;CACnH;AAFD,sDAEC;AACD,MAAa,6BAA8B,SAAQ,6BAAkB;IAC9C;IAAiC;IAA4B;IAAlF,YAAqB,cAAsB,EAAW,SAAiB,EAAW,WAAmB;QAAI,KAAK,CAAC,+BAA+B,SAAS,GAAG,CAAC,CAAC;QAAvI,mBAAc,GAAd,cAAc,CAAQ;QAAW,cAAS,GAAT,SAAS,CAAQ;QAAW,gBAAW,GAAX,WAAW,CAAQ;IAAwD,CAAC;CAC/J;AAFD,sEAEC;AACD,MAAa,mBAAoB,SAAQ,6BAAkB;IAIpC;IAHZ,IAAI,CAAS;IACb,SAAS,CAAW;IACpB,cAAc,CAAU;IACjC,YAAqB,KAA0B;QAC7C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAkC,CAAC;QACzD,KAAK,CAAC,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC;QAFpE,UAAK,GAAL,KAAK,CAAqB;QAG7C,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC,SAAS,GAAG,OAAO,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;QACxF,IAAI,CAAC,cAAc,GAAG,OAAO,OAAO,CAAC,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC;IACxG,CAAC;CACF;AAXD,kDAWC;AACD,MAAM,QAAQ,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACpC,MAAM,oBAAoB,GAAG,GAAG,GAAG,IAAI,CAAC;AACxC,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,gCAAgC,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,0BAA0B,CAAC,CAAC,CAAC;AACvK,MAAM,MAAM,GAAG,kEAAkE,CAAC;AAClF,SAAS,cAAc,CAAC,KAAc;IACpC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,0EAA0E,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAC9K,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAC5G,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,KAAK,CAAC,IAAI,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC;IACtE,OAAO,GAAG,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;AACnG,CAAC;AACD,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAoC,EAAE,CAAC,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC5I,SAAS,QAAQ,CAAC,KAAyB,EAAE,QAAgB,EAAE,IAAY;IACzE,MAAM,MAAM,GAAG,KAAK,IAAI,QAAQ,CAAC;IACjC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC;QAAE,MAAM,IAAI,qBAAU,CAAC,GAAG,IAAI,yDAAyD,CAAC,CAAC;IACjK,OAAO,MAAM,CAAC;AAChB,CAAC;AACD,SAAS,IAAI,CAAI,KAAiB,EAAE,OAAe,EAAE,MAAsC,EAAE,KAAa;IACxG,OAAO,IAAI,OAAO,CAAI,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACxC,MAAM,KAAK,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,4BAAiB,CAAC,GAAG,KAAK,cAAc,CAAC,CAAC,CAAC;QAC1E,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,oCAAyB,CAAC,GAAG,KAAK,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QACrG,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,SAAS,MAAM,CAAC,KAAa,EAAE,MAAU;YACvC,IAAI,OAAO;gBAAE,OAAO;YACpB,OAAO,GAAG,IAAI,CAAC;YACf,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAC5C,IAAI,KAAK;gBAAE,MAAM,CAAC,KAAK,CAAC,CAAC;;gBAAM,OAAO,CAAC,MAAW,CAAC,CAAC;QACtD,CAAC;QACD,IAAI,MAAM,EAAE,OAAO;YAAE,KAAK,EAAE,CAAC;;YAAM,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5F,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,6BAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnI,CAAC,CAAC,CAAC;AACL,CAAC;AACD,SAAS,aAAa,CAAC,KAAc,EAAE,cAAsB;IAC3D,MAAM,OAAO,GAAG,GAAG,EAAE,CAAC,IAAI,qBAAqB,CAAC,4CAA4C,EAAE,cAAc,CAAC,CAAC;IAC9G,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,KAAK,2BAAgB,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI;WACtG,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ;WACjF,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAK,KAAK,CAAC,QAAmB,GAAG,CAAC,IAAI,KAAK,CAAC,eAAe,KAAK,cAAc;WACnH,CAAC,cAAc,CAAC,KAAK,CAAC,SAAS,CAAC;WAChC,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC;WAClE,CAAC,KAAK,CAAC,eAAe,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,eAAe,KAAK,QAAQ,CAAC;QAAE,MAAM,OAAO,EAAE,CAAC;IACzG,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;IACxB,MAAM,QAAQ,GAA6B;QACzC,aAAa,EAAE,CAAC,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAC,QAAQ,CAAC,EAAE,kBAAkB,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,kBAAkB,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;QAClI,aAAa,EAAE,CAAC,OAAO,CAAC,EAAE,oBAAoB,EAAE,CAAC,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAC,QAAQ,EAAE,WAAW,CAAC,EAAE,cAAc,EAAE,CAAC,QAAQ,CAAC;QAChI,eAAe,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,gBAAgB,EAAE,CAAC,iBAAiB,EAAE,gBAAgB,EAAE,SAAS,CAAC;QACvG,gBAAgB,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAC,QAAQ,CAAC,EAAE,mBAAmB,EAAE,CAAC,YAAY,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC;KAC9I,CAAC;IACF,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC;QAAE,MAAM,OAAO,EAAE,CAAC;IAC1F,MAAM,eAAe,GAA6B;QAChD,kBAAkB,EAAE,CAAC,SAAS,EAAE,aAAa,CAAC,EAAE,kBAAkB,EAAE,CAAC,SAAS,EAAE,aAAa,CAAC;QAC9F,eAAe,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,gBAAgB,EAAE,CAAC,UAAU,CAAC,EAAE,aAAa,EAAE,CAAC,UAAU,CAAC;KACpG,CAAC;IACF,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,SAAS,IAAI,OAAO,CAAC,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC;QAAE,MAAM,OAAO,EAAE,CAAC;IACzH,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS,IAAI,OAAO,CAAC,CAAC,QAAQ,KAAK,SAAS;QAAE,MAAM,OAAO,EAAE,CAAC;IACnH,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,IAAI,OAAO,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,cAAc,KAAK,SAAS,IAAI,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,cAAc,CAAC,IAAK,CAAC,CAAC,cAAyB,GAAG,CAAC,CAAC,CAAC,CAAC;QAAE,MAAM,OAAO,EAAE,CAAC;IACtO,MAAM,QAAQ,GAA2B,EAAE,eAAe,EAAE,UAAU,EAAE,cAAc,EAAE,SAAS,EAAE,gBAAgB,EAAE,WAAW,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC;IAC5J,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;QAAE,MAAM,OAAO,EAAE,CAAC;IAC/E,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;QAAE,MAAM,OAAO,EAAE,CAAC;IAC/J,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QACjC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,CAAC,QAAQ,KAAK,QAAQ,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC;eAC7G,CAAC,CAAC,WAAW,CAAC,MAAM,KAAK,OAAO,IAAI,CAAC,CAAC,WAAW,CAAC,WAAW,KAAK,KAAK,IAAI,CAAC,CAAC,WAAW,CAAC,QAAQ,KAAK,CAAC;eACvG,CAAC,CAAC,YAAY,CAAC,MAAM,KAAK,OAAO,IAAI,CAAC,CAAC,YAAY,CAAC,WAAW,KAAK,KAAK,IAAI,CAAC,CAAC,YAAY,CAAC,QAAQ,KAAK,CAAC;eAC1G,CAAC,QAAQ,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,CAAC,YAAY,CAAC,cAAc,KAAK,SAAS;YAAE,MAAM,OAAO,EAAE,CAAC;IACxG,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC;QAAE,MAAM,OAAO,EAAE,CAAC;IAC9G,IAAI,KAAK,CAAC,IAAI,KAAK,mBAAmB,IAAI,CAAC,CAAC,oBAAoB,EAAE,YAAY,EAAE,OAAO,EAAE,mBAAmB,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAiB,CAAC;QAAE,MAAM,OAAO,EAAE,CAAC;IAC7J,OAAO,KAAuC,CAAC;AACjD,CAAC;AACD,wFAAwF;AACxF,SAAgB,mBAAmB,CAAC,KAA0B;IAC5D,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,IAAI,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,qBAAU,CAAC,6CAA6C,CAAC,CAAC;IAC9M,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACpD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,IAAI,qBAAU,CAAC,4CAA4C,CAAC,CAAC;IAC1F,OAAO,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED,wGAAwG;AACxG,MAAa,kBAAkB;IA2BQ;IAAoC;IA1BhE,cAAc,CAAS;IAChC,KAAK,CAAiB;IACtB,UAAU,GAAkB,IAAI,CAAC;IAChB,KAAK,GAAyD,EAAE,CAAC;IAC1E,UAAU,GAAG,CAAC,CAAC;IACf,YAAY,GAAG,CAAC,CAAC,CAAC;IACT,eAAe,CAAS;IACxB,aAAa,CAAS;IACtB,WAAW,CAAS;IACpB,YAAY,CAAS;IACrB,YAAY,CAAgB;IACrC,YAAY,CAAc;IAC1B,WAAW,CAA0B;IACrC,QAAQ,CAAsG;IAC9G,QAAQ,CAAS;IACjB,KAAK,GAAG,KAAK,CAAC;IACd,OAAO,GAAG,KAAK,CAAC;IAChB,QAAQ,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;IAC5C,SAAS,GAAG,CAAC,CAAC;IACd,SAAS,GAAG,CAAC,CAAC;IACd,QAAQ,CAA2B;IACnC,QAAQ,CAAmG;IAC3G,cAAc,CAAiC;IAC/C,UAAU,CAAiC;IAClC,KAAK,CAAa;IAEnC,YAAqC,MAAiB,EAAmB,OAA+B;QAAnE,WAAM,GAAN,MAAM,CAAW;QAAmB,YAAO,GAAP,OAAO,CAAwB;QACtG,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;QAC7C,IAAI,CAAC,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC,eAAe,EAAE,GAAG,EAAE,iBAAiB,CAAC,CAAC;QACjF,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI,EAAE,eAAe,CAAC,CAAC;QACvF,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,WAAW,EAAE,KAAK,EAAE,aAAa,CAAC,CAAC;QACvE,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC;QAC1E,IAAI,CAAC,YAAY,GAAG,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAClH,KAAK,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACvC,IAAI,CAAC,KAAK,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,4BAAiB,CAAC,iCAAiC,CAAC,CAAC,CAAC;QACvF,OAAO,CAAC,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACtE,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;QAClJ,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;YACrB,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAClC,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,oCAAyB,CAAC,0BAA0B,CAAC,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC;QAClK,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,IAAa,EAAE,MAAe,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;QACvF,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,KAAK,iCAAiC;YACvF,CAAC,CAAC,IAAI,oCAAyB,CAAC,8BAA8B,CAAC,CAAC,CAAC,CAAC,IAAI,6BAAkB,CAAC,qCAAqC,CAAC,CAAC,CAAC,CAAC;QACpI,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,6BAA6B,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;QAChL,MAAM,CAAC,EAAE,CAAC,qBAAqB,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,EAAE;YACtD,IAAI,GAAG,GAAG,EAAE,CAAC;YACb,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE;gBAC1B,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC;gBACtB,IAAI,KAAK,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;oBAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;oBAAC,IAAI,CAAC,IAAI,CAAC,IAAI,6BAAkB,CAAC,kDAAkD,CAAC,CAAC,CAAC;gBAAC,CAAC;;oBAChI,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YAC/B,CAAC,CAAC,CAAC;YACH,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,6BAAkB,CAAC,oCAAoC,CAAC,CAAC,CAAC,CAAC;YACpG,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;gBACtB,IAAI,IAAI,GAAY,GAAG,CAAC;gBACxB,IAAI,CAAC;oBAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAC,kCAAkC,CAAC,CAAC;gBAC5E,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;gBAC9B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC;oBAAE,IAAI,KAAK,KAAK,SAAS;wBAAE,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;gBACxJ,IAAI,CAAC,IAAI,CAAC,mBAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU,IAAI,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;YACrF,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,oCAAyB,CAAC,8BAA8B,CAAC,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,gBAAgB,EAAE,KAAK,EAAE,kBAAkB,CAAC,CAAC,CAAC;QAChL,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO;YAAE,IAAI,CAAC,KAAK,EAAE,CAAC;IAC5C,CAAC;IAED,gBAAgB;IAChB,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAiB,EAAE,OAA+B;QACrE,IAAI,OAAO,OAAO,KAAK,WAAW,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI;YAAE,MAAM,IAAI,qBAAU,CAAC,kFAAkF,CAAC,CAAC;QACxK,IAAI,OAAO,OAAO,CAAC,cAAc,KAAK,QAAQ,IAAI,CAAC,OAAO,CAAC,cAAc,IAAI,OAAO,CAAC,cAAc,CAAC,IAAI,EAAE,KAAK,OAAO,CAAC,cAAc,IAAI,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC;YAAE,MAAM,IAAI,qBAAU,CAAC,sFAAsF,CAAC,CAAC;QACtS,KAAK,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,gBAAgB,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE,aAAa,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI,EAAE,eAAe,EAAE,IAAI,GAAG,IAAI,EAAE,CAAC;YAAE,QAAQ,CAAC,OAAO,CAAC,GAA2B,CAAuB,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;QACjT,MAAM,iBAAiB,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,gBAAgB,IAAI,KAAK,CAAC,CAAC;QAC3E,MAAM,qBAAqB,GAAG,IAAI,eAAe,EAAE,CAAC;QACpD,MAAM,iBAAiB,GAAG,GAAG,EAAE,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC;QAC9D,OAAO,CAAC,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7E,IAAI,WAAqI,CAAC;QAC1I,IAAI,CAAC;YACH,WAAW,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,uBAAuB,CAAC,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,qBAAqB,CAAC,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,gBAAgB,IAAI,KAAK,EAAE,OAAO,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC;QAC1N,CAAC;gBAAS,CAAC;YAAC,OAAO,CAAC,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;YAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC;QAAC,CAAC;QAC7G,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO;YAAE,MAAM,IAAI,4BAAiB,CAAC,iCAAiC,CAAC,CAAC;QAC5F,MAAM,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,MAAM,CAAC,GAAG,WAAW,CAAC;QAC/C,MAAM,kBAAkB,GAAG,iBAAiB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC1D,IAAI,kBAAkB,IAAI,CAAC;YAAE,MAAM,IAAI,oCAAyB,CAAC,8BAA8B,CAAC,CAAC;QACjG,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC;QAC9B,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC;QAC1C,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,GAAG,EAAE;YAC7B,GAAG,SAAsB;YACzB,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YAC9C,eAAe,EAAE,KAAK;YACtB,iBAAiB,EAAE,KAAK;YACxB,gBAAgB,EAAE,kBAAkB;YACpC,UAAU,EAAE,OAAO,CAAC,eAAe,IAAI,IAAI,GAAG,IAAI;SACnD,CAAC,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,kBAAkB,CAAC,MAAM,EAAE,EAAE,GAAG,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,CAAC,CAAC;QACxG,MAAM,UAAU,CAAC,YAAY,CAAC;QAC9B,OAAO,UAAU,CAAC;IACpB,CAAC;IAEO,SAAS,CAAC,IAAa,EAAE,MAAe;QAC9C,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO;QACvB,IAAI,CAAC;YACH,IAAI,MAAM;gBAAE,MAAM,IAAI,qBAAqB,CAAC,yCAAyC,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;YAC5G,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,YAAY,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YAClH,IAAI,KAAc,CAAC;YACnB,IAAI,CAAC;gBAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC;gBAAC,MAAM,IAAI,qBAAqB,CAAC,uBAAuB,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;YAAC,CAAC;YACvI,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;YACxD,IAAI,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,YAAY;gBAAE,MAAM,IAAI,qBAAqB,CAAC,oCAAoC,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;YACpI,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC;YACnC,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC;YAC/B,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAAC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;gBAAC,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;gBAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;YAAC,CAAC;iBAC7H,CAAC;gBACJ,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,GAAG,IAAI,CAAC,aAAa;oBAAE,MAAM,IAAI,qBAAqB,CAAC,0CAA0C,EAAE,IAAI,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC;gBACjN,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC;YACnE,CAAC;YACD,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;gBAChD,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,OAAmC,CAAC;gBACvD,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACrD,CAAC;YACD,IAAI,KAAK,CAAC,IAAI,KAAK,mBAAmB,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,KAAK,IAAI,CAAC,QAAQ,EAAE,SAAS;gBAAE,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,OAAoC,CAAC,CAAC;YACpK,IAAI,KAAK,CAAC,IAAI,KAAK,gBAAgB;gBAAE,IAAI,CAAC,IAAI,CAAC,IAAI,qBAAqB,CAAC,kCAAkC,EAAE,IAAI,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC,CAAC;YACrJ,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;gBAAE,IAAI,CAAC,IAAI,CAAC,IAAI,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;QAC3I,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAAC,IAAI,CAAC,IAAI,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,6BAAkB,CAAC,yBAAyB,CAAC,CAAC,CAAC;QAAC,CAAC;IACpH,CAAC;IACO,MAAM,CAAC,KAAa;QAC1B,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO;QACvB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;QACtB,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACjE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9D,IAAI,CAAC,WAAW,CAAC,KAAK,IAAI,IAAI,6BAA6B,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,EAAE,qBAAqB,CAAC,CAAC,CAAC;QAC/G,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,IAAI,IAAI,6BAA6B,CAAC,IAAI,CAAC,cAAc,EAAE,IAAI,EAAE,yCAAyC,CAAC,CAAC,CAAC;QACxI,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAAC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;YAAC,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;YAAC,IAAI,KAAK;gBAAE,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;;gBAAM,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAAC,CAAC;IAC/K,CAAC;IACO,IAAI,CAAC,KAAY,IAAU,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;IAEjF,iGAAiG;IACjG,KAAK,CAAC,OAAO,CAAC,UAA+B,EAAE;QAC7C,IAAI,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,qBAAU,CAAC,6CAA6C,CAAC,CAAC;QACvF,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO;YAAE,MAAM,IAAI,4BAAiB,CAAC,8BAA8B,CAAC,CAAC;QACzF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAClC,IAAI,MAAM,EAAE,CAAC;YAAC,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC,KAAK,CAAC;YAAC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;QAAC,CAAC;QAC7F,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YAAC,IAAI,IAAI,CAAC,QAAQ;gBAAE,MAAM,IAAI,CAAC,QAAQ,CAAC;YAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;QAAC,CAAC;QACpG,IAAI,QAAsD,CAAC;QAC3D,MAAM,OAAO,GAAG,IAAI,OAAO,CAAsC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC,QAAQ,GAAG,QAAQ,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3I,IAAI,CAAC;YAAC,OAAO,MAAM,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,iBAAiB,CAAC,EAAE,OAAO,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;QAAC,CAAC;gBAC1H,CAAC;YAAC,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ;gBAAE,IAAI,CAAC,QAAQ,GAAG,SAAS,CAAC;QAAC,CAAC;IACxE,CAAC;IACD,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC;QAC3B,SAAS,CAAC;YAAC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;YAAC,IAAI,IAAI,CAAC,IAAI;gBAAE,OAAO;YAAC,MAAM,IAAI,CAAC,KAAK,CAAC;QAAC,CAAC;IAC1F,CAAC;IACD,yEAAyE;IACzE,SAAS,CAAC,KAA0B,EAAE,UAA+B,EAAE;QACrE,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;QAC5E,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO;YAAE,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,4BAAiB,CAAC,2BAA2B,CAAC,CAAC,CAAC;QACvG,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,OAAO,KAAK,2BAAgB,IAAI,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC;YAAE,MAAM,IAAI,qBAAU,CAAC,wDAAwD,CAAC,CAAC;QAC9M,IAAI,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,KAAK,CAAC;YAAE,MAAM,IAAI,CAAC,QAAQ,IAAI,IAAI,qBAAU,CAAC,+BAA+B,CAAC,CAAC;QACvH,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,MAAM,IAAI,qBAAU,CAAC,gCAAgC,CAAC,CAAC;QAC/H,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,IAAI,CAAC,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI,CAAC;YAAE,MAAM,IAAI,qBAAU,CAAC,yDAAyD,CAAC,CAAC;QACvQ,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,IAAI,CAAC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;YAAE,MAAM,IAAI,qBAAU,CAAC,6CAA6C,CAAC,CAAC;QACpQ,IAAI,KAAK,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;YACtC,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;YACpC,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;gBAAE,MAAM,IAAI,qBAAU,CAAC,qCAAqC,CAAC,CAAC;QAClL,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,KAAK,GAAG,oBAAoB;YAAE,MAAM,IAAI,qBAAU,CAAC,8CAA8C,CAAC,CAAC;QACvG,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,SAAS,GAAG,KAAK,GAAG,IAAI,CAAC,aAAa;YAAE,MAAM,IAAI,qBAAU,CAAC,uCAAuC,CAAC,CAAC;QACzJ,IAAI,CAAC,SAAS,EAAE,CAAC;QAAC,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC;QAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;YAC3C,IAAI,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,CAAC,QAAQ,IAAI,IAAI,qBAAU,CAAC,+BAA+B,CAAC,CAAC;YACvF,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO;gBAAE,MAAM,IAAI,4BAAiB,CAAC,2BAA2B,CAAC,CAAC;YACtF,MAAM,OAAO,GAAG,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,6BAAkB,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YACvL,IAAI,CAAC;gBAAC,MAAM,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;YAAC,CAAC;YACtE,OAAO,KAAK,EAAE,CAAC;gBAAC,IAAI,CAAC,IAAI,CAAC,KAAc,CAAC,CAAC;gBAAC,MAAM,KAAK,CAAC;YAAC,CAAC;QAC3D,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACjE,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;QACxE,OAAO,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACrE,CAAC;IACD,QAAQ,CAAC,IAAY,EAAE,OAA6B;QAClD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,EAAE,GAAG,IAAI;YAAE,MAAM,IAAI,qBAAU,CAAC,yDAAyD,CAAC,CAAC;QAC1L,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,2BAAgB,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;IACtH,CAAC;IACD,WAAW,CAAC,GAAe,EAAE,OAA6B;QACxD,IAAI,CAAC,CAAC,GAAG,YAAY,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,UAAU,GAAG,CAAC;YAAE,MAAM,IAAI,qBAAU,CAAC,qDAAqD,CAAC,CAAC;QACvJ,IAAI,GAAG,CAAC,UAAU,GAAG,oBAAoB,GAAG,CAAC,GAAG,CAAC;YAAE,MAAM,IAAI,qBAAU,CAAC,8CAA8C,CAAC,CAAC;QACxH,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,2BAAgB,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;IACtL,CAAC;IACD,SAAS,CAAC,OAA6B,IAAmB,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,2BAAgB,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAC1J,IAAI,CAAC,OAA6B,IAAmB,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,2BAAgB,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAChJ,eAAe,CAAC,UAAmC,EAAE,EAAE,OAA6B,IAAmB,OAAO,IAAI,CAAC,QAAQ,CAAC,kBAAkB,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACpK,aAAa,CAAC,UAAmC,EAAE,EAAE,OAA6B,IAAmB,OAAO,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAChK,iBAAiB,CAAC,UAAmC,EAAE,EAAE,OAA6B,IAAmB,OAAO,IAAI,CAAC,QAAQ,CAAC,oBAAoB,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAChK,QAAQ,CAAC,IAAY,EAAE,OAAgC,EAAE,OAA6B;QAC5F,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC;YAAE,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,qBAAU,CAAC,+CAA+C,CAAC,CAAC;QAC3J,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,2BAAgB,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;IAC/F,CAAC;IACD,uGAAuG;IACvG,eAAe,CAAC,UAAgC,EAAE;QAChD,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC,QAAQ,CAAC;QACxC,IAAI,IAAI,CAAC,KAAK;YAAE,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,qBAAU,CAAC,+BAA+B,CAAC,CAAC,CAAC;QACxG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,cAAc;YAAE,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,qBAAU,CAAC,wCAAwC,CAAC,CAAC,CAAC;QAC7H,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,UAAU,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;QACtE,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,IAAI,EAAE,KAAK,SAAS,IAAI,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,GAAG,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC;YAAE,MAAM,IAAI,qBAAU,CAAC,gGAAgG,CAAC,CAAC;QACpP,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;QAC9E,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO;YAAE,OAAO,OAAO,CAAC,MAAM,CAAC,IAAI,4BAAiB,CAAC,qCAAqC,CAAC,CAAC,CAAC;QACjH,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,MAAM,eAAe,GAAG,IAAI,OAAO,CAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE,GAAG,IAAI,CAAC,QAAQ,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9H,KAAK,eAAe,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACrC,IAAI,CAAC,QAAQ,GAAG,CAAC,KAAK,IAAI,EAAE;YAC1B,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,EAAE,yBAAyB,CAAC,CAAC;gBAC5F,KAAK,SAAS,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;gBAC/B,MAAM,IAAI,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,2BAAgB,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;gBAC3H,OAAO,MAAM,SAAS,CAAC;YACzB,CAAC;oBAAS,CAAC;gBAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YAAC,CAAC;QAC7B,CAAC,CAAC,EAAE,CAAC;QACL,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IACD,sFAAsF;IACtF,KAAK;QACH,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,KAAK,CAAC,EAAE,CAAC;YACjC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACxB,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,IAAI,CAAC,CAAC;YAC9D,KAAK,CAAC,KAAK,EAAE,CAAC;YACd,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;QACvD,CAAC;;YAAM,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;IACjC,CAAC;CACF;AAtOD,gDAsOC"}
@@ -0,0 +1,31 @@
1
+ import { APIResource } from '../../core/resource.js';
2
+ import { APIPromise } from '../../core/api-promise.js';
3
+ import type { APIClient, RequestOptions } from '../../core/client.js';
4
+ import type { RealtimeConversation, RealtimeConversationCreateParams, RealtimeHistoryEvent, RealtimeHistoryParams, RealtimeHistoryResponse } from './types.js';
5
+ /** History uses before cursors and events, independently of ordinary list pages. */
6
+ export declare class RealtimeHistoryPage implements RealtimeHistoryResponse, AsyncIterable<RealtimeHistoryEvent> {
7
+ private readonly client;
8
+ private readonly conversationID;
9
+ private readonly params;
10
+ private readonly options;
11
+ private readonly data;
12
+ readonly response: Response;
13
+ readonly conversation: RealtimeHistoryResponse['conversation'];
14
+ readonly events: RealtimeHistoryEvent[];
15
+ readonly page: RealtimeHistoryResponse['page'];
16
+ readonly _request_id: string | null;
17
+ [key: string]: unknown;
18
+ constructor(client: APIClient, conversationID: string, params: RealtimeHistoryParams, options: RequestOptions, data: RealtimeHistoryResponse, response: Response);
19
+ hasNextPage(): boolean;
20
+ getNextPage(): APIPromise<RealtimeHistoryPage>;
21
+ iterPages(): AsyncGenerator<RealtimeHistoryPage>;
22
+ [Symbol.asyncIterator](): AsyncGenerator<RealtimeHistoryEvent>;
23
+ toJSON(): RealtimeHistoryResponse;
24
+ }
25
+ export declare class RealtimeConversations extends APIResource {
26
+ /** Create a Beta Realtime Conversation; use a stable key for this operation. */
27
+ create(params: RealtimeConversationCreateParams, options?: RequestOptions): APIPromise<RealtimeConversation>;
28
+ /** Query persisted history, newest first; next_before retrieves older records. */
29
+ history(conversationID: string, params?: RealtimeHistoryParams, options?: RequestOptions): APIPromise<RealtimeHistoryPage>;
30
+ }
31
+ //# sourceMappingURL=conversation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation.d.ts","sourceRoot":"","sources":["../../../src/forward/realtime/conversation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAGtE,OAAO,KAAK,EAAE,oBAAoB,EAAE,gCAAgC,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAE/J,oFAAoF;AACpF,qBAAa,mBAAoB,YAAW,uBAAuB,EAAE,aAAa,CAAC,oBAAoB,CAAC;IAM1F,OAAO,CAAC,QAAQ,CAAC,MAAM;IAAa,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC7E,OAAO,CAAC,QAAQ,CAAC,MAAM;IAAyB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxE,OAAO,CAAC,QAAQ,CAAC,IAAI;IAA2B,QAAQ,CAAC,QAAQ,EAAE,QAAQ;IAP7E,QAAQ,CAAC,YAAY,EAAE,uBAAuB,CAAC,cAAc,CAAC,CAAC;IAC/D,QAAQ,CAAC,MAAM,EAAE,oBAAoB,EAAE,CAAC;IACxC,QAAQ,CAAC,IAAI,EAAE,uBAAuB,CAAC,MAAM,CAAC,CAAC;IAC/C,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;gBACM,MAAM,EAAE,SAAS,EAAmB,cAAc,EAAE,MAAM,EACpE,MAAM,EAAE,qBAAqB,EAAmB,OAAO,EAAE,cAAc,EACvE,IAAI,EAAE,uBAAuB,EAAW,QAAQ,EAAE,QAAQ;IAO7E,WAAW,IAAI,OAAO;IACtB,WAAW,IAAI,UAAU,CAAC,mBAAmB,CAAC;IAKvC,SAAS,IAAI,cAAc,CAAC,mBAAmB,CAAC;IAahD,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,cAAc,CAAC,oBAAoB,CAAC;IAGrE,MAAM,IAAI,uBAAuB;CAClC;AAED,qBAAa,qBAAsB,SAAQ,WAAW;IACpD,gFAAgF;IAChF,MAAM,CAAC,MAAM,EAAE,gCAAgC,EAAE,OAAO,GAAE,cAAmB,GAAG,UAAU,CAAC,oBAAoB,CAAC;IAShH,kFAAkF;IAClF,OAAO,CAAC,cAAc,EAAE,MAAM,EAAE,MAAM,GAAE,qBAA0B,EAAE,OAAO,GAAE,cAAmB,GAAG,UAAU,CAAC,mBAAmB,CAAC;CAanI"}