@scalar/workspace-store 0.41.2 → 0.43.0

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 (261) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/dist/client.d.ts.map +1 -1
  3. package/dist/client.js +5 -1
  4. package/dist/events/definitions/operation.d.ts +6 -1
  5. package/dist/events/definitions/operation.d.ts.map +1 -1
  6. package/dist/events/definitions/server.d.ts +5 -1
  7. package/dist/events/definitions/server.d.ts.map +1 -1
  8. package/dist/events/definitions/ui.d.ts +5 -3
  9. package/dist/events/definitions/ui.d.ts.map +1 -1
  10. package/dist/helpers/get-resolved-ref-deep.d.ts +27 -0
  11. package/dist/helpers/get-resolved-ref-deep.d.ts.map +1 -0
  12. package/dist/helpers/get-resolved-ref-deep.js +49 -0
  13. package/dist/mutators/operation/operation.d.ts +1 -1
  14. package/dist/mutators/operation/operation.d.ts.map +1 -1
  15. package/dist/mutators/operation/operation.js +4 -4
  16. package/dist/mutators/server.d.ts +1 -1
  17. package/dist/mutators/server.d.ts.map +1 -1
  18. package/dist/mutators/server.js +5 -2
  19. package/dist/navigation/helpers/traverse-description.d.ts.map +1 -1
  20. package/dist/navigation/helpers/traverse-description.js +19 -21
  21. package/dist/navigation/helpers/utils.js +2 -2
  22. package/dist/request-example/builder/body/build-request-body.d.ts +42 -0
  23. package/dist/request-example/builder/body/build-request-body.d.ts.map +1 -0
  24. package/dist/request-example/builder/body/build-request-body.js +134 -0
  25. package/dist/request-example/builder/body/get-request-body-example.d.ts +6 -0
  26. package/dist/request-example/builder/body/get-request-body-example.d.ts.map +1 -0
  27. package/dist/request-example/builder/body/get-request-body-example.js +31 -0
  28. package/dist/request-example/builder/body/get-selected-body-content-type.d.ts +10 -0
  29. package/dist/request-example/builder/body/get-selected-body-content-type.d.ts.map +1 -0
  30. package/dist/request-example/builder/body/get-selected-body-content-type.js +10 -0
  31. package/dist/request-example/builder/build-request.d.ts +9 -0
  32. package/dist/request-example/builder/build-request.d.ts.map +1 -0
  33. package/dist/request-example/builder/build-request.js +135 -0
  34. package/dist/request-example/builder/header/build-request-cookie-header.d.ts +25 -0
  35. package/dist/request-example/builder/header/build-request-cookie-header.d.ts.map +1 -0
  36. package/dist/request-example/builder/header/build-request-cookie-header.js +39 -0
  37. package/dist/request-example/builder/header/build-request-parameters.d.ts +24 -0
  38. package/dist/request-example/builder/header/build-request-parameters.d.ts.map +1 -0
  39. package/dist/request-example/builder/header/build-request-parameters.js +215 -0
  40. package/dist/request-example/builder/header/de-serialize-parameter.d.ts +4 -0
  41. package/dist/request-example/builder/header/de-serialize-parameter.d.ts.map +1 -0
  42. package/dist/request-example/builder/header/de-serialize-parameter.js +49 -0
  43. package/dist/request-example/builder/header/filter-global-cookies.d.ts +14 -0
  44. package/dist/request-example/builder/header/filter-global-cookies.d.ts.map +1 -0
  45. package/dist/request-example/builder/header/filter-global-cookies.js +26 -0
  46. package/dist/request-example/builder/header/is-param-disabled.d.ts +13 -0
  47. package/dist/request-example/builder/header/is-param-disabled.d.ts.map +1 -0
  48. package/dist/request-example/builder/header/is-param-disabled.js +19 -0
  49. package/dist/request-example/builder/header/matches-domain.d.ts +9 -0
  50. package/dist/request-example/builder/header/matches-domain.d.ts.map +1 -0
  51. package/dist/request-example/builder/header/matches-domain.js +27 -0
  52. package/dist/request-example/builder/header/serialize-parameter.d.ts +96 -0
  53. package/dist/request-example/builder/header/serialize-parameter.d.ts.map +1 -0
  54. package/dist/request-example/builder/header/serialize-parameter.js +222 -0
  55. package/dist/request-example/builder/helpers/apply-allow-reserved-to-url.d.ts +6 -0
  56. package/dist/request-example/builder/helpers/apply-allow-reserved-to-url.d.ts.map +1 -0
  57. package/dist/request-example/builder/helpers/apply-allow-reserved-to-url.js +69 -0
  58. package/dist/request-example/builder/helpers/get-environment-variables.d.ts +9 -0
  59. package/dist/request-example/builder/helpers/get-environment-variables.d.ts.map +1 -0
  60. package/dist/request-example/builder/helpers/get-environment-variables.js +12 -0
  61. package/dist/request-example/builder/helpers/get-example-from-schema.d.ts +40 -0
  62. package/dist/request-example/builder/helpers/get-example-from-schema.d.ts.map +1 -0
  63. package/dist/request-example/builder/helpers/get-example-from-schema.js +568 -0
  64. package/dist/request-example/builder/helpers/get-example.d.ts +10 -0
  65. package/dist/request-example/builder/helpers/get-example.d.ts.map +1 -0
  66. package/dist/request-example/builder/helpers/get-example.js +66 -0
  67. package/dist/request-example/builder/helpers/get-resolved-url.d.ts +20 -0
  68. package/dist/request-example/builder/helpers/get-resolved-url.d.ts.map +1 -0
  69. package/dist/request-example/builder/helpers/get-resolved-url.js +19 -0
  70. package/dist/request-example/builder/helpers/get-server-variables.d.ts +10 -0
  71. package/dist/request-example/builder/helpers/get-server-variables.d.ts.map +1 -0
  72. package/dist/request-example/builder/helpers/get-server-variables.js +19 -0
  73. package/dist/request-example/builder/index.d.ts +15 -0
  74. package/dist/request-example/builder/index.d.ts.map +1 -0
  75. package/dist/request-example/builder/index.js +13 -0
  76. package/dist/request-example/builder/request-factory.d.ts +60 -0
  77. package/dist/request-example/builder/request-factory.d.ts.map +1 -0
  78. package/dist/request-example/builder/request-factory.js +78 -0
  79. package/dist/request-example/builder/security/build-request-security.d.ts +24 -0
  80. package/dist/request-example/builder/security/build-request-security.d.ts.map +1 -0
  81. package/dist/request-example/builder/security/build-request-security.js +79 -0
  82. package/dist/request-example/builder/security/secret-types.d.ts +25 -0
  83. package/dist/request-example/builder/security/secret-types.d.ts.map +1 -0
  84. package/dist/request-example/builder/security/secret-types.js +1 -0
  85. package/dist/request-example/context/environment.d.ts +21 -0
  86. package/dist/request-example/context/environment.d.ts.map +1 -0
  87. package/dist/request-example/context/environment.js +49 -0
  88. package/dist/request-example/context/get-request-example-context.d.ts +57 -0
  89. package/dist/request-example/context/get-request-example-context.d.ts.map +1 -0
  90. package/dist/request-example/context/get-request-example-context.js +115 -0
  91. package/dist/request-example/context/headers.d.ts +33 -0
  92. package/dist/request-example/context/headers.d.ts.map +1 -0
  93. package/dist/request-example/context/headers.js +54 -0
  94. package/dist/request-example/context/helpers/combine-params.d.ts +4 -0
  95. package/dist/request-example/context/helpers/combine-params.d.ts.map +1 -0
  96. package/dist/request-example/context/helpers/combine-params.js +21 -0
  97. package/dist/request-example/context/index.d.ts +12 -0
  98. package/dist/request-example/context/index.d.ts.map +1 -0
  99. package/dist/request-example/context/index.js +10 -0
  100. package/dist/request-example/context/proxy.d.ts +18 -0
  101. package/dist/request-example/context/proxy.d.ts.map +1 -0
  102. package/dist/request-example/context/proxy.js +26 -0
  103. package/dist/request-example/context/security/extract-security-scheme-secrets.d.ts +10 -0
  104. package/dist/request-example/context/security/extract-security-scheme-secrets.d.ts.map +1 -0
  105. package/dist/request-example/context/security/extract-security-scheme-secrets.js +167 -0
  106. package/dist/request-example/context/security/get-security-requirements.d.ts +12 -0
  107. package/dist/request-example/context/security/get-security-requirements.d.ts.map +1 -0
  108. package/dist/request-example/context/security/get-security-requirements.js +16 -0
  109. package/dist/request-example/context/security/get-security-schemes.d.ts +9 -0
  110. package/dist/request-example/context/security/get-security-schemes.d.ts.map +1 -0
  111. package/dist/request-example/context/security/get-security-schemes.js +13 -0
  112. package/dist/request-example/context/security/get-selected-security.d.ts +15 -0
  113. package/dist/request-example/context/security/get-selected-security.d.ts.map +1 -0
  114. package/dist/request-example/context/security/get-selected-security.js +49 -0
  115. package/dist/request-example/context/security/is-auth-optional.d.ts +4 -0
  116. package/dist/request-example/context/security/is-auth-optional.d.ts.map +1 -0
  117. package/dist/request-example/context/security/is-auth-optional.js +6 -0
  118. package/dist/request-example/context/security/merge-security.d.ts +9 -0
  119. package/dist/request-example/context/security/merge-security.d.ts.map +1 -0
  120. package/dist/request-example/context/security/merge-security.js +29 -0
  121. package/dist/request-example/context/servers.d.ts +26 -0
  122. package/dist/request-example/context/servers.d.ts.map +1 -0
  123. package/dist/request-example/context/servers.js +89 -0
  124. package/dist/request-example/index.d.ts +5 -0
  125. package/dist/request-example/index.d.ts.map +1 -0
  126. package/dist/request-example/index.js +2 -0
  127. package/dist/request-example/types.d.ts +14 -0
  128. package/dist/request-example/types.d.ts.map +1 -0
  129. package/dist/request-example/types.js +1 -0
  130. package/dist/schemas/extensions/document/x-internal.d.ts +3 -0
  131. package/dist/schemas/extensions/document/x-internal.d.ts.map +1 -1
  132. package/dist/schemas/extensions/document/x-internal.js +7 -0
  133. package/dist/schemas/extensions/document/x-scalar-environments.d.ts +31 -0
  134. package/dist/schemas/extensions/document/x-scalar-environments.d.ts.map +1 -1
  135. package/dist/schemas/extensions/document/x-scalar-environments.js +25 -0
  136. package/dist/schemas/extensions/document/x-scalar-icon.d.ts +3 -0
  137. package/dist/schemas/extensions/document/x-scalar-icon.d.ts.map +1 -1
  138. package/dist/schemas/extensions/document/x-scalar-icon.js +7 -0
  139. package/dist/schemas/extensions/document/x-scalar-ignore.d.ts +4 -1
  140. package/dist/schemas/extensions/document/x-scalar-ignore.d.ts.map +1 -1
  141. package/dist/schemas/extensions/document/x-scalar-ignore.js +7 -0
  142. package/dist/schemas/extensions/document/x-scalar-is-dirty.d.ts +3 -0
  143. package/dist/schemas/extensions/document/x-scalar-is-dirty.d.ts.map +1 -1
  144. package/dist/schemas/extensions/document/x-scalar-is-dirty.js +9 -0
  145. package/dist/schemas/extensions/document/x-scalar-original-document-hash.d.ts +3 -0
  146. package/dist/schemas/extensions/document/x-scalar-original-document-hash.d.ts.map +1 -1
  147. package/dist/schemas/extensions/document/x-scalar-original-document-hash.js +7 -0
  148. package/dist/schemas/extensions/document/x-scalar-registry-meta.d.ts +6 -0
  149. package/dist/schemas/extensions/document/x-scalar-registry-meta.d.ts.map +1 -1
  150. package/dist/schemas/extensions/document/x-scalar-registry-meta.js +25 -10
  151. package/dist/schemas/extensions/document/x-scalar-sdk-installation.d.ts +7 -0
  152. package/dist/schemas/extensions/document/x-scalar-sdk-installation.d.ts.map +1 -1
  153. package/dist/schemas/extensions/document/x-scalar-sdk-installation.js +23 -5
  154. package/dist/schemas/extensions/document/x-scalar-watch-mode.d.ts +3 -0
  155. package/dist/schemas/extensions/document/x-scalar-watch-mode.d.ts.map +1 -1
  156. package/dist/schemas/extensions/document/x-scalar-watch-mode.js +7 -0
  157. package/dist/schemas/extensions/document/x-tags.d.ts +4 -1
  158. package/dist/schemas/extensions/document/x-tags.d.ts.map +1 -1
  159. package/dist/schemas/extensions/document/x-tags.js +8 -1
  160. package/dist/schemas/extensions/example/x-disabled.d.ts +7 -1
  161. package/dist/schemas/extensions/example/x-disabled.d.ts.map +1 -1
  162. package/dist/schemas/extensions/example/x-disabled.js +8 -1
  163. package/dist/schemas/extensions/general/x-scalar-active-environment.d.ts +3 -0
  164. package/dist/schemas/extensions/general/x-scalar-active-environment.d.ts.map +1 -1
  165. package/dist/schemas/extensions/general/x-scalar-active-environment.js +7 -0
  166. package/dist/schemas/extensions/general/x-scalar-cookies.d.ts +16 -0
  167. package/dist/schemas/extensions/general/x-scalar-cookies.d.ts.map +1 -1
  168. package/dist/schemas/extensions/general/x-scalar-cookies.js +19 -0
  169. package/dist/schemas/extensions/general/x-scalar-order.d.ts +3 -0
  170. package/dist/schemas/extensions/general/x-scalar-order.d.ts.map +1 -1
  171. package/dist/schemas/extensions/general/x-scalar-order.js +7 -0
  172. package/dist/schemas/extensions/operation/index.d.ts +2 -1
  173. package/dist/schemas/extensions/operation/index.d.ts.map +1 -1
  174. package/dist/schemas/extensions/operation/index.js +1 -0
  175. package/dist/schemas/extensions/operation/x-badge.d.ts +12 -0
  176. package/dist/schemas/extensions/operation/x-badge.d.ts.map +1 -1
  177. package/dist/schemas/extensions/operation/x-badge.js +23 -0
  178. package/dist/schemas/extensions/operation/x-code-samples.d.ts +22 -0
  179. package/dist/schemas/extensions/operation/x-code-samples.d.ts.map +1 -1
  180. package/dist/schemas/extensions/operation/x-code-samples.js +17 -0
  181. package/dist/schemas/extensions/operation/x-draft-examples.d.ts +3 -0
  182. package/dist/schemas/extensions/operation/x-draft-examples.d.ts.map +1 -1
  183. package/dist/schemas/extensions/operation/x-draft-examples.js +7 -0
  184. package/dist/schemas/extensions/operation/x-post-response.d.ts +3 -0
  185. package/dist/schemas/extensions/operation/x-post-response.d.ts.map +1 -1
  186. package/dist/schemas/extensions/operation/x-post-response.js +9 -0
  187. package/dist/schemas/extensions/operation/x-scalar-disable-parameters.d.ts +9 -0
  188. package/dist/schemas/extensions/operation/x-scalar-disable-parameters.d.ts.map +1 -1
  189. package/dist/schemas/extensions/operation/x-scalar-disable-parameters.js +17 -0
  190. package/dist/schemas/extensions/operation/x-scalar-selected-content-type.d.ts +3 -0
  191. package/dist/schemas/extensions/operation/x-scalar-selected-content-type.d.ts.map +1 -1
  192. package/dist/schemas/extensions/operation/x-scalar-selected-content-type.js +9 -0
  193. package/dist/schemas/extensions/operation/x-scalar-stability.d.ts +3 -0
  194. package/dist/schemas/extensions/operation/x-scalar-stability.d.ts.map +1 -1
  195. package/dist/schemas/extensions/operation/x-scalar-stability.js +9 -0
  196. package/dist/schemas/extensions/parameter/x-global.d.ts +7 -1
  197. package/dist/schemas/extensions/parameter/x-global.d.ts.map +1 -1
  198. package/dist/schemas/extensions/parameter/x-global.js +8 -1
  199. package/dist/schemas/extensions/schema/x-additional-properties-name.d.ts +3 -0
  200. package/dist/schemas/extensions/schema/x-additional-properties-name.d.ts.map +1 -1
  201. package/dist/schemas/extensions/schema/x-additional-properties-name.js +7 -0
  202. package/dist/schemas/extensions/schema/x-enum-descriptions.d.ts +4 -0
  203. package/dist/schemas/extensions/schema/x-enum-descriptions.d.ts.map +1 -1
  204. package/dist/schemas/extensions/schema/x-enum-descriptions.js +9 -0
  205. package/dist/schemas/extensions/schema/x-enum-varnames.d.ts +4 -0
  206. package/dist/schemas/extensions/schema/x-enum-varnames.d.ts.map +1 -1
  207. package/dist/schemas/extensions/schema/x-enum-varnames.js +8 -0
  208. package/dist/schemas/extensions/schema/x-examples.d.ts +3 -0
  209. package/dist/schemas/extensions/schema/x-examples.d.ts.map +1 -1
  210. package/dist/schemas/extensions/schema/x-examples.js +7 -0
  211. package/dist/schemas/extensions/schema/x-variable.d.ts +3 -0
  212. package/dist/schemas/extensions/schema/x-variable.d.ts.map +1 -1
  213. package/dist/schemas/extensions/schema/x-variable.js +7 -0
  214. package/dist/schemas/extensions/security/x-default-scopes.d.ts +3 -0
  215. package/dist/schemas/extensions/security/x-default-scopes.d.ts.map +1 -1
  216. package/dist/schemas/extensions/security/x-default-scopes.js +7 -0
  217. package/dist/schemas/extensions/security/x-scalar-credentials-location.d.ts +3 -0
  218. package/dist/schemas/extensions/security/x-scalar-credentials-location.d.ts.map +1 -1
  219. package/dist/schemas/extensions/security/x-scalar-credentials-location.js +7 -0
  220. package/dist/schemas/extensions/security/x-scalar-security-body.d.ts +3 -0
  221. package/dist/schemas/extensions/security/x-scalar-security-body.d.ts.map +1 -1
  222. package/dist/schemas/extensions/security/x-scalar-security-body.js +7 -0
  223. package/dist/schemas/extensions/security/x-scalar-security-query.d.ts +3 -0
  224. package/dist/schemas/extensions/security/x-scalar-security-query.d.ts.map +1 -1
  225. package/dist/schemas/extensions/security/x-scalar-security-query.js +7 -0
  226. package/dist/schemas/extensions/security/x-scalar-security-secrets.d.ts +25 -0
  227. package/dist/schemas/extensions/security/x-scalar-security-secrets.d.ts.map +1 -1
  228. package/dist/schemas/extensions/security/x-scalar-security-secrets.js +50 -0
  229. package/dist/schemas/extensions/security/x-tokenName.d.ts +3 -0
  230. package/dist/schemas/extensions/security/x-tokenName.d.ts.map +1 -1
  231. package/dist/schemas/extensions/security/x-tokenName.js +7 -0
  232. package/dist/schemas/extensions/security/x-use-pkce.d.ts +3 -0
  233. package/dist/schemas/extensions/security/x-use-pkce.d.ts.map +1 -1
  234. package/dist/schemas/extensions/security/x-use-pkce.js +9 -0
  235. package/dist/schemas/extensions/server/x-scalar-selected-server.d.ts +3 -0
  236. package/dist/schemas/extensions/server/x-scalar-selected-server.d.ts.map +1 -1
  237. package/dist/schemas/extensions/server/x-scalar-selected-server.js +7 -0
  238. package/dist/schemas/extensions/tag/x-display-name.d.ts +3 -0
  239. package/dist/schemas/extensions/tag/x-display-name.d.ts.map +1 -1
  240. package/dist/schemas/extensions/tag/x-display-name.js +7 -0
  241. package/dist/schemas/extensions/tag/x-tag-groups.d.ts +14 -0
  242. package/dist/schemas/extensions/tag/x-tag-groups.d.ts.map +1 -1
  243. package/dist/schemas/extensions/tag/x-tag-groups.js +22 -1
  244. package/dist/schemas/extensions/workspace/x-scalar-active-proxy.d.ts +3 -0
  245. package/dist/schemas/extensions/workspace/x-scalar-active-proxy.d.ts.map +1 -1
  246. package/dist/schemas/extensions/workspace/x-scalar-active-proxy.js +7 -0
  247. package/dist/schemas/extensions/workspace/x-scalar-tabs.d.ts +13 -0
  248. package/dist/schemas/extensions/workspace/x-scalar-tabs.d.ts.map +1 -1
  249. package/dist/schemas/extensions/workspace/x-scalar-tabs.js +20 -0
  250. package/dist/schemas/v3.1/openapi/index.d.ts +112 -0
  251. package/dist/schemas/v3.1/openapi/index.d.ts.map +1 -0
  252. package/dist/schemas/v3.1/openapi/index.js +645 -0
  253. package/dist/schemas/v3.1/openapi/reference.d.ts +4 -0
  254. package/dist/schemas/v3.1/openapi/reference.d.ts.map +1 -0
  255. package/dist/schemas/v3.1/openapi/reference.js +29 -0
  256. package/dist/schemas/v3.1/strict/example.js +2 -2
  257. package/dist/schemas/v3.1/strict/parameter.js +2 -2
  258. package/dist/schemas/v3.1/strict/schema.d.ts +1 -1
  259. package/dist/schemas/v3.1/strict/schema.d.ts.map +1 -1
  260. package/dist/schemas/v3.1/strict/schema.js +2 -2
  261. package/package.json +16 -9
