From e0c069db55807db370a0638b0cf3dc3aa8d374c7 Mon Sep 17 00:00:00 2001 From: Rob Herley Date: Mon, 27 Jan 2025 17:52:55 +0000 Subject: [PATCH] remove runtime dependency on twirp-ts --- packages/artifact/package-lock.json | 186 ---- packages/artifact/package.json | 1 - packages/artifact/src/generated/index.ts | 2 +- .../results/api/v1/artifact.twirp-client.ts | 232 +++++ .../results/api/v1/artifact.twirp.ts | 976 ------------------ .../cache/__tests__/restoreCacheV2.test.ts | 2 +- packages/cache/__tests__/saveCacheV2.test.ts | 2 +- packages/cache/package-lock.json | 348 +------ packages/cache/package.json | 5 +- .../results/api/v1/cache.twirp-client.ts | 157 +++ .../generated/results/api/v1/cache.twirp.ts | 642 ------------ .../src/internal/shared/cacheTwirpClient.ts | 2 +- 12 files changed, 396 insertions(+), 2159 deletions(-) create mode 100644 packages/artifact/src/generated/results/api/v1/artifact.twirp-client.ts delete mode 100644 packages/artifact/src/generated/results/api/v1/artifact.twirp.ts create mode 100644 packages/cache/src/generated/results/api/v1/cache.twirp-client.ts delete mode 100644 packages/cache/src/generated/results/api/v1/cache.twirp.ts diff --git a/packages/artifact/package-lock.json b/packages/artifact/package-lock.json index 768767fe..7511a18d 100644 --- a/packages/artifact/package-lock.json +++ b/packages/artifact/package-lock.json @@ -20,7 +20,6 @@ "@protobuf-ts/plugin": "^2.2.3-alpha.1", "archiver": "^7.0.1", "jwt-decode": "^3.1.2", - "twirp-ts": "^2.5.0", "unzip-stream": "^0.3.1" }, "devDependencies": { @@ -687,15 +686,6 @@ "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==" }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, "node_modules/buffer": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", @@ -735,15 +725,6 @@ "node": ">=0.2.0" } }, - "node_modules/camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "dependencies": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, "node_modules/chainsaw": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", @@ -782,14 +763,6 @@ "node": ">= 0.8" } }, - "node_modules/commander": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", - "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", - "engines": { - "node": ">= 6" - } - }, "node_modules/compress-commons": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-6.0.2.tgz", @@ -805,11 +778,6 @@ "node": ">= 14" } }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, "node_modules/core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", @@ -865,18 +833,6 @@ "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" }, - "node_modules/dot-object": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/dot-object/-/dot-object-2.1.4.tgz", - "integrity": "sha512-7FXnyyCLFawNYJ+NhkqyP9Wd2yzuo+7n9pGiYpkmXCTYa8Ci2U0eUNDVg5OuO5Pm6aFXI2SWN8/N/w7SJWu1WA==", - "dependencies": { - "commander": "^4.0.0", - "glob": "^7.1.5" - }, - "bin": { - "dot-object": "bin/dot-object" - } - }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", @@ -936,30 +892,6 @@ "node": ">= 6" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", @@ -1005,15 +937,6 @@ } ] }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", @@ -1127,14 +1050,6 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "dependencies": { - "tslib": "^2.0.3" - } - }, "node_modules/lru-cache": { "version": "10.2.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", @@ -1180,17 +1095,6 @@ "node": ">= 0.6" } }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/minimist": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", @@ -1224,15 +1128,6 @@ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, - "node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, "node_modules/node-fetch": { "version": "2.6.12", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.12.tgz", @@ -1268,23 +1163,6 @@ "wrappy": "1" } }, - "node_modules/pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -1308,25 +1186,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/path-to-regexp": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", - "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==" - }, - "node_modules/prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, "node_modules/process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", @@ -1593,15 +1452,6 @@ "node": "*" } }, - "node_modules/ts-poet": { - "version": "4.15.0", - "resolved": "https://registry.npmjs.org/ts-poet/-/ts-poet-4.15.0.tgz", - "integrity": "sha512-sLLR8yQBvHzi9d4R1F4pd+AzQxBfzOSSjfxiJxQhkUoH5bL7RsAC6wgvtVUQdGqiCsyS9rT6/8X2FI7ipdir5g==", - "dependencies": { - "lodash": "^4.17.15", - "prettier": "^2.5.1" - } - }, "node_modules/tslib": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz", @@ -1615,34 +1465,6 @@ "node": ">=0.6.11 <=0.7.0 || >=0.7.3" } }, - "node_modules/twirp-ts": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/twirp-ts/-/twirp-ts-2.5.0.tgz", - "integrity": "sha512-JTKIK5Pf/+3qCrmYDFlqcPPUx+ohEWKBaZy8GL8TmvV2VvC0SXVyNYILO39+GCRbqnuP6hBIF+BVr8ZxRz+6fw==", - "dependencies": { - "@protobuf-ts/plugin-framework": "^2.0.7", - "camel-case": "^4.1.2", - "dot-object": "^2.1.4", - "path-to-regexp": "^6.2.0", - "ts-poet": "^4.5.0", - "yaml": "^1.10.2" - }, - "bin": { - "protoc-gen-twirp_ts": "protoc-gen-twirp_ts" - }, - "peerDependencies": { - "@protobuf-ts/plugin": "^2.5.0", - "ts-proto": "^1.81.3" - }, - "peerDependenciesMeta": { - "@protobuf-ts/plugin": { - "optional": true - }, - "ts-proto": { - "optional": true - } - } - }, "node_modules/typedoc": { "version": "0.25.4", "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.25.4.tgz", @@ -1908,14 +1730,6 @@ "node": ">=4.0" } }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "engines": { - "node": ">= 6" - } - }, "node_modules/zip-stream": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-6.0.1.tgz", diff --git a/packages/artifact/package.json b/packages/artifact/package.json index 2200a758..b3b48087 100644 --- a/packages/artifact/package.json +++ b/packages/artifact/package.json @@ -51,7 +51,6 @@ "@protobuf-ts/plugin": "^2.2.3-alpha.1", "archiver": "^7.0.1", "jwt-decode": "^3.1.2", - "twirp-ts": "^2.5.0", "unzip-stream": "^0.3.1" }, "devDependencies": { diff --git a/packages/artifact/src/generated/index.ts b/packages/artifact/src/generated/index.ts index 01bdb99b..23e7a0dc 100644 --- a/packages/artifact/src/generated/index.ts +++ b/packages/artifact/src/generated/index.ts @@ -1,4 +1,4 @@ export * from './google/protobuf/timestamp' export * from './google/protobuf/wrappers' export * from './results/api/v1/artifact' -export * from './results/api/v1/artifact.twirp' +export * from './results/api/v1/artifact.twirp-client' diff --git a/packages/artifact/src/generated/results/api/v1/artifact.twirp-client.ts b/packages/artifact/src/generated/results/api/v1/artifact.twirp-client.ts new file mode 100644 index 00000000..eeca4f58 --- /dev/null +++ b/packages/artifact/src/generated/results/api/v1/artifact.twirp-client.ts @@ -0,0 +1,232 @@ +import { + CreateArtifactRequest, + CreateArtifactResponse, + FinalizeArtifactRequest, + FinalizeArtifactResponse, + ListArtifactsRequest, + ListArtifactsResponse, + GetSignedArtifactURLRequest, + GetSignedArtifactURLResponse, + DeleteArtifactRequest, + DeleteArtifactResponse, +} from "./artifact"; + +//==================================// +// Client Code // +//==================================// + +interface Rpc { + request( + service: string, + method: string, + contentType: "application/json" | "application/protobuf", + data: object | Uint8Array + ): Promise; +} + +export interface ArtifactServiceClient { + CreateArtifact( + request: CreateArtifactRequest + ): Promise; + FinalizeArtifact( + request: FinalizeArtifactRequest + ): Promise; + ListArtifacts(request: ListArtifactsRequest): Promise; + GetSignedArtifactURL( + request: GetSignedArtifactURLRequest + ): Promise; + DeleteArtifact( + request: DeleteArtifactRequest + ): Promise; +} + +export class ArtifactServiceClientJSON implements ArtifactServiceClient { + private readonly rpc: Rpc; + constructor(rpc: Rpc) { + this.rpc = rpc; + this.CreateArtifact.bind(this); + this.FinalizeArtifact.bind(this); + this.ListArtifacts.bind(this); + this.GetSignedArtifactURL.bind(this); + this.DeleteArtifact.bind(this); + } + CreateArtifact( + request: CreateArtifactRequest + ): Promise { + const data = CreateArtifactRequest.toJson(request, { + useProtoFieldName: true, + emitDefaultValues: false, + }); + const promise = this.rpc.request( + "github.actions.results.api.v1.ArtifactService", + "CreateArtifact", + "application/json", + data as object + ); + return promise.then((data) => + CreateArtifactResponse.fromJson(data as any, { + ignoreUnknownFields: true, + }) + ); + } + + FinalizeArtifact( + request: FinalizeArtifactRequest + ): Promise { + const data = FinalizeArtifactRequest.toJson(request, { + useProtoFieldName: true, + emitDefaultValues: false, + }); + const promise = this.rpc.request( + "github.actions.results.api.v1.ArtifactService", + "FinalizeArtifact", + "application/json", + data as object + ); + return promise.then((data) => + FinalizeArtifactResponse.fromJson(data as any, { + ignoreUnknownFields: true, + }) + ); + } + + ListArtifacts(request: ListArtifactsRequest): Promise { + const data = ListArtifactsRequest.toJson(request, { + useProtoFieldName: true, + emitDefaultValues: false, + }); + const promise = this.rpc.request( + "github.actions.results.api.v1.ArtifactService", + "ListArtifacts", + "application/json", + data as object + ); + return promise.then((data) => + ListArtifactsResponse.fromJson(data as any, { ignoreUnknownFields: true }) + ); + } + + GetSignedArtifactURL( + request: GetSignedArtifactURLRequest + ): Promise { + const data = GetSignedArtifactURLRequest.toJson(request, { + useProtoFieldName: true, + emitDefaultValues: false, + }); + const promise = this.rpc.request( + "github.actions.results.api.v1.ArtifactService", + "GetSignedArtifactURL", + "application/json", + data as object + ); + return promise.then((data) => + GetSignedArtifactURLResponse.fromJson(data as any, { + ignoreUnknownFields: true, + }) + ); + } + + DeleteArtifact( + request: DeleteArtifactRequest + ): Promise { + const data = DeleteArtifactRequest.toJson(request, { + useProtoFieldName: true, + emitDefaultValues: false, + }); + const promise = this.rpc.request( + "github.actions.results.api.v1.ArtifactService", + "DeleteArtifact", + "application/json", + data as object + ); + return promise.then((data) => + DeleteArtifactResponse.fromJson(data as any, { + ignoreUnknownFields: true, + }) + ); + } +} + +export class ArtifactServiceClientProtobuf implements ArtifactServiceClient { + private readonly rpc: Rpc; + constructor(rpc: Rpc) { + this.rpc = rpc; + this.CreateArtifact.bind(this); + this.FinalizeArtifact.bind(this); + this.ListArtifacts.bind(this); + this.GetSignedArtifactURL.bind(this); + this.DeleteArtifact.bind(this); + } + CreateArtifact( + request: CreateArtifactRequest + ): Promise { + const data = CreateArtifactRequest.toBinary(request); + const promise = this.rpc.request( + "github.actions.results.api.v1.ArtifactService", + "CreateArtifact", + "application/protobuf", + data + ); + return promise.then((data) => + CreateArtifactResponse.fromBinary(data as Uint8Array) + ); + } + + FinalizeArtifact( + request: FinalizeArtifactRequest + ): Promise { + const data = FinalizeArtifactRequest.toBinary(request); + const promise = this.rpc.request( + "github.actions.results.api.v1.ArtifactService", + "FinalizeArtifact", + "application/protobuf", + data + ); + return promise.then((data) => + FinalizeArtifactResponse.fromBinary(data as Uint8Array) + ); + } + + ListArtifacts(request: ListArtifactsRequest): Promise { + const data = ListArtifactsRequest.toBinary(request); + const promise = this.rpc.request( + "github.actions.results.api.v1.ArtifactService", + "ListArtifacts", + "application/protobuf", + data + ); + return promise.then((data) => + ListArtifactsResponse.fromBinary(data as Uint8Array) + ); + } + + GetSignedArtifactURL( + request: GetSignedArtifactURLRequest + ): Promise { + const data = GetSignedArtifactURLRequest.toBinary(request); + const promise = this.rpc.request( + "github.actions.results.api.v1.ArtifactService", + "GetSignedArtifactURL", + "application/protobuf", + data + ); + return promise.then((data) => + GetSignedArtifactURLResponse.fromBinary(data as Uint8Array) + ); + } + + DeleteArtifact( + request: DeleteArtifactRequest + ): Promise { + const data = DeleteArtifactRequest.toBinary(request); + const promise = this.rpc.request( + "github.actions.results.api.v1.ArtifactService", + "DeleteArtifact", + "application/protobuf", + data + ); + return promise.then((data) => + DeleteArtifactResponse.fromBinary(data as Uint8Array) + ); + } +} diff --git a/packages/artifact/src/generated/results/api/v1/artifact.twirp.ts b/packages/artifact/src/generated/results/api/v1/artifact.twirp.ts deleted file mode 100644 index bc092117..00000000 --- a/packages/artifact/src/generated/results/api/v1/artifact.twirp.ts +++ /dev/null @@ -1,976 +0,0 @@ -import { - TwirpContext, - TwirpServer, - RouterEvents, - TwirpError, - TwirpErrorCode, - Interceptor, - TwirpContentType, - chainInterceptors, -} from "twirp-ts"; -import { - CreateArtifactRequest, - CreateArtifactResponse, - FinalizeArtifactRequest, - FinalizeArtifactResponse, - ListArtifactsRequest, - ListArtifactsResponse, - GetSignedArtifactURLRequest, - GetSignedArtifactURLResponse, - DeleteArtifactRequest, - DeleteArtifactResponse, -} from "./artifact"; - -//==================================// -// Client Code // -//==================================// - -interface Rpc { - request( - service: string, - method: string, - contentType: "application/json" | "application/protobuf", - data: object | Uint8Array - ): Promise; -} - -export interface ArtifactServiceClient { - CreateArtifact( - request: CreateArtifactRequest - ): Promise; - FinalizeArtifact( - request: FinalizeArtifactRequest - ): Promise; - ListArtifacts(request: ListArtifactsRequest): Promise; - GetSignedArtifactURL( - request: GetSignedArtifactURLRequest - ): Promise; - DeleteArtifact( - request: DeleteArtifactRequest - ): Promise; -} - -export class ArtifactServiceClientJSON implements ArtifactServiceClient { - private readonly rpc: Rpc; - constructor(rpc: Rpc) { - this.rpc = rpc; - this.CreateArtifact.bind(this); - this.FinalizeArtifact.bind(this); - this.ListArtifacts.bind(this); - this.GetSignedArtifactURL.bind(this); - this.DeleteArtifact.bind(this); - } - CreateArtifact( - request: CreateArtifactRequest - ): Promise { - const data = CreateArtifactRequest.toJson(request, { - useProtoFieldName: true, - emitDefaultValues: false, - }); - const promise = this.rpc.request( - "github.actions.results.api.v1.ArtifactService", - "CreateArtifact", - "application/json", - data as object - ); - return promise.then((data) => - CreateArtifactResponse.fromJson(data as any, { - ignoreUnknownFields: true, - }) - ); - } - - FinalizeArtifact( - request: FinalizeArtifactRequest - ): Promise { - const data = FinalizeArtifactRequest.toJson(request, { - useProtoFieldName: true, - emitDefaultValues: false, - }); - const promise = this.rpc.request( - "github.actions.results.api.v1.ArtifactService", - "FinalizeArtifact", - "application/json", - data as object - ); - return promise.then((data) => - FinalizeArtifactResponse.fromJson(data as any, { - ignoreUnknownFields: true, - }) - ); - } - - ListArtifacts(request: ListArtifactsRequest): Promise { - const data = ListArtifactsRequest.toJson(request, { - useProtoFieldName: true, - emitDefaultValues: false, - }); - const promise = this.rpc.request( - "github.actions.results.api.v1.ArtifactService", - "ListArtifacts", - "application/json", - data as object - ); - return promise.then((data) => - ListArtifactsResponse.fromJson(data as any, { ignoreUnknownFields: true }) - ); - } - - GetSignedArtifactURL( - request: GetSignedArtifactURLRequest - ): Promise { - const data = GetSignedArtifactURLRequest.toJson(request, { - useProtoFieldName: true, - emitDefaultValues: false, - }); - const promise = this.rpc.request( - "github.actions.results.api.v1.ArtifactService", - "GetSignedArtifactURL", - "application/json", - data as object - ); - return promise.then((data) => - GetSignedArtifactURLResponse.fromJson(data as any, { - ignoreUnknownFields: true, - }) - ); - } - - DeleteArtifact( - request: DeleteArtifactRequest - ): Promise { - const data = DeleteArtifactRequest.toJson(request, { - useProtoFieldName: true, - emitDefaultValues: false, - }); - const promise = this.rpc.request( - "github.actions.results.api.v1.ArtifactService", - "DeleteArtifact", - "application/json", - data as object - ); - return promise.then((data) => - DeleteArtifactResponse.fromJson(data as any, { - ignoreUnknownFields: true, - }) - ); - } -} - -export class ArtifactServiceClientProtobuf implements ArtifactServiceClient { - private readonly rpc: Rpc; - constructor(rpc: Rpc) { - this.rpc = rpc; - this.CreateArtifact.bind(this); - this.FinalizeArtifact.bind(this); - this.ListArtifacts.bind(this); - this.GetSignedArtifactURL.bind(this); - this.DeleteArtifact.bind(this); - } - CreateArtifact( - request: CreateArtifactRequest - ): Promise { - const data = CreateArtifactRequest.toBinary(request); - const promise = this.rpc.request( - "github.actions.results.api.v1.ArtifactService", - "CreateArtifact", - "application/protobuf", - data - ); - return promise.then((data) => - CreateArtifactResponse.fromBinary(data as Uint8Array) - ); - } - - FinalizeArtifact( - request: FinalizeArtifactRequest - ): Promise { - const data = FinalizeArtifactRequest.toBinary(request); - const promise = this.rpc.request( - "github.actions.results.api.v1.ArtifactService", - "FinalizeArtifact", - "application/protobuf", - data - ); - return promise.then((data) => - FinalizeArtifactResponse.fromBinary(data as Uint8Array) - ); - } - - ListArtifacts(request: ListArtifactsRequest): Promise { - const data = ListArtifactsRequest.toBinary(request); - const promise = this.rpc.request( - "github.actions.results.api.v1.ArtifactService", - "ListArtifacts", - "application/protobuf", - data - ); - return promise.then((data) => - ListArtifactsResponse.fromBinary(data as Uint8Array) - ); - } - - GetSignedArtifactURL( - request: GetSignedArtifactURLRequest - ): Promise { - const data = GetSignedArtifactURLRequest.toBinary(request); - const promise = this.rpc.request( - "github.actions.results.api.v1.ArtifactService", - "GetSignedArtifactURL", - "application/protobuf", - data - ); - return promise.then((data) => - GetSignedArtifactURLResponse.fromBinary(data as Uint8Array) - ); - } - - DeleteArtifact( - request: DeleteArtifactRequest - ): Promise { - const data = DeleteArtifactRequest.toBinary(request); - const promise = this.rpc.request( - "github.actions.results.api.v1.ArtifactService", - "DeleteArtifact", - "application/protobuf", - data - ); - return promise.then((data) => - DeleteArtifactResponse.fromBinary(data as Uint8Array) - ); - } -} - -//==================================// -// Server Code // -//==================================// - -export interface ArtifactServiceTwirp { - CreateArtifact( - ctx: T, - request: CreateArtifactRequest - ): Promise; - FinalizeArtifact( - ctx: T, - request: FinalizeArtifactRequest - ): Promise; - ListArtifacts( - ctx: T, - request: ListArtifactsRequest - ): Promise; - GetSignedArtifactURL( - ctx: T, - request: GetSignedArtifactURLRequest - ): Promise; - DeleteArtifact( - ctx: T, - request: DeleteArtifactRequest - ): Promise; -} - -export enum ArtifactServiceMethod { - CreateArtifact = "CreateArtifact", - FinalizeArtifact = "FinalizeArtifact", - ListArtifacts = "ListArtifacts", - GetSignedArtifactURL = "GetSignedArtifactURL", - DeleteArtifact = "DeleteArtifact", -} - -export const ArtifactServiceMethodList = [ - ArtifactServiceMethod.CreateArtifact, - ArtifactServiceMethod.FinalizeArtifact, - ArtifactServiceMethod.ListArtifacts, - ArtifactServiceMethod.GetSignedArtifactURL, - ArtifactServiceMethod.DeleteArtifact, -]; - -export function createArtifactServiceServer< - T extends TwirpContext = TwirpContext ->(service: ArtifactServiceTwirp) { - return new TwirpServer({ - service, - packageName: "github.actions.results.api.v1", - serviceName: "ArtifactService", - methodList: ArtifactServiceMethodList, - matchRoute: matchArtifactServiceRoute, - }); -} - -function matchArtifactServiceRoute( - method: string, - events: RouterEvents -) { - switch (method) { - case "CreateArtifact": - return async ( - ctx: T, - service: ArtifactServiceTwirp, - data: Buffer, - interceptors?: Interceptor< - T, - CreateArtifactRequest, - CreateArtifactResponse - >[] - ) => { - ctx = { ...ctx, methodName: "CreateArtifact" }; - await events.onMatch(ctx); - return handleArtifactServiceCreateArtifactRequest( - ctx, - service, - data, - interceptors - ); - }; - case "FinalizeArtifact": - return async ( - ctx: T, - service: ArtifactServiceTwirp, - data: Buffer, - interceptors?: Interceptor< - T, - FinalizeArtifactRequest, - FinalizeArtifactResponse - >[] - ) => { - ctx = { ...ctx, methodName: "FinalizeArtifact" }; - await events.onMatch(ctx); - return handleArtifactServiceFinalizeArtifactRequest( - ctx, - service, - data, - interceptors - ); - }; - case "ListArtifacts": - return async ( - ctx: T, - service: ArtifactServiceTwirp, - data: Buffer, - interceptors?: Interceptor< - T, - ListArtifactsRequest, - ListArtifactsResponse - >[] - ) => { - ctx = { ...ctx, methodName: "ListArtifacts" }; - await events.onMatch(ctx); - return handleArtifactServiceListArtifactsRequest( - ctx, - service, - data, - interceptors - ); - }; - case "GetSignedArtifactURL": - return async ( - ctx: T, - service: ArtifactServiceTwirp, - data: Buffer, - interceptors?: Interceptor< - T, - GetSignedArtifactURLRequest, - GetSignedArtifactURLResponse - >[] - ) => { - ctx = { ...ctx, methodName: "GetSignedArtifactURL" }; - await events.onMatch(ctx); - return handleArtifactServiceGetSignedArtifactURLRequest( - ctx, - service, - data, - interceptors - ); - }; - case "DeleteArtifact": - return async ( - ctx: T, - service: ArtifactServiceTwirp, - data: Buffer, - interceptors?: Interceptor< - T, - DeleteArtifactRequest, - DeleteArtifactResponse - >[] - ) => { - ctx = { ...ctx, methodName: "DeleteArtifact" }; - await events.onMatch(ctx); - return handleArtifactServiceDeleteArtifactRequest( - ctx, - service, - data, - interceptors - ); - }; - default: - events.onNotFound(); - const msg = `no handler found`; - throw new TwirpError(TwirpErrorCode.BadRoute, msg); - } -} - -function handleArtifactServiceCreateArtifactRequest< - T extends TwirpContext = TwirpContext ->( - ctx: T, - service: ArtifactServiceTwirp, - data: Buffer, - interceptors?: Interceptor[] -): Promise { - switch (ctx.contentType) { - case TwirpContentType.JSON: - return handleArtifactServiceCreateArtifactJSON( - ctx, - service, - data, - interceptors - ); - case TwirpContentType.Protobuf: - return handleArtifactServiceCreateArtifactProtobuf( - ctx, - service, - data, - interceptors - ); - default: - const msg = "unexpected Content-Type"; - throw new TwirpError(TwirpErrorCode.BadRoute, msg); - } -} - -function handleArtifactServiceFinalizeArtifactRequest< - T extends TwirpContext = TwirpContext ->( - ctx: T, - service: ArtifactServiceTwirp, - data: Buffer, - interceptors?: Interceptor< - T, - FinalizeArtifactRequest, - FinalizeArtifactResponse - >[] -): Promise { - switch (ctx.contentType) { - case TwirpContentType.JSON: - return handleArtifactServiceFinalizeArtifactJSON( - ctx, - service, - data, - interceptors - ); - case TwirpContentType.Protobuf: - return handleArtifactServiceFinalizeArtifactProtobuf( - ctx, - service, - data, - interceptors - ); - default: - const msg = "unexpected Content-Type"; - throw new TwirpError(TwirpErrorCode.BadRoute, msg); - } -} - -function handleArtifactServiceListArtifactsRequest< - T extends TwirpContext = TwirpContext ->( - ctx: T, - service: ArtifactServiceTwirp, - data: Buffer, - interceptors?: Interceptor[] -): Promise { - switch (ctx.contentType) { - case TwirpContentType.JSON: - return handleArtifactServiceListArtifactsJSON( - ctx, - service, - data, - interceptors - ); - case TwirpContentType.Protobuf: - return handleArtifactServiceListArtifactsProtobuf( - ctx, - service, - data, - interceptors - ); - default: - const msg = "unexpected Content-Type"; - throw new TwirpError(TwirpErrorCode.BadRoute, msg); - } -} - -function handleArtifactServiceGetSignedArtifactURLRequest< - T extends TwirpContext = TwirpContext ->( - ctx: T, - service: ArtifactServiceTwirp, - data: Buffer, - interceptors?: Interceptor< - T, - GetSignedArtifactURLRequest, - GetSignedArtifactURLResponse - >[] -): Promise { - switch (ctx.contentType) { - case TwirpContentType.JSON: - return handleArtifactServiceGetSignedArtifactURLJSON( - ctx, - service, - data, - interceptors - ); - case TwirpContentType.Protobuf: - return handleArtifactServiceGetSignedArtifactURLProtobuf( - ctx, - service, - data, - interceptors - ); - default: - const msg = "unexpected Content-Type"; - throw new TwirpError(TwirpErrorCode.BadRoute, msg); - } -} - -function handleArtifactServiceDeleteArtifactRequest< - T extends TwirpContext = TwirpContext ->( - ctx: T, - service: ArtifactServiceTwirp, - data: Buffer, - interceptors?: Interceptor[] -): Promise { - switch (ctx.contentType) { - case TwirpContentType.JSON: - return handleArtifactServiceDeleteArtifactJSON( - ctx, - service, - data, - interceptors - ); - case TwirpContentType.Protobuf: - return handleArtifactServiceDeleteArtifactProtobuf( - ctx, - service, - data, - interceptors - ); - default: - const msg = "unexpected Content-Type"; - throw new TwirpError(TwirpErrorCode.BadRoute, msg); - } -} -async function handleArtifactServiceCreateArtifactJSON< - T extends TwirpContext = TwirpContext ->( - ctx: T, - service: ArtifactServiceTwirp, - data: Buffer, - interceptors?: Interceptor[] -) { - let request: CreateArtifactRequest; - let response: CreateArtifactResponse; - - try { - const body = JSON.parse(data.toString() || "{}"); - request = CreateArtifactRequest.fromJson(body, { - ignoreUnknownFields: true, - }); - } catch (e) { - if (e instanceof Error) { - const msg = "the json request could not be decoded"; - throw new TwirpError(TwirpErrorCode.Malformed, msg).withCause(e, true); - } - } - - if (interceptors && interceptors.length > 0) { - const interceptor = chainInterceptors(...interceptors) as Interceptor< - T, - CreateArtifactRequest, - CreateArtifactResponse - >; - response = await interceptor(ctx, request!, (ctx, inputReq) => { - return service.CreateArtifact(ctx, inputReq); - }); - } else { - response = await service.CreateArtifact(ctx, request!); - } - - return JSON.stringify( - CreateArtifactResponse.toJson(response, { - useProtoFieldName: true, - emitDefaultValues: false, - }) as string - ); -} - -async function handleArtifactServiceFinalizeArtifactJSON< - T extends TwirpContext = TwirpContext ->( - ctx: T, - service: ArtifactServiceTwirp, - data: Buffer, - interceptors?: Interceptor< - T, - FinalizeArtifactRequest, - FinalizeArtifactResponse - >[] -) { - let request: FinalizeArtifactRequest; - let response: FinalizeArtifactResponse; - - try { - const body = JSON.parse(data.toString() || "{}"); - request = FinalizeArtifactRequest.fromJson(body, { - ignoreUnknownFields: true, - }); - } catch (e) { - if (e instanceof Error) { - const msg = "the json request could not be decoded"; - throw new TwirpError(TwirpErrorCode.Malformed, msg).withCause(e, true); - } - } - - if (interceptors && interceptors.length > 0) { - const interceptor = chainInterceptors(...interceptors) as Interceptor< - T, - FinalizeArtifactRequest, - FinalizeArtifactResponse - >; - response = await interceptor(ctx, request!, (ctx, inputReq) => { - return service.FinalizeArtifact(ctx, inputReq); - }); - } else { - response = await service.FinalizeArtifact(ctx, request!); - } - - return JSON.stringify( - FinalizeArtifactResponse.toJson(response, { - useProtoFieldName: true, - emitDefaultValues: false, - }) as string - ); -} - -async function handleArtifactServiceListArtifactsJSON< - T extends TwirpContext = TwirpContext ->( - ctx: T, - service: ArtifactServiceTwirp, - data: Buffer, - interceptors?: Interceptor[] -) { - let request: ListArtifactsRequest; - let response: ListArtifactsResponse; - - try { - const body = JSON.parse(data.toString() || "{}"); - request = ListArtifactsRequest.fromJson(body, { - ignoreUnknownFields: true, - }); - } catch (e) { - if (e instanceof Error) { - const msg = "the json request could not be decoded"; - throw new TwirpError(TwirpErrorCode.Malformed, msg).withCause(e, true); - } - } - - if (interceptors && interceptors.length > 0) { - const interceptor = chainInterceptors(...interceptors) as Interceptor< - T, - ListArtifactsRequest, - ListArtifactsResponse - >; - response = await interceptor(ctx, request!, (ctx, inputReq) => { - return service.ListArtifacts(ctx, inputReq); - }); - } else { - response = await service.ListArtifacts(ctx, request!); - } - - return JSON.stringify( - ListArtifactsResponse.toJson(response, { - useProtoFieldName: true, - emitDefaultValues: false, - }) as string - ); -} - -async function handleArtifactServiceGetSignedArtifactURLJSON< - T extends TwirpContext = TwirpContext ->( - ctx: T, - service: ArtifactServiceTwirp, - data: Buffer, - interceptors?: Interceptor< - T, - GetSignedArtifactURLRequest, - GetSignedArtifactURLResponse - >[] -) { - let request: GetSignedArtifactURLRequest; - let response: GetSignedArtifactURLResponse; - - try { - const body = JSON.parse(data.toString() || "{}"); - request = GetSignedArtifactURLRequest.fromJson(body, { - ignoreUnknownFields: true, - }); - } catch (e) { - if (e instanceof Error) { - const msg = "the json request could not be decoded"; - throw new TwirpError(TwirpErrorCode.Malformed, msg).withCause(e, true); - } - } - - if (interceptors && interceptors.length > 0) { - const interceptor = chainInterceptors(...interceptors) as Interceptor< - T, - GetSignedArtifactURLRequest, - GetSignedArtifactURLResponse - >; - response = await interceptor(ctx, request!, (ctx, inputReq) => { - return service.GetSignedArtifactURL(ctx, inputReq); - }); - } else { - response = await service.GetSignedArtifactURL(ctx, request!); - } - - return JSON.stringify( - GetSignedArtifactURLResponse.toJson(response, { - useProtoFieldName: true, - emitDefaultValues: false, - }) as string - ); -} - -async function handleArtifactServiceDeleteArtifactJSON< - T extends TwirpContext = TwirpContext ->( - ctx: T, - service: ArtifactServiceTwirp, - data: Buffer, - interceptors?: Interceptor[] -) { - let request: DeleteArtifactRequest; - let response: DeleteArtifactResponse; - - try { - const body = JSON.parse(data.toString() || "{}"); - request = DeleteArtifactRequest.fromJson(body, { - ignoreUnknownFields: true, - }); - } catch (e) { - if (e instanceof Error) { - const msg = "the json request could not be decoded"; - throw new TwirpError(TwirpErrorCode.Malformed, msg).withCause(e, true); - } - } - - if (interceptors && interceptors.length > 0) { - const interceptor = chainInterceptors(...interceptors) as Interceptor< - T, - DeleteArtifactRequest, - DeleteArtifactResponse - >; - response = await interceptor(ctx, request!, (ctx, inputReq) => { - return service.DeleteArtifact(ctx, inputReq); - }); - } else { - response = await service.DeleteArtifact(ctx, request!); - } - - return JSON.stringify( - DeleteArtifactResponse.toJson(response, { - useProtoFieldName: true, - emitDefaultValues: false, - }) as string - ); -} -async function handleArtifactServiceCreateArtifactProtobuf< - T extends TwirpContext = TwirpContext ->( - ctx: T, - service: ArtifactServiceTwirp, - data: Buffer, - interceptors?: Interceptor[] -) { - let request: CreateArtifactRequest; - let response: CreateArtifactResponse; - - try { - request = CreateArtifactRequest.fromBinary(data); - } catch (e) { - if (e instanceof Error) { - const msg = "the protobuf request could not be decoded"; - throw new TwirpError(TwirpErrorCode.Malformed, msg).withCause(e, true); - } - } - - if (interceptors && interceptors.length > 0) { - const interceptor = chainInterceptors(...interceptors) as Interceptor< - T, - CreateArtifactRequest, - CreateArtifactResponse - >; - response = await interceptor(ctx, request!, (ctx, inputReq) => { - return service.CreateArtifact(ctx, inputReq); - }); - } else { - response = await service.CreateArtifact(ctx, request!); - } - - return Buffer.from(CreateArtifactResponse.toBinary(response)); -} - -async function handleArtifactServiceFinalizeArtifactProtobuf< - T extends TwirpContext = TwirpContext ->( - ctx: T, - service: ArtifactServiceTwirp, - data: Buffer, - interceptors?: Interceptor< - T, - FinalizeArtifactRequest, - FinalizeArtifactResponse - >[] -) { - let request: FinalizeArtifactRequest; - let response: FinalizeArtifactResponse; - - try { - request = FinalizeArtifactRequest.fromBinary(data); - } catch (e) { - if (e instanceof Error) { - const msg = "the protobuf request could not be decoded"; - throw new TwirpError(TwirpErrorCode.Malformed, msg).withCause(e, true); - } - } - - if (interceptors && interceptors.length > 0) { - const interceptor = chainInterceptors(...interceptors) as Interceptor< - T, - FinalizeArtifactRequest, - FinalizeArtifactResponse - >; - response = await interceptor(ctx, request!, (ctx, inputReq) => { - return service.FinalizeArtifact(ctx, inputReq); - }); - } else { - response = await service.FinalizeArtifact(ctx, request!); - } - - return Buffer.from(FinalizeArtifactResponse.toBinary(response)); -} - -async function handleArtifactServiceListArtifactsProtobuf< - T extends TwirpContext = TwirpContext ->( - ctx: T, - service: ArtifactServiceTwirp, - data: Buffer, - interceptors?: Interceptor[] -) { - let request: ListArtifactsRequest; - let response: ListArtifactsResponse; - - try { - request = ListArtifactsRequest.fromBinary(data); - } catch (e) { - if (e instanceof Error) { - const msg = "the protobuf request could not be decoded"; - throw new TwirpError(TwirpErrorCode.Malformed, msg).withCause(e, true); - } - } - - if (interceptors && interceptors.length > 0) { - const interceptor = chainInterceptors(...interceptors) as Interceptor< - T, - ListArtifactsRequest, - ListArtifactsResponse - >; - response = await interceptor(ctx, request!, (ctx, inputReq) => { - return service.ListArtifacts(ctx, inputReq); - }); - } else { - response = await service.ListArtifacts(ctx, request!); - } - - return Buffer.from(ListArtifactsResponse.toBinary(response)); -} - -async function handleArtifactServiceGetSignedArtifactURLProtobuf< - T extends TwirpContext = TwirpContext ->( - ctx: T, - service: ArtifactServiceTwirp, - data: Buffer, - interceptors?: Interceptor< - T, - GetSignedArtifactURLRequest, - GetSignedArtifactURLResponse - >[] -) { - let request: GetSignedArtifactURLRequest; - let response: GetSignedArtifactURLResponse; - - try { - request = GetSignedArtifactURLRequest.fromBinary(data); - } catch (e) { - if (e instanceof Error) { - const msg = "the protobuf request could not be decoded"; - throw new TwirpError(TwirpErrorCode.Malformed, msg).withCause(e, true); - } - } - - if (interceptors && interceptors.length > 0) { - const interceptor = chainInterceptors(...interceptors) as Interceptor< - T, - GetSignedArtifactURLRequest, - GetSignedArtifactURLResponse - >; - response = await interceptor(ctx, request!, (ctx, inputReq) => { - return service.GetSignedArtifactURL(ctx, inputReq); - }); - } else { - response = await service.GetSignedArtifactURL(ctx, request!); - } - - return Buffer.from(GetSignedArtifactURLResponse.toBinary(response)); -} - -async function handleArtifactServiceDeleteArtifactProtobuf< - T extends TwirpContext = TwirpContext ->( - ctx: T, - service: ArtifactServiceTwirp, - data: Buffer, - interceptors?: Interceptor[] -) { - let request: DeleteArtifactRequest; - let response: DeleteArtifactResponse; - - try { - request = DeleteArtifactRequest.fromBinary(data); - } catch (e) { - if (e instanceof Error) { - const msg = "the protobuf request could not be decoded"; - throw new TwirpError(TwirpErrorCode.Malformed, msg).withCause(e, true); - } - } - - if (interceptors && interceptors.length > 0) { - const interceptor = chainInterceptors(...interceptors) as Interceptor< - T, - DeleteArtifactRequest, - DeleteArtifactResponse - >; - response = await interceptor(ctx, request!, (ctx, inputReq) => { - return service.DeleteArtifact(ctx, inputReq); - }); - } else { - response = await service.DeleteArtifact(ctx, request!); - } - - return Buffer.from(DeleteArtifactResponse.toBinary(response)); -} diff --git a/packages/cache/__tests__/restoreCacheV2.test.ts b/packages/cache/__tests__/restoreCacheV2.test.ts index edcb16d7..d4edc2a4 100644 --- a/packages/cache/__tests__/restoreCacheV2.test.ts +++ b/packages/cache/__tests__/restoreCacheV2.test.ts @@ -6,7 +6,7 @@ import * as cacheUtils from '../src/internal/cacheUtils' import * as cacheHttpClient from '../src/internal/cacheHttpClient' import {restoreCache} from '../src/cache' import {CacheFilename, CompressionMethod} from '../src/internal/constants' -import {CacheServiceClientJSON} from '../src/generated/results/api/v1/cache.twirp' +import {CacheServiceClientJSON} from '../src/generated/results/api/v1/cache.twirp-client' import {DownloadOptions} from '../src/options' jest.mock('../src/internal/cacheHttpClient') diff --git a/packages/cache/__tests__/saveCacheV2.test.ts b/packages/cache/__tests__/saveCacheV2.test.ts index 6744425d..ea3081ab 100644 --- a/packages/cache/__tests__/saveCacheV2.test.ts +++ b/packages/cache/__tests__/saveCacheV2.test.ts @@ -5,7 +5,7 @@ import * as cacheUtils from '../src/internal/cacheUtils' import {CacheFilename, CompressionMethod} from '../src/internal/constants' import * as config from '../src/internal/config' import * as tar from '../src/internal/tar' -import {CacheServiceClientJSON} from '../src/generated/results/api/v1/cache.twirp' +import {CacheServiceClientJSON} from '../src/generated/results/api/v1/cache.twirp-client' import * as cacheHttpClient from '../src/internal/cacheHttpClient' import {UploadOptions} from '../src/options' diff --git a/packages/cache/package-lock.json b/packages/cache/package-lock.json index 132391fb..b2d956dc 100644 --- a/packages/cache/package-lock.json +++ b/packages/cache/package-lock.json @@ -18,8 +18,7 @@ "@azure/ms-rest-js": "^2.6.0", "@azure/storage-blob": "^12.13.0", "@protobuf-ts/plugin": "^2.9.4", - "semver": "^6.3.1", - "twirp-ts": "^2.5.0" + "semver": "^6.3.1" }, "devDependencies": { "@types/semver": "^6.0.0", @@ -395,16 +394,6 @@ "concat-map": "0.0.1" } }, - "node_modules/camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "license": "MIT", - "dependencies": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -416,15 +405,6 @@ "node": ">= 0.8" } }, - "node_modules/commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -438,19 +418,6 @@ "node": ">=0.4.0" } }, - "node_modules/dot-object": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/dot-object/-/dot-object-2.1.5.tgz", - "integrity": "sha512-xHF8EP4XH/Ba9fvAF2LDd5O3IITVolerVV6xvkxoM8zlGEiCUrggpAnHyOoKJKCrhvPcGATFAUwIujj7bRG5UA==", - "license": "MIT", - "dependencies": { - "commander": "^6.1.0", - "glob": "^7.1.6" - }, - "bin": { - "dot-object": "bin/dot-object" - } - }, "node_modules/event-target-shim": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", @@ -480,65 +447,6 @@ "node": ">= 0.12" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "license": "ISC" - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "license": "ISC" - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "license": "MIT" - }, - "node_modules/lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "license": "MIT", - "dependencies": { - "tslib": "^2.0.3" - } - }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -569,16 +477,6 @@ "node": "*" } }, - "node_modules/no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "license": "MIT", - "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, "node_modules/node-fetch": { "version": "2.6.12", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.12.tgz", @@ -598,55 +496,6 @@ } } }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "license": "MIT", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-to-regexp": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", - "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", - "license": "MIT" - }, - "node_modules/prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", - "license": "MIT", - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, "node_modules/process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", @@ -673,16 +522,6 @@ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, - "node_modules/ts-poet": { - "version": "4.15.0", - "resolved": "https://registry.npmjs.org/ts-poet/-/ts-poet-4.15.0.tgz", - "integrity": "sha512-sLLR8yQBvHzi9d4R1F4pd+AzQxBfzOSSjfxiJxQhkUoH5bL7RsAC6wgvtVUQdGqiCsyS9rT6/8X2FI7ipdir5g==", - "license": "Apache-2.0", - "dependencies": { - "lodash": "^4.17.15", - "prettier": "^2.5.1" - } - }, "node_modules/tslib": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz", @@ -696,35 +535,6 @@ "node": ">=0.6.11 <=0.7.0 || >=0.7.3" } }, - "node_modules/twirp-ts": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/twirp-ts/-/twirp-ts-2.5.0.tgz", - "integrity": "sha512-JTKIK5Pf/+3qCrmYDFlqcPPUx+ohEWKBaZy8GL8TmvV2VvC0SXVyNYILO39+GCRbqnuP6hBIF+BVr8ZxRz+6fw==", - "license": "MIT", - "dependencies": { - "@protobuf-ts/plugin-framework": "^2.0.7", - "camel-case": "^4.1.2", - "dot-object": "^2.1.4", - "path-to-regexp": "^6.2.0", - "ts-poet": "^4.5.0", - "yaml": "^1.10.2" - }, - "bin": { - "protoc-gen-twirp_ts": "protoc-gen-twirp_ts" - }, - "peerDependencies": { - "@protobuf-ts/plugin": "^2.5.0", - "ts-proto": "^1.81.3" - }, - "peerDependenciesMeta": { - "@protobuf-ts/plugin": { - "optional": true - }, - "ts-proto": { - "optional": true - } - } - }, "node_modules/typescript": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", @@ -752,12 +562,6 @@ "webidl-conversions": "^3.0.0" } }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "license": "ISC" - }, "node_modules/xml2js": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", @@ -777,15 +581,6 @@ "engines": { "node": ">=4.0" } - }, - "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", - "license": "ISC", - "engines": { - "node": ">= 6" - } } }, "dependencies": { @@ -1095,15 +890,6 @@ "concat-map": "0.0.1" } }, - "camel-case": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", - "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", - "requires": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, "combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -1112,11 +898,6 @@ "delayed-stream": "~1.0.0" } }, - "commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==" - }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -1127,15 +908,6 @@ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==" }, - "dot-object": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/dot-object/-/dot-object-2.1.5.tgz", - "integrity": "sha512-xHF8EP4XH/Ba9fvAF2LDd5O3IITVolerVV6xvkxoM8zlGEiCUrggpAnHyOoKJKCrhvPcGATFAUwIujj7bRG5UA==", - "requires": { - "commander": "^6.1.0", - "glob": "^7.1.6" - } - }, "event-target-shim": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", @@ -1156,51 +928,6 @@ "mime-types": "^2.1.12" } }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "lower-case": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", - "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", - "requires": { - "tslib": "^2.0.3" - } - }, "mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -1222,15 +949,6 @@ "brace-expansion": "^1.1.7" } }, - "no-case": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", - "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", - "requires": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, "node-fetch": { "version": "2.6.12", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.12.tgz", @@ -1239,38 +957,6 @@ "whatwg-url": "^5.0.0" } }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "requires": { - "wrappy": "1" - } - }, - "pascal-case": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", - "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", - "requires": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" - }, - "path-to-regexp": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", - "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==" - }, - "prettier": { - "version": "2.8.8", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", - "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==" - }, "process": { "version": "0.11.10", "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", @@ -1291,15 +977,6 @@ "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, - "ts-poet": { - "version": "4.15.0", - "resolved": "https://registry.npmjs.org/ts-poet/-/ts-poet-4.15.0.tgz", - "integrity": "sha512-sLLR8yQBvHzi9d4R1F4pd+AzQxBfzOSSjfxiJxQhkUoH5bL7RsAC6wgvtVUQdGqiCsyS9rT6/8X2FI7ipdir5g==", - "requires": { - "lodash": "^4.17.15", - "prettier": "^2.5.1" - } - }, "tslib": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz", @@ -1310,19 +987,6 @@ "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==" }, - "twirp-ts": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/twirp-ts/-/twirp-ts-2.5.0.tgz", - "integrity": "sha512-JTKIK5Pf/+3qCrmYDFlqcPPUx+ohEWKBaZy8GL8TmvV2VvC0SXVyNYILO39+GCRbqnuP6hBIF+BVr8ZxRz+6fw==", - "requires": { - "@protobuf-ts/plugin-framework": "^2.0.7", - "camel-case": "^4.1.2", - "dot-object": "^2.1.4", - "path-to-regexp": "^6.2.0", - "ts-poet": "^4.5.0", - "yaml": "^1.10.2" - } - }, "typescript": { "version": "5.2.2", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", @@ -1343,11 +1007,6 @@ "webidl-conversions": "^3.0.0" } }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" - }, "xml2js": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", @@ -1361,11 +1020,6 @@ "version": "11.0.1", "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" - }, - "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" } } } diff --git a/packages/cache/package.json b/packages/cache/package.json index b03f4221..1dae816d 100644 --- a/packages/cache/package.json +++ b/packages/cache/package.json @@ -46,11 +46,10 @@ "@azure/ms-rest-js": "^2.6.0", "@azure/storage-blob": "^12.13.0", "@protobuf-ts/plugin": "^2.9.4", - "semver": "^6.3.1", - "twirp-ts": "^2.5.0" + "semver": "^6.3.1" }, "devDependencies": { "@types/semver": "^6.0.0", "typescript": "^5.2.2" } -} \ No newline at end of file +} diff --git a/packages/cache/src/generated/results/api/v1/cache.twirp-client.ts b/packages/cache/src/generated/results/api/v1/cache.twirp-client.ts new file mode 100644 index 00000000..96659f84 --- /dev/null +++ b/packages/cache/src/generated/results/api/v1/cache.twirp-client.ts @@ -0,0 +1,157 @@ +import { + CreateCacheEntryRequest, + CreateCacheEntryResponse, + FinalizeCacheEntryUploadRequest, + FinalizeCacheEntryUploadResponse, + GetCacheEntryDownloadURLRequest, + GetCacheEntryDownloadURLResponse, + } from "./cache"; + + //==================================// + // Client Code // + //==================================// + + interface Rpc { + request( + service: string, + method: string, + contentType: "application/json" | "application/protobuf", + data: object | Uint8Array + ): Promise; + } + + export interface CacheServiceClient { + CreateCacheEntry( + request: CreateCacheEntryRequest + ): Promise; + FinalizeCacheEntryUpload( + request: FinalizeCacheEntryUploadRequest + ): Promise; + GetCacheEntryDownloadURL( + request: GetCacheEntryDownloadURLRequest + ): Promise; + } + + export class CacheServiceClientJSON implements CacheServiceClient { + private readonly rpc: Rpc; + constructor(rpc: Rpc) { + this.rpc = rpc; + this.CreateCacheEntry.bind(this); + this.FinalizeCacheEntryUpload.bind(this); + this.GetCacheEntryDownloadURL.bind(this); + } + CreateCacheEntry( + request: CreateCacheEntryRequest + ): Promise { + const data = CreateCacheEntryRequest.toJson(request, { + useProtoFieldName: true, + emitDefaultValues: false, + }); + const promise = this.rpc.request( + "github.actions.results.api.v1.CacheService", + "CreateCacheEntry", + "application/json", + data as object + ); + return promise.then((data) => + CreateCacheEntryResponse.fromJson(data as any, { + ignoreUnknownFields: true, + }) + ); + } + + FinalizeCacheEntryUpload( + request: FinalizeCacheEntryUploadRequest + ): Promise { + const data = FinalizeCacheEntryUploadRequest.toJson(request, { + useProtoFieldName: true, + emitDefaultValues: false, + }); + const promise = this.rpc.request( + "github.actions.results.api.v1.CacheService", + "FinalizeCacheEntryUpload", + "application/json", + data as object + ); + return promise.then((data) => + FinalizeCacheEntryUploadResponse.fromJson(data as any, { + ignoreUnknownFields: true, + }) + ); + } + + GetCacheEntryDownloadURL( + request: GetCacheEntryDownloadURLRequest + ): Promise { + const data = GetCacheEntryDownloadURLRequest.toJson(request, { + useProtoFieldName: true, + emitDefaultValues: false, + }); + const promise = this.rpc.request( + "github.actions.results.api.v1.CacheService", + "GetCacheEntryDownloadURL", + "application/json", + data as object + ); + return promise.then((data) => + GetCacheEntryDownloadURLResponse.fromJson(data as any, { + ignoreUnknownFields: true, + }) + ); + } + } + + export class CacheServiceClientProtobuf implements CacheServiceClient { + private readonly rpc: Rpc; + constructor(rpc: Rpc) { + this.rpc = rpc; + this.CreateCacheEntry.bind(this); + this.FinalizeCacheEntryUpload.bind(this); + this.GetCacheEntryDownloadURL.bind(this); + } + CreateCacheEntry( + request: CreateCacheEntryRequest + ): Promise { + const data = CreateCacheEntryRequest.toBinary(request); + const promise = this.rpc.request( + "github.actions.results.api.v1.CacheService", + "CreateCacheEntry", + "application/protobuf", + data + ); + return promise.then((data) => + CreateCacheEntryResponse.fromBinary(data as Uint8Array) + ); + } + + FinalizeCacheEntryUpload( + request: FinalizeCacheEntryUploadRequest + ): Promise { + const data = FinalizeCacheEntryUploadRequest.toBinary(request); + const promise = this.rpc.request( + "github.actions.results.api.v1.CacheService", + "FinalizeCacheEntryUpload", + "application/protobuf", + data + ); + return promise.then((data) => + FinalizeCacheEntryUploadResponse.fromBinary(data as Uint8Array) + ); + } + + GetCacheEntryDownloadURL( + request: GetCacheEntryDownloadURLRequest + ): Promise { + const data = GetCacheEntryDownloadURLRequest.toBinary(request); + const promise = this.rpc.request( + "github.actions.results.api.v1.CacheService", + "GetCacheEntryDownloadURL", + "application/protobuf", + data + ); + return promise.then((data) => + GetCacheEntryDownloadURLResponse.fromBinary(data as Uint8Array) + ); + } + } + \ No newline at end of file diff --git a/packages/cache/src/generated/results/api/v1/cache.twirp.ts b/packages/cache/src/generated/results/api/v1/cache.twirp.ts deleted file mode 100644 index 8c14c31d..00000000 --- a/packages/cache/src/generated/results/api/v1/cache.twirp.ts +++ /dev/null @@ -1,642 +0,0 @@ -import { - TwirpContext, - TwirpServer, - RouterEvents, - TwirpError, - TwirpErrorCode, - Interceptor, - TwirpContentType, - chainInterceptors, -} from "twirp-ts"; -import { - CreateCacheEntryRequest, - CreateCacheEntryResponse, - FinalizeCacheEntryUploadRequest, - FinalizeCacheEntryUploadResponse, - GetCacheEntryDownloadURLRequest, - GetCacheEntryDownloadURLResponse, -} from "./cache"; - -//==================================// -// Client Code // -//==================================// - -interface Rpc { - request( - service: string, - method: string, - contentType: "application/json" | "application/protobuf", - data: object | Uint8Array - ): Promise; -} - -export interface CacheServiceClient { - CreateCacheEntry( - request: CreateCacheEntryRequest - ): Promise; - FinalizeCacheEntryUpload( - request: FinalizeCacheEntryUploadRequest - ): Promise; - GetCacheEntryDownloadURL( - request: GetCacheEntryDownloadURLRequest - ): Promise; -} - -export class CacheServiceClientJSON implements CacheServiceClient { - private readonly rpc: Rpc; - constructor(rpc: Rpc) { - this.rpc = rpc; - this.CreateCacheEntry.bind(this); - this.FinalizeCacheEntryUpload.bind(this); - this.GetCacheEntryDownloadURL.bind(this); - } - CreateCacheEntry( - request: CreateCacheEntryRequest - ): Promise { - const data = CreateCacheEntryRequest.toJson(request, { - useProtoFieldName: true, - emitDefaultValues: false, - }); - const promise = this.rpc.request( - "github.actions.results.api.v1.CacheService", - "CreateCacheEntry", - "application/json", - data as object - ); - return promise.then((data) => - CreateCacheEntryResponse.fromJson(data as any, { - ignoreUnknownFields: true, - }) - ); - } - - FinalizeCacheEntryUpload( - request: FinalizeCacheEntryUploadRequest - ): Promise { - const data = FinalizeCacheEntryUploadRequest.toJson(request, { - useProtoFieldName: true, - emitDefaultValues: false, - }); - const promise = this.rpc.request( - "github.actions.results.api.v1.CacheService", - "FinalizeCacheEntryUpload", - "application/json", - data as object - ); - return promise.then((data) => - FinalizeCacheEntryUploadResponse.fromJson(data as any, { - ignoreUnknownFields: true, - }) - ); - } - - GetCacheEntryDownloadURL( - request: GetCacheEntryDownloadURLRequest - ): Promise { - const data = GetCacheEntryDownloadURLRequest.toJson(request, { - useProtoFieldName: true, - emitDefaultValues: false, - }); - const promise = this.rpc.request( - "github.actions.results.api.v1.CacheService", - "GetCacheEntryDownloadURL", - "application/json", - data as object - ); - return promise.then((data) => - GetCacheEntryDownloadURLResponse.fromJson(data as any, { - ignoreUnknownFields: true, - }) - ); - } -} - -export class CacheServiceClientProtobuf implements CacheServiceClient { - private readonly rpc: Rpc; - constructor(rpc: Rpc) { - this.rpc = rpc; - this.CreateCacheEntry.bind(this); - this.FinalizeCacheEntryUpload.bind(this); - this.GetCacheEntryDownloadURL.bind(this); - } - CreateCacheEntry( - request: CreateCacheEntryRequest - ): Promise { - const data = CreateCacheEntryRequest.toBinary(request); - const promise = this.rpc.request( - "github.actions.results.api.v1.CacheService", - "CreateCacheEntry", - "application/protobuf", - data - ); - return promise.then((data) => - CreateCacheEntryResponse.fromBinary(data as Uint8Array) - ); - } - - FinalizeCacheEntryUpload( - request: FinalizeCacheEntryUploadRequest - ): Promise { - const data = FinalizeCacheEntryUploadRequest.toBinary(request); - const promise = this.rpc.request( - "github.actions.results.api.v1.CacheService", - "FinalizeCacheEntryUpload", - "application/protobuf", - data - ); - return promise.then((data) => - FinalizeCacheEntryUploadResponse.fromBinary(data as Uint8Array) - ); - } - - GetCacheEntryDownloadURL( - request: GetCacheEntryDownloadURLRequest - ): Promise { - const data = GetCacheEntryDownloadURLRequest.toBinary(request); - const promise = this.rpc.request( - "github.actions.results.api.v1.CacheService", - "GetCacheEntryDownloadURL", - "application/protobuf", - data - ); - return promise.then((data) => - GetCacheEntryDownloadURLResponse.fromBinary(data as Uint8Array) - ); - } -} - -//==================================// -// Server Code // -//==================================// - -export interface CacheServiceTwirp { - CreateCacheEntry( - ctx: T, - request: CreateCacheEntryRequest - ): Promise; - FinalizeCacheEntryUpload( - ctx: T, - request: FinalizeCacheEntryUploadRequest - ): Promise; - GetCacheEntryDownloadURL( - ctx: T, - request: GetCacheEntryDownloadURLRequest - ): Promise; -} - -export enum CacheServiceMethod { - CreateCacheEntry = "CreateCacheEntry", - FinalizeCacheEntryUpload = "FinalizeCacheEntryUpload", - GetCacheEntryDownloadURL = "GetCacheEntryDownloadURL", -} - -export const CacheServiceMethodList = [ - CacheServiceMethod.CreateCacheEntry, - CacheServiceMethod.FinalizeCacheEntryUpload, - CacheServiceMethod.GetCacheEntryDownloadURL, -]; - -export function createCacheServiceServer( - service: CacheServiceTwirp -) { - return new TwirpServer({ - service, - packageName: "github.actions.results.api.v1", - serviceName: "CacheService", - methodList: CacheServiceMethodList, - matchRoute: matchCacheServiceRoute, - }); -} - -function matchCacheServiceRoute( - method: string, - events: RouterEvents -) { - switch (method) { - case "CreateCacheEntry": - return async ( - ctx: T, - service: CacheServiceTwirp, - data: Buffer, - interceptors?: Interceptor< - T, - CreateCacheEntryRequest, - CreateCacheEntryResponse - >[] - ) => { - ctx = { ...ctx, methodName: "CreateCacheEntry" }; - await events.onMatch(ctx); - return handleCacheServiceCreateCacheEntryRequest( - ctx, - service, - data, - interceptors - ); - }; - case "FinalizeCacheEntryUpload": - return async ( - ctx: T, - service: CacheServiceTwirp, - data: Buffer, - interceptors?: Interceptor< - T, - FinalizeCacheEntryUploadRequest, - FinalizeCacheEntryUploadResponse - >[] - ) => { - ctx = { ...ctx, methodName: "FinalizeCacheEntryUpload" }; - await events.onMatch(ctx); - return handleCacheServiceFinalizeCacheEntryUploadRequest( - ctx, - service, - data, - interceptors - ); - }; - case "GetCacheEntryDownloadURL": - return async ( - ctx: T, - service: CacheServiceTwirp, - data: Buffer, - interceptors?: Interceptor< - T, - GetCacheEntryDownloadURLRequest, - GetCacheEntryDownloadURLResponse - >[] - ) => { - ctx = { ...ctx, methodName: "GetCacheEntryDownloadURL" }; - await events.onMatch(ctx); - return handleCacheServiceGetCacheEntryDownloadURLRequest( - ctx, - service, - data, - interceptors - ); - }; - default: - events.onNotFound(); - const msg = `no handler found`; - throw new TwirpError(TwirpErrorCode.BadRoute, msg); - } -} - -function handleCacheServiceCreateCacheEntryRequest< - T extends TwirpContext = TwirpContext ->( - ctx: T, - service: CacheServiceTwirp, - data: Buffer, - interceptors?: Interceptor< - T, - CreateCacheEntryRequest, - CreateCacheEntryResponse - >[] -): Promise { - switch (ctx.contentType) { - case TwirpContentType.JSON: - return handleCacheServiceCreateCacheEntryJSON( - ctx, - service, - data, - interceptors - ); - case TwirpContentType.Protobuf: - return handleCacheServiceCreateCacheEntryProtobuf( - ctx, - service, - data, - interceptors - ); - default: - const msg = "unexpected Content-Type"; - throw new TwirpError(TwirpErrorCode.BadRoute, msg); - } -} - -function handleCacheServiceFinalizeCacheEntryUploadRequest< - T extends TwirpContext = TwirpContext ->( - ctx: T, - service: CacheServiceTwirp, - data: Buffer, - interceptors?: Interceptor< - T, - FinalizeCacheEntryUploadRequest, - FinalizeCacheEntryUploadResponse - >[] -): Promise { - switch (ctx.contentType) { - case TwirpContentType.JSON: - return handleCacheServiceFinalizeCacheEntryUploadJSON( - ctx, - service, - data, - interceptors - ); - case TwirpContentType.Protobuf: - return handleCacheServiceFinalizeCacheEntryUploadProtobuf( - ctx, - service, - data, - interceptors - ); - default: - const msg = "unexpected Content-Type"; - throw new TwirpError(TwirpErrorCode.BadRoute, msg); - } -} - -function handleCacheServiceGetCacheEntryDownloadURLRequest< - T extends TwirpContext = TwirpContext ->( - ctx: T, - service: CacheServiceTwirp, - data: Buffer, - interceptors?: Interceptor< - T, - GetCacheEntryDownloadURLRequest, - GetCacheEntryDownloadURLResponse - >[] -): Promise { - switch (ctx.contentType) { - case TwirpContentType.JSON: - return handleCacheServiceGetCacheEntryDownloadURLJSON( - ctx, - service, - data, - interceptors - ); - case TwirpContentType.Protobuf: - return handleCacheServiceGetCacheEntryDownloadURLProtobuf( - ctx, - service, - data, - interceptors - ); - default: - const msg = "unexpected Content-Type"; - throw new TwirpError(TwirpErrorCode.BadRoute, msg); - } -} -async function handleCacheServiceCreateCacheEntryJSON< - T extends TwirpContext = TwirpContext ->( - ctx: T, - service: CacheServiceTwirp, - data: Buffer, - interceptors?: Interceptor< - T, - CreateCacheEntryRequest, - CreateCacheEntryResponse - >[] -) { - let request: CreateCacheEntryRequest; - let response: CreateCacheEntryResponse; - - try { - const body = JSON.parse(data.toString() || "{}"); - request = CreateCacheEntryRequest.fromJson(body, { - ignoreUnknownFields: true, - }); - } catch (e) { - if (e instanceof Error) { - const msg = "the json request could not be decoded"; - throw new TwirpError(TwirpErrorCode.Malformed, msg).withCause(e, true); - } - } - - if (interceptors && interceptors.length > 0) { - const interceptor = chainInterceptors(...interceptors) as Interceptor< - T, - CreateCacheEntryRequest, - CreateCacheEntryResponse - >; - response = await interceptor(ctx, request!, (ctx, inputReq) => { - return service.CreateCacheEntry(ctx, inputReq); - }); - } else { - response = await service.CreateCacheEntry(ctx, request!); - } - - return JSON.stringify( - CreateCacheEntryResponse.toJson(response, { - useProtoFieldName: true, - emitDefaultValues: false, - }) as string - ); -} - -async function handleCacheServiceFinalizeCacheEntryUploadJSON< - T extends TwirpContext = TwirpContext ->( - ctx: T, - service: CacheServiceTwirp, - data: Buffer, - interceptors?: Interceptor< - T, - FinalizeCacheEntryUploadRequest, - FinalizeCacheEntryUploadResponse - >[] -) { - let request: FinalizeCacheEntryUploadRequest; - let response: FinalizeCacheEntryUploadResponse; - - try { - const body = JSON.parse(data.toString() || "{}"); - request = FinalizeCacheEntryUploadRequest.fromJson(body, { - ignoreUnknownFields: true, - }); - } catch (e) { - if (e instanceof Error) { - const msg = "the json request could not be decoded"; - throw new TwirpError(TwirpErrorCode.Malformed, msg).withCause(e, true); - } - } - - if (interceptors && interceptors.length > 0) { - const interceptor = chainInterceptors(...interceptors) as Interceptor< - T, - FinalizeCacheEntryUploadRequest, - FinalizeCacheEntryUploadResponse - >; - response = await interceptor(ctx, request!, (ctx, inputReq) => { - return service.FinalizeCacheEntryUpload(ctx, inputReq); - }); - } else { - response = await service.FinalizeCacheEntryUpload(ctx, request!); - } - - return JSON.stringify( - FinalizeCacheEntryUploadResponse.toJson(response, { - useProtoFieldName: true, - emitDefaultValues: false, - }) as string - ); -} - -async function handleCacheServiceGetCacheEntryDownloadURLJSON< - T extends TwirpContext = TwirpContext ->( - ctx: T, - service: CacheServiceTwirp, - data: Buffer, - interceptors?: Interceptor< - T, - GetCacheEntryDownloadURLRequest, - GetCacheEntryDownloadURLResponse - >[] -) { - let request: GetCacheEntryDownloadURLRequest; - let response: GetCacheEntryDownloadURLResponse; - - try { - const body = JSON.parse(data.toString() || "{}"); - request = GetCacheEntryDownloadURLRequest.fromJson(body, { - ignoreUnknownFields: true, - }); - } catch (e) { - if (e instanceof Error) { - const msg = "the json request could not be decoded"; - throw new TwirpError(TwirpErrorCode.Malformed, msg).withCause(e, true); - } - } - - if (interceptors && interceptors.length > 0) { - const interceptor = chainInterceptors(...interceptors) as Interceptor< - T, - GetCacheEntryDownloadURLRequest, - GetCacheEntryDownloadURLResponse - >; - response = await interceptor(ctx, request!, (ctx, inputReq) => { - return service.GetCacheEntryDownloadURL(ctx, inputReq); - }); - } else { - response = await service.GetCacheEntryDownloadURL(ctx, request!); - } - - return JSON.stringify( - GetCacheEntryDownloadURLResponse.toJson(response, { - useProtoFieldName: true, - emitDefaultValues: false, - }) as string - ); -} -async function handleCacheServiceCreateCacheEntryProtobuf< - T extends TwirpContext = TwirpContext ->( - ctx: T, - service: CacheServiceTwirp, - data: Buffer, - interceptors?: Interceptor< - T, - CreateCacheEntryRequest, - CreateCacheEntryResponse - >[] -) { - let request: CreateCacheEntryRequest; - let response: CreateCacheEntryResponse; - - try { - request = CreateCacheEntryRequest.fromBinary(data); - } catch (e) { - if (e instanceof Error) { - const msg = "the protobuf request could not be decoded"; - throw new TwirpError(TwirpErrorCode.Malformed, msg).withCause(e, true); - } - } - - if (interceptors && interceptors.length > 0) { - const interceptor = chainInterceptors(...interceptors) as Interceptor< - T, - CreateCacheEntryRequest, - CreateCacheEntryResponse - >; - response = await interceptor(ctx, request!, (ctx, inputReq) => { - return service.CreateCacheEntry(ctx, inputReq); - }); - } else { - response = await service.CreateCacheEntry(ctx, request!); - } - - return Buffer.from(CreateCacheEntryResponse.toBinary(response)); -} - -async function handleCacheServiceFinalizeCacheEntryUploadProtobuf< - T extends TwirpContext = TwirpContext ->( - ctx: T, - service: CacheServiceTwirp, - data: Buffer, - interceptors?: Interceptor< - T, - FinalizeCacheEntryUploadRequest, - FinalizeCacheEntryUploadResponse - >[] -) { - let request: FinalizeCacheEntryUploadRequest; - let response: FinalizeCacheEntryUploadResponse; - - try { - request = FinalizeCacheEntryUploadRequest.fromBinary(data); - } catch (e) { - if (e instanceof Error) { - const msg = "the protobuf request could not be decoded"; - throw new TwirpError(TwirpErrorCode.Malformed, msg).withCause(e, true); - } - } - - if (interceptors && interceptors.length > 0) { - const interceptor = chainInterceptors(...interceptors) as Interceptor< - T, - FinalizeCacheEntryUploadRequest, - FinalizeCacheEntryUploadResponse - >; - response = await interceptor(ctx, request!, (ctx, inputReq) => { - return service.FinalizeCacheEntryUpload(ctx, inputReq); - }); - } else { - response = await service.FinalizeCacheEntryUpload(ctx, request!); - } - - return Buffer.from(FinalizeCacheEntryUploadResponse.toBinary(response)); -} - -async function handleCacheServiceGetCacheEntryDownloadURLProtobuf< - T extends TwirpContext = TwirpContext ->( - ctx: T, - service: CacheServiceTwirp, - data: Buffer, - interceptors?: Interceptor< - T, - GetCacheEntryDownloadURLRequest, - GetCacheEntryDownloadURLResponse - >[] -) { - let request: GetCacheEntryDownloadURLRequest; - let response: GetCacheEntryDownloadURLResponse; - - try { - request = GetCacheEntryDownloadURLRequest.fromBinary(data); - } catch (e) { - if (e instanceof Error) { - const msg = "the protobuf request could not be decoded"; - throw new TwirpError(TwirpErrorCode.Malformed, msg).withCause(e, true); - } - } - - if (interceptors && interceptors.length > 0) { - const interceptor = chainInterceptors(...interceptors) as Interceptor< - T, - GetCacheEntryDownloadURLRequest, - GetCacheEntryDownloadURLResponse - >; - response = await interceptor(ctx, request!, (ctx, inputReq) => { - return service.GetCacheEntryDownloadURL(ctx, inputReq); - }); - } else { - response = await service.GetCacheEntryDownloadURL(ctx, request!); - } - - return Buffer.from(GetCacheEntryDownloadURLResponse.toBinary(response)); -} diff --git a/packages/cache/src/internal/shared/cacheTwirpClient.ts b/packages/cache/src/internal/shared/cacheTwirpClient.ts index 9394a08c..69d9a8fc 100644 --- a/packages/cache/src/internal/shared/cacheTwirpClient.ts +++ b/packages/cache/src/internal/shared/cacheTwirpClient.ts @@ -5,7 +5,7 @@ import {getCacheServiceURL} from '../config' import {getRuntimeToken} from '../cacheUtils' import {BearerCredentialHandler} from '@actions/http-client/lib/auth' import {HttpClient, HttpClientResponse, HttpCodes} from '@actions/http-client' -import {CacheServiceClientJSON} from '../../generated/results/api/v1/cache.twirp' +import {CacheServiceClientJSON} from '../../generated/results/api/v1/cache.twirp-client' // The twirp http client must implement this interface interface Rpc {