From 68337848cb3f987627da7381653d82c6d4e368a5 Mon Sep 17 00:00:00 2001 From: Andrew Haines Date: Mon, 25 Mar 2024 09:54:17 +0000 Subject: [PATCH] feat: Add `signal` option so that requests can be aborted (#894) Signed-off-by: Andrew Haines --- .prettierignore | 1 - docs/core.erroroptions.cause.md | 13 + docs/core.erroroptions.md | 57 + docs/core.md | 11 + docs/core.notok._constructor_.md | 18 +- docs/core.notok.md | 2 +- docs/core.requestoptions.md | 19 + docs/core.requestoptions.signal.md | 13 + docs/http.http._constructor_.md | 6 +- docs/http.http.md | 2 +- package.json | 5 +- packages/core/CHANGELOG.md | 2 + packages/core/changelog.yaml | 3 + packages/core/src/client.ts | 40 +- packages/core/src/errors.ts | 31 +- packages/grpc/CHANGELOG.md | 2 + packages/grpc/changelog.yaml | 3 + packages/grpc/src/index.ts | 11 +- packages/http/CHANGELOG.md | 2 + packages/http/changelog.yaml | 3 + packages/http/src/index.ts | 49 +- packages/opentelemetry/src/index.ts | 3 + private/test/buf.gen.yaml | 1 + private/test/src/client/abort.test.ts | 218 + private/test/src/client/cerbos.test.ts | 20 +- .../src/protobuf/cerbos/request/v1/request.ts | 1117 +++++ .../protobuf/cerbos/response/v1/response.ts | 1909 ++++++++- .../test/src/protobuf/cerbos/svc/v1/svc.ts | 248 ++ .../src/protobuf/google/api/annotations.ts | 3 + private/test/src/protobuf/google/api/http.ts | 262 ++ .../protobuf/google/protobuf/descriptor.ts | 655 +++ .../protoc-gen-openapiv2/options/openapiv2.ts | 3649 +++++++++++++++-- 32 files changed, 7917 insertions(+), 461 deletions(-) create mode 100644 docs/core.erroroptions.cause.md create mode 100644 docs/core.erroroptions.md create mode 100644 docs/core.requestoptions.signal.md create mode 100644 private/test/src/client/abort.test.ts create mode 100644 private/test/src/protobuf/cerbos/request/v1/request.ts create mode 100644 private/test/src/protobuf/cerbos/svc/v1/svc.ts create mode 100644 private/test/src/protobuf/google/api/annotations.ts create mode 100644 private/test/src/protobuf/google/api/http.ts diff --git a/.prettierignore b/.prettierignore index 769b9d2a..553ab965 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,5 +1,4 @@ /api/ /docs/ /packages/*/lib/ -/releasing.md /pnpm-lock.yaml diff --git a/docs/core.erroroptions.cause.md b/docs/core.erroroptions.cause.md new file mode 100644 index 00000000..459426ce --- /dev/null +++ b/docs/core.erroroptions.cause.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [@cerbos/core](./core.md) > [ErrorOptions](./core.erroroptions.md) > [cause](./core.erroroptions.cause.md) + +## ErrorOptions.cause property + +The original error that caused this one. + +**Signature:** + +```typescript +cause?: unknown; +``` diff --git a/docs/core.erroroptions.md b/docs/core.erroroptions.md new file mode 100644 index 00000000..ca7a0e04 --- /dev/null +++ b/docs/core.erroroptions.md @@ -0,0 +1,57 @@ + + +[Home](./index.md) > [@cerbos/core](./core.md) > [ErrorOptions](./core.erroroptions.md) + +## ErrorOptions interface + +Options for creating an error. + +**Signature:** + +```typescript +export interface ErrorOptions +``` + +## Properties + + + +
+ +Property + + + + +Modifiers + + + + +Type + + + + +Description + + +
+ +[cause?](./core.erroroptions.cause.md) + + + + + + + +unknown + + + + +_(Optional)_ The original error that caused this one. + + +
diff --git a/docs/core.md b/docs/core.md index b40dcdbd..28f7d713 100644 --- a/docs/core.md +++ b/docs/core.md @@ -518,6 +518,17 @@ Input to [Client.enablePolicies()](./core.client.enablepolicies.md). The outcome of enabling policies. + + + +[ErrorOptions](./core.erroroptions.md) + + + + +Options for creating an error. + + diff --git a/docs/core.notok._constructor_.md b/docs/core.notok._constructor_.md index 21cd2356..de65508f 100644 --- a/docs/core.notok._constructor_.md +++ b/docs/core.notok._constructor_.md @@ -11,7 +11,7 @@ Constructs a new instance of the `NotOK` class ```typescript constructor( code: Status, - details: string); + details: string, options?: ErrorOptions); ``` ## Parameters @@ -59,5 +59,21 @@ string + + + +options + + + + +[ErrorOptions](./core.erroroptions.md) + + + + +_(Optional)_ + + diff --git a/docs/core.notok.md b/docs/core.notok.md index 4ab45e83..a0ec98bd 100644 --- a/docs/core.notok.md +++ b/docs/core.notok.md @@ -33,7 +33,7 @@ Description -[(constructor)(code, details)](./core.notok._constructor_.md) +[(constructor)(code, details, options)](./core.notok._constructor_.md) diff --git a/docs/core.requestoptions.md b/docs/core.requestoptions.md index 2ddaac51..216b2578 100644 --- a/docs/core.requestoptions.md +++ b/docs/core.requestoptions.md @@ -53,5 +53,24 @@ Description _(Optional)_ Headers to add to the request. + + + +[signal?](./core.requestoptions.signal.md) + + + + + + + +AbortSignal \| undefined + + + + +_(Optional)_ A [signal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) to abort the request. + + diff --git a/docs/core.requestoptions.signal.md b/docs/core.requestoptions.signal.md new file mode 100644 index 00000000..476d45c3 --- /dev/null +++ b/docs/core.requestoptions.signal.md @@ -0,0 +1,13 @@ + + +[Home](./index.md) > [@cerbos/core](./core.md) > [RequestOptions](./core.requestoptions.md) > [signal](./core.requestoptions.signal.md) + +## RequestOptions.signal property + +A [signal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) to abort the request. + +**Signature:** + +```typescript +signal?: AbortSignal | undefined; +``` diff --git a/docs/http.http._constructor_.md b/docs/http.http._constructor_.md index 5ed59cf1..0d6f625d 100644 --- a/docs/http.http._constructor_.md +++ b/docs/http.http._constructor_.md @@ -9,7 +9,7 @@ Create a client for interacting with the Cerbos policy decision point (PDP) serv **Signature:** ```typescript -constructor(url: string, options?: Options); +constructor(baseUrl: string, options?: Options); ``` ## Parameters @@ -32,7 +32,7 @@ Description -url +baseUrl @@ -42,7 +42,7 @@ string -base Cerbos PDP server URL (the Cerbos REST API must be available at `${url}/api/`). +base Cerbos PDP server URL (the Cerbos REST API must be available at `${baseUrl}/api/`). diff --git a/docs/http.http.md b/docs/http.http.md index e2565f7f..572536eb 100644 --- a/docs/http.http.md +++ b/docs/http.http.md @@ -41,7 +41,7 @@ Description -[(constructor)(url, options)](./http.http._constructor_.md) +[(constructor)(baseUrl, options)](./http.http._constructor_.md) diff --git a/package.json b/package.json index fc13e536..a3c597d0 100644 --- a/package.json +++ b/package.json @@ -8,11 +8,12 @@ }, "scripts": { "all:parallel": "concurrently --group --prefix=none", + "api:extract": "pnpm --filter='./packages/*' --parallel exec api-extractor run", + "api:fixup": "scripts/sed-all api 's/_2//'", "build": "tsc --build", "build:watch": "tsc --build --watch", "clean": "rm -rf api packages/*/lib private/*/tsconfig.tsbuildinfo", - "docs": "pnpm run build && pnpm run docs:extract-api && pnpm run docs:generate && pnpm run docs:fixup", - "docs:extract-api": "pnpm --filter='./packages/*' --parallel exec api-extractor run", + "docs": "pnpm run build && pnpm run api:extract && pnpm run api:fixup && pnpm run docs:generate && pnpm run docs:fixup", "docs:fixup": "scripts/sed-all docs 's/\\r$//'", "docs:generate": "api-documenter markdown --input-folder api --output-folder docs", "generate": "pnpm run generate:clean && pnpm run all:parallel 'pnpm:generate:*(!clean|format)' && pnpm run generate:format", diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index 45d82348..fa1e34e6 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -6,6 +6,8 @@ - [`Client.withPrincipal`](../../docs/core.client.withprincipal.md) method to create a client instance with a pre-specified principal ([#868](https://github.com/cerbos/cerbos-sdk-javascript/pull/868), [#877](https://github.com/cerbos/cerbos-sdk-javascript/pull/877)) +- [`signal`](../../docs/core.requestoptions.signal.md) option to all methods, so that requests can be aborted using an [`AbortSignal`](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) ([#894](https://github.com/cerbos/cerbos-sdk-javascript/pull/894)) + ### Changed - Publish package from GitHub Actions and [generate provenance statement](https://docs.npmjs.com/generating-provenance-statements) ([#852](https://github.com/cerbos/cerbos-sdk-javascript/pull/852)) diff --git a/packages/core/changelog.yaml b/packages/core/changelog.yaml index 1051be90..4a49687c 100644 --- a/packages/core/changelog.yaml +++ b/packages/core/changelog.yaml @@ -5,6 +5,9 @@ unreleased: - summary: "[`Client.withPrincipal`](../../docs/core.client.withprincipal.md) method to create a client instance with a pre-specified principal" pulls: [868, 877] + - summary: "[`signal`](../../docs/core.requestoptions.signal.md) option to all methods, so that requests can be aborted using an [`AbortSignal`](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal)" + pull: 894 + changed: - summary: Publish package from GitHub Actions and [generate provenance statement](https://docs.npmjs.com/generating-provenance-statements) pull: 852 diff --git a/packages/core/src/client.ts b/packages/core/src/client.ts index 78f3b098..e87109f4 100644 --- a/packages/core/src/client.ts +++ b/packages/core/src/client.ts @@ -21,7 +21,7 @@ import { listPoliciesRequestToProtobuf, planResourcesRequestToProtobuf, } from "./convert/toProtobuf"; -import { ValidationFailed } from "./errors"; +import { NotOK, Status, ValidationFailed } from "./errors"; import type { _RPC, _Request, _Response, _Service } from "./rpcs"; import type { AddOrUpdatePoliciesRequest, @@ -56,12 +56,40 @@ import type { ValidationFailedCallback, } from "./types/external"; +/** @internal */ +export class _AbortHandler { + public constructor(public readonly signal: AbortSignal | undefined) {} + + public throwIfAborted(): void { + if (this.signal?.aborted) { + throw this.error(); + } + } + + public onAbort(listener: (error: NotOK) => void): void { + this.signal?.addEventListener("abort", () => { + listener(this.error()); + }); + } + + private error(): NotOK { + const reason = this.signal?.reason as unknown; + + return new NotOK( + Status.CANCELLED, + reason instanceof Error ? `Aborted: ${reason.message}` : "Aborted", + { cause: reason }, + ); + } +} + /** @internal */ export type _Transport = >( service: Service, rpc: RPC, request: _Request, headers: Headers, + abortHandler: _AbortHandler, ) => Promise<_Response>; /** @internal */ @@ -181,6 +209,13 @@ export interface RequestOptions { * @defaultValue `undefined` */ headers?: HeadersInit | undefined; + + /** + * A {@link https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal | signal} to abort the request. + * + * @defaultValue `undefined` + */ + signal?: AbortSignal | undefined; } /** @@ -912,13 +947,14 @@ export abstract class Client { rpc: RPC, request: _Request, adminCredentials: AdminCredentials | undefined, - { headers }: RequestOptions = {}, + { headers, signal }: RequestOptions = {}, ): Promise<_Response> { return await this.transport( service, rpc, request, await this.mergeHeaders(headers, adminCredentials), + new _AbortHandler(signal), ); } diff --git a/packages/core/src/errors.ts b/packages/core/src/errors.ts index 7b8ff4eb..9199792a 100644 --- a/packages/core/src/errors.ts +++ b/packages/core/src/errors.ts @@ -52,6 +52,18 @@ export enum Status { UNKNOWN = 2, } +/** + * Options for creating an error. + * + * @public + */ +export interface ErrorOptions { + /** + * The original error that caused this one. + */ + cause?: unknown; +} + /** * Error thrown when the Cerbos policy decision point server returns an unsuccessful response. * @@ -80,10 +92,11 @@ export class NotOK extends Error { * Additional error details. */ public readonly details: string, + + options?: ErrorOptions, ) { - super(`gRPC error ${code} (${Status[code]}): ${details}`); - this.name = this.constructor.name; - Error.captureStackTrace(this, this.constructor); + super(`gRPC error ${code} (${Status[code]}): ${details}`, options); + setNameAndStack(this); } } @@ -127,7 +140,15 @@ export class ValidationFailed extends Error { public readonly validationErrors: ValidationError[], ) { super("Input failed schema validation"); - this.name = this.constructor.name; - Error.captureStackTrace(this, this.constructor); + setNameAndStack(this); + } +} + +function setNameAndStack(error: Error): void { + error.name = error.constructor.name; + + // `Error.captureStackTrace` is not available in all browsers + if ("captureStackTrace" in Error) { + Error.captureStackTrace(error, error.constructor); } } diff --git a/packages/grpc/CHANGELOG.md b/packages/grpc/CHANGELOG.md index 48fa225f..14f9c52e 100644 --- a/packages/grpc/CHANGELOG.md +++ b/packages/grpc/CHANGELOG.md @@ -6,6 +6,8 @@ - [`Client.withPrincipal`](../../docs/core.client.withprincipal.md) method to create a client instance with a pre-specified principal ([#868](https://github.com/cerbos/cerbos-sdk-javascript/pull/868), [#877](https://github.com/cerbos/cerbos-sdk-javascript/pull/877)) +- [`signal`](../../docs/core.requestoptions.signal.md) option to all methods, so that requests can be aborted using an [`AbortSignal`](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) ([#894](https://github.com/cerbos/cerbos-sdk-javascript/pull/894)) + ### Changed - Publish package from GitHub Actions and [generate provenance statement](https://docs.npmjs.com/generating-provenance-statements) ([#852](https://github.com/cerbos/cerbos-sdk-javascript/pull/852)) diff --git a/packages/grpc/changelog.yaml b/packages/grpc/changelog.yaml index ba8b14b3..18702e9a 100644 --- a/packages/grpc/changelog.yaml +++ b/packages/grpc/changelog.yaml @@ -5,6 +5,9 @@ unreleased: - summary: "[`Client.withPrincipal`](../../docs/core.client.withprincipal.md) method to create a client instance with a pre-specified principal" pulls: [868, 877] + - summary: "[`signal`](../../docs/core.requestoptions.signal.md) option to all methods, so that requests can be aborted using an [`AbortSignal`](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal)" + pull: 894 + changed: - summary: Publish package from GitHub Actions and [generate provenance statement](https://docs.npmjs.com/generating-provenance-statements) pull: 852 diff --git a/packages/grpc/src/index.ts b/packages/grpc/src/index.ts index d33e0dce..83623e2b 100644 --- a/packages/grpc/src/index.ts +++ b/packages/grpc/src/index.ts @@ -101,7 +101,7 @@ export class GRPC extends Client { }${defaultUserAgent}`, }); - super(async (service, rpc, request, headers) => { + super(async (service, rpc, request, headers, abortHandler) => { const { path, requestSerialize, responseDeserialize } = services[service][ rpc ] as Endpoint; // https://github.com/microsoft/TypeScript/issues/30581 @@ -114,7 +114,9 @@ export class GRPC extends Client { } return await new Promise((resolve, reject) => { - client.makeUnaryRequest( + abortHandler.throwIfAborted(); + + const call = client.makeUnaryRequest( path, requestSerialize, responseDeserialize, @@ -136,6 +138,11 @@ export class GRPC extends Client { } }, ); + + abortHandler.onAbort((error) => { + reject(error); + call.cancel(); + }); }); }, options); diff --git a/packages/http/CHANGELOG.md b/packages/http/CHANGELOG.md index 42ed11cb..a041241c 100644 --- a/packages/http/CHANGELOG.md +++ b/packages/http/CHANGELOG.md @@ -6,6 +6,8 @@ - [`Client.withPrincipal`](../../docs/core.client.withprincipal.md) method to create a client instance with a pre-specified principal ([#868](https://github.com/cerbos/cerbos-sdk-javascript/pull/868), [#877](https://github.com/cerbos/cerbos-sdk-javascript/pull/877)) +- [`signal`](../../docs/core.requestoptions.signal.md) option to all methods, so that requests can be aborted using an [`AbortSignal`](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) ([#894](https://github.com/cerbos/cerbos-sdk-javascript/pull/894)) + ### Changed - Publish package from GitHub Actions and [generate provenance statement](https://docs.npmjs.com/generating-provenance-statements) ([#852](https://github.com/cerbos/cerbos-sdk-javascript/pull/852)) diff --git a/packages/http/changelog.yaml b/packages/http/changelog.yaml index 23233223..36e37c38 100644 --- a/packages/http/changelog.yaml +++ b/packages/http/changelog.yaml @@ -5,6 +5,9 @@ unreleased: - summary: "[`Client.withPrincipal`](../../docs/core.client.withprincipal.md) method to create a client instance with a pre-specified principal" pulls: [868, 877] + - summary: "[`signal`](../../docs/core.requestoptions.signal.md) option to all methods, so that requests can be aborted using an [`AbortSignal`](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal)" + pull: 894 + changed: - summary: Publish package from GitHub Actions and [generate provenance statement](https://docs.npmjs.com/generating-provenance-statements) pull: 852 diff --git a/packages/http/src/index.ts b/packages/http/src/index.ts index caf16744..26e78edd 100644 --- a/packages/http/src/index.ts +++ b/packages/http/src/index.ts @@ -11,7 +11,7 @@ import type { _Response, _Service, } from "@cerbos/core"; -import { Client, NotOK } from "@cerbos/core"; +import { Client, NotOK, Status } from "@cerbos/core"; import { stringify as queryStringify } from "qs"; import { @@ -74,7 +74,7 @@ export class HTTP extends Client { /** * Create a client for interacting with the Cerbos policy decision point (PDP) server over HTTP. * - * @param url - base Cerbos PDP server URL (the Cerbos REST API must be available at `${url}/api/`). + * @param baseUrl - base Cerbos PDP server URL (the Cerbos REST API must be available at `${baseUrl}/api/`). * @param options - additional client settings. * * @example @@ -91,30 +91,49 @@ export class HTTP extends Client { * const cerbos = new HTTP("https://demo-pdp.cerbos.cloud", { playgroundInstance: "gE623b0180QlsG5a4QIN6UOZ6f3iSFW2" }); * ``` */ - public constructor(url: string, options: Options = {}) { + public constructor(baseUrl: string, options: Options = {}) { const userAgent = `${ options.userAgent ? `${options.userAgent} ` : "" }${defaultUserAgent}`; - super(async (service, rpc, request, headers) => { + super(async (service, rpc, request, headers, abortHandler) => { const { method, path, requestType, responseType, serializeRequest } = services[service][rpc] as Endpoint; // https://github.com/microsoft/TypeScript/issues/30581 + headers.set("User-Agent", userAgent); + + let url = baseUrl + path; + const init: RequestInit = { method, headers }; + const requestProtobuf = requestType.toJSON(request); + switch (serializeRequest) { + case "body": + init.body = JSON.stringify(requestProtobuf); + break; + + case "query": + url += `?${queryStringify(requestProtobuf, { indices: false })}`; + break; + } - const query = - serializeRequest === "query" - ? `?${queryStringify(requestProtobuf, { indices: false })}` - : ""; + if (abortHandler.signal) { + init.signal = abortHandler.signal; + } - headers.set("User-Agent", userAgent); + let response: Response; + try { + response = await fetch(url, init); + } catch (error) { + abortHandler.throwIfAborted(); - const response = await fetch(url + path + query, { - method, - body: - serializeRequest === "body" ? JSON.stringify(requestProtobuf) : null, - headers, - }); + throw new NotOK( + Status.UNKNOWN, + error instanceof Error + ? `Request failed: ${error.message}` + : "Request failed", + { cause: error }, + ); + } if (!response.ok) { throw NotOK.fromJSON(await response.text()); diff --git a/packages/opentelemetry/src/index.ts b/packages/opentelemetry/src/index.ts index 091d8254..c127f712 100644 --- a/packages/opentelemetry/src/index.ts +++ b/packages/opentelemetry/src/index.ts @@ -5,6 +5,7 @@ */ import type { + _AbortHandler, _Instrumenter, _RPC, _Request, @@ -109,6 +110,7 @@ export class CerbosInstrumentation implements Instrumentation { rpc: RPC, request: _Request, headers: Headers, + abortHandler: _AbortHandler, ): Promise<_Response> => { const startTime = performance.now(); @@ -141,6 +143,7 @@ export class CerbosInstrumentation implements Instrumentation { rpc, request, headers, + abortHandler, )) as _Response; attributes[SEMATTRS_RPC_GRPC_STATUS_CODE] = 0; diff --git a/private/test/buf.gen.yaml b/private/test/buf.gen.yaml index c8bd7f08..093ea868 100644 --- a/private/test/buf.gen.yaml +++ b/private/test/buf.gen.yaml @@ -3,6 +3,7 @@ version: v1 types: include: - cerbos.response.v1.ListAuditLogEntriesResponse + - cerbos.svc.v1.CerbosService - jaeger.api_v3.QueryService plugins: diff --git a/private/test/src/client/abort.test.ts b/private/test/src/client/abort.test.ts new file mode 100644 index 00000000..574c2271 --- /dev/null +++ b/private/test/src/client/abort.test.ts @@ -0,0 +1,218 @@ +import { createServer as createHTTPServer } from "http"; +import type { AddressInfo } from "net"; + +import type { Client } from "@cerbos/core"; +import { NotOK, Status } from "@cerbos/core"; +import { GRPC } from "@cerbos/grpc"; +import { HTTP } from "@cerbos/http"; +import { Server as GRPCServer, ServerCredentials } from "@grpc/grpc-js"; +import { beforeAll, beforeEach, describe, expect, test } from "vitest"; + +import type { ServerInfoResponse } from "../protobuf/cerbos/response/v1/response"; +import type { CerbosServiceServer } from "../protobuf/cerbos/svc/v1/svc"; +import { CerbosServiceService as CerbosService } from "../protobuf/cerbos/svc/v1/svc"; + +const dummyResponse: ServerInfoResponse = { + version: "test", + commit: "", + buildDate: "", +}; + +describe("aborting requests", () => { + describe.each([ + ["gRPC", new DummyGRPCServer()], + ["HTTP", new DummyHTTPServer()], + ])("%s", (_, dummyServer) => { + let client: Client; + + beforeAll(async () => { + client = await dummyServer.start(); + }); + + beforeEach(() => { + dummyServer.reset(); + }); + + test("before sending the request", async () => { + const controller = new AbortController(); + const reason = new Error("Don't even"); + controller.abort(reason); + + const response = client.serverInfo({ + signal: controller.signal, + }); + + await expect(response).rejects.toMatchObject({ + constructor: NotOK, + code: Status.CANCELLED, + cause: reason, + }); + + expect(dummyServer.request).toEqual("pending"); + }); + + test("while in flight", async () => { + const controller = new AbortController(); + const reason = new Error("Never mind"); + + const response = client.serverInfo({ + signal: controller.signal, + }); + + await dummyServer.received; + + controller.abort(reason); + + await expect(response).rejects.toMatchObject({ + constructor: NotOK, + code: Status.CANCELLED, + cause: reason, + }); + + expect(await dummyServer.request).toEqual("cancelled"); + }); + + test("after completion", async () => { + const controller = new AbortController(); + + const response = await client.serverInfo({ + signal: controller.signal, + }); + + controller.abort(new Error("Too late")); + + expect(response).toEqual(dummyResponse); + expect(await dummyServer.request).toEqual("completed"); + }); + }); +}); + +abstract class DummyServer { + public request!: Promise<"cancelled" | "completed"> | "pending"; + public received!: Promise; + + private onReceive = (): void => { + this.received = Promise.resolve(true); + }; + + private onReset = (): void => { + this.received = Promise.resolve(false); + }; + + public constructor() { + this.reset(); + } + + public reset(): void { + this.onReset(); + + this.request = "pending"; + + this.received = new Promise((resolve) => { + this.onReceive = (): void => { + resolve(true); + }; + + this.onReset = (): void => { + resolve(false); + }; + }); + } + + public abstract start(): Promise; + + public abstract stop(): Promise; + + protected handle(cancelled: () => boolean, respond: () => void): void { + this.request = new Promise((resolve) => { + setTimeout(() => { + if (cancelled()) { + resolve("cancelled"); + } else { + respond(); + resolve("completed"); + } + }, 50); + }); + + this.onReceive(); + } +} + +class DummyGRPCServer extends DummyServer { + private readonly server = new GRPCServer(); + + public override async start(): Promise { + this.server.addService(CerbosService, { + serverInfo: (call, callback): void => { + this.handle( + () => call.cancelled, + () => { + callback(null, dummyResponse); + }, + ); + }, + } satisfies Pick); + + return await new Promise((resolve, reject) => { + this.server.bindAsync( + "localhost:0", + ServerCredentials.createInsecure(), + (error, port) => { + if (error) { + reject(error); + } else { + resolve(new GRPC(`localhost:${port}`, { tls: false })); + } + }, + ); + }); + } + + public override async stop(): Promise { + await new Promise((resolve, reject) => { + this.server.tryShutdown((error) => { + if (error) { + try { + this.server.forceShutdown(); + } catch (error) { + reject(error); // eslint-disable-line @typescript-eslint/prefer-promise-reject-errors + } + } + + resolve(); + }); + }); + } +} + +class DummyHTTPServer extends DummyServer { + private readonly server = createHTTPServer((request, response) => { + this.handle( + () => request.destroyed, + () => { + response.writeHead(200).end(JSON.stringify(dummyResponse)); + }, + ); + }); + + public override async start(): Promise { + return await new Promise((resolve, reject) => { + this.server.on("error", reject); + + this.server.listen(0, "localhost", () => { + const { port } = this.server.address() as AddressInfo; + resolve(new HTTP(`http://localhost:${port}`)); + this.server.off("error", reject); + }); + }); + } + + public override async stop(): Promise { + await new Promise((resolve) => { + this.server.close(() => { + resolve(); + }); + }); + } +} diff --git a/private/test/src/client/cerbos.test.ts b/private/test/src/client/cerbos.test.ts index e473e95b..3efad1b8 100644 --- a/private/test/src/client/cerbos.test.ts +++ b/private/test/src/client/cerbos.test.ts @@ -1608,23 +1608,19 @@ describe("Client", () => { }); it("handles errors", async () => { - try { - await clients.default.checkResources({ + await expect( + clients.default.checkResources({ principal: { id: "", roles: [], }, resources: [], - }); - - throw new Error("expected an error to be thrown"); - } catch (error) { - expect(error).toMatchObject({ - constructor: NotOK, - code: Status.INVALID_ARGUMENT, - details: invalidArgumentDetails, - }); - } + }), + ).rejects.toMatchObject({ + constructor: NotOK, + code: Status.INVALID_ARGUMENT, + details: invalidArgumentDetails, + }); }); }, ); diff --git a/private/test/src/protobuf/cerbos/request/v1/request.ts b/private/test/src/protobuf/cerbos/request/v1/request.ts new file mode 100644 index 00000000..b2eb76f7 --- /dev/null +++ b/private/test/src/protobuf/cerbos/request/v1/request.ts @@ -0,0 +1,1117 @@ +/* eslint-disable */ +import _m0 from "protobufjs/minimal"; +import { Value } from "../../../google/protobuf/struct"; +import { + PlanResourcesInput_Resource, + Principal, + Resource, +} from "../../engine/v1/engine"; + +export const protobufPackage = "cerbos.request.v1"; + +export interface PlanResourcesRequest { + requestId: string; + action: string; + principal: Principal | undefined; + resource: PlanResourcesInput_Resource | undefined; + auxData: AuxData | undefined; + includeMeta: boolean; +} + +export interface CheckResourceSetRequest { + requestId: string; + actions: string[]; + principal: Principal | undefined; + resource: ResourceSet | undefined; + includeMeta: boolean; + auxData: AuxData | undefined; +} + +export interface ResourceSet { + kind: string; + policyVersion: string; + instances: { [key: string]: AttributesMap }; + scope: string; +} + +export interface ResourceSet_InstancesEntry { + key: string; + value: AttributesMap | undefined; +} + +export interface AttributesMap { + attr: { [key: string]: any | undefined }; +} + +export interface AttributesMap_AttrEntry { + key: string; + value: any | undefined; +} + +export interface CheckResourceBatchRequest { + requestId: string; + principal: Principal | undefined; + resources: CheckResourceBatchRequest_BatchEntry[]; + auxData: AuxData | undefined; +} + +export interface CheckResourceBatchRequest_BatchEntry { + actions: string[]; + resource: Resource | undefined; +} + +export interface CheckResourcesRequest { + requestId: string; + includeMeta: boolean; + principal: Principal | undefined; + resources: CheckResourcesRequest_ResourceEntry[]; + auxData: AuxData | undefined; +} + +export interface CheckResourcesRequest_ResourceEntry { + actions: string[]; + resource: Resource | undefined; +} + +export interface AuxData { + jwt: AuxData_JWT | undefined; +} + +export interface AuxData_JWT { + token: string; + keySetId: string; +} + +export interface ServerInfoRequest {} + +function createBasePlanResourcesRequest(): PlanResourcesRequest { + return { + requestId: "", + action: "", + principal: undefined, + resource: undefined, + auxData: undefined, + includeMeta: false, + }; +} + +export const PlanResourcesRequest = { + encode( + message: PlanResourcesRequest, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + if (message.requestId !== "") { + writer.uint32(10).string(message.requestId); + } + if (message.action !== "") { + writer.uint32(18).string(message.action); + } + if (message.principal !== undefined) { + Principal.encode(message.principal, writer.uint32(26).fork()).ldelim(); + } + if (message.resource !== undefined) { + PlanResourcesInput_Resource.encode( + message.resource, + writer.uint32(34).fork(), + ).ldelim(); + } + if (message.auxData !== undefined) { + AuxData.encode(message.auxData, writer.uint32(42).fork()).ldelim(); + } + if (message.includeMeta !== false) { + writer.uint32(48).bool(message.includeMeta); + } + return writer; + }, + + decode( + input: _m0.Reader | Uint8Array, + length?: number, + ): PlanResourcesRequest { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBasePlanResourcesRequest(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.requestId = reader.string(); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.action = reader.string(); + continue; + case 3: + if (tag !== 26) { + break; + } + + message.principal = Principal.decode(reader, reader.uint32()); + continue; + case 4: + if (tag !== 34) { + break; + } + + message.resource = PlanResourcesInput_Resource.decode( + reader, + reader.uint32(), + ); + continue; + case 5: + if (tag !== 42) { + break; + } + + message.auxData = AuxData.decode(reader, reader.uint32()); + continue; + case 6: + if (tag !== 48) { + break; + } + + message.includeMeta = reader.bool(); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): PlanResourcesRequest { + return { + requestId: isSet(object.requestId) + ? globalThis.String(object.requestId) + : "", + action: isSet(object.action) ? globalThis.String(object.action) : "", + principal: isSet(object.principal) + ? Principal.fromJSON(object.principal) + : undefined, + resource: isSet(object.resource) + ? PlanResourcesInput_Resource.fromJSON(object.resource) + : undefined, + auxData: isSet(object.auxData) + ? AuxData.fromJSON(object.auxData) + : undefined, + includeMeta: isSet(object.includeMeta) + ? globalThis.Boolean(object.includeMeta) + : false, + }; + }, +}; + +function createBaseCheckResourceSetRequest(): CheckResourceSetRequest { + return { + requestId: "", + actions: [], + principal: undefined, + resource: undefined, + includeMeta: false, + auxData: undefined, + }; +} + +export const CheckResourceSetRequest = { + encode( + message: CheckResourceSetRequest, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + if (message.requestId !== "") { + writer.uint32(10).string(message.requestId); + } + for (const v of message.actions) { + writer.uint32(18).string(v!); + } + if (message.principal !== undefined) { + Principal.encode(message.principal, writer.uint32(26).fork()).ldelim(); + } + if (message.resource !== undefined) { + ResourceSet.encode(message.resource, writer.uint32(34).fork()).ldelim(); + } + if (message.includeMeta !== false) { + writer.uint32(40).bool(message.includeMeta); + } + if (message.auxData !== undefined) { + AuxData.encode(message.auxData, writer.uint32(50).fork()).ldelim(); + } + return writer; + }, + + decode( + input: _m0.Reader | Uint8Array, + length?: number, + ): CheckResourceSetRequest { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseCheckResourceSetRequest(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.requestId = reader.string(); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.actions.push(reader.string()); + continue; + case 3: + if (tag !== 26) { + break; + } + + message.principal = Principal.decode(reader, reader.uint32()); + continue; + case 4: + if (tag !== 34) { + break; + } + + message.resource = ResourceSet.decode(reader, reader.uint32()); + continue; + case 5: + if (tag !== 40) { + break; + } + + message.includeMeta = reader.bool(); + continue; + case 6: + if (tag !== 50) { + break; + } + + message.auxData = AuxData.decode(reader, reader.uint32()); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): CheckResourceSetRequest { + return { + requestId: isSet(object.requestId) + ? globalThis.String(object.requestId) + : "", + actions: globalThis.Array.isArray(object?.actions) + ? object.actions.map((e: any) => globalThis.String(e)) + : [], + principal: isSet(object.principal) + ? Principal.fromJSON(object.principal) + : undefined, + resource: isSet(object.resource) + ? ResourceSet.fromJSON(object.resource) + : undefined, + includeMeta: isSet(object.includeMeta) + ? globalThis.Boolean(object.includeMeta) + : false, + auxData: isSet(object.auxData) + ? AuxData.fromJSON(object.auxData) + : undefined, + }; + }, +}; + +function createBaseResourceSet(): ResourceSet { + return { kind: "", policyVersion: "", instances: {}, scope: "" }; +} + +export const ResourceSet = { + encode( + message: ResourceSet, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + if (message.kind !== "") { + writer.uint32(10).string(message.kind); + } + if (message.policyVersion !== "") { + writer.uint32(18).string(message.policyVersion); + } + Object.entries(message.instances).forEach(([key, value]) => { + ResourceSet_InstancesEntry.encode( + { key: key as any, value }, + writer.uint32(26).fork(), + ).ldelim(); + }); + if (message.scope !== "") { + writer.uint32(34).string(message.scope); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): ResourceSet { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseResourceSet(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.kind = reader.string(); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.policyVersion = reader.string(); + continue; + case 3: + if (tag !== 26) { + break; + } + + const entry3 = ResourceSet_InstancesEntry.decode( + reader, + reader.uint32(), + ); + if (entry3.value !== undefined) { + message.instances[entry3.key] = entry3.value; + } + continue; + case 4: + if (tag !== 34) { + break; + } + + message.scope = reader.string(); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): ResourceSet { + return { + kind: isSet(object.kind) ? globalThis.String(object.kind) : "", + policyVersion: isSet(object.policyVersion) + ? globalThis.String(object.policyVersion) + : "", + instances: isObject(object.instances) + ? Object.entries(object.instances).reduce<{ + [key: string]: AttributesMap; + }>((acc, [key, value]) => { + acc[key] = AttributesMap.fromJSON(value); + return acc; + }, {}) + : {}, + scope: isSet(object.scope) ? globalThis.String(object.scope) : "", + }; + }, +}; + +function createBaseResourceSet_InstancesEntry(): ResourceSet_InstancesEntry { + return { key: "", value: undefined }; +} + +export const ResourceSet_InstancesEntry = { + encode( + message: ResourceSet_InstancesEntry, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + if (message.key !== "") { + writer.uint32(10).string(message.key); + } + if (message.value !== undefined) { + AttributesMap.encode(message.value, writer.uint32(18).fork()).ldelim(); + } + return writer; + }, + + decode( + input: _m0.Reader | Uint8Array, + length?: number, + ): ResourceSet_InstancesEntry { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseResourceSet_InstancesEntry(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.key = reader.string(); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.value = AttributesMap.decode(reader, reader.uint32()); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): ResourceSet_InstancesEntry { + return { + key: isSet(object.key) ? globalThis.String(object.key) : "", + value: isSet(object.value) + ? AttributesMap.fromJSON(object.value) + : undefined, + }; + }, +}; + +function createBaseAttributesMap(): AttributesMap { + return { attr: {} }; +} + +export const AttributesMap = { + encode( + message: AttributesMap, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + Object.entries(message.attr).forEach(([key, value]) => { + if (value !== undefined) { + AttributesMap_AttrEntry.encode( + { key: key as any, value }, + writer.uint32(10).fork(), + ).ldelim(); + } + }); + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): AttributesMap { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseAttributesMap(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + const entry1 = AttributesMap_AttrEntry.decode( + reader, + reader.uint32(), + ); + if (entry1.value !== undefined) { + message.attr[entry1.key] = entry1.value; + } + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): AttributesMap { + return { + attr: isObject(object.attr) + ? Object.entries(object.attr).reduce<{ + [key: string]: any | undefined; + }>((acc, [key, value]) => { + acc[key] = value as any | undefined; + return acc; + }, {}) + : {}, + }; + }, +}; + +function createBaseAttributesMap_AttrEntry(): AttributesMap_AttrEntry { + return { key: "", value: undefined }; +} + +export const AttributesMap_AttrEntry = { + encode( + message: AttributesMap_AttrEntry, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + if (message.key !== "") { + writer.uint32(10).string(message.key); + } + if (message.value !== undefined) { + Value.encode( + Value.wrap(message.value), + writer.uint32(18).fork(), + ).ldelim(); + } + return writer; + }, + + decode( + input: _m0.Reader | Uint8Array, + length?: number, + ): AttributesMap_AttrEntry { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseAttributesMap_AttrEntry(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.key = reader.string(); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.value = Value.unwrap(Value.decode(reader, reader.uint32())); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): AttributesMap_AttrEntry { + return { + key: isSet(object.key) ? globalThis.String(object.key) : "", + value: isSet(object?.value) ? object.value : undefined, + }; + }, +}; + +function createBaseCheckResourceBatchRequest(): CheckResourceBatchRequest { + return { + requestId: "", + principal: undefined, + resources: [], + auxData: undefined, + }; +} + +export const CheckResourceBatchRequest = { + encode( + message: CheckResourceBatchRequest, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + if (message.requestId !== "") { + writer.uint32(10).string(message.requestId); + } + if (message.principal !== undefined) { + Principal.encode(message.principal, writer.uint32(18).fork()).ldelim(); + } + for (const v of message.resources) { + CheckResourceBatchRequest_BatchEntry.encode( + v!, + writer.uint32(26).fork(), + ).ldelim(); + } + if (message.auxData !== undefined) { + AuxData.encode(message.auxData, writer.uint32(34).fork()).ldelim(); + } + return writer; + }, + + decode( + input: _m0.Reader | Uint8Array, + length?: number, + ): CheckResourceBatchRequest { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseCheckResourceBatchRequest(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.requestId = reader.string(); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.principal = Principal.decode(reader, reader.uint32()); + continue; + case 3: + if (tag !== 26) { + break; + } + + message.resources.push( + CheckResourceBatchRequest_BatchEntry.decode( + reader, + reader.uint32(), + ), + ); + continue; + case 4: + if (tag !== 34) { + break; + } + + message.auxData = AuxData.decode(reader, reader.uint32()); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): CheckResourceBatchRequest { + return { + requestId: isSet(object.requestId) + ? globalThis.String(object.requestId) + : "", + principal: isSet(object.principal) + ? Principal.fromJSON(object.principal) + : undefined, + resources: globalThis.Array.isArray(object?.resources) + ? object.resources.map((e: any) => + CheckResourceBatchRequest_BatchEntry.fromJSON(e), + ) + : [], + auxData: isSet(object.auxData) + ? AuxData.fromJSON(object.auxData) + : undefined, + }; + }, +}; + +function createBaseCheckResourceBatchRequest_BatchEntry(): CheckResourceBatchRequest_BatchEntry { + return { actions: [], resource: undefined }; +} + +export const CheckResourceBatchRequest_BatchEntry = { + encode( + message: CheckResourceBatchRequest_BatchEntry, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + for (const v of message.actions) { + writer.uint32(10).string(v!); + } + if (message.resource !== undefined) { + Resource.encode(message.resource, writer.uint32(18).fork()).ldelim(); + } + return writer; + }, + + decode( + input: _m0.Reader | Uint8Array, + length?: number, + ): CheckResourceBatchRequest_BatchEntry { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseCheckResourceBatchRequest_BatchEntry(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.actions.push(reader.string()); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.resource = Resource.decode(reader, reader.uint32()); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): CheckResourceBatchRequest_BatchEntry { + return { + actions: globalThis.Array.isArray(object?.actions) + ? object.actions.map((e: any) => globalThis.String(e)) + : [], + resource: isSet(object.resource) + ? Resource.fromJSON(object.resource) + : undefined, + }; + }, +}; + +function createBaseCheckResourcesRequest(): CheckResourcesRequest { + return { + requestId: "", + includeMeta: false, + principal: undefined, + resources: [], + auxData: undefined, + }; +} + +export const CheckResourcesRequest = { + encode( + message: CheckResourcesRequest, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + if (message.requestId !== "") { + writer.uint32(10).string(message.requestId); + } + if (message.includeMeta !== false) { + writer.uint32(16).bool(message.includeMeta); + } + if (message.principal !== undefined) { + Principal.encode(message.principal, writer.uint32(26).fork()).ldelim(); + } + for (const v of message.resources) { + CheckResourcesRequest_ResourceEntry.encode( + v!, + writer.uint32(34).fork(), + ).ldelim(); + } + if (message.auxData !== undefined) { + AuxData.encode(message.auxData, writer.uint32(42).fork()).ldelim(); + } + return writer; + }, + + decode( + input: _m0.Reader | Uint8Array, + length?: number, + ): CheckResourcesRequest { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseCheckResourcesRequest(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.requestId = reader.string(); + continue; + case 2: + if (tag !== 16) { + break; + } + + message.includeMeta = reader.bool(); + continue; + case 3: + if (tag !== 26) { + break; + } + + message.principal = Principal.decode(reader, reader.uint32()); + continue; + case 4: + if (tag !== 34) { + break; + } + + message.resources.push( + CheckResourcesRequest_ResourceEntry.decode(reader, reader.uint32()), + ); + continue; + case 5: + if (tag !== 42) { + break; + } + + message.auxData = AuxData.decode(reader, reader.uint32()); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): CheckResourcesRequest { + return { + requestId: isSet(object.requestId) + ? globalThis.String(object.requestId) + : "", + includeMeta: isSet(object.includeMeta) + ? globalThis.Boolean(object.includeMeta) + : false, + principal: isSet(object.principal) + ? Principal.fromJSON(object.principal) + : undefined, + resources: globalThis.Array.isArray(object?.resources) + ? object.resources.map((e: any) => + CheckResourcesRequest_ResourceEntry.fromJSON(e), + ) + : [], + auxData: isSet(object.auxData) + ? AuxData.fromJSON(object.auxData) + : undefined, + }; + }, +}; + +function createBaseCheckResourcesRequest_ResourceEntry(): CheckResourcesRequest_ResourceEntry { + return { actions: [], resource: undefined }; +} + +export const CheckResourcesRequest_ResourceEntry = { + encode( + message: CheckResourcesRequest_ResourceEntry, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + for (const v of message.actions) { + writer.uint32(10).string(v!); + } + if (message.resource !== undefined) { + Resource.encode(message.resource, writer.uint32(18).fork()).ldelim(); + } + return writer; + }, + + decode( + input: _m0.Reader | Uint8Array, + length?: number, + ): CheckResourcesRequest_ResourceEntry { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseCheckResourcesRequest_ResourceEntry(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.actions.push(reader.string()); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.resource = Resource.decode(reader, reader.uint32()); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): CheckResourcesRequest_ResourceEntry { + return { + actions: globalThis.Array.isArray(object?.actions) + ? object.actions.map((e: any) => globalThis.String(e)) + : [], + resource: isSet(object.resource) + ? Resource.fromJSON(object.resource) + : undefined, + }; + }, +}; + +function createBaseAuxData(): AuxData { + return { jwt: undefined }; +} + +export const AuxData = { + encode( + message: AuxData, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + if (message.jwt !== undefined) { + AuxData_JWT.encode(message.jwt, writer.uint32(10).fork()).ldelim(); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): AuxData { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseAuxData(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.jwt = AuxData_JWT.decode(reader, reader.uint32()); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): AuxData { + return { + jwt: isSet(object.jwt) ? AuxData_JWT.fromJSON(object.jwt) : undefined, + }; + }, +}; + +function createBaseAuxData_JWT(): AuxData_JWT { + return { token: "", keySetId: "" }; +} + +export const AuxData_JWT = { + encode( + message: AuxData_JWT, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + if (message.token !== "") { + writer.uint32(10).string(message.token); + } + if (message.keySetId !== "") { + writer.uint32(18).string(message.keySetId); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): AuxData_JWT { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseAuxData_JWT(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.token = reader.string(); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.keySetId = reader.string(); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): AuxData_JWT { + return { + token: isSet(object.token) ? globalThis.String(object.token) : "", + keySetId: isSet(object.keySetId) + ? globalThis.String(object.keySetId) + : "", + }; + }, +}; + +function createBaseServerInfoRequest(): ServerInfoRequest { + return {}; +} + +export const ServerInfoRequest = { + encode( + _: ServerInfoRequest, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): ServerInfoRequest { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseServerInfoRequest(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(_: any): ServerInfoRequest { + return {}; + }, +}; + +function isObject(value: any): boolean { + return typeof value === "object" && value !== null; +} + +function isSet(value: any): boolean { + return value !== null && value !== undefined; +} diff --git a/private/test/src/protobuf/cerbos/response/v1/response.ts b/private/test/src/protobuf/cerbos/response/v1/response.ts index fa11be28..48b3d1f3 100644 --- a/private/test/src/protobuf/cerbos/response/v1/response.ts +++ b/private/test/src/protobuf/cerbos/response/v1/response.ts @@ -1,9 +1,136 @@ /* eslint-disable */ import _m0 from "protobufjs/minimal"; import { AccessLogEntry, DecisionLogEntry } from "../../audit/v1/audit"; +import { Effect, effectFromJSON } from "../../effect/v1/effect"; +import { OutputEntry, PlanResourcesFilter } from "../../engine/v1/engine"; +import { ValidationError } from "../../schema/v1/schema"; export const protobufPackage = "cerbos.response.v1"; +export interface PlanResourcesResponse { + requestId: string; + action: string; + resourceKind: string; + policyVersion: string; + filter: PlanResourcesFilter | undefined; + meta: PlanResourcesResponse_Meta | undefined; + validationErrors: ValidationError[]; + cerbosCallId: string; +} + +export interface PlanResourcesResponse_Meta { + filterDebug: string; + matchedScope: string; +} + +export interface CheckResourceSetResponse { + requestId: string; + resourceInstances: { + [key: string]: CheckResourceSetResponse_ActionEffectMap; + }; + meta: CheckResourceSetResponse_Meta | undefined; +} + +export interface CheckResourceSetResponse_ActionEffectMap { + actions: { [key: string]: Effect }; + validationErrors: ValidationError[]; +} + +export interface CheckResourceSetResponse_ActionEffectMap_ActionsEntry { + key: string; + value: Effect; +} + +export interface CheckResourceSetResponse_Meta { + resourceInstances: { + [key: string]: CheckResourceSetResponse_Meta_ActionMeta; + }; +} + +export interface CheckResourceSetResponse_Meta_EffectMeta { + matchedPolicy: string; + matchedScope: string; +} + +export interface CheckResourceSetResponse_Meta_ActionMeta { + actions: { [key: string]: CheckResourceSetResponse_Meta_EffectMeta }; + effectiveDerivedRoles: string[]; +} + +export interface CheckResourceSetResponse_Meta_ActionMeta_ActionsEntry { + key: string; + value: CheckResourceSetResponse_Meta_EffectMeta | undefined; +} + +export interface CheckResourceSetResponse_Meta_ResourceInstancesEntry { + key: string; + value: CheckResourceSetResponse_Meta_ActionMeta | undefined; +} + +export interface CheckResourceSetResponse_ResourceInstancesEntry { + key: string; + value: CheckResourceSetResponse_ActionEffectMap | undefined; +} + +export interface CheckResourceBatchResponse { + requestId: string; + results: CheckResourceBatchResponse_ActionEffectMap[]; +} + +export interface CheckResourceBatchResponse_ActionEffectMap { + resourceId: string; + actions: { [key: string]: Effect }; + validationErrors: ValidationError[]; +} + +export interface CheckResourceBatchResponse_ActionEffectMap_ActionsEntry { + key: string; + value: Effect; +} + +export interface CheckResourcesResponse { + requestId: string; + results: CheckResourcesResponse_ResultEntry[]; + cerbosCallId: string; +} + +export interface CheckResourcesResponse_ResultEntry { + resource: CheckResourcesResponse_ResultEntry_Resource | undefined; + actions: { [key: string]: Effect }; + validationErrors: ValidationError[]; + meta: CheckResourcesResponse_ResultEntry_Meta | undefined; + outputs: OutputEntry[]; +} + +export interface CheckResourcesResponse_ResultEntry_Resource { + id: string; + kind: string; + policyVersion: string; + scope: string; +} + +export interface CheckResourcesResponse_ResultEntry_Meta { + actions: { + [key: string]: CheckResourcesResponse_ResultEntry_Meta_EffectMeta; + }; + effectiveDerivedRoles: string[]; +} + +export interface CheckResourcesResponse_ResultEntry_Meta_EffectMeta { + matchedPolicy: string; + matchedScope: string; +} + +export interface CheckResourcesResponse_ResultEntry_Meta_ActionsEntry { + key: string; + value: CheckResourcesResponse_ResultEntry_Meta_EffectMeta | undefined; +} + +export interface CheckResourcesResponse_ResultEntry_ActionsEntry { + key: string; + value: Effect; +} + export interface ListAuditLogEntriesResponse { entry?: | { $case: "accessLogEntry"; accessLogEntry: AccessLogEntry } @@ -11,9 +138,1715 @@ export interface ListAuditLogEntriesResponse { $case: "decisionLogEntry"; decisionLogEntry: DecisionLogEntry; } - | undefined; + | undefined; +} + +export interface ServerInfoResponse { + version: string; + commit: string; + buildDate: string; +} + +function createBasePlanResourcesResponse(): PlanResourcesResponse { + return { + requestId: "", + action: "", + resourceKind: "", + policyVersion: "", + filter: undefined, + meta: undefined, + validationErrors: [], + cerbosCallId: "", + }; +} + +export const PlanResourcesResponse = { + encode( + message: PlanResourcesResponse, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + if (message.requestId !== "") { + writer.uint32(10).string(message.requestId); + } + if (message.action !== "") { + writer.uint32(18).string(message.action); + } + if (message.resourceKind !== "") { + writer.uint32(26).string(message.resourceKind); + } + if (message.policyVersion !== "") { + writer.uint32(34).string(message.policyVersion); + } + if (message.filter !== undefined) { + PlanResourcesFilter.encode( + message.filter, + writer.uint32(42).fork(), + ).ldelim(); + } + if (message.meta !== undefined) { + PlanResourcesResponse_Meta.encode( + message.meta, + writer.uint32(50).fork(), + ).ldelim(); + } + for (const v of message.validationErrors) { + ValidationError.encode(v!, writer.uint32(58).fork()).ldelim(); + } + if (message.cerbosCallId !== "") { + writer.uint32(66).string(message.cerbosCallId); + } + return writer; + }, + + decode( + input: _m0.Reader | Uint8Array, + length?: number, + ): PlanResourcesResponse { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBasePlanResourcesResponse(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.requestId = reader.string(); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.action = reader.string(); + continue; + case 3: + if (tag !== 26) { + break; + } + + message.resourceKind = reader.string(); + continue; + case 4: + if (tag !== 34) { + break; + } + + message.policyVersion = reader.string(); + continue; + case 5: + if (tag !== 42) { + break; + } + + message.filter = PlanResourcesFilter.decode(reader, reader.uint32()); + continue; + case 6: + if (tag !== 50) { + break; + } + + message.meta = PlanResourcesResponse_Meta.decode( + reader, + reader.uint32(), + ); + continue; + case 7: + if (tag !== 58) { + break; + } + + message.validationErrors.push( + ValidationError.decode(reader, reader.uint32()), + ); + continue; + case 8: + if (tag !== 66) { + break; + } + + message.cerbosCallId = reader.string(); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): PlanResourcesResponse { + return { + requestId: isSet(object.requestId) + ? globalThis.String(object.requestId) + : "", + action: isSet(object.action) ? globalThis.String(object.action) : "", + resourceKind: isSet(object.resourceKind) + ? globalThis.String(object.resourceKind) + : "", + policyVersion: isSet(object.policyVersion) + ? globalThis.String(object.policyVersion) + : "", + filter: isSet(object.filter) + ? PlanResourcesFilter.fromJSON(object.filter) + : undefined, + meta: isSet(object.meta) + ? PlanResourcesResponse_Meta.fromJSON(object.meta) + : undefined, + validationErrors: globalThis.Array.isArray(object?.validationErrors) + ? object.validationErrors.map((e: any) => ValidationError.fromJSON(e)) + : [], + cerbosCallId: isSet(object.cerbosCallId) + ? globalThis.String(object.cerbosCallId) + : "", + }; + }, +}; + +function createBasePlanResourcesResponse_Meta(): PlanResourcesResponse_Meta { + return { filterDebug: "", matchedScope: "" }; +} + +export const PlanResourcesResponse_Meta = { + encode( + message: PlanResourcesResponse_Meta, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + if (message.filterDebug !== "") { + writer.uint32(10).string(message.filterDebug); + } + if (message.matchedScope !== "") { + writer.uint32(18).string(message.matchedScope); + } + return writer; + }, + + decode( + input: _m0.Reader | Uint8Array, + length?: number, + ): PlanResourcesResponse_Meta { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBasePlanResourcesResponse_Meta(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.filterDebug = reader.string(); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.matchedScope = reader.string(); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): PlanResourcesResponse_Meta { + return { + filterDebug: isSet(object.filterDebug) + ? globalThis.String(object.filterDebug) + : "", + matchedScope: isSet(object.matchedScope) + ? globalThis.String(object.matchedScope) + : "", + }; + }, +}; + +function createBaseCheckResourceSetResponse(): CheckResourceSetResponse { + return { requestId: "", resourceInstances: {}, meta: undefined }; +} + +export const CheckResourceSetResponse = { + encode( + message: CheckResourceSetResponse, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + if (message.requestId !== "") { + writer.uint32(10).string(message.requestId); + } + Object.entries(message.resourceInstances).forEach(([key, value]) => { + CheckResourceSetResponse_ResourceInstancesEntry.encode( + { key: key as any, value }, + writer.uint32(18).fork(), + ).ldelim(); + }); + if (message.meta !== undefined) { + CheckResourceSetResponse_Meta.encode( + message.meta, + writer.uint32(26).fork(), + ).ldelim(); + } + return writer; + }, + + decode( + input: _m0.Reader | Uint8Array, + length?: number, + ): CheckResourceSetResponse { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseCheckResourceSetResponse(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.requestId = reader.string(); + continue; + case 2: + if (tag !== 18) { + break; + } + + const entry2 = CheckResourceSetResponse_ResourceInstancesEntry.decode( + reader, + reader.uint32(), + ); + if (entry2.value !== undefined) { + message.resourceInstances[entry2.key] = entry2.value; + } + continue; + case 3: + if (tag !== 26) { + break; + } + + message.meta = CheckResourceSetResponse_Meta.decode( + reader, + reader.uint32(), + ); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): CheckResourceSetResponse { + return { + requestId: isSet(object.requestId) + ? globalThis.String(object.requestId) + : "", + resourceInstances: isObject(object.resourceInstances) + ? Object.entries(object.resourceInstances).reduce<{ + [key: string]: CheckResourceSetResponse_ActionEffectMap; + }>((acc, [key, value]) => { + acc[key] = CheckResourceSetResponse_ActionEffectMap.fromJSON(value); + return acc; + }, {}) + : {}, + meta: isSet(object.meta) + ? CheckResourceSetResponse_Meta.fromJSON(object.meta) + : undefined, + }; + }, +}; + +function createBaseCheckResourceSetResponse_ActionEffectMap(): CheckResourceSetResponse_ActionEffectMap { + return { actions: {}, validationErrors: [] }; +} + +export const CheckResourceSetResponse_ActionEffectMap = { + encode( + message: CheckResourceSetResponse_ActionEffectMap, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + Object.entries(message.actions).forEach(([key, value]) => { + CheckResourceSetResponse_ActionEffectMap_ActionsEntry.encode( + { key: key as any, value }, + writer.uint32(10).fork(), + ).ldelim(); + }); + for (const v of message.validationErrors) { + ValidationError.encode(v!, writer.uint32(18).fork()).ldelim(); + } + return writer; + }, + + decode( + input: _m0.Reader | Uint8Array, + length?: number, + ): CheckResourceSetResponse_ActionEffectMap { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseCheckResourceSetResponse_ActionEffectMap(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + const entry1 = + CheckResourceSetResponse_ActionEffectMap_ActionsEntry.decode( + reader, + reader.uint32(), + ); + if (entry1.value !== undefined) { + message.actions[entry1.key] = entry1.value; + } + continue; + case 2: + if (tag !== 18) { + break; + } + + message.validationErrors.push( + ValidationError.decode(reader, reader.uint32()), + ); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): CheckResourceSetResponse_ActionEffectMap { + return { + actions: isObject(object.actions) + ? Object.entries(object.actions).reduce<{ [key: string]: Effect }>( + (acc, [key, value]) => { + acc[key] = effectFromJSON(value); + return acc; + }, + {}, + ) + : {}, + validationErrors: globalThis.Array.isArray(object?.validationErrors) + ? object.validationErrors.map((e: any) => ValidationError.fromJSON(e)) + : [], + }; + }, +}; + +function createBaseCheckResourceSetResponse_ActionEffectMap_ActionsEntry(): CheckResourceSetResponse_ActionEffectMap_ActionsEntry { + return { key: "", value: 0 }; +} + +export const CheckResourceSetResponse_ActionEffectMap_ActionsEntry = { + encode( + message: CheckResourceSetResponse_ActionEffectMap_ActionsEntry, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + if (message.key !== "") { + writer.uint32(10).string(message.key); + } + if (message.value !== 0) { + writer.uint32(16).int32(message.value); + } + return writer; + }, + + decode( + input: _m0.Reader | Uint8Array, + length?: number, + ): CheckResourceSetResponse_ActionEffectMap_ActionsEntry { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = + createBaseCheckResourceSetResponse_ActionEffectMap_ActionsEntry(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.key = reader.string(); + continue; + case 2: + if (tag !== 16) { + break; + } + + message.value = reader.int32() as any; + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): CheckResourceSetResponse_ActionEffectMap_ActionsEntry { + return { + key: isSet(object.key) ? globalThis.String(object.key) : "", + value: isSet(object.value) ? effectFromJSON(object.value) : 0, + }; + }, +}; + +function createBaseCheckResourceSetResponse_Meta(): CheckResourceSetResponse_Meta { + return { resourceInstances: {} }; +} + +export const CheckResourceSetResponse_Meta = { + encode( + message: CheckResourceSetResponse_Meta, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + Object.entries(message.resourceInstances).forEach(([key, value]) => { + CheckResourceSetResponse_Meta_ResourceInstancesEntry.encode( + { key: key as any, value }, + writer.uint32(10).fork(), + ).ldelim(); + }); + return writer; + }, + + decode( + input: _m0.Reader | Uint8Array, + length?: number, + ): CheckResourceSetResponse_Meta { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseCheckResourceSetResponse_Meta(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + const entry1 = + CheckResourceSetResponse_Meta_ResourceInstancesEntry.decode( + reader, + reader.uint32(), + ); + if (entry1.value !== undefined) { + message.resourceInstances[entry1.key] = entry1.value; + } + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): CheckResourceSetResponse_Meta { + return { + resourceInstances: isObject(object.resourceInstances) + ? Object.entries(object.resourceInstances).reduce<{ + [key: string]: CheckResourceSetResponse_Meta_ActionMeta; + }>((acc, [key, value]) => { + acc[key] = CheckResourceSetResponse_Meta_ActionMeta.fromJSON(value); + return acc; + }, {}) + : {}, + }; + }, +}; + +function createBaseCheckResourceSetResponse_Meta_EffectMeta(): CheckResourceSetResponse_Meta_EffectMeta { + return { matchedPolicy: "", matchedScope: "" }; +} + +export const CheckResourceSetResponse_Meta_EffectMeta = { + encode( + message: CheckResourceSetResponse_Meta_EffectMeta, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + if (message.matchedPolicy !== "") { + writer.uint32(10).string(message.matchedPolicy); + } + if (message.matchedScope !== "") { + writer.uint32(18).string(message.matchedScope); + } + return writer; + }, + + decode( + input: _m0.Reader | Uint8Array, + length?: number, + ): CheckResourceSetResponse_Meta_EffectMeta { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseCheckResourceSetResponse_Meta_EffectMeta(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.matchedPolicy = reader.string(); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.matchedScope = reader.string(); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): CheckResourceSetResponse_Meta_EffectMeta { + return { + matchedPolicy: isSet(object.matchedPolicy) + ? globalThis.String(object.matchedPolicy) + : "", + matchedScope: isSet(object.matchedScope) + ? globalThis.String(object.matchedScope) + : "", + }; + }, +}; + +function createBaseCheckResourceSetResponse_Meta_ActionMeta(): CheckResourceSetResponse_Meta_ActionMeta { + return { actions: {}, effectiveDerivedRoles: [] }; +} + +export const CheckResourceSetResponse_Meta_ActionMeta = { + encode( + message: CheckResourceSetResponse_Meta_ActionMeta, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + Object.entries(message.actions).forEach(([key, value]) => { + CheckResourceSetResponse_Meta_ActionMeta_ActionsEntry.encode( + { key: key as any, value }, + writer.uint32(10).fork(), + ).ldelim(); + }); + for (const v of message.effectiveDerivedRoles) { + writer.uint32(18).string(v!); + } + return writer; + }, + + decode( + input: _m0.Reader | Uint8Array, + length?: number, + ): CheckResourceSetResponse_Meta_ActionMeta { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseCheckResourceSetResponse_Meta_ActionMeta(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + const entry1 = + CheckResourceSetResponse_Meta_ActionMeta_ActionsEntry.decode( + reader, + reader.uint32(), + ); + if (entry1.value !== undefined) { + message.actions[entry1.key] = entry1.value; + } + continue; + case 2: + if (tag !== 18) { + break; + } + + message.effectiveDerivedRoles.push(reader.string()); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): CheckResourceSetResponse_Meta_ActionMeta { + return { + actions: isObject(object.actions) + ? Object.entries(object.actions).reduce<{ + [key: string]: CheckResourceSetResponse_Meta_EffectMeta; + }>((acc, [key, value]) => { + acc[key] = CheckResourceSetResponse_Meta_EffectMeta.fromJSON(value); + return acc; + }, {}) + : {}, + effectiveDerivedRoles: globalThis.Array.isArray( + object?.effectiveDerivedRoles, + ) + ? object.effectiveDerivedRoles.map((e: any) => globalThis.String(e)) + : [], + }; + }, +}; + +function createBaseCheckResourceSetResponse_Meta_ActionMeta_ActionsEntry(): CheckResourceSetResponse_Meta_ActionMeta_ActionsEntry { + return { key: "", value: undefined }; +} + +export const CheckResourceSetResponse_Meta_ActionMeta_ActionsEntry = { + encode( + message: CheckResourceSetResponse_Meta_ActionMeta_ActionsEntry, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + if (message.key !== "") { + writer.uint32(10).string(message.key); + } + if (message.value !== undefined) { + CheckResourceSetResponse_Meta_EffectMeta.encode( + message.value, + writer.uint32(18).fork(), + ).ldelim(); + } + return writer; + }, + + decode( + input: _m0.Reader | Uint8Array, + length?: number, + ): CheckResourceSetResponse_Meta_ActionMeta_ActionsEntry { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = + createBaseCheckResourceSetResponse_Meta_ActionMeta_ActionsEntry(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.key = reader.string(); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.value = CheckResourceSetResponse_Meta_EffectMeta.decode( + reader, + reader.uint32(), + ); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): CheckResourceSetResponse_Meta_ActionMeta_ActionsEntry { + return { + key: isSet(object.key) ? globalThis.String(object.key) : "", + value: isSet(object.value) + ? CheckResourceSetResponse_Meta_EffectMeta.fromJSON(object.value) + : undefined, + }; + }, +}; + +function createBaseCheckResourceSetResponse_Meta_ResourceInstancesEntry(): CheckResourceSetResponse_Meta_ResourceInstancesEntry { + return { key: "", value: undefined }; +} + +export const CheckResourceSetResponse_Meta_ResourceInstancesEntry = { + encode( + message: CheckResourceSetResponse_Meta_ResourceInstancesEntry, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + if (message.key !== "") { + writer.uint32(10).string(message.key); + } + if (message.value !== undefined) { + CheckResourceSetResponse_Meta_ActionMeta.encode( + message.value, + writer.uint32(18).fork(), + ).ldelim(); + } + return writer; + }, + + decode( + input: _m0.Reader | Uint8Array, + length?: number, + ): CheckResourceSetResponse_Meta_ResourceInstancesEntry { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = + createBaseCheckResourceSetResponse_Meta_ResourceInstancesEntry(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.key = reader.string(); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.value = CheckResourceSetResponse_Meta_ActionMeta.decode( + reader, + reader.uint32(), + ); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): CheckResourceSetResponse_Meta_ResourceInstancesEntry { + return { + key: isSet(object.key) ? globalThis.String(object.key) : "", + value: isSet(object.value) + ? CheckResourceSetResponse_Meta_ActionMeta.fromJSON(object.value) + : undefined, + }; + }, +}; + +function createBaseCheckResourceSetResponse_ResourceInstancesEntry(): CheckResourceSetResponse_ResourceInstancesEntry { + return { key: "", value: undefined }; +} + +export const CheckResourceSetResponse_ResourceInstancesEntry = { + encode( + message: CheckResourceSetResponse_ResourceInstancesEntry, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + if (message.key !== "") { + writer.uint32(10).string(message.key); + } + if (message.value !== undefined) { + CheckResourceSetResponse_ActionEffectMap.encode( + message.value, + writer.uint32(18).fork(), + ).ldelim(); + } + return writer; + }, + + decode( + input: _m0.Reader | Uint8Array, + length?: number, + ): CheckResourceSetResponse_ResourceInstancesEntry { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseCheckResourceSetResponse_ResourceInstancesEntry(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.key = reader.string(); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.value = CheckResourceSetResponse_ActionEffectMap.decode( + reader, + reader.uint32(), + ); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): CheckResourceSetResponse_ResourceInstancesEntry { + return { + key: isSet(object.key) ? globalThis.String(object.key) : "", + value: isSet(object.value) + ? CheckResourceSetResponse_ActionEffectMap.fromJSON(object.value) + : undefined, + }; + }, +}; + +function createBaseCheckResourceBatchResponse(): CheckResourceBatchResponse { + return { requestId: "", results: [] }; +} + +export const CheckResourceBatchResponse = { + encode( + message: CheckResourceBatchResponse, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + if (message.requestId !== "") { + writer.uint32(10).string(message.requestId); + } + for (const v of message.results) { + CheckResourceBatchResponse_ActionEffectMap.encode( + v!, + writer.uint32(18).fork(), + ).ldelim(); + } + return writer; + }, + + decode( + input: _m0.Reader | Uint8Array, + length?: number, + ): CheckResourceBatchResponse { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseCheckResourceBatchResponse(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.requestId = reader.string(); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.results.push( + CheckResourceBatchResponse_ActionEffectMap.decode( + reader, + reader.uint32(), + ), + ); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): CheckResourceBatchResponse { + return { + requestId: isSet(object.requestId) + ? globalThis.String(object.requestId) + : "", + results: globalThis.Array.isArray(object?.results) + ? object.results.map((e: any) => + CheckResourceBatchResponse_ActionEffectMap.fromJSON(e), + ) + : [], + }; + }, +}; + +function createBaseCheckResourceBatchResponse_ActionEffectMap(): CheckResourceBatchResponse_ActionEffectMap { + return { resourceId: "", actions: {}, validationErrors: [] }; +} + +export const CheckResourceBatchResponse_ActionEffectMap = { + encode( + message: CheckResourceBatchResponse_ActionEffectMap, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + if (message.resourceId !== "") { + writer.uint32(10).string(message.resourceId); + } + Object.entries(message.actions).forEach(([key, value]) => { + CheckResourceBatchResponse_ActionEffectMap_ActionsEntry.encode( + { key: key as any, value }, + writer.uint32(18).fork(), + ).ldelim(); + }); + for (const v of message.validationErrors) { + ValidationError.encode(v!, writer.uint32(26).fork()).ldelim(); + } + return writer; + }, + + decode( + input: _m0.Reader | Uint8Array, + length?: number, + ): CheckResourceBatchResponse_ActionEffectMap { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseCheckResourceBatchResponse_ActionEffectMap(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.resourceId = reader.string(); + continue; + case 2: + if (tag !== 18) { + break; + } + + const entry2 = + CheckResourceBatchResponse_ActionEffectMap_ActionsEntry.decode( + reader, + reader.uint32(), + ); + if (entry2.value !== undefined) { + message.actions[entry2.key] = entry2.value; + } + continue; + case 3: + if (tag !== 26) { + break; + } + + message.validationErrors.push( + ValidationError.decode(reader, reader.uint32()), + ); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): CheckResourceBatchResponse_ActionEffectMap { + return { + resourceId: isSet(object.resourceId) + ? globalThis.String(object.resourceId) + : "", + actions: isObject(object.actions) + ? Object.entries(object.actions).reduce<{ [key: string]: Effect }>( + (acc, [key, value]) => { + acc[key] = effectFromJSON(value); + return acc; + }, + {}, + ) + : {}, + validationErrors: globalThis.Array.isArray(object?.validationErrors) + ? object.validationErrors.map((e: any) => ValidationError.fromJSON(e)) + : [], + }; + }, +}; + +function createBaseCheckResourceBatchResponse_ActionEffectMap_ActionsEntry(): CheckResourceBatchResponse_ActionEffectMap_ActionsEntry { + return { key: "", value: 0 }; +} + +export const CheckResourceBatchResponse_ActionEffectMap_ActionsEntry = { + encode( + message: CheckResourceBatchResponse_ActionEffectMap_ActionsEntry, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + if (message.key !== "") { + writer.uint32(10).string(message.key); + } + if (message.value !== 0) { + writer.uint32(16).int32(message.value); + } + return writer; + }, + + decode( + input: _m0.Reader | Uint8Array, + length?: number, + ): CheckResourceBatchResponse_ActionEffectMap_ActionsEntry { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = + createBaseCheckResourceBatchResponse_ActionEffectMap_ActionsEntry(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.key = reader.string(); + continue; + case 2: + if (tag !== 16) { + break; + } + + message.value = reader.int32() as any; + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON( + object: any, + ): CheckResourceBatchResponse_ActionEffectMap_ActionsEntry { + return { + key: isSet(object.key) ? globalThis.String(object.key) : "", + value: isSet(object.value) ? effectFromJSON(object.value) : 0, + }; + }, +}; + +function createBaseCheckResourcesResponse(): CheckResourcesResponse { + return { requestId: "", results: [], cerbosCallId: "" }; +} + +export const CheckResourcesResponse = { + encode( + message: CheckResourcesResponse, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + if (message.requestId !== "") { + writer.uint32(10).string(message.requestId); + } + for (const v of message.results) { + CheckResourcesResponse_ResultEntry.encode( + v!, + writer.uint32(18).fork(), + ).ldelim(); + } + if (message.cerbosCallId !== "") { + writer.uint32(26).string(message.cerbosCallId); + } + return writer; + }, + + decode( + input: _m0.Reader | Uint8Array, + length?: number, + ): CheckResourcesResponse { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseCheckResourcesResponse(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.requestId = reader.string(); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.results.push( + CheckResourcesResponse_ResultEntry.decode(reader, reader.uint32()), + ); + continue; + case 3: + if (tag !== 26) { + break; + } + + message.cerbosCallId = reader.string(); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): CheckResourcesResponse { + return { + requestId: isSet(object.requestId) + ? globalThis.String(object.requestId) + : "", + results: globalThis.Array.isArray(object?.results) + ? object.results.map((e: any) => + CheckResourcesResponse_ResultEntry.fromJSON(e), + ) + : [], + cerbosCallId: isSet(object.cerbosCallId) + ? globalThis.String(object.cerbosCallId) + : "", + }; + }, +}; + +function createBaseCheckResourcesResponse_ResultEntry(): CheckResourcesResponse_ResultEntry { + return { + resource: undefined, + actions: {}, + validationErrors: [], + meta: undefined, + outputs: [], + }; +} + +export const CheckResourcesResponse_ResultEntry = { + encode( + message: CheckResourcesResponse_ResultEntry, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + if (message.resource !== undefined) { + CheckResourcesResponse_ResultEntry_Resource.encode( + message.resource, + writer.uint32(10).fork(), + ).ldelim(); + } + Object.entries(message.actions).forEach(([key, value]) => { + CheckResourcesResponse_ResultEntry_ActionsEntry.encode( + { key: key as any, value }, + writer.uint32(18).fork(), + ).ldelim(); + }); + for (const v of message.validationErrors) { + ValidationError.encode(v!, writer.uint32(26).fork()).ldelim(); + } + if (message.meta !== undefined) { + CheckResourcesResponse_ResultEntry_Meta.encode( + message.meta, + writer.uint32(34).fork(), + ).ldelim(); + } + for (const v of message.outputs) { + OutputEntry.encode(v!, writer.uint32(42).fork()).ldelim(); + } + return writer; + }, + + decode( + input: _m0.Reader | Uint8Array, + length?: number, + ): CheckResourcesResponse_ResultEntry { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseCheckResourcesResponse_ResultEntry(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.resource = CheckResourcesResponse_ResultEntry_Resource.decode( + reader, + reader.uint32(), + ); + continue; + case 2: + if (tag !== 18) { + break; + } + + const entry2 = CheckResourcesResponse_ResultEntry_ActionsEntry.decode( + reader, + reader.uint32(), + ); + if (entry2.value !== undefined) { + message.actions[entry2.key] = entry2.value; + } + continue; + case 3: + if (tag !== 26) { + break; + } + + message.validationErrors.push( + ValidationError.decode(reader, reader.uint32()), + ); + continue; + case 4: + if (tag !== 34) { + break; + } + + message.meta = CheckResourcesResponse_ResultEntry_Meta.decode( + reader, + reader.uint32(), + ); + continue; + case 5: + if (tag !== 42) { + break; + } + + message.outputs.push(OutputEntry.decode(reader, reader.uint32())); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): CheckResourcesResponse_ResultEntry { + return { + resource: isSet(object.resource) + ? CheckResourcesResponse_ResultEntry_Resource.fromJSON(object.resource) + : undefined, + actions: isObject(object.actions) + ? Object.entries(object.actions).reduce<{ [key: string]: Effect }>( + (acc, [key, value]) => { + acc[key] = effectFromJSON(value); + return acc; + }, + {}, + ) + : {}, + validationErrors: globalThis.Array.isArray(object?.validationErrors) + ? object.validationErrors.map((e: any) => ValidationError.fromJSON(e)) + : [], + meta: isSet(object.meta) + ? CheckResourcesResponse_ResultEntry_Meta.fromJSON(object.meta) + : undefined, + outputs: globalThis.Array.isArray(object?.outputs) + ? object.outputs.map((e: any) => OutputEntry.fromJSON(e)) + : [], + }; + }, +}; + +function createBaseCheckResourcesResponse_ResultEntry_Resource(): CheckResourcesResponse_ResultEntry_Resource { + return { id: "", kind: "", policyVersion: "", scope: "" }; +} + +export const CheckResourcesResponse_ResultEntry_Resource = { + encode( + message: CheckResourcesResponse_ResultEntry_Resource, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + if (message.id !== "") { + writer.uint32(10).string(message.id); + } + if (message.kind !== "") { + writer.uint32(18).string(message.kind); + } + if (message.policyVersion !== "") { + writer.uint32(26).string(message.policyVersion); + } + if (message.scope !== "") { + writer.uint32(34).string(message.scope); + } + return writer; + }, + + decode( + input: _m0.Reader | Uint8Array, + length?: number, + ): CheckResourcesResponse_ResultEntry_Resource { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseCheckResourcesResponse_ResultEntry_Resource(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.id = reader.string(); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.kind = reader.string(); + continue; + case 3: + if (tag !== 26) { + break; + } + + message.policyVersion = reader.string(); + continue; + case 4: + if (tag !== 34) { + break; + } + + message.scope = reader.string(); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): CheckResourcesResponse_ResultEntry_Resource { + return { + id: isSet(object.id) ? globalThis.String(object.id) : "", + kind: isSet(object.kind) ? globalThis.String(object.kind) : "", + policyVersion: isSet(object.policyVersion) + ? globalThis.String(object.policyVersion) + : "", + scope: isSet(object.scope) ? globalThis.String(object.scope) : "", + }; + }, +}; + +function createBaseCheckResourcesResponse_ResultEntry_Meta(): CheckResourcesResponse_ResultEntry_Meta { + return { actions: {}, effectiveDerivedRoles: [] }; +} + +export const CheckResourcesResponse_ResultEntry_Meta = { + encode( + message: CheckResourcesResponse_ResultEntry_Meta, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + Object.entries(message.actions).forEach(([key, value]) => { + CheckResourcesResponse_ResultEntry_Meta_ActionsEntry.encode( + { key: key as any, value }, + writer.uint32(10).fork(), + ).ldelim(); + }); + for (const v of message.effectiveDerivedRoles) { + writer.uint32(18).string(v!); + } + return writer; + }, + + decode( + input: _m0.Reader | Uint8Array, + length?: number, + ): CheckResourcesResponse_ResultEntry_Meta { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseCheckResourcesResponse_ResultEntry_Meta(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + const entry1 = + CheckResourcesResponse_ResultEntry_Meta_ActionsEntry.decode( + reader, + reader.uint32(), + ); + if (entry1.value !== undefined) { + message.actions[entry1.key] = entry1.value; + } + continue; + case 2: + if (tag !== 18) { + break; + } + + message.effectiveDerivedRoles.push(reader.string()); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): CheckResourcesResponse_ResultEntry_Meta { + return { + actions: isObject(object.actions) + ? Object.entries(object.actions).reduce<{ + [key: string]: CheckResourcesResponse_ResultEntry_Meta_EffectMeta; + }>((acc, [key, value]) => { + acc[key] = + CheckResourcesResponse_ResultEntry_Meta_EffectMeta.fromJSON( + value, + ); + return acc; + }, {}) + : {}, + effectiveDerivedRoles: globalThis.Array.isArray( + object?.effectiveDerivedRoles, + ) + ? object.effectiveDerivedRoles.map((e: any) => globalThis.String(e)) + : [], + }; + }, +}; + +function createBaseCheckResourcesResponse_ResultEntry_Meta_EffectMeta(): CheckResourcesResponse_ResultEntry_Meta_EffectMeta { + return { matchedPolicy: "", matchedScope: "" }; +} + +export const CheckResourcesResponse_ResultEntry_Meta_EffectMeta = { + encode( + message: CheckResourcesResponse_ResultEntry_Meta_EffectMeta, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + if (message.matchedPolicy !== "") { + writer.uint32(10).string(message.matchedPolicy); + } + if (message.matchedScope !== "") { + writer.uint32(18).string(message.matchedScope); + } + return writer; + }, + + decode( + input: _m0.Reader | Uint8Array, + length?: number, + ): CheckResourcesResponse_ResultEntry_Meta_EffectMeta { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = + createBaseCheckResourcesResponse_ResultEntry_Meta_EffectMeta(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.matchedPolicy = reader.string(); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.matchedScope = reader.string(); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): CheckResourcesResponse_ResultEntry_Meta_EffectMeta { + return { + matchedPolicy: isSet(object.matchedPolicy) + ? globalThis.String(object.matchedPolicy) + : "", + matchedScope: isSet(object.matchedScope) + ? globalThis.String(object.matchedScope) + : "", + }; + }, +}; + +function createBaseCheckResourcesResponse_ResultEntry_Meta_ActionsEntry(): CheckResourcesResponse_ResultEntry_Meta_ActionsEntry { + return { key: "", value: undefined }; +} + +export const CheckResourcesResponse_ResultEntry_Meta_ActionsEntry = { + encode( + message: CheckResourcesResponse_ResultEntry_Meta_ActionsEntry, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + if (message.key !== "") { + writer.uint32(10).string(message.key); + } + if (message.value !== undefined) { + CheckResourcesResponse_ResultEntry_Meta_EffectMeta.encode( + message.value, + writer.uint32(18).fork(), + ).ldelim(); + } + return writer; + }, + + decode( + input: _m0.Reader | Uint8Array, + length?: number, + ): CheckResourcesResponse_ResultEntry_Meta_ActionsEntry { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = + createBaseCheckResourcesResponse_ResultEntry_Meta_ActionsEntry(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.key = reader.string(); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.value = + CheckResourcesResponse_ResultEntry_Meta_EffectMeta.decode( + reader, + reader.uint32(), + ); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): CheckResourcesResponse_ResultEntry_Meta_ActionsEntry { + return { + key: isSet(object.key) ? globalThis.String(object.key) : "", + value: isSet(object.value) + ? CheckResourcesResponse_ResultEntry_Meta_EffectMeta.fromJSON( + object.value, + ) + : undefined, + }; + }, +}; + +function createBaseCheckResourcesResponse_ResultEntry_ActionsEntry(): CheckResourcesResponse_ResultEntry_ActionsEntry { + return { key: "", value: 0 }; } +export const CheckResourcesResponse_ResultEntry_ActionsEntry = { + encode( + message: CheckResourcesResponse_ResultEntry_ActionsEntry, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + if (message.key !== "") { + writer.uint32(10).string(message.key); + } + if (message.value !== 0) { + writer.uint32(16).int32(message.value); + } + return writer; + }, + + decode( + input: _m0.Reader | Uint8Array, + length?: number, + ): CheckResourcesResponse_ResultEntry_ActionsEntry { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseCheckResourcesResponse_ResultEntry_ActionsEntry(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.key = reader.string(); + continue; + case 2: + if (tag !== 16) { + break; + } + + message.value = reader.int32() as any; + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): CheckResourcesResponse_ResultEntry_ActionsEntry { + return { + key: isSet(object.key) ? globalThis.String(object.key) : "", + value: isSet(object.value) ? effectFromJSON(object.value) : 0, + }; + }, +}; + function createBaseListAuditLogEntriesResponse(): ListAuditLogEntriesResponse { return { entry: undefined }; } @@ -99,6 +1932,80 @@ export const ListAuditLogEntriesResponse = { }, }; +function createBaseServerInfoResponse(): ServerInfoResponse { + return { version: "", commit: "", buildDate: "" }; +} + +export const ServerInfoResponse = { + encode( + message: ServerInfoResponse, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + if (message.version !== "") { + writer.uint32(10).string(message.version); + } + if (message.commit !== "") { + writer.uint32(18).string(message.commit); + } + if (message.buildDate !== "") { + writer.uint32(26).string(message.buildDate); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): ServerInfoResponse { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseServerInfoResponse(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.version = reader.string(); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.commit = reader.string(); + continue; + case 3: + if (tag !== 26) { + break; + } + + message.buildDate = reader.string(); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): ServerInfoResponse { + return { + version: isSet(object.version) ? globalThis.String(object.version) : "", + commit: isSet(object.commit) ? globalThis.String(object.commit) : "", + buildDate: isSet(object.buildDate) + ? globalThis.String(object.buildDate) + : "", + }; + }, +}; + +function isObject(value: any): boolean { + return typeof value === "object" && value !== null; +} + function isSet(value: any): boolean { return value !== null && value !== undefined; } diff --git a/private/test/src/protobuf/cerbos/svc/v1/svc.ts b/private/test/src/protobuf/cerbos/svc/v1/svc.ts new file mode 100644 index 00000000..6c762ba0 --- /dev/null +++ b/private/test/src/protobuf/cerbos/svc/v1/svc.ts @@ -0,0 +1,248 @@ +/* eslint-disable */ +import { + ChannelCredentials, + Client, + makeGenericClientConstructor, + Metadata, +} from "@grpc/grpc-js"; +import type { + CallOptions, + ClientOptions, + ClientUnaryCall, + handleUnaryCall, + ServiceError, + UntypedServiceImplementation, +} from "@grpc/grpc-js"; +import { + CheckResourceBatchRequest, + CheckResourceSetRequest, + CheckResourcesRequest, + PlanResourcesRequest, + ServerInfoRequest, +} from "../../request/v1/request"; +import { + CheckResourceBatchResponse, + CheckResourceSetResponse, + CheckResourcesResponse, + PlanResourcesResponse, + ServerInfoResponse, +} from "../../response/v1/response"; + +export const protobufPackage = "cerbos.svc.v1"; + +export type CerbosServiceService = typeof CerbosServiceService; +export const CerbosServiceService = { + checkResourceSet: { + path: "/cerbos.svc.v1.CerbosService/CheckResourceSet", + requestStream: false, + responseStream: false, + requestSerialize: (value: CheckResourceSetRequest) => + Buffer.from(CheckResourceSetRequest.encode(value).finish()), + requestDeserialize: (value: Buffer) => + CheckResourceSetRequest.decode(value), + responseSerialize: (value: CheckResourceSetResponse) => + Buffer.from(CheckResourceSetResponse.encode(value).finish()), + responseDeserialize: (value: Buffer) => + CheckResourceSetResponse.decode(value), + }, + checkResourceBatch: { + path: "/cerbos.svc.v1.CerbosService/CheckResourceBatch", + requestStream: false, + responseStream: false, + requestSerialize: (value: CheckResourceBatchRequest) => + Buffer.from(CheckResourceBatchRequest.encode(value).finish()), + requestDeserialize: (value: Buffer) => + CheckResourceBatchRequest.decode(value), + responseSerialize: (value: CheckResourceBatchResponse) => + Buffer.from(CheckResourceBatchResponse.encode(value).finish()), + responseDeserialize: (value: Buffer) => + CheckResourceBatchResponse.decode(value), + }, + checkResources: { + path: "/cerbos.svc.v1.CerbosService/CheckResources", + requestStream: false, + responseStream: false, + requestSerialize: (value: CheckResourcesRequest) => + Buffer.from(CheckResourcesRequest.encode(value).finish()), + requestDeserialize: (value: Buffer) => CheckResourcesRequest.decode(value), + responseSerialize: (value: CheckResourcesResponse) => + Buffer.from(CheckResourcesResponse.encode(value).finish()), + responseDeserialize: (value: Buffer) => + CheckResourcesResponse.decode(value), + }, + serverInfo: { + path: "/cerbos.svc.v1.CerbosService/ServerInfo", + requestStream: false, + responseStream: false, + requestSerialize: (value: ServerInfoRequest) => + Buffer.from(ServerInfoRequest.encode(value).finish()), + requestDeserialize: (value: Buffer) => ServerInfoRequest.decode(value), + responseSerialize: (value: ServerInfoResponse) => + Buffer.from(ServerInfoResponse.encode(value).finish()), + responseDeserialize: (value: Buffer) => ServerInfoResponse.decode(value), + }, + planResources: { + path: "/cerbos.svc.v1.CerbosService/PlanResources", + requestStream: false, + responseStream: false, + requestSerialize: (value: PlanResourcesRequest) => + Buffer.from(PlanResourcesRequest.encode(value).finish()), + requestDeserialize: (value: Buffer) => PlanResourcesRequest.decode(value), + responseSerialize: (value: PlanResourcesResponse) => + Buffer.from(PlanResourcesResponse.encode(value).finish()), + responseDeserialize: (value: Buffer) => PlanResourcesResponse.decode(value), + }, +} as const; + +export interface CerbosServiceServer extends UntypedServiceImplementation { + checkResourceSet: handleUnaryCall< + CheckResourceSetRequest, + CheckResourceSetResponse + >; + checkResourceBatch: handleUnaryCall< + CheckResourceBatchRequest, + CheckResourceBatchResponse + >; + checkResources: handleUnaryCall< + CheckResourcesRequest, + CheckResourcesResponse + >; + serverInfo: handleUnaryCall; + planResources: handleUnaryCall; +} + +export interface CerbosServiceClient extends Client { + checkResourceSet( + request: CheckResourceSetRequest, + callback: ( + error: ServiceError | null, + response: CheckResourceSetResponse, + ) => void, + ): ClientUnaryCall; + checkResourceSet( + request: CheckResourceSetRequest, + metadata: Metadata, + callback: ( + error: ServiceError | null, + response: CheckResourceSetResponse, + ) => void, + ): ClientUnaryCall; + checkResourceSet( + request: CheckResourceSetRequest, + metadata: Metadata, + options: Partial, + callback: ( + error: ServiceError | null, + response: CheckResourceSetResponse, + ) => void, + ): ClientUnaryCall; + checkResourceBatch( + request: CheckResourceBatchRequest, + callback: ( + error: ServiceError | null, + response: CheckResourceBatchResponse, + ) => void, + ): ClientUnaryCall; + checkResourceBatch( + request: CheckResourceBatchRequest, + metadata: Metadata, + callback: ( + error: ServiceError | null, + response: CheckResourceBatchResponse, + ) => void, + ): ClientUnaryCall; + checkResourceBatch( + request: CheckResourceBatchRequest, + metadata: Metadata, + options: Partial, + callback: ( + error: ServiceError | null, + response: CheckResourceBatchResponse, + ) => void, + ): ClientUnaryCall; + checkResources( + request: CheckResourcesRequest, + callback: ( + error: ServiceError | null, + response: CheckResourcesResponse, + ) => void, + ): ClientUnaryCall; + checkResources( + request: CheckResourcesRequest, + metadata: Metadata, + callback: ( + error: ServiceError | null, + response: CheckResourcesResponse, + ) => void, + ): ClientUnaryCall; + checkResources( + request: CheckResourcesRequest, + metadata: Metadata, + options: Partial, + callback: ( + error: ServiceError | null, + response: CheckResourcesResponse, + ) => void, + ): ClientUnaryCall; + serverInfo( + request: ServerInfoRequest, + callback: ( + error: ServiceError | null, + response: ServerInfoResponse, + ) => void, + ): ClientUnaryCall; + serverInfo( + request: ServerInfoRequest, + metadata: Metadata, + callback: ( + error: ServiceError | null, + response: ServerInfoResponse, + ) => void, + ): ClientUnaryCall; + serverInfo( + request: ServerInfoRequest, + metadata: Metadata, + options: Partial, + callback: ( + error: ServiceError | null, + response: ServerInfoResponse, + ) => void, + ): ClientUnaryCall; + planResources( + request: PlanResourcesRequest, + callback: ( + error: ServiceError | null, + response: PlanResourcesResponse, + ) => void, + ): ClientUnaryCall; + planResources( + request: PlanResourcesRequest, + metadata: Metadata, + callback: ( + error: ServiceError | null, + response: PlanResourcesResponse, + ) => void, + ): ClientUnaryCall; + planResources( + request: PlanResourcesRequest, + metadata: Metadata, + options: Partial, + callback: ( + error: ServiceError | null, + response: PlanResourcesResponse, + ) => void, + ): ClientUnaryCall; +} + +export const CerbosServiceClient = makeGenericClientConstructor( + CerbosServiceService, + "cerbos.svc.v1.CerbosService", +) as unknown as { + new ( + address: string, + credentials: ChannelCredentials, + options?: Partial, + ): CerbosServiceClient; + service: typeof CerbosServiceService; + serviceName: string; +}; diff --git a/private/test/src/protobuf/google/api/annotations.ts b/private/test/src/protobuf/google/api/annotations.ts new file mode 100644 index 00000000..c2161053 --- /dev/null +++ b/private/test/src/protobuf/google/api/annotations.ts @@ -0,0 +1,3 @@ +/* eslint-disable */ + +export const protobufPackage = "google.api"; diff --git a/private/test/src/protobuf/google/api/http.ts b/private/test/src/protobuf/google/api/http.ts new file mode 100644 index 00000000..0100d10c --- /dev/null +++ b/private/test/src/protobuf/google/api/http.ts @@ -0,0 +1,262 @@ +/* eslint-disable */ +import _m0 from "protobufjs/minimal"; + +export const protobufPackage = "google.api"; + +export interface HttpRule { + selector: string; + pattern?: + | { $case: "get"; get: string } + | { $case: "put"; put: string } + | { $case: "post"; post: string } + | { $case: "delete"; delete: string } + | { $case: "patch"; patch: string } + | { $case: "custom"; custom: CustomHttpPattern } + | undefined; + body: string; + responseBody: string; + additionalBindings: HttpRule[]; +} + +export interface CustomHttpPattern { + kind: string; + path: string; +} + +function createBaseHttpRule(): HttpRule { + return { + selector: "", + pattern: undefined, + body: "", + responseBody: "", + additionalBindings: [], + }; +} + +export const HttpRule = { + encode( + message: HttpRule, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + if (message.selector !== "") { + writer.uint32(10).string(message.selector); + } + switch (message.pattern?.$case) { + case "get": + writer.uint32(18).string(message.pattern.get); + break; + case "put": + writer.uint32(26).string(message.pattern.put); + break; + case "post": + writer.uint32(34).string(message.pattern.post); + break; + case "delete": + writer.uint32(42).string(message.pattern.delete); + break; + case "patch": + writer.uint32(50).string(message.pattern.patch); + break; + case "custom": + CustomHttpPattern.encode( + message.pattern.custom, + writer.uint32(66).fork(), + ).ldelim(); + break; + } + if (message.body !== "") { + writer.uint32(58).string(message.body); + } + if (message.responseBody !== "") { + writer.uint32(98).string(message.responseBody); + } + for (const v of message.additionalBindings) { + HttpRule.encode(v!, writer.uint32(90).fork()).ldelim(); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): HttpRule { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseHttpRule(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.selector = reader.string(); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.pattern = { $case: "get", get: reader.string() }; + continue; + case 3: + if (tag !== 26) { + break; + } + + message.pattern = { $case: "put", put: reader.string() }; + continue; + case 4: + if (tag !== 34) { + break; + } + + message.pattern = { $case: "post", post: reader.string() }; + continue; + case 5: + if (tag !== 42) { + break; + } + + message.pattern = { $case: "delete", delete: reader.string() }; + continue; + case 6: + if (tag !== 50) { + break; + } + + message.pattern = { $case: "patch", patch: reader.string() }; + continue; + case 8: + if (tag !== 66) { + break; + } + + message.pattern = { + $case: "custom", + custom: CustomHttpPattern.decode(reader, reader.uint32()), + }; + continue; + case 7: + if (tag !== 58) { + break; + } + + message.body = reader.string(); + continue; + case 12: + if (tag !== 98) { + break; + } + + message.responseBody = reader.string(); + continue; + case 11: + if (tag !== 90) { + break; + } + + message.additionalBindings.push( + HttpRule.decode(reader, reader.uint32()), + ); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): HttpRule { + return { + selector: isSet(object.selector) + ? globalThis.String(object.selector) + : "", + pattern: isSet(object.get) + ? { $case: "get", get: globalThis.String(object.get) } + : isSet(object.put) + ? { $case: "put", put: globalThis.String(object.put) } + : isSet(object.post) + ? { $case: "post", post: globalThis.String(object.post) } + : isSet(object.delete) + ? { $case: "delete", delete: globalThis.String(object.delete) } + : isSet(object.patch) + ? { $case: "patch", patch: globalThis.String(object.patch) } + : isSet(object.custom) + ? { + $case: "custom", + custom: CustomHttpPattern.fromJSON(object.custom), + } + : undefined, + body: isSet(object.body) ? globalThis.String(object.body) : "", + responseBody: isSet(object.responseBody) + ? globalThis.String(object.responseBody) + : "", + additionalBindings: globalThis.Array.isArray(object?.additionalBindings) + ? object.additionalBindings.map((e: any) => HttpRule.fromJSON(e)) + : [], + }; + }, +}; + +function createBaseCustomHttpPattern(): CustomHttpPattern { + return { kind: "", path: "" }; +} + +export const CustomHttpPattern = { + encode( + message: CustomHttpPattern, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + if (message.kind !== "") { + writer.uint32(10).string(message.kind); + } + if (message.path !== "") { + writer.uint32(18).string(message.path); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): CustomHttpPattern { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseCustomHttpPattern(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.kind = reader.string(); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.path = reader.string(); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): CustomHttpPattern { + return { + kind: isSet(object.kind) ? globalThis.String(object.kind) : "", + path: isSet(object.path) ? globalThis.String(object.path) : "", + }; + }, +}; + +function isSet(value: any): boolean { + return value !== null && value !== undefined; +} diff --git a/private/test/src/protobuf/google/protobuf/descriptor.ts b/private/test/src/protobuf/google/protobuf/descriptor.ts index 5a9dd2cc..d2cf7c9e 100644 --- a/private/test/src/protobuf/google/protobuf/descriptor.ts +++ b/private/test/src/protobuf/google/protobuf/descriptor.ts @@ -52,6 +52,59 @@ export function editionFromJSON(object: any): Edition { } } +export interface FileOptions { + javaPackage?: string | undefined; + javaOuterClassname?: string | undefined; + javaMultipleFiles?: boolean | undefined; + javaGenerateEqualsAndHash?: boolean | undefined; + javaStringCheckUtf8?: boolean | undefined; + optimizeFor?: FileOptions_OptimizeMode | undefined; + goPackage?: string | undefined; + ccGenericServices?: boolean | undefined; + javaGenericServices?: boolean | undefined; + pyGenericServices?: boolean | undefined; + phpGenericServices?: boolean | undefined; + deprecated?: boolean | undefined; + ccEnableArenas?: boolean | undefined; + objcClassPrefix?: string | undefined; + csharpNamespace?: string | undefined; + swiftPrefix?: string | undefined; + phpClassPrefix?: string | undefined; + phpNamespace?: string | undefined; + phpMetadataNamespace?: string | undefined; + rubyPackage?: string | undefined; + features?: FeatureSet | undefined; + uninterpretedOption: UninterpretedOption[]; +} + +export enum FileOptions_OptimizeMode { + SPEED = 1, + CODE_SIZE = 2, + LITE_RUNTIME = 3, +} + +export function fileOptions_OptimizeModeFromJSON( + object: any, +): FileOptions_OptimizeMode { + switch (object) { + case 1: + case "SPEED": + return FileOptions_OptimizeMode.SPEED; + case 2: + case "CODE_SIZE": + return FileOptions_OptimizeMode.CODE_SIZE; + case 3: + case "LITE_RUNTIME": + return FileOptions_OptimizeMode.LITE_RUNTIME; + default: + throw new globalThis.Error( + "Unrecognized enum value " + + object + + " for enum FileOptions_OptimizeMode", + ); + } +} + export interface MessageOptions { messageSetWireFormat?: boolean | undefined; noStandardDescriptorAccessor?: boolean | undefined; @@ -215,6 +268,47 @@ export interface FieldOptions_EditionDefault { value?: string | undefined; } +export interface ServiceOptions { + features?: FeatureSet | undefined; + deprecated?: boolean | undefined; + uninterpretedOption: UninterpretedOption[]; +} + +export interface MethodOptions { + deprecated?: boolean | undefined; + idempotencyLevel?: MethodOptions_IdempotencyLevel | undefined; + features?: FeatureSet | undefined; + uninterpretedOption: UninterpretedOption[]; +} + +export enum MethodOptions_IdempotencyLevel { + IDEMPOTENCY_UNKNOWN = 0, + NO_SIDE_EFFECTS = 1, + IDEMPOTENT = 2, +} + +export function methodOptions_IdempotencyLevelFromJSON( + object: any, +): MethodOptions_IdempotencyLevel { + switch (object) { + case 0: + case "IDEMPOTENCY_UNKNOWN": + return MethodOptions_IdempotencyLevel.IDEMPOTENCY_UNKNOWN; + case 1: + case "NO_SIDE_EFFECTS": + return MethodOptions_IdempotencyLevel.NO_SIDE_EFFECTS; + case 2: + case "IDEMPOTENT": + return MethodOptions_IdempotencyLevel.IDEMPOTENT; + default: + throw new globalThis.Error( + "Unrecognized enum value " + + object + + " for enum MethodOptions_IdempotencyLevel", + ); + } +} + export interface UninterpretedOption { name: UninterpretedOption_NamePart[]; identifierValue?: string | undefined; @@ -405,6 +499,390 @@ export function featureSet_JsonFormatFromJSON( } } +function createBaseFileOptions(): FileOptions { + return { + javaPackage: "", + javaOuterClassname: "", + javaMultipleFiles: false, + javaGenerateEqualsAndHash: false, + javaStringCheckUtf8: false, + optimizeFor: 1, + goPackage: "", + ccGenericServices: false, + javaGenericServices: false, + pyGenericServices: false, + phpGenericServices: false, + deprecated: false, + ccEnableArenas: true, + objcClassPrefix: "", + csharpNamespace: "", + swiftPrefix: "", + phpClassPrefix: "", + phpNamespace: "", + phpMetadataNamespace: "", + rubyPackage: "", + features: undefined, + uninterpretedOption: [], + }; +} + +export const FileOptions = { + encode( + message: FileOptions, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + if (message.javaPackage !== undefined && message.javaPackage !== "") { + writer.uint32(10).string(message.javaPackage); + } + if ( + message.javaOuterClassname !== undefined && + message.javaOuterClassname !== "" + ) { + writer.uint32(66).string(message.javaOuterClassname); + } + if ( + message.javaMultipleFiles !== undefined && + message.javaMultipleFiles !== false + ) { + writer.uint32(80).bool(message.javaMultipleFiles); + } + if ( + message.javaGenerateEqualsAndHash !== undefined && + message.javaGenerateEqualsAndHash !== false + ) { + writer.uint32(160).bool(message.javaGenerateEqualsAndHash); + } + if ( + message.javaStringCheckUtf8 !== undefined && + message.javaStringCheckUtf8 !== false + ) { + writer.uint32(216).bool(message.javaStringCheckUtf8); + } + if (message.optimizeFor !== undefined && message.optimizeFor !== 1) { + writer.uint32(72).int32(message.optimizeFor); + } + if (message.goPackage !== undefined && message.goPackage !== "") { + writer.uint32(90).string(message.goPackage); + } + if ( + message.ccGenericServices !== undefined && + message.ccGenericServices !== false + ) { + writer.uint32(128).bool(message.ccGenericServices); + } + if ( + message.javaGenericServices !== undefined && + message.javaGenericServices !== false + ) { + writer.uint32(136).bool(message.javaGenericServices); + } + if ( + message.pyGenericServices !== undefined && + message.pyGenericServices !== false + ) { + writer.uint32(144).bool(message.pyGenericServices); + } + if ( + message.phpGenericServices !== undefined && + message.phpGenericServices !== false + ) { + writer.uint32(336).bool(message.phpGenericServices); + } + if (message.deprecated !== undefined && message.deprecated !== false) { + writer.uint32(184).bool(message.deprecated); + } + if ( + message.ccEnableArenas !== undefined && + message.ccEnableArenas !== true + ) { + writer.uint32(248).bool(message.ccEnableArenas); + } + if ( + message.objcClassPrefix !== undefined && + message.objcClassPrefix !== "" + ) { + writer.uint32(290).string(message.objcClassPrefix); + } + if ( + message.csharpNamespace !== undefined && + message.csharpNamespace !== "" + ) { + writer.uint32(298).string(message.csharpNamespace); + } + if (message.swiftPrefix !== undefined && message.swiftPrefix !== "") { + writer.uint32(314).string(message.swiftPrefix); + } + if (message.phpClassPrefix !== undefined && message.phpClassPrefix !== "") { + writer.uint32(322).string(message.phpClassPrefix); + } + if (message.phpNamespace !== undefined && message.phpNamespace !== "") { + writer.uint32(330).string(message.phpNamespace); + } + if ( + message.phpMetadataNamespace !== undefined && + message.phpMetadataNamespace !== "" + ) { + writer.uint32(354).string(message.phpMetadataNamespace); + } + if (message.rubyPackage !== undefined && message.rubyPackage !== "") { + writer.uint32(362).string(message.rubyPackage); + } + if (message.features !== undefined) { + FeatureSet.encode(message.features, writer.uint32(402).fork()).ldelim(); + } + for (const v of message.uninterpretedOption) { + UninterpretedOption.encode(v!, writer.uint32(7994).fork()).ldelim(); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): FileOptions { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseFileOptions(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.javaPackage = reader.string(); + continue; + case 8: + if (tag !== 66) { + break; + } + + message.javaOuterClassname = reader.string(); + continue; + case 10: + if (tag !== 80) { + break; + } + + message.javaMultipleFiles = reader.bool(); + continue; + case 20: + if (tag !== 160) { + break; + } + + message.javaGenerateEqualsAndHash = reader.bool(); + continue; + case 27: + if (tag !== 216) { + break; + } + + message.javaStringCheckUtf8 = reader.bool(); + continue; + case 9: + if (tag !== 72) { + break; + } + + message.optimizeFor = reader.int32() as any; + continue; + case 11: + if (tag !== 90) { + break; + } + + message.goPackage = reader.string(); + continue; + case 16: + if (tag !== 128) { + break; + } + + message.ccGenericServices = reader.bool(); + continue; + case 17: + if (tag !== 136) { + break; + } + + message.javaGenericServices = reader.bool(); + continue; + case 18: + if (tag !== 144) { + break; + } + + message.pyGenericServices = reader.bool(); + continue; + case 42: + if (tag !== 336) { + break; + } + + message.phpGenericServices = reader.bool(); + continue; + case 23: + if (tag !== 184) { + break; + } + + message.deprecated = reader.bool(); + continue; + case 31: + if (tag !== 248) { + break; + } + + message.ccEnableArenas = reader.bool(); + continue; + case 36: + if (tag !== 290) { + break; + } + + message.objcClassPrefix = reader.string(); + continue; + case 37: + if (tag !== 298) { + break; + } + + message.csharpNamespace = reader.string(); + continue; + case 39: + if (tag !== 314) { + break; + } + + message.swiftPrefix = reader.string(); + continue; + case 40: + if (tag !== 322) { + break; + } + + message.phpClassPrefix = reader.string(); + continue; + case 41: + if (tag !== 330) { + break; + } + + message.phpNamespace = reader.string(); + continue; + case 44: + if (tag !== 354) { + break; + } + + message.phpMetadataNamespace = reader.string(); + continue; + case 45: + if (tag !== 362) { + break; + } + + message.rubyPackage = reader.string(); + continue; + case 50: + if (tag !== 402) { + break; + } + + message.features = FeatureSet.decode(reader, reader.uint32()); + continue; + case 999: + if (tag !== 7994) { + break; + } + + message.uninterpretedOption.push( + UninterpretedOption.decode(reader, reader.uint32()), + ); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): FileOptions { + return { + javaPackage: isSet(object.javaPackage) + ? globalThis.String(object.javaPackage) + : "", + javaOuterClassname: isSet(object.javaOuterClassname) + ? globalThis.String(object.javaOuterClassname) + : "", + javaMultipleFiles: isSet(object.javaMultipleFiles) + ? globalThis.Boolean(object.javaMultipleFiles) + : false, + javaGenerateEqualsAndHash: isSet(object.javaGenerateEqualsAndHash) + ? globalThis.Boolean(object.javaGenerateEqualsAndHash) + : false, + javaStringCheckUtf8: isSet(object.javaStringCheckUtf8) + ? globalThis.Boolean(object.javaStringCheckUtf8) + : false, + optimizeFor: isSet(object.optimizeFor) + ? fileOptions_OptimizeModeFromJSON(object.optimizeFor) + : 1, + goPackage: isSet(object.goPackage) + ? globalThis.String(object.goPackage) + : "", + ccGenericServices: isSet(object.ccGenericServices) + ? globalThis.Boolean(object.ccGenericServices) + : false, + javaGenericServices: isSet(object.javaGenericServices) + ? globalThis.Boolean(object.javaGenericServices) + : false, + pyGenericServices: isSet(object.pyGenericServices) + ? globalThis.Boolean(object.pyGenericServices) + : false, + phpGenericServices: isSet(object.phpGenericServices) + ? globalThis.Boolean(object.phpGenericServices) + : false, + deprecated: isSet(object.deprecated) + ? globalThis.Boolean(object.deprecated) + : false, + ccEnableArenas: isSet(object.ccEnableArenas) + ? globalThis.Boolean(object.ccEnableArenas) + : true, + objcClassPrefix: isSet(object.objcClassPrefix) + ? globalThis.String(object.objcClassPrefix) + : "", + csharpNamespace: isSet(object.csharpNamespace) + ? globalThis.String(object.csharpNamespace) + : "", + swiftPrefix: isSet(object.swiftPrefix) + ? globalThis.String(object.swiftPrefix) + : "", + phpClassPrefix: isSet(object.phpClassPrefix) + ? globalThis.String(object.phpClassPrefix) + : "", + phpNamespace: isSet(object.phpNamespace) + ? globalThis.String(object.phpNamespace) + : "", + phpMetadataNamespace: isSet(object.phpMetadataNamespace) + ? globalThis.String(object.phpMetadataNamespace) + : "", + rubyPackage: isSet(object.rubyPackage) + ? globalThis.String(object.rubyPackage) + : "", + features: isSet(object.features) + ? FeatureSet.fromJSON(object.features) + : undefined, + uninterpretedOption: globalThis.Array.isArray(object?.uninterpretedOption) + ? object.uninterpretedOption.map((e: any) => + UninterpretedOption.fromJSON(e), + ) + : [], + }; + }, +}; + function createBaseMessageOptions(): MessageOptions { return { messageSetWireFormat: false, @@ -852,6 +1330,183 @@ export const FieldOptions_EditionDefault = { }, }; +function createBaseServiceOptions(): ServiceOptions { + return { features: undefined, deprecated: false, uninterpretedOption: [] }; +} + +export const ServiceOptions = { + encode( + message: ServiceOptions, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + if (message.features !== undefined) { + FeatureSet.encode(message.features, writer.uint32(274).fork()).ldelim(); + } + if (message.deprecated !== undefined && message.deprecated !== false) { + writer.uint32(264).bool(message.deprecated); + } + for (const v of message.uninterpretedOption) { + UninterpretedOption.encode(v!, writer.uint32(7994).fork()).ldelim(); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): ServiceOptions { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseServiceOptions(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 34: + if (tag !== 274) { + break; + } + + message.features = FeatureSet.decode(reader, reader.uint32()); + continue; + case 33: + if (tag !== 264) { + break; + } + + message.deprecated = reader.bool(); + continue; + case 999: + if (tag !== 7994) { + break; + } + + message.uninterpretedOption.push( + UninterpretedOption.decode(reader, reader.uint32()), + ); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): ServiceOptions { + return { + features: isSet(object.features) + ? FeatureSet.fromJSON(object.features) + : undefined, + deprecated: isSet(object.deprecated) + ? globalThis.Boolean(object.deprecated) + : false, + uninterpretedOption: globalThis.Array.isArray(object?.uninterpretedOption) + ? object.uninterpretedOption.map((e: any) => + UninterpretedOption.fromJSON(e), + ) + : [], + }; + }, +}; + +function createBaseMethodOptions(): MethodOptions { + return { + deprecated: false, + idempotencyLevel: 0, + features: undefined, + uninterpretedOption: [], + }; +} + +export const MethodOptions = { + encode( + message: MethodOptions, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + if (message.deprecated !== undefined && message.deprecated !== false) { + writer.uint32(264).bool(message.deprecated); + } + if ( + message.idempotencyLevel !== undefined && + message.idempotencyLevel !== 0 + ) { + writer.uint32(272).int32(message.idempotencyLevel); + } + if (message.features !== undefined) { + FeatureSet.encode(message.features, writer.uint32(282).fork()).ldelim(); + } + for (const v of message.uninterpretedOption) { + UninterpretedOption.encode(v!, writer.uint32(7994).fork()).ldelim(); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): MethodOptions { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseMethodOptions(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 33: + if (tag !== 264) { + break; + } + + message.deprecated = reader.bool(); + continue; + case 34: + if (tag !== 272) { + break; + } + + message.idempotencyLevel = reader.int32() as any; + continue; + case 35: + if (tag !== 282) { + break; + } + + message.features = FeatureSet.decode(reader, reader.uint32()); + continue; + case 999: + if (tag !== 7994) { + break; + } + + message.uninterpretedOption.push( + UninterpretedOption.decode(reader, reader.uint32()), + ); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): MethodOptions { + return { + deprecated: isSet(object.deprecated) + ? globalThis.Boolean(object.deprecated) + : false, + idempotencyLevel: isSet(object.idempotencyLevel) + ? methodOptions_IdempotencyLevelFromJSON(object.idempotencyLevel) + : 0, + features: isSet(object.features) + ? FeatureSet.fromJSON(object.features) + : undefined, + uninterpretedOption: globalThis.Array.isArray(object?.uninterpretedOption) + ? object.uninterpretedOption.map((e: any) => + UninterpretedOption.fromJSON(e), + ) + : [], + }; + }, +}; + function createBaseUninterpretedOption(): UninterpretedOption { return { name: [], diff --git a/private/test/src/protobuf/protoc-gen-openapiv2/options/openapiv2.ts b/private/test/src/protobuf/protoc-gen-openapiv2/options/openapiv2.ts index aa260c90..900597f0 100644 --- a/private/test/src/protobuf/protoc-gen-openapiv2/options/openapiv2.ts +++ b/private/test/src/protobuf/protoc-gen-openapiv2/options/openapiv2.ts @@ -5,6 +5,193 @@ import { Value } from "../../google/protobuf/struct"; export const protobufPackage = "grpc.gateway.protoc_gen_openapiv2.options"; +export enum Scheme { + UNKNOWN = 0, + HTTP = 1, + HTTPS = 2, + WS = 3, + WSS = 4, +} + +export function schemeFromJSON(object: any): Scheme { + switch (object) { + case 0: + case "UNKNOWN": + return Scheme.UNKNOWN; + case 1: + case "HTTP": + return Scheme.HTTP; + case 2: + case "HTTPS": + return Scheme.HTTPS; + case 3: + case "WS": + return Scheme.WS; + case 4: + case "WSS": + return Scheme.WSS; + default: + throw new globalThis.Error( + "Unrecognized enum value " + object + " for enum Scheme", + ); + } +} + +export interface Swagger { + swagger: string; + info: Info | undefined; + host: string; + basePath: string; + schemes: Scheme[]; + consumes: string[]; + produces: string[]; + responses: { [key: string]: Response }; + securityDefinitions: SecurityDefinitions | undefined; + security: SecurityRequirement[]; + tags: Tag[]; + externalDocs: ExternalDocumentation | undefined; + extensions: { [key: string]: any | undefined }; +} + +export interface Swagger_ResponsesEntry { + key: string; + value: Response | undefined; +} + +export interface Swagger_ExtensionsEntry { + key: string; + value: any | undefined; +} + +export interface Operation { + tags: string[]; + summary: string; + description: string; + externalDocs: ExternalDocumentation | undefined; + operationId: string; + consumes: string[]; + produces: string[]; + responses: { [key: string]: Response }; + schemes: Scheme[]; + deprecated: boolean; + security: SecurityRequirement[]; + extensions: { [key: string]: any | undefined }; + parameters: Parameters | undefined; +} + +export interface Operation_ResponsesEntry { + key: string; + value: Response | undefined; +} + +export interface Operation_ExtensionsEntry { + key: string; + value: any | undefined; +} + +export interface Parameters { + headers: HeaderParameter[]; +} + +export interface HeaderParameter { + name: string; + description: string; + type: HeaderParameter_Type; + format: string; + required: boolean; +} + +export enum HeaderParameter_Type { + UNKNOWN = 0, + STRING = 1, + NUMBER = 2, + INTEGER = 3, + BOOLEAN = 4, +} + +export function headerParameter_TypeFromJSON( + object: any, +): HeaderParameter_Type { + switch (object) { + case 0: + case "UNKNOWN": + return HeaderParameter_Type.UNKNOWN; + case 1: + case "STRING": + return HeaderParameter_Type.STRING; + case 2: + case "NUMBER": + return HeaderParameter_Type.NUMBER; + case 3: + case "INTEGER": + return HeaderParameter_Type.INTEGER; + case 4: + case "BOOLEAN": + return HeaderParameter_Type.BOOLEAN; + default: + throw new globalThis.Error( + "Unrecognized enum value " + object + " for enum HeaderParameter_Type", + ); + } +} + +export interface Header { + description: string; + type: string; + format: string; + default: string; + pattern: string; +} + +export interface Response { + description: string; + schema: Schema | undefined; + headers: { [key: string]: Header }; + examples: { [key: string]: string }; + extensions: { [key: string]: any | undefined }; +} + +export interface Response_HeadersEntry { + key: string; + value: Header | undefined; +} + +export interface Response_ExamplesEntry { + key: string; + value: string; +} + +export interface Response_ExtensionsEntry { + key: string; + value: any | undefined; +} + +export interface Info { + title: string; + description: string; + termsOfService: string; + contact: Contact | undefined; + license: License | undefined; + version: string; + extensions: { [key: string]: any | undefined }; +} + +export interface Info_ExtensionsEntry { + key: string; + value: any | undefined; +} + +export interface Contact { + name: string; + url: string; + email: string; +} + +export interface License { + name: string; + url: string; +} + export interface ExternalDocumentation { description: string; url: string; @@ -104,32 +291,238 @@ export interface JSONSchema_ExtensionsEntry { value: any | undefined; } -function createBaseExternalDocumentation(): ExternalDocumentation { - return { description: "", url: "" }; +export interface Tag { + name: string; + description: string; + externalDocs: ExternalDocumentation | undefined; + extensions: { [key: string]: any | undefined }; } -export const ExternalDocumentation = { +export interface Tag_ExtensionsEntry { + key: string; + value: any | undefined; +} + +export interface SecurityDefinitions { + security: { [key: string]: SecurityScheme }; +} + +export interface SecurityDefinitions_SecurityEntry { + key: string; + value: SecurityScheme | undefined; +} + +export interface SecurityScheme { + type: SecurityScheme_Type; + description: string; + name: string; + in: SecurityScheme_In; + flow: SecurityScheme_Flow; + authorizationUrl: string; + tokenUrl: string; + scopes: Scopes | undefined; + extensions: { [key: string]: any | undefined }; +} + +export enum SecurityScheme_Type { + TYPE_INVALID = 0, + TYPE_BASIC = 1, + TYPE_API_KEY = 2, + TYPE_OAUTH2 = 3, +} + +export function securityScheme_TypeFromJSON(object: any): SecurityScheme_Type { + switch (object) { + case 0: + case "TYPE_INVALID": + return SecurityScheme_Type.TYPE_INVALID; + case 1: + case "TYPE_BASIC": + return SecurityScheme_Type.TYPE_BASIC; + case 2: + case "TYPE_API_KEY": + return SecurityScheme_Type.TYPE_API_KEY; + case 3: + case "TYPE_OAUTH2": + return SecurityScheme_Type.TYPE_OAUTH2; + default: + throw new globalThis.Error( + "Unrecognized enum value " + object + " for enum SecurityScheme_Type", + ); + } +} + +export enum SecurityScheme_In { + IN_INVALID = 0, + IN_QUERY = 1, + IN_HEADER = 2, +} + +export function securityScheme_InFromJSON(object: any): SecurityScheme_In { + switch (object) { + case 0: + case "IN_INVALID": + return SecurityScheme_In.IN_INVALID; + case 1: + case "IN_QUERY": + return SecurityScheme_In.IN_QUERY; + case 2: + case "IN_HEADER": + return SecurityScheme_In.IN_HEADER; + default: + throw new globalThis.Error( + "Unrecognized enum value " + object + " for enum SecurityScheme_In", + ); + } +} + +export enum SecurityScheme_Flow { + FLOW_INVALID = 0, + FLOW_IMPLICIT = 1, + FLOW_PASSWORD = 2, + FLOW_APPLICATION = 3, + FLOW_ACCESS_CODE = 4, +} + +export function securityScheme_FlowFromJSON(object: any): SecurityScheme_Flow { + switch (object) { + case 0: + case "FLOW_INVALID": + return SecurityScheme_Flow.FLOW_INVALID; + case 1: + case "FLOW_IMPLICIT": + return SecurityScheme_Flow.FLOW_IMPLICIT; + case 2: + case "FLOW_PASSWORD": + return SecurityScheme_Flow.FLOW_PASSWORD; + case 3: + case "FLOW_APPLICATION": + return SecurityScheme_Flow.FLOW_APPLICATION; + case 4: + case "FLOW_ACCESS_CODE": + return SecurityScheme_Flow.FLOW_ACCESS_CODE; + default: + throw new globalThis.Error( + "Unrecognized enum value " + object + " for enum SecurityScheme_Flow", + ); + } +} + +export interface SecurityScheme_ExtensionsEntry { + key: string; + value: any | undefined; +} + +export interface SecurityRequirement { + securityRequirement: { + [key: string]: SecurityRequirement_SecurityRequirementValue; + }; +} + +export interface SecurityRequirement_SecurityRequirementValue { + scope: string[]; +} + +export interface SecurityRequirement_SecurityRequirementEntry { + key: string; + value: SecurityRequirement_SecurityRequirementValue | undefined; +} + +export interface Scopes { + scope: { [key: string]: string }; +} + +export interface Scopes_ScopeEntry { + key: string; + value: string; +} + +function createBaseSwagger(): Swagger { + return { + swagger: "", + info: undefined, + host: "", + basePath: "", + schemes: [], + consumes: [], + produces: [], + responses: {}, + securityDefinitions: undefined, + security: [], + tags: [], + externalDocs: undefined, + extensions: {}, + }; +} + +export const Swagger = { encode( - message: ExternalDocumentation, + message: Swagger, writer: _m0.Writer = _m0.Writer.create(), ): _m0.Writer { - if (message.description !== "") { - writer.uint32(10).string(message.description); + if (message.swagger !== "") { + writer.uint32(10).string(message.swagger); } - if (message.url !== "") { - writer.uint32(18).string(message.url); + if (message.info !== undefined) { + Info.encode(message.info, writer.uint32(18).fork()).ldelim(); + } + if (message.host !== "") { + writer.uint32(26).string(message.host); + } + if (message.basePath !== "") { + writer.uint32(34).string(message.basePath); + } + writer.uint32(42).fork(); + for (const v of message.schemes) { + writer.int32(v); } + writer.ldelim(); + for (const v of message.consumes) { + writer.uint32(50).string(v!); + } + for (const v of message.produces) { + writer.uint32(58).string(v!); + } + Object.entries(message.responses).forEach(([key, value]) => { + Swagger_ResponsesEntry.encode( + { key: key as any, value }, + writer.uint32(82).fork(), + ).ldelim(); + }); + if (message.securityDefinitions !== undefined) { + SecurityDefinitions.encode( + message.securityDefinitions, + writer.uint32(90).fork(), + ).ldelim(); + } + for (const v of message.security) { + SecurityRequirement.encode(v!, writer.uint32(98).fork()).ldelim(); + } + for (const v of message.tags) { + Tag.encode(v!, writer.uint32(106).fork()).ldelim(); + } + if (message.externalDocs !== undefined) { + ExternalDocumentation.encode( + message.externalDocs, + writer.uint32(114).fork(), + ).ldelim(); + } + Object.entries(message.extensions).forEach(([key, value]) => { + if (value !== undefined) { + Swagger_ExtensionsEntry.encode( + { key: key as any, value }, + writer.uint32(122).fork(), + ).ldelim(); + } + }); return writer; }, - decode( - input: _m0.Reader | Uint8Array, - length?: number, - ): ExternalDocumentation { + decode(input: _m0.Reader | Uint8Array, length?: number): Swagger { const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); let end = length === undefined ? reader.len : reader.pos + length; - const message = createBaseExternalDocumentation(); + const message = createBaseSwagger(); while (reader.pos < end) { const tag = reader.uint32(); switch (tag >>> 3) { @@ -138,75 +531,2323 @@ export const ExternalDocumentation = { break; } - message.description = reader.string(); + message.swagger = reader.string(); continue; case 2: if (tag !== 18) { break; } - message.url = reader.string(); + message.info = Info.decode(reader, reader.uint32()); continue; - } - if ((tag & 7) === 4 || tag === 0) { - break; - } - reader.skipType(tag & 7); - } - return message; - }, + case 3: + if (tag !== 26) { + break; + } - fromJSON(object: any): ExternalDocumentation { - return { - description: isSet(object.description) - ? globalThis.String(object.description) - : "", - url: isSet(object.url) ? globalThis.String(object.url) : "", - }; - }, -}; + message.host = reader.string(); + continue; + case 4: + if (tag !== 34) { + break; + } -function createBaseSchema(): Schema { - return { - jsonSchema: undefined, - discriminator: "", - readOnly: false, - externalDocs: undefined, - example: "", - }; -} + message.basePath = reader.string(); + continue; + case 5: + if (tag === 40) { + message.schemes.push(reader.int32() as any); -export const Schema = { - encode( + continue; + } + + if (tag === 42) { + const end2 = reader.uint32() + reader.pos; + while (reader.pos < end2) { + message.schemes.push(reader.int32() as any); + } + + continue; + } + + break; + case 6: + if (tag !== 50) { + break; + } + + message.consumes.push(reader.string()); + continue; + case 7: + if (tag !== 58) { + break; + } + + message.produces.push(reader.string()); + continue; + case 10: + if (tag !== 82) { + break; + } + + const entry10 = Swagger_ResponsesEntry.decode( + reader, + reader.uint32(), + ); + if (entry10.value !== undefined) { + message.responses[entry10.key] = entry10.value; + } + continue; + case 11: + if (tag !== 90) { + break; + } + + message.securityDefinitions = SecurityDefinitions.decode( + reader, + reader.uint32(), + ); + continue; + case 12: + if (tag !== 98) { + break; + } + + message.security.push( + SecurityRequirement.decode(reader, reader.uint32()), + ); + continue; + case 13: + if (tag !== 106) { + break; + } + + message.tags.push(Tag.decode(reader, reader.uint32())); + continue; + case 14: + if (tag !== 114) { + break; + } + + message.externalDocs = ExternalDocumentation.decode( + reader, + reader.uint32(), + ); + continue; + case 15: + if (tag !== 122) { + break; + } + + const entry15 = Swagger_ExtensionsEntry.decode( + reader, + reader.uint32(), + ); + if (entry15.value !== undefined) { + message.extensions[entry15.key] = entry15.value; + } + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): Swagger { + return { + swagger: isSet(object.swagger) ? globalThis.String(object.swagger) : "", + info: isSet(object.info) ? Info.fromJSON(object.info) : undefined, + host: isSet(object.host) ? globalThis.String(object.host) : "", + basePath: isSet(object.basePath) + ? globalThis.String(object.basePath) + : "", + schemes: globalThis.Array.isArray(object?.schemes) + ? object.schemes.map((e: any) => schemeFromJSON(e)) + : [], + consumes: globalThis.Array.isArray(object?.consumes) + ? object.consumes.map((e: any) => globalThis.String(e)) + : [], + produces: globalThis.Array.isArray(object?.produces) + ? object.produces.map((e: any) => globalThis.String(e)) + : [], + responses: isObject(object.responses) + ? Object.entries(object.responses).reduce<{ [key: string]: Response }>( + (acc, [key, value]) => { + acc[key] = Response.fromJSON(value); + return acc; + }, + {}, + ) + : {}, + securityDefinitions: isSet(object.securityDefinitions) + ? SecurityDefinitions.fromJSON(object.securityDefinitions) + : undefined, + security: globalThis.Array.isArray(object?.security) + ? object.security.map((e: any) => SecurityRequirement.fromJSON(e)) + : [], + tags: globalThis.Array.isArray(object?.tags) + ? object.tags.map((e: any) => Tag.fromJSON(e)) + : [], + externalDocs: isSet(object.externalDocs) + ? ExternalDocumentation.fromJSON(object.externalDocs) + : undefined, + extensions: isObject(object.extensions) + ? Object.entries(object.extensions).reduce<{ + [key: string]: any | undefined; + }>((acc, [key, value]) => { + acc[key] = value as any | undefined; + return acc; + }, {}) + : {}, + }; + }, +}; + +function createBaseSwagger_ResponsesEntry(): Swagger_ResponsesEntry { + return { key: "", value: undefined }; +} + +export const Swagger_ResponsesEntry = { + encode( + message: Swagger_ResponsesEntry, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + if (message.key !== "") { + writer.uint32(10).string(message.key); + } + if (message.value !== undefined) { + Response.encode(message.value, writer.uint32(18).fork()).ldelim(); + } + return writer; + }, + + decode( + input: _m0.Reader | Uint8Array, + length?: number, + ): Swagger_ResponsesEntry { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseSwagger_ResponsesEntry(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.key = reader.string(); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.value = Response.decode(reader, reader.uint32()); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): Swagger_ResponsesEntry { + return { + key: isSet(object.key) ? globalThis.String(object.key) : "", + value: isSet(object.value) ? Response.fromJSON(object.value) : undefined, + }; + }, +}; + +function createBaseSwagger_ExtensionsEntry(): Swagger_ExtensionsEntry { + return { key: "", value: undefined }; +} + +export const Swagger_ExtensionsEntry = { + encode( + message: Swagger_ExtensionsEntry, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + if (message.key !== "") { + writer.uint32(10).string(message.key); + } + if (message.value !== undefined) { + Value.encode( + Value.wrap(message.value), + writer.uint32(18).fork(), + ).ldelim(); + } + return writer; + }, + + decode( + input: _m0.Reader | Uint8Array, + length?: number, + ): Swagger_ExtensionsEntry { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseSwagger_ExtensionsEntry(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.key = reader.string(); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.value = Value.unwrap(Value.decode(reader, reader.uint32())); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): Swagger_ExtensionsEntry { + return { + key: isSet(object.key) ? globalThis.String(object.key) : "", + value: isSet(object?.value) ? object.value : undefined, + }; + }, +}; + +function createBaseOperation(): Operation { + return { + tags: [], + summary: "", + description: "", + externalDocs: undefined, + operationId: "", + consumes: [], + produces: [], + responses: {}, + schemes: [], + deprecated: false, + security: [], + extensions: {}, + parameters: undefined, + }; +} + +export const Operation = { + encode( + message: Operation, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + for (const v of message.tags) { + writer.uint32(10).string(v!); + } + if (message.summary !== "") { + writer.uint32(18).string(message.summary); + } + if (message.description !== "") { + writer.uint32(26).string(message.description); + } + if (message.externalDocs !== undefined) { + ExternalDocumentation.encode( + message.externalDocs, + writer.uint32(34).fork(), + ).ldelim(); + } + if (message.operationId !== "") { + writer.uint32(42).string(message.operationId); + } + for (const v of message.consumes) { + writer.uint32(50).string(v!); + } + for (const v of message.produces) { + writer.uint32(58).string(v!); + } + Object.entries(message.responses).forEach(([key, value]) => { + Operation_ResponsesEntry.encode( + { key: key as any, value }, + writer.uint32(74).fork(), + ).ldelim(); + }); + writer.uint32(82).fork(); + for (const v of message.schemes) { + writer.int32(v); + } + writer.ldelim(); + if (message.deprecated !== false) { + writer.uint32(88).bool(message.deprecated); + } + for (const v of message.security) { + SecurityRequirement.encode(v!, writer.uint32(98).fork()).ldelim(); + } + Object.entries(message.extensions).forEach(([key, value]) => { + if (value !== undefined) { + Operation_ExtensionsEntry.encode( + { key: key as any, value }, + writer.uint32(106).fork(), + ).ldelim(); + } + }); + if (message.parameters !== undefined) { + Parameters.encode(message.parameters, writer.uint32(114).fork()).ldelim(); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): Operation { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseOperation(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.tags.push(reader.string()); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.summary = reader.string(); + continue; + case 3: + if (tag !== 26) { + break; + } + + message.description = reader.string(); + continue; + case 4: + if (tag !== 34) { + break; + } + + message.externalDocs = ExternalDocumentation.decode( + reader, + reader.uint32(), + ); + continue; + case 5: + if (tag !== 42) { + break; + } + + message.operationId = reader.string(); + continue; + case 6: + if (tag !== 50) { + break; + } + + message.consumes.push(reader.string()); + continue; + case 7: + if (tag !== 58) { + break; + } + + message.produces.push(reader.string()); + continue; + case 9: + if (tag !== 74) { + break; + } + + const entry9 = Operation_ResponsesEntry.decode( + reader, + reader.uint32(), + ); + if (entry9.value !== undefined) { + message.responses[entry9.key] = entry9.value; + } + continue; + case 10: + if (tag === 80) { + message.schemes.push(reader.int32() as any); + + continue; + } + + if (tag === 82) { + const end2 = reader.uint32() + reader.pos; + while (reader.pos < end2) { + message.schemes.push(reader.int32() as any); + } + + continue; + } + + break; + case 11: + if (tag !== 88) { + break; + } + + message.deprecated = reader.bool(); + continue; + case 12: + if (tag !== 98) { + break; + } + + message.security.push( + SecurityRequirement.decode(reader, reader.uint32()), + ); + continue; + case 13: + if (tag !== 106) { + break; + } + + const entry13 = Operation_ExtensionsEntry.decode( + reader, + reader.uint32(), + ); + if (entry13.value !== undefined) { + message.extensions[entry13.key] = entry13.value; + } + continue; + case 14: + if (tag !== 114) { + break; + } + + message.parameters = Parameters.decode(reader, reader.uint32()); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): Operation { + return { + tags: globalThis.Array.isArray(object?.tags) + ? object.tags.map((e: any) => globalThis.String(e)) + : [], + summary: isSet(object.summary) ? globalThis.String(object.summary) : "", + description: isSet(object.description) + ? globalThis.String(object.description) + : "", + externalDocs: isSet(object.externalDocs) + ? ExternalDocumentation.fromJSON(object.externalDocs) + : undefined, + operationId: isSet(object.operationId) + ? globalThis.String(object.operationId) + : "", + consumes: globalThis.Array.isArray(object?.consumes) + ? object.consumes.map((e: any) => globalThis.String(e)) + : [], + produces: globalThis.Array.isArray(object?.produces) + ? object.produces.map((e: any) => globalThis.String(e)) + : [], + responses: isObject(object.responses) + ? Object.entries(object.responses).reduce<{ [key: string]: Response }>( + (acc, [key, value]) => { + acc[key] = Response.fromJSON(value); + return acc; + }, + {}, + ) + : {}, + schemes: globalThis.Array.isArray(object?.schemes) + ? object.schemes.map((e: any) => schemeFromJSON(e)) + : [], + deprecated: isSet(object.deprecated) + ? globalThis.Boolean(object.deprecated) + : false, + security: globalThis.Array.isArray(object?.security) + ? object.security.map((e: any) => SecurityRequirement.fromJSON(e)) + : [], + extensions: isObject(object.extensions) + ? Object.entries(object.extensions).reduce<{ + [key: string]: any | undefined; + }>((acc, [key, value]) => { + acc[key] = value as any | undefined; + return acc; + }, {}) + : {}, + parameters: isSet(object.parameters) + ? Parameters.fromJSON(object.parameters) + : undefined, + }; + }, +}; + +function createBaseOperation_ResponsesEntry(): Operation_ResponsesEntry { + return { key: "", value: undefined }; +} + +export const Operation_ResponsesEntry = { + encode( + message: Operation_ResponsesEntry, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + if (message.key !== "") { + writer.uint32(10).string(message.key); + } + if (message.value !== undefined) { + Response.encode(message.value, writer.uint32(18).fork()).ldelim(); + } + return writer; + }, + + decode( + input: _m0.Reader | Uint8Array, + length?: number, + ): Operation_ResponsesEntry { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseOperation_ResponsesEntry(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.key = reader.string(); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.value = Response.decode(reader, reader.uint32()); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): Operation_ResponsesEntry { + return { + key: isSet(object.key) ? globalThis.String(object.key) : "", + value: isSet(object.value) ? Response.fromJSON(object.value) : undefined, + }; + }, +}; + +function createBaseOperation_ExtensionsEntry(): Operation_ExtensionsEntry { + return { key: "", value: undefined }; +} + +export const Operation_ExtensionsEntry = { + encode( + message: Operation_ExtensionsEntry, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + if (message.key !== "") { + writer.uint32(10).string(message.key); + } + if (message.value !== undefined) { + Value.encode( + Value.wrap(message.value), + writer.uint32(18).fork(), + ).ldelim(); + } + return writer; + }, + + decode( + input: _m0.Reader | Uint8Array, + length?: number, + ): Operation_ExtensionsEntry { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseOperation_ExtensionsEntry(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.key = reader.string(); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.value = Value.unwrap(Value.decode(reader, reader.uint32())); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): Operation_ExtensionsEntry { + return { + key: isSet(object.key) ? globalThis.String(object.key) : "", + value: isSet(object?.value) ? object.value : undefined, + }; + }, +}; + +function createBaseParameters(): Parameters { + return { headers: [] }; +} + +export const Parameters = { + encode( + message: Parameters, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + for (const v of message.headers) { + HeaderParameter.encode(v!, writer.uint32(10).fork()).ldelim(); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): Parameters { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseParameters(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.headers.push(HeaderParameter.decode(reader, reader.uint32())); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): Parameters { + return { + headers: globalThis.Array.isArray(object?.headers) + ? object.headers.map((e: any) => HeaderParameter.fromJSON(e)) + : [], + }; + }, +}; + +function createBaseHeaderParameter(): HeaderParameter { + return { name: "", description: "", type: 0, format: "", required: false }; +} + +export const HeaderParameter = { + encode( + message: HeaderParameter, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + if (message.name !== "") { + writer.uint32(10).string(message.name); + } + if (message.description !== "") { + writer.uint32(18).string(message.description); + } + if (message.type !== 0) { + writer.uint32(24).int32(message.type); + } + if (message.format !== "") { + writer.uint32(34).string(message.format); + } + if (message.required !== false) { + writer.uint32(40).bool(message.required); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): HeaderParameter { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseHeaderParameter(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.name = reader.string(); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.description = reader.string(); + continue; + case 3: + if (tag !== 24) { + break; + } + + message.type = reader.int32() as any; + continue; + case 4: + if (tag !== 34) { + break; + } + + message.format = reader.string(); + continue; + case 5: + if (tag !== 40) { + break; + } + + message.required = reader.bool(); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): HeaderParameter { + return { + name: isSet(object.name) ? globalThis.String(object.name) : "", + description: isSet(object.description) + ? globalThis.String(object.description) + : "", + type: isSet(object.type) ? headerParameter_TypeFromJSON(object.type) : 0, + format: isSet(object.format) ? globalThis.String(object.format) : "", + required: isSet(object.required) + ? globalThis.Boolean(object.required) + : false, + }; + }, +}; + +function createBaseHeader(): Header { + return { description: "", type: "", format: "", default: "", pattern: "" }; +} + +export const Header = { + encode( + message: Header, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + if (message.description !== "") { + writer.uint32(10).string(message.description); + } + if (message.type !== "") { + writer.uint32(18).string(message.type); + } + if (message.format !== "") { + writer.uint32(26).string(message.format); + } + if (message.default !== "") { + writer.uint32(50).string(message.default); + } + if (message.pattern !== "") { + writer.uint32(106).string(message.pattern); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): Header { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseHeader(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.description = reader.string(); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.type = reader.string(); + continue; + case 3: + if (tag !== 26) { + break; + } + + message.format = reader.string(); + continue; + case 6: + if (tag !== 50) { + break; + } + + message.default = reader.string(); + continue; + case 13: + if (tag !== 106) { + break; + } + + message.pattern = reader.string(); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): Header { + return { + description: isSet(object.description) + ? globalThis.String(object.description) + : "", + type: isSet(object.type) ? globalThis.String(object.type) : "", + format: isSet(object.format) ? globalThis.String(object.format) : "", + default: isSet(object.default) ? globalThis.String(object.default) : "", + pattern: isSet(object.pattern) ? globalThis.String(object.pattern) : "", + }; + }, +}; + +function createBaseResponse(): Response { + return { + description: "", + schema: undefined, + headers: {}, + examples: {}, + extensions: {}, + }; +} + +export const Response = { + encode( + message: Response, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + if (message.description !== "") { + writer.uint32(10).string(message.description); + } + if (message.schema !== undefined) { + Schema.encode(message.schema, writer.uint32(18).fork()).ldelim(); + } + Object.entries(message.headers).forEach(([key, value]) => { + Response_HeadersEntry.encode( + { key: key as any, value }, + writer.uint32(26).fork(), + ).ldelim(); + }); + Object.entries(message.examples).forEach(([key, value]) => { + Response_ExamplesEntry.encode( + { key: key as any, value }, + writer.uint32(34).fork(), + ).ldelim(); + }); + Object.entries(message.extensions).forEach(([key, value]) => { + if (value !== undefined) { + Response_ExtensionsEntry.encode( + { key: key as any, value }, + writer.uint32(42).fork(), + ).ldelim(); + } + }); + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): Response { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseResponse(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.description = reader.string(); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.schema = Schema.decode(reader, reader.uint32()); + continue; + case 3: + if (tag !== 26) { + break; + } + + const entry3 = Response_HeadersEntry.decode(reader, reader.uint32()); + if (entry3.value !== undefined) { + message.headers[entry3.key] = entry3.value; + } + continue; + case 4: + if (tag !== 34) { + break; + } + + const entry4 = Response_ExamplesEntry.decode(reader, reader.uint32()); + if (entry4.value !== undefined) { + message.examples[entry4.key] = entry4.value; + } + continue; + case 5: + if (tag !== 42) { + break; + } + + const entry5 = Response_ExtensionsEntry.decode( + reader, + reader.uint32(), + ); + if (entry5.value !== undefined) { + message.extensions[entry5.key] = entry5.value; + } + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): Response { + return { + description: isSet(object.description) + ? globalThis.String(object.description) + : "", + schema: isSet(object.schema) ? Schema.fromJSON(object.schema) : undefined, + headers: isObject(object.headers) + ? Object.entries(object.headers).reduce<{ [key: string]: Header }>( + (acc, [key, value]) => { + acc[key] = Header.fromJSON(value); + return acc; + }, + {}, + ) + : {}, + examples: isObject(object.examples) + ? Object.entries(object.examples).reduce<{ [key: string]: string }>( + (acc, [key, value]) => { + acc[key] = String(value); + return acc; + }, + {}, + ) + : {}, + extensions: isObject(object.extensions) + ? Object.entries(object.extensions).reduce<{ + [key: string]: any | undefined; + }>((acc, [key, value]) => { + acc[key] = value as any | undefined; + return acc; + }, {}) + : {}, + }; + }, +}; + +function createBaseResponse_HeadersEntry(): Response_HeadersEntry { + return { key: "", value: undefined }; +} + +export const Response_HeadersEntry = { + encode( + message: Response_HeadersEntry, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + if (message.key !== "") { + writer.uint32(10).string(message.key); + } + if (message.value !== undefined) { + Header.encode(message.value, writer.uint32(18).fork()).ldelim(); + } + return writer; + }, + + decode( + input: _m0.Reader | Uint8Array, + length?: number, + ): Response_HeadersEntry { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseResponse_HeadersEntry(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.key = reader.string(); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.value = Header.decode(reader, reader.uint32()); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): Response_HeadersEntry { + return { + key: isSet(object.key) ? globalThis.String(object.key) : "", + value: isSet(object.value) ? Header.fromJSON(object.value) : undefined, + }; + }, +}; + +function createBaseResponse_ExamplesEntry(): Response_ExamplesEntry { + return { key: "", value: "" }; +} + +export const Response_ExamplesEntry = { + encode( + message: Response_ExamplesEntry, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + if (message.key !== "") { + writer.uint32(10).string(message.key); + } + if (message.value !== "") { + writer.uint32(18).string(message.value); + } + return writer; + }, + + decode( + input: _m0.Reader | Uint8Array, + length?: number, + ): Response_ExamplesEntry { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseResponse_ExamplesEntry(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.key = reader.string(); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.value = reader.string(); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): Response_ExamplesEntry { + return { + key: isSet(object.key) ? globalThis.String(object.key) : "", + value: isSet(object.value) ? globalThis.String(object.value) : "", + }; + }, +}; + +function createBaseResponse_ExtensionsEntry(): Response_ExtensionsEntry { + return { key: "", value: undefined }; +} + +export const Response_ExtensionsEntry = { + encode( + message: Response_ExtensionsEntry, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + if (message.key !== "") { + writer.uint32(10).string(message.key); + } + if (message.value !== undefined) { + Value.encode( + Value.wrap(message.value), + writer.uint32(18).fork(), + ).ldelim(); + } + return writer; + }, + + decode( + input: _m0.Reader | Uint8Array, + length?: number, + ): Response_ExtensionsEntry { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseResponse_ExtensionsEntry(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.key = reader.string(); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.value = Value.unwrap(Value.decode(reader, reader.uint32())); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): Response_ExtensionsEntry { + return { + key: isSet(object.key) ? globalThis.String(object.key) : "", + value: isSet(object?.value) ? object.value : undefined, + }; + }, +}; + +function createBaseInfo(): Info { + return { + title: "", + description: "", + termsOfService: "", + contact: undefined, + license: undefined, + version: "", + extensions: {}, + }; +} + +export const Info = { + encode(message: Info, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.title !== "") { + writer.uint32(10).string(message.title); + } + if (message.description !== "") { + writer.uint32(18).string(message.description); + } + if (message.termsOfService !== "") { + writer.uint32(26).string(message.termsOfService); + } + if (message.contact !== undefined) { + Contact.encode(message.contact, writer.uint32(34).fork()).ldelim(); + } + if (message.license !== undefined) { + License.encode(message.license, writer.uint32(42).fork()).ldelim(); + } + if (message.version !== "") { + writer.uint32(50).string(message.version); + } + Object.entries(message.extensions).forEach(([key, value]) => { + if (value !== undefined) { + Info_ExtensionsEntry.encode( + { key: key as any, value }, + writer.uint32(58).fork(), + ).ldelim(); + } + }); + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): Info { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseInfo(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.title = reader.string(); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.description = reader.string(); + continue; + case 3: + if (tag !== 26) { + break; + } + + message.termsOfService = reader.string(); + continue; + case 4: + if (tag !== 34) { + break; + } + + message.contact = Contact.decode(reader, reader.uint32()); + continue; + case 5: + if (tag !== 42) { + break; + } + + message.license = License.decode(reader, reader.uint32()); + continue; + case 6: + if (tag !== 50) { + break; + } + + message.version = reader.string(); + continue; + case 7: + if (tag !== 58) { + break; + } + + const entry7 = Info_ExtensionsEntry.decode(reader, reader.uint32()); + if (entry7.value !== undefined) { + message.extensions[entry7.key] = entry7.value; + } + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): Info { + return { + title: isSet(object.title) ? globalThis.String(object.title) : "", + description: isSet(object.description) + ? globalThis.String(object.description) + : "", + termsOfService: isSet(object.termsOfService) + ? globalThis.String(object.termsOfService) + : "", + contact: isSet(object.contact) + ? Contact.fromJSON(object.contact) + : undefined, + license: isSet(object.license) + ? License.fromJSON(object.license) + : undefined, + version: isSet(object.version) ? globalThis.String(object.version) : "", + extensions: isObject(object.extensions) + ? Object.entries(object.extensions).reduce<{ + [key: string]: any | undefined; + }>((acc, [key, value]) => { + acc[key] = value as any | undefined; + return acc; + }, {}) + : {}, + }; + }, +}; + +function createBaseInfo_ExtensionsEntry(): Info_ExtensionsEntry { + return { key: "", value: undefined }; +} + +export const Info_ExtensionsEntry = { + encode( + message: Info_ExtensionsEntry, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + if (message.key !== "") { + writer.uint32(10).string(message.key); + } + if (message.value !== undefined) { + Value.encode( + Value.wrap(message.value), + writer.uint32(18).fork(), + ).ldelim(); + } + return writer; + }, + + decode( + input: _m0.Reader | Uint8Array, + length?: number, + ): Info_ExtensionsEntry { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseInfo_ExtensionsEntry(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.key = reader.string(); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.value = Value.unwrap(Value.decode(reader, reader.uint32())); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): Info_ExtensionsEntry { + return { + key: isSet(object.key) ? globalThis.String(object.key) : "", + value: isSet(object?.value) ? object.value : undefined, + }; + }, +}; + +function createBaseContact(): Contact { + return { name: "", url: "", email: "" }; +} + +export const Contact = { + encode( + message: Contact, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + if (message.name !== "") { + writer.uint32(10).string(message.name); + } + if (message.url !== "") { + writer.uint32(18).string(message.url); + } + if (message.email !== "") { + writer.uint32(26).string(message.email); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): Contact { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseContact(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.name = reader.string(); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.url = reader.string(); + continue; + case 3: + if (tag !== 26) { + break; + } + + message.email = reader.string(); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): Contact { + return { + name: isSet(object.name) ? globalThis.String(object.name) : "", + url: isSet(object.url) ? globalThis.String(object.url) : "", + email: isSet(object.email) ? globalThis.String(object.email) : "", + }; + }, +}; + +function createBaseLicense(): License { + return { name: "", url: "" }; +} + +export const License = { + encode( + message: License, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + if (message.name !== "") { + writer.uint32(10).string(message.name); + } + if (message.url !== "") { + writer.uint32(18).string(message.url); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): License { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseLicense(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.name = reader.string(); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.url = reader.string(); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): License { + return { + name: isSet(object.name) ? globalThis.String(object.name) : "", + url: isSet(object.url) ? globalThis.String(object.url) : "", + }; + }, +}; + +function createBaseExternalDocumentation(): ExternalDocumentation { + return { description: "", url: "" }; +} + +export const ExternalDocumentation = { + encode( + message: ExternalDocumentation, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + if (message.description !== "") { + writer.uint32(10).string(message.description); + } + if (message.url !== "") { + writer.uint32(18).string(message.url); + } + return writer; + }, + + decode( + input: _m0.Reader | Uint8Array, + length?: number, + ): ExternalDocumentation { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseExternalDocumentation(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.description = reader.string(); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.url = reader.string(); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): ExternalDocumentation { + return { + description: isSet(object.description) + ? globalThis.String(object.description) + : "", + url: isSet(object.url) ? globalThis.String(object.url) : "", + }; + }, +}; + +function createBaseSchema(): Schema { + return { + jsonSchema: undefined, + discriminator: "", + readOnly: false, + externalDocs: undefined, + example: "", + }; +} + +export const Schema = { + encode( message: Schema, writer: _m0.Writer = _m0.Writer.create(), ): _m0.Writer { - if (message.jsonSchema !== undefined) { - JSONSchema.encode(message.jsonSchema, writer.uint32(10).fork()).ldelim(); + if (message.jsonSchema !== undefined) { + JSONSchema.encode(message.jsonSchema, writer.uint32(10).fork()).ldelim(); + } + if (message.discriminator !== "") { + writer.uint32(18).string(message.discriminator); + } + if (message.readOnly !== false) { + writer.uint32(24).bool(message.readOnly); + } + if (message.externalDocs !== undefined) { + ExternalDocumentation.encode( + message.externalDocs, + writer.uint32(42).fork(), + ).ldelim(); + } + if (message.example !== "") { + writer.uint32(50).string(message.example); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): Schema { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseSchema(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.jsonSchema = JSONSchema.decode(reader, reader.uint32()); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.discriminator = reader.string(); + continue; + case 3: + if (tag !== 24) { + break; + } + + message.readOnly = reader.bool(); + continue; + case 5: + if (tag !== 42) { + break; + } + + message.externalDocs = ExternalDocumentation.decode( + reader, + reader.uint32(), + ); + continue; + case 6: + if (tag !== 50) { + break; + } + + message.example = reader.string(); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): Schema { + return { + jsonSchema: isSet(object.jsonSchema) + ? JSONSchema.fromJSON(object.jsonSchema) + : undefined, + discriminator: isSet(object.discriminator) + ? globalThis.String(object.discriminator) + : "", + readOnly: isSet(object.readOnly) + ? globalThis.Boolean(object.readOnly) + : false, + externalDocs: isSet(object.externalDocs) + ? ExternalDocumentation.fromJSON(object.externalDocs) + : undefined, + example: isSet(object.example) ? globalThis.String(object.example) : "", + }; + }, +}; + +function createBaseJSONSchema(): JSONSchema { + return { + ref: "", + title: "", + description: "", + default: "", + readOnly: false, + example: "", + multipleOf: 0, + maximum: 0, + exclusiveMaximum: false, + minimum: 0, + exclusiveMinimum: false, + maxLength: "0", + minLength: "0", + pattern: "", + maxItems: "0", + minItems: "0", + uniqueItems: false, + maxProperties: "0", + minProperties: "0", + required: [], + array: [], + type: [], + format: "", + enum: [], + fieldConfiguration: undefined, + extensions: {}, + }; +} + +export const JSONSchema = { + encode( + message: JSONSchema, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + if (message.ref !== "") { + writer.uint32(26).string(message.ref); + } + if (message.title !== "") { + writer.uint32(42).string(message.title); + } + if (message.description !== "") { + writer.uint32(50).string(message.description); + } + if (message.default !== "") { + writer.uint32(58).string(message.default); + } + if (message.readOnly !== false) { + writer.uint32(64).bool(message.readOnly); + } + if (message.example !== "") { + writer.uint32(74).string(message.example); + } + if (message.multipleOf !== 0) { + writer.uint32(81).double(message.multipleOf); + } + if (message.maximum !== 0) { + writer.uint32(89).double(message.maximum); + } + if (message.exclusiveMaximum !== false) { + writer.uint32(96).bool(message.exclusiveMaximum); + } + if (message.minimum !== 0) { + writer.uint32(105).double(message.minimum); + } + if (message.exclusiveMinimum !== false) { + writer.uint32(112).bool(message.exclusiveMinimum); + } + if (message.maxLength !== "0") { + writer.uint32(120).uint64(message.maxLength); + } + if (message.minLength !== "0") { + writer.uint32(128).uint64(message.minLength); + } + if (message.pattern !== "") { + writer.uint32(138).string(message.pattern); + } + if (message.maxItems !== "0") { + writer.uint32(160).uint64(message.maxItems); + } + if (message.minItems !== "0") { + writer.uint32(168).uint64(message.minItems); + } + if (message.uniqueItems !== false) { + writer.uint32(176).bool(message.uniqueItems); + } + if (message.maxProperties !== "0") { + writer.uint32(192).uint64(message.maxProperties); + } + if (message.minProperties !== "0") { + writer.uint32(200).uint64(message.minProperties); + } + for (const v of message.required) { + writer.uint32(210).string(v!); + } + for (const v of message.array) { + writer.uint32(274).string(v!); + } + writer.uint32(282).fork(); + for (const v of message.type) { + writer.int32(v); + } + writer.ldelim(); + if (message.format !== "") { + writer.uint32(290).string(message.format); + } + for (const v of message.enum) { + writer.uint32(370).string(v!); + } + if (message.fieldConfiguration !== undefined) { + JSONSchema_FieldConfiguration.encode( + message.fieldConfiguration, + writer.uint32(8010).fork(), + ).ldelim(); + } + Object.entries(message.extensions).forEach(([key, value]) => { + if (value !== undefined) { + JSONSchema_ExtensionsEntry.encode( + { key: key as any, value }, + writer.uint32(386).fork(), + ).ldelim(); + } + }); + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): JSONSchema { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseJSONSchema(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 3: + if (tag !== 26) { + break; + } + + message.ref = reader.string(); + continue; + case 5: + if (tag !== 42) { + break; + } + + message.title = reader.string(); + continue; + case 6: + if (tag !== 50) { + break; + } + + message.description = reader.string(); + continue; + case 7: + if (tag !== 58) { + break; + } + + message.default = reader.string(); + continue; + case 8: + if (tag !== 64) { + break; + } + + message.readOnly = reader.bool(); + continue; + case 9: + if (tag !== 74) { + break; + } + + message.example = reader.string(); + continue; + case 10: + if (tag !== 81) { + break; + } + + message.multipleOf = reader.double(); + continue; + case 11: + if (tag !== 89) { + break; + } + + message.maximum = reader.double(); + continue; + case 12: + if (tag !== 96) { + break; + } + + message.exclusiveMaximum = reader.bool(); + continue; + case 13: + if (tag !== 105) { + break; + } + + message.minimum = reader.double(); + continue; + case 14: + if (tag !== 112) { + break; + } + + message.exclusiveMinimum = reader.bool(); + continue; + case 15: + if (tag !== 120) { + break; + } + + message.maxLength = longToString(reader.uint64() as Long); + continue; + case 16: + if (tag !== 128) { + break; + } + + message.minLength = longToString(reader.uint64() as Long); + continue; + case 17: + if (tag !== 138) { + break; + } + + message.pattern = reader.string(); + continue; + case 20: + if (tag !== 160) { + break; + } + + message.maxItems = longToString(reader.uint64() as Long); + continue; + case 21: + if (tag !== 168) { + break; + } + + message.minItems = longToString(reader.uint64() as Long); + continue; + case 22: + if (tag !== 176) { + break; + } + + message.uniqueItems = reader.bool(); + continue; + case 24: + if (tag !== 192) { + break; + } + + message.maxProperties = longToString(reader.uint64() as Long); + continue; + case 25: + if (tag !== 200) { + break; + } + + message.minProperties = longToString(reader.uint64() as Long); + continue; + case 26: + if (tag !== 210) { + break; + } + + message.required.push(reader.string()); + continue; + case 34: + if (tag !== 274) { + break; + } + + message.array.push(reader.string()); + continue; + case 35: + if (tag === 280) { + message.type.push(reader.int32() as any); + + continue; + } + + if (tag === 282) { + const end2 = reader.uint32() + reader.pos; + while (reader.pos < end2) { + message.type.push(reader.int32() as any); + } + + continue; + } + + break; + case 36: + if (tag !== 290) { + break; + } + + message.format = reader.string(); + continue; + case 46: + if (tag !== 370) { + break; + } + + message.enum.push(reader.string()); + continue; + case 1001: + if (tag !== 8010) { + break; + } + + message.fieldConfiguration = JSONSchema_FieldConfiguration.decode( + reader, + reader.uint32(), + ); + continue; + case 48: + if (tag !== 386) { + break; + } + + const entry48 = JSONSchema_ExtensionsEntry.decode( + reader, + reader.uint32(), + ); + if (entry48.value !== undefined) { + message.extensions[entry48.key] = entry48.value; + } + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): JSONSchema { + return { + ref: isSet(object.ref) ? globalThis.String(object.ref) : "", + title: isSet(object.title) ? globalThis.String(object.title) : "", + description: isSet(object.description) + ? globalThis.String(object.description) + : "", + default: isSet(object.default) ? globalThis.String(object.default) : "", + readOnly: isSet(object.readOnly) + ? globalThis.Boolean(object.readOnly) + : false, + example: isSet(object.example) ? globalThis.String(object.example) : "", + multipleOf: isSet(object.multipleOf) + ? globalThis.Number(object.multipleOf) + : 0, + maximum: isSet(object.maximum) ? globalThis.Number(object.maximum) : 0, + exclusiveMaximum: isSet(object.exclusiveMaximum) + ? globalThis.Boolean(object.exclusiveMaximum) + : false, + minimum: isSet(object.minimum) ? globalThis.Number(object.minimum) : 0, + exclusiveMinimum: isSet(object.exclusiveMinimum) + ? globalThis.Boolean(object.exclusiveMinimum) + : false, + maxLength: isSet(object.maxLength) + ? globalThis.String(object.maxLength) + : "0", + minLength: isSet(object.minLength) + ? globalThis.String(object.minLength) + : "0", + pattern: isSet(object.pattern) ? globalThis.String(object.pattern) : "", + maxItems: isSet(object.maxItems) + ? globalThis.String(object.maxItems) + : "0", + minItems: isSet(object.minItems) + ? globalThis.String(object.minItems) + : "0", + uniqueItems: isSet(object.uniqueItems) + ? globalThis.Boolean(object.uniqueItems) + : false, + maxProperties: isSet(object.maxProperties) + ? globalThis.String(object.maxProperties) + : "0", + minProperties: isSet(object.minProperties) + ? globalThis.String(object.minProperties) + : "0", + required: globalThis.Array.isArray(object?.required) + ? object.required.map((e: any) => globalThis.String(e)) + : [], + array: globalThis.Array.isArray(object?.array) + ? object.array.map((e: any) => globalThis.String(e)) + : [], + type: globalThis.Array.isArray(object?.type) + ? object.type.map((e: any) => + jSONSchema_JSONSchemaSimpleTypesFromJSON(e), + ) + : [], + format: isSet(object.format) ? globalThis.String(object.format) : "", + enum: globalThis.Array.isArray(object?.enum) + ? object.enum.map((e: any) => globalThis.String(e)) + : [], + fieldConfiguration: isSet(object.fieldConfiguration) + ? JSONSchema_FieldConfiguration.fromJSON(object.fieldConfiguration) + : undefined, + extensions: isObject(object.extensions) + ? Object.entries(object.extensions).reduce<{ + [key: string]: any | undefined; + }>((acc, [key, value]) => { + acc[key] = value as any | undefined; + return acc; + }, {}) + : {}, + }; + }, +}; + +function createBaseJSONSchema_FieldConfiguration(): JSONSchema_FieldConfiguration { + return { pathParamName: "" }; +} + +export const JSONSchema_FieldConfiguration = { + encode( + message: JSONSchema_FieldConfiguration, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + if (message.pathParamName !== "") { + writer.uint32(378).string(message.pathParamName); + } + return writer; + }, + + decode( + input: _m0.Reader | Uint8Array, + length?: number, + ): JSONSchema_FieldConfiguration { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseJSONSchema_FieldConfiguration(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 47: + if (tag !== 378) { + break; + } + + message.pathParamName = reader.string(); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): JSONSchema_FieldConfiguration { + return { + pathParamName: isSet(object.pathParamName) + ? globalThis.String(object.pathParamName) + : "", + }; + }, +}; + +function createBaseJSONSchema_ExtensionsEntry(): JSONSchema_ExtensionsEntry { + return { key: "", value: undefined }; +} + +export const JSONSchema_ExtensionsEntry = { + encode( + message: JSONSchema_ExtensionsEntry, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + if (message.key !== "") { + writer.uint32(10).string(message.key); + } + if (message.value !== undefined) { + Value.encode( + Value.wrap(message.value), + writer.uint32(18).fork(), + ).ldelim(); + } + return writer; + }, + + decode( + input: _m0.Reader | Uint8Array, + length?: number, + ): JSONSchema_ExtensionsEntry { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseJSONSchema_ExtensionsEntry(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.key = reader.string(); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.value = Value.unwrap(Value.decode(reader, reader.uint32())); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); } - if (message.discriminator !== "") { - writer.uint32(18).string(message.discriminator); + return message; + }, + + fromJSON(object: any): JSONSchema_ExtensionsEntry { + return { + key: isSet(object.key) ? globalThis.String(object.key) : "", + value: isSet(object?.value) ? object.value : undefined, + }; + }, +}; + +function createBaseTag(): Tag { + return { name: "", description: "", externalDocs: undefined, extensions: {} }; +} + +export const Tag = { + encode(message: Tag, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { + if (message.name !== "") { + writer.uint32(10).string(message.name); } - if (message.readOnly !== false) { - writer.uint32(24).bool(message.readOnly); + if (message.description !== "") { + writer.uint32(18).string(message.description); } if (message.externalDocs !== undefined) { ExternalDocumentation.encode( message.externalDocs, - writer.uint32(42).fork(), + writer.uint32(26).fork(), ).ldelim(); } - if (message.example !== "") { - writer.uint32(50).string(message.example); - } + Object.entries(message.extensions).forEach(([key, value]) => { + if (value !== undefined) { + Tag_ExtensionsEntry.encode( + { key: key as any, value }, + writer.uint32(34).fork(), + ).ldelim(); + } + }); return writer; }, - decode(input: _m0.Reader | Uint8Array, length?: number): Schema { + decode(input: _m0.Reader | Uint8Array, length?: number): Tag { const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); let end = length === undefined ? reader.len : reader.pos + length; - const message = createBaseSchema(); + const message = createBaseTag(); while (reader.pos < end) { const tag = reader.uint32(); switch (tag >>> 3) { @@ -215,24 +2856,17 @@ export const Schema = { break; } - message.jsonSchema = JSONSchema.decode(reader, reader.uint32()); + message.name = reader.string(); continue; case 2: if (tag !== 18) { break; } - message.discriminator = reader.string(); + message.description = reader.string(); continue; case 3: - if (tag !== 24) { - break; - } - - message.readOnly = reader.bool(); - continue; - case 5: - if (tag !== 42) { + if (tag !== 26) { break; } @@ -241,12 +2875,15 @@ export const Schema = { reader.uint32(), ); continue; - case 6: - if (tag !== 50) { + case 4: + if (tag !== 34) { break; } - message.example = reader.string(); + const entry4 = Tag_ExtensionsEntry.decode(reader, reader.uint32()); + if (entry4.value !== undefined) { + message.extensions[entry4.key] = entry4.value; + } continue; } if ((tag & 7) === 4 || tag === 0) { @@ -257,359 +2894,479 @@ export const Schema = { return message; }, - fromJSON(object: any): Schema { + fromJSON(object: any): Tag { return { - jsonSchema: isSet(object.jsonSchema) - ? JSONSchema.fromJSON(object.jsonSchema) - : undefined, - discriminator: isSet(object.discriminator) - ? globalThis.String(object.discriminator) + name: isSet(object.name) ? globalThis.String(object.name) : "", + description: isSet(object.description) + ? globalThis.String(object.description) : "", - readOnly: isSet(object.readOnly) - ? globalThis.Boolean(object.readOnly) - : false, externalDocs: isSet(object.externalDocs) ? ExternalDocumentation.fromJSON(object.externalDocs) : undefined, - example: isSet(object.example) ? globalThis.String(object.example) : "", + extensions: isObject(object.extensions) + ? Object.entries(object.extensions).reduce<{ + [key: string]: any | undefined; + }>((acc, [key, value]) => { + acc[key] = value as any | undefined; + return acc; + }, {}) + : {}, }; }, }; -function createBaseJSONSchema(): JSONSchema { - return { - ref: "", - title: "", - description: "", - default: "", - readOnly: false, - example: "", - multipleOf: 0, - maximum: 0, - exclusiveMaximum: false, - minimum: 0, - exclusiveMinimum: false, - maxLength: "0", - minLength: "0", - pattern: "", - maxItems: "0", - minItems: "0", - uniqueItems: false, - maxProperties: "0", - minProperties: "0", - required: [], - array: [], - type: [], - format: "", - enum: [], - fieldConfiguration: undefined, +function createBaseTag_ExtensionsEntry(): Tag_ExtensionsEntry { + return { key: "", value: undefined }; +} + +export const Tag_ExtensionsEntry = { + encode( + message: Tag_ExtensionsEntry, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + if (message.key !== "") { + writer.uint32(10).string(message.key); + } + if (message.value !== undefined) { + Value.encode( + Value.wrap(message.value), + writer.uint32(18).fork(), + ).ldelim(); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): Tag_ExtensionsEntry { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseTag_ExtensionsEntry(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.key = reader.string(); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.value = Value.unwrap(Value.decode(reader, reader.uint32())); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): Tag_ExtensionsEntry { + return { + key: isSet(object.key) ? globalThis.String(object.key) : "", + value: isSet(object?.value) ? object.value : undefined, + }; + }, +}; + +function createBaseSecurityDefinitions(): SecurityDefinitions { + return { security: {} }; +} + +export const SecurityDefinitions = { + encode( + message: SecurityDefinitions, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + Object.entries(message.security).forEach(([key, value]) => { + SecurityDefinitions_SecurityEntry.encode( + { key: key as any, value }, + writer.uint32(10).fork(), + ).ldelim(); + }); + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): SecurityDefinitions { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseSecurityDefinitions(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + const entry1 = SecurityDefinitions_SecurityEntry.decode( + reader, + reader.uint32(), + ); + if (entry1.value !== undefined) { + message.security[entry1.key] = entry1.value; + } + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): SecurityDefinitions { + return { + security: isObject(object.security) + ? Object.entries(object.security).reduce<{ + [key: string]: SecurityScheme; + }>((acc, [key, value]) => { + acc[key] = SecurityScheme.fromJSON(value); + return acc; + }, {}) + : {}, + }; + }, +}; + +function createBaseSecurityDefinitions_SecurityEntry(): SecurityDefinitions_SecurityEntry { + return { key: "", value: undefined }; +} + +export const SecurityDefinitions_SecurityEntry = { + encode( + message: SecurityDefinitions_SecurityEntry, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + if (message.key !== "") { + writer.uint32(10).string(message.key); + } + if (message.value !== undefined) { + SecurityScheme.encode(message.value, writer.uint32(18).fork()).ldelim(); + } + return writer; + }, + + decode( + input: _m0.Reader | Uint8Array, + length?: number, + ): SecurityDefinitions_SecurityEntry { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseSecurityDefinitions_SecurityEntry(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.key = reader.string(); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.value = SecurityScheme.decode(reader, reader.uint32()); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): SecurityDefinitions_SecurityEntry { + return { + key: isSet(object.key) ? globalThis.String(object.key) : "", + value: isSet(object.value) + ? SecurityScheme.fromJSON(object.value) + : undefined, + }; + }, +}; + +function createBaseSecurityScheme(): SecurityScheme { + return { + type: 0, + description: "", + name: "", + in: 0, + flow: 0, + authorizationUrl: "", + tokenUrl: "", + scopes: undefined, extensions: {}, }; } -export const JSONSchema = { +export const SecurityScheme = { encode( - message: JSONSchema, + message: SecurityScheme, writer: _m0.Writer = _m0.Writer.create(), ): _m0.Writer { - if (message.ref !== "") { - writer.uint32(26).string(message.ref); - } - if (message.title !== "") { - writer.uint32(42).string(message.title); + if (message.type !== 0) { + writer.uint32(8).int32(message.type); } if (message.description !== "") { - writer.uint32(50).string(message.description); - } - if (message.default !== "") { - writer.uint32(58).string(message.default); - } - if (message.readOnly !== false) { - writer.uint32(64).bool(message.readOnly); - } - if (message.example !== "") { - writer.uint32(74).string(message.example); - } - if (message.multipleOf !== 0) { - writer.uint32(81).double(message.multipleOf); - } - if (message.maximum !== 0) { - writer.uint32(89).double(message.maximum); - } - if (message.exclusiveMaximum !== false) { - writer.uint32(96).bool(message.exclusiveMaximum); - } - if (message.minimum !== 0) { - writer.uint32(105).double(message.minimum); - } - if (message.exclusiveMinimum !== false) { - writer.uint32(112).bool(message.exclusiveMinimum); - } - if (message.maxLength !== "0") { - writer.uint32(120).uint64(message.maxLength); - } - if (message.minLength !== "0") { - writer.uint32(128).uint64(message.minLength); - } - if (message.pattern !== "") { - writer.uint32(138).string(message.pattern); - } - if (message.maxItems !== "0") { - writer.uint32(160).uint64(message.maxItems); - } - if (message.minItems !== "0") { - writer.uint32(168).uint64(message.minItems); - } - if (message.uniqueItems !== false) { - writer.uint32(176).bool(message.uniqueItems); - } - if (message.maxProperties !== "0") { - writer.uint32(192).uint64(message.maxProperties); - } - if (message.minProperties !== "0") { - writer.uint32(200).uint64(message.minProperties); + writer.uint32(18).string(message.description); } - for (const v of message.required) { - writer.uint32(210).string(v!); + if (message.name !== "") { + writer.uint32(26).string(message.name); } - for (const v of message.array) { - writer.uint32(274).string(v!); + if (message.in !== 0) { + writer.uint32(32).int32(message.in); } - writer.uint32(282).fork(); - for (const v of message.type) { - writer.int32(v); + if (message.flow !== 0) { + writer.uint32(40).int32(message.flow); } - writer.ldelim(); - if (message.format !== "") { - writer.uint32(290).string(message.format); + if (message.authorizationUrl !== "") { + writer.uint32(50).string(message.authorizationUrl); } - for (const v of message.enum) { - writer.uint32(370).string(v!); + if (message.tokenUrl !== "") { + writer.uint32(58).string(message.tokenUrl); } - if (message.fieldConfiguration !== undefined) { - JSONSchema_FieldConfiguration.encode( - message.fieldConfiguration, - writer.uint32(8010).fork(), - ).ldelim(); + if (message.scopes !== undefined) { + Scopes.encode(message.scopes, writer.uint32(66).fork()).ldelim(); } Object.entries(message.extensions).forEach(([key, value]) => { if (value !== undefined) { - JSONSchema_ExtensionsEntry.encode( + SecurityScheme_ExtensionsEntry.encode( { key: key as any, value }, - writer.uint32(386).fork(), + writer.uint32(74).fork(), ).ldelim(); } }); return writer; }, - decode(input: _m0.Reader | Uint8Array, length?: number): JSONSchema { + decode(input: _m0.Reader | Uint8Array, length?: number): SecurityScheme { const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); let end = length === undefined ? reader.len : reader.pos + length; - const message = createBaseJSONSchema(); + const message = createBaseSecurityScheme(); while (reader.pos < end) { const tag = reader.uint32(); switch (tag >>> 3) { - case 3: - if (tag !== 26) { - break; - } - - message.ref = reader.string(); - continue; - case 5: - if (tag !== 42) { + case 1: + if (tag !== 8) { break; } - message.title = reader.string(); + message.type = reader.int32() as any; continue; - case 6: - if (tag !== 50) { + case 2: + if (tag !== 18) { break; } message.description = reader.string(); continue; - case 7: - if (tag !== 58) { - break; - } - - message.default = reader.string(); - continue; - case 8: - if (tag !== 64) { - break; - } - - message.readOnly = reader.bool(); - continue; - case 9: - if (tag !== 74) { - break; - } - - message.example = reader.string(); - continue; - case 10: - if (tag !== 81) { - break; - } - - message.multipleOf = reader.double(); - continue; - case 11: - if (tag !== 89) { - break; - } - - message.maximum = reader.double(); - continue; - case 12: - if (tag !== 96) { - break; - } - - message.exclusiveMaximum = reader.bool(); - continue; - case 13: - if (tag !== 105) { - break; - } - - message.minimum = reader.double(); - continue; - case 14: - if (tag !== 112) { - break; - } - - message.exclusiveMinimum = reader.bool(); - continue; - case 15: - if (tag !== 120) { - break; - } - - message.maxLength = longToString(reader.uint64() as Long); - continue; - case 16: - if (tag !== 128) { - break; - } - - message.minLength = longToString(reader.uint64() as Long); - continue; - case 17: - if (tag !== 138) { + case 3: + if (tag !== 26) { break; } - message.pattern = reader.string(); + message.name = reader.string(); continue; - case 20: - if (tag !== 160) { + case 4: + if (tag !== 32) { break; } - message.maxItems = longToString(reader.uint64() as Long); + message.in = reader.int32() as any; continue; - case 21: - if (tag !== 168) { + case 5: + if (tag !== 40) { break; } - message.minItems = longToString(reader.uint64() as Long); + message.flow = reader.int32() as any; continue; - case 22: - if (tag !== 176) { + case 6: + if (tag !== 50) { break; } - message.uniqueItems = reader.bool(); + message.authorizationUrl = reader.string(); continue; - case 24: - if (tag !== 192) { + case 7: + if (tag !== 58) { break; } - message.maxProperties = longToString(reader.uint64() as Long); + message.tokenUrl = reader.string(); continue; - case 25: - if (tag !== 200) { + case 8: + if (tag !== 66) { break; } - message.minProperties = longToString(reader.uint64() as Long); + message.scopes = Scopes.decode(reader, reader.uint32()); continue; - case 26: - if (tag !== 210) { + case 9: + if (tag !== 74) { break; } - message.required.push(reader.string()); - continue; - case 34: - if (tag !== 274) { - break; + const entry9 = SecurityScheme_ExtensionsEntry.decode( + reader, + reader.uint32(), + ); + if (entry9.value !== undefined) { + message.extensions[entry9.key] = entry9.value; } - - message.array.push(reader.string()); continue; - case 35: - if (tag === 280) { - message.type.push(reader.int32() as any); + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, - continue; - } + fromJSON(object: any): SecurityScheme { + return { + type: isSet(object.type) ? securityScheme_TypeFromJSON(object.type) : 0, + description: isSet(object.description) + ? globalThis.String(object.description) + : "", + name: isSet(object.name) ? globalThis.String(object.name) : "", + in: isSet(object.in) ? securityScheme_InFromJSON(object.in) : 0, + flow: isSet(object.flow) ? securityScheme_FlowFromJSON(object.flow) : 0, + authorizationUrl: isSet(object.authorizationUrl) + ? globalThis.String(object.authorizationUrl) + : "", + tokenUrl: isSet(object.tokenUrl) + ? globalThis.String(object.tokenUrl) + : "", + scopes: isSet(object.scopes) ? Scopes.fromJSON(object.scopes) : undefined, + extensions: isObject(object.extensions) + ? Object.entries(object.extensions).reduce<{ + [key: string]: any | undefined; + }>((acc, [key, value]) => { + acc[key] = value as any | undefined; + return acc; + }, {}) + : {}, + }; + }, +}; - if (tag === 282) { - const end2 = reader.uint32() + reader.pos; - while (reader.pos < end2) { - message.type.push(reader.int32() as any); - } +function createBaseSecurityScheme_ExtensionsEntry(): SecurityScheme_ExtensionsEntry { + return { key: "", value: undefined }; +} - continue; - } +export const SecurityScheme_ExtensionsEntry = { + encode( + message: SecurityScheme_ExtensionsEntry, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + if (message.key !== "") { + writer.uint32(10).string(message.key); + } + if (message.value !== undefined) { + Value.encode( + Value.wrap(message.value), + writer.uint32(18).fork(), + ).ldelim(); + } + return writer; + }, - break; - case 36: - if (tag !== 290) { + decode( + input: _m0.Reader | Uint8Array, + length?: number, + ): SecurityScheme_ExtensionsEntry { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseSecurityScheme_ExtensionsEntry(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { break; } - message.format = reader.string(); + message.key = reader.string(); continue; - case 46: - if (tag !== 370) { + case 2: + if (tag !== 18) { break; } - message.enum.push(reader.string()); + message.value = Value.unwrap(Value.decode(reader, reader.uint32())); continue; - case 1001: - if (tag !== 8010) { - break; - } + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, - message.fieldConfiguration = JSONSchema_FieldConfiguration.decode( - reader, - reader.uint32(), - ); - continue; - case 48: - if (tag !== 386) { + fromJSON(object: any): SecurityScheme_ExtensionsEntry { + return { + key: isSet(object.key) ? globalThis.String(object.key) : "", + value: isSet(object?.value) ? object.value : undefined, + }; + }, +}; + +function createBaseSecurityRequirement(): SecurityRequirement { + return { securityRequirement: {} }; +} + +export const SecurityRequirement = { + encode( + message: SecurityRequirement, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + Object.entries(message.securityRequirement).forEach(([key, value]) => { + SecurityRequirement_SecurityRequirementEntry.encode( + { key: key as any, value }, + writer.uint32(10).fork(), + ).ldelim(); + }); + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): SecurityRequirement { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseSecurityRequirement(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { break; } - const entry48 = JSONSchema_ExtensionsEntry.decode( + const entry1 = SecurityRequirement_SecurityRequirementEntry.decode( reader, reader.uint32(), ); - if (entry48.value !== undefined) { - message.extensions[entry48.key] = entry48.value; + if (entry1.value !== undefined) { + message.securityRequirement[entry1.key] = entry1.value; } continue; } @@ -621,74 +3378,14 @@ export const JSONSchema = { return message; }, - fromJSON(object: any): JSONSchema { + fromJSON(object: any): SecurityRequirement { return { - ref: isSet(object.ref) ? globalThis.String(object.ref) : "", - title: isSet(object.title) ? globalThis.String(object.title) : "", - description: isSet(object.description) - ? globalThis.String(object.description) - : "", - default: isSet(object.default) ? globalThis.String(object.default) : "", - readOnly: isSet(object.readOnly) - ? globalThis.Boolean(object.readOnly) - : false, - example: isSet(object.example) ? globalThis.String(object.example) : "", - multipleOf: isSet(object.multipleOf) - ? globalThis.Number(object.multipleOf) - : 0, - maximum: isSet(object.maximum) ? globalThis.Number(object.maximum) : 0, - exclusiveMaximum: isSet(object.exclusiveMaximum) - ? globalThis.Boolean(object.exclusiveMaximum) - : false, - minimum: isSet(object.minimum) ? globalThis.Number(object.minimum) : 0, - exclusiveMinimum: isSet(object.exclusiveMinimum) - ? globalThis.Boolean(object.exclusiveMinimum) - : false, - maxLength: isSet(object.maxLength) - ? globalThis.String(object.maxLength) - : "0", - minLength: isSet(object.minLength) - ? globalThis.String(object.minLength) - : "0", - pattern: isSet(object.pattern) ? globalThis.String(object.pattern) : "", - maxItems: isSet(object.maxItems) - ? globalThis.String(object.maxItems) - : "0", - minItems: isSet(object.minItems) - ? globalThis.String(object.minItems) - : "0", - uniqueItems: isSet(object.uniqueItems) - ? globalThis.Boolean(object.uniqueItems) - : false, - maxProperties: isSet(object.maxProperties) - ? globalThis.String(object.maxProperties) - : "0", - minProperties: isSet(object.minProperties) - ? globalThis.String(object.minProperties) - : "0", - required: globalThis.Array.isArray(object?.required) - ? object.required.map((e: any) => globalThis.String(e)) - : [], - array: globalThis.Array.isArray(object?.array) - ? object.array.map((e: any) => globalThis.String(e)) - : [], - type: globalThis.Array.isArray(object?.type) - ? object.type.map((e: any) => - jSONSchema_JSONSchemaSimpleTypesFromJSON(e), - ) - : [], - format: isSet(object.format) ? globalThis.String(object.format) : "", - enum: globalThis.Array.isArray(object?.enum) - ? object.enum.map((e: any) => globalThis.String(e)) - : [], - fieldConfiguration: isSet(object.fieldConfiguration) - ? JSONSchema_FieldConfiguration.fromJSON(object.fieldConfiguration) - : undefined, - extensions: isObject(object.extensions) - ? Object.entries(object.extensions).reduce<{ - [key: string]: any | undefined; + securityRequirement: isObject(object.securityRequirement) + ? Object.entries(object.securityRequirement).reduce<{ + [key: string]: SecurityRequirement_SecurityRequirementValue; }>((acc, [key, value]) => { - acc[key] = value as any | undefined; + acc[key] = + SecurityRequirement_SecurityRequirementValue.fromJSON(value); return acc; }, {}) : {}, @@ -696,17 +3393,17 @@ export const JSONSchema = { }, }; -function createBaseJSONSchema_FieldConfiguration(): JSONSchema_FieldConfiguration { - return { pathParamName: "" }; +function createBaseSecurityRequirement_SecurityRequirementValue(): SecurityRequirement_SecurityRequirementValue { + return { scope: [] }; } -export const JSONSchema_FieldConfiguration = { +export const SecurityRequirement_SecurityRequirementValue = { encode( - message: JSONSchema_FieldConfiguration, + message: SecurityRequirement_SecurityRequirementValue, writer: _m0.Writer = _m0.Writer.create(), ): _m0.Writer { - if (message.pathParamName !== "") { - writer.uint32(378).string(message.pathParamName); + for (const v of message.scope) { + writer.uint32(10).string(v!); } return writer; }, @@ -714,20 +3411,20 @@ export const JSONSchema_FieldConfiguration = { decode( input: _m0.Reader | Uint8Array, length?: number, - ): JSONSchema_FieldConfiguration { + ): SecurityRequirement_SecurityRequirementValue { const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); let end = length === undefined ? reader.len : reader.pos + length; - const message = createBaseJSONSchema_FieldConfiguration(); + const message = createBaseSecurityRequirement_SecurityRequirementValue(); while (reader.pos < end) { const tag = reader.uint32(); switch (tag >>> 3) { - case 47: - if (tag !== 378) { + case 1: + if (tag !== 10) { break; } - message.pathParamName = reader.string(); + message.scope.push(reader.string()); continue; } if ((tag & 7) === 4 || tag === 0) { @@ -738,30 +3435,30 @@ export const JSONSchema_FieldConfiguration = { return message; }, - fromJSON(object: any): JSONSchema_FieldConfiguration { + fromJSON(object: any): SecurityRequirement_SecurityRequirementValue { return { - pathParamName: isSet(object.pathParamName) - ? globalThis.String(object.pathParamName) - : "", + scope: globalThis.Array.isArray(object?.scope) + ? object.scope.map((e: any) => globalThis.String(e)) + : [], }; }, }; -function createBaseJSONSchema_ExtensionsEntry(): JSONSchema_ExtensionsEntry { +function createBaseSecurityRequirement_SecurityRequirementEntry(): SecurityRequirement_SecurityRequirementEntry { return { key: "", value: undefined }; } -export const JSONSchema_ExtensionsEntry = { +export const SecurityRequirement_SecurityRequirementEntry = { encode( - message: JSONSchema_ExtensionsEntry, + message: SecurityRequirement_SecurityRequirementEntry, writer: _m0.Writer = _m0.Writer.create(), ): _m0.Writer { if (message.key !== "") { writer.uint32(10).string(message.key); } if (message.value !== undefined) { - Value.encode( - Value.wrap(message.value), + SecurityRequirement_SecurityRequirementValue.encode( + message.value, writer.uint32(18).fork(), ).ldelim(); } @@ -771,11 +3468,11 @@ export const JSONSchema_ExtensionsEntry = { decode( input: _m0.Reader | Uint8Array, length?: number, - ): JSONSchema_ExtensionsEntry { + ): SecurityRequirement_SecurityRequirementEntry { const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); let end = length === undefined ? reader.len : reader.pos + length; - const message = createBaseJSONSchema_ExtensionsEntry(); + const message = createBaseSecurityRequirement_SecurityRequirementEntry(); while (reader.pos < end) { const tag = reader.uint32(); switch (tag >>> 3) { @@ -791,7 +3488,10 @@ export const JSONSchema_ExtensionsEntry = { break; } - message.value = Value.unwrap(Value.decode(reader, reader.uint32())); + message.value = SecurityRequirement_SecurityRequirementValue.decode( + reader, + reader.uint32(), + ); continue; } if ((tag & 7) === 4 || tag === 0) { @@ -802,10 +3502,129 @@ export const JSONSchema_ExtensionsEntry = { return message; }, - fromJSON(object: any): JSONSchema_ExtensionsEntry { + fromJSON(object: any): SecurityRequirement_SecurityRequirementEntry { return { key: isSet(object.key) ? globalThis.String(object.key) : "", - value: isSet(object?.value) ? object.value : undefined, + value: isSet(object.value) + ? SecurityRequirement_SecurityRequirementValue.fromJSON(object.value) + : undefined, + }; + }, +}; + +function createBaseScopes(): Scopes { + return { scope: {} }; +} + +export const Scopes = { + encode( + message: Scopes, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + Object.entries(message.scope).forEach(([key, value]) => { + Scopes_ScopeEntry.encode( + { key: key as any, value }, + writer.uint32(10).fork(), + ).ldelim(); + }); + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): Scopes { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseScopes(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + const entry1 = Scopes_ScopeEntry.decode(reader, reader.uint32()); + if (entry1.value !== undefined) { + message.scope[entry1.key] = entry1.value; + } + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): Scopes { + return { + scope: isObject(object.scope) + ? Object.entries(object.scope).reduce<{ [key: string]: string }>( + (acc, [key, value]) => { + acc[key] = String(value); + return acc; + }, + {}, + ) + : {}, + }; + }, +}; + +function createBaseScopes_ScopeEntry(): Scopes_ScopeEntry { + return { key: "", value: "" }; +} + +export const Scopes_ScopeEntry = { + encode( + message: Scopes_ScopeEntry, + writer: _m0.Writer = _m0.Writer.create(), + ): _m0.Writer { + if (message.key !== "") { + writer.uint32(10).string(message.key); + } + if (message.value !== "") { + writer.uint32(18).string(message.value); + } + return writer; + }, + + decode(input: _m0.Reader | Uint8Array, length?: number): Scopes_ScopeEntry { + const reader = + input instanceof _m0.Reader ? input : _m0.Reader.create(input); + let end = length === undefined ? reader.len : reader.pos + length; + const message = createBaseScopes_ScopeEntry(); + while (reader.pos < end) { + const tag = reader.uint32(); + switch (tag >>> 3) { + case 1: + if (tag !== 10) { + break; + } + + message.key = reader.string(); + continue; + case 2: + if (tag !== 18) { + break; + } + + message.value = reader.string(); + continue; + } + if ((tag & 7) === 4 || tag === 0) { + break; + } + reader.skipType(tag & 7); + } + return message; + }, + + fromJSON(object: any): Scopes_ScopeEntry { + return { + key: isSet(object.key) ? globalThis.String(object.key) : "", + value: isSet(object.value) ? globalThis.String(object.value) : "", }; }, };