@rafads/plugin-openapi 1.5.38
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/README.md +83 -0
- package/dist/AddOpenApiIntegration-JPAEXE56.js +512 -0
- package/dist/AddOpenApiIntegration-JPAEXE56.js.map +1 -0
- package/dist/OpenApiAccountsPanel-GZFDSTAU.js +106 -0
- package/dist/OpenApiAccountsPanel-GZFDSTAU.js.map +1 -0
- package/dist/UpdateSpecSection-KUSNI44Q.js +106 -0
- package/dist/UpdateSpecSection-KUSNI44Q.js.map +1 -0
- package/dist/api/group.d.ts +239 -0
- package/dist/api/handlers.d.ts +7 -0
- package/dist/api/index.d.ts +237 -0
- package/dist/chunk-6V45G2XQ.js +199 -0
- package/dist/chunk-6V45G2XQ.js.map +1 -0
- package/dist/chunk-CURJJXB3.js +132 -0
- package/dist/chunk-CURJJXB3.js.map +1 -0
- package/dist/chunk-CXFO6TLJ.js +39 -0
- package/dist/chunk-CXFO6TLJ.js.map +1 -0
- package/dist/chunk-HTHEUUJA.js +2873 -0
- package/dist/chunk-HTHEUUJA.js.map +1 -0
- package/dist/chunk-IG6QTTZB.js +79 -0
- package/dist/chunk-IG6QTTZB.js.map +1 -0
- package/dist/chunk-O2LMSZ2Z.js +120 -0
- package/dist/chunk-O2LMSZ2Z.js.map +1 -0
- package/dist/chunk-OR27BCXQ.js +956 -0
- package/dist/chunk-OR27BCXQ.js.map +1 -0
- package/dist/chunk-R7TVM3XD.js +275 -0
- package/dist/chunk-R7TVM3XD.js.map +1 -0
- package/dist/client.js +38 -0
- package/dist/client.js.map +1 -0
- package/dist/core.js +331 -0
- package/dist/core.js.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/providers/google/config.d.ts +34 -0
- package/dist/providers/google/discovery.d.ts +49 -0
- package/dist/providers/google/discovery.test.d.ts +1 -0
- package/dist/providers/google/index.d.ts +5 -0
- package/dist/providers/google/oauth-scopes.d.ts +3 -0
- package/dist/providers/google/oauth-scopes.test.d.ts +1 -0
- package/dist/providers/google/openapi-ownership-migration.d.ts +7 -0
- package/dist/providers/google/openapi-ownership-migration.test.d.ts +1 -0
- package/dist/providers/google/presets.d.ts +31 -0
- package/dist/providers/google/presets.test.d.ts +1 -0
- package/dist/providers/google/spec-format-adapter.d.ts +3 -0
- package/dist/providers/google/spec-format-adapter.test.d.ts +1 -0
- package/dist/providers/google.js +1446 -0
- package/dist/providers/google.js.map +1 -0
- package/dist/providers/microsoft/graph.d.ts +76 -0
- package/dist/providers/microsoft/graph.test.d.ts +1 -0
- package/dist/providers/microsoft/index.d.ts +3 -0
- package/dist/providers/microsoft/presets.d.ts +46 -0
- package/dist/providers/microsoft/presets.test.d.ts +1 -0
- package/dist/providers/microsoft/spec-format-adapter.d.ts +2 -0
- package/dist/providers/microsoft/spec-format-adapter.test.d.ts +1 -0
- package/dist/providers/microsoft.js +1056 -0
- package/dist/providers/microsoft.js.map +1 -0
- package/dist/react/AddOpenApiIntegration.d.ts +22 -0
- package/dist/react/AddOpenApiIntegration.test.d.ts +1 -0
- package/dist/react/OpenApiAccountsPanel.d.ts +6 -0
- package/dist/react/OpenApiIntegrationDetailsFields.d.ts +25 -0
- package/dist/react/UpdateSpecSection.d.ts +2 -0
- package/dist/react/atoms.d.ts +317 -0
- package/dist/react/auth-method-config.d.ts +18 -0
- package/dist/react/auth-method-config.test.d.ts +1 -0
- package/dist/react/client.d.ts +233 -0
- package/dist/react/index.d.ts +5 -0
- package/dist/react/integration-plugin.d.ts +6 -0
- package/dist/react/plugin-client.d.ts +2 -0
- package/dist/sdk/backing.d.ts +188 -0
- package/dist/sdk/client-credentials-oauth.test.d.ts +1 -0
- package/dist/sdk/compiled-spec-cache.test.d.ts +1 -0
- package/dist/sdk/config.d.ts +81 -0
- package/dist/sdk/configure.test.d.ts +1 -0
- package/dist/sdk/definitions.d.ts +57 -0
- package/dist/sdk/derive-auth.d.ts +11 -0
- package/dist/sdk/describe-auth-methods.test.d.ts +1 -0
- package/dist/sdk/errors.d.ts +45 -0
- package/dist/sdk/extract.d.ts +157 -0
- package/dist/sdk/extract.test.d.ts +1 -0
- package/dist/sdk/form-urlencoded-body.test.d.ts +1 -0
- package/dist/sdk/index.d.ts +19 -0
- package/dist/sdk/index.test.d.ts +1 -0
- package/dist/sdk/invoke.d.ts +150 -0
- package/dist/sdk/migrate-config.d.ts +4 -0
- package/dist/sdk/migrate-config.test.d.ts +1 -0
- package/dist/sdk/multi-scope-bearer.test.d.ts +1 -0
- package/dist/sdk/multi-scope-oauth.test.d.ts +1 -0
- package/dist/sdk/ndjson-output-migration.d.ts +13 -0
- package/dist/sdk/ndjson-output-migration.test.d.ts +1 -0
- package/dist/sdk/non-json-body.test.d.ts +1 -0
- package/dist/sdk/oauth-refresh.test.d.ts +1 -0
- package/dist/sdk/openapi-utils.d.ts +65 -0
- package/dist/sdk/output-schema-migration.d.ts +21 -0
- package/dist/sdk/output-schema-migration.test.d.ts +1 -0
- package/dist/sdk/parse.d.ts +33 -0
- package/dist/sdk/parse.test.d.ts +1 -0
- package/dist/sdk/plugin.d.ts +109 -0
- package/dist/sdk/plugin.test.d.ts +1 -0
- package/dist/sdk/presets.d.ts +15 -0
- package/dist/sdk/preview-oauth2.test.d.ts +1 -0
- package/dist/sdk/preview.d.ts +514 -0
- package/dist/sdk/query-serialization.test.d.ts +1 -0
- package/dist/sdk/real-specs.test.d.ts +1 -0
- package/dist/sdk/request-user-agent.test.d.ts +1 -0
- package/dist/sdk/response-headers-timeout.test.d.ts +1 -0
- package/dist/sdk/server-url-resolution.test.d.ts +1 -0
- package/dist/sdk/spec-blob-migration.d.ts +7 -0
- package/dist/sdk/spec-blob.test.d.ts +1 -0
- package/dist/sdk/spec-format.d.ts +36 -0
- package/dist/sdk/spec-format.test.d.ts +1 -0
- package/dist/sdk/split.d.ts +84 -0
- package/dist/sdk/store.d.ts +49 -0
- package/dist/sdk/store.test.d.ts +1 -0
- package/dist/sdk/streaming-response.test.d.ts +1 -0
- package/dist/sdk/tool-row-projection.test.d.ts +1 -0
- package/dist/sdk/types.d.ts +352 -0
- package/dist/sdk/upstream-failures.test.d.ts +1 -0
- package/dist/sdk/usage-scope-isolation.test.d.ts +1 -0
- package/dist/testing/index.d.ts +177 -0
- package/dist/testing.js +454 -0
- package/dist/testing.js.map +1 -0
- package/dist/testing.test.d.ts +1 -0
- package/package.json +103 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/testing/index.ts"],"sourcesContent":["import { Context, Data, Effect, Layer, Predicate, Ref, Schema, Scope } from \"effect\";\nimport {\n HttpClient,\n HttpRouter,\n HttpServerRequest,\n HttpServerResponse,\n} from \"effect/unstable/http\";\nimport {\n HttpApi,\n HttpApiBuilder,\n HttpApiEndpoint,\n HttpApiGroup,\n OpenApi,\n} from \"effect/unstable/httpapi\";\nimport { OAuthTestServer, serveTestHttpServerLayer } from \"@rafads/sdk/testing\";\nimport {\n AuthTemplateSlug,\n ConnectionName,\n IntegrationSlug,\n ProviderItemId,\n ProviderKey,\n ToolAddress,\n isToolResult,\n type Connection,\n type CreateConnectionInput,\n type Owner,\n type ToolAddress as ToolAddressType,\n} from \"@rafads/sdk/core\";\nimport type { OpenApiPluginExtension, OpenApiSpecConfig } from \"../sdk/plugin\";\n\nexport class OpenApiTestServerAddressError extends Data.TaggedError(\n \"OpenApiTestServerAddressError\",\n)<{\n readonly address: unknown;\n}> {}\n\nexport class OpenApiTestServerSpecError extends Data.TaggedError(\"OpenApiTestServerSpecError\")<{\n readonly cause: unknown;\n}> {}\n\nexport interface OpenApiTestServerShape {\n readonly baseUrl: string;\n readonly specJson: string;\n readonly httpClientLayer: Layer.Layer<HttpClient.HttpClient, never, never>;\n}\n\nexport interface OpenApiHttpApiTestServerOptions {\n readonly api: HttpApi.Any;\n readonly handlersLayer: Layer.Layer<any, any, any>;\n readonly specPath?: `/${string}`;\n readonly transformSpec?: (spec: Record<string, unknown>) => Record<string, unknown>;\n readonly captureSpecRequest?: (\n request: HttpServerRequest.HttpServerRequest,\n ) => Effect.Effect<void>;\n readonly guardSpecRequest?: (\n request: HttpServerRequest.HttpServerRequest,\n ) => Effect.Effect<HttpServerResponse.HttpServerResponse | null>;\n}\n\nexport interface OpenApiHttpApiTestServerShape extends OpenApiTestServerShape {\n readonly specUrl: string;\n}\n\nexport interface MutableOpenApiSpecTestServerShape extends OpenApiTestServerShape {\n readonly specUrl: string;\n readonly setApi: (api: HttpApi.Any) => Effect.Effect<void, OpenApiTestServerSpecError>;\n readonly requestCount: Effect.Effect<number>;\n}\n\nexport interface OpenApiTestRequest {\n readonly method: string;\n readonly url: string;\n readonly path: string;\n readonly headers: Readonly<Record<string, string>>;\n readonly body: string;\n}\n\nexport interface OpenApiEchoTestServerOptions {\n readonly transformSpec?: (spec: Record<string, unknown>) => Record<string, unknown>;\n readonly oauth2?: {\n readonly authorizationUrl: string;\n readonly tokenUrl: string;\n readonly scopes?: Readonly<Record<string, string>>;\n readonly validateAuthorization?: (authorization: string | null) => Effect.Effect<boolean>;\n readonly wwwAuthenticate?: string;\n };\n}\n\nexport interface OpenApiEchoTestServerShape extends OpenApiTestServerShape {\n readonly specUrl: string;\n readonly requests: Effect.Effect<readonly OpenApiTestRequest[]>;\n readonly clearRequests: Effect.Effect<void>;\n}\n\nexport type OpenApiTestIntegrationOptions = Omit<OpenApiSpecConfig, \"spec\" | \"baseUrl\" | \"slug\"> & {\n readonly baseUrl?: string | null;\n readonly slug?: string;\n};\n\nexport type OpenApiHttpApiTestIntegrationOptions = Omit<\n OpenApiSpecConfig,\n \"spec\" | \"slug\" | \"baseUrl\"\n> & {\n readonly slug?: string;\n readonly baseUrl?: string | null;\n readonly specBaseUrl?: string;\n readonly transformSpec?: (spec: Record<string, unknown>) => Record<string, unknown>;\n};\n\ntype OpenApiHttpApiAddSpecHeadersInput = {\n readonly headers?: Record<string, string>;\n readonly queryParams?: Record<string, string>;\n};\n\nexport type OpenApiHttpApiTestAddSpecPayloadOptions = Omit<\n OpenApiHttpApiTestIntegrationOptions,\n \"headers\" | \"queryParams\"\n> &\n OpenApiHttpApiAddSpecHeadersInput;\n\nexport type OpenApiTestIntegrationExecutor = {\n readonly openapi: Pick<OpenApiPluginExtension, \"addSpec\">;\n};\n\n// ---------------------------------------------------------------------------\n// v2 connection helper. In v2 a connection IS the credential and tools are\n// produced per-connection — so a test that invokes an openapi tool must\n// (1) addSpec to register the integration and (2) create a connection so the\n// tools are stamped + persisted. This helper does both and returns the\n// invokable address builder.\n// ---------------------------------------------------------------------------\n\nexport type OpenApiTestConnectionExecutor = {\n readonly openapi: Pick<OpenApiPluginExtension, \"addSpec\">;\n readonly connections: {\n readonly create: (input: CreateConnectionInput) => Effect.Effect<Connection, unknown>;\n };\n};\n\nexport interface OpenApiTestConnectionOptions {\n readonly slug?: string;\n readonly owner?: Owner;\n readonly connection?: string;\n readonly template?: string;\n /** Inline credential value. Defaults to a throwaway token via the in-memory\n * provider's `from` path is avoided — pass `value` to store a real secret. */\n readonly value?: string;\n readonly baseUrl?: string | null;\n}\n\nexport interface OpenApiTestConnection {\n readonly slug: string;\n readonly owner: Owner;\n readonly connection: string;\n readonly address: (tool: string) => ToolAddressType;\n}\n\n/** addSpec + connections.create from a raw server spec; returns an address\n * builder for `executor.execute`. */\nexport const addOpenApiTestConnection = (\n executor: OpenApiTestConnectionExecutor,\n server: OpenApiTestServerShape,\n integrationOptions: OpenApiTestIntegrationOptions,\n connectionOptions: OpenApiTestConnectionOptions = {},\n): Effect.Effect<OpenApiTestConnection, unknown> =>\n Effect.gen(function* () {\n const config = makeOpenApiTestIntegrationConfig(server, integrationOptions);\n const result = yield* executor.openapi.addSpec(config);\n const slug = String(result.slug);\n const owner: Owner = connectionOptions.owner ?? \"org\";\n const connection = connectionOptions.connection ?? \"main\";\n const template = connectionOptions.template ?? \"apiKey\";\n yield* executor.connections.create({\n owner,\n name: ConnectionName.make(connection),\n integration: IntegrationSlug.make(slug),\n template: AuthTemplateSlug.make(template),\n ...(connectionOptions.value !== undefined\n ? { value: connectionOptions.value }\n : {\n from: {\n provider: ProviderKey.make(\"memory\"),\n id: ProviderItemId.make(`${slug}-token`),\n },\n }),\n } satisfies CreateConnectionInput);\n return {\n slug,\n owner,\n connection,\n address: (tool: string) => ToolAddress.make(`tools.${slug}.${owner}.${connection}.${tool}`),\n };\n });\n\nexport interface OpenApiTestSpecOptions {\n readonly baseUrl?: string;\n readonly transformSpec?: (spec: Record<string, unknown>) => Record<string, unknown>;\n}\n\nexport const makeOpenApiTestSpecJson = (\n api: HttpApi.Any,\n options: OpenApiTestSpecOptions = {},\n): string => {\n const annotations = OpenApi.annotations({\n ...(options.baseUrl !== undefined ? { servers: [{ url: options.baseUrl }] } : {}),\n transform: options.transformSpec,\n });\n const annotated = (api as HttpApi.AnyWithProps).annotateMerge(annotations);\n return JSON.stringify(OpenApi.fromApi(annotated));\n};\n\nexport const makeOpenApiTestIntegrationConfig = (\n server: OpenApiTestServerShape,\n options: OpenApiTestIntegrationOptions,\n): OpenApiSpecConfig => {\n const { baseUrl, slug, ...rest } = options;\n return {\n ...rest,\n spec: { kind: \"blob\", value: server.specJson },\n slug: slug ?? \"test_api\",\n ...(baseUrl === null ? {} : { baseUrl: baseUrl ?? server.baseUrl }),\n } satisfies OpenApiSpecConfig;\n};\n\nexport const addOpenApiTestIntegration = (\n executor: OpenApiTestIntegrationExecutor,\n server: OpenApiTestServerShape,\n options: OpenApiTestIntegrationOptions,\n) => executor.openapi.addSpec(makeOpenApiTestIntegrationConfig(server, options));\n\nexport const makeOpenApiHttpApiTestIntegrationConfig = (\n api: HttpApi.Any,\n options: OpenApiHttpApiTestIntegrationOptions,\n): OpenApiSpecConfig => {\n const { baseUrl, specBaseUrl, transformSpec, slug, ...config } = options;\n return {\n ...config,\n spec: {\n kind: \"blob\",\n value: makeOpenApiTestSpecJson(api, { baseUrl: specBaseUrl, transformSpec }),\n },\n slug: slug ?? \"test_api\",\n ...(baseUrl === null ? {} : { baseUrl: baseUrl ?? specBaseUrl ?? \"https://api.example.test\" }),\n } satisfies OpenApiSpecConfig;\n};\n\nexport const addOpenApiHttpApiTestIntegration = (\n executor: OpenApiTestIntegrationExecutor,\n api: HttpApi.Any,\n options: OpenApiHttpApiTestIntegrationOptions,\n) => executor.openapi.addSpec(makeOpenApiHttpApiTestIntegrationConfig(api, options));\n\nexport const makeOpenApiHttpApiTestAddSpecPayload = (\n api: HttpApi.Any,\n options: OpenApiHttpApiTestAddSpecPayloadOptions,\n) => {\n const { headers, queryParams, ...integrationOptions } = options;\n const config = makeOpenApiHttpApiTestIntegrationConfig(api, integrationOptions);\n return {\n spec: config.spec,\n slug: config.slug,\n baseUrl: config.baseUrl,\n ...(headers !== undefined ? { headers } : {}),\n ...(queryParams !== undefined ? { queryParams } : {}),\n ...(config.authenticationTemplate !== undefined\n ? { authenticationTemplate: config.authenticationTemplate }\n : {}),\n };\n};\n\nexport const makeOpenApiHttpApiTestSpecPayload = (\n api: HttpApi.Any,\n options: OpenApiTestSpecOptions = {},\n) => ({\n spec: makeOpenApiTestSpecJson(api, options),\n});\n\nconst isJsonObject = (value: unknown): value is Readonly<Record<string, unknown>> =>\n typeof value === \"object\" && value !== null && !Array.isArray(value);\n\nconst OpenApiEchoItem = Schema.Struct({\n id: Schema.Number,\n name: Schema.String,\n});\n\nconst OpenApiEchoHeaders = Schema.Struct({\n authorization: Schema.optional(Schema.String),\n \"x-static\": Schema.optional(Schema.String),\n});\n\nconst OpenApiEchoMessage = Schema.Struct({\n message: Schema.String,\n suffix: Schema.optional(Schema.String),\n path: Schema.String,\n});\n\nconst OpenApiEchoItemsGroup = HttpApiGroup.make(\"items\")\n .add(\n HttpApiEndpoint.get(\"listItems\", \"/items\", {\n success: Schema.Array(OpenApiEchoItem),\n }),\n )\n .add(\n HttpApiEndpoint.get(\"echoHeaders\", \"/echo-headers\", {\n success: OpenApiEchoHeaders,\n }),\n );\n\nconst OpenApiEchoGroup = HttpApiGroup.make(\"echo\").add(\n HttpApiEndpoint.get(\"echoMessage\", \"/echo/:message\", {\n params: Schema.Struct({ message: Schema.String }),\n query: Schema.Struct({ suffix: Schema.optional(Schema.String) }),\n success: OpenApiEchoMessage,\n }),\n);\n\nconst OpenApiEchoApi = HttpApi.make(\"executorOpenApiTest\")\n .add(OpenApiEchoItemsGroup)\n .add(OpenApiEchoGroup)\n .annotateMerge(\n OpenApi.annotations({\n title: \"Executor OpenAPI Test Server\",\n version: \"1.0.0\",\n }),\n );\n\nconst openApiSpecJsonFromHttpApi = (\n api: HttpApi.Any,\n baseUrl: string,\n transformSpec?: (spec: Record<string, unknown>) => Record<string, unknown>,\n): Effect.Effect<string, OpenApiTestServerSpecError> =>\n Effect.try({\n try: () => makeOpenApiTestSpecJson(api, { baseUrl, transformSpec }),\n catch: (cause) => new OpenApiTestServerSpecError({ cause }),\n });\n\nexport const serveOpenApiHttpApiTestServer = (\n options: OpenApiHttpApiTestServerOptions,\n): Effect.Effect<\n OpenApiHttpApiTestServerShape,\n OpenApiTestServerAddressError | OpenApiTestServerSpecError,\n Scope.Scope\n> =>\n Effect.gen(function* () {\n const specPath = options.specPath ?? \"/spec.json\";\n let specJson = \"\";\n const SpecRoute = HttpRouter.addAll([\n HttpRouter.route(\n \"GET\",\n specPath,\n Effect.gen(function* () {\n const request = yield* HttpServerRequest.HttpServerRequest;\n if (options.captureSpecRequest) {\n yield* options.captureSpecRequest(request);\n }\n const guardResponse = options.guardSpecRequest\n ? yield* options.guardSpecRequest(request)\n : null;\n if (guardResponse) return guardResponse;\n return HttpServerResponse.text(specJson, {\n status: 200,\n contentType: \"application/json\",\n });\n }),\n ),\n ]);\n const ApiLive = HttpApiBuilder.layer(options.api as HttpApi.AnyWithProps).pipe(\n Layer.provide(options.handlersLayer),\n );\n const ServerLayer = HttpRouter.serve(Layer.mergeAll(ApiLive, SpecRoute), {\n disableListenLog: true,\n disableLogger: true,\n });\n const server = yield* serveTestHttpServerLayer(ServerLayer).pipe(\n Effect.mapError((error) =>\n Predicate.isTagged(error, \"TestHttpServerAddressError\")\n ? new OpenApiTestServerAddressError({ address: error.address })\n : new OpenApiTestServerSpecError({ cause: error.cause }),\n ),\n );\n specJson = yield* openApiSpecJsonFromHttpApi(\n options.api,\n server.baseUrl,\n options.transformSpec,\n );\n\n return {\n baseUrl: server.baseUrl,\n specUrl: server.url(specPath),\n specJson,\n httpClientLayer: server.httpClientLayer,\n };\n });\n\nexport class OpenApiHttpApiTestServer extends Context.Service<\n OpenApiHttpApiTestServer,\n OpenApiHttpApiTestServerShape\n>()(\"@rafads/plugin-openapi/testing/OpenApiHttpApiTestServer\") {\n static readonly layer = (options: OpenApiHttpApiTestServerOptions) =>\n Layer.effect(OpenApiHttpApiTestServer, serveOpenApiHttpApiTestServer(options));\n}\n\nexport const serveMutableOpenApiSpecTestServer = (options: {\n readonly initialApi: HttpApi.Any;\n readonly specPath?: `/${string}`;\n readonly transformSpec?: (spec: Record<string, unknown>) => Record<string, unknown>;\n}): Effect.Effect<\n MutableOpenApiSpecTestServerShape,\n OpenApiTestServerAddressError | OpenApiTestServerSpecError,\n Scope.Scope\n> =>\n Effect.gen(function* () {\n const specPath = options.specPath ?? \"/spec.json\";\n const specJson = yield* Ref.make(\"\");\n const requests = yield* Ref.make(0);\n const SpecRoute = HttpRouter.addAll([\n HttpRouter.route(\n \"GET\",\n specPath,\n Effect.gen(function* () {\n yield* Ref.update(requests, (count) => count + 1);\n const current = yield* Ref.get(specJson);\n return HttpServerResponse.text(current, {\n status: 200,\n contentType: \"application/json\",\n });\n }),\n ),\n ]);\n const server = yield* serveTestHttpServerLayer(\n HttpRouter.serve(SpecRoute, {\n disableListenLog: true,\n disableLogger: true,\n }),\n ).pipe(\n Effect.mapError((error) =>\n Predicate.isTagged(error, \"TestHttpServerAddressError\")\n ? new OpenApiTestServerAddressError({ address: error.address })\n : new OpenApiTestServerSpecError({ cause: error.cause }),\n ),\n );\n const renderSpec = (api: HttpApi.Any) =>\n openApiSpecJsonFromHttpApi(api, server.baseUrl, options.transformSpec);\n yield* Ref.set(specJson, yield* renderSpec(options.initialApi));\n\n return {\n baseUrl: server.baseUrl,\n specUrl: server.url(specPath),\n specJson: yield* Ref.get(specJson),\n httpClientLayer: server.httpClientLayer,\n setApi: (api) => renderSpec(api).pipe(Effect.flatMap((next) => Ref.set(specJson, next))),\n requestCount: Ref.get(requests),\n };\n });\n\nconst openApiOperationMethods = new Set([\n \"get\",\n \"put\",\n \"post\",\n \"delete\",\n \"options\",\n \"head\",\n \"patch\",\n]);\n\nconst withOAuth2Security =\n (oauth2: NonNullable<OpenApiEchoTestServerOptions[\"oauth2\"]>) =>\n (spec: Record<string, unknown>): Record<string, unknown> => {\n const scopes = oauth2.scopes ?? { read: \"Read test resources\" };\n const security = [{ oauth2: Object.keys(scopes) }];\n const paths = isJsonObject(spec.paths)\n ? Object.fromEntries(\n Object.entries(spec.paths).map(([path, pathItem]) => [\n path,\n isJsonObject(pathItem)\n ? Object.fromEntries(\n Object.entries(pathItem).map(([method, operation]) => [\n method,\n openApiOperationMethods.has(method) && isJsonObject(operation)\n ? { ...operation, security }\n : operation,\n ]),\n )\n : pathItem,\n ]),\n )\n : spec.paths;\n const components = isJsonObject(spec.components) ? spec.components : {};\n const securitySchemes = isJsonObject(components.securitySchemes)\n ? components.securitySchemes\n : {};\n\n return {\n ...spec,\n paths,\n components: {\n ...components,\n securitySchemes: {\n ...securitySchemes,\n oauth2: {\n type: \"oauth2\",\n flows: {\n authorizationCode: {\n authorizationUrl: oauth2.authorizationUrl,\n tokenUrl: oauth2.tokenUrl,\n scopes,\n },\n },\n },\n },\n },\n };\n };\n\nconst composeSpecTransforms =\n (\n ...transforms: readonly (\n | ((spec: Record<string, unknown>) => Record<string, unknown>)\n | undefined\n )[]\n ) =>\n (spec: Record<string, unknown>): Record<string, unknown> =>\n transforms.reduce((current, transform) => (transform ? transform(current) : current), spec);\n\nconst recordOpenApiRequest = (\n requests: Ref.Ref<readonly OpenApiTestRequest[]>,\n request: HttpServerRequest.HttpServerRequest,\n) =>\n Effect.gen(function* () {\n const url = new URL(request.url, \"http://executor.test\");\n const body = yield* request.text.pipe(Effect.catch(() => Effect.succeed(\"\")));\n yield* Ref.update(requests, (all) => [\n ...all,\n {\n method: request.method,\n url: request.url,\n path: url.pathname,\n headers: request.headers,\n body,\n },\n ]);\n return request;\n });\n\nconst captureOpenApiRequest = (requests: Ref.Ref<readonly OpenApiTestRequest[]>) =>\n Effect.gen(function* () {\n const request = yield* HttpServerRequest.HttpServerRequest;\n return yield* recordOpenApiRequest(requests, request);\n });\n\nconst openApiUnauthorizedResponse = (\n options: OpenApiEchoTestServerOptions,\n authorization: string | null,\n): Effect.Effect<HttpServerResponse.HttpServerResponse | null> =>\n options.oauth2?.validateAuthorization\n ? options.oauth2.validateAuthorization(authorization).pipe(\n Effect.map((accepted) =>\n accepted\n ? null\n : HttpServerResponse.jsonUnsafe(\n { error: \"invalid_token\" },\n options.oauth2?.wwwAuthenticate\n ? {\n status: 401,\n headers: {\n \"www-authenticate\": options.oauth2.wwwAuthenticate,\n },\n }\n : { status: 401 },\n ),\n ),\n )\n : Effect.succeed(null);\n\nconst makeOpenApiEchoItemsGroupLive = (\n requests: Ref.Ref<readonly OpenApiTestRequest[]>,\n options: OpenApiEchoTestServerOptions,\n) =>\n HttpApiBuilder.group(OpenApiEchoApi, \"items\", (handlers) =>\n handlers\n .handle(\"listItems\", () =>\n Effect.gen(function* () {\n const request = yield* captureOpenApiRequest(requests);\n const unauthorized = yield* openApiUnauthorizedResponse(\n options,\n request.headers.authorization ?? null,\n );\n if (unauthorized) return unauthorized;\n return [\n OpenApiEchoItem.make({ id: 1, name: \"Widget\" }),\n OpenApiEchoItem.make({ id: 2, name: \"Gadget\" }),\n ];\n }),\n )\n .handle(\"echoHeaders\", () =>\n Effect.gen(function* () {\n const request = yield* captureOpenApiRequest(requests);\n const unauthorized = yield* openApiUnauthorizedResponse(\n options,\n request.headers.authorization ?? null,\n );\n if (unauthorized) return unauthorized;\n return OpenApiEchoHeaders.make({\n authorization: request.headers.authorization,\n \"x-static\": request.headers[\"x-static\"],\n });\n }),\n ),\n );\n\nconst makeOpenApiEchoGroupLive = (\n requests: Ref.Ref<readonly OpenApiTestRequest[]>,\n options: OpenApiEchoTestServerOptions,\n) =>\n HttpApiBuilder.group(OpenApiEchoApi, \"echo\", (handlers) =>\n handlers.handle(\"echoMessage\", ({ params, query }) =>\n Effect.gen(function* () {\n const request = yield* captureOpenApiRequest(requests);\n const unauthorized = yield* openApiUnauthorizedResponse(\n options,\n request.headers.authorization ?? null,\n );\n if (unauthorized) return unauthorized;\n const path = `/echo/${encodeURIComponent(params.message)}`;\n return OpenApiEchoMessage.make({\n message: params.message,\n ...(query.suffix ? { suffix: query.suffix } : {}),\n path,\n });\n }),\n ),\n );\n\nexport const serveOpenApiEchoTestServer = (\n options: OpenApiEchoTestServerOptions = {},\n): Effect.Effect<\n OpenApiEchoTestServerShape,\n OpenApiTestServerAddressError | OpenApiTestServerSpecError,\n Scope.Scope\n> =>\n Effect.gen(function* () {\n const requests = yield* Ref.make<readonly OpenApiTestRequest[]>([]);\n let specJson = \"\";\n const server = yield* serveOpenApiHttpApiTestServer({\n api: OpenApiEchoApi,\n handlersLayer: Layer.mergeAll(\n makeOpenApiEchoItemsGroupLive(requests, options),\n makeOpenApiEchoGroupLive(requests, options),\n ),\n transformSpec: composeSpecTransforms(\n options.oauth2 ? withOAuth2Security(options.oauth2) : undefined,\n options.transformSpec,\n ),\n captureSpecRequest: (request) => recordOpenApiRequest(requests, request).pipe(Effect.asVoid),\n });\n specJson = server.specJson;\n\n return {\n baseUrl: server.baseUrl,\n specUrl: server.specUrl,\n specJson,\n httpClientLayer: server.httpClientLayer,\n requests: Ref.get(requests),\n clearRequests: Ref.set(requests, []),\n };\n });\n\nexport const serveOpenApiEchoTestServerWithOAuth = (\n options: Omit<OpenApiEchoTestServerOptions, \"oauth2\"> & {\n readonly scopes?: Readonly<Record<string, string>>;\n readonly wwwAuthenticate?: string;\n } = {},\n) =>\n Effect.gen(function* () {\n const oauth = yield* OAuthTestServer;\n return yield* serveOpenApiEchoTestServer({\n transformSpec: options.transformSpec,\n oauth2: {\n authorizationUrl: oauth.authorizationEndpoint,\n tokenUrl: oauth.tokenEndpoint,\n scopes: options.scopes,\n validateAuthorization: oauth.acceptsAuthorizationHeader,\n wwwAuthenticate: options.wwwAuthenticate,\n },\n });\n });\n\nexport class OpenApiEchoTestServer extends Context.Service<\n OpenApiEchoTestServer,\n OpenApiEchoTestServerShape\n>()(\"@rafads/plugin-openapi/testing/OpenApiEchoTestServer\") {\n static readonly layer = (options?: OpenApiEchoTestServerOptions) =>\n Layer.effect(OpenApiEchoTestServer, serveOpenApiEchoTestServer(options));\n\n static readonly layerWithOAuth = (\n options?: Omit<OpenApiEchoTestServerOptions, \"oauth2\"> & {\n readonly scopes?: Readonly<Record<string, string>>;\n readonly wwwAuthenticate?: string;\n },\n ) => Layer.effect(OpenApiEchoTestServer, serveOpenApiEchoTestServerWithOAuth(options));\n}\n\nexport const TestLayers = {\n httpApi: OpenApiHttpApiTestServer.layer,\n echo: OpenApiEchoTestServer.layer,\n echoWithOAuth: OpenApiEchoTestServer.layerWithOAuth,\n};\n\nexport interface OpenApiInvocationResult<TData = Record<string, unknown> | unknown[] | null> {\n readonly status: number | null;\n readonly headers: Record<string, string> | null;\n readonly data: TData;\n readonly error: unknown;\n}\n\nexport const unwrapInvocation = <TData = Record<string, unknown> | null>(\n raw: unknown,\n): OpenApiInvocationResult<TData> => {\n if (!isToolResult(raw)) {\n return {\n status: null,\n headers: null,\n data: raw as TData,\n error: null,\n };\n }\n if (raw.ok) {\n // Payload-first: `data` is the upstream body; transport status/headers\n // ride in the `http` side channel.\n return {\n status: raw.http?.status ?? null,\n headers: raw.http?.headers ?? null,\n data: raw.data as TData,\n error: null,\n };\n }\n return {\n status: raw.error.status ?? null,\n headers: null,\n data: null as TData,\n error: raw.error.details ?? raw.error,\n };\n};\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/package.json
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@rafads/plugin-openapi",
|
|
3
|
+
"version": "1.5.38",
|
|
4
|
+
"homepage": "https://github.com/UsefulSoftwareCo/executor/tree/main/packages/plugins/openapi",
|
|
5
|
+
"bugs": {
|
|
6
|
+
"url": "https://github.com/UsefulSoftwareCo/executor/issues"
|
|
7
|
+
},
|
|
8
|
+
"license": "MIT",
|
|
9
|
+
"repository": {
|
|
10
|
+
"type": "git",
|
|
11
|
+
"url": "git+https://github.com/UsefulSoftwareCo/executor.git",
|
|
12
|
+
"directory": "packages/plugins/openapi"
|
|
13
|
+
},
|
|
14
|
+
"files": [
|
|
15
|
+
"dist"
|
|
16
|
+
],
|
|
17
|
+
"type": "module",
|
|
18
|
+
"exports": {
|
|
19
|
+
".": {
|
|
20
|
+
"import": {
|
|
21
|
+
"types": "./dist/promise.d.ts",
|
|
22
|
+
"default": "./dist/index.js"
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
"./core": {
|
|
26
|
+
"import": {
|
|
27
|
+
"types": "./dist/sdk/index.d.ts",
|
|
28
|
+
"default": "./dist/core.js"
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
"./client": {
|
|
32
|
+
"import": {
|
|
33
|
+
"types": "./dist/react/plugin-client.d.ts",
|
|
34
|
+
"default": "./dist/client.js"
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
"./providers/google": {
|
|
38
|
+
"import": {
|
|
39
|
+
"types": "./dist/providers/google/index.d.ts",
|
|
40
|
+
"default": "./dist/providers/google.js"
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
"./providers/microsoft": {
|
|
44
|
+
"import": {
|
|
45
|
+
"types": "./dist/providers/microsoft/index.d.ts",
|
|
46
|
+
"default": "./dist/providers/microsoft.js"
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
"./testing": {
|
|
50
|
+
"import": {
|
|
51
|
+
"types": "./dist/testing/index.d.ts",
|
|
52
|
+
"default": "./dist/testing.js"
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
},
|
|
56
|
+
"publishConfig": {
|
|
57
|
+
"access": "public"
|
|
58
|
+
},
|
|
59
|
+
"scripts": {
|
|
60
|
+
"build": "tsup && tsc --declaration --emitDeclarationOnly --outDir dist --rootDir src",
|
|
61
|
+
"typecheck": "tsgo --noEmit",
|
|
62
|
+
"test": "vitest run",
|
|
63
|
+
"test:watch": "vitest",
|
|
64
|
+
"typecheck:slow": "bunx tsc --noEmit -p tsconfig.json"
|
|
65
|
+
},
|
|
66
|
+
"dependencies": {
|
|
67
|
+
"@effect/platform-node": "4.0.0-beta.59",
|
|
68
|
+
"@rafads/config": "1.5.38",
|
|
69
|
+
"@rafads/sdk": "1.5.38",
|
|
70
|
+
"js-yaml": "4.1.1",
|
|
71
|
+
"lucide-react": "^1.7.0",
|
|
72
|
+
"openapi-types": "^12.1.3"
|
|
73
|
+
},
|
|
74
|
+
"devDependencies": {
|
|
75
|
+
"@effect/atom-react": "4.0.0-beta.59",
|
|
76
|
+
"@effect/vitest": "4.0.0-beta.59",
|
|
77
|
+
"@types/js-yaml": "4.0.9",
|
|
78
|
+
"@types/node": "^24.3.1",
|
|
79
|
+
"@types/react": "^19.1.0",
|
|
80
|
+
"bun-types": "^1.2.22",
|
|
81
|
+
"effect": "4.0.0-beta.59",
|
|
82
|
+
"react": "^19.1.0",
|
|
83
|
+
"tsup": "^8.5.0",
|
|
84
|
+
"vitest": "^4.1.5"
|
|
85
|
+
},
|
|
86
|
+
"peerDependencies": {
|
|
87
|
+
"@effect/atom-react": "4.0.0-beta.59",
|
|
88
|
+
"@tanstack/react-router": "^1.168.10",
|
|
89
|
+
"effect": "4.0.0-beta.59",
|
|
90
|
+
"react": "^19.1.0"
|
|
91
|
+
},
|
|
92
|
+
"peerDependenciesMeta": {
|
|
93
|
+
"react": {
|
|
94
|
+
"optional": true
|
|
95
|
+
},
|
|
96
|
+
"@effect/atom-react": {
|
|
97
|
+
"optional": true
|
|
98
|
+
},
|
|
99
|
+
"@tanstack/react-router": {
|
|
100
|
+
"optional": true
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|