@athenaintel/react 0.57.2 → 0.59.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 (799) hide show
  1. package/README.md +759 -9
  2. package/dist/agent-runtime/src/addressed-agents.cjs +16 -0
  3. package/dist/agent-runtime/src/addressed-agents.cjs.map +1 -0
  4. package/dist/agent-runtime/src/addressed-agents.d.ts +30 -0
  5. package/dist/agent-runtime/src/addressed-agents.js +16 -0
  6. package/dist/agent-runtime/src/addressed-agents.js.map +1 -0
  7. package/dist/agent-runtime/src/answer-label.cjs +4 -3
  8. package/dist/agent-runtime/src/answer-label.cjs.map +1 -1
  9. package/dist/agent-runtime/src/answer-label.d.ts +13 -6
  10. package/dist/agent-runtime/src/answer-label.js +4 -3
  11. package/dist/agent-runtime/src/answer-label.js.map +1 -1
  12. package/dist/agent-runtime/src/chat-outbox-attachments.cjs.map +1 -1
  13. package/dist/agent-runtime/src/chat-outbox-attachments.d.ts +1 -1
  14. package/dist/agent-runtime/src/chat-outbox-attachments.js.map +1 -1
  15. package/dist/agent-runtime/src/chat-outbox-entry.cjs +101 -0
  16. package/dist/agent-runtime/src/chat-outbox-entry.cjs.map +1 -0
  17. package/dist/agent-runtime/src/chat-outbox-entry.d.ts +99 -0
  18. package/dist/agent-runtime/src/chat-outbox-entry.js +101 -0
  19. package/dist/agent-runtime/src/chat-outbox-entry.js.map +1 -0
  20. package/dist/agent-runtime/src/chat-outbox-legacy.cjs +252 -0
  21. package/dist/agent-runtime/src/chat-outbox-legacy.cjs.map +1 -0
  22. package/dist/agent-runtime/src/chat-outbox-legacy.d.ts +96 -0
  23. package/dist/agent-runtime/src/chat-outbox-legacy.js +252 -0
  24. package/dist/agent-runtime/src/chat-outbox-legacy.js.map +1 -0
  25. package/dist/agent-runtime/src/chat-outbox-policy.cjs +30 -0
  26. package/dist/agent-runtime/src/chat-outbox-policy.cjs.map +1 -0
  27. package/dist/agent-runtime/src/chat-outbox-policy.d.ts +42 -0
  28. package/dist/agent-runtime/src/chat-outbox-policy.js +30 -0
  29. package/dist/agent-runtime/src/chat-outbox-policy.js.map +1 -0
  30. package/dist/agent-runtime/src/chat-outbox-storage.cjs +306 -0
  31. package/dist/agent-runtime/src/chat-outbox-storage.cjs.map +1 -0
  32. package/dist/agent-runtime/src/chat-outbox-storage.d.ts +194 -0
  33. package/dist/agent-runtime/src/chat-outbox-storage.js +306 -0
  34. package/dist/agent-runtime/src/chat-outbox-storage.js.map +1 -0
  35. package/dist/agent-runtime/src/chat-outbox-thread.cjs +21 -94
  36. package/dist/agent-runtime/src/chat-outbox-thread.cjs.map +1 -1
  37. package/dist/agent-runtime/src/chat-outbox-thread.d.ts +22 -18
  38. package/dist/agent-runtime/src/chat-outbox-thread.js +21 -94
  39. package/dist/agent-runtime/src/chat-outbox-thread.js.map +1 -1
  40. package/dist/agent-runtime/src/chat-outbox.cjs +492 -547
  41. package/dist/agent-runtime/src/chat-outbox.cjs.map +1 -1
  42. package/dist/agent-runtime/src/chat-outbox.d.ts +110 -142
  43. package/dist/agent-runtime/src/chat-outbox.js +492 -547
  44. package/dist/agent-runtime/src/chat-outbox.js.map +1 -1
  45. package/dist/agent-runtime/src/composer-markdown.cjs.map +1 -1
  46. package/dist/agent-runtime/src/composer-markdown.d.ts +1 -1
  47. package/dist/agent-runtime/src/composer-markdown.js.map +1 -1
  48. package/dist/agent-runtime/src/deep-agent-transport-recipe.cjs +3 -1
  49. package/dist/agent-runtime/src/deep-agent-transport-recipe.cjs.map +1 -1
  50. package/dist/agent-runtime/src/deep-agent-transport-recipe.d.ts +8 -1
  51. package/dist/agent-runtime/src/deep-agent-transport-recipe.js +3 -1
  52. package/dist/agent-runtime/src/deep-agent-transport-recipe.js.map +1 -1
  53. package/dist/agent-runtime/src/dictation-preferences.d.ts +356 -0
  54. package/dist/agent-runtime/src/dictation-record.d.ts +279 -0
  55. package/dist/agent-runtime/src/dictation-session.d.ts +106 -7
  56. package/dist/agent-runtime/src/dictation-snippets.d.ts +9 -0
  57. package/dist/agent-runtime/src/dictation-transfer.d.ts +142 -0
  58. package/dist/agent-runtime/src/edit-command.cjs.map +1 -1
  59. package/dist/agent-runtime/src/edit-command.d.ts +1 -1
  60. package/dist/agent-runtime/src/edit-command.js.map +1 -1
  61. package/dist/agent-runtime/src/errors.cjs +1 -0
  62. package/dist/agent-runtime/src/errors.cjs.map +1 -1
  63. package/dist/agent-runtime/src/errors.js +1 -0
  64. package/dist/agent-runtime/src/errors.js.map +1 -1
  65. package/dist/agent-runtime/src/generated/runconfig-contract.cjs +24 -0
  66. package/dist/agent-runtime/src/generated/runconfig-contract.cjs.map +1 -1
  67. package/dist/agent-runtime/src/generated/runconfig-contract.d.ts +3 -3
  68. package/dist/agent-runtime/src/generated/runconfig-contract.js +24 -0
  69. package/dist/agent-runtime/src/generated/runconfig-contract.js.map +1 -1
  70. package/dist/agent-runtime/src/index.d.ts +14 -8
  71. package/dist/agent-runtime/src/lane-follow.cjs +289 -0
  72. package/dist/agent-runtime/src/lane-follow.cjs.map +1 -0
  73. package/dist/agent-runtime/src/lane-follow.js +289 -0
  74. package/dist/agent-runtime/src/lane-follow.js.map +1 -0
  75. package/dist/agent-runtime/src/lane-images.cjs +387 -0
  76. package/dist/agent-runtime/src/lane-images.cjs.map +1 -0
  77. package/dist/agent-runtime/src/lane-images.js +387 -0
  78. package/dist/agent-runtime/src/lane-images.js.map +1 -0
  79. package/dist/agent-runtime/src/message-window.js +1 -1
  80. package/dist/agent-runtime/src/messages.cjs +19 -1
  81. package/dist/agent-runtime/src/messages.cjs.map +1 -1
  82. package/dist/agent-runtime/src/messages.d.ts +8 -0
  83. package/dist/agent-runtime/src/messages.js +21 -3
  84. package/dist/agent-runtime/src/messages.js.map +1 -1
  85. package/dist/agent-runtime/src/named-agents.cjs +301 -0
  86. package/dist/agent-runtime/src/named-agents.cjs.map +1 -0
  87. package/dist/agent-runtime/src/named-agents.d.ts +246 -0
  88. package/dist/agent-runtime/src/named-agents.js +301 -0
  89. package/dist/agent-runtime/src/named-agents.js.map +1 -0
  90. package/dist/agent-runtime/src/offline-status.cjs.map +1 -1
  91. package/dist/agent-runtime/src/offline-status.d.ts +66 -2
  92. package/dist/agent-runtime/src/offline-status.js.map +1 -1
  93. package/dist/agent-runtime/src/ptc-subcalls.cjs +41 -0
  94. package/dist/agent-runtime/src/ptc-subcalls.cjs.map +1 -0
  95. package/dist/agent-runtime/src/ptc-subcalls.js +41 -0
  96. package/dist/agent-runtime/src/ptc-subcalls.js.map +1 -0
  97. package/dist/agent-runtime/src/queue.cjs +2 -2
  98. package/dist/agent-runtime/src/queue.cjs.map +1 -1
  99. package/dist/agent-runtime/src/queue.d.ts +20 -25
  100. package/dist/agent-runtime/src/queue.js +2 -2
  101. package/dist/agent-runtime/src/queue.js.map +1 -1
  102. package/dist/agent-runtime/src/quota-safe-local-storage-session.cjs +314 -84
  103. package/dist/agent-runtime/src/quota-safe-local-storage-session.cjs.map +1 -1
  104. package/dist/agent-runtime/src/quota-safe-local-storage-session.d.ts +137 -40
  105. package/dist/agent-runtime/src/quota-safe-local-storage-session.js +318 -88
  106. package/dist/agent-runtime/src/quota-safe-local-storage-session.js.map +1 -1
  107. package/dist/agent-runtime/src/run-send.cjs +54 -0
  108. package/dist/agent-runtime/src/run-send.cjs.map +1 -0
  109. package/dist/agent-runtime/src/run-send.d.ts +51 -0
  110. package/dist/agent-runtime/src/run-send.js +54 -0
  111. package/dist/agent-runtime/src/run-send.js.map +1 -0
  112. package/dist/agent-runtime/src/running-tool-placeholder.cjs +6 -0
  113. package/dist/agent-runtime/src/running-tool-placeholder.cjs.map +1 -1
  114. package/dist/agent-runtime/src/running-tool-placeholder.js +6 -0
  115. package/dist/agent-runtime/src/running-tool-placeholder.js.map +1 -1
  116. package/dist/agent-runtime/src/runtime.d.ts +9 -5
  117. package/dist/agent-runtime/src/sealed-idb.cjs +64 -0
  118. package/dist/agent-runtime/src/sealed-idb.cjs.map +1 -1
  119. package/dist/agent-runtime/src/sealed-idb.d.ts +16 -0
  120. package/dist/agent-runtime/src/sealed-idb.js +64 -0
  121. package/dist/agent-runtime/src/sealed-idb.js.map +1 -1
  122. package/dist/agent-runtime/src/send-recovery.cjs +90 -118
  123. package/dist/agent-runtime/src/send-recovery.cjs.map +1 -1
  124. package/dist/agent-runtime/src/send-recovery.d.ts +25 -29
  125. package/dist/agent-runtime/src/send-recovery.js +90 -118
  126. package/dist/agent-runtime/src/send-recovery.js.map +1 -1
  127. package/dist/agent-runtime/src/statewire-diagnostics.d.ts +4 -1
  128. package/dist/agent-runtime/src/statewire-held-sends.cjs +191 -0
  129. package/dist/agent-runtime/src/statewire-held-sends.cjs.map +1 -0
  130. package/dist/agent-runtime/src/statewire-held-sends.d.ts +119 -0
  131. package/dist/agent-runtime/src/statewire-held-sends.js +191 -0
  132. package/dist/agent-runtime/src/statewire-held-sends.js.map +1 -0
  133. package/dist/agent-runtime/src/statewire-state.cjs +4 -0
  134. package/dist/agent-runtime/src/statewire-state.cjs.map +1 -1
  135. package/dist/agent-runtime/src/statewire-state.js +4 -0
  136. package/dist/agent-runtime/src/statewire-state.js.map +1 -1
  137. package/dist/agent-runtime/src/statewire-transport.cjs +8 -2
  138. package/dist/agent-runtime/src/statewire-transport.cjs.map +1 -1
  139. package/dist/agent-runtime/src/statewire-transport.d.ts +14 -5
  140. package/dist/agent-runtime/src/statewire-transport.js +8 -2
  141. package/dist/agent-runtime/src/statewire-transport.js.map +1 -1
  142. package/dist/agent-runtime/src/subagent-transcripts.cjs +1 -23
  143. package/dist/agent-runtime/src/subagent-transcripts.cjs.map +1 -1
  144. package/dist/agent-runtime/src/subagent-transcripts.js +3 -25
  145. package/dist/agent-runtime/src/subagent-transcripts.js.map +1 -1
  146. package/dist/agent-runtime/src/subagents.cjs +22 -29
  147. package/dist/agent-runtime/src/subagents.cjs.map +1 -1
  148. package/dist/agent-runtime/src/subagents.js +23 -30
  149. package/dist/agent-runtime/src/subagents.js.map +1 -1
  150. package/dist/agent-runtime/src/thread-extras.cjs +27 -19
  151. package/dist/agent-runtime/src/thread-extras.cjs.map +1 -1
  152. package/dist/agent-runtime/src/thread-extras.d.ts +19 -6
  153. package/dist/agent-runtime/src/thread-extras.js +27 -19
  154. package/dist/agent-runtime/src/thread-extras.js.map +1 -1
  155. package/dist/agent-runtime/src/thread-handoff-flow-machine.d.ts +8 -8
  156. package/dist/agent-runtime/src/tool-metadata.cjs +12 -0
  157. package/dist/agent-runtime/src/tool-metadata.cjs.map +1 -1
  158. package/dist/agent-runtime/src/tool-metadata.js +12 -0
  159. package/dist/agent-runtime/src/tool-metadata.js.map +1 -1
  160. package/dist/agent-runtime/src/tool-names.cjs +21 -0
  161. package/dist/agent-runtime/src/tool-names.cjs.map +1 -1
  162. package/dist/agent-runtime/src/tool-names.d.ts +8 -0
  163. package/dist/agent-runtime/src/tool-names.js +21 -0
  164. package/dist/agent-runtime/src/tool-names.js.map +1 -1
  165. package/dist/agent-runtime/src/typed-interrupt-kinds.cjs +247 -0
  166. package/dist/agent-runtime/src/typed-interrupt-kinds.cjs.map +1 -0
  167. package/dist/agent-runtime/src/typed-interrupt-kinds.d.ts +173 -0
  168. package/dist/agent-runtime/src/typed-interrupt-kinds.js +247 -0
  169. package/dist/agent-runtime/src/typed-interrupt-kinds.js.map +1 -0
  170. package/dist/agent-runtime/src/typed-interrupts.cjs +48 -0
  171. package/dist/agent-runtime/src/typed-interrupts.cjs.map +1 -0
  172. package/dist/agent-runtime/src/typed-interrupts.d.ts +75 -0
  173. package/dist/agent-runtime/src/typed-interrupts.js +48 -0
  174. package/dist/agent-runtime/src/typed-interrupts.js.map +1 -0
  175. package/dist/agent-runtime/src/types.d.ts +1 -1
  176. package/dist/agent-runtime/src/use-conversation-list.cjs +1 -0
  177. package/dist/agent-runtime/src/use-conversation-list.cjs.map +1 -1
  178. package/dist/agent-runtime/src/use-conversation-list.d.ts +7 -0
  179. package/dist/agent-runtime/src/use-conversation-list.js +1 -0
  180. package/dist/agent-runtime/src/use-conversation-list.js.map +1 -1
  181. package/dist/agent-runtime/src/use-deep-agent-chat-outbox.cjs +46 -29
  182. package/dist/agent-runtime/src/use-deep-agent-chat-outbox.cjs.map +1 -1
  183. package/dist/agent-runtime/src/use-deep-agent-chat-outbox.d.ts +14 -22
  184. package/dist/agent-runtime/src/use-deep-agent-chat-outbox.js +46 -29
  185. package/dist/agent-runtime/src/use-deep-agent-chat-outbox.js.map +1 -1
  186. package/dist/agent-runtime/src/use-deep-agent-runtime.cjs +78 -14
  187. package/dist/agent-runtime/src/use-deep-agent-runtime.cjs.map +1 -1
  188. package/dist/agent-runtime/src/use-deep-agent-runtime.d.ts +34 -7
  189. package/dist/agent-runtime/src/use-deep-agent-runtime.js +79 -15
  190. package/dist/agent-runtime/src/use-deep-agent-runtime.js.map +1 -1
  191. package/dist/agent-runtime/src/use-deep-agent-thread.cjs +16 -1
  192. package/dist/agent-runtime/src/use-deep-agent-thread.cjs.map +1 -1
  193. package/dist/agent-runtime/src/use-deep-agent-thread.d.ts +7 -2
  194. package/dist/agent-runtime/src/use-deep-agent-thread.js +16 -1
  195. package/dist/agent-runtime/src/use-deep-agent-thread.js.map +1 -1
  196. package/dist/agent-runtime/src/use-deep-agent-voice.cjs +30 -4
  197. package/dist/agent-runtime/src/use-deep-agent-voice.cjs.map +1 -1
  198. package/dist/agent-runtime/src/use-deep-agent-voice.d.ts +22 -4
  199. package/dist/agent-runtime/src/use-deep-agent-voice.js +30 -4
  200. package/dist/agent-runtime/src/use-deep-agent-voice.js.map +1 -1
  201. package/dist/agent-runtime/src/withdrawn-turns.d.ts +5 -4
  202. package/dist/agent-runtime/src/word-device-fit.d.ts +174 -0
  203. package/dist/agent-runtime/src/work-in.d.ts +127 -0
  204. package/dist/assets/AthenaAssetEmbed.cjs.map +1 -1
  205. package/dist/assets/AthenaAssetEmbed.d.ts +6 -1
  206. package/dist/assets/AthenaAssetEmbed.js.map +1 -1
  207. package/dist/assets/asset-panel-store.cjs +13 -5
  208. package/dist/assets/asset-panel-store.cjs.map +1 -1
  209. package/dist/assets/asset-panel-store.d.ts +33 -2
  210. package/dist/assets/asset-panel-store.js +13 -5
  211. package/dist/assets/asset-panel-store.js.map +1 -1
  212. package/dist/auth/AthenaCredentialSourceContext.cjs +11 -0
  213. package/dist/auth/AthenaCredentialSourceContext.cjs.map +1 -1
  214. package/dist/auth/AthenaCredentialSourceContext.d.ts +6 -0
  215. package/dist/auth/AthenaCredentialSourceContext.js +11 -0
  216. package/dist/auth/AthenaCredentialSourceContext.js.map +1 -1
  217. package/dist/auth/account-identity.cjs +13 -2
  218. package/dist/auth/account-identity.cjs.map +1 -1
  219. package/dist/auth/account-identity.d.ts +9 -0
  220. package/dist/auth/account-identity.js +13 -2
  221. package/dist/auth/account-identity.js.map +1 -1
  222. package/dist/auth/credential-source.cjs +20 -4
  223. package/dist/auth/credential-source.cjs.map +1 -1
  224. package/dist/auth/credential-source.d.ts +9 -0
  225. package/dist/auth/credential-source.js +20 -4
  226. package/dist/auth/credential-source.js.map +1 -1
  227. package/dist/catalog/chat-pickers.cjs +31 -0
  228. package/dist/catalog/chat-pickers.cjs.map +1 -1
  229. package/dist/catalog/chat-pickers.d.ts +17 -0
  230. package/dist/catalog/chat-pickers.js +33 -2
  231. package/dist/catalog/chat-pickers.js.map +1 -1
  232. package/dist/catalog/runtime-catalog.cjs +63 -3
  233. package/dist/catalog/runtime-catalog.cjs.map +1 -1
  234. package/dist/catalog/runtime-catalog.d.ts +63 -3
  235. package/dist/catalog/runtime-catalog.js +64 -4
  236. package/dist/catalog/runtime-catalog.js.map +1 -1
  237. package/dist/chat/AthenaChat.cjs +290 -97
  238. package/dist/chat/AthenaChat.cjs.map +1 -1
  239. package/dist/chat/AthenaChat.d.ts +80 -4
  240. package/dist/chat/AthenaChat.js +290 -97
  241. package/dist/chat/AthenaChat.js.map +1 -1
  242. package/dist/chat/StatewireApprovalCard.cjs +35 -5
  243. package/dist/chat/StatewireApprovalCard.cjs.map +1 -1
  244. package/dist/chat/StatewireApprovalCard.d.ts +55 -2
  245. package/dist/chat/StatewireApprovalCard.js +37 -7
  246. package/dist/chat/StatewireApprovalCard.js.map +1 -1
  247. package/dist/chat/StatewireQueuedMessages.cjs +17 -2
  248. package/dist/chat/StatewireQueuedMessages.cjs.map +1 -1
  249. package/dist/chat/StatewireQueuedMessages.d.ts +8 -45
  250. package/dist/chat/StatewireQueuedMessages.js +18 -3
  251. package/dist/chat/StatewireQueuedMessages.js.map +1 -1
  252. package/dist/chat/chat-agent-mentions.cjs +70 -0
  253. package/dist/chat/chat-agent-mentions.cjs.map +1 -0
  254. package/dist/chat/chat-agent-mentions.d.ts +13 -0
  255. package/dist/chat/chat-agent-mentions.js +70 -0
  256. package/dist/chat/chat-agent-mentions.js.map +1 -0
  257. package/dist/chat/composer-actions.cjs +12 -0
  258. package/dist/chat/composer-actions.cjs.map +1 -0
  259. package/dist/chat/composer-actions.d.ts +22 -0
  260. package/dist/chat/composer-actions.js +12 -0
  261. package/dist/chat/composer-actions.js.map +1 -0
  262. package/dist/chat/follow-up-suggestions.cjs +185 -0
  263. package/dist/chat/follow-up-suggestions.cjs.map +1 -0
  264. package/dist/chat/follow-up-suggestions.d.ts +64 -0
  265. package/dist/chat/follow-up-suggestions.js +185 -0
  266. package/dist/chat/follow-up-suggestions.js.map +1 -0
  267. package/dist/chat/super-grouping/ToolTimeline.cjs +4 -3
  268. package/dist/chat/super-grouping/ToolTimeline.cjs.map +1 -1
  269. package/dist/chat/super-grouping/ToolTimeline.d.ts +7 -3
  270. package/dist/chat/super-grouping/ToolTimeline.js +4 -3
  271. package/dist/chat/super-grouping/ToolTimeline.js.map +1 -1
  272. package/dist/chat/turn-changes.cjs +284 -0
  273. package/dist/chat/turn-changes.cjs.map +1 -0
  274. package/dist/chat/turn-changes.d.ts +130 -0
  275. package/dist/chat/turn-changes.js +284 -0
  276. package/dist/chat/turn-changes.js.map +1 -0
  277. package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.cjs +31 -0
  278. package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.cjs.map +1 -0
  279. package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.d.ts +31 -0
  280. package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.js +31 -0
  281. package/dist/chat/typed-interrupts/StatewireTypedInterruptCard.js.map +1 -0
  282. package/dist/chat/typed-interrupts/approval-cards.cjs +250 -0
  283. package/dist/chat/typed-interrupts/approval-cards.cjs.map +1 -0
  284. package/dist/chat/typed-interrupts/approval-cards.d.ts +22 -0
  285. package/dist/chat/typed-interrupts/approval-cards.js +250 -0
  286. package/dist/chat/typed-interrupts/approval-cards.js.map +1 -0
  287. package/dist/chat/typed-interrupts/form-cards.cjs +289 -0
  288. package/dist/chat/typed-interrupts/form-cards.cjs.map +1 -0
  289. package/dist/chat/typed-interrupts/form-cards.d.ts +6 -0
  290. package/dist/chat/typed-interrupts/form-cards.js +289 -0
  291. package/dist/chat/typed-interrupts/form-cards.js.map +1 -0
  292. package/dist/chat/typed-interrupts/interrupt-card-shell.cjs +182 -0
  293. package/dist/chat/typed-interrupts/interrupt-card-shell.cjs.map +1 -0
  294. package/dist/chat/typed-interrupts/interrupt-card-shell.d.ts +47 -0
  295. package/dist/chat/typed-interrupts/interrupt-card-shell.js +182 -0
  296. package/dist/chat/typed-interrupts/interrupt-card-shell.js.map +1 -0
  297. package/dist/chat/typed-interrupts/json-schema-form.cjs +388 -0
  298. package/dist/chat/typed-interrupts/json-schema-form.cjs.map +1 -0
  299. package/dist/chat/typed-interrupts/json-schema-form.d.ts +33 -0
  300. package/dist/chat/typed-interrupts/json-schema-form.js +388 -0
  301. package/dist/chat/typed-interrupts/json-schema-form.js.map +1 -0
  302. package/dist/chat/typed-interrupts/questionnaire-card.cjs +449 -0
  303. package/dist/chat/typed-interrupts/questionnaire-card.cjs.map +1 -0
  304. package/dist/chat/typed-interrupts/questionnaire-card.d.ts +20 -0
  305. package/dist/chat/typed-interrupts/questionnaire-card.js +449 -0
  306. package/dist/chat/typed-interrupts/questionnaire-card.js.map +1 -0
  307. package/dist/chat/typed-interrupts/request-file-card.cjs +159 -0
  308. package/dist/chat/typed-interrupts/request-file-card.cjs.map +1 -0
  309. package/dist/chat/typed-interrupts/request-file-card.d.ts +2 -0
  310. package/dist/chat/typed-interrupts/request-file-card.js +159 -0
  311. package/dist/chat/typed-interrupts/request-file-card.js.map +1 -0
  312. package/dist/chat/typed-interrupts/toolkit-selection-card.cjs +189 -0
  313. package/dist/chat/typed-interrupts/toolkit-selection-card.cjs.map +1 -0
  314. package/dist/chat/typed-interrupts/toolkit-selection-card.d.ts +23 -0
  315. package/dist/chat/typed-interrupts/toolkit-selection-card.js +189 -0
  316. package/dist/chat/typed-interrupts/toolkit-selection-card.js.map +1 -0
  317. package/dist/chat/typed-interrupts/typed-interrupt-body.cjs +26 -0
  318. package/dist/chat/typed-interrupts/typed-interrupt-body.cjs.map +1 -0
  319. package/dist/chat/typed-interrupts/typed-interrupt-body.d.ts +3 -0
  320. package/dist/chat/typed-interrupts/typed-interrupt-body.js +26 -0
  321. package/dist/chat/typed-interrupts/typed-interrupt-body.js.map +1 -0
  322. package/dist/chat/typed-interrupts/typed-interrupt-graphql.cjs +105 -0
  323. package/dist/chat/typed-interrupts/typed-interrupt-graphql.cjs.map +1 -0
  324. package/dist/chat/typed-interrupts/typed-interrupt-graphql.d.ts +29 -0
  325. package/dist/chat/typed-interrupts/typed-interrupt-graphql.js +105 -0
  326. package/dist/chat/typed-interrupts/typed-interrupt-graphql.js.map +1 -0
  327. package/dist/chat/typed-interrupts/typed-interrupt-notice.cjs +70 -0
  328. package/dist/chat/typed-interrupts/typed-interrupt-notice.cjs.map +1 -0
  329. package/dist/chat/typed-interrupts/typed-interrupt-notice.d.ts +45 -0
  330. package/dist/chat/typed-interrupts/typed-interrupt-notice.js +70 -0
  331. package/dist/chat/typed-interrupts/typed-interrupt-notice.js.map +1 -0
  332. package/dist/chat/typed-interrupts/typed-interrupt-panel.cjs +76 -0
  333. package/dist/chat/typed-interrupts/typed-interrupt-panel.cjs.map +1 -0
  334. package/dist/chat/typed-interrupts/typed-interrupt-panel.d.ts +11 -0
  335. package/dist/chat/typed-interrupts/typed-interrupt-panel.js +76 -0
  336. package/dist/chat/typed-interrupts/typed-interrupt-panel.js.map +1 -0
  337. package/dist/chat/typed-interrupts/typed-interrupt-types.d.ts +46 -0
  338. package/dist/chat/typed-interrupts/use-interrupt-draft.cjs +106 -0
  339. package/dist/chat/typed-interrupts/use-interrupt-draft.cjs.map +1 -0
  340. package/dist/chat/typed-interrupts/use-interrupt-draft.d.ts +29 -0
  341. package/dist/chat/typed-interrupts/use-interrupt-draft.js +106 -0
  342. package/dist/chat/typed-interrupts/use-interrupt-draft.js.map +1 -0
  343. package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.cjs +231 -0
  344. package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.cjs.map +1 -0
  345. package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.d.ts +66 -0
  346. package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.js +231 -0
  347. package/dist/chat/typed-interrupts/use-statewire-typed-interrupt.js.map +1 -0
  348. package/dist/chat-ui/composer/composer-named-agents.cjs +13 -0
  349. package/dist/chat-ui/composer/composer-named-agents.cjs.map +1 -0
  350. package/dist/chat-ui/composer/composer-named-agents.d.ts +20 -0
  351. package/dist/chat-ui/composer/composer-named-agents.js +13 -0
  352. package/dist/chat-ui/composer/composer-named-agents.js.map +1 -0
  353. package/dist/chat-ui/composer/slash-command-menu.cjs +143 -0
  354. package/dist/chat-ui/composer/slash-command-menu.cjs.map +1 -0
  355. package/dist/chat-ui/composer/slash-command-menu.d.ts +19 -0
  356. package/dist/chat-ui/composer/slash-command-menu.js +143 -0
  357. package/dist/chat-ui/composer/slash-command-menu.js.map +1 -0
  358. package/dist/chat-ui/composer/slash-commands-extension.cjs +51 -0
  359. package/dist/chat-ui/composer/slash-commands-extension.cjs.map +1 -0
  360. package/dist/chat-ui/composer/slash-commands-extension.d.ts +39 -0
  361. package/dist/chat-ui/composer/slash-commands-extension.js +51 -0
  362. package/dist/chat-ui/composer/slash-commands-extension.js.map +1 -0
  363. package/dist/chat-ui/composer/slash-commands.cjs +74 -0
  364. package/dist/chat-ui/composer/slash-commands.cjs.map +1 -0
  365. package/dist/chat-ui/composer/slash-commands.d.ts +82 -0
  366. package/dist/chat-ui/composer/slash-commands.js +74 -0
  367. package/dist/chat-ui/composer/slash-commands.js.map +1 -0
  368. package/dist/chat-ui/composer/tiptap-composer.cjs +135 -9
  369. package/dist/chat-ui/composer/tiptap-composer.cjs.map +1 -1
  370. package/dist/chat-ui/composer/tiptap-composer.d.ts +61 -2
  371. package/dist/chat-ui/composer/tiptap-composer.js +135 -9
  372. package/dist/chat-ui/composer/tiptap-composer.js.map +1 -1
  373. package/dist/chat-ui/index.cjs +3 -0
  374. package/dist/chat-ui/index.cjs.map +1 -1
  375. package/dist/chat-ui/index.d.ts +3 -2
  376. package/dist/chat-ui/index.js +3 -0
  377. package/dist/chat-ui/index.js.map +1 -1
  378. package/dist/chat-ui/mentions/mention-chip.cjs +1 -1
  379. package/dist/chat-ui/mentions/mention-chip.cjs.map +1 -1
  380. package/dist/chat-ui/mentions/mention-chip.js +2 -2
  381. package/dist/chat-ui/mentions/mention-chip.js.map +1 -1
  382. package/dist/chat-ui/mentions/mention-extension.cjs +8 -1
  383. package/dist/chat-ui/mentions/mention-extension.cjs.map +1 -1
  384. package/dist/chat-ui/mentions/mention-extension.js +8 -1
  385. package/dist/chat-ui/mentions/mention-extension.js.map +1 -1
  386. package/dist/chat-ui/mentions/suggestions/components/get-scope-name.cjs +1 -0
  387. package/dist/chat-ui/mentions/suggestions/components/get-scope-name.cjs.map +1 -1
  388. package/dist/chat-ui/mentions/suggestions/components/get-scope-name.js +1 -0
  389. package/dist/chat-ui/mentions/suggestions/components/get-scope-name.js.map +1 -1
  390. package/dist/chat-ui/mentions/suggestions/components/mention-icon.cjs +2 -0
  391. package/dist/chat-ui/mentions/suggestions/components/mention-icon.cjs.map +1 -1
  392. package/dist/chat-ui/mentions/suggestions/components/mention-icon.js +3 -1
  393. package/dist/chat-ui/mentions/suggestions/components/mention-icon.js.map +1 -1
  394. package/dist/chat-ui/mentions/suggestions/components/menu-item.cjs +1 -1
  395. package/dist/chat-ui/mentions/suggestions/components/menu-item.cjs.map +1 -1
  396. package/dist/chat-ui/mentions/suggestions/components/menu-item.js +1 -1
  397. package/dist/chat-ui/mentions/suggestions/components/menu-item.js.map +1 -1
  398. package/dist/chat-ui/mentions/suggestions/data/api-client.cjs +36 -0
  399. package/dist/chat-ui/mentions/suggestions/data/api-client.cjs.map +1 -1
  400. package/dist/chat-ui/mentions/suggestions/data/api-client.d.ts +42 -0
  401. package/dist/chat-ui/mentions/suggestions/data/api-client.js +36 -0
  402. package/dist/chat-ui/mentions/suggestions/data/api-client.js.map +1 -1
  403. package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs +235 -19
  404. package/dist/chat-ui/mentions/suggestions/data/sources/index.cjs.map +1 -1
  405. package/dist/chat-ui/mentions/suggestions/data/sources/index.d.ts +88 -10
  406. package/dist/chat-ui/mentions/suggestions/data/sources/index.js +236 -20
  407. package/dist/chat-ui/mentions/suggestions/data/sources/index.js.map +1 -1
  408. package/dist/chat-ui/mentions/suggestions/data/types.cjs.map +1 -1
  409. package/dist/chat-ui/mentions/suggestions/data/types.d.ts +27 -1
  410. package/dist/chat-ui/mentions/suggestions/data/types.js.map +1 -1
  411. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs +56 -5
  412. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.cjs.map +1 -1
  413. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.d.ts +26 -6
  414. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js +57 -6
  415. package/dist/chat-ui/mentions/suggestions/data/use-mention-suggestions.js.map +1 -1
  416. package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.cjs +34 -17
  417. package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.cjs.map +1 -1
  418. package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.d.ts +19 -1
  419. package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.js +35 -18
  420. package/dist/chat-ui/mentions/suggestions/mention-suggestions.extension.js.map +1 -1
  421. package/dist/chat-ui/statewire.d.ts +1 -1
  422. package/dist/chat-ui/thread/statewire-history-edge.cjs +15 -0
  423. package/dist/chat-ui/thread/statewire-history-edge.cjs.map +1 -1
  424. package/dist/chat-ui/thread/statewire-history-edge.d.ts +4 -1
  425. package/dist/chat-ui/thread/statewire-history-edge.js +15 -0
  426. package/dist/chat-ui/thread/statewire-history-edge.js.map +1 -1
  427. package/dist/collab/client.cjs +17 -5
  428. package/dist/collab/client.cjs.map +1 -1
  429. package/dist/collab/client.d.ts +22 -7
  430. package/dist/collab/client.js +17 -5
  431. package/dist/collab/client.js.map +1 -1
  432. package/dist/composer/ComposerAttachedReferences.cjs +119 -0
  433. package/dist/composer/ComposerAttachedReferences.cjs.map +1 -0
  434. package/dist/composer/ComposerAttachedReferences.d.ts +26 -0
  435. package/dist/composer/ComposerAttachedReferences.js +119 -0
  436. package/dist/composer/ComposerAttachedReferences.js.map +1 -0
  437. package/dist/composer/ComposerNamedAgents.cjs +63 -0
  438. package/dist/composer/ComposerNamedAgents.cjs.map +1 -0
  439. package/dist/composer/ComposerNamedAgents.d.ts +16 -0
  440. package/dist/composer/ComposerNamedAgents.js +63 -0
  441. package/dist/composer/ComposerNamedAgents.js.map +1 -0
  442. package/dist/composer/attached-references.cjs +159 -0
  443. package/dist/composer/attached-references.cjs.map +1 -0
  444. package/dist/composer/attached-references.d.ts +86 -0
  445. package/dist/composer/attached-references.js +159 -0
  446. package/dist/composer/attached-references.js.map +1 -0
  447. package/dist/composer/build-composed-message.cjs +14 -7
  448. package/dist/composer/build-composed-message.cjs.map +1 -1
  449. package/dist/composer/build-composed-message.d.ts +6 -1
  450. package/dist/composer/build-composed-message.js +14 -7
  451. package/dist/composer/build-composed-message.js.map +1 -1
  452. package/dist/composer/composer-handoff.cjs +6 -2
  453. package/dist/composer/composer-handoff.cjs.map +1 -1
  454. package/dist/composer/composer-handoff.d.ts +7 -1
  455. package/dist/composer/composer-handoff.js +6 -2
  456. package/dist/composer/composer-handoff.js.map +1 -1
  457. package/dist/composer/folder-upload.cjs +149 -0
  458. package/dist/composer/folder-upload.cjs.map +1 -0
  459. package/dist/composer/folder-upload.d.ts +79 -0
  460. package/dist/composer/folder-upload.js +149 -0
  461. package/dist/composer/folder-upload.js.map +1 -0
  462. package/dist/composer/index.d.ts +1 -1
  463. package/dist/composer/useAttachToChat.cjs +35 -0
  464. package/dist/composer/useAttachToChat.cjs.map +1 -0
  465. package/dist/composer/useAttachToChat.d.ts +54 -0
  466. package/dist/composer/useAttachToChat.js +35 -0
  467. package/dist/composer/useAttachToChat.js.map +1 -0
  468. package/dist/composer/useAttachedReferencesComposerProps.cjs +19 -0
  469. package/dist/composer/useAttachedReferencesComposerProps.cjs.map +1 -0
  470. package/dist/composer/useAttachedReferencesComposerProps.d.ts +12 -0
  471. package/dist/composer/useAttachedReferencesComposerProps.js +19 -0
  472. package/dist/composer/useAttachedReferencesComposerProps.js.map +1 -0
  473. package/dist/composer/useFileUpload.cjs +95 -7
  474. package/dist/composer/useFileUpload.cjs.map +1 -1
  475. package/dist/composer/useFileUpload.d.ts +21 -2
  476. package/dist/composer/useFileUpload.js +95 -7
  477. package/dist/composer/useFileUpload.js.map +1 -1
  478. package/dist/data/athena-api-error.cjs +125 -0
  479. package/dist/data/athena-api-error.cjs.map +1 -0
  480. package/dist/data/athena-api-error.d.ts +96 -0
  481. package/dist/data/athena-api-error.js +125 -0
  482. package/dist/data/athena-api-error.js.map +1 -0
  483. package/dist/data/athena-data-client.cjs +106 -0
  484. package/dist/data/athena-data-client.cjs.map +1 -0
  485. package/dist/data/athena-data-client.d.ts +74 -0
  486. package/dist/data/athena-data-client.js +106 -0
  487. package/dist/data/athena-data-client.js.map +1 -0
  488. package/dist/data/athena-member.cjs +93 -0
  489. package/dist/data/athena-member.cjs.map +1 -0
  490. package/dist/data/athena-member.d.ts +125 -0
  491. package/dist/data/athena-member.js +93 -0
  492. package/dist/data/athena-member.js.map +1 -0
  493. package/dist/data/athena-request.cjs +458 -0
  494. package/dist/data/athena-request.cjs.map +1 -0
  495. package/dist/data/athena-request.d.ts +120 -0
  496. package/dist/data/athena-request.js +458 -0
  497. package/dist/data/athena-request.js.map +1 -0
  498. package/dist/data/use-athena-fetch.cjs +14 -0
  499. package/dist/data/use-athena-fetch.cjs.map +1 -0
  500. package/dist/data/use-athena-fetch.d.ts +19 -0
  501. package/dist/data/use-athena-fetch.js +14 -0
  502. package/dist/data/use-athena-fetch.js.map +1 -0
  503. package/dist/data/use-athena-graphql.cjs +66 -0
  504. package/dist/data/use-athena-graphql.cjs.map +1 -0
  505. package/dist/data/use-athena-graphql.d.ts +56 -0
  506. package/dist/data/use-athena-graphql.js +66 -0
  507. package/dist/data/use-athena-graphql.js.map +1 -0
  508. package/dist/data/use-athena-rest.cjs +33 -0
  509. package/dist/data/use-athena-rest.cjs.map +1 -0
  510. package/dist/data/use-athena-rest.d.ts +21 -0
  511. package/dist/data/use-athena-rest.js +33 -0
  512. package/dist/data/use-athena-rest.js.map +1 -0
  513. package/dist/data/use-semantic-query.cjs +44 -0
  514. package/dist/data/use-semantic-query.cjs.map +1 -0
  515. package/dist/data/use-semantic-query.d.ts +92 -0
  516. package/dist/data/use-semantic-query.js +44 -0
  517. package/dist/data/use-semantic-query.js.map +1 -0
  518. package/dist/diagnostics/athena-diagnostics.cjs.map +1 -1
  519. package/dist/diagnostics/athena-diagnostics.d.ts +5 -1
  520. package/dist/diagnostics/athena-diagnostics.js.map +1 -1
  521. package/dist/diagnostics/errors.cjs +7 -0
  522. package/dist/diagnostics/errors.cjs.map +1 -1
  523. package/dist/diagnostics/errors.d.ts +7 -0
  524. package/dist/diagnostics/errors.js +7 -0
  525. package/dist/diagnostics/errors.js.map +1 -1
  526. package/dist/index.cjs +155 -11
  527. package/dist/index.cjs.map +1 -1
  528. package/dist/index.d.ts +72 -13
  529. package/dist/index.js +148 -4
  530. package/dist/index.js.map +1 -1
  531. package/dist/keryx-http/src/initial-sync.cjs +64 -16
  532. package/dist/keryx-http/src/initial-sync.cjs.map +1 -1
  533. package/dist/keryx-http/src/initial-sync.d.ts +31 -1
  534. package/dist/keryx-http/src/initial-sync.js +64 -16
  535. package/dist/keryx-http/src/initial-sync.js.map +1 -1
  536. package/dist/keryx-http/src/own-awareness.cjs +20 -0
  537. package/dist/keryx-http/src/own-awareness.cjs.map +1 -0
  538. package/dist/keryx-http/src/own-awareness.d.ts +50 -0
  539. package/dist/keryx-http/src/own-awareness.js +20 -0
  540. package/dist/keryx-http/src/own-awareness.js.map +1 -0
  541. package/dist/keryx-http/src/update-attributions.cjs +26 -1
  542. package/dist/keryx-http/src/update-attributions.cjs.map +1 -1
  543. package/dist/keryx-http/src/update-attributions.d.ts +10 -1
  544. package/dist/keryx-http/src/update-attributions.js +26 -1
  545. package/dist/keryx-http/src/update-attributions.js.map +1 -1
  546. package/dist/offline/chat-outbox.cjs +262 -26
  547. package/dist/offline/chat-outbox.cjs.map +1 -1
  548. package/dist/offline/chat-outbox.d.ts +90 -12
  549. package/dist/offline/chat-outbox.js +263 -27
  550. package/dist/offline/chat-outbox.js.map +1 -1
  551. package/dist/provider/AthenaProvider.cjs +56 -19
  552. package/dist/provider/AthenaProvider.cjs.map +1 -1
  553. package/dist/provider/AthenaProvider.d.ts +24 -8
  554. package/dist/provider/AthenaProvider.js +57 -20
  555. package/dist/provider/AthenaProvider.js.map +1 -1
  556. package/dist/react/package.json.cjs +1 -1
  557. package/dist/react/package.json.js +1 -1
  558. package/dist/references/src/anchors/types.cjs +5 -0
  559. package/dist/references/src/anchors/types.cjs.map +1 -1
  560. package/dist/references/src/anchors/types.js +5 -0
  561. package/dist/references/src/anchors/types.js.map +1 -1
  562. package/dist/references/src/attachable.cjs +149 -0
  563. package/dist/references/src/attachable.cjs.map +1 -0
  564. package/dist/references/src/attachable.d.ts +87 -0
  565. package/dist/references/src/attachable.js +149 -0
  566. package/dist/references/src/attachable.js.map +1 -0
  567. package/dist/runtime/StatewirePlanModeLaneSync.cjs +93 -0
  568. package/dist/runtime/StatewirePlanModeLaneSync.cjs.map +1 -0
  569. package/dist/runtime/StatewirePlanModeLaneSync.d.ts +34 -0
  570. package/dist/runtime/StatewirePlanModeLaneSync.js +93 -0
  571. package/dist/runtime/StatewirePlanModeLaneSync.js.map +1 -0
  572. package/dist/runtime/StatewireThreadConfigLaneSync.cjs +2 -0
  573. package/dist/runtime/StatewireThreadConfigLaneSync.cjs.map +1 -1
  574. package/dist/runtime/StatewireThreadConfigLaneSync.d.ts +4 -0
  575. package/dist/runtime/StatewireThreadConfigLaneSync.js +2 -0
  576. package/dist/runtime/StatewireThreadConfigLaneSync.js.map +1 -1
  577. package/dist/runtime/statewire-plan-mode.cjs +71 -0
  578. package/dist/runtime/statewire-plan-mode.cjs.map +1 -0
  579. package/dist/runtime/statewire-plan-mode.d.ts +88 -0
  580. package/dist/runtime/statewire-plan-mode.js +71 -0
  581. package/dist/runtime/statewire-plan-mode.js.map +1 -0
  582. package/dist/runtime/statewire-run-config.cjs +3 -1
  583. package/dist/runtime/statewire-run-config.cjs.map +1 -1
  584. package/dist/runtime/statewire-run-config.d.ts +7 -0
  585. package/dist/runtime/statewire-run-config.js +3 -1
  586. package/dist/runtime/statewire-run-config.js.map +1 -1
  587. package/dist/runtime/statewire-session-key.cjs +11 -5
  588. package/dist/runtime/statewire-session-key.cjs.map +1 -1
  589. package/dist/runtime/statewire-session-key.d.ts +22 -10
  590. package/dist/runtime/statewire-session-key.js +11 -5
  591. package/dist/runtime/statewire-session-key.js.map +1 -1
  592. package/dist/runtime/useAthenaStatewireRuntime.cjs +65 -8
  593. package/dist/runtime/useAthenaStatewireRuntime.cjs.map +1 -1
  594. package/dist/runtime/useAthenaStatewireRuntime.d.ts +26 -10
  595. package/dist/runtime/useAthenaStatewireRuntime.js +67 -10
  596. package/dist/runtime/useAthenaStatewireRuntime.js.map +1 -1
  597. package/dist/search/useAthenaAssets.cjs +394 -0
  598. package/dist/search/useAthenaAssets.cjs.map +1 -0
  599. package/dist/search/useAthenaAssets.d.ts +186 -0
  600. package/dist/search/useAthenaAssets.js +394 -0
  601. package/dist/search/useAthenaAssets.js.map +1 -0
  602. package/dist/sheet-range/index.cjs +4 -0
  603. package/dist/sheet-range/index.cjs.map +1 -1
  604. package/dist/sheet-range/index.d.ts +4 -2
  605. package/dist/sheet-range/index.js +4 -0
  606. package/dist/sheet-range/index.js.map +1 -1
  607. package/dist/sheet-range/query-range.cjs +102 -0
  608. package/dist/sheet-range/query-range.cjs.map +1 -0
  609. package/dist/sheet-range/query-range.d.ts +46 -0
  610. package/dist/sheet-range/query-range.js +102 -0
  611. package/dist/sheet-range/query-range.js.map +1 -0
  612. package/dist/styles.css +1 -1
  613. package/dist/subagents/index.cjs +49 -0
  614. package/dist/subagents/index.cjs.map +1 -0
  615. package/dist/subagents/index.d.ts +16 -0
  616. package/dist/subagents/index.js +49 -0
  617. package/dist/subagents/index.js.map +1 -0
  618. package/dist/subagents/lane-follow.cjs +19 -0
  619. package/dist/subagents/lane-follow.cjs.map +1 -0
  620. package/dist/subagents/lane-follow.d.ts +9 -0
  621. package/dist/subagents/lane-follow.js +19 -0
  622. package/dist/subagents/lane-follow.js.map +1 -0
  623. package/dist/subagents/lane-model.cjs +178 -0
  624. package/dist/subagents/lane-model.cjs.map +1 -0
  625. package/dist/subagents/lane-model.d.ts +140 -0
  626. package/dist/subagents/lane-model.js +178 -0
  627. package/dist/subagents/lane-model.js.map +1 -0
  628. package/dist/subagents/lane-parts.cjs +517 -0
  629. package/dist/subagents/lane-parts.cjs.map +1 -0
  630. package/dist/subagents/lane-parts.d.ts +130 -0
  631. package/dist/subagents/lane-parts.js +517 -0
  632. package/dist/subagents/lane-parts.js.map +1 -0
  633. package/dist/subagents/subagent-lane-group.cjs +215 -0
  634. package/dist/subagents/subagent-lane-group.cjs.map +1 -0
  635. package/dist/subagents/subagent-lane-group.d.ts +67 -0
  636. package/dist/subagents/subagent-lane-group.js +215 -0
  637. package/dist/subagents/subagent-lane-group.js.map +1 -0
  638. package/dist/subagents/subagent-transcript-drawer.cjs +431 -0
  639. package/dist/subagents/subagent-transcript-drawer.cjs.map +1 -0
  640. package/dist/subagents/subagent-transcript-drawer.d.ts +78 -0
  641. package/dist/subagents/subagent-transcript-drawer.js +431 -0
  642. package/dist/subagents/subagent-transcript-drawer.js.map +1 -0
  643. package/dist/subagents/task-subagent-group.cjs +115 -0
  644. package/dist/subagents/task-subagent-group.cjs.map +1 -0
  645. package/dist/subagents/task-subagent-group.d.ts +36 -0
  646. package/dist/subagents/task-subagent-group.js +115 -0
  647. package/dist/subagents/task-subagent-group.js.map +1 -0
  648. package/dist/subagents/use-omitted-images-in-view.cjs +68 -0
  649. package/dist/subagents/use-omitted-images-in-view.cjs.map +1 -0
  650. package/dist/subagents/use-omitted-images-in-view.d.ts +21 -0
  651. package/dist/subagents/use-omitted-images-in-view.js +68 -0
  652. package/dist/subagents/use-omitted-images-in-view.js.map +1 -0
  653. package/dist/threads/Inbox.cjs +2 -2
  654. package/dist/threads/Inbox.cjs.map +1 -1
  655. package/dist/threads/SessionList.cjs +6 -6
  656. package/dist/threads/SessionList.cjs.map +1 -1
  657. package/dist/threads/SessionsPage.cjs +13 -7
  658. package/dist/threads/SessionsPage.cjs.map +1 -1
  659. package/dist/threads/SessionsPage.d.ts +10 -1
  660. package/dist/threads/SessionsPage.js +9 -3
  661. package/dist/threads/SessionsPage.js.map +1 -1
  662. package/dist/threads/session-list-model.cjs.map +1 -1
  663. package/dist/threads/session-list-model.d.ts +2 -1
  664. package/dist/threads/session-list-model.js.map +1 -1
  665. package/dist/threads/session-row-parts.cjs +3 -3
  666. package/dist/threads/session-row-parts.cjs.map +1 -1
  667. package/dist/threads/sessions-page-model.cjs +13 -5
  668. package/dist/threads/sessions-page-model.cjs.map +1 -1
  669. package/dist/threads/sessions-page-model.d.ts +7 -0
  670. package/dist/threads/sessions-page-model.js +11 -3
  671. package/dist/threads/sessions-page-model.js.map +1 -1
  672. package/dist/threads/sessions-page-storage.cjs +8 -8
  673. package/dist/threads/sessions-page-storage.cjs.map +1 -1
  674. package/dist/threads/sessions-page-storage.d.ts +5 -1
  675. package/dist/threads/sessions-page-storage.js +8 -8
  676. package/dist/threads/sessions-page-storage.js.map +1 -1
  677. package/dist/threads/use-athena-sessions.cjs +1 -0
  678. package/dist/threads/use-athena-sessions.cjs.map +1 -1
  679. package/dist/threads/use-athena-sessions.d.ts +7 -0
  680. package/dist/threads/use-athena-sessions.js +1 -0
  681. package/dist/threads/use-athena-sessions.js.map +1 -1
  682. package/dist/threads/use-athena-thread-agent.cjs +31 -0
  683. package/dist/threads/use-athena-thread-agent.cjs.map +1 -0
  684. package/dist/threads/use-athena-thread-agent.d.ts +38 -0
  685. package/dist/threads/use-athena-thread-agent.js +31 -0
  686. package/dist/threads/use-athena-thread-agent.js.map +1 -0
  687. package/dist/threads/use-athena-thread-plan-mode.cjs +18 -0
  688. package/dist/threads/use-athena-thread-plan-mode.cjs.map +1 -0
  689. package/dist/threads/use-athena-thread-plan-mode.d.ts +18 -0
  690. package/dist/threads/use-athena-thread-plan-mode.js +18 -0
  691. package/dist/threads/use-athena-thread-plan-mode.js.map +1 -0
  692. package/dist/threads/use-rest-conversation-history.d.ts +1 -0
  693. package/dist/tools/agent-creations.cjs +97 -0
  694. package/dist/tools/agent-creations.cjs.map +1 -0
  695. package/dist/tools/agent-creations.d.ts +38 -0
  696. package/dist/tools/agent-creations.js +97 -0
  697. package/dist/tools/agent-creations.js.map +1 -0
  698. package/dist/tools/agent-highlights.cjs +100 -0
  699. package/dist/tools/agent-highlights.cjs.map +1 -0
  700. package/dist/tools/agent-highlights.d.ts +57 -0
  701. package/dist/tools/agent-highlights.js +100 -0
  702. package/dist/tools/agent-highlights.js.map +1 -0
  703. package/dist/tools/append-document-tool-ui.cjs +1 -0
  704. package/dist/tools/append-document-tool-ui.cjs.map +1 -1
  705. package/dist/tools/append-document-tool-ui.d.ts +7 -0
  706. package/dist/tools/append-document-tool-ui.js +2 -1
  707. package/dist/tools/append-document-tool-ui.js.map +1 -1
  708. package/dist/tools/auto-open-tools.cjs +144 -71
  709. package/dist/tools/auto-open-tools.cjs.map +1 -1
  710. package/dist/tools/auto-open-tools.d.ts +131 -1
  711. package/dist/tools/auto-open-tools.js +145 -72
  712. package/dist/tools/auto-open-tools.js.map +1 -1
  713. package/dist/tools/browser-tool-uis.cjs +594 -0
  714. package/dist/tools/browser-tool-uis.cjs.map +1 -0
  715. package/dist/tools/browser-tool-uis.d.ts +8 -0
  716. package/dist/tools/browser-tool-uis.js +594 -0
  717. package/dist/tools/browser-tool-uis.js.map +1 -0
  718. package/dist/tools/computer-asset-tool-uis.cjs +313 -0
  719. package/dist/tools/computer-asset-tool-uis.cjs.map +1 -0
  720. package/dist/tools/computer-asset-tool-uis.d.ts +5 -0
  721. package/dist/tools/computer-asset-tool-uis.js +313 -0
  722. package/dist/tools/computer-asset-tool-uis.js.map +1 -0
  723. package/dist/tools/document-edit-tool-uis.cjs +218 -0
  724. package/dist/tools/document-edit-tool-uis.cjs.map +1 -0
  725. package/dist/tools/document-edit-tool-uis.d.ts +40 -0
  726. package/dist/tools/document-edit-tool-uis.js +218 -0
  727. package/dist/tools/document-edit-tool-uis.js.map +1 -0
  728. package/dist/tools/drive-tool-uis.cjs +425 -0
  729. package/dist/tools/drive-tool-uis.cjs.map +1 -0
  730. package/dist/tools/drive-tool-uis.d.ts +120 -0
  731. package/dist/tools/drive-tool-uis.js +425 -0
  732. package/dist/tools/drive-tool-uis.js.map +1 -0
  733. package/dist/tools/email-calendar-tool-uis.cjs +789 -0
  734. package/dist/tools/email-calendar-tool-uis.cjs.map +1 -0
  735. package/dist/tools/email-calendar-tool-uis.d.ts +129 -0
  736. package/dist/tools/email-calendar-tool-uis.js +789 -0
  737. package/dist/tools/email-calendar-tool-uis.js.map +1 -0
  738. package/dist/tools/ontology-tool-uis.cjs +83 -0
  739. package/dist/tools/ontology-tool-uis.cjs.map +1 -0
  740. package/dist/tools/ontology-tool-uis.d.ts +9 -0
  741. package/dist/tools/ontology-tool-uis.js +83 -0
  742. package/dist/tools/ontology-tool-uis.js.map +1 -0
  743. package/dist/tools/orchestration-tool-uis.cjs +586 -0
  744. package/dist/tools/orchestration-tool-uis.cjs.map +1 -0
  745. package/dist/tools/orchestration-tool-uis.d.ts +141 -0
  746. package/dist/tools/orchestration-tool-uis.js +586 -0
  747. package/dist/tools/orchestration-tool-uis.js.map +1 -0
  748. package/dist/tools/presentation-edit-tool-uis.cjs +516 -0
  749. package/dist/tools/presentation-edit-tool-uis.cjs.map +1 -0
  750. package/dist/tools/presentation-edit-tool-uis.d.ts +73 -0
  751. package/dist/tools/presentation-edit-tool-uis.js +516 -0
  752. package/dist/tools/presentation-edit-tool-uis.js.map +1 -0
  753. package/dist/tools/project-tool-uis.cjs +213 -0
  754. package/dist/tools/project-tool-uis.cjs.map +1 -0
  755. package/dist/tools/project-tool-uis.d.ts +14 -0
  756. package/dist/tools/project-tool-uis.js +213 -0
  757. package/dist/tools/project-tool-uis.js.map +1 -0
  758. package/dist/tools/sandbox-tool-uis.cjs +491 -0
  759. package/dist/tools/sandbox-tool-uis.cjs.map +1 -0
  760. package/dist/tools/sandbox-tool-uis.d.ts +116 -0
  761. package/dist/tools/sandbox-tool-uis.js +491 -0
  762. package/dist/tools/sandbox-tool-uis.js.map +1 -0
  763. package/dist/tools/sheet-query-tool-ui.cjs +138 -0
  764. package/dist/tools/sheet-query-tool-ui.cjs.map +1 -0
  765. package/dist/tools/sheet-query-tool-ui.d.ts +15 -0
  766. package/dist/tools/sheet-query-tool-ui.js +138 -0
  767. package/dist/tools/sheet-query-tool-ui.js.map +1 -0
  768. package/dist/tools/studio-screenshot-tool-uis.cjs +262 -0
  769. package/dist/tools/studio-screenshot-tool-uis.cjs.map +1 -0
  770. package/dist/tools/studio-screenshot-tool-uis.d.ts +52 -0
  771. package/dist/tools/studio-screenshot-tool-uis.js +262 -0
  772. package/dist/tools/studio-screenshot-tool-uis.js.map +1 -0
  773. package/dist/tools/subagent-task-tool-ui.cjs +24 -475
  774. package/dist/tools/subagent-task-tool-ui.cjs.map +1 -1
  775. package/dist/tools/subagent-task-tool-ui.d.ts +19 -103
  776. package/dist/tools/subagent-task-tool-ui.js +28 -479
  777. package/dist/tools/subagent-task-tool-ui.js.map +1 -1
  778. package/dist/tools/tool-summary.cjs +36 -0
  779. package/dist/tools/tool-summary.cjs.map +1 -1
  780. package/dist/tools/tool-summary.js +36 -0
  781. package/dist/tools/tool-summary.js.map +1 -1
  782. package/dist/tools/tool-uis.cjs +181 -53
  783. package/dist/tools/tool-uis.cjs.map +1 -1
  784. package/dist/tools/tool-uis.d.ts +40 -0
  785. package/dist/tools/tool-uis.js +183 -55
  786. package/dist/tools/tool-uis.js.map +1 -1
  787. package/dist/typed-interrupts/index.cjs +15 -0
  788. package/dist/typed-interrupts/index.cjs.map +1 -0
  789. package/dist/typed-interrupts/index.d.ts +20 -0
  790. package/dist/typed-interrupts/index.js +15 -0
  791. package/dist/typed-interrupts/index.js.map +1 -0
  792. package/dist/workbench/session-workbench-panes.cjs +6 -6
  793. package/dist/workbench/session-workbench-panes.cjs.map +1 -1
  794. package/package.json +28 -6
  795. package/dist/agent-runtime/src/chat-outbox-store.cjs +0 -510
  796. package/dist/agent-runtime/src/chat-outbox-store.cjs.map +0 -1
  797. package/dist/agent-runtime/src/chat-outbox-store.d.ts +0 -210
  798. package/dist/agent-runtime/src/chat-outbox-store.js +0 -510
  799. package/dist/agent-runtime/src/chat-outbox-store.js.map +0 -1
