@orpc/openapi 2.0.0-beta.30 → 2.0.0-beta.31

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.
@@ -1,6 +1,6 @@
1
1
  import { AwsLambdaHandler } from '@orpc/server/aws-lambda';
2
2
  import { StandardHandler } from '@orpc/server/standard';
3
- import { O as OpenAPIHandlerCodec } from '../../shared/openapi.BaqI61Xi.mjs';
3
+ import { O as OpenAPIHandlerCodec } from '../../shared/openapi.iEFYDEKB.mjs';
4
4
  import '@orpc/client';
5
5
  import '@orpc/server';
6
6
  import '@orpc/shared';
@@ -1,6 +1,6 @@
1
1
  import { FastifyHandler } from '@orpc/server/fastify';
2
2
  import { StandardHandler } from '@orpc/server/standard';
3
- import { O as OpenAPIHandlerCodec } from '../../shared/openapi.BaqI61Xi.mjs';
3
+ import { O as OpenAPIHandlerCodec } from '../../shared/openapi.iEFYDEKB.mjs';
4
4
  import '@orpc/client';
5
5
  import '@orpc/server';
6
6
  import '@orpc/shared';
@@ -1,9 +1,9 @@
1
1
  import { FetchHandler } from '@orpc/server/fetch';
2
2
  import { StandardHandler } from '@orpc/server/standard';
3
- import { O as OpenAPIHandlerCodec } from '../../shared/openapi.BaqI61Xi.mjs';
3
+ import { O as OpenAPIHandlerCodec } from '../../shared/openapi.iEFYDEKB.mjs';
4
4
  import { FetchLinkTransport } from '@orpc/client/fetch';
5
5
  import { StandardLink } from '@orpc/client/standard';
6
- import { O as OpenAPILinkCodec } from '../../shared/openapi.BlHXe8vI.mjs';
6
+ import { O as OpenAPILinkCodec } from '../../shared/openapi.B6jrmH-p.mjs';
7
7
  import '@orpc/client';
8
8
  import '@orpc/server';
9
9
  import '@orpc/shared';
@@ -1,6 +1,6 @@
1
1
  import { NodeHttpHandler } from '@orpc/server/node';
2
2
  import { StandardHandler } from '@orpc/server/standard';
3
- import { O as OpenAPIHandlerCodec } from '../../shared/openapi.BaqI61Xi.mjs';
3
+ import { O as OpenAPIHandlerCodec } from '../../shared/openapi.iEFYDEKB.mjs';
4
4
  import '@orpc/client';
5
5
  import '@orpc/server';
6
6
  import '@orpc/shared';
@@ -1,5 +1,5 @@
1
- export { O as OpenAPIHandlerCodec, a as OpenAPIHandlerCodecCore, b as OpenAPIMatcher, s as serializeHeaders } from '../../shared/openapi.BaqI61Xi.mjs';
2
- export { O as OpenAPILinkCodec } from '../../shared/openapi.BlHXe8vI.mjs';
1
+ export { O as OpenAPIHandlerCodec, a as OpenAPIHandlerCodecCore, b as OpenAPIMatcher, s as serializeHeaders } from '../../shared/openapi.iEFYDEKB.mjs';
2
+ export { O as OpenAPILinkCodec } from '../../shared/openapi.B6jrmH-p.mjs';
3
3
  import '@orpc/client';
4
4
  import '@orpc/server';
5
5
  import '@orpc/shared';
@@ -22,6 +22,13 @@ interface OpenAPIReferenceHandlerPluginOptions<T extends Context, TProvider exte
22
22
  * Receives routing interceptor options when provided as a function.
23
23
  */
24
24
  spec: Value<Promisable<OpenAPIDocument>, [StandardHandlerRoutingInterceptorOptions<T>]>;
