@scalar/agent-chat 0.9.13 → 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.
package/dist/App.vue.d.ts CHANGED
@@ -5,6 +5,7 @@ type __VLS_Props = {
5
5
  registryDocuments: RegistryDocument[];
6
6
  registryUrl: string;
7
7
  dashboardUrl: string;
8
+ platformProxyUrl: string;
8
9
  baseUrl: string;
9
10
  mode?: ChatMode;
10
11
  getAccessToken?: () => string;
@@ -27,6 +28,7 @@ declare const state: {
27
28
  registryUrl: string;
28
29
  dashboardUrl: string;
29
30
  baseUrl: string;
31
+ platformProxyUrl: string;
30
32
  isLoggedIn?: Ref<boolean>;
31
33
  registryDocuments: Ref<import("./entities/index.js").ApiMetadata[]>;
32
34
  pendingDocuments: Record<string, boolean>;
@@ -1 +1 @@
1
- {"version":3,"file":"App.vue.d.ts","sourceRoot":"","sources":["../src/App.vue"],"names":[],"mappings":"AAsEA,OAAO,EAAW,KAAK,GAAG,EAAE,MAAM,KAAK,CAAA;AAGvC,OAAO,EAA6B,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAChF,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,SAAS,CAAA;AAEvC,KAAK,WAAW,GAAG;IACjB,iBAAiB,EAAE,gBAAgB,EAAE,CAAA;IACrC,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,QAAQ,CAAA;IACf,cAAc,CAAC,EAAE,MAAM,MAAM,CAAA;IAC7B,WAAW,CAAC,EAAE,MAAM,MAAM,CAAA;IAC1B,qBAAqB,CAAC,EAAE,MAAM,MAAM,CAAA;IACpC,UAAU,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;IACzB,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC9B,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB,CAAC;AAqBF,QAAA,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;iBAkCU,CAAC;WACnB,CAAC;;;;;iBAC2C,CAAC;;;;;;;;;;;;;CAxB9C,CAAA;AAIF,MAAM,MAAM,WAAW,GAAG;IACxB,gBAAgB,EAAE,OAAO,KAAK,CAAC,gBAAgB,CAAA;CAChD,CAAA;AA8CD,QAAA,MAAM,YAAY;;;;kFAIhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
1
+ {"version":3,"file":"App.vue.d.ts","sourceRoot":"","sources":["../src/App.vue"],"names":[],"mappings":"AAyEA,OAAO,EAAW,KAAK,GAAG,EAAE,MAAM,KAAK,CAAA;AAGvC,OAAO,EAA6B,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAChF,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,SAAS,CAAA;AAEvC,KAAK,WAAW,GAAG;IACjB,iBAAiB,EAAE,gBAAgB,EAAE,CAAA;IACrC,WAAW,EAAE,MAAM,CAAA;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,gBAAgB,EAAE,MAAM,CAAA;IACxB,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,QAAQ,CAAA;IACf,cAAc,CAAC,EAAE,MAAM,MAAM,CAAA;IAC7B,WAAW,CAAC,EAAE,MAAM,MAAM,CAAA;IAC1B,qBAAqB,CAAC,EAAE,MAAM,MAAM,CAAA;IACpC,UAAU,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;IACzB,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC9B,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB,CAAC;AAsBF,QAAA,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;iBA8B2B,CAAC;WACjC,CAAA;;;;;iBAEO,CAAC;;;;;;;;;;;;;CApBZ,CAAA;AAIF,MAAM,MAAM,WAAW,GAAG;IACxB,gBAAgB,EAAE,OAAO,KAAK,CAAC,gBAAgB,CAAA;CAChD,CAAA;AA8CD,QAAA,MAAM,YAAY;;;;kFAIhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
@@ -1 +1 @@
1
- {"version":3,"file":"App.vue.js","names":[],"sources":["../src/App.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { provide, type Ref } from 'vue'\n\nimport Chat from '@/Chat.vue'\nimport { createState, STATE_SYMBOL, type RegistryDocument } from '@/state/state'\nimport { type ChatMode } from '@/types'\n\nconst {\n dashboardUrl,\n registryDocuments,\n registryUrl,\n baseUrl,\n mode = 'full',\n getAccessToken,\n getAgentKey,\n getActiveDocumentJson,\n isLoggedIn,\n prefilledMessage,\n hideAddApi,\n} = defineProps<{\n registryDocuments: RegistryDocument[]\n registryUrl: string\n dashboardUrl: string\n baseUrl: string\n mode?: ChatMode\n getAccessToken?: () => string\n getAgentKey?: () => string\n getActiveDocumentJson?: () => string\n isLoggedIn?: Ref<boolean>\n prefilledMessage?: Ref<string>\n hideAddApi?: boolean\n}>()\n\ndefineEmits<{\n (e: 'uploadApi'): void\n}>()\n\nconst state = createState({\n getActiveDocumentJson,\n initialRegistryDocuments: registryDocuments,\n prefilledMessageRef: prefilledMessage,\n registryUrl,\n baseUrl,\n mode,\n getAccessToken,\n getAgentKey,\n isLoggedIn,\n dashboardUrl,\n hideAddApi,\n})\n\nprovide(STATE_SYMBOL, state)\n\nexport type ChatExposed = {\n addDocumentAsync: typeof state.addDocumentAsync\n}\n\ndefineExpose<ChatExposed>({\n addDocumentAsync: state.addDocumentAsync,\n})\n</script>\n\n<template>\n <Chat @uploadApi=\"$emit('uploadApi')\" />\n</template>\n\n<style scoped></style>\n"],"mappings":""}
1
+ {"version":3,"file":"App.vue.js","names":[],"sources":["../src/App.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { provide, type Ref } from 'vue'\n\nimport Chat from '@/Chat.vue'\nimport { createState, STATE_SYMBOL, type RegistryDocument } from '@/state/state'\nimport { type ChatMode } from '@/types'\n\nconst {\n dashboardUrl,\n platformProxyUrl,\n registryDocuments,\n registryUrl,\n baseUrl,\n mode = 'full',\n getAccessToken,\n getAgentKey,\n getActiveDocumentJson,\n isLoggedIn,\n prefilledMessage,\n hideAddApi,\n} = defineProps<{\n registryDocuments: RegistryDocument[]\n registryUrl: string\n dashboardUrl: string\n platformProxyUrl: string\n baseUrl: string\n mode?: ChatMode\n getAccessToken?: () => string\n getAgentKey?: () => string\n getActiveDocumentJson?: () => string\n isLoggedIn?: Ref<boolean>\n prefilledMessage?: Ref<string>\n hideAddApi?: boolean\n}>()\n\ndefineEmits<{\n (e: 'uploadApi'): void\n}>()\n\nconst state = createState({\n getActiveDocumentJson,\n initialRegistryDocuments: registryDocuments,\n prefilledMessageRef: prefilledMessage,\n platformProxyUrl,\n registryUrl,\n baseUrl,\n mode,\n getAccessToken,\n getAgentKey,\n isLoggedIn,\n dashboardUrl,\n hideAddApi,\n})\n\nprovide(STATE_SYMBOL, state)\n\nexport type ChatExposed = {\n addDocumentAsync: typeof state.addDocumentAsync\n}\n\ndefineExpose<ChatExposed>({\n addDocumentAsync: state.addDocumentAsync,\n})\n</script>\n\n<template>\n <Chat @uploadApi=\"$emit('uploadApi')\" />\n</template>\n\n<style scoped></style>\n"],"mappings":""}
@@ -8,6 +8,7 @@ var s = /* @__PURE__ */ i({
8
8
  registryDocuments: {},
9
9
  registryUrl: {},
10
10
  dashboardUrl: {},
11
+ platformProxyUrl: {},
11
12
  baseUrl: {},
12
13
  mode: { default: "full" },
13
14
  getAccessToken: { type: Function },
@@ -23,6 +24,7 @@ var s = /* @__PURE__ */ i({
23
24
  getActiveDocumentJson: i.getActiveDocumentJson,
24
25
  initialRegistryDocuments: i.registryDocuments,
25
26
  prefilledMessageRef: i.prefilledMessage,
27
+ platformProxyUrl: i.platformProxyUrl,
26
28
  registryUrl: i.registryUrl,
27
29
  baseUrl: i.baseUrl,
28
30
  mode: i.mode,
@@ -1 +1 @@
1
- {"version":3,"file":"App.vue.script.js","names":["$emit"],"sources":["../src/App.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { provide, type Ref } from 'vue'\n\nimport Chat from '@/Chat.vue'\nimport { createState, STATE_SYMBOL, type RegistryDocument } from '@/state/state'\nimport { type ChatMode } from '@/types'\n\nconst {\n dashboardUrl,\n registryDocuments,\n registryUrl,\n baseUrl,\n mode = 'full',\n getAccessToken,\n getAgentKey,\n getActiveDocumentJson,\n isLoggedIn,\n prefilledMessage,\n hideAddApi,\n} = defineProps<{\n registryDocuments: RegistryDocument[]\n registryUrl: string\n dashboardUrl: string\n baseUrl: string\n mode?: ChatMode\n getAccessToken?: () => string\n getAgentKey?: () => string\n getActiveDocumentJson?: () => string\n isLoggedIn?: Ref<boolean>\n prefilledMessage?: Ref<string>\n hideAddApi?: boolean\n}>()\n\ndefineEmits<{\n (e: 'uploadApi'): void\n}>()\n\nconst state = createState({\n getActiveDocumentJson,\n initialRegistryDocuments: registryDocuments,\n prefilledMessageRef: prefilledMessage,\n registryUrl,\n baseUrl,\n mode,\n getAccessToken,\n getAgentKey,\n isLoggedIn,\n dashboardUrl,\n hideAddApi,\n})\n\nprovide(STATE_SYMBOL, state)\n\nexport type ChatExposed = {\n addDocumentAsync: typeof state.addDocumentAsync\n}\n\ndefineExpose<ChatExposed>({\n addDocumentAsync: state.addDocumentAsync,\n})\n</script>\n\n<template>\n <Chat @uploadApi=\"$emit('uploadApi')\" />\n</template>\n\n<style scoped></style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;EAqCA,IAAM,IAAQ,EAAY;GACxB,uBAAoB,EAAA;GACpB,0BAA0B,EAAA;GAC1B,qBAAqB,EAAA;GACrB,aAAU,EAAA;GACV,SAAM,EAAA;GACN,MAAG,EAAA;GACH,gBAAa,EAAA;GACb,aAAU,EAAA;GACV,YAAS,EAAA;GACT,cAAW,EAAA;GACX,YAAS,EAAA;GACV,CAAA;SAED,EAAQ,GAAc,EAAK,EAM3B,EAA0B,EACxB,kBAAkB,EAAM,kBACzB,CAAA,kBAIC,EAAwC,GAAA,EAAjC,aAAS,AAAA,EAAA,QAAA,MAAEA,EAAAA,MAAK,YAAA,EAAA,CAAA"}
1
+ {"version":3,"file":"App.vue.script.js","names":["$emit"],"sources":["../src/App.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { provide, type Ref } from 'vue'\n\nimport Chat from '@/Chat.vue'\nimport { createState, STATE_SYMBOL, type RegistryDocument } from '@/state/state'\nimport { type ChatMode } from '@/types'\n\nconst {\n dashboardUrl,\n platformProxyUrl,\n registryDocuments,\n registryUrl,\n baseUrl,\n mode = 'full',\n getAccessToken,\n getAgentKey,\n getActiveDocumentJson,\n isLoggedIn,\n prefilledMessage,\n hideAddApi,\n} = defineProps<{\n registryDocuments: RegistryDocument[]\n registryUrl: string\n dashboardUrl: string\n platformProxyUrl: string\n baseUrl: string\n mode?: ChatMode\n getAccessToken?: () => string\n getAgentKey?: () => string\n getActiveDocumentJson?: () => string\n isLoggedIn?: Ref<boolean>\n prefilledMessage?: Ref<string>\n hideAddApi?: boolean\n}>()\n\ndefineEmits<{\n (e: 'uploadApi'): void\n}>()\n\nconst state = createState({\n getActiveDocumentJson,\n initialRegistryDocuments: registryDocuments,\n prefilledMessageRef: prefilledMessage,\n platformProxyUrl,\n registryUrl,\n baseUrl,\n mode,\n getAccessToken,\n getAgentKey,\n isLoggedIn,\n dashboardUrl,\n hideAddApi,\n})\n\nprovide(STATE_SYMBOL, state)\n\nexport type ChatExposed = {\n addDocumentAsync: typeof state.addDocumentAsync\n}\n\ndefineExpose<ChatExposed>({\n addDocumentAsync: state.addDocumentAsync,\n})\n</script>\n\n<template>\n <Chat @uploadApi=\"$emit('uploadApi')\" />\n</template>\n\n<style scoped></style>\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;EAuCA,IAAM,IAAQ,EAAY;GACxB,uBAAoB,EAAA;GACpB,0BAA0B,EAAA;GAC1B,qBAAqB,EAAA;GACrB,kBAAe,EAAA;GACf,aAAU,EAAA;GACV,SAAM,EAAA;GACN,MAAG,EAAA;GACH,gBAAa,EAAA;GACb,aAAU,EAAA;GACV,YAAS,EAAA;GACT,cAAW,EAAA;GACX,YAAS,EAAA;GACV,CAAA;SAED,EAAQ,GAAc,EAAK,EAM3B,EAA0B,EACxB,kBAAkB,EAAM,kBACzB,CAAA,kBAIC,EAAwC,GAAA,EAAjC,aAAS,AAAA,EAAA,QAAA,MAAEA,EAAAA,MAAK,YAAA,EAAA,CAAA"}
package/dist/api.d.ts CHANGED
@@ -1,4 +1,3 @@
1
- import type { Ref } from 'vue';
2
1
  export declare function createAuthorizationHeaders({ getAccessToken, getAgentKey, }: {
3
2
  getAccessToken?: () => string;
4
3
  getAgentKey?: () => string;
@@ -7,9 +6,8 @@ export declare function createAuthorizationHeaders({ getAccessToken, getAgentKey
7
6
  Authorization?: string | undefined;
8
7
  };
9
8
  /** Minimal set of API requests needed for agent chat */
10
- export declare function createApi({ baseUrl, proxyUrl, getAccessToken, getAgentKey, }: {
9
+ export declare function createApi({ baseUrl, getAccessToken, getAgentKey, }: {
11
10
  baseUrl: string;
12
- proxyUrl: Ref<string>;
13
11
  getAccessToken?: () => string;
14
12
  getAgentKey?: () => string;
15
13
  }): {
package/dist/api.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAM9B,wBAAgB,0BAA0B,CAAC,EACzC,cAAc,EACd,WAAW,GACZ,EAAE;IACD,cAAc,CAAC,EAAE,MAAM,MAAM,CAAA;IAC7B,WAAW,CAAC,EAAE,MAAM,MAAM,CAAA;CAC3B;;;EAYA;AAED,wDAAwD;AACxD,wBAAgB,SAAS,CAAC,EACxB,OAAO,EACP,QAAQ,EACR,cAAc,EACd,WAAW,GACZ,EAAE;IACD,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IACrB,cAAc,CAAC,EAAE,MAAM,MAAM,CAAA;IAC7B,WAAW,CAAC,EAAE,MAAM,MAAM,CAAA;CAC3B;oBA0E8B,MAAM;;;;;;;;;;;;;;;;;;;;;0BASA;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0BvE;AAED,MAAM,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAAA"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAMA,wBAAgB,0BAA0B,CAAC,EACzC,cAAc,EACd,WAAW,GACZ,EAAE;IACD,cAAc,CAAC,EAAE,MAAM,MAAM,CAAA;IAC7B,WAAW,CAAC,EAAE,MAAM,MAAM,CAAA;CAC3B;;;EAYA;AAED,wDAAwD;AACxD,wBAAgB,SAAS,CAAC,EACxB,OAAO,EACP,cAAc,EACd,WAAW,GACZ,EAAE;IACD,OAAO,EAAE,MAAM,CAAA;IACf,cAAc,CAAC,EAAE,MAAM,MAAM,CAAA;IAC7B,WAAW,CAAC,EAAE,MAAM,MAAM,CAAA;CAC3B;oBA0E8B,MAAM;;;;;;;;;;;;;;;;;;;;;0BASA;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA0BvE;AAED,MAAM,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,SAAS,CAAC,CAAA"}
package/dist/api.js CHANGED
@@ -1,37 +1,36 @@
1
1
  import { createError as e } from "./entities/error/helpers.js";
2
2
  import { registryApiMetadata as t } from "./entities/registry/document.js";
3
- import { redirectToProxy as n } from "@scalar/helpers/url/redirect-to-proxy";
4
- import { n as r } from "neverpanic";
5
- import i from "zod";
3
+ import { n } from "neverpanic";
4
+ import r from "zod";
6
5
  //#region src/api.ts
7
- function a({ getAccessToken: e, getAgentKey: t }) {
6
+ function i({ getAccessToken: e, getAgentKey: t }) {
8
7
  let n = e?.(), r = t?.();
9
8
  return {
10
9
  ...n && { Authorization: `Bearer ${n}` },
11
10
  ...r && { "x-scalar-agent-key": r }
12
11
  };
13
12
  }
14
- function o({ baseUrl: o, proxyUrl: s, getAccessToken: c, getAgentKey: l }) {
15
- let u = r.safeFn(async ({ path: t, method: u = "get", query: d, body: f, responseSchema: p }) => {
16
- let m = `${o}${t}${d ? `?${new URLSearchParams(d)}` : ""}`, h = await r.fromUnsafe(async () => fetch(n(s.value, m), {
17
- method: u,
18
- ...f && { body: JSON.stringify(f) },
19
- headers: { ...a({
20
- getAccessToken: c,
21
- getAgentKey: l
13
+ function a({ baseUrl: a, getAccessToken: o, getAgentKey: s }) {
14
+ let c = n.safeFn(async ({ path: t, method: c = "get", query: l, body: u, responseSchema: d }) => {
15
+ let f = `${a}${t}${l ? `?${new URLSearchParams(l)}` : ""}`, p = await n.fromUnsafe(async () => fetch(f, {
16
+ method: c,
17
+ ...u && { body: JSON.stringify(u) },
18
+ headers: { ...i({
19
+ getAccessToken: o,
20
+ getAgentKey: s
22
21
  }) }
23
22
  }), (t) => e("FAILED_TO_FETCH", t));
24
- if (!h.success) return h;
25
- let g = await r.fromUnsafe(async () => h.data.json(), (t) => e("FAILED_TO_FETCH_DATA", t));
26
- if (!g.success) return {
23
+ if (!p.success) return p;
24
+ let m = await n.fromUnsafe(async () => p.data.json(), (t) => e("FAILED_TO_FETCH_DATA", t));
25
+ if (!m.success) return {
27
26
  success: !1,
28
27
  error: e("UNKNOWN_ERROR", "Unknown error occurred. Please contact support.")
29
28
  };
30
- if (!h.data.ok) {
31
- let t = i.object({
32
- message: i.string(),
33
- code: i.string()
34
- }).safeParse(g.data);
29
+ if (!p.data.ok) {
30
+ let t = r.object({
31
+ message: r.string(),
32
+ code: r.string()
33
+ }).safeParse(m.data);
35
34
  return t.success ? {
36
35
  success: !1,
37
36
  error: e(t.data.code, t.data.message)
@@ -40,36 +39,36 @@ function o({ baseUrl: o, proxyUrl: s, getAccessToken: c, getAgentKey: l }) {
40
39
  error: e("UNKNOWN_ERROR", "Unknown error occurred. Please contact support.")
41
40
  };
42
41
  }
43
- let _ = p.safeParse(g.data);
44
- return _.success ? {
42
+ let h = d.safeParse(m.data);
43
+ return h.success ? {
45
44
  success: !0,
46
- data: _.data
45
+ data: h.data
47
46
  } : {
48
47
  success: !1,
49
48
  error: e("INVALID_RESPONSE", "Invalid response. Please contact support")
50
49
  };
51
50
  });
52
51
  return {
53
- search: async (e) => u({
52
+ search: async (e) => c({
54
53
  path: "/vector/registry/search",
55
54
  query: { query: e },
56
- responseSchema: i.object({ results: t.array() })
55
+ responseSchema: r.object({ results: t.array() })
57
56
  }),
58
- getDocument: async (e) => u({
57
+ getDocument: async (e) => c({
59
58
  path: `/vector/registry/document/${e.namespace}/${e.slug}`,
60
59
  responseSchema: t
61
60
  }),
62
- getKeyDocuments: async () => u({
61
+ getKeyDocuments: async () => c({
63
62
  path: "/vector/registry/documents",
64
- responseSchema: i.object({ documents: t.array() })
63
+ responseSchema: r.object({ documents: t.array() })
65
64
  }),
66
- getCuratedDocuments: async () => u({
65
+ getCuratedDocuments: async () => c({
67
66
  path: "/vector/registry/curated",
68
- responseSchema: i.object({ results: t.array() })
67
+ responseSchema: r.object({ results: t.array() })
69
68
  })
70
69
  };
71
70
  }
72
71
  //#endregion
73
- export { o as createApi, a as createAuthorizationHeaders };
72
+ export { a as createApi, i as createAuthorizationHeaders };
74
73
 
75
74
  //# sourceMappingURL=api.js.map
package/dist/api.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","names":[],"sources":["../src/api.ts"],"sourcesContent":["import { redirectToProxy } from '@scalar/helpers/url/redirect-to-proxy'\nimport { n } from 'neverpanic'\nimport type { Ref } from 'vue'\nimport z from 'zod'\n\nimport { createError } from '@/entities/error/helpers'\nimport { registryApiMetadata } from '@/entities/registry/document'\n\nexport function createAuthorizationHeaders({\n getAccessToken,\n getAgentKey,\n}: {\n getAccessToken?: () => string\n getAgentKey?: () => string\n}) {\n const token = getAccessToken?.()\n const agentKey = getAgentKey?.()\n\n return {\n ...(token && {\n Authorization: `Bearer ${token}`,\n }),\n ...(agentKey && {\n 'x-scalar-agent-key': agentKey,\n }),\n }\n}\n\n/** Minimal set of API requests needed for agent chat */\nexport function createApi({\n baseUrl,\n proxyUrl,\n getAccessToken,\n getAgentKey,\n}: {\n baseUrl: string\n proxyUrl: Ref<string>\n getAccessToken?: () => string\n getAgentKey?: () => string\n}) {\n const request = n.safeFn(\n async <T extends z.ZodType>({\n path,\n method = 'get',\n query,\n body,\n responseSchema,\n }: {\n path: string\n method?: string\n query?: Record<string, string>\n body?: object\n responseSchema: T\n }) => {\n const url = `${baseUrl}${path}${query ? `?${new URLSearchParams(query)}` : ''}`\n\n const fetchResult = await n.fromUnsafe(\n async () =>\n fetch(redirectToProxy(proxyUrl.value, url), {\n method,\n ...(body && { body: JSON.stringify(body) }),\n headers: {\n ...createAuthorizationHeaders({ getAccessToken, getAgentKey }),\n },\n }),\n (originalError) => createError('FAILED_TO_FETCH', originalError),\n )\n\n if (!fetchResult.success) {\n return fetchResult\n }\n\n const fetchDataResult = await n.fromUnsafe(\n async () => fetchResult.data.json(),\n (originalError) => createError('FAILED_TO_FETCH_DATA', originalError),\n )\n\n if (!fetchDataResult.success) {\n return {\n success: false,\n error: createError('UNKNOWN_ERROR', 'Unknown error occurred. Please contact support.'),\n }\n }\n\n if (!fetchResult.data.ok) {\n const serviceError = z.object({ message: z.string(), code: z.string() }).safeParse(fetchDataResult.data)\n\n if (!serviceError.success) {\n return {\n success: false,\n error: createError('UNKNOWN_ERROR', 'Unknown error occurred. Please contact support.'),\n }\n }\n\n return {\n success: false,\n error: createError(serviceError.data.code, serviceError.data.message),\n }\n }\n\n const serviceData = responseSchema.safeParse(fetchDataResult.data)\n\n if (!serviceData.success) {\n return {\n success: false,\n error: createError('INVALID_RESPONSE', 'Invalid response. Please contact support'),\n }\n }\n\n return { success: true, data: serviceData.data }\n },\n )\n\n const search = async (query: string) =>\n request({\n path: '/vector/registry/search',\n query: { query },\n responseSchema: z.object({\n results: registryApiMetadata.array(),\n }),\n })\n\n const getDocument = async (params: { namespace: string; slug: string }) =>\n request({\n path: `/vector/registry/document/${params.namespace}/${params.slug}`,\n responseSchema: registryApiMetadata,\n })\n\n const getKeyDocuments = async () =>\n request({\n path: '/vector/registry/documents',\n responseSchema: z.object({ documents: registryApiMetadata.array() }),\n })\n\n const getCuratedDocuments = async () =>\n request({\n path: '/vector/registry/curated',\n responseSchema: z.object({\n results: registryApiMetadata.array(),\n }),\n })\n\n return {\n search,\n getDocument,\n getKeyDocuments,\n getCuratedDocuments,\n }\n}\n\nexport type Api = ReturnType<typeof createApi>\n"],"mappings":";;;;;;AAQA,SAAgB,EAA2B,EACzC,mBACA,kBAIC;CACD,IAAM,IAAQ,KAAkB,EAC1B,IAAW,KAAe;AAEhC,QAAO;EACL,GAAI,KAAS,EACX,eAAe,UAAU,KAC1B;EACD,GAAI,KAAY,EACd,sBAAsB,GACvB;EACF;;AAIH,SAAgB,EAAU,EACxB,YACA,aACA,mBACA,kBAMC;CACD,IAAM,IAAU,EAAE,OAChB,OAA4B,EAC1B,SACA,YAAS,OACT,UACA,SACA,wBAOI;EACJ,IAAM,IAAM,GAAG,IAAU,IAAO,IAAQ,IAAI,IAAI,gBAAgB,EAAM,KAAK,MAErE,IAAc,MAAM,EAAE,WAC1B,YACE,MAAM,EAAgB,EAAS,OAAO,EAAI,EAAE;GAC1C;GACA,GAAI,KAAQ,EAAE,MAAM,KAAK,UAAU,EAAK,EAAE;GAC1C,SAAS,EACP,GAAG,EAA2B;IAAE;IAAgB;IAAa,CAAC,EAC/D;GACF,CAAC,GACH,MAAkB,EAAY,mBAAmB,EAAc,CACjE;AAED,MAAI,CAAC,EAAY,QACf,QAAO;EAGT,IAAM,IAAkB,MAAM,EAAE,WAC9B,YAAY,EAAY,KAAK,MAAM,GAClC,MAAkB,EAAY,wBAAwB,EAAc,CACtE;AAED,MAAI,CAAC,EAAgB,QACnB,QAAO;GACL,SAAS;GACT,OAAO,EAAY,iBAAiB,kDAAkD;GACvF;AAGH,MAAI,CAAC,EAAY,KAAK,IAAI;GACxB,IAAM,IAAe,EAAE,OAAO;IAAE,SAAS,EAAE,QAAQ;IAAE,MAAM,EAAE,QAAQ;IAAE,CAAC,CAAC,UAAU,EAAgB,KAAK;AASxG,UAPK,EAAa,UAOX;IACL,SAAS;IACT,OAAO,EAAY,EAAa,KAAK,MAAM,EAAa,KAAK,QAAQ;IACtE,GATQ;IACL,SAAS;IACT,OAAO,EAAY,iBAAiB,kDAAkD;IACvF;;EASL,IAAM,IAAc,EAAe,UAAU,EAAgB,KAAK;AASlE,SAPK,EAAY,UAOV;GAAE,SAAS;GAAM,MAAM,EAAY;GAAM,GANvC;GACL,SAAS;GACT,OAAO,EAAY,oBAAoB,2CAA2C;GACnF;GAKN;AA+BD,QAAO;EACL,QA9Ba,OAAO,MACpB,EAAQ;GACN,MAAM;GACN,OAAO,EAAE,UAAO;GAChB,gBAAgB,EAAE,OAAO,EACvB,SAAS,EAAoB,OAAO,EACrC,CAAC;GACH,CAAC;EAwBF,aAtBkB,OAAO,MACzB,EAAQ;GACN,MAAM,6BAA6B,EAAO,UAAU,GAAG,EAAO;GAC9D,gBAAgB;GACjB,CAAC;EAmBF,iBAjBsB,YACtB,EAAQ;GACN,MAAM;GACN,gBAAgB,EAAE,OAAO,EAAE,WAAW,EAAoB,OAAO,EAAE,CAAC;GACrE,CAAC;EAcF,qBAZ0B,YAC1B,EAAQ;GACN,MAAM;GACN,gBAAgB,EAAE,OAAO,EACvB,SAAS,EAAoB,OAAO,EACrC,CAAC;GACH,CAAC;EAOH"}
1
+ {"version":3,"file":"api.js","names":[],"sources":["../src/api.ts"],"sourcesContent":["import { n } from 'neverpanic'\nimport z from 'zod'\n\nimport { createError } from '@/entities/error/helpers'\nimport { registryApiMetadata } from '@/entities/registry/document'\n\nexport function createAuthorizationHeaders({\n getAccessToken,\n getAgentKey,\n}: {\n getAccessToken?: () => string\n getAgentKey?: () => string\n}) {\n const token = getAccessToken?.()\n const agentKey = getAgentKey?.()\n\n return {\n ...(token && {\n Authorization: `Bearer ${token}`,\n }),\n ...(agentKey && {\n 'x-scalar-agent-key': agentKey,\n }),\n }\n}\n\n/** Minimal set of API requests needed for agent chat */\nexport function createApi({\n baseUrl,\n getAccessToken,\n getAgentKey,\n}: {\n baseUrl: string\n getAccessToken?: () => string\n getAgentKey?: () => string\n}) {\n const request = n.safeFn(\n async <T extends z.ZodType>({\n path,\n method = 'get',\n query,\n body,\n responseSchema,\n }: {\n path: string\n method?: string\n query?: Record<string, string>\n body?: object\n responseSchema: T\n }) => {\n const url = `${baseUrl}${path}${query ? `?${new URLSearchParams(query)}` : ''}`\n\n const fetchResult = await n.fromUnsafe(\n async () =>\n fetch(url, {\n method,\n ...(body && { body: JSON.stringify(body) }),\n headers: {\n ...createAuthorizationHeaders({ getAccessToken, getAgentKey }),\n },\n }),\n (originalError) => createError('FAILED_TO_FETCH', originalError),\n )\n\n if (!fetchResult.success) {\n return fetchResult\n }\n\n const fetchDataResult = await n.fromUnsafe(\n async () => fetchResult.data.json(),\n (originalError) => createError('FAILED_TO_FETCH_DATA', originalError),\n )\n\n if (!fetchDataResult.success) {\n return {\n success: false,\n error: createError('UNKNOWN_ERROR', 'Unknown error occurred. Please contact support.'),\n }\n }\n\n if (!fetchResult.data.ok) {\n const serviceError = z.object({ message: z.string(), code: z.string() }).safeParse(fetchDataResult.data)\n\n if (!serviceError.success) {\n return {\n success: false,\n error: createError('UNKNOWN_ERROR', 'Unknown error occurred. Please contact support.'),\n }\n }\n\n return {\n success: false,\n error: createError(serviceError.data.code, serviceError.data.message),\n }\n }\n\n const serviceData = responseSchema.safeParse(fetchDataResult.data)\n\n if (!serviceData.success) {\n return {\n success: false,\n error: createError('INVALID_RESPONSE', 'Invalid response. Please contact support'),\n }\n }\n\n return { success: true, data: serviceData.data }\n },\n )\n\n const search = async (query: string) =>\n request({\n path: '/vector/registry/search',\n query: { query },\n responseSchema: z.object({\n results: registryApiMetadata.array(),\n }),\n })\n\n const getDocument = async (params: { namespace: string; slug: string }) =>\n request({\n path: `/vector/registry/document/${params.namespace}/${params.slug}`,\n responseSchema: registryApiMetadata,\n })\n\n const getKeyDocuments = async () =>\n request({\n path: '/vector/registry/documents',\n responseSchema: z.object({ documents: registryApiMetadata.array() }),\n })\n\n const getCuratedDocuments = async () =>\n request({\n path: '/vector/registry/curated',\n responseSchema: z.object({\n results: registryApiMetadata.array(),\n }),\n })\n\n return {\n search,\n getDocument,\n getKeyDocuments,\n getCuratedDocuments,\n }\n}\n\nexport type Api = ReturnType<typeof createApi>\n"],"mappings":";;;;;AAMA,SAAgB,EAA2B,EACzC,mBACA,kBAIC;CACD,IAAM,IAAQ,KAAkB,EAC1B,IAAW,KAAe;AAEhC,QAAO;EACL,GAAI,KAAS,EACX,eAAe,UAAU,KAC1B;EACD,GAAI,KAAY,EACd,sBAAsB,GACvB;EACF;;AAIH,SAAgB,EAAU,EACxB,YACA,mBACA,kBAKC;CACD,IAAM,IAAU,EAAE,OAChB,OAA4B,EAC1B,SACA,YAAS,OACT,UACA,SACA,wBAOI;EACJ,IAAM,IAAM,GAAG,IAAU,IAAO,IAAQ,IAAI,IAAI,gBAAgB,EAAM,KAAK,MAErE,IAAc,MAAM,EAAE,WAC1B,YACE,MAAM,GAAK;GACT;GACA,GAAI,KAAQ,EAAE,MAAM,KAAK,UAAU,EAAK,EAAE;GAC1C,SAAS,EACP,GAAG,EAA2B;IAAE;IAAgB;IAAa,CAAC,EAC/D;GACF,CAAC,GACH,MAAkB,EAAY,mBAAmB,EAAc,CACjE;AAED,MAAI,CAAC,EAAY,QACf,QAAO;EAGT,IAAM,IAAkB,MAAM,EAAE,WAC9B,YAAY,EAAY,KAAK,MAAM,GAClC,MAAkB,EAAY,wBAAwB,EAAc,CACtE;AAED,MAAI,CAAC,EAAgB,QACnB,QAAO;GACL,SAAS;GACT,OAAO,EAAY,iBAAiB,kDAAkD;GACvF;AAGH,MAAI,CAAC,EAAY,KAAK,IAAI;GACxB,IAAM,IAAe,EAAE,OAAO;IAAE,SAAS,EAAE,QAAQ;IAAE,MAAM,EAAE,QAAQ;IAAE,CAAC,CAAC,UAAU,EAAgB,KAAK;AASxG,UAPK,EAAa,UAOX;IACL,SAAS;IACT,OAAO,EAAY,EAAa,KAAK,MAAM,EAAa,KAAK,QAAQ;IACtE,GATQ;IACL,SAAS;IACT,OAAO,EAAY,iBAAiB,kDAAkD;IACvF;;EASL,IAAM,IAAc,EAAe,UAAU,EAAgB,KAAK;AASlE,SAPK,EAAY,UAOV;GAAE,SAAS;GAAM,MAAM,EAAY;GAAM,GANvC;GACL,SAAS;GACT,OAAO,EAAY,oBAAoB,2CAA2C;GACnF;GAKN;AA+BD,QAAO;EACL,QA9Ba,OAAO,MACpB,EAAQ;GACN,MAAM;GACN,OAAO,EAAE,UAAO;GAChB,gBAAgB,EAAE,OAAO,EACvB,SAAS,EAAoB,OAAO,EACrC,CAAC;GACH,CAAC;EAwBF,aAtBkB,OAAO,MACzB,EAAQ;GACN,MAAM,6BAA6B,EAAO,UAAU,GAAG,EAAO;GAC9D,gBAAgB;GACjB,CAAC;EAmBF,iBAjBsB,YACtB,EAAQ;GACN,MAAM;GACN,gBAAgB,EAAE,OAAO,EAAE,WAAW,EAAoB,OAAO,EAAE,CAAC;GACrE,CAAC;EAcF,qBAZ0B,YAC1B,EAAQ;GACN,MAAM;GACN,gBAAgB,EAAE,OAAO,EACvB,SAAS,EAAoB,OAAO,EACrC,CAAC;GACH,CAAC;EAOH"}
@@ -2,18 +2,18 @@ import { createError as e } from "../entities/error/helpers.js";
2
2
  import "../entities/tools/constants.js";
3
3
  import { EXECUTE_CLIENT_SIDE_REQUEST_TOOL_NAME as t } from "../entities/tools/execute-request.js";
4
4
  import { createDocumentName as n } from "../registry/create-document-name.js";
5
- import { redirectToProxy as r } from "@scalar/helpers/url/redirect-to-proxy";
6
- import { n as i } from "neverpanic";
7
- import { buildRequestSecurity as a, getResolvedUrl as o } from "@scalar/api-client/v2/blocks/operation-block";
5
+ import { n as r } from "neverpanic";
6
+ import { buildRequestSecurity as i, getResolvedUrl as a } from "@scalar/api-client/v2/blocks/operation-block";
7
+ import { redirectToProxy as o } from "@scalar/helpers/url/redirect-to-proxy";
8
8
  import s from "truncate-json";
9
9
  //#region src/client-tools/execute-request.ts
10
- var c = 5e4, l = i.safeFn(async (e) => e.headers.get("content-type") === "application/json" ? {
10
+ var c = 5e4, l = r.safeFn(async (e) => e.headers.get("content-type") === "application/json" ? {
11
11
  success: !0,
12
12
  data: await e.json()
13
13
  } : {
14
14
  success: !0,
15
15
  data: await e.text()
16
- }, (t) => e("FAILED_TO_PARSE_RESPONSE_BODY", { originalError: t })), u = (e) => JSON.parse(s(JSON.stringify(e), c).jsonString), d = i.safeFn(async (t, n) => {
16
+ }, (t) => e("FAILED_TO_PARSE_RESPONSE_BODY", { originalError: t })), u = (e) => JSON.parse(s(JSON.stringify(e), c).jsonString), d = r.safeFn(async (t, n) => {
17
17
  let r = await fetch(t, n), i = await l(r);
18
18
  return r.ok ? i.success ? {
19
19
  success: !0,
@@ -33,7 +33,7 @@ var c = 5e4, l = i.safeFn(async (e) => e.headers.get("content-type") === "applic
33
33
  };
34
34
  }, (t) => e("FAILED_TO_FETCH", { originalError: t }));
35
35
  function f({ path: e, activeServer: t, proxyUrl: n }) {
36
- return r(n, o({
36
+ return o(n, a({
37
37
  path: e,
38
38
  server: t,
39
39
  pathVariables: {},
@@ -43,7 +43,7 @@ function f({ path: e, activeServer: t, proxyUrl: n }) {
43
43
  }
44
44
  }));
45
45
  }
46
- var p = i.safeFn(async ({ documentSettings: r, toolCallId: i, chat: o, proxyUrl: s, input: { method: c, path: l, body: u, headers: p, documentIdentifier: m } }) => {
46
+ var p = r.safeFn(async ({ documentSettings: r, toolCallId: a, chat: o, proxyUrl: s, input: { method: c, path: l, body: u, headers: p, documentIdentifier: m } }) => {
47
47
  let [h, g] = m.split("---");
48
48
  if (!h || !g) return {
49
49
  success: !1,
@@ -62,7 +62,7 @@ var p = i.safeFn(async ({ documentSettings: r, toolCallId: i, chat: o, proxyUrl:
62
62
  slug: g
63
63
  })
64
64
  };
65
- let y = a(v.securitySchemes), b = {
65
+ let y = i(v.securitySchemes), b = {
66
66
  method: c,
67
67
  body: u,
68
68
  ...y,
@@ -77,7 +77,7 @@ var p = i.safeFn(async ({ documentSettings: r, toolCallId: i, chat: o, proxyUrl:
77
77
  }), b);
78
78
  return o.addToolOutput({
79
79
  tool: t,
80
- toolCallId: i,
80
+ toolCallId: a,
81
81
  output: x,
82
82
  state: "output-available"
83
83
  }), x;
@@ -24,7 +24,7 @@ function l() {
24
24
  let a = e(), s = t();
25
25
  function c(e) {
26
26
  let t = `${a.baseUrl}${e}`;
27
- return n(a.proxyUrl.value, t);
27
+ return n(a.platformProxyUrl, t);
28
28
  }
29
29
  async function l(e, t = !1) {
30
30
  try {
@@ -1 +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.proxyUrl.value, 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,SAAS,OAAO,EAAQ;;CAGvD,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"}
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/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",
13
+ "version": "0.9.14",
14
14
  "engines": {
15
15
  "node": ">=22"
16
16
  },
@@ -48,6 +48,7 @@ type State = {
48
48
  registryUrl: string;
49
49
  dashboardUrl: string;
50
50
  baseUrl: string;
51
+ platformProxyUrl: string;
51
52
  isLoggedIn?: Ref<boolean>;
52
53
  registryDocuments: Ref<ApiMetadata[]>;
53
54
  pendingDocuments: Record<string, boolean>;
@@ -79,13 +80,14 @@ type State = {
79
80
  getActiveDocumentJson?: () => string;
80
81
  hideAddApi?: boolean;
81
82
  };
82
- export declare function createState({ initialRegistryDocuments, registryUrl, dashboardUrl, baseUrl, mode, isLoggedIn, getAccessToken, getAgentKey, getActiveDocumentJson, prefilledMessageRef, hideAddApi, }: {
83
+ export declare function createState({ initialRegistryDocuments, registryUrl, dashboardUrl, platformProxyUrl, baseUrl, mode, isLoggedIn, getAccessToken, getAgentKey, getActiveDocumentJson, prefilledMessageRef, hideAddApi, }: {
83
84
  initialRegistryDocuments: {
84
85
  namespace: string;
85
86
  slug: string;
86
87
  }[];
87
88
  registryUrl: string;
88
89
  dashboardUrl: string;
90
+ platformProxyUrl: string;
89
91
  baseUrl: string;
90
92
  mode: ChatMode;
91
93
  isLoggedIn?: Ref<boolean>;
@@ -1 +1 @@
1
- {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/state/state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/state/state.ts"],"names":[],"mappings":"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"}
@@ -13,19 +13,18 @@ import { computed as d, inject as f, reactive as p, ref as m, watch as h } from
13
13
  import { useToasts as g } from "@scalar/use-toasts";
14
14
  import { Chat as _ } from "@ai-sdk/vue";
15
15
  import { useModal as v } from "@scalar/components";
16
- import { redirectToProxy as y } from "@scalar/helpers/url/redirect-to-proxy";
17
- import { apiReferenceConfigurationSchema as b } from "@scalar/types/api-reference";
18
- import { createWorkspaceStore as x } from "@scalar/workspace-store/client";
19
- import { createWorkspaceEventBus as S } from "@scalar/workspace-store/events";
20
- import { DefaultChatTransport as C, lastAssistantMessageIsCompleteWithToolCalls as w } from "ai";
21
- import { n as T } from "neverpanic";
16
+ import { apiReferenceConfigurationSchema as y } from "@scalar/types/api-reference";
17
+ import { createWorkspaceStore as b } from "@scalar/workspace-store/client";
18
+ import { createWorkspaceEventBus as x } from "@scalar/workspace-store/events";
19
+ import { DefaultChatTransport as S, lastAssistantMessageIsCompleteWithToolCalls as C } from "ai";
20
+ import { n as w } from "neverpanic";
22
21
  //#region src/state/state.ts
23
- var E = Symbol("STATE_SYMBOL"), { toast: D } = g();
24
- function O({ registryDocuments: e, workspaceStore: t, baseUrl: r, proxyUrl: a, getAccessToken: s, getAgentKey: c }) {
22
+ var T = Symbol("STATE_SYMBOL"), { toast: E } = g();
23
+ function D({ registryDocuments: e, workspaceStore: t, baseUrl: r, proxyUrl: a, getAccessToken: s, getAgentKey: c }) {
25
24
  let l = new _({
26
- sendAutomaticallyWhen: w,
27
- transport: new C({
28
- api: y(a.value, `${r}/vector/openapi/chat`),
25
+ sendAutomaticallyWhen: C,
26
+ transport: new S({
27
+ api: `${r}/vector/openapi/chat`,
29
28
  headers: () => n({
30
29
  getAccessToken: s,
31
30
  getAgentKey: c
@@ -47,22 +46,21 @@ function O({ registryDocuments: e, workspaceStore: t, baseUrl: r, proxyUrl: a, g
47
46
  });
48
47
  return l;
49
48
  }
50
- function k({ initialRegistryDocuments: n, registryUrl: i, dashboardUrl: o, baseUrl: f, mode: g, isLoggedIn: _, getAccessToken: C, getAgentKey: w, getActiveDocumentJson: E, prefilledMessageRef: k, hideAddApi: A }) {
51
- let j = m(k?.value ?? ""), M = m([]), N = p({}), P = m([]), F = m(a.DEFAULT_PROXY_URL), I = d(() => F.value?.trim() || a.DEFAULT_PROXY_URL), L = m(), R = s(), z = S(), B = x({ plugins: [l({ persistAuth: !0 })] }), V = d(() => b.parse({
49
+ function O({ initialRegistryDocuments: n, registryUrl: i, dashboardUrl: o, platformProxyUrl: f, baseUrl: g, mode: _, isLoggedIn: S, getAccessToken: C, getAgentKey: T, getActiveDocumentJson: O, prefilledMessageRef: k, hideAddApi: A }) {
50
+ let j = m(k?.value ?? ""), M = m([]), N = p({}), P = m([]), F = m(a.DEFAULT_PROXY_URL), I = d(() => F.value?.trim() || a.DEFAULT_PROXY_URL), L = m(), R = s(), z = x(), B = b({ plugins: [l({ persistAuth: !0 })] }), V = d(() => y.parse({
52
51
  proxyUrl: I.value,
53
52
  persistAuth: !0
54
- })), H = O({
53
+ })), H = D({
55
54
  registryDocuments: M,
56
55
  workspaceStore: B,
57
- baseUrl: f,
56
+ baseUrl: g,
58
57
  proxyUrl: I,
59
58
  getAccessToken: C,
60
- getAgentKey: w
59
+ getAgentKey: T
61
60
  }), U = t({
62
- baseUrl: f,
63
- proxyUrl: I,
61
+ baseUrl: g,
64
62
  getAccessToken: C,
65
- getAgentKey: w
63
+ getAgentKey: T
66
64
  }), W = d(() => H.status === "submitted" || H.status === "streaming" && !H.lastMessage?.parts.some((e) => e.type === "text"));
67
65
  h(() => H.status, () => {
68
66
  H.status === "streaming" && (j.value = "");
@@ -84,13 +82,13 @@ function k({ initialRegistryDocuments: n, registryUrl: i, dashboardUrl: o, baseU
84
82
  api: U,
85
83
  removable: n
86
84
  });
87
- if (N[a] = !1, !o.success) throw r ? (c(), o.error) : (console.warn("[AGENT]: Unable to load document", o.error), D(`Unable to load the document @${e}/${t}`, "warn"), o.error);
85
+ if (N[a] = !1, !o.success) throw r ? (c(), o.error) : (console.warn("[AGENT]: Unable to load document", o.error), E(`Unable to load the document @${e}/${t}`, "warn"), o.error);
88
86
  }
89
87
  async function q({ namespace: t, slug: n, removable: r = !0 }) {
90
88
  if (M.value.find((e) => e.namespace === t && e.slug === n)) return;
91
89
  let a = `@${t}/${n}`;
92
90
  N[a] = !0;
93
- let o = await T.fromUnsafe(() => fetch(y(I.value, `${f}/vector/registry/embeddings/${t}/${n}`), { method: "GET" }), (t) => e("FAILED_TO_GET_EMBEDDING_STATUS", t));
91
+ let o = await w.fromUnsafe(() => fetch(`${g}/vector/registry/embeddings/${t}/${n}`, { method: "GET" }), (t) => e("FAILED_TO_GET_EMBEDDING_STATUS", t));
94
92
  if (o.success && o.data.ok) {
95
93
  let e = await u({
96
94
  namespace: t,
@@ -102,8 +100,8 @@ function k({ initialRegistryDocuments: n, registryUrl: i, dashboardUrl: o, baseU
102
100
  api: U,
103
101
  removable: r
104
102
  });
105
- e.success || (console.warn("[AGENT]: Unable to load document", e.error), D(`Unable to load the document @${t}/${n}`, "warn"));
106
- } else console.warn("[AGENT]: Document could not be embedded"), D(`Unable to embed the document @${t}/${n}`, "warn");
103
+ e.success || (console.warn("[AGENT]: Unable to load document", e.error), E(`Unable to load the document @${t}/${n}`, "warn"));
104
+ } else console.warn("[AGENT]: Document could not be embedded"), E(`Unable to embed the document @${t}/${n}`, "warn");
107
105
  N[a] = !1;
108
106
  }
109
107
  function J({ namespace: e, slug: t }) {
@@ -123,32 +121,33 @@ function k({ initialRegistryDocuments: n, registryUrl: i, dashboardUrl: o, baseU
123
121
  config: V,
124
122
  registryUrl: i,
125
123
  dashboardUrl: o,
126
- baseUrl: f,
124
+ platformProxyUrl: f,
125
+ baseUrl: g,
127
126
  registryDocuments: M,
128
127
  pendingDocuments: N,
129
128
  proxyUrl: I,
130
129
  proxyUrlRaw: F,
131
- mode: g,
130
+ mode: _,
132
131
  terms: R,
133
- isLoggedIn: _,
132
+ isLoggedIn: S,
134
133
  addDocument: K,
135
134
  addDocumentAsync: q,
136
135
  removeDocument: J,
137
136
  getAccessToken: C,
138
- getAgentKey: w,
137
+ getAgentKey: T,
139
138
  api: U,
140
139
  uploadedTmpDocumentUrl: L,
141
140
  curatedDocuments: P,
142
- getActiveDocumentJson: E,
141
+ getActiveDocumentJson: O,
143
142
  hideAddApi: A
144
143
  };
145
144
  }
146
- function A() {
147
- let e = f(E);
145
+ function k() {
146
+ let e = f(T);
148
147
  if (!e) throw Error("No state provided.");
149
148
  return e;
150
149
  }
151
150
  //#endregion
152
- export { E as STATE_SYMBOL, k as createState, A as useState };
151
+ export { T as STATE_SYMBOL, O as createState, k as useState };
153
152
 
154
153
  //# sourceMappingURL=state.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"state.js","names":[],"sources":["../../src/state/state.ts"],"sourcesContent":["import { Chat } from '@ai-sdk/vue'\nimport { type ModalState, useModal } from '@scalar/components'\nimport { redirectToProxy } from '@scalar/helpers/url/redirect-to-proxy'\nimport { type ApiReferenceConfigurationRaw, apiReferenceConfigurationSchema } from '@scalar/types/api-reference'\nimport { useToasts } from '@scalar/use-toasts'\nimport { type WorkspaceStore, createWorkspaceStore } from '@scalar/workspace-store/client'\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport { createWorkspaceEventBus } from '@scalar/workspace-store/events'\nimport { DefaultChatTransport, type UIDataTypes, type UIMessage, lastAssistantMessageIsCompleteWithToolCalls } from 'ai'\nimport { n } from 'neverpanic'\nimport { type ComputedRef, type InjectionKey, type Ref, computed, inject, reactive, ref, watch } from 'vue'\n\nimport { type Api, createApi, createAuthorizationHeaders } from '@/api'\nimport { executeRequestTool } from '@/client-tools/execute-request'\nimport { URLS } from '@/consts/urls'\nimport { createError } from '@/entities'\nimport type { ApiMetadata } from '@/entities/registry/document'\nimport type {\n ASK_FOR_AUTHENTICATION_TOOL_NAME,\n AskForAuthenticationInput,\n} from '@/entities/tools/ask-for-authentication'\nimport {\n EXECUTE_CLIENT_SIDE_REQUEST_TOOL_NAME,\n type ExecuteClientSideRequestToolInput,\n type ExecuteClientSideRequestToolOutput,\n} from '@/entities/tools/execute-request'\nimport type {\n GET_MINI_OPENAPI_SPEC_TOOL_NAME,\n GetMiniOpenAPIDocToolInput,\n GetMiniOpenAPIDocToolOutput,\n} from '@/entities/tools/get-mini-openapi-spec'\nimport type {\n GET_OPENAPI_SPECS_SUMMARY_TOOL_NAME,\n GetOpenAPISpecsSummaryToolOutput,\n} from '@/entities/tools/get-openapi-spec-summary'\nimport { createDocumentSettings } from '@/helpers'\nimport { useTermsAndConditions } from '@/hooks/use-term-and-conditions'\nimport { removeTmpDocFromLocalStorage } from '@/hooks/use-upload-tmp-document'\nimport { persistencePlugin } from '@/plugins/persistance'\nimport { loadDocument } from '@/registry/add-documents-to-store'\nimport { createDocumentName } from '@/registry/create-document-name'\nimport type { ChatMode } from '@/types'\n\nexport type RegistryDocument = {\n namespace: string\n slug: string\n}\n\nexport type Tools = {\n [GET_MINI_OPENAPI_SPEC_TOOL_NAME]: {\n input: GetMiniOpenAPIDocToolInput\n output: GetMiniOpenAPIDocToolOutput\n }\n [EXECUTE_CLIENT_SIDE_REQUEST_TOOL_NAME]: {\n input: ExecuteClientSideRequestToolInput\n output: ExecuteClientSideRequestToolOutput\n }\n [GET_OPENAPI_SPECS_SUMMARY_TOOL_NAME]: {\n input: object\n output: GetOpenAPISpecsSummaryToolOutput\n }\n [ASK_FOR_AUTHENTICATION_TOOL_NAME]: {\n input: AskForAuthenticationInput\n output: unknown\n }\n}\n\nexport const STATE_SYMBOL: InjectionKey<State> = Symbol('STATE_SYMBOL')\n\nconst { toast } = useToasts()\n\ntype State = {\n prompt: Ref<string>\n chat: Chat<UIMessage<unknown, UIDataTypes, Tools>>\n workspaceStore: WorkspaceStore\n loading: ComputedRef<boolean>\n settingsModal: ModalState\n eventBus: WorkspaceEventBus\n proxyUrl: ComputedRef<string>\n proxyUrlRaw: Ref<string | undefined>\n config: ComputedRef<ApiReferenceConfigurationRaw>\n registryUrl: string\n dashboardUrl: string\n baseUrl: string\n isLoggedIn?: Ref<boolean>\n registryDocuments: Ref<ApiMetadata[]>\n pendingDocuments: Record<string, boolean>\n mode: ChatMode\n terms: { accepted: Ref<boolean>; accept: () => void }\n addDocument: (document: { namespace: string; slug: string; removable?: boolean; tmp?: boolean }) => Promise<void>\n addDocumentAsync: (document: { namespace: string; slug: string; removable?: boolean }) => Promise<void>\n removeDocument: (document: { namespace: string; slug: string }) => void\n getAccessToken?: () => string\n getAgentKey?: () => string\n api: Api\n uploadedTmpDocumentUrl: Ref<string | undefined>\n curatedDocuments: Ref<ApiMetadata[]>\n getActiveDocumentJson?: () => string\n hideAddApi?: boolean\n}\n\nfunction createChat({\n registryDocuments,\n workspaceStore,\n baseUrl,\n proxyUrl,\n getAccessToken,\n getAgentKey,\n}: {\n registryDocuments: Ref<ApiMetadata[]>\n workspaceStore: WorkspaceStore\n baseUrl: string\n proxyUrl: ComputedRef<string>\n getAccessToken?: () => string\n getAgentKey?: () => string\n}) {\n const chat = new Chat<UIMessage<unknown, UIDataTypes, Tools>>({\n sendAutomaticallyWhen: lastAssistantMessageIsCompleteWithToolCalls,\n transport: new DefaultChatTransport({\n api: redirectToProxy(proxyUrl.value, `${baseUrl}/vector/openapi/chat`),\n headers: () => createAuthorizationHeaders({ getAccessToken, getAgentKey }),\n body: () => ({\n registryDocuments: registryDocuments.value,\n documentSettings: createDocumentSettings(workspaceStore),\n }),\n }),\n async onToolCall({ toolCall }): Promise<any> {\n if (toolCall.dynamic) {\n return\n }\n\n if (\n toolCall.toolName === EXECUTE_CLIENT_SIDE_REQUEST_TOOL_NAME &&\n toolCall.input.method.toLowerCase() === 'get'\n ) {\n await executeRequestTool({\n documentSettings: createDocumentSettings(workspaceStore),\n input: toolCall.input,\n toolCallId: toolCall.toolCallId,\n chat,\n proxyUrl: proxyUrl.value,\n })\n }\n },\n })\n\n return chat\n}\n\nexport function createState({\n initialRegistryDocuments,\n registryUrl,\n dashboardUrl,\n baseUrl,\n mode,\n isLoggedIn,\n getAccessToken,\n getAgentKey,\n getActiveDocumentJson,\n prefilledMessageRef,\n hideAddApi,\n}: {\n initialRegistryDocuments: { namespace: string; slug: string }[]\n registryUrl: string\n dashboardUrl: string\n baseUrl: string\n mode: ChatMode\n isLoggedIn?: Ref<boolean>\n getAccessToken?: () => string\n getAgentKey?: () => string\n getActiveDocumentJson?: () => string\n prefilledMessageRef?: Ref<string>\n hideAddApi?: boolean\n}): State {\n const prompt = ref<State['prompt']['value']>(prefilledMessageRef?.value ?? '')\n const registryDocuments = ref<ApiMetadata[]>([])\n const pendingDocuments = reactive<Record<string, boolean>>({})\n const curatedDocuments = ref<ApiMetadata[]>([])\n const proxyUrlRaw = ref<State['proxyUrlRaw']['value']>(URLS.DEFAULT_PROXY_URL)\n const proxyUrl = computed(() => proxyUrlRaw.value?.trim() || URLS.DEFAULT_PROXY_URL)\n const uploadedTmpDocumentUrl = ref<string>()\n const terms = useTermsAndConditions()\n\n const eventBus = createWorkspaceEventBus()\n const workspaceStore = createWorkspaceStore({\n plugins: [\n persistencePlugin({\n persistAuth: true,\n }),\n ],\n })\n\n const config = computed(() =>\n apiReferenceConfigurationSchema.parse({\n proxyUrl: proxyUrl.value,\n persistAuth: true,\n }),\n )\n\n const chat = createChat({\n registryDocuments,\n workspaceStore,\n baseUrl,\n proxyUrl,\n getAccessToken,\n getAgentKey,\n })\n\n const api = createApi({\n baseUrl,\n proxyUrl,\n getAccessToken,\n getAgentKey,\n })\n\n const loading = computed(\n () =>\n chat.status === 'submitted' ||\n (chat.status === 'streaming' && !chat.lastMessage?.parts.some((part) => part.type === 'text')),\n )\n\n watch(\n () => chat.status,\n () => {\n if (chat.status === 'streaming') {\n prompt.value = ''\n }\n },\n )\n\n if (prefilledMessageRef) {\n watch(prefilledMessageRef, async (val) => {\n if (val) {\n prompt.value = val\n if (terms.accepted.value) {\n await chat.sendMessage({ text: prompt.value })\n }\n }\n })\n }\n\n const settingsModal = useModal()\n\n async function addDocument({\n namespace,\n slug,\n removable = true,\n tmp = false,\n }: {\n namespace: string\n slug: string\n removable?: boolean\n tmp?: boolean\n }) {\n const matchingDoc = registryDocuments.value.find((doc) => doc.namespace === namespace && doc.slug === slug)\n\n if (matchingDoc) {\n return\n }\n\n const identifier = `@${namespace}/${slug}`\n\n pendingDocuments[identifier] = true\n\n const loadDocumentResult = await loadDocument({\n namespace,\n slug,\n workspaceStore,\n registryUrl,\n registryDocuments,\n config: config.value,\n api,\n removable,\n })\n\n pendingDocuments[identifier] = false\n\n if (!loadDocumentResult.success) {\n /**\n * If we are unable to load a document, we just remove it\n * from tmp local storage, do not warn the user.\n */\n if (tmp) {\n removeTmpDocFromLocalStorage()\n throw loadDocumentResult.error\n }\n\n console.warn('[AGENT]: Unable to load document', loadDocumentResult.error)\n toast(`Unable to load the document @${namespace}/${slug}`, 'warn')\n throw loadDocumentResult.error\n }\n }\n\n /**\n * Waits for document to be available in embeddings\n * and adds to the list\n */\n async function addDocumentAsync({\n namespace,\n slug,\n removable = true,\n }: {\n namespace: string\n slug: string\n removable?: boolean\n }) {\n const matchingDoc = registryDocuments.value.find((doc) => doc.namespace === namespace && doc.slug === slug)\n\n if (matchingDoc) {\n return\n }\n\n const identifier = `@${namespace}/${slug}`\n\n pendingDocuments[identifier] = true\n\n const embeddingStatusResponse = await n.fromUnsafe(\n () =>\n fetch(redirectToProxy(proxyUrl.value, `${baseUrl}/vector/registry/embeddings/${namespace}/${slug}`), {\n method: 'GET',\n }),\n (originalError) => createError('FAILED_TO_GET_EMBEDDING_STATUS', originalError),\n )\n\n if (embeddingStatusResponse.success && embeddingStatusResponse.data.ok) {\n const loadDocumentResult = await loadDocument({\n namespace,\n slug,\n workspaceStore,\n registryUrl,\n registryDocuments,\n config: config.value,\n api,\n removable,\n })\n\n if (!loadDocumentResult.success) {\n console.warn('[AGENT]: Unable to load document', loadDocumentResult.error)\n toast(`Unable to load the document @${namespace}/${slug}`, 'warn')\n }\n } else {\n console.warn('[AGENT]: Document could not be embedded')\n toast(`Unable to embed the document @${namespace}/${slug}`, 'warn')\n }\n\n pendingDocuments[identifier] = false\n }\n\n function removeDocument({ namespace, slug }: { namespace: string; slug: string }) {\n registryDocuments.value = registryDocuments.value.filter(\n (doc) => !(doc.namespace === namespace && doc.slug === slug),\n )\n\n workspaceStore.deleteDocument(createDocumentName(namespace, slug))\n }\n\n initialRegistryDocuments.forEach(({ namespace, slug }) => addDocument({ namespace, slug, removable: false }))\n\n return {\n prompt,\n chat,\n workspaceStore,\n eventBus,\n loading,\n settingsModal,\n config,\n registryUrl,\n dashboardUrl,\n baseUrl,\n registryDocuments,\n pendingDocuments,\n proxyUrl,\n proxyUrlRaw,\n mode,\n terms,\n isLoggedIn,\n addDocument,\n addDocumentAsync,\n removeDocument,\n getAccessToken,\n getAgentKey,\n api,\n uploadedTmpDocumentUrl,\n curatedDocuments,\n getActiveDocumentJson,\n hideAddApi,\n }\n}\n\nexport function useState() {\n const state = inject(STATE_SYMBOL)\n\n if (!state) {\n throw new Error('No state provided.')\n }\n\n return state\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"state.js","names":[],"sources":["../../src/state/state.ts"],"sourcesContent":["import { Chat } from '@ai-sdk/vue'\nimport { type ModalState, useModal } from '@scalar/components'\nimport { type ApiReferenceConfigurationRaw, apiReferenceConfigurationSchema } from '@scalar/types/api-reference'\nimport { useToasts } from '@scalar/use-toasts'\nimport { type WorkspaceStore, createWorkspaceStore } from '@scalar/workspace-store/client'\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport { createWorkspaceEventBus } from '@scalar/workspace-store/events'\nimport { DefaultChatTransport, type UIDataTypes, type UIMessage, lastAssistantMessageIsCompleteWithToolCalls } from 'ai'\nimport { n } from 'neverpanic'\nimport { type ComputedRef, type InjectionKey, type Ref, computed, inject, reactive, ref, watch } from 'vue'\n\nimport { type Api, createApi, createAuthorizationHeaders } from '@/api'\nimport { executeRequestTool } from '@/client-tools/execute-request'\nimport { URLS } from '@/consts/urls'\nimport { createError } from '@/entities'\nimport type { ApiMetadata } from '@/entities/registry/document'\nimport type {\n ASK_FOR_AUTHENTICATION_TOOL_NAME,\n AskForAuthenticationInput,\n} from '@/entities/tools/ask-for-authentication'\nimport {\n EXECUTE_CLIENT_SIDE_REQUEST_TOOL_NAME,\n type ExecuteClientSideRequestToolInput,\n type ExecuteClientSideRequestToolOutput,\n} from '@/entities/tools/execute-request'\nimport type {\n GET_MINI_OPENAPI_SPEC_TOOL_NAME,\n GetMiniOpenAPIDocToolInput,\n GetMiniOpenAPIDocToolOutput,\n} from '@/entities/tools/get-mini-openapi-spec'\nimport type {\n GET_OPENAPI_SPECS_SUMMARY_TOOL_NAME,\n GetOpenAPISpecsSummaryToolOutput,\n} from '@/entities/tools/get-openapi-spec-summary'\nimport { createDocumentSettings } from '@/helpers'\nimport { useTermsAndConditions } from '@/hooks/use-term-and-conditions'\nimport { removeTmpDocFromLocalStorage } from '@/hooks/use-upload-tmp-document'\nimport { persistencePlugin } from '@/plugins/persistance'\nimport { loadDocument } from '@/registry/add-documents-to-store'\nimport { createDocumentName } from '@/registry/create-document-name'\nimport type { ChatMode } from '@/types'\n\nexport type RegistryDocument = {\n namespace: string\n slug: string\n}\n\nexport type Tools = {\n [GET_MINI_OPENAPI_SPEC_TOOL_NAME]: {\n input: GetMiniOpenAPIDocToolInput\n output: GetMiniOpenAPIDocToolOutput\n }\n [EXECUTE_CLIENT_SIDE_REQUEST_TOOL_NAME]: {\n input: ExecuteClientSideRequestToolInput\n output: ExecuteClientSideRequestToolOutput\n }\n [GET_OPENAPI_SPECS_SUMMARY_TOOL_NAME]: {\n input: object\n output: GetOpenAPISpecsSummaryToolOutput\n }\n [ASK_FOR_AUTHENTICATION_TOOL_NAME]: {\n input: AskForAuthenticationInput\n output: unknown\n }\n}\n\nexport const STATE_SYMBOL: InjectionKey<State> = Symbol('STATE_SYMBOL')\n\nconst { toast } = useToasts()\n\ntype State = {\n prompt: Ref<string>\n chat: Chat<UIMessage<unknown, UIDataTypes, Tools>>\n workspaceStore: WorkspaceStore\n loading: ComputedRef<boolean>\n settingsModal: ModalState\n eventBus: WorkspaceEventBus\n proxyUrl: ComputedRef<string>\n proxyUrlRaw: Ref<string | undefined>\n config: ComputedRef<ApiReferenceConfigurationRaw>\n registryUrl: string\n dashboardUrl: string\n baseUrl: string\n platformProxyUrl: string\n isLoggedIn?: Ref<boolean>\n registryDocuments: Ref<ApiMetadata[]>\n pendingDocuments: Record<string, boolean>\n mode: ChatMode\n terms: { accepted: Ref<boolean>; accept: () => void }\n addDocument: (document: { namespace: string; slug: string; removable?: boolean; tmp?: boolean }) => Promise<void>\n addDocumentAsync: (document: { namespace: string; slug: string; removable?: boolean }) => Promise<void>\n removeDocument: (document: { namespace: string; slug: string }) => void\n getAccessToken?: () => string\n getAgentKey?: () => string\n api: Api\n uploadedTmpDocumentUrl: Ref<string | undefined>\n curatedDocuments: Ref<ApiMetadata[]>\n getActiveDocumentJson?: () => string\n hideAddApi?: boolean\n}\n\nfunction createChat({\n registryDocuments,\n workspaceStore,\n baseUrl,\n proxyUrl,\n getAccessToken,\n getAgentKey,\n}: {\n registryDocuments: Ref<ApiMetadata[]>\n workspaceStore: WorkspaceStore\n baseUrl: string\n proxyUrl: ComputedRef<string>\n getAccessToken?: () => string\n getAgentKey?: () => string\n}) {\n const chat = new Chat<UIMessage<unknown, UIDataTypes, Tools>>({\n sendAutomaticallyWhen: lastAssistantMessageIsCompleteWithToolCalls,\n transport: new DefaultChatTransport({\n api: `${baseUrl}/vector/openapi/chat`,\n headers: () => createAuthorizationHeaders({ getAccessToken, getAgentKey }),\n body: () => ({\n registryDocuments: registryDocuments.value,\n documentSettings: createDocumentSettings(workspaceStore),\n }),\n }),\n async onToolCall({ toolCall }): Promise<any> {\n if (toolCall.dynamic) {\n return\n }\n\n if (\n toolCall.toolName === EXECUTE_CLIENT_SIDE_REQUEST_TOOL_NAME &&\n toolCall.input.method.toLowerCase() === 'get'\n ) {\n await executeRequestTool({\n documentSettings: createDocumentSettings(workspaceStore),\n input: toolCall.input,\n toolCallId: toolCall.toolCallId,\n chat,\n proxyUrl: proxyUrl.value,\n })\n }\n },\n })\n\n return chat\n}\n\nexport function createState({\n initialRegistryDocuments,\n registryUrl,\n dashboardUrl,\n platformProxyUrl,\n baseUrl,\n mode,\n isLoggedIn,\n getAccessToken,\n getAgentKey,\n getActiveDocumentJson,\n prefilledMessageRef,\n hideAddApi,\n}: {\n initialRegistryDocuments: { namespace: string; slug: string }[]\n registryUrl: string\n dashboardUrl: string\n platformProxyUrl: string\n baseUrl: string\n mode: ChatMode\n isLoggedIn?: Ref<boolean>\n getAccessToken?: () => string\n getAgentKey?: () => string\n getActiveDocumentJson?: () => string\n prefilledMessageRef?: Ref<string>\n hideAddApi?: boolean\n}): State {\n const prompt = ref<State['prompt']['value']>(prefilledMessageRef?.value ?? '')\n const registryDocuments = ref<ApiMetadata[]>([])\n const pendingDocuments = reactive<Record<string, boolean>>({})\n const curatedDocuments = ref<ApiMetadata[]>([])\n const proxyUrlRaw = ref<State['proxyUrlRaw']['value']>(URLS.DEFAULT_PROXY_URL)\n const proxyUrl = computed(() => proxyUrlRaw.value?.trim() || URLS.DEFAULT_PROXY_URL)\n const uploadedTmpDocumentUrl = ref<string>()\n const terms = useTermsAndConditions()\n\n const eventBus = createWorkspaceEventBus()\n const workspaceStore = createWorkspaceStore({\n plugins: [\n persistencePlugin({\n persistAuth: true,\n }),\n ],\n })\n\n const config = computed(() =>\n apiReferenceConfigurationSchema.parse({\n proxyUrl: proxyUrl.value,\n persistAuth: true,\n }),\n )\n\n const chat = createChat({\n registryDocuments,\n workspaceStore,\n baseUrl,\n proxyUrl,\n getAccessToken,\n getAgentKey,\n })\n\n const api = createApi({\n baseUrl,\n getAccessToken,\n getAgentKey,\n })\n\n const loading = computed(\n () =>\n chat.status === 'submitted' ||\n (chat.status === 'streaming' && !chat.lastMessage?.parts.some((part) => part.type === 'text')),\n )\n\n watch(\n () => chat.status,\n () => {\n if (chat.status === 'streaming') {\n prompt.value = ''\n }\n },\n )\n\n if (prefilledMessageRef) {\n watch(prefilledMessageRef, async (val) => {\n if (val) {\n prompt.value = val\n if (terms.accepted.value) {\n await chat.sendMessage({ text: prompt.value })\n }\n }\n })\n }\n\n const settingsModal = useModal()\n\n async function addDocument({\n namespace,\n slug,\n removable = true,\n tmp = false,\n }: {\n namespace: string\n slug: string\n removable?: boolean\n tmp?: boolean\n }) {\n const matchingDoc = registryDocuments.value.find((doc) => doc.namespace === namespace && doc.slug === slug)\n\n if (matchingDoc) {\n return\n }\n\n const identifier = `@${namespace}/${slug}`\n\n pendingDocuments[identifier] = true\n\n const loadDocumentResult = await loadDocument({\n namespace,\n slug,\n workspaceStore,\n registryUrl,\n registryDocuments,\n config: config.value,\n api,\n removable,\n })\n\n pendingDocuments[identifier] = false\n\n if (!loadDocumentResult.success) {\n /**\n * If we are unable to load a document, we just remove it\n * from tmp local storage, do not warn the user.\n */\n if (tmp) {\n removeTmpDocFromLocalStorage()\n throw loadDocumentResult.error\n }\n\n console.warn('[AGENT]: Unable to load document', loadDocumentResult.error)\n toast(`Unable to load the document @${namespace}/${slug}`, 'warn')\n throw loadDocumentResult.error\n }\n }\n\n /**\n * Waits for document to be available in embeddings\n * and adds to the list\n */\n async function addDocumentAsync({\n namespace,\n slug,\n removable = true,\n }: {\n namespace: string\n slug: string\n removable?: boolean\n }) {\n const matchingDoc = registryDocuments.value.find((doc) => doc.namespace === namespace && doc.slug === slug)\n\n if (matchingDoc) {\n return\n }\n\n const identifier = `@${namespace}/${slug}`\n\n pendingDocuments[identifier] = true\n\n const embeddingStatusResponse = await n.fromUnsafe(\n () =>\n fetch(`${baseUrl}/vector/registry/embeddings/${namespace}/${slug}`, {\n method: 'GET',\n }),\n (originalError) => createError('FAILED_TO_GET_EMBEDDING_STATUS', originalError),\n )\n\n if (embeddingStatusResponse.success && embeddingStatusResponse.data.ok) {\n const loadDocumentResult = await loadDocument({\n namespace,\n slug,\n workspaceStore,\n registryUrl,\n registryDocuments,\n config: config.value,\n api,\n removable,\n })\n\n if (!loadDocumentResult.success) {\n console.warn('[AGENT]: Unable to load document', loadDocumentResult.error)\n toast(`Unable to load the document @${namespace}/${slug}`, 'warn')\n }\n } else {\n console.warn('[AGENT]: Document could not be embedded')\n toast(`Unable to embed the document @${namespace}/${slug}`, 'warn')\n }\n\n pendingDocuments[identifier] = false\n }\n\n function removeDocument({ namespace, slug }: { namespace: string; slug: string }) {\n registryDocuments.value = registryDocuments.value.filter(\n (doc) => !(doc.namespace === namespace && doc.slug === slug),\n )\n\n workspaceStore.deleteDocument(createDocumentName(namespace, slug))\n }\n\n initialRegistryDocuments.forEach(({ namespace, slug }) => addDocument({ namespace, slug, removable: false }))\n\n return {\n prompt,\n chat,\n workspaceStore,\n eventBus,\n loading,\n settingsModal,\n config,\n registryUrl,\n dashboardUrl,\n platformProxyUrl,\n baseUrl,\n registryDocuments,\n pendingDocuments,\n proxyUrl,\n proxyUrlRaw,\n mode,\n terms,\n isLoggedIn,\n addDocument,\n addDocumentAsync,\n removeDocument,\n getAccessToken,\n getAgentKey,\n api,\n uploadedTmpDocumentUrl,\n curatedDocuments,\n getActiveDocumentJson,\n hideAddApi,\n }\n}\n\nexport function useState() {\n const state = inject(STATE_SYMBOL)\n\n if (!state) {\n throw new Error('No state provided.')\n }\n\n return state\n}\n"],"mappings":"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"}
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",
13
+ "version": "0.9.14",
14
14
  "engines": {
15
15
  "node": ">=22"
16
16
  },
@@ -50,16 +50,16 @@
50
50
  "vue": "^3.5.26",
51
51
  "whatwg-mimetype": "4.0.0",
52
52
  "zod": "^4.3.5",
53
- "@scalar/components": "0.21.0",
53
+ "@scalar/api-client": "2.39.1",
54
54
  "@scalar/helpers": "0.4.2",
55
- "@scalar/api-client": "2.39.0",
55
+ "@scalar/components": "0.21.1",
56
+ "@scalar/icons": "0.7.0",
56
57
  "@scalar/json-magic": "0.12.4",
57
- "@scalar/icons": "0.6.4",
58
- "@scalar/openapi-types": "0.6.1",
59
58
  "@scalar/themes": "0.15.1",
60
- "@scalar/types": "0.7.4",
59
+ "@scalar/openapi-types": "0.6.1",
60
+ "@scalar/types": "0.7.5",
61
61
  "@scalar/use-toasts": "0.10.1",
62
- "@scalar/workspace-store": "0.41.0"
62
+ "@scalar/workspace-store": "0.41.1"
63
63
  },
64
64
  "devDependencies": {
65
65
  "@modelcontextprotocol/sdk": "1.26.0",