zudoku 0.18.8 → 0.20.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.
- package/dist/app/main.js +2 -1
- package/dist/app/main.js.map +1 -1
- package/dist/cli/common/outdated.js +2 -1
- package/dist/cli/common/outdated.js.map +1 -1
- package/dist/config/common.d.ts +8 -0
- package/dist/config/common.js +2 -0
- package/dist/config/common.js.map +1 -0
- package/dist/config/config.d.ts +3 -2
- package/dist/config/loader.d.ts +5 -0
- package/dist/config/loader.js +110 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/validators/common.d.ts +4651 -0
- package/dist/config/validators/common.js +269 -0
- package/dist/config/validators/common.js.map +1 -0
- package/dist/config/validators/validate.d.ts +669 -533
- package/dist/config/validators/validate.js +9 -234
- package/dist/config/validators/validate.js.map +1 -1
- package/dist/lib/authentication/providers/openid.js +7 -2
- package/dist/lib/authentication/providers/openid.js.map +1 -1
- package/dist/lib/components/Heading.d.ts +1 -1
- package/dist/lib/components/TopNavigation.d.ts +1 -1
- package/dist/lib/components/navigation/SidebarCategory.d.ts +1 -2
- package/dist/lib/components/navigation/SidebarCategory.js +3 -4
- package/dist/lib/components/navigation/SidebarCategory.js.map +1 -1
- package/dist/lib/components/navigation/SidebarItem.d.ts +1 -3
- package/dist/lib/components/navigation/SidebarItem.js +4 -9
- package/dist/lib/components/navigation/SidebarItem.js.map +1 -1
- package/dist/lib/components/navigation/SidebarWrapper.js +1 -1
- package/dist/lib/components/navigation/SidebarWrapper.js.map +1 -1
- package/dist/lib/core/ZudokuContext.d.ts +1 -1
- package/dist/lib/oas/graphql/index.js +0 -1
- package/dist/lib/oas/graphql/index.js.map +1 -1
- package/dist/lib/plugins/api-catalog/Catalog.d.ts +6 -0
- package/dist/lib/plugins/api-catalog/Catalog.js +29 -0
- package/dist/lib/plugins/api-catalog/Catalog.js.map +1 -0
- package/dist/lib/plugins/api-catalog/index.d.ts +23 -0
- package/dist/lib/plugins/api-catalog/index.js +15 -0
- package/dist/lib/plugins/api-catalog/index.js.map +1 -0
- package/dist/lib/plugins/markdown/index.d.ts +1 -1
- package/dist/lib/plugins/markdown/resolver.js.map +1 -1
- package/dist/lib/plugins/openapi/playground/PathParams.js +1 -1
- package/dist/lib/plugins/openapi/playground/PathParams.js.map +1 -1
- package/dist/lib/plugins/redirect/index.d.ts +1 -1
- package/dist/lib/ui/Command.d.ts +1 -1
- package/dist/lib/util/MdxComponents.d.ts +2 -3
- package/dist/lib/util/MdxComponents.js.map +1 -1
- package/dist/vite/build.js +4 -1
- package/dist/vite/build.js.map +1 -1
- package/dist/vite/config.d.ts +1 -3
- package/dist/vite/config.js +2 -4
- package/dist/vite/config.js.map +1 -1
- package/dist/vite/dev-server.js.map +1 -1
- package/dist/vite/output.d.ts +1 -1
- package/dist/vite/output.js.map +1 -1
- package/dist/vite/plugin-api.js +44 -1
- package/dist/vite/plugin-api.js.map +1 -1
- package/dist/vite/plugin-component.js +1 -0
- package/dist/vite/plugin-component.js.map +1 -1
- package/dist/vite/plugin-config-reload.d.ts +1 -2
- package/dist/vite/plugin-config-reload.js.map +1 -1
- package/dist/vite/plugin.d.ts +1 -2
- package/dist/vite/plugin.js.map +1 -1
- package/dist/vite/prerender.d.ts +2 -1
- package/dist/vite/prerender.js +2 -2
- package/dist/vite/prerender.js.map +1 -1
- package/dist/vite/sitemap.d.ts +1 -1
- package/dist/zuplo/env.d.ts +6 -0
- package/dist/zuplo/env.js +9 -0
- package/dist/zuplo/env.js.map +1 -0
- package/dist/zuplo/with-zuplo.d.ts +2 -2
- package/dist/zuplo/with-zuplo.js.map +1 -1
- package/lib/Markdown-ievDDhFT.js.map +1 -1
- package/lib/{OperationList-DzE32oyS.js → OperationList-DT5Fu9bC.js} +2 -2
- package/lib/{OperationList-DzE32oyS.js.map → OperationList-DT5Fu9bC.js.map} +1 -1
- package/lib/assets/{worker-CyxLedqF.js → worker-C_2va8B8.js} +1 -2
- package/lib/assets/{worker-CyxLedqF.js.map → worker-C_2va8B8.js.map} +1 -1
- package/lib/{createServer-DTiCfoql.js → createServer-BCAHdrpE.js} +1 -2
- package/lib/{createServer-DTiCfoql.js.map → createServer-BCAHdrpE.js.map} +1 -1
- package/lib/{index-NNCc1BSK.js → index-CBctPUfP.js} +4 -3
- package/lib/index-CBctPUfP.js.map +1 -0
- package/lib/zudoku.auth-openid.js +42 -37
- package/lib/zudoku.auth-openid.js.map +1 -1
- package/lib/zudoku.components.js +259 -271
- package/lib/zudoku.components.js.map +1 -1
- package/lib/zudoku.openapi-worker.js +1 -1
- package/lib/zudoku.plugin-api-catalog.js +121 -0
- package/lib/zudoku.plugin-api-catalog.js.map +1 -0
- package/lib/zudoku.plugin-markdown.js.map +1 -1
- package/lib/zudoku.plugin-openapi.js +1 -1
- package/lib/zudoku.plugin-redirect.js.map +1 -1
- package/package.json +6 -2
- package/src/app/main.tsx +5 -1
- package/src/lib/authentication/providers/openid.tsx +7 -2
- package/src/lib/components/TopNavigation.tsx +1 -1
- package/src/lib/components/navigation/SidebarCategory.tsx +7 -9
- package/src/lib/components/navigation/SidebarItem.tsx +3 -16
- package/src/lib/components/navigation/SidebarWrapper.tsx +1 -1
- package/src/lib/core/ZudokuContext.ts +1 -1
- package/src/lib/oas/graphql/index.ts +0 -1
- package/src/lib/plugins/api-catalog/Catalog.tsx +124 -0
- package/src/lib/plugins/api-catalog/index.tsx +50 -0
- package/src/lib/plugins/markdown/index.tsx +1 -1
- package/src/lib/plugins/markdown/resolver.ts +2 -4
- package/src/lib/plugins/openapi/playground/PathParams.tsx +1 -0
- package/src/lib/plugins/redirect/index.tsx +1 -1
- package/src/lib/util/MdxComponents.tsx +2 -5
- package/lib/index-NNCc1BSK.js.map +0 -1
|
@@ -379,7 +379,7 @@ class _t {
|
|
|
379
379
|
R(this, T);
|
|
380
380
|
R(this, O, /* @__PURE__ */ new Map());
|
|
381
381
|
R(this, N);
|
|
382
|
-
R(this, Q, () => import("./createServer-
|
|
382
|
+
R(this, Q, () => import("./createServer-BCAHdrpE.js").then((n) => n.createServer()));
|
|
383
383
|
W(this, "fetch", async (n, ...[s]) => {
|
|
384
384
|
var l;
|
|
385
385
|
const r = (l = n.match(/query (\w+)/)) == null ? void 0 : l[1];
|
|
@@ -606,6 +606,7 @@ const ne = (t) => Math.abs(
|
|
|
606
606
|
H,
|
|
607
607
|
{
|
|
608
608
|
...o,
|
|
609
|
+
required: !0,
|
|
609
610
|
placeholder: "Enter value",
|
|
610
611
|
className: "border-0 shadow-none ring-0 font-mono text-xs"
|
|
611
612
|
}
|
|
@@ -1257,7 +1258,7 @@ const ne = (t) => Math.abs(
|
|
|
1257
1258
|
{
|
|
1258
1259
|
index: !0,
|
|
1259
1260
|
async lazy() {
|
|
1260
|
-
const { OperationList: r } = await import("./OperationList-
|
|
1261
|
+
const { OperationList: r } = await import("./OperationList-DT5Fu9bC.js");
|
|
1261
1262
|
return { element: /* @__PURE__ */ e.jsx(r, {}) };
|
|
1262
1263
|
}
|
|
1263
1264
|
}
|
|
@@ -1275,4 +1276,4 @@ export {
|
|
|
1275
1276
|
ft as g,
|
|
1276
1277
|
jn as o
|
|
1277
1278
|
};
|
|
1278
|
-
//# sourceMappingURL=index-
|
|
1279
|
+
//# sourceMappingURL=index-CBctPUfP.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-CBctPUfP.js","sources":["../src/lib/plugins/openapi/graphql/graphql.ts","../src/lib/plugins/openapi/graphql/gql.ts","../../../node_modules/.pnpm/layerr@3.0.0/node_modules/layerr/dist/error.js","../../../node_modules/.pnpm/layerr@3.0.0/node_modules/layerr/dist/global.js","../../../node_modules/.pnpm/layerr@3.0.0/node_modules/layerr/dist/tools.js","../../../node_modules/.pnpm/layerr@3.0.0/node_modules/layerr/dist/layerr.js","../../../node_modules/.pnpm/ulidx@2.4.1/node_modules/ulidx/dist/browser/index.js","../src/lib/plugins/openapi/client/GraphQLClient.tsx","../src/lib/util/pastellize.ts","../src/lib/plugins/openapi/ColorizedParam.tsx","../src/lib/plugins/openapi/playground/createUrl.ts","../src/lib/plugins/openapi/playground/Headers.tsx","../src/lib/plugins/openapi/playground/PathParams.tsx","../src/lib/util/createVariantComponent.tsx","../src/lib/plugins/openapi/playground/InlineInput.tsx","../src/lib/plugins/openapi/playground/QueryParams.tsx","../src/lib/plugins/openapi/SimpleSelect.tsx","../src/lib/plugins/openapi/playground/ResponseTab.tsx","../src/lib/plugins/openapi/playground/Playground.tsx","../src/lib/plugins/openapi/playground/PlaygroundDialog.tsx","../src/lib/plugins/openapi/index.tsx"],"sourcesContent":["/* eslint-disable */\nimport type { DocumentTypeDecoration } from \"@graphql-typed-document-node/core\";\nexport type Maybe<T> = T | null;\nexport type InputMaybe<T> = Maybe<T>;\nexport type Exact<T extends { [key: string]: unknown }> = {\n [K in keyof T]: T[K];\n};\nexport type MakeOptional<T, K extends keyof T> = Omit<T, K> & {\n [SubKey in K]?: Maybe<T[SubKey]>;\n};\nexport type MakeMaybe<T, K extends keyof T> = Omit<T, K> & {\n [SubKey in K]: Maybe<T[SubKey]>;\n};\nexport type MakeEmpty<\n T extends { [key: string]: unknown },\n K extends keyof T,\n> = { [_ in K]?: never };\nexport type Incremental<T> =\n | T\n | {\n [P in keyof T]?: P extends \" $fragmentName\" | \"__typename\" ? T[P] : never;\n };\n/** All built-in and custom scalars, mapped to their actual values */\nexport type Scalars = {\n ID: { input: string; output: string };\n String: { input: string; output: string };\n Boolean: { input: boolean; output: boolean };\n Int: { input: number; output: number };\n Float: { input: number; output: number };\n /** The `JSON` scalar type represents JSON values as specified by [ECMA-404](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf). */\n JSON: { input: any; output: any };\n /** The `JSONObject` scalar type represents JSON objects as specified by [ECMA-404](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf). */\n JSONObject: { input: any; output: any };\n};\n\nexport type EncodingItem = {\n __typename?: \"EncodingItem\";\n allowReserved?: Maybe<Scalars[\"Boolean\"][\"output\"]>;\n contentType?: Maybe<Scalars[\"String\"][\"output\"]>;\n explode?: Maybe<Scalars[\"Boolean\"][\"output\"]>;\n headers?: Maybe<Scalars[\"JSONObject\"][\"output\"]>;\n name: Scalars[\"String\"][\"output\"];\n style?: Maybe<Scalars[\"String\"][\"output\"]>;\n};\n\nexport type ExampleItem = {\n __typename?: \"ExampleItem\";\n description?: Maybe<Scalars[\"String\"][\"output\"]>;\n externalValue?: Maybe<Scalars[\"String\"][\"output\"]>;\n name: Scalars[\"String\"][\"output\"];\n summary?: Maybe<Scalars[\"String\"][\"output\"]>;\n value?: Maybe<Scalars[\"JSON\"][\"output\"]>;\n};\n\nexport type MediaTypeObject = {\n __typename?: \"MediaTypeObject\";\n encoding?: Maybe<Array<EncodingItem>>;\n examples?: Maybe<Array<ExampleItem>>;\n mediaType: Scalars[\"String\"][\"output\"];\n schema?: Maybe<Scalars[\"JSON\"][\"output\"]>;\n};\n\nexport type OperationItem = {\n __typename?: \"OperationItem\";\n contentTypes: Array<Scalars[\"String\"][\"output\"]>;\n deprecated?: Maybe<Scalars[\"Boolean\"][\"output\"]>;\n description?: Maybe<Scalars[\"String\"][\"output\"]>;\n method: Scalars[\"String\"][\"output\"];\n operationId?: Maybe<Scalars[\"String\"][\"output\"]>;\n parameters?: Maybe<Array<ParameterItem>>;\n path: Scalars[\"String\"][\"output\"];\n requestBody?: Maybe<RequestBodyObject>;\n responses: Array<ResponseItem>;\n slug: Scalars[\"String\"][\"output\"];\n summary?: Maybe<Scalars[\"String\"][\"output\"]>;\n tags?: Maybe<Array<TagItem>>;\n};\n\nexport type ParameterIn = \"cookie\" | \"header\" | \"path\" | \"query\";\n\nexport type ParameterItem = {\n __typename?: \"ParameterItem\";\n allowEmptyValue?: Maybe<Scalars[\"Boolean\"][\"output\"]>;\n allowReserved?: Maybe<Scalars[\"Boolean\"][\"output\"]>;\n deprecated?: Maybe<Scalars[\"Boolean\"][\"output\"]>;\n description?: Maybe<Scalars[\"String\"][\"output\"]>;\n examples?: Maybe<Array<ExampleItem>>;\n explode?: Maybe<Scalars[\"Boolean\"][\"output\"]>;\n in: ParameterIn;\n name: Scalars[\"String\"][\"output\"];\n required?: Maybe<Scalars[\"Boolean\"][\"output\"]>;\n schema?: Maybe<Scalars[\"JSON\"][\"output\"]>;\n style?: Maybe<Scalars[\"String\"][\"output\"]>;\n};\n\nexport type PathItem = {\n __typename?: \"PathItem\";\n methods: Array<Scalars[\"String\"][\"output\"]>;\n path: Scalars[\"String\"][\"output\"];\n};\n\nexport type Query = {\n __typename?: \"Query\";\n schema: Schema;\n};\n\nexport type QuerySchemaArgs = {\n input: Scalars[\"JSON\"][\"input\"];\n type: SchemaType;\n};\n\nexport type RequestBodyObject = {\n __typename?: \"RequestBodyObject\";\n content?: Maybe<Array<MediaTypeObject>>;\n description?: Maybe<Scalars[\"String\"][\"output\"]>;\n required?: Maybe<Scalars[\"Boolean\"][\"output\"]>;\n};\n\nexport type ResponseItem = {\n __typename?: \"ResponseItem\";\n content?: Maybe<Array<MediaTypeObject>>;\n description?: Maybe<Scalars[\"String\"][\"output\"]>;\n headers?: Maybe<Scalars[\"JSON\"][\"output\"]>;\n links?: Maybe<Scalars[\"JSON\"][\"output\"]>;\n statusCode: Scalars[\"String\"][\"output\"];\n};\n\nexport type Schema = {\n __typename?: \"Schema\";\n description?: Maybe<Scalars[\"String\"][\"output\"]>;\n openapi: Scalars[\"String\"][\"output\"];\n operations: Array<OperationItem>;\n paths: Array<PathItem>;\n servers: Array<Server>;\n tags: Array<SchemaTag>;\n title: Scalars[\"String\"][\"output\"];\n url: Scalars[\"String\"][\"output\"];\n version: Scalars[\"String\"][\"output\"];\n summary?: Maybe<Scalars[\"String\"][\"output\"]>;\n};\n\nexport type SchemaOperationsArgs = {\n method?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n operationId?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n path?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n tag?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n};\n\nexport type SchemaTagsArgs = {\n name?: InputMaybe<Scalars[\"String\"][\"input\"]>;\n};\n\nexport type SchemaTag = {\n __typename?: \"SchemaTag\";\n description?: Maybe<Scalars[\"String\"][\"output\"]>;\n name?: Maybe<Scalars[\"String\"][\"output\"]>;\n operations: Array<OperationItem>;\n};\n\nexport type SchemaType = \"file\" | \"raw\" | \"url\";\n\nexport type Server = {\n __typename?: \"Server\";\n description?: Maybe<Scalars[\"String\"][\"output\"]>;\n url: Scalars[\"String\"][\"output\"];\n};\n\nexport type TagItem = {\n __typename?: \"TagItem\";\n description?: Maybe<Scalars[\"String\"][\"output\"]>;\n name: Scalars[\"String\"][\"output\"];\n};\n\nexport type ServersQueryQueryVariables = Exact<{\n input: Scalars[\"JSON\"][\"input\"];\n type: SchemaType;\n}>;\n\nexport type ServersQueryQuery = {\n __typename?: \"Query\";\n schema: {\n __typename?: \"Schema\";\n url: string;\n servers: Array<{ __typename?: \"Server\"; url: string }>;\n };\n};\n\nexport type OperationsFragmentFragment = {\n __typename?: \"OperationItem\";\n slug: string;\n summary?: string | null;\n method: string;\n description?: string | null;\n operationId?: string | null;\n contentTypes: Array<string>;\n path: string;\n parameters?: Array<{\n __typename?: \"ParameterItem\";\n name: string;\n in: ParameterIn;\n description?: string | null;\n required?: boolean | null;\n schema?: any | null;\n style?: string | null;\n examples?: Array<{\n __typename?: \"ExampleItem\";\n name: string;\n description?: string | null;\n externalValue?: string | null;\n value?: any | null;\n summary?: string | null;\n }> | null;\n }> | null;\n requestBody?: {\n __typename?: \"RequestBodyObject\";\n description?: string | null;\n required?: boolean | null;\n content?: Array<{\n __typename?: \"MediaTypeObject\";\n mediaType: string;\n schema?: any | null;\n encoding?: Array<{ __typename?: \"EncodingItem\"; name: string }> | null;\n examples?: Array<{\n __typename?: \"ExampleItem\";\n name: string;\n description?: string | null;\n externalValue?: string | null;\n value?: any | null;\n summary?: string | null;\n }> | null;\n }> | null;\n } | null;\n responses: Array<{\n __typename?: \"ResponseItem\";\n statusCode: string;\n links?: any | null;\n description?: string | null;\n content?: Array<{\n __typename?: \"MediaTypeObject\";\n mediaType: string;\n schema?: any | null;\n examples?: Array<{\n __typename?: \"ExampleItem\";\n name: string;\n description?: string | null;\n externalValue?: string | null;\n value?: any | null;\n summary?: string | null;\n }> | null;\n encoding?: Array<{ __typename?: \"EncodingItem\"; name: string }> | null;\n }> | null;\n }>;\n} & { \" $fragmentName\"?: \"OperationsFragmentFragment\" };\n\nexport type AllOperationsQueryVariables = Exact<{\n input: Scalars[\"JSON\"][\"input\"];\n type: SchemaType;\n}>;\n\nexport type AllOperationsQuery = {\n __typename?: \"Query\";\n schema: {\n __typename?: \"Schema\";\n description?: string | null;\n summary?: string | null;\n title: string;\n url: string;\n version: string;\n tags: Array<{\n __typename?: \"SchemaTag\";\n name?: string | null;\n description?: string | null;\n operations: Array<\n { __typename?: \"OperationItem\"; slug: string } & {\n \" $fragmentRefs\"?: {\n OperationsFragmentFragment: OperationsFragmentFragment;\n };\n }\n >;\n }>;\n };\n};\n\nexport type GetServerQueryQueryVariables = Exact<{\n input: Scalars[\"JSON\"][\"input\"];\n type: SchemaType;\n}>;\n\nexport type GetServerQueryQuery = {\n __typename?: \"Query\";\n schema: {\n __typename?: \"Schema\";\n url: string;\n servers: Array<{ __typename?: \"Server\"; url: string }>;\n };\n};\n\nexport type GetCategoriesQueryVariables = Exact<{\n input: Scalars[\"JSON\"][\"input\"];\n type: SchemaType;\n}>;\n\nexport type GetCategoriesQuery = {\n __typename?: \"Query\";\n schema: {\n __typename?: \"Schema\";\n url: string;\n tags: Array<{\n __typename: \"SchemaTag\";\n name?: string | null;\n operations: Array<{\n __typename: \"OperationItem\";\n slug: string;\n deprecated?: boolean | null;\n method: string;\n summary?: string | null;\n operationId?: string | null;\n path: string;\n }>;\n }>;\n };\n};\n\nexport class TypedDocumentString<TResult, TVariables>\n extends String\n implements DocumentTypeDecoration<TResult, TVariables>\n{\n __apiType?: DocumentTypeDecoration<TResult, TVariables>[\"__apiType\"];\n\n constructor(\n private value: string,\n public __meta__?: Record<string, any> | undefined,\n ) {\n super(value);\n }\n\n toString(): string & DocumentTypeDecoration<TResult, TVariables> {\n return this.value;\n }\n}\nexport const OperationsFragmentFragmentDoc = new TypedDocumentString(\n `\n fragment OperationsFragment on OperationItem {\n slug\n summary\n method\n description\n operationId\n contentTypes\n path\n parameters {\n name\n in\n description\n required\n schema\n style\n examples {\n name\n description\n externalValue\n value\n summary\n }\n }\n requestBody {\n content {\n mediaType\n encoding {\n name\n }\n examples {\n name\n description\n externalValue\n value\n summary\n }\n schema\n }\n description\n required\n }\n responses {\n statusCode\n links\n description\n content {\n examples {\n name\n description\n externalValue\n value\n summary\n }\n mediaType\n encoding {\n name\n }\n schema\n }\n }\n}\n `,\n { fragmentName: \"OperationsFragment\" },\n) as unknown as TypedDocumentString<OperationsFragmentFragment, unknown>;\nexport const ServersQueryDocument = new TypedDocumentString(`\n query ServersQuery($input: JSON!, $type: SchemaType!) {\n schema(input: $input, type: $type) {\n url\n servers {\n url\n }\n }\n}\n `) as unknown as TypedDocumentString<\n ServersQueryQuery,\n ServersQueryQueryVariables\n>;\nexport const AllOperationsDocument = new TypedDocumentString(`\n query AllOperations($input: JSON!, $type: SchemaType!) {\n schema(input: $input, type: $type) {\n description\n summary\n title\n url\n version\n tags {\n name\n description\n operations {\n slug\n ...OperationsFragment\n }\n }\n }\n}\n fragment OperationsFragment on OperationItem {\n slug\n summary\n method\n description\n operationId\n contentTypes\n path\n parameters {\n name\n in\n description\n required\n schema\n style\n examples {\n name\n description\n externalValue\n value\n summary\n }\n }\n requestBody {\n content {\n mediaType\n encoding {\n name\n }\n examples {\n name\n description\n externalValue\n value\n summary\n }\n schema\n }\n description\n required\n }\n responses {\n statusCode\n links\n description\n content {\n examples {\n name\n description\n externalValue\n value\n summary\n }\n mediaType\n encoding {\n name\n }\n schema\n }\n }\n}`) as unknown as TypedDocumentString<\n AllOperationsQuery,\n AllOperationsQueryVariables\n>;\nexport const GetServerQueryDocument = new TypedDocumentString(`\n query getServerQuery($input: JSON!, $type: SchemaType!) {\n schema(input: $input, type: $type) {\n url\n servers {\n url\n }\n }\n}\n `) as unknown as TypedDocumentString<\n GetServerQueryQuery,\n GetServerQueryQueryVariables\n>;\nexport const GetCategoriesDocument = new TypedDocumentString(`\n query GetCategories($input: JSON!, $type: SchemaType!) {\n schema(input: $input, type: $type) {\n url\n tags {\n __typename\n name\n operations {\n __typename\n slug\n deprecated\n method\n summary\n operationId\n path\n }\n }\n }\n}\n `) as unknown as TypedDocumentString<\n GetCategoriesQuery,\n GetCategoriesQueryVariables\n>;\n","/* eslint-disable */\nimport * as types from \"./graphql.js\";\n\n/**\n * Map of all GraphQL operations in the project.\n *\n * This map has several performance disadvantages:\n * 1. It is not tree-shakeable, so it will include all operations in the project.\n * 2. It is not minifiable, so the string of a GraphQL query will be multiple times inside the bundle.\n * 3. It does not support dead code elimination, so it will add unused operations.\n *\n * Therefore it is highly recommended to use the babel or swc plugin for production.\n * Learn more about it here: https://the-guild.dev/graphql/codegen/plugins/presets/preset-client#reducing-bundle-size\n */\nconst documents = {\n \"\\n query ServersQuery($input: JSON!, $type: SchemaType!) {\\n schema(input: $input, type: $type) {\\n url\\n servers {\\n url\\n }\\n }\\n }\\n\":\n types.ServersQueryDocument,\n \"\\n fragment OperationsFragment on OperationItem {\\n slug\\n summary\\n method\\n description\\n operationId\\n contentTypes\\n path\\n parameters {\\n name\\n in\\n description\\n required\\n schema\\n style\\n examples {\\n name\\n description\\n externalValue\\n value\\n summary\\n }\\n }\\n requestBody {\\n content {\\n mediaType\\n encoding {\\n name\\n }\\n examples {\\n name\\n description\\n externalValue\\n value\\n summary\\n }\\n schema\\n }\\n description\\n required\\n }\\n responses {\\n statusCode\\n links\\n description\\n content {\\n examples {\\n name\\n description\\n externalValue\\n value\\n summary\\n }\\n mediaType\\n encoding {\\n name\\n }\\n schema\\n }\\n }\\n }\\n\":\n types.OperationsFragmentFragmentDoc,\n \"\\n query AllOperations($input: JSON!, $type: SchemaType!) {\\n schema(input: $input, type: $type) {\\n description\\n summary\\n title\\n url\\n version\\n tags {\\n name\\n description\\n operations {\\n slug\\n ...OperationsFragment\\n }\\n }\\n }\\n }\\n\":\n types.AllOperationsDocument,\n \"\\n query getServerQuery($input: JSON!, $type: SchemaType!) {\\n schema(input: $input, type: $type) {\\n url\\n servers {\\n url\\n }\\n }\\n }\\n\":\n types.GetServerQueryDocument,\n \"\\n query GetCategories($input: JSON!, $type: SchemaType!) {\\n schema(input: $input, type: $type) {\\n url\\n tags {\\n __typename\\n name\\n operations {\\n __typename\\n slug\\n deprecated\\n method\\n summary\\n operationId\\n path\\n }\\n }\\n }\\n }\\n\":\n types.GetCategoriesDocument,\n};\n\n/**\n * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.\n */\nexport function graphql(\n source: \"\\n query ServersQuery($input: JSON!, $type: SchemaType!) {\\n schema(input: $input, type: $type) {\\n url\\n servers {\\n url\\n }\\n }\\n }\\n\",\n): typeof import(\"./graphql.js\").ServersQueryDocument;\n/**\n * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.\n */\nexport function graphql(\n source: \"\\n fragment OperationsFragment on OperationItem {\\n slug\\n summary\\n method\\n description\\n operationId\\n contentTypes\\n path\\n parameters {\\n name\\n in\\n description\\n required\\n schema\\n style\\n examples {\\n name\\n description\\n externalValue\\n value\\n summary\\n }\\n }\\n requestBody {\\n content {\\n mediaType\\n encoding {\\n name\\n }\\n examples {\\n name\\n description\\n externalValue\\n value\\n summary\\n }\\n schema\\n }\\n description\\n required\\n }\\n responses {\\n statusCode\\n links\\n description\\n content {\\n examples {\\n name\\n description\\n externalValue\\n value\\n summary\\n }\\n mediaType\\n encoding {\\n name\\n }\\n schema\\n }\\n }\\n }\\n\",\n): typeof import(\"./graphql.js\").OperationsFragmentFragmentDoc;\n/**\n * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.\n */\nexport function graphql(\n source: \"\\n query AllOperations($input: JSON!, $type: SchemaType!) {\\n schema(input: $input, type: $type) {\\n description\\n summary\\n title\\n url\\n version\\n tags {\\n name\\n description\\n operations {\\n slug\\n ...OperationsFragment\\n }\\n }\\n }\\n }\\n\",\n): typeof import(\"./graphql.js\").AllOperationsDocument;\n/**\n * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.\n */\nexport function graphql(\n source: \"\\n query getServerQuery($input: JSON!, $type: SchemaType!) {\\n schema(input: $input, type: $type) {\\n url\\n servers {\\n url\\n }\\n }\\n }\\n\",\n): typeof import(\"./graphql.js\").GetServerQueryDocument;\n/**\n * The graphql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.\n */\nexport function graphql(\n source: \"\\n query GetCategories($input: JSON!, $type: SchemaType!) {\\n schema(input: $input, type: $type) {\\n url\\n tags {\\n __typename\\n name\\n operations {\\n __typename\\n slug\\n deprecated\\n method\\n summary\\n operationId\\n path\\n }\\n }\\n }\\n }\\n\",\n): typeof import(\"./graphql.js\").GetCategoriesDocument;\n\nexport function graphql(source: string) {\n return (documents as any)[source] ?? {};\n}\n","export function assertError(err) {\n if (!isError(err)) {\n throw new Error(\"Parameter was not an error\");\n }\n}\nexport function isError(err) {\n return ((!!err &&\n typeof err === \"object\" &&\n objectToString(err) === \"[object Error]\") ||\n err instanceof Error);\n}\nfunction objectToString(obj) {\n return Object.prototype.toString.call(obj);\n}\n","const NAME = \"Layerr\";\nlet __name = NAME;\nexport function getGlobalName() {\n return __name;\n}\nexport function setGlobalName(name = null) {\n __name = name ?? NAME;\n}\n","import { isError } from \"./error.js\";\nexport function parseArguments(args) {\n let options, shortMessage = \"\";\n if (args.length === 0) {\n options = {};\n }\n else if (isError(args[0])) {\n options = {\n cause: args[0],\n };\n shortMessage = args.slice(1).join(\" \") || \"\";\n }\n else if (args[0] && typeof args[0] === \"object\") {\n options = Object.assign({}, args[0]);\n shortMessage = args.slice(1).join(\" \") || \"\";\n }\n else if (typeof args[0] === \"string\") {\n options = {};\n shortMessage = shortMessage = args.join(\" \") || \"\";\n }\n else {\n throw new Error(\"Invalid arguments passed to Layerr\");\n }\n return {\n options,\n shortMessage,\n };\n}\n","import { assertError, isError } from \"./error.js\";\nimport { getGlobalName } from \"./global.js\";\nimport { parseArguments } from \"./tools.js\";\nexport class Layerr extends Error {\n constructor(errorOptionsOrMessage, messageText) {\n const args = [...arguments];\n const { options, shortMessage } = parseArguments(args);\n let message = shortMessage;\n if (options.cause) {\n message = `${message}: ${options.cause.message}`;\n }\n super(message);\n this.message = message;\n if (options.name && typeof options.name === \"string\") {\n this.name = options.name;\n }\n else {\n this.name = getGlobalName();\n }\n if (options.cause) {\n Object.defineProperty(this, \"_cause\", { value: options.cause });\n }\n Object.defineProperty(this, \"_info\", { value: {} });\n if (options.info && typeof options.info === \"object\") {\n Object.assign(this._info, options.info);\n }\n if (Error.captureStackTrace) {\n const ctor = options.constructorOpt || this.constructor;\n Error.captureStackTrace(this, ctor);\n }\n }\n static cause(err) {\n assertError(err);\n if (!err._cause)\n return null;\n return isError(err._cause)\n ? err._cause\n : null;\n }\n static fullStack(err) {\n assertError(err);\n const cause = Layerr.cause(err);\n if (cause) {\n return `${err.stack}\\ncaused by: ${Layerr.fullStack(cause)}`;\n }\n return err.stack ?? \"\";\n }\n static info(err) {\n assertError(err);\n const output = {};\n const cause = Layerr.cause(err);\n if (cause) {\n Object.assign(output, Layerr.info(cause));\n }\n if (err._info) {\n Object.assign(output, err._info);\n }\n return output;\n }\n toString() {\n let output = this.name ||\n this.constructor.name ||\n this.constructor.prototype.name;\n if (this.message) {\n output = `${output}: ${this.message}`;\n }\n return output;\n }\n}\n","import { Layerr } from 'layerr';\n\nconst B32_CHARACTERS = \"0123456789ABCDEFGHJKMNPQRSTVWXYZ\";\nconst MAX_ULID = \"7ZZZZZZZZZZZZZZZZZZZZZZZZZ\";\nconst MIN_ULID = \"00000000000000000000000000\";\nconst ULID_REGEX = /^[0-7][0-9a-hjkmnp-tv-zA-HJKMNP-TV-Z]{25}$/;\nconst UUID_REGEX = /^[0-9a-fA-F]{8}-(?:[0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}$/;\n\n// Code from https://github.com/devbanana/crockford-base32/blob/develop/src/index.ts\nfunction crockfordEncode(input) {\n const output = [];\n let bitsRead = 0;\n let buffer = 0;\n const reversedInput = new Uint8Array(input.slice().reverse());\n for (const byte of reversedInput) {\n buffer |= byte << bitsRead;\n bitsRead += 8;\n while (bitsRead >= 5) {\n output.unshift(buffer & 0x1f);\n buffer >>>= 5;\n bitsRead -= 5;\n }\n }\n if (bitsRead > 0) {\n output.unshift(buffer & 0x1f);\n }\n return output.map(byte => B32_CHARACTERS.charAt(byte)).join(\"\");\n}\nfunction crockfordDecode(input) {\n const sanitizedInput = input.toUpperCase().split(\"\").reverse().join(\"\");\n const output = [];\n let bitsRead = 0;\n let buffer = 0;\n for (const character of sanitizedInput) {\n const byte = B32_CHARACTERS.indexOf(character);\n if (byte === -1) {\n throw new Error(`Invalid base 32 character found in string: ${character}`);\n }\n buffer |= byte << bitsRead;\n bitsRead += 5;\n while (bitsRead >= 8) {\n output.unshift(buffer & 0xff);\n buffer >>>= 8;\n bitsRead -= 8;\n }\n }\n if (bitsRead >= 5 || buffer > 0) {\n output.unshift(buffer & 0xff);\n }\n return new Uint8Array(output);\n}\n\n// These values should NEVER change. The values are precisely for\n// generating ULIDs.\nconst ENCODING = \"0123456789ABCDEFGHJKMNPQRSTVWXYZ\"; // Crockford's Base32\nconst ENCODING_LEN = 32; // from ENCODING.length;\nconst TIME_MAX = 281474976710655; // from Math.pow(2, 48) - 1;\nconst TIME_LEN = 10;\nconst RANDOM_LEN = 16;\nconst ERROR_INFO = Object.freeze({\n source: \"ulid\"\n});\n/**\n * Decode time from a ULID\n * @param id The ULID\n * @returns The decoded timestamp\n */\nfunction decodeTime(id) {\n if (id.length !== TIME_LEN + RANDOM_LEN) {\n throw new Layerr({\n info: {\n code: \"DEC_TIME_MALFORMED\",\n ...ERROR_INFO\n }\n }, \"Malformed ULID\");\n }\n const time = id\n .substr(0, TIME_LEN)\n .toUpperCase()\n .split(\"\")\n .reverse()\n .reduce((carry, char, index) => {\n const encodingIndex = ENCODING.indexOf(char);\n if (encodingIndex === -1) {\n throw new Layerr({\n info: {\n code: \"DEC_TIME_CHAR\",\n ...ERROR_INFO\n }\n }, `Time decode error: Invalid character: ${char}`);\n }\n return (carry += encodingIndex * Math.pow(ENCODING_LEN, index));\n }, 0);\n if (time > TIME_MAX) {\n throw new Layerr({\n info: {\n code: \"DEC_TIME_CHAR\",\n ...ERROR_INFO\n }\n }, `Malformed ULID: timestamp too large: ${time}`);\n }\n return time;\n}\n/**\n * Detect the best PRNG (pseudo-random number generator)\n * @param root The root to check from (global/window)\n * @returns The PRNG function\n */\nfunction detectPRNG(root) {\n const rootLookup = root || detectRoot();\n const globalCrypto = (rootLookup && (rootLookup.crypto || rootLookup.msCrypto)) ||\n (null);\n if (typeof globalCrypto?.getRandomValues === \"function\") {\n return () => {\n const buffer = new Uint8Array(1);\n globalCrypto.getRandomValues(buffer);\n return buffer[0] / 0xff;\n };\n }\n else if (typeof globalCrypto?.randomBytes === \"function\") {\n return () => globalCrypto.randomBytes(1).readUInt8() / 0xff;\n }\n else ;\n throw new Layerr({\n info: {\n code: \"PRNG_DETECT\",\n ...ERROR_INFO\n }\n }, \"Failed to find a reliable PRNG\");\n}\nfunction detectRoot() {\n if (inWebWorker())\n return self;\n if (typeof window !== \"undefined\") {\n return window;\n }\n if (typeof global !== \"undefined\") {\n return global;\n }\n if (typeof globalThis !== \"undefined\") {\n return globalThis;\n }\n return null;\n}\nfunction encodeRandom(len, prng) {\n let str = \"\";\n for (; len > 0; len--) {\n str = randomChar(prng) + str;\n }\n return str;\n}\n/**\n * Encode the time portion of a ULID\n * @param now The current timestamp\n * @param len Length to generate\n * @returns The encoded time\n */\nfunction encodeTime(now, len) {\n if (isNaN(now)) {\n throw new Layerr({\n info: {\n code: \"ENC_TIME_NAN\",\n ...ERROR_INFO\n }\n }, `Time must be a number: ${now}`);\n }\n else if (now > TIME_MAX) {\n throw new Layerr({\n info: {\n code: \"ENC_TIME_SIZE_EXCEED\",\n ...ERROR_INFO\n }\n }, `Cannot encode a time larger than ${TIME_MAX}: ${now}`);\n }\n else if (now < 0) {\n throw new Layerr({\n info: {\n code: \"ENC_TIME_NEG\",\n ...ERROR_INFO\n }\n }, `Time must be positive: ${now}`);\n }\n else if (Number.isInteger(now) === false) {\n throw new Layerr({\n info: {\n code: \"ENC_TIME_TYPE\",\n ...ERROR_INFO\n }\n }, `Time must be an integer: ${now}`);\n }\n let mod, str = \"\";\n for (let currentLen = len; currentLen > 0; currentLen--) {\n mod = now % ENCODING_LEN;\n str = ENCODING.charAt(mod) + str;\n now = (now - mod) / ENCODING_LEN;\n }\n return str;\n}\n/**\n * Fix a ULID's Base32 encoding -\n * i and l (case-insensitive) will be treated as 1 and o (case-insensitive) will be treated as 0.\n * hyphens are ignored during decoding.\n * @param id The ULID\n * @returns The cleaned up ULID\n */\nfunction fixULIDBase32(id) {\n return id.replace(/i/gi, \"1\").replace(/l/gi, \"1\").replace(/o/gi, \"0\").replace(/-/g, \"\");\n}\nfunction incrementBase32(str) {\n let done = undefined, index = str.length, char, charIndex, output = str;\n const maxCharIndex = ENCODING_LEN - 1;\n while (!done && index-- >= 0) {\n char = output[index];\n charIndex = ENCODING.indexOf(char);\n if (charIndex === -1) {\n throw new Layerr({\n info: {\n code: \"B32_INC_ENC\",\n ...ERROR_INFO\n }\n }, \"Incorrectly encoded string\");\n }\n if (charIndex === maxCharIndex) {\n output = replaceCharAt(output, index, ENCODING[0]);\n continue;\n }\n done = replaceCharAt(output, index, ENCODING[charIndex + 1]);\n }\n if (typeof done === \"string\") {\n return done;\n }\n throw new Layerr({\n info: {\n code: \"B32_INC_INVALID\",\n ...ERROR_INFO\n }\n }, \"Failed incrementing string\");\n}\nfunction inWebWorker() {\n // @ts-ignore\n return typeof WorkerGlobalScope !== \"undefined\" && self instanceof WorkerGlobalScope;\n}\n/**\n * Check if a ULID is valid\n * @param id The ULID to test\n * @returns True if valid, false otherwise\n * @example\n * isValid(\"01HNZX8JGFACFA36RBXDHEQN6E\"); // true\n * isValid(\"\"); // false\n */\nfunction isValid(id) {\n return (typeof id === \"string\" &&\n id.length === TIME_LEN + RANDOM_LEN &&\n id\n .toUpperCase()\n .split(\"\")\n .every(char => ENCODING.indexOf(char) !== -1));\n}\n/**\n * Create a ULID factory to generate monotonically-increasing\n * ULIDs\n * @param prng The PRNG to use\n * @returns A ulid factory\n * @example\n * const ulid = monotonicFactory();\n * ulid(); // \"01HNZXD07M5CEN5XA66EMZSRZW\"\n */\nfunction monotonicFactory(prng) {\n const currentPRNG = prng || detectPRNG();\n let lastTime = 0, lastRandom;\n return function _ulid(seedTime) {\n const seed = isNaN(seedTime) ? Date.now() : seedTime;\n if (seed <= lastTime) {\n const incrementedRandom = (lastRandom = incrementBase32(lastRandom));\n return encodeTime(lastTime, TIME_LEN) + incrementedRandom;\n }\n lastTime = seed;\n const newRandom = (lastRandom = encodeRandom(RANDOM_LEN, currentPRNG));\n return encodeTime(seed, TIME_LEN) + newRandom;\n };\n}\nfunction randomChar(prng) {\n let rand = Math.floor(prng() * ENCODING_LEN);\n if (rand === ENCODING_LEN) {\n rand = ENCODING_LEN - 1;\n }\n return ENCODING.charAt(rand);\n}\nfunction replaceCharAt(str, index, char) {\n if (index > str.length - 1) {\n return str;\n }\n return str.substr(0, index) + char + str.substr(index + 1);\n}\n/**\n * Generate a ULID\n * @param seedTime Optional time seed\n * @param prng Optional PRNG function\n * @returns A ULID string\n * @example\n * ulid(); // \"01HNZXD07M5CEN5XA66EMZSRZW\"\n */\nfunction ulid(seedTime, prng) {\n const currentPRNG = prng || detectPRNG();\n const seed = isNaN(seedTime) ? Date.now() : seedTime;\n return encodeTime(seed, TIME_LEN) + encodeRandom(RANDOM_LEN, currentPRNG);\n}\n/**\n * Convert a ULID to a UUID\n * @param ulid The ULID to convert\n * @returns A UUID string\n */\nfunction ulidToUUID(ulid) {\n const isValid = ULID_REGEX.test(ulid);\n if (!isValid) {\n throw new Layerr({ info: { code: \"INVALID_ULID\", ...ERROR_INFO } }, \"Invalid ULID\");\n }\n const uint8Array = crockfordDecode(ulid);\n let uuid = Array.from(uint8Array)\n .map(byte => byte.toString(16).padStart(2, \"0\"))\n .join(\"\");\n uuid =\n uuid.substring(0, 8) +\n \"-\" +\n uuid.substring(8, 12) +\n \"-\" +\n uuid.substring(12, 16) +\n \"-\" +\n uuid.substring(16, 20) +\n \"-\" +\n uuid.substring(20);\n return uuid;\n}\n/**\n * Convert a UUID to a ULID\n * @param uuid The UUID to convert\n * @returns A ULID string\n */\nfunction uuidToULID(uuid) {\n const isValid = UUID_REGEX.test(uuid);\n if (!isValid) {\n throw new Layerr({ info: { code: \"INVALID_UUID\", ...ERROR_INFO } }, \"Invalid UUID\");\n }\n const uint8Array = new Uint8Array(uuid\n .replace(/-/g, \"\")\n .match(/.{1,2}/g)\n .map(byte => parseInt(byte, 16)));\n return crockfordEncode(uint8Array);\n}\n\nexport { B32_CHARACTERS, MAX_ULID, MIN_ULID, ULID_REGEX, UUID_REGEX, decodeTime, detectPRNG, encodeTime, fixULIDBase32, isValid, monotonicFactory, ulid, ulidToUUID, uuidToULID };\n","import type { GraphQLError } from \"graphql/error/index.js\";\nimport { ulid } from \"ulidx\";\nimport { initializeWorker } from \"zudoku/openapi-worker\";\nimport { ZudokuError } from \"../../../util/invariant.js\";\nimport type { TypedDocumentString } from \"../graphql/graphql.js\";\nimport type { OpenApiPluginOptions } from \"../index.js\";\nimport type { LocalServer } from \"./createServer.js\";\nimport type { WorkerGraphQLMessage } from \"./worker.js\";\n\nlet localServerPromise: Promise<LocalServer> | undefined;\nlet worker: SharedWorker | undefined;\n\ntype GraphQLResponse<TResult> = {\n errors?: GraphQLError[];\n data: TResult;\n};\n\nconst resolveVariables = async (variables?: unknown) => {\n if (!variables) return;\n\n if (\n typeof variables === \"object\" &&\n \"type\" in variables &&\n variables.type === \"file\" &&\n \"input\" in variables &&\n typeof variables.input === \"function\"\n ) {\n variables.input = await variables.input();\n }\n};\n\nconst throwIfError = (response: GraphQLResponse<unknown>) => {\n if (!response.errors?.[0]) return;\n\n throw new ZudokuError(response.errors[0].message, {\n developerHint:\n \"Check your configuration value `apis.type` and `apis.input` in the Zudoku config.\",\n });\n};\n\nexport class GraphQLClient {\n readonly #mode: \"remote\" | \"in-memory\" | \"worker\";\n #pendingRequests = new Map<string, (value: any) => void>();\n #port: MessagePort | undefined;\n\n constructor(private config: OpenApiPluginOptions) {\n if (config.server) {\n this.#mode = \"remote\";\n } else if (config.inMemory || typeof SharedWorker === \"undefined\") {\n this.#mode = \"in-memory\";\n } else {\n this.#mode = \"worker\";\n }\n }\n\n #initializeLocalServer = () =>\n import(\"./createServer.js\").then((m) => m.createServer());\n\n fetch = async <TResult, TVariables>(\n query: TypedDocumentString<TResult, TVariables>,\n ...[variables]: TVariables extends Record<string, never> ? [] : [TVariables]\n ) => {\n const operationName = query.match(/query (\\w+)/)?.[1];\n\n await resolveVariables(variables);\n\n const body = JSON.stringify({ query, variables, operationName });\n\n switch (this.#mode) {\n case \"remote\": {\n const response = await fetch(this.config.server!, {\n method: \"POST\",\n body,\n headers: { \"Content-Type\": \"application/json\" },\n });\n\n if (!response.ok) {\n throw new Error(\"Network response was not ok\");\n }\n\n const result = (await response.json()) as GraphQLResponse<TResult>;\n throwIfError(result);\n\n return result.data;\n }\n\n case \"in-memory\": {\n if (!localServerPromise) {\n localServerPromise = this.#initializeLocalServer();\n }\n\n const localServer = await localServerPromise;\n if (!localServer) throw new Error(\"Local server not initialized\");\n\n const response = await localServer.fetch(\n new Request(\"http://localhost/graphql\", {\n method: \"POST\",\n body,\n headers: { \"Content-Type\": \"application/json\" },\n }),\n );\n\n if (!response.ok) {\n throw new Error(\"Network response was not ok\");\n }\n\n const result = (await response.json()) as GraphQLResponse<TResult>;\n throwIfError(result);\n\n return result.data;\n }\n\n case \"worker\": {\n if (!worker) {\n worker = initializeWorker();\n }\n\n if (!this.#port) {\n const channel = new MessageChannel();\n\n worker.port.postMessage({ port: channel.port2 }, [channel.port2]);\n\n this.#port = channel.port1;\n\n this.#port.onmessage = (e: MessageEvent<WorkerGraphQLMessage>) => {\n const { id, body } = e.data;\n const resolve = this.#pendingRequests.get(id);\n if (resolve) {\n const result = JSON.parse(body);\n resolve(result);\n this.#pendingRequests.delete(id);\n } else {\n // eslint-disable-next-line no-console\n console.error(`No pending request found for id: ${id}`);\n }\n };\n\n this.#port.start();\n }\n\n const id = ulid();\n\n const resultPromise = new Promise<GraphQLResponse<TResult>>(\n (resolve) => {\n this.#pendingRequests.set(id, resolve);\n this.#port!.postMessage({ id, body } as WorkerGraphQLMessage);\n },\n );\n\n const result = await resultPromise;\n throwIfError(result);\n\n return result.data;\n }\n }\n };\n}\n","const c2n = (c: string) =>\n Math.abs(\n isNaN(parseInt(c))\n ? c.toLowerCase().charCodeAt(0) - 96\n : isNaN(parseInt(c))\n ? 0\n : parseInt(c),\n );\nconst s2n = (s: string) =>\n s.length > 1\n ? parseInt(s.split(\"\").reduce((a, c) => `${c2n(a) + c2n(c)}`))\n : c2n(s);\n\nexport const pastellize = (\n s: string,\n options: {\n saturation?: number;\n lightness?: number;\n } = {},\n) => {\n const hue = (3 * s2n(s) + 2 * s2n(s) + s2n(s)) % 360;\n const { saturation = 75, lightness = 60 } = options;\n\n return `${hue}deg ${saturation}% ${lightness}%`;\n};\n","import { useTheme } from \"next-themes\";\nimport { useEffect, useRef, type CSSProperties, type ReactNode } from \"react\";\nimport { cn } from \"../../util/cn.js\";\nimport { pastellize } from \"../../util/pastellize.js\";\n\nexport const DATA_ATTR = \"data-linked-param\";\n\nexport const usePastellizedColor = (name: string) => {\n const { resolvedTheme } = useTheme();\n return pastellize(\n name,\n resolvedTheme === \"light\" ? { saturation: 85, lightness: 50 } : undefined,\n );\n};\n\nexport const ColorizedParam = ({\n name,\n className,\n backgroundOpacity = \"100%\",\n borderOpacity = \"100%\",\n slug,\n children,\n onClick,\n}: {\n name: string;\n className?: string;\n backgroundOpacity?: string;\n borderOpacity?: string;\n slug?: string;\n children?: ReactNode;\n onClick?: () => void;\n}) => {\n const ref = useRef<HTMLSpanElement>(null);\n const normalized = name.replace(/[{}]/g, \"\");\n const normalizedSlug = slug?.replace(/[{}]/g, \"\");\n const color = usePastellizedColor(normalized);\n\n const borderColor = `hsl(${color} / ${borderOpacity})`;\n const backgroundColor = `hsl(${color} / ${backgroundOpacity})`;\n\n useEffect(() => {\n if (!normalizedSlug) return;\n if (!ref.current) return;\n\n const onMouseEnter = () => {\n document\n .querySelectorAll(`[${DATA_ATTR}=\"${normalizedSlug}\"]`)\n .forEach((el) => {\n if (el instanceof HTMLElement) {\n el.dataset.active = \"true\";\n }\n });\n };\n const onMouseLeave = () => {\n document\n .querySelectorAll(`[${DATA_ATTR}=\"${normalizedSlug}\"]`)\n .forEach((el) => {\n if (el instanceof HTMLElement) {\n el.dataset.active = \"false\";\n }\n });\n };\n\n const el = ref.current;\n\n el.addEventListener(\"mouseenter\", onMouseEnter);\n el.addEventListener(\"mouseleave\", onMouseLeave);\n\n return () => {\n el.removeEventListener(\"mouseenter\", onMouseEnter);\n el.removeEventListener(\"mouseleave\", onMouseLeave);\n };\n }, [normalizedSlug]);\n\n return (\n <span\n {...{ [DATA_ATTR]: normalizedSlug }}\n className={cn(\n \"relative after:rounded after:absolute after:inset-0 after:-bottom-0.5 after:border-b-2 after:transition-opacity after:duration-200\",\n \"after:pointer-events-none after:border-[--border-color] after:opacity-30 after:data-[active=true]:opacity-100\",\n className,\n )}\n suppressHydrationWarning\n ref={ref}\n onClick={onClick}\n style={\n {\n \"--border-color\": borderColor,\n \"--background-color\": backgroundColor,\n } as CSSProperties\n }\n >\n {children ?? name}\n </span>\n );\n};\n","import type { PlaygroundForm } from \"./Playground.js\";\n\nexport const createUrl = (host: string, path: string, data: PlaygroundForm) => {\n const filledPath = path.replace(/(:\\w+|\\{\\w+})/g, (match) => {\n const key = match.replace(/[:{}]/g, \"\");\n const value = data.pathParams.find((part) => part.name === key)?.value;\n\n return value ?? match;\n });\n\n // Ensure host ends with a slash and path doesn't start with one,\n // so they form a correct URL, without overriding the host's path.\n const url = new URL(\n filledPath.replace(/^\\//, \"\"),\n host.endsWith(\"/\") ? host : `${host}/`,\n );\n\n data.queryParams\n .filter((param) => param.active)\n .forEach((param) => {\n url.searchParams.set(param.name, param.value);\n });\n\n return url;\n};\n","import { XIcon } from \"lucide-react\";\nimport { Control, useFieldArray, UseFormRegister } from \"react-hook-form\";\nimport { Button } from \"../../../ui/Button.js\";\nimport { Input } from \"../../../ui/Input.js\";\nimport { type PlaygroundForm } from \"./Playground.js\";\n\nexport const Headers = ({\n control,\n register,\n}: {\n register: UseFormRegister<PlaygroundForm>;\n control: Control<PlaygroundForm>;\n}) => {\n const { fields, append, remove } = useFieldArray<PlaygroundForm>({\n control,\n name: \"headers\",\n });\n\n return (\n <div className=\"flex flex-col gap-2\">\n <table className=\"w-full [&_td]:border [&_td]:p-1.5 [&_td]:px-2\">\n <tbody>\n {fields.map((header, i) => (\n <tr\n key={header.id}\n className=\"group has-[:focus]:bg-muted/50 hover:bg-muted/50\"\n >\n <td className=\"flex gap-2 items-center\">\n <Input\n {...register(`headers.${i}.name`)}\n placeholder=\"Name\"\n className=\"border-0 shadow-none text-xs font-mono\"\n autoComplete=\"off\"\n />\n </td>\n <td>\n <div className=\"flex items-center gap-2\">\n <Input\n placeholder={\"Value\"}\n className=\"border-0 shadow-none text-xs font-mono\"\n {...register(`headers.${i}.value`)}\n autoComplete=\"off\"\n />\n <Button\n size=\"icon\"\n variant=\"ghost\"\n className=\"text-muted-foreground opacity-0 group-hover:opacity-100\"\n onClick={() => {\n remove(i);\n }}\n type=\"button\"\n >\n <XIcon size={16} />\n </Button>\n </div>\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n <div className=\"text-end\">\n <Button\n className=\"\"\n onClick={() => append({ name: \"\", value: \"\" })}\n type=\"button\"\n >\n Add header\n </Button>\n </div>\n </div>\n );\n};\n","import { EraserIcon } from \"lucide-react\";\nimport { Control, Controller, useFieldArray } from \"react-hook-form\";\nimport { Button } from \"../../../ui/Button.js\";\nimport { Input } from \"../../../ui/Input.js\";\nimport { cn } from \"../../../util/cn.js\";\nimport { ColorizedParam } from \"../ColorizedParam.js\";\nimport type { PlaygroundForm } from \"./Playground.js\";\n\nexport const PathParams = ({\n control,\n}: {\n control: Control<PlaygroundForm>;\n}) => {\n const { fields } = useFieldArray<PlaygroundForm>({\n control,\n name: \"pathParams\",\n });\n\n return (\n <table className=\"w-full table-auto [&_td]:border [&_td]:py-1 [&_td]:px-2\">\n <tbody>\n {fields.map((part, i) => (\n <tr key={part.id} className=\"hover:bg-accent/40\">\n <td>\n <Controller\n control={control}\n name={`pathParams.${i}.value`}\n render={({ field }) => (\n <div>\n <ColorizedParam\n slug={part.name}\n name={part.name}\n backgroundOpacity=\"25%\"\n borderOpacity={field.value ? \"100%\" : \"0\"}\n className={cn(\n \"font-mono text-xs m-2\",\n !field.value && \"opacity-60\",\n )}\n />\n *\n </div>\n )}\n />\n </td>\n <td>\n <div className=\"flex justify-between items-center\">\n <Controller\n control={control}\n name={`pathParams.${i}.value`}\n render={({ field }) => (\n <Input\n {...field}\n required\n placeholder=\"Enter value\"\n className=\"border-0 shadow-none ring-0 font-mono text-xs\"\n />\n )}\n />\n <Controller\n control={control}\n name={`pathParams.${i}.value`}\n render={({ field }) => (\n <Button\n size=\"icon\"\n type=\"button\"\n variant=\"ghost\"\n aria-label=\"Clear value\"\n className={cn(\n \"ms-2\",\n field.value.length === 0\n ? \"opacity-0 pointer-events-none\"\n : \"opacity-100\",\n )}\n title=\"Clear value\"\n onClick={() => field.onChange(\"\")}\n >\n <EraserIcon size={16} />\n </Button>\n )}\n />\n </div>\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n );\n};\n","import { Slot } from \"@radix-ui/react-slot\";\nimport { cva } from \"class-variance-authority\";\nimport type { ClassValue } from \"clsx\";\nimport * as React from \"react\";\nimport type { JSX } from \"react/jsx-runtime\";\nimport { cn } from \"./cn.js\";\n\nconst createVariantComponent = <\n E extends keyof React.ReactHTML,\n C extends ReturnType<typeof cva>,\n>(\n tag: E,\n cvx: ClassValue | C,\n // variantProps: Array<keyof VariantProps<C>> = [],\n) => {\n const MyVariant = React.forwardRef<\n HTMLElement,\n JSX.IntrinsicElements[E] & { className?: ClassValue; asChild?: boolean }\n >(({ className, asChild, ...props }, ref) => {\n const Comp = asChild ? Slot : tag;\n\n return React.createElement(Comp, {\n ...props,\n ref,\n className:\n typeof cvx === \"function\" ? cvx({ className }) : cn(cvx, className),\n });\n });\n\n MyVariant.displayName = `VariantComponent(${tag})`;\n\n return MyVariant;\n};\n\nexport default createVariantComponent;\n","import createVariantComponent from \"../../../util/createVariantComponent.js\";\n\nexport const InlineInput = createVariantComponent(\n \"input\",\n \"px-2 bg-transparent h-6 font-mono text-xs m-2\",\n);\n","import { EraserIcon } from \"lucide-react\";\nimport {\n Control,\n Controller,\n useFieldArray,\n useFormContext,\n} from \"react-hook-form\";\nimport { Button } from \"../../../ui/Button.js\";\nimport { Input } from \"../../../ui/Input.js\";\nimport { cn } from \"../../../util/cn.js\";\nimport { InlineInput } from \"./InlineInput.js\";\nimport {\n NO_IDENTITY,\n type PlaygroundForm,\n type QueryParam,\n} from \"./Playground.js\";\n\nexport const QueryParams = ({\n control,\n queryParams,\n}: {\n control: Control<PlaygroundForm>;\n queryParams: QueryParam[];\n}) => {\n const { fields } = useFieldArray<PlaygroundForm>({\n control,\n name: \"queryParams\",\n });\n const form = useFormContext<PlaygroundForm>();\n\n const requiredFields = queryParams.map((param) => Boolean(param.isRequired));\n\n const selectedIdentity = form.watch(\"identity\");\n const hasSelectedIdentity = selectedIdentity !== NO_IDENTITY;\n\n return (\n <div className=\"\">\n <table className=\"w-full [&_td]:border [&_td]:p-1.5 [&_td]:px-2\">\n <tbody>\n {fields\n .filter(\n // TODO remove this hack for Accu or make it more generic\n (field) => !(hasSelectedIdentity && field.name === \"apikey\"),\n )\n .map((field, i) => (\n <tr key={field.id} className=\"hover:bg-accent/40\">\n <td className=\"text-center\">\n <Controller\n control={control}\n name={`queryParams.${i}.active`}\n render={({ field }) => (\n <input\n type=\"checkbox\"\n id={`queryParams.${i}.active`}\n checked={field.value}\n onChange={field.onChange}\n />\n )}\n />\n </td>\n <td>\n <Controller\n control={control}\n render={({ field }) => (\n <InlineInput asChild>\n <label\n className=\"flex items-center cursor-pointer\"\n htmlFor={`queryParams.${i}.active`}\n title={\n requiredFields[i] ? \"Required field\" : undefined\n }\n >\n {field.value}\n {requiredFields[i] && <sup> *</sup>}\n </label>\n </InlineInput>\n )}\n name={`queryParams.${i}.name`}\n />\n </td>\n <td>\n <div className=\"flex justify-between items-center\">\n <Controller\n control={control}\n render={({ field }) => (\n <Input\n {...field}\n onChange={(e) => {\n field.onChange(e.target.value);\n if (e.target.value.length > 0) {\n form.setValue(`queryParams.${i}.active`, true);\n }\n }}\n placeholder=\"Enter value\"\n className=\"w-full border-0 shadow-none text-xs font-mono\"\n />\n )}\n name={`queryParams.${i}.value`}\n />\n <Controller\n control={control}\n render={({ field }) => (\n <Button\n size=\"icon\"\n type=\"button\"\n variant=\"ghost\"\n aria-label=\"Clear value\"\n className={cn(\n \"ms-2\",\n field.value.length === 0\n ? \"opacity-0 pointer-events-none\"\n : \"opacity-100\",\n )}\n title=\"Clear value\"\n onClick={() => field.onChange(\"\")}\n >\n <EraserIcon size={16} />\n </Button>\n )}\n name={`queryParams.${i}.value`}\n />\n </div>\n </td>\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n );\n};\n","import { ChevronsUpDownIcon } from \"lucide-react\";\nimport type { ChangeEventHandler } from \"react\";\nimport { cn } from \"../../util/cn.js\";\n\nexport const SimpleSelect = ({\n value,\n onChange,\n className,\n options,\n showChevrons = true,\n}: {\n value: string;\n onChange: ChangeEventHandler<HTMLSelectElement>;\n className?: string;\n options: {\n value: string;\n label: string;\n }[];\n showChevrons?: boolean;\n}) => (\n <div className=\"grid\">\n <select\n className={cn(\n \"row-start-1 col-start-1 border border-input text-foreground px-2 py-1 pe-6\",\n \"rounded-md appearance-none bg-zinc-50 hover:bg-white dark:bg-zinc-800 hover:dark:bg-zinc-800/75\",\n className,\n )}\n value={value}\n onChange={onChange}\n >\n {options.map((option) => (\n <option value={option.value} key={option.value}>\n {option.label}\n </option>\n ))}\n </select>\n <div\n className={cn(\n !showChevrons && \"hidden\",\n \"row-start-1 col-start-1 self-center justify-self-end relative end-2 pointer-events-none\",\n )}\n >\n <ChevronsUpDownIcon size={14} />\n </div>\n </div>\n);\n","import { useState } from \"react\";\nimport { SyntaxHighlight } from \"../../../components/SyntaxHighlight.js\";\nimport { Card } from \"../../../ui/Card.js\";\nimport { SimpleSelect } from \"../SimpleSelect.js\";\n\nconst mimeTypeToLanguage = (mimeType: string) => {\n const mimeTypeMapping = {\n \"application/json\": \"json\",\n \"text/json\": \"json\",\n \"text/html\": \"html\",\n \"text/css\": \"css\",\n \"text/javascript\": \"javascript\",\n \"application/xml\": \"xml\",\n \"application/xhtml+xml\": \"xhtml\",\n };\n\n return Object.entries(mimeTypeMapping).find(([mime]) =>\n mimeType.includes(mime),\n )?.[1];\n};\n\nconst detectLanguage = (headers: Headers) => {\n const contentType = headers.get(\"Content-Type\") || \"\";\n return mimeTypeToLanguage(contentType);\n};\n\nconst tryParseJson = (body: string) => {\n try {\n return JSON.stringify(JSON.parse(body), null, 2);\n } catch {\n return null;\n }\n};\n\nexport const ResponseTab = ({\n body = \"\",\n headers,\n}: {\n body?: string;\n headers: Headers;\n}) => {\n const detectedLanguage = detectLanguage(headers);\n const jsonContent = tryParseJson(body);\n const beautifiedBody = jsonContent || body;\n const [view, setView] = useState<\"formatted\" | \"raw\">(\n jsonContent ? \"formatted\" : \"raw\",\n );\n\n return (\n <div className=\"flex flex-col gap-2\">\n <Card className=\"shadow-none\">\n <SyntaxHighlight\n language={\n view === \"raw\" ? (jsonContent ? \"plain\" : detectedLanguage) : \"json\"\n }\n noBackground\n // playground dialog has h-5/6 ≈ 83.333vh\n className=\"overflow-x-auto p-4 text-xs max-h-[calc(83.333vh-180px)]\"\n code={view === \"raw\" ? body : beautifiedBody}\n />\n </Card>\n {jsonContent && (\n <div className=\"flex justify-end\">\n <SimpleSelect\n value={view}\n onChange={(e) => setView(e.target.value as \"formatted\" | \"raw\")}\n options={[\n { value: \"formatted\", label: \"Formatted\" },\n { value: \"raw\", label: \"Raw\" },\n ]}\n />\n </div>\n )}\n </div>\n );\n};\n","import { useMutation } from \"@tanstack/react-query\";\nimport { Fragment, useEffect, useRef, useTransition } from \"react\";\nimport { FormProvider, useForm } from \"react-hook-form\";\nimport {\n Select,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"zudoku/ui/Select.js\";\nimport { useSelectedServerStore } from \"../../../authentication/state.js\";\nimport { useApiIdentities } from \"../../../components/context/ZudokuContext.js\";\nimport { Spinner } from \"../../../components/Spinner.js\";\nimport { Button } from \"../../../ui/Button.js\";\nimport { Callout } from \"../../../ui/Callout.js\";\nimport { Card, CardContent, CardHeader, CardTitle } from \"../../../ui/Card.js\";\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from \"../../../ui/Tabs.js\";\nimport { ColorizedParam } from \"../ColorizedParam.js\";\nimport { createUrl } from \"./createUrl.js\";\nimport { Headers } from \"./Headers.js\";\nimport { PathParams } from \"./PathParams.js\";\nimport { QueryParams } from \"./QueryParams.js\";\nimport { ResponseTab } from \"./ResponseTab.js\";\n\nexport const NO_IDENTITY = \"__none\";\n\nconst statusCodeMap: Record<number, string> = {\n 200: \"OK\",\n 201: \"Created\",\n 202: \"Accepted\",\n 204: \"No Content\",\n 400: \"Bad Request\",\n 401: \"Unauthorized\",\n 403: \"Forbidden\",\n 404: \"Not Found\",\n 405: \"Method Not Allowed\",\n 500: \"Internal Server Error\",\n};\n\nexport type Header = {\n name: string;\n defaultValue?: string;\n};\nexport type QueryParam = {\n name: string;\n defaultValue?: string;\n defaultActive?: boolean;\n isRequired?: boolean;\n};\nexport type PathParam = {\n name: string;\n defaultValue?: string;\n isRequired?: boolean;\n};\n\nexport type PlaygroundForm = {\n body: string;\n queryParams: Array<{ name: string; value: string; active: boolean }>;\n pathParams: Array<{ name: string; value: string }>;\n headers: Array<{ name: string; value: string }>;\n identity?: string;\n};\n\nexport type PlaygroundContentProps = {\n server: string;\n servers?: string[];\n url: string;\n method: string;\n headers?: Header[];\n queryParams?: QueryParam[];\n pathParams?: PathParam[];\n defaultBody?: string;\n};\n\nexport const Playground = ({\n server,\n servers,\n url,\n method,\n headers = [],\n queryParams = [],\n pathParams = [],\n defaultBody = \"\",\n}: PlaygroundContentProps) => {\n const { selectedServer, setSelectedServer } = useSelectedServerStore();\n const [, startTransition] = useTransition();\n const { register, control, handleSubmit, watch, setValue, ...form } =\n useForm<PlaygroundForm>({\n defaultValues: {\n body: defaultBody,\n queryParams: queryParams.map((param) => ({\n name: param.name,\n value: param.defaultValue ?? \"\",\n active: param.defaultActive ?? false,\n })),\n pathParams: pathParams.map((param) => ({\n name: param.name,\n value: param.defaultValue ?? \"\",\n })),\n headers: headers.map((header) => ({\n name: header.name,\n value: header.defaultValue ?? \"\",\n })),\n identity: NO_IDENTITY,\n },\n });\n const formState = watch();\n const identities = useApiIdentities();\n\n const setOnce = useRef(false);\n useEffect(() => {\n if (setOnce.current) return;\n const firstIdentity = identities.data?.at(0);\n if (firstIdentity) {\n setValue(\"identity\", firstIdentity.id);\n setOnce.current = true;\n }\n }, [setValue, identities.data]);\n\n const queryMutation = useMutation({\n mutationFn: async (data: PlaygroundForm) => {\n const requestUrl = createUrl(selectedServer ?? server, url, data);\n const start = performance.now();\n\n const request = new Request(requestUrl, {\n method: method.toUpperCase(),\n headers: Object.fromEntries(\n data.headers\n .filter((h) => h.name)\n .map((header) => [header.name, header.value]),\n ),\n body: data.body ? data.body : undefined,\n });\n\n if (data.identity !== NO_IDENTITY) {\n identities.data\n ?.find((i) => i.id === data.identity)\n ?.authorizeRequest(request);\n }\n try {\n const response = await fetch(request, {\n signal: AbortSignal.timeout(5000),\n });\n\n const time = performance.now() - start;\n\n const body = await response.text();\n\n return {\n status: response.status,\n headers: response.headers,\n size: body.length,\n body,\n time,\n };\n } catch (error) {\n if (error instanceof TypeError) {\n throw new Error(\n \"The request failed, possibly due to network issues or CORS policy.\",\n );\n } else {\n throw error;\n }\n }\n },\n });\n\n const path = url.split(\"/\").map((part, i, arr) => {\n const isPathParam =\n (part.startsWith(\"{\") && part.endsWith(\"}\")) || part.startsWith(\":\");\n const replaced = part.replace(/[:{}]/g, \"\");\n const value = formState.pathParams.find((p) => p.name === replaced)?.value;\n\n const pathParamValue = value ? (\n <ColorizedParam backgroundOpacity=\"25%\" name={part} slug={part}>\n {encodeURIComponent(value)}\n </ColorizedParam>\n ) : (\n <span\n className=\"underline decoration-wavy decoration-red-500\"\n title={`Missing value for path parameter \\`${replaced}\\``}\n >\n {part}\n </span>\n );\n\n return (\n // eslint-disable-next-line react/no-array-index-key\n <Fragment key={part + i}>\n {isPathParam ? pathParamValue : part}\n {i < arr.length - 1 && \"/\"}\n <wbr />\n </Fragment>\n );\n });\n\n const headerEntries = Array.from(queryMutation.data?.headers.entries() ?? []);\n\n const urlQueryParams = formState.queryParams\n .filter((p) => p.active)\n .map((p, i, arr) => (\n <Fragment key={p.name}>\n {p.name}={encodeURIComponent(p.value).replaceAll(\"%20\", \"+\")}\n {i < arr.length - 1 && \"&\"}\n <wbr />\n </Fragment>\n ));\n\n const serverSelect = (\n <div className=\"inline-block opacity-50 hover:opacity-100 transition\">\n {servers && servers.length > 1 ? (\n <Select\n onValueChange={(value) => {\n startTransition(() => {\n setSelectedServer(value);\n });\n }}\n value={selectedServer}\n >\n <SelectTrigger className=\"p-0 border-none flex-row-reverse bg-transparent text-xs gap-0.5 h-auto\">\n <SelectValue />\n </SelectTrigger>\n <SelectContent>\n {servers.map((s) => (\n <SelectItem key={s} value={s}>\n {s.replace(/^https?:\\/\\//, \"\")}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n ) : (\n <span>{server.replace(/^https?:\\/\\//, \"\")}</span>\n )}\n </div>\n );\n\n return (\n <FormProvider\n {...{ register, control, handleSubmit, watch, setValue, ...form }}\n >\n <form onSubmit={handleSubmit((data) => queryMutation.mutateAsync(data))}>\n <div className=\"grid grid-cols-[8fr_7fr] text-sm h-full\">\n <div className=\"flex flex-col gap-4 p-8 bg-muted/50 after:bg-muted-foreground/20 relative after:absolute after:w-px after:inset-0 after:left-auto\">\n <div className=\"flex gap-2 items-stretch\">\n <div className=\"flex flex-1 items-center w-full border rounded-md\">\n <div className=\"border-r p-2 bg-muted rounded-l-md self-stretch font-semibold font-mono\">\n {method.toUpperCase()}\n </div>\n <div className=\"flex items-center flex-wrap p-2 font-mono text-xs\">\n {serverSelect}\n {path}\n {urlQueryParams.length > 0 ? \"?\" : \"\"}\n {urlQueryParams}\n </div>\n </div>\n <Button type=\"submit\" className=\"h-auto flex gap-1\">\n Send\n </Button>\n </div>\n <Tabs\n defaultValue={\n queryParams.length + pathParams.length > 0\n ? \"parameters\"\n : \"headers\"\n }\n >\n <div className=\"flex flex-wrap gap-1 justify-between\">\n <TabsList>\n {queryParams.length + pathParams.length > 0 && (\n <TabsTrigger value=\"parameters\">Parameters</TabsTrigger>\n )}\n <TabsTrigger value=\"headers\">\n Headers{\" \"}\n {formState.headers.length > 0 &&\n `(${formState.headers.length})`}\n </TabsTrigger>\n <TabsTrigger\n value=\"body\"\n disabled={\n ![\"POST\", \"PUT\", \"PATCH\", \"DELETE\"].includes(\n method.toUpperCase(),\n )\n }\n >\n Body\n </TabsTrigger>\n </TabsList>\n <div className=\"flex gap-2 items-center\">\n Auth:\n <Select\n onValueChange={(value) => setValue(\"identity\", value)}\n value={formState.identity}\n defaultValue={formState.identity}\n >\n <SelectTrigger className=\"w-[180px] flex\">\n {identities.isPending ? <Spinner /> : <SelectValue />}\n </SelectTrigger>\n <SelectContent align=\"center\">\n <SelectItem value={NO_IDENTITY}>None</SelectItem>\n {identities.data?.map((identity) => (\n <SelectItem key={identity.id} value={identity.id}>\n {identity.label}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n </div>\n <TabsContent value=\"headers\">\n <Headers control={control} register={register} />\n </TabsContent>\n <TabsContent value=\"parameters\">\n {pathParams.length > 0 && (\n <div className=\"flex flex-col gap-4 my-4\">\n <span className=\"font-semibold\">Path Parameters</span>\n <PathParams control={control} />\n </div>\n )}\n {queryParams.length > 0 && (\n <div className=\"flex flex-col gap-4 my-4\">\n <span className=\"font-semibold\">Query Parameters</span>\n <QueryParams control={control} queryParams={queryParams} />\n </div>\n )}\n </TabsContent>\n <TabsContent value=\"body\">\n <textarea\n {...register(\"body\")}\n className=\"border w-full rounded p-2 bg-muted h-40\"\n />\n </TabsContent>\n </Tabs>\n </div>\n <div className=\"min-w-0 p-8 bg-muted/70\">\n {queryMutation.error ? (\n <div className=\"flex flex-col gap-2\">\n {formState.pathParams.some((p) => p.value === \"\") && (\n <Callout type=\"caution\">\n Some path parameters are missing values. Please fill them in\n to ensure the request is sent correctly.\n </Callout>\n )}\n <Card>\n <CardHeader>\n <CardTitle>Request failed</CardTitle>\n </CardHeader>\n <CardContent>\n Error:{\" \"}\n {queryMutation.error.message ||\n String(queryMutation.error) ||\n \"Unexpected error\"}\n </CardContent>\n </Card>\n </div>\n ) : queryMutation.data ? (\n <div className=\"flex flex-col gap-2\">\n <div className=\"flex gap-2\">\n <div className=\"flex text-xs gap-6\">\n <div>\n Status: {queryMutation.data.status}{\" \"}\n {statusCodeMap[queryMutation.data.status] ?? \"\"}\n </div>\n <div>Time: {queryMutation.data.time.toFixed(0)}ms</div>\n <div>Size: {queryMutation.data.size} B</div>\n </div>\n </div>\n <Tabs defaultValue=\"response\">\n <TabsList>\n <TabsTrigger value=\"response\">Response</TabsTrigger>\n <TabsTrigger value=\"headers\">\n {headerEntries.length\n ? `Headers (${headerEntries.length})`\n : \"No headers\"}\n </TabsTrigger>\n </TabsList>\n\n <TabsContent value=\"response\">\n <ResponseTab\n headers={queryMutation.data.headers}\n body={queryMutation.data.body}\n />\n </TabsContent>\n <TabsContent value=\"headers\">\n <Card\n // playground dialog has h-5/6 ≈ 83.333vh\n className=\"max-h-[calc(83.333vh-140px)] overflow-y-auto grid grid-cols-2 w-full gap-2.5 font-mono text-xs shadow-none p-4\"\n >\n <div className=\"font-semibold\">Key</div>\n <div className=\"font-semibold\">Value</div>\n {headerEntries.map(([key, value]) => (\n <Fragment key={key}>\n <div>{key}</div>\n <div className=\"break-words\">{value}</div>\n </Fragment>\n ))}\n </Card>\n </TabsContent>\n </Tabs>\n </div>\n ) : (\n <div className=\"grid place-items-center h-full\">\n <span className=\"text-[16px] font-semibold text-muted-foreground\">\n {queryMutation.isPending ? (\n <Spinner />\n ) : (\n \"Send a request first to see the response here\"\n )}\n </span>\n </div>\n )}\n </div>\n </div>\n </form>\n </FormProvider>\n );\n};\n\nexport default Playground;\n","import { VisuallyHidden } from \"@radix-ui/react-visually-hidden\";\nimport { type PropsWithChildren, useState } from \"react\";\nimport {\n Dialog,\n DialogContent,\n DialogTitle,\n DialogTrigger,\n} from \"zudoku/ui/Dialog.js\";\nimport { Playground, type PlaygroundContentProps } from \"./Playground.js\";\n\nexport type PlaygroundDialogProps = PropsWithChildren<PlaygroundContentProps>;\n\nconst HeroPlayIcon = ({\n className,\n size = 16,\n}: {\n className?: string;\n size?: number;\n}) => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 24 24\"\n fill=\"currentColor\"\n className={className}\n width={size}\n height={size}\n >\n <path\n fillRule=\"evenodd\"\n d=\"M2.25 12c0-5.385 4.365-9.75 9.75-9.75s9.75 4.365 9.75 9.75-4.365 9.75-9.75 9.75S2.25 17.385 2.25 12Zm14.024-.983a1.125 1.125 0 0 1 0 1.966l-5.603 3.113A1.125 1.125 0 0 1 9 15.113V8.887c0-.857.921-1.4 1.671-.983l5.603 3.113Z\"\n clipRule=\"evenodd\"\n />\n </svg>\n);\n\nconst PlaygroundDialog = (props: PlaygroundDialogProps) => {\n const [open, setOpen] = useState(false);\n return (\n <Dialog onOpenChange={(open) => setOpen(open)}>\n <DialogTrigger asChild>\n {props.children ?? (\n <button className=\"flex gap-1 items-center px-2 py-1 rounded-md bg-primary/80 hover:bg-primary transition text-primary-foreground text-xs\">\n Test\n <HeroPlayIcon className=\"\" size={14} />\n </button>\n )}\n </DialogTrigger>\n\n <DialogContent\n className=\"max-w-screen-xl w-full h-5/6 overflow-auto p-0\"\n aria-describedby={undefined}\n >\n <VisuallyHidden>\n <DialogTitle>Playground</DialogTitle>\n </VisuallyHidden>\n {open && <Playground {...props} />}\n </DialogContent>\n </Dialog>\n );\n};\n\nexport { PlaygroundDialog };\n","import { matchPath, type RouteObject } from \"react-router-dom\";\nimport { type ZudokuPlugin } from \"../../core/plugins.js\";\nimport { graphql } from \"./graphql/index.js\";\n\nimport { useQuery } from \"@tanstack/react-query\";\nimport { CirclePlayIcon, LogInIcon } from \"lucide-react\";\nimport type { SidebarItem } from \"../../../config/validators/SidebarSchema.js\";\nimport { useAuth } from \"../../authentication/hook.js\";\nimport { ColorMap } from \"../../components/navigation/SidebarBadge.js\";\nimport { Button } from \"../../ui/Button.js\";\nimport { joinPath } from \"../../util/joinPath.js\";\nimport { GraphQLClient } from \"./client/GraphQLClient.js\";\nimport { OasPluginConfig } from \"./interfaces.js\";\nimport type { PlaygroundContentProps } from \"./playground/Playground.js\";\nimport { PlaygroundDialog } from \"./playground/PlaygroundDialog.js\";\n\nconst GetCategoriesQuery = graphql(`\n query GetCategories($input: JSON!, $type: SchemaType!) {\n schema(input: $input, type: $type) {\n url\n tags {\n __typename\n name\n operations {\n __typename\n slug\n deprecated\n method\n summary\n operationId\n path\n }\n }\n }\n }\n`);\n\ntype InternalOasPluginConfig = { inMemory?: boolean };\n\nconst MethodColorMap: Record<string, keyof typeof ColorMap> = {\n get: \"green\",\n post: \"blue\",\n put: \"yellow\",\n delete: \"red\",\n patch: \"purple\",\n options: \"gray\",\n head: \"gray\",\n};\n\nexport type OpenApiPluginOptions = OasPluginConfig & InternalOasPluginConfig;\n\nexport const openApiPlugin = (config: OpenApiPluginOptions): ZudokuPlugin => {\n const basePath = joinPath(config.navigationId ?? \"/reference\");\n\n const client = new GraphQLClient(config);\n\n return {\n getHead: () => {\n if (config.type === \"url\" && !config.skipPreload) {\n return (\n <link\n rel=\"preload\"\n href={config.input}\n as=\"fetch\"\n crossOrigin=\"anonymous\"\n />\n );\n }\n\n if (config.server) {\n return <link rel=\"preconnect\" href={config.server} />;\n }\n },\n getMdxComponents: () => ({\n OpenPlaygroundButton: ({\n requireAuth,\n server,\n method,\n url,\n ...props\n }: Partial<PlaygroundContentProps> & { requireAuth: boolean }) => {\n const auth = useAuth();\n // We don't have the GraphQL context here\n const serverQuery = useQuery({\n queryFn: () =>\n client.fetch(GetCategoriesQuery, {\n type: config.type,\n input: config.input,\n }),\n enabled: !server,\n queryKey: [\"playground-server\"],\n });\n\n if (requireAuth && !auth.isAuthenticated) {\n return (\n <Button\n className=\"gap-2 items-center\"\n variant=\"outline\"\n onClick={auth.login}\n >\n Login to open in Playground <LogInIcon size={16} />\n </Button>\n );\n }\n\n return (\n <PlaygroundDialog\n url={url ?? \"/\"}\n method={method ?? \"get\"}\n server={\n server ?? serverQuery.data?.schema.url ?? \"https://example.com\"\n }\n {...props}\n >\n <Button className=\"gap-2 items-center\" variant=\"outline\">\n Open in Playground <CirclePlayIcon size={16} />\n </Button>\n </PlaygroundDialog>\n );\n },\n }),\n getSidebar: async (path: string) => {\n if (!matchPath({ path: basePath, end: false }, path)) {\n return [];\n }\n\n try {\n const data = await client.fetch(GetCategoriesQuery, {\n type: config.type,\n input: config.input,\n });\n\n const categories = data.schema.tags\n .filter((tag) => tag.operations.length > 0)\n .map<SidebarItem>((tag) => ({\n type: \"category\",\n label: tag.name || \"Other endpoints\",\n collapsible: true,\n collapsed: false,\n items: tag.operations.map((operation) => ({\n type: \"link\",\n label: operation.summary ?? operation.path,\n href: `#${operation.slug}`,\n badge: {\n label: operation.method,\n color: MethodColorMap[operation.method.toLowerCase()]!,\n },\n })),\n }));\n\n categories.unshift({\n type: \"link\",\n label: \"Overview\",\n href: \"#description\",\n });\n\n return categories;\n } catch {\n return [];\n }\n },\n getRoutes: () =>\n [\n {\n async lazy() {\n const { OpenApiRoute } = await import(\"./Route.js\");\n return {\n element: <OpenApiRoute client={client} config={config} />,\n };\n },\n children: [\n {\n path: basePath,\n children: [\n {\n index: true,\n async lazy() {\n const { OperationList } = await import(\n \"./OperationList.js\"\n );\n return { element: <OperationList /> };\n },\n },\n ],\n },\n ],\n },\n ] satisfies RouteObject[],\n };\n};\n"],"names":["TypedDocumentString","value","__meta__","__publicField","OperationsFragmentFragmentDoc","ServersQueryDocument","AllOperationsDocument","GetServerQueryDocument","GetCategoriesDocument","documents","types.ServersQueryDocument","types.OperationsFragmentFragmentDoc","types.AllOperationsDocument","types.GetServerQueryDocument","types.GetCategoriesDocument","graphql","source","assertError","err","isError","objectToString","obj","NAME","__name","getGlobalName","parseArguments","args","options","shortMessage","Layerr","errorOptionsOrMessage","messageText","message","ctor","cause","output","ENCODING","ENCODING_LEN","TIME_MAX","TIME_LEN","RANDOM_LEN","ERROR_INFO","detectPRNG","root","rootLookup","detectRoot","globalCrypto","buffer","inWebWorker","encodeRandom","len","prng","str","randomChar","encodeTime","now","mod","currentLen","rand","ulid","seedTime","currentPRNG","seed","localServerPromise","worker","resolveVariables","variables","throwIfError","response","_a","ZudokuError","GraphQLClient","config","__privateAdd","_mode","_pendingRequests","_port","_initializeLocalServer","m","query","operationName","body","__privateGet","result","localServer","initializeWorker","channel","__privateSet","e","id","resolve","c2n","c","s2n","s","a","pastellize","hue","saturation","lightness","DATA_ATTR","usePastellizedColor","name","resolvedTheme","useTheme","ColorizedParam","className","backgroundOpacity","borderOpacity","slug","children","onClick","ref","useRef","normalized","normalizedSlug","color","borderColor","backgroundColor","useEffect","onMouseEnter","el","onMouseLeave","jsx","cn","createUrl","host","path","data","filledPath","match","key","part","url","param","Headers","control","register","fields","append","remove","useFieldArray","jsxs","header","Input","Button","XIcon","PathParams","i","Controller","field","EraserIcon","createVariantComponent","tag","cvx","MyVariant","React","asChild","props","Comp","Slot","InlineInput","QueryParams","queryParams","form","useFormContext","requiredFields","hasSelectedIdentity","NO_IDENTITY","SimpleSelect","onChange","showChevrons","option","ChevronsUpDownIcon","mimeTypeToLanguage","mimeType","mime","detectLanguage","headers","contentType","tryParseJson","ResponseTab","detectedLanguage","jsonContent","beautifiedBody","view","setView","useState","Card","SyntaxHighlight","statusCodeMap","Playground","server","servers","method","pathParams","defaultBody","selectedServer","setSelectedServer","useSelectedServerStore","startTransition","useTransition","handleSubmit","watch","setValue","useForm","formState","identities","useApiIdentities","setOnce","firstIdentity","queryMutation","useMutation","requestUrl","start","request","h","_b","time","error","arr","isPathParam","replaced","p","pathParamValue","Fragment","headerEntries","urlQueryParams","serverSelect","Select","SelectTrigger","SelectValue","SelectContent","SelectItem","FormProvider","Tabs","TabsList","TabsTrigger","Spinner","identity","TabsContent","Callout","CardHeader","CardTitle","CardContent","HeroPlayIcon","size","PlaygroundDialog","open","setOpen","Dialog","DialogTrigger","DialogContent","VisuallyHidden","DialogTitle","GetCategoriesQuery","MethodColorMap","openApiPlugin","basePath","joinPath","client","requireAuth","auth","useAuth","serverQuery","useQuery","LogInIcon","CirclePlayIcon","matchPath","categories","operation","OpenApiRoute","OperationList"],"mappings":"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","x_google_ignoreList":[2,3,4,5,6]}
|
|
@@ -7,7 +7,7 @@ import { A as ze } from "./AuthenticationPlugin-D0Em0SwR.js";
|
|
|
7
7
|
import { g as De } from "./utils-DcpDOncX.js";
|
|
8
8
|
import { Z as Ne } from "./invariant-Caa8-XvF.js";
|
|
9
9
|
import { l as Ke } from "./index-Czzd9rjU.js";
|
|
10
|
-
import { u as
|
|
10
|
+
import { u as C } from "./state-tsXBLONe.js";
|
|
11
11
|
var pe = { exports: {} };
|
|
12
12
|
(function(t) {
|
|
13
13
|
(function(e, n) {
|
|
@@ -56,7 +56,7 @@ var pe = { exports: {} };
|
|
|
56
56
|
return _(l) || y.apply(this, arguments);
|
|
57
57
|
}
|
|
58
58
|
function h(l, m) {
|
|
59
|
-
var u = this,
|
|
59
|
+
var u = this, O, F, R, v = "loglevel";
|
|
60
60
|
typeof l == "string" ? v += ":" + l : typeof l == "symbol" && (v = void 0);
|
|
61
61
|
function Ce(d) {
|
|
62
62
|
var g = (a[d] || "silent").toUpperCase();
|
|
@@ -81,9 +81,9 @@ var pe = { exports: {} };
|
|
|
81
81
|
}
|
|
82
82
|
if (typeof d === n)
|
|
83
83
|
try {
|
|
84
|
-
var g = window.document.cookie,
|
|
84
|
+
var g = window.document.cookie, z = encodeURIComponent(v), re = g.indexOf(z + "=");
|
|
85
85
|
re !== -1 && (d = /^([^;]+)/.exec(
|
|
86
|
-
g.slice(re +
|
|
86
|
+
g.slice(re + z.length + 1)
|
|
87
87
|
)[1]);
|
|
88
88
|
} catch {
|
|
89
89
|
}
|
|
@@ -116,7 +116,7 @@ var pe = { exports: {} };
|
|
|
116
116
|
ERROR: 4,
|
|
117
117
|
SILENT: 5
|
|
118
118
|
}, u.methodFactory = m || T, u.getLevel = function() {
|
|
119
|
-
return R ?? F ??
|
|
119
|
+
return R ?? F ?? O;
|
|
120
120
|
}, u.setLevel = function(d, g) {
|
|
121
121
|
return R = U(d), g !== !1 && Ce(R), f.call(u);
|
|
122
122
|
}, u.setDefaultLevel = function(d) {
|
|
@@ -128,10 +128,10 @@ var pe = { exports: {} };
|
|
|
128
128
|
}, u.disableAll = function(d) {
|
|
129
129
|
u.setLevel(u.levels.SILENT, d);
|
|
130
130
|
}, u.rebuild = function() {
|
|
131
|
-
if (i !== u && (
|
|
131
|
+
if (i !== u && (O = U(i.getLevel())), f.call(u), i === u)
|
|
132
132
|
for (var d in r)
|
|
133
133
|
r[d].rebuild();
|
|
134
|
-
},
|
|
134
|
+
}, O = U(
|
|
135
135
|
i ? i.getLevel() : "WARN"
|
|
136
136
|
);
|
|
137
137
|
var ne = te();
|
|
@@ -146,9 +146,9 @@ var pe = { exports: {} };
|
|
|
146
146
|
i.methodFactory
|
|
147
147
|
)), u;
|
|
148
148
|
};
|
|
149
|
-
var
|
|
149
|
+
var J = typeof window !== n ? window.log : void 0;
|
|
150
150
|
return i.noConflict = function() {
|
|
151
|
-
return typeof window !== n && window.log === i && (window.log =
|
|
151
|
+
return typeof window !== n && window.log === i && (window.log = J), i;
|
|
152
152
|
}, i.getLoggers = function() {
|
|
153
153
|
return r;
|
|
154
154
|
}, i.default = i, i;
|
|
@@ -247,7 +247,7 @@ function Q(t) {
|
|
|
247
247
|
}
|
|
248
248
|
return t;
|
|
249
249
|
}
|
|
250
|
-
function
|
|
250
|
+
function L(t) {
|
|
251
251
|
return !(t === null || typeof t != "object" || Array.isArray(t));
|
|
252
252
|
}
|
|
253
253
|
function W(t) {
|
|
@@ -306,7 +306,7 @@ async function Xe(t, e) {
|
|
|
306
306
|
} catch (o) {
|
|
307
307
|
throw new s('failed to parse "response" body as JSON', { cause: o });
|
|
308
308
|
}
|
|
309
|
-
if (!
|
|
309
|
+
if (!L(n))
|
|
310
310
|
throw new s('"response" body must be a top level object');
|
|
311
311
|
if (!w(n.issuer))
|
|
312
312
|
throw new s('"response" body "issuer" property must be a non-empty string');
|
|
@@ -399,7 +399,7 @@ function be(t) {
|
|
|
399
399
|
throw new S("unsupported CryptoKey algorithm name");
|
|
400
400
|
}
|
|
401
401
|
}
|
|
402
|
-
function
|
|
402
|
+
function x(t) {
|
|
403
403
|
const e = t == null ? void 0 : t[K];
|
|
404
404
|
return typeof e == "number" && Number.isFinite(e) ? e : 0;
|
|
405
405
|
}
|
|
@@ -411,7 +411,7 @@ function $() {
|
|
|
411
411
|
return Math.floor(Date.now() / 1e3);
|
|
412
412
|
}
|
|
413
413
|
function ct(t, e) {
|
|
414
|
-
const n = $() +
|
|
414
|
+
const n = $() + x(e);
|
|
415
415
|
return {
|
|
416
416
|
jti: H(),
|
|
417
417
|
aud: [t.issuer, t.token_endpoint],
|
|
@@ -426,14 +426,14 @@ async function ut(t, e, n, o, a) {
|
|
|
426
426
|
const r = { alg: be(n), kid: o }, i = ct(t, e);
|
|
427
427
|
return a == null || a(r, i), ve(r, i, n);
|
|
428
428
|
}
|
|
429
|
-
function
|
|
429
|
+
function I(t) {
|
|
430
430
|
if (typeof t != "object" || t === null)
|
|
431
431
|
throw new TypeError('"as" must be an object');
|
|
432
432
|
if (!w(t.issuer))
|
|
433
433
|
throw new TypeError('"as.issuer" property must be a non-empty string');
|
|
434
434
|
return !0;
|
|
435
435
|
}
|
|
436
|
-
function
|
|
436
|
+
function j(t) {
|
|
437
437
|
if (typeof t != "object" || t === null)
|
|
438
438
|
throw new TypeError('"client" must be an object');
|
|
439
439
|
if (!w(t.client_id))
|
|
@@ -542,7 +542,7 @@ async function pt(t, e, n, o, a, r) {
|
|
|
542
542
|
throw new TypeError('"accessToken" must be a non-empty string');
|
|
543
543
|
if (!(n instanceof URL))
|
|
544
544
|
throw new TypeError('"url" must be an instance of URL');
|
|
545
|
-
return o = W(o), (r == null ? void 0 : r.DPoP) === void 0 ? o.set("authorization", `Bearer ${t}`) : (await dt(o, r.DPoP, n, e.toUpperCase(),
|
|
545
|
+
return o = W(o), (r == null ? void 0 : r.DPoP) === void 0 ? o.set("authorization", `Bearer ${t}`) : (await dt(o, r.DPoP, n, e.toUpperCase(), x({ [K]: r == null ? void 0 : r[K] }), t), o.set("authorization", `DPoP ${t}`)), ((r == null ? void 0 : r[Y]) || fetch)(n.href, {
|
|
546
546
|
body: a,
|
|
547
547
|
headers: Object.fromEntries(o.entries()),
|
|
548
548
|
method: e,
|
|
@@ -551,11 +551,11 @@ async function pt(t, e, n, o, a, r) {
|
|
|
551
551
|
}).then(Q);
|
|
552
552
|
}
|
|
553
553
|
async function wt(t, e, n, o) {
|
|
554
|
-
|
|
554
|
+
I(t), j(e);
|
|
555
555
|
const a = Se(t, "userinfo_endpoint", Te(e, o)), r = W(o == null ? void 0 : o.headers);
|
|
556
556
|
return e.userinfo_signed_response_alg ? r.set("accept", "application/jwt") : (r.set("accept", "application/json"), r.append("accept", "application/jwt")), pt(n, "GET", a, r, null, {
|
|
557
557
|
...o,
|
|
558
|
-
[K]:
|
|
558
|
+
[K]: x(e)
|
|
559
559
|
});
|
|
560
560
|
}
|
|
561
561
|
async function mt(t, e, n, o, a, r, i) {
|
|
@@ -574,7 +574,7 @@ async function ke(t, e, n, o, a) {
|
|
|
574
574
|
return i.set("accept", "application/json"), mt(t, e, "POST", r, o, i, a);
|
|
575
575
|
}
|
|
576
576
|
async function gt(t, e, n, o) {
|
|
577
|
-
if (
|
|
577
|
+
if (I(t), j(e), !w(n))
|
|
578
578
|
throw new TypeError('"refreshToken" must be a non-empty string');
|
|
579
579
|
const a = new URLSearchParams(o == null ? void 0 : o.additionalParameters);
|
|
580
580
|
return a.set("refresh_token", n), ke(t, e, "refresh_token", a, o);
|
|
@@ -589,7 +589,7 @@ function yt(t) {
|
|
|
589
589
|
return e[0];
|
|
590
590
|
}
|
|
591
591
|
async function Ee(t, e, n, o = !1, a = !1) {
|
|
592
|
-
if (
|
|
592
|
+
if (I(t), j(e), !Z(n, Response))
|
|
593
593
|
throw new TypeError('"response" must be an instance of Response');
|
|
594
594
|
if (n.status !== 200) {
|
|
595
595
|
let i;
|
|
@@ -604,7 +604,7 @@ async function Ee(t, e, n, o = !1, a = !1) {
|
|
|
604
604
|
} catch (i) {
|
|
605
605
|
throw new s('failed to parse "response" body as JSON', { cause: i });
|
|
606
606
|
}
|
|
607
|
-
if (!
|
|
607
|
+
if (!L(r))
|
|
608
608
|
throw new s('"response" body must be a top level object');
|
|
609
609
|
if (!w(r.access_token))
|
|
610
610
|
throw new s('"response" body "access_token" property must be a non-empty string');
|
|
@@ -622,7 +622,7 @@ async function Ee(t, e, n, o = !1, a = !1) {
|
|
|
622
622
|
if (r.id_token !== void 0 && !w(r.id_token))
|
|
623
623
|
throw new s('"response" body "id_token" property must be a non-empty string');
|
|
624
624
|
if (r.id_token) {
|
|
625
|
-
const { claims: i, jwt: c } = await Lt(r.id_token, xt.bind(void 0, e.id_token_signed_response_alg, t.id_token_signing_alg_values_supported), Ue,
|
|
625
|
+
const { claims: i, jwt: c } = await Lt(r.id_token, xt.bind(void 0, e.id_token_signed_response_alg, t.id_token_signing_alg_values_supported), Ue, x(e), _e(e), e[$e]).then(At.bind(void 0, ["aud", "exp", "iat", "iss", "sub"])).then(vt.bind(void 0, t.issuer)).then(_t.bind(void 0, e.client_id));
|
|
626
626
|
if (Array.isArray(i.aud) && i.aud.length !== 1) {
|
|
627
627
|
if (i.azp === void 0)
|
|
628
628
|
throw new s('ID Token "aud" (audience) claim includes additional untrusted audiences');
|
|
@@ -657,7 +657,7 @@ function St(t) {
|
|
|
657
657
|
return Re.add(t), t;
|
|
658
658
|
}
|
|
659
659
|
async function Tt(t, e, n, o, a, r) {
|
|
660
|
-
if (
|
|
660
|
+
if (I(t), j(e), !Re.has(n))
|
|
661
661
|
throw new TypeError('"callbackParameters" must be an instance of URLSearchParams obtained from "validateAuthResponse()", or "validateJwtAuthResponse()');
|
|
662
662
|
if (!w(o))
|
|
663
663
|
throw new TypeError('"redirectUri" must be a non-empty string');
|
|
@@ -705,7 +705,7 @@ async function Rt(t, e, n, o, a) {
|
|
|
705
705
|
if (a !== B) {
|
|
706
706
|
if (typeof a != "number" || a < 0)
|
|
707
707
|
throw new TypeError('"maxAge" must be a non-negative number');
|
|
708
|
-
const c = $() +
|
|
708
|
+
const c = $() + x(e), p = _e(e);
|
|
709
709
|
if (i.auth_time + a < c - p)
|
|
710
710
|
throw new s("too much time has elapsed since the last End-User authentication");
|
|
711
711
|
}
|
|
@@ -734,7 +734,7 @@ async function Pt(t) {
|
|
|
734
734
|
ee(t);
|
|
735
735
|
try {
|
|
736
736
|
const e = await t.json();
|
|
737
|
-
if (
|
|
737
|
+
if (L(e) && typeof e.error == "string" && e.error.length)
|
|
738
738
|
return e.error_description !== void 0 && typeof e.error_description != "string" && delete e.error_description, e.error_uri !== void 0 && typeof e.error_uri != "string" && delete e.error_uri, e.algs !== void 0 && typeof e.algs != "string" && delete e.algs, e.scope !== void 0 && typeof e.scope != "string" && delete e.scope, e;
|
|
739
739
|
} catch {
|
|
740
740
|
}
|
|
@@ -804,7 +804,7 @@ async function Lt(t, e, n, o, a, r) {
|
|
|
804
804
|
} catch (l) {
|
|
805
805
|
throw new s("failed to parse JWT Header body as base64url encoded JSON", { cause: l });
|
|
806
806
|
}
|
|
807
|
-
if (!
|
|
807
|
+
if (!L(f))
|
|
808
808
|
throw new s("JWT Header must be a top level object");
|
|
809
809
|
if (e(f), f.crit !== void 0)
|
|
810
810
|
throw new s('unexpected JWT "crit" header parameter');
|
|
@@ -817,13 +817,13 @@ async function Lt(t, e, n, o, a, r) {
|
|
|
817
817
|
} catch (l) {
|
|
818
818
|
throw new s("failed to parse JWT Payload body as base64url encoded JSON", { cause: l });
|
|
819
819
|
}
|
|
820
|
-
if (!
|
|
820
|
+
if (!L(h))
|
|
821
821
|
throw new s("JWT Payload must be a top level object");
|
|
822
|
-
const
|
|
822
|
+
const J = $() + o;
|
|
823
823
|
if (h.exp !== void 0) {
|
|
824
824
|
if (typeof h.exp != "number")
|
|
825
825
|
throw new s('unexpected JWT "exp" (expiration time) claim type');
|
|
826
|
-
if (h.exp <=
|
|
826
|
+
if (h.exp <= J - a)
|
|
827
827
|
throw new s('unexpected JWT "exp" (expiration time) claim value, timestamp is <= now()');
|
|
828
828
|
}
|
|
829
829
|
if (h.iat !== void 0 && typeof h.iat != "number")
|
|
@@ -833,7 +833,7 @@ async function Lt(t, e, n, o, a, r) {
|
|
|
833
833
|
if (h.nbf !== void 0) {
|
|
834
834
|
if (typeof h.nbf != "number")
|
|
835
835
|
throw new s('unexpected JWT "nbf" (not before) claim type');
|
|
836
|
-
if (h.nbf >
|
|
836
|
+
if (h.nbf > J + a)
|
|
837
837
|
throw new s('unexpected JWT "nbf" (not before) claim value, timestamp is > now()');
|
|
838
838
|
}
|
|
839
839
|
if (h.aud !== void 0 && typeof h.aud != "string" && !Array.isArray(h.aud))
|
|
@@ -862,7 +862,7 @@ function k(t, e) {
|
|
|
862
862
|
}
|
|
863
863
|
const It = Symbol(), jt = Symbol();
|
|
864
864
|
function Jt(t, e, n, o) {
|
|
865
|
-
if (
|
|
865
|
+
if (I(t), j(e), n instanceof URL && (n = n.searchParams), !(n instanceof URLSearchParams))
|
|
866
866
|
throw new TypeError('"parameters" must be an instance of URLSearchParams, or URL');
|
|
867
867
|
if (k(n, "response"))
|
|
868
868
|
throw new s('"parameters" contains a JARM response, use validateJwtAuthResponse() instead of validateAuthResponse()');
|
|
@@ -961,7 +961,7 @@ class Dt {
|
|
|
961
961
|
b(this, "redirectToAfterSignOut");
|
|
962
962
|
b(this, "audience");
|
|
963
963
|
b(this, "signOut", async () => {
|
|
964
|
-
|
|
964
|
+
C.setState({
|
|
965
965
|
isAuthenticated: !1,
|
|
966
966
|
isPending: !1,
|
|
967
967
|
profile: void 0,
|
|
@@ -1017,7 +1017,7 @@ class Dt {
|
|
|
1017
1017
|
emailVerified: y.email_verified ?? !1,
|
|
1018
1018
|
pictureUrl: y.picture
|
|
1019
1019
|
};
|
|
1020
|
-
|
|
1020
|
+
C.setState({
|
|
1021
1021
|
isAuthenticated: !0,
|
|
1022
1022
|
isPending: !1,
|
|
1023
1023
|
profile: T
|
|
@@ -1055,7 +1055,7 @@ class Dt {
|
|
|
1055
1055
|
expiresOn: new Date(Date.now() + e.expires_in * 1e3),
|
|
1056
1056
|
tokenType: e.token_type
|
|
1057
1057
|
};
|
|
1058
|
-
|
|
1058
|
+
C.setState({
|
|
1059
1059
|
providerData: n
|
|
1060
1060
|
});
|
|
1061
1061
|
}
|
|
@@ -1098,13 +1098,18 @@ class Dt {
|
|
|
1098
1098
|
location.href = c.href;
|
|
1099
1099
|
}
|
|
1100
1100
|
async getAccessToken() {
|
|
1101
|
-
const e = await this.getAuthServer(), { providerData: n } =
|
|
1101
|
+
const e = await this.getAuthServer(), { providerData: n } = C.getState();
|
|
1102
1102
|
if (!n)
|
|
1103
1103
|
throw new P("User is not authenticated");
|
|
1104
1104
|
const o = n;
|
|
1105
|
-
if (o.expiresOn < /* @__PURE__ */ new Date()) {
|
|
1105
|
+
if (new Date(o.expiresOn) < /* @__PURE__ */ new Date()) {
|
|
1106
1106
|
if (!o.refreshToken)
|
|
1107
|
-
return
|
|
1107
|
+
return C.setState({
|
|
1108
|
+
isAuthenticated: !1,
|
|
1109
|
+
isPending: !1,
|
|
1110
|
+
profile: null,
|
|
1111
|
+
providerData: null
|
|
1112
|
+
}), "";
|
|
1108
1113
|
const a = await gt(
|
|
1109
1114
|
e,
|
|
1110
1115
|
this.client,
|