25
+ /**
26
+ * Determines whether the docs UI and OpenAPI JSON are allowed to be served for a request.
27
+ * When it resolves to `false`, the request falls through as unmatched,
28
+ * as if the plugin were not installed. Useful for restricting access
29
+ * to authenticated users.
30
+ */
31
+ allow?: Value<Promisable<boolean>, [StandardHandlerRoutingInterceptorOptions<T>]>;
25
32
  /**
26
33
  * The URL path at which to serve the OpenAPI JSON.
27
34
  *
@@ -83,6 +90,7 @@ interface OpenAPIReferenceHandlerPluginOptions<T extends Context, TProvider exte
83
90
  declare class OpenAPIReferenceHandlerPlugin<T extends Context, TProvider extends OpenAPIReferenceHandlerPluginProvider> implements StandardHandlerPlugin<T> {
84
91
  name: string;
85
92
  private readonly spec;
93
+ private readonly allow;
86
94
  private readonly specPath;
87
95
  private readonly provider;
88
96
  private readonly providerConfig;
@@ -22,6 +22,13 @@ interface OpenAPIReferenceHandlerPluginOptions<T extends Context, TProvider exte
22
22
  * Receives routing interceptor options when provided as a function.
23
23
  */
24
24
  spec: Value<Promisable<OpenAPIDocument>, [StandardHandlerRoutingInterceptorOptions<T>]>;
