@archastro/sdk 0.7.0 → 0.9.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 (251) hide show
  1. package/README.md +3 -0
  2. package/dist/app-session.d.ts +3 -3
  3. package/dist/app-session.d.ts.map +1 -1
  4. package/dist/app-session.js +2 -3
  5. package/dist/app-session.js.map +1 -1
  6. package/dist/auth.d.ts +5 -3
  7. package/dist/auth.d.ts.map +1 -1
  8. package/dist/auth.js +7 -5
  9. package/dist/auth.js.map +1 -1
  10. package/dist/channels/api_activity_feed_channel.js +2 -2
  11. package/dist/channels/api_activity_feed_channel.js.map +1 -1
  12. package/dist/channels/api_chat_channel.js +2 -2
  13. package/dist/channels/api_chat_channel.js.map +1 -1
  14. package/dist/channels/api_object_channel.d.ts +13 -2
  15. package/dist/channels/api_object_channel.d.ts.map +1 -1
  16. package/dist/channels/api_object_channel.js +21 -6
  17. package/dist/channels/api_object_channel.js.map +1 -1
  18. package/dist/channels/api_tasks_channel.d.ts +30 -0
  19. package/dist/channels/api_tasks_channel.d.ts.map +1 -0
  20. package/dist/channels/api_tasks_channel.js +45 -0
  21. package/dist/channels/api_tasks_channel.js.map +1 -0
  22. package/dist/client.d.ts +28 -5
  23. package/dist/client.d.ts.map +1 -1
  24. package/dist/client.js +24 -9
  25. package/dist/client.js.map +1 -1
  26. package/dist/custom-object-subscriptions.d.ts +94 -0
  27. package/dist/custom-object-subscriptions.d.ts.map +1 -0
  28. package/dist/custom-object-subscriptions.js +549 -0
  29. package/dist/custom-object-subscriptions.js.map +1 -0
  30. package/dist/index.d.ts +3 -1
  31. package/dist/index.d.ts.map +1 -1
  32. package/dist/index.js +4 -2
  33. package/dist/index.js.map +1 -1
  34. package/dist/phx_channel/channel.d.ts +8 -0
  35. package/dist/phx_channel/channel.d.ts.map +1 -1
  36. package/dist/phx_channel/channel.js +36 -1
  37. package/dist/phx_channel/channel.js.map +1 -1
  38. package/dist/phx_channel/socket.d.ts.map +1 -1
  39. package/dist/phx_channel/socket.js +4 -0
  40. package/dist/phx_channel/socket.js.map +1 -1
  41. package/dist/platform-socket.d.ts +5 -2
  42. package/dist/platform-socket.d.ts.map +1 -1
  43. package/dist/platform-socket.js +6 -5
  44. package/dist/platform-socket.js.map +1 -1
  45. package/dist/runtime/http-client.d.ts +21 -0
  46. package/dist/runtime/http-client.d.ts.map +1 -1
  47. package/dist/runtime/http-client.js +28 -0
  48. package/dist/runtime/http-client.js.map +1 -1
  49. package/dist/runtime/url.d.ts +1 -1
  50. package/dist/runtime/url.d.ts.map +1 -1
  51. package/dist/runtime/url.js +3 -2
  52. package/dist/runtime/url.js.map +1 -1
  53. package/dist/types/ai.d.ts +66 -52
  54. package/dist/types/ai.d.ts.map +1 -1
  55. package/dist/types/ai.js +7 -2
  56. package/dist/types/ai.js.map +1 -1
  57. package/dist/types/artifacts.d.ts +8 -8
  58. package/dist/types/artifacts.js +2 -2
  59. package/dist/types/artifacts.js.map +1 -1
  60. package/dist/types/automations.d.ts +68 -10
  61. package/dist/types/automations.d.ts.map +1 -1
  62. package/dist/types/automations.js +22 -2
  63. package/dist/types/automations.js.map +1 -1
  64. package/dist/types/chat.d.ts +18446 -3559
  65. package/dist/types/chat.d.ts.map +1 -1
  66. package/dist/types/chat.js +2 -2
  67. package/dist/types/chat.js.map +1 -1
  68. package/dist/types/common.d.ts +12646 -2316
  69. package/dist/types/common.d.ts.map +1 -1
  70. package/dist/types/common.js +372 -80
  71. package/dist/types/common.js.map +1 -1
  72. package/dist/types/config.d.ts +22 -10
  73. package/dist/types/config.d.ts.map +1 -1
  74. package/dist/types/config.js +4 -2
  75. package/dist/types/config.js.map +1 -1
  76. package/dist/types/device.d.ts +60 -0
  77. package/dist/types/device.d.ts.map +1 -0
  78. package/dist/types/device.js +25 -0
  79. package/dist/types/device.js.map +1 -0
  80. package/dist/types/extractions.d.ts +452 -0
  81. package/dist/types/extractions.d.ts.map +1 -0
  82. package/dist/types/extractions.js +52 -0
  83. package/dist/types/extractions.js.map +1 -0
  84. package/dist/types/image.js +2 -2
  85. package/dist/types/image.js.map +1 -1
  86. package/dist/types/index.d.ts +3 -0
  87. package/dist/types/index.d.ts.map +1 -1
  88. package/dist/types/index.js +5 -2
  89. package/dist/types/index.js.map +1 -1
  90. package/dist/types/invites.js +2 -2
  91. package/dist/types/invites.js.map +1 -1
  92. package/dist/types/notifications.d.ts +2 -2
  93. package/dist/types/notifications.js +2 -2
  94. package/dist/types/notifications.js.map +1 -1
  95. package/dist/types/oauth.d.ts +117 -0
  96. package/dist/types/oauth.d.ts.map +1 -0
  97. package/dist/types/oauth.js +21 -0
  98. package/dist/types/oauth.js.map +1 -0
  99. package/dist/types/teams.d.ts +2402 -242
  100. package/dist/types/teams.d.ts.map +1 -1
  101. package/dist/types/teams.js +2 -2
  102. package/dist/types/teams.js.map +1 -1
  103. package/dist/types/threads.d.ts +1419 -328
  104. package/dist/types/threads.d.ts.map +1 -1
  105. package/dist/types/threads.js +18 -17
  106. package/dist/types/threads.js.map +1 -1
  107. package/dist/types/users.d.ts +2 -2
  108. package/dist/types/users.js +2 -2
  109. package/dist/types/users.js.map +1 -1
  110. package/dist/v1/resources/activity_feed.d.ts +84 -0
  111. package/dist/v1/resources/activity_feed.d.ts.map +1 -1
  112. package/dist/v1/resources/activity_feed.js +2 -2
  113. package/dist/v1/resources/activity_feed.js.map +1 -1
  114. package/dist/v1/resources/agent_computers.js +2 -2
  115. package/dist/v1/resources/agent_computers.js.map +1 -1
  116. package/dist/v1/resources/agent_env_vars.js +2 -2
  117. package/dist/v1/resources/agent_env_vars.js.map +1 -1
  118. package/dist/v1/resources/agent_health_actions.js +2 -2
  119. package/dist/v1/resources/agent_health_actions.js.map +1 -1
  120. package/dist/v1/resources/agent_installations.d.ts +2 -2
  121. package/dist/v1/resources/agent_installations.d.ts.map +1 -1
  122. package/dist/v1/resources/agent_installations.js +3 -3
  123. package/dist/v1/resources/agent_installations.js.map +1 -1
  124. package/dist/v1/resources/agent_routine_runs.d.ts +16 -1
  125. package/dist/v1/resources/agent_routine_runs.d.ts.map +1 -1
  126. package/dist/v1/resources/agent_routine_runs.js +16 -2
  127. package/dist/v1/resources/agent_routine_runs.js.map +1 -1
  128. package/dist/v1/resources/agent_routines.d.ts +47 -3
  129. package/dist/v1/resources/agent_routines.d.ts.map +1 -1
  130. package/dist/v1/resources/agent_routines.js +42 -3
  131. package/dist/v1/resources/agent_routines.js.map +1 -1
  132. package/dist/v1/resources/agent_sessions.d.ts +14 -2
  133. package/dist/v1/resources/agent_sessions.d.ts.map +1 -1
  134. package/dist/v1/resources/agent_sessions.js +14 -3
  135. package/dist/v1/resources/agent_sessions.js.map +1 -1
  136. package/dist/v1/resources/agent_skills.js +2 -2
  137. package/dist/v1/resources/agent_skills.js.map +1 -1
  138. package/dist/v1/resources/agent_tools.d.ts +2 -2
  139. package/dist/v1/resources/agent_tools.d.ts.map +1 -1
  140. package/dist/v1/resources/agent_tools.js +3 -3
  141. package/dist/v1/resources/agent_tools.js.map +1 -1
  142. package/dist/v1/resources/agents.d.ts +152 -35
  143. package/dist/v1/resources/agents.d.ts.map +1 -1
  144. package/dist/v1/resources/agents.js +148 -42
  145. package/dist/v1/resources/agents.js.map +1 -1
  146. package/dist/v1/resources/ai.d.ts +81 -40
  147. package/dist/v1/resources/ai.d.ts.map +1 -1
  148. package/dist/v1/resources/ai.js +52 -17
  149. package/dist/v1/resources/ai.js.map +1 -1
  150. package/dist/v1/resources/artifacts.js +2 -2
  151. package/dist/v1/resources/artifacts.js.map +1 -1
  152. package/dist/v1/resources/automation_runs.d.ts +41 -6
  153. package/dist/v1/resources/automation_runs.d.ts.map +1 -1
  154. package/dist/v1/resources/automation_runs.js +47 -8
  155. package/dist/v1/resources/automation_runs.js.map +1 -1
  156. package/dist/v1/resources/automations.d.ts +14 -1
  157. package/dist/v1/resources/automations.d.ts.map +1 -1
  158. package/dist/v1/resources/automations.js +15 -3
  159. package/dist/v1/resources/automations.js.map +1 -1
  160. package/dist/v1/resources/bug_reports.js +2 -2
  161. package/dist/v1/resources/bug_reports.js.map +1 -1
  162. package/dist/v1/resources/config.d.ts +3 -0
  163. package/dist/v1/resources/config.d.ts.map +1 -1
  164. package/dist/v1/resources/config.js +2 -2
  165. package/dist/v1/resources/config.js.map +1 -1
  166. package/dist/v1/resources/custom_objects.js +2 -2
  167. package/dist/v1/resources/custom_objects.js.map +1 -1
  168. package/dist/v1/resources/extractions.d.ts +50 -0
  169. package/dist/v1/resources/extractions.d.ts.map +1 -0
  170. package/dist/v1/resources/extractions.js +48 -0
  171. package/dist/v1/resources/extractions.js.map +1 -0
  172. package/dist/v1/resources/files.d.ts +88 -1
  173. package/dist/v1/resources/files.d.ts.map +1 -1
  174. package/dist/v1/resources/files.js +86 -3
  175. package/dist/v1/resources/files.js.map +1 -1
  176. package/dist/v1/resources/index.d.ts +5 -0
  177. package/dist/v1/resources/index.d.ts.map +1 -1
  178. package/dist/v1/resources/index.js +7 -2
  179. package/dist/v1/resources/index.js.map +1 -1
  180. package/dist/v1/resources/installation_sources.js +2 -2
  181. package/dist/v1/resources/installation_sources.js.map +1 -1
  182. package/dist/v1/resources/invites.js +2 -2
  183. package/dist/v1/resources/invites.js.map +1 -1
  184. package/dist/v1/resources/knowledge_documents.d.ts +33 -1
  185. package/dist/v1/resources/knowledge_documents.d.ts.map +1 -1
  186. package/dist/v1/resources/knowledge_documents.js +25 -2
  187. package/dist/v1/resources/knowledge_documents.js.map +1 -1
  188. package/dist/v1/resources/knowledge_ingestions.d.ts +16 -0
  189. package/dist/v1/resources/knowledge_ingestions.d.ts.map +1 -0
  190. package/dist/v1/resources/knowledge_ingestions.js +21 -0
  191. package/dist/v1/resources/knowledge_ingestions.js.map +1 -0
  192. package/dist/v1/resources/knowledge_sources.d.ts +2 -0
  193. package/dist/v1/resources/knowledge_sources.d.ts.map +1 -1
  194. package/dist/v1/resources/knowledge_sources.js +3 -2
  195. package/dist/v1/resources/knowledge_sources.js.map +1 -1
  196. package/dist/v1/resources/kv.js +2 -2
  197. package/dist/v1/resources/kv.js.map +1 -1
  198. package/dist/v1/resources/notification_preferences.js +2 -2
  199. package/dist/v1/resources/notification_preferences.js.map +1 -1
  200. package/dist/v1/resources/notifications.js +2 -2
  201. package/dist/v1/resources/notifications.js.map +1 -1
  202. package/dist/v1/resources/oauth.d.ts +115 -0
  203. package/dist/v1/resources/oauth.d.ts.map +1 -0
  204. package/dist/v1/resources/oauth.js +112 -0
  205. package/dist/v1/resources/oauth.js.map +1 -0
  206. package/dist/v1/resources/orgs.js +2 -2
  207. package/dist/v1/resources/orgs.js.map +1 -1
  208. package/dist/v1/resources/slack_channel_bindings.d.ts +25 -0
  209. package/dist/v1/resources/slack_channel_bindings.d.ts.map +1 -1
  210. package/dist/v1/resources/slack_channel_bindings.js +24 -2
  211. package/dist/v1/resources/slack_channel_bindings.js.map +1 -1
  212. package/dist/v1/resources/solution_categories.js +2 -2
  213. package/dist/v1/resources/solution_categories.js.map +1 -1
  214. package/dist/v1/resources/solution_instances.d.ts +26 -0
  215. package/dist/v1/resources/solution_instances.d.ts.map +1 -0
  216. package/dist/v1/resources/solution_instances.js +35 -0
  217. package/dist/v1/resources/solution_instances.js.map +1 -0
  218. package/dist/v1/resources/solution_tags.js +2 -2
  219. package/dist/v1/resources/solution_tags.js.map +1 -1
  220. package/dist/v1/resources/solutions.d.ts +85 -1
  221. package/dist/v1/resources/solutions.d.ts.map +1 -1
  222. package/dist/v1/resources/solutions.js +67 -3
  223. package/dist/v1/resources/solutions.js.map +1 -1
  224. package/dist/v1/resources/team_memberships.js +2 -2
  225. package/dist/v1/resources/team_memberships.js.map +1 -1
  226. package/dist/v1/resources/teams.d.ts +210 -4
  227. package/dist/v1/resources/teams.d.ts.map +1 -1
  228. package/dist/v1/resources/teams.js +16 -6
  229. package/dist/v1/resources/teams.js.map +1 -1
  230. package/dist/v1/resources/thread_messages.d.ts +24 -4
  231. package/dist/v1/resources/thread_messages.d.ts.map +1 -1
  232. package/dist/v1/resources/thread_messages.js +9 -6
  233. package/dist/v1/resources/thread_messages.js.map +1 -1
  234. package/dist/v1/resources/threads.d.ts +158 -42
  235. package/dist/v1/resources/threads.d.ts.map +1 -1
  236. package/dist/v1/resources/threads.js +121 -32
  237. package/dist/v1/resources/threads.js.map +1 -1
  238. package/dist/v1/resources/users.d.ts +132 -1
  239. package/dist/v1/resources/users.d.ts.map +1 -1
  240. package/dist/v1/resources/users.js +4 -2
  241. package/dist/v1/resources/users.js.map +1 -1
  242. package/dist/v1/resources/work_items.d.ts +78 -0
  243. package/dist/v1/resources/work_items.d.ts.map +1 -0
  244. package/dist/v1/resources/work_items.js +86 -0
  245. package/dist/v1/resources/work_items.js.map +1 -0
  246. package/dist/v1.d.ts +10 -0
  247. package/dist/v1.d.ts.map +1 -1
  248. package/dist/v1.js +17 -2
  249. package/dist/v1.js.map +1 -1
  250. package/docs/custom-object-collaboration.md +248 -0
  251. package/package.json +3 -2
