@langchain/langgraph-sdk 0.1.9 → 1.0.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 (234) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/_virtual/rolldown_runtime.cjs +25 -0
  3. package/dist/auth/error.cjs +76 -86
  4. package/dist/auth/error.cjs.map +1 -0
  5. package/dist/auth/error.d.cts +13 -0
  6. package/dist/auth/error.d.cts.map +1 -0
  7. package/dist/auth/error.d.ts +12 -8
  8. package/dist/auth/error.d.ts.map +1 -0
  9. package/dist/auth/error.js +76 -83
  10. package/dist/auth/error.js.map +1 -0
  11. package/dist/auth/index.cjs +36 -44
  12. package/dist/auth/index.cjs.map +1 -0
  13. package/dist/auth/index.d.cts +31 -0
  14. package/dist/auth/index.d.cts.map +1 -0
  15. package/dist/auth/index.d.ts +20 -15
  16. package/dist/auth/index.d.ts.map +1 -0
  17. package/dist/auth/index.js +35 -39
  18. package/dist/auth/index.js.map +1 -0
  19. package/dist/auth/types.d.cts +294 -0
  20. package/dist/auth/types.d.cts.map +1 -0
  21. package/dist/auth/types.d.ts +162 -165
  22. package/dist/auth/types.d.ts.map +1 -0
  23. package/dist/client.cjs +1108 -1294
  24. package/dist/client.cjs.map +1 -0
  25. package/dist/client.d.cts +688 -0
  26. package/dist/client.d.cts.map +1 -0
  27. package/dist/client.d.ts +647 -639
  28. package/dist/client.d.ts.map +1 -0
  29. package/dist/client.js +1099 -1281
  30. package/dist/client.js.map +1 -0
  31. package/dist/index.cjs +6 -8
  32. package/dist/index.d.cts +7 -0
  33. package/dist/index.d.ts +7 -7
  34. package/dist/index.js +4 -2
  35. package/dist/logging/index.cjs +30 -31
  36. package/dist/logging/index.cjs.map +1 -0
  37. package/dist/logging/index.d.cts +47 -0
  38. package/dist/logging/index.d.cts.map +1 -0
  39. package/dist/logging/index.d.ts +20 -16
  40. package/dist/logging/index.d.ts.map +1 -0
  41. package/dist/logging/index.js +31 -29
  42. package/dist/logging/index.js.map +1 -0
  43. package/dist/react/index.cjs +5 -7
  44. package/dist/react/index.d.cts +4 -0
  45. package/dist/react/index.d.ts +4 -3
  46. package/dist/react/index.js +4 -2
  47. package/dist/react/stream.cjs +14 -15
  48. package/dist/react/stream.cjs.map +1 -0
  49. package/dist/react/stream.custom.cjs +126 -145
  50. package/dist/react/stream.custom.cjs.map +1 -0
  51. package/dist/react/stream.custom.d.cts +39 -0
  52. package/dist/react/stream.custom.d.cts.map +1 -0
  53. package/dist/react/stream.custom.d.ts +35 -37
  54. package/dist/react/stream.custom.d.ts.map +1 -0
  55. package/dist/react/stream.custom.js +122 -137
  56. package/dist/react/stream.custom.js.map +1 -0
  57. package/dist/react/stream.d.cts +73 -0
  58. package/dist/react/stream.d.cts.map +1 -0
  59. package/dist/react/stream.d.ts +21 -15
  60. package/dist/react/stream.d.ts.map +1 -0
  61. package/dist/react/stream.js +12 -11
  62. package/dist/react/stream.js.map +1 -0
  63. package/dist/react/stream.lgp.cjs +438 -495
  64. package/dist/react/stream.lgp.cjs.map +1 -0
  65. package/dist/react/stream.lgp.js +433 -487
  66. package/dist/react/stream.lgp.js.map +1 -0
  67. package/dist/react/thread.cjs +18 -15
  68. package/dist/react/thread.cjs.map +1 -0
  69. package/dist/react/thread.js +19 -13
  70. package/dist/react/thread.js.map +1 -0
  71. package/dist/react/types.d.cts +355 -0
  72. package/dist/react/types.d.cts.map +1 -0
  73. package/dist/react/types.d.ts +333 -329
  74. package/dist/react/types.d.ts.map +1 -0
  75. package/dist/react-ui/client.cjs +123 -184
  76. package/dist/react-ui/client.cjs.map +1 -0
  77. package/dist/react-ui/client.d.cts +90 -0
  78. package/dist/react-ui/client.d.cts.map +1 -0
  79. package/dist/react-ui/client.d.ts +67 -51
  80. package/dist/react-ui/client.d.ts.map +1 -0
  81. package/dist/react-ui/client.js +118 -143
  82. package/dist/react-ui/client.js.map +1 -0
  83. package/dist/react-ui/index.cjs +14 -13
  84. package/dist/react-ui/index.cjs.map +1 -0
  85. package/dist/react-ui/index.d.cts +3 -0
  86. package/dist/react-ui/index.d.ts +3 -2
  87. package/dist/react-ui/index.js +8 -3
  88. package/dist/react-ui/index.js.map +1 -0
  89. package/dist/react-ui/server/index.cjs +5 -7
  90. package/dist/react-ui/server/index.d.cts +3 -0
  91. package/dist/react-ui/server/index.d.ts +3 -2
  92. package/dist/react-ui/server/index.js +4 -2
  93. package/dist/react-ui/server/server.cjs +53 -44
  94. package/dist/react-ui/server/server.cjs.map +1 -0
  95. package/dist/react-ui/server/server.d.cts +55 -0
  96. package/dist/react-ui/server/server.d.cts.map +1 -0
  97. package/dist/react-ui/server/server.d.ts +43 -39
  98. package/dist/react-ui/server/server.d.ts.map +1 -0
  99. package/dist/react-ui/server/server.js +54 -42
  100. package/dist/react-ui/server/server.js.map +1 -0
  101. package/dist/react-ui/types.cjs +32 -36
  102. package/dist/react-ui/types.cjs.map +1 -0
  103. package/dist/react-ui/types.d.cts +25 -0
  104. package/dist/react-ui/types.d.cts.map +1 -0
  105. package/dist/react-ui/types.d.ts +23 -19
  106. package/dist/react-ui/types.d.ts.map +1 -0
  107. package/dist/react-ui/types.js +32 -34
  108. package/dist/react-ui/types.js.map +1 -0
  109. package/dist/schema.d.cts +277 -0
  110. package/dist/schema.d.cts.map +1 -0
  111. package/dist/schema.d.ts +249 -242
  112. package/dist/schema.d.ts.map +1 -0
  113. package/dist/singletons/fetch.cjs +16 -20
  114. package/dist/singletons/fetch.cjs.map +1 -0
  115. package/dist/singletons/fetch.d.cts +14 -0
  116. package/dist/singletons/fetch.d.cts.map +1 -0
  117. package/dist/singletons/fetch.d.ts +5 -2
  118. package/dist/singletons/fetch.d.ts.map +1 -0
  119. package/dist/singletons/fetch.js +16 -17
  120. package/dist/singletons/fetch.js.map +1 -0
  121. package/dist/types.d.cts +187 -0
  122. package/dist/types.d.cts.map +1 -0
  123. package/dist/types.d.ts +178 -173
  124. package/dist/types.d.ts.map +1 -0
  125. package/dist/types.messages.d.cts +91 -0
  126. package/dist/types.messages.d.cts.map +1 -0
  127. package/dist/types.messages.d.ts +71 -66
  128. package/dist/types.messages.d.ts.map +1 -0
  129. package/dist/types.stream.d.cts +235 -0
  130. package/dist/types.stream.d.cts.map +1 -0
  131. package/dist/types.stream.d.ts +149 -142
  132. package/dist/types.stream.d.ts.map +1 -0
  133. package/dist/ui/branching.cjs +145 -141
  134. package/dist/ui/branching.cjs.map +1 -0
  135. package/dist/ui/branching.d.cts +22 -0
  136. package/dist/ui/branching.d.cts.map +1 -0
  137. package/dist/ui/branching.d.ts +17 -30
  138. package/dist/ui/branching.d.ts.map +1 -0
  139. package/dist/ui/branching.js +147 -139
  140. package/dist/ui/branching.js.map +1 -0
  141. package/dist/ui/errors.cjs +14 -12
  142. package/dist/ui/errors.cjs.map +1 -0
  143. package/dist/ui/errors.js +14 -9
  144. package/dist/ui/errors.js.map +1 -0
  145. package/dist/ui/manager.cjs +156 -232
  146. package/dist/ui/manager.cjs.map +1 -0
  147. package/dist/ui/manager.js +156 -228
  148. package/dist/ui/manager.js.map +1 -0
  149. package/dist/ui/messages.cjs +55 -69
  150. package/dist/ui/messages.cjs.map +1 -0
  151. package/dist/ui/messages.js +55 -66
  152. package/dist/ui/messages.js.map +1 -0
  153. package/dist/ui/utils.cjs +10 -10
  154. package/dist/ui/utils.cjs.map +1 -0
  155. package/dist/ui/utils.js +10 -8
  156. package/dist/ui/utils.js.map +1 -0
  157. package/dist/utils/async_caller.cjs +103 -185
  158. package/dist/utils/async_caller.cjs.map +1 -0
  159. package/dist/utils/async_caller.d.cts +53 -0
  160. package/dist/utils/async_caller.d.cts.map +1 -0
  161. package/dist/utils/async_caller.d.ts +36 -31
  162. package/dist/utils/async_caller.d.ts.map +1 -0
  163. package/dist/utils/async_caller.js +101 -177
  164. package/dist/utils/async_caller.js.map +1 -0
  165. package/dist/utils/env.cjs +11 -13
  166. package/dist/utils/env.cjs.map +1 -0
  167. package/dist/utils/env.js +11 -11
  168. package/dist/utils/env.js.map +1 -0
  169. package/dist/utils/signals.cjs +18 -19
  170. package/dist/utils/signals.cjs.map +1 -0
  171. package/dist/utils/signals.js +18 -17
  172. package/dist/utils/signals.js.map +1 -0
  173. package/dist/utils/sse.cjs +110 -140
  174. package/dist/utils/sse.cjs.map +1 -0
  175. package/dist/utils/sse.js +110 -138
  176. package/dist/utils/sse.js.map +1 -0
  177. package/dist/utils/stream.cjs +90 -114
  178. package/dist/utils/stream.cjs.map +1 -0
  179. package/dist/utils/stream.js +90 -111
  180. package/dist/utils/stream.js.map +1 -0
  181. package/package.json +72 -80
  182. package/auth.cjs +0 -1
  183. package/auth.d.cts +0 -1
  184. package/auth.d.ts +0 -1
  185. package/auth.js +0 -1
  186. package/client.cjs +0 -1
  187. package/client.d.cts +0 -1
  188. package/client.d.ts +0 -1
  189. package/client.js +0 -1
  190. package/dist/auth/types.cjs +0 -2
  191. package/dist/auth/types.js +0 -1
  192. package/dist/react/stream.lgp.d.ts +0 -7
  193. package/dist/react/thread.d.ts +0 -4
  194. package/dist/react/types.cjs +0 -2
  195. package/dist/react/types.js +0 -1
  196. package/dist/schema.cjs +0 -2
  197. package/dist/schema.js +0 -1
  198. package/dist/types.cjs +0 -2
  199. package/dist/types.js +0 -1
  200. package/dist/types.messages.cjs +0 -2
  201. package/dist/types.messages.js +0 -1
  202. package/dist/types.stream.cjs +0 -2
  203. package/dist/types.stream.js +0 -1
  204. package/dist/ui/branching.test.cjs +0 -370
  205. package/dist/ui/branching.test.d.ts +0 -1
  206. package/dist/ui/branching.test.js +0 -368
  207. package/dist/ui/errors.d.ts +0 -12
  208. package/dist/ui/manager.d.ts +0 -87
  209. package/dist/ui/messages.d.ts +0 -18
  210. package/dist/ui/utils.d.ts +0 -2
  211. package/dist/utils/env.d.ts +0 -1
  212. package/dist/utils/signals.d.ts +0 -1
  213. package/dist/utils/sse.d.ts +0 -8
  214. package/dist/utils/stream.d.ts +0 -13
  215. package/index.cjs +0 -1
  216. package/index.d.cts +0 -1
  217. package/index.d.ts +0 -1
  218. package/index.js +0 -1
  219. package/logging.cjs +0 -1
  220. package/logging.d.cts +0 -1
  221. package/logging.d.ts +0 -1
  222. package/logging.js +0 -1
  223. package/react-ui/server.cjs +0 -1
  224. package/react-ui/server.d.cts +0 -1
  225. package/react-ui/server.d.ts +0 -1
  226. package/react-ui/server.js +0 -1
  227. package/react-ui.cjs +0 -1
  228. package/react-ui.d.cts +0 -1
  229. package/react-ui.d.ts +0 -1
  230. package/react-ui.js +0 -1
  231. package/react.cjs +0 -1
  232. package/react.d.cts +0 -1
  233. package/react.d.ts +0 -1
  234. package/react.js +0 -1
