@scalar/agent-chat 0.9.12 → 0.9.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (235) hide show
  1. package/dist/App.vue.d.ts +5 -3
  2. package/dist/App.vue.d.ts.map +1 -1
  3. package/dist/App.vue.js +7 -0
  4. package/dist/App.vue.js.map +1 -0
  5. package/dist/App.vue.script.js +43 -0
  6. package/dist/App.vue.script.js.map +1 -0
  7. package/dist/Chat.vue.js +7 -0
  8. package/dist/Chat.vue.js.map +1 -0
  9. package/dist/Chat.vue.script.js +48 -0
  10. package/dist/Chat.vue.script.js.map +1 -0
  11. package/dist/_virtual/_plugin-vue_export-helper.js +8 -0
  12. package/dist/api.d.ts +1 -3
  13. package/dist/api.d.ts.map +1 -1
  14. package/dist/api.js +74 -0
  15. package/dist/api.js.map +1 -0
  16. package/dist/client-tools/execute-request.d.ts +1 -1
  17. package/dist/client-tools/execute-request.js +88 -0
  18. package/dist/client-tools/execute-request.js.map +1 -0
  19. package/dist/components/ActionsDropdown.vue.js +9 -0
  20. package/dist/components/ActionsDropdown.vue.js.map +1 -0
  21. package/dist/components/ActionsDropdown.vue.script.js +33 -0
  22. package/dist/components/ActionsDropdown.vue.script.js.map +1 -0
  23. package/dist/components/ApprovalSection.vue.js +9 -0
  24. package/dist/components/ApprovalSection.vue.js.map +1 -0
  25. package/dist/components/ApprovalSection.vue.script.js +26 -0
  26. package/dist/components/ApprovalSection.vue.script.js.map +1 -0
  27. package/dist/components/AuthenticationProvided.vue.js +13 -0
  28. package/dist/components/AuthenticationProvided.vue.js.map +1 -0
  29. package/dist/components/AuthenticationRequired.vue.js +13 -0
  30. package/dist/components/AuthenticationRequired.vue.js.map +1 -0
  31. package/dist/components/AutosendPaused.vue.js +13 -0
  32. package/dist/components/AutosendPaused.vue.js.map +1 -0
  33. package/dist/components/BuildingRequest.vue.js +19 -0
  34. package/dist/components/BuildingRequest.vue.js.map +1 -0
  35. package/dist/components/ContextItem.vue.js +9 -0
  36. package/dist/components/ContextItem.vue.js.map +1 -0
  37. package/dist/components/ContextItem.vue.script.js +13 -0
  38. package/dist/components/ContextItem.vue.script.js.map +1 -0
  39. package/dist/components/ErrorMessage.vue.d.ts +1 -1
  40. package/dist/components/ErrorMessage.vue.js +9 -0
  41. package/dist/components/ErrorMessage.vue.js.map +1 -0
  42. package/dist/components/ErrorMessage.vue.script.js +22 -0
  43. package/dist/components/ErrorMessage.vue.script.js.map +1 -0
  44. package/dist/components/FreeMessagesInfoSection.vue.js +9 -0
  45. package/dist/components/FreeMessagesInfoSection.vue.js.map +1 -0
  46. package/dist/components/FreeMessagesInfoSection.vue.script.js +43 -0
  47. package/dist/components/FreeMessagesInfoSection.vue.script.js.map +1 -0
  48. package/dist/components/LoadingMiniOpenAPIDoc.vue.js +13 -0
  49. package/dist/components/LoadingMiniOpenAPIDoc.vue.js.map +1 -0
  50. package/dist/components/LoadingOpenAPISpecsSummary.vue.js +13 -0
  51. package/dist/components/LoadingOpenAPISpecsSummary.vue.js.map +1 -0
  52. package/dist/components/Logo.vue.js +23 -0
  53. package/dist/components/Logo.vue.js.map +1 -0
  54. package/dist/components/PaymentSection.vue.js +9 -0
  55. package/dist/components/PaymentSection.vue.js.map +1 -0
  56. package/dist/components/PaymentSection.vue.script.js +22 -0
  57. package/dist/components/PaymentSection.vue.script.js.map +1 -0
  58. package/dist/components/RequestApproved.vue.js +13 -0
  59. package/dist/components/RequestApproved.vue.js.map +1 -0
  60. package/dist/components/RequestFailed.vue.js +19 -0
  61. package/dist/components/RequestFailed.vue.js.map +1 -0
  62. package/dist/components/RequestPreview.vue.d.ts +1 -1
  63. package/dist/components/RequestPreview.vue.js +9 -0
  64. package/dist/components/RequestPreview.vue.js.map +1 -0
  65. package/dist/components/RequestPreview.vue.script.js +96 -0
  66. package/dist/components/RequestPreview.vue.script.js.map +1 -0
  67. package/dist/components/RequestRejected.vue.js +19 -0
  68. package/dist/components/RequestRejected.vue.js.map +1 -0
  69. package/dist/components/RequestSuccess.vue.js +13 -0
  70. package/dist/components/RequestSuccess.vue.js.map +1 -0
  71. package/dist/components/ResponseBody/ResponseBody.vue.d.ts +1 -1
  72. package/dist/components/ResponseBody/ResponseBody.vue.js +7 -0
  73. package/dist/components/ResponseBody/ResponseBody.vue.js.map +1 -0
  74. package/dist/components/ResponseBody/ResponseBody.vue.script.js +43 -0
  75. package/dist/components/ResponseBody/ResponseBody.vue.script.js.map +1 -0
  76. package/dist/components/ResponseBody/ResponseBodyInfo.vue.js +12 -0
  77. package/dist/components/ResponseBody/ResponseBodyInfo.vue.js.map +1 -0
  78. package/dist/components/ResponseBody/ResponseBodyPreview.vue.d.ts +1 -1
  79. package/dist/components/ResponseBody/ResponseBodyPreview.vue.js +9 -0
  80. package/dist/components/ResponseBody/ResponseBodyPreview.vue.js.map +1 -0
  81. package/dist/components/ResponseBody/ResponseBodyPreview.vue.script.js +59 -0
  82. package/dist/components/ResponseBody/ResponseBodyPreview.vue.script.js.map +1 -0
  83. package/dist/components/ResponseBody/ResponseBodyRaw.vue.js +7 -0
  84. package/dist/components/ResponseBody/ResponseBodyRaw.vue.js.map +1 -0
  85. package/dist/components/ResponseBody/ResponseBodyRaw.vue.script.js +22 -0
  86. package/dist/components/ResponseBody/ResponseBodyRaw.vue.script.js.map +1 -0
  87. package/dist/components/ResponseBody/ResponseBodyToggle.vue.js +7 -0
  88. package/dist/components/ResponseBody/ResponseBodyToggle.vue.js.map +1 -0
  89. package/dist/components/ResponseBody/ResponseBodyToggle.vue.script.js +23 -0
  90. package/dist/components/ResponseBody/ResponseBodyToggle.vue.script.js.map +1 -0
  91. package/dist/components/ResponseBody/helpers/media-types.js +223 -0
  92. package/dist/components/ResponseBody/helpers/media-types.js.map +1 -0
  93. package/dist/components/ResponseBody/helpers/process-response-body.js +33 -0
  94. package/dist/components/ResponseBody/helpers/process-response-body.js.map +1 -0
  95. package/dist/components/SearchPopover.vue.js +9 -0
  96. package/dist/components/SearchPopover.vue.js.map +1 -0
  97. package/dist/components/SearchPopover.vue.script.js +53 -0
  98. package/dist/components/SearchPopover.vue.script.js.map +1 -0
  99. package/dist/components/Selector.vue.js +7 -0
  100. package/dist/components/Selector.vue.js.map +1 -0
  101. package/dist/components/Selector.vue.script.js +62 -0
  102. package/dist/components/Selector.vue.script.js.map +1 -0
  103. package/dist/components/SendingRequest.vue.js +19 -0
  104. package/dist/components/SendingRequest.vue.js.map +1 -0
  105. package/dist/components/ServerSelector.vue.js +7 -0
  106. package/dist/components/ServerSelector.vue.js.map +1 -0
  107. package/dist/components/ServerSelector.vue.script.js +60 -0
  108. package/dist/components/ServerSelector.vue.script.js.map +1 -0
  109. package/dist/components/UploadSection.vue.d.ts +1 -1
  110. package/dist/components/UploadSection.vue.js +9 -0
  111. package/dist/components/UploadSection.vue.js.map +1 -0
  112. package/dist/components/UploadSection.vue.script.js +52 -0
  113. package/dist/components/UploadSection.vue.script.js.map +1 -0
  114. package/dist/consts/urls.js +12 -0
  115. package/dist/consts/urls.js.map +1 -0
  116. package/dist/entities/error/constants.js +6 -0
  117. package/dist/entities/error/constants.js.map +1 -0
  118. package/dist/entities/error/helpers.d.ts +1 -1
  119. package/dist/entities/error/helpers.js +11 -0
  120. package/dist/entities/error/helpers.js.map +1 -0
  121. package/dist/entities/index.d.ts +9 -9
  122. package/dist/entities/index.js +10 -2
  123. package/dist/entities/prompt/constants.js +6 -0
  124. package/dist/entities/prompt/constants.js.map +1 -0
  125. package/dist/entities/registry/document.js +14 -0
  126. package/dist/entities/registry/document.js.map +1 -0
  127. package/dist/entities/tools/ask-for-authentication.js +7 -0
  128. package/dist/entities/tools/ask-for-authentication.js.map +1 -0
  129. package/dist/entities/tools/constants.js +6 -0
  130. package/dist/entities/tools/constants.js.map +1 -0
  131. package/dist/entities/tools/execute-request.d.ts +1 -1
  132. package/dist/entities/tools/execute-request.js +13 -0
  133. package/dist/entities/tools/execute-request.js.map +1 -0
  134. package/dist/entities/tools/get-mini-openapi-spec.js +7 -0
  135. package/dist/entities/tools/get-mini-openapi-spec.js.map +1 -0
  136. package/dist/entities/tools/get-openapi-spec-summary.js +6 -0
  137. package/dist/entities/tools/get-openapi-spec-summary.js.map +1 -0
  138. package/dist/helpers.js +42 -0
  139. package/dist/helpers.js.map +1 -0
  140. package/dist/hooks/use-agent-key-documents.js +24 -0
  141. package/dist/hooks/use-agent-key-documents.js.map +1 -0
  142. package/dist/hooks/use-chat-approvals.d.ts +1 -1
  143. package/dist/hooks/use-chat-approvals.js +38 -0
  144. package/dist/hooks/use-chat-approvals.js.map +1 -0
  145. package/dist/hooks/use-chat-error.js +25 -0
  146. package/dist/hooks/use-chat-error.js.map +1 -0
  147. package/dist/hooks/use-chat-pending-client-tool-parts.js +14 -0
  148. package/dist/hooks/use-chat-pending-client-tool-parts.js.map +1 -0
  149. package/dist/hooks/use-chat-scroll.js +17 -0
  150. package/dist/hooks/use-chat-scroll.js.map +1 -0
  151. package/dist/hooks/use-curated-documents.js +14 -0
  152. package/dist/hooks/use-curated-documents.js.map +1 -0
  153. package/dist/hooks/use-search.d.ts +1 -1
  154. package/dist/hooks/use-search.js +23 -0
  155. package/dist/hooks/use-search.js.map +1 -0
  156. package/dist/hooks/use-signup-link.js +17 -0
  157. package/dist/hooks/use-signup-link.js.map +1 -0
  158. package/dist/hooks/use-term-and-conditions.js +20 -0
  159. package/dist/hooks/use-term-and-conditions.js.map +1 -0
  160. package/dist/hooks/use-upload-tmp-document.js +92 -0
  161. package/dist/hooks/use-upload-tmp-document.js.map +1 -0
  162. package/dist/index.d.ts +2 -2
  163. package/dist/index.js +2 -2065
  164. package/dist/package.json +1 -1
  165. package/dist/plugins/persistance.js +16 -0
  166. package/dist/plugins/persistance.js.map +1 -0
  167. package/dist/registry/add-documents-to-store.d.ts +2 -2
  168. package/dist/registry/add-documents-to-store.js +36 -0
  169. package/dist/registry/add-documents-to-store.js.map +1 -0
  170. package/dist/registry/create-document-name.js +8 -0
  171. package/dist/registry/create-document-name.js.map +1 -0
  172. package/dist/state/state.d.ts +9 -7
  173. package/dist/state/state.d.ts.map +1 -1
  174. package/dist/state/state.js +153 -0
  175. package/dist/state/state.js.map +1 -0
  176. package/dist/views/Catalog/Catalog.vue.js +10 -0
  177. package/dist/views/Catalog/Catalog.vue.js.map +1 -0
  178. package/dist/views/Catalog/Catalog.vue.script.js +50 -0
  179. package/dist/views/Catalog/Catalog.vue.script.js.map +1 -0
  180. package/dist/views/Chat/Chat.vue.js +9 -0
  181. package/dist/views/Chat/Chat.vue.js.map +1 -0
  182. package/dist/views/Chat/Chat.vue.script.js +55 -0
  183. package/dist/views/Chat/Chat.vue.script.js.map +1 -0
  184. package/dist/views/Chat/Messages/AskForAuthentication.vue.d.ts +2 -2
  185. package/dist/views/Chat/Messages/AskForAuthentication.vue.js +9 -0
  186. package/dist/views/Chat/Messages/AskForAuthentication.vue.js.map +1 -0
  187. package/dist/views/Chat/Messages/AskForAuthentication.vue.script.js +72 -0
  188. package/dist/views/Chat/Messages/AskForAuthentication.vue.script.js.map +1 -0
  189. package/dist/views/Chat/Messages/ExecuteRequestTool.vue.d.ts +2 -2
  190. package/dist/views/Chat/Messages/ExecuteRequestTool.vue.js +9 -0
  191. package/dist/views/Chat/Messages/ExecuteRequestTool.vue.js.map +1 -0
  192. package/dist/views/Chat/Messages/ExecuteRequestTool.vue.script.js +26 -0
  193. package/dist/views/Chat/Messages/ExecuteRequestTool.vue.script.js.map +1 -0
  194. package/dist/views/Chat/Messages/GetMiniOpenAPIDocTool.vue.d.ts +2 -2
  195. package/dist/views/Chat/Messages/GetMiniOpenAPIDocTool.vue.js +9 -0
  196. package/dist/views/Chat/Messages/GetMiniOpenAPIDocTool.vue.js.map +1 -0
  197. package/dist/views/Chat/Messages/GetMiniOpenAPIDocTool.vue.script.js +39 -0
  198. package/dist/views/Chat/Messages/GetMiniOpenAPIDocTool.vue.script.js.map +1 -0
  199. package/dist/views/Chat/Messages/GetOpenAPISpecsSummary.vue.d.ts +2 -2
  200. package/dist/views/Chat/Messages/GetOpenAPISpecsSummary.vue.js +7 -0
  201. package/dist/views/Chat/Messages/GetOpenAPISpecsSummary.vue.js.map +1 -0
  202. package/dist/views/Chat/Messages/GetOpenAPISpecsSummary.vue.script.js +21 -0
  203. package/dist/views/Chat/Messages/GetOpenAPISpecsSummary.vue.script.js.map +1 -0
  204. package/dist/views/Chat/Messages/Text.vue.js +7 -0
  205. package/dist/views/Chat/Messages/Text.vue.js.map +1 -0
  206. package/dist/views/Chat/Messages/Text.vue.script.js +14 -0
  207. package/dist/views/Chat/Messages/Text.vue.script.js.map +1 -0
  208. package/dist/views/Layout.vue.js +9 -0
  209. package/dist/views/Layout.vue.js.map +1 -0
  210. package/dist/views/Layout.vue.script.js +25 -0
  211. package/dist/views/Layout.vue.script.js.map +1 -0
  212. package/dist/views/PromptForm.vue.js +9 -0
  213. package/dist/views/PromptForm.vue.js.map +1 -0
  214. package/dist/views/PromptForm.vue.script.js +202 -0
  215. package/dist/views/PromptForm.vue.script.js.map +1 -0
  216. package/dist/views/Settings/Auth.vue.js +7 -0
  217. package/dist/views/Settings/Auth.vue.js.map +1 -0
  218. package/dist/views/Settings/Auth.vue.script.js +63 -0
  219. package/dist/views/Settings/Auth.vue.script.js.map +1 -0
  220. package/dist/views/Settings/DocSettings.vue.js +9 -0
  221. package/dist/views/Settings/DocSettings.vue.js.map +1 -0
  222. package/dist/views/Settings/DocSettings.vue.script.js +48 -0
  223. package/dist/views/Settings/DocSettings.vue.script.js.map +1 -0
  224. package/dist/views/Settings/Settings.vue.js +10 -0
  225. package/dist/views/Settings/Settings.vue.js.map +1 -0
  226. package/dist/views/Settings/Settings.vue.script.js +59 -0
  227. package/dist/views/Settings/Settings.vue.script.js.map +1 -0
  228. package/dist/views/Start.vue.js +9 -0
  229. package/dist/views/Start.vue.js.map +1 -0
  230. package/dist/views/Start.vue.script.js +41 -0
  231. package/dist/views/Start.vue.script.js.map +1 -0
  232. package/package.json +9 -9
  233. package/dist/entities-NWeuOkBB.js +0 -28
  234. package/dist/entities-NWeuOkBB.js.map +0 -1
  235. package/dist/index.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","names":[],"sources":["../src/helpers.ts"],"sourcesContent":["import { mergeSecurity } from '@scalar/api-client/v2/blocks/scalar-auth-selector-block'\nimport { getSelectedServer } from '@scalar/api-client/v2/features/operation'\nimport { getServers } from '@scalar/api-client/v2/helpers'\nimport { REFERENCE_LS_KEYS, safeLocalStorage } from '@scalar/helpers/object/local-storage'\nimport type { OpenAPIV3_1 } from '@scalar/openapi-types'\nimport type { WorkspaceStore } from '@scalar/workspace-store/client'\nimport type { AuthStore } from '@scalar/workspace-store/entities/auth'\nimport { type Auth, AuthSchema } from '@scalar/workspace-store/entities/auth'\nimport type { WorkspaceDocument } from '@scalar/workspace-store/schemas'\nimport { coerceValue } from '@scalar/workspace-store/schemas/typebox-coerce'\nimport type { OperationObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\n\nexport function getOperations(doc: Partial<OpenAPIV3_1.Document>) {\n return Object.values(doc.paths ?? {}).flatMap((path) => Object.values(path ?? {})) as OperationObject[]\n}\n\n/** Flattens all security requirements from a document */\nfunction getSecurityFromDocument(documentName: string, document: WorkspaceDocument, authStore: AuthStore) {\n return Object.values(mergeSecurity(document?.components?.securitySchemes, {}, authStore, documentName))\n}\n\n/** Generate document settings from workspace store */\nexport function createDocumentSettings(workspaceStore: WorkspaceStore) {\n return Object.fromEntries(\n Object.entries(workspaceStore.workspace.documents).map(([key, document]) => {\n const servers = getServers(document.servers, {\n documentUrl: document?.['x-scalar-original-source-url'],\n })\n\n return [\n key,\n {\n activeServer: getSelectedServer(servers, document['x-scalar-selected-server']),\n securitySchemes: getSecurityFromDocument(key, document, workspaceStore.auth),\n },\n ]\n }),\n )\n}\n\n// Local storage helper instance, safely wrapped.\nconst storage = safeLocalStorage()\n\n/**\n * Provides an interface to store and retrieve authentication scheme\n * information in local storage, including both the available schemes and\n * the user's selected schemes.\n */\nexport const authStorage = () => {\n const getKey = (slug: string) => {\n return `${REFERENCE_LS_KEYS.AUTH}-${slug}`\n }\n\n return {\n /**\n * Retrieves and coerces the authentication schemes stored in local storage.\n */\n getAuth: (slug: string) => {\n const parsed = JSON.parse(storage.getItem(getKey(slug)) ?? '{}')\n return coerceValue(AuthSchema, parsed)\n },\n /**\n * Stores the authentication schemes in local storage.\n * @param value The Auth object to stringify and store.\n */\n setAuth: (slug: string, value: Auth) => {\n storage.setItem(getKey(slug), JSON.stringify(value))\n },\n }\n}\n\n/**\n * Restores authentication secrets from local storage to the workspace store.\n *\n * This function iterates through stored authentication schemes and restores\n * any secret values (keys starting with x-scalar-secret-) to the active\n * document's security schemes. It uses the current security schemes as the\n * source of truth, only restoring secrets for structures that exist in the\n * current document.\n */\nexport const restoreAuthSecretsFromStorage = ({\n documentName,\n workspaceStore,\n}: {\n documentName: string\n workspaceStore: WorkspaceStore\n}): void => {\n const authPersistence = authStorage()\n const auth = authPersistence.getAuth(documentName)\n workspaceStore.auth.load({ [documentName]: auth })\n}\n\nexport function safeParseJson(value: string) {\n try {\n return JSON.parse(value)\n } catch {\n return\n }\n}\n"],"mappings":";;;;;;;AAYA,SAAgB,EAAc,GAAoC;AAChE,QAAO,OAAO,OAAO,EAAI,SAAS,EAAE,CAAC,CAAC,SAAS,MAAS,OAAO,OAAO,KAAQ,EAAE,CAAC,CAAC;;AAIpF,SAAS,EAAwB,GAAsB,GAA6B,GAAsB;AACxG,QAAO,OAAO,OAAO,EAAc,GAAU,YAAY,iBAAiB,EAAE,EAAE,GAAW,EAAa,CAAC;;AAIzG,SAAgB,EAAuB,GAAgC;AACrE,QAAO,OAAO,YACZ,OAAO,QAAQ,EAAe,UAAU,UAAU,CAAC,KAAK,CAAC,GAAK,OAKrD,CACL,GACA;EACE,cAAc,EAPF,EAAW,EAAS,SAAS,EAC3C,aAAa,IAAW,iCACzB,CAAC,EAK2C,EAAS,4BAA4B;EAC9E,iBAAiB,EAAwB,GAAK,GAAU,EAAe,KAAK;EAC7E,CACF,CACD,CACH;;AAIH,IAAM,IAAU,GAAkB,EAOrB,UAAoB;CAC/B,IAAM,KAAU,MACP,GAAG,EAAkB,KAAK,GAAG;AAGtC,QAAO;EAIL,UAAU,MAED,EAAY,GADJ,KAAK,MAAM,EAAQ,QAAQ,EAAO,EAAK,CAAC,IAAI,KAAK,CAC1B;EAMxC,UAAU,GAAc,MAAgB;AACtC,KAAQ,QAAQ,EAAO,EAAK,EAAE,KAAK,UAAU,EAAM,CAAC;;EAEvD;GAYU,KAAiC,EAC5C,iBACA,wBAIU;CAEV,IAAM,IADkB,GAAa,CACR,QAAQ,EAAa;AAClD,GAAe,KAAK,KAAK,GAAG,IAAe,GAAM,CAAC;;AAGpD,SAAgB,EAAc,GAAe;AAC3C,KAAI;AACF,SAAO,KAAK,MAAM,EAAM;SAClB;AACN"}
@@ -0,0 +1,24 @@
1
+ import { useState as e } from "../state/state.js";
2
+ import { onMounted as t } from "vue";
3
+ import { useToasts as n } from "@scalar/use-toasts";
4
+ //#region src/hooks/use-agent-key-documents.ts
5
+ function r() {
6
+ let { api: r, addDocument: i, mode: a, getAgentKey: o } = e(), { toast: s } = n();
7
+ t(async () => {
8
+ if (a !== "full" || !o) return;
9
+ let e = await r.getKeyDocuments();
10
+ if (!e.success) {
11
+ s("Failed to fetch your OpenAPI document. The Agent key may be invalid.", "error");
12
+ return;
13
+ }
14
+ e.data.documents.forEach(({ namespace: e, slug: t }) => i({
15
+ namespace: e,
16
+ slug: t,
17
+ removable: !1
18
+ }));
19
+ });
20
+ }
21
+ //#endregion
22
+ export { r as useAgentKeyDocuments };
23
+
24
+ //# sourceMappingURL=use-agent-key-documents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-agent-key-documents.js","names":[],"sources":["../../src/hooks/use-agent-key-documents.ts"],"sourcesContent":["import { useToasts } from '@scalar/use-toasts'\nimport { onMounted } from 'vue'\n\nimport { useState } from '@/state/state'\n\nexport function useAgentKeyDocuments() {\n const { api, addDocument, mode, getAgentKey } = useState()\n const { toast } = useToasts()\n\n onMounted(async () => {\n if (mode !== 'full' || !getAgentKey) {\n return\n }\n\n const keyDocumentsResult = await api.getKeyDocuments()\n\n if (!keyDocumentsResult.success) {\n toast('Failed to fetch your OpenAPI document. The Agent key may be invalid.', 'error')\n return\n }\n\n keyDocumentsResult.data.documents.forEach(({ namespace, slug }) =>\n addDocument({ namespace, slug, removable: false }),\n )\n })\n}\n"],"mappings":";;;;AAKA,SAAgB,IAAuB;CACrC,IAAM,EAAE,QAAK,gBAAa,SAAM,mBAAgB,GAAU,EACpD,EAAE,aAAU,GAAW;AAE7B,GAAU,YAAY;AACpB,MAAI,MAAS,UAAU,CAAC,EACtB;EAGF,IAAM,IAAqB,MAAM,EAAI,iBAAiB;AAEtD,MAAI,CAAC,EAAmB,SAAS;AAC/B,KAAM,wEAAwE,QAAQ;AACtF;;AAGF,IAAmB,KAAK,UAAU,SAAS,EAAE,cAAW,cACtD,EAAY;GAAE;GAAW;GAAM,WAAW;GAAO,CAAC,CACnD;GACD"}
@@ -1,5 +1,5 @@
1
1
  import type { ToolUIPart, UIMessagePart } from 'ai';
2
- import { type Tools } from '../state/state';
2
+ import { type Tools } from '../state/state.js';
3
3
  type RequestToolPart = ToolUIPart & {
4
4
  type: 'tool-execute-request';
5
5
  state: 'input-available';
@@ -0,0 +1,38 @@
1
+ import { EXECUTE_CLIENT_SIDE_REQUEST_TOOL_NAME as e } from "../entities/tools/execute-request.js";
2
+ import { executeRequestTool as t } from "../client-tools/execute-request.js";
3
+ import { createDocumentSettings as n } from "../helpers.js";
4
+ import { useState as r } from "../state/state.js";
5
+ import { computed as i } from "vue";
6
+ //#region src/hooks/use-chat-approvals.ts
7
+ function a(e) {
8
+ return e.type === "tool-execute-request" && e.state === "input-available" && e.input?.method?.toLowerCase() !== "get";
9
+ }
10
+ function o() {
11
+ let o = r(), s = i(() => o.chat.messages.filter((e) => e.parts.some(a)).flatMap((e) => e.parts).filter(a));
12
+ async function c(r) {
13
+ let i = s.value.map(async (i) => {
14
+ if (!r) return await o.chat.addToolOutput({
15
+ tool: e,
16
+ toolCallId: i.toolCallId,
17
+ state: "output-error",
18
+ errorText: "The user denied the request."
19
+ });
20
+ await t({
21
+ documentSettings: n(o.workspaceStore),
22
+ proxyUrl: o.proxyUrl.value,
23
+ input: i.input,
24
+ toolCallId: i.toolCallId,
25
+ chat: o.chat
26
+ });
27
+ });
28
+ await Promise.all(i);
29
+ }
30
+ return {
31
+ approvalRequiredParts: s,
32
+ respondToRequestApprovals: c
33
+ };
34
+ }
35
+ //#endregion
36
+ export { a as requestPartRequiresApproval, o as useRequestApprovals };
37
+
38
+ //# sourceMappingURL=use-chat-approvals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-chat-approvals.js","names":[],"sources":["../../src/hooks/use-chat-approvals.ts"],"sourcesContent":["import type { ToolUIPart, UIMessagePart } from 'ai'\nimport { computed } from 'vue'\n\nimport { executeRequestTool } from '@/client-tools/execute-request'\nimport { EXECUTE_CLIENT_SIDE_REQUEST_TOOL_NAME } from '@/entities'\nimport { createDocumentSettings } from '@/helpers'\nimport { type Tools, useState } from '@/state/state'\n\ntype RequestToolPart = ToolUIPart & {\n type: 'tool-execute-request'\n state: 'input-available'\n input: Tools['execute-request']['input']\n}\n\nexport function requestPartRequiresApproval(part: UIMessagePart<any, Tools>): part is RequestToolPart {\n return (\n part.type === (`tool-${EXECUTE_CLIENT_SIDE_REQUEST_TOOL_NAME}` as const) &&\n part.state === 'input-available' &&\n part.input?.method?.toLowerCase() !== 'get'\n )\n}\n\nexport function useRequestApprovals() {\n const state = useState()\n\n const approvalRequiredParts = computed(() => {\n return state.chat.messages\n .filter((message) => message.parts.some(requestPartRequiresApproval))\n .flatMap((message) => message.parts)\n .filter(requestPartRequiresApproval) as RequestToolPart[]\n })\n\n async function respondToRequestApprovals(approved: boolean) {\n const approvalPromises = approvalRequiredParts.value.map(async (toolPart) => {\n if (!approved) {\n return await state.chat.addToolOutput({\n tool: EXECUTE_CLIENT_SIDE_REQUEST_TOOL_NAME,\n toolCallId: toolPart.toolCallId,\n state: 'output-error',\n errorText: 'The user denied the request.',\n })\n }\n\n await executeRequestTool({\n documentSettings: createDocumentSettings(state.workspaceStore),\n proxyUrl: state.proxyUrl.value,\n input: toolPart.input,\n toolCallId: toolPart.toolCallId,\n chat: state.chat,\n })\n })\n\n await Promise.all(approvalPromises)\n }\n\n return { approvalRequiredParts, respondToRequestApprovals }\n}\n"],"mappings":";;;;;;AAcA,SAAgB,EAA4B,GAA0D;AACpG,QACE,EAAK,SAAU,0BACf,EAAK,UAAU,qBACf,EAAK,OAAO,QAAQ,aAAa,KAAK;;AAI1C,SAAgB,IAAsB;CACpC,IAAM,IAAQ,GAAU,EAElB,IAAwB,QACrB,EAAM,KAAK,SACf,QAAQ,MAAY,EAAQ,MAAM,KAAK,EAA4B,CAAC,CACpE,SAAS,MAAY,EAAQ,MAAM,CACnC,OAAO,EAA4B,CACtC;CAEF,eAAe,EAA0B,GAAmB;EAC1D,IAAM,IAAmB,EAAsB,MAAM,IAAI,OAAO,MAAa;AAC3E,OAAI,CAAC,EACH,QAAO,MAAM,EAAM,KAAK,cAAc;IACpC,MAAM;IACN,YAAY,EAAS;IACrB,OAAO;IACP,WAAW;IACZ,CAAC;AAGJ,SAAM,EAAmB;IACvB,kBAAkB,EAAuB,EAAM,eAAe;IAC9D,UAAU,EAAM,SAAS;IACzB,OAAO,EAAS;IAChB,YAAY,EAAS;IACrB,MAAM,EAAM;IACb,CAAC;IACF;AAEF,QAAM,QAAQ,IAAI,EAAiB;;AAGrC,QAAO;EAAE;EAAuB;EAA2B"}
@@ -0,0 +1,25 @@
1
+ import { safeParseJson as e } from "../helpers.js";
2
+ import { useState as t } from "../state/state.js";
3
+ import { computed as n } from "vue";
4
+ import { z as r } from "zod/mini";
5
+ //#region src/hooks/use-chat-error.ts
6
+ var i = r.object({
7
+ message: r.string(),
8
+ code: r.string(),
9
+ status: r.optional(r.number())
10
+ });
11
+ function a() {
12
+ let { chat: r } = t();
13
+ return n(() => {
14
+ if (!r.error) return;
15
+ let t = e(r.error.message), n = i.safeParse(t);
16
+ return !t || !n.success ? {
17
+ message: r.error.message,
18
+ code: "UNKNOWN_ERROR"
19
+ } : n.data;
20
+ });
21
+ }
22
+ //#endregion
23
+ export { a as useChatError };
24
+
25
+ //# sourceMappingURL=use-chat-error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-chat-error.js","names":[],"sources":["../../src/hooks/use-chat-error.ts"],"sourcesContent":["import { computed } from 'vue'\nimport { z } from 'zod/mini'\n\nimport { safeParseJson } from '@/helpers'\nimport { useState } from '@/state/state'\n\nconst chatErrorSchema = z.object({\n message: z.string(),\n code: z.string(),\n status: z.optional(z.number()),\n})\nexport type ChatError = z.infer<typeof chatErrorSchema>\n\nexport function useChatError() {\n const { chat } = useState()\n\n return computed(() => {\n if (!chat.error) return\n\n const errorJson = safeParseJson(chat.error.message)\n const parsedError = chatErrorSchema.safeParse(errorJson)\n\n if (!errorJson || !parsedError.success)\n return {\n message: chat.error.message,\n code: 'UNKNOWN_ERROR',\n }\n\n return parsedError.data\n })\n}\n"],"mappings":";;;;;AAMA,IAAM,IAAkB,EAAE,OAAO;CAC/B,SAAS,EAAE,QAAQ;CACnB,MAAM,EAAE,QAAQ;CAChB,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC;CAC/B,CAAC;AAGF,SAAgB,IAAe;CAC7B,IAAM,EAAE,YAAS,GAAU;AAE3B,QAAO,QAAe;AACpB,MAAI,CAAC,EAAK,MAAO;EAEjB,IAAM,IAAY,EAAc,EAAK,MAAM,QAAQ,EAC7C,IAAc,EAAgB,UAAU,EAAU;AAQxD,SANI,CAAC,KAAa,CAAC,EAAY,UACtB;GACL,SAAS,EAAK,MAAM;GACpB,MAAM;GACP,GAEI,EAAY;GACnB"}
@@ -0,0 +1,14 @@
1
+ import { useState as e } from "../state/state.js";
2
+ import { computed as t } from "vue";
3
+ //#region src/hooks/use-chat-pending-client-tool-parts.ts
4
+ function n(e) {
5
+ return e.type.startsWith("tool") && e.state === "input-available";
6
+ }
7
+ function r() {
8
+ let r = e();
9
+ return { pendingClientToolParts: t(() => r.chat.messages.filter((e) => e.parts.some(n)).flatMap((e) => e.parts).filter(n)) };
10
+ }
11
+ //#endregion
12
+ export { r as useChatPendingClientToolParts };
13
+
14
+ //# sourceMappingURL=use-chat-pending-client-tool-parts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-chat-pending-client-tool-parts.js","names":[],"sources":["../../src/hooks/use-chat-pending-client-tool-parts.ts"],"sourcesContent":["import type { ToolUIPart, UIMessagePart, UITools } from 'ai'\nimport { computed } from 'vue'\n\nimport { useState } from '@/state/state'\n\ntype PendingClientToolPart = ToolUIPart & { state: 'input-available' }\n\nfunction isPendingClientToolPart(part: UIMessagePart<any, UITools>): part is PendingClientToolPart {\n return part.type.startsWith('tool') && (part as ToolUIPart).state === 'input-available'\n}\n\nexport function useChatPendingClientToolParts() {\n const state = useState()\n\n const pendingClientToolParts = computed(() => {\n return state.chat.messages\n .filter((message) => message.parts.some(isPendingClientToolPart))\n .flatMap((message) => message.parts)\n .filter(isPendingClientToolPart) as PendingClientToolPart[]\n })\n\n return { pendingClientToolParts }\n}\n"],"mappings":";;;AAOA,SAAS,EAAwB,GAAkE;AACjG,QAAO,EAAK,KAAK,WAAW,OAAO,IAAK,EAAoB,UAAU;;AAGxE,SAAgB,IAAgC;CAC9C,IAAM,IAAQ,GAAU;AASxB,QAAO,EAAE,wBAPsB,QACtB,EAAM,KAAK,SACf,QAAQ,MAAY,EAAQ,MAAM,KAAK,EAAwB,CAAC,CAChE,SAAS,MAAY,EAAQ,MAAM,CACnC,OAAO,EAAwB,CAClC,EAE+B"}
@@ -0,0 +1,17 @@
1
+ import { useState as e } from "../state/state.js";
2
+ import { nextTick as t, watch as n } from "vue";
3
+ //#region src/hooks/use-chat-scroll.ts
4
+ function r() {
5
+ let r = e();
6
+ function i(e) {
7
+ let t = e?.parts.at(-1);
8
+ if (t && t.type === "text") return t.text;
9
+ }
10
+ n([() => r.chat.status, () => i(r.chat.lastMessage)], async () => {
11
+ await t(), window.scrollTo(0, document.body.scrollHeight);
12
+ });
13
+ }
14
+ //#endregion
15
+ export { r as useChatScroll };
16
+
17
+ //# sourceMappingURL=use-chat-scroll.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-chat-scroll.js","names":[],"sources":["../../src/hooks/use-chat-scroll.ts"],"sourcesContent":["import type { UIMessage } from 'ai'\nimport { nextTick, watch } from 'vue'\n\nimport { useState } from '@/state/state'\n\nexport function useChatScroll() {\n const state = useState()\n\n function getMsgContent(msg?: UIMessage) {\n const lastPart = msg?.parts.at(-1)\n if (!lastPart) return\n\n if (lastPart.type !== 'text') return\n\n return lastPart.text\n }\n\n watch([() => state.chat.status, () => getMsgContent(state.chat.lastMessage)], async () => {\n await nextTick()\n window.scrollTo(0, document.body.scrollHeight)\n })\n}\n"],"mappings":";;;AAKA,SAAgB,IAAgB;CAC9B,IAAM,IAAQ,GAAU;CAExB,SAAS,EAAc,GAAiB;EACtC,IAAM,IAAW,GAAK,MAAM,GAAG,GAAG;AAC7B,WAED,EAAS,SAAS,OAEtB,QAAO,EAAS;;AAGlB,GAAM,OAAO,EAAM,KAAK,cAAc,EAAc,EAAM,KAAK,YAAY,CAAC,EAAE,YAAY;AAExF,EADA,MAAM,GAAU,EAChB,OAAO,SAAS,GAAG,SAAS,KAAK,aAAa;GAC9C"}
@@ -0,0 +1,14 @@
1
+ import { useState as e } from "../state/state.js";
2
+ import { onMounted as t } from "vue";
3
+ //#region src/hooks/use-curated-documents.ts
4
+ function n() {
5
+ let { api: n, curatedDocuments: r } = e();
6
+ t(async () => {
7
+ let e = await n.getCuratedDocuments();
8
+ e.success && (r.value = e.data.results);
9
+ });
10
+ }
11
+ //#endregion
12
+ export { n as useCuratedDocuments };
13
+
14
+ //# sourceMappingURL=use-curated-documents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-curated-documents.js","names":[],"sources":["../../src/hooks/use-curated-documents.ts"],"sourcesContent":["import { onMounted } from 'vue'\n\nimport { useState } from '@/state/state'\n\nexport function useCuratedDocuments() {\n const { api, curatedDocuments } = useState()\n\n onMounted(async () => {\n const getCuratedDocumentsResult = await api.getCuratedDocuments()\n\n if (!getCuratedDocumentsResult.success) {\n return\n }\n\n curatedDocuments.value = getCuratedDocumentsResult.data.results\n })\n}\n"],"mappings":";;;AAIA,SAAgB,IAAsB;CACpC,IAAM,EAAE,QAAK,wBAAqB,GAAU;AAE5C,GAAU,YAAY;EACpB,IAAM,IAA4B,MAAM,EAAI,qBAAqB;AAE5D,IAA0B,YAI/B,EAAiB,QAAQ,EAA0B,KAAK;GACxD"}
@@ -1,4 +1,4 @@
1
- import type { ApiMetadata } from '../entities/registry/document';
1
+ import type { ApiMetadata } from '../entities/registry/document.js';
2
2
  export declare function useSearch(): {
3
3
  query: import("vue").WritableComputedRef<string, string>;
4
4
  results: import("vue").Ref<{
@@ -0,0 +1,23 @@
1
+ import { useState as e } from "../state/state.js";
2
+ import { computed as t, ref as n } from "vue";
3
+ import { useDebounceFn as r } from "@vueuse/core";
4
+ //#region src/hooks/use-search.ts
5
+ function i() {
6
+ let { api: i } = e(), a = n(""), o = r(async (e) => {
7
+ let t = await i.search(e);
8
+ t.success && (c.value = t.data.results);
9
+ }, 200), s = t({
10
+ get: () => a.value,
11
+ set: (e) => {
12
+ o(e), a.value = e;
13
+ }
14
+ }), c = n([]);
15
+ return o(""), {
16
+ query: s,
17
+ results: c
18
+ };
19
+ }
20
+ //#endregion
21
+ export { i as useSearch };
22
+
23
+ //# sourceMappingURL=use-search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-search.js","names":[],"sources":["../../src/hooks/use-search.ts"],"sourcesContent":["import { useDebounceFn } from '@vueuse/core'\nimport { computed, ref } from 'vue'\n\nimport type { ApiMetadata } from '@/entities/registry/document'\nimport { useState } from '@/state/state'\n\nexport function useSearch() {\n const { api } = useState()\n\n const queryRef = ref('')\n\n const search = useDebounceFn(async (q) => {\n const searchResponse = await api.search(q)\n\n if (!searchResponse.success) {\n return\n }\n\n results.value = searchResponse.data.results\n }, 200)\n\n const query = computed({\n get: () => {\n return queryRef.value\n },\n set: (v) => {\n search(v)\n queryRef.value = v\n },\n })\n\n const results = ref<ApiMetadata[]>([])\n\n search('')\n\n return {\n query,\n results,\n }\n}\n"],"mappings":";;;;AAMA,SAAgB,IAAY;CAC1B,IAAM,EAAE,WAAQ,GAAU,EAEpB,IAAW,EAAI,GAAG,EAElB,IAAS,EAAc,OAAO,MAAM;EACxC,IAAM,IAAiB,MAAM,EAAI,OAAO,EAAE;AAErC,IAAe,YAIpB,EAAQ,QAAQ,EAAe,KAAK;IACnC,IAAI,EAED,IAAQ,EAAS;EACrB,WACS,EAAS;EAElB,MAAM,MAAM;AAEV,GADA,EAAO,EAAE,EACT,EAAS,QAAQ;;EAEpB,CAAC,EAEI,IAAU,EAAmB,EAAE,CAAC;AAItC,QAFA,EAAO,GAAG,EAEH;EACL;EACA;EACD"}
@@ -0,0 +1,17 @@
1
+ import { useState as e } from "../state/state.js";
2
+ import { computed as t } from "vue";
3
+ //#region src/hooks/use-signup-link.ts
4
+ function n() {
5
+ let { dashboardUrl: n, mode: r, uploadedTmpDocumentUrl: i } = e(), a = t(() => r === "full" ? n : i.value ? `${n}/register?flow=oss-agent&docUrl=${i.value}` : n);
6
+ function o() {
7
+ window.location.assign(a.value);
8
+ }
9
+ return {
10
+ signupLink: a,
11
+ navigateToSignup: o
12
+ };
13
+ }
14
+ //#endregion
15
+ export { n as useSignupLink };
16
+
17
+ //# sourceMappingURL=use-signup-link.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-signup-link.js","names":[],"sources":["../../src/hooks/use-signup-link.ts"],"sourcesContent":["import type { ComputedRef } from 'vue'\nimport { computed } from 'vue'\n\nimport { useState } from '@/state/state'\n\n/**\n * Agent Scalar signup/upgrade URL for both full (agent.scalar.com) and embedded\n * (@scalar/api-reference) modes.\n *\n * In embedded mode, includes register flow and optional docUrl when a temporary document was uploaded.\n */\nexport function useSignupLink(): {\n signupLink: ComputedRef<string>\n navigateToSignup: () => void\n} {\n const { dashboardUrl, mode, uploadedTmpDocumentUrl } = useState()\n\n const signupLink = computed(() => {\n // we use mode 'full' on agent.scalar.com\n if (mode === 'full') {\n return dashboardUrl\n }\n\n // we use mode 'preview' in @scalar/api-reference\n return uploadedTmpDocumentUrl.value\n ? `${dashboardUrl}/register?flow=oss-agent&docUrl=${uploadedTmpDocumentUrl.value}`\n : dashboardUrl\n })\n\n function navigateToSignup() {\n window.location.assign(signupLink.value)\n }\n\n return { signupLink, navigateToSignup }\n}\n"],"mappings":";;;AAWA,SAAgB,IAGd;CACA,IAAM,EAAE,iBAAc,SAAM,8BAA2B,GAAU,EAE3D,IAAa,QAEb,MAAS,SACJ,IAIF,EAAuB,QAC1B,GAAG,EAAa,kCAAkC,EAAuB,UACzE,EACJ;CAEF,SAAS,IAAmB;AAC1B,SAAO,SAAS,OAAO,EAAW,MAAM;;AAG1C,QAAO;EAAE;EAAY;EAAkB"}
@@ -0,0 +1,20 @@
1
+ import { onMounted as e, ref as t } from "vue";
2
+ //#region src/hooks/use-term-and-conditions.ts
3
+ var n = "scalar/agent-terms-accepted";
4
+ function r() {
5
+ let r = t(!1);
6
+ e(() => {
7
+ r.value = localStorage.getItem(n) === "true";
8
+ });
9
+ function i() {
10
+ r.value = !0, localStorage.setItem(n, "true");
11
+ }
12
+ return {
13
+ accepted: r,
14
+ accept: i
15
+ };
16
+ }
17
+ //#endregion
18
+ export { r as useTermsAndConditions };
19
+
20
+ //# sourceMappingURL=use-term-and-conditions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-term-and-conditions.js","names":[],"sources":["../../src/hooks/use-term-and-conditions.ts"],"sourcesContent":["import { onMounted, ref } from 'vue'\n\nconst TERMS_AND_CONDITIONS_LS_KEY = 'scalar/agent-terms-accepted'\n\nexport function useTermsAndConditions() {\n const accepted = ref(false)\n\n onMounted(() => {\n accepted.value = localStorage.getItem(TERMS_AND_CONDITIONS_LS_KEY) === 'true'\n })\n\n function accept() {\n accepted.value = true\n localStorage.setItem(TERMS_AND_CONDITIONS_LS_KEY, 'true')\n }\n\n return { accepted, accept }\n}\n"],"mappings":";;AAEA,IAAM,IAA8B;AAEpC,SAAgB,IAAwB;CACtC,IAAM,IAAW,EAAI,GAAM;AAE3B,SAAgB;AACd,IAAS,QAAQ,aAAa,QAAQ,EAA4B,KAAK;GACvE;CAEF,SAAS,IAAS;AAEhB,EADA,EAAS,QAAQ,IACjB,aAAa,QAAQ,GAA6B,OAAO;;AAG3D,QAAO;EAAE;EAAU;EAAQ"}
@@ -0,0 +1,92 @@
1
+ import { useState as e } from "../state/state.js";
2
+ import { ref as t } from "vue";
3
+ import { redirectToProxy as n } from "@scalar/helpers/url/redirect-to-proxy";
4
+ import { z as r } from "zod/mini";
5
+ //#region src/hooks/use-upload-tmp-document.ts
6
+ var i = 5e3, a = "scalar-tmp-doc";
7
+ function o({ namespace: e, slug: t }) {
8
+ localStorage.setItem(a, JSON.stringify({
9
+ namespace: e,
10
+ slug: t
11
+ }));
12
+ }
13
+ function s() {
14
+ let e = localStorage.getItem(a);
15
+ if (e) return r.object({
16
+ namespace: r.string(),
17
+ slug: r.string()
18
+ }).parse(JSON.parse(e));
19
+ }
20
+ function c() {
21
+ localStorage.getItem(a) && localStorage.removeItem(a);
22
+ }
23
+ function l() {
24
+ let a = e(), s = t();
25
+ function c(e) {
26
+ let t = `${a.baseUrl}${e}`;
27
+ return n(a.platformProxyUrl, t);
28
+ }
29
+ async function l(e, t = !1) {
30
+ try {
31
+ s.value = { type: "uploading" };
32
+ let n = await fetch(c(`/core/share/upload/apis${t ? "?source=agent" : ""}`), {
33
+ method: "POST",
34
+ headers: { "Content-Type": "application/json" },
35
+ body: JSON.stringify({ document: e })
36
+ });
37
+ if (!n.ok) {
38
+ s.value = {
39
+ type: "error",
40
+ error: "Failed to upload your OpenAPI document."
41
+ };
42
+ return;
43
+ }
44
+ let l = await n.json(), { success: u, data: d } = r.object({
45
+ url: r.string(),
46
+ namespace: r.string(),
47
+ slug: r.string()
48
+ }).safeParse(l);
49
+ if (!u) {
50
+ s.value = {
51
+ type: "error",
52
+ error: "Failed to process document."
53
+ };
54
+ return;
55
+ }
56
+ s.value = { type: "processing" };
57
+ let f = await fetch(c(`/vector/registry/embeddings/${d.namespace}/${d.slug}`), { method: "GET" });
58
+ if (o({
59
+ namespace: d.namespace,
60
+ slug: d.slug
61
+ }), await a.addDocument({
62
+ namespace: d.namespace,
63
+ slug: d.slug,
64
+ removable: !1,
65
+ tmp: !0
66
+ }), !f.ok) {
67
+ s.value = {
68
+ type: "error",
69
+ error: "Failed to embed document."
70
+ };
71
+ return;
72
+ }
73
+ return s.value = { type: "done" }, a.uploadedTmpDocumentUrl.value = d.url, setTimeout(() => {
74
+ s.value = void 0;
75
+ }, i), d;
76
+ } catch {
77
+ s.value = {
78
+ type: "error",
79
+ error: "Failed to upload your OpenAPI document."
80
+ };
81
+ return;
82
+ }
83
+ }
84
+ return {
85
+ uploadTempDocument: l,
86
+ uploadState: s
87
+ };
88
+ }
89
+ //#endregion
90
+ export { s as getTmpDocFromLocalStorage, c as removeTmpDocFromLocalStorage, l as useUploadTmpDocument };
91
+
92
+ //# sourceMappingURL=use-upload-tmp-document.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-upload-tmp-document.js","names":[],"sources":["../../src/hooks/use-upload-tmp-document.ts"],"sourcesContent":["import { redirectToProxy } from '@scalar/helpers/url/redirect-to-proxy'\nimport { ref } from 'vue'\nimport { z } from 'zod/mini'\n\nimport { useState } from '@/state/state'\n\nconst SHOW_UPLOAD_SUCCESS_DELAY = 5_000 // 5 seconds\n\nexport type UploadTmpDocumentState =\n | { type: 'error'; error: unknown }\n | { type: 'uploading' }\n | { type: 'processing' }\n | { type: 'loading' }\n | { type: 'done' }\n\nconst TMP_DOC_LS_KEY = 'scalar-tmp-doc'\n\nfunction saveTmpDocumentInLocalStorage({ namespace, slug }: { namespace: string; slug: string }) {\n localStorage.setItem(TMP_DOC_LS_KEY, JSON.stringify({ namespace, slug }))\n}\n\nexport function getTmpDocFromLocalStorage() {\n const tmpDoc = localStorage.getItem(TMP_DOC_LS_KEY)\n if (!tmpDoc) {\n return\n }\n\n return z\n .object({\n namespace: z.string(),\n slug: z.string(),\n })\n .parse(JSON.parse(tmpDoc))\n}\n\nexport function removeTmpDocFromLocalStorage() {\n const tmpDoc = localStorage.getItem(TMP_DOC_LS_KEY)\n if (!tmpDoc) {\n return\n }\n\n localStorage.removeItem(TMP_DOC_LS_KEY)\n}\n\n/**\n * Handle uploading a temporary OpenAPI document.\n */\nexport function useUploadTmpDocument() {\n const state = useState()\n const uploadState = ref<UploadTmpDocumentState>()\n\n function createUrl(path: string) {\n const fullUrl = `${state.baseUrl}${path}`\n return redirectToProxy(state.platformProxyUrl, fullUrl)\n }\n\n async function uploadTempDocument(document: string, isAgent = false) {\n try {\n uploadState.value = {\n type: 'uploading',\n }\n\n const response = await fetch(createUrl(`/core/share/upload/apis${isAgent ? '?source=agent' : ''}`), {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ document }),\n })\n\n if (!response.ok) {\n uploadState.value = {\n type: 'error',\n error: 'Failed to upload your OpenAPI document.',\n }\n\n return\n }\n\n const json = await response.json()\n\n const { success, data } = z.object({ url: z.string(), namespace: z.string(), slug: z.string() }).safeParse(json)\n\n if (!success) {\n uploadState.value = {\n type: 'error',\n error: 'Failed to process document.',\n }\n return\n }\n\n uploadState.value = {\n type: 'processing',\n }\n const embeddingStatusResponse = await fetch(\n createUrl(`/vector/registry/embeddings/${data.namespace}/${data.slug}`),\n {\n method: 'GET',\n },\n )\n\n saveTmpDocumentInLocalStorage({\n namespace: data.namespace,\n slug: data.slug,\n })\n\n await state.addDocument({\n namespace: data.namespace,\n slug: data.slug,\n removable: false,\n tmp: true,\n })\n\n if (!embeddingStatusResponse.ok) {\n uploadState.value = {\n type: 'error',\n error: 'Failed to embed document.',\n }\n return\n }\n\n uploadState.value = { type: 'done' }\n state.uploadedTmpDocumentUrl.value = data.url\n\n setTimeout(() => {\n uploadState.value = undefined\n }, SHOW_UPLOAD_SUCCESS_DELAY)\n\n return data\n } catch {\n uploadState.value = { type: 'error', error: 'Failed to upload your OpenAPI document.' }\n return\n }\n }\n\n return {\n uploadTempDocument,\n uploadState,\n }\n}\n"],"mappings":";;;;;AAMA,IAAM,IAA4B,KAS5B,IAAiB;AAEvB,SAAS,EAA8B,EAAE,cAAW,WAA6C;AAC/F,cAAa,QAAQ,GAAgB,KAAK,UAAU;EAAE;EAAW;EAAM,CAAC,CAAC;;AAG3E,SAAgB,IAA4B;CAC1C,IAAM,IAAS,aAAa,QAAQ,EAAe;AAC9C,OAIL,QAAO,EACJ,OAAO;EACN,WAAW,EAAE,QAAQ;EACrB,MAAM,EAAE,QAAQ;EACjB,CAAC,CACD,MAAM,KAAK,MAAM,EAAO,CAAC;;AAG9B,SAAgB,IAA+B;AAC9B,cAAa,QAAQ,EAAe,IAKnD,aAAa,WAAW,EAAe;;AAMzC,SAAgB,IAAuB;CACrC,IAAM,IAAQ,GAAU,EAClB,IAAc,GAA6B;CAEjD,SAAS,EAAU,GAAc;EAC/B,IAAM,IAAU,GAAG,EAAM,UAAU;AACnC,SAAO,EAAgB,EAAM,kBAAkB,EAAQ;;CAGzD,eAAe,EAAmB,GAAkB,IAAU,IAAO;AACnE,MAAI;AACF,KAAY,QAAQ,EAClB,MAAM,aACP;GAED,IAAM,IAAW,MAAM,MAAM,EAAU,0BAA0B,IAAU,kBAAkB,KAAK,EAAE;IAClG,QAAQ;IACR,SAAS,EACP,gBAAgB,oBACjB;IACD,MAAM,KAAK,UAAU,EAAE,aAAU,CAAC;IACnC,CAAC;AAEF,OAAI,CAAC,EAAS,IAAI;AAChB,MAAY,QAAQ;KAClB,MAAM;KACN,OAAO;KACR;AAED;;GAGF,IAAM,IAAO,MAAM,EAAS,MAAM,EAE5B,EAAE,YAAS,YAAS,EAAE,OAAO;IAAE,KAAK,EAAE,QAAQ;IAAE,WAAW,EAAE,QAAQ;IAAE,MAAM,EAAE,QAAQ;IAAE,CAAC,CAAC,UAAU,EAAK;AAEhH,OAAI,CAAC,GAAS;AACZ,MAAY,QAAQ;KAClB,MAAM;KACN,OAAO;KACR;AACD;;AAGF,KAAY,QAAQ,EAClB,MAAM,cACP;GACD,IAAM,IAA0B,MAAM,MACpC,EAAU,+BAA+B,EAAK,UAAU,GAAG,EAAK,OAAO,EACvE,EACE,QAAQ,OACT,CACF;AAcD,OAZA,EAA8B;IAC5B,WAAW,EAAK;IAChB,MAAM,EAAK;IACZ,CAAC,EAEF,MAAM,EAAM,YAAY;IACtB,WAAW,EAAK;IAChB,MAAM,EAAK;IACX,WAAW;IACX,KAAK;IACN,CAAC,EAEE,CAAC,EAAwB,IAAI;AAC/B,MAAY,QAAQ;KAClB,MAAM;KACN,OAAO;KACR;AACD;;AAUF,UAPA,EAAY,QAAQ,EAAE,MAAM,QAAQ,EACpC,EAAM,uBAAuB,QAAQ,EAAK,KAE1C,iBAAiB;AACf,MAAY,QAAQ,KAAA;MACnB,EAA0B,EAEtB;UACD;AACN,KAAY,QAAQ;IAAE,MAAM;IAAS,OAAO;IAA2C;AACvF;;;AAIJ,QAAO;EACL;EACA;EACD"}
package/dist/index.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- export type { ChatExposed } from './App.vue';
2
- export { default as Chat } from './App.vue';
1
+ export type { ChatExposed } from './App.vue.js';
2
+ export { default as Chat } from './App.vue.js';
3
3
  //# sourceMappingURL=index.d.ts.map