@schemavaults/openapi-operations 0.3.0 → 0.4.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/README.md +99 -11
- package/dist/auth-scheme.d.ts +42 -13
- package/dist/auth-scheme.js +30 -8
- package/dist/auth-scheme.js.map +1 -1
- package/dist/index.d.ts +4 -3
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/nextjs/app-router-routes.d.ts +56 -0
- package/dist/nextjs/app-router-routes.js +182 -0
- package/dist/nextjs/app-router-routes.js.map +1 -0
- package/dist/openapi/build-openapi-document.d.ts +8 -0
- package/dist/openapi/build-openapi-document.js +6 -2
- package/dist/openapi/build-openapi-document.js.map +1 -1
- package/dist/openapi/runtime-responses.d.ts +25 -0
- package/dist/openapi/runtime-responses.js +88 -0
- package/dist/openapi/runtime-responses.js.map +1 -0
- package/dist/operation.d.ts +13 -2
- package/dist/operation.js.map +1 -1
- package/dist/runtime/create-operations-app.js +2 -2
- package/dist/runtime/create-operations-app.js.map +1 -1
- package/dist/runtime/error-schema.d.ts +41 -0
- package/dist/runtime/error-schema.js +50 -0
- package/dist/runtime/error-schema.js.map +1 -0
- package/dist/runtime/errors.d.ts +7 -0
- package/dist/runtime/errors.js +19 -0
- package/dist/runtime/errors.js.map +1 -1
- package/dist/runtime/index.d.ts +3 -2
- package/dist/runtime/index.js +3 -2
- package/dist/runtime/index.js.map +1 -1
- package/dist/runtime/resolve-auth.d.ts +8 -1
- package/dist/runtime/resolve-auth.js +27 -1
- package/dist/runtime/resolve-auth.js.map +1 -1
- package/package.json +6 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-router-routes.js","sourceRoot":"","sources":["../../src/nextjs/app-router-routes.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,6 +13,14 @@ export interface BuildOpenApiDocumentOptions {
|
|
|
13
13
|
readonly additionalAuthSchemes?: readonly AuthSchemeDefinition[];
|
|
14
14
|
/** Document-level vendor extensions. */
|
|
15
15
|
readonly extensions?: Readonly<Record<`x-${string}`, unknown>>;
|
|
16
|
+
/**
|
|
17
|
+
* Also document the responses the runtime produces on its own (400
|
|
18
|
+
* validation, 401 / 403 on protected operations, 415 on operations with
|
|
19
|
+
* a validated body, 500), each with the `OperationError` envelope
|
|
20
|
+
* schema; see `runtimeErrorResponses()`. A response an operation
|
|
21
|
+
* declares itself takes precedence for the same status. Default false.
|
|
22
|
+
*/
|
|
23
|
+
readonly documentRuntimeResponses?: boolean;
|
|
16
24
|
}
|
|
17
25
|
/** Every distinct auth scheme referenced by the operations (first definition wins per name). */
|
|
18
26
|
export declare function collectAuthSchemes(operations: readonly AnyOperationDefinition[], additional?: readonly AuthSchemeDefinition[]): AuthSchemeDefinition[];
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { OpenAPIRegistry, OpenApiGeneratorV31, } from "@asteasolutions/zod-to-openapi";
|
|
2
2
|
import { assertUniqueOperations } from "../operation";
|
|
3
3
|
import { SCHEMAVAULTS_AUTH_EXTENSION, SCHEMAVAULTS_SCHEME_CHALLENGE_EXTENSION, SCHEMAVAULTS_SCHEME_TITLE_EXTENSION, toSchemaVaultsAuthExtension, } from "./extensions";
|
|
4
|
+
import { withRuntimeErrorResponses } from "./runtime-responses";
|
|
4
5
|
/** Every distinct auth scheme referenced by the operations (first definition wins per name). */
|
|
5
6
|
export function collectAuthSchemes(operations, additional = []) {
|
|
6
7
|
const byName = new Map();
|
|
@@ -96,10 +97,13 @@ export function toRouteConfig(operation) {
|
|
|
96
97
|
export function buildOpenApiDocument(options) {
|
|
97
98
|
assertUniqueOperations(options.operations);
|
|
98
99
|
const registry = new OpenAPIRegistry();
|
|
99
|
-
|
|
100
|
+
const operations = options.documentRuntimeResponses
|
|
101
|
+
? options.operations.map(withRuntimeErrorResponses)
|
|
102
|
+
: options.operations;
|
|
103
|
+
for (const scheme of collectAuthSchemes(operations, options.additionalAuthSchemes)) {
|
|
100
104
|
registry.registerComponent("securitySchemes", scheme.name, toSecuritySchemeComponent(scheme));
|
|
101
105
|
}
|
|
102
|
-
for (const operation of
|
|
106
|
+
for (const operation of operations) {
|
|
103
107
|
registry.registerPath(toRouteConfig(operation));
|
|
104
108
|
}
|
|
105
109
|
const declaredTags = new Map();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-openapi-document.js","sourceRoot":"","sources":["../../src/openapi/build-openapi-document.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,eAAe,EACf,mBAAmB,GAGpB,MAAM,gCAAgC,CAAC;AAYxC,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EACL,2BAA2B,EAC3B,uCAAuC,EACvC,mCAAmC,EACnC,2BAA2B,GAC5B,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"build-openapi-document.js","sourceRoot":"","sources":["../../src/openapi/build-openapi-document.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { AnyOperationDefinition, ResponseDefinition } from "../operation";
|
|
2
|
+
/**
|
|
3
|
+
* Responses the operations runtime produces on its own, for the operations
|
|
4
|
+
* that can trigger them:
|
|
5
|
+
*
|
|
6
|
+
* | Status | When |
|
|
7
|
+
* | --- | --- |
|
|
8
|
+
* | 400 | the operation validates params / query / headers / a body, or requires an organization parameter |
|
|
9
|
+
* | 401 | the operation is not public (no, invalid, expired or revoked credential) |
|
|
10
|
+
* | 403 | the operation needs the `admin` route guard, required scopes, or an organization role |
|
|
11
|
+
* | 415 | the operation validates a request body (media type mismatch) |
|
|
12
|
+
* | 500 | always (unexpected failure) |
|
|
13
|
+
*
|
|
14
|
+
* All of them use the {@link OperationErrorBodySchema} envelope. Merged into
|
|
15
|
+
* the document by `buildOpenApiDocument({ documentRuntimeResponses: true })`
|
|
16
|
+
* with the operation's declared responses taking precedence.
|
|
17
|
+
*/
|
|
18
|
+
export declare function runtimeErrorResponses(operation: AnyOperationDefinition): Record<number, ResponseDefinition>;
|
|
19
|
+
/**
|
|
20
|
+
* Copy of the operation whose `responses` also list the
|
|
21
|
+
* {@link runtimeErrorResponses}; a response the operation declares itself
|
|
22
|
+
* wins over the runtime's for the same status. For document generation
|
|
23
|
+
* only: serve the original operation.
|
|
24
|
+
*/
|
|
25
|
+
export declare function withRuntimeErrorResponses(operation: AnyOperationDefinition): AnyOperationDefinition;
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { z } from "../zod-openapi";
|
|
2
|
+
import { isPublicOperationAuth } from "../auth-scheme";
|
|
3
|
+
import { OperationErrorBodySchema } from "../runtime/error-schema";
|
|
4
|
+
/**
|
|
5
|
+
* Responses the operations runtime produces on its own, for the operations
|
|
6
|
+
* that can trigger them:
|
|
7
|
+
*
|
|
8
|
+
* | Status | When |
|
|
9
|
+
* | --- | --- |
|
|
10
|
+
* | 400 | the operation validates params / query / headers / a body, or requires an organization parameter |
|
|
11
|
+
* | 401 | the operation is not public (no, invalid, expired or revoked credential) |
|
|
12
|
+
* | 403 | the operation needs the `admin` route guard, required scopes, or an organization role |
|
|
13
|
+
* | 415 | the operation validates a request body (media type mismatch) |
|
|
14
|
+
* | 500 | always (unexpected failure) |
|
|
15
|
+
*
|
|
16
|
+
* All of them use the {@link OperationErrorBodySchema} envelope. Merged into
|
|
17
|
+
* the document by `buildOpenApiDocument({ documentRuntimeResponses: true })`
|
|
18
|
+
* with the operation's declared responses taking precedence.
|
|
19
|
+
*/
|
|
20
|
+
export function runtimeErrorResponses(operation) {
|
|
21
|
+
const responses = {};
|
|
22
|
+
const { params, query, headers, body } = operation.request;
|
|
23
|
+
const validatesBody = body !== undefined && body.documentOnly !== true;
|
|
24
|
+
const auth = operation.auth;
|
|
25
|
+
const requiresOrganization = !isPublicOperationAuth(auth) && auth.organization !== undefined;
|
|
26
|
+
if (params || query || headers || validatesBody || requiresOrganization) {
|
|
27
|
+
responses[400] = {
|
|
28
|
+
description: requiresOrganization
|
|
29
|
+
? "The path parameters, query string, headers or body failed validation, or the organization parameter is missing."
|
|
30
|
+
: "The path parameters, query string, headers or body failed validation.",
|
|
31
|
+
schema: OperationErrorBodySchema,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
if (!isPublicOperationAuth(auth)) {
|
|
35
|
+
const challenges = auth.schemes
|
|
36
|
+
.map((scheme) => scheme.challenge)
|
|
37
|
+
.filter((challenge) => typeof challenge === "string");
|
|
38
|
+
const unauthorizedHeaders = challenges.length > 0
|
|
39
|
+
? z.object({
|
|
40
|
+
"WWW-Authenticate": z.string().optional().openapi({
|
|
41
|
+
description: `Challenge for the accepted schemes, e.g. \`${challenges.join(", ")}\`.`,
|
|
42
|
+
}),
|
|
43
|
+
})
|
|
44
|
+
: undefined;
|
|
45
|
+
responses[401] = {
|
|
46
|
+
description: "No credential was presented, or the presented credential is invalid, expired or revoked.",
|
|
47
|
+
schema: OperationErrorBodySchema,
|
|
48
|
+
...(unauthorizedHeaders ? { headers: unauthorizedHeaders } : {}),
|
|
49
|
+
};
|
|
50
|
+
const reasons = [];
|
|
51
|
+
if ((auth.routeGuard ?? "authenticated") === "admin")
|
|
52
|
+
reasons.push("is not a platform administrator");
|
|
53
|
+
if ((auth.requiredScopes?.length ?? 0) > 0)
|
|
54
|
+
reasons.push("presented a token missing a required scope");
|
|
55
|
+
if (auth.organization)
|
|
56
|
+
reasons.push("lacks the required organization role");
|
|
57
|
+
if (reasons.length > 0) {
|
|
58
|
+
responses[403] = {
|
|
59
|
+
description: `The caller is authenticated but ${reasons.join(", or ")}.`,
|
|
60
|
+
schema: OperationErrorBodySchema,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
if (validatesBody) {
|
|
65
|
+
responses[415] = {
|
|
66
|
+
description: `The request body is not \`${body.contentType ?? "application/json"}\`.`,
|
|
67
|
+
schema: OperationErrorBodySchema,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
responses[500] = {
|
|
71
|
+
description: "Unexpected server error.",
|
|
72
|
+
schema: OperationErrorBodySchema,
|
|
73
|
+
};
|
|
74
|
+
return responses;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Copy of the operation whose `responses` also list the
|
|
78
|
+
* {@link runtimeErrorResponses}; a response the operation declares itself
|
|
79
|
+
* wins over the runtime's for the same status. For document generation
|
|
80
|
+
* only: serve the original operation.
|
|
81
|
+
*/
|
|
82
|
+
export function withRuntimeErrorResponses(operation) {
|
|
83
|
+
return Object.freeze({
|
|
84
|
+
...operation,
|
|
85
|
+
responses: { ...runtimeErrorResponses(operation), ...operation.responses },
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=runtime-responses.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-responses.js","sourceRoot":"","sources":["../../src/openapi/runtime-responses.ts"],"names":[],"mappings":"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"}
|
package/dist/operation.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { z, ZodObject, ZodType } from "zod";
|
|
2
2
|
import type { OrganizationMembershipRoleType } from "@schemavaults/auth-common/organizations";
|
|
3
3
|
import { type HttpMethod } from "./http-method";
|
|
4
|
-
import type { OperationAuth, PublicOperationAuth } from "./auth-scheme";
|
|
4
|
+
import type { AllSchemesResolveUser, AuthSchemeDefinition, OperationAuth, PublicOperationAuth, RequiredOperationAuth } from "./auth-scheme";
|
|
5
5
|
export type RequestBodyContentType = "application/json" | "application/x-www-form-urlencoded" | "multipart/form-data" | "text/plain" | (string & {});
|
|
6
6
|
export interface RequestBodyDefinition<TSchema extends ZodType = ZodType, TDocumentOnly extends boolean = boolean> {
|
|
7
7
|
/** Media type the body is parsed as (default `application/json`). */
|
|
@@ -86,6 +86,17 @@ export interface AuthPrincipal<TUser = unknown> {
|
|
|
86
86
|
*/
|
|
87
87
|
readonly getOrganizationRole?: (organizationId: string) => Promise<OrganizationMembershipRoleType | false>;
|
|
88
88
|
}
|
|
89
|
+
/** An {@link AuthPrincipal} that is known to carry a user (`principal: "user"` schemes). */
|
|
90
|
+
export interface UserAuthPrincipal<TUser = unknown> extends AuthPrincipal<TUser> {
|
|
91
|
+
readonly user: TUser;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* The `ctx.auth` type of an operation: `null` for public operations, a
|
|
95
|
+
* {@link UserAuthPrincipal} when every accepted scheme declares
|
|
96
|
+
* `principal: "user"`, and a plain {@link AuthPrincipal} (nullable `user`)
|
|
97
|
+
* otherwise.
|
|
98
|
+
*/
|
|
99
|
+
export type ResolvedAuthPrincipal<TUser, TAuth extends OperationAuth> = TAuth extends PublicOperationAuth ? null : TAuth extends RequiredOperationAuth<infer TSchemes extends readonly AuthSchemeDefinition[]> ? AllSchemesResolveUser<TSchemes> extends true ? UserAuthPrincipal<TUser> : AuthPrincipal<TUser> : AuthPrincipal<TUser>;
|
|
89
100
|
export interface ResponseInit_ {
|
|
90
101
|
readonly headers?: HeadersInit;
|
|
91
102
|
}
|
|
@@ -122,7 +133,7 @@ export interface OperationDefinition<TParams extends ZodObject | undefined = Zod
|
|
|
122
133
|
readonly responses: TResponses;
|
|
123
134
|
/** Extra OpenAPI vendor extensions merged into the operation object. */
|
|
124
135
|
readonly extensions?: Readonly<Record<`x-${string}`, unknown>>;
|
|
125
|
-
handler(ctx: OperationHandlerContext<InferParsed<TParams>, InferParsed<TQuery>, InferParsed<THeaders>, InferBody<TBody>, TResponses, TContext,
|
|
136
|
+
handler(ctx: OperationHandlerContext<InferParsed<TParams>, InferParsed<TQuery>, InferParsed<THeaders>, InferBody<TBody>, TResponses, TContext, ResolvedAuthPrincipal<TUser, TAuth>>): OperationHandlerResult;
|
|
126
137
|
}
|
|
127
138
|
/**
|
|
128
139
|
* Structural, type-erased view of any operation definition. Every
|
package/dist/operation.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"operation.js","sourceRoot":"","sources":["../src/operation.ts"],"names":[],"mappings":"AAEA,OAAO,EAAmB,8BAA8B,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"operation.js","sourceRoot":"","sources":["../src/operation.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Hono } from "hono";
|
|
2
2
|
import { assertUniqueOperations } from "../operation";
|
|
3
3
|
import { openApiPathToHonoPath } from "../openapi/path-format";
|
|
4
|
-
import { OPERATION_ERROR_CODES,
|
|
4
|
+
import { OPERATION_ERROR_CODES, isOperationError, jsonResponse } from "./errors";
|
|
5
5
|
import { validateRequest } from "./validate-request";
|
|
6
6
|
import { assertResolversForOperations, resolveAuth } from "./resolve-auth";
|
|
7
7
|
function buildHandlerContext(c, operation, validated, auth, context) {
|
|
@@ -84,7 +84,7 @@ export function createOperationsApp(options) {
|
|
|
84
84
|
return result;
|
|
85
85
|
}
|
|
86
86
|
catch (error) {
|
|
87
|
-
if (error
|
|
87
|
+
if (isOperationError(error))
|
|
88
88
|
return error.toResponse();
|
|
89
89
|
await report(error, c, { operation, context });
|
|
90
90
|
return jsonResponse(500, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-operations-app.js","sourceRoot":"","sources":["../../src/runtime/create-operations-app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAgB,MAAM,MAAM,CAAC;AAG1C,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,
|
|
1
|
+
{"version":3,"file":"create-operations-app.js","sourceRoot":"","sources":["../../src/runtime/create-operations-app.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { z } from "../zod-openapi";
|
|
2
|
+
/**
|
|
3
|
+
* One request-validation issue as reported on `validation_error` bodies.
|
|
4
|
+
* Registered under `components.schemas.OperationValidationIssue`.
|
|
5
|
+
*/
|
|
6
|
+
export declare const OperationValidationIssueSchema: z.ZodObject<{
|
|
7
|
+
location: z.ZodEnum<{
|
|
8
|
+
params: "params";
|
|
9
|
+
query: "query";
|
|
10
|
+
headers: "headers";
|
|
11
|
+
body: "body";
|
|
12
|
+
}>;
|
|
13
|
+
path: z.ZodString;
|
|
14
|
+
message: z.ZodString;
|
|
15
|
+
code: z.ZodString;
|
|
16
|
+
}, z.core.$strip>;
|
|
17
|
+
/**
|
|
18
|
+
* The `{ success: false, error, message }` envelope of every error response
|
|
19
|
+
* the operations runtime produces (validation, authentication, authorization,
|
|
20
|
+
* unsupported media type, unexpected failures) and of every
|
|
21
|
+
* `OperationError` thrown by a handler or auth resolver. Registered under
|
|
22
|
+
* `components.schemas.OperationError`; declare it on the 404 / 409 / ...
|
|
23
|
+
* responses a handler produces with `new OperationError(status, ...)`.
|
|
24
|
+
*/
|
|
25
|
+
export declare const OperationErrorBodySchema: z.ZodObject<{
|
|
26
|
+
success: z.ZodLiteral<false>;
|
|
27
|
+
error: z.ZodString;
|
|
28
|
+
message: z.ZodString;
|
|
29
|
+
issues: z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
30
|
+
location: z.ZodEnum<{
|
|
31
|
+
params: "params";
|
|
32
|
+
query: "query";
|
|
33
|
+
headers: "headers";
|
|
34
|
+
body: "body";
|
|
35
|
+
}>;
|
|
36
|
+
path: z.ZodString;
|
|
37
|
+
message: z.ZodString;
|
|
38
|
+
code: z.ZodString;
|
|
39
|
+
}, z.core.$strip>>>;
|
|
40
|
+
details: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
41
|
+
}, z.core.$strip>;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { z } from "../zod-openapi";
|
|
2
|
+
/**
|
|
3
|
+
* One request-validation issue as reported on `validation_error` bodies.
|
|
4
|
+
* Registered under `components.schemas.OperationValidationIssue`.
|
|
5
|
+
*/
|
|
6
|
+
export const OperationValidationIssueSchema = z
|
|
7
|
+
.object({
|
|
8
|
+
location: z.enum(["params", "query", "headers", "body"]).openapi({
|
|
9
|
+
description: "Which part of the request failed validation.",
|
|
10
|
+
}),
|
|
11
|
+
path: z.string().openapi({
|
|
12
|
+
description: "Dotted path of the offending field within that part (empty for the whole part).",
|
|
13
|
+
example: "name",
|
|
14
|
+
}),
|
|
15
|
+
message: z.string().openapi({ example: "Invalid input: expected string, received undefined" }),
|
|
16
|
+
code: z.string().openapi({ description: "zod issue code.", example: "invalid_type" }),
|
|
17
|
+
})
|
|
18
|
+
.openapi("OperationValidationIssue");
|
|
19
|
+
/**
|
|
20
|
+
* The `{ success: false, error, message }` envelope of every error response
|
|
21
|
+
* the operations runtime produces (validation, authentication, authorization,
|
|
22
|
+
* unsupported media type, unexpected failures) and of every
|
|
23
|
+
* `OperationError` thrown by a handler or auth resolver. Registered under
|
|
24
|
+
* `components.schemas.OperationError`; declare it on the 404 / 409 / ...
|
|
25
|
+
* responses a handler produces with `new OperationError(status, ...)`.
|
|
26
|
+
*/
|
|
27
|
+
export const OperationErrorBodySchema = z
|
|
28
|
+
.object({
|
|
29
|
+
success: z.literal(false),
|
|
30
|
+
error: z.string().openapi({
|
|
31
|
+
description: "Machine readable error code.",
|
|
32
|
+
example: "validation_error",
|
|
33
|
+
}),
|
|
34
|
+
message: z.string().openapi({
|
|
35
|
+
description: "Human readable explanation.",
|
|
36
|
+
example: "Invalid request body",
|
|
37
|
+
}),
|
|
38
|
+
issues: z.array(OperationValidationIssueSchema).optional().openapi({
|
|
39
|
+
description: "Present on `validation_error` responses.",
|
|
40
|
+
}),
|
|
41
|
+
details: z.record(z.string(), z.unknown()).optional().openapi({
|
|
42
|
+
description: "Extra machine readable details (e.g. the missing scopes on `insufficient_scope`).",
|
|
43
|
+
}),
|
|
44
|
+
})
|
|
45
|
+
.openapi("OperationError");
|
|
46
|
+
const _schemaMatchesBody = true;
|
|
47
|
+
const _issueMatches = true;
|
|
48
|
+
void _schemaMatchesBody;
|
|
49
|
+
void _issueMatches;
|
|
50
|
+
//# sourceMappingURL=error-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-schema.js","sourceRoot":"","sources":["../../src/runtime/error-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,gBAAgB,CAAC;AAGnC;;;GAGG;AACH,MAAM,CAAC,MAAM,8BAA8B,GAAG,CAAC;KAC5C,MAAM,CAAC;IACN,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;QAC/D,WAAW,EAAE,8CAA8C;KAC5D,CAAC;IACF,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC;QACvB,WAAW,EAAE,iFAAiF;QAC9F,OAAO,EAAE,MAAM;KAChB,CAAC;IACF,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,oDAAoD,EAAE,CAAC;IAC9F,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,WAAW,EAAE,iBAAiB,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC;CACtF,CAAC;KACD,OAAO,CAAC,0BAA0B,CAAC,CAAC;AAEvC;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC;KACtC,MAAM,CAAC;IACN,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;IACzB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC;QACxB,WAAW,EAAE,8BAA8B;QAC3C,OAAO,EAAE,kBAAkB;KAC5B,CAAC;IACF,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC;QAC1B,WAAW,EAAE,6BAA6B;QAC1C,OAAO,EAAE,sBAAsB;KAChC,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC;QACjE,WAAW,EAAE,0CAA0C;KACxD,CAAC;IACF,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC;QAC5D,WAAW,EAAE,mFAAmF;KACjG,CAAC;CACH,CAAC;KACD,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAW7B,MAAM,kBAAkB,GAA6B,IAAI,CAAC;AAC1D,MAAM,aAAa,GAAwB,IAAI,CAAC;AAChD,KAAK,kBAAkB,CAAC;AACxB,KAAK,aAAa,CAAC"}
|
package/dist/runtime/errors.d.ts
CHANGED
|
@@ -39,4 +39,11 @@ export declare class OperationError extends Error {
|
|
|
39
39
|
constructor(status: number, body: Omit<OperationErrorBody, "success">, headers?: Readonly<Record<string, string>>);
|
|
40
40
|
toResponse(): Response;
|
|
41
41
|
}
|
|
42
|
+
/**
|
|
43
|
+
* Whether `error` is an {@link OperationError}: an instance of this
|
|
44
|
+
* package's class, or a structurally identical one from another copy of
|
|
45
|
+
* the package (isolated installs can load it twice), so a resolver or
|
|
46
|
+
* handler throwing from a different copy still short-circuits as intended.
|
|
47
|
+
*/
|
|
48
|
+
export declare function isOperationError(error: unknown): error is OperationError;
|
|
42
49
|
export declare function jsonResponse(status: number, body: unknown, headers?: HeadersInit): Response;
|
package/dist/runtime/errors.js
CHANGED
|
@@ -27,6 +27,25 @@ export class OperationError extends Error {
|
|
|
27
27
|
return jsonResponse(this.status, this.body, this.headers);
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
|
+
/**
|
|
31
|
+
* Whether `error` is an {@link OperationError}: an instance of this
|
|
32
|
+
* package's class, or a structurally identical one from another copy of
|
|
33
|
+
* the package (isolated installs can load it twice), so a resolver or
|
|
34
|
+
* handler throwing from a different copy still short-circuits as intended.
|
|
35
|
+
*/
|
|
36
|
+
export function isOperationError(error) {
|
|
37
|
+
if (error instanceof OperationError)
|
|
38
|
+
return true;
|
|
39
|
+
if (typeof error !== "object" || error === null)
|
|
40
|
+
return false;
|
|
41
|
+
const candidate = error;
|
|
42
|
+
return (candidate.name === "OperationError" &&
|
|
43
|
+
typeof candidate.status === "number" &&
|
|
44
|
+
typeof candidate.body === "object" &&
|
|
45
|
+
candidate.body !== null &&
|
|
46
|
+
candidate.body.success === false &&
|
|
47
|
+
typeof candidate.toResponse === "function");
|
|
48
|
+
}
|
|
30
49
|
export function jsonResponse(status, body, headers) {
|
|
31
50
|
const merged = new Headers(headers);
|
|
32
51
|
if (!merged.has("content-type")) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/runtime/errors.ts"],"names":[],"mappings":"AAsBA,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,UAAU,EAAE,kBAAkB;IAC9B,YAAY,EAAE,cAAc;IAC5B,SAAS,EAAE,WAAW;IACtB,iBAAiB,EAAE,oBAAoB;IACvC,oBAAoB,EAAE,uBAAuB;IAC7C,SAAS,EAAE,4BAA4B;IACvC,oBAAoB,EAAE,wBAAwB;IAC9C,QAAQ,EAAE,uBAAuB;CACzB,CAAC;AAEX;;;GAGG;AACH,MAAM,OAAO,cAAe,SAAQ,KAAK;IAC9B,MAAM,CAAS;IACf,IAAI,CAAqB;IACzB,OAAO,CAAmC;IAEnD,YACE,MAAc,EACd,IAAyC,EACzC,UAA4C,EAAE;QAE9C,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpB,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;QAC7B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,CAAC;QACxC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,UAAU;QACR,OAAO,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5D,CAAC;CACF;AAED,MAAM,UAAU,YAAY,CAC1B,MAAc,EACd,IAAa,EACb,OAAqB;IAErB,MAAM,MAAM,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IACpC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;QAChC,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE,iCAAiC,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;AACzE,CAAC"}
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/runtime/errors.ts"],"names":[],"mappings":"AAsBA,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,UAAU,EAAE,kBAAkB;IAC9B,YAAY,EAAE,cAAc;IAC5B,SAAS,EAAE,WAAW;IACtB,iBAAiB,EAAE,oBAAoB;IACvC,oBAAoB,EAAE,uBAAuB;IAC7C,SAAS,EAAE,4BAA4B;IACvC,oBAAoB,EAAE,wBAAwB;IAC9C,QAAQ,EAAE,uBAAuB;CACzB,CAAC;AAEX;;;GAGG;AACH,MAAM,OAAO,cAAe,SAAQ,KAAK;IAC9B,MAAM,CAAS;IACf,IAAI,CAAqB;IACzB,OAAO,CAAmC;IAEnD,YACE,MAAc,EACd,IAAyC,EACzC,UAA4C,EAAE;QAE9C,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpB,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;QAC7B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,IAAI,EAAE,CAAC;QACxC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,UAAU;QACR,OAAO,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5D,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,IAAI,KAAK,YAAY,cAAc;QAAE,OAAO,IAAI,CAAC;IACjD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC9D,MAAM,SAAS,GAAG,KAAqD,CAAC;IACxE,OAAO,CACL,SAAS,CAAC,IAAI,KAAK,gBAAgB;QACnC,OAAO,SAAS,CAAC,MAAM,KAAK,QAAQ;QACpC,OAAO,SAAS,CAAC,IAAI,KAAK,QAAQ;QAClC,SAAS,CAAC,IAAI,KAAK,IAAI;QACvB,SAAS,CAAC,IAAI,CAAC,OAAO,KAAK,KAAK;QAChC,OAAO,SAAS,CAAC,UAAU,KAAK,UAAU,CAC3C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,MAAc,EACd,IAAa,EACb,OAAqB;IAErB,MAAM,MAAM,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IACpC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC;QAChC,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE,iCAAiC,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,IAAI,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;AACzE,CAAC"}
|
package/dist/runtime/index.d.ts
CHANGED
|
@@ -2,9 +2,10 @@ export { createOperationsApp } from "./create-operations-app";
|
|
|
2
2
|
export type { CreateOperationsAppOptions, OpenApiDocumentRouteOptions, OperationFailureInfo, } from "./create-operations-app";
|
|
3
3
|
export { createOperationsAppFactory } from "./create-operations-app-factory";
|
|
4
4
|
export type { CreateOperationsAppFactoryOptions, OperationsAppFactory, OperationsAppFactoryAppOptions, } from "./create-operations-app-factory";
|
|
5
|
-
export { OperationError, OPERATION_ERROR_CODES, jsonResponse } from "./errors";
|
|
5
|
+
export { OperationError, OPERATION_ERROR_CODES, isOperationError, jsonResponse } from "./errors";
|
|
6
6
|
export type { OperationErrorBody, OperationValidationIssue } from "./errors";
|
|
7
|
-
export {
|
|
7
|
+
export { OperationErrorBodySchema, OperationValidationIssueSchema } from "./error-schema";
|
|
8
|
+
export { resolveAuth, requireUser, grantedScopes, missingScopes } from "./resolve-auth";
|
|
8
9
|
export type { AuthResolver, AuthResolvers } from "./resolve-auth";
|
|
9
10
|
export { validateRequest, queryToObject, headersToObject, readRequestBody } from "./validate-request";
|
|
10
11
|
export type { ValidatedRequest } from "./validate-request";
|
package/dist/runtime/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
export { createOperationsApp } from "./create-operations-app";
|
|
2
2
|
export { createOperationsAppFactory } from "./create-operations-app-factory";
|
|
3
|
-
export { OperationError, OPERATION_ERROR_CODES, jsonResponse } from "./errors";
|
|
4
|
-
export {
|
|
3
|
+
export { OperationError, OPERATION_ERROR_CODES, isOperationError, jsonResponse } from "./errors";
|
|
4
|
+
export { OperationErrorBodySchema, OperationValidationIssueSchema } from "./error-schema";
|
|
5
|
+
export { resolveAuth, requireUser, grantedScopes, missingScopes } from "./resolve-auth";
|
|
5
6
|
export { validateRequest, queryToObject, headersToObject, readRequestBody } from "./validate-request";
|
|
6
7
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAM9D,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAM7E,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAM9D,OAAO,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAC;AAM7E,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAEjG,OAAO,EAAE,wBAAwB,EAAE,8BAA8B,EAAE,MAAM,gBAAgB,CAAC;AAC1F,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAExF,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Context } from "hono";
|
|
2
|
-
import type
|
|
2
|
+
import { type AuthSchemeDefinition, type OperationAuth } from "../auth-scheme";
|
|
3
3
|
import type { AnyOperationDefinition, AuthPrincipal } from "../operation";
|
|
4
4
|
/**
|
|
5
5
|
* Verifies the credential transported by one auth scheme. Returns null when
|
|
@@ -12,6 +12,13 @@ import type { AnyOperationDefinition, AuthPrincipal } from "../operation";
|
|
|
12
12
|
export type AuthResolver<TUser = unknown, TContext = unknown> = (c: Context, scheme: AuthSchemeDefinition, context: TContext) => Promise<AuthPrincipal<TUser> | null> | AuthPrincipal<TUser> | null;
|
|
13
13
|
export type AuthResolvers<TUser = unknown, TContext = unknown> = Readonly<Record<string, AuthResolver<TUser, TContext>>>;
|
|
14
14
|
export declare function assertResolversForOperations(operations: readonly AnyOperationDefinition[], resolvers: AuthResolvers<any, any>): void;
|
|
15
|
+
/**
|
|
16
|
+
* Narrows a principal to one carrying a user, failing closed with a 401
|
|
17
|
+
* when it does not (or when the operation is public and `auth` is null).
|
|
18
|
+
* For handlers whose operations accept schemes without `principal: "user"`
|
|
19
|
+
* but which still need a signed-in user.
|
|
20
|
+
*/
|
|
21
|
+
export declare function requireUser<TUser>(auth: AuthPrincipal<TUser> | null | undefined): TUser;
|
|
15
22
|
export declare function grantedScopes(principal: AuthPrincipal): string[];
|
|
16
23
|
export declare function missingScopes(principal: AuthPrincipal, required: readonly string[]): string[];
|
|
17
24
|
/**
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { schemeResolvesUser } from "../auth-scheme";
|
|
1
2
|
import { OPERATION_ERROR_CODES, OperationError } from "./errors";
|
|
2
3
|
export function assertResolversForOperations(operations,
|
|
3
4
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
@@ -18,6 +19,29 @@ function challengeHeader(schemes) {
|
|
|
18
19
|
.filter((challenge) => typeof challenge === "string");
|
|
19
20
|
return challenges.length > 0 ? { "WWW-Authenticate": challenges.join(", ") } : {};
|
|
20
21
|
}
|
|
22
|
+
/**
|
|
23
|
+
* Narrows a principal to one carrying a user, failing closed with a 401
|
|
24
|
+
* when it does not (or when the operation is public and `auth` is null).
|
|
25
|
+
* For handlers whose operations accept schemes without `principal: "user"`
|
|
26
|
+
* but which still need a signed-in user.
|
|
27
|
+
*/
|
|
28
|
+
export function requireUser(auth) {
|
|
29
|
+
if (auth?.user === null || auth?.user === undefined) {
|
|
30
|
+
throw new OperationError(401, {
|
|
31
|
+
error: OPERATION_ERROR_CODES.unauthorized,
|
|
32
|
+
message: "This operation requires a signed-in user",
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
return auth.user;
|
|
36
|
+
}
|
|
37
|
+
function assertUserPrincipal(scheme, principal) {
|
|
38
|
+
if (schemeResolvesUser(scheme) && (principal.user === null || principal.user === undefined)) {
|
|
39
|
+
throw new OperationError(401, {
|
|
40
|
+
error: OPERATION_ERROR_CODES.unauthorized,
|
|
41
|
+
message: `The credential presented for "${scheme.name}" does not identify a user`,
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
}
|
|
21
45
|
export function grantedScopes(principal) {
|
|
22
46
|
if (typeof principal.scope !== "string")
|
|
23
47
|
return [];
|
|
@@ -42,8 +66,10 @@ export async function resolveAuth(c, auth, resolvers, context = undefined) {
|
|
|
42
66
|
if (!resolver)
|
|
43
67
|
continue;
|
|
44
68
|
principal = await resolver(c, scheme, context);
|
|
45
|
-
if (principal)
|
|
69
|
+
if (principal) {
|
|
70
|
+
assertUserPrincipal(scheme, principal);
|
|
46
71
|
break;
|
|
72
|
+
}
|
|
47
73
|
}
|
|
48
74
|
if (!principal) {
|
|
49
75
|
throw new OperationError(401, { error: OPERATION_ERROR_CODES.unauthorized, message: "Authentication required" }, challengeHeader(auth.schemes));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-auth.js","sourceRoot":"","sources":["../../src/runtime/resolve-auth.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"resolve-auth.js","sourceRoot":"","sources":["../../src/runtime/resolve-auth.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@schemavaults/openapi-operations",
|
|
3
3
|
"description": "Define OpenAPI-representable HTTP operations (zod schemas + auth schemes + handlers) and serve them as Hono apps on Vercel functions / Next.js route handlers",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.4.0",
|
|
5
5
|
"license": "UNLICENSED",
|
|
6
6
|
"private": false,
|
|
7
7
|
"repository": {
|
|
@@ -64,6 +64,11 @@
|
|
|
64
64
|
"import": "./dist/adapters/nextjs.js",
|
|
65
65
|
"require": "./dist/adapters/nextjs.js"
|
|
66
66
|
},
|
|
67
|
+
"./nextjs/app-router-routes": {
|
|
68
|
+
"types": "./dist/nextjs/app-router-routes.d.ts",
|
|
69
|
+
"import": "./dist/nextjs/app-router-routes.js",
|
|
70
|
+
"require": "./dist/nextjs/app-router-routes.js"
|
|
71
|
+
},
|
|
67
72
|
"./*": {
|
|
68
73
|
"types": "./dist/*",
|
|
69
74
|
"import": "./dist/*",
|