@scalar/agent-chat 0.1.2 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (224) hide show
  1. package/dist/App.vue.d.ts +2 -2
  2. package/dist/App.vue.d.ts.map +1 -1
  3. package/dist/App.vue.js +9 -3
  4. package/dist/App.vue.js.map +1 -1
  5. package/dist/Chat.vue.js +3 -3
  6. package/dist/Chat.vue.js.map +1 -1
  7. package/dist/components/ApprovalSection.vue.d.ts +9 -0
  8. package/dist/components/ApprovalSection.vue.d.ts.map +1 -0
  9. package/dist/components/ApprovalSection.vue.js +8 -0
  10. package/dist/components/ApprovalSection.vue.js.map +1 -0
  11. package/dist/components/ApprovalSection.vue2.js +47 -0
  12. package/dist/components/ApprovalSection.vue2.js.map +1 -0
  13. package/dist/components/AutosendPaused.vue.d.ts +3 -0
  14. package/dist/components/AutosendPaused.vue.d.ts.map +1 -0
  15. package/dist/components/AutosendPaused.vue.js +15 -0
  16. package/dist/components/AutosendPaused.vue.js.map +1 -0
  17. package/dist/components/ContextItem.vue.d.ts.map +1 -1
  18. package/dist/components/ContextItem.vue.js +1 -1
  19. package/dist/components/ContextItem.vue2.js +1 -1
  20. package/dist/components/ContextItem.vue2.js.map +1 -1
  21. package/dist/components/ErrorMessage.vue.d.ts +6 -0
  22. package/dist/components/ErrorMessage.vue.d.ts.map +1 -0
  23. package/dist/components/ErrorMessage.vue.js +8 -0
  24. package/dist/components/ErrorMessage.vue.js.map +1 -0
  25. package/dist/components/ErrorMessage.vue2.js +28 -0
  26. package/dist/components/ErrorMessage.vue2.js.map +1 -0
  27. package/dist/components/LoadingMiniOpenAPIDoc.vue.d.ts.map +1 -1
  28. package/dist/components/LoadingMiniOpenAPIDoc.vue.js +2 -18
  29. package/dist/components/LoadingMiniOpenAPIDoc.vue.js.map +1 -1
  30. package/dist/components/LoadingOpenAPISpecsSummary.vue.d.ts +3 -0
  31. package/dist/components/LoadingOpenAPISpecsSummary.vue.d.ts.map +1 -0
  32. package/dist/components/LoadingOpenAPISpecsSummary.vue.js +16 -0
  33. package/dist/components/LoadingOpenAPISpecsSummary.vue.js.map +1 -0
  34. package/dist/components/RequestApproved.vue.d.ts +3 -0
  35. package/dist/components/RequestApproved.vue.d.ts.map +1 -0
  36. package/dist/components/RequestApproved.vue.js +15 -0
  37. package/dist/components/RequestApproved.vue.js.map +1 -0
  38. package/dist/components/RequestFailed.vue.d.ts +3 -0
  39. package/dist/components/RequestFailed.vue.d.ts.map +1 -0
  40. package/dist/components/RequestFailed.vue.js +26 -0
  41. package/dist/components/RequestFailed.vue.js.map +1 -0
  42. package/dist/components/RequestPreview.vue.d.ts +10 -0
  43. package/dist/components/RequestPreview.vue.d.ts.map +1 -0
  44. package/dist/components/RequestPreview.vue.js +9 -0
  45. package/dist/components/RequestPreview.vue.js.map +1 -0
  46. package/dist/components/RequestPreview.vue2.js +150 -0
  47. package/dist/components/RequestPreview.vue2.js.map +1 -0
  48. package/dist/components/RequestRejected.vue.d.ts +3 -0
  49. package/dist/components/RequestRejected.vue.d.ts.map +1 -0
  50. package/dist/components/RequestRejected.vue.js +24 -0
  51. package/dist/components/RequestRejected.vue.js.map +1 -0
  52. package/dist/components/RequestSuccess.vue.d.ts +3 -0
  53. package/dist/components/RequestSuccess.vue.d.ts.map +1 -0
  54. package/dist/components/RequestSuccess.vue.js +15 -0
  55. package/dist/components/RequestSuccess.vue.js.map +1 -0
  56. package/dist/components/ResponseBody/ResponseBody.vue.d.ts +15 -0
  57. package/dist/components/ResponseBody/ResponseBody.vue.d.ts.map +1 -0
  58. package/dist/components/ResponseBody/ResponseBody.vue.js +45 -0
  59. package/dist/components/ResponseBody/ResponseBody.vue.js.map +1 -0
  60. package/dist/components/ResponseBody/ResponseBody.vue2.js +5 -0
  61. package/dist/components/ResponseBody/ResponseBody.vue2.js.map +1 -0
  62. package/dist/components/ResponseBody/ResponseBodyInfo.vue.d.ts +13 -0
  63. package/dist/components/ResponseBody/ResponseBodyInfo.vue.d.ts.map +1 -0
  64. package/dist/components/ResponseBody/ResponseBodyInfo.vue.js +17 -0
  65. package/dist/components/ResponseBody/ResponseBodyInfo.vue.js.map +1 -0
  66. package/dist/components/ResponseBody/ResponseBodyPreview.vue.d.ts +10 -0
  67. package/dist/components/ResponseBody/ResponseBodyPreview.vue.d.ts.map +1 -0
  68. package/dist/components/ResponseBody/ResponseBodyPreview.vue.js +8 -0
  69. package/dist/components/ResponseBody/ResponseBodyPreview.vue.js.map +1 -0
  70. package/dist/components/ResponseBody/ResponseBodyPreview.vue2.js +73 -0
  71. package/dist/components/ResponseBody/ResponseBodyPreview.vue2.js.map +1 -0
  72. package/dist/components/ResponseBody/ResponseBodyRaw.vue.d.ts +7 -0
  73. package/dist/components/ResponseBody/ResponseBodyRaw.vue.d.ts.map +1 -0
  74. package/dist/components/ResponseBody/ResponseBodyRaw.vue.js +23 -0
  75. package/dist/components/ResponseBody/ResponseBodyRaw.vue.js.map +1 -0
  76. package/dist/components/ResponseBody/ResponseBodyRaw.vue2.js +5 -0
  77. package/dist/components/ResponseBody/ResponseBodyRaw.vue2.js.map +1 -0
  78. package/dist/components/ResponseBody/ResponseBodyToggle.vue.d.ts +10 -0
  79. package/dist/components/ResponseBody/ResponseBodyToggle.vue.d.ts.map +1 -0
  80. package/dist/components/ResponseBody/ResponseBodyToggle.vue.js +30 -0
  81. package/dist/components/ResponseBody/ResponseBodyToggle.vue.js.map +1 -0
  82. package/dist/components/ResponseBody/ResponseBodyToggle.vue2.js +5 -0
  83. package/dist/components/ResponseBody/ResponseBodyToggle.vue2.js.map +1 -0
  84. package/dist/components/ResponseBody/helpers/media-types.d.ts +15 -0
  85. package/dist/components/ResponseBody/helpers/media-types.d.ts.map +1 -0
  86. package/dist/components/ResponseBody/helpers/media-types.js +134 -0
  87. package/dist/components/ResponseBody/helpers/media-types.js.map +1 -0
  88. package/dist/components/ResponseBody/helpers/process-response-body.d.ts +10 -0
  89. package/dist/components/ResponseBody/helpers/process-response-body.d.ts.map +1 -0
  90. package/dist/components/ResponseBody/helpers/process-response-body.js +63 -0
  91. package/dist/components/ResponseBody/helpers/process-response-body.js.map +1 -0
  92. package/dist/components/SearchPopover.vue.d.ts +13 -0
  93. package/dist/components/SearchPopover.vue.d.ts.map +1 -0
  94. package/dist/components/SearchPopover.vue.js +8 -0
  95. package/dist/components/SearchPopover.vue.js.map +1 -0
  96. package/dist/components/SearchPopover.vue2.js +78 -0
  97. package/dist/components/SearchPopover.vue2.js.map +1 -0
  98. package/dist/components/SendingRequest.vue.d.ts.map +1 -1
  99. package/dist/components/SendingRequest.vue.js +1 -1
  100. package/dist/components/SendingRequest.vue.js.map +1 -1
  101. package/dist/components/Suggestion.vue.d.ts.map +1 -1
  102. package/dist/components/Suggestion.vue.js +1 -1
  103. package/dist/components/Suggestion.vue2.js +1 -1
  104. package/dist/components/Suggestion.vue2.js.map +1 -1
  105. package/dist/components/TestRequestButton.vue2.js +1 -1
  106. package/dist/components/TestRequestButton.vue2.js.map +1 -1
  107. package/dist/helpers.d.ts +379 -0
  108. package/dist/helpers.d.ts.map +1 -1
  109. package/dist/helpers.js +135 -45
  110. package/dist/helpers.js.map +1 -1
  111. package/dist/hooks/useChatApprovals.d.ts +24 -0
  112. package/dist/hooks/useChatApprovals.d.ts.map +1 -0
  113. package/dist/hooks/useChatApprovals.js +25 -0
  114. package/dist/hooks/useChatApprovals.js.map +1 -0
  115. package/dist/hooks/useChatOperationBlocks.js +1 -1
  116. package/dist/hooks/useSearch.d.ts +26 -0
  117. package/dist/hooks/useSearch.d.ts.map +1 -0
  118. package/dist/hooks/useSearch.js +36 -0
  119. package/dist/hooks/useSearch.js.map +1 -0
  120. package/dist/node_modules/.pnpm/{zod@4.1.11 → zod@4.3.5}/node_modules/zod/v4/core/api.js +1 -0
  121. package/dist/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/api.js.map +1 -0
  122. package/dist/node_modules/.pnpm/{zod@4.1.11 → zod@4.3.5}/node_modules/zod/v4/core/core.js +20 -11
  123. package/dist/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/core.js.map +1 -0
  124. package/dist/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/errors.js.map +1 -0
  125. package/dist/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/parse.js.map +1 -0
  126. package/dist/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/regexes.js.map +1 -0
  127. package/dist/node_modules/.pnpm/{zod@4.1.11 → zod@4.3.5}/node_modules/zod/v4/core/schemas.js +3 -3
  128. package/dist/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/schemas.js.map +1 -0
  129. package/dist/node_modules/.pnpm/{zod@4.1.11 → zod@4.3.5}/node_modules/zod/v4/core/util.js +24 -0
  130. package/dist/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/util.js.map +1 -0
  131. package/dist/node_modules/.pnpm/{zod@4.1.11 → zod@4.3.5}/node_modules/zod/v4/core/versions.js +2 -2
  132. package/dist/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/versions.js.map +1 -0
  133. package/dist/node_modules/.pnpm/{zod@4.1.11 → zod@4.3.5}/node_modules/zod/v4/mini/schemas.js +12 -11
  134. package/dist/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/mini/schemas.js.map +1 -0
  135. package/dist/package.json +9 -5
  136. package/dist/registry/add-documents-to-store.d.ts +21 -0
  137. package/dist/registry/add-documents-to-store.d.ts.map +1 -0
  138. package/dist/registry/add-documents-to-store.js +42 -0
  139. package/dist/registry/add-documents-to-store.js.map +1 -0
  140. package/dist/state/state.d.ts +29 -14
  141. package/dist/state/state.d.ts.map +1 -1
  142. package/dist/state/state.js +45 -40
  143. package/dist/state/state.js.map +1 -1
  144. package/dist/style.css +686 -234
  145. package/dist/views/Chat/Chat.vue.d.ts.map +1 -1
  146. package/dist/views/Chat/Chat.vue.js +1 -1
  147. package/dist/views/Chat/Chat.vue2.js +17 -5
  148. package/dist/views/Chat/Chat.vue2.js.map +1 -1
  149. package/dist/views/Chat/Messages/ExecuteRequestTool.vue.d.ts.map +1 -1
  150. package/dist/views/Chat/Messages/ExecuteRequestTool.vue.js +1 -1
  151. package/dist/views/Chat/Messages/ExecuteRequestTool.vue2.js +20 -43
  152. package/dist/views/Chat/Messages/ExecuteRequestTool.vue2.js.map +1 -1
  153. package/dist/views/Chat/Messages/GetMiniOpenAPIDocTool.vue.d.ts.map +1 -1
  154. package/dist/views/Chat/Messages/GetMiniOpenAPIDocTool.vue.js +1 -1
  155. package/dist/views/Chat/Messages/GetMiniOpenAPIDocTool.vue2.js +2 -3
  156. package/dist/views/Chat/Messages/GetMiniOpenAPIDocTool.vue2.js.map +1 -1
  157. package/dist/views/Chat/Messages/GetOpenAPISpecsSummary.vue.d.ts +11 -0
  158. package/dist/views/Chat/Messages/GetOpenAPISpecsSummary.vue.d.ts.map +1 -0
  159. package/dist/views/Chat/Messages/GetOpenAPISpecsSummary.vue.js +32 -0
  160. package/dist/views/Chat/Messages/GetOpenAPISpecsSummary.vue.js.map +1 -0
  161. package/dist/views/Chat/Messages/GetOpenAPISpecsSummary.vue2.js +5 -0
  162. package/dist/views/Chat/Messages/GetOpenAPISpecsSummary.vue2.js.map +1 -0
  163. package/dist/views/Chat/Messages/Text.vue.js +1 -1
  164. package/dist/views/Chat/Messages/Text.vue.js.map +1 -1
  165. package/dist/views/Layout.vue.d.ts.map +1 -1
  166. package/dist/views/Layout.vue.js +1 -1
  167. package/dist/views/Layout.vue2.js +0 -4
  168. package/dist/views/Layout.vue2.js.map +1 -1
  169. package/dist/views/PromptForm.vue.d.ts.map +1 -1
  170. package/dist/views/PromptForm.vue.js +1 -1
  171. package/dist/views/PromptForm.vue2.js +129 -72
  172. package/dist/views/PromptForm.vue2.js.map +1 -1
  173. package/dist/views/{Auth.vue.d.ts → Settings/Auth.vue.d.ts} +1 -0
  174. package/dist/views/Settings/Auth.vue.d.ts.map +1 -0
  175. package/dist/views/{Auth.vue.js → Settings/Auth.vue.js} +21 -26
  176. package/dist/views/Settings/Auth.vue.js.map +1 -0
  177. package/dist/views/Settings/DocSettings.vue.d.ts +8 -0
  178. package/dist/views/Settings/DocSettings.vue.d.ts.map +1 -0
  179. package/dist/views/Settings/DocSettings.vue.js +8 -0
  180. package/dist/views/Settings/DocSettings.vue.js.map +1 -0
  181. package/dist/views/Settings/DocSettings.vue2.js +50 -0
  182. package/dist/views/Settings/DocSettings.vue2.js.map +1 -0
  183. package/dist/views/Settings/Settings.vue.d.ts.map +1 -0
  184. package/dist/views/{Settings.vue.js → Settings/Settings.vue.js} +2 -2
  185. package/dist/views/Settings/Settings.vue2.js +78 -0
  186. package/dist/views/Settings/Settings.vue2.js.map +1 -0
  187. package/dist/views/Start.vue.d.ts.map +1 -1
  188. package/dist/views/Start.vue.js +1 -1
  189. package/dist/views/Start.vue2.js +0 -1
  190. package/dist/views/Start.vue2.js.map +1 -1
  191. package/package.json +3 -33
  192. package/dist/hooks/useActiveServer.d.ts +0 -2
  193. package/dist/hooks/useActiveServer.d.ts.map +0 -1
  194. package/dist/hooks/useActiveServer.js +0 -20
  195. package/dist/hooks/useActiveServer.js.map +0 -1
  196. package/dist/hooks/useSecuritySchemes.d.ts +0 -2
  197. package/dist/hooks/useSecuritySchemes.d.ts.map +0 -1
  198. package/dist/hooks/useSecuritySchemes.js +0 -29
  199. package/dist/hooks/useSecuritySchemes.js.map +0 -1
  200. package/dist/node_modules/.pnpm/zod@4.1.11/node_modules/zod/v4/core/api.js.map +0 -1
  201. package/dist/node_modules/.pnpm/zod@4.1.11/node_modules/zod/v4/core/core.js.map +0 -1
  202. package/dist/node_modules/.pnpm/zod@4.1.11/node_modules/zod/v4/core/errors.js.map +0 -1
  203. package/dist/node_modules/.pnpm/zod@4.1.11/node_modules/zod/v4/core/parse.js.map +0 -1
  204. package/dist/node_modules/.pnpm/zod@4.1.11/node_modules/zod/v4/core/regexes.js.map +0 -1
  205. package/dist/node_modules/.pnpm/zod@4.1.11/node_modules/zod/v4/core/schemas.js.map +0 -1
  206. package/dist/node_modules/.pnpm/zod@4.1.11/node_modules/zod/v4/core/util.js.map +0 -1
  207. package/dist/node_modules/.pnpm/zod@4.1.11/node_modules/zod/v4/core/versions.js.map +0 -1
  208. package/dist/node_modules/.pnpm/zod@4.1.11/node_modules/zod/v4/mini/schemas.js.map +0 -1
  209. package/dist/registry/get-document.d.ts +0 -4
  210. package/dist/registry/get-document.d.ts.map +0 -1
  211. package/dist/registry/get-document.js +0 -23
  212. package/dist/registry/get-document.js.map +0 -1
  213. package/dist/views/Auth.vue.d.ts.map +0 -1
  214. package/dist/views/Auth.vue.js.map +0 -1
  215. package/dist/views/Settings.vue.d.ts.map +0 -1
  216. package/dist/views/Settings.vue2.js +0 -81
  217. package/dist/views/Settings.vue2.js.map +0 -1
  218. /package/dist/node_modules/.pnpm/{zod@4.1.11 → zod@4.3.5}/node_modules/zod/v4/core/errors.js +0 -0
  219. /package/dist/node_modules/.pnpm/{zod@4.1.11 → zod@4.3.5}/node_modules/zod/v4/core/parse.js +0 -0
  220. /package/dist/node_modules/.pnpm/{zod@4.1.11 → zod@4.3.5}/node_modules/zod/v4/core/regexes.js +0 -0
  221. /package/dist/views/{Auth.vue2.js → Settings/Auth.vue2.js} +0 -0
  222. /package/dist/views/{Auth.vue2.js.map → Settings/Auth.vue2.js.map} +0 -0
  223. /package/dist/views/{Settings.vue.d.ts → Settings/Settings.vue.d.ts} +0 -0
  224. /package/dist/views/{Settings.vue.js.map → Settings/Settings.vue.js.map} +0 -0