@@ -1,148 +1,129 @@
1
- "use strict";
2
- /* __LC_ALLOW_ENTRYPOINT_SIDE_EFFECTS__ */
3
1
  "use client";
4
- /* __LC_ALLOW_ENTRYPOINT_SIDE_EFFECTS__ */
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.FetchStreamTransport = void 0;
7
- exports.useStreamCustom = useStreamCustom;
8
- const react_1 = require("react");
9
- const manager_js_1 = require("../ui/manager.cjs");
10
- const messages_js_1 = require("../ui/messages.cjs");
11
- const sse_js_1 = require("../utils/sse.cjs");
12
- const stream_js_1 = require("../utils/stream.cjs");
13
- const thread_js_1 = require("./thread.cjs");
14
- class FetchStreamTransport {
15
- constructor(options) {
16
- Object.defineProperty(this, "options", {
17
- enumerable: true,
18
- configurable: true,
19
- writable: true,
20
- value: options
21
- });
22
- }
23
- async stream(payload) {
24
- const { signal, ...body } = payload;
25
- let requestInit = {
26
- method: "POST",
27
- headers: {
28
- "Content-Type": "application/json",
29
- ...this.options.defaultHeaders,
30
- },
31
- body: JSON.stringify(body),
32
- signal,
33
- };
34
- if (this.options.onRequest) {
35
- requestInit = await this.options.onRequest(this.options.apiUrl, requestInit);
36
- }
37
- const fetchFn = this.options.fetch ?? fetch;
38
- const response = await fetchFn(this.options.apiUrl, requestInit);
39
- if (!response.ok) {
40
- throw new Error(`Failed to stream: ${response.statusText}`);
41
- }
42
- const stream = (response.body || new ReadableStream({ start: (ctrl) => ctrl.close() }))
43
- .pipeThrough((0, sse_js_1.BytesLineDecoder)())
44
- .pipeThrough((0, sse_js_1.SSEDecoder)());
45
- return stream_js_1.IterableReadableStream.fromReadableStream(stream);
46
- }
47
- }
48
- exports.FetchStreamTransport = FetchStreamTransport;
2
+
3
+
4
+ const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
5
+ const require_sse = require('../utils/sse.cjs');
6
+ const require_stream = require('../utils/stream.cjs');
7
+ const require_messages = require('../ui/messages.cjs');
8
+ const require_manager = require('../ui/manager.cjs');
9
+ const require_thread = require('./thread.cjs');
10
+ const react = require_rolldown_runtime.__toESM(require("react"));
11
+
12
+ //#region src/react/stream.custom.tsx
13
+ var FetchStreamTransport = class {
14
+ constructor(options) {
15
+ this.options = options;
16
+ }
17
+ async stream(payload) {
18
+ const { signal,...body } = payload;
19
+ let requestInit = {
20
+ method: "POST",
21
+ headers: {
22
+ "Content-Type": "application/json",
23
+ ...this.options.defaultHeaders
24
+ },
25
+ body: JSON.stringify(body),
26
+ signal
27
+ };
28
+ if (this.options.onRequest) requestInit = await this.options.onRequest(this.options.apiUrl, requestInit);
29
+ const fetchFn = this.options.fetch ?? fetch;
30
+ const response = await fetchFn(this.options.apiUrl, requestInit);
31
+ if (!response.ok) throw new Error(`Failed to stream: ${response.statusText}`);
32
+ const stream = (response.body || new ReadableStream({ start: (ctrl) => ctrl.close() })).pipeThrough(require_sse.BytesLineDecoder()).pipeThrough(require_sse.SSEDecoder());
33
+ return require_stream.IterableReadableStream.fromReadableStream(stream);
34
+ }
35
+ };
49
36
  function useStreamCustom(options) {
50
- const [messageManager] = (0, react_1.useState)(() => new messages_js_1.MessageTupleManager());
51
- const [stream] = (0, react_1.useState)(() => new manager_js_1.StreamManager(messageManager));
52
- (0, react_1.useSyncExternalStore)(stream.subscribe, stream.getSnapshot, stream.getSnapshot);
53
- const [threadId, onThreadId] = (0, thread_js_1.useControllableThreadId)(options);
54
- const threadIdRef = (0, react_1.useRef)(threadId);
55
- // Cancel the stream if thread ID has changed
56
- (0, react_1.useEffect)(() => {
57
- if (threadIdRef.current !== threadId) {
58
- threadIdRef.current = threadId;
59
- stream.clear();
60
- }
61
- }, [threadId, stream]);
62
- const getMessages = (value) => {
63
- const messagesKey = options.messagesKey ?? "messages";
64
- return Array.isArray(value[messagesKey]) ? value[messagesKey] : [];
65
- };
66
- const setMessages = (current, messages) => {
67
- const messagesKey = options.messagesKey ?? "messages";
68
- return { ...current, [messagesKey]: messages };
69
- };
70
- const historyValues = options.initialValues ?? {};
71
- const stop = () => stream.stop(historyValues, { onStop: options.onStop });
72
- const submit = async (values, submitOptions) => {
73
- let callbackMeta;
74
- let usableThreadId = threadId;
75
- stream.setStreamValues(() => {
76
- if (submitOptions?.optimisticValues != null) {
77
- return {
78
- ...historyValues,
79
- ...(typeof submitOptions.optimisticValues === "function"
80
- ? submitOptions.optimisticValues(historyValues)
81
- : submitOptions.optimisticValues),
82
- };
83
- }
84
- return { ...historyValues };
85
- });
86
- await stream.start(async (signal) => {
87
- if (!usableThreadId) {
88
- // generate random thread id
89
- usableThreadId = crypto.randomUUID();
90
- threadIdRef.current = usableThreadId;
91
- onThreadId(usableThreadId);
92
- }
93
- if (!usableThreadId) {
94
- throw new Error("Failed to obtain valid thread ID.");
95
- }
96
- return options.transport.stream({
97
- input: values,
98
- context: submitOptions?.context,
99
- command: submitOptions?.command,
100
- signal,
101
- config: {
102
- ...submitOptions?.config,
103
- configurable: {
104
- thread_id: usableThreadId,
105
- ...submitOptions?.config?.configurable,
106
- },
107
- },
108
- });
109
- }, {
110
- getMessages,
111
- setMessages,
112
- initialValues: {},
113
- callbacks: options,
114
- onSuccess: () => undefined,
115
- onError(error) {
116
- options.onError?.(error, callbackMeta);
117
- },
118
- });
119
- };
120
- return {
121
- get values() {
122
- return stream.values ?? {};
123
- },
124
- error: stream.error,
125
- isLoading: stream.isLoading,
126
- stop,
127
- submit,
128
- get interrupt() {
129
- if (stream.values != null &&
130
- "__interrupt__" in stream.values &&
131
- Array.isArray(stream.values.__interrupt__)) {
132
- const valueInterrupts = stream.values.__interrupt__;
133
- if (valueInterrupts.length === 0)
134
- return { when: "breakpoint" };
135
- if (valueInterrupts.length === 1)
136
- return valueInterrupts[0];
137
- // TODO: fix the typing of interrupts if multiple interrupts are returned
138
- return valueInterrupts;
139
- }
140
- return undefined;
141
- },
142
- get messages() {
143
- if (!stream.values)
144
- return [];
145
- return getMessages(stream.values);
146
- },
147
- };
37
+ const [messageManager] = (0, react.useState)(() => new require_messages.MessageTupleManager());
38
+ const [stream] = (0, react.useState)(() => new require_manager.StreamManager(messageManager));
39
+ (0, react.useSyncExternalStore)(stream.subscribe, stream.getSnapshot, stream.getSnapshot);
40
+ const [threadId, onThreadId] = require_thread.useControllableThreadId(options);
41
+ const threadIdRef = (0, react.useRef)(threadId);
42
+ (0, react.useEffect)(() => {
43
+ if (threadIdRef.current !== threadId) {
44
+ threadIdRef.current = threadId;
45
+ stream.clear();
46
+ }
47
+ }, [threadId, stream]);
48
+ const getMessages = (value) => {
49
+ const messagesKey = options.messagesKey ?? "messages";
50
+ return Array.isArray(value[messagesKey]) ? value[messagesKey] : [];
51
+ };
52
+ const setMessages = (current, messages) => {
53
+ const messagesKey = options.messagesKey ?? "messages";
54
+ return {
55
+ ...current,
56
+ [messagesKey]: messages
57
+ };
58
+ };
59
+ const historyValues = options.initialValues ?? {};
60
+ const stop = () => stream.stop(historyValues, { onStop: options.onStop });
61
+ const submit = async (values, submitOptions) => {
62
+ let callbackMeta;
63
+ let usableThreadId = threadId;
64
+ stream.setStreamValues(() => {
65
+ if (submitOptions?.optimisticValues != null) return {
66
+ ...historyValues,
67
+ ...typeof submitOptions.optimisticValues === "function" ? submitOptions.optimisticValues(historyValues) : submitOptions.optimisticValues
68
+ };
69
+ return { ...historyValues };
70
+ });
71
+ await stream.start(async (signal) => {
72
+ if (!usableThreadId) {
73
+ usableThreadId = crypto.randomUUID();
74
+ threadIdRef.current = usableThreadId;
75
+ onThreadId(usableThreadId);
76
+ }
77
+ if (!usableThreadId) throw new Error("Failed to obtain valid thread ID.");
78
+ return options.transport.stream({
79
+ input: values,
80
+ context: submitOptions?.context,
81
+ command: submitOptions?.command,
82
+ signal,
83
+ config: {
84
+ ...submitOptions?.config,
85
+ configurable: {
86
+ thread_id: usableThreadId,
87
+ ...submitOptions?.config?.configurable
88
+ }
89
+ }
90
+ });
91
+ }, {
92
+ getMessages,
93
+ setMessages,
94
+ initialValues: {},
95
+ callbacks: options,
96
+ onSuccess: () => void 0,
97
+ onError(error) {
98
+ options.onError?.(error, callbackMeta);
99
+ }
100
+ });
101
+ };
102
+ return {
103
+ get values() {
104
+ return stream.values ?? {};
105
+ },
106
+ error: stream.error,
107
+ isLoading: stream.isLoading,
108
+ stop,
109
+ submit,
110
+ get interrupt() {
111
+ if (stream.values != null && "__interrupt__" in stream.values && Array.isArray(stream.values.__interrupt__)) {
112
+ const valueInterrupts = stream.values.__interrupt__;
113
+ if (valueInterrupts.length === 0) return { when: "breakpoint" };
114
+ if (valueInterrupts.length === 1) return valueInterrupts[0];
115
+ return valueInterrupts;
116
+ }
117
+ return void 0;
118
+ },
119
+ get messages() {
120
+ if (!stream.values) return [];
121
+ return getMessages(stream.values);
122
+ }
123
+ };
148
124
  }