@@ -0,0 +1,33 @@
1
+ import type { HttpMethod } from '@scalar/helpers/http/http-methods';
2
+ import type { OperationObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document';
3
+ /**
4
+ * Generates a list of default headers for an OpenAPI operation and HTTP method.
5
+ *
6
+ * This function intelligently adds standard HTTP headers based on the request context:
7
+ * - Content-Type: Added only if the HTTP method supports a request body and the OpenAPI operation
8
+ * defines a request body content type. Uses the selected content type from the operation or the
9
+ * first defined request body content type.
10
+ * - Accept: Derived from the 2xx response content types in the spec (joined as a comma-separated list), falling back to a wildcard.
11
+ * - User-Agent: Added in Electron environments (desktop app or proxy) to identify the client.
12
+ *
13
+ * The function respects OpenAPI operation parameters and marks headers as overridden
14
+ * if they are explicitly defined in the operation. It also supports hiding disabled
15
+ * headers for specific request examples using x-scalar-disable-parameters.
16
+ *
17
+ * @param method The HTTP method of the operation (GET, POST, etc.)
18
+ * @param operation The OpenAPI OperationObject describing the endpoint
19
+ * @param exampleKey The current request example key
20
+ * @param hideDisabledHeaders If true, filters out headers marked as disabled for this example
21
+ * @returns Array of default header objects with their values and override status
22
+ */
23
+ export declare const getDefaultHeaders: ({ method, operation, exampleName, hideDisabledHeaders, options, }: {
24
+ method: HttpMethod;
25
+ operation: OperationObject;
26
+ exampleName: string;
27
+ hideDisabledHeaders?: boolean;
28
+ options?: {
29
+ appVersion: string;
30
+ isElectron: boolean;
31
+ };
32
+ }) => Record<string, string>;
33
+ //# sourceMappingURL=headers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"headers.d.ts","sourceRoot":"","sources":["../../../src/request-example/context/headers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mCAAmC,CAAA;AAEnE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8DAA8D,CAAA;AAKnG;;;;;;;;;;;;;;;;;;;GAmBG;AACH,eAAO,MAAM,iBAAiB,GAAI,mEAS/B;IACD,MAAM,EAAE,UAAU,CAAA;IAClB,SAAS,EAAE,eAAe,CAAA;IAC1B,WAAW,EAAE,MAAM,CAAA;IACnB,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,OAAO,CAAC,EAAE;QACR,UAAU,EAAE,MAAM,CAAA;QAClB,UAAU,EAAE,OAAO,CAAA;KACpB,CAAA;CACF,KAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAoCxB,CAAA"}
@@ -0,0 +1,54 @@
1
+ import { canMethodHaveBody } from '@scalar/helpers/http/can-method-have-body';
2
+ import { getResolvedRef } from '@scalar/workspace-store/helpers/get-resolved-ref';
3
+ /** Default Accept header value to accept all response types. */
4
+ const DEFAULT_ACCEPT = '*/*';
5
+ /**
6
+ * Generates a list of default headers for an OpenAPI operation and HTTP method.
7
+ *
8
+ * This function intelligently adds standard HTTP headers based on the request context:
9
+ * - Content-Type: Added only if the HTTP method supports a request body and the OpenAPI operation
10
+ * defines a request body content type. Uses the selected content type from the operation or the
11
+ * first defined request body content type.
12
+ * - Accept: Derived from the 2xx response content types in the spec (joined as a comma-separated list), falling back to a wildcard.
13
+ * - User-Agent: Added in Electron environments (desktop app or proxy) to identify the client.
14
+ *
15
+ * The function respects OpenAPI operation parameters and marks headers as overridden
16
+ * if they are explicitly defined in the operation. It also supports hiding disabled
17
+ * headers for specific request examples using x-scalar-disable-parameters.
18
+ *
19
+ * @param method The HTTP method of the operation (GET, POST, etc.)
20
+ * @param operation The OpenAPI OperationObject describing the endpoint
21
+ * @param exampleKey The current request example key
22
+ * @param hideDisabledHeaders If true, filters out headers marked as disabled for this example
23
+ * @returns Array of default header objects with their values and override status
24
+ */
25
+ export const getDefaultHeaders = ({ method, operation, exampleName, hideDisabledHeaders = false, options = {
26
+ isElectron: false,
27
+ appVersion: '0.0.0',
28
+ }, }) => {
29
+ const disabledHeaders = operation['x-scalar-disable-parameters']?.['default-headers']?.[exampleName] ?? {};
30
+ const headers = new Headers();
31
+ const requestBody = getResolvedRef(operation.requestBody);
32
+ // Add Content-Type header only for methods that support a request body
33
+ if (canMethodHaveBody(method) && requestBody) {
34
+ const contentType = requestBody['x-scalar-selected-content-type']?.[exampleName] ?? Object.keys(requestBody.content ?? {})[0];
35
+ // We never want to add a content type of 'none' or invent one when the schema defines no body.
36
+ if (contentType && contentType !== 'none') {
37
+ headers.set('Content-Type', contentType);
38
+ }
39
+ }
40
+ // Derive Accept from the 2xx response content types so the server can pick the best match.
41
+ const successResponseKey = Object.keys(operation.responses ?? {}).find((k) => k.startsWith('2'));
42
+ const successResponse = successResponseKey ? getResolvedRef(operation.responses[successResponseKey]) : null;
43
+ const acceptValue = Object.keys(successResponse?.content ?? {}).join(', ') || DEFAULT_ACCEPT;
44
+ headers.set('Accept', acceptValue);
45
+ // Add User-Agent in Electron environments for client identification
46
+ if (options.isElectron && options.appVersion) {
47
+ headers.set('User-Agent', `Scalar/${options.appVersion}`);
48
+ }
49
+ // Filter out disabled headers if requested
50
+ if (hideDisabledHeaders) {
51
+ return Object.fromEntries(Array.from(headers.entries()).filter(([headerName]) => disabledHeaders[headerName.toLowerCase()] !== true));
52
+ }
53
+ return Object.fromEntries(headers.entries());
54
+ };
@@ -0,0 +1,4 @@
1
+ import type { OperationObject, PathItemObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document';
2
+ /** Combine pathItem and operation parameters into a single, dereferenced parameter array */
3
+ export declare const combineParams: (pathParams?: PathItemObject["parameters"], operationParams?: OperationObject["parameters"]) => OperationObject["parameters"];
4
+ //# sourceMappingURL=combine-params.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"combine-params.d.ts","sourceRoot":"","sources":["../../../../src/request-example/context/helpers/combine-params.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,8DAA8D,CAAA;AAEnH,4FAA4F;AAC5F,eAAO,MAAM,aAAa,GACxB,aAAY,cAAc,CAAC,YAAY,CAAM,EAC7C,kBAAiB,eAAe,CAAC,YAAY,CAAM,KAClD,eAAe,CAAC,YAAY,CAqB9B,CAAA"}
@@ -0,0 +1,21 @@
1
+ import { getResolvedRef } from '@scalar/workspace-store/helpers/get-resolved-ref';
2
+ /** Combine pathItem and operation parameters into a single, dereferenced parameter array */
3
+ export const combineParams = (pathParams = [], operationParams = []) => {
4
+ const operationKeys = operationParams.flatMap((unresolvedParam) => {
5
+ const param = getResolvedRef(unresolvedParam);
6
+ if (!param) {
7
+ return [];
8
+ }
9
+ return `${param.in}:${param.name}`;
10
+ });
11
+ const operationSet = new Set(operationKeys);
12
+ /** We must ensure we do not include any path params which exist in the operation */
13
+ const filteredPathParams = pathParams.filter((unresolvedParam) => {
14
+ const param = getResolvedRef(unresolvedParam);
15
+ if (!param) {
16
+ return false;
17
+ }
18
+ return !operationSet.has(`${param.in}:${param.name}`);
19
+ });
20
+ return [...filteredPathParams, ...operationParams];
21
+ };
@@ -0,0 +1,12 @@
1
+ export { getActiveEnvironment } from './environment.js';
2
+ export { getRequestExampleContext } from './get-request-example-context.js';
3
+ export { combineParams } from './helpers/combine-params.js';
4
+ export { getActiveProxyUrl } from './proxy.js';
5
+ export { getSecurityRequirements } from './security/get-security-requirements.js';
6
+ export { getSecuritySchemes } from './security/get-security-schemes.js';
7
+ export { getSelectedSecurity } from './security/get-selected-security.js';
8
+ export { isAuthOptional } from './security/is-auth-optional.js';
9
+ export type { MergedSecuritySchemes } from './security/merge-security.js';
10
+ export { mergeSecurity } from './security/merge-security.js';
11
+ export { getSelectedServer, getServers } from './servers.js';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/request-example/context/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA;AACpD,OAAO,EAAE,wBAAwB,EAAE,MAAM,+BAA+B,CAAA;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAA;AAC3C,OAAO,EAAE,uBAAuB,EAAE,MAAM,sCAAsC,CAAA;AAC9E,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAA;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAA;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAC5D,YAAY,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAA;AACtE,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AACzD,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA"}
@@ -0,0 +1,10 @@
1
+ export { getActiveEnvironment } from './environment.js';
2
+ export { getRequestExampleContext } from './get-request-example-context.js';
3
+ export { combineParams } from './helpers/combine-params.js';
4
+ export { getActiveProxyUrl } from './proxy.js';
5
+ export { getSecurityRequirements } from './security/get-security-requirements.js';
6
+ export { getSecuritySchemes } from './security/get-security-schemes.js';
7
+ export { getSelectedSecurity } from './security/get-selected-security.js';
8
+ export { isAuthOptional } from './security/is-auth-optional.js';
9
+ export { mergeSecurity } from './security/merge-security.js';
10
+ export { getSelectedServer, getServers } from './servers.js';
@@ -0,0 +1,18 @@
1
+ import type { Workspace } from '../../schemas/workspace.js';
2
+ export type Layout = 'web' | 'other';
3
+ /**
4
+ * Returns the default proxy URL for web layout.
5
+ * For the 'web' layout, this ensures requests use Scalar's hosted proxy unless overridden,
6
+ * which is important for browser environments with CORS or network restrictions.
7
+ * For 'desktop' or 'modal' layouts, returns null to indicate no proxy by default.
8
+ */
9
+ export declare const getDefaultProxyUrl: (layout: Layout) => "https://proxy.scalar.com" | null;
10
+ /**
11
+ * Returns the active proxy URL for the workspace.
12
+ *
13
+ * Logic:
14
+ * - If the active proxy url is not set, use the default proxy url.
15
+ * - Otherwise, use the active proxy url.
16
+ */
17
+ export declare const getActiveProxyUrl: (activeProxyUrl: Workspace["x-scalar-active-proxy"], layout: Layout) => string | null;
18
+ //# sourceMappingURL=proxy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../../../src/request-example/context/proxy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAEpD,MAAM,MAAM,MAAM,GAAG,KAAK,GAAG,OAAO,CAAA;AAEpC;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,GAAI,QAAQ,MAAM,sCAKhD,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,GAAI,gBAAgB,SAAS,CAAC,uBAAuB,CAAC,EAAE,QAAQ,MAAM,kBAMnG,CAAA"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Returns the default proxy URL for web layout.
3
+ * For the 'web' layout, this ensures requests use Scalar's hosted proxy unless overridden,
4
+ * which is important for browser environments with CORS or network restrictions.
5
+ * For 'desktop' or 'modal' layouts, returns null to indicate no proxy by default.
6
+ */
7
+ export const getDefaultProxyUrl = (layout) => {
8
+ if (layout === 'web') {
9
+ return 'https://proxy.scalar.com';
10
+ }
11
+ return null;
12
+ };
13
+ /**
14
+ * Returns the active proxy URL for the workspace.
15
+ *
16
+ * Logic:
17
+ * - If the active proxy url is not set, use the default proxy url.
18
+ * - Otherwise, use the active proxy url.
19
+ */
20
+ export const getActiveProxyUrl = (activeProxyUrl, layout) => {
21
+ // If the active proxy url is not set, use the default proxy url
22
+ if (activeProxyUrl === undefined) {
23
+ return getDefaultProxyUrl(layout);
24
+ }
25
+ return activeProxyUrl;
26
+ };
@@ -0,0 +1,10 @@
1
+ import type { SecurityScheme } from '@scalar/types/entities';
2
+ import type { AuthStore } from '@scalar/workspace-store/entities/auth';
3
+ import type { DeepPartial } from '@scalar/workspace-store/helpers/overrides-proxy';
4
+ import type { SecuritySchemeObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document';
5
+ import type { SecuritySchemeObjectSecret } from '../../../request-example/builder/security/secret-types.js';
6
+ /** A combined scheme that includes both the auth store secrets and a deep partial of the config auth */
7
+ export type ConfigAuthScheme = SecuritySchemeObject & DeepPartial<SecurityScheme>;
8
+ /** Extract the secrets from the config and the auth store */
9
+ export declare const extractSecuritySchemeSecrets: (scheme: SecuritySchemeObject & DeepPartial<SecurityScheme>, authStore: AuthStore, name: string, documentSlug: string) => SecuritySchemeObjectSecret;
10
+ //# sourceMappingURL=extract-security-scheme-secrets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extract-security-scheme-secrets.d.ts","sourceRoot":"","sources":["../../../../src/request-example/context/security/extract-security-scheme-secrets.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAC5D,OAAO,KAAK,EAAE,SAAS,EAA2C,MAAM,uCAAuC,CAAA;AAC/G,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iDAAiD,CAAA;AAQlF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8DAA8D,CAAA;AAExG,OAAO,KAAK,EAUV,0BAA0B,EAC3B,MAAM,iDAAiD,CAAA;AAExD,wGAAwG;AACxG,MAAM,MAAM,gBAAgB,GAAG,oBAAoB,GAAG,WAAW,CAAC,cAAc,CAAC,CAAA;AAyKjF,6DAA6D;AAC7D,eAAO,MAAM,4BAA4B,GAEvC,QAAQ,oBAAoB,GAAG,WAAW,CAAC,cAAc,CAAC,EAC1D,WAAW,SAAS,EACpB,MAAM,MAAM,EACZ,cAAc,MAAM,KACnB,0BA2DF,CAAA"}
@@ -0,0 +1,167 @@
1
+ import { isObject } from '@scalar/helpers/object/is-object';
2
+ import { objectEntries } from '@scalar/helpers/object/object-entries';
3
+ /**
4
+ * Maps x-scalar-secret fields to their corresponding input field names.
5
+ * This allows us to fall back to config values when auth store secrets are not available.
6
+ */
7
+ const SECRET_TO_INPUT_FIELD_MAP = {
8
+ 'x-scalar-secret-client-id': 'x-scalar-client-id',
9
+ 'x-scalar-secret-client-secret': 'clientSecret',
10
+ 'x-scalar-secret-password': 'password',
11
+ 'x-scalar-secret-redirect-uri': 'x-scalar-redirect-uri',
12
+ 'x-scalar-secret-token': 'token',
13
+ 'x-scalar-secret-username': 'username',
14
+ 'x-scalar-secret-auth-url': 'authorizationUrl',
15
+ 'x-scalar-secret-token-url': 'tokenUrl',
16
+ };
17
+ const mergeFlowSecrets = (properties, configSecrets, authStoreSecrets = {}) => Object.fromEntries(properties.map((property) => {
18
+ // Super merge in order of priority: auth store > config > config input field > empty string
19
+ const value = authStoreSecrets[property] ||
20
+ configSecrets[property] ||
21
+ configSecrets[SECRET_TO_INPUT_FIELD_MAP[property]] ||
22
+ '';
23
+ return [property, value];
24
+ }));
25
+ const extractRefreshTokenSecret = (authStoreSecrets = {}) => {
26
+ const refreshToken = authStoreSecrets['x-scalar-secret-refresh-token'];
27
+ if (typeof refreshToken === 'string') {
28
+ return { 'x-scalar-secret-refresh-token': refreshToken };
29
+ }
30
+ return {};
31
+ };
32
+ const extractCredentialsLocation = (configSecrets, authStoreSecrets = {}) => {
33
+ const credentialsLocation = authStoreSecrets['x-scalar-credentials-location'] ??
34
+ configSecrets['x-scalar-credentials-location'];
35
+ return credentialsLocation ? { 'x-scalar-credentials-location': credentialsLocation } : {};
36
+ };
37
+ /**
38
+ * Extract flow secrets and selected scopes for OAuth-like flows.
39
+ * Reused by both oauth2 and openIdConnect security schemes.
40
+ */
41
+ const extractOAuthFlowSecrets = (flows, storeSecrets) => {
42
+ const selectedScopes = new Set();
43
+ const extractedFlows = objectEntries(flows ?? {}).reduce((acc, [key, flow]) => {
44
+ if (!isObject(flow)) {
45
+ return acc;
46
+ }
47
+ // Store any selected scopes from the config
48
+ const flowSelectedScopes = flow['selectedScopes'];
49
+ if (Array.isArray(flowSelectedScopes)) {
50
+ flowSelectedScopes.forEach((scope) => typeof scope === 'string' && selectedScopes.add(scope));
51
+ }
52
+ // Implicit flow
53
+ if (key === 'implicit') {
54
+ acc.implicit = {
55
+ ...flow,
56
+ ...mergeFlowSecrets([
57
+ 'x-scalar-secret-client-id',
58
+ 'x-scalar-secret-redirect-uri',
59
+ 'x-scalar-secret-token',
60
+ 'x-scalar-secret-auth-url',
61
+ ], flow, storeSecrets?.implicit),
62
+ ...extractRefreshTokenSecret(storeSecrets?.implicit),
63
+ };
64
+ }
65
+ // Password flow
66
+ if (key === 'password') {
67
+ acc[key] = {
68
+ ...flow,
69
+ ...mergeFlowSecrets([
70
+ 'x-scalar-secret-client-id',
71
+ 'x-scalar-secret-client-secret',
72
+ 'x-scalar-secret-username',
73
+ 'x-scalar-secret-password',
74
+ 'x-scalar-secret-token',
75
+ 'x-scalar-secret-token-url',
76
+ ], flow, storeSecrets?.password),
77
+ ...extractCredentialsLocation(flow, storeSecrets?.password),
78
+ ...extractRefreshTokenSecret(storeSecrets?.password),
79
+ };
80
+ }
81
+ // Client credentials flow
82
+ if (key === 'clientCredentials') {
83
+ acc[key] = {
84
+ ...flow,
85
+ ...mergeFlowSecrets([
86
+ 'x-scalar-secret-client-id',
87
+ 'x-scalar-secret-client-secret',
88
+ 'x-scalar-secret-token',
89
+ 'x-scalar-secret-token-url',
90
+ ], flow, storeSecrets?.clientCredentials),
91
+ ...extractCredentialsLocation(flow, storeSecrets?.clientCredentials),
92
+ ...extractRefreshTokenSecret(storeSecrets?.clientCredentials),
93
+ };
94
+ }
95
+ // Authorization code flow
96
+ if (key === 'authorizationCode') {
97
+ acc[key] = {
98
+ ...flow,
99
+ ...mergeFlowSecrets([
100
+ 'x-scalar-secret-client-id',
101
+ 'x-scalar-secret-client-secret',
102
+ 'x-scalar-secret-redirect-uri',
103
+ 'x-scalar-secret-token',
104
+ 'x-scalar-secret-auth-url',
105
+ 'x-scalar-secret-token-url',
106
+ ], flow, storeSecrets?.authorizationCode),
107
+ ...extractCredentialsLocation(flow, storeSecrets?.authorizationCode),
108
+ ...extractRefreshTokenSecret(storeSecrets?.authorizationCode),
109
+ };
110
+ }
111
+ return acc;
112
+ }, {});
113
+ return { flows: extractedFlows, selectedScopes: Array.from(selectedScopes) };
114
+ };
115
+ /** Extract the secrets from the config and the auth store */
116
+ export const extractSecuritySchemeSecrets = (
117
+ // Include the config fields
118
+ scheme, authStore, name, documentSlug) => {
119
+ const secrets = authStore.getAuthSecrets(documentSlug, name);
120
+ // Handle API Key security schemes
121
+ if (scheme.type === 'apiKey') {
122
+ const storeSecrets = secrets?.type === 'apiKey' ? secrets : undefined;
123
+ return {
124
+ ...scheme,
125
+ 'x-scalar-secret-token': storeSecrets?.['x-scalar-secret-token'] || scheme.value || '',
126
+ };
127
+ }
128
+ // Handle HTTP Auth security schemes (e.g., Basic, Bearer)
129
+ if (scheme.type === 'http') {
130
+ const storeSecrets = secrets?.type === 'http' ? secrets : undefined;
131
+ return {
132
+ ...scheme,
133
+ 'x-scalar-secret-token': storeSecrets?.['x-scalar-secret-token'] || scheme.token || '',
134
+ 'x-scalar-secret-username': storeSecrets?.['x-scalar-secret-username'] || scheme.username || '',
135
+ 'x-scalar-secret-password': storeSecrets?.['x-scalar-secret-password'] || scheme.password || '',
136
+ };
137
+ }
138
+ // Handle OAuth2 security schemes and all supported flows
139
+ if (scheme.type === 'oauth2') {
140
+ const storeSecrets = secrets?.type === 'oauth2' ? secrets : undefined;
141
+ const extracted = extractOAuthFlowSecrets(scheme.flows, storeSecrets);
142
+ const configuredDefaultScopes = Array.isArray(scheme['x-default-scopes'])
143
+ ? scheme['x-default-scopes'].filter((scope) => typeof scope === 'string')
144
+ : [];
145
+ const mergedDefaultScopes = Array.from(new Set([...configuredDefaultScopes, ...extracted.selectedScopes]));
146
+ return {
147
+ ...scheme,
148
+ flows: extracted.flows,
149
+ 'x-default-scopes': mergedDefaultScopes,
150
+ };
151
+ }
152
+ // OpenID Connect uses auth-store-only discovered flows, but we expose them in OAuth-like flow format.
153
+ if (scheme.type === 'openIdConnect') {
154
+ const storeSecrets = secrets?.type === 'openIdConnect' ? secrets : undefined;
155
+ const extracted = extractOAuthFlowSecrets({
156
+ implicit: storeSecrets?.implicit,
157
+ password: storeSecrets?.password,
158
+ clientCredentials: storeSecrets?.clientCredentials,
159
+ authorizationCode: storeSecrets?.authorizationCode,
160
+ }, storeSecrets);
161
+ return {
162
+ ...scheme,
163
+ ...(objectEntries(extracted.flows).length ? { flows: extracted.flows } : {}),
164
+ };
165
+ }
166
+ return scheme;
167
+ };
@@ -0,0 +1,12 @@
1
+ import type { OpenApiDocument } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document';
2
+ import type { OperationObject } from '@scalar/workspace-store/schemas/v3.1/strict/operation';
3
+ /**
4
+ * Compute what the security requirements should be for a request
5
+ *
6
+ * If an operation has only one optional security requirement,
7
+ * use the document security and ensure it includes an optional object.
8
+ *
9
+ * Otherwise we generally go operation -> document security.
10
+ */
11
+ export declare const getSecurityRequirements: (documentSecurity: OpenApiDocument["security"], operationSecurity?: OperationObject["security"]) => Partial<Record<string, string[]>>[];
12
+ //# sourceMappingURL=get-security-requirements.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-security-requirements.d.ts","sourceRoot":"","sources":["../../../../src/request-example/context/security/get-security-requirements.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8DAA8D,CAAA;AACnG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uDAAuD,CAAA;AAE5F;;;;;;;GAOG;AACH,eAAO,MAAM,uBAAuB,GAClC,kBAAkB,eAAe,CAAC,UAAU,CAAC,EAC7C,oBAAoB,eAAe,CAAC,UAAU,CAAC,wCAShD,CAAA"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Compute what the security requirements should be for a request
3
+ *
4
+ * If an operation has only one optional security requirement,
5
+ * use the document security and ensure it includes an optional object.
6
+ *
7
+ * Otherwise we generally go operation -> document security.
8
+ */
9
+ export const getSecurityRequirements = (documentSecurity, operationSecurity) => {
10
+ // If the operation security is optional, use the document security and ensure it includes an optional object
11
+ if (JSON.stringify(operationSecurity) === '[{}]' && documentSecurity?.length) {
12
+ const documentHasOptional = Boolean(documentSecurity.find((s) => JSON.stringify(s) === '{}'));
13
+ return documentHasOptional ? documentSecurity : [...documentSecurity, {}];
14
+ }
15
+ return operationSecurity ?? documentSecurity ?? [];
16
+ };
@@ -0,0 +1,9 @@
1
+ import type { SecuritySchemeObjectSecret } from '../../../request-example/builder/security/secret-types.js';
2
+ import type { MergedSecuritySchemes } from '../../../request-example/context/security/merge-security.js';
3
+ import type { SecurityRequirementObject } from '../../../schemas/v3.1/strict/security-requirement.js';
4
+ /**
5
+ * Get the selected security schemes from security requirements.
6
+ * Takes security requirement objects and resolves them to actual security scheme objects.
7
+ */
8
+ export declare const getSecuritySchemes: (securitySchemes: MergedSecuritySchemes, selectedSecurity: SecurityRequirementObject[]) => SecuritySchemeObjectSecret[];
9
+ //# sourceMappingURL=get-security-schemes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-security-schemes.d.ts","sourceRoot":"","sources":["../../../../src/request-example/context/security/get-security-schemes.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,iDAAiD,CAAA;AACjG,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,mDAAmD,CAAA;AAC9F,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,4CAA4C,CAAA;AAE3F;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAC7B,iBAAiB,qBAAqB,EACtC,kBAAkB,yBAAyB,EAAE,KAC5C,0BAA0B,EAUpB,CAAA"}
@@ -0,0 +1,13 @@
1
+ import { objectKeys } from '@scalar/helpers/object/object-keys';
2
+ import { getResolvedRef } from '../../../helpers/get-resolved-ref.js';
3
+ /**
4
+ * Get the selected security schemes from security requirements.
5
+ * Takes security requirement objects and resolves them to actual security scheme objects.
6
+ */
7
+ export const getSecuritySchemes = (securitySchemes, selectedSecurity) => selectedSecurity.flatMap((scheme) => objectKeys(scheme).flatMap((key) => {
8
+ const scheme = getResolvedRef(securitySchemes?.[key]);
9
+ if (scheme) {
10
+ return scheme;
11
+ }
12
+ return [];
13
+ })) ?? [];
@@ -0,0 +1,15 @@
1
+ import type { SelectedSecurity } from '@scalar/workspace-store/entities/auth';
2
+ import type { OpenApiDocument } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document';
3
+ type DefaultScopeScheme = {
4
+ type?: string;
5
+ 'x-default-scopes'?: string[];
6
+ };
7
+ /**
8
+ * Resolves which security selection to use for an operation.
9
+ * Priority: operation-level selection, then document-level selection, then a default.
10
+ * When neither level has a selection, returns the first security requirement unless
11
+ * authentication is optional or there are no requirements, in which case returns no selection.
12
+ */
13
+ export declare const getSelectedSecurity: (documentSelectedSecurity: SelectedSecurity | undefined, operationSelectedSecurity: SelectedSecurity | undefined, securityRequirements?: NonNullable<OpenApiDocument["security"]>, securitySchemes?: Record<string, DefaultScopeScheme | undefined>) => SelectedSecurity;
14
+ export {};
15
+ //# sourceMappingURL=get-selected-security.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-selected-security.d.ts","sourceRoot":"","sources":["../../../../src/request-example/context/security/get-selected-security.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,uCAAuC,CAAA;AAE7E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8DAA8D,CAAA;AAInG,KAAK,kBAAkB,GAAG;IACxB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAA;CAC9B,CAAA;AA4BD;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,GAC9B,0BAA0B,gBAAgB,GAAG,SAAS,EACtD,2BAA2B,gBAAgB,GAAG,SAAS,EACvD,uBAAsB,WAAW,CAAC,eAAe,CAAC,UAAU,CAAC,CAAM,EACnE,kBAAiB,MAAM,CAAC,MAAM,EAAE,kBAAkB,GAAG,SAAS,CAAM,KACnE,gBA4BF,CAAA"}
@@ -0,0 +1,49 @@
1
+ import { getResolvedRef } from '@scalar/workspace-store/helpers/get-resolved-ref';
2
+ import { isAuthOptional } from './is-auth-optional.js';
3
+ const applyDefaultScopes = (requirement, securitySchemes) => {
4
+ let didApplyDefaultScopes = false;
5
+ const hydratedRequirement = Object.fromEntries(Object.entries(requirement).map(([name, scopes]) => {
6
+ if (Array.isArray(scopes) && scopes.length > 0) {
7
+ return [name, scopes];
8
+ }
9
+ const scheme = getResolvedRef(securitySchemes[name]);
10
+ const defaultScopes = scheme?.type === 'oauth2' ? scheme['x-default-scopes'] : undefined;
11
+ if (Array.isArray(defaultScopes) && defaultScopes.length > 0) {
12
+ didApplyDefaultScopes = true;
13
+ return [name, [...defaultScopes]];
14
+ }
15
+ return [name, scopes];
16
+ }));
17
+ return didApplyDefaultScopes ? hydratedRequirement : requirement;
18
+ };
19
+ /**
20
+ * Resolves which security selection to use for an operation.
21
+ * Priority: operation-level selection, then document-level selection, then a default.
22
+ * When neither level has a selection, returns the first security requirement unless
23
+ * authentication is optional or there are no requirements, in which case returns no selection.
24
+ */
25
+ export const getSelectedSecurity = (documentSelectedSecurity, operationSelectedSecurity, securityRequirements = [], securitySchemes = {}) => {
26
+ // Operation level security
27
+ if (operationSelectedSecurity) {
28
+ return operationSelectedSecurity;
29
+ }
30
+ // Document level security
31
+ if (documentSelectedSecurity) {
32
+ return documentSelectedSecurity;
33
+ }
34
+ const isOptional = isAuthOptional(securityRequirements);
35
+ const firstRequirement = securityRequirements[0];
36
+ // No need to default if auth is optional
37
+ if (isOptional || !firstRequirement) {
38
+ return {
39
+ selectedIndex: -1,
40
+ selectedSchemes: [],
41
+ };
42
+ }
43
+ // Default to the first requirement
44
+ const hydratedRequirement = applyDefaultScopes(firstRequirement, securitySchemes);
45
+ return {
46
+ selectedIndex: 0,
47
+ selectedSchemes: [hydratedRequirement],
48
+ };
49
+ };
@@ -0,0 +1,4 @@
1
+ import type { OpenApiDocument } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document';
2
+ /** Determines if the authentication is optional */
3
+ export declare const isAuthOptional: (securityRequirements: NonNullable<OpenApiDocument["security"]>) => boolean;
4
+ //# sourceMappingURL=is-auth-optional.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is-auth-optional.d.ts","sourceRoot":"","sources":["../../../../src/request-example/context/security/is-auth-optional.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8DAA8D,CAAA;AAEnG,mDAAmD;AACnD,eAAO,MAAM,cAAc,GAAI,sBAAsB,WAAW,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,KAAG,OAK/F,CAAA"}
@@ -0,0 +1,6 @@
1
+ /** Determines if the authentication is optional */
2
+ export const isAuthOptional = (securityRequirements) => {
3
+ const hasComplexRequirement = securityRequirements.some((requirement) => Object.keys(requirement).length > 1);
4
+ const hasEmptyRequirement = securityRequirements.some((requirement) => Object.keys(requirement).length === 0);
5
+ return hasEmptyRequirement && !hasComplexRequirement;
6
+ };
@@ -0,0 +1,9 @@
1
+ import type { AuthenticationConfiguration } from '@scalar/types/api-reference';
2
+ import type { AuthStore } from '@scalar/workspace-store/entities/auth';
3
+ import { type ComponentsObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document';
4
+ import type { SecuritySchemeObjectSecret } from '../../../request-example/builder/security/secret-types.js';
5
+ /** Document security merged with the config security schemes */
6
+ export type MergedSecuritySchemes = Record<string, SecuritySchemeObjectSecret>;
7
+ /** Merge the authentication config with the document security schemes + the auth store secrets */
8
+ export declare const mergeSecurity: (documentSecuritySchemes: ComponentsObject["securitySchemes"], configSecuritySchemes: AuthenticationConfiguration["securitySchemes"], authStore: AuthStore, documentName: string) => MergedSecuritySchemes;
9
+ //# sourceMappingURL=merge-security.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge-security.d.ts","sourceRoot":"","sources":["../../../../src/request-example/context/security/merge-security.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,6BAA6B,CAAA;AAC9E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uCAAuC,CAAA;AAKtE,OAAO,EACL,KAAK,gBAAgB,EAGtB,MAAM,8DAA8D,CAAA;AAErE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,iDAAiD,CAAA;AAIjG,gEAAgE;AAChE,MAAM,MAAM,qBAAqB,GAAG,MAAM,CAAC,MAAM,EAAE,0BAA0B,CAAC,CAAA;AAE9E,kGAAkG;AAClG,eAAO,MAAM,aAAa,GACxB,yBAAyB,gBAAgB,CAAC,iBAAiB,CAAM,EACjE,uBAAuB,2BAA2B,CAAC,iBAAiB,CAAM,EAC1E,WAAW,SAAS,EACpB,cAAc,MAAM,KACnB,qBA2BF,CAAA"}
@@ -0,0 +1,29 @@
1
+ import { objectEntries } from '@scalar/helpers/object/object-entries';
2
+ import { deepClone } from '@scalar/workspace-store/helpers/deep-clone';
3
+ import { getResolvedRef } from '@scalar/workspace-store/helpers/get-resolved-ref';
4
+ import { mergeObjects } from '@scalar/workspace-store/helpers/merge-object';
5
+ import { coerceValue } from '@scalar/workspace-store/schemas/typebox-coerce';
6
+ import { SecuritySchemeObjectSchema, } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document';
7
+ import { extractSecuritySchemeSecrets } from './extract-security-scheme-secrets.js';
8
+ /** Merge the authentication config with the document security schemes + the auth store secrets */
9
+ export const mergeSecurity = (documentSecuritySchemes = {}, configSecuritySchemes = {}, authStore, documentName) => {
10
+ /** Resolve any refs in the document security schemes */
11
+ const resolvedDocumentSecuritySchemes = objectEntries(documentSecuritySchemes).reduce((acc, [key, value]) => {
12
+ const resolved = deepClone(getResolvedRef(value));
13
+ if (resolved) {
14
+ acc[key] = resolved;
15
+ }
16
+ return acc;
17
+ }, {});
18
+ /** Merge the config security schemes into the document security schemes */
19
+ const mergedSchemes = mergeObjects(resolvedDocumentSecuritySchemes, configSecuritySchemes) ?? {};
20
+ /** Convert the config secrets to the new secret extensions */
21
+ return objectEntries(mergedSchemes).reduce((acc, [name, value]) => {
22
+ // We coerce in case the scheme is missing any key fields like type
23
+ const coerced = coerceValue(SecuritySchemeObjectSchema, value);
24
+ // We then overwrite it back with the original value to keep any other fields like description, etc.
25
+ const merged = { ...coerced, ...value };
26
+ acc[name] = extractSecuritySchemeSecrets(merged, authStore, name, documentName);
27
+ return acc;
28
+ }, {});
29
+ };
@@ -0,0 +1,26 @@
1
+ import type { ServerObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document';
2
+ import type { WorkspaceDocument } from '../../schemas.js';
3
+ import type { OperationObject } from '../../schemas/v3.1/strict/operation.js';
4
+ /**
5
+ * Server processing options containing base URLs for resolving relative server URLs.
6
+ */
7
+ type ServerProcessingOptions = {
8
+ baseServerUrl?: string;
9
+ documentUrl?: string;
10
+ };
11
+ /**
12
+ * Retrieves and processes servers from an OpenAPI document.
13
+ *
14
+ * This function handles several scenarios:
15
+ * 1. No servers provided - creates a default server from document URL or fallback
16
+ * 2. Invalid server configurations - filters them out with warnings
17
+ * 3. Relative URLs - resolves them to absolute URLs using available base URLs
18
+ *
19
+ * @param servers - Array of OpenAPI server objects from the document
20
+ * @param options - Configuration options for server processing
21
+ * @returns Array of validated Server entities
22
+ */
23
+ export declare function getServers(servers: ServerObject[] | undefined, options?: ServerProcessingOptions): ServerObject[];
24
+ export declare const getSelectedServer: (document: WorkspaceDocument | null, operation: OperationObject | null, configServers: ServerObject[] | null, servers: ServerObject[]) => ServerObject | null;
25
+ export {};
26
+ //# sourceMappingURL=servers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"servers.d.ts","sourceRoot":"","sources":["../../../src/request-example/context/servers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8DAA8D,CAAA;AAEhG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAA;AAClD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAA;AAEtE;;GAEG;AACH,KAAK,uBAAuB,GAAG;IAC7B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,CAAA;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,SAAS,EAAE,OAAO,GAAE,uBAA4B,GAAG,YAAY,EAAE,CASrH;AAoED,eAAO,MAAM,iBAAiB,GAC5B,UAAU,iBAAiB,GAAG,IAAI,EAClC,WAAW,eAAe,GAAG,IAAI,EACjC,eAAe,YAAY,EAAE,GAAG,IAAI,EACpC,SAAS,YAAY,EAAE,KACtB,YAAY,GAAG,IAWjB,CAAA"}