@@ -0,0 +1,549 @@
1
+ import { ApiObjectChannel } from "./channels/api_object_channel.js";
2
+ import { ApiError, AuthenticationError, AuthorizationError, NetworkError, NotFoundError, ValidationError, } from "./runtime/http-client.js";
3
+ import { createPlatformSocket } from "./platform-socket.js";
4
+ export class CustomObjectSubscriptions {
5
+ createSocket;
6
+ constructor(createSocket) {
7
+ this.createSocket = createSocket;
8
+ }
9
+ subscribe(options) {
10
+ return new ManagedCustomObjectSubscription(this.createSocket, options);
11
+ }
12
+ }
13
+ /** Add managed custom-object realtime to any generated PlatformClient class. */
14
+ export function withCustomObjectSubscriptions(Base) {
15
+ return extendWithCustomObjectSubscriptions(Base, {});
16
+ }
17
+ /** Configure managed custom-object realtime before extending a client class. */
18
+ export function customObjectSubscriptionsExtension(options) {
19
+ return (Base) => extendWithCustomObjectSubscriptions(Base, options);
20
+ }
21
+ function extendWithCustomObjectSubscriptions(Base, options) {
22
+ class CustomObjectSubscriptionsPlatformClient extends Base {
23
+ customObjectSubscriptions;
24
+ constructor(...args) {
25
+ super(...args);
26
+ const config = (args[0] ?? {});
27
+ this.customObjectSubscriptions = customObjectSubscriptionsForClient({ ...config, socketPath: options.socketPath }, this.http);
28
+ }
29
+ }
30
+ return CustomObjectSubscriptionsPlatformClient;
31
+ }
32
+ /** Build the managed realtime capability from generated client state. */
33
+ export function customObjectSubscriptionsForClient(config, http) {
34
+ const publishableKey = Object.entries(config.defaultHeaders ?? {}).find(([name]) => name.toLowerCase() === "x-archastro-api-key")?.[1];
35
+ return new CustomObjectSubscriptions(() => createPlatformSocket({
36
+ apiBaseUrl: config.baseUrl ?? "https://platform.archastro.ai",
37
+ accessToken: http.getAccessToken(),
38
+ publishableKey,
39
+ socketPath: config.socketPath ??
40
+ (config.pathPrefix
41
+ ? `${config.pathPrefix.replace(/\/+$/, "")}/socket`
42
+ : undefined),
43
+ socketConfig: { autoReconnect: false },
44
+ }));
45
+ }
46
+ export { ApiError, AuthenticationError, AuthorizationError, NetworkError, NotFoundError, ValidationError, } from "./runtime/http-client.js";
47
+ export { Channel, ChannelError, ChannelReplyError, Socket, createPlatformSocket, } from "./platform-socket.js";
48
+ class ManagedCustomObjectSubscription {
49
+ createSocket;
50
+ options;
51
+ _state = "connecting";
52
+ socket = null;
53
+ channel = null;
54
+ transportUnsubscribers = [];
55
+ reconnectTimer = null;
56
+ reconnectAttempt = 0;
57
+ generation = 0;
58
+ queued = [];
59
+ connecting = false;
60
+ connectionId;
61
+ lastPresence = null;
62
+ presenceHeartbeat = null;
63
+ constructor(createSocket, options) {
64
+ this.createSocket = createSocket;
65
+ this.options = options;
66
+ this.connectionId = options.connectionId ?? generateConnectionId();
67
+ queueMicrotask(() => {
68
+ if (this._state === "closed")
69
+ return;
70
+ this.options.onStateChange("connecting");
71
+ void this.connect(false);
72
+ });
73
+ }
74
+ get state() {
75
+ return this._state;
76
+ }
77
+ async update(fields) {
78
+ if (this.isTerminal()) {
79
+ throw new NetworkError(`Cannot update a ${this._state} custom-object subscription`);
80
+ }
81
+ if (this._state !== "live" || !this.channel) {
82
+ return this.enqueue(fields);
83
+ }
84
+ try {
85
+ await this.channel.updateFields({ fields });
86
+ }
87
+ catch (error) {
88
+ const classified = classifySubscriptionError(error);
89
+ if (this.isTerminalError(classified)) {
90
+ this.options.onError(classified);
91
+ this.terminateForError(classified);
92
+ throw classified;
93
+ }
94
+ if (!(classified instanceof NetworkError)) {
95
+ this.options.onError(classified);
96
+ throw classified;
97
+ }
98
+ const pending = this.enqueue(fields);
99
+ this.handleTransportLoss(classified);
100
+ return pending;
101
+ }
102
+ }
103
+ async updatePresence(presence) {
104
+ if (this._state !== "live" || !this.channel) {
105
+ throw new NetworkError("Presence is unavailable while the subscription is not live");
106
+ }
107
+ try {
108
+ await this.channel.presenceUpdate({ presence: toWirePresence(presence) });
109
+ this.lastPresence = presence;
110
+ this.startPresenceHeartbeat();
111
+ }
112
+ catch (error) {
113
+ const classified = classifySubscriptionError(error);
114
+ if (this.isTerminalError(classified)) {
115
+ this.options.onError(classified);
116
+ this.terminateForError(classified);
117
+ }
118
+ else if (classified instanceof NetworkError) {
119
+ this.handleTransportLoss(classified);
120
+ }
121
+ else {
122
+ this.options.onError(classified);
123
+ }
124
+ throw classified;
125
+ }
126
+ }
127
+ async save() {
128
+ if (this._state !== "live" || !this.channel) {
129
+ throw new NetworkError("Cannot save while the subscription is not live");
130
+ }
131
+ try {
132
+ await this.channel.save({});
133
+ }
134
+ catch (error) {
135
+ const classified = classifySubscriptionError(error);
136
+ if (this.isTerminalError(classified)) {
137
+ this.options.onError(classified);
138
+ this.terminateForError(classified);
139
+ }
140
+ else if (classified instanceof NetworkError) {
141
+ this.handleTransportLoss(classified);
142
+ }
143
+ else {
144
+ this.options.onError(classified);
145
+ }
146
+ throw classified;
147
+ }
148
+ }
149
+ close() {
150
+ if (this._state === "closed")
151
+ return;
152
+ this.generation++;
153
+ if (this.reconnectTimer)
154
+ clearTimeout(this.reconnectTimer);
155
+ this.reconnectTimer = null;
156
+ this.transition("closed");
157
+ const closedError = new NetworkError("Custom-object subscription was closed");
158
+ for (const queued of this.queued.splice(0)) {
159
+ for (const waiter of queued.waiters)
160
+ waiter.reject(closedError);
161
+ }
162
+ this.disposeTransport(true);
163
+ }
164
+ async connect(reconnecting) {
165
+ if (this.connecting || this.isTerminal())
166
+ return;
167
+ this.connecting = true;
168
+ const generation = ++this.generation;
169
+ if (reconnecting)
170
+ this.transition("reconnecting");
171
+ try {
172
+ const socket = this.createSocket();
173
+ this.socket = socket;
174
+ this.transportUnsubscribers.push(socket.onEvent((event) => {
175
+ if (event.type === "close" || event.type === "error") {
176
+ this.handleTransportLoss(event.type === "error"
177
+ ? event.error
178
+ : new NetworkError(`WebSocket closed with code ${event.code}`));
179
+ }
180
+ }));
181
+ await socket.connect();
182
+ if (generation !== this.generation || this.isTerminal()) {
183
+ await socket.disconnect();
184
+ return;
185
+ }
186
+ const channel = await ApiObjectChannel.joinById(socket, this.options.objectId, {
187
+ partial_updates: true,
188
+ connection_id: this.connectionId,
189
+ });
190
+ if (generation !== this.generation || this.isTerminal()) {
191
+ await channel.leave();
192
+ await socket.disconnect();
193
+ return;
194
+ }
195
+ this.channel = channel;
196
+ this.installChannelListeners(channel);
197
+ // Every join, including a rejoin, returns the authoritative snapshot.
198
+ // Deliver it before replaying idempotent queued map assignments.
199
+ const { snapshot, initialPresence } = this.parseSnapshot(channel.joinResponse);
200
+ if (snapshot.connectionId)
201
+ this.connectionId = snapshot.connectionId;
202
+ this.options.onSnapshot(snapshot);
203
+ for (const presence of initialPresence)
204
+ this.options.onPresence?.(presence);
205
+ await this.replayQueuedPatches();
206
+ if (generation !== this.generation || this.isTerminal())
207
+ return;
208
+ this.reconnectAttempt = 0;
209
+ this.transition("live");
210
+ if (this.lastPresence) {
211
+ await channel.presenceUpdate({
212
+ presence: toWirePresence(this.lastPresence),
213
+ });
214
+ this.startPresenceHeartbeat();
215
+ }
216
+ }
217
+ catch (error) {
218
+ const classified = classifySubscriptionError(error);
219
+ this.options.onError(classified);
220
+ if (classified instanceof AuthenticationError ||
221
+ classified instanceof AuthorizationError) {
222
+ this.terminateForError(classified);
223
+ }
224
+ else if (classified instanceof NotFoundError) {
225
+ this.terminateForError(classified);
226
+ }
227
+ else {
228
+ this.scheduleReconnect();
229
+ }
230
+ }
231
+ finally {
232
+ this.connecting = false;
233
+ }
234
+ }
235
+ installChannelListeners(channel) {
236
+ this.transportUnsubscribers.push(channel.onObjectUpdated((payload) => {
237
+ const update = this.parseUpdate(payload);
238
+ if (update)
239
+ this.options.onUpdate(update);
240
+ }), channel.onObjectDeleted(() => {
241
+ const error = new NotFoundError(404, "custom_object_deleted", "The custom object was deleted");
242
+ this.options.onError(error);
243
+ this.terminateForError(error);
244
+ }), channel.onAccessRevoked(() => {
245
+ const error = new AuthorizationError(403, "custom_object_access_revoked", "Access to the custom object was revoked");
246
+ this.options.onError(error);
247
+ this.terminateForError(error);
248
+ }), channel.onPresenceUpdated((payload) => {
249
+ const presence = parsePresence(isRecord(payload) && "presence" in payload
250
+ ? payload.presence
251
+ : payload);
252
+ if (presence)
253
+ this.options.onPresence?.(presence);
254
+ else
255
+ this.reportMalformed("Malformed presence_updated payload");
256
+ }), channel.onPresenceLeft((payload) => {
257
+ const presence = parsePresenceLeave(payload);
258
+ if (presence)
259
+ this.options.onPresenceLeave?.(presence);
260
+ else
261
+ this.reportMalformed("Malformed presence_left payload");
262
+ }));
263
+ }
264
+ parseSnapshot(payload) {
265
+ const value = parseObjectEnvelope(payload);
266
+ if (!value) {
267
+ throw new ValidationError(422, "malformed_snapshot", "Custom-object join returned a malformed snapshot");
268
+ }
269
+ const parsed = this.options.fieldsSchema?.safeParse(value.fields);
270
+ if (parsed && !parsed.success) {
271
+ throw new ValidationError(422, "malformed_snapshot", `Custom-object snapshot fields are invalid: ${parsed.error.message}`);
272
+ }
273
+ const raw = payload;
274
+ const readonly = typeof raw.readonly === "boolean" ? raw.readonly : undefined;
275
+ const connectionId = stringField(raw, "connection_id", "connectionId") ?? undefined;
276
+ const initialPresence = [];
277
+ if (Array.isArray(raw.presence)) {
278
+ for (const item of raw.presence) {
279
+ const presence = parsePresence(item);
280
+ if (presence)
281
+ initialPresence.push(presence);
282
+ else
283
+ this.reportMalformed("Malformed initial presence payload");
284
+ }
285
+ }
286
+ return {
287
+ snapshot: {
288
+ id: value.id,
289
+ fields: (parsed?.success ? parsed.data : value.fields),
290
+ ...(readonly === undefined ? {} : { readonly }),
291
+ ...(connectionId === undefined ? {} : { connectionId }),
292
+ },
293
+ initialPresence,
294
+ };
295
+ }
296
+ parseUpdate(payload) {
297
+ const value = parseObjectEnvelope(payload);
298
+ if (!value) {
299
+ this.reportMalformed("Malformed object_updated payload");
300
+ return null;
301
+ }
302
+ return {
303
+ id: value.id,
304
+ fields: value.fields,
305
+ };
306
+ }
307
+ reportMalformed(message) {
308
+ this.options.onError(new ValidationError(422, "malformed_realtime_payload", message));
309
+ }
310
+ enqueue(fields) {
311
+ return new Promise((resolve, reject) => {
312
+ const pendingUpdates = this.queued.reduce((count, patch) => count + patch.waiters.length, 0);
313
+ if (pendingUpdates >= (this.options.maxQueuedPatches ?? 100)) {
314
+ reject(new ValidationError(422, "offline_queue_full", "The custom-object offline queue is full"));
315
+ return;
316
+ }
317
+ const last = this.queued.at(-1);
318
+ if (last) {
319
+ last.fields = deepMerge(last.fields, fields);
320
+ last.waiters.push({ resolve, reject });
321
+ return;
322
+ }
323
+ this.queued.push({ fields, waiters: [{ resolve, reject }] });
324
+ });
325
+ }
326
+ async replayQueuedPatches() {
327
+ while (this.queued.length > 0 && this.channel) {
328
+ // Remove the batch before crossing the transport boundary. Updates that
329
+ // arrive while its acknowledgement is pending must form a new batch;
330
+ // mutating the in-flight object would drop those changes after the reply.
331
+ const patch = this.queued.shift();
332
+ try {
333
+ await this.channel.updateFields({ fields: patch.fields });
334
+ }
335
+ catch (error) {
336
+ this.queued.unshift(patch);
337
+ throw error;
338
+ }
339
+ for (const waiter of patch.waiters)
340
+ waiter.resolve();
341
+ }
342
+ }
343
+ handleTransportLoss(error) {
344
+ if (this.isTerminal())
345
+ return;
346
+ const classified = classifySubscriptionError(error);
347
+ this.options.onError(classified);
348
+ if (this.isTerminalError(classified)) {
349
+ this.terminateForError(classified);
350
+ return;
351
+ }
352
+ this.scheduleReconnect();
353
+ }
354
+ scheduleReconnect() {
355
+ if (this.isTerminal() || this.reconnectTimer)
356
+ return;
357
+ this.disposeTransport(false);
358
+ const offline = typeof navigator !== "undefined" && navigator.onLine === false;
359
+ this.transition(offline ? "offline" : "reconnecting");
360
+ const base = Math.min(250 * 2 ** this.reconnectAttempt++, this.options.maxReconnectDelayMs ?? 10_000);
361
+ const jitter = Math.floor(Math.random() * Math.max(1, base * 0.2));
362
+ this.reconnectTimer = setTimeout(() => {
363
+ this.reconnectTimer = null;
364
+ void this.connect(true);
365
+ }, base + jitter);
366
+ }
367
+ disposeTransport(graceful) {
368
+ this.stopPresenceHeartbeat();
369
+ for (const unsubscribe of this.transportUnsubscribers.splice(0))
370
+ unsubscribe();
371
+ const channel = this.channel;
372
+ const socket = this.socket;
373
+ this.channel = null;
374
+ this.socket = null;
375
+ if (graceful && channel)
376
+ void channel.leave().catch(() => undefined);
377
+ if (socket)
378
+ void socket.disconnect().catch(() => undefined);
379
+ }
380
+ transition(state) {
381
+ if (this._state === state)
382
+ return;
383
+ this._state = state;
384
+ this.options.onStateChange(state);
385
+ }
386
+ isTerminal() {
387
+ return this._state === "closed" || this._state === "unauthorized";
388
+ }
389
+ isTerminalError(error) {
390
+ return (error instanceof AuthenticationError ||
391
+ error instanceof AuthorizationError ||
392
+ error instanceof NotFoundError);
393
+ }
394
+ terminateForError(error) {
395
+ const state = error instanceof AuthenticationError ||
396
+ error instanceof AuthorizationError
397
+ ? "unauthorized"
398
+ : "closed";
399
+ this.transition(state);
400
+ for (const queued of this.queued.splice(0)) {
401
+ for (const waiter of queued.waiters)
402
+ waiter.reject(error);
403
+ }
404
+ this.disposeTransport(false);
405
+ }
406
+ startPresenceHeartbeat() {
407
+ this.stopPresenceHeartbeat();
408
+ if (!this.lastPresence || this._state !== "live")
409
+ return;
410
+ this.presenceHeartbeat = setInterval(() => {
411
+ if (!this.channel || this._state !== "live" || !this.lastPresence)
412
+ return;
413
+ void this.channel
414
+ .presenceUpdate({ presence: toWirePresence(this.lastPresence) })
415
+ .catch((error) => this.handleTransportLoss(error));
416
+ }, 25_000);
417
+ }
418
+ stopPresenceHeartbeat() {
419
+ if (!this.presenceHeartbeat)
420
+ return;
421
+ clearInterval(this.presenceHeartbeat);
422
+ this.presenceHeartbeat = null;
423
+ }
424
+ }
425
+ function parseObjectEnvelope(payload) {
426
+ if (!isRecord(payload) ||
427
+ typeof payload.id !== "string" ||
428
+ !isRecord(payload.fields)) {
429
+ return null;
430
+ }
431
+ return { id: payload.id, fields: payload.fields };
432
+ }
433
+ function toWirePresence(presence) {
434
+ return {
435
+ cursor: presence.cursor,
436
+ selected_element_ids: presence.selectedElementIds,
437
+ state: presence.activity,
438
+ };
439
+ }
440
+ function parsePresence(payload) {
441
+ if (!isRecord(payload))
442
+ return null;
443
+ const userId = stringField(payload, "user_id", "userId");
444
+ const connectionId = stringField(payload, "connection_id", "connectionId");
445
+ const displayName = stringField(payload, "display_name", "displayName");
446
+ const selected = payload.selected_element_ids ?? payload.selectedElementIds;
447
+ if (!userId ||
448
+ !connectionId ||
449
+ !displayName ||
450
+ !Array.isArray(selected) ||
451
+ !selected.every((item) => typeof item === "string") ||
452
+ (payload.state !== "active" &&
453
+ payload.state !== "idle" &&
454
+ payload.activity !== "active" &&
455
+ payload.activity !== "idle")) {
456
+ return null;
457
+ }
458
+ const cursor = payload.cursor;
459
+ if (cursor !== undefined &&
460
+ cursor !== null &&
461
+ (!isRecord(cursor) ||
462
+ typeof cursor.x !== "number" ||
463
+ typeof cursor.y !== "number")) {
464
+ return null;
465
+ }
466
+ return {
467
+ userId,
468
+ connectionId,
469
+ displayName,
470
+ cursor: cursor,
471
+ selectedElementIds: selected,
472
+ color: typeof payload.color === "string"
473
+ ? payload.color
474
+ : deterministicPresenceColor(userId),
475
+ activity: payload.state === "active" || payload.state === "idle"
476
+ ? payload.state
477
+ : payload.activity,
478
+ };
479
+ }
480
+ function parsePresenceLeave(payload) {
481
+ if (!isRecord(payload))
482
+ return null;
483
+ const connectionId = stringField(payload, "connection_id", "connectionId");
484
+ return connectionId ? { connectionId } : null;
485
+ }
486
+ function stringField(value, snake, camel) {
487
+ const field = value[snake] ?? value[camel];
488
+ return typeof field === "string" ? field : null;
489
+ }
490
+ function classifySubscriptionError(error) {
491
+ if (error instanceof ApiError)
492
+ return error;
493
+ const message = error instanceof Error ? error.message : String(error);
494
+ const normalized = message.toLowerCase();
495
+ if (normalized.includes("unauthorized") || normalized.includes("401")) {
496
+ return new AuthenticationError(401, "unauthorized", message);
497
+ }
498
+ if (normalized.includes("forbidden") || normalized.includes("403")) {
499
+ return new AuthorizationError(403, "forbidden", message);
500
+ }
501
+ if (normalized.includes("not_found") || normalized.includes("not found")) {
502
+ return new NotFoundError(404, "not_found", message);
503
+ }
504
+ if (normalized.includes("unprocessable") ||
505
+ normalized.includes("validation") ||
506
+ normalized.includes("422")) {
507
+ return new ValidationError(422, "validation_error", message);
508
+ }
509
+ return new NetworkError(message, error);
510
+ }
511
+ function deepMerge(left, right) {
512
+ if (!isRecord(left) || !isRecord(right))
513
+ return right;
514
+ const merged = { ...left };
515
+ for (const [key, value] of Object.entries(right)) {
516
+ merged[key] =
517
+ isRecord(merged[key]) && isRecord(value)
518
+ ? deepMerge(merged[key], value)
519
+ : value;
520
+ }
521
+ return merged;
522
+ }
523
+ function isRecord(value) {
524
+ return typeof value === "object" && value !== null && !Array.isArray(value);
525
+ }
526
+ function generateConnectionId() {
527
+ if (typeof crypto !== "undefined" &&
528
+ typeof crypto.randomUUID === "function") {
529
+ return crypto.randomUUID();
530
+ }
531
+ return `connection-${Date.now()}-${Math.random().toString(36).slice(2)}`;
532
+ }
533
+ function deterministicPresenceColor(identity) {
534
+ const palette = [
535
+ "#89b4fa",
536
+ "#a6e3a1",
537
+ "#f9e2af",
538
+ "#f38ba8",
539
+ "#cba6f7",
540
+ "#94e2d5",
541
+ "#fab387",
542
+ ];
543
+ let hash = 0;
544
+ for (let index = 0; index < identity.length; index++) {
545
+ hash = (hash * 31 + identity.charCodeAt(index)) >>> 0;
546
+ }
547
+ return palette[hash % palette.length];
548
+ }
549
+ //# sourceMappingURL=custom-object-subscriptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-object-subscriptions.js","sourceRoot":"","sources":["../src/custom-object-subscriptions.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,10 +1,12 @@
1
1
  export * from "./types/index.js";