package/dist/helpers.d.ts CHANGED
@@ -2,7 +2,11 @@ import type { ToolUIPart, UIDataTypes, UIMessagePart } from 'ai';
2
2
  import type { MergedSecuritySchemes } from '@scalar/api-client/v2/blocks/scalar-auth-selector-block';
3
3
  import type { OpenAPIV3_1 } from '@scalar/openapi-types';
4
4
  import type { AuthenticationConfiguration } from '@scalar/types/api-reference';
5
+ import type { WorkspaceStore } from '@scalar/workspace-store/client';
6
+ import type { WorkspaceDocument } from '@scalar/workspace-store/schemas';
7
+ import type { XScalarSelectedSecurity } from '@scalar/workspace-store/schemas/extensions/security/x-scalar-selected-security';
5
8
  import type { OpenApiDocument, OperationObject, ParameterObject, PathItemObject, SecurityRequirementObject, SecuritySchemeObject, ServerObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document';
9
+ import { type SecuritySchemes } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document';
6
10
  import type { Tools } from './state/state.js';
7
11
  /** Combine pathItem and operation parameters into a single, dereferenced parameter array */
8
12
  export declare const combineParams: (pathParams?: PathItemObject["parameters"], operationParams?: OperationObject["parameters"]) => ParameterObject[];
@@ -36,4 +40,379 @@ export declare const getDefaultSecurity: (securityRequirements: SecurityRequirem
36
40
  */
37
41
  export declare const filterSelectedSecurity: (document: OpenApiDocument, operation: OperationObject | null, securitySchemes?: MergedSecuritySchemes) => SecuritySchemeObject[];
38
42
  export declare function getOperations(doc: Partial<OpenAPIV3_1.Document>): OperationObject[];
43
+ /** Flattens all security requirements from a document */
44
+ export declare function getSecurityFromDocument(document: WorkspaceDocument): SecuritySchemeObject[];
45
+ /** Generate document settings from workspace store */
46
+ export declare function createDocumentSettings(workspaceStore: WorkspaceStore): {
47
+ [k: string]: {
48
+ activeServer: ServerObject | null;
49
+ securitySchemes: SecuritySchemeObject[];
50
+ };
51
+ };
52
+ /**
53
+ * Provides an interface to store and retrieve the selected client value
54
+ * in local storage.
55
+ */
56
+ export declare const clientStorage: () => {
57
+ /**
58
+ * Gets the stored selected client from local storage.
59
+ */
60
+ get: () => string | null;
61
+ /**
62
+ * Stores the selected client value in local storage.
63
+ * @param value The value to store
64
+ */
65
+ set: (value: string) => void;
66
+ };
67
+ /**
68
+ * Provides an interface to store and retrieve authentication scheme
69
+ * information in local storage, including both the available schemes and
70
+ * the user's selected schemes.
71
+ */
72
+ export declare const authStorage: () => {
73
+ /**
74
+ * Retrieves and coerces the authentication schemes stored in local storage.
75
+ */
76
+ getSchemas: (slug: string) => {
77
+ [x: string]: ({
78
+ description?: string | undefined;
79
+ } & {
80
+ 'x-scalar-secret-token': string;
81
+ } & {
82
+ type: "apiKey";
83
+ in: "header" | "query" | "cookie";
84
+ name: string;
85
+ }) | ({
86
+ description?: string | undefined;
87
+ } & {
88
+ 'x-scalar-secret-token': string;
89
+ } & {
90
+ 'x-scalar-secret-username': string;
91
+ 'x-scalar-secret-password': string;
92
+ } & {
93
+ bearerFormat?: string | undefined;
94
+ type: "http";
95
+ scheme: "basic" | "bearer";
96
+ }) | ({
97
+ description?: string | undefined;
98
+ } & {
99
+ type: "oauth2";
100
+ flows: {
101
+ password?: ({
102
+ refreshUrl: string;
103
+ scopes: {
104
+ [x: string]: string;
105
+ };
106
+ } & {
107
+ 'x-scalar-secret-client-id': string;
108
+ } & {
109
+ 'x-scalar-secret-token': string;
110
+ } & {
111
+ 'x-scalar-security-query'?: {
112
+ [x: string]: string;
113
+ } | undefined;
114
+ } & {
115
+ 'x-scalar-security-body'?: {
116
+ [x: string]: string;
117
+ } | undefined;
118
+ } & {
119
+ 'x-tokenName'?: string | undefined;
120
+ } & {
121
+ tokenUrl: string;
122
+ } & {
123
+ 'x-scalar-secret-username': string;
124
+ 'x-scalar-secret-password': string;
125
+ } & {
126
+ 'x-scalar-secret-client-secret': string;
127
+ } & {
128
+ 'x-scalar-credentials-location'?: "body" | "header" | undefined;
129
+ }) | undefined;
130
+ implicit?: ({
131
+ refreshUrl: string;
132
+ scopes: {
133
+ [x: string]: string;
134
+ };
135
+ } & {
136
+ 'x-scalar-secret-client-id': string;
137
+ } & {
138
+ 'x-scalar-secret-token': string;
139
+ } & {
140
+ 'x-scalar-security-query'?: {
141
+ [x: string]: string;
142
+ } | undefined;
143
+ } & {
144
+ 'x-scalar-security-body'?: {
145
+ [x: string]: string;
146
+ } | undefined;
147
+ } & {
148
+ 'x-tokenName'?: string | undefined;
149
+ } & {
150
+ authorizationUrl: string;
151
+ } & {
152
+ 'x-scalar-secret-redirect-uri': string;
153
+ }) | undefined;
154
+ clientCredentials?: ({
155
+ refreshUrl: string;
156
+ scopes: {
157
+ [x: string]: string;
158
+ };
159
+ } & {
160
+ 'x-scalar-secret-client-id': string;
161
+ } & {
162
+ 'x-scalar-secret-token': string;
163
+ } & {
164
+ 'x-scalar-security-query'?: {
165
+ [x: string]: string;
166
+ } | undefined;
167
+ } & {
168
+ 'x-scalar-security-body'?: {
169
+ [x: string]: string;
170
+ } | undefined;
171
+ } & {
172
+ 'x-tokenName'?: string | undefined;
173
+ } & {
174
+ tokenUrl: string;
175
+ } & {
176
+ 'x-scalar-secret-client-secret': string;
177
+ } & {
178
+ 'x-scalar-credentials-location'?: "body" | "header" | undefined;
179
+ }) | undefined;
180
+ authorizationCode?: ({
181
+ refreshUrl: string;
182
+ scopes: {
183
+ [x: string]: string;
184
+ };
185
+ } & {
186
+ 'x-scalar-secret-client-id': string;
187
+ } & {
188
+ 'x-scalar-secret-token': string;
189
+ } & {
190
+ 'x-scalar-security-query'?: {
191
+ [x: string]: string;
192
+ } | undefined;
193
+ } & {
194
+ 'x-scalar-security-body'?: {
195
+ [x: string]: string;
196
+ } | undefined;
197
+ } & {
198
+ 'x-tokenName'?: string | undefined;
199
+ } & {
200
+ authorizationUrl: string;
201
+ tokenUrl: string;
202
+ } & {
203
+ 'x-scalar-secret-client-secret': string;
204
+ } & {
205
+ 'x-scalar-secret-redirect-uri': string;
206
+ } & {
207
+ 'x-usePkce': "SHA-256" | "plain" | "no";
208
+ } & {
209
+ 'x-scalar-credentials-location'?: "body" | "header" | undefined;
210
+ }) | undefined;
211
+ };
212
+ } & {
213
+ 'x-default-scopes'?: string[] | undefined;
214
+ }) | ({
215
+ description?: string | undefined;
216
+ } & {
217
+ type: "openIdConnect";
218
+ openIdConnectUrl: string;
219
+ }) | ({
220
+ summary?: string | undefined;
221
+ description?: string | undefined;
222
+ $ref: string;
223
+ } & {
224
+ $status?: "error" | "loading" | undefined;
225
+ $global?: boolean | undefined;
226
+ } & {
227
+ '$ref-value': ({
228
+ description?: string | undefined;
229
+ } & {
230
+ 'x-scalar-secret-token': string;
231
+ } & {
232
+ type: "apiKey";
233
+ in: "header" | "query" | "cookie";
234
+ name: string;
235
+ }) | ({
236
+ description?: string | undefined;
237
+ } & {
238
+ 'x-scalar-secret-token': string;
239
+ } & {
240
+ 'x-scalar-secret-username': string;
241
+ 'x-scalar-secret-password': string;
242
+ } & {
243
+ bearerFormat?: string | undefined;
244
+ type: "http";
245
+ scheme: "basic" | "bearer";
246
+ }) | ({
247
+ description?: string | undefined;
248
+ } & {
249
+ type: "oauth2";
250
+ flows: {
251
+ password?: ({
252
+ refreshUrl: string;
253
+ scopes: {
254
+ [x: string]: string;
255
+ };
256
+ } & {
257
+ 'x-scalar-secret-client-id': string;
258
+ } & {
259
+ 'x-scalar-secret-token': string;
260
+ } & {
261
+ 'x-scalar-security-query'?: {
262
+ [x: string]: string;
263
+ } | undefined;
264
+ } & {
265
+ 'x-scalar-security-body'?: {
266
+ [x: string]: string;
267
+ } | undefined;
268
+ } & {
269
+ 'x-tokenName'?: string | undefined;
270
+ } & {
271
+ tokenUrl: string;
272
+ } & {
273
+ 'x-scalar-secret-username': string;
274
+ 'x-scalar-secret-password': string;
275
+ } & {
276
+ 'x-scalar-secret-client-secret': string;
277
+ } & {
278
+ 'x-scalar-credentials-location'?: "body" | "header" | undefined;
279
+ }) | undefined;
280
+ implicit?: ({
281
+ refreshUrl: string;
282
+ scopes: {
283
+ [x: string]: string;
284
+ };
285
+ } & {
286
+ 'x-scalar-secret-client-id': string;
287
+ } & {
288
+ 'x-scalar-secret-token': string;
289
+ } & {
290
+ 'x-scalar-security-query'?: {
291
+ [x: string]: string;
292
+ } | undefined;
293
+ } & {
294
+ 'x-scalar-security-body'?: {
295
+ [x: string]: string;
296
+ } | undefined;
297
+ } & {
298
+ 'x-tokenName'?: string | undefined;
299
+ } & {
300
+ authorizationUrl: string;
301
+ } & {
302
+ 'x-scalar-secret-redirect-uri': string;
303
+ }) | undefined;
304
+ clientCredentials?: ({
305
+ refreshUrl: string;
306
+ scopes: {
307
+ [x: string]: string;
308
+ };
309
+ } & {
310
+ 'x-scalar-secret-client-id': string;
311
+ } & {
312
+ 'x-scalar-secret-token': string;
313
+ } & {
314
+ 'x-scalar-security-query'?: {
315
+ [x: string]: string;
316
+ } | undefined;
317
+ } & {
318
+ 'x-scalar-security-body'?: {
319
+ [x: string]: string;
320
+ } | undefined;
321
+ } & {
322
+ 'x-tokenName'?: string | undefined;
323
+ } & {
324
+ tokenUrl: string;
325
+ } & {
326
+ 'x-scalar-secret-client-secret': string;
327
+ } & {
328
+ 'x-scalar-credentials-location'?: "body" | "header" | undefined;
329
+ }) | undefined;
330
+ authorizationCode?: ({
331
+ refreshUrl: string;
332
+ scopes: {
333
+ [x: string]: string;
334
+ };
335
+ } & {
336
+ 'x-scalar-secret-client-id': string;
337
+ } & {
338
+ 'x-scalar-secret-token': string;
339
+ } & {
340
+ 'x-scalar-security-query'?: {
341
+ [x: string]: string;
342
+ } | undefined;
343
+ } & {
344
+ 'x-scalar-security-body'?: {
345
+ [x: string]: string;
346
+ } | undefined;
347
+ } & {
348
+ 'x-tokenName'?: string | undefined;
349
+ } & {
350
+ authorizationUrl: string;
351
+ tokenUrl: string;
352
+ } & {
353
+ 'x-scalar-secret-client-secret': string;
354
+ } & {
355
+ 'x-scalar-secret-redirect-uri': string;
356
+ } & {
357
+ 'x-usePkce': "SHA-256" | "plain" | "no";
358
+ } & {
359
+ 'x-scalar-credentials-location'?: "body" | "header" | undefined;
360
+ }) | undefined;
361
+ };
362
+ } & {
363
+ 'x-default-scopes'?: string[] | undefined;
364
+ }) | ({
365
+ description?: string | undefined;
366
+ } & {
367
+ type: "openIdConnect";
368
+ openIdConnectUrl: string;
369
+ });
370
+ });
371
+ };
372
+ /**
373
+ * Stores the authentication schemes in local storage.
374
+ * @param value The SecuritySchemes object to stringify and store.
375
+ */
376
+ setSchemas: (slug: string, value: SecuritySchemes) => void;
377
+ /**
378
+ * Retrieves and coerces the selected authentication schemes stored in local storage.
379
+ */
380
+ getSelectedSchemes: (slug: string) => {
381
+ 'x-scalar-selected-security'?: {
382
+ selectedSchemes: {}[];
383
+ selectedIndex: number;
384
+ } | undefined;
385
+ };
386
+ /**
387
+ * Stores the user's selected authentication schemes in local storage.
388
+ * @param value The XScalarSelectedSecurity object to stringify and store.
389
+ */
390
+ setSelectedSchemes: (slug: string, value: XScalarSelectedSecurity) => void;
391
+ };
392
+ /**
393
+ * Recursively merges secret values from stored data into the current schema.
394
+ * Only merges secrets if the corresponding structure exists in the current schema.
395
+ *
396
+ * This function walks through both objects in parallel, copying any keys that
397
+ * start with 'x-scalar-secret-' from the stored object to the current object,
398
+ * but only if the path exists in the current schema.
399
+ *
400
+ * @param current - The current schema object (source of truth for structure)
401
+ * @param stored - The stored object containing secret values to restore
402
+ */
403
+ export declare const mergeSecrets: (current: unknown, stored: unknown) => void;
404
+ /**
405
+ * Restores authentication secrets from local storage to the workspace store.
406
+ *
407
+ * This function iterates through stored authentication schemes and restores
408
+ * any secret values (keys starting with x-scalar-secret-) to the active
409
+ * document's security schemes. It uses the current security schemes as the
410
+ * source of truth, only restoring secrets for structures that exist in the
411
+ * current document.
412
+ */
413
+ export declare const restoreAuthSecretsFromStorage: ({ documentName, workspaceStore, }: {
414
+ documentName: string;
415
+ workspaceStore: WorkspaceStore;
416
+ }) => void;
417
+ export declare function safeParseJson(value: string): any;
39
418
  //# sourceMappingURL=helpers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,IAAI,CAAA;AAGhE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yDAAyD,CAAA;AAGpG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAA;AAG9E,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EACf,eAAe,EACf,cAAc,EACd,yBAAyB,EACzB,oBAAoB,EACpB,YAAY,EACb,MAAM,8DAA8D,CAAA;AAErE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAE1C,4FAA4F;AAC5F,eAAO,MAAM,aAAa,GACxB,aAAY,cAAc,CAAC,YAAY,CAAM,EAC7C,kBAAiB,eAAe,CAAC,YAAY,CAAM,KAClD,eAAe,EAgBjB,CAAA;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,GAAG,gBAAgB,EAAE,CAAC,YAAY,EAAE,GAAG,YAAY,GAAG,SAAS,GAAG,IAAI,CAAC,EAAE,GACxE,YAAY,GAAG,SAAS,CAyB1B;AAED,4CAA4C;AAC5C,wBAAgB,UAAU,CACxB,IAAI,EAAE,aAAa,CAAC,WAAW,EAAE,KAAK,CAAC,GACtC,IAAI,IAAI,UAAU,CAAC,KAAK,CAAC,CAE3B;AAED;;;GAGG;AACH,eAAO,MAAM,gBAAgB,GAC3B,QAAQ,oBAAoB,GAAG,SAAS,KACvC,MAAM,EAMR,CAAA;AA2CD;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,GAC7B,sBAAsB,yBAAyB,EAAE,EACjD,yBAAyB,2BAA2B,CAAC,yBAAyB,CAAC,EAC/E,iBAAiB,qBAAqB,KACrC,yBAAyB,GAAG,IAc9B,CAAA;AAMD;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,GACjC,UAAU,eAAe,EACzB,WAAW,eAAe,GAAG,IAAI,EACjC,kBAAiB,qBAA0B,KAC1C,oBAAoB,EAsCtB,CAAA;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,GAGzD,eAAe,EAAE,CACvB"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../src/helpers.ts"],"names":[],"mappings":"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"}
package/dist/helpers.js CHANGED
@@ -1,8 +1,11 @@
1
1
  import { getSecuritySchemes } from "@scalar/api-client/v2/blocks/operation-block";
2
- import { getSelectedSecurity } from "@scalar/api-client/v2/features/operation";
2
+ import { getSelectedSecurity, getSelectedServer } from "@scalar/api-client/v2/features/operation";
3
3
  import { isDefined } from "@scalar/helpers/array/is-defined";
4
+ import { isObject } from "@scalar/helpers/object/is-object";
5
+ import { REFERENCE_LS_KEYS, safeLocalStorage } from "@scalar/helpers/object/local-storage";
4
6
  import { getResolvedRef } from "@scalar/workspace-store/helpers/get-resolved-ref";
5
- import { unpackProxyObject } from "@scalar/workspace-store/helpers/unpack-proxy";
7
+ import { coerceValue } from "@scalar/workspace-store/schemas/typebox-coerce";
8
+ import { XScalarSelectedSecuritySchema, SecuritySchemesSchema } from "@scalar/workspace-store/schemas/v3.1/strict/openapi-document";
6
9
  const combineParams = (pathParams = [], operationParams = []) => {
7
10
  const allParams = [...pathParams, ...operationParams].map((param) => getResolvedRef(param)).filter((e) => isDefined(e) && e.name);
8
11
  const uniqueParams = /* @__PURE__ */ new Map();
@@ -33,46 +36,6 @@ function getFirstServer(...availableServers) {
33
36
  }
34
37
  return void 0;
35
38
  }
36
- const getDefaultScopes = (scheme) => {
37
- if (!scheme || scheme.type !== "oauth2") {
38
- return [];
39
- }
40
- return scheme["x-default-scopes"] ?? [];
41
- };
42
- const addSchemeToRequirement = (acc, schemeName, securitySchemes) => {
43
- const scheme = getResolvedRef(securitySchemes[schemeName]);
44
- acc[schemeName] = getDefaultScopes(scheme);
45
- };
46
- const buildSecurityRequirementFromPreferred = (preferredSecurityScheme, securitySchemes) => {
47
- if (!Array.isArray(preferredSecurityScheme)) {
48
- const scheme = getResolvedRef(securitySchemes[preferredSecurityScheme]);
49
- return { [preferredSecurityScheme]: getDefaultScopes(scheme) };
50
- }
51
- const requirement = {};
52
- for (const item of preferredSecurityScheme) {
53
- if (Array.isArray(item)) {
54
- for (const schemeName of item) {
55
- addSchemeToRequirement(requirement, schemeName, securitySchemes);
56
- }
57
- } else {
58
- addSchemeToRequirement(requirement, item, securitySchemes);
59
- }
60
- }
61
- return requirement;
62
- };
63
- const getDefaultSecurity = (securityRequirements, preferredSecurityScheme, securitySchemes) => {
64
- if (preferredSecurityScheme) {
65
- return buildSecurityRequirementFromPreferred(
66
- preferredSecurityScheme,
67
- securitySchemes
68
- );
69
- }
70
- const firstRequirement = securityRequirements[0];
71
- if (firstRequirement) {
72
- return unpackProxyObject(firstRequirement, { depth: 1 });
73
- }
74
- return null;
75
- };
76
39
  const getKey = (requirement) => Object.keys(requirement).sort().join(",");
77
40
  const filterSelectedSecurity = (document, operation, securitySchemes = {}) => {
78
41
  const securityRequirements = operation?.security ?? document.security ?? [];
@@ -100,12 +63,139 @@ function getOperations(doc) {
100
63
  (path) => Object.values(path ?? {})
101
64
  );
102
65
  }
66
+ function getSecurityFromDocument(document) {
67
+ const selectedSchemes = document["x-scalar-selected-security"]?.selectedSchemes ?? [];
68
+ const schemeKeys = selectedSchemes.flatMap((scheme) => Object.keys(scheme));
69
+ const securitySchemes = document.components?.securitySchemes;
70
+ if (!securitySchemes) return [];
71
+ return schemeKeys.reduce((acc, cur) => {
72
+ const security = securitySchemes[cur];
73
+ if (security) acc.push(getResolvedRef(security));
74
+ return acc;
75
+ }, []);
76
+ }
77
+ function createDocumentSettings(workspaceStore) {
78
+ return Object.fromEntries(
79
+ Object.entries(workspaceStore.workspace.documents).map(
80
+ ([key, document]) => [
81
+ key,
82
+ {
83
+ activeServer: getSelectedServer(document),
84
+ securitySchemes: getSecurityFromDocument(document)
85
+ }
86
+ ]
87
+ )
88
+ );
89
+ }
90
+ const storage = safeLocalStorage();
91
+ const authStorage = () => {
92
+ const schemasKey = REFERENCE_LS_KEYS.AUTH_SCHEMES;
93
+ const selectedSchemesKey = REFERENCE_LS_KEYS.SELECTED_AUTH_SCHEMES;
94
+ const getAuthId = (type, prefix) => {
95
+ const getKey2 = (type2) => {
96
+ return type2 === "schemas" ? schemasKey : selectedSchemesKey;
97
+ };
98
+ return `${prefix}-${getKey2(type)}`;
99
+ };
100
+ return {
101
+ /**
102
+ * Retrieves and coerces the authentication schemes stored in local storage.
103
+ */
104
+ getSchemas: (slug) => {
105
+ const parsed = JSON.parse(
106
+ storage.getItem(getAuthId("schemas", slug)) ?? "{}"
107
+ );
108
+ return coerceValue(SecuritySchemesSchema, parsed);
109
+ },
110
+ /**
111
+ * Stores the authentication schemes in local storage.
112
+ * @param value The SecuritySchemes object to stringify and store.
113
+ */
114
+ setSchemas: (slug, value) => {
115
+ storage.setItem(getAuthId("schemas", slug), JSON.stringify(value));
116
+ },
117
+ /**
118
+ * Retrieves and coerces the selected authentication schemes stored in local storage.
119
+ */
120
+ getSelectedSchemes: (slug) => {
121
+ const parsed = JSON.parse(
122
+ storage.getItem(getAuthId("selectedSchemes", slug)) ?? "{}"
123
+ );
124
+ return coerceValue(XScalarSelectedSecuritySchema, parsed);
125
+ },
126
+ /**
127
+ * Stores the user's selected authentication schemes in local storage.
128
+ * @param value The XScalarSelectedSecurity object to stringify and store.
129
+ */
130
+ setSelectedSchemes: (slug, value) => {
131
+ storage.setItem(getAuthId("selectedSchemes", slug), JSON.stringify(value));
132
+ }
133
+ };
134
+ };
135
+ const mergeSecrets = (current, stored) => {
136
+ if (!isObject(current) || !isObject(stored)) {
137
+ return;
138
+ }
139
+ for (const [key, storedValue] of Object.entries(stored)) {
140
+ if (typeof storedValue !== "object") {
141
+ current[key] = storedValue;
142
+ continue;
143
+ }
144
+ mergeSecrets(getResolvedRef(current[key]), storedValue);
145
+ }
146
+ };
147
+ const isSchemeValid = (scheme, availableSchemes) => Object.keys(scheme).every((key) => availableSchemes.has(key));
148
+ const clampSelectedIndex = (selectedIndex, schemesLength) => selectedIndex >= schemesLength ? schemesLength - 1 : selectedIndex;
149
+ const restoreAuthSecretsFromStorage = ({
150
+ documentName,
151
+ workspaceStore
152
+ }) => {
153
+ const storedAuthSchemes = authStorage().getSchemas(documentName);
154
+ const document = workspaceStore.workspace.documents[documentName];
155
+ if (!document) return;
156
+ const authPersistence = authStorage();
157
+ const storedSelectedAuthSchemes = authPersistence.getSelectedSchemes(documentName);
158
+ const availableSchemes = new Set(
159
+ Object.keys(document.components?.securitySchemes ?? {})
160
+ );
161
+ const selectedSchemes = storedSelectedAuthSchemes["x-scalar-selected-security"]?.selectedSchemes;
162
+ const validSchemes = selectedSchemes?.filter(
163
+ (scheme) => isSchemeValid(scheme, availableSchemes)
164
+ );
165
+ if (!document["x-scalar-selected-security"] && validSchemes && validSchemes.length > 0) {
166
+ const selectedIdx = storedSelectedAuthSchemes["x-scalar-selected-security"]?.selectedIndex;
167
+ const clampedIndex = clampSelectedIndex(
168
+ selectedIdx ?? 0,
169
+ validSchemes.length
170
+ );
171
+ document["x-scalar-selected-security"] = {
172
+ selectedIndex: clampedIndex,
173
+ selectedSchemes: validSchemes
174
+ };
175
+ }
176
+ const securitySchemes = document.components?.securitySchemes ?? {};
177
+ for (const [key, storedScheme] of Object.entries(storedAuthSchemes)) {
178
+ const currentScheme = getResolvedRef(securitySchemes[key]);
179
+ if (isObject(currentScheme)) mergeSecrets(currentScheme, storedScheme);
180
+ }
181
+ };
182
+ function safeParseJson(value) {
183
+ try {
184
+ return JSON.parse(value);
185
+ } catch {
186
+ return;
187
+ }
188
+ }
103
189
  export {
190
+ authStorage,
104
191
  combineParams,
192
+ createDocumentSettings,
105
193
  filterSelectedSecurity,
106
- getDefaultScopes,
107
- getDefaultSecurity,
108
194
  getFirstServer,
109
- getOperations
195
+ getOperations,
196
+ getSecurityFromDocument,
197
+ mergeSecrets,
198
+ restoreAuthSecretsFromStorage,
199
+ safeParseJson
110
200
  };
111
201
  //# sourceMappingURL=helpers.js.map