125
+
126
+ //#endregion
127
+ exports.FetchStreamTransport = FetchStreamTransport;
128
+ exports.useStreamCustom = useStreamCustom;
129
+ //# sourceMappingURL=stream.custom.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream.custom.cjs","names":["options: FetchStreamTransportOptions","requestInit: RequestInit","BytesLineDecoder","SSEDecoder","IterableReadableStream","MessageTupleManager","StreamManager","useControllableThreadId","callbackMeta: RunCallbackMeta | undefined"],"sources":["../../src/react/stream.custom.tsx"],"sourcesContent":["/* __LC_ALLOW_ENTRYPOINT_SIDE_EFFECTS__ */\n\n\"use client\";\n\nimport { useEffect, useRef, useState, useSyncExternalStore } from \"react\";\nimport { EventStreamEvent, StreamManager } from \"../ui/manager.js\";\nimport type {\n BagTemplate,\n GetUpdateType,\n GetCustomEventType,\n GetInterruptType,\n RunCallbackMeta,\n GetConfigurableType,\n UseStreamCustomOptions,\n UseStreamCustom,\n UseStreamTransport,\n CustomSubmitOptions,\n} from \"./types.js\";\nimport type { Message } from \"../types.messages.js\";\nimport { MessageTupleManager } from \"../ui/messages.js\";\nimport { Interrupt } from \"../schema.js\";\nimport { BytesLineDecoder, SSEDecoder } from \"../utils/sse.js\";\nimport { IterableReadableStream } from \"../utils/stream.js\";\nimport { useControllableThreadId } from \"./thread.js\";\nimport { Command } from \"../types.js\";\n\ninterface FetchStreamTransportOptions {\n /**\n * The URL of the API to use.\n */\n apiUrl: string;\n\n /**\n * Default headers to send with requests.\n */\n defaultHeaders?: HeadersInit;\n\n /**\n * Specify a custom fetch implementation.\n */\n fetch?: typeof fetch | ((...args: any[]) => any); // eslint-disable-line @typescript-eslint/no-explicit-any\n\n /**\n * Callback that is called before the request is made.\n */\n onRequest?: (\n url: string,\n init: RequestInit\n ) => Promise<RequestInit> | RequestInit;\n}\n\nexport class FetchStreamTransport<\n StateType extends Record<string, unknown> = Record<string, unknown>,\n Bag extends BagTemplate = BagTemplate\n> implements UseStreamTransport<StateType, Bag>\n{\n constructor(private readonly options: FetchStreamTransportOptions) {}\n\n async stream(payload: {\n input: GetUpdateType<Bag, StateType> | null | undefined;\n context: GetConfigurableType<Bag> | undefined;\n command: Command | undefined;\n signal: AbortSignal;\n }): Promise<AsyncGenerator<{ id?: string; event: string; data: unknown }>> {\n const { signal, ...body } = payload;\n\n let requestInit: RequestInit = {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...this.options.defaultHeaders,\n },\n body: JSON.stringify(body),\n signal,\n };\n\n if (this.options.onRequest) {\n requestInit = await this.options.onRequest(\n this.options.apiUrl,\n requestInit\n );\n }\n const fetchFn = this.options.fetch ?? fetch;\n\n const response = await fetchFn(this.options.apiUrl, requestInit);\n if (!response.ok) {\n throw new Error(`Failed to stream: ${response.statusText}`);\n }\n\n const stream = (\n response.body || new ReadableStream({ start: (ctrl) => ctrl.close() })\n )\n .pipeThrough(BytesLineDecoder())\n .pipeThrough(SSEDecoder());\n\n return IterableReadableStream.fromReadableStream(stream);\n }\n}\n\nexport function useStreamCustom<\n StateType extends Record<string, unknown> = Record<string, unknown>,\n Bag extends {\n ConfigurableType?: Record<string, unknown>;\n InterruptType?: unknown;\n CustomEventType?: unknown;\n UpdateType?: unknown;\n } = BagTemplate\n>(\n options: UseStreamCustomOptions<StateType, Bag>\n): UseStreamCustom<StateType, Bag> {\n type UpdateType = GetUpdateType<Bag, StateType>;\n type CustomType = GetCustomEventType<Bag>;\n type InterruptType = GetInterruptType<Bag>;\n type ConfigurableType = GetConfigurableType<Bag>;\n\n const [messageManager] = useState(() => new MessageTupleManager());\n const [stream] = useState(\n () => new StreamManager<StateType, Bag>(messageManager)\n );\n\n useSyncExternalStore(\n stream.subscribe,\n stream.getSnapshot,\n stream.getSnapshot\n );\n\n const [threadId, onThreadId] = useControllableThreadId(options);\n const threadIdRef = useRef<string | null>(threadId);\n\n // Cancel the stream if thread ID has changed\n useEffect(() => {\n if (threadIdRef.current !== threadId) {\n threadIdRef.current = threadId;\n stream.clear();\n }\n }, [threadId, stream]);\n\n const getMessages = (value: StateType): Message[] => {\n const messagesKey = options.messagesKey ?? \"messages\";\n return Array.isArray(value[messagesKey]) ? value[messagesKey] : [];\n };\n\n const setMessages = (current: StateType, messages: Message[]): StateType => {\n const messagesKey = options.messagesKey ?? \"messages\";\n return { ...current, [messagesKey]: messages };\n };\n\n const historyValues = options.initialValues ?? ({} as StateType);\n\n const stop = () => stream.stop(historyValues, { onStop: options.onStop });\n\n const submit = async (\n values: UpdateType | null | undefined,\n submitOptions?: CustomSubmitOptions<StateType, ConfigurableType>\n ) => {\n let callbackMeta: RunCallbackMeta | undefined;\n let usableThreadId = threadId;\n\n stream.setStreamValues(() => {\n if (submitOptions?.optimisticValues != null) {\n return {\n ...historyValues,\n ...(typeof submitOptions.optimisticValues === \"function\"\n ? submitOptions.optimisticValues(historyValues)\n : submitOptions.optimisticValues),\n };\n }\n\n return { ...historyValues };\n });\n\n await stream.start(\n async (signal: AbortSignal) => {\n if (!usableThreadId) {\n // generate random thread id\n usableThreadId = crypto.randomUUID();\n threadIdRef.current = usableThreadId;\n onThreadId(usableThreadId);\n }\n\n if (!usableThreadId) {\n throw new Error(\"Failed to obtain valid thread ID.\");\n }\n\n return options.transport.stream({\n input: values,\n context: submitOptions?.context,\n command: submitOptions?.command,\n signal,\n config: {\n ...submitOptions?.config,\n configurable: {\n thread_id: usableThreadId,\n ...submitOptions?.config?.configurable,\n } as unknown as GetConfigurableType<Bag>,\n },\n }) as Promise<\n AsyncGenerator<EventStreamEvent<StateType, UpdateType, CustomType>>\n >;\n },\n {\n getMessages,\n setMessages,\n\n initialValues: {} as StateType,\n callbacks: options,\n\n onSuccess: () => undefined,\n onError(error) {\n options.onError?.(error, callbackMeta);\n },\n }\n );\n };\n\n return {\n get values() {\n return stream.values ?? ({} as StateType);\n },\n\n error: stream.error,\n isLoading: stream.isLoading,\n\n stop,\n submit,\n\n get interrupt(): Interrupt<InterruptType> | undefined {\n if (\n stream.values != null &&\n \"__interrupt__\" in stream.values &&\n Array.isArray(stream.values.__interrupt__)\n ) {\n const valueInterrupts = stream.values.__interrupt__;\n if (valueInterrupts.length === 0) return { when: \"breakpoint\" };\n if (valueInterrupts.length === 1) return valueInterrupts[0];\n\n // TODO: fix the typing of interrupts if multiple interrupts are returned\n return valueInterrupts as Interrupt<InterruptType>;\n }\n\n return undefined;\n },\n\n get messages() {\n if (!stream.values) return [];\n return getMessages(stream.values);\n },\n };\n}\n"],"mappings":";;;;;;;;;;;;AAmDA,IAAa,uBAAb,MAIA;CACE,YAAY,AAAiBA,SAAsC;EAAtC;;CAE7B,MAAM,OAAO,SAK8D;EACzE,MAAM,EAAE,OAAQ,GAAG,SAAS;EAE5B,IAAIC,cAA2B;GAC7B,QAAQ;GACR,SAAS;IACP,gBAAgB;IAChB,GAAG,KAAK,QAAQ;;GAElB,MAAM,KAAK,UAAU;GACrB;;AAGF,MAAI,KAAK,QAAQ,UACf,eAAc,MAAM,KAAK,QAAQ,UAC/B,KAAK,QAAQ,QACb;EAGJ,MAAM,UAAU,KAAK,QAAQ,SAAS;EAEtC,MAAM,WAAW,MAAM,QAAQ,KAAK,QAAQ,QAAQ;AACpD,MAAI,CAAC,SAAS,GACZ,OAAM,IAAI,MAAM,qBAAqB,SAAS;EAGhD,MAAM,UACJ,SAAS,QAAQ,IAAI,eAAe,EAAE,QAAQ,SAAS,KAAK,YAE3D,YAAYC,gCACZ,YAAYC;AAEf,SAAOC,sCAAuB,mBAAmB;;;AAIrD,SAAgB,gBASd,SACiC;CAMjC,MAAM,CAAC,4CAAiC,IAAIC;CAC5C,MAAM,CAAC,oCACC,IAAIC,8BAA8B;AAG1C,iCACE,OAAO,WACP,OAAO,aACP,OAAO;CAGT,MAAM,CAAC,UAAU,cAAcC,uCAAwB;CACvD,MAAM,gCAAoC;AAG1C,4BAAgB;AACd,MAAI,YAAY,YAAY,UAAU;AACpC,eAAY,UAAU;AACtB,UAAO;;IAER,CAAC,UAAU;CAEd,MAAM,eAAe,UAAgC;EACnD,MAAM,cAAc,QAAQ,eAAe;AAC3C,SAAO,MAAM,QAAQ,MAAM,gBAAgB,MAAM,eAAe;;CAGlE,MAAM,eAAe,SAAoB,aAAmC;EAC1E,MAAM,cAAc,QAAQ,eAAe;AAC3C,SAAO;GAAE,GAAG;IAAU,cAAc;;;CAGtC,MAAM,gBAAgB,QAAQ,iBAAkB;CAEhD,MAAM,aAAa,OAAO,KAAK,eAAe,EAAE,QAAQ,QAAQ;CAEhE,MAAM,SAAS,OACb,QACA,kBACG;EACH,IAAIC;EACJ,IAAI,iBAAiB;AAErB,SAAO,sBAAsB;AAC3B,OAAI,eAAe,oBAAoB,KACrC,QAAO;IACL,GAAG;IACH,GAAI,OAAO,cAAc,qBAAqB,aAC1C,cAAc,iBAAiB,iBAC/B,cAAc;;AAItB,UAAO,EAAE,GAAG;;AAGd,QAAM,OAAO,MACX,OAAO,WAAwB;AAC7B,OAAI,CAAC,gBAAgB;AAEnB,qBAAiB,OAAO;AACxB,gBAAY,UAAU;AACtB,eAAW;;AAGb,OAAI,CAAC,eACH,OAAM,IAAI,MAAM;AAGlB,UAAO,QAAQ,UAAU,OAAO;IAC9B,OAAO;IACP,SAAS,eAAe;IACxB,SAAS,eAAe;IACxB;IACA,QAAQ;KACN,GAAG,eAAe;KAClB,cAAc;MACZ,WAAW;MACX,GAAG,eAAe,QAAQ;;;;KAOlC;GACE;GACA;GAEA,eAAe;GACf,WAAW;GAEX,iBAAiB;GACjB,QAAQ,OAAO;AACb,YAAQ,UAAU,OAAO;;;;AAMjC,QAAO;EACL,IAAI,SAAS;AACX,UAAO,OAAO,UAAW;;EAG3B,OAAO,OAAO;EACd,WAAW,OAAO;EAElB;EACA;EAEA,IAAI,YAAkD;AACpD,OACE,OAAO,UAAU,QACjB,mBAAmB,OAAO,UAC1B,MAAM,QAAQ,OAAO,OAAO,gBAC5B;IACA,MAAM,kBAAkB,OAAO,OAAO;AACtC,QAAI,gBAAgB,WAAW,EAAG,QAAO,EAAE,MAAM;AACjD,QAAI,gBAAgB,WAAW,EAAG,QAAO,gBAAgB;AAGzD,WAAO;;AAGT,UAAO;;EAGT,IAAI,WAAW;AACb,OAAI,CAAC,OAAO,OAAQ,QAAO;AAC3B,UAAO,YAAY,OAAO"}
@@ -0,0 +1,39 @@
1
+ import { Command } from "../types.cjs";
2
+ import { BagTemplate, GetConfigurableType, GetUpdateType, UseStreamTransport } from "./types.cjs";
3
+
4
+ //#region src/react/stream.custom.d.ts
5
+ interface FetchStreamTransportOptions {
6
+ /**
7
+ * The URL of the API to use.
8
+ */
9
+ apiUrl: string;
10
+ /**
11
+ * Default headers to send with requests.
12
+ */
13
+ defaultHeaders?: HeadersInit;
14
+ /**
15
+ * Specify a custom fetch implementation.
16
+ */
17
+ fetch?: typeof fetch | ((...args: any[]) => any); // eslint-disable-line @typescript-eslint/no-explicit-any
18
+ /**
19
+ * Callback that is called before the request is made.
20
+ */
21
+ onRequest?: (url: string, init: RequestInit) => Promise<RequestInit> | RequestInit;
22
+ }
23
+ declare class FetchStreamTransport<StateType extends Record<string, unknown> = Record<string, unknown>, Bag extends BagTemplate = BagTemplate> implements UseStreamTransport<StateType, Bag> {
24
+ private readonly options;
25
+ constructor(options: FetchStreamTransportOptions);
26
+ stream(payload: {
27
+ input: GetUpdateType<Bag, StateType> | null | undefined;
28
+ context: GetConfigurableType<Bag> | undefined;
29
+ command: Command | undefined;
30
+ signal: AbortSignal;
31
+ }): Promise<AsyncGenerator<{
32
+ id?: string;
33
+ event: string;
34
+ data: unknown;
35
+ }>>;
36
+ }
37
+ //#endregion
38
+ export { FetchStreamTransport };
39
+ //# sourceMappingURL=stream.custom.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream.custom.d.cts","names":["BagTemplate","GetUpdateType","GetConfigurableType","UseStreamCustomOptions","UseStreamCustom","UseStreamTransport","Command","FetchStreamTransportOptions","HeadersInit","fetch","RequestInit","Promise","FetchStreamTransport","Record","StateType","Bag","AbortSignal","AsyncGenerator","useStreamCustom"],"sources":["../../src/react/stream.custom.d.ts"],"sourcesContent":["import type { BagTemplate, GetUpdateType, GetConfigurableType, UseStreamCustomOptions, UseStreamCustom, UseStreamTransport } from \"./types.js\";\nimport { Command } from \"../types.js\";\ninterface FetchStreamTransportOptions {\n /**\n * The URL of the API to use.\n */\n apiUrl: string;\n /**\n * Default headers to send with requests.\n */\n defaultHeaders?: HeadersInit;\n /**\n * Specify a custom fetch implementation.\n */\n fetch?: typeof fetch | ((...args: any[]) => any); // eslint-disable-line @typescript-eslint/no-explicit-any\n /**\n * Callback that is called before the request is made.\n */\n onRequest?: (url: string, init: RequestInit) => Promise<RequestInit> | RequestInit;\n}\nexport declare class FetchStreamTransport<StateType extends Record<string, unknown> = Record<string, unknown>, Bag extends BagTemplate = BagTemplate> implements UseStreamTransport<StateType, Bag> {\n private readonly options;\n constructor(options: FetchStreamTransportOptions);\n stream(payload: {\n input: GetUpdateType<Bag, StateType> | null | undefined;\n context: GetConfigurableType<Bag> | undefined;\n command: Command | undefined;\n signal: AbortSignal;\n }): Promise<AsyncGenerator<{\n id?: string;\n event: string;\n data: unknown;\n }>>;\n}\nexport declare function useStreamCustom<StateType extends Record<string, unknown> = Record<string, unknown>, Bag extends {\n ConfigurableType?: Record<string, unknown>;\n InterruptType?: unknown;\n CustomEventType?: unknown;\n UpdateType?: unknown;\n} = BagTemplate>(options: UseStreamCustomOptions<StateType, Bag>): UseStreamCustom<StateType, Bag>;\nexport {};\n"],"mappings":";;;;UAEUO,2BAAAA;;AAD4B;;QASjBC,EAAAA,MAAAA;;;;gBAQ+BG,CAAAA,EAR/BH,WAQ+BG;;;AAEpD;EAAyC,KAAA,CAAA,EAAA,OANtBF,KAMsB,GAAA,CAAA,CAAA,GAAA,IAAA,EAAA,GAAA,EAAA,EAAA,GAAA,GAAA,CAAA,CAAA,CAAA;;;;WAAgGT,CAAAA,EAAAA,CAAAA,GAAAA,EAAAA,MAAAA,EAAAA,IAAAA,EAFrGU,WAEqGV,EAAAA,GAFrFW,OAEqFX,CAF7EU,WAE6EV,CAAAA,GAF9DU,WAE8DV;;AAAsDe,cAA1KH,oBAA0KG,CAAAA,kBAAnIF,MAAmIE,CAAAA,MAAAA,EAAAA,OAAAA,CAAAA,GAAzGF,MAAyGE,CAAAA,MAAAA,EAAAA,OAAAA,CAAAA,EAAAA,YAApEf,WAAoEe,GAAtDf,WAAsDe,CAAAA,YAA9BV,kBAA8BU,CAAXD,SAAWC,EAAAA,GAAAA,CAAAA,CAAAA;mBAEtKR,OAAAA;aAEIQ,CAAAA,OAAAA,EAFJR,2BAEIQ;QAAKD,CAAAA,OAAAA,EAAAA;IAAnBb,KAAAA,EAAAA,aAAAA,CAAcc,GAAdd,EAAmBa,SAAnBb,CAAAA,GAAAA,IAAAA,GAAAA,SAAAA;IACsBc,OAAAA,EAApBb,mBAAoBa,CAAAA,GAAAA,CAAAA,GAAAA,SAAAA;IAApBb,OAAAA,EACAI,OADAJ,GAAAA,SAAAA;IACAI,MAAAA,EACDU,WADCV;MAETK,OADQK,CACAC,cADAD,CAAAA;IACAC,EAAAA,CAAAA,EAAAA,MAAAA;IAARN,KAAAA,EAAAA,MAAAA;IARyJN,IAAAA,EAAAA,OAAAA"}
@@ -1,41 +1,39 @@
1
- import type { BagTemplate, GetUpdateType, GetConfigurableType, UseStreamCustomOptions, UseStreamCustom, UseStreamTransport } from "./types.js";
2
1
  import { Command } from "../types.js";
