@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.
- package/dist/App.vue.d.ts +2 -2
- package/dist/App.vue.d.ts.map +1 -1
- package/dist/App.vue.js +9 -3
- package/dist/App.vue.js.map +1 -1
- package/dist/Chat.vue.js +3 -3
- package/dist/Chat.vue.js.map +1 -1
- package/dist/components/ApprovalSection.vue.d.ts +9 -0
- package/dist/components/ApprovalSection.vue.d.ts.map +1 -0
- package/dist/components/ApprovalSection.vue.js +8 -0
- package/dist/components/ApprovalSection.vue.js.map +1 -0
- package/dist/components/ApprovalSection.vue2.js +47 -0
- package/dist/components/ApprovalSection.vue2.js.map +1 -0
- package/dist/components/AutosendPaused.vue.d.ts +3 -0
- package/dist/components/AutosendPaused.vue.d.ts.map +1 -0
- package/dist/components/AutosendPaused.vue.js +15 -0
- package/dist/components/AutosendPaused.vue.js.map +1 -0
- package/dist/components/ContextItem.vue.d.ts.map +1 -1
- package/dist/components/ContextItem.vue.js +1 -1
- package/dist/components/ContextItem.vue2.js +1 -1
- package/dist/components/ContextItem.vue2.js.map +1 -1
- package/dist/components/ErrorMessage.vue.d.ts +6 -0
- package/dist/components/ErrorMessage.vue.d.ts.map +1 -0
- package/dist/components/ErrorMessage.vue.js +8 -0
- package/dist/components/ErrorMessage.vue.js.map +1 -0
- package/dist/components/ErrorMessage.vue2.js +28 -0
- package/dist/components/ErrorMessage.vue2.js.map +1 -0
- package/dist/components/LoadingMiniOpenAPIDoc.vue.d.ts.map +1 -1
- package/dist/components/LoadingMiniOpenAPIDoc.vue.js +2 -18
- package/dist/components/LoadingMiniOpenAPIDoc.vue.js.map +1 -1
- package/dist/components/LoadingOpenAPISpecsSummary.vue.d.ts +3 -0
- package/dist/components/LoadingOpenAPISpecsSummary.vue.d.ts.map +1 -0
- package/dist/components/LoadingOpenAPISpecsSummary.vue.js +16 -0
- package/dist/components/LoadingOpenAPISpecsSummary.vue.js.map +1 -0
- package/dist/components/RequestApproved.vue.d.ts +3 -0
- package/dist/components/RequestApproved.vue.d.ts.map +1 -0
- package/dist/components/RequestApproved.vue.js +15 -0
- package/dist/components/RequestApproved.vue.js.map +1 -0
- package/dist/components/RequestFailed.vue.d.ts +3 -0
- package/dist/components/RequestFailed.vue.d.ts.map +1 -0
- package/dist/components/RequestFailed.vue.js +26 -0
- package/dist/components/RequestFailed.vue.js.map +1 -0
- package/dist/components/RequestPreview.vue.d.ts +10 -0
- package/dist/components/RequestPreview.vue.d.ts.map +1 -0
- package/dist/components/RequestPreview.vue.js +9 -0
- package/dist/components/RequestPreview.vue.js.map +1 -0
- package/dist/components/RequestPreview.vue2.js +150 -0
- package/dist/components/RequestPreview.vue2.js.map +1 -0
- package/dist/components/RequestRejected.vue.d.ts +3 -0
- package/dist/components/RequestRejected.vue.d.ts.map +1 -0
- package/dist/components/RequestRejected.vue.js +24 -0
- package/dist/components/RequestRejected.vue.js.map +1 -0
- package/dist/components/RequestSuccess.vue.d.ts +3 -0
- package/dist/components/RequestSuccess.vue.d.ts.map +1 -0
- package/dist/components/RequestSuccess.vue.js +15 -0
- package/dist/components/RequestSuccess.vue.js.map +1 -0
- package/dist/components/ResponseBody/ResponseBody.vue.d.ts +15 -0
- package/dist/components/ResponseBody/ResponseBody.vue.d.ts.map +1 -0
- package/dist/components/ResponseBody/ResponseBody.vue.js +45 -0
- package/dist/components/ResponseBody/ResponseBody.vue.js.map +1 -0
- package/dist/components/ResponseBody/ResponseBody.vue2.js +5 -0
- package/dist/components/ResponseBody/ResponseBody.vue2.js.map +1 -0
- package/dist/components/ResponseBody/ResponseBodyInfo.vue.d.ts +13 -0
- package/dist/components/ResponseBody/ResponseBodyInfo.vue.d.ts.map +1 -0
- package/dist/components/ResponseBody/ResponseBodyInfo.vue.js +17 -0
- package/dist/components/ResponseBody/ResponseBodyInfo.vue.js.map +1 -0
- package/dist/components/ResponseBody/ResponseBodyPreview.vue.d.ts +10 -0
- package/dist/components/ResponseBody/ResponseBodyPreview.vue.d.ts.map +1 -0
- package/dist/components/ResponseBody/ResponseBodyPreview.vue.js +8 -0
- package/dist/components/ResponseBody/ResponseBodyPreview.vue.js.map +1 -0
- package/dist/components/ResponseBody/ResponseBodyPreview.vue2.js +73 -0
- package/dist/components/ResponseBody/ResponseBodyPreview.vue2.js.map +1 -0
- package/dist/components/ResponseBody/ResponseBodyRaw.vue.d.ts +7 -0
- package/dist/components/ResponseBody/ResponseBodyRaw.vue.d.ts.map +1 -0
- package/dist/components/ResponseBody/ResponseBodyRaw.vue.js +23 -0
- package/dist/components/ResponseBody/ResponseBodyRaw.vue.js.map +1 -0
- package/dist/components/ResponseBody/ResponseBodyRaw.vue2.js +5 -0
- package/dist/components/ResponseBody/ResponseBodyRaw.vue2.js.map +1 -0
- package/dist/components/ResponseBody/ResponseBodyToggle.vue.d.ts +10 -0
- package/dist/components/ResponseBody/ResponseBodyToggle.vue.d.ts.map +1 -0
- package/dist/components/ResponseBody/ResponseBodyToggle.vue.js +30 -0
- package/dist/components/ResponseBody/ResponseBodyToggle.vue.js.map +1 -0
- package/dist/components/ResponseBody/ResponseBodyToggle.vue2.js +5 -0
- package/dist/components/ResponseBody/ResponseBodyToggle.vue2.js.map +1 -0
- package/dist/components/ResponseBody/helpers/media-types.d.ts +15 -0
- package/dist/components/ResponseBody/helpers/media-types.d.ts.map +1 -0
- package/dist/components/ResponseBody/helpers/media-types.js +134 -0
- package/dist/components/ResponseBody/helpers/media-types.js.map +1 -0
- package/dist/components/ResponseBody/helpers/process-response-body.d.ts +10 -0
- package/dist/components/ResponseBody/helpers/process-response-body.d.ts.map +1 -0
- package/dist/components/ResponseBody/helpers/process-response-body.js +63 -0
- package/dist/components/ResponseBody/helpers/process-response-body.js.map +1 -0
- package/dist/components/SearchPopover.vue.d.ts +13 -0
- package/dist/components/SearchPopover.vue.d.ts.map +1 -0
- package/dist/components/SearchPopover.vue.js +8 -0
- package/dist/components/SearchPopover.vue.js.map +1 -0
- package/dist/components/SearchPopover.vue2.js +78 -0
- package/dist/components/SearchPopover.vue2.js.map +1 -0
- package/dist/components/SendingRequest.vue.d.ts.map +1 -1
- package/dist/components/SendingRequest.vue.js +1 -1
- package/dist/components/SendingRequest.vue.js.map +1 -1
- package/dist/components/Suggestion.vue.d.ts.map +1 -1
- package/dist/components/Suggestion.vue.js +1 -1
- package/dist/components/Suggestion.vue2.js +1 -1
- package/dist/components/Suggestion.vue2.js.map +1 -1
- package/dist/components/TestRequestButton.vue2.js +1 -1
- package/dist/components/TestRequestButton.vue2.js.map +1 -1
- package/dist/helpers.d.ts +379 -0
- package/dist/helpers.d.ts.map +1 -1
- package/dist/helpers.js +135 -45
- package/dist/helpers.js.map +1 -1
- package/dist/hooks/useChatApprovals.d.ts +24 -0
- package/dist/hooks/useChatApprovals.d.ts.map +1 -0
- package/dist/hooks/useChatApprovals.js +25 -0
- package/dist/hooks/useChatApprovals.js.map +1 -0
- package/dist/hooks/useChatOperationBlocks.js +1 -1
- package/dist/hooks/useSearch.d.ts +26 -0
- package/dist/hooks/useSearch.d.ts.map +1 -0
- package/dist/hooks/useSearch.js +36 -0
- package/dist/hooks/useSearch.js.map +1 -0
- package/dist/node_modules/.pnpm/{zod@4.1.11 → zod@4.3.5}/node_modules/zod/v4/core/api.js +1 -0
- package/dist/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/api.js.map +1 -0
- package/dist/node_modules/.pnpm/{zod@4.1.11 → zod@4.3.5}/node_modules/zod/v4/core/core.js +20 -11
- package/dist/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/core.js.map +1 -0
- package/dist/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/errors.js.map +1 -0
- package/dist/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/parse.js.map +1 -0
- package/dist/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/regexes.js.map +1 -0
- package/dist/node_modules/.pnpm/{zod@4.1.11 → zod@4.3.5}/node_modules/zod/v4/core/schemas.js +3 -3
- package/dist/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/schemas.js.map +1 -0
- package/dist/node_modules/.pnpm/{zod@4.1.11 → zod@4.3.5}/node_modules/zod/v4/core/util.js +24 -0
- package/dist/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/util.js.map +1 -0
- package/dist/node_modules/.pnpm/{zod@4.1.11 → zod@4.3.5}/node_modules/zod/v4/core/versions.js +2 -2
- package/dist/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/core/versions.js.map +1 -0
- package/dist/node_modules/.pnpm/{zod@4.1.11 → zod@4.3.5}/node_modules/zod/v4/mini/schemas.js +12 -11
- package/dist/node_modules/.pnpm/zod@4.3.5/node_modules/zod/v4/mini/schemas.js.map +1 -0
- package/dist/package.json +9 -5
- package/dist/registry/add-documents-to-store.d.ts +21 -0
- package/dist/registry/add-documents-to-store.d.ts.map +1 -0
- package/dist/registry/add-documents-to-store.js +42 -0
- package/dist/registry/add-documents-to-store.js.map +1 -0
- package/dist/state/state.d.ts +29 -14
- package/dist/state/state.d.ts.map +1 -1
- package/dist/state/state.js +45 -40
- package/dist/state/state.js.map +1 -1
- package/dist/style.css +686 -234
- package/dist/views/Chat/Chat.vue.d.ts.map +1 -1
- package/dist/views/Chat/Chat.vue.js +1 -1
- package/dist/views/Chat/Chat.vue2.js +17 -5
- package/dist/views/Chat/Chat.vue2.js.map +1 -1
- package/dist/views/Chat/Messages/ExecuteRequestTool.vue.d.ts.map +1 -1
- package/dist/views/Chat/Messages/ExecuteRequestTool.vue.js +1 -1
- package/dist/views/Chat/Messages/ExecuteRequestTool.vue2.js +20 -43
- package/dist/views/Chat/Messages/ExecuteRequestTool.vue2.js.map +1 -1
- package/dist/views/Chat/Messages/GetMiniOpenAPIDocTool.vue.d.ts.map +1 -1
- package/dist/views/Chat/Messages/GetMiniOpenAPIDocTool.vue.js +1 -1
- package/dist/views/Chat/Messages/GetMiniOpenAPIDocTool.vue2.js +2 -3
- package/dist/views/Chat/Messages/GetMiniOpenAPIDocTool.vue2.js.map +1 -1
- package/dist/views/Chat/Messages/GetOpenAPISpecsSummary.vue.d.ts +11 -0
- package/dist/views/Chat/Messages/GetOpenAPISpecsSummary.vue.d.ts.map +1 -0
- package/dist/views/Chat/Messages/GetOpenAPISpecsSummary.vue.js +32 -0
- package/dist/views/Chat/Messages/GetOpenAPISpecsSummary.vue.js.map +1 -0
- package/dist/views/Chat/Messages/GetOpenAPISpecsSummary.vue2.js +5 -0
- package/dist/views/Chat/Messages/GetOpenAPISpecsSummary.vue2.js.map +1 -0
- package/dist/views/Chat/Messages/Text.vue.js +1 -1
- package/dist/views/Chat/Messages/Text.vue.js.map +1 -1
- package/dist/views/Layout.vue.d.ts.map +1 -1
- package/dist/views/Layout.vue.js +1 -1
- package/dist/views/Layout.vue2.js +0 -4
- package/dist/views/Layout.vue2.js.map +1 -1
- package/dist/views/PromptForm.vue.d.ts.map +1 -1
- package/dist/views/PromptForm.vue.js +1 -1
- package/dist/views/PromptForm.vue2.js +129 -72
- package/dist/views/PromptForm.vue2.js.map +1 -1
- package/dist/views/{Auth.vue.d.ts → Settings/Auth.vue.d.ts} +1 -0
- package/dist/views/Settings/Auth.vue.d.ts.map +1 -0
- package/dist/views/{Auth.vue.js → Settings/Auth.vue.js} +21 -26
- package/dist/views/Settings/Auth.vue.js.map +1 -0
- package/dist/views/Settings/DocSettings.vue.d.ts +8 -0
- package/dist/views/Settings/DocSettings.vue.d.ts.map +1 -0
- package/dist/views/Settings/DocSettings.vue.js +8 -0
- package/dist/views/Settings/DocSettings.vue.js.map +1 -0
- package/dist/views/Settings/DocSettings.vue2.js +50 -0
- package/dist/views/Settings/DocSettings.vue2.js.map +1 -0
- package/dist/views/Settings/Settings.vue.d.ts.map +1 -0
- package/dist/views/{Settings.vue.js → Settings/Settings.vue.js} +2 -2
- package/dist/views/Settings/Settings.vue2.js +78 -0
- package/dist/views/Settings/Settings.vue2.js.map +1 -0
- package/dist/views/Start.vue.d.ts.map +1 -1
- package/dist/views/Start.vue.js +1 -1
- package/dist/views/Start.vue2.js +0 -1
- package/dist/views/Start.vue2.js.map +1 -1
- package/package.json +3 -33
- package/dist/hooks/useActiveServer.d.ts +0 -2
- package/dist/hooks/useActiveServer.d.ts.map +0 -1
- package/dist/hooks/useActiveServer.js +0 -20
- package/dist/hooks/useActiveServer.js.map +0 -1
- package/dist/hooks/useSecuritySchemes.d.ts +0 -2
- package/dist/hooks/useSecuritySchemes.d.ts.map +0 -1
- package/dist/hooks/useSecuritySchemes.js +0 -29
- package/dist/hooks/useSecuritySchemes.js.map +0 -1
- package/dist/node_modules/.pnpm/zod@4.1.11/node_modules/zod/v4/core/api.js.map +0 -1
- package/dist/node_modules/.pnpm/zod@4.1.11/node_modules/zod/v4/core/core.js.map +0 -1
- package/dist/node_modules/.pnpm/zod@4.1.11/node_modules/zod/v4/core/errors.js.map +0 -1
- package/dist/node_modules/.pnpm/zod@4.1.11/node_modules/zod/v4/core/parse.js.map +0 -1
- package/dist/node_modules/.pnpm/zod@4.1.11/node_modules/zod/v4/core/regexes.js.map +0 -1
- package/dist/node_modules/.pnpm/zod@4.1.11/node_modules/zod/v4/core/schemas.js.map +0 -1
- package/dist/node_modules/.pnpm/zod@4.1.11/node_modules/zod/v4/core/util.js.map +0 -1
- package/dist/node_modules/.pnpm/zod@4.1.11/node_modules/zod/v4/core/versions.js.map +0 -1
- package/dist/node_modules/.pnpm/zod@4.1.11/node_modules/zod/v4/mini/schemas.js.map +0 -1
- package/dist/registry/get-document.d.ts +0 -4
- package/dist/registry/get-document.d.ts.map +0 -1
- package/dist/registry/get-document.js +0 -23
- package/dist/registry/get-document.js.map +0 -1
- package/dist/views/Auth.vue.d.ts.map +0 -1
- package/dist/views/Auth.vue.js.map +0 -1
- package/dist/views/Settings.vue.d.ts.map +0 -1
- package/dist/views/Settings.vue2.js +0 -81
- package/dist/views/Settings.vue2.js.map +0 -1
- /package/dist/node_modules/.pnpm/{zod@4.1.11 → zod@4.3.5}/node_modules/zod/v4/core/errors.js +0 -0
- /package/dist/node_modules/.pnpm/{zod@4.1.11 → zod@4.3.5}/node_modules/zod/v4/core/parse.js +0 -0
- /package/dist/node_modules/.pnpm/{zod@4.1.11 → zod@4.3.5}/node_modules/zod/v4/core/regexes.js +0 -0
- /package/dist/views/{Auth.vue2.js → Settings/Auth.vue2.js} +0 -0
- /package/dist/views/{Auth.vue2.js.map → Settings/Auth.vue2.js.map} +0 -0
- /package/dist/views/{Settings.vue.d.ts → Settings/Settings.vue.d.ts} +0 -0
- /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
|
package/dist/helpers.d.ts.map
CHANGED
|
@@ -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;
|
|
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 {
|
|
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
|