@scalar/agent-chat 0.9.12 → 0.9.13
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.
- package/dist/App.vue.d.ts +3 -3
- package/dist/App.vue.js +7 -0
- package/dist/App.vue.js.map +1 -0
- package/dist/App.vue.script.js +41 -0
- package/dist/App.vue.script.js.map +1 -0
- package/dist/Chat.vue.js +7 -0
- package/dist/Chat.vue.js.map +1 -0
- package/dist/Chat.vue.script.js +48 -0
- package/dist/Chat.vue.script.js.map +1 -0
- package/dist/_virtual/_plugin-vue_export-helper.js +8 -0
- package/dist/api.js +75 -0
- package/dist/api.js.map +1 -0
- package/dist/client-tools/execute-request.d.ts +1 -1
- package/dist/client-tools/execute-request.js +88 -0
- package/dist/client-tools/execute-request.js.map +1 -0
- package/dist/components/ActionsDropdown.vue.js +9 -0
- package/dist/components/ActionsDropdown.vue.js.map +1 -0
- package/dist/components/ActionsDropdown.vue.script.js +33 -0
- package/dist/components/ActionsDropdown.vue.script.js.map +1 -0
- package/dist/components/ApprovalSection.vue.js +9 -0
- package/dist/components/ApprovalSection.vue.js.map +1 -0
- package/dist/components/ApprovalSection.vue.script.js +26 -0
- package/dist/components/ApprovalSection.vue.script.js.map +1 -0
- package/dist/components/AuthenticationProvided.vue.js +13 -0
- package/dist/components/AuthenticationProvided.vue.js.map +1 -0
- package/dist/components/AuthenticationRequired.vue.js +13 -0
- package/dist/components/AuthenticationRequired.vue.js.map +1 -0
- package/dist/components/AutosendPaused.vue.js +13 -0
- package/dist/components/AutosendPaused.vue.js.map +1 -0
- package/dist/components/BuildingRequest.vue.js +19 -0
- package/dist/components/BuildingRequest.vue.js.map +1 -0
- package/dist/components/ContextItem.vue.js +9 -0
- package/dist/components/ContextItem.vue.js.map +1 -0
- package/dist/components/ContextItem.vue.script.js +13 -0
- package/dist/components/ContextItem.vue.script.js.map +1 -0
- package/dist/components/ErrorMessage.vue.d.ts +1 -1
- package/dist/components/ErrorMessage.vue.js +9 -0
- package/dist/components/ErrorMessage.vue.js.map +1 -0
- package/dist/components/ErrorMessage.vue.script.js +22 -0
- package/dist/components/ErrorMessage.vue.script.js.map +1 -0
- package/dist/components/FreeMessagesInfoSection.vue.js +9 -0
- package/dist/components/FreeMessagesInfoSection.vue.js.map +1 -0
- package/dist/components/FreeMessagesInfoSection.vue.script.js +43 -0
- package/dist/components/FreeMessagesInfoSection.vue.script.js.map +1 -0
- package/dist/components/LoadingMiniOpenAPIDoc.vue.js +13 -0
- package/dist/components/LoadingMiniOpenAPIDoc.vue.js.map +1 -0
- package/dist/components/LoadingOpenAPISpecsSummary.vue.js +13 -0
- package/dist/components/LoadingOpenAPISpecsSummary.vue.js.map +1 -0
- package/dist/components/Logo.vue.js +23 -0
- package/dist/components/Logo.vue.js.map +1 -0
- package/dist/components/PaymentSection.vue.js +9 -0
- package/dist/components/PaymentSection.vue.js.map +1 -0
- package/dist/components/PaymentSection.vue.script.js +22 -0
- package/dist/components/PaymentSection.vue.script.js.map +1 -0
- package/dist/components/RequestApproved.vue.js +13 -0
- package/dist/components/RequestApproved.vue.js.map +1 -0
- package/dist/components/RequestFailed.vue.js +19 -0
- package/dist/components/RequestFailed.vue.js.map +1 -0
- package/dist/components/RequestPreview.vue.d.ts +1 -1
- package/dist/components/RequestPreview.vue.js +9 -0
- package/dist/components/RequestPreview.vue.js.map +1 -0
- package/dist/components/RequestPreview.vue.script.js +96 -0
- package/dist/components/RequestPreview.vue.script.js.map +1 -0
- package/dist/components/RequestRejected.vue.js +19 -0
- package/dist/components/RequestRejected.vue.js.map +1 -0
- package/dist/components/RequestSuccess.vue.js +13 -0
- package/dist/components/RequestSuccess.vue.js.map +1 -0
- package/dist/components/ResponseBody/ResponseBody.vue.d.ts +1 -1
- package/dist/components/ResponseBody/ResponseBody.vue.js +7 -0
- package/dist/components/ResponseBody/ResponseBody.vue.js.map +1 -0
- package/dist/components/ResponseBody/ResponseBody.vue.script.js +43 -0
- package/dist/components/ResponseBody/ResponseBody.vue.script.js.map +1 -0
- package/dist/components/ResponseBody/ResponseBodyInfo.vue.js +12 -0
- package/dist/components/ResponseBody/ResponseBodyInfo.vue.js.map +1 -0
- package/dist/components/ResponseBody/ResponseBodyPreview.vue.d.ts +1 -1
- package/dist/components/ResponseBody/ResponseBodyPreview.vue.js +9 -0
- package/dist/components/ResponseBody/ResponseBodyPreview.vue.js.map +1 -0
- package/dist/components/ResponseBody/ResponseBodyPreview.vue.script.js +59 -0
- package/dist/components/ResponseBody/ResponseBodyPreview.vue.script.js.map +1 -0
- package/dist/components/ResponseBody/ResponseBodyRaw.vue.js +7 -0
- package/dist/components/ResponseBody/ResponseBodyRaw.vue.js.map +1 -0
- package/dist/components/ResponseBody/ResponseBodyRaw.vue.script.js +22 -0
- package/dist/components/ResponseBody/ResponseBodyRaw.vue.script.js.map +1 -0
- package/dist/components/ResponseBody/ResponseBodyToggle.vue.js +7 -0
- package/dist/components/ResponseBody/ResponseBodyToggle.vue.js.map +1 -0
- package/dist/components/ResponseBody/ResponseBodyToggle.vue.script.js +23 -0
- package/dist/components/ResponseBody/ResponseBodyToggle.vue.script.js.map +1 -0
- package/dist/components/ResponseBody/helpers/media-types.js +223 -0
- package/dist/components/ResponseBody/helpers/media-types.js.map +1 -0
- package/dist/components/ResponseBody/helpers/process-response-body.js +33 -0
- package/dist/components/ResponseBody/helpers/process-response-body.js.map +1 -0
- package/dist/components/SearchPopover.vue.js +9 -0
- package/dist/components/SearchPopover.vue.js.map +1 -0
- package/dist/components/SearchPopover.vue.script.js +53 -0
- package/dist/components/SearchPopover.vue.script.js.map +1 -0
- package/dist/components/Selector.vue.js +7 -0
- package/dist/components/Selector.vue.js.map +1 -0
- package/dist/components/Selector.vue.script.js +62 -0
- package/dist/components/Selector.vue.script.js.map +1 -0
- package/dist/components/SendingRequest.vue.js +19 -0
- package/dist/components/SendingRequest.vue.js.map +1 -0
- package/dist/components/ServerSelector.vue.js +7 -0
- package/dist/components/ServerSelector.vue.js.map +1 -0
- package/dist/components/ServerSelector.vue.script.js +60 -0
- package/dist/components/ServerSelector.vue.script.js.map +1 -0
- package/dist/components/UploadSection.vue.d.ts +1 -1
- package/dist/components/UploadSection.vue.js +9 -0
- package/dist/components/UploadSection.vue.js.map +1 -0
- package/dist/components/UploadSection.vue.script.js +52 -0
- package/dist/components/UploadSection.vue.script.js.map +1 -0
- package/dist/consts/urls.js +12 -0
- package/dist/consts/urls.js.map +1 -0
- package/dist/entities/error/constants.js +6 -0
- package/dist/entities/error/constants.js.map +1 -0
- package/dist/entities/error/helpers.d.ts +1 -1
- package/dist/entities/error/helpers.js +11 -0
- package/dist/entities/error/helpers.js.map +1 -0
- package/dist/entities/index.d.ts +9 -9
- package/dist/entities/index.js +10 -2
- package/dist/entities/prompt/constants.js +6 -0
- package/dist/entities/prompt/constants.js.map +1 -0
- package/dist/entities/registry/document.js +14 -0
- package/dist/entities/registry/document.js.map +1 -0
- package/dist/entities/tools/ask-for-authentication.js +7 -0
- package/dist/entities/tools/ask-for-authentication.js.map +1 -0
- package/dist/entities/tools/constants.js +6 -0
- package/dist/entities/tools/constants.js.map +1 -0
- package/dist/entities/tools/execute-request.d.ts +1 -1
- package/dist/entities/tools/execute-request.js +13 -0
- package/dist/entities/tools/execute-request.js.map +1 -0
- package/dist/entities/tools/get-mini-openapi-spec.js +7 -0
- package/dist/entities/tools/get-mini-openapi-spec.js.map +1 -0
- package/dist/entities/tools/get-openapi-spec-summary.js +6 -0
- package/dist/entities/tools/get-openapi-spec-summary.js.map +1 -0
- package/dist/helpers.js +42 -0
- package/dist/helpers.js.map +1 -0
- package/dist/hooks/use-agent-key-documents.js +24 -0
- package/dist/hooks/use-agent-key-documents.js.map +1 -0
- package/dist/hooks/use-chat-approvals.d.ts +1 -1
- package/dist/hooks/use-chat-approvals.js +38 -0
- package/dist/hooks/use-chat-approvals.js.map +1 -0
- package/dist/hooks/use-chat-error.js +25 -0
- package/dist/hooks/use-chat-error.js.map +1 -0
- package/dist/hooks/use-chat-pending-client-tool-parts.js +14 -0
- package/dist/hooks/use-chat-pending-client-tool-parts.js.map +1 -0
- package/dist/hooks/use-chat-scroll.js +17 -0
- package/dist/hooks/use-chat-scroll.js.map +1 -0
- package/dist/hooks/use-curated-documents.js +14 -0
- package/dist/hooks/use-curated-documents.js.map +1 -0
- package/dist/hooks/use-search.d.ts +1 -1
- package/dist/hooks/use-search.js +23 -0
- package/dist/hooks/use-search.js.map +1 -0
- package/dist/hooks/use-signup-link.js +17 -0
- package/dist/hooks/use-signup-link.js.map +1 -0
- package/dist/hooks/use-term-and-conditions.js +20 -0
- package/dist/hooks/use-term-and-conditions.js.map +1 -0
- package/dist/hooks/use-upload-tmp-document.js +92 -0
- package/dist/hooks/use-upload-tmp-document.js.map +1 -0
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -2065
- package/dist/package.json +1 -1
- package/dist/plugins/persistance.js +16 -0
- package/dist/plugins/persistance.js.map +1 -0
- package/dist/registry/add-documents-to-store.d.ts +2 -2
- package/dist/registry/add-documents-to-store.js +36 -0
- package/dist/registry/add-documents-to-store.js.map +1 -0
- package/dist/registry/create-document-name.js +8 -0
- package/dist/registry/create-document-name.js.map +1 -0
- package/dist/state/state.d.ts +6 -6
- package/dist/state/state.js +154 -0
- package/dist/state/state.js.map +1 -0
- package/dist/views/Catalog/Catalog.vue.js +10 -0
- package/dist/views/Catalog/Catalog.vue.js.map +1 -0
- package/dist/views/Catalog/Catalog.vue.script.js +50 -0
- package/dist/views/Catalog/Catalog.vue.script.js.map +1 -0
- package/dist/views/Chat/Chat.vue.js +9 -0
- package/dist/views/Chat/Chat.vue.js.map +1 -0
- package/dist/views/Chat/Chat.vue.script.js +55 -0
- package/dist/views/Chat/Chat.vue.script.js.map +1 -0
- package/dist/views/Chat/Messages/AskForAuthentication.vue.d.ts +2 -2
- package/dist/views/Chat/Messages/AskForAuthentication.vue.js +9 -0
- package/dist/views/Chat/Messages/AskForAuthentication.vue.js.map +1 -0
- package/dist/views/Chat/Messages/AskForAuthentication.vue.script.js +72 -0
- package/dist/views/Chat/Messages/AskForAuthentication.vue.script.js.map +1 -0
- package/dist/views/Chat/Messages/ExecuteRequestTool.vue.d.ts +2 -2
- package/dist/views/Chat/Messages/ExecuteRequestTool.vue.js +9 -0
- package/dist/views/Chat/Messages/ExecuteRequestTool.vue.js.map +1 -0
- package/dist/views/Chat/Messages/ExecuteRequestTool.vue.script.js +26 -0
- package/dist/views/Chat/Messages/ExecuteRequestTool.vue.script.js.map +1 -0
- package/dist/views/Chat/Messages/GetMiniOpenAPIDocTool.vue.d.ts +2 -2
- package/dist/views/Chat/Messages/GetMiniOpenAPIDocTool.vue.js +9 -0
- package/dist/views/Chat/Messages/GetMiniOpenAPIDocTool.vue.js.map +1 -0
- package/dist/views/Chat/Messages/GetMiniOpenAPIDocTool.vue.script.js +39 -0
- package/dist/views/Chat/Messages/GetMiniOpenAPIDocTool.vue.script.js.map +1 -0
- package/dist/views/Chat/Messages/GetOpenAPISpecsSummary.vue.d.ts +2 -2
- package/dist/views/Chat/Messages/GetOpenAPISpecsSummary.vue.js +7 -0
- package/dist/views/Chat/Messages/GetOpenAPISpecsSummary.vue.js.map +1 -0
- package/dist/views/Chat/Messages/GetOpenAPISpecsSummary.vue.script.js +21 -0
- package/dist/views/Chat/Messages/GetOpenAPISpecsSummary.vue.script.js.map +1 -0
- package/dist/views/Chat/Messages/Text.vue.js +7 -0
- package/dist/views/Chat/Messages/Text.vue.js.map +1 -0
- package/dist/views/Chat/Messages/Text.vue.script.js +14 -0
- package/dist/views/Chat/Messages/Text.vue.script.js.map +1 -0
- package/dist/views/Layout.vue.js +9 -0
- package/dist/views/Layout.vue.js.map +1 -0
- package/dist/views/Layout.vue.script.js +25 -0
- package/dist/views/Layout.vue.script.js.map +1 -0
- package/dist/views/PromptForm.vue.js +9 -0
- package/dist/views/PromptForm.vue.js.map +1 -0
- package/dist/views/PromptForm.vue.script.js +202 -0
- package/dist/views/PromptForm.vue.script.js.map +1 -0
- package/dist/views/Settings/Auth.vue.js +7 -0
- package/dist/views/Settings/Auth.vue.js.map +1 -0
- package/dist/views/Settings/Auth.vue.script.js +63 -0
- package/dist/views/Settings/Auth.vue.script.js.map +1 -0
- package/dist/views/Settings/DocSettings.vue.js +9 -0
- package/dist/views/Settings/DocSettings.vue.js.map +1 -0
- package/dist/views/Settings/DocSettings.vue.script.js +48 -0
- package/dist/views/Settings/DocSettings.vue.script.js.map +1 -0
- package/dist/views/Settings/Settings.vue.js +10 -0
- package/dist/views/Settings/Settings.vue.js.map +1 -0
- package/dist/views/Settings/Settings.vue.script.js +59 -0
- package/dist/views/Settings/Settings.vue.script.js.map +1 -0
- package/dist/views/Start.vue.js +9 -0
- package/dist/views/Start.vue.js.map +1 -0
- package/dist/views/Start.vue.script.js +41 -0
- package/dist/views/Start.vue.script.js.map +1 -0
- package/package.json +7 -7
- package/dist/entities-NWeuOkBB.js +0 -28
- package/dist/entities-NWeuOkBB.js.map +0 -1
- package/dist/index.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Auth.vue.js","names":[],"sources":["../../../src/views/Settings/Auth.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport {\n AuthSelector,\n mergeSecurity,\n} from '@scalar/api-client/v2/blocks/scalar-auth-selector-block'\nimport {\n getSecurityRequirements,\n getSelectedSecurity,\n} from '@scalar/api-client/v2/features/operation'\nimport type { ApiReferenceConfigurationRaw } from '@scalar/types/api-reference'\nimport type { AuthStore } from '@scalar/workspace-store/entities/auth'\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport type { XScalarEnvironment } from '@scalar/workspace-store/schemas/extensions/document/x-scalar-environments'\nimport type { ServerObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport type { WorkspaceDocument } from '@scalar/workspace-store/schemas/workspace'\nimport { useFocusWithin } from '@vueuse/core'\nimport { computed, shallowRef, watch } from 'vue'\n\nimport { useState } from '@/state/state'\n\nconst { document, name, environment, eventBus, options, authStore } =\n defineProps<{\n options: Pick<\n ApiReferenceConfigurationRaw,\n 'authentication' | 'persistAuth' | 'proxyUrl'\n >\n name: string\n authStore: AuthStore\n document: WorkspaceDocument | undefined\n eventBus: WorkspaceEventBus\n selectedServer: ServerObject | null\n environment: XScalarEnvironment\n }>()\n\nconst { workspaceStore } = useState()\n\n/** Compute what the security requirements should be for the document */\nconst securityRequirements = computed(() =>\n getSecurityRequirements(document?.security),\n)\n\n/** The selected security keys for the document */\nconst selectedSecurity = computed(() =>\n getSelectedSecurity(\n authStore.getAuthSelectedSchemas({\n type: 'document',\n documentName: name,\n }),\n undefined,\n securityRequirements.value,\n ),\n)\n\nconst focusRef = shallowRef()\nconst { focused } = useFocusWithin(focusRef)\n\n/** Merge the security schemes with the authentication config and the auth store */\nconst securitySchemes = computed(() =>\n mergeSecurity(\n document?.components?.securitySchemes ?? {},\n options.authentication?.securitySchemes,\n authStore,\n name,\n ),\n)\n\nwatch(focused, (isFocused) => {\n if (!isFocused) {\n return\n }\n\n workspaceStore.update('x-scalar-active-document', name)\n})\n</script>\n<template>\n <div\n ref=\"focusRef\"\n tabindex=\"0\">\n <AuthSelector\n v-if=\"Object.keys(securitySchemes).length\"\n :authStore\n :documentSlug=\"name\"\n :environment\n :eventBus\n isReadOnly\n isStatic\n layout=\"reference\"\n :meta=\"{ type: 'document' }\"\n :persistAuth=\"options.persistAuth\"\n :proxyUrl=\"options.proxyUrl ?? ''\"\n :securityRequirements\n :securitySchemes\n :selectedSecurity\n :server=\"selectedServer\"\n title=\"Authentication\" />\n </div>\n</template>\n"],"mappings":""}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { useState as e } from "../../state/state.js";
|
|
2
|
+
import { computed as t, createBlock as n, createCommentVNode as r, createElementBlock as i, defineComponent as a, openBlock as o, shallowRef as s, unref as c, watch as l } from "vue";
|
|
3
|
+
import { AuthSelector as u, mergeSecurity as d } from "@scalar/api-client/v2/blocks/scalar-auth-selector-block";
|
|
4
|
+
import { getSecurityRequirements as f, getSelectedSecurity as p } from "@scalar/api-client/v2/features/operation";
|
|
5
|
+
import { useFocusWithin as m } from "@vueuse/core";
|
|
6
|
+
//#region src/views/Settings/Auth.vue?vue&type=script&setup=true&lang.ts
|
|
7
|
+
var h = /* @__PURE__ */ a({
|
|
8
|
+
__name: "Auth",
|
|
9
|
+
props: {
|
|
10
|
+
options: {},
|
|
11
|
+
name: {},
|
|
12
|
+
authStore: {},
|
|
13
|
+
document: {},
|
|
14
|
+
eventBus: {},
|
|
15
|
+
selectedServer: {},
|
|
16
|
+
environment: {}
|
|
17
|
+
},
|
|
18
|
+
setup(a) {
|
|
19
|
+
let { workspaceStore: h } = e(), g = t(() => f(a.document?.security)), _ = t(() => p(a.authStore.getAuthSelectedSchemas({
|
|
20
|
+
type: "document",
|
|
21
|
+
documentName: a.name
|
|
22
|
+
}), void 0, g.value)), v = s(), { focused: y } = m(v), b = t(() => d(a.document?.components?.securitySchemes ?? {}, a.options.authentication?.securitySchemes, a.authStore, a.name));
|
|
23
|
+
return l(y, (e) => {
|
|
24
|
+
e && h.update("x-scalar-active-document", a.name);
|
|
25
|
+
}), (e, t) => (o(), i("div", {
|
|
26
|
+
ref_key: "focusRef",
|
|
27
|
+
ref: v,
|
|
28
|
+
tabindex: "0"
|
|
29
|
+
}, [Object.keys(b.value).length ? (o(), n(c(u), {
|
|
30
|
+
key: 0,
|
|
31
|
+
authStore: a.authStore,
|
|
32
|
+
documentSlug: a.name,
|
|
33
|
+
environment: a.environment,
|
|
34
|
+
eventBus: a.eventBus,
|
|
35
|
+
isReadOnly: "",
|
|
36
|
+
isStatic: "",
|
|
37
|
+
layout: "reference",
|
|
38
|
+
meta: { type: "document" },
|
|
39
|
+
persistAuth: a.options.persistAuth,
|
|
40
|
+
proxyUrl: a.options.proxyUrl ?? "",
|
|
41
|
+
securityRequirements: g.value,
|
|
42
|
+
securitySchemes: b.value,
|
|
43
|
+
selectedSecurity: _.value,
|
|
44
|
+
server: a.selectedServer,
|
|
45
|
+
title: "Authentication"
|
|
46
|
+
}, null, 8, [
|
|
47
|
+
"authStore",
|
|
48
|
+
"documentSlug",
|
|
49
|
+
"environment",
|
|
50
|
+
"eventBus",
|
|
51
|
+
"persistAuth",
|
|
52
|
+
"proxyUrl",
|
|
53
|
+
"securityRequirements",
|
|
54
|
+
"securitySchemes",
|
|
55
|
+
"selectedSecurity",
|
|
56
|
+
"server"
|
|
57
|
+
])) : r("", !0)], 512));
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
//#endregion
|
|
61
|
+
export { h as default };
|
|
62
|
+
|
|
63
|
+
//# sourceMappingURL=Auth.vue.script.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Auth.vue.script.js","names":[],"sources":["../../../src/views/Settings/Auth.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport {\n AuthSelector,\n mergeSecurity,\n} from '@scalar/api-client/v2/blocks/scalar-auth-selector-block'\nimport {\n getSecurityRequirements,\n getSelectedSecurity,\n} from '@scalar/api-client/v2/features/operation'\nimport type { ApiReferenceConfigurationRaw } from '@scalar/types/api-reference'\nimport type { AuthStore } from '@scalar/workspace-store/entities/auth'\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport type { XScalarEnvironment } from '@scalar/workspace-store/schemas/extensions/document/x-scalar-environments'\nimport type { ServerObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport type { WorkspaceDocument } from '@scalar/workspace-store/schemas/workspace'\nimport { useFocusWithin } from '@vueuse/core'\nimport { computed, shallowRef, watch } from 'vue'\n\nimport { useState } from '@/state/state'\n\nconst { document, name, environment, eventBus, options, authStore } =\n defineProps<{\n options: Pick<\n ApiReferenceConfigurationRaw,\n 'authentication' | 'persistAuth' | 'proxyUrl'\n >\n name: string\n authStore: AuthStore\n document: WorkspaceDocument | undefined\n eventBus: WorkspaceEventBus\n selectedServer: ServerObject | null\n environment: XScalarEnvironment\n }>()\n\nconst { workspaceStore } = useState()\n\n/** Compute what the security requirements should be for the document */\nconst securityRequirements = computed(() =>\n getSecurityRequirements(document?.security),\n)\n\n/** The selected security keys for the document */\nconst selectedSecurity = computed(() =>\n getSelectedSecurity(\n authStore.getAuthSelectedSchemas({\n type: 'document',\n documentName: name,\n }),\n undefined,\n securityRequirements.value,\n ),\n)\n\nconst focusRef = shallowRef()\nconst { focused } = useFocusWithin(focusRef)\n\n/** Merge the security schemes with the authentication config and the auth store */\nconst securitySchemes = computed(() =>\n mergeSecurity(\n document?.components?.securitySchemes ?? {},\n options.authentication?.securitySchemes,\n authStore,\n name,\n ),\n)\n\nwatch(focused, (isFocused) => {\n if (!isFocused) {\n return\n }\n\n workspaceStore.update('x-scalar-active-document', name)\n})\n</script>\n<template>\n <div\n ref=\"focusRef\"\n tabindex=\"0\">\n <AuthSelector\n v-if=\"Object.keys(securitySchemes).length\"\n :authStore\n :documentSlug=\"name\"\n :environment\n :eventBus\n isReadOnly\n isStatic\n layout=\"reference\"\n :meta=\"{ type: 'document' }\"\n :persistAuth=\"options.persistAuth\"\n :proxyUrl=\"options.proxyUrl ?? ''\"\n :securityRequirements\n :securitySchemes\n :selectedSecurity\n :server=\"selectedServer\"\n title=\"Authentication\" />\n </div>\n</template>\n"],"mappings":";;;;;;;;;;;;;;;;;;EAkCA,IAAM,EAAE,sBAAmB,GAAS,EAG9B,IAAuB,QAC3B,EAAwB,EAAA,UAAU,SAAS,CAC7C,EAGM,IAAmB,QACvB,EACE,EAAA,UAAU,uBAAuB;GAC/B,MAAM;GACN,cAAc,EAAA;GACf,CAAC,EACF,KAAA,GACA,EAAqB,MACtB,CACH,EAEM,IAAW,GAAW,EACtB,EAAE,eAAY,EAAe,EAAQ,EAGrC,IAAkB,QACtB,EACE,EAAA,UAAU,YAAY,mBAAmB,EAAE,EAC3C,EAAA,QAAQ,gBAAgB,iBACxB,EAAA,WACA,EAAA,KACD,CACH;SAEA,EAAM,IAAU,MAAc;AACvB,QAIL,EAAe,OAAO,4BAA4B,EAAA,KAAI;IACvD,kBAGC,EAoBM,OAAA;YAnBA;GAAJ,KAAI;GACJ,UAAS;MAED,OAAO,KAAK,EAAA,MAAe,CAAE,UAAA,GAAA,EADrC,EAgB2B,EAAA,EAAA,EAAA;;GAdxB,WAAA,EAAA;GACA,cAAc,EAAA;GACd,aAAA,EAAA;GACA,UAAA,EAAA;GACD,YAAA;GACA,UAAA;GACA,QAAO;GACN,MAAM,EAAA,MAAA,YAAoB;GAC1B,aAAa,EAAA,QAAQ;GACrB,UAAU,EAAA,QAAQ,YAAQ;GAC1B,sBAAA,EAAA;GACA,iBAAA,EAAA;GACA,kBAAA,EAAA;GACA,QAAQ,EAAA;GACT,OAAM"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import e from "../../_virtual/_plugin-vue_export-helper.js";
|
|
2
|
+
import t from "./DocSettings.vue.script.js";
|
|
3
|
+
/* empty css */
|
|
4
|
+
//#region src/views/Settings/DocSettings.vue
|
|
5
|
+
var n = /* @__PURE__ */ e(t, [["__scopeId", "data-v-31f052ad"]]);
|
|
6
|
+
//#endregion
|
|
7
|
+
export { n as default };
|
|
8
|
+
|
|
9
|
+
//# sourceMappingURL=DocSettings.vue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DocSettings.vue.js","names":[],"sources":["../../../src/views/Settings/DocSettings.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { getSelectedServer } from '@scalar/api-client/v2/features/operation'\nimport { getActiveEnvironment, getServers } from '@scalar/api-client/v2/helpers'\nimport { type WorkspaceDocument } from '@scalar/workspace-store/schemas/workspace'\nimport { computed } from 'vue'\n\nimport ServerSelector from '@/components/ServerSelector.vue'\nimport { useState } from '@/state/state'\nimport Auth from '@/views/Settings/Auth.vue'\n\nconst { document, name } = defineProps<{\n document: WorkspaceDocument\n name: string\n}>()\n\nconst { workspaceStore, config, eventBus } = useState()\n\nconst environment = computed(() =>\n getActiveEnvironment(workspaceStore, document),\n)\n\nconst selectedServer = computed(() => {\n const servers = getServers(document.servers, {\n documentUrl: document['x-scalar-original-source-url'],\n })\n\n return getSelectedServer(servers, document['x-scalar-selected-server'])\n})\n\nconst securitySchemes = computed(\n () => document.components?.securitySchemes ?? {},\n)\n</script>\n\n<template>\n <div class=\"docSettings\">\n <div>\n <Auth\n :authStore=\"workspaceStore.auth\"\n :document\n :environment\n :eventBus\n :name\n :options=\"config\"\n :securitySchemes\n :selectedServer />\n </div>\n <div>\n <ServerSelector\n :eventBus\n :selectedServer\n :servers=\"document.servers ?? []\" />\n </div>\n </div>\n</template>\n\n<style scoped>\n.docSettings {\n display: flex;\n flex-direction: column;\n gap: 12px;\n margin-bottom: 12px;\n font-size: var(--scalar-font-size-3);\n max-height: 600px;\n}\n\n.documentName {\n font-weight: var(--scalar-semibold);\n}\n</style>\n"],"mappings":""}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { useState as e } from "../../state/state.js";
|
|
2
|
+
import t from "./Auth.vue.js";
|
|
3
|
+
import n from "../../components/ServerSelector.vue.js";
|
|
4
|
+
import { computed as r, createElementBlock as i, createElementVNode as a, createVNode as o, defineComponent as s, openBlock as c, unref as l } from "vue";
|
|
5
|
+
import { getSelectedServer as u } from "@scalar/api-client/v2/features/operation";
|
|
6
|
+
import { getActiveEnvironment as d, getServers as f } from "@scalar/api-client/v2/helpers";
|
|
7
|
+
//#region src/views/Settings/DocSettings.vue?vue&type=script&setup=true&lang.ts
|
|
8
|
+
var p = { class: "docSettings" }, m = /* @__PURE__ */ s({
|
|
9
|
+
__name: "DocSettings",
|
|
10
|
+
props: {
|
|
11
|
+
document: {},
|
|
12
|
+
name: {}
|
|
13
|
+
},
|
|
14
|
+
setup(s) {
|
|
15
|
+
let { workspaceStore: m, config: h, eventBus: g } = e(), _ = r(() => d(m, s.document)), v = r(() => u(f(s.document.servers, { documentUrl: s.document["x-scalar-original-source-url"] }), s.document["x-scalar-selected-server"])), y = r(() => s.document.components?.securitySchemes ?? {});
|
|
16
|
+
return (e, r) => (c(), i("div", p, [a("div", null, [o(t, {
|
|
17
|
+
authStore: l(m).auth,
|
|
18
|
+
document: s.document,
|
|
19
|
+
environment: _.value,
|
|
20
|
+
eventBus: l(g),
|
|
21
|
+
name: s.name,
|
|
22
|
+
options: l(h),
|
|
23
|
+
securitySchemes: y.value,
|
|
24
|
+
selectedServer: v.value
|
|
25
|
+
}, null, 8, [
|
|
26
|
+
"authStore",
|
|
27
|
+
"document",
|
|
28
|
+
"environment",
|
|
29
|
+
"eventBus",
|
|
30
|
+
"name",
|
|
31
|
+
"options",
|
|
32
|
+
"securitySchemes",
|
|
33
|
+
"selectedServer"
|
|
34
|
+
])]), a("div", null, [o(n, {
|
|
35
|
+
eventBus: l(g),
|
|
36
|
+
selectedServer: v.value,
|
|
37
|
+
servers: s.document.servers ?? []
|
|
38
|
+
}, null, 8, [
|
|
39
|
+
"eventBus",
|
|
40
|
+
"selectedServer",
|
|
41
|
+
"servers"
|
|
42
|
+
])])]));
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
//#endregion
|
|
46
|
+
export { m as default };
|
|
47
|
+
|
|
48
|
+
//# sourceMappingURL=DocSettings.vue.script.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DocSettings.vue.script.js","names":[],"sources":["../../../src/views/Settings/DocSettings.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { getSelectedServer } from '@scalar/api-client/v2/features/operation'\nimport { getActiveEnvironment, getServers } from '@scalar/api-client/v2/helpers'\nimport { type WorkspaceDocument } from '@scalar/workspace-store/schemas/workspace'\nimport { computed } from 'vue'\n\nimport ServerSelector from '@/components/ServerSelector.vue'\nimport { useState } from '@/state/state'\nimport Auth from '@/views/Settings/Auth.vue'\n\nconst { document, name } = defineProps<{\n document: WorkspaceDocument\n name: string\n}>()\n\nconst { workspaceStore, config, eventBus } = useState()\n\nconst environment = computed(() =>\n getActiveEnvironment(workspaceStore, document),\n)\n\nconst selectedServer = computed(() => {\n const servers = getServers(document.servers, {\n documentUrl: document['x-scalar-original-source-url'],\n })\n\n return getSelectedServer(servers, document['x-scalar-selected-server'])\n})\n\nconst securitySchemes = computed(\n () => document.components?.securitySchemes ?? {},\n)\n</script>\n\n<template>\n <div class=\"docSettings\">\n <div>\n <Auth\n :authStore=\"workspaceStore.auth\"\n :document\n :environment\n :eventBus\n :name\n :options=\"config\"\n :securitySchemes\n :selectedServer />\n </div>\n <div>\n <ServerSelector\n :eventBus\n :selectedServer\n :servers=\"document.servers ?? []\" />\n </div>\n </div>\n</template>\n\n<style scoped>\n.docSettings {\n display: flex;\n flex-direction: column;\n gap: 12px;\n margin-bottom: 12px;\n font-size: var(--scalar-font-size-3);\n max-height: 600px;\n}\n\n.documentName {\n font-weight: var(--scalar-semibold);\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;EAeA,IAAM,EAAE,mBAAgB,WAAQ,gBAAa,GAAS,EAEhD,IAAc,QAClB,EAAqB,GAAgB,EAAA,SAAS,CAChD,EAEM,IAAiB,QAKd,EAJS,EAAW,EAAA,SAAS,SAAS,EAC3C,aAAa,EAAA,SAAS,iCACvB,CAAA,EAEiC,EAAA,SAAS,4BAA2B,CACvE,EAEK,IAAkB,QAChB,EAAA,SAAS,YAAY,mBAAmB,EAAE,CAClD;yBAIE,EAkBM,OAlBN,GAkBM,CAjBJ,EAUM,OAAA,MAAA,CATJ,EAQoB,GAAA;GAPjB,WAAW,EAAA,EAAc,CAAC;GAC1B,UAAA,EAAA;GACA,aAAA,EAAA;GACA,UAAA,EAAA,EAAQ;GACR,MAAA,EAAA;GACA,SAAS,EAAA,EAAM;GACf,iBAAA,EAAA;GACA,gBAAA,EAAA;;;;;;;;;;QAEL,EAKM,OAAA,MAAA,CAJJ,EAGsC,GAAA;GAFnC,UAAA,EAAA,EAAQ;GACR,gBAAA,EAAA;GACA,SAAS,EAAA,SAAS,WAAO,EAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import e from "../../_virtual/_plugin-vue_export-helper.js";
|
|
2
|
+
import t from "./Settings.vue.script.js";
|
|
3
|
+
/* empty css */
|
|
4
|
+
/* empty css */
|
|
5
|
+
//#region src/views/Settings/Settings.vue
|
|
6
|
+
var n = /* @__PURE__ */ e(t, [["__scopeId", "data-v-5e4bca68"]]);
|
|
7
|
+
//#endregion
|
|
8
|
+
export { n as default };
|
|
9
|
+
|
|
10
|
+
//# sourceMappingURL=Settings.vue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Settings.vue.js","names":[],"sources":["../../../src/views/Settings/Settings.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport {\n ScalarColorModeToggle,\n ScalarModal,\n ScalarTextInput,\n type ModalState,\n} from '@scalar/components'\nimport { ScalarIconCaretDown, ScalarIconCaretRight } from '@scalar/icons'\n\nimport { URLS } from '@/consts/urls'\nimport { useState } from '@/state/state'\nimport DocSettings from '@/views/Settings/DocSettings.vue'\n\nconst { modalState } = defineProps<{\n modalState: ModalState\n}>()\n\nconst { workspaceStore, proxyUrlRaw } = useState()\n\nfunction selectDocument(name: string) {\n workspaceStore.update('x-scalar-active-document', name)\n}\n</script>\n\n<template>\n <ScalarModal\n class=\"settingsModal\"\n :state=\"modalState\">\n <div class=\"settingsHeading\">\n <h1>Settings</h1>\n <ScalarColorModeToggle class=\"colorToggle ml-auto\" />\n </div>\n <div class=\"documentList\">\n <template\n v-if=\"Object.entries(workspaceStore.workspace.documents).length\">\n <div\n v-for=\"[name, document] of Object.entries(\n workspaceStore.workspace.documents,\n )\"\n :key=\"name\"\n class=\"document\">\n <button\n class=\"documentName\"\n :class=\"{\n documentNameActive:\n workspaceStore.workspace.activeDocument === document,\n }\"\n type=\"button\"\n @click=\"selectDocument(name)\">\n @{{ name }}\n <ScalarIconCaretDown\n v-if=\"workspaceStore.workspace.activeDocument === document\" />\n <ScalarIconCaretRight v-else />\n </button>\n <div v-if=\"workspaceStore.workspace.activeDocument === document\">\n <DocSettings\n :document\n :name />\n </div>\n </div>\n </template>\n <div\n v-else\n class=\"noDocuments\">\n There's no API definition loaded. Use the + button to load APIs.\n </div>\n </div>\n\n <div class=\"proxyUrlContainer\">\n <label for=\"proxyUrl\">CORS Proxy</label>\n <p>\n All requests will be sent through the specified proxy URL to help avoid\n CORS (Cross-Origin Resource Sharing) issues.\n <a\n class=\"underline\"\n :href=\"URLS.PROXY_SOURCE_CODE\"\n target=\"_blank\">\n Read more\n </a>\n </p>\n <ScalarTextInput\n id=\"proxyUrl\"\n v-model=\"proxyUrlRaw\"\n label=\"Proxy URL\"\n :placeholder=\"URLS.DEFAULT_PROXY_URL\" />\n </div>\n </ScalarModal>\n</template>\n\n<style>\n/* Prevent auth method dropdown from going behind the modal */\n.settingsModal .scalar-modal-layout {\n z-index: 10 !important;\n}\n\n.settingsModal .scalar-modal-body {\n overflow-y: auto;\n overflow-x: hidden;\n}\n</style>\n\n<style scoped>\n.documentList {\n display: flex;\n flex-direction: column;\n font-size: var(--scalar-font-size-3);\n margin-bottom: 12px;\n}\n\n.document {\n display: flex;\n flex-direction: column;\n width: calc(100% + 24px);\n left: -12px;\n position: relative;\n padding: 0 12px;\n border-top: var(--scalar-border-width) solid var(--scalar-border-color);\n border-bottom: var(--scalar-border-width) solid var(--scalar-border-color);\n}\n.document:first-of-type:not(:last-of-type) {\n border-bottom: none;\n}\n\n.documentName {\n gap: 4px;\n display: flex;\n align-items: center;\n font-weight: var(--scalar-semibold);\n color: var(--scalar-color-2);\n padding: 12px 0;\n}\n\n.documentNameActive {\n color: var(--scalar-color-1);\n}\n\n.settingsHeading {\n font-size: 19px;\n margin-bottom: 12px;\n display: flex;\n gap: 5px;\n align-items: center;\n font-weight: var(--scalar-semibold);\n}\n\n.proxyUrlContainer {\n font-size: var(--scalar-font-size-3);\n display: flex;\n gap: 5px;\n flex-direction: column;\n}\n.proxyUrlContainer label {\n font-weight: var(--scalar-semibold);\n}\n.noDocuments {\n color: var(--scalar-color-2);\n margin-bottom: 10px;\n}\n</style>\n"],"mappings":""}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { URLS as e } from "../../consts/urls.js";
|
|
2
|
+
import { useState as t } from "../../state/state.js";
|
|
3
|
+
import n from "./DocSettings.vue.js";
|
|
4
|
+
import { Fragment as r, createBlock as i, createCommentVNode as a, createElementBlock as o, createElementVNode as s, createTextVNode as c, createVNode as l, defineComponent as u, isRef as d, normalizeClass as f, openBlock as p, renderList as m, toDisplayString as h, unref as g, withCtx as _ } from "vue";
|
|
5
|
+
import { ScalarColorModeToggle as v, ScalarModal as y, ScalarTextInput as b } from "@scalar/components";
|
|
6
|
+
import { ScalarIconCaretDown as x, ScalarIconCaretRight as S } from "@scalar/icons";
|
|
7
|
+
//#region src/views/Settings/Settings.vue?vue&type=script&setup=true&lang.ts
|
|
8
|
+
var C = { class: "settingsHeading" }, w = { class: "documentList" }, T = ["onClick"], E = { key: 0 }, D = {
|
|
9
|
+
key: 1,
|
|
10
|
+
class: "noDocuments"
|
|
11
|
+
}, O = { class: "proxyUrlContainer" }, k = ["href"], A = /* @__PURE__ */ u({
|
|
12
|
+
__name: "Settings",
|
|
13
|
+
props: { modalState: {} },
|
|
14
|
+
setup(u) {
|
|
15
|
+
let { workspaceStore: A, proxyUrlRaw: j } = t();
|
|
16
|
+
function M(e) {
|
|
17
|
+
A.update("x-scalar-active-document", e);
|
|
18
|
+
}
|
|
19
|
+
return (t, N) => (p(), i(g(y), {
|
|
20
|
+
class: "settingsModal",
|
|
21
|
+
state: u.modalState
|
|
22
|
+
}, {
|
|
23
|
+
default: _(() => [
|
|
24
|
+
s("div", C, [N[1] ||= s("h1", null, "Settings", -1), l(g(v), { class: "colorToggle ml-auto" })]),
|
|
25
|
+
s("div", w, [Object.entries(g(A).workspace.documents).length ? (p(!0), o(r, { key: 0 }, m(Object.entries(g(A).workspace.documents), ([e, t]) => (p(), o("div", {
|
|
26
|
+
key: e,
|
|
27
|
+
class: "document"
|
|
28
|
+
}, [s("button", {
|
|
29
|
+
class: f(["documentName", { documentNameActive: g(A).workspace.activeDocument === t }]),
|
|
30
|
+
type: "button",
|
|
31
|
+
onClick: (t) => M(e)
|
|
32
|
+
}, [c(" @" + h(e) + " ", 1), g(A).workspace.activeDocument === t ? (p(), i(g(x), { key: 0 })) : (p(), i(g(S), { key: 1 }))], 10, T), g(A).workspace.activeDocument === t ? (p(), o("div", E, [l(n, {
|
|
33
|
+
document: t,
|
|
34
|
+
name: e
|
|
35
|
+
}, null, 8, ["document", "name"])])) : a("", !0)]))), 128)) : (p(), o("div", D, " There's no API definition loaded. Use the + button to load APIs. "))]),
|
|
36
|
+
s("div", O, [
|
|
37
|
+
N[3] ||= s("label", { for: "proxyUrl" }, "CORS Proxy", -1),
|
|
38
|
+
s("p", null, [N[2] ||= c(" All requests will be sent through the specified proxy URL to help avoid CORS (Cross-Origin Resource Sharing) issues. ", -1), s("a", {
|
|
39
|
+
class: "underline",
|
|
40
|
+
href: g(e).PROXY_SOURCE_CODE,
|
|
41
|
+
target: "_blank"
|
|
42
|
+
}, " Read more ", 8, k)]),
|
|
43
|
+
l(g(b), {
|
|
44
|
+
id: "proxyUrl",
|
|
45
|
+
modelValue: g(j),
|
|
46
|
+
"onUpdate:modelValue": N[0] ||= (e) => d(j) ? j.value = e : null,
|
|
47
|
+
label: "Proxy URL",
|
|
48
|
+
placeholder: g(e).DEFAULT_PROXY_URL
|
|
49
|
+
}, null, 8, ["modelValue", "placeholder"])
|
|
50
|
+
])
|
|
51
|
+
]),
|
|
52
|
+
_: 1
|
|
53
|
+
}, 8, ["state"]));
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
//#endregion
|
|
57
|
+
export { A as default };
|
|
58
|
+
|
|
59
|
+
//# sourceMappingURL=Settings.vue.script.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Settings.vue.script.js","names":[],"sources":["../../../src/views/Settings/Settings.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport {\n ScalarColorModeToggle,\n ScalarModal,\n ScalarTextInput,\n type ModalState,\n} from '@scalar/components'\nimport { ScalarIconCaretDown, ScalarIconCaretRight } from '@scalar/icons'\n\nimport { URLS } from '@/consts/urls'\nimport { useState } from '@/state/state'\nimport DocSettings from '@/views/Settings/DocSettings.vue'\n\nconst { modalState } = defineProps<{\n modalState: ModalState\n}>()\n\nconst { workspaceStore, proxyUrlRaw } = useState()\n\nfunction selectDocument(name: string) {\n workspaceStore.update('x-scalar-active-document', name)\n}\n</script>\n\n<template>\n <ScalarModal\n class=\"settingsModal\"\n :state=\"modalState\">\n <div class=\"settingsHeading\">\n <h1>Settings</h1>\n <ScalarColorModeToggle class=\"colorToggle ml-auto\" />\n </div>\n <div class=\"documentList\">\n <template\n v-if=\"Object.entries(workspaceStore.workspace.documents).length\">\n <div\n v-for=\"[name, document] of Object.entries(\n workspaceStore.workspace.documents,\n )\"\n :key=\"name\"\n class=\"document\">\n <button\n class=\"documentName\"\n :class=\"{\n documentNameActive:\n workspaceStore.workspace.activeDocument === document,\n }\"\n type=\"button\"\n @click=\"selectDocument(name)\">\n @{{ name }}\n <ScalarIconCaretDown\n v-if=\"workspaceStore.workspace.activeDocument === document\" />\n <ScalarIconCaretRight v-else />\n </button>\n <div v-if=\"workspaceStore.workspace.activeDocument === document\">\n <DocSettings\n :document\n :name />\n </div>\n </div>\n </template>\n <div\n v-else\n class=\"noDocuments\">\n There's no API definition loaded. Use the + button to load APIs.\n </div>\n </div>\n\n <div class=\"proxyUrlContainer\">\n <label for=\"proxyUrl\">CORS Proxy</label>\n <p>\n All requests will be sent through the specified proxy URL to help avoid\n CORS (Cross-Origin Resource Sharing) issues.\n <a\n class=\"underline\"\n :href=\"URLS.PROXY_SOURCE_CODE\"\n target=\"_blank\">\n Read more\n </a>\n </p>\n <ScalarTextInput\n id=\"proxyUrl\"\n v-model=\"proxyUrlRaw\"\n label=\"Proxy URL\"\n :placeholder=\"URLS.DEFAULT_PROXY_URL\" />\n </div>\n </ScalarModal>\n</template>\n\n<style>\n/* Prevent auth method dropdown from going behind the modal */\n.settingsModal .scalar-modal-layout {\n z-index: 10 !important;\n}\n\n.settingsModal .scalar-modal-body {\n overflow-y: auto;\n overflow-x: hidden;\n}\n</style>\n\n<style scoped>\n.documentList {\n display: flex;\n flex-direction: column;\n font-size: var(--scalar-font-size-3);\n margin-bottom: 12px;\n}\n\n.document {\n display: flex;\n flex-direction: column;\n width: calc(100% + 24px);\n left: -12px;\n position: relative;\n padding: 0 12px;\n border-top: var(--scalar-border-width) solid var(--scalar-border-color);\n border-bottom: var(--scalar-border-width) solid var(--scalar-border-color);\n}\n.document:first-of-type:not(:last-of-type) {\n border-bottom: none;\n}\n\n.documentName {\n gap: 4px;\n display: flex;\n align-items: center;\n font-weight: var(--scalar-semibold);\n color: var(--scalar-color-2);\n padding: 12px 0;\n}\n\n.documentNameActive {\n color: var(--scalar-color-1);\n}\n\n.settingsHeading {\n font-size: 19px;\n margin-bottom: 12px;\n display: flex;\n gap: 5px;\n align-items: center;\n font-weight: var(--scalar-semibold);\n}\n\n.proxyUrlContainer {\n font-size: var(--scalar-font-size-3);\n display: flex;\n gap: 5px;\n flex-direction: column;\n}\n.proxyUrlContainer label {\n font-weight: var(--scalar-semibold);\n}\n.noDocuments {\n color: var(--scalar-color-2);\n margin-bottom: 10px;\n}\n</style>\n"],"mappings":";;;;;;;;;;;;;;EAiBA,IAAM,EAAE,mBAAgB,mBAAgB,GAAS;EAEjD,SAAS,EAAe,GAAc;AACpC,KAAe,OAAO,4BAA4B,EAAI;;yBAKtD,EA6Dc,EAAA,EAAA,EAAA;GA5DZ,OAAM;GACL,OAAO,EAAA;;oBAIF;IAHN,EAGM,OAHN,GAGM,CAAA,AAAA,EAAA,OAFJ,EAAiB,MAAA,MAAb,YAAQ,GAAA,EACZ,EAAqD,EAAA,EAAA,EAAA,EAA9B,OAAM,uBAAqB,CAAA,CAAA,CAAA;IAEpD,EAkCM,OAlCN,GAkCM,CAhCI,OAAO,QAAQ,EAAA,EAAc,CAAC,UAAU,UAAS,CAAE,UAAA,EAAA,GAAA,EACzD,EAwBM,GAAA,EAAA,KAAA,GAAA,EAAA,EAvBuB,OAAO,QAAqB,EAAA,EAAc,CAAC,UAAU,UAAA,GAAA,CAAxE,GAAM,aADhB,EAwBM,OAAA;KApBH,KAAK;KACN,OAAM;QACN,EAYS,UAAA;KAXP,OAAK,EAAA,CAAC,gBAAc,EAAA,oBACwC,EAAA,EAAc,CAAC,UAAU,mBAAmB,GAAA,CAAA,CAAA;KAIxG,MAAK;KACJ,UAAK,MAAE,EAAe,EAAI;UAAG,OAC7B,EAAG,EAAI,GAAG,KACX,EAAA,EACQ,EAAA,EAAc,CAAC,UAAU,mBAAmB,KAAA,GAAA,EADpD,EACgE,EAAA,EAAA,EAAA,EAAA,KAAA,GAAA,CAAA,KAAA,GAAA,EAChE,EAA+B,EAAA,EAAA,EAAA,EAAA,KAAA,GAAA,CAAA,EAAA,EAAA,IAAA,EAAA,EAEtB,EAAA,EAAc,CAAC,UAAU,mBAAmB,KAAA,GAAA,EAAvD,EAIM,OAAA,GAAA,CAHJ,EAEU,GAAA;KADP;KACA;wEAIT,EAIM,OAJN,GAEsB,qEAEtB,EAAA,CAAA;IAGF,EAiBM,OAjBN,GAiBM;cAhBJ,EAAwC,SAAA,EAAjC,KAAI,YAAU,EAAC,cAAU,GAAA;KAChC,EASI,KAAA,MAAA,CAAA,AAAA,EAAA,OAAA,EATD,0HAGD,GAAA,EAAA,EAKI,KAAA;MAJF,OAAM;MACL,MAAM,EAAA,EAAI,CAAC;MACZ,QAAO;QAAS,eAElB,GAAA,EAAA,CAAA,CAAA;KAEF,EAI0C,EAAA,EAAA,EAAA;MAHxC,IAAG;kBACM,EAAA,EAAW;sDAAA,QAAA,IAAA;MACpB,OAAM;MACL,aAAa,EAAA,EAAI,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import e from "../_virtual/_plugin-vue_export-helper.js";
|
|
2
|
+
import t from "./Start.vue.script.js";
|
|
3
|
+
/* empty css */
|
|
4
|
+
//#region src/views/Start.vue
|
|
5
|
+
var n = /* @__PURE__ */ e(t, [["__scopeId", "data-v-56f7e8dd"]]);
|
|
6
|
+
//#endregion
|
|
7
|
+
export { n as default };
|
|
8
|
+
|
|
9
|
+
//# sourceMappingURL=Start.vue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Start.vue.js","names":[],"sources":["../../src/views/Start.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport Logo from '@/components/Logo.vue'\nimport { URLS } from '@/consts/urls'\nimport { useState } from '@/state/state'\nimport PromptForm from '@/views/PromptForm.vue'\n\nconst emit = defineEmits<{\n (e: 'submit'): void\n (e: 'uploadApi'): void\n}>()\n\nconst { mode } = useState()\n</script>\n\n<template>\n <div class=\"startContainer\">\n <Logo class=\"agentLogo\" />\n <h1 class=\"heading\">How can I help you today?</h1>\n <PromptForm\n ref=\"promptFormField\"\n @submit=\"emit('submit')\"\n @uploadApi=\"emit('uploadApi')\" />\n <p class=\"disclaimerText\">\n <template v-if=\"mode === 'preview'\">\n By messaging Agent Scalar your OpenAPI document will be temporarily\n uploaded to Scalar's servers. You must agree to our\n </template>\n <template v-else>By messaging Agent Scalar you agree to our </template>\n <a\n class=\"disclaimerLink\"\n :href=\"URLS.TERMS_AND_CONDITIONS\"\n target=\"_blank\"\n >Terms</a\n >\n and\n <a\n class=\"disclaimerLink\"\n :href=\"URLS.PRIVACY_POLICY\"\n target=\"_blank\"\n >Privacy Policy</a\n >.\n </p>\n </div>\n</template>\n\n<style scoped>\n.agentLogo {\n margin-bottom: 15px;\n}\n\n.startContainer {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n max-width: 720px;\n position: relative;\n}\n\n.heading {\n font-size: 1.5rem;\n font-weight: var(--scalar-font-bold);\n margin-bottom: 50px;\n}\n\n.disclaimerText {\n text-align: center;\n color: var(--scalar-color-3);\n font-size: var(--scalar-font-size-3);\n text-wrap: balance;\n line-height: 1.44;\n margin-top: 40px;\n}\n\n.disclaimerLink {\n text-decoration: underline;\n}\n</style>\n"],"mappings":""}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { URLS as e } from "../consts/urls.js";
|
|
2
|
+
import { useState as t } from "../state/state.js";
|
|
3
|
+
import n from "./PromptForm.vue.js";
|
|
4
|
+
import r from "../components/Logo.vue.js";
|
|
5
|
+
import { Fragment as i, createElementBlock as a, createElementVNode as o, createTextVNode as s, createVNode as c, defineComponent as l, openBlock as u, unref as d } from "vue";
|
|
6
|
+
//#region src/views/Start.vue?vue&type=script&setup=true&lang.ts
|
|
7
|
+
var f = { class: "startContainer" }, p = { class: "disclaimerText" }, m = ["href"], h = ["href"], g = /* @__PURE__ */ l({
|
|
8
|
+
__name: "Start",
|
|
9
|
+
emits: ["submit", "uploadApi"],
|
|
10
|
+
setup(l, { emit: g }) {
|
|
11
|
+
let _ = g, { mode: v } = t();
|
|
12
|
+
return (t, l) => (u(), a("div", f, [
|
|
13
|
+
c(r, { class: "agentLogo" }),
|
|
14
|
+
l[4] ||= o("h1", { class: "heading" }, "How can I help you today?", -1),
|
|
15
|
+
c(n, {
|
|
16
|
+
ref: "promptFormField",
|
|
17
|
+
onSubmit: l[0] ||= (e) => _("submit"),
|
|
18
|
+
onUploadApi: l[1] ||= (e) => _("uploadApi")
|
|
19
|
+
}, null, 512),
|
|
20
|
+
o("p", p, [
|
|
21
|
+
d(v) === "preview" ? (u(), a(i, { key: 0 }, [s(" By messaging Agent Scalar your OpenAPI document will be temporarily uploaded to Scalar's servers. You must agree to our ")], 64)) : (u(), a(i, { key: 1 }, [s("By messaging Agent Scalar you agree to our ")], 64)),
|
|
22
|
+
o("a", {
|
|
23
|
+
class: "disclaimerLink",
|
|
24
|
+
href: d(e).TERMS_AND_CONDITIONS,
|
|
25
|
+
target: "_blank"
|
|
26
|
+
}, "Terms", 8, m),
|
|
27
|
+
l[2] ||= s(" and ", -1),
|
|
28
|
+
o("a", {
|
|
29
|
+
class: "disclaimerLink",
|
|
30
|
+
href: d(e).PRIVACY_POLICY,
|
|
31
|
+
target: "_blank"
|
|
32
|
+
}, "Privacy Policy", 8, h),
|
|
33
|
+
l[3] ||= s(". ", -1)
|
|
34
|
+
])
|
|
35
|
+
]));
|
|
36
|
+
}
|
|
37
|
+
});
|
|
38
|
+
//#endregion
|
|
39
|
+
export { g as default };
|
|
40
|
+
|
|
41
|
+
//# sourceMappingURL=Start.vue.script.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Start.vue.script.js","names":[],"sources":["../../src/views/Start.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport Logo from '@/components/Logo.vue'\nimport { URLS } from '@/consts/urls'\nimport { useState } from '@/state/state'\nimport PromptForm from '@/views/PromptForm.vue'\n\nconst emit = defineEmits<{\n (e: 'submit'): void\n (e: 'uploadApi'): void\n}>()\n\nconst { mode } = useState()\n</script>\n\n<template>\n <div class=\"startContainer\">\n <Logo class=\"agentLogo\" />\n <h1 class=\"heading\">How can I help you today?</h1>\n <PromptForm\n ref=\"promptFormField\"\n @submit=\"emit('submit')\"\n @uploadApi=\"emit('uploadApi')\" />\n <p class=\"disclaimerText\">\n <template v-if=\"mode === 'preview'\">\n By messaging Agent Scalar your OpenAPI document will be temporarily\n uploaded to Scalar's servers. You must agree to our\n </template>\n <template v-else>By messaging Agent Scalar you agree to our </template>\n <a\n class=\"disclaimerLink\"\n :href=\"URLS.TERMS_AND_CONDITIONS\"\n target=\"_blank\"\n >Terms</a\n >\n and\n <a\n class=\"disclaimerLink\"\n :href=\"URLS.PRIVACY_POLICY\"\n target=\"_blank\"\n >Privacy Policy</a\n >.\n </p>\n </div>\n</template>\n\n<style scoped>\n.agentLogo {\n margin-bottom: 15px;\n}\n\n.startContainer {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n width: 100%;\n height: 100%;\n max-width: 720px;\n position: relative;\n}\n\n.heading {\n font-size: 1.5rem;\n font-weight: var(--scalar-font-bold);\n margin-bottom: 50px;\n}\n\n.disclaimerText {\n text-align: center;\n color: var(--scalar-color-3);\n font-size: var(--scalar-font-size-3);\n text-wrap: balance;\n line-height: 1.44;\n margin-top: 40px;\n}\n\n.disclaimerLink {\n text-decoration: underline;\n}\n</style>\n"],"mappings":";;;;;;;;;;EAMA,IAAM,IAAO,GAKP,EAAE,YAAS,GAAS;yBAIxB,EA2BM,OA3BN,GA2BM;GA1BJ,EAA0B,GAAA,EAApB,OAAM,aAAW,CAAA;YACvB,EAAkD,MAAA,EAA9C,OAAM,WAAS,EAAC,6BAAyB,GAAA;GAC7C,EAGmC,GAAA;IAFjC,KAAI;IACH,UAAM,AAAA,EAAA,QAAA,MAAE,EAAI,SAAA;IACZ,aAAS,AAAA,EAAA,QAAA,MAAE,EAAI,YAAA;;GAClB,EAmBI,KAnBJ,GAmBI;IAlBc,EAAA,EAAI,KAAA,aAAA,GAAA,EAApB,EAGW,GAAA,EAAA,KAAA,GAAA,EAAA,CAAA,EAHyB,4HAGpC,CAAA,EAAA,GAAA,KAAA,GAAA,EACA,EAAuE,GAAA,EAAA,KAAA,GAAA,EAAA,CAAA,EAAtD,8CAA2C,CAAA,EAAA,GAAA;IAC5D,EAKC,KAAA;KAJC,OAAM;KACL,MAAM,EAAA,EAAI,CAAC;KACZ,QAAO;OACN,SAAK,GAAA,EAAA;eACP,SAED,GAAA;IAAA,EAKC,KAAA;KAJC,OAAM;KACL,MAAM,EAAA,EAAI,CAAC;KACZ,QAAO;OACN,kBAAc,GAAA,EAAA;eAChB,MACH,GAAA"}
|
package/package.json
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
"url": "git+https://github.com/scalar/scalar.git",
|
|
11
11
|
"directory": "packages/agent-chat"
|
|
12
12
|
},
|
|
13
|
-
"version": "0.9.
|
|
13
|
+
"version": "0.9.13",
|
|
14
14
|
"engines": {
|
|
15
15
|
"node": ">=22"
|
|
16
16
|
},
|
|
@@ -45,21 +45,21 @@
|
|
|
45
45
|
"@ai-sdk/vue": "3.0.33",
|
|
46
46
|
"@vueuse/core": "13.9.0",
|
|
47
47
|
"ai": "6.0.33",
|
|
48
|
-
"neverpanic": "0.0.
|
|
48
|
+
"neverpanic": "0.0.7",
|
|
49
49
|
"truncate-json": "3.0.1",
|
|
50
50
|
"vue": "^3.5.26",
|
|
51
51
|
"whatwg-mimetype": "4.0.0",
|
|
52
52
|
"zod": "^4.3.5",
|
|
53
|
-
"@scalar/
|
|
54
|
-
"@scalar/components": "0.20.12",
|
|
53
|
+
"@scalar/components": "0.21.0",
|
|
55
54
|
"@scalar/helpers": "0.4.2",
|
|
56
|
-
"@scalar/
|
|
55
|
+
"@scalar/api-client": "2.39.0",
|
|
56
|
+
"@scalar/json-magic": "0.12.4",
|
|
57
|
+
"@scalar/icons": "0.6.4",
|
|
57
58
|
"@scalar/openapi-types": "0.6.1",
|
|
58
59
|
"@scalar/themes": "0.15.1",
|
|
59
|
-
"@scalar/json-magic": "0.12.4",
|
|
60
60
|
"@scalar/types": "0.7.4",
|
|
61
61
|
"@scalar/use-toasts": "0.10.1",
|
|
62
|
-
"@scalar/workspace-store": "0.
|
|
62
|
+
"@scalar/workspace-store": "0.41.0"
|
|
63
63
|
},
|
|
64
64
|
"devDependencies": {
|
|
65
65
|
"@modelcontextprotocol/sdk": "1.26.0",
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import e, { z as t } from "zod";
|
|
2
|
-
//#region src/entities/error/helpers.ts
|
|
3
|
-
function n(e, t) {
|
|
4
|
-
return {
|
|
5
|
-
code: e,
|
|
6
|
-
detail: t
|
|
7
|
-
};
|
|
8
|
-
}
|
|
9
|
-
//#endregion
|
|
10
|
-
//#region src/entities/registry/document.ts
|
|
11
|
-
var r = e.object({
|
|
12
|
-
id: e.string(),
|
|
13
|
-
title: e.string(),
|
|
14
|
-
namespace: e.string(),
|
|
15
|
-
currentVersion: e.string(),
|
|
16
|
-
logoUrl: e.url().nullable(),
|
|
17
|
-
slug: e.string()
|
|
18
|
-
}), i = { LIMIT_REACHED: "LIMIT_REACHED" }, a = 1e4, o = "ask-for-authentication", s = t.object({ uniqueIdentifier: t.string() }), c = "---", l = "execute-request", u = t.object({
|
|
19
|
-
method: t.string(),
|
|
20
|
-
path: t.string(),
|
|
21
|
-
headers: t.record(t.string(), t.string()).optional(),
|
|
22
|
-
body: t.string().optional(),
|
|
23
|
-
documentIdentifier: t.string()
|
|
24
|
-
}), d = "get-mini-openapi-spec", f = t.object({ question: t.string() }), p = "get-openapi-specs-summary";
|
|
25
|
-
//#endregion
|
|
26
|
-
export { u as a, s as c, r as d, n as f, l as i, a as l, d as n, c as o, f as r, o as s, p as t, i as u };
|
|
27
|
-
|
|
28
|
-
//# sourceMappingURL=entities-NWeuOkBB.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"entities-NWeuOkBB.js","names":[],"sources":["../src/entities/error/helpers.ts","../src/entities/registry/document.ts","../src/entities/error/constants.ts","../src/entities/prompt/constants.ts","../src/entities/tools/ask-for-authentication.ts","../src/entities/tools/constants.ts","../src/entities/tools/execute-request.ts","../src/entities/tools/get-mini-openapi-spec.ts","../src/entities/tools/get-openapi-spec-summary.ts"],"sourcesContent":["import type { AgentChatError } from './constants'\n\nexport function createError<const T extends string, D>(code: T, detail: D): AgentChatError<T, D> {\n return {\n code,\n detail,\n }\n}\n","import type { OpenAPIV3_1 } from '@scalar/openapi-types'\nimport type { SecurityScheme } from '@scalar/types/entities'\nimport z from 'zod'\n\nexport const registryApiMetadata = z.object({\n id: z.string(),\n title: z.string(),\n namespace: z.string(),\n currentVersion: z.string(),\n logoUrl: z.url().nullable(),\n slug: z.string(),\n})\n\nexport type ApiMetadata = z.infer<typeof registryApiMetadata> & { removable?: boolean; searchEnabled?: boolean }\n\nexport type RegistryDocument = { namespace: string; slug: string }\n\nexport type DocumentSettings = Record<\n string,\n {\n securitySchemes: SecurityScheme[]\n activeServer: OpenAPIV3_1.ServerObject | undefined\n }\n>\n","export type AgentChatError<T extends string = string, D = unknown> = {\n code: T\n detail: D\n}\n\nexport const AgentErrorCodes = {\n LIMIT_REACHED: 'LIMIT_REACHED',\n} as const\n","export const MAX_PROMPT_SIZE = 10_000\n","import { z } from 'zod'\n\nexport const ASK_FOR_AUTHENTICATION_TOOL_NAME = 'ask-for-authentication' as const\n\nexport const askForAuthenticationInputSchema = z.object({\n uniqueIdentifier: z.string(),\n})\n\nexport type AskForAuthenticationInput = z.input<typeof askForAuthenticationInputSchema>\n","export const TOOL_NAMESPACE_SLUG_DELIMITER = '---'\n","import type { Result } from 'neverpanic'\nimport { z } from 'zod'\n\nimport type { AgentChatError } from '@/entities/error/constants'\n\nexport const EXECUTE_CLIENT_SIDE_REQUEST_TOOL_NAME = 'execute-request' as const\n\nexport const executeClientSideRequestToolInputSchema = z.object({\n method: z.string(),\n path: z.string(),\n headers: z.record(z.string(), z.string()).optional(),\n body: z.string().optional(),\n documentIdentifier: z.string(),\n})\n\nexport type ExecuteClientSideRequestToolInput = z.input<typeof executeClientSideRequestToolInputSchema>\n\nexport type ExecuteClientSideRequestToolOutput = Result<\n { status: number; responseBody?: unknown; headers: {} },\n | AgentChatError<\n 'FAILED_TO_PARSE_RESPONSE_BODY',\n {\n originalError: unknown\n }\n >\n | AgentChatError<\n 'REQUEST_NOT_OK',\n {\n status: number\n url: string\n responseBody: unknown\n headers: Record<string, string>\n }\n >\n | AgentChatError<\n 'FAILED_TO_FETCH',\n {\n originalError: unknown\n }\n >\n | AgentChatError<\n 'DOCUMENT_SETTINGS_COULD_NOT_BE_DETERMINED',\n {\n documentName: string\n namespace: string\n slug: string\n }\n >\n | AgentChatError<'FAILED_TO_DETERMINE_DOCUMENT', { namespace?: string; slug?: string; documentIdentifier: string }>\n | AgentChatError<'FAILED_TO_EXECUTE_REQUEST', unknown>\n>\n","import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js'\nimport type { OpenAPIV3_1 } from '@scalar/openapi-types'\nimport { z } from 'zod'\n\nexport const GET_MINI_OPENAPI_SPEC_TOOL_NAME = 'get-mini-openapi-spec' as const\n\nexport const getMiniOpenAPIDocToolInputSchema = z.object({\n question: z.string(),\n})\n\nexport type GetMiniOpenAPIDocToolInput = z.input<typeof getMiniOpenAPIDocToolInputSchema>\n\nexport type GetMiniOpenAPIDocToolOutput = CallToolResult & {\n structuredContent: Partial<OpenAPIV3_1.Document>\n}\n","import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js'\nimport type { OpenAPIV3_1 } from '@scalar/openapi-types'\n\nexport const GET_OPENAPI_SPECS_SUMMARY_TOOL_NAME = 'get-openapi-specs-summary' as const\n\nexport type GetOpenAPISpecsSummaryToolOutput = CallToolResult & {\n structuredContent: {\n info?: OpenAPIV3_1.InfoObject\n paths: string[]\n }\n}\n"],"mappings":";;AAEA,SAAgB,EAAuC,GAAS,GAAiC;AAC/F,QAAO;EACL;EACA;EACD;;;;ACFH,IAAa,IAAsB,EAAE,OAAO;CAC1C,IAAI,EAAE,QAAQ;CACd,OAAO,EAAE,QAAQ;CACjB,WAAW,EAAE,QAAQ;CACrB,gBAAgB,EAAE,QAAQ;CAC1B,SAAS,EAAE,KAAK,CAAC,UAAU;CAC3B,MAAM,EAAE,QAAQ;CACjB,CAAC,ECNW,IAAkB,EAC7B,eAAe,iBAChB,ECPY,IAAkB,KCElB,IAAmC,0BAEnC,IAAkC,EAAE,OAAO,EACtD,kBAAkB,EAAE,QAAQ,EAC7B,CAAC,ECNW,IAAgC,OCKhC,IAAwC,mBAExC,IAA0C,EAAE,OAAO;CAC9D,QAAQ,EAAE,QAAQ;CAClB,MAAM,EAAE,QAAQ;CAChB,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,QAAQ,CAAC,CAAC,UAAU;CACpD,MAAM,EAAE,QAAQ,CAAC,UAAU;CAC3B,oBAAoB,EAAE,QAAQ;CAC/B,CAAC,ECTW,IAAkC,yBAElC,IAAmC,EAAE,OAAO,EACvD,UAAU,EAAE,QAAQ,EACrB,CAAC,ECLW,IAAsC"}
|