2
2
  export { V1 } from "./v1.js";
3
3
  export * from "./v1/resources/index.js";
4
- export { PlatformClient, type PlatformClientConfig } from "./client.js";
4
+ export { PlatformClient, type PlatformClientConfig, type PlatformClientConstructor, type PlatformClientExtension, type PlatformClientClass } from "./client.js";
5
5
  export type { AppPlatformClient, ForAppOptions, SessionStorage, AppSession } from "./client.js";
6
6
  export { AuthClient, type AuthTokens } from "./auth.js";
7
7
  export { ApiActivityFeedChannel } from "./channels/api_activity_feed_channel.js";
8
8
  export { ApiChatChannel } from "./channels/api_chat_channel.js";
9
9
  export { ApiObjectChannel } from "./channels/api_object_channel.js";
10
+ export { ApiTasksChannel } from "./channels/api_tasks_channel.js";
11
+ export * from "./custom-object-subscriptions.js";
10
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7B,cAAc,yBAAyB,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,KAAK,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACxE,YAAY,EAAE,iBAAiB,EAAE,aAAa,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAChG,OAAO,EAAE,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAIA,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7B,cAAc,yBAAyB,CAAC;AACxC,OAAO,EAAE,cAAc,EAAE,KAAK,oBAAoB,EAAE,KAAK,yBAAyB,EAAE,KAAK,uBAAuB,EAAE,KAAK,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAChK,YAAY,EAAE,iBAAiB,EAAE,aAAa,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAChG,OAAO,EAAE,UAAU,EAAE,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,cAAc,kCAAkC,CAAC"}
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
- // Copyright (c) 2026 ArchAstro Inc. All Rights Reserved.
1
+ // Copyright (c) 2026 ArchAstro Inc. Licensed under the MIT License.
2
2
  // This file is auto-generated by @archastro/sdk-generator. Do not edit.
