@kortix/sdk 0.10.16 → 0.12.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 (313) hide show
  1. package/README.md +114 -62
  2. package/dist/browser/cache/idb-sync-cache-key.d.ts +2 -0
  3. package/dist/browser/cache/idb-sync-cache-key.d.ts.map +1 -0
  4. package/dist/browser/cache/idb-sync-cache-key.js +7 -0
  5. package/dist/browser/cache/idb-sync-cache-key.js.map +1 -0
  6. package/dist/browser/cache/idb-sync-cache.d.ts +3 -3
  7. package/dist/browser/cache/idb-sync-cache.d.ts.map +1 -1
  8. package/dist/browser/cache/idb-sync-cache.js +49 -26
  9. package/dist/browser/cache/idb-sync-cache.js.map +1 -1
  10. package/dist/browser/session-sync/session-cache-ownership.d.ts +36 -0
  11. package/dist/browser/session-sync/session-cache-ownership.d.ts.map +1 -0
  12. package/dist/browser/session-sync/session-cache-ownership.js +66 -0
  13. package/dist/browser/session-sync/session-cache-ownership.js.map +1 -0
  14. package/dist/browser/session-sync/session-sync-registry.d.ts +9 -4
  15. package/dist/browser/session-sync/session-sync-registry.d.ts.map +1 -1
  16. package/dist/browser/session-sync/session-sync-registry.js +111 -29
  17. package/dist/browser/session-sync/session-sync-registry.js.map +1 -1
  18. package/dist/browser/session-sync/session-transcript-cache.d.ts +55 -0
  19. package/dist/browser/session-sync/session-transcript-cache.d.ts.map +1 -0
  20. package/dist/browser/session-sync/session-transcript-cache.js +69 -0
  21. package/dist/browser/session-sync/session-transcript-cache.js.map +1 -0
  22. package/dist/core/client/kortix.d.ts +198 -24
  23. package/dist/core/client/kortix.d.ts.map +1 -1
  24. package/dist/core/client/kortix.js +112 -20
  25. package/dist/core/client/kortix.js.map +1 -1
  26. package/dist/core/http/api-client.d.ts.map +1 -1
  27. package/dist/core/http/api-client.js +48 -68
  28. package/dist/core/http/api-client.js.map +1 -1
  29. package/dist/core/rest/platform-client/host-boundary.d.ts +121 -0
  30. package/dist/core/rest/platform-client/host-boundary.d.ts.map +1 -0
  31. package/dist/core/rest/platform-client/host-boundary.js +243 -0
  32. package/dist/core/rest/platform-client/host-boundary.js.map +1 -0
  33. package/dist/core/rest/platform-client/index.d.ts +1 -0
  34. package/dist/core/rest/platform-client/index.d.ts.map +1 -1
  35. package/dist/core/rest/platform-client/index.js +1 -0
  36. package/dist/core/rest/platform-client/index.js.map +1 -1
  37. package/dist/core/rest/projects-client/access.d.ts +1 -2
  38. package/dist/core/rest/projects-client/access.d.ts.map +1 -1
  39. package/dist/core/rest/projects-client/access.js +9 -6
  40. package/dist/core/rest/projects-client/access.js.map +1 -1
  41. package/dist/core/rest/projects-client/account-lifecycle.d.ts +22 -0
  42. package/dist/core/rest/projects-client/account-lifecycle.d.ts.map +1 -0
  43. package/dist/core/rest/projects-client/account-lifecycle.js +26 -0
  44. package/dist/core/rest/projects-client/account-lifecycle.js.map +1 -0
  45. package/dist/core/rest/projects-client/admin-providers.d.ts +10 -0
  46. package/dist/core/rest/projects-client/admin-providers.d.ts.map +1 -0
  47. package/dist/core/rest/projects-client/admin-providers.js +34 -0
  48. package/dist/core/rest/projects-client/admin-providers.js.map +1 -0
  49. package/dist/core/rest/projects-client/agent-config.d.ts +17 -2
  50. package/dist/core/rest/projects-client/agent-config.d.ts.map +1 -1
  51. package/dist/core/rest/projects-client/agent-config.js +43 -2
  52. package/dist/core/rest/projects-client/agent-config.js.map +1 -1
  53. package/dist/core/rest/projects-client/agent-scope.d.ts +4 -0
  54. package/dist/core/rest/projects-client/agent-scope.d.ts.map +1 -1
  55. package/dist/core/rest/projects-client/agent-scope.js +34 -1
  56. package/dist/core/rest/projects-client/agent-scope.js.map +1 -1
  57. package/dist/core/rest/projects-client/audit.d.ts +34 -0
  58. package/dist/core/rest/projects-client/audit.d.ts.map +1 -1
  59. package/dist/core/rest/projects-client/audit.js +49 -4
  60. package/dist/core/rest/projects-client/audit.js.map +1 -1
  61. package/dist/core/rest/projects-client/billing.d.ts +101 -0
  62. package/dist/core/rest/projects-client/billing.d.ts.map +1 -1
  63. package/dist/core/rest/projects-client/billing.js +42 -0
  64. package/dist/core/rest/projects-client/billing.js.map +1 -1
  65. package/dist/core/rest/projects-client/channels.d.ts +8 -27
  66. package/dist/core/rest/projects-client/channels.d.ts.map +1 -1
  67. package/dist/core/rest/projects-client/channels.js +12 -23
  68. package/dist/core/rest/projects-client/channels.js.map +1 -1
  69. package/dist/core/rest/projects-client/connectors.d.ts +234 -24
  70. package/dist/core/rest/projects-client/connectors.d.ts.map +1 -1
  71. package/dist/core/rest/projects-client/connectors.js +114 -15
  72. package/dist/core/rest/projects-client/connectors.js.map +1 -1
  73. package/dist/core/rest/projects-client/gateway.d.ts +1 -0
  74. package/dist/core/rest/projects-client/gateway.d.ts.map +1 -1
  75. package/dist/core/rest/projects-client/gateway.js.map +1 -1
  76. package/dist/core/rest/projects-client/iam.d.ts +509 -0
  77. package/dist/core/rest/projects-client/iam.d.ts.map +1 -0
  78. package/dist/core/rest/projects-client/iam.js +301 -0
  79. package/dist/core/rest/projects-client/iam.js.map +1 -0
  80. package/dist/core/rest/projects-client/index.d.ts +7 -0
  81. package/dist/core/rest/projects-client/index.d.ts.map +1 -1
  82. package/dist/core/rest/projects-client/index.js +7 -0
  83. package/dist/core/rest/projects-client/index.js.map +1 -1
  84. package/dist/core/rest/projects-client/marketplace-catalog.d.ts +9 -2
  85. package/dist/core/rest/projects-client/marketplace-catalog.d.ts.map +1 -1
  86. package/dist/core/rest/projects-client/marketplace-catalog.js +7 -0
  87. package/dist/core/rest/projects-client/marketplace-catalog.js.map +1 -1
  88. package/dist/core/rest/projects-client/policies.d.ts +18 -0
  89. package/dist/core/rest/projects-client/policies.d.ts.map +1 -1
  90. package/dist/core/rest/projects-client/policies.js.map +1 -1
  91. package/dist/core/rest/projects-client/presentations.d.ts +12 -0
  92. package/dist/core/rest/projects-client/presentations.d.ts.map +1 -0
  93. package/dist/core/rest/projects-client/presentations.js +9 -0
  94. package/dist/core/rest/projects-client/presentations.js.map +1 -0
  95. package/dist/core/rest/projects-client/projects.d.ts +62 -10
  96. package/dist/core/rest/projects-client/projects.d.ts.map +1 -1
  97. package/dist/core/rest/projects-client/projects.js +14 -7
  98. package/dist/core/rest/projects-client/projects.js.map +1 -1
  99. package/dist/core/rest/projects-client/public-voice-join.d.ts +59 -0
  100. package/dist/core/rest/projects-client/public-voice-join.d.ts.map +1 -0
  101. package/dist/core/rest/projects-client/public-voice-join.js +64 -0
  102. package/dist/core/rest/projects-client/public-voice-join.js.map +1 -0
  103. package/dist/core/rest/projects-client/referrals.d.ts +53 -0
  104. package/dist/core/rest/projects-client/referrals.d.ts.map +1 -0
  105. package/dist/core/rest/projects-client/referrals.js +27 -0
  106. package/dist/core/rest/projects-client/referrals.js.map +1 -0
  107. package/dist/core/rest/projects-client/sandbox.d.ts +50 -0
  108. package/dist/core/rest/projects-client/sandbox.d.ts.map +1 -1
  109. package/dist/core/rest/projects-client/sandbox.js.map +1 -1
  110. package/dist/core/rest/projects-client/session-costs.d.ts +102 -0
  111. package/dist/core/rest/projects-client/session-costs.d.ts.map +1 -0
  112. package/dist/core/rest/projects-client/session-costs.js +25 -0
  113. package/dist/core/rest/projects-client/session-costs.js.map +1 -0
  114. package/dist/core/rest/projects-client/session-sandbox.d.ts.map +1 -1
  115. package/dist/core/rest/projects-client/session-sandbox.js +1 -0
  116. package/dist/core/rest/projects-client/session-sandbox.js.map +1 -1
  117. package/dist/core/rest/projects-client/sessions.d.ts +143 -18
  118. package/dist/core/rest/projects-client/sessions.d.ts.map +1 -1
  119. package/dist/core/rest/projects-client/sessions.js +43 -1
  120. package/dist/core/rest/projects-client/sessions.js.map +1 -1
  121. package/dist/core/rest/projects-client/setup-links.d.ts +37 -0
  122. package/dist/core/rest/projects-client/setup-links.d.ts.map +1 -1
  123. package/dist/core/rest/projects-client/setup-links.js +11 -0
  124. package/dist/core/rest/projects-client/setup-links.js.map +1 -1
  125. package/dist/core/session/index.d.ts +2 -0
  126. package/dist/core/session/index.d.ts.map +1 -1
  127. package/dist/core/session/index.js +2 -0
  128. package/dist/core/session/index.js.map +1 -1
  129. package/dist/core/session/presentation.d.ts +12 -0
  130. package/dist/core/session/presentation.d.ts.map +1 -0
  131. package/dist/core/session/presentation.js +70 -0
  132. package/dist/core/session/presentation.js.map +1 -0
  133. package/dist/core/session/preview-auth.d.ts +32 -0
  134. package/dist/core/session/preview-auth.d.ts.map +1 -0
  135. package/dist/core/session/preview-auth.js +53 -0
  136. package/dist/core/session/preview-auth.js.map +1 -0
  137. package/dist/core/session/rewind.d.ts +18 -0
  138. package/dist/core/session/rewind.d.ts.map +1 -0
  139. package/dist/core/session/rewind.js +17 -0
  140. package/dist/core/session/rewind.js.map +1 -0
  141. package/dist/core/session/server-store/url-helpers.d.ts.map +1 -1
  142. package/dist/core/session/server-store/url-helpers.js +5 -3
  143. package/dist/core/session/server-store/url-helpers.js.map +1 -1
  144. package/dist/core/session/url.d.ts +43 -0
  145. package/dist/core/session/url.d.ts.map +1 -1
  146. package/dist/core/session/url.js +81 -0
  147. package/dist/core/session/url.js.map +1 -1
  148. package/dist/core/session-sync/session-sync-controller.d.ts +40 -1
  149. package/dist/core/session-sync/session-sync-controller.d.ts.map +1 -1
  150. package/dist/core/session-sync/session-sync-controller.js +161 -6
  151. package/dist/core/session-sync/session-sync-controller.js.map +1 -1
  152. package/dist/core/stream/fetch-sse.d.ts +23 -0
  153. package/dist/core/stream/fetch-sse.d.ts.map +1 -0
  154. package/dist/core/stream/fetch-sse.js +119 -0
  155. package/dist/core/stream/fetch-sse.js.map +1 -0
  156. package/dist/core/turns/state.d.ts.map +1 -1
  157. package/dist/core/turns/state.js +11 -4
  158. package/dist/core/turns/state.js.map +1 -1
  159. package/dist/core/turns/types.d.ts +6 -0
  160. package/dist/core/turns/types.d.ts.map +1 -1
  161. package/dist/index.d.ts +6 -2
  162. package/dist/index.d.ts.map +1 -1
  163. package/dist/index.js +5 -1
  164. package/dist/index.js.map +1 -1
  165. package/dist/kortix.esm.min.js +19 -16
  166. package/dist/kortix.global.js +19 -16
  167. package/dist/node/server.d.ts +14 -0
  168. package/dist/node/server.d.ts.map +1 -1
  169. package/dist/node/server.js +42 -0
  170. package/dist/node/server.js.map +1 -1
  171. package/dist/react/agent-selection-scope.d.ts +8 -0
  172. package/dist/react/agent-selection-scope.d.ts.map +1 -0
  173. package/dist/react/agent-selection-scope.js +4 -0
  174. package/dist/react/agent-selection-scope.js.map +1 -0
  175. package/dist/react/index.d.ts +12 -0
  176. package/dist/react/index.d.ts.map +1 -1
  177. package/dist/react/index.js +12 -0
  178. package/dist/react/index.js.map +1 -1
  179. package/dist/react/initial-session-pin.d.ts +8 -0
  180. package/dist/react/initial-session-pin.d.ts.map +1 -0
  181. package/dist/react/initial-session-pin.js +4 -0
  182. package/dist/react/initial-session-pin.js.map +1 -0
  183. package/dist/react/model-flatten.d.ts +8 -0
  184. package/dist/react/model-flatten.d.ts.map +1 -1
  185. package/dist/react/model-flatten.js +1 -0
  186. package/dist/react/model-flatten.js.map +1 -1
  187. package/dist/react/opencode.d.ts +25 -2
  188. package/dist/react/opencode.d.ts.map +1 -1
  189. package/dist/react/opencode.js +24 -1
  190. package/dist/react/opencode.js.map +1 -1
  191. package/dist/react/provider-selection.d.ts +1 -0
  192. package/dist/react/provider-selection.d.ts.map +1 -1
  193. package/dist/react/provider-selection.js +22 -0
  194. package/dist/react/provider-selection.js.map +1 -1
  195. package/dist/react/run-pty-command.d.ts +5 -0
  196. package/dist/react/run-pty-command.d.ts.map +1 -0
  197. package/dist/react/run-pty-command.js +42 -0
  198. package/dist/react/run-pty-command.js.map +1 -0
  199. package/dist/react/runtime-actions.d.ts +51 -0
  200. package/dist/react/runtime-actions.d.ts.map +1 -0
  201. package/dist/react/runtime-actions.js +105 -0
  202. package/dist/react/runtime-actions.js.map +1 -0
  203. package/dist/react/session-agent-name-guard.d.ts +16 -0
  204. package/dist/react/session-agent-name-guard.d.ts.map +1 -0
  205. package/dist/react/session-agent-name-guard.js +22 -0
  206. package/dist/react/session-agent-name-guard.js.map +1 -0
  207. package/dist/react/session-title-sync.d.ts +23 -0
  208. package/dist/react/session-title-sync.d.ts.map +1 -0
  209. package/dist/react/session-title-sync.js +85 -0
  210. package/dist/react/session-title-sync.js.map +1 -0
  211. package/dist/react/use-admin-accounts.d.ts +122 -0
  212. package/dist/react/use-admin-accounts.d.ts.map +1 -0
  213. package/dist/react/use-admin-accounts.js +146 -0
  214. package/dist/react/use-admin-accounts.js.map +1 -0
  215. package/dist/react/use-admin-analytics.d.ts +332 -0
  216. package/dist/react/use-admin-analytics.d.ts.map +1 -0
  217. package/dist/react/use-admin-analytics.js +518 -0
  218. package/dist/react/use-admin-analytics.js.map +1 -0
  219. package/dist/react/use-admin-billing.d.ts +27 -0
  220. package/dist/react/use-admin-billing.d.ts.map +1 -0
  221. package/dist/react/use-admin-billing.js +61 -0
  222. package/dist/react/use-admin-billing.js.map +1 -0
  223. package/dist/react/use-admin-feedback.d.ts +119 -0
  224. package/dist/react/use-admin-feedback.d.ts.map +1 -0
  225. package/dist/react/use-admin-feedback.js +148 -0
  226. package/dist/react/use-admin-feedback.js.map +1 -0
  227. package/dist/react/use-admin-sandboxes.d.ts +157 -0
  228. package/dist/react/use-admin-sandboxes.d.ts.map +1 -0
  229. package/dist/react/use-admin-sandboxes.js +145 -0
  230. package/dist/react/use-admin-sandboxes.js.map +1 -0
  231. package/dist/react/use-authenticated-preview-url.d.ts +24 -0
  232. package/dist/react/use-authenticated-preview-url.d.ts.map +1 -0
  233. package/dist/react/use-authenticated-preview-url.js +137 -0
  234. package/dist/react/use-authenticated-preview-url.js.map +1 -0
  235. package/dist/react/use-canonical-opencode-session.d.ts +4 -0
  236. package/dist/react/use-canonical-opencode-session.d.ts.map +1 -1
  237. package/dist/react/use-canonical-opencode-session.js +9 -4
  238. package/dist/react/use-canonical-opencode-session.js.map +1 -1
  239. package/dist/react/use-model-defaults.d.ts +22 -0
  240. package/dist/react/use-model-defaults.d.ts.map +1 -0
  241. package/dist/react/use-model-defaults.js +104 -0
  242. package/dist/react/use-model-defaults.js.map +1 -0
  243. package/dist/react/use-model-store.d.ts +6 -14
  244. package/dist/react/use-model-store.d.ts.map +1 -1
  245. package/dist/react/use-model-store.js +41 -52
  246. package/dist/react/use-model-store.js.map +1 -1
  247. package/dist/react/use-opencode-events/handle-event.d.ts.map +1 -1
  248. package/dist/react/use-opencode-events/handle-event.js +103 -41
  249. package/dist/react/use-opencode-events/handle-event.js.map +1 -1
  250. package/dist/react/use-opencode-events/index.d.ts +3 -1
  251. package/dist/react/use-opencode-events/index.d.ts.map +1 -1
  252. package/dist/react/use-opencode-events/index.js +6 -2
  253. package/dist/react/use-opencode-events/index.js.map +1 -1
  254. package/dist/react/use-opencode-local.d.ts.map +1 -1
  255. package/dist/react/use-opencode-local.js +10 -1
  256. package/dist/react/use-opencode-local.js.map +1 -1
  257. package/dist/react/use-opencode-sessions/agents.d.ts.map +1 -1
  258. package/dist/react/use-opencode-sessions/agents.js +5 -3
  259. package/dist/react/use-opencode-sessions/agents.js.map +1 -1
  260. package/dist/react/use-opencode-sessions/commands.d.ts +7 -2
  261. package/dist/react/use-opencode-sessions/commands.d.ts.map +1 -1
  262. package/dist/react/use-opencode-sessions/commands.js +13 -9
  263. package/dist/react/use-opencode-sessions/commands.js.map +1 -1
  264. package/dist/react/use-opencode-sessions/keys.d.ts +3 -1
  265. package/dist/react/use-opencode-sessions/keys.d.ts.map +1 -1
  266. package/dist/react/use-opencode-sessions/keys.js +2 -0
  267. package/dist/react/use-opencode-sessions/keys.js.map +1 -1
  268. package/dist/react/use-opencode-sessions/provider-load-plan.d.ts +6 -0
  269. package/dist/react/use-opencode-sessions/provider-load-plan.d.ts.map +1 -0
  270. package/dist/react/use-opencode-sessions/provider-load-plan.js +4 -0
  271. package/dist/react/use-opencode-sessions/provider-load-plan.js.map +1 -0
  272. package/dist/react/use-opencode-sessions/providers.d.ts.map +1 -1
  273. package/dist/react/use-opencode-sessions/providers.js +39 -27
  274. package/dist/react/use-opencode-sessions/providers.js.map +1 -1
  275. package/dist/react/use-opencode-sessions/sessions.d.ts +1 -1
  276. package/dist/react/use-opencode-sessions/sessions.d.ts.map +1 -1
  277. package/dist/react/use-opencode-sessions/sessions.js +18 -9
  278. package/dist/react/use-opencode-sessions/sessions.js.map +1 -1
  279. package/dist/react/use-opencode-sessions/shared.d.ts +3 -2
  280. package/dist/react/use-opencode-sessions/shared.d.ts.map +1 -1
  281. package/dist/react/use-opencode-sessions/shared.js +6 -3
  282. package/dist/react/use-opencode-sessions/shared.js.map +1 -1
  283. package/dist/react/use-opencode-sessions/sharing.js +2 -2
  284. package/dist/react/use-opencode-sessions/sharing.js.map +1 -1
  285. package/dist/react/use-ops-overview.d.ts +64 -0
  286. package/dist/react/use-ops-overview.d.ts.map +1 -0
  287. package/dist/react/use-ops-overview.js +16 -0
  288. package/dist/react/use-ops-overview.js.map +1 -0
  289. package/dist/react/use-session-model-selection.d.ts +15 -0
  290. package/dist/react/use-session-model-selection.d.ts.map +1 -0
  291. package/dist/react/use-session-model-selection.js +27 -0
  292. package/dist/react/use-session-model-selection.js.map +1 -0
  293. package/dist/react/use-session-sync.d.ts +13 -1
  294. package/dist/react/use-session-sync.d.ts.map +1 -1
  295. package/dist/react/use-session-sync.js +87 -17
  296. package/dist/react/use-session-sync.js.map +1 -1
  297. package/dist/react/use-session.d.ts +72 -1
  298. package/dist/react/use-session.d.ts.map +1 -1
  299. package/dist/react/use-session.js +222 -32
  300. package/dist/react/use-session.js.map +1 -1
  301. package/dist/react/use-system-status.d.ts +39 -0
  302. package/dist/react/use-system-status.d.ts.map +1 -0
  303. package/dist/react/use-system-status.js +68 -0
  304. package/dist/react/use-system-status.js.map +1 -0
  305. package/dist/react/use-teams-installations.d.ts +36 -0
  306. package/dist/react/use-teams-installations.d.ts.map +1 -0
  307. package/dist/react/use-teams-installations.js +94 -0
  308. package/dist/react/use-teams-installations.js.map +1 -0
  309. package/dist/react/use-tunnel.d.ts +120 -0
  310. package/dist/react/use-tunnel.d.ts.map +1 -0
  311. package/dist/react/use-tunnel.js +268 -0
  312. package/dist/react/use-tunnel.js.map +1 -0
  313. package/package.json +2 -2