25
+ /**
26
+ * Determines whether the docs UI and OpenAPI JSON are allowed to be served for a request.
27
+ * When it resolves to `false`, the request falls through as unmatched,
28
+ * as if the plugin were not installed. Useful for restricting access
29
+ * to authenticated users.
30
+ */
31
+ allow?: Value<Promisable<boolean>, [StandardHandlerRoutingInterceptorOptions<T>]>;
25
32
  /**
26
33
  * The URL path at which to serve the OpenAPI JSON.
27
34
  *
@@ -83,6 +90,7 @@ interface OpenAPIReferenceHandlerPluginOptions<T extends Context, TProvider exte
83
90
  declare class OpenAPIReferenceHandlerPlugin<T extends Context, TProvider extends OpenAPIReferenceHandlerPluginProvider> implements StandardHandlerPlugin<T> {
84
91
  name: string;
85
92
  private readonly spec;
93
+ private readonly allow;
86
94
  private readonly specPath;
87
95
  private readonly provider;
88
96
  private readonly providerConfig;
@@ -1,8 +1,9 @@
1
- import { toArray, matchesHttpPath, mergeHttpPath, getOpenTelemetryConfig, value, stringifyJSON } from '@orpc/shared';
1
+ import { toArray, matchesHttpPath, mergeHttpPath, value, getOpenTelemetryConfig, stringifyJSON } from '@orpc/shared';
2
2
 
3
3
  class OpenAPIReferenceHandlerPlugin {
4
4
  name = "~openapi-reference";
5
5
  spec;
6
+ allow;
6
7
  specPath;
7
8
  provider;
8
9
  providerConfig;
@@ -13,6 +14,7 @@ class OpenAPIReferenceHandlerPlugin {
13
14
  docsHead;
14
15
  constructor(options) {
15
16
  this.spec = options.spec;
17
+ this.allow = options.allow;
16
18
  this.specPath = options.specPath ?? "/spec.json";
17
19
  this.provider = options.provider ?? "scalar";
18
20
  this.providerConfig = options.providerConfig;
@@ -44,6 +46,9 @@ class OpenAPIReferenceHandlerPlugin {
44
46
  if (!isSpecPath && !isDocsPath) {
45
47
  return result;
46
48
  }
49
+ if (await value(this.allow, routingInterceptorOptions) === false) {
50
+ return result;
51
+ }
47
52
  const span = getOpenTelemetryConfig()?.trace.getActiveSpan();
48
53
  const spec = await value(this.spec, routingInterceptorOptions);
49
54
  if (isSpecPath) {
@@ -6,7 +6,7 @@ import { mergeStandardHeaders, parseStandardUrl } from '@standardserver/core';
6
6
  import { toStandardHeaders } from '@standardserver/fetch';
7
7
  import { O as OpenAPISerializer, D as DEFAULT_OPENAPI_METHOD, a as DEFAULT_OPENAPI_INPUT_STRUCTURE, g as getDynamicPathParams, i as isBodylessMethod, b as DEFAULT_OPENAPI_OUTPUT_STRUCTURE } from './openapi.0yE-t1W-.mjs';
8
8
  import { g as getOpenAPIMeta } from './openapi.B9PQzqBn.mjs';
9
- import { s as serializeHeaders } from './openapi.BaqI61Xi.mjs';
9
+ import { s as serializeHeaders } from './openapi.iEFYDEKB.mjs';
10
10
 
11
11
  const END_SLASH_REGEX = /\/$/;
12
12
  class OpenAPILinkCodec {
@@ -1,6 +1,6 @@
1
1
  import { COMMON_ERROR_STATUS_MAP } from '@orpc/client';
2
2
  import { walkProcedureContractsSync, Procedure, unlazy, getRouter, createContractProcedure, DEFAULT_SUCCESS_STATUS, DEFAULT_ERROR_STATUS } from '@orpc/server';
3
- import { value, pathToHttpPath, mergeHttpPath, normalizeHttpPath, tryDecodeURIComponent, NullProtoObj, isTypescriptObject, isPlainObject, stringifyJSON, parseEmptyableJSON } from '@orpc/shared';
3
+ import { value, pathToHttpPath, mergeHttpPath, normalizeHttpPath, tryDecodeURIComponent, NullProtoObj, isTypescriptObject, isPlainObject, stringifyJSON, getOwn, parseEmptyableJSON } from '@orpc/shared';
4
4
  import { parseStandardUrl } from '@standardserver/core';
5
5
  import { D as DEFAULT_OPENAPI_METHOD, g as getDynamicPathParams, O as OpenAPISerializer, a as DEFAULT_OPENAPI_INPUT_STRUCTURE, i as isBodylessMethod, b as DEFAULT_OPENAPI_OUTPUT_STRUCTURE } from './openapi.0yE-t1W-.mjs';
6
6
  import { g as getOpenAPIMeta } from './openapi.B9PQzqBn.mjs';
@@ -245,7 +245,7 @@ class OpenAPIHandlerCodecCore {
245
245
  };
246
246
  }
247
247
  encodeError(error) {
248
- const status = this.errorStatusMap[error.code] ?? DEFAULT_ERROR_STATUS;
248
+ const status = getOwn(this.errorStatusMap, error.code) ?? DEFAULT_ERROR_STATUS;
249
249
  return {
250
250
  status,
251
251
  headers: {},
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@orpc/openapi",
3
3
  "type": "module",
4
- "version": "2.0.0-beta.30",
4
+ "version": "2.0.0-beta.31",
5
5
  "description": "Generate OpenAPI specs from oRPC routers and serve OpenAPI-compliant APIs with end-to-end type safety",
6
6
  "license": "MIT",
7
7
  "funding": [
@@ -101,11 +101,11 @@
101
101
  "@standardserver/core": "^0.8.0",
102
102
  "@standardserver/fetch": "^0.8.0",
103
103
  "rou3": "^0.9.1",
104
- "@orpc/client": "2.0.0-beta.30",
105
- "@orpc/json-schema": "2.0.0-beta.30",
106
- "@orpc/contract": "2.0.0-beta.30",
107
- "@orpc/server": "2.0.0-beta.30",
108
- "@orpc/shared": "2.0.0-beta.30"
104
+ "@orpc/client": "2.0.0-beta.31",
105
+ "@orpc/json-schema": "2.0.0-beta.31",
106
+ "@orpc/contract": "2.0.0-beta.31",
107
+ "@orpc/server": "2.0.0-beta.31",
108
+ "@orpc/shared": "2.0.0-beta.31"
109
109
  },
110
110
  "devDependencies": {
111
111
  "@scalar/api-reference": "^1.65.1",