3
- // Content hash: c6ce6c53517d
3
+ // Content hash: d152a1a7153d
4
4
  export * from "./types/index.js";
5
5
  export { V1 } from "./v1.js";
6
6
  export * from "./v1/resources/index.js";
@@ -9,4 +9,6 @@ export { AuthClient } from "./auth.js";
9
9
  export { ApiActivityFeedChannel } from "./channels/api_activity_feed_channel.js";
10
10
  export { ApiChatChannel } from "./channels/api_chat_channel.js";
11
11
  export { ApiObjectChannel } from "./channels/api_object_channel.js";
12
+ export { ApiTasksChannel } from "./channels/api_tasks_channel.js";
13
+ export * from "./custom-object-subscriptions.js";
12
14
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,wEAAwE;AACxE,6BAA6B;AAE7B,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7B,cAAc,yBAAyB,CAAC;AACxC,OAAO,EAAE,cAAc,EAA6B,MAAM,aAAa,CAAC;AAExE,OAAO,EAAE,UAAU,EAAmB,MAAM,WAAW,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,oEAAoE;AACpE,wEAAwE;AACxE,6BAA6B;AAE7B,cAAc,kBAAkB,CAAC;AACjC,OAAO,EAAE,EAAE,EAAE,MAAM,SAAS,CAAC;AAC7B,cAAc,yBAAyB,CAAC;AACxC,OAAO,EAAE,cAAc,EAAqH,MAAM,aAAa,CAAC;AAEhK,OAAO,EAAE,UAAU,EAAmB,MAAM,WAAW,CAAC;AACxD,OAAO,EAAE,sBAAsB,EAAE,MAAM,yCAAyC,CAAC;AACjF,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAC;AAClE,cAAc,kCAAkC,CAAC"}
@@ -14,6 +14,12 @@ export interface JoinOptions {
14
14
  export declare class ChannelError extends Error {
15
15
  constructor(message: string);
16
16
  }
17
+ export declare class ChannelReplyError extends ChannelError {
18
+ readonly event: string;
19
+ readonly topic: string;
20
+ readonly response: unknown;
21
+ constructor(event: string, topic: string, response: unknown);
22
+ }
17
23
  type ChannelState = "closed" | "joining" | "joined" | "leaving" | "errored";
18
24
  export declare class Channel {
19
25
  private socket;
@@ -37,6 +43,8 @@ export declare class Channel {
37
43
  on(event: string, callback: (payload: unknown) => void): () => void;
38
44
  /** @internal Called by Socket when a message arrives for this topic. */
39
45
  onMessage(joinRef: string | null, ref: string | null, event: string, payload: unknown): void;
46
+ /** @internal Reject in-flight work immediately when its transport closes. */
47
+ onSocketClose(error: Error): void;
40
48
  private handleReply;
41
49
  private triggerEvent;
42
50
  }
@@ -1 +1 @@
1
- {"version":3,"file":"channel.d.ts","sourceRoot":"","sources":["../../src/phx_channel/channel.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,iEAAiE;IACjE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,YAAa,SAAQ,KAAK;gBACzB,OAAO,EAAE,MAAM;CAI5B;AAED,KAAK,YAAY,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;AAE5E,qBAAa,OAAO;IAClB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,MAAM,CAA0B;IAExC,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,aAAa,CAAqD;IAC1E,OAAO,CAAC,cAAc,CAGlB;IACJ,OAAO,CAAC,UAAU,CAOT;gBAGP,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAOjC,IAAI,KAAK,IAAI,YAAY,CAExB;IAED,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAIK,IAAI,CACR,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IA0C7B,KAAK,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA8B9C,2CAA2C;IACrC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAavB,IAAI,CACR,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,OAAY,EACrB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,OAAO,CAAC;IAiBnB,OAAO,CAAC,MAAM;IA8Bd,OAAO,CAAC,eAAe;IAYvB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI;IAkBnE,wEAAwE;IACxE,SAAS,CACP,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,GAAG,EAAE,MAAM,GAAG,IAAI,EAClB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,OAAO,GACf,IAAI;IAiBP,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,YAAY;CAUrB"}
1
+ {"version":3,"file":"channel.d.ts","sourceRoot":"","sources":["../../src/phx_channel/channel.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C;;;;GAIG;AACH,MAAM,WAAW,WAAW;IAC1B,iEAAiE;IACjE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,YAAa,SAAQ,KAAK;gBACzB,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,iBAAkB,SAAQ,YAAY;aAE/B,KAAK,EAAE,MAAM;aACb,KAAK,EAAE,MAAM;aACb,QAAQ,EAAE,OAAO;gBAFjB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,OAAO;CAOpC;AAED,KAAK,YAAY,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;AAE5E,qBAAa,OAAO;IAClB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,MAAM,CAA0B;IAExC,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,aAAa,CAAqD;IAC1E,OAAO,CAAC,cAAc,CAGlB;IACJ,OAAO,CAAC,UAAU,CAOT;gBAGP,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAOjC,IAAI,KAAK,IAAI,YAAY,CAExB;IAED,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAIK,IAAI,CACR,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IA0C7B,KAAK,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA8B9C,2CAA2C;IACrC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAavB,IAAI,CACR,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,OAAY,EACrB,SAAS,CAAC,EAAE,MAAM,GACjB,OAAO,CAAC,OAAO,CAAC;IAiBnB,OAAO,CAAC,MAAM;IAyCd,OAAO,CAAC,eAAe;IAYvB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAAG,MAAM,IAAI;IAkBnE,wEAAwE;IACxE,SAAS,CACP,OAAO,EAAE,MAAM,GAAG,IAAI,EACtB,GAAG,EAAE,MAAM,GAAG,IAAI,EAClB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,OAAO,GACf,IAAI;IAiBP,6EAA6E;IAC7E,aAAa,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;IAcjC,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,YAAY;CAUrB"}