@@ -0,0 +1,105 @@
1
+ 'use client';
2
+ import { useQuery } from '@tanstack/react-query';
3
+ import { useMemo } from 'react';
4
+ import { getClient } from '../core/runtime/client.js';
5
+ import { deriveSubdomainOpts, getActiveOpenCodeUrl, } from '../browser/stores/server-store.js';
6
+ import { buildStaticFileHealthPreviewUrl, buildStaticFilePreviewUrl, hasPreviewTarget, } from '../core/session/url.js';
7
+ import { useCurrentRuntime } from './use-current-runtime.js';
8
+ import { opencodeKeys, useOpenCodeRuntimeReady } from './use-opencode-sessions/keys.js';
9
+ function unwrapRuntimeResult(result) {
10
+ if (result.error) {
11
+ const error = result.error;
12
+ throw new Error(error.data?.message || error.message || 'Runtime request failed');
13
+ }
14
+ return result.data;
15
+ }
16
+ export function getRuntimeProjectInfo() {
17
+ return getClient().project.current().then(unwrapRuntimeResult);
18
+ }
19
+ export function getRuntimePathInfo() {
20
+ return getClient().path.get().then(unwrapRuntimeResult);
21
+ }
22
+ export function readRuntimeTextFile(path) {
23
+ return getClient().file.read({ path }).then(unwrapRuntimeResult);
24
+ }
25
+ export function getRuntimeProviderAuthMethods() {
26
+ return getClient().provider.auth().then(unwrapRuntimeResult);
27
+ }
28
+ export function authorizeRuntimeProvider(providerID, method) {
29
+ return getClient().provider.oauth.authorize({ providerID, method }).then(unwrapRuntimeResult);
30
+ }
31
+ export function completeRuntimeProviderOAuth(providerID, method, code) {
32
+ return getClient().provider.oauth.callback({
33
+ providerID,
34
+ method,
35
+ ...(code ? { code } : {}),
36
+ }).then(unwrapRuntimeResult);
37
+ }
38
+ export function setRuntimeProviderApiKey(providerID, key) {
39
+ return getClient().auth.set({
40
+ providerID,
41
+ auth: { type: 'api', key },
42
+ }).then(unwrapRuntimeResult);
43
+ }
44
+ export function getRuntimeConfig() {
45
+ return getClient().global.config.get().then(unwrapRuntimeResult);
46
+ }
47
+ export function updateRuntimeConfig(config) {
48
+ return getClient().global.config.update({ config }).then(unwrapRuntimeResult);
49
+ }
50
+ export async function refreshRuntimeConfiguration() {
51
+ unwrapRuntimeResult(await getClient().global.dispose());
52
+ }
53
+ export function logRuntimeEvent(input) {
54
+ void getClient().app.log(input);
55
+ }
56
+ /** Opaque identity for caches that must reset when the active runtime changes. */
57
+ export function getRuntimeCacheKey() {
58
+ return getActiveOpenCodeUrl();
59
+ }
60
+ export function createActiveSandboxProxyContext() {
61
+ const subdomainOpts = deriveSubdomainOpts();
62
+ return {
63
+ serverUrl: getActiveOpenCodeUrl(),
64
+ subdomainOpts,
65
+ isReady: hasPreviewTarget(subdomainOpts),
66
+ };
67
+ }
68
+ /**
69
+ * Reactive form of `createActiveSandboxProxyContext`.
70
+ *
71
+ * The plain factory reads ambient state once. Anything that *renders* from it
72
+ * must re-read when the runtime binds, because the binding is asynchronous: a
73
+ * transcript paints as soon as messages load, which is routinely before
74
+ * `ensureReady()` resolves the sandbox. A component that memoized the factory's
75
+ * result on mount froze `sandboxId: ''` for its whole life and emitted
76
+ * `/v1/p//3000/` preview links forever after.
77
+ *
78
+ * `version` bumps on every `setCurrentRuntime`, so it is the exact invalidation
79
+ * signal — including the session-switch case, where the id changes but the
80
+ * shape does not.
81
+ */
82
+ export function useActiveSandboxProxyContext() {
83
+ const version = useCurrentRuntime((state) => state.version);
84
+ // eslint-disable-next-line react-hooks/exhaustive-deps -- `version` IS the dep;
85
+ // the factory reads module state that only changes when version bumps.
86
+ return useMemo(() => createActiveSandboxProxyContext(), [version]);
87
+ }
88
+ export function getActiveStaticFilePreviewUrl(path) {
89
+ return buildStaticFilePreviewUrl(path, deriveSubdomainOpts()) ?? '';
90
+ }
91
+ export function getActiveStaticFileHealthUrl() {
92
+ return buildStaticFileHealthPreviewUrl(deriveSubdomainOpts());
93
+ }
94
+ export function useRuntimeProjectInfo(options) {
95
+ const runtimeReady = useOpenCodeRuntimeReady();
96
+ return useQuery({
97
+ queryKey: opencodeKeys.currentProject(),
98
+ queryFn: getRuntimeProjectInfo,
99
+ enabled: runtimeReady && options?.enabled !== false,
100
+ staleTime: Infinity,
101
+ gcTime: 5 * 60_000,
102
+ refetchOnWindowFocus: false,
103
+ });
104
+ }
105
+ //# sourceMappingURL=runtime-actions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-actions.js","sourceRoot":"","sources":["../../src/react/runtime-actions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Idempotency guard for `setSessionAgentName`.
3
+ *
4
+ * `setSessionAgentName` writes to a `useSyncExternalStore`-backed store whose
5
+ * snapshot identity changes on every write (a fresh `sessionAgentName` record).
6
+ * Without a read-then-write guard, any render/effect path that re-fires the
7
+ * setter with the SAME value drives an infinite render loop — React #185
8
+ * ("Maximum update depth exceeded"). See Better Stack pattern
9
+ * `351da94339c2eed61380ce8ef1c9e78c7afed102bc18707ef65c36f3049887eb`, which
10
+ * surfaced as `Object.setSessionAgentName` in the co-worker session page.
11
+ *
12
+ * Returning `false` here (no-op when the value is unchanged) is what breaks
13
+ * the loop: no store mutation → no snapshot change → no re-render → no re-fire.
14
+ */
15
+ export declare function shouldSetSessionAgentName(current: string | undefined, next: string | undefined): boolean;
16
+ //# sourceMappingURL=session-agent-name-guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-agent-name-guard.d.ts","sourceRoot":"","sources":["../../src/react/session-agent-name-guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,IAAI,EAAE,MAAM,GAAG,SAAS,GACvB,OAAO,CAMT"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Idempotency guard for `setSessionAgentName`.
3
+ *
4
+ * `setSessionAgentName` writes to a `useSyncExternalStore`-backed store whose
5
+ * snapshot identity changes on every write (a fresh `sessionAgentName` record).
6
+ * Without a read-then-write guard, any render/effect path that re-fires the
7
+ * setter with the SAME value drives an infinite render loop — React #185
8
+ * ("Maximum update depth exceeded"). See Better Stack pattern
9
+ * `351da94339c2eed61380ce8ef1c9e78c7afed102bc18707ef65c36f3049887eb`, which
10
+ * surfaced as `Object.setSessionAgentName` in the co-worker session page.
11
+ *
12
+ * Returning `false` here (no-op when the value is unchanged) is what breaks
13
+ * the loop: no store mutation → no snapshot change → no re-render → no re-fire.
14
+ */
15
+ export function shouldSetSessionAgentName(current, next) {
16
+ // Normalize so `undefined` (delete) and `''` (falsy → delete) are treated as
17
+ // the same "clear" intent, matching the setter's `if (name) ... else delete`.
18
+ const normalizedNext = next ? next : undefined;
19
+ const normalizedCurrent = current ? current : undefined;
20
+ return normalizedNext !== normalizedCurrent;
21
+ }
22
+ //# sourceMappingURL=session-agent-name-guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-agent-name-guard.js","sourceRoot":"","sources":["../../src/react/session-agent-name-guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,yBAAyB,CACvC,OAA2B,EAC3B,IAAwB;IAExB,6EAA6E;IAC7E,8EAA8E;IAC9E,MAAM,cAAc,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IAC/C,MAAM,iBAAiB,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC;IACxD,OAAO,cAAc,KAAK,iBAAiB,CAAC;AAC9C,CAAC"}
@@ -0,0 +1,23 @@
1
+ import type { QueryClient } from '@tanstack/react-query';
2
+ type SessionTitleQueryClient = Pick<QueryClient, 'getQueryData' | 'refetchQueries'>;
3
+ interface SessionTitleRefreshOptions {
4
+ delaysMs?: number[];
5
+ signal?: AbortSignal;
6
+ sleep?: (delayMs: number, signal?: AbortSignal) => Promise<void>;
7
+ }
8
+ /**
9
+ * Refetch the authoritative Kortix session until its generated title appears.
10
+ *
11
+ * OpenCode generates titles asynchronously. This bounded loop refreshes the
12
+ * authoritative Kortix session without permanent sidebar polling.
13
+ */
14
+ export declare function refreshSessionTitleQueryUntilResolved(queryClient: SessionTitleQueryClient, projectId: string, sessionId: string, options?: SessionTitleRefreshOptions): Promise<boolean>;
15
+ /**
16
+ * Reconcile a server-generated title after the conversation hydrates.
17
+ *
18
+ * This also covers an existing session opened after the original post-send
19
+ * refresh window ended. Empty conversations never poll.
20
+ */
21
+ export declare function reconcileHydratedSessionTitle(queryClient: SessionTitleQueryClient, projectId: string, sessionId: string, userMessageCount: number, options?: SessionTitleRefreshOptions): Promise<boolean>;
22
+ export {};
23
+ //# sourceMappingURL=session-title-sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-title-sync.d.ts","sourceRoot":"","sources":["../../src/react/session-title-sync.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD,KAAK,uBAAuB,GAAG,IAAI,CAAC,WAAW,EAAE,cAAc,GAAG,gBAAgB,CAAC,CAAC;AAEpF,UAAU,0BAA0B;IAClC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAClE;AA8DD;;;;;GAKG;AACH,wBAAsB,qCAAqC,CACzD,WAAW,EAAE,uBAAuB,EACpC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,0BAA+B,GACvC,OAAO,CAAC,OAAO,CAAC,CAYlB;AAED;;;;;GAKG;AACH,wBAAsB,6BAA6B,CACjD,WAAW,EAAE,uBAAuB,EACpC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,MAAM,EACxB,OAAO,GAAE,0BAA+B,GACvC,OAAO,CAAC,OAAO,CAAC,CAIlB"}
@@ -0,0 +1,85 @@
1
+ const DEFAULT_TITLE_REFRESH_DELAYS_MS = [0, 5_000, 5_000, 10_000, 10_000, 15_000, 20_000];
2
+ function readRealTitle(value) {
3
+ const title = typeof value === 'string' ? value.trim() : '';
4
+ if (!title || /^new session\b/i.test(title))
5
+ return null;
6
+ return title;
7
+ }
8
+ function cachedSessionHasTitle(queryClient, projectId, sessionId) {
9
+ const list = queryClient.getQueryData(['project-sessions', projectId]);
10
+ const detail = queryClient.getQueryData(['project-session', projectId, sessionId]);
11
+ const candidates = [...(Array.isArray(list) ? list : []), detail];
12
+ return candidates.some((candidate) => {
13
+ if (!candidate || typeof candidate !== 'object')
14
+ return false;
15
+ const session = candidate;
16
+ const candidateId = typeof session.session_id === 'string'
17
+ ? session.session_id
18
+ : typeof session.sessionId === 'string'
19
+ ? session.sessionId
20
+ : null;
21
+ if (candidateId !== sessionId)
22
+ return false;
23
+ return Boolean(readRealTitle(session.custom_name) || readRealTitle(session.name));
24
+ });
25
+ }
26
+ function refetchSessionTitleQueries(queryClient, projectId, sessionId) {
27
+ return Promise.all([
28
+ queryClient.refetchQueries({
29
+ queryKey: ['project-sessions', projectId],
30
+ type: 'active',
31
+ }),
32
+ queryClient.refetchQueries({
33
+ queryKey: ['project-session', projectId, sessionId],
34
+ type: 'active',
35
+ }),
36
+ ]);
37
+ }
38
+ function sleep(delayMs, signal) {
39
+ if (delayMs <= 0 || signal?.aborted)
40
+ return Promise.resolve();
41
+ return new Promise((resolve) => {
42
+ const finish = () => {
43
+ clearTimeout(timer);
44
+ signal?.removeEventListener('abort', finish);
45
+ resolve();
46
+ };
47
+ const timer = setTimeout(finish, delayMs);
48
+ signal?.addEventListener('abort', finish, { once: true });
49
+ });
50
+ }
51
+ /**
52
+ * Refetch the authoritative Kortix session until its generated title appears.
53
+ *
54
+ * OpenCode generates titles asynchronously. This bounded loop refreshes the
55
+ * authoritative Kortix session without permanent sidebar polling.
56
+ */
57
+ export async function refreshSessionTitleQueryUntilResolved(queryClient, projectId, sessionId, options = {}) {
58
+ const delays = options.delaysMs ?? DEFAULT_TITLE_REFRESH_DELAYS_MS;
59
+ const wait = options.sleep ?? sleep;
60
+ for (const delayMs of delays) {
61
+ await wait(delayMs, options.signal);
62
+ if (options.signal?.aborted)
63
+ return false;
64
+ if (cachedSessionHasTitle(queryClient, projectId, sessionId))
65
+ return true;
66
+ await refetchSessionTitleQueries(queryClient, projectId, sessionId);
67
+ if (cachedSessionHasTitle(queryClient, projectId, sessionId))
68
+ return true;
69
+ }
70
+ return false;
71
+ }
72
+ /**
73
+ * Reconcile a server-generated title after the conversation hydrates.
74
+ *
75
+ * This also covers an existing session opened after the original post-send
76
+ * refresh window ended. Empty conversations never poll.
77
+ */
78
+ export async function reconcileHydratedSessionTitle(queryClient, projectId, sessionId, userMessageCount, options = {}) {
79
+ if (userMessageCount <= 0)
80
+ return false;
81
+ if (cachedSessionHasTitle(queryClient, projectId, sessionId))
82
+ return true;
83
+ return refreshSessionTitleQueryUntilResolved(queryClient, projectId, sessionId, options);
84
+ }
85
+ //# sourceMappingURL=session-title-sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-title-sync.js","sourceRoot":"","sources":["../../src/react/session-title-sync.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,122 @@
1
+ export interface AdminAccount {
2
+ accountId: string;
3
+ name: string | null;
4
+ ownerEmail: string | null;
5
+ memberCount: number;
6
+ balance: string | null;
7
+ expiringCredits: string | null;
8
+ nonExpiringCredits: string | null;
9
+ dailyCreditsBalance: string | null;
10
+ tier: string | null;
11
+ paymentStatus: string | null;
12
+ provider: string | null;
13
+ planType: string | null;
14
+ stripeSubscriptionId: string | null;
15
+ billingCustomerId: string | null;
16
+ billingCustomerEmail: string | null;
17
+ createdAt: string | null;
18
+ }
19
+ export interface AdminAccountsSummary {
20
+ totalCredits: string;
21
+ paidCount: number;
22
+ negativeCount: number;
23
+ pastDueCount: number;
24
+ }
25
+ export interface AdminAccountsResponse {
26
+ accounts: AdminAccount[];
27
+ total: number;
28
+ page: number;
29
+ limit: number;
30
+ summary: AdminAccountsSummary | null;
31
+ error?: string;
32
+ }
33
+ export interface AdminAccountUser {
34
+ user_id: string;
35
+ email: string;
36
+ account_role: string;
37
+ signed_up_at: string | null;
38
+ last_sign_in_at: string | null;
39
+ email_confirmed_at: string | null;
40
+ banned_until: string | null;
41
+ provider: string | null;
42
+ providers: string[] | null;
43
+ }
44
+ export interface AdminAccountSandbox {
45
+ sandboxId: string;
46
+ name: string | null;
47
+ provider: string | null;
48
+ externalId: string | null;
49
+ status: string | null;
50
+ baseUrl: string | null;
51
+ metadata: unknown;
52
+ createdAt: string;
53
+ updatedAt: string;
54
+ lastUsedAt: string | null;
55
+ }
56
+ export type AdminAccountsSortBy = 'balance' | 'members' | 'name' | 'created';
57
+ export type AdminAccountsSortDir = 'asc' | 'desc';
58
+ export interface AdminAccountsFilters {
59
+ search?: string;
60
+ tier?: string[];
61
+ paymentStatus?: string[];
62
+ paidOnly?: boolean;
63
+ hasSubscription?: boolean | null;
64
+ minBalance?: number | null;
65
+ maxBalance?: number | null;
66
+ sortBy?: AdminAccountsSortBy;
67
+ sortDir?: AdminAccountsSortDir;
68
+ page?: number;
69
+ limit?: number;
70
+ }
71
+ export declare function useAdminAccounts(filters?: AdminAccountsFilters): import("@tanstack/react-query").UseQueryResult<NoInfer<AdminAccountsResponse>, Error>;
72
+ export declare function useAdminAccountUsers(accountId: string | null): import("@tanstack/react-query").UseQueryResult<NoInfer<{
73
+ users: AdminAccountUser[];
74
+ }>, Error>;
75
+ export declare function useAdminGrantCredits(): import("@tanstack/react-query").UseMutationResult<unknown, Error, {
76
+ accountId: string;
77
+ amount: number;
78
+ description: string;
79
+ isExpiring: boolean;
80
+ }, unknown>;
81
+ export declare function useAdminDebitCredits(): import("@tanstack/react-query").UseMutationResult<unknown, Error, {
82
+ accountId: string;
83
+ amount: number;
84
+ description: string;
85
+ }, unknown>;
86
+ export declare function useAdminSetTier(): import("@tanstack/react-query").UseMutationResult<unknown, Error, {
87
+ accountId: string;
88
+ tier: string;
89
+ }, unknown>;
90
+ export interface AdminLedgerEntry {
91
+ id: string;
92
+ amount: string;
93
+ balanceAfter: string;
94
+ type: string;
95
+ description: string | null;
96
+ isExpiring: boolean | null;
97
+ createdAt: string | null;
98
+ createdBy: string | null;
99
+ }
100
+ export declare function useAdminAccountLedger(accountId: string | null, limit?: number): import("@tanstack/react-query").UseQueryResult<NoInfer<{
101
+ entries: AdminLedgerEntry[];
102
+ }>, Error>;
103
+ export interface AdminAccountProject {
104
+ projectId: string;
105
+ name: string;
106
+ status: string | null;
107
+ repoUrl: string | null;
108
+ defaultBranch: string | null;
109
+ createdAt: string | null;
110
+ updatedAt: string | null;
111
+ lastOpenedAt: string | null;
112
+ sessionCount: number;
113
+ activeSessionCount: number;
114
+ lastSessionAt: string | null;
115
+ }
116
+ export declare function useAdminAccountProjects(accountId: string | null): import("@tanstack/react-query").UseQueryResult<NoInfer<{
117
+ projects: AdminAccountProject[];
118
+ }>, Error>;
119
+ export declare function useAdminAccountSandboxes(accountId: string | null): import("@tanstack/react-query").UseQueryResult<NoInfer<{
120
+ sandboxes: AdminAccountSandbox[];
121
+ }>, Error>;
122
+ //# sourceMappingURL=use-admin-accounts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-admin-accounts.d.ts","sourceRoot":"","sources":["../../src/react/use-admin-accounts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,146 @@
1
+ import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
2
+ import { backendApi } from '../core/http/api-client.js';
3
+ export function useAdminAccounts(filters = {}) {
4
+ const { search = '', tier = [], paymentStatus = [], paidOnly = false, hasSubscription = null, minBalance = null, maxBalance = null, sortBy = 'created', sortDir = 'desc', page = 1, limit = 50, } = filters;
5
+ return useQuery({
6
+ queryKey: [
7
+ 'admin',
8
+ 'accounts',
9
+ search,
10
+ tier.join(','),
11
+ paymentStatus.join(','),
12
+ paidOnly,
13
+ hasSubscription,
14
+ minBalance,
15
+ maxBalance,
16
+ sortBy,
17
+ sortDir,
18
+ page,
19
+ limit,
20
+ ],
21
+ queryFn: async () => {
22
+ const q = new URLSearchParams();
23
+ if (search)
24
+ q.set('search', search);
25
+ if (tier.length)
26
+ q.set('tier', tier.join(','));
27
+ if (paymentStatus.length)
28
+ q.set('paymentStatus', paymentStatus.join(','));
29
+ if (paidOnly)
30
+ q.set('paid', 'true');
31
+ if (hasSubscription === true)
32
+ q.set('hasSubscription', 'true');
33
+ if (hasSubscription === false)
34
+ q.set('hasSubscription', 'false');
35
+ if (minBalance !== null && Number.isFinite(minBalance))
36
+ q.set('minBalance', String(minBalance));
37
+ if (maxBalance !== null && Number.isFinite(maxBalance))
38
+ q.set('maxBalance', String(maxBalance));
39
+ q.set('sortBy', sortBy);
40
+ q.set('sortDir', sortDir);
41
+ q.set('page', String(page));
42
+ q.set('limit', String(limit));
43
+ const response = await backendApi.get(`/admin/api/accounts?${q.toString()}`);
44
+ if (response.error)
45
+ throw new Error(response.error.message);
46
+ return response.data;
47
+ },
48
+ staleTime: 15_000,
49
+ placeholderData: (prev) => prev,
50
+ });
51
+ }
52
+ export function useAdminAccountUsers(accountId) {
53
+ return useQuery({
54
+ queryKey: ['admin', 'accounts', accountId, 'users'],
55
+ enabled: !!accountId,
56
+ queryFn: async () => {
57
+ const response = await backendApi.get(`/admin/api/accounts/${accountId}/users`);
58
+ if (response.error)
59
+ throw new Error(response.error.message);
60
+ return response.data;
61
+ },
62
+ });
63
+ }
64
+ export function useAdminGrantCredits() {
65
+ const queryClient = useQueryClient();
66
+ return useMutation({
67
+ mutationFn: async ({ accountId, amount, description, isExpiring }) => {
68
+ const response = await backendApi.post(`/admin/api/accounts/${accountId}/credits`, { amount, description, isExpiring });
69
+ if (response.error)
70
+ throw new Error(response.error.message);
71
+ return response.data;
72
+ },
73
+ onSuccess: (_data, { accountId }) => {
74
+ queryClient.invalidateQueries({ queryKey: ['admin', 'accounts'] });
75
+ queryClient.invalidateQueries({ queryKey: ['admin', 'accounts', accountId] });
76
+ },
77
+ });
78
+ }
79
+ export function useAdminDebitCredits() {
80
+ const queryClient = useQueryClient();
81
+ return useMutation({
82
+ mutationFn: async ({ accountId, amount, description }) => {
83
+ const response = await backendApi.post(`/admin/api/accounts/${accountId}/credits/debit`, { amount, description });
84
+ if (response.error)
85
+ throw new Error(response.error.message);
86
+ return response.data;
87
+ },
88
+ onSuccess: (_data, { accountId }) => {
89
+ queryClient.invalidateQueries({ queryKey: ['admin', 'accounts'] });
90
+ queryClient.invalidateQueries({ queryKey: ['admin', 'accounts', accountId] });
91
+ },
92
+ });
93
+ }
94
+ // Set an account's plan tier (e.g. activate Enterprise → unlocks SSO + SCIM).
95
+ export function useAdminSetTier() {
96
+ const queryClient = useQueryClient();
97
+ return useMutation({
98
+ mutationFn: async ({ accountId, tier }) => {
99
+ const response = await backendApi.post(`/admin/api/accounts/${accountId}/tier`, { tier });
100
+ if (response.error)
101
+ throw new Error(response.error.message);
102
+ return response.data;
103
+ },
104
+ onSuccess: (_data, { accountId }) => {
105
+ queryClient.invalidateQueries({ queryKey: ['admin', 'accounts'] });
106
+ queryClient.invalidateQueries({ queryKey: ['admin', 'accounts', accountId] });
107
+ },
108
+ });
109
+ }
110
+ export function useAdminAccountLedger(accountId, limit = 50) {
111
+ return useQuery({
112
+ queryKey: ['admin', 'accounts', accountId, 'ledger', limit],
113
+ enabled: !!accountId,
114
+ queryFn: async () => {
115
+ const response = await backendApi.get(`/admin/api/accounts/${accountId}/ledger?limit=${limit}`);
116
+ if (response.error)
117
+ throw new Error(response.error.message);
118
+ return response.data;
119
+ },
120
+ });
121
+ }
122
+ export function useAdminAccountProjects(accountId) {
123
+ return useQuery({
124
+ queryKey: ['admin', 'accounts', accountId, 'projects'],
125
+ enabled: !!accountId,
126
+ queryFn: async () => {
127
+ const response = await backendApi.get(`/admin/api/accounts/${accountId}/projects`);
128
+ if (response.error)
129
+ throw new Error(response.error.message);
130
+ return response.data;
131
+ },
132
+ });
133
+ }
134
+ export function useAdminAccountSandboxes(accountId) {
135
+ return useQuery({
136
+ queryKey: ['admin', 'accounts', accountId, 'sandboxes'],
137
+ enabled: !!accountId,
138
+ queryFn: async () => {
139
+ const response = await backendApi.get(`/admin/api/accounts/${accountId}/sandboxes`);
140
+ if (response.error)
141
+ throw new Error(response.error.message);
142
+ return response.data;
143
+ },
144
+ });
145
+ }
146
+ //# sourceMappingURL=use-admin-accounts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-admin-accounts.js","sourceRoot":"","sources":["../../src/react/use-admin-accounts.ts"],"names":[],"mappings":"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"}