2
+ import { BagTemplate, GetConfigurableType, GetUpdateType, UseStreamTransport } from "./types.js";
3
+
4
+ //#region src/react/stream.custom.d.ts
3
5
  interface FetchStreamTransportOptions {
4
- /**
5
- * The URL of the API to use.
6
- */
7
- apiUrl: string;
8
- /**
9
- * Default headers to send with requests.
10
- */
11
- defaultHeaders?: HeadersInit;
12
- /**
13
- * Specify a custom fetch implementation.
14
- */
15
- fetch?: typeof fetch | ((...args: any[]) => any);
16
- /**
17
- * Callback that is called before the request is made.
18
- */
19
- onRequest?: (url: string, init: RequestInit) => Promise<RequestInit> | RequestInit;
6
+ /**
7
+ * The URL of the API to use.
8
+ */
9
+ apiUrl: string;
10
+ /**
11
+ * Default headers to send with requests.
12
+ */
13
+ defaultHeaders?: HeadersInit;
14
+ /**
15
+ * Specify a custom fetch implementation.
16
+ */
17
+ fetch?: typeof fetch | ((...args: any[]) => any); // eslint-disable-line @typescript-eslint/no-explicit-any
18
+ /**
19
+ * Callback that is called before the request is made.
20
+ */
21
+ onRequest?: (url: string, init: RequestInit) => Promise<RequestInit> | RequestInit;
20
22
  }