@@ -0,0 +1,458 @@
1
+ import { getAthenaApiBaseUrl } from "../collab/mint.js";
2
+ import { sendWithCredentialRenewal } from "../runtime/credential-renewal.js";
3
+ import { graphQLErrorEntries, AthenaApiError, AthenaApiErrorKind, graphQLErrorCode, restErrorDetail, isAthenaApiError } from "./athena-api-error.js";
4
+ const ATHENA_REQUEST_TIMEOUT_MS = 3e4;
5
+ const RATE_LIMIT_MAX_RETRIES = 2;
6
+ const RATE_LIMIT_MAX_WAIT_MS = 3e4;
7
+ const RATE_LIMIT_FIRST_BACKOFF_MS = 1e3;
8
+ const RATE_LIMITED_CODE = "RATE_LIMITED";
9
+ const SAFE_METHODS = /* @__PURE__ */ new Set(["GET", "HEAD", "OPTIONS"]);
10
+ const IDENTITY_HEADERS = /* @__PURE__ */ new Set([
11
+ "authorization",
12
+ "proxy-authorization",
13
+ "cookie",
14
+ "x-api-key",
15
+ "x-athena-view-as"
16
+ ]);
17
+ function refuse(message, method, path) {
18
+ return new AthenaApiError({ kind: AthenaApiErrorKind.Request, message, method, path });
19
+ }
20
+ function prepare(config, path, options) {
21
+ const hasBody = options.json !== void 0 || options.body !== void 0;
22
+ const method = (options.method ?? (hasBody ? "POST" : "GET")).toUpperCase();
23
+ const errorPath = path.split("?")[0] ?? path;
24
+ if (!path.startsWith("/") || path.startsWith("//")) {
25
+ throw refuse(
26
+ `A request path must start with a single "/" (it goes to the provider's backendUrl): ${JSON.stringify(path)}`,
27
+ method,
28
+ errorPath
29
+ );
30
+ }
31
+ if (options.json !== void 0 && options.body !== void 0) {
32
+ throw refuse("A request takes `json` or `body`, not both", method, errorPath);
33
+ }
34
+ for (const name of Object.keys(options.headers ?? {})) {
35
+ if (IDENTITY_HEADERS.has(name.toLowerCase())) {
36
+ throw refuse(
37
+ `A request may not set ${name}: it presents the provider's credential and no other`,
38
+ method,
39
+ errorPath
40
+ );
41
+ }
42
+ }
43
+ const base = getAthenaApiBaseUrl(config.backendUrl);
44
+ let url;
45
+ let backendOrigin;
46
+ try {
47
+ backendOrigin = new URL(base).origin;
48
+ url = new URL(`${base}${path}`);
49
+ } catch (error) {
50
+ throw new AthenaApiError({
51
+ kind: AthenaApiErrorKind.Request,
52
+ message: `The provider's backendUrl is not a URL: ${JSON.stringify(config.backendUrl)}`,
53
+ method,
54
+ path: errorPath,
55
+ cause: error
56
+ });
57
+ }
58
+ if (url.origin !== backendOrigin) {
59
+ throw refuse(`A request path must stay on the provider's backendUrl: ${JSON.stringify(path)}`, method, errorPath);
60
+ }
61
+ for (const [name, value] of Object.entries(options.params ?? {})) {
62
+ for (const item of Array.isArray(value) ? value : [value]) {
63
+ if (item !== null && item !== void 0) url.searchParams.append(name, String(item));
64
+ }
65
+ }
66
+ const headers = {
67
+ Accept: "application/json",
68
+ ...options.json !== void 0 ? { "Content-Type": "application/json" } : {},
69
+ ...options.headers
70
+ };
71
+ return {
72
+ method,
73
+ url: url.toString(),
74
+ path: errorPath,
75
+ headers,
76
+ body: options.json !== void 0 ? JSON.stringify(options.json) : options.body
77
+ };
78
+ }
79
+ function credentialSource(config, request) {
80
+ const getToken = config.getToken;
81
+ return {
82
+ apiKey: config.apiKey,
83
+ token: config.token,
84
+ ...getToken ? {
85
+ getToken: async (options) => {
86
+ try {
87
+ return await getToken(options);
88
+ } catch (error) {
89
+ throw new AthenaApiError({
90
+ kind: AthenaApiErrorKind.Credential,
91
+ message: "The provider could not resolve a credential for the request",
92
+ method: request.method,
93
+ path: request.path,
94
+ cause: error
95
+ });
96
+ }
97
+ }
98
+ } : {}
99
+ };
100
+ }
101
+ function startAttempt(parent, timeoutMs) {
102
+ const controller = new AbortController();
103
+ let timedOut = false;
104
+ const forward = () => controller.abort(parent == null ? void 0 : parent.reason);
105
+ if (parent == null ? void 0 : parent.aborted) controller.abort(parent.reason);
106
+ else parent == null ? void 0 : parent.addEventListener("abort", forward, { once: true });
107
+ const timer = timeoutMs > 0 && Number.isFinite(timeoutMs) ? setTimeout(() => {
108
+ timedOut = true;
109
+ controller.abort(new DOMException(`No answer within ${timeoutMs} ms`, "TimeoutError"));
110
+ }, timeoutMs) : void 0;
111
+ return {
112
+ signal: controller.signal,
113
+ timedOut: () => timedOut,
114
+ settle: ({ keepCancel = false } = {}) => {
115
+ if (timer !== void 0) clearTimeout(timer);
116
+ if (!keepCancel) parent == null ? void 0 : parent.removeEventListener("abort", forward);
117
+ }
118
+ };
119
+ }
120
+ function abortReason(signal) {
121
+ return signal.reason ?? new DOMException("The request was cancelled", "AbortError");
122
+ }
123
+ function failureOf({
124
+ error,
125
+ attempt,
126
+ signal,
127
+ request,
128
+ timeoutMs,
129
+ reading
130
+ }) {
131
+ if (signal == null ? void 0 : signal.aborted) return abortReason(signal);
132
+ if (isAthenaApiError(error)) return error;
133
+ if (attempt.timedOut()) {
134
+ return new AthenaApiError({
135
+ kind: AthenaApiErrorKind.Timeout,
136
+ message: `Athena did not answer within ${timeoutMs} ms`,
137
+ method: request.method,
138
+ path: request.path,
139
+ cause: error
140
+ });
141
+ }
142
+ return new AthenaApiError({
143
+ kind: reading ? AthenaApiErrorKind.Response : AthenaApiErrorKind.Network,
144
+ message: reading ? "The answer was cut off before it was read" : "Athena could not be reached",
145
+ method: request.method,
146
+ path: request.path,
147
+ cause: error
148
+ });
149
+ }
150
+ function retryAfterMsOf(response, body, now = Date.now()) {
151
+ var _a, _b;
152
+ const header = (_a = response.headers.get("retry-after")) == null ? void 0 : _a.trim();
153
+ if (header) {
154
+ if (/^\d+$/.test(header)) return Number(header) * 1e3;
155
+ const date = Date.parse(header);
156
+ if (Number.isFinite(date)) return Math.max(0, date - now);
157
+ }
158
+ for (const entry of graphQLErrorEntries(body)) {
159
+ const seconds2 = (_b = entry.extensions) == null ? void 0 : _b.retryAfterSeconds;
160
+ if (typeof seconds2 === "number" && Number.isFinite(seconds2) && seconds2 >= 0) return seconds2 * 1e3;
161
+ }
162
+ const seconds = restErrorDetail(body).retryAfterSeconds;
163
+ return seconds !== null && seconds >= 0 ? seconds * 1e3 : null;
164
+ }
165
+ function lenientBody(text) {
166
+ if (text.length === 0) return void 0;
167
+ try {
168
+ return JSON.parse(text);
169
+ } catch {
170
+ return text;
171
+ }
172
+ }
173
+ const TEXT_DETAIL_LIMIT = 1e3;
174
+ async function httpError(response, request, { signal, attempt, timeoutMs }) {
175
+ var _a;
176
+ let body;
177
+ try {
178
+ body = lenientBody(await response.text());
179
+ } catch (error) {
180
+ if ((signal == null ? void 0 : signal.aborted) || attempt.timedOut()) {
181
+ throw failureOf({ error, attempt, signal, request, timeoutMs, reading: true });
182
+ }
183
+ body = void 0;
184
+ }
185
+ const statusLine = response.statusText ? `${response.status} ${response.statusText}` : `HTTP ${response.status}`;
186
+ const common = {
187
+ kind: AthenaApiErrorKind.Http,
188
+ status: response.status,
189
+ retryAfterMs: retryAfterMsOf(response, body),
190
+ method: request.method,
191
+ path: request.path
192
+ };
193
+ if (typeof body === "string") {
194
+ return new AthenaApiError({ ...common, message: statusLine, detail: body.slice(0, TEXT_DETAIL_LIMIT) });
195
+ }
196
+ const errors = graphQLErrorEntries(body);
197
+ const rest = restErrorDetail(body);
198
+ return new AthenaApiError({
199
+ ...common,
200
+ code: graphQLErrorCode(errors[0]) ?? rest.code,
201
+ message: ((_a = errors[0]) == null ? void 0 : _a.message) ?? rest.message ?? statusLine,
202
+ errors,
203
+ detail: errors.length > 0 ? void 0 : rest.detail
204
+ });
205
+ }
206
+ function rateLimitWaitMs({
207
+ error,
208
+ retry,
209
+ method,
210
+ policy
211
+ }) {
212
+ if (policy === false) return null;
213
+ if (retry >= ((policy == null ? void 0 : policy.maxRetries) ?? RATE_LIMIT_MAX_RETRIES)) return null;
214
+ if (!SAFE_METHODS.has(method) && error.code !== RATE_LIMITED_CODE) return null;
215
+ const waitMs = error.retryAfterMs ?? RATE_LIMIT_FIRST_BACKOFF_MS * 2 ** retry * (0.8 + Math.random() * 0.4);
216
+ return waitMs <= ((policy == null ? void 0 : policy.maxWaitMs) ?? RATE_LIMIT_MAX_WAIT_MS) ? waitMs : null;
217
+ }
218
+ function sleep(ms, signal) {
219
+ return new Promise((resolve, reject) => {
220
+ if (signal == null ? void 0 : signal.aborted) {
221
+ reject(abortReason(signal));
222
+ return;
223
+ }
224
+ let timer;
225
+ const onAbort = () => {
226
+ clearTimeout(timer);
227
+ if (signal) reject(abortReason(signal));
228
+ };
229
+ timer = setTimeout(() => {
230
+ signal == null ? void 0 : signal.removeEventListener("abort", onAbort);
231
+ resolve();
232
+ }, ms);
233
+ signal == null ? void 0 : signal.addEventListener("abort", onAbort, { once: true });
234
+ });
235
+ }
236
+ async function exchange(config, request, options) {
237
+ const timeoutMs = options.timeoutMs ?? ATHENA_REQUEST_TIMEOUT_MS;
238
+ const source = credentialSource(config, request);
239
+ for (let retry = 0; ; retry += 1) {
240
+ const attempt = startAttempt(options.signal, timeoutMs);
241
+ let response;
242
+ try {
243
+ response = await sendWithCredentialRenewal(
244
+ source,
245
+ (credentialHeaders) => fetch(request.url, {
246
+ method: request.method,
247
+ headers: { ...request.headers, ...credentialHeaders },
248
+ body: request.body ?? null,
249
+ signal: attempt.signal
250
+ })
251
+ );
252
+ } catch (error) {
253
+ attempt.settle();
254
+ throw failureOf({ error, attempt, signal: options.signal, request, timeoutMs, reading: false });
255
+ }
256
+ if (response.status !== 429) return { response, attempt, timeoutMs };
257
+ let refusal;
258
+ try {
259
+ refusal = await httpError(response, request, { signal: options.signal, attempt, timeoutMs });
260
+ } finally {
261
+ attempt.settle();
262
+ }
263
+ const waitMs = rateLimitWaitMs({ error: refusal, retry, method: request.method, policy: options.rateLimitRetry });
264
+ if (waitMs === null) throw refusal;
265
+ await sleep(waitMs, options.signal);
266
+ }
267
+ }
268
+ async function athenaFetchResponse(config, path, options = {}) {
269
+ const request = prepare(config, path, options);
270
+ const { response, attempt, timeoutMs } = await exchange(config, request, options);
271
+ if (response.ok) {
272
+ attempt.settle({ keepCancel: true });
273
+ return response;
274
+ }
275
+ try {
276
+ throw await httpError(response, request, { signal: options.signal, attempt, timeoutMs });
277
+ } finally {
278
+ attempt.settle();
279
+ }
280
+ }
281
+ async function athenaFetchBody(config, path, options) {
282
+ const request = prepare(config, path, options);
283
+ const { response, attempt, timeoutMs } = await exchange(config, request, options);
284
+ try {
285
+ if (!response.ok) throw await httpError(response, request, { signal: options.signal, attempt, timeoutMs });
286
+ let text;
287
+ try {
288
+ text = await response.text();
289
+ } catch (error) {
290
+ throw failureOf({ error, attempt, signal: options.signal, request, timeoutMs, reading: true });
291
+ }
292
+ if (text.length === 0) return { status: response.status, body: void 0, request };
293
+ const contentType = response.headers.get("content-type") ?? "";
294
+ if (!/[/+]json\b/i.test(contentType)) {
295
+ return { status: response.status, body: contentType ? text : lenientBody(text), request };
296
+ }
297
+ try {
298
+ return { status: response.status, body: JSON.parse(text), request };
299
+ } catch (error) {
300
+ throw new AthenaApiError({
301
+ kind: AthenaApiErrorKind.Response,
302
+ status: response.status,
303
+ message: "Agora answered with JSON that could not be read",
304
+ method: request.method,
305
+ path: request.path,
306
+ cause: error
307
+ });
308
+ }
309
+ } finally {
310
+ attempt.settle();
311
+ }
312
+ }
313
+ async function athenaFetchJson(config, path, options = {}) {
314
+ const { body } = await athenaFetchBody(config, path, options);
315
+ return body;
316
+ }
317
+ async function athenaGraphQL(config, document, variables, options = {}) {
318
+ const { operationName, ...requestOptions } = options;
319
+ const { status, body, request } = await athenaFetchBody(config, "/graphql", {
320
+ ...requestOptions,
321
+ method: "POST",
322
+ json: {
323
+ query: String(document),
324
+ variables: variables ?? {},
325
+ ...operationName ? { operationName } : {}
326
+ }
327
+ });
328
+ const errors = graphQLErrorEntries(body);
329
+ const first = errors[0];
330
+ if (first) {
331
+ throw new AthenaApiError({
332
+ kind: AthenaApiErrorKind.GraphQL,
333
+ status,
334
+ code: graphQLErrorCode(first),
335
+ message: first.message,
336
+ errors,
337
+ method: request.method,
338
+ path: request.path
339
+ });
340
+ }
341
+ const data = typeof body === "object" && body !== null ? Reflect.get(body, "data") : void 0;
342
+ if (data === void 0 || data === null) {
343
+ throw new AthenaApiError({
344
+ kind: AthenaApiErrorKind.GraphQL,
345
+ status,
346
+ message: "The GraphQL answer had no data",
347
+ method: request.method,
348
+ path: request.path
349
+ });
350
+ }
351
+ return data;
352
+ }
353
+ const GRAPHQL_IGNORED = /(?:[\s,]+|#[^\n\r]*)+/y;
354
+ const GRAPHQL_NAME = /[_A-Za-z][_0-9A-Za-z]*/y;
355
+ function graphQLOperationsOf(document) {
356
+ const operations = [];
357
+ let at = 0;
358
+ const skipIgnored = () => {
359
+ GRAPHQL_IGNORED.lastIndex = at;
360
+ if (GRAPHQL_IGNORED.exec(document)) at = GRAPHQL_IGNORED.lastIndex;
361
+ };
362
+ const readName = () => {
363
+ var _a;
364
+ GRAPHQL_NAME.lastIndex = at;
365
+ const name = ((_a = GRAPHQL_NAME.exec(document)) == null ? void 0 : _a[0]) ?? null;
366
+ if (name !== null) at = GRAPHQL_NAME.lastIndex;
367
+ return name;
368
+ };
369
+ const skipGroup = () => {
370
+ const open = document[at];
371
+ const close = open === "(" ? ")" : "}";
372
+ let depth = 0;
373
+ while (at < document.length) {
374
+ if (document.startsWith('"""', at)) {
375
+ const end = document.indexOf('"""', at + 3);
376
+ at = end === -1 ? document.length : end + 3;
377
+ continue;
378
+ }
379
+ const char = document[at];
380
+ if (char === '"') {
381
+ at += 1;
382
+ while (at < document.length && document[at] !== '"' && document[at] !== "\n") {
383
+ at += document[at] === "\\" ? 2 : 1;
384
+ }
385
+ at += 1;
386
+ continue;
387
+ }
388
+ if (char === "#") {
389
+ while (at < document.length && document[at] !== "\n") at += 1;
390
+ continue;
391
+ }
392
+ at += 1;
393
+ if (char === open) depth += 1;
394
+ else if (char === close) {
395
+ depth -= 1;
396
+ if (depth === 0) return;
397
+ }
398
+ }
399
+ };
400
+ const skipDefinition = () => {
401
+ while (at < document.length) {
402
+ skipIgnored();
403
+ const char = document[at];
404
+ if (char === "{") {
405
+ skipGroup();
406
+ return;
407
+ }
408
+ if (char === "(") skipGroup();
409
+ else at += 1;
410
+ }
411
+ };
412
+ for (; ; ) {
413
+ skipIgnored();
414
+ if (at >= document.length) return operations;
415
+ if (document[at] === "{") {
416
+ operations.push({ type: "query", name: null });
417
+ skipGroup();
418
+ continue;
419
+ }
420
+ const word = readName();
421
+ if (word === "query" || word === "mutation" || word === "subscription") {
422
+ skipIgnored();
423
+ operations.push({ type: word, name: readName() });
424
+ }
425
+ skipDefinition();
426
+ }
427
+ }
428
+ function selectedGraphQLOperation(document, operationName) {
429
+ const operations = graphQLOperationsOf(document);
430
+ if (operationName) return operations.find((operation) => operation.name === operationName) ?? null;
431
+ return operations.length === 1 ? operations[0] ?? null : null;
432
+ }
433
+ function createAthenaFetch(config) {
434
+ const bound = {
435
+ backendUrl: config.backendUrl,
436
+ apiKey: config.apiKey,
437
+ token: config.token,
438
+ getToken: config.getToken
439
+ };
440
+ return Object.assign(
441
+ (path, options) => athenaFetchJson(bound, path, options),
442
+ {
443
+ raw: (path, options) => athenaFetchResponse(bound, path, options),
444
+ graphql: (document, variables, options) => athenaGraphQL(bound, document, variables, options)
445
+ }
446
+ );
447
+ }
448
+ export {
449
+ ATHENA_REQUEST_TIMEOUT_MS,
450
+ athenaFetchJson,
451
+ athenaFetchResponse,
452
+ athenaGraphQL,
453
+ createAthenaFetch,
454
+ graphQLOperationsOf,
455
+ retryAfterMsOf,
456
+ selectedGraphQLOperation
457
+ };
458
+ //# sourceMappingURL=athena-request.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"athena-request.js","sources":["../../src/data/athena-request.ts"],"sourcesContent":["/**\n * The SDK's authenticated transport to agora, without React. Every request:\n *\n * - presents the provider's credential: the live token from `getToken`, renewed\n * once after a 401 (`sendWithCredentialRenewal`, the statewire transport's\n * `staleAuth` contract), else the API key;\n * - goes to the provider's `backendUrl`, and only there: a path must start\n * with `/`;\n * - waits out a 429 as agora's `Retry-After` asks, a bounded number of times;\n * - is abandoned after `timeoutMs`;\n * - fails as an `AthenaApiError`, except a request the caller cancelled, which\n * rejects with the abort's reason as `fetch` does.\n *\n * `useAthenaFetch` binds it to the provider, and the data hooks run on it.\n */\nimport { getAthenaApiBaseUrl } from '../collab/mint';\nimport { sendWithCredentialRenewal } from '../runtime/credential-renewal';\nimport type {\n AthenaStatewireTokenGetter,\n StatewireAuthSource,\n} from '../runtime/statewire-auth-headers';\nimport {\n AthenaApiError,\n AthenaApiErrorKind,\n graphQLErrorCode,\n graphQLErrorEntries,\n isAthenaApiError,\n restErrorDetail,\n} from './athena-api-error';\n\n/** Where a request goes and the credential it presents: the fields of `useAthenaConfig()` it reads. */\nexport interface AthenaRequestConfig {\n /** The Agora API base (`useAthenaConfig().backendUrl`). */\n backendUrl: string;\n apiKey?: string;\n token?: string | null;\n getToken?: AthenaStatewireTokenGetter;\n}\n\nexport type AthenaQueryParamValue = string | number | boolean | null | undefined;\n\n/** Query-string parameters: `null` and `undefined` are left out, an array repeats its key. */\nexport type AthenaQueryParams = Readonly<\n Record<string, AthenaQueryParamValue | readonly (string | number | boolean)[]>\n>;\n\n/** A body the SDK can send again (a 401's renewal and a 429's retry resend it): never a stream. */\nexport type AthenaRequestBody = Exclude<BodyInit, ReadableStream>;\n\n/** How a 429 is waited out. */\nexport interface AthenaRateLimitRetry {\n /** How many times the request is sent again (default 2). */\n maxRetries?: number;\n /**\n * The longest the SDK waits before sending again, in ms (default 30 000).\n * When agora asks for longer, the request fails at once with the 429, whose\n * `retryAfterMs` says when to come back.\n */\n maxWaitMs?: number;\n}\n\nexport interface AthenaRequestOptions {\n /** Default `GET`, or `POST` when the request has a body. */\n method?: string;\n params?: AthenaQueryParams;\n /** A body sent as JSON (`Content-Type: application/json`). Not with `body`. */\n json?: unknown;\n /** A body sent as is (`FormData`, `Blob`, text…). Not with `json`. */\n body?: AthenaRequestBody;\n /**\n * Extra headers. A request presents the provider's credential and no other:\n * `Authorization`, `X-API-KEY`, `Cookie`, `Proxy-Authorization` and\n * `X-Athena-View-As` are refused, in any letter case.\n */\n headers?: Readonly<Record<string, string>>;\n /** Cancels the request (and a wait between its attempts); it then rejects with the abort's reason. */\n signal?: AbortSignal;\n /** How long one attempt may take, in ms (default 30 000); `0` waits as long as it takes. */\n timeoutMs?: number;\n /** How a 429 is waited out; `false` fails at once. */\n rateLimitRetry?: AthenaRateLimitRetry | false;\n}\n\nexport const ATHENA_REQUEST_TIMEOUT_MS = 30_000;\nconst RATE_LIMIT_MAX_RETRIES = 2;\nconst RATE_LIMIT_MAX_WAIT_MS = 30_000;\n/** The first wait for a 429 that says nothing of when to come back; it doubles for each retry. */\nconst RATE_LIMIT_FIRST_BACKOFF_MS = 1_000;\n/** What agora's per-user limiter answers, before it runs anything (`user_request_rate_limit.py`). */\nconst RATE_LIMITED_CODE = 'RATE_LIMITED';\nconst SAFE_METHODS: ReadonlySet<string> = new Set(['GET', 'HEAD', 'OPTIONS']);\n/**\n * Headers that say who a request acts as, or through whose eyes\n * (`X-Athena-View-As`, agora's view-as lens): only the provider sets those.\n */\nconst IDENTITY_HEADERS: ReadonlySet<string> = new Set([\n 'authorization',\n 'proxy-authorization',\n 'cookie',\n 'x-api-key',\n 'x-athena-view-as',\n]);\n\n/** The request as sent: its method, its URL and its path for errors (no query string). */\ninterface PreparedRequest {\n method: string;\n url: string;\n path: string;\n headers: Record<string, string>;\n body: AthenaRequestBody | undefined;\n}\n\nfunction refuse(message: string, method: string, path: string): AthenaApiError {\n return new AthenaApiError({ kind: AthenaApiErrorKind.Request, message, method, path });\n}\n\nfunction prepare(\n config: AthenaRequestConfig,\n path: string,\n options: AthenaRequestOptions,\n): PreparedRequest {\n const hasBody = options.json !== undefined || options.body !== undefined;\n const method = (options.method ?? (hasBody ? 'POST' : 'GET')).toUpperCase();\n const errorPath = path.split('?')[0] ?? path;\n // A path, never a URL: a request carries the person's credential, so it goes\n // to the provider's backend and nowhere else.\n if (!path.startsWith('/') || path.startsWith('//')) {\n throw refuse(\n `A request path must start with a single \"/\" (it goes to the provider's backendUrl): ${JSON.stringify(path)}`,\n method,\n errorPath,\n );\n }\n if (options.json !== undefined && options.body !== undefined) {\n throw refuse('A request takes `json` or `body`, not both', method, errorPath);\n }\n // Header names are case-insensitive: a lowercase `authorization` would be\n // sent beside the provider's and could act as someone else, whose answer the\n // data hooks would then cache under the provider's identity.\n for (const name of Object.keys(options.headers ?? {})) {\n if (IDENTITY_HEADERS.has(name.toLowerCase())) {\n throw refuse(\n `A request may not set ${name}: it presents the provider's credential and no other`,\n method,\n errorPath,\n );\n }\n }\n const base = getAthenaApiBaseUrl(config.backendUrl);\n let url: URL;\n let backendOrigin: string;\n try {\n backendOrigin = new URL(base).origin;\n url = new URL(`${base}${path}`);\n } catch (error) {\n throw new AthenaApiError({\n kind: AthenaApiErrorKind.Request,\n message: `The provider's backendUrl is not a URL: ${JSON.stringify(config.backendUrl)}`,\n method,\n path: errorPath,\n cause: error,\n });\n }\n if (url.origin !== backendOrigin) {\n throw refuse(`A request path must stay on the provider's backendUrl: ${JSON.stringify(path)}`, method, errorPath);\n }\n for (const [name, value] of Object.entries(options.params ?? {})) {\n for (const item of Array.isArray(value) ? value : [value]) {\n if (item !== null && item !== undefined) url.searchParams.append(name, String(item));\n }\n }\n // TODO(#54756): name the app on every call (the provider's `appId`) once agora\n // records it and limits by it.\n const headers: Record<string, string> = {\n Accept: 'application/json',\n ...(options.json !== undefined ? { 'Content-Type': 'application/json' } : {}),\n ...options.headers,\n };\n return {\n method,\n url: url.toString(),\n path: errorPath,\n headers,\n body: options.json !== undefined ? JSON.stringify(options.json) : options.body,\n };\n}\n\n/** The provider's credential; a `getToken` that throws fails the request as `credential`. */\nfunction credentialSource(config: AthenaRequestConfig, request: PreparedRequest): StatewireAuthSource {\n const getToken = config.getToken;\n return {\n apiKey: config.apiKey,\n token: config.token,\n ...(getToken\n ? {\n getToken: async (options?: { force?: boolean }) => {\n try {\n return await getToken(options);\n } catch (error) {\n throw new AthenaApiError({\n kind: AthenaApiErrorKind.Credential,\n message: 'The provider could not resolve a credential for the request',\n method: request.method,\n path: request.path,\n cause: error,\n });\n }\n },\n }\n : {}),\n };\n}\n\n/** One attempt's signal: the caller's cancel, and its own timeout. */\ninterface Attempt {\n signal: AbortSignal;\n timedOut: () => boolean;\n /**\n * Stops the timeout. `keepCancel` leaves the caller's signal able to cancel\n * the body the caller still reads.\n */\n settle: (options?: { keepCancel?: boolean }) => void;\n}\n\nfunction startAttempt(parent: AbortSignal | undefined, timeoutMs: number): Attempt {\n const controller = new AbortController();\n let timedOut = false;\n const forward = () => controller.abort(parent?.reason);\n if (parent?.aborted) controller.abort(parent.reason);\n else parent?.addEventListener('abort', forward, { once: true });\n const timer =\n timeoutMs > 0 && Number.isFinite(timeoutMs)\n ? setTimeout(() => {\n timedOut = true;\n controller.abort(new DOMException(`No answer within ${timeoutMs} ms`, 'TimeoutError'));\n }, timeoutMs)\n : undefined;\n return {\n signal: controller.signal,\n timedOut: () => timedOut,\n settle: ({ keepCancel = false } = {}) => {\n if (timer !== undefined) clearTimeout(timer);\n if (!keepCancel) parent?.removeEventListener('abort', forward);\n },\n };\n}\n\nfunction abortReason(signal: AbortSignal): unknown {\n return signal.reason ?? new DOMException('The request was cancelled', 'AbortError');\n}\n\n/** A fetch or a body read that threw: the caller's cancel as is, else a typed failure. */\nfunction failureOf({\n error,\n attempt,\n signal,\n request,\n timeoutMs,\n reading,\n}: {\n error: unknown;\n attempt: Attempt;\n signal: AbortSignal | undefined;\n request: PreparedRequest;\n timeoutMs: number;\n reading: boolean;\n}): unknown {\n if (signal?.aborted) return abortReason(signal);\n if (isAthenaApiError(error)) return error;\n if (attempt.timedOut()) {\n return new AthenaApiError({\n kind: AthenaApiErrorKind.Timeout,\n message: `Athena did not answer within ${timeoutMs} ms`,\n method: request.method,\n path: request.path,\n cause: error,\n });\n }\n return new AthenaApiError({\n kind: reading ? AthenaApiErrorKind.Response : AthenaApiErrorKind.Network,\n message: reading ? 'The answer was cut off before it was read' : 'Athena could not be reached',\n method: request.method,\n path: request.path,\n cause: error,\n });\n}\n\n/**\n * How long agora asked the caller to wait, in ms: the `Retry-After` header\n * (seconds or a date), else the `retryAfterSeconds` of a rate-limit refusal's\n * body. `null` when it said nothing it is possible to read.\n */\nexport function retryAfterMsOf(response: Response, body: unknown, now: number = Date.now()): number | null {\n const header = response.headers.get('retry-after')?.trim();\n if (header) {\n if (/^\\d+$/.test(header)) return Number(header) * 1000;\n const date = Date.parse(header);\n if (Number.isFinite(date)) return Math.max(0, date - now);\n }\n for (const entry of graphQLErrorEntries(body)) {\n const seconds = entry.extensions?.retryAfterSeconds;\n if (typeof seconds === 'number' && Number.isFinite(seconds) && seconds >= 0) return seconds * 1000;\n }\n const seconds = restErrorDetail(body).retryAfterSeconds;\n return seconds !== null && seconds >= 0 ? seconds * 1000 : null;\n}\n\n/** JSON when it reads as JSON, the text otherwise; `undefined` for nothing. */\nfunction lenientBody(text: string): unknown {\n if (text.length === 0) return undefined;\n try {\n return JSON.parse(text);\n } catch {\n return text;\n }\n}\n\n/** How much of an error body that is not JSON (a proxy's error page) an error keeps. */\nconst TEXT_DETAIL_LIMIT = 1_000;\n\n/**\n * The `AthenaApiError` an error status answers, its body read for agora's code\n * and message. A body the attempt's timeout cut off is a timeout (a stalled\n * 5xx must not read as a 5xx, which a read retries), and the caller's cancel\n * stays a cancel; a body that fails otherwise is left out.\n */\nasync function httpError(\n response: Response,\n request: PreparedRequest,\n { signal, attempt, timeoutMs }: { signal: AbortSignal | undefined; attempt: Attempt; timeoutMs: number },\n): Promise<AthenaApiError> {\n let body: unknown;\n try {\n body = lenientBody(await response.text());\n } catch (error) {\n if (signal?.aborted || attempt.timedOut()) {\n throw failureOf({ error, attempt, signal, request, timeoutMs, reading: true });\n }\n body = undefined;\n }\n const statusLine = response.statusText\n ? `${response.status} ${response.statusText}`\n : `HTTP ${response.status}`;\n const common = {\n kind: AthenaApiErrorKind.Http,\n status: response.status,\n retryAfterMs: retryAfterMsOf(response, body),\n method: request.method,\n path: request.path,\n };\n // Not JSON: a gateway's or proxy's page, never agora's words.\n if (typeof body === 'string') {\n return new AthenaApiError({ ...common, message: statusLine, detail: body.slice(0, TEXT_DETAIL_LIMIT) });\n }\n const errors = graphQLErrorEntries(body);\n const rest = restErrorDetail(body);\n return new AthenaApiError({\n ...common,\n code: graphQLErrorCode(errors[0]) ?? rest.code,\n message: errors[0]?.message ?? rest.message ?? statusLine,\n errors,\n detail: errors.length > 0 ? undefined : rest.detail,\n });\n}\n\n/**\n * How long to wait before sending a refused request again, or `null` to fail\n * now. A write goes again only when agora's limiter refused it: that refusal\n * comes before anything runs, so the write cannot apply twice.\n */\nfunction rateLimitWaitMs({\n error,\n retry,\n method,\n policy,\n}: {\n error: AthenaApiError;\n retry: number;\n method: string;\n policy: AthenaRateLimitRetry | false | undefined;\n}): number | null {\n if (policy === false) return null;\n if (retry >= (policy?.maxRetries ?? RATE_LIMIT_MAX_RETRIES)) return null;\n if (!SAFE_METHODS.has(method) && error.code !== RATE_LIMITED_CODE) return null;\n const waitMs =\n error.retryAfterMs ?? RATE_LIMIT_FIRST_BACKOFF_MS * 2 ** retry * (0.8 + Math.random() * 0.4);\n return waitMs <= (policy?.maxWaitMs ?? RATE_LIMIT_MAX_WAIT_MS) ? waitMs : null;\n}\n\nfunction sleep(ms: number, signal: AbortSignal | undefined): Promise<void> {\n return new Promise((resolve, reject) => {\n if (signal?.aborted) {\n reject(abortReason(signal));\n return;\n }\n let timer: ReturnType<typeof setTimeout> | undefined;\n const onAbort = () => {\n clearTimeout(timer);\n if (signal) reject(abortReason(signal));\n };\n timer = setTimeout(() => {\n signal?.removeEventListener('abort', onAbort);\n resolve();\n }, ms);\n signal?.addEventListener('abort', onAbort, { once: true });\n });\n}\n\n/**\n * Send until agora answers with something other than a 429 the SDK waits out.\n * Answers that response (any status) with the attempt that got it, whose\n * timeout still runs: the caller settles it once the body is read.\n */\nasync function exchange(\n config: AthenaRequestConfig,\n request: PreparedRequest,\n options: AthenaRequestOptions,\n): Promise<{ response: Response; attempt: Attempt; timeoutMs: number }> {\n const timeoutMs = options.timeoutMs ?? ATHENA_REQUEST_TIMEOUT_MS;\n const source = credentialSource(config, request);\n for (let retry = 0; ; retry += 1) {\n const attempt = startAttempt(options.signal, timeoutMs);\n let response: Response;\n try {\n response = await sendWithCredentialRenewal(source, (credentialHeaders) =>\n fetch(request.url, {\n method: request.method,\n headers: { ...request.headers, ...credentialHeaders },\n body: request.body ?? null,\n signal: attempt.signal,\n }),\n );\n } catch (error) {\n attempt.settle();\n throw failureOf({ error, attempt, signal: options.signal, request, timeoutMs, reading: false });\n }\n if (response.status !== 429) return { response, attempt, timeoutMs };\n let refusal: AthenaApiError;\n try {\n refusal = await httpError(response, request, { signal: options.signal, attempt, timeoutMs });\n } finally {\n attempt.settle();\n }\n const waitMs = rateLimitWaitMs({ error: refusal, retry, method: request.method, policy: options.rateLimitRetry });\n if (waitMs === null) throw refusal;\n await sleep(waitMs, options.signal);\n }\n}\n\n/**\n * Send a request and answer its response once agora answered 2xx, for a body\n * the caller reads itself (a file, a stream). An error status throws\n * `AthenaApiError`. The timeout covers the wait for the answer, not the body.\n */\nexport async function athenaFetchResponse(\n config: AthenaRequestConfig,\n path: string,\n options: AthenaRequestOptions = {},\n): Promise<Response> {\n const request = prepare(config, path, options);\n const { response, attempt, timeoutMs } = await exchange(config, request, options);\n if (response.ok) {\n attempt.settle({ keepCancel: true });\n return response;\n }\n try {\n throw await httpError(response, request, { signal: options.signal, attempt, timeoutMs });\n } finally {\n attempt.settle();\n }\n}\n\n/** A 2xx answer's body: JSON when agora says it is JSON, text otherwise, `undefined` for none. */\nasync function athenaFetchBody(\n config: AthenaRequestConfig,\n path: string,\n options: AthenaRequestOptions,\n): Promise<{ status: number; body: unknown; request: PreparedRequest }> {\n const request = prepare(config, path, options);\n const { response, attempt, timeoutMs } = await exchange(config, request, options);\n try {\n if (!response.ok) throw await httpError(response, request, { signal: options.signal, attempt, timeoutMs });\n let text: string;\n try {\n text = await response.text();\n } catch (error) {\n throw failureOf({ error, attempt, signal: options.signal, request, timeoutMs, reading: true });\n }\n if (text.length === 0) return { status: response.status, body: undefined, request };\n const contentType = response.headers.get('content-type') ?? '';\n if (!/[/+]json\\b/i.test(contentType)) {\n return { status: response.status, body: contentType ? text : lenientBody(text), request };\n }\n try {\n return { status: response.status, body: JSON.parse(text), request };\n } catch (error) {\n throw new AthenaApiError({\n kind: AthenaApiErrorKind.Response,\n status: response.status,\n message: 'Agora answered with JSON that could not be read',\n method: request.method,\n path: request.path,\n cause: error,\n });\n }\n } finally {\n attempt.settle();\n }\n}\n\n/**\n * Send a request and answer its body: JSON when agora says it is JSON, text\n * otherwise, `undefined` for an empty answer. `T` is the caller's word for\n * what the route answers; nothing checks it.\n */\nexport async function athenaFetchJson<T = unknown>(\n config: AthenaRequestConfig,\n path: string,\n options: AthenaRequestOptions = {},\n): Promise<T> {\n const { body } = await athenaFetchBody(config, path, options);\n return body as T;\n}\n\nexport type AthenaGraphQLVariables = Readonly<Record<string, unknown>>;\n\n/**\n * A GraphQL document whose result and variables types travel with it, as\n * graphql-codegen's `TypedDocumentString` (its client preset with\n * `documentMode: 'string'`) carries them.\n */\nexport interface AthenaTypedDocument<TData, TVariables> {\n toString(): string;\n __apiType?: (variables: TVariables) => TData;\n}\n\n/** A GraphQL document: its text, or a typed document that names its result and variables. */\nexport type AthenaGraphQLDocument<TData = unknown, TVariables = AthenaGraphQLVariables> =\n | string\n | AthenaTypedDocument<TData, TVariables>;\n\nexport interface AthenaGraphQLRequestOptions\n extends Pick<AthenaRequestOptions, 'headers' | 'signal' | 'timeoutMs' | 'rateLimitRetry'> {\n /** The operation to run when the document holds several. */\n operationName?: string;\n}\n\n/**\n * Run one GraphQL operation on agora's `/graphql` and answer its `data`. An\n * answer with errors throws `AthenaApiError` (`kind: 'graphql'`, `code` the\n * first error's `extensions.code`), as does one with no data.\n */\nexport async function athenaGraphQL<TData = unknown, TVariables extends object = AthenaGraphQLVariables>(\n config: AthenaRequestConfig,\n document: AthenaGraphQLDocument<TData, TVariables>,\n variables?: TVariables,\n options: AthenaGraphQLRequestOptions = {},\n): Promise<TData> {\n const { operationName, ...requestOptions } = options;\n // TODO(#54756): send a registered operation's id (`documentId`) instead of its\n // text once agora allowlists each app's operations.\n const { status, body, request } = await athenaFetchBody(config, '/graphql', {\n ...requestOptions,\n method: 'POST',\n json: {\n query: String(document),\n variables: variables ?? {},\n ...(operationName ? { operationName } : {}),\n },\n });\n const errors = graphQLErrorEntries(body);\n const first = errors[0];\n if (first) {\n throw new AthenaApiError({\n kind: AthenaApiErrorKind.GraphQL,\n status,\n code: graphQLErrorCode(first),\n message: first.message,\n errors,\n method: request.method,\n path: request.path,\n });\n }\n const data: unknown =\n typeof body === 'object' && body !== null ? Reflect.get(body, 'data') : undefined;\n if (data === undefined || data === null) {\n throw new AthenaApiError({\n kind: AthenaApiErrorKind.GraphQL,\n status,\n message: 'The GraphQL answer had no data',\n method: request.method,\n path: request.path,\n });\n }\n return data as TData;\n}\n\n/** One operation a GraphQL document defines. */\nexport interface AthenaGraphQLOperation {\n type: 'query' | 'mutation' | 'subscription';\n /** `null` for an anonymous operation. */\n name: string | null;\n}\n\nconst GRAPHQL_IGNORED = /(?:[\\s,]+|#[^\\n\\r]*)+/y;\nconst GRAPHQL_NAME = /[_A-Za-z][_0-9A-Za-z]*/y;\n\n/**\n * The operations a GraphQL document defines, in order, fragments left out. A\n * lexical read that skips strings, comments, variable definitions (default\n * values included), directives and selection sets; it never validates the\n * document, which agora does.\n */\nexport function graphQLOperationsOf(document: string): AthenaGraphQLOperation[] {\n const operations: AthenaGraphQLOperation[] = [];\n let at = 0;\n const skipIgnored = () => {\n GRAPHQL_IGNORED.lastIndex = at;\n if (GRAPHQL_IGNORED.exec(document)) at = GRAPHQL_IGNORED.lastIndex;\n };\n const readName = (): string | null => {\n GRAPHQL_NAME.lastIndex = at;\n const name = GRAPHQL_NAME.exec(document)?.[0] ?? null;\n if (name !== null) at = GRAPHQL_NAME.lastIndex;\n return name;\n };\n /** Past the balanced `(…)` or `{…}` that opens at `at`, strings and comments included. */\n const skipGroup = () => {\n const open = document[at];\n const close = open === '(' ? ')' : '}';\n let depth = 0;\n while (at < document.length) {\n if (document.startsWith('\"\"\"', at)) {\n const end = document.indexOf('\"\"\"', at + 3);\n at = end === -1 ? document.length : end + 3;\n continue;\n }\n const char = document[at];\n if (char === '\"') {\n at += 1;\n while (at < document.length && document[at] !== '\"' && document[at] !== '\\n') {\n at += document[at] === '\\\\' ? 2 : 1;\n }\n at += 1;\n continue;\n }\n if (char === '#') {\n while (at < document.length && document[at] !== '\\n') at += 1;\n continue;\n }\n at += 1;\n if (char === open) depth += 1;\n else if (char === close) {\n depth -= 1;\n if (depth === 0) return;\n }\n }\n };\n /** Past a definition's header (variables, type condition, directives) and its selection set. */\n const skipDefinition = () => {\n while (at < document.length) {\n skipIgnored();\n const char = document[at];\n if (char === '{') {\n skipGroup();\n return;\n }\n if (char === '(') skipGroup();\n else at += 1;\n }\n };\n for (;;) {\n skipIgnored();\n if (at >= document.length) return operations;\n if (document[at] === '{') {\n operations.push({ type: 'query', name: null });\n skipGroup();\n continue;\n }\n const word = readName();\n if (word === 'query' || word === 'mutation' || word === 'subscription') {\n skipIgnored();\n operations.push({ type: word, name: readName() });\n }\n skipDefinition();\n }\n}\n\n/**\n * The operation a request runs: the one `operationName` names, else the\n * document's only one. `null` when neither picks one (agora refuses those).\n */\nexport function selectedGraphQLOperation(\n document: string,\n operationName?: string | null,\n): AthenaGraphQLOperation | null {\n const operations = graphQLOperationsOf(document);\n if (operationName) return operations.find((operation) => operation.name === operationName) ?? null;\n return operations.length === 1 ? (operations[0] ?? null) : null;\n}\n\n/**\n * An authenticated fetch bound to one configuration (see `useAthenaFetch`).\n * Called, it answers the route's body; `raw` answers the response itself and\n * `graphql` runs one GraphQL operation.\n */\nexport interface AthenaFetch {\n <T = unknown>(path: string, options?: AthenaRequestOptions): Promise<T>;\n raw(path: string, options?: AthenaRequestOptions): Promise<Response>;\n graphql<TData = unknown, TVariables extends object = AthenaGraphQLVariables>(\n document: AthenaGraphQLDocument<TData, TVariables>,\n variables?: TVariables,\n options?: AthenaGraphQLRequestOptions,\n ): Promise<TData>;\n}\n\n/**\n * `useAthenaFetch` without React: the transport bound to `config`, read once.\n * Hosts outside a component can pass `useAthenaConfig()`'s value along.\n */\nexport function createAthenaFetch(config: AthenaRequestConfig): AthenaFetch {\n const bound: AthenaRequestConfig = {\n backendUrl: config.backendUrl,\n apiKey: config.apiKey,\n token: config.token,\n getToken: config.getToken,\n };\n return Object.assign(\n <T = unknown>(path: string, options?: AthenaRequestOptions) =>\n athenaFetchJson<T>(bound, path, options),\n {\n raw: (path: string, options?: AthenaRequestOptions) => athenaFetchResponse(bound, path, options),\n graphql: <TData = unknown, TVariables extends object = AthenaGraphQLVariables>(\n document: AthenaGraphQLDocument<TData, TVariables>,\n variables?: TVariables,\n options?: AthenaGraphQLRequestOptions,\n ) => athenaGraphQL<TData, TVariables>(bound, document, variables, options),\n },\n );\n}\n"],"names":["seconds"],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const require$$0 = require("react");
4
+ const AthenaContext = require("../provider/AthenaContext.cjs");
5
+ const athenaRequest = require("./athena-request.cjs");
6
+ function useAthenaFetch() {
7
+ const { backendUrl, apiKey, token, getToken } = AthenaContext.useAthenaConfig();
8
+ return require$$0.useMemo(
9
+ () => athenaRequest.createAthenaFetch({ backendUrl, apiKey, token, getToken }),
10
+ [backendUrl, apiKey, token, getToken]
11
+ );
12
+ }
13
+ exports.useAthenaFetch = useAthenaFetch;
14
+ //# sourceMappingURL=use-athena-fetch.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-athena-fetch.cjs","sources":["../../src/data/use-athena-fetch.ts"],"sourcesContent":["import { useMemo } from 'react';\nimport { useAthenaConfig } from '../provider/AthenaContext';\nimport { type AthenaFetch, createAthenaFetch } from './athena-request';\n\n/**\n * An authenticated fetch bound to the provider (inside `<AthenaProvider>`):\n * each request goes to its `backendUrl` with its credential (the token\n * `getToken` resolves, renewed once after a 401, else the API key), waits out\n * a 429 as agora's `Retry-After` asks (bounded), is abandoned after\n * `timeoutMs` (30 s by default) and fails as an `AthenaApiError`.\n *\n * ```ts\n * const athenaFetch = useAthenaFetch();\n * const me = await athenaFetch<{ user_id: string }>('/api/v0/me');\n * const data = await athenaFetch.graphql<MyQuery>(MY_QUERY, { id });\n * const file = await athenaFetch.raw(`/api/asset/content/${id}`);\n * ```\n *\n * For reads a component shows, prefer `useAthenaGraphQL` / `useAthenaRest`:\n * they cache per identity and cancel on unmount.\n */\nexport function useAthenaFetch(): AthenaFetch {\n const { backendUrl, apiKey, token, getToken } = useAthenaConfig();\n return useMemo(\n () => createAthenaFetch({ backendUrl, apiKey, token, getToken }),\n [backendUrl, apiKey, token, getToken],\n );\n}\n"],"names":["useAthenaConfig","useMemo","createAthenaFetch"],"mappings":";;;;;AAqBO,SAAS,iBAA8B;AAC5C,QAAM,EAAE,YAAY,QAAQ,OAAO,SAAA,IAAaA,cAAAA,gBAAA;AAChD,SAAOC,WAAAA;AAAAA,IACL,MAAMC,cAAAA,kBAAkB,EAAE,YAAY,QAAQ,OAAO,UAAU;AAAA,IAC/D,CAAC,YAAY,QAAQ,OAAO,QAAQ;AAAA,EAAA;AAExC;;"}
@@ -0,0 +1,19 @@
1
+ import { type AthenaFetch } from './athena-request';
2
+ /**
3
+ * An authenticated fetch bound to the provider (inside `<AthenaProvider>`):
4
+ * each request goes to its `backendUrl` with its credential (the token
5
+ * `getToken` resolves, renewed once after a 401, else the API key), waits out
6
+ * a 429 as agora's `Retry-After` asks (bounded), is abandoned after
7
+ * `timeoutMs` (30 s by default) and fails as an `AthenaApiError`.
8
+ *
9
+ * ```ts
10
+ * const athenaFetch = useAthenaFetch();
11
+ * const me = await athenaFetch<{ user_id: string }>('/api/v0/me');
12
+ * const data = await athenaFetch.graphql<MyQuery>(MY_QUERY, { id });
13
+ * const file = await athenaFetch.raw(`/api/asset/content/${id}`);
14
+ * ```
15
+ *
16
+ * For reads a component shows, prefer `useAthenaGraphQL` / `useAthenaRest`:
17
+ * they cache per identity and cancel on unmount.
18
+ */
19
+ export declare function useAthenaFetch(): AthenaFetch;
@@ -0,0 +1,14 @@
1
+ import { useMemo } from "react";
2
+ import { useAthenaConfig } from "../provider/AthenaContext.js";
3
+ import { createAthenaFetch } from "./athena-request.js";
4
+ function useAthenaFetch() {
5
+ const { backendUrl, apiKey, token, getToken } = useAthenaConfig();
6
+ return useMemo(
7
+ () => createAthenaFetch({ backendUrl, apiKey, token, getToken }),
8
+ [backendUrl, apiKey, token, getToken]
9
+ );
10
+ }
11
+ export {
12
+ useAthenaFetch
13
+ };
14
+ //# sourceMappingURL=use-athena-fetch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-athena-fetch.js","sources":["../../src/data/use-athena-fetch.ts"],"sourcesContent":["import { useMemo } from 'react';\nimport { useAthenaConfig } from '../provider/AthenaContext';\nimport { type AthenaFetch, createAthenaFetch } from './athena-request';\n\n/**\n * An authenticated fetch bound to the provider (inside `<AthenaProvider>`):\n * each request goes to its `backendUrl` with its credential (the token\n * `getToken` resolves, renewed once after a 401, else the API key), waits out\n * a 429 as agora's `Retry-After` asks (bounded), is abandoned after\n * `timeoutMs` (30 s by default) and fails as an `AthenaApiError`.\n *\n * ```ts\n * const athenaFetch = useAthenaFetch();\n * const me = await athenaFetch<{ user_id: string }>('/api/v0/me');\n * const data = await athenaFetch.graphql<MyQuery>(MY_QUERY, { id });\n * const file = await athenaFetch.raw(`/api/asset/content/${id}`);\n * ```\n *\n * For reads a component shows, prefer `useAthenaGraphQL` / `useAthenaRest`:\n * they cache per identity and cancel on unmount.\n */\nexport function useAthenaFetch(): AthenaFetch {\n const { backendUrl, apiKey, token, getToken } = useAthenaConfig();\n return useMemo(\n () => createAthenaFetch({ backendUrl, apiKey, token, getToken }),\n [backendUrl, apiKey, token, getToken],\n );\n}\n"],"names":[],"mappings":";;;AAqBO,SAAS,iBAA8B;AAC5C,QAAM,EAAE,YAAY,QAAQ,OAAO,SAAA,IAAa,gBAAA;AAChD,SAAO;AAAA,IACL,MAAM,kBAAkB,EAAE,YAAY,QAAQ,OAAO,UAAU;AAAA,IAC/D,CAAC,YAAY,QAAQ,OAAO,QAAQ;AAAA,EAAA;AAExC;"}
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const reactQuery = require("@tanstack/react-query");
4
+ const AthenaContext = require("../provider/AthenaContext.cjs");
5
+ const athenaApiError = require("./athena-api-error.cjs");
6
+ const athenaDataClient = require("./athena-data-client.cjs");
7
+ const athenaRequest = require("./athena-request.cjs");
8
+ function useAthenaGraphQL(document, variables, options = {}) {
9
+ const config = AthenaContext.useAthenaConfig();
10
+ const scope = athenaDataClient.useAthenaDataScope();
11
+ const client = athenaDataClient.useAthenaDataQueryClient();
12
+ const { operationName, timeoutMs, rateLimitRetry, headers, enabled, ...queryOptions } = options;
13
+ const text = String(document);
14
+ return reactQuery.useQuery(
15
+ {
16
+ retry: athenaDataClient.retryAthenaRead,
17
+ retryDelay: athenaDataClient.athenaRetryDelay,
18
+ staleTime: athenaDataClient.ATHENA_DATA_STALE_MS,
19
+ ...queryOptions,
20
+ queryKey: [...scope, athenaDataClient.AthenaDataKind.GraphQL, text, variables ?? {}, operationName ?? null],
21
+ queryFn: ({ signal }) => {
22
+ var _a;
23
+ if (((_a = athenaRequest.selectedGraphQLOperation(text, operationName)) == null ? void 0 : _a.type) !== "query") {
24
+ throw new athenaApiError.AthenaApiError({
25
+ kind: athenaApiError.AthenaApiErrorKind.Request,
26
+ message: "useAthenaGraphQL runs one query: name it with operationName when the document holds several, and send a mutation with useAthenaGraphQLMutation",
27
+ method: "POST",
28
+ path: "/graphql"
29
+ });
30
+ }
31
+ return athenaRequest.athenaGraphQL(config, text, variables, {
32
+ operationName,
33
+ timeoutMs,
34
+ rateLimitRetry,
35
+ headers,
36
+ signal
37
+ });
38
+ },
39
+ enabled: athenaDataClient.enabledAnd(enabled, config.backendUrl.length > 0)
40
+ },
41
+ client
42
+ );
43
+ }
44
+ function useAthenaGraphQLMutation(document, options = {}) {
45
+ const config = AthenaContext.useAthenaConfig();
46
+ const client = athenaDataClient.useAthenaDataQueryClient();
47
+ const { operationName, timeoutMs, rateLimitRetry, headers, ...mutationOptions } = options;
48
+ const text = String(document);
49
+ return reactQuery.useMutation(
50
+ {
51
+ ...mutationOptions,
52
+ // TODO(#54756): send an Idempotency-Key per call once agora honours one, so
53
+ // a write sent twice (a retry, a double click) applies once.
54
+ mutationFn: (variables) => athenaRequest.athenaGraphQL(config, text, variables, {
55
+ operationName,
56
+ timeoutMs,
57
+ rateLimitRetry,
58
+ headers
59
+ })
60
+ },
61
+ client
62
+ );
63
+ }
64
+ exports.useAthenaGraphQL = useAthenaGraphQL;
65
+ exports.useAthenaGraphQLMutation = useAthenaGraphQLMutation;
66
+ //# sourceMappingURL=use-athena-graphql.cjs.map