@scalar/oas-utils 0.3.2 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/entities/spec/collection.d.ts +6 -12
  3. package/dist/entities/spec/collection.d.ts.map +1 -1
  4. package/dist/entities/spec/collection.js +1 -1
  5. package/dist/entities/spec/collection.js.map +2 -2
  6. package/dist/helpers/http-methods.js +9 -9
  7. package/dist/helpers/http-methods.js.map +1 -1
  8. package/dist/helpers/pretty-print-json.d.ts.map +1 -1
  9. package/dist/helpers/pretty-print-json.js.map +2 -2
  10. package/dist/transforms/import-spec.d.ts +8 -3
  11. package/dist/transforms/import-spec.d.ts.map +1 -1
  12. package/dist/transforms/import-spec.js +30 -9
  13. package/dist/transforms/import-spec.js.map +2 -2
  14. package/package.json +5 -5
  15. package/dist/entities/spec/operation.test.js +0 -43
  16. package/dist/entities/spec/operation.test.js.map +0 -7
  17. package/dist/entities/spec/parameters.test.js +0 -80
  18. package/dist/entities/spec/parameters.test.js.map +0 -7
  19. package/dist/entities/spec/request-example.test.js +0 -633
  20. package/dist/entities/spec/request-example.test.js.map +0 -7
  21. package/dist/entities/spec/server.test.js +0 -120
  22. package/dist/entities/spec/server.test.js.map +0 -7
  23. package/dist/entities/spec/spec-objects.test.js +0 -205
  24. package/dist/entities/spec/spec-objects.test.js.map +0 -7
  25. package/dist/entities/spec/x-scalar-environments.test.js +0 -11
  26. package/dist/entities/spec/x-scalar-environments.test.js.map +0 -7
  27. package/dist/entities/spec/x-scalar-secrets.test.js +0 -11
  28. package/dist/entities/spec/x-scalar-secrets.test.js.map +0 -7
  29. package/dist/helpers/ensure-protocol.test.js +0 -70
  30. package/dist/helpers/ensure-protocol.test.js.map +0 -7
  31. package/dist/helpers/fetch-document.test.js +0 -63
  32. package/dist/helpers/fetch-document.test.js.map +0 -7
  33. package/dist/helpers/find-variables.test.js +0 -20
  34. package/dist/helpers/find-variables.test.js.map +0 -7
  35. package/dist/helpers/is-defined.test.js +0 -37
  36. package/dist/helpers/is-defined.test.js.map +0 -7
  37. package/dist/helpers/is-local-url.test.js +0 -40
  38. package/dist/helpers/is-local-url.test.js.map +0 -7
  39. package/dist/helpers/is-valid-url.test.js +0 -17
  40. package/dist/helpers/is-valid-url.test.js.map +0 -7
  41. package/dist/helpers/json2xml.test.js +0 -19
  42. package/dist/helpers/json2xml.test.js.map +0 -7
  43. package/dist/helpers/make-url-absolute.test.js +0 -61
  44. package/dist/helpers/make-url-absolute.test.js.map +0 -7
  45. package/dist/helpers/merge-urls.test.js +0 -339
  46. package/dist/helpers/merge-urls.test.js.map +0 -7
  47. package/dist/helpers/normalize-mime-type-object.test.js +0 -53
  48. package/dist/helpers/normalize-mime-type-object.test.js.map +0 -7
  49. package/dist/helpers/normalize-mime-type.test.js +0 -33
  50. package/dist/helpers/normalize-mime-type.test.js.map +0 -7
  51. package/dist/helpers/omit-undefined-values.test.js +0 -89
  52. package/dist/helpers/omit-undefined-values.test.js.map +0 -7
  53. package/dist/helpers/parse.test.js +0 -45
  54. package/dist/helpers/parse.test.js.map +0 -7
  55. package/dist/helpers/pretty-print-json.test.js +0 -28
  56. package/dist/helpers/pretty-print-json.test.js.map +0 -7
  57. package/dist/helpers/redirect-to-proxy.test.js +0 -54
  58. package/dist/helpers/redirect-to-proxy.test.js.map +0 -7
  59. package/dist/helpers/regex-helpers.test.js +0 -154
  60. package/dist/helpers/regex-helpers.test.js.map +0 -7
  61. package/dist/helpers/replace-variables.test.js +0 -30
  62. package/dist/helpers/replace-variables.test.js.map +0 -7
  63. package/dist/helpers/security/get-schemes.test.js +0 -71
  64. package/dist/helpers/security/get-schemes.test.js.map +0 -7
  65. package/dist/helpers/security/has-token.test.js +0 -157
  66. package/dist/helpers/security/has-token.test.js.map +0 -7
  67. package/dist/migrations/semver.test.js +0 -21
  68. package/dist/migrations/semver.test.js.map +0 -7
  69. package/dist/migrations/v-2.4.0/migration.test.js +0 -90
  70. package/dist/migrations/v-2.4.0/migration.test.js.map +0 -7
  71. package/dist/migrations/v-2.5.0/migration.test.js +0 -108
  72. package/dist/migrations/v-2.5.0/migration.test.js.map +0 -7
  73. package/dist/spec-getters/get-example-from-schema.test.js +0 -1092
  74. package/dist/spec-getters/get-example-from-schema.test.js.map +0 -7
  75. package/dist/spec-getters/get-parameters-from-operation.test.js +0 -178
  76. package/dist/spec-getters/get-parameters-from-operation.test.js.map +0 -7
  77. package/dist/spec-getters/get-request-body-from-operation.test.js +0 -289
  78. package/dist/spec-getters/get-request-body-from-operation.test.js.map +0 -7
  79. package/dist/transforms/import-spec.test.js +0 -1124
  80. package/dist/transforms/import-spec.test.js.map +0 -7
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/transforms/import-spec.test.ts"],
4
- "sourcesContent": ["/** @vitest-environment jsdom */\nimport { describe, expect, it, vi } from 'vitest'\n\nimport type { SecurityScheme, SecuritySchemeOauth2 } from '@scalar/types/entities'\nimport circular from '@test/fixtures/basic-circular-spec.json' assert { type: 'json' }\nimport modifiedPetStoreExample from '@test/fixtures/petstore-tls.json' assert { type: 'json' }\nimport galaxy from '../../../galaxy/dist/latest.json' assert { type: 'json' }\nimport { getSelectedSecuritySchemeUids, importSpecToWorkspace, parseSchema } from './import-spec'\n\ndescribe('getSelectedSecuritySchemeUids', () => {\n const securitySchemeMap = {\n 'basic-auth': 'basic-uid' as SecurityScheme['uid'],\n 'api-key': 'apikey-uid' as SecurityScheme['uid'],\n 'oauth2': 'oauth-uid' as SecurityScheme['uid'],\n }\n\n it('should return first security requirement when no preferred scheme is provided', () => {\n const securityRequirements = ['basic-auth', 'api-key']\n const result = getSelectedSecuritySchemeUids(securityRequirements, undefined, securitySchemeMap)\n expect(result).toEqual(['basic-uid'])\n })\n\n it('should use preferred security scheme when available and valid', () => {\n const securityRequirements = ['basic-auth', 'api-key']\n const result = getSelectedSecuritySchemeUids(securityRequirements, ['api-key'], securitySchemeMap)\n expect(result).toEqual(['apikey-uid'])\n })\n\n it('preferred security scheme should override when not in requirements', () => {\n const securityRequirements = ['basic-auth', 'api-key']\n const result = getSelectedSecuritySchemeUids(securityRequirements, ['oauth2'], securitySchemeMap)\n expect(result).toEqual(['oauth-uid'])\n })\n\n it('should set the preferred security scheme when no requirements are provided', () => {\n const result = getSelectedSecuritySchemeUids([], ['basic-auth'], securitySchemeMap)\n expect(result).toEqual(['basic-uid'])\n })\n\n it('should select multiple security schemes when preferred scheme is an array', () => {\n const securityRequirements = ['basic-auth', 'api-key']\n const result = getSelectedSecuritySchemeUids(securityRequirements, ['basic-auth', 'api-key'], securitySchemeMap)\n expect(result).toEqual(['basic-uid', 'apikey-uid'])\n })\n\n it('should select multiple security schemes when preferred scheme is an array including complex', () => {\n const securityRequirements = ['basic-auth', 'api-key', ['basic-auth', 'api-key', 'oauth2']]\n const result = getSelectedSecuritySchemeUids(\n securityRequirements,\n [['basic-auth', 'api-key', 'oauth2'], 'api-key'],\n securitySchemeMap,\n )\n expect(result).toEqual([['basic-uid', 'apikey-uid', 'oauth-uid'], 'apikey-uid'])\n })\n\n it('should handle array-type security requirements', () => {\n const securityRequirements = [['basic-auth', 'api-key']]\n const result = getSelectedSecuritySchemeUids(securityRequirements, undefined, securitySchemeMap)\n expect(result).toEqual([['basic-uid', 'apikey-uid']])\n })\n\n it('should handle empty security requirements', () => {\n const securityRequirements: string[] = []\n const result = getSelectedSecuritySchemeUids(securityRequirements, undefined, securitySchemeMap)\n expect(result).toEqual([])\n })\n\n it('should handle undefined preferred scheme', () => {\n const securityRequirements = ['basic-auth']\n const result = getSelectedSecuritySchemeUids(securityRequirements, undefined, securitySchemeMap)\n expect(result).toEqual(['basic-uid'])\n })\n})\n\ndescribe('importSpecToWorkspace', () => {\n // Little helper\n const findSchemeUidByKey = (key: string, securitySchemes: SecurityScheme[]) =>\n securitySchemes.find((s) => s.nameKey === key)?.uid\n\n describe('basics', () => {\n it('handles circular references', async () => {\n const res = await importSpecToWorkspace(circular)\n\n // console.log(JSON.stringify(res, null, 2))\n if (res.error) {\n return\n }\n\n expect(res.requests[0]?.path).toEqual('/api/v1/updateEmployee')\n expect(res.tags[0]?.children.includes(res.tags[1]!.uid)).toEqual(true)\n expect(res.tags[0]?.children.includes(Object.values(res.requests)[0]!.uid)).toEqual(true)\n })\n\n it('handles a weird Petstore example', async () => {\n const res = await importSpecToWorkspace(modifiedPetStoreExample)\n\n expect(res.error).toBe(false)\n })\n\n it('loads the Scalar Galaxy example (with cyclic dependencies)', async () => {\n const res = await importSpecToWorkspace(galaxy)\n\n expect(res.error).toEqual(false)\n })\n\n it('merges path and operation parameters', async () => {\n const specWithParams = {\n ...galaxy,\n paths: {\n '/test/{id}': {\n parameters: [{ name: 'id', in: 'path', required: true }],\n get: {\n parameters: [{ name: 'filter', in: 'query' }],\n },\n },\n },\n }\n\n const res = await importSpecToWorkspace(specWithParams)\n if (res.error) {\n throw res.error\n }\n\n const request = res.requests[0]\n expect(request!.parameters).toHaveLength(2)\n expect(request!.parameters?.map((p) => p.name)).toContain('id')\n expect(request!.parameters?.map((p) => p.name)).toContain('filter')\n })\n\n it('handles requests in the order defined in the OpenAPI document', async () => {\n const res = await importSpecToWorkspace(galaxy)\n if (res.error) {\n throw res.error\n }\n\n expect(res.requests.map((r) => r.operationId)).toEqual([\n 'getAllData',\n 'createPlanet',\n 'getPlanet',\n 'updatePlanet',\n 'deletePlanet',\n 'uploadImage',\n 'createUser',\n 'getToken',\n 'getMe',\n ])\n })\n })\n\n describe('info', () => {\n it('handles missing info object', async () => {\n const result = await importSpecToWorkspace({\n openapi: '3.1.0',\n // Missing info object\n })\n\n expect(result.error).toBe(false)\n expect(result.collection?.info).toEqual({\n title: 'API',\n version: '1.0',\n })\n })\n\n it('handles wrong format for info.title', async () => {\n const result = await importSpecToWorkspace({\n openapi: '3.1.0',\n info: {\n title: 123,\n },\n })\n\n expect(result.error).toBe(false)\n expect(result.collection?.info).toEqual({\n title: 'API',\n version: '1.0',\n })\n })\n\n it('handles wrong format for info.version', async () => {\n const result = await importSpecToWorkspace({\n openapi: '3.1.0',\n info: {\n title: 'My API',\n version: 123,\n },\n })\n\n expect(result.error).toBe(false)\n expect(result.collection?.info).toEqual({\n title: 'My API',\n version: '1.0',\n })\n })\n\n describe('contact', () => {\n it('leaves invalid email in contact object as is', async () => {\n const result = await importSpecToWorkspace({\n openapi: '3.1.0',\n info: {\n contact: {\n name: 'John Doe',\n url: 'not-actually-an-url',\n email: 'invalid @ email.com',\n },\n },\n })\n\n expect(result.error).toBe(false)\n expect(result.collection?.info?.contact).toEqual({\n name: 'John Doe',\n email: 'invalid @ email.com',\n })\n })\n })\n\n it(\"throws away the contact if it's not even strings\", async () => {\n const result = await importSpecToWorkspace({\n openapi: '3.1.0',\n info: {\n contact: {\n name: 123,\n },\n },\n })\n\n expect(result.collection?.info?.contact).toEqual(undefined)\n })\n\n it('deals with incomeplete contact object', async () => {\n const result = await importSpecToWorkspace({\n openapi: '3.1.0',\n info: {\n contact: {\n name: 'John Doe',\n },\n },\n })\n\n expect(result.collection?.info?.contact).toEqual({\n name: 'John Doe',\n })\n })\n\n it('ignores additional properties in the contact object', async () => {\n const result = await importSpecToWorkspace({\n openapi: '3.1.0',\n info: {\n contact: {\n name: 'John Doe',\n extra: 'extra',\n },\n },\n })\n\n expect(result.collection?.info?.contact).toEqual({\n name: 'John Doe',\n })\n })\n })\n\n describe('tags', () => {\n it('creates missing tag definitions', async () => {\n const specWithUndefinedTags = {\n ...galaxy,\n tags: [],\n paths: {\n '/test': {\n get: {\n tags: ['undefined-tag'],\n },\n },\n },\n }\n\n const res = await importSpecToWorkspace(specWithUndefinedTags)\n if (res.error) {\n throw res.error\n }\n\n expect(res.tags.some((t) => t.name === 'undefined-tag')).toBe(true)\n })\n\n it('handles requests without tags', async () => {\n const specWithUntaggedRequest = {\n ...galaxy,\n paths: {\n '/test': {\n get: {\n // No tags specified\n operationId: 'untaggedRequest',\n },\n },\n },\n }\n\n const res = await importSpecToWorkspace(specWithUntaggedRequest)\n if (res.error) {\n throw res.error\n }\n\n // The untagged request should be in the collection's root children\n expect(res.collection.children).toContain(res.requests[0]!.uid)\n })\n })\n\n describe('security', () => {\n const testSchemes = [\n {\n bearerFormat: 'JWT',\n description: 'JWT Bearer token authentication',\n nameKey: 'bearerAuth',\n password: '',\n scheme: 'bearer',\n token: '',\n type: 'http',\n username: '',\n },\n {\n bearerFormat: 'JWT',\n description: 'Basic HTTP authentication',\n nameKey: 'basicAuth',\n password: '',\n scheme: 'basic',\n token: '',\n type: 'http',\n username: '',\n },\n {\n description: 'API key request header',\n in: 'header',\n name: 'X-API-Key',\n nameKey: 'apiKeyHeader',\n type: 'apiKey',\n value: '',\n },\n {\n description: 'API key query parameter',\n in: 'query',\n name: 'api_key',\n nameKey: 'apiKeyQuery',\n type: 'apiKey',\n value: '',\n },\n {\n description: 'API key browser cookie',\n in: 'cookie',\n name: 'api_key',\n nameKey: 'apiKeyCookie',\n type: 'apiKey',\n value: '',\n },\n {\n description: 'OAuth 2.0 authentication',\n nameKey: 'oAuth2',\n type: 'oauth2',\n flows: {\n authorizationCode: {\n 'authorizationUrl': 'https://galaxy.scalar.com/oauth/authorize',\n 'clientSecret': '',\n 'refreshUrl': '',\n 'scopes': {\n 'read:account': 'read your account information',\n 'read:planets': 'read your planets',\n 'write:planets': 'modify planets in your account',\n },\n 'selectedScopes': [] as string[],\n 'token': '',\n 'tokenUrl': 'https://galaxy.scalar.com/oauth/token',\n 'type': 'authorizationCode',\n 'x-scalar-redirect-uri': 'http://localhost:3000/',\n 'x-usePkce': 'no',\n 'x-scalar-client-id': '',\n },\n\n clientCredentials: {\n 'clientSecret': '',\n 'refreshUrl': '',\n 'scopes': {\n 'read:account': 'read your account information',\n 'read:planets': 'read your planets',\n 'write:planets': 'modify planets in your account',\n },\n 'selectedScopes': [] as string[],\n 'token': '',\n 'tokenUrl': 'https://galaxy.scalar.com/oauth/token',\n 'type': 'clientCredentials',\n 'x-scalar-client-id': '',\n },\n implicit: {\n 'authorizationUrl': 'https://galaxy.scalar.com/oauth/authorize',\n 'refreshUrl': '',\n 'scopes': {\n 'read:account': 'read your account information',\n 'read:planets': 'read your planets',\n 'write:planets': 'modify planets in your account',\n },\n 'selectedScopes': [] as string[],\n 'token': '',\n 'type': 'implicit',\n 'x-scalar-client-id': '',\n 'x-scalar-redirect-uri': 'http://localhost:3000/',\n },\n password: {\n 'clientSecret': '',\n 'password': '',\n 'refreshUrl': '',\n 'scopes': {\n 'read:account': 'read your account information',\n 'read:planets': 'read your planets',\n 'write:planets': 'modify planets in your account',\n },\n 'selectedScopes': [] as string[],\n 'token': '',\n 'tokenUrl': 'https://galaxy.scalar.com/oauth/token',\n 'type': 'password',\n 'username': '',\n 'x-scalar-client-id': '',\n },\n },\n },\n {\n description: 'OpenID Connect Authentication',\n nameKey: 'openIdConnect',\n openIdConnectUrl: 'https://galaxy.scalar.com/.well-known/openid-configuration',\n type: 'openIdConnect',\n },\n ]\n\n it('handles vanilla security schemes', async () => {\n const res = await importSpecToWorkspace(galaxy)\n if (res.error) {\n throw res.error\n }\n\n expect(res.securitySchemes.map(({ uid, ...rest }) => rest)).toEqual(testSchemes)\n })\n\n it('supports the x-defaultClientId extension', async () => {\n const clonedGalaxy: any = structuredClone(galaxy)\n clonedGalaxy.components.securitySchemes.oAuth2.flows.authorizationCode['x-defaultClientId'] =\n 'test-default-client-id'\n\n const res = await importSpecToWorkspace(clonedGalaxy)\n if (res.error) {\n throw res.error\n }\n\n const authScheme = res.securitySchemes[5] as SecuritySchemeOauth2\n expect(authScheme.flows.authorizationCode?.['x-scalar-client-id']).toEqual('test-default-client-id')\n })\n\n it('prefills from the new authentication config', async () => {\n const res = await importSpecToWorkspace(galaxy, {\n authentication: {\n preferredSecurityScheme: 'apiKeyHeader',\n securitySchemes: {\n apiKeyHeader: {\n value: 'tokenHeader',\n },\n apiKeyQuery: {\n value: 'tokenQuery',\n },\n apiKeyCookie: {\n value: 'tokenCookie',\n },\n bearerAuth: {\n token: 'xyz token value',\n },\n basicAuth: {\n username: 'username',\n password: 'password',\n },\n oAuth2: {\n flows: {\n authorizationCode: {\n token: 'auth code token',\n },\n clientCredentials: {\n token: 'client credentials token',\n },\n implicit: {\n token: 'implicit token',\n },\n password: {\n username: 'user',\n password: 'pass',\n token: 'user pass token',\n },\n },\n },\n },\n },\n useCollectionSecurity: true,\n })\n if (res.error) {\n throw res.error\n }\n\n // test if the values were filled\n const clonedSchemes = structuredClone(testSchemes)\n\n clonedSchemes[0]!.token = 'xyz token value'\n clonedSchemes[1]!.username = 'username'\n clonedSchemes[1]!.password = 'password'\n clonedSchemes[2]!.value = 'tokenHeader'\n clonedSchemes[3]!.value = 'tokenQuery'\n clonedSchemes[4]!.value = 'tokenCookie'\n\n const flows = clonedSchemes[5]!.flows!\n flows.authorizationCode.token = 'auth code token'\n flows.password.token = 'user pass token'\n flows.password.username = 'user'\n flows.password.password = 'pass'\n flows.clientCredentials.token = 'client credentials token'\n flows.implicit.token = 'implicit token'\n\n const apiKey = res.securitySchemes.find(({ nameKey }) => nameKey === 'apiKeyHeader')\n\n expect(res.securitySchemes.map(({ uid, ...rest }) => rest)).toEqual(clonedSchemes)\n expect(res.collection.selectedSecuritySchemeUids).toEqual([apiKey!.uid])\n })\n\n it('prefills from the deprecated authentication property', async () => {\n const res = await importSpecToWorkspace(galaxy, {\n authentication: {\n apiKey: {\n token: 'test-api-key',\n },\n preferredSecurityScheme: 'apiKeyHeader',\n http: {\n basic: {\n username: 'test-username',\n password: 'test-password',\n },\n bearer: {\n token: 'test-bearer-token',\n },\n },\n oAuth2: {\n clientId: 'test-client-id',\n scopes: ['read:account', 'read:planets'],\n accessToken: 'test-access-token',\n state: 'test-state',\n username: 'test-username',\n password: 'test-password',\n },\n },\n useCollectionSecurity: true,\n } as any)\n if (res.error) {\n throw res.error\n }\n\n // test if the values were filled\n const clonedSchemes = structuredClone(testSchemes)\n clonedSchemes[0]!.token = 'test-bearer-token'\n clonedSchemes[1]!.username = 'test-username'\n clonedSchemes[1]!.password = 'test-password'\n clonedSchemes[2]!.value = 'test-api-key'\n clonedSchemes[3]!.value = 'test-api-key'\n clonedSchemes[4]!.value = 'test-api-key'\n\n const flows = clonedSchemes[5]!.flows!\n flows.authorizationCode['x-scalar-client-id'] = 'test-client-id'\n flows.authorizationCode.token = 'test-access-token'\n flows.authorizationCode.selectedScopes = ['read:account', 'read:planets']\n flows.clientCredentials['x-scalar-client-id'] = 'test-client-id'\n flows.clientCredentials.token = 'test-access-token'\n flows.clientCredentials.selectedScopes = ['read:account', 'read:planets']\n flows.implicit['x-scalar-client-id'] = 'test-client-id'\n flows.implicit.token = 'test-access-token'\n flows.implicit.selectedScopes = ['read:account', 'read:planets']\n flows.password['x-scalar-client-id'] = 'test-client-id'\n flows.password.token = 'test-access-token'\n flows.password.selectedScopes = ['read:account', 'read:planets']\n flows.password.username = 'test-username'\n flows.password.password = 'test-password'\n\n const apiKey = res.securitySchemes.find(({ nameKey }) => nameKey === 'apiKeyHeader')\n\n expect(res.securitySchemes.map(({ uid, ...rest }) => rest)).toEqual(clonedSchemes)\n expect(res.collection.selectedSecuritySchemeUids).toEqual([apiKey!.uid])\n })\n\n it('converts scope arrays to objects', async () => {\n const clonedGalaxy: any = structuredClone(galaxy)\n clonedGalaxy.components.securitySchemes.oAuth2.flows.authorizationCode.scopes = ['read:account', 'read:planets']\n\n const res = await importSpecToWorkspace(clonedGalaxy)\n if (res.error) {\n throw res.error\n }\n\n expect((res.securitySchemes[5] as SecuritySchemeOauth2).flows!.authorizationCode!.scopes).toEqual({\n 'read:account': '',\n 'read:planets': '',\n })\n })\n\n it('handles empty security requirements', async () => {\n const specWithEmptySecurity = {\n ...galaxy,\n security: [{}],\n paths: {\n '/test': {\n get: {\n security: [{}],\n },\n },\n },\n }\n\n const res = await importSpecToWorkspace(specWithEmptySecurity)\n if (res.error) {\n throw res.error\n }\n\n expect(res.requests[0]!.security).toEqual([{}])\n })\n\n it('handles empty security requirements with preferred security scheme', async () => {\n const specWithEmptySecurity = {\n ...galaxy,\n security: [{}],\n paths: {\n '/test': {\n get: {\n security: [{}],\n },\n },\n },\n }\n\n const res = await importSpecToWorkspace(specWithEmptySecurity, {\n useCollectionSecurity: true,\n authentication: {\n preferredSecurityScheme: 'basicAuth',\n },\n })\n if (res.error) {\n throw res.error\n }\n\n const scheme = res.securitySchemes.find((s) => s.nameKey === 'basicAuth')\n expect(res.collection.selectedSecuritySchemeUids).toEqual([scheme?.uid])\n })\n\n it('handles empty operation security requirements', async () => {\n const res = await importSpecToWorkspace({\n ...galaxy,\n paths: {\n '/test': {\n get: { security: [] },\n },\n },\n })\n\n if (res.error) {\n throw res.error\n }\n expect(res.requests[0]!.security).toEqual([])\n })\n\n it('imports path-level parameters', async () => {\n const example = {\n paths: {\n '/foobar': {\n get: {\n // operation-level parameter\n parameters: [{ name: 'bar', in: 'path' }],\n },\n // path-level parameter\n parameters: [{ name: 'foo', in: 'path' }],\n },\n },\n }\n\n const res = await importSpecToWorkspace(example)\n\n if (res.error) {\n throw res.error\n }\n\n expect(res.requests[0]!.parameters).toMatchObject([\n { name: 'foo', in: 'path' },\n { name: 'bar', in: 'path' },\n ])\n })\n\n it('prefers operation level security over global security', async () => {\n const specWithGlobalAndOperationSecurity = {\n ...galaxy,\n security: [{ bearerAuth: [] }],\n paths: {\n '/test': {\n get: {\n security: [{ basicAuth: [] }],\n },\n },\n },\n }\n\n const res = await importSpecToWorkspace(specWithGlobalAndOperationSecurity)\n if (res.error) {\n throw res.error\n }\n\n // Operation level security should override global security\n expect(res.requests[0]!.security).toEqual([{ basicAuth: [] }])\n })\n\n it('sets collection level security when specified', async () => {\n const res = await importSpecToWorkspace(galaxy, {\n useCollectionSecurity: true,\n authentication: {\n preferredSecurityScheme: 'basicAuth',\n },\n })\n if (res.error) {\n throw res.error\n }\n\n expect(res.collection.selectedSecuritySchemeUids).toHaveLength(1)\n const scheme = res.securitySchemes.find((s) => s.uid === res.collection.selectedSecuritySchemeUids[0])\n expect(scheme?.nameKey).toBe('basicAuth')\n })\n\n it('handles oauth2 authentication configuration', async () => {\n const res = await importSpecToWorkspace(galaxy, {\n authentication: {\n oAuth2: {\n clientId: 'test-client',\n scopes: ['read:account'],\n },\n },\n } as any)\n if (res.error) {\n throw res.error\n }\n\n const flow = res.securitySchemes.find((s) => s.type === 'oauth2')?.flows.authorizationCode\n expect(flow?.['x-scalar-client-id']).toBe('test-client')\n expect(flow?.selectedScopes).toEqual(['read:account'])\n })\n\n it('handles an optional security scheme and sets selected security accordingly', async () => {\n const specWithAndSecurity = {\n ...galaxy,\n paths: {\n '/test': {\n get: {\n security: [{}],\n operationId: 'testOperation',\n },\n },\n },\n }\n\n const res = await importSpecToWorkspace(specWithAndSecurity)\n if (res.error) {\n throw res.error\n }\n expect(res.requests[0]!.selectedSecuritySchemeUids).toEqual([])\n })\n\n it('sets the correct selectedSecuritySchemeUids when theres no collection security requirement', async () => {\n const { security, ...noSecurity } = galaxy\n const res = await importSpecToWorkspace(noSecurity, {\n useCollectionSecurity: true,\n })\n if (res.error) {\n throw res.error\n }\n\n expect(res.collection.selectedSecuritySchemeUids).toEqual([])\n })\n })\n\n describe('complex security', () => {\n it('handles AND security requirements', async () => {\n const specWithAndSecurity = {\n ...galaxy,\n security: [{ apiKeyHeader: [], basicAuth: [] }],\n paths: {\n '/test': {\n get: {\n operationId: 'testOperation',\n },\n },\n },\n }\n\n const res = await importSpecToWorkspace(specWithAndSecurity)\n if (res.error) {\n throw res.error\n }\n\n const selectedSecuritySchemeUids = [\n [findSchemeUidByKey('apiKeyHeader', res.securitySchemes), findSchemeUidByKey('basicAuth', res.securitySchemes)],\n ]\n expect(res.requests[0]!.selectedSecuritySchemeUids).toEqual(selectedSecuritySchemeUids)\n })\n\n it('handles AND security requirements with useCollectionSecurity', async () => {\n const specWithAndSecurity = {\n ...galaxy,\n security: [{ apiKeyHeader: [], basicAuth: [] }, { bearerAuth: [] }],\n paths: {\n '/test': {\n get: {\n operationId: 'testOperation',\n },\n },\n },\n }\n\n const res = await importSpecToWorkspace(specWithAndSecurity, {\n useCollectionSecurity: true,\n })\n if (res.error) {\n throw res.error\n }\n\n const selectedSecuritySchemeUids = [\n [findSchemeUidByKey('apiKeyHeader', res.securitySchemes), findSchemeUidByKey('basicAuth', res.securitySchemes)],\n ]\n\n expect(res.collection.selectedSecuritySchemeUids).toEqual(selectedSecuritySchemeUids)\n })\n\n it('selects the first required scheme as selected', async () => {\n const specWithOrSecurity = {\n ...galaxy,\n security: [{ apiKeyHeader: [] }, { basicAuth: [] }], // Either one\n paths: {\n '/test': {\n get: {\n operationId: 'testOperation',\n },\n },\n },\n }\n\n const res = await importSpecToWorkspace(specWithOrSecurity)\n if (res.error) {\n throw res.error\n }\n\n // Check that the request inherits both options\n expect(res.requests[0]!.selectedSecuritySchemeUids).toEqual([\n findSchemeUidByKey('apiKeyHeader', res.securitySchemes),\n ])\n })\n\n it('handles empty security requirement in combination', async () => {\n const specWithOptionalAndRequired = {\n ...galaxy,\n security: [\n { apiKeyHeader: [] },\n {}, // Optional - no auth required\n ],\n paths: {\n '/test': {\n get: {\n operationId: 'testOperation',\n },\n },\n },\n }\n\n const res = await importSpecToWorkspace(specWithOptionalAndRequired)\n if (res.error) {\n throw res.error\n }\n\n // Check that both the security requirement and the optional empty object are preserved\n expect(res.requests[0]!.selectedSecuritySchemeUids).toEqual([\n findSchemeUidByKey('apiKeyHeader', res.securitySchemes),\n ])\n })\n })\n\n describe('servers', () => {\n it('handles servers with different formats', async () => {\n const originalLocation = typeof window !== 'undefined' ? window.location : { origin: undefined }\n vi.stubGlobal('window', {\n location: {\n origin: 'http://localhost:3000',\n },\n })\n\n const result = await importSpecToWorkspace({\n servers: [\n { url: 'https://api.example.com' }, // Absolute URL\n { url: '/v2/api' }, // Relative path\n {\n url: '{scheme}://{environment}.api.example.com', // URL with variables\n variables: {\n scheme: {\n default: 'https',\n enum: ['http', 'https'],\n },\n environment: {\n default: 'prod',\n enum: ['dev', 'staging', 'prod'],\n },\n },\n },\n ],\n })\n\n if (result.error) {\n throw result.error\n }\n\n expect(result.servers).toMatchObject([\n { url: 'https://api.example.com' },\n { url: 'http://localhost:3000/v2/api' },\n {\n url: '{scheme}://{environment}.api.example.com',\n variables: {\n scheme: {\n default: 'https',\n enum: ['http', 'https'],\n },\n environment: {\n default: 'prod',\n enum: ['dev', 'staging', 'prod'],\n },\n },\n },\n ])\n\n // Restore the original window.location\n vi.stubGlobal('location', originalLocation)\n })\n\n it('returns both collection and operation servers when present', async () => {\n const result = await importSpecToWorkspace({\n servers: [{ url: 'https://collection-server.com' }],\n paths: {\n '/test': {\n get: {\n servers: [{ url: 'https://operation-server.com' }],\n },\n },\n },\n })\n\n if (result.error) {\n throw result.error\n }\n\n expect(result.servers).toHaveLength(2)\n expect(result.servers.map((s) => s.url)).toContain('https://collection-server.com')\n expect(result.servers.map((s) => s.url)).toContain('https://operation-server.com')\n })\n })\n})\n\ndescribe('parseSchema', () => {\n it('handles valid OpenAPI spec', async () => {\n const input = {\n openapi: '3.1.0',\n info: {\n title: 'Test API',\n version: '1.0.0',\n },\n paths: {\n '/test': {\n get: {\n operationId: 'getTest',\n responses: {\n '200': {\n description: 'Success',\n },\n },\n },\n },\n },\n }\n\n const { schema, errors } = await parseSchema(input)\n\n expect(errors).toHaveLength(0)\n expect(schema).toMatchObject({\n openapi: '3.1.0',\n info: {\n title: 'Test API',\n version: '1.0.0',\n },\n paths: {\n '/test': {\n get: {\n operationId: 'getTest',\n },\n },\n },\n })\n })\n\n it('handles internal references', async () => {\n const input = {\n openapi: '3.1.0',\n info: {\n title: 'Test API',\n version: '1.0.0',\n },\n components: {\n schemas: {\n Foobar: {\n type: 'object',\n properties: {\n name: { type: 'string' },\n },\n },\n },\n },\n paths: {\n '/foobar': {\n get: {\n responses: {\n '200': {\n description: 'Success',\n content: {\n 'application/json': {\n schema: {\n $ref: '#/components/schemas/Foobar',\n },\n },\n },\n },\n },\n },\n },\n },\n }\n\n const { schema, errors } = await parseSchema(input)\n\n expect(errors).toHaveLength(0)\n expect(schema.components?.schemas?.Foobar).toMatchObject({\n type: 'object',\n properties: {\n name: { type: 'string' },\n },\n })\n expect(schema.paths?.['/foobar']?.get?.responses?.['200']?.content?.['application/json']?.schema).toMatchObject({\n type: 'object',\n properties: {\n name: { type: 'string' },\n },\n })\n })\n\n it('handles invalid JSON', async () => {\n const { errors } = await parseSchema('\"invalid')\n\n expect(errors).toMatchObject([{ code: 'MISSING_CHAR' }])\n expect(errors).toHaveLength(1)\n })\n\n it('handles invalid YAML', async () => {\n const { errors } = await parseSchema(`\n\n openapi: 3.1.0\n asd\n `)\n\n expect(errors).toMatchObject([{ code: 'MISSING_CHAR' }])\n expect(errors).toHaveLength(1)\n })\n})\n\ndescribe('getServersFromOpenApiDocument', () => {\n it('parses a simple server', async () => {\n const result = await importSpecToWorkspace({\n servers: [{ url: 'https://example.com' }],\n })\n\n if (result.error) {\n throw result.error\n }\n\n expect(result.servers).toMatchObject([{ url: 'https://example.com' }])\n })\n\n it('prefixes relative servers with window.location.origin', async () => {\n const originalLocation = typeof window !== 'undefined' ? window.location : { origin: undefined }\n vi.stubGlobal('window', {\n location: {\n origin: 'http://localhost:3000',\n },\n })\n\n const result = await importSpecToWorkspace({\n servers: [{ url: '/api/v1' }],\n })\n\n if (result.error) {\n throw result.error\n }\n\n expect(result.servers).toMatchObject([{ url: 'http://localhost:3000/api/v1' }])\n\n // Restore the original window.location\n vi.stubGlobal('location', originalLocation)\n })\n\n it('prefixes relative servers with baseServerURL when provided', async () => {\n const result = await importSpecToWorkspace(\n {\n servers: [{ url: '/api/v1' }],\n },\n {\n baseServerURL: 'https://scalar.com',\n },\n )\n\n if (result.error) {\n throw result.error\n }\n\n expect(result.servers).toMatchObject([{ url: 'https://scalar.com/api/v1' }])\n })\n\n it('handles empty server objects by using localhost when no baseServerURL', async () => {\n const result = await importSpecToWorkspace({\n servers: [{}],\n })\n\n if (result.error) {\n throw result.error\n }\n\n expect(result.servers).toMatchObject([{ url: 'http://localhost:3000' }])\n })\n\n it('handles servers with variables/templating', async () => {\n const result = await importSpecToWorkspace({\n servers: [\n {\n url: '{protocol}://api.example.com/{basePath}',\n variables: {\n protocol: {\n default: 'https',\n enum: ['http', 'https'],\n },\n basePath: {\n default: 'v1',\n },\n },\n },\n ],\n })\n\n if (result.error) {\n throw result.error\n }\n\n expect(result.servers[0]!.url).toBe('{protocol}://api.example.com/{basePath}')\n expect(result.servers[0]!.variables).toBeDefined()\n })\n\n it('handles multiple servers with mixed formats', async () => {\n const result = await importSpecToWorkspace(\n {\n servers: [{ url: 'https://prod.example.com' }, { url: '/api/v1' }, { url: '{protocol}://dev.example.com' }, {}],\n },\n {\n baseServerURL: 'https://scalar.com',\n },\n )\n\n if (result.error) {\n throw result.error\n }\n\n expect(result.servers).toMatchObject([\n { url: 'https://prod.example.com' },\n { url: 'https://scalar.com/api/v1' },\n { url: '{protocol}://dev.example.com' },\n ])\n })\n\n it('handles trailing slashes in baseServerURL', async () => {\n const result = await importSpecToWorkspace(\n {\n servers: [{ url: '/api/v1' }],\n },\n {\n baseServerURL: 'https://scalar.com/',\n },\n )\n\n if (result.error) {\n throw result.error\n }\n\n expect(result.servers).toMatchObject([{ url: 'https://scalar.com/api/v1' }])\n })\n\n it('handles leading slashes in server url', async () => {\n const result = await importSpecToWorkspace(\n {\n servers: [{ url: '//api/v1' }],\n },\n {\n baseServerURL: 'https://scalar.com',\n },\n )\n\n if (result.error) {\n throw result.error\n }\n\n expect(result.servers).toMatchObject([{ url: 'https://scalar.com/api/v1' }])\n })\n\n it('returns an empty array for undefined servers', async () => {\n const result = await importSpecToWorkspace({})\n\n if (result.error) {\n throw result.error\n }\n\n expect(result.servers).toMatchObject([{ url: 'http://localhost:3000' }])\n })\n\n it('returns an empty array when something is invalid', async () => {\n const result = await importSpecToWorkspace({\n servers: [{ url: false }],\n })\n\n if (result.error) {\n throw result.error\n }\n\n expect(result.servers).toMatchObject([{ url: 'http://localhost:3000' }])\n })\n\n it('works without window.location', async () => {\n // Mock window.location for SSR/SSG environments\n const originalLocation = typeof window !== 'undefined' ? window.location : { origin: undefined }\n vi.stubGlobal('window', undefined)\n\n const result = await importSpecToWorkspace({\n servers: [{ url: '/api/v1' }],\n })\n\n if (result.error) {\n throw result.error\n }\n\n expect(result.servers).toMatchObject([{ url: '/api/v1' }])\n\n // Restore the original window.location\n vi.stubGlobal('location', originalLocation)\n })\n\n it('uses current window.location.origin servers is empty', async () => {\n const originalLocation = typeof window !== 'undefined' ? window.location : { origin: undefined }\n vi.stubGlobal('window', {\n location: {\n origin: 'http://localhost:3000',\n },\n })\n\n const result = await importSpecToWorkspace({\n servers: [],\n })\n\n if (result.error) {\n throw result.error\n }\n\n expect(result.servers).toMatchObject([{ url: 'http://localhost:3000' }])\n\n // Restore the original window.location\n vi.stubGlobal('location', originalLocation)\n })\n\n it('uses current window.location.origin when servers is undefined', async () => {\n const originalLocation = typeof window !== 'undefined' ? window.location : { origin: undefined }\n vi.stubGlobal('window', {\n location: {\n origin: 'http://localhost:3000',\n },\n })\n\n const result = await importSpecToWorkspace({})\n\n if (result.error) {\n throw result.error\n }\n\n expect(result.servers).toMatchObject([{ url: 'http://localhost:3000' }])\n\n // Restore the original window.location\n vi.stubGlobal('location', originalLocation)\n })\n})\n"],
5
- "mappings": "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",
6
- "names": []
7
- }