21
- export declare class FetchStreamTransport<StateType extends Record<string, unknown> = Record<string, unknown>, Bag extends BagTemplate = BagTemplate> implements UseStreamTransport<StateType, Bag> {
22
- private readonly options;
23
- constructor(options: FetchStreamTransportOptions);
24
- stream(payload: {
25
- input: GetUpdateType<Bag, StateType> | null | undefined;
26
- context: GetConfigurableType<Bag> | undefined;
27
- command: Command | undefined;
28
- signal: AbortSignal;
29
- }): Promise<AsyncGenerator<{
30
- id?: string;
31
- event: string;
32
- data: unknown;
33
- }>>;
23
+ declare class FetchStreamTransport<StateType extends Record<string, unknown> = Record<string, unknown>, Bag extends BagTemplate = BagTemplate> implements UseStreamTransport<StateType, Bag> {
24
+ private readonly options;
25
+ constructor(options: FetchStreamTransportOptions);
26
+ stream(payload: {
27
+ input: GetUpdateType<Bag, StateType> | null | undefined;
28
+ context: GetConfigurableType<Bag> | undefined;
29
+ command: Command | undefined;
30
+ signal: AbortSignal;
31
+ }): Promise<AsyncGenerator<{
32
+ id?: string;
33
+ event: string;
34
+ data: unknown;
35
+ }>>;
34
36
  }
35
- export declare function useStreamCustom<StateType extends Record<string, unknown> = Record<string, unknown>, Bag extends {
36
- ConfigurableType?: Record<string, unknown>;
37
- InterruptType?: unknown;
38
- CustomEventType?: unknown;
39
- UpdateType?: unknown;
40
- } = BagTemplate>(options: UseStreamCustomOptions<StateType, Bag>): UseStreamCustom<StateType, Bag>;
41
- export {};
37
+ //#endregion
38
+ export { FetchStreamTransport };
39
+ //# sourceMappingURL=stream.custom.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream.custom.d.ts","names":["BagTemplate","GetUpdateType","GetConfigurableType","UseStreamCustomOptions","UseStreamCustom","UseStreamTransport","Command","FetchStreamTransportOptions","HeadersInit","fetch","RequestInit","Promise","FetchStreamTransport","Record","StateType","Bag","AbortSignal","AsyncGenerator","useStreamCustom"],"sources":["../../src/react/stream.custom.d.ts"],"sourcesContent":["import type { BagTemplate, GetUpdateType, GetConfigurableType, UseStreamCustomOptions, UseStreamCustom, UseStreamTransport } from \"./types.js\";\nimport { Command } from \"../types.js\";\ninterface FetchStreamTransportOptions {\n /**\n * The URL of the API to use.\n */\n apiUrl: string;\n /**\n * Default headers to send with requests.\n */\n defaultHeaders?: HeadersInit;\n /**\n * Specify a custom fetch implementation.\n */\n fetch?: typeof fetch | ((...args: any[]) => any); // eslint-disable-line @typescript-eslint/no-explicit-any\n /**\n * Callback that is called before the request is made.\n */\n onRequest?: (url: string, init: RequestInit) => Promise<RequestInit> | RequestInit;\n}\nexport declare class FetchStreamTransport<StateType extends Record<string, unknown> = Record<string, unknown>, Bag extends BagTemplate = BagTemplate> implements UseStreamTransport<StateType, Bag> {\n private readonly options;\n constructor(options: FetchStreamTransportOptions);\n stream(payload: {\n input: GetUpdateType<Bag, StateType> | null | undefined;\n context: GetConfigurableType<Bag> | undefined;\n command: Command | undefined;\n signal: AbortSignal;\n }): Promise<AsyncGenerator<{\n id?: string;\n event: string;\n data: unknown;\n }>>;\n}\nexport declare function useStreamCustom<StateType extends Record<string, unknown> = Record<string, unknown>, Bag extends {\n ConfigurableType?: Record<string, unknown>;\n InterruptType?: unknown;\n CustomEventType?: unknown;\n UpdateType?: unknown;\n} = BagTemplate>(options: UseStreamCustomOptions<StateType, Bag>): UseStreamCustom<StateType, Bag>;\nexport {};\n"],"mappings":";;;;UAEUO,2BAAAA;;AAD4B;;QASjBC,EAAAA,MAAAA;;;;gBAQ+BG,CAAAA,EAR/BH,WAQ+BG;;;AAEpD;EAAyC,KAAA,CAAA,EAAA,OANtBF,KAMsB,GAAA,CAAA,CAAA,GAAA,IAAA,EAAA,GAAA,EAAA,EAAA,GAAA,GAAA,CAAA,CAAA,CAAA;;;;WAAgGT,CAAAA,EAAAA,CAAAA,GAAAA,EAAAA,MAAAA,EAAAA,IAAAA,EAFrGU,WAEqGV,EAAAA,GAFrFW,OAEqFX,CAF7EU,WAE6EV,CAAAA,GAF9DU,WAE8DV;;AAAsDe,cAA1KH,oBAA0KG,CAAAA,kBAAnIF,MAAmIE,CAAAA,MAAAA,EAAAA,OAAAA,CAAAA,GAAzGF,MAAyGE,CAAAA,MAAAA,EAAAA,OAAAA,CAAAA,EAAAA,YAApEf,WAAoEe,GAAtDf,WAAsDe,CAAAA,YAA9BV,kBAA8BU,CAAXD,SAAWC,EAAAA,GAAAA,CAAAA,CAAAA;mBAEtKR,OAAAA;aAEIQ,CAAAA,OAAAA,EAFJR,2BAEIQ;QAAKD,CAAAA,OAAAA,EAAAA;IAAnBb,KAAAA,EAAAA,aAAAA,CAAcc,GAAdd,EAAmBa,SAAnBb,CAAAA,GAAAA,IAAAA,GAAAA,SAAAA;IACsBc,OAAAA,EAApBb,mBAAoBa,CAAAA,GAAAA,CAAAA,GAAAA,SAAAA;IAApBb,OAAAA,EACAI,OADAJ,GAAAA,SAAAA;IACAI,MAAAA,EACDU,WADCV;MAETK,OADQK,CACAC,cADAD,CAAAA;IACAC,EAAAA,CAAAA,EAAAA,MAAAA;IAARN,KAAAA,EAAAA,MAAAA;IARyJN,IAAAA,EAAAA,OAAAA"}