@langchain/langgraph-sdk 0.1.10 → 1.0.1

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 (235) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/README.md +11 -0
  3. package/dist/_virtual/rolldown_runtime.cjs +25 -0
  4. package/dist/auth/error.cjs +76 -86
  5. package/dist/auth/error.cjs.map +1 -0
  6. package/dist/auth/error.d.cts +13 -0
  7. package/dist/auth/error.d.cts.map +1 -0
  8. package/dist/auth/error.d.ts +12 -8
  9. package/dist/auth/error.d.ts.map +1 -0
  10. package/dist/auth/error.js +76 -83
  11. package/dist/auth/error.js.map +1 -0
  12. package/dist/auth/index.cjs +36 -44
  13. package/dist/auth/index.cjs.map +1 -0
  14. package/dist/auth/index.d.cts +31 -0
  15. package/dist/auth/index.d.cts.map +1 -0
  16. package/dist/auth/index.d.ts +20 -15
  17. package/dist/auth/index.d.ts.map +1 -0
  18. package/dist/auth/index.js +35 -39
  19. package/dist/auth/index.js.map +1 -0
  20. package/dist/auth/types.d.cts +294 -0
  21. package/dist/auth/types.d.cts.map +1 -0
  22. package/dist/auth/types.d.ts +162 -165
  23. package/dist/auth/types.d.ts.map +1 -0
  24. package/dist/client.cjs +1110 -1294
  25. package/dist/client.cjs.map +1 -0
  26. package/dist/client.d.cts +697 -0
  27. package/dist/client.d.cts.map +1 -0
  28. package/dist/client.d.ts +656 -639
  29. package/dist/client.d.ts.map +1 -0
  30. package/dist/client.js +1101 -1281
  31. package/dist/client.js.map +1 -0
  32. package/dist/index.cjs +6 -8
  33. package/dist/index.d.cts +7 -0
  34. package/dist/index.d.ts +7 -7
  35. package/dist/index.js +4 -2
  36. package/dist/logging/index.cjs +30 -31
  37. package/dist/logging/index.cjs.map +1 -0
  38. package/dist/logging/index.d.cts +47 -0
  39. package/dist/logging/index.d.cts.map +1 -0
  40. package/dist/logging/index.d.ts +20 -16
  41. package/dist/logging/index.d.ts.map +1 -0
  42. package/dist/logging/index.js +31 -29
  43. package/dist/logging/index.js.map +1 -0
  44. package/dist/react/index.cjs +5 -7
  45. package/dist/react/index.d.cts +4 -0
  46. package/dist/react/index.d.ts +4 -3
  47. package/dist/react/index.js +4 -2
  48. package/dist/react/stream.cjs +14 -15
  49. package/dist/react/stream.cjs.map +1 -0
  50. package/dist/react/stream.custom.cjs +126 -145
  51. package/dist/react/stream.custom.cjs.map +1 -0
  52. package/dist/react/stream.custom.d.cts +39 -0
  53. package/dist/react/stream.custom.d.cts.map +1 -0
  54. package/dist/react/stream.custom.d.ts +35 -37
  55. package/dist/react/stream.custom.d.ts.map +1 -0
  56. package/dist/react/stream.custom.js +122 -137
  57. package/dist/react/stream.custom.js.map +1 -0
  58. package/dist/react/stream.d.cts +73 -0
  59. package/dist/react/stream.d.cts.map +1 -0
  60. package/dist/react/stream.d.ts +21 -15
  61. package/dist/react/stream.d.ts.map +1 -0
  62. package/dist/react/stream.js +12 -11
  63. package/dist/react/stream.js.map +1 -0
  64. package/dist/react/stream.lgp.cjs +438 -498
  65. package/dist/react/stream.lgp.cjs.map +1 -0
  66. package/dist/react/stream.lgp.js +433 -490
  67. package/dist/react/stream.lgp.js.map +1 -0
  68. package/dist/react/thread.cjs +18 -15
  69. package/dist/react/thread.cjs.map +1 -0
  70. package/dist/react/thread.js +19 -13
  71. package/dist/react/thread.js.map +1 -0
  72. package/dist/react/types.d.cts +356 -0
  73. package/dist/react/types.d.cts.map +1 -0
  74. package/dist/react/types.d.ts +334 -329
  75. package/dist/react/types.d.ts.map +1 -0
  76. package/dist/react-ui/client.cjs +123 -184
  77. package/dist/react-ui/client.cjs.map +1 -0
  78. package/dist/react-ui/client.d.cts +90 -0
  79. package/dist/react-ui/client.d.cts.map +1 -0
  80. package/dist/react-ui/client.d.ts +67 -51
  81. package/dist/react-ui/client.d.ts.map +1 -0
  82. package/dist/react-ui/client.js +118 -143
  83. package/dist/react-ui/client.js.map +1 -0
  84. package/dist/react-ui/index.cjs +14 -13
  85. package/dist/react-ui/index.cjs.map +1 -0
  86. package/dist/react-ui/index.d.cts +3 -0
  87. package/dist/react-ui/index.d.ts +3 -2
  88. package/dist/react-ui/index.js +8 -3
  89. package/dist/react-ui/index.js.map +1 -0
  90. package/dist/react-ui/server/index.cjs +5 -7
  91. package/dist/react-ui/server/index.d.cts +3 -0
  92. package/dist/react-ui/server/index.d.ts +3 -2
  93. package/dist/react-ui/server/index.js +4 -2
  94. package/dist/react-ui/server/server.cjs +53 -44
  95. package/dist/react-ui/server/server.cjs.map +1 -0
  96. package/dist/react-ui/server/server.d.cts +55 -0
  97. package/dist/react-ui/server/server.d.cts.map +1 -0
  98. package/dist/react-ui/server/server.d.ts +43 -39
  99. package/dist/react-ui/server/server.d.ts.map +1 -0
  100. package/dist/react-ui/server/server.js +54 -42
  101. package/dist/react-ui/server/server.js.map +1 -0
  102. package/dist/react-ui/types.cjs +32 -36
  103. package/dist/react-ui/types.cjs.map +1 -0
  104. package/dist/react-ui/types.d.cts +25 -0
  105. package/dist/react-ui/types.d.cts.map +1 -0
  106. package/dist/react-ui/types.d.ts +23 -19
  107. package/dist/react-ui/types.d.ts.map +1 -0
  108. package/dist/react-ui/types.js +32 -34
  109. package/dist/react-ui/types.js.map +1 -0
  110. package/dist/schema.d.cts +278 -0
  111. package/dist/schema.d.cts.map +1 -0
  112. package/dist/schema.d.ts +250 -242
  113. package/dist/schema.d.ts.map +1 -0
  114. package/dist/singletons/fetch.cjs +16 -20
  115. package/dist/singletons/fetch.cjs.map +1 -0
  116. package/dist/singletons/fetch.d.cts +14 -0
  117. package/dist/singletons/fetch.d.cts.map +1 -0
  118. package/dist/singletons/fetch.d.ts +5 -2
  119. package/dist/singletons/fetch.d.ts.map +1 -0
  120. package/dist/singletons/fetch.js +16 -17
  121. package/dist/singletons/fetch.js.map +1 -0
  122. package/dist/types.d.cts +187 -0
  123. package/dist/types.d.cts.map +1 -0
  124. package/dist/types.d.ts +178 -173
  125. package/dist/types.d.ts.map +1 -0
  126. package/dist/types.messages.d.cts +91 -0
  127. package/dist/types.messages.d.cts.map +1 -0
  128. package/dist/types.messages.d.ts +71 -66
  129. package/dist/types.messages.d.ts.map +1 -0
  130. package/dist/types.stream.d.cts +235 -0
  131. package/dist/types.stream.d.cts.map +1 -0
  132. package/dist/types.stream.d.ts +149 -142
  133. package/dist/types.stream.d.ts.map +1 -0
  134. package/dist/ui/branching.cjs +145 -141
  135. package/dist/ui/branching.cjs.map +1 -0
  136. package/dist/ui/branching.d.cts +22 -0
  137. package/dist/ui/branching.d.cts.map +1 -0
  138. package/dist/ui/branching.d.ts +17 -30
  139. package/dist/ui/branching.d.ts.map +1 -0
  140. package/dist/ui/branching.js +147 -139
  141. package/dist/ui/branching.js.map +1 -0
  142. package/dist/ui/errors.cjs +14 -12
  143. package/dist/ui/errors.cjs.map +1 -0
  144. package/dist/ui/errors.js +14 -9
  145. package/dist/ui/errors.js.map +1 -0
  146. package/dist/ui/manager.cjs +156 -232
  147. package/dist/ui/manager.cjs.map +1 -0
  148. package/dist/ui/manager.js +156 -228
  149. package/dist/ui/manager.js.map +1 -0
  150. package/dist/ui/messages.cjs +55 -69
  151. package/dist/ui/messages.cjs.map +1 -0
  152. package/dist/ui/messages.js +55 -66
  153. package/dist/ui/messages.js.map +1 -0
  154. package/dist/ui/utils.cjs +10 -10
  155. package/dist/ui/utils.cjs.map +1 -0
  156. package/dist/ui/utils.js +10 -8
  157. package/dist/ui/utils.js.map +1 -0
  158. package/dist/utils/async_caller.cjs +103 -185
  159. package/dist/utils/async_caller.cjs.map +1 -0
  160. package/dist/utils/async_caller.d.cts +53 -0
  161. package/dist/utils/async_caller.d.cts.map +1 -0
  162. package/dist/utils/async_caller.d.ts +36 -31
  163. package/dist/utils/async_caller.d.ts.map +1 -0
  164. package/dist/utils/async_caller.js +101 -177
  165. package/dist/utils/async_caller.js.map +1 -0
  166. package/dist/utils/env.cjs +11 -13
  167. package/dist/utils/env.cjs.map +1 -0
  168. package/dist/utils/env.js +11 -11
  169. package/dist/utils/env.js.map +1 -0
  170. package/dist/utils/signals.cjs +18 -19
  171. package/dist/utils/signals.cjs.map +1 -0
  172. package/dist/utils/signals.js +18 -17
  173. package/dist/utils/signals.js.map +1 -0
  174. package/dist/utils/sse.cjs +110 -140
  175. package/dist/utils/sse.cjs.map +1 -0
  176. package/dist/utils/sse.js +110 -138
  177. package/dist/utils/sse.js.map +1 -0
  178. package/dist/utils/stream.cjs +90 -114
  179. package/dist/utils/stream.cjs.map +1 -0
  180. package/dist/utils/stream.js +90 -111
  181. package/dist/utils/stream.js.map +1 -0
  182. package/package.json +73 -81
  183. package/auth.cjs +0 -1
  184. package/auth.d.cts +0 -1
  185. package/auth.d.ts +0 -1
  186. package/auth.js +0 -1
  187. package/client.cjs +0 -1
  188. package/client.d.cts +0 -1
  189. package/client.d.ts +0 -1
  190. package/client.js +0 -1
  191. package/dist/auth/types.cjs +0 -2
  192. package/dist/auth/types.js +0 -1
  193. package/dist/react/stream.lgp.d.ts +0 -7
  194. package/dist/react/thread.d.ts +0 -4
  195. package/dist/react/types.cjs +0 -2
  196. package/dist/react/types.js +0 -1
  197. package/dist/schema.cjs +0 -2
  198. package/dist/schema.js +0 -1
  199. package/dist/types.cjs +0 -2
  200. package/dist/types.js +0 -1
  201. package/dist/types.messages.cjs +0 -2
  202. package/dist/types.messages.js +0 -1
  203. package/dist/types.stream.cjs +0 -2
  204. package/dist/types.stream.js +0 -1
  205. package/dist/ui/branching.test.cjs +0 -370
  206. package/dist/ui/branching.test.d.ts +0 -1
  207. package/dist/ui/branching.test.js +0 -368
  208. package/dist/ui/errors.d.ts +0 -12
  209. package/dist/ui/manager.d.ts +0 -87
  210. package/dist/ui/messages.d.ts +0 -18
  211. package/dist/ui/utils.d.ts +0 -2
  212. package/dist/utils/env.d.ts +0 -1
  213. package/dist/utils/signals.d.ts +0 -1
  214. package/dist/utils/sse.d.ts +0 -8
  215. package/dist/utils/stream.d.ts +0 -13
  216. package/index.cjs +0 -1
  217. package/index.d.cts +0 -1
  218. package/index.d.ts +0 -1
  219. package/index.js +0 -1
  220. package/logging.cjs +0 -1
  221. package/logging.d.cts +0 -1
  222. package/logging.d.ts +0 -1
  223. package/logging.js +0 -1
  224. package/react-ui/server.cjs +0 -1
  225. package/react-ui/server.d.cts +0 -1
  226. package/react-ui/server.d.ts +0 -1
  227. package/react-ui/server.js +0 -1
  228. package/react-ui.cjs +0 -1
  229. package/react-ui.d.cts +0 -1
  230. package/react-ui.d.ts +0 -1
  231. package/react-ui.js +0 -1
  232. package/react.cjs +0 -1
  233. package/react.d.cts +0 -1
  234. package/react.d.ts +0 -1
  235. 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"}