@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,19 @@
1
+ import { replaceVariables } from '@scalar/helpers/regex/replace-variables';
2
+ import { mergeUrls } from '@scalar/helpers/url/merge-urls';
3
+ import { getServerVariables } from '../../../request-example/builder/helpers/get-server-variables.js';
4
+ /**
5
+ * Resolves the full request URL by:
6
+ * 1. Applying OpenAPI server variables to the server URL template.
7
+ * 2. Merging the resolved server URL with the OpenAPI path and optional URL parameters.
8
+ * 3. Applying "allowReserved" query parameter logic if needed (for RFC3986 reserved chars).
9
+ *
10
+ * @param server - The OpenAPI server object or null
11
+ * @param path - The OpenAPI operation path (may contain {variables})
12
+ * @param urlParams - Optional URLSearchParams to include as query parameters
13
+ * @param allowReservedQueryParameters - Optional set of parameter names for which reserved characters should not be percent-encoded
14
+ * @returns The resolved URL as a string
15
+ */
16
+ export const getResolvedUrl = ({ server, path, urlParams, }) => {
17
+ const serverVariables = getServerVariables(server);
18
+ return mergeUrls(replaceVariables(server?.url ?? '', serverVariables), path, urlParams);
19
+ };
@@ -0,0 +1,10 @@
1
+ import type { ServerObject } from '../../../schemas/v3.1/strict/server.js';
2
+ /**
3
+ * Extracts the default values of variables defined in a ServerObject into a simple key-value map.
4
+ * Ignores variables with no default value.
5
+ *
6
+ * @param server The OpenAPI ServerObject (may be null).
7
+ * @returns Record of variableName -> defaultValue.
8
+ */
9
+ export declare const getServerVariables: (server: ServerObject | null) => Record<string, string>;
10
+ //# sourceMappingURL=get-server-variables.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-server-variables.d.ts","sourceRoot":"","sources":["../../../../src/request-example/builder/helpers/get-server-variables.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAEhE;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,GAAI,QAAQ,YAAY,GAAG,IAAI,2BAU7D,CAAA"}
@@ -0,0 +1,19 @@
1
+ import { objectEntries } from '@scalar/helpers/object/object-entries';
2
+ /**
3
+ * Extracts the default values of variables defined in a ServerObject into a simple key-value map.
4
+ * Ignores variables with no default value.
5
+ *
6
+ * @param server The OpenAPI ServerObject (may be null).
7
+ * @returns Record of variableName -> defaultValue.
8
+ */
9
+ export const getServerVariables = (server) => {
10
+ if (!server) {
11
+ return {};
12
+ }
13
+ return objectEntries(server?.variables ?? {}).reduce((acc, [name, variable]) => {
14
+ if (variable.default) {
15
+ acc[name] = variable.default;
16
+ }
17
+ return acc;
18
+ }, {});
19
+ };
@@ -0,0 +1,15 @@
1
+ export { getExampleFromBody } from './body/get-request-body-example.js';
2
+ export { getSelectedBodyContentType } from './body/get-selected-body-content-type.js';
3
+ export { buildRequest } from './build-request.js';
4
+ export { deSerializeParameter } from './header/de-serialize-parameter.js';
5
+ export { filterGlobalCookie } from './header/filter-global-cookies.js';
6
+ export { serializeContentValue, serializeDeepObjectStyle, serializeFormStyle, serializeFormStyleForCookies, serializePipeDelimitedStyle, serializeSimpleStyle, serializeSpaceDelimitedStyle, } from './header/serialize-parameter.js';
7
+ export { getEnvironmentVariables } from './helpers/get-environment-variables.js';
8
+ export { getExample } from './helpers/get-example.js';
9
+ export { getExampleFromSchema } from './helpers/get-example-from-schema.js';
10
+ export { getResolvedUrl } from './helpers/get-resolved-url.js';
11
+ export { getServerVariables } from './helpers/get-server-variables.js';
12
+ export { requestFactory } from './request-factory.js';
13
+ export { buildRequestSecurity } from './security/build-request-security.js';
14
+ export type { ApiKeyObjectSecret, HttpObjectSecret, OAuth2ObjectSecret, OAuthFlowAuthorizationCodeSecret, OAuthFlowClientCredentialsSecret, OAuthFlowImplicitSecret, OAuthFlowPasswordSecret, OAuthFlowsObjectSecret, OpenIdConnectObjectSecret, SecuritySchemeObjectSecret, } from './security/secret-types.js';
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/request-example/builder/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAA;AACpE,OAAO,EAAE,0BAA0B,EAAE,MAAM,uCAAuC,CAAA;AAClF,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAA;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAA;AACnE,OAAO,EACL,qBAAqB,EACrB,wBAAwB,EACxB,kBAAkB,EAClB,4BAA4B,EAC5B,2BAA2B,EAC3B,oBAAoB,EACpB,4BAA4B,GAC7B,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAA;AAC7E,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAA;AACxE,OAAO,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAA;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAA;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAA;AACxE,YAAY,EACV,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,gCAAgC,EAChC,gCAAgC,EAChC,uBAAuB,EACvB,uBAAuB,EACvB,sBAAsB,EACtB,yBAAyB,EACzB,0BAA0B,GAC3B,MAAM,yBAAyB,CAAA"}
@@ -0,0 +1,13 @@
1
+ export { getExampleFromBody } from './body/get-request-body-example.js';
2
+ export { getSelectedBodyContentType } from './body/get-selected-body-content-type.js';
3
+ export { buildRequest } from './build-request.js';
4
+ export { deSerializeParameter } from './header/de-serialize-parameter.js';
5
+ export { filterGlobalCookie } from './header/filter-global-cookies.js';
6
+ export { serializeContentValue, serializeDeepObjectStyle, serializeFormStyle, serializeFormStyleForCookies, serializePipeDelimitedStyle, serializeSimpleStyle, serializeSpaceDelimitedStyle, } from './header/serialize-parameter.js';
7
+ export { getEnvironmentVariables } from './helpers/get-environment-variables.js';
8
+ export { getExample } from './helpers/get-example.js';
9
+ export { getExampleFromSchema } from './helpers/get-example-from-schema.js';
10
+ export { getResolvedUrl } from './helpers/get-resolved-url.js';
11
+ export { getServerVariables } from './helpers/get-server-variables.js';
12
+ export { requestFactory } from './request-factory.js';
13
+ export { buildRequestSecurity } from './security/build-request-security.js';
@@ -0,0 +1,60 @@
1
+ import type { XScalarEnvironment } from '@scalar/workspace-store/schemas/extensions/document/x-scalar-environments';
2
+ import type { XScalarCookie } from '@scalar/workspace-store/schemas/extensions/general/x-scalar-cookies';
3
+ import type { ServerObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document';
4
+ import type { OperationObject } from '@scalar/workspace-store/schemas/v3.1/strict/operation';
5
+ import { type BuildRequestSecurityResult } from '../../request-example/builder/security/build-request-security.js';
6
+ import type { SecuritySchemeObjectSecret } from '../../request-example/builder/security/secret-types.js';
7
+ import type { RequestExampleMeta } from '../../request-example/types.js';
8
+ import { type RequestBody } from './body/build-request-body.js';
9
+ export type RequestFactory = {
10
+ baseUrl: string;
11
+ path: {
12
+ variables: Record<string, string>;
13
+ raw: string;
14
+ };
15
+ method: string;
16
+ proxy: {
17
+ proxyUrl: string;
18
+ };
19
+ query: {
20
+ params: URLSearchParams;
21
+ };
22
+ headers: Headers;
23
+ body: RequestBody | null;
24
+ cookies: {
25
+ list: XScalarCookie[];
26
+ };
27
+ cache: RequestCache;
28
+ security: BuildRequestSecurityResult[];
29
+ allowedReservedQueryParameters?: Set<string>;
30
+ options?: {
31
+ isElectron?: boolean;
32
+ };
33
+ };
34
+ /**
35
+ * Builds a request object fastory which can be used to build a request object.
36
+ * @returns A request object factory
37
+ */
38
+ export declare const requestFactory: ({ exampleName, globalCookies, method, operation, path, proxyUrl, server, defaultHeaders, isElectron, selectedSecuritySchemes, requestBodyCompositionSelection, }: RequestExampleMeta & {
39
+ /** The operation object */
40
+ operation: OperationObject;
41
+ /** For environment variables in the inputs */
42
+ environment: XScalarEnvironment;
43
+ /** Workspace + document cookies */
44
+ globalCookies: XScalarCookie[];
45
+ /** The proxy URL for cookie domain determination */
46
+ proxyUrl: string;
47
+ /** The server object */
48
+ server: ServerObject | null;
49
+ /** Default headers */
50
+ defaultHeaders: Record<string, string>;
51
+ /** Whether the request is being made from an Electron environment */
52
+ isElectron: boolean;
53
+ /** The selected security schemes for the current operation */
54
+ selectedSecuritySchemes: SecuritySchemeObjectSecret[];
55
+ /** Selected anyOf/oneOf request-body variants keyed by schema path */
56
+ requestBodyCompositionSelection?: Record<string, number>;
57
+ }) => {
58
+ request: RequestFactory;
59
+ };
60
+ //# sourceMappingURL=request-factory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"request-factory.d.ts","sourceRoot":"","sources":["../../../src/request-example/builder/request-factory.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2EAA2E,CAAA;AACnH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qEAAqE,CAAA;AACxG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8DAA8D,CAAA;AAChG,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uDAAuD,CAAA;AAG5F,OAAO,EACL,KAAK,0BAA0B,EAEhC,MAAM,2DAA2D,CAAA;AAClE,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,iDAAiD,CAAA;AACjG,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAEjE,OAAO,EAAE,KAAK,WAAW,EAAoB,MAAM,2BAA2B,CAAA;AAG9E,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE;QACJ,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QACjC,GAAG,EAAE,MAAM,CAAA;KACZ,CAAA;IACD,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE;QACL,QAAQ,EAAE,MAAM,CAAA;KACjB,CAAA;IACD,KAAK,EAAE;QACL,MAAM,EAAE,eAAe,CAAA;KACxB,CAAA;IACD,OAAO,EAAE,OAAO,CAAA;IAChB,IAAI,EAAE,WAAW,GAAG,IAAI,CAAA;IACxB,OAAO,EAAE;QACP,IAAI,EAAE,aAAa,EAAE,CAAA;KACtB,CAAA;IACD,KAAK,EAAE,YAAY,CAAA;IACnB,QAAQ,EAAE,0BAA0B,EAAE,CAAA;IACtC,8BAA8B,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC5C,OAAO,CAAC,EAAE;QACR,UAAU,CAAC,EAAE,OAAO,CAAA;KACrB,CAAA;CACF,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,cAAc,GAAI,kKAY5B,kBAAkB,GAAG;IACtB,2BAA2B;IAC3B,SAAS,EAAE,eAAe,CAAA;IAC1B,8CAA8C;IAC9C,WAAW,EAAE,kBAAkB,CAAA;IAC/B,mCAAmC;IACnC,aAAa,EAAE,aAAa,EAAE,CAAA;IAC9B,oDAAoD;IACpD,QAAQ,EAAE,MAAM,CAAA;IAChB,wBAAwB;IACxB,MAAM,EAAE,YAAY,GAAG,IAAI,CAAA;IAC3B,sBAAsB;IACtB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACtC,qEAAqE;IACrE,UAAU,EAAE,OAAO,CAAA;IACnB,8DAA8D;IAC9D,uBAAuB,EAAE,0BAA0B,EAAE,CAAA;IACrD,sEAAsE;IACtE,+BAA+B,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACzD,KAAG;IACF,OAAO,EAAE,cAAc,CAAA;CA+ExB,CAAA"}
@@ -0,0 +1,78 @@
1
+ import { canMethodHaveBody } from '@scalar/helpers/http/can-method-have-body';
2
+ import { replacePathVariables } from '@scalar/helpers/regex/replace-variables';
3
+ import { getResolvedRef } from '@scalar/workspace-store/helpers/get-resolved-ref';
4
+ import { getServerVariables } from '../../request-example/builder/helpers/get-server-variables.js';
5
+ import { buildRequestSecurity, } from '../../request-example/builder/security/build-request-security.js';
6
+ import { buildRequestBody } from './body/build-request-body.js';
7
+ import { buildRequestParameters } from './header/build-request-parameters.js';
8
+ /**
9
+ * Builds a request object fastory which can be used to build a request object.
10
+ * @returns A request object factory
11
+ */
12
+ export const requestFactory = ({ exampleName, globalCookies, method, operation, path, proxyUrl, server, defaultHeaders, isElectron, selectedSecuritySchemes, requestBodyCompositionSelection, }) => {
13
+ const requestBody = getResolvedRef(operation.requestBody);
14
+ /** Build out the request parameters */
15
+ const params = buildRequestParameters(operation.parameters ?? [], exampleName);
16
+ const security = buildRequestSecurity(selectedSecuritySchemes);
17
+ const headers = new Headers({ ...defaultHeaders, ...params.headers });
18
+ // If the method can have a body, build the request body, otherwise set it to null
19
+ const body = canMethodHaveBody(method)
20
+ ? buildRequestBody(requestBody, exampleName, requestBodyCompositionSelection)
21
+ : null;
22
+ // Delete the Content-Type header so the browser will set it automatically based on the request body
23
+ if (body?.mode === 'formdata' || body?.mode === 'urlencoded') {
24
+ headers.delete('Content-Type');
25
+ }
26
+ /** Combine the server url, path and url params into a single url */
27
+ const serverVariables = getServerVariables(server);
28
+ const baseUrl = replacePathVariables(server?.url ?? '', serverVariables);
29
+ // If we are running in Electron, we need to add a custom header
30
+ // that's then forwarded as a `User-Agent` header.
31
+ const userAgentHeader = headers.get('User-Agent');
32
+ if (isElectron && userAgentHeader) {
33
+ headers.set('X-Scalar-User-Agent', userAgentHeader);
34
+ }
35
+ const globalCookieFilter = operation['x-scalar-disable-parameters']?.['global-cookies']?.[exampleName] ?? {};
36
+ const cookiesList = [
37
+ ...globalCookies.map((c) => ({
38
+ ...c,
39
+ isDisabled: (c.isDisabled || globalCookieFilter[c.name.toLowerCase()]) ?? false,
40
+ })),
41
+ ...params.cookies,
42
+ ];
43
+ const acceptHeader = headers.get('Accept');
44
+ const isSseAcceptHeader = acceptHeader?.toLowerCase().includes('text/event-stream') ?? false;
45
+ const requestCacheMode = isSseAcceptHeader ? 'no-store' : 'default';
46
+ if (isSseAcceptHeader) {
47
+ headers.set('Cache-Control', 'no-cache');
48
+ headers.set('Pragma', 'no-cache');
49
+ }
50
+ const request = {
51
+ baseUrl,
52
+ proxy: {
53
+ proxyUrl,
54
+ },
55
+ path: {
56
+ variables: params.pathVariables,
57
+ raw: path,
58
+ },
59
+ query: {
60
+ params: params.urlParams,
61
+ },
62
+ method: method.toUpperCase(),
63
+ headers,
64
+ body,
65
+ cookies: {
66
+ list: cookiesList,
67
+ },
68
+ cache: requestCacheMode,
69
+ security,
70
+ options: {
71
+ isElectron,
72
+ },
73
+ allowedReservedQueryParameters: params.allowReservedQueryParameters,
74
+ };
75
+ return {
76
+ request,
77
+ };
78
+ };
@@ -0,0 +1,24 @@
1
+ import type { SecuritySchemeObjectSecret } from '../../../request-example/builder/security/secret-types.js';
2
+ export type BuildRequestSecurityResult = {
3
+ /** The location of the security scheme */
4
+ in: 'header' | 'query' | 'cookie';
5
+ /** The name of the security scheme */
6
+ name: string;
7
+ /** The type of security scheme */
8
+ type: 'simple' | 'basic' | 'bearer';
9
+ /**
10
+ * The value of the security scheme
11
+ * For basic auth we need to base64 encode the value when we build the request
12
+ */
13
+ value: string;
14
+ };
15
+ /**
16
+ * Generates the headers, cookies and query params for selected security schemes
17
+ * In the future we can add customization for where the security is applied
18
+ */
19
+ export declare const buildRequestSecurity: (
20
+ /** Currently selected security for the current operation */
21
+ selectedSecuritySchemes: SecuritySchemeObjectSecret[],
22
+ /** Include this parameter to set the placeholder for empty tokens */
23
+ emptyTokenPlaceholder?: string) => BuildRequestSecurityResult[];
24
+ //# sourceMappingURL=build-request-security.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-request-security.d.ts","sourceRoot":"","sources":["../../../../src/request-example/builder/security/build-request-security.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,iDAAiD,CAAA;AAEjG,MAAM,MAAM,0BAA0B,GAAG;IACvC,0CAA0C;IAC1C,EAAE,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAA;IACjC,sCAAsC;IACtC,IAAI,EAAE,MAAM,CAAA;IACZ,kCAAkC;IAClC,IAAI,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAA;IACnC;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,oBAAoB;AAC/B,4DAA4D;AAC5D,yBAAyB,0BAA0B,EAAE;AACrD,qEAAqE;AACrE,8BAA0B,KACzB,0BAA0B,EA6E5B,CAAA"}
@@ -0,0 +1,79 @@
1
+ import { isDefined } from '@scalar/helpers/array/is-defined';
2
+ /**
3
+ * Generates the headers, cookies and query params for selected security schemes
4
+ * In the future we can add customization for where the security is applied
5
+ */
6
+ export const buildRequestSecurity = (
7
+ /** Currently selected security for the current operation */
8
+ selectedSecuritySchemes,
9
+ /** Include this parameter to set the placeholder for empty tokens */
10
+ emptyTokenPlaceholder = '') => {
11
+ const result = [];
12
+ selectedSecuritySchemes.forEach((scheme) => {
13
+ // Api key
14
+ if (scheme.type === 'apiKey') {
15
+ const name = scheme.name;
16
+ const value = scheme['x-scalar-secret-token'] || emptyTokenPlaceholder;
17
+ if (scheme.in === 'header') {
18
+ return result.push({
19
+ in: scheme.in,
20
+ name,
21
+ value,
22
+ type: 'simple',
23
+ });
24
+ }
25
+ if (scheme.in === 'query') {
26
+ return result.push({
27
+ in: 'query',
28
+ name,
29
+ value,
30
+ type: 'simple',
31
+ });
32
+ }
33
+ if (scheme.in === 'cookie') {
34
+ return result.push({
35
+ in: 'cookie',
36
+ name,
37
+ value,
38
+ type: 'simple',
39
+ });
40
+ }
41
+ }
42
+ // HTTP
43
+ if (scheme.type === 'http') {
44
+ if (scheme.scheme === 'basic') {
45
+ const username = scheme['x-scalar-secret-username'];
46
+ const password = scheme['x-scalar-secret-password'];
47
+ const value = `${username}:${password}`;
48
+ return result.push({
49
+ in: 'header',
50
+ name: 'Authorization',
51
+ // We encode the value when we build the request since we want to be able to replace the variables in the value
52
+ value: value === ':' ? 'username:password' : value,
53
+ type: 'basic',
54
+ });
55
+ }
56
+ // Bearer auth
57
+ const value = scheme['x-scalar-secret-token'];
58
+ return result.push({
59
+ in: 'header',
60
+ name: 'Authorization',
61
+ value: value || emptyTokenPlaceholder,
62
+ type: 'bearer',
63
+ });
64
+ }
65
+ // OAuth2
66
+ if (scheme.type === 'oauth2') {
67
+ const flows = Object.values(scheme?.flows ?? {});
68
+ const token = flows.filter(isDefined).find((f) => f['x-scalar-secret-token'])?.['x-scalar-secret-token'] ?? '';
69
+ return result.push({
70
+ in: 'header',
71
+ name: 'Authorization',
72
+ value: token || emptyTokenPlaceholder,
73
+ type: 'bearer',
74
+ });
75
+ }
76
+ return null;
77
+ });
78
+ return result;
79
+ };
@@ -0,0 +1,25 @@
1
+ import type { XScalarAuthUrl, XScalarCredentialsLocation, XScalarSecretClientId, XScalarSecretClientSecret, XScalarSecretHTTP, XScalarSecretRedirectUri, XScalarSecretRefreshToken, XScalarSecretToken, XScalarTokenUrl } from '../../../schemas/extensions/security/index.js';
2
+ import type { OAuthFlowAuthorizationCode, OAuthFlowClientCredentials, OAuthFlowImplicit, OAuthFlowPassword } from '../../../schemas/v3.1/strict/oauth-flow.js';
3
+ import type { ApiKeyObject, HttpObject, OAuth2Object, OpenIdConnectObject } from '../../../schemas/v3.1/strict/security-scheme.js';
4
+ type OAuthFlowCommonSecret = XScalarSecretClientId & XScalarSecretToken & XScalarSecretRefreshToken & XScalarAuthUrl & XScalarTokenUrl;
5
+ export type OAuthFlowImplicitSecret = OAuthFlowImplicit & OAuthFlowCommonSecret & XScalarSecretRedirectUri;
6
+ export type OAuthFlowPasswordSecret = OAuthFlowPassword & OAuthFlowCommonSecret & XScalarSecretHTTP & XScalarSecretClientSecret & XScalarCredentialsLocation;
7
+ export type OAuthFlowClientCredentialsSecret = OAuthFlowClientCredentials & OAuthFlowCommonSecret & XScalarSecretClientSecret & XScalarCredentialsLocation;
8
+ export type OAuthFlowAuthorizationCodeSecret = OAuthFlowAuthorizationCode & OAuthFlowCommonSecret & XScalarSecretClientSecret & XScalarSecretRedirectUri & XScalarCredentialsLocation;
9
+ export type OAuthFlowsObjectSecret = {
10
+ implicit?: OAuthFlowImplicitSecret;
11
+ password?: OAuthFlowPasswordSecret;
12
+ clientCredentials?: OAuthFlowClientCredentialsSecret;
13
+ authorizationCode?: OAuthFlowAuthorizationCodeSecret;
14
+ };
15
+ export type ApiKeyObjectSecret = ApiKeyObject & XScalarSecretToken;
16
+ export type HttpObjectSecret = HttpObject & XScalarSecretHTTP & XScalarSecretToken;
17
+ export type OAuth2ObjectSecret = Omit<OAuth2Object, 'flows'> & {
18
+ flows: OAuthFlowsObjectSecret;
19
+ };
20
+ export type OpenIdConnectObjectSecret = OpenIdConnectObject & {
21
+ flows?: OAuthFlowsObjectSecret;
22
+ };
23
+ export type SecuritySchemeObjectSecret = ApiKeyObjectSecret | HttpObjectSecret | OpenIdConnectObjectSecret | OAuth2ObjectSecret;
24
+ export {};
25
+ //# sourceMappingURL=secret-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secret-types.d.ts","sourceRoot":"","sources":["../../../../src/request-example/builder/security/secret-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,cAAc,EACd,0BAA0B,EAC1B,qBAAqB,EACrB,yBAAyB,EACzB,iBAAiB,EACjB,wBAAwB,EACxB,yBAAyB,EACzB,kBAAkB,EAClB,eAAe,EAChB,MAAM,+BAA+B,CAAA;AACtC,OAAO,KAAK,EACV,0BAA0B,EAC1B,0BAA0B,EAC1B,iBAAiB,EACjB,iBAAiB,EAClB,MAAM,kCAAkC,CAAA;AACzC,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,uCAAuC,CAAA;AAExH,KAAK,qBAAqB,GAAG,qBAAqB,GAChD,kBAAkB,GAClB,yBAAyB,GACzB,cAAc,GACd,eAAe,CAAA;AAEjB,MAAM,MAAM,uBAAuB,GAAG,iBAAiB,GAAG,qBAAqB,GAAG,wBAAwB,CAAA;AAE1G,MAAM,MAAM,uBAAuB,GAAG,iBAAiB,GACrD,qBAAqB,GACrB,iBAAiB,GACjB,yBAAyB,GACzB,0BAA0B,CAAA;AAE5B,MAAM,MAAM,gCAAgC,GAAG,0BAA0B,GACvE,qBAAqB,GACrB,yBAAyB,GACzB,0BAA0B,CAAA;AAE5B,MAAM,MAAM,gCAAgC,GAAG,0BAA0B,GACvE,qBAAqB,GACrB,yBAAyB,GACzB,wBAAwB,GACxB,0BAA0B,CAAA;AAE5B,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,CAAC,EAAE,uBAAuB,CAAA;IAClC,QAAQ,CAAC,EAAE,uBAAuB,CAAA;IAClC,iBAAiB,CAAC,EAAE,gCAAgC,CAAA;IACpD,iBAAiB,CAAC,EAAE,gCAAgC,CAAA;CACrD,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG,YAAY,GAAG,kBAAkB,CAAA;AAClE,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG,iBAAiB,GAAG,kBAAkB,CAAA;AAClF,MAAM,MAAM,kBAAkB,GAAG,IAAI,CAAC,YAAY,EAAE,OAAO,CAAC,GAAG;IAAE,KAAK,EAAE,sBAAsB,CAAA;CAAE,CAAA;AAChG,MAAM,MAAM,yBAAyB,GAAG,mBAAmB,GAAG;IAAE,KAAK,CAAC,EAAE,sBAAsB,CAAA;CAAE,CAAA;AAEhG,MAAM,MAAM,0BAA0B,GAClC,kBAAkB,GAClB,gBAAgB,GAChB,yBAAyB,GACzB,kBAAkB,CAAA"}
@@ -0,0 +1,21 @@
1
+ import type { WorkspaceStore } from '../../client.js';
2
+ import { type XScalarEnvironment } from '../../schemas/extensions/document/x-scalar-environments.js';
3
+ import type { WorkspaceDocument } from '../../schemas/workspace.js';
4
+ /**
5
+ * Returns the active environment context for a given workspace and document.
6
+ *
7
+ * - If there is no workspace, returns a default (empty) environment.
8
+ * - If no environment is selected (no active environment), returns a default environment.
9
+ * - Otherwise, combines variables from both the workspace and document environments,
10
+ * merging document environment values over workspace ones. The variables arrays from both
11
+ * sources are concatenated and passed through the environment schema.
12
+ *
13
+ * @param workspace Workspace store instance or null if unavailable
14
+ * @param document Document data or null if unavailable
15
+ * @returns An object with the environment name (or null) and a validated XScalarEnvironment
16
+ */
17
+ export declare const getActiveEnvironment: (workspace: WorkspaceStore | null, document: WorkspaceDocument | null) => {
18
+ name: string | null;
19
+ environment: XScalarEnvironment;
20
+ };
21
+ //# sourceMappingURL=environment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environment.d.ts","sourceRoot":"","sources":["../../../src/request-example/context/environment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAC9C,OAAO,EAAE,KAAK,kBAAkB,EAA4B,MAAM,qDAAqD,CAAA;AAEvH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAE5D;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,oBAAoB,GAC/B,WAAW,cAAc,GAAG,IAAI,EAChC,UAAU,iBAAiB,GAAG,IAAI,KACjC;IACD,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,WAAW,EAAE,kBAAkB,CAAA;CAqChC,CAAA"}
@@ -0,0 +1,49 @@
1
+ import { xScalarEnvironmentSchema } from '../../schemas/extensions/document/x-scalar-environments.js';
2
+ import { coerceValue } from '../../schemas/typebox-coerce.js';
3
+ /**
4
+ * Returns the active environment context for a given workspace and document.
5
+ *
6
+ * - If there is no workspace, returns a default (empty) environment.
7
+ * - If no environment is selected (no active environment), returns a default environment.
8
+ * - Otherwise, combines variables from both the workspace and document environments,
9
+ * merging document environment values over workspace ones. The variables arrays from both
10
+ * sources are concatenated and passed through the environment schema.
11
+ *
12
+ * @param workspace Workspace store instance or null if unavailable
13
+ * @param document Document data or null if unavailable
14
+ * @returns An object with the environment name (or null) and a validated XScalarEnvironment
15
+ */
16
+ export const getActiveEnvironment = (workspace, document) => {
17
+ // If workspace is null, return default (empty) environment
18
+ if (workspace === null) {
19
+ return {
20
+ name: null,
21
+ environment: coerceValue(xScalarEnvironmentSchema, {}),
22
+ };
23
+ }
24
+ // Get the name of the currently active environment from workspace
25
+ const activeEnv = workspace.workspace['x-scalar-active-environment'];
26
+ // If no active environment is set, return default (empty) environment
27
+ if (!activeEnv) {
28
+ return {
29
+ name: null,
30
+ environment: coerceValue(xScalarEnvironmentSchema, {}),
31
+ };
32
+ }
33
+ // Get environment variables from workspace and document (if present)
34
+ const workspaceEnv = workspace.workspace['x-scalar-environments']?.[activeEnv] ?? {
35
+ variables: [],
36
+ };
37
+ const documentEnv = document?.['x-scalar-environments']?.[activeEnv] ?? {
38
+ variables: [],
39
+ };
40
+ // Merge workspace and document variables, with document variables appended
41
+ return {
42
+ name: activeEnv,
43
+ environment: coerceValue(xScalarEnvironmentSchema, {
44
+ ...workspaceEnv,
45
+ ...documentEnv,
46
+ variables: [...workspaceEnv.variables, ...documentEnv.variables],
47
+ }),
48
+ };
49
+ };
@@ -0,0 +1,57 @@
1
+ import type { WorkspaceStore } from '../../client.js';
2
+ import type { SelectedSecurity } from '../../entities/auth/index.js';
3
+ import type { AuthMeta, ServerMeta } from '../../events/index.js';
4
+ import type { SecuritySchemeObjectSecret } from '../../request-example/builder/security/secret-types.js';
5
+ import { type Layout } from '../../request-example/context/proxy.js';
6
+ import { type MergedSecuritySchemes } from '../../request-example/context/security/merge-security.js';
7
+ import type { RequestExampleMeta, Result } from '../../request-example/types.js';
8
+ import type { XScalarEnvironment } from '../../schemas/extensions/document/x-scalar-environments.js';
9
+ import type { XScalarCookie } from '../../schemas/extensions/general/x-scalar-cookies.js';
10
+ import type { OperationObject } from '../../schemas/v3.1/strict/operation.js';
11
+ import type { SecurityRequirementObject } from '../../schemas/v3.1/strict/security-requirement.js';
12
+ import type { ServerObject } from '../../schemas/v3.1/strict/server.js';
13
+ import type { WorkspaceDocument } from '../../schemas/workspace.js';
14
+ type BuildRequestExampleContext = {
15
+ operation: OperationObject;
16
+ environment: {
17
+ name: string | null;
18
+ environment: XScalarEnvironment;
19
+ };
20
+ cookies: {
21
+ workspace: XScalarCookie[];
22
+ document: XScalarCookie[];
23
+ };
24
+ servers: {
25
+ list: ServerObject[];
26
+ selected: ServerObject | null;
27
+ meta: ServerMeta;
28
+ };
29
+ proxy: {
30
+ url: string | null;
31
+ };
32
+ headers: {
33
+ default: Record<string, string>;
34
+ };
35
+ security: {
36
+ schemes: MergedSecuritySchemes;
37
+ requirements: SecurityRequirementObject[];
38
+ selected: SelectedSecurity;
39
+ selectedSchemes: SecuritySchemeObjectSecret[];
40
+ meta: AuthMeta;
41
+ };
42
+ };
43
+ export declare const getRequestExampleContext: (workspaceStore: WorkspaceStore, documentName: string, requestExampleMeta: RequestExampleMeta, options?: Partial<{
44
+ servers: ServerObject[];
45
+ baseServerUrl: string;
46
+ layout: Layout;
47
+ appVersion: string;
48
+ isElectron: boolean;
49
+ /**
50
+ * When the document is not in `workspace.documents[documentName]` yet, use this copy (same shape as the
51
+ * workspace entry). Callers that already hold the resolved document should pass it so behavior matches
52
+ * reading from props.
53
+ */
54
+ fallbackDocument: WorkspaceDocument | null;
55
+ }>) => Result<BuildRequestExampleContext>;
56
+ export {};
57
+ //# sourceMappingURL=get-request-example-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get-request-example-context.d.ts","sourceRoot":"","sources":["../../../src/request-example/context/get-request-example-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAC9C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAEpD,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,iDAAiD,CAAA;AAIjG,OAAO,EAAE,KAAK,MAAM,EAAqB,MAAM,iCAAiC,CAAA;AAIhF,OAAO,EAAE,KAAK,qBAAqB,EAAiB,MAAM,mDAAmD,CAAA;AAE7G,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAA;AACzE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qDAAqD,CAAA;AAC7F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+CAA+C,CAAA;AAClF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iCAAiC,CAAA;AACtE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,4CAA4C,CAAA;AAC3F,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAChE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAE5D,KAAK,0BAA0B,GAAG;IAChC,SAAS,EAAE,eAAe,CAAA;IAC1B,WAAW,EAAE;QACX,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;QACnB,WAAW,EAAE,kBAAkB,CAAA;KAChC,CAAA;IACD,OAAO,EAAE;QACP,SAAS,EAAE,aAAa,EAAE,CAAA;QAC1B,QAAQ,EAAE,aAAa,EAAE,CAAA;KAC1B,CAAA;IACD,OAAO,EAAE;QACP,IAAI,EAAE,YAAY,EAAE,CAAA;QACpB,QAAQ,EAAE,YAAY,GAAG,IAAI,CAAA;QAC7B,IAAI,EAAE,UAAU,CAAA;KACjB,CAAA;IACD,KAAK,EAAE;QACL,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;KACnB,CAAA;IACD,OAAO,EAAE;QACP,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAChC,CAAA;IACD,QAAQ,EAAE;QACR,OAAO,EAAE,qBAAqB,CAAA;QAC9B,YAAY,EAAE,yBAAyB,EAAE,CAAA;QACzC,QAAQ,EAAE,gBAAgB,CAAA;QAC1B,eAAe,EAAE,0BAA0B,EAAE,CAAA;QAC7C,IAAI,EAAE,QAAQ,CAAA;KACf,CAAA;CACF,CAAA;AAED,eAAO,MAAM,wBAAwB,GACnC,gBAAgB,cAAc,EAC9B,cAAc,MAAM,EACpB,oBAAoB,kBAAkB,EACtC,UAAS,OAAO,CAAC;IACf,OAAO,EAAE,YAAY,EAAE,CAAA;IACvB,aAAa,EAAE,MAAM,CAAA;IACrB,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,OAAO,CAAA;IACnB;;;;OAIG;IACH,gBAAgB,EAAE,iBAAiB,GAAG,IAAI,CAAA;CAC3C,CAAM,KACN,MAAM,CAAC,0BAA0B,CAmInC,CAAA"}
@@ -0,0 +1,115 @@
1
+ import { getResolvedRef } from '../../helpers/get-resolved-ref.js';
2
+ import { getActiveEnvironment } from '../../request-example/context/environment.js';
3
+ import { getDefaultHeaders } from '../../request-example/context/headers.js';
4
+ import { combineParams } from '../../request-example/context/helpers/combine-params.js';
5
+ import { getActiveProxyUrl } from '../../request-example/context/proxy.js';
6
+ import { getSecurityRequirements } from '../../request-example/context/security/get-security-requirements.js';
7
+ import { getSecuritySchemes } from '../../request-example/context/security/get-security-schemes.js';
8
+ import { getSelectedSecurity } from '../../request-example/context/security/get-selected-security.js';
9
+ import { mergeSecurity } from '../../request-example/context/security/merge-security.js';
10
+ import { getSelectedServer, getServers } from '../../request-example/context/servers.js';
11
+ export const getRequestExampleContext = (workspaceStore, documentName, requestExampleMeta, options = {}) => {
12
+ const { path, method, exampleName } = requestExampleMeta;
13
+ const document = workspaceStore.workspace.documents[documentName] ?? options.fallbackDocument ?? undefined;
14
+ if (!document) {
15
+ return {
16
+ ok: false,
17
+ error: `Document ${documentName} not found`,
18
+ };
19
+ }
20
+ const pathItem = getResolvedRef(document.paths?.[path]);
21
+ if (!pathItem) {
22
+ return {
23
+ ok: false,
24
+ error: `Path ${path} not found`,
25
+ };
26
+ }
27
+ const resolvedOperation = getResolvedRef(pathItem[method]);
28
+ if (!resolvedOperation) {
29
+ return {
30
+ ok: false,
31
+ error: `Method ${method} not found on path ${path}`,
32
+ };
33
+ }
34
+ // Combine the path item and operation parameters
35
+ const operation = {
36
+ ...resolvedOperation,
37
+ parameters: combineParams(pathItem.parameters, resolvedOperation.parameters ?? []),
38
+ };
39
+ //------------------------------------------------------------------------------------------------
40
+ // ENVIRONMENT CONTEXT
41
+ //------------------------------------------------------------------------------------------------
42
+ // Get environment context for the request example
43
+ const environment = getActiveEnvironment(workspaceStore, document);
44
+ //------------------------------------------------------------------------------------------------
45
+ // SERVER CONTEXT
46
+ //------------------------------------------------------------------------------------------------
47
+ // Get server context for the request example
48
+ const serverList = getServers(options.servers ?? operation.servers ?? document.servers, {
49
+ baseServerUrl: options.baseServerUrl,
50
+ documentUrl: document['x-scalar-original-source-url'],
51
+ });
52
+ const selectedServer = getSelectedServer(document, operation, options.servers ?? null, serverList);
53
+ //------------------------------------------------------------------------------------------------
54
+ // SECURITY CONTEXT
55
+ //------------------------------------------------------------------------------------------------
56
+ const documentSelectedSecurity = workspaceStore.auth.getAuthSelectedSchemas({
57
+ type: 'document',
58
+ documentName,
59
+ });
60
+ const operationSelectedSecurity = workspaceStore.auth.getAuthSelectedSchemas({
61
+ type: 'operation',
62
+ documentName,
63
+ path: path ?? '',
64
+ method: method ?? 'get',
65
+ });
66
+ const securitySchemes = mergeSecurity(document.components?.securitySchemes ?? {}, {}, workspaceStore.auth, documentName);
67
+ const securityRequirements = getSecurityRequirements(document.security, operation.security);
68
+ const selectedSecurity = getSelectedSecurity(documentSelectedSecurity, operationSelectedSecurity, securityRequirements, securitySchemes);
69
+ /** The above selected requirements in scheme form */
70
+ const selectedSecuritySchemes = getSecuritySchemes(securitySchemes, selectedSecurity.selectedSchemes);
71
+ const serverMeta = operation.servers != null ? { type: 'operation', path: path ?? '', method: method ?? 'get' } : { type: 'document' };
72
+ const authMeta = operationSelectedSecurity !== undefined
73
+ ? { type: 'operation', path: path ?? '', method: method ?? 'get' }
74
+ : { type: 'document' };
75
+ //------------------------------------------------------------------------------------------------
76
+ // PROXY URL
77
+ //------------------------------------------------------------------------------------------------
78
+ // Get proxy url for the request example
79
+ const proxyUrl = getActiveProxyUrl(workspaceStore.workspace['x-scalar-active-proxy'], options.layout ?? 'other');
80
+ const defaultHeaders = getDefaultHeaders({
81
+ method,
82
+ operation,
83
+ exampleName,
84
+ options: { appVersion: options.appVersion ?? '0.0.0', isElectron: options.isElectron ?? false },
85
+ });
86
+ return {
87
+ ok: true,
88
+ data: {
89
+ operation,
90
+ environment,
91
+ cookies: {
92
+ workspace: workspaceStore.workspace['x-scalar-cookies'] ?? [],
93
+ document: document['x-scalar-cookies'] ?? [],
94
+ },
95
+ headers: {
96
+ default: defaultHeaders,
97
+ },
98
+ servers: {
99
+ list: serverList,
100
+ selected: selectedServer,
101
+ meta: serverMeta,
102
+ },
103
+ proxy: {
104
+ url: proxyUrl,
105
+ },
106
+ security: {
107
+ schemes: securitySchemes,
108
+ requirements: securityRequirements,
109
+ selected: selectedSecurity,
110
+ selectedSchemes: selectedSecuritySchemes,
111
+ meta: authMeta,
112
+ },
113
+ },
114
+ };
115
+ };