From f9da1c49daccde0789ea2014f44e600313b2616d Mon Sep 17 00:00:00 2001 From: Ryan Tinianov Date: Thu, 11 Sep 2025 13:29:13 -0400 Subject: [PATCH 1/2] Simpler consensus helpers --- dist/javy-chainlink-sdk.plugin.wasm | Bin 1168648 -> 1158431 bytes package-lock.json | 1899 ++++++++++++ .../blockchain/evm/v1alpha/client_sdk_gen.ts | 1014 +++---- .../actionandtrigger/v1/basic_sdk_gen.ts | 187 +- .../basicaction/v1/basicaction_sdk_gen.ts | 105 +- .../internal/basictrigger/v1/basic_sdk_gen.ts | 116 +- .../consensus/v1alpha/consensus_sdk_gen.ts | 177 +- .../nodeaction/v1/basicaction_sdk_gen.ts | 105 +- .../networking/http/v1alpha/client_sdk_gen.ts | 105 +- .../networking/http/v1alpha/http_sdk_gen.ts | 116 +- .../scheduler/cron/v1/cron_sdk_gen.ts | 120 +- .../blockchain/evm/v1alpha/client_pb.ts | 2604 ++++++++--------- .../v1/action_and_trigger_pb.ts | 178 +- .../basicaction/v1/basic_action_pb.ts | 98 +- .../basictrigger/v1/basic_trigger_pb.ts | 106 +- .../consensus/v1alpha/consensus_pb.ts | 62 +- .../internal/importclash/p1/v1/import_pb.ts | 41 +- .../internal/importclash/p2/v1/import_pb.ts | 41 +- .../internal/importclash/v1/clash_pb.ts | 46 +- .../internal/nodeaction/v1/node_action_pb.ts | 90 +- .../confidentialhttp/v1alpha/client_pb.ts | 355 ++- .../networking/http/v1alpha/client_pb.ts | 293 +- .../networking/http/v1alpha/trigger_pb.ts | 206 +- .../scheduler/cron/v1/trigger_pb.ts | 155 +- src/generated/sdk/v1alpha/sdk_pb.ts | 1514 +++++----- .../generator/v1alpha/cre_metadata_pb.ts | 398 ++- src/generated/values/v1/values_pb.ts | 434 ++- src/generator/generate-action.ts | 6 +- src/generator/generate-sdk.ts | 7 +- src/generator/generate-trigger.ts | 11 +- src/sdk/cre/index.ts | 4 - src/sdk/engine/execute.ts | 3 +- src/sdk/runtime/errors.ts | 5 +- src/sdk/runtime/run-in-node-mode.test.ts | 145 +- src/sdk/runtime/run-in-node-mode.ts | 96 +- src/sdk/runtime/runtime.ts | 3 +- src/sdk/utils/hex-utils.ts | 2 +- src/sdk/utils/index.ts | 3 +- src/sdk/utils/send-response-value.ts | 4 +- src/sdk/utils/values/consensus-hooks.ts | 93 - src/sdk/utils/values/consensus.test.ts | 129 - src/sdk/utils/values/consensus.ts | 196 -- .../values/consensus_aggregators.test.ts | 186 ++ src/sdk/utils/values/consensus_aggregators.ts | 98 + src/sdk/utils/values/serializer_types.test.ts | 117 + src/sdk/utils/values/serializer_types.ts | 32 + src/sdk/utils/values/value.test.ts | 426 ++- src/sdk/utils/values/value.ts | 399 ++- src/workflows/hello-world/hello-world.ts | 4 +- src/workflows/http-fetch/http-fetch-hook.ts | 13 +- src/workflows/http-fetch/http-fetch.ts | 16 +- .../on-chain-write/on-chain-write.ts | 17 +- src/workflows/on-chain/on-chain.ts | 17 +- .../capability_calls_are_async/test.ts | 4 +- src/workflows/standard_tests/config/test.ts | 4 +- src/workflows/standard_tests/logging/test.ts | 4 +- .../don_runtime_in_node_mode/test.ts | 36 +- .../node_runtime_in_don_mode/test.ts | 20 +- .../successful_mode_switch/test.ts | 47 +- .../standard_tests/multiple_triggers/test.ts | 8 +- src/workflows/standard_tests/random/test.ts | 29 +- src/workflows/standard_tests/secrets/test.ts | 4 +- .../secrets_fail_in_node_mode/test.ts | 18 +- 63 files changed, 7257 insertions(+), 5514 deletions(-) create mode 100644 package-lock.json delete mode 100644 src/sdk/utils/values/consensus-hooks.ts delete mode 100644 src/sdk/utils/values/consensus.test.ts delete mode 100644 src/sdk/utils/values/consensus.ts create mode 100644 src/sdk/utils/values/consensus_aggregators.test.ts create mode 100644 src/sdk/utils/values/consensus_aggregators.ts create mode 100644 src/sdk/utils/values/serializer_types.test.ts create mode 100644 src/sdk/utils/values/serializer_types.ts diff --git a/dist/javy-chainlink-sdk.plugin.wasm b/dist/javy-chainlink-sdk.plugin.wasm index 07931902fb68d26c35b0b38140c485ceb04fdf6b..f8b3a7c16a756782e629536d0cc0076e5fd09a22 100644 GIT binary patch delta 220003 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"oWN@?|9AaulIFR1&@d43(kC6bwK~ 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 EFCP<#ZU6uP diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..822507e1 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1899 @@ +{ + "name": "cre-sdk-typescript", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "cre-sdk-typescript", + "dependencies": { + "@bufbuild/protobuf": "2.6.3", + "@bufbuild/protoc-gen-es": "2.6.3", + "@standard-schema/spec": "1.0.0", + "rxjs": "7.8.2", + "viem": "2.34.0", + "zod": "3.25.76" + }, + "devDependencies": { + "@biomejs/biome": "2.1.3", + "@bufbuild/buf": "1.56.0", + "@types/bun": "1.2.21", + "fast-glob": "3.3.3", + "ts-proto": "2.7.5", + "tsd": "^0.33.0", + "typescript": "5.9.2" + } + }, + "node_modules/@adraffy/ens-normalize": { + "version": "1.11.0", + "license": "MIT" + }, + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@biomejs/biome": { + "version": "2.1.3", + "dev": true, + "license": "MIT OR Apache-2.0", + "bin": { + "biome": "bin/biome" + }, + "engines": { + "node": ">=14.21.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/biome" + }, + "optionalDependencies": { + "@biomejs/cli-darwin-arm64": "2.1.3", + "@biomejs/cli-darwin-x64": "2.1.3", + "@biomejs/cli-linux-arm64": "2.1.3", + "@biomejs/cli-linux-arm64-musl": "2.1.3", + "@biomejs/cli-linux-x64": "2.1.3", + "@biomejs/cli-linux-x64-musl": "2.1.3", + "@biomejs/cli-win32-arm64": "2.1.3", + "@biomejs/cli-win32-x64": "2.1.3" + } + }, + "node_modules/@biomejs/cli-darwin-arm64": { + "version": "2.1.3", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@bufbuild/buf": { + "version": "1.56.0", + "dev": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "bin": { + "buf": "bin/buf", + "protoc-gen-buf-breaking": "bin/protoc-gen-buf-breaking", + "protoc-gen-buf-lint": "bin/protoc-gen-buf-lint" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@bufbuild/buf-darwin-arm64": "1.56.0", + "@bufbuild/buf-darwin-x64": "1.56.0", + "@bufbuild/buf-linux-aarch64": "1.56.0", + "@bufbuild/buf-linux-armv7": "1.56.0", + "@bufbuild/buf-linux-x64": "1.56.0", + "@bufbuild/buf-win32-arm64": "1.56.0", + "@bufbuild/buf-win32-x64": "1.56.0" + } + }, + "node_modules/@bufbuild/buf-darwin-arm64": { + "version": "1.56.0", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@bufbuild/protobuf": { + "version": "2.6.3", + "license": "(Apache-2.0 AND BSD-3-Clause)" + }, + "node_modules/@bufbuild/protoc-gen-es": { + "version": "2.6.3", + "license": "Apache-2.0", + "dependencies": { + "@bufbuild/protobuf": "2.6.3", + "@bufbuild/protoplugin": "2.6.3" + }, + "bin": { + "protoc-gen-es": "bin/protoc-gen-es" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@bufbuild/protobuf": "2.6.3" + }, + "peerDependenciesMeta": { + "@bufbuild/protobuf": { + "optional": true + } + } + }, + "node_modules/@bufbuild/protoplugin": { + "version": "2.6.3", + "license": "Apache-2.0", + "dependencies": { + "@bufbuild/protobuf": "2.6.3", + "@typescript/vfs": "^1.5.2", + "typescript": "5.4.5" + } + }, + "node_modules/@bufbuild/protoplugin/node_modules/typescript": { + "version": "5.4.5", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@noble/ciphers": { + "version": "1.3.0", + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/curves": { + "version": "1.9.6", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.8.0" + }, + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "1.8.0", + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@scure/base": { + "version": "1.2.6", + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32": { + "version": "1.7.0", + "license": "MIT", + "dependencies": { + "@noble/curves": "~1.9.0", + "@noble/hashes": "~1.8.0", + "@scure/base": "~1.2.5" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip39": { + "version": "1.6.0", + "license": "MIT", + "dependencies": { + "@noble/hashes": "~1.8.0", + "@scure/base": "~1.2.5" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@standard-schema/spec": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/@tsd/typescript": { + "version": "5.9.2", + "resolved": "https://registry.npmjs.org/@tsd/typescript/-/typescript-5.9.2.tgz", + "integrity": "sha512-mSMM0QtEPdMd+rdMDd17yCUYD4yI3pKHap89+jEZrZ3KIO5PhDofBjER0OtgHdvOXF74KMLO3fyD6k3Hz0v03A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.17" + } + }, + "node_modules/@types/bun": { + "version": "1.2.21", + "dev": true, + "license": "MIT", + "dependencies": { + "bun-types": "1.2.21" + } + }, + "node_modules/@types/eslint": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.29.0.tgz", + "integrity": "sha512-VNcvioYDH8/FxaeTKkM4/TiTwt6pBV9E3OfGmvaw8tPl0rrHCJ4Ll15HRT+pMiFAf/MLQvAzC+6RzUMEL9Ceng==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.14.1", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "19.1.8", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "csstype": "^3.0.2" + } + }, + "node_modules/@typescript/vfs": { + "version": "1.6.1", + "license": "MIT", + "dependencies": { + "debug": "^4.1.1" + }, + "peerDependencies": { + "typescript": "*" + } + }, + "node_modules/abitype": { + "version": "1.0.8", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/wevm" + }, + "peerDependencies": { + "typescript": ">=5.0.4", + "zod": "^3 >=3.22.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + }, + "zod": { + "optional": true + } + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/bun-types": { + "version": "1.2.21", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + }, + "peerDependencies": { + "@types/react": "^19" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/case-anything": { + "version": "2.1.13", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/csstype": { + "version": "3.1.3", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/debug": { + "version": "4.4.1", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", + "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", + "dev": true, + "license": "MIT", + "dependencies": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decamelize-keys/node_modules/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/detect-libc": { + "version": "1.0.3", + "dev": true, + "license": "Apache-2.0", + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dprint-node": { + "version": "1.0.8", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-libc": "^1.0.3" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/eslint-formatter-pretty": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eslint-formatter-pretty/-/eslint-formatter-pretty-4.1.0.tgz", + "integrity": "sha512-IsUTtGxF1hrH6lMWiSl1WbGaiP01eT6kzywdY1U+zLc0MP+nwEnUiS9UI8IaOTUhTeQJLlCEWIbXINBH4YJbBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint": "^7.2.13", + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "eslint-rule-docs": "^1.1.5", + "log-symbols": "^4.0.0", + "plur": "^4.0.0", + "string-width": "^4.2.0", + "supports-hyperlinks": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-rule-docs": { + "version": "1.1.235", + "resolved": "https://registry.npmjs.org/eslint-rule-docs/-/eslint-rule-docs-1.1.235.tgz", + "integrity": "sha512-+TQ+x4JdTnDoFEXXb3fDvfGOwnyNV7duH8fXWTPD1ieaBmB8omj7Gw/pMBBu4uI2uJCCU8APDaQJzWuXnTsH4A==", + "dev": true, + "license": "MIT" + }, + "node_modules/eventemitter3": { + "version": "5.0.1", + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fastq": { + "version": "1.19.1", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/irregular-plurals": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-3.5.0.tgz", + "integrity": "sha512-1ANGLZ+Nkv1ptFb2pa8oG8Lem4krflKuX/gINiHJHjJUKaJHk/SXk5x6K3J+39/p0h1RQ2saROclJJ+QLvETCQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isows": { + "version": "1.0.7", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wevm" + } + ], + "license": "MIT", + "peerDependencies": { + "ws": "*" + } + }, + "node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", + "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize": "^1.2.0", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/meow/node_modules/type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "license": "MIT" + }, + "node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ox": { + "version": "0.8.7", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wevm" + } + ], + "license": "MIT", + "dependencies": { + "@adraffy/ens-normalize": "^1.11.0", + "@noble/ciphers": "^1.3.0", + "@noble/curves": "^1.9.1", + "@noble/hashes": "^1.8.0", + "@scure/bip32": "^1.7.0", + "@scure/bip39": "^1.6.0", + "abitype": "^1.0.8", + "eventemitter3": "5.0.1" + }, + "peerDependencies": { + "typescript": ">=5.4.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/plur": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/plur/-/plur-4.0.0.tgz", + "integrity": "sha512-4UGewrYgqDFw9vV6zNV+ADmPAUAfJPKtGvb/VdpQAx25X5f3xXdGdyOEVFwkl8Hl/tl7+xbeHqSEM+D5/TirUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "irregular-plurals": "^3.2.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "dev": true, + "license": "MIT" + }, + "node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true, + "license": "ISC" + }, + "node_modules/read-pkg/node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/read-pkg/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.2", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "dev": true, + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.22", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz", + "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ts-poet": { + "version": "6.12.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "dprint-node": "^1.0.8" + } + }, + "node_modules/ts-proto": { + "version": "2.7.5", + "dev": true, + "license": "ISC", + "dependencies": { + "@bufbuild/protobuf": "^2.0.0", + "case-anything": "^2.1.13", + "ts-poet": "^6.12.0", + "ts-proto-descriptors": "2.0.0" + }, + "bin": { + "protoc-gen-ts_proto": "protoc-gen-ts_proto" + } + }, + "node_modules/ts-proto-descriptors": { + "version": "2.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "@bufbuild/protobuf": "^2.0.0" + } + }, + "node_modules/ts-proto-descriptors/node_modules/@bufbuild/protobuf": { + "version": "2.5.2", + "dev": true, + "license": "(Apache-2.0 AND BSD-3-Clause)" + }, + "node_modules/ts-proto/node_modules/@bufbuild/protobuf": { + "version": "2.5.2", + "dev": true, + "license": "(Apache-2.0 AND BSD-3-Clause)" + }, + "node_modules/tsd": { + "version": "0.33.0", + "resolved": "https://registry.npmjs.org/tsd/-/tsd-0.33.0.tgz", + "integrity": "sha512-/PQtykJFVw90QICG7zyPDMIyueOXKL7jOJVoX5pILnb3Ux+7QqynOxfVvarE+K+yi7BZyOSY4r+OZNWSWRiEwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tsd/typescript": "^5.9.2", + "eslint-formatter-pretty": "^4.1.0", + "globby": "^11.0.1", + "jest-diff": "^29.0.3", + "meow": "^9.0.0", + "path-exists": "^4.0.0", + "read-pkg-up": "^7.0.0" + }, + "bin": { + "tsd": "dist/cli.js" + }, + "engines": { + "node": ">=14.16" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "license": "0BSD" + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "5.9.2", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "6.21.0", + "dev": true, + "license": "MIT" + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/viem": { + "version": "2.34.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/wevm" + } + ], + "license": "MIT", + "dependencies": { + "@noble/curves": "1.9.6", + "@noble/hashes": "1.8.0", + "@scure/bip32": "1.7.0", + "@scure/bip39": "1.6.0", + "abitype": "1.0.8", + "isows": "1.0.7", + "ox": "0.8.7", + "ws": "8.18.3" + }, + "peerDependencies": { + "typescript": ">=5.0.4" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/ws": { + "version": "8.18.3", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/zod": { + "version": "3.25.76", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + } + } +} diff --git a/src/generated-sdk/capabilities/blockchain/evm/v1alpha/client_sdk_gen.ts b/src/generated-sdk/capabilities/blockchain/evm/v1alpha/client_sdk_gen.ts index b54bb30c..5be14683 100644 --- a/src/generated-sdk/capabilities/blockchain/evm/v1alpha/client_sdk_gen.ts +++ b/src/generated-sdk/capabilities/blockchain/evm/v1alpha/client_sdk_gen.ts @@ -1,511 +1,535 @@ -import { fromBinary, toBinary, fromJson, create } from '@bufbuild/protobuf' -import { Mode, type CapabilityResponse } from '@cre/generated/sdk/v1alpha/sdk_pb' -import { callCapability } from '@cre/sdk/utils/capabilities/call-capability' -import { CapabilityError } from '@cre/sdk/utils/capabilities/capability-error' -import { type Trigger } from '@cre/sdk/utils/triggers/trigger-interface' -import { type Any, AnySchema } from '@bufbuild/protobuf/wkt' -import { getTypeUrl } from '@cre/sdk/utils/typeurl' +import { fromBinary, toBinary, fromJson, create } from "@bufbuild/protobuf"; import { - BalanceAtReplySchema, - BalanceAtRequestSchema, - CallContractReplySchema, - CallContractRequestSchema, - EstimateGasReplySchema, - EstimateGasRequestSchema, - FilterLogTriggerRequestSchema, - FilterLogsReplySchema, - FilterLogsRequestSchema, - GetTransactionByHashReplySchema, - GetTransactionByHashRequestSchema, - GetTransactionReceiptReplySchema, - GetTransactionReceiptRequestSchema, - HeaderByNumberReplySchema, - HeaderByNumberRequestSchema, - LogSchema, - RegisterLogTrackingRequestSchema, - UnregisterLogTrackingRequestSchema, - WriteReportReplySchema, - WriteReportRequestSchema, - type BalanceAtReply, - type BalanceAtRequestJson, - type CallContractReply, - type CallContractRequestJson, - type EstimateGasReply, - type EstimateGasRequestJson, - type FilterLogTriggerRequestJson, - type FilterLogsReply, - type FilterLogsRequestJson, - type GetTransactionByHashReply, - type GetTransactionByHashRequestJson, - type GetTransactionReceiptReply, - type GetTransactionReceiptRequestJson, - type HeaderByNumberReply, - type HeaderByNumberRequestJson, - type Log, - type RegisterLogTrackingRequestJson, - type UnregisterLogTrackingRequestJson, - type WriteReportReply, - type WriteReportRequestJson, -} from '@cre/generated/capabilities/blockchain/evm/v1alpha/client_pb' -import { EmptySchema, type Empty } from '@bufbuild/protobuf/wkt' + Mode, + type CapabilityResponse, +} from "@cre/generated/sdk/v1alpha/sdk_pb"; +import { callCapability } from "@cre/sdk/utils/capabilities/call-capability"; +import { CapabilityError } from "@cre/sdk/utils/capabilities/capability-error"; +import { type Trigger } from "@cre/sdk/utils/triggers/trigger-interface"; +import { type Any, AnySchema } from "@bufbuild/protobuf/wkt"; +import { getTypeUrl } from "@cre/sdk/utils/typeurl"; +import { + BalanceAtReplySchema, + BalanceAtRequestSchema, + CallContractReplySchema, + CallContractRequestSchema, + EstimateGasReplySchema, + EstimateGasRequestSchema, + FilterLogTriggerRequestSchema, + FilterLogsReplySchema, + FilterLogsRequestSchema, + GetTransactionByHashReplySchema, + GetTransactionByHashRequestSchema, + GetTransactionReceiptReplySchema, + GetTransactionReceiptRequestSchema, + HeaderByNumberReplySchema, + HeaderByNumberRequestSchema, + LogSchema, + RegisterLogTrackingRequestSchema, + UnregisterLogTrackingRequestSchema, + WriteReportReplySchema, + WriteReportRequestSchema, + type BalanceAtReply, + type BalanceAtRequest, + type BalanceAtRequestJson, + type CallContractReply, + type CallContractRequest, + type CallContractRequestJson, + type EstimateGasReply, + type EstimateGasRequest, + type EstimateGasRequestJson, + type FilterLogTriggerRequest, + type FilterLogTriggerRequestJson, + type FilterLogsReply, + type FilterLogsRequest, + type FilterLogsRequestJson, + type GetTransactionByHashReply, + type GetTransactionByHashRequest, + type GetTransactionByHashRequestJson, + type GetTransactionReceiptReply, + type GetTransactionReceiptRequest, + type GetTransactionReceiptRequestJson, + type HeaderByNumberReply, + type HeaderByNumberRequest, + type HeaderByNumberRequestJson, + type Log, + type RegisterLogTrackingRequest, + type RegisterLogTrackingRequestJson, + type UnregisterLogTrackingRequest, + type UnregisterLogTrackingRequestJson, + type WriteReportReply, + type WriteReportRequest, + type WriteReportRequestJson, +} from "@cre/generated/capabilities/blockchain/evm/v1alpha/client_pb"; +import { + EmptySchema, + type Empty, +} from "@bufbuild/protobuf/wkt"; /** * Client Capability - * + * * Capability ID: evm@1.0.0 * Default Mode: Mode.DON * Capability Name: evm * Capability Version: 1.0.0 */ export class ClientCapability { - /** The capability ID for this service */ - static readonly CAPABILITY_ID = 'evm@1.0.0' - - /** The default execution mode for this capability */ - static readonly DEFAULT_MODE = Mode.DON - - static readonly CAPABILITY_NAME = 'evm' - static readonly CAPABILITY_VERSION = '1.0.0' - - /** Available chain selectors */ - static readonly SUPPORTED_CHAINS = { - 'avalanche-mainnet': 6433500567565415381n, - 'avalanche-testnet-fuji': 14767482510784806043n, - 'binance_smart_chain-mainnet-opbnb-1': 465944652040885897n, - 'binance_smart_chain-testnet-opbnb-1': 13274425992935471758n, - 'ethereum-mainnet': 5009297550715157269n, - 'ethereum-mainnet-arbitrum-1': 4949039107694359620n, - 'ethereum-mainnet-optimism-1': 3734403246176062136n, - 'ethereum-testnet-sepolia': 16015286601757825753n, - 'ethereum-testnet-sepolia-arbitrum-1': 3478487238524512106n, - 'ethereum-testnet-sepolia-base-1': 10344971235874465080n, - 'ethereum-testnet-sepolia-optimism-1': 5224473277236331295n, - 'polygon-mainnet': 4051577828743386545n, - 'polygon-testnet-amoy': 16281711391670634445n, - } as const - - constructor( - private readonly mode: Mode = ClientCapability.DEFAULT_MODE, - private readonly chainSelector?: bigint, - ) {} - - async callContract(input: CallContractRequestJson): Promise { - const payload = { - typeUrl: getTypeUrl(CallContractRequestSchema), - value: toBinary(CallContractRequestSchema, fromJson(CallContractRequestSchema, input)), - } - // Include chainSelector in capability ID for routing when specified - const capabilityId = this.chainSelector - ? `${ClientCapability.CAPABILITY_NAME}:ChainSelector:${this.chainSelector}@${ClientCapability.CAPABILITY_VERSION}` - : ClientCapability.CAPABILITY_ID - - return callCapability({ - capabilityId, - method: 'CallContract', - mode: this.mode, - payload, - }).then((capabilityResponse: CapabilityResponse) => { - if (capabilityResponse.response.case === 'error') { - throw new CapabilityError(capabilityResponse.response.value, { - capabilityId, - method: 'CallContract', - mode: this.mode, - }) - } - - if (capabilityResponse.response.case !== 'payload') { - throw new CapabilityError('No payload in response', { - capabilityId, - method: 'CallContract', - mode: this.mode, - }) - } - - return fromBinary(CallContractReplySchema, capabilityResponse.response.value.value) - }) - } - - async filterLogs(input: FilterLogsRequestJson): Promise { - const payload = { - typeUrl: getTypeUrl(FilterLogsRequestSchema), - value: toBinary(FilterLogsRequestSchema, fromJson(FilterLogsRequestSchema, input)), - } - // Include chainSelector in capability ID for routing when specified - const capabilityId = this.chainSelector - ? `${ClientCapability.CAPABILITY_NAME}:ChainSelector:${this.chainSelector}@${ClientCapability.CAPABILITY_VERSION}` - : ClientCapability.CAPABILITY_ID - - return callCapability({ - capabilityId, - method: 'FilterLogs', - mode: this.mode, - payload, - }).then((capabilityResponse: CapabilityResponse) => { - if (capabilityResponse.response.case === 'error') { - throw new CapabilityError(capabilityResponse.response.value, { - capabilityId, - method: 'FilterLogs', - mode: this.mode, - }) - } - - if (capabilityResponse.response.case !== 'payload') { - throw new CapabilityError('No payload in response', { - capabilityId, - method: 'FilterLogs', - mode: this.mode, - }) - } - - return fromBinary(FilterLogsReplySchema, capabilityResponse.response.value.value) - }) - } - - async balanceAt(input: BalanceAtRequestJson): Promise { - const payload = { - typeUrl: getTypeUrl(BalanceAtRequestSchema), - value: toBinary(BalanceAtRequestSchema, fromJson(BalanceAtRequestSchema, input)), - } - // Include chainSelector in capability ID for routing when specified - const capabilityId = this.chainSelector - ? `${ClientCapability.CAPABILITY_NAME}:ChainSelector:${this.chainSelector}@${ClientCapability.CAPABILITY_VERSION}` - : ClientCapability.CAPABILITY_ID - - return callCapability({ - capabilityId, - method: 'BalanceAt', - mode: this.mode, - payload, - }).then((capabilityResponse: CapabilityResponse) => { - if (capabilityResponse.response.case === 'error') { - throw new CapabilityError(capabilityResponse.response.value, { - capabilityId, - method: 'BalanceAt', - mode: this.mode, - }) - } - - if (capabilityResponse.response.case !== 'payload') { - throw new CapabilityError('No payload in response', { - capabilityId, - method: 'BalanceAt', - mode: this.mode, - }) - } - - return fromBinary(BalanceAtReplySchema, capabilityResponse.response.value.value) - }) - } - - async estimateGas(input: EstimateGasRequestJson): Promise { - const payload = { - typeUrl: getTypeUrl(EstimateGasRequestSchema), - value: toBinary(EstimateGasRequestSchema, fromJson(EstimateGasRequestSchema, input)), - } - // Include chainSelector in capability ID for routing when specified - const capabilityId = this.chainSelector - ? `${ClientCapability.CAPABILITY_NAME}:ChainSelector:${this.chainSelector}@${ClientCapability.CAPABILITY_VERSION}` - : ClientCapability.CAPABILITY_ID - - return callCapability({ - capabilityId, - method: 'EstimateGas', - mode: this.mode, - payload, - }).then((capabilityResponse: CapabilityResponse) => { - if (capabilityResponse.response.case === 'error') { - throw new CapabilityError(capabilityResponse.response.value, { - capabilityId, - method: 'EstimateGas', - mode: this.mode, - }) - } - - if (capabilityResponse.response.case !== 'payload') { - throw new CapabilityError('No payload in response', { - capabilityId, - method: 'EstimateGas', - mode: this.mode, - }) - } - - return fromBinary(EstimateGasReplySchema, capabilityResponse.response.value.value) - }) - } - - async getTransactionByHash( - input: GetTransactionByHashRequestJson, - ): Promise { - const payload = { - typeUrl: getTypeUrl(GetTransactionByHashRequestSchema), - value: toBinary( - GetTransactionByHashRequestSchema, - fromJson(GetTransactionByHashRequestSchema, input), - ), - } - // Include chainSelector in capability ID for routing when specified - const capabilityId = this.chainSelector - ? `${ClientCapability.CAPABILITY_NAME}:ChainSelector:${this.chainSelector}@${ClientCapability.CAPABILITY_VERSION}` - : ClientCapability.CAPABILITY_ID - - return callCapability({ - capabilityId, - method: 'GetTransactionByHash', - mode: this.mode, - payload, - }).then((capabilityResponse: CapabilityResponse) => { - if (capabilityResponse.response.case === 'error') { - throw new CapabilityError(capabilityResponse.response.value, { - capabilityId, - method: 'GetTransactionByHash', - mode: this.mode, - }) - } - - if (capabilityResponse.response.case !== 'payload') { - throw new CapabilityError('No payload in response', { - capabilityId, - method: 'GetTransactionByHash', - mode: this.mode, - }) - } - - return fromBinary(GetTransactionByHashReplySchema, capabilityResponse.response.value.value) - }) - } - - async getTransactionReceipt( - input: GetTransactionReceiptRequestJson, - ): Promise { - const payload = { - typeUrl: getTypeUrl(GetTransactionReceiptRequestSchema), - value: toBinary( - GetTransactionReceiptRequestSchema, - fromJson(GetTransactionReceiptRequestSchema, input), - ), - } - // Include chainSelector in capability ID for routing when specified - const capabilityId = this.chainSelector - ? `${ClientCapability.CAPABILITY_NAME}:ChainSelector:${this.chainSelector}@${ClientCapability.CAPABILITY_VERSION}` - : ClientCapability.CAPABILITY_ID - - return callCapability({ - capabilityId, - method: 'GetTransactionReceipt', - mode: this.mode, - payload, - }).then((capabilityResponse: CapabilityResponse) => { - if (capabilityResponse.response.case === 'error') { - throw new CapabilityError(capabilityResponse.response.value, { - capabilityId, - method: 'GetTransactionReceipt', - mode: this.mode, - }) - } - - if (capabilityResponse.response.case !== 'payload') { - throw new CapabilityError('No payload in response', { - capabilityId, - method: 'GetTransactionReceipt', - mode: this.mode, - }) - } - - return fromBinary(GetTransactionReceiptReplySchema, capabilityResponse.response.value.value) - }) - } - - async headerByNumber(input: HeaderByNumberRequestJson): Promise { - const payload = { - typeUrl: getTypeUrl(HeaderByNumberRequestSchema), - value: toBinary(HeaderByNumberRequestSchema, fromJson(HeaderByNumberRequestSchema, input)), - } - // Include chainSelector in capability ID for routing when specified - const capabilityId = this.chainSelector - ? `${ClientCapability.CAPABILITY_NAME}:ChainSelector:${this.chainSelector}@${ClientCapability.CAPABILITY_VERSION}` - : ClientCapability.CAPABILITY_ID - - return callCapability({ - capabilityId, - method: 'HeaderByNumber', - mode: this.mode, - payload, - }).then((capabilityResponse: CapabilityResponse) => { - if (capabilityResponse.response.case === 'error') { - throw new CapabilityError(capabilityResponse.response.value, { - capabilityId, - method: 'HeaderByNumber', - mode: this.mode, - }) - } - - if (capabilityResponse.response.case !== 'payload') { - throw new CapabilityError('No payload in response', { - capabilityId, - method: 'HeaderByNumber', - mode: this.mode, - }) - } - - return fromBinary(HeaderByNumberReplySchema, capabilityResponse.response.value.value) - }) - } - - async registerLogTracking(input: RegisterLogTrackingRequestJson): Promise { - const payload = { - typeUrl: getTypeUrl(RegisterLogTrackingRequestSchema), - value: toBinary( - RegisterLogTrackingRequestSchema, - fromJson(RegisterLogTrackingRequestSchema, input), - ), - } - // Include chainSelector in capability ID for routing when specified - const capabilityId = this.chainSelector - ? `${ClientCapability.CAPABILITY_NAME}:ChainSelector:${this.chainSelector}@${ClientCapability.CAPABILITY_VERSION}` - : ClientCapability.CAPABILITY_ID - - return callCapability({ - capabilityId, - method: 'RegisterLogTracking', - mode: this.mode, - payload, - }).then((capabilityResponse: CapabilityResponse) => { - if (capabilityResponse.response.case === 'error') { - throw new CapabilityError(capabilityResponse.response.value, { - capabilityId, - method: 'RegisterLogTracking', - mode: this.mode, - }) - } - - if (capabilityResponse.response.case !== 'payload') { - throw new CapabilityError('No payload in response', { - capabilityId, - method: 'RegisterLogTracking', - mode: this.mode, - }) - } - - return fromBinary(EmptySchema, capabilityResponse.response.value.value) - }) - } - - async unregisterLogTracking(input: UnregisterLogTrackingRequestJson): Promise { - const payload = { - typeUrl: getTypeUrl(UnregisterLogTrackingRequestSchema), - value: toBinary( - UnregisterLogTrackingRequestSchema, - fromJson(UnregisterLogTrackingRequestSchema, input), - ), - } - // Include chainSelector in capability ID for routing when specified - const capabilityId = this.chainSelector - ? `${ClientCapability.CAPABILITY_NAME}:ChainSelector:${this.chainSelector}@${ClientCapability.CAPABILITY_VERSION}` - : ClientCapability.CAPABILITY_ID - - return callCapability({ - capabilityId, - method: 'UnregisterLogTracking', - mode: this.mode, - payload, - }).then((capabilityResponse: CapabilityResponse) => { - if (capabilityResponse.response.case === 'error') { - throw new CapabilityError(capabilityResponse.response.value, { - capabilityId, - method: 'UnregisterLogTracking', - mode: this.mode, - }) - } - - if (capabilityResponse.response.case !== 'payload') { - throw new CapabilityError('No payload in response', { - capabilityId, - method: 'UnregisterLogTracking', - mode: this.mode, - }) - } - - return fromBinary(EmptySchema, capabilityResponse.response.value.value) - }) - } - - logTrigger(config: FilterLogTriggerRequestJson): ClientLogTrigger { - return new ClientLogTrigger(this.mode, config, ClientCapability.CAPABILITY_ID, 'LogTrigger') - } - - async writeReport(input: WriteReportRequestJson): Promise { - const payload = { - typeUrl: getTypeUrl(WriteReportRequestSchema), - value: toBinary(WriteReportRequestSchema, fromJson(WriteReportRequestSchema, input)), - } - // Include chainSelector in capability ID for routing when specified - const capabilityId = this.chainSelector - ? `${ClientCapability.CAPABILITY_NAME}:ChainSelector:${this.chainSelector}@${ClientCapability.CAPABILITY_VERSION}` - : ClientCapability.CAPABILITY_ID - - return callCapability({ - capabilityId, - method: 'WriteReport', - mode: this.mode, - payload, - }).then((capabilityResponse: CapabilityResponse) => { - if (capabilityResponse.response.case === 'error') { - throw new CapabilityError(capabilityResponse.response.value, { - capabilityId, - method: 'WriteReport', - mode: this.mode, - }) - } - - if (capabilityResponse.response.case !== 'payload') { - throw new CapabilityError('No payload in response', { - capabilityId, - method: 'WriteReport', - mode: this.mode, - }) - } - - return fromBinary(WriteReportReplySchema, capabilityResponse.response.value.value) - }) - } + /** The capability ID for this service */ + static readonly CAPABILITY_ID = "evm@1.0.0"; + + /** The default execution mode for this capability */ + static readonly DEFAULT_MODE = Mode.DON; + + static readonly CAPABILITY_NAME = "evm"; + static readonly CAPABILITY_VERSION = "1.0.0"; + + /** Available chain selectors */ + static readonly SUPPORTED_CHAINS = { + "avalanche-mainnet": 6433500567565415381n, + "avalanche-testnet-fuji": 14767482510784806043n, + "binance_smart_chain-mainnet-opbnb-1": 465944652040885897n, + "binance_smart_chain-testnet-opbnb-1": 13274425992935471758n, + "ethereum-mainnet": 5009297550715157269n, + "ethereum-mainnet-arbitrum-1": 4949039107694359620n, + "ethereum-mainnet-optimism-1": 3734403246176062136n, + "ethereum-testnet-sepolia": 16015286601757825753n, + "ethereum-testnet-sepolia-arbitrum-1": 3478487238524512106n, + "ethereum-testnet-sepolia-base-1": 10344971235874465080n, + "ethereum-testnet-sepolia-optimism-1": 5224473277236331295n, + "polygon-mainnet": 4051577828743386545n, + "polygon-testnet-amoy": 16281711391670634445n + } as const; + + constructor( + private readonly mode: Mode = ClientCapability.DEFAULT_MODE, + private readonly chainSelector?: bigint + ) {} + + async callContract(input: CallContractRequest | CallContractRequestJson): Promise { + // biome-ignore lint/suspicious/noExplicitAny: Needed for runtime type checking of protocol buffer messages + const value = (input as any).$typeName ? input as CallContractRequest : fromJson(CallContractRequestSchema, input as CallContractRequestJson) + const payload = { + typeUrl: getTypeUrl(CallContractRequestSchema), + value: toBinary(CallContractRequestSchema, value), + }; + // Include chainSelector in capability ID for routing when specified + const capabilityId = this.chainSelector + ? `${ClientCapability.CAPABILITY_NAME}:ChainSelector:${this.chainSelector}@${ClientCapability.CAPABILITY_VERSION}` + : ClientCapability.CAPABILITY_ID; + + return callCapability({ + capabilityId, + method: "CallContract", + mode: this.mode, + payload, + }).then((capabilityResponse: CapabilityResponse) => { + if (capabilityResponse.response.case === "error") { + throw new CapabilityError(capabilityResponse.response.value, { + capabilityId, + method: "CallContract", + mode: this.mode, + }); + } + + if (capabilityResponse.response.case !== "payload") { + throw new CapabilityError("No payload in response", { + capabilityId, + method: "CallContract", + mode: this.mode, + }); + } + + return fromBinary(CallContractReplySchema, capabilityResponse.response.value.value); + }); + } + + async filterLogs(input: FilterLogsRequest | FilterLogsRequestJson): Promise { + // biome-ignore lint/suspicious/noExplicitAny: Needed for runtime type checking of protocol buffer messages + const value = (input as any).$typeName ? input as FilterLogsRequest : fromJson(FilterLogsRequestSchema, input as FilterLogsRequestJson) + const payload = { + typeUrl: getTypeUrl(FilterLogsRequestSchema), + value: toBinary(FilterLogsRequestSchema, value), + }; + // Include chainSelector in capability ID for routing when specified + const capabilityId = this.chainSelector + ? `${ClientCapability.CAPABILITY_NAME}:ChainSelector:${this.chainSelector}@${ClientCapability.CAPABILITY_VERSION}` + : ClientCapability.CAPABILITY_ID; + + return callCapability({ + capabilityId, + method: "FilterLogs", + mode: this.mode, + payload, + }).then((capabilityResponse: CapabilityResponse) => { + if (capabilityResponse.response.case === "error") { + throw new CapabilityError(capabilityResponse.response.value, { + capabilityId, + method: "FilterLogs", + mode: this.mode, + }); + } + + if (capabilityResponse.response.case !== "payload") { + throw new CapabilityError("No payload in response", { + capabilityId, + method: "FilterLogs", + mode: this.mode, + }); + } + + return fromBinary(FilterLogsReplySchema, capabilityResponse.response.value.value); + }); + } + + async balanceAt(input: BalanceAtRequest | BalanceAtRequestJson): Promise { + // biome-ignore lint/suspicious/noExplicitAny: Needed for runtime type checking of protocol buffer messages + const value = (input as any).$typeName ? input as BalanceAtRequest : fromJson(BalanceAtRequestSchema, input as BalanceAtRequestJson) + const payload = { + typeUrl: getTypeUrl(BalanceAtRequestSchema), + value: toBinary(BalanceAtRequestSchema, value), + }; + // Include chainSelector in capability ID for routing when specified + const capabilityId = this.chainSelector + ? `${ClientCapability.CAPABILITY_NAME}:ChainSelector:${this.chainSelector}@${ClientCapability.CAPABILITY_VERSION}` + : ClientCapability.CAPABILITY_ID; + + return callCapability({ + capabilityId, + method: "BalanceAt", + mode: this.mode, + payload, + }).then((capabilityResponse: CapabilityResponse) => { + if (capabilityResponse.response.case === "error") { + throw new CapabilityError(capabilityResponse.response.value, { + capabilityId, + method: "BalanceAt", + mode: this.mode, + }); + } + + if (capabilityResponse.response.case !== "payload") { + throw new CapabilityError("No payload in response", { + capabilityId, + method: "BalanceAt", + mode: this.mode, + }); + } + + return fromBinary(BalanceAtReplySchema, capabilityResponse.response.value.value); + }); + } + + async estimateGas(input: EstimateGasRequest | EstimateGasRequestJson): Promise { + // biome-ignore lint/suspicious/noExplicitAny: Needed for runtime type checking of protocol buffer messages + const value = (input as any).$typeName ? input as EstimateGasRequest : fromJson(EstimateGasRequestSchema, input as EstimateGasRequestJson) + const payload = { + typeUrl: getTypeUrl(EstimateGasRequestSchema), + value: toBinary(EstimateGasRequestSchema, value), + }; + // Include chainSelector in capability ID for routing when specified + const capabilityId = this.chainSelector + ? `${ClientCapability.CAPABILITY_NAME}:ChainSelector:${this.chainSelector}@${ClientCapability.CAPABILITY_VERSION}` + : ClientCapability.CAPABILITY_ID; + + return callCapability({ + capabilityId, + method: "EstimateGas", + mode: this.mode, + payload, + }).then((capabilityResponse: CapabilityResponse) => { + if (capabilityResponse.response.case === "error") { + throw new CapabilityError(capabilityResponse.response.value, { + capabilityId, + method: "EstimateGas", + mode: this.mode, + }); + } + + if (capabilityResponse.response.case !== "payload") { + throw new CapabilityError("No payload in response", { + capabilityId, + method: "EstimateGas", + mode: this.mode, + }); + } + + return fromBinary(EstimateGasReplySchema, capabilityResponse.response.value.value); + }); + } + + async getTransactionByHash(input: GetTransactionByHashRequest | GetTransactionByHashRequestJson): Promise { + // biome-ignore lint/suspicious/noExplicitAny: Needed for runtime type checking of protocol buffer messages + const value = (input as any).$typeName ? input as GetTransactionByHashRequest : fromJson(GetTransactionByHashRequestSchema, input as GetTransactionByHashRequestJson) + const payload = { + typeUrl: getTypeUrl(GetTransactionByHashRequestSchema), + value: toBinary(GetTransactionByHashRequestSchema, value), + }; + // Include chainSelector in capability ID for routing when specified + const capabilityId = this.chainSelector + ? `${ClientCapability.CAPABILITY_NAME}:ChainSelector:${this.chainSelector}@${ClientCapability.CAPABILITY_VERSION}` + : ClientCapability.CAPABILITY_ID; + + return callCapability({ + capabilityId, + method: "GetTransactionByHash", + mode: this.mode, + payload, + }).then((capabilityResponse: CapabilityResponse) => { + if (capabilityResponse.response.case === "error") { + throw new CapabilityError(capabilityResponse.response.value, { + capabilityId, + method: "GetTransactionByHash", + mode: this.mode, + }); + } + + if (capabilityResponse.response.case !== "payload") { + throw new CapabilityError("No payload in response", { + capabilityId, + method: "GetTransactionByHash", + mode: this.mode, + }); + } + + return fromBinary(GetTransactionByHashReplySchema, capabilityResponse.response.value.value); + }); + } + + async getTransactionReceipt(input: GetTransactionReceiptRequest | GetTransactionReceiptRequestJson): Promise { + // biome-ignore lint/suspicious/noExplicitAny: Needed for runtime type checking of protocol buffer messages + const value = (input as any).$typeName ? input as GetTransactionReceiptRequest : fromJson(GetTransactionReceiptRequestSchema, input as GetTransactionReceiptRequestJson) + const payload = { + typeUrl: getTypeUrl(GetTransactionReceiptRequestSchema), + value: toBinary(GetTransactionReceiptRequestSchema, value), + }; + // Include chainSelector in capability ID for routing when specified + const capabilityId = this.chainSelector + ? `${ClientCapability.CAPABILITY_NAME}:ChainSelector:${this.chainSelector}@${ClientCapability.CAPABILITY_VERSION}` + : ClientCapability.CAPABILITY_ID; + + return callCapability({ + capabilityId, + method: "GetTransactionReceipt", + mode: this.mode, + payload, + }).then((capabilityResponse: CapabilityResponse) => { + if (capabilityResponse.response.case === "error") { + throw new CapabilityError(capabilityResponse.response.value, { + capabilityId, + method: "GetTransactionReceipt", + mode: this.mode, + }); + } + + if (capabilityResponse.response.case !== "payload") { + throw new CapabilityError("No payload in response", { + capabilityId, + method: "GetTransactionReceipt", + mode: this.mode, + }); + } + + return fromBinary(GetTransactionReceiptReplySchema, capabilityResponse.response.value.value); + }); + } + + async headerByNumber(input: HeaderByNumberRequest | HeaderByNumberRequestJson): Promise { + // biome-ignore lint/suspicious/noExplicitAny: Needed for runtime type checking of protocol buffer messages + const value = (input as any).$typeName ? input as HeaderByNumberRequest : fromJson(HeaderByNumberRequestSchema, input as HeaderByNumberRequestJson) + const payload = { + typeUrl: getTypeUrl(HeaderByNumberRequestSchema), + value: toBinary(HeaderByNumberRequestSchema, value), + }; + // Include chainSelector in capability ID for routing when specified + const capabilityId = this.chainSelector + ? `${ClientCapability.CAPABILITY_NAME}:ChainSelector:${this.chainSelector}@${ClientCapability.CAPABILITY_VERSION}` + : ClientCapability.CAPABILITY_ID; + + return callCapability({ + capabilityId, + method: "HeaderByNumber", + mode: this.mode, + payload, + }).then((capabilityResponse: CapabilityResponse) => { + if (capabilityResponse.response.case === "error") { + throw new CapabilityError(capabilityResponse.response.value, { + capabilityId, + method: "HeaderByNumber", + mode: this.mode, + }); + } + + if (capabilityResponse.response.case !== "payload") { + throw new CapabilityError("No payload in response", { + capabilityId, + method: "HeaderByNumber", + mode: this.mode, + }); + } + + return fromBinary(HeaderByNumberReplySchema, capabilityResponse.response.value.value); + }); + } + + async registerLogTracking(input: RegisterLogTrackingRequest | RegisterLogTrackingRequestJson): Promise { + // biome-ignore lint/suspicious/noExplicitAny: Needed for runtime type checking of protocol buffer messages + const value = (input as any).$typeName ? input as RegisterLogTrackingRequest : fromJson(RegisterLogTrackingRequestSchema, input as RegisterLogTrackingRequestJson) + const payload = { + typeUrl: getTypeUrl(RegisterLogTrackingRequestSchema), + value: toBinary(RegisterLogTrackingRequestSchema, value), + }; + // Include chainSelector in capability ID for routing when specified + const capabilityId = this.chainSelector + ? `${ClientCapability.CAPABILITY_NAME}:ChainSelector:${this.chainSelector}@${ClientCapability.CAPABILITY_VERSION}` + : ClientCapability.CAPABILITY_ID; + + return callCapability({ + capabilityId, + method: "RegisterLogTracking", + mode: this.mode, + payload, + }).then((capabilityResponse: CapabilityResponse) => { + if (capabilityResponse.response.case === "error") { + throw new CapabilityError(capabilityResponse.response.value, { + capabilityId, + method: "RegisterLogTracking", + mode: this.mode, + }); + } + + if (capabilityResponse.response.case !== "payload") { + throw new CapabilityError("No payload in response", { + capabilityId, + method: "RegisterLogTracking", + mode: this.mode, + }); + } + + return fromBinary(EmptySchema, capabilityResponse.response.value.value); + }); + } + + async unregisterLogTracking(input: UnregisterLogTrackingRequest | UnregisterLogTrackingRequestJson): Promise { + // biome-ignore lint/suspicious/noExplicitAny: Needed for runtime type checking of protocol buffer messages + const value = (input as any).$typeName ? input as UnregisterLogTrackingRequest : fromJson(UnregisterLogTrackingRequestSchema, input as UnregisterLogTrackingRequestJson) + const payload = { + typeUrl: getTypeUrl(UnregisterLogTrackingRequestSchema), + value: toBinary(UnregisterLogTrackingRequestSchema, value), + }; + // Include chainSelector in capability ID for routing when specified + const capabilityId = this.chainSelector + ? `${ClientCapability.CAPABILITY_NAME}:ChainSelector:${this.chainSelector}@${ClientCapability.CAPABILITY_VERSION}` + : ClientCapability.CAPABILITY_ID; + + return callCapability({ + capabilityId, + method: "UnregisterLogTracking", + mode: this.mode, + payload, + }).then((capabilityResponse: CapabilityResponse) => { + if (capabilityResponse.response.case === "error") { + throw new CapabilityError(capabilityResponse.response.value, { + capabilityId, + method: "UnregisterLogTracking", + mode: this.mode, + }); + } + + if (capabilityResponse.response.case !== "payload") { + throw new CapabilityError("No payload in response", { + capabilityId, + method: "UnregisterLogTracking", + mode: this.mode, + }); + } + + return fromBinary(EmptySchema, capabilityResponse.response.value.value); + }); + } + + logTrigger(config: FilterLogTriggerRequestJson): ClientLogTrigger { + return new ClientLogTrigger(this.mode, config, ClientCapability.CAPABILITY_ID, "LogTrigger"); + } + + async writeReport(input: WriteReportRequest | WriteReportRequestJson): Promise { + // biome-ignore lint/suspicious/noExplicitAny: Needed for runtime type checking of protocol buffer messages + const value = (input as any).$typeName ? input as WriteReportRequest : fromJson(WriteReportRequestSchema, input as WriteReportRequestJson) + const payload = { + typeUrl: getTypeUrl(WriteReportRequestSchema), + value: toBinary(WriteReportRequestSchema, value), + }; + // Include chainSelector in capability ID for routing when specified + const capabilityId = this.chainSelector + ? `${ClientCapability.CAPABILITY_NAME}:ChainSelector:${this.chainSelector}@${ClientCapability.CAPABILITY_VERSION}` + : ClientCapability.CAPABILITY_ID; + + return callCapability({ + capabilityId, + method: "WriteReport", + mode: this.mode, + payload, + }).then((capabilityResponse: CapabilityResponse) => { + if (capabilityResponse.response.case === "error") { + throw new CapabilityError(capabilityResponse.response.value, { + capabilityId, + method: "WriteReport", + mode: this.mode, + }); + } + + if (capabilityResponse.response.case !== "payload") { + throw new CapabilityError("No payload in response", { + capabilityId, + method: "WriteReport", + mode: this.mode, + }); + } + + return fromBinary(WriteReportReplySchema, capabilityResponse.response.value.value); + }); + } } /** * Trigger implementation for LogTrigger */ class ClientLogTrigger implements Trigger { - constructor( - public readonly mode: Mode, - public readonly config: FilterLogTriggerRequestJson, - private readonly _capabilityId: string, - private readonly _method: string, - ) {} - - capabilityId(): string { - return this._capabilityId - } - - method(): string { - return this._method - } - - outputSchema() { - return LogSchema - } - - configAsAny(): Any { - const configMessage = fromJson(FilterLogTriggerRequestSchema, this.config) - return create(AnySchema, { - typeUrl: getTypeUrl(FilterLogTriggerRequestSchema), - value: toBinary(FilterLogTriggerRequestSchema, configMessage), - }) - } - - /** - * Transform the raw trigger output - override this method if needed - * Default implementation returns the raw output unchanged - */ - adapt(rawOutput: Log): Log { - return rawOutput - } -} + public readonly config: FilterLogTriggerRequest + constructor( + public readonly mode: Mode, + config: FilterLogTriggerRequest | FilterLogTriggerRequestJson, + private readonly _capabilityId: string, + private readonly _method: string + ) { + // biome-ignore lint/suspicious/noExplicitAny: Needed for runtime type checking of protocol buffer messages + this.config = (config as any).$typeName ? config as FilterLogTriggerRequest : fromJson(FilterLogTriggerRequestSchema, config as FilterLogTriggerRequestJson) + } + + capabilityId(): string { + return this._capabilityId; + } + + method(): string { + return this._method; + } + + outputSchema() { + return LogSchema; + } + + configAsAny(): Any { + return create(AnySchema, { + typeUrl: getTypeUrl(FilterLogTriggerRequestSchema), + value: toBinary(FilterLogTriggerRequestSchema, this.config), + }); + } + + /** + * Transform the raw trigger output - override this method if needed + * Default implementation returns the raw output unchanged + */ + adapt(rawOutput: Log): Log { + return rawOutput; + } +} \ No newline at end of file diff --git a/src/generated-sdk/capabilities/internal/actionandtrigger/v1/basic_sdk_gen.ts b/src/generated-sdk/capabilities/internal/actionandtrigger/v1/basic_sdk_gen.ts index bae9bff1..9120ebd8 100644 --- a/src/generated-sdk/capabilities/internal/actionandtrigger/v1/basic_sdk_gen.ts +++ b/src/generated-sdk/capabilities/internal/actionandtrigger/v1/basic_sdk_gen.ts @@ -1,115 +1,128 @@ -import { fromBinary, toBinary, fromJson, create } from '@bufbuild/protobuf' -import { Mode, type CapabilityResponse } from '@cre/generated/sdk/v1alpha/sdk_pb' -import { callCapability } from '@cre/sdk/utils/capabilities/call-capability' -import { CapabilityError } from '@cre/sdk/utils/capabilities/capability-error' -import { type Trigger } from '@cre/sdk/utils/triggers/trigger-interface' -import { type Any, AnySchema } from '@bufbuild/protobuf/wkt' -import { getTypeUrl } from '@cre/sdk/utils/typeurl' +import { fromBinary, toBinary, fromJson, create } from "@bufbuild/protobuf"; import { - ConfigSchema, - InputSchema, - OutputSchema, - TriggerEventSchema, - type ConfigJson, - type InputJson, - type Output, - type TriggerEvent, -} from '@cre/generated/capabilities/internal/actionandtrigger/v1/action_and_trigger_pb' + Mode, + type CapabilityResponse, +} from "@cre/generated/sdk/v1alpha/sdk_pb"; +import { callCapability } from "@cre/sdk/utils/capabilities/call-capability"; +import { CapabilityError } from "@cre/sdk/utils/capabilities/capability-error"; +import { type Trigger } from "@cre/sdk/utils/triggers/trigger-interface"; +import { type Any, AnySchema } from "@bufbuild/protobuf/wkt"; +import { getTypeUrl } from "@cre/sdk/utils/typeurl"; +import { + ConfigSchema, + InputSchema, + OutputSchema, + TriggerEventSchema, + type Config, + type ConfigJson, + type Input, + type InputJson, + type Output, + type TriggerEvent, +} from "@cre/generated/capabilities/internal/actionandtrigger/v1/action_and_trigger_pb"; /** * Basic Capability - * + * * Capability ID: basic-test-action-trigger@1.0.0 * Default Mode: Mode.DON * Capability Name: basic-test-action-trigger * Capability Version: 1.0.0 */ export class BasicCapability { - /** The capability ID for this service */ - static readonly CAPABILITY_ID = 'basic-test-action-trigger@1.0.0' - - /** The default execution mode for this capability */ - static readonly DEFAULT_MODE = Mode.DON + /** The capability ID for this service */ + static readonly CAPABILITY_ID = "basic-test-action-trigger@1.0.0"; + + /** The default execution mode for this capability */ + static readonly DEFAULT_MODE = Mode.DON; - static readonly CAPABILITY_NAME = 'basic-test-action-trigger' - static readonly CAPABILITY_VERSION = '1.0.0' + static readonly CAPABILITY_NAME = "basic-test-action-trigger"; + static readonly CAPABILITY_VERSION = "1.0.0"; - constructor(private readonly mode: Mode = BasicCapability.DEFAULT_MODE) {} - async action(input: InputJson): Promise { - const payload = { - typeUrl: getTypeUrl(InputSchema), - value: toBinary(InputSchema, fromJson(InputSchema, input)), - } - const capabilityId = BasicCapability.CAPABILITY_ID + constructor( + private readonly mode: Mode = BasicCapability.DEFAULT_MODE + ) {} - return callCapability({ - capabilityId, - method: 'Action', - mode: this.mode, - payload, - }).then((capabilityResponse: CapabilityResponse) => { - if (capabilityResponse.response.case === 'error') { - throw new CapabilityError(capabilityResponse.response.value, { - capabilityId, - method: 'Action', - mode: this.mode, - }) - } + async action(input: Input | InputJson): Promise { + // biome-ignore lint/suspicious/noExplicitAny: Needed for runtime type checking of protocol buffer messages + const value = (input as any).$typeName ? input as Input : fromJson(InputSchema, input as InputJson) + const payload = { + typeUrl: getTypeUrl(InputSchema), + value: toBinary(InputSchema, value), + }; + const capabilityId = BasicCapability.CAPABILITY_ID; + + return callCapability({ + capabilityId, + method: "Action", + mode: this.mode, + payload, + }).then((capabilityResponse: CapabilityResponse) => { + if (capabilityResponse.response.case === "error") { + throw new CapabilityError(capabilityResponse.response.value, { + capabilityId, + method: "Action", + mode: this.mode, + }); + } - if (capabilityResponse.response.case !== 'payload') { - throw new CapabilityError('No payload in response', { - capabilityId, - method: 'Action', - mode: this.mode, - }) - } + if (capabilityResponse.response.case !== "payload") { + throw new CapabilityError("No payload in response", { + capabilityId, + method: "Action", + mode: this.mode, + }); + } - return fromBinary(OutputSchema, capabilityResponse.response.value.value) - }) - } + return fromBinary(OutputSchema, capabilityResponse.response.value.value); + }); + } - trigger(config: ConfigJson): BasicTrigger { - return new BasicTrigger(this.mode, config, BasicCapability.CAPABILITY_ID, 'Trigger') - } + trigger(config: ConfigJson): BasicTrigger { + return new BasicTrigger(this.mode, config, BasicCapability.CAPABILITY_ID, "Trigger"); + } } /** * Trigger implementation for Trigger */ class BasicTrigger implements Trigger { - constructor( - public readonly mode: Mode, - public readonly config: ConfigJson, - private readonly _capabilityId: string, - private readonly _method: string, - ) {} + public readonly config: Config + constructor( + public readonly mode: Mode, + config: Config | ConfigJson, + private readonly _capabilityId: string, + private readonly _method: string + ) { + // biome-ignore lint/suspicious/noExplicitAny: Needed for runtime type checking of protocol buffer messages + this.config = (config as any).$typeName ? config as Config : fromJson(ConfigSchema, config as ConfigJson) + } - capabilityId(): string { - return this._capabilityId - } + capabilityId(): string { + return this._capabilityId; + } - method(): string { - return this._method - } + method(): string { + return this._method; + } - outputSchema() { - return TriggerEventSchema - } + outputSchema() { + return TriggerEventSchema; + } - configAsAny(): Any { - const configMessage = fromJson(ConfigSchema, this.config) - return create(AnySchema, { - typeUrl: getTypeUrl(ConfigSchema), - value: toBinary(ConfigSchema, configMessage), - }) - } + configAsAny(): Any { + return create(AnySchema, { + typeUrl: getTypeUrl(ConfigSchema), + value: toBinary(ConfigSchema, this.config), + }); + } - /** - * Transform the raw trigger output - override this method if needed - * Default implementation returns the raw output unchanged - */ - adapt(rawOutput: TriggerEvent): TriggerEvent { - return rawOutput - } -} + /** + * Transform the raw trigger output - override this method if needed + * Default implementation returns the raw output unchanged + */ + adapt(rawOutput: TriggerEvent): TriggerEvent { + return rawOutput; + } +} \ No newline at end of file diff --git a/src/generated-sdk/capabilities/internal/basicaction/v1/basicaction_sdk_gen.ts b/src/generated-sdk/capabilities/internal/basicaction/v1/basicaction_sdk_gen.ts index aa682a8b..06c5402b 100644 --- a/src/generated-sdk/capabilities/internal/basicaction/v1/basicaction_sdk_gen.ts +++ b/src/generated-sdk/capabilities/internal/basicaction/v1/basicaction_sdk_gen.ts @@ -1,65 +1,74 @@ -import { fromBinary, toBinary, fromJson, create } from '@bufbuild/protobuf' -import { Mode, type CapabilityResponse } from '@cre/generated/sdk/v1alpha/sdk_pb' -import { callCapability } from '@cre/sdk/utils/capabilities/call-capability' -import { CapabilityError } from '@cre/sdk/utils/capabilities/capability-error' -import { getTypeUrl } from '@cre/sdk/utils/typeurl' +import { fromBinary, toBinary, fromJson } from "@bufbuild/protobuf"; import { - InputsSchema, - OutputsSchema, - type InputsJson, - type Outputs, -} from '@cre/generated/capabilities/internal/basicaction/v1/basic_action_pb' + Mode, + type CapabilityResponse, +} from "@cre/generated/sdk/v1alpha/sdk_pb"; +import { callCapability } from "@cre/sdk/utils/capabilities/call-capability"; +import { CapabilityError } from "@cre/sdk/utils/capabilities/capability-error"; +import { getTypeUrl } from "@cre/sdk/utils/typeurl"; +import { + InputsSchema, + OutputsSchema, + type Inputs, + type InputsJson, + type Outputs, +} from "@cre/generated/capabilities/internal/basicaction/v1/basic_action_pb"; /** * BasicAction Capability - * + * * Capability ID: basic-test-action@1.0.0 * Default Mode: Mode.DON * Capability Name: basic-test-action * Capability Version: 1.0.0 */ export class BasicActionCapability { - /** The capability ID for this service */ - static readonly CAPABILITY_ID = 'basic-test-action@1.0.0' - - /** The default execution mode for this capability */ - static readonly DEFAULT_MODE = Mode.DON + /** The capability ID for this service */ + static readonly CAPABILITY_ID = "basic-test-action@1.0.0"; + + /** The default execution mode for this capability */ + static readonly DEFAULT_MODE = Mode.DON; - static readonly CAPABILITY_NAME = 'basic-test-action' - static readonly CAPABILITY_VERSION = '1.0.0' + static readonly CAPABILITY_NAME = "basic-test-action"; + static readonly CAPABILITY_VERSION = "1.0.0"; - constructor(private readonly mode: Mode = BasicActionCapability.DEFAULT_MODE) {} - async performAction(input: InputsJson): Promise { - const payload = { - typeUrl: getTypeUrl(InputsSchema), - value: toBinary(InputsSchema, fromJson(InputsSchema, input)), - } - const capabilityId = BasicActionCapability.CAPABILITY_ID + constructor( + private readonly mode: Mode = BasicActionCapability.DEFAULT_MODE + ) {} - return callCapability({ - capabilityId, - method: 'PerformAction', - mode: this.mode, - payload, - }).then((capabilityResponse: CapabilityResponse) => { - if (capabilityResponse.response.case === 'error') { - throw new CapabilityError(capabilityResponse.response.value, { - capabilityId, - method: 'PerformAction', - mode: this.mode, - }) - } + async performAction(input: Inputs | InputsJson): Promise { + // biome-ignore lint/suspicious/noExplicitAny: Needed for runtime type checking of protocol buffer messages + const value = (input as any).$typeName ? input as Inputs : fromJson(InputsSchema, input as InputsJson) + const payload = { + typeUrl: getTypeUrl(InputsSchema), + value: toBinary(InputsSchema, value), + }; + const capabilityId = BasicActionCapability.CAPABILITY_ID; + + return callCapability({ + capabilityId, + method: "PerformAction", + mode: this.mode, + payload, + }).then((capabilityResponse: CapabilityResponse) => { + if (capabilityResponse.response.case === "error") { + throw new CapabilityError(capabilityResponse.response.value, { + capabilityId, + method: "PerformAction", + mode: this.mode, + }); + } - if (capabilityResponse.response.case !== 'payload') { - throw new CapabilityError('No payload in response', { - capabilityId, - method: 'PerformAction', - mode: this.mode, - }) - } + if (capabilityResponse.response.case !== "payload") { + throw new CapabilityError("No payload in response", { + capabilityId, + method: "PerformAction", + mode: this.mode, + }); + } - return fromBinary(OutputsSchema, capabilityResponse.response.value.value) - }) - } + return fromBinary(OutputsSchema, capabilityResponse.response.value.value); + }); + } } diff --git a/src/generated-sdk/capabilities/internal/basictrigger/v1/basic_sdk_gen.ts b/src/generated-sdk/capabilities/internal/basictrigger/v1/basic_sdk_gen.ts index 750ddced..be6720c5 100644 --- a/src/generated-sdk/capabilities/internal/basictrigger/v1/basic_sdk_gen.ts +++ b/src/generated-sdk/capabilities/internal/basictrigger/v1/basic_sdk_gen.ts @@ -1,78 +1,88 @@ -import { fromBinary, toBinary, fromJson, create } from '@bufbuild/protobuf' -import { Mode, type CapabilityResponse } from '@cre/generated/sdk/v1alpha/sdk_pb' -import { callCapability } from '@cre/sdk/utils/capabilities/call-capability' -import { CapabilityError } from '@cre/sdk/utils/capabilities/capability-error' -import { type Trigger } from '@cre/sdk/utils/triggers/trigger-interface' -import { type Any, AnySchema } from '@bufbuild/protobuf/wkt' -import { getTypeUrl } from '@cre/sdk/utils/typeurl' +import { fromBinary, toBinary, fromJson, create } from "@bufbuild/protobuf"; import { - ConfigSchema, - OutputsSchema, - type ConfigJson, - type Outputs, -} from '@cre/generated/capabilities/internal/basictrigger/v1/basic_trigger_pb' + Mode, + type CapabilityResponse, +} from "@cre/generated/sdk/v1alpha/sdk_pb"; +import { callCapability } from "@cre/sdk/utils/capabilities/call-capability"; +import { CapabilityError } from "@cre/sdk/utils/capabilities/capability-error"; +import { type Trigger } from "@cre/sdk/utils/triggers/trigger-interface"; +import { type Any, AnySchema } from "@bufbuild/protobuf/wkt"; +import { getTypeUrl } from "@cre/sdk/utils/typeurl"; +import { + ConfigSchema, + OutputsSchema, + type Config, + type ConfigJson, + type Outputs, +} from "@cre/generated/capabilities/internal/basictrigger/v1/basic_trigger_pb"; /** * Basic Capability - * + * * Capability ID: basic-test-trigger@1.0.0 * Default Mode: Mode.DON * Capability Name: basic-test-trigger * Capability Version: 1.0.0 */ export class BasicCapability { - /** The capability ID for this service */ - static readonly CAPABILITY_ID = 'basic-test-trigger@1.0.0' + /** The capability ID for this service */ + static readonly CAPABILITY_ID = "basic-test-trigger@1.0.0"; + + /** The default execution mode for this capability */ + static readonly DEFAULT_MODE = Mode.DON; - /** The default execution mode for this capability */ - static readonly DEFAULT_MODE = Mode.DON + static readonly CAPABILITY_NAME = "basic-test-trigger"; + static readonly CAPABILITY_VERSION = "1.0.0"; - static readonly CAPABILITY_NAME = 'basic-test-trigger' - static readonly CAPABILITY_VERSION = '1.0.0' - constructor(private readonly mode: Mode = BasicCapability.DEFAULT_MODE) {} + constructor( + private readonly mode: Mode = BasicCapability.DEFAULT_MODE + ) {} - trigger(config: ConfigJson): BasicTrigger { - return new BasicTrigger(this.mode, config, BasicCapability.CAPABILITY_ID, 'Trigger') - } + trigger(config: ConfigJson): BasicTrigger { + return new BasicTrigger(this.mode, config, BasicCapability.CAPABILITY_ID, "Trigger"); + } } /** * Trigger implementation for Trigger */ class BasicTrigger implements Trigger { - constructor( - public readonly mode: Mode, - public readonly config: ConfigJson, - private readonly _capabilityId: string, - private readonly _method: string, - ) {} + public readonly config: Config + constructor( + public readonly mode: Mode, + config: Config | ConfigJson, + private readonly _capabilityId: string, + private readonly _method: string + ) { + // biome-ignore lint/suspicious/noExplicitAny: Needed for runtime type checking of protocol buffer messages + this.config = (config as any).$typeName ? config as Config : fromJson(ConfigSchema, config as ConfigJson) + } - capabilityId(): string { - return this._capabilityId - } + capabilityId(): string { + return this._capabilityId; + } - method(): string { - return this._method - } + method(): string { + return this._method; + } - outputSchema() { - return OutputsSchema - } + outputSchema() { + return OutputsSchema; + } - configAsAny(): Any { - const configMessage = fromJson(ConfigSchema, this.config) - return create(AnySchema, { - typeUrl: getTypeUrl(ConfigSchema), - value: toBinary(ConfigSchema, configMessage), - }) - } + configAsAny(): Any { + return create(AnySchema, { + typeUrl: getTypeUrl(ConfigSchema), + value: toBinary(ConfigSchema, this.config), + }); + } - /** - * Transform the raw trigger output - override this method if needed - * Default implementation returns the raw output unchanged - */ - adapt(rawOutput: Outputs): Outputs { - return rawOutput - } -} + /** + * Transform the raw trigger output - override this method if needed + * Default implementation returns the raw output unchanged + */ + adapt(rawOutput: Outputs): Outputs { + return rawOutput; + } +} \ No newline at end of file diff --git a/src/generated-sdk/capabilities/internal/consensus/v1alpha/consensus_sdk_gen.ts b/src/generated-sdk/capabilities/internal/consensus/v1alpha/consensus_sdk_gen.ts index 9a04845b..6f39fcbe 100644 --- a/src/generated-sdk/capabilities/internal/consensus/v1alpha/consensus_sdk_gen.ts +++ b/src/generated-sdk/capabilities/internal/consensus/v1alpha/consensus_sdk_gen.ts @@ -1,101 +1,116 @@ -import { fromBinary, toBinary, fromJson, create } from '@bufbuild/protobuf' -import { Mode, type CapabilityResponse } from '@cre/generated/sdk/v1alpha/sdk_pb' -import { callCapability } from '@cre/sdk/utils/capabilities/call-capability' -import { CapabilityError } from '@cre/sdk/utils/capabilities/capability-error' -import { getTypeUrl } from '@cre/sdk/utils/typeurl' +import { fromBinary, toBinary, fromJson } from "@bufbuild/protobuf"; import { - ReportRequestSchema, - ReportResponseSchema, - SimpleConsensusInputsSchema, - type ReportRequestJson, - type ReportResponse, - type SimpleConsensusInputsJson, -} from '@cre/generated/sdk/v1alpha/sdk_pb' -import { ValueSchema, type Value } from '@cre/generated/values/v1/values_pb' + Mode, + type CapabilityResponse, +} from "@cre/generated/sdk/v1alpha/sdk_pb"; +import { callCapability } from "@cre/sdk/utils/capabilities/call-capability"; +import { CapabilityError } from "@cre/sdk/utils/capabilities/capability-error"; +import { getTypeUrl } from "@cre/sdk/utils/typeurl"; +import { + ReportRequestSchema, + ReportResponseSchema, + SimpleConsensusInputsSchema, + type ReportRequest, + type ReportRequestJson, + type ReportResponse, + type SimpleConsensusInputs, + type SimpleConsensusInputsJson, +} from "@cre/generated/sdk/v1alpha/sdk_pb"; +import { + ValueSchema, + type Value, +} from "@cre/generated/values/v1/values_pb"; /** * Consensus Capability - * + * * Capability ID: consensus@1.0.0-alpha * Default Mode: Mode.DON * Capability Name: consensus * Capability Version: 1.0.0-alpha */ export class ConsensusCapability { - /** The capability ID for this service */ - static readonly CAPABILITY_ID = 'consensus@1.0.0-alpha' - - /** The default execution mode for this capability */ - static readonly DEFAULT_MODE = Mode.DON - - static readonly CAPABILITY_NAME = 'consensus' - static readonly CAPABILITY_VERSION = '1.0.0-alpha' + /** The capability ID for this service */ + static readonly CAPABILITY_ID = "consensus@1.0.0-alpha"; + + /** The default execution mode for this capability */ + static readonly DEFAULT_MODE = Mode.DON; - constructor(private readonly mode: Mode = ConsensusCapability.DEFAULT_MODE) {} + static readonly CAPABILITY_NAME = "consensus"; + static readonly CAPABILITY_VERSION = "1.0.0-alpha"; - async simple(input: SimpleConsensusInputsJson): Promise { - const payload = { - typeUrl: getTypeUrl(SimpleConsensusInputsSchema), - value: toBinary(SimpleConsensusInputsSchema, fromJson(SimpleConsensusInputsSchema, input)), - } - const capabilityId = ConsensusCapability.CAPABILITY_ID - return callCapability({ - capabilityId, - method: 'Simple', - mode: this.mode, - payload, - }).then((capabilityResponse: CapabilityResponse) => { - if (capabilityResponse.response.case === 'error') { - throw new CapabilityError(capabilityResponse.response.value, { - capabilityId, - method: 'Simple', - mode: this.mode, - }) - } + constructor( + private readonly mode: Mode = ConsensusCapability.DEFAULT_MODE + ) {} - if (capabilityResponse.response.case !== 'payload') { - throw new CapabilityError('No payload in response', { - capabilityId, - method: 'Simple', - mode: this.mode, - }) - } + async simple(input: SimpleConsensusInputs | SimpleConsensusInputsJson): Promise { + // biome-ignore lint/suspicious/noExplicitAny: Needed for runtime type checking of protocol buffer messages + const value = (input as any).$typeName ? input as SimpleConsensusInputs : fromJson(SimpleConsensusInputsSchema, input as SimpleConsensusInputsJson) + const payload = { + typeUrl: getTypeUrl(SimpleConsensusInputsSchema), + value: toBinary(SimpleConsensusInputsSchema, value), + }; + const capabilityId = ConsensusCapability.CAPABILITY_ID; + + return callCapability({ + capabilityId, + method: "Simple", + mode: this.mode, + payload, + }).then((capabilityResponse: CapabilityResponse) => { + if (capabilityResponse.response.case === "error") { + throw new CapabilityError(capabilityResponse.response.value, { + capabilityId, + method: "Simple", + mode: this.mode, + }); + } - return fromBinary(ValueSchema, capabilityResponse.response.value.value) - }) - } + if (capabilityResponse.response.case !== "payload") { + throw new CapabilityError("No payload in response", { + capabilityId, + method: "Simple", + mode: this.mode, + }); + } - async report(input: ReportRequestJson): Promise { - const payload = { - typeUrl: getTypeUrl(ReportRequestSchema), - value: toBinary(ReportRequestSchema, fromJson(ReportRequestSchema, input)), - } - const capabilityId = ConsensusCapability.CAPABILITY_ID + return fromBinary(ValueSchema, capabilityResponse.response.value.value); + }); + } - return callCapability({ - capabilityId, - method: 'Report', - mode: this.mode, - payload, - }).then((capabilityResponse: CapabilityResponse) => { - if (capabilityResponse.response.case === 'error') { - throw new CapabilityError(capabilityResponse.response.value, { - capabilityId, - method: 'Report', - mode: this.mode, - }) - } + async report(input: ReportRequest | ReportRequestJson): Promise { + // biome-ignore lint/suspicious/noExplicitAny: Needed for runtime type checking of protocol buffer messages + const value = (input as any).$typeName ? input as ReportRequest : fromJson(ReportRequestSchema, input as ReportRequestJson) + const payload = { + typeUrl: getTypeUrl(ReportRequestSchema), + value: toBinary(ReportRequestSchema, value), + }; + const capabilityId = ConsensusCapability.CAPABILITY_ID; + + return callCapability({ + capabilityId, + method: "Report", + mode: this.mode, + payload, + }).then((capabilityResponse: CapabilityResponse) => { + if (capabilityResponse.response.case === "error") { + throw new CapabilityError(capabilityResponse.response.value, { + capabilityId, + method: "Report", + mode: this.mode, + }); + } - if (capabilityResponse.response.case !== 'payload') { - throw new CapabilityError('No payload in response', { - capabilityId, - method: 'Report', - mode: this.mode, - }) - } + if (capabilityResponse.response.case !== "payload") { + throw new CapabilityError("No payload in response", { + capabilityId, + method: "Report", + mode: this.mode, + }); + } - return fromBinary(ReportResponseSchema, capabilityResponse.response.value.value) - }) - } + return fromBinary(ReportResponseSchema, capabilityResponse.response.value.value); + }); + } } diff --git a/src/generated-sdk/capabilities/internal/nodeaction/v1/basicaction_sdk_gen.ts b/src/generated-sdk/capabilities/internal/nodeaction/v1/basicaction_sdk_gen.ts index 4576570b..8c5152e7 100644 --- a/src/generated-sdk/capabilities/internal/nodeaction/v1/basicaction_sdk_gen.ts +++ b/src/generated-sdk/capabilities/internal/nodeaction/v1/basicaction_sdk_gen.ts @@ -1,65 +1,74 @@ -import { fromBinary, toBinary, fromJson, create } from '@bufbuild/protobuf' -import { Mode, type CapabilityResponse } from '@cre/generated/sdk/v1alpha/sdk_pb' -import { callCapability } from '@cre/sdk/utils/capabilities/call-capability' -import { CapabilityError } from '@cre/sdk/utils/capabilities/capability-error' -import { getTypeUrl } from '@cre/sdk/utils/typeurl' +import { fromBinary, toBinary, fromJson } from "@bufbuild/protobuf"; import { - NodeInputsSchema, - NodeOutputsSchema, - type NodeInputsJson, - type NodeOutputs, -} from '@cre/generated/capabilities/internal/nodeaction/v1/node_action_pb' + Mode, + type CapabilityResponse, +} from "@cre/generated/sdk/v1alpha/sdk_pb"; +import { callCapability } from "@cre/sdk/utils/capabilities/call-capability"; +import { CapabilityError } from "@cre/sdk/utils/capabilities/capability-error"; +import { getTypeUrl } from "@cre/sdk/utils/typeurl"; +import { + NodeInputsSchema, + NodeOutputsSchema, + type NodeInputs, + type NodeInputsJson, + type NodeOutputs, +} from "@cre/generated/capabilities/internal/nodeaction/v1/node_action_pb"; /** * BasicAction Capability - * + * * Capability ID: basic-test-node-action@1.0.0 * Default Mode: Mode.NODE * Capability Name: basic-test-node-action * Capability Version: 1.0.0 */ export class BasicActionCapability { - /** The capability ID for this service */ - static readonly CAPABILITY_ID = 'basic-test-node-action@1.0.0' - - /** The default execution mode for this capability */ - static readonly DEFAULT_MODE = Mode.NODE + /** The capability ID for this service */ + static readonly CAPABILITY_ID = "basic-test-node-action@1.0.0"; + + /** The default execution mode for this capability */ + static readonly DEFAULT_MODE = Mode.NODE; - static readonly CAPABILITY_NAME = 'basic-test-node-action' - static readonly CAPABILITY_VERSION = '1.0.0' + static readonly CAPABILITY_NAME = "basic-test-node-action"; + static readonly CAPABILITY_VERSION = "1.0.0"; - constructor(private readonly mode: Mode = BasicActionCapability.DEFAULT_MODE) {} - async performAction(input: NodeInputsJson): Promise { - const payload = { - typeUrl: getTypeUrl(NodeInputsSchema), - value: toBinary(NodeInputsSchema, fromJson(NodeInputsSchema, input)), - } - const capabilityId = BasicActionCapability.CAPABILITY_ID + constructor( + private readonly mode: Mode = BasicActionCapability.DEFAULT_MODE + ) {} - return callCapability({ - capabilityId, - method: 'PerformAction', - mode: this.mode, - payload, - }).then((capabilityResponse: CapabilityResponse) => { - if (capabilityResponse.response.case === 'error') { - throw new CapabilityError(capabilityResponse.response.value, { - capabilityId, - method: 'PerformAction', - mode: this.mode, - }) - } + async performAction(input: NodeInputs | NodeInputsJson): Promise { + // biome-ignore lint/suspicious/noExplicitAny: Needed for runtime type checking of protocol buffer messages + const value = (input as any).$typeName ? input as NodeInputs : fromJson(NodeInputsSchema, input as NodeInputsJson) + const payload = { + typeUrl: getTypeUrl(NodeInputsSchema), + value: toBinary(NodeInputsSchema, value), + }; + const capabilityId = BasicActionCapability.CAPABILITY_ID; + + return callCapability({ + capabilityId, + method: "PerformAction", + mode: this.mode, + payload, + }).then((capabilityResponse: CapabilityResponse) => { + if (capabilityResponse.response.case === "error") { + throw new CapabilityError(capabilityResponse.response.value, { + capabilityId, + method: "PerformAction", + mode: this.mode, + }); + } - if (capabilityResponse.response.case !== 'payload') { - throw new CapabilityError('No payload in response', { - capabilityId, - method: 'PerformAction', - mode: this.mode, - }) - } + if (capabilityResponse.response.case !== "payload") { + throw new CapabilityError("No payload in response", { + capabilityId, + method: "PerformAction", + mode: this.mode, + }); + } - return fromBinary(NodeOutputsSchema, capabilityResponse.response.value.value) - }) - } + return fromBinary(NodeOutputsSchema, capabilityResponse.response.value.value); + }); + } } diff --git a/src/generated-sdk/capabilities/networking/http/v1alpha/client_sdk_gen.ts b/src/generated-sdk/capabilities/networking/http/v1alpha/client_sdk_gen.ts index f7ae7b3b..2b582c2b 100644 --- a/src/generated-sdk/capabilities/networking/http/v1alpha/client_sdk_gen.ts +++ b/src/generated-sdk/capabilities/networking/http/v1alpha/client_sdk_gen.ts @@ -1,65 +1,74 @@ -import { fromBinary, toBinary, fromJson, create } from '@bufbuild/protobuf' -import { Mode, type CapabilityResponse } from '@cre/generated/sdk/v1alpha/sdk_pb' -import { callCapability } from '@cre/sdk/utils/capabilities/call-capability' -import { CapabilityError } from '@cre/sdk/utils/capabilities/capability-error' -import { getTypeUrl } from '@cre/sdk/utils/typeurl' +import { fromBinary, toBinary, fromJson } from "@bufbuild/protobuf"; import { - RequestSchema, - ResponseSchema, - type RequestJson, - type Response, -} from '@cre/generated/capabilities/networking/http/v1alpha/client_pb' + Mode, + type CapabilityResponse, +} from "@cre/generated/sdk/v1alpha/sdk_pb"; +import { callCapability } from "@cre/sdk/utils/capabilities/call-capability"; +import { CapabilityError } from "@cre/sdk/utils/capabilities/capability-error"; +import { getTypeUrl } from "@cre/sdk/utils/typeurl"; +import { + RequestSchema, + ResponseSchema, + type Request, + type RequestJson, + type Response, +} from "@cre/generated/capabilities/networking/http/v1alpha/client_pb"; /** * Client Capability - * + * * Capability ID: http-actions@1.0.0-alpha * Default Mode: Mode.NODE * Capability Name: http-actions * Capability Version: 1.0.0-alpha */ export class ClientCapability { - /** The capability ID for this service */ - static readonly CAPABILITY_ID = 'http-actions@1.0.0-alpha' - - /** The default execution mode for this capability */ - static readonly DEFAULT_MODE = Mode.NODE + /** The capability ID for this service */ + static readonly CAPABILITY_ID = "http-actions@1.0.0-alpha"; + + /** The default execution mode for this capability */ + static readonly DEFAULT_MODE = Mode.NODE; - static readonly CAPABILITY_NAME = 'http-actions' - static readonly CAPABILITY_VERSION = '1.0.0-alpha' + static readonly CAPABILITY_NAME = "http-actions"; + static readonly CAPABILITY_VERSION = "1.0.0-alpha"; - constructor(private readonly mode: Mode = ClientCapability.DEFAULT_MODE) {} - async sendRequest(input: RequestJson): Promise { - const payload = { - typeUrl: getTypeUrl(RequestSchema), - value: toBinary(RequestSchema, fromJson(RequestSchema, input)), - } - const capabilityId = ClientCapability.CAPABILITY_ID + constructor( + private readonly mode: Mode = ClientCapability.DEFAULT_MODE + ) {} - return callCapability({ - capabilityId, - method: 'SendRequest', - mode: this.mode, - payload, - }).then((capabilityResponse: CapabilityResponse) => { - if (capabilityResponse.response.case === 'error') { - throw new CapabilityError(capabilityResponse.response.value, { - capabilityId, - method: 'SendRequest', - mode: this.mode, - }) - } + async sendRequest(input: Request | RequestJson): Promise { + // biome-ignore lint/suspicious/noExplicitAny: Needed for runtime type checking of protocol buffer messages + const value = (input as any).$typeName ? input as Request : fromJson(RequestSchema, input as RequestJson) + const payload = { + typeUrl: getTypeUrl(RequestSchema), + value: toBinary(RequestSchema, value), + }; + const capabilityId = ClientCapability.CAPABILITY_ID; + + return callCapability({ + capabilityId, + method: "SendRequest", + mode: this.mode, + payload, + }).then((capabilityResponse: CapabilityResponse) => { + if (capabilityResponse.response.case === "error") { + throw new CapabilityError(capabilityResponse.response.value, { + capabilityId, + method: "SendRequest", + mode: this.mode, + }); + } - if (capabilityResponse.response.case !== 'payload') { - throw new CapabilityError('No payload in response', { - capabilityId, - method: 'SendRequest', - mode: this.mode, - }) - } + if (capabilityResponse.response.case !== "payload") { + throw new CapabilityError("No payload in response", { + capabilityId, + method: "SendRequest", + mode: this.mode, + }); + } - return fromBinary(ResponseSchema, capabilityResponse.response.value.value) - }) - } + return fromBinary(ResponseSchema, capabilityResponse.response.value.value); + }); + } } diff --git a/src/generated-sdk/capabilities/networking/http/v1alpha/http_sdk_gen.ts b/src/generated-sdk/capabilities/networking/http/v1alpha/http_sdk_gen.ts index 0369e1fd..941e13ea 100644 --- a/src/generated-sdk/capabilities/networking/http/v1alpha/http_sdk_gen.ts +++ b/src/generated-sdk/capabilities/networking/http/v1alpha/http_sdk_gen.ts @@ -1,78 +1,88 @@ -import { fromBinary, toBinary, fromJson, create } from '@bufbuild/protobuf' -import { Mode, type CapabilityResponse } from '@cre/generated/sdk/v1alpha/sdk_pb' -import { callCapability } from '@cre/sdk/utils/capabilities/call-capability' -import { CapabilityError } from '@cre/sdk/utils/capabilities/capability-error' -import { type Trigger } from '@cre/sdk/utils/triggers/trigger-interface' -import { type Any, AnySchema } from '@bufbuild/protobuf/wkt' -import { getTypeUrl } from '@cre/sdk/utils/typeurl' +import { fromBinary, toBinary, fromJson, create } from "@bufbuild/protobuf"; import { - ConfigSchema, - PayloadSchema, - type ConfigJson, - type Payload, -} from '@cre/generated/capabilities/networking/http/v1alpha/trigger_pb' + Mode, + type CapabilityResponse, +} from "@cre/generated/sdk/v1alpha/sdk_pb"; +import { callCapability } from "@cre/sdk/utils/capabilities/call-capability"; +import { CapabilityError } from "@cre/sdk/utils/capabilities/capability-error"; +import { type Trigger } from "@cre/sdk/utils/triggers/trigger-interface"; +import { type Any, AnySchema } from "@bufbuild/protobuf/wkt"; +import { getTypeUrl } from "@cre/sdk/utils/typeurl"; +import { + ConfigSchema, + PayloadSchema, + type Config, + type ConfigJson, + type Payload, +} from "@cre/generated/capabilities/networking/http/v1alpha/trigger_pb"; /** * HTTP Capability - * + * * Capability ID: http-trigger@1.0.0-alpha * Default Mode: Mode.DON * Capability Name: http-trigger * Capability Version: 1.0.0-alpha */ export class HTTPCapability { - /** The capability ID for this service */ - static readonly CAPABILITY_ID = 'http-trigger@1.0.0-alpha' + /** The capability ID for this service */ + static readonly CAPABILITY_ID = "http-trigger@1.0.0-alpha"; + + /** The default execution mode for this capability */ + static readonly DEFAULT_MODE = Mode.DON; - /** The default execution mode for this capability */ - static readonly DEFAULT_MODE = Mode.DON + static readonly CAPABILITY_NAME = "http-trigger"; + static readonly CAPABILITY_VERSION = "1.0.0-alpha"; - static readonly CAPABILITY_NAME = 'http-trigger' - static readonly CAPABILITY_VERSION = '1.0.0-alpha' - constructor(private readonly mode: Mode = HTTPCapability.DEFAULT_MODE) {} + constructor( + private readonly mode: Mode = HTTPCapability.DEFAULT_MODE + ) {} - trigger(config: ConfigJson): HTTPTrigger { - return new HTTPTrigger(this.mode, config, HTTPCapability.CAPABILITY_ID, 'Trigger') - } + trigger(config: ConfigJson): HTTPTrigger { + return new HTTPTrigger(this.mode, config, HTTPCapability.CAPABILITY_ID, "Trigger"); + } } /** * Trigger implementation for Trigger */ class HTTPTrigger implements Trigger { - constructor( - public readonly mode: Mode, - public readonly config: ConfigJson, - private readonly _capabilityId: string, - private readonly _method: string, - ) {} + public readonly config: Config + constructor( + public readonly mode: Mode, + config: Config | ConfigJson, + private readonly _capabilityId: string, + private readonly _method: string + ) { + // biome-ignore lint/suspicious/noExplicitAny: Needed for runtime type checking of protocol buffer messages + this.config = (config as any).$typeName ? config as Config : fromJson(ConfigSchema, config as ConfigJson) + } - capabilityId(): string { - return this._capabilityId - } + capabilityId(): string { + return this._capabilityId; + } - method(): string { - return this._method - } + method(): string { + return this._method; + } - outputSchema() { - return PayloadSchema - } + outputSchema() { + return PayloadSchema; + } - configAsAny(): Any { - const configMessage = fromJson(ConfigSchema, this.config) - return create(AnySchema, { - typeUrl: getTypeUrl(ConfigSchema), - value: toBinary(ConfigSchema, configMessage), - }) - } + configAsAny(): Any { + return create(AnySchema, { + typeUrl: getTypeUrl(ConfigSchema), + value: toBinary(ConfigSchema, this.config), + }); + } - /** - * Transform the raw trigger output - override this method if needed - * Default implementation returns the raw output unchanged - */ - adapt(rawOutput: Payload): Payload { - return rawOutput - } -} + /** + * Transform the raw trigger output - override this method if needed + * Default implementation returns the raw output unchanged + */ + adapt(rawOutput: Payload): Payload { + return rawOutput; + } +} \ No newline at end of file diff --git a/src/generated-sdk/capabilities/scheduler/cron/v1/cron_sdk_gen.ts b/src/generated-sdk/capabilities/scheduler/cron/v1/cron_sdk_gen.ts index 8f1b53fa..9ca63a61 100644 --- a/src/generated-sdk/capabilities/scheduler/cron/v1/cron_sdk_gen.ts +++ b/src/generated-sdk/capabilities/scheduler/cron/v1/cron_sdk_gen.ts @@ -1,80 +1,90 @@ -import { fromBinary, toBinary, fromJson, create } from '@bufbuild/protobuf' -import { Mode, type CapabilityResponse } from '@cre/generated/sdk/v1alpha/sdk_pb' -import { callCapability } from '@cre/sdk/utils/capabilities/call-capability' -import { CapabilityError } from '@cre/sdk/utils/capabilities/capability-error' -import { type Trigger } from '@cre/sdk/utils/triggers/trigger-interface' -import { type Any, AnySchema } from '@bufbuild/protobuf/wkt' -import { getTypeUrl } from '@cre/sdk/utils/typeurl' +import { fromBinary, toBinary, fromJson, create } from "@bufbuild/protobuf"; import { - ConfigSchema, - LegacyPayloadSchema, - PayloadSchema, - type ConfigJson, - type LegacyPayload, - type Payload, -} from '@cre/generated/capabilities/scheduler/cron/v1/trigger_pb' + Mode, + type CapabilityResponse, +} from "@cre/generated/sdk/v1alpha/sdk_pb"; +import { callCapability } from "@cre/sdk/utils/capabilities/call-capability"; +import { CapabilityError } from "@cre/sdk/utils/capabilities/capability-error"; +import { type Trigger } from "@cre/sdk/utils/triggers/trigger-interface"; +import { type Any, AnySchema } from "@bufbuild/protobuf/wkt"; +import { getTypeUrl } from "@cre/sdk/utils/typeurl"; +import { + ConfigSchema, + LegacyPayloadSchema, + PayloadSchema, + type Config, + type ConfigJson, + type LegacyPayload, + type Payload, +} from "@cre/generated/capabilities/scheduler/cron/v1/trigger_pb"; /** * Cron Capability - * + * * Capability ID: cron-trigger@1.0.0 * Default Mode: Mode.DON * Capability Name: cron-trigger * Capability Version: 1.0.0 */ export class CronCapability { - /** The capability ID for this service */ - static readonly CAPABILITY_ID = 'cron-trigger@1.0.0' + /** The capability ID for this service */ + static readonly CAPABILITY_ID = "cron-trigger@1.0.0"; + + /** The default execution mode for this capability */ + static readonly DEFAULT_MODE = Mode.DON; - /** The default execution mode for this capability */ - static readonly DEFAULT_MODE = Mode.DON + static readonly CAPABILITY_NAME = "cron-trigger"; + static readonly CAPABILITY_VERSION = "1.0.0"; - static readonly CAPABILITY_NAME = 'cron-trigger' - static readonly CAPABILITY_VERSION = '1.0.0' - constructor(private readonly mode: Mode = CronCapability.DEFAULT_MODE) {} + constructor( + private readonly mode: Mode = CronCapability.DEFAULT_MODE + ) {} - trigger(config: ConfigJson): CronTrigger { - return new CronTrigger(this.mode, config, CronCapability.CAPABILITY_ID, 'Trigger') - } + trigger(config: ConfigJson): CronTrigger { + return new CronTrigger(this.mode, config, CronCapability.CAPABILITY_ID, "Trigger"); + } } /** * Trigger implementation for Trigger */ class CronTrigger implements Trigger { - constructor( - public readonly mode: Mode, - public readonly config: ConfigJson, - private readonly _capabilityId: string, - private readonly _method: string, - ) {} + public readonly config: Config + constructor( + public readonly mode: Mode, + config: Config | ConfigJson, + private readonly _capabilityId: string, + private readonly _method: string + ) { + // biome-ignore lint/suspicious/noExplicitAny: Needed for runtime type checking of protocol buffer messages + this.config = (config as any).$typeName ? config as Config : fromJson(ConfigSchema, config as ConfigJson) + } - capabilityId(): string { - return this._capabilityId - } + capabilityId(): string { + return this._capabilityId; + } - method(): string { - return this._method - } + method(): string { + return this._method; + } - outputSchema() { - return PayloadSchema - } + outputSchema() { + return PayloadSchema; + } - configAsAny(): Any { - const configMessage = fromJson(ConfigSchema, this.config) - return create(AnySchema, { - typeUrl: getTypeUrl(ConfigSchema), - value: toBinary(ConfigSchema, configMessage), - }) - } + configAsAny(): Any { + return create(AnySchema, { + typeUrl: getTypeUrl(ConfigSchema), + value: toBinary(ConfigSchema, this.config), + }); + } - /** - * Transform the raw trigger output - override this method if needed - * Default implementation returns the raw output unchanged - */ - adapt(rawOutput: Payload): Payload { - return rawOutput - } -} + /** + * Transform the raw trigger output - override this method if needed + * Default implementation returns the raw output unchanged + */ + adapt(rawOutput: Payload): Payload { + return rawOutput; + } +} \ No newline at end of file diff --git a/src/generated/capabilities/blockchain/evm/v1alpha/client_pb.ts b/src/generated/capabilities/blockchain/evm/v1alpha/client_pb.ts index 1a1cefca..8832aa19 100644 --- a/src/generated/capabilities/blockchain/evm/v1alpha/client_pb.ts +++ b/src/generated/capabilities/blockchain/evm/v1alpha/client_pb.ts @@ -2,135 +2,122 @@ // @generated from file capabilities/blockchain/evm/v1alpha/client.proto (package capabilities.blockchain.evm.v1alpha, syntax proto3) /* eslint-disable */ -import type { GenEnum, GenFile, GenMessage, GenService } from '@bufbuild/protobuf/codegenv2' -import { enumDesc, fileDesc, messageDesc, serviceDesc } from '@bufbuild/protobuf/codegenv2' -import type { EmptySchema } from '@bufbuild/protobuf/wkt' -import { file_google_protobuf_empty } from '@bufbuild/protobuf/wkt' -import type { ReportResponse, ReportResponseJson } from '../../../../sdk/v1alpha/sdk_pb' -import { file_sdk_v1alpha_sdk } from '../../../../sdk/v1alpha/sdk_pb' -import { file_tools_generator_v1alpha_cre_metadata } from '../../../../tools/generator/v1alpha/cre_metadata_pb' -import type { BigInt, BigIntJson } from '../../../../values/v1/values_pb' -import { file_values_v1_values } from '../../../../values/v1/values_pb' -import type { Message } from '@bufbuild/protobuf' +import type { GenEnum, GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv2"; +import { enumDesc, fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv2"; +import type { EmptySchema } from "@bufbuild/protobuf/wkt"; +import { file_google_protobuf_empty } from "@bufbuild/protobuf/wkt"; +import type { ReportResponse, ReportResponseJson } from "../../../../sdk/v1alpha/sdk_pb"; +import { file_sdk_v1alpha_sdk } from "../../../../sdk/v1alpha/sdk_pb"; +import { file_tools_generator_v1alpha_cre_metadata } from "../../../../tools/generator/v1alpha/cre_metadata_pb"; +import type { BigInt, BigIntJson } from "../../../../values/v1/values_pb"; +import { file_values_v1_values } from "../../../../values/v1/values_pb"; +import type { Message } from "@bufbuild/protobuf"; /** * Describes the file capabilities/blockchain/evm/v1alpha/client.proto. */ -export const file_capabilities_blockchain_evm_v1alpha_client: GenFile = - /*@__PURE__*/ - fileDesc( - 'CjBjYXBhYmlsaXRpZXMvYmxvY2tjaGFpbi9ldm0vdjFhbHBoYS9jbGllbnQucHJvdG8SI2NhcGFiaWxpdGllcy5ibG9ja2NoYWluLmV2bS52MWFscGhhIh0KC1RvcGljVmFsdWVzEg4KBnZhbHVlcxgBIAMoDCK4AQoXRmlsdGVyTG9nVHJpZ2dlclJlcXVlc3QSEQoJYWRkcmVzc2VzGAEgAygMEkAKBnRvcGljcxgCIAMoCzIwLmNhcGFiaWxpdGllcy5ibG9ja2NoYWluLmV2bS52MWFscGhhLlRvcGljVmFsdWVzEkgKCmNvbmZpZGVuY2UYAyABKA4yNC5jYXBhYmlsaXRpZXMuYmxvY2tjaGFpbi5ldm0udjFhbHBoYS5Db25maWRlbmNlTGV2ZWwiegoTQ2FsbENvbnRyYWN0UmVxdWVzdBI6CgRjYWxsGAEgASgLMiwuY2FwYWJpbGl0aWVzLmJsb2NrY2hhaW4uZXZtLnYxYWxwaGEuQ2FsbE1zZxInCgxibG9ja19udW1iZXIYAiABKAsyES52YWx1ZXMudjEuQmlnSW50IiEKEUNhbGxDb250cmFjdFJlcGx5EgwKBGRhdGEYASABKAwiWwoRRmlsdGVyTG9nc1JlcXVlc3QSRgoMZmlsdGVyX3F1ZXJ5GAEgASgLMjAuY2FwYWJpbGl0aWVzLmJsb2NrY2hhaW4uZXZtLnYxYWxwaGEuRmlsdGVyUXVlcnkiSQoPRmlsdGVyTG9nc1JlcGx5EjYKBGxvZ3MYASADKAsyKC5jYXBhYmlsaXRpZXMuYmxvY2tjaGFpbi5ldm0udjFhbHBoYS5Mb2cixwEKA0xvZxIPCgdhZGRyZXNzGAEgASgMEg4KBnRvcGljcxgCIAMoDBIPCgd0eF9oYXNoGAMgASgMEhIKCmJsb2NrX2hhc2gYBCABKAwSDAoEZGF0YRgFIAEoDBIRCglldmVudF9zaWcYBiABKAwSJwoMYmxvY2tfbnVtYmVyGAcgASgLMhEudmFsdWVzLnYxLkJpZ0ludBIQCgh0eF9pbmRleBgIIAEoDRINCgVpbmRleBgJIAEoDRIPCgdyZW1vdmVkGAogASgIIjEKB0NhbGxNc2cSDAoEZnJvbRgBIAEoDBIKCgJ0bxgCIAEoDBIMCgRkYXRhGAMgASgMIr0BCgtGaWx0ZXJRdWVyeRISCgpibG9ja19oYXNoGAEgASgMEiUKCmZyb21fYmxvY2sYAiABKAsyES52YWx1ZXMudjEuQmlnSW50EiMKCHRvX2Jsb2NrGAMgASgLMhEudmFsdWVzLnYxLkJpZ0ludBIRCglhZGRyZXNzZXMYBCADKAwSOwoGdG9waWNzGAUgAygLMisuY2FwYWJpbGl0aWVzLmJsb2NrY2hhaW4uZXZtLnYxYWxwaGEuVG9waWNzIhcKBlRvcGljcxINCgV0b3BpYxgBIAMoDCJMChBCYWxhbmNlQXRSZXF1ZXN0Eg8KB2FjY291bnQYASABKAwSJwoMYmxvY2tfbnVtYmVyGAIgASgLMhEudmFsdWVzLnYxLkJpZ0ludCI0Cg5CYWxhbmNlQXRSZXBseRIiCgdiYWxhbmNlGAEgASgLMhEudmFsdWVzLnYxLkJpZ0ludCJPChJFc3RpbWF0ZUdhc1JlcXVlc3QSOQoDbXNnGAEgASgLMiwuY2FwYWJpbGl0aWVzLmJsb2NrY2hhaW4uZXZtLnYxYWxwaGEuQ2FsbE1zZyIjChBFc3RpbWF0ZUdhc1JlcGx5Eg8KA2dhcxgBIAEoBEICMAAiKwobR2V0VHJhbnNhY3Rpb25CeUhhc2hSZXF1ZXN0EgwKBGhhc2gYASABKAwiYgoZR2V0VHJhbnNhY3Rpb25CeUhhc2hSZXBseRJFCgt0cmFuc2FjdGlvbhgBIAEoCzIwLmNhcGFiaWxpdGllcy5ibG9ja2NoYWluLmV2bS52MWFscGhhLlRyYW5zYWN0aW9uIqEBCgtUcmFuc2FjdGlvbhIRCgVub25jZRgBIAEoBEICMAASDwoDZ2FzGAIgASgEQgIwABIKCgJ0bxgDIAEoDBIMCgRkYXRhGAQgASgMEgwKBGhhc2gYBSABKAwSIAoFdmFsdWUYBiABKAsyES52YWx1ZXMudjEuQmlnSW50EiQKCWdhc19wcmljZRgHIAEoCzIRLnZhbHVlcy52MS5CaWdJbnQiLAocR2V0VHJhbnNhY3Rpb25SZWNlaXB0UmVxdWVzdBIMCgRoYXNoGAEgASgMIlsKGkdldFRyYW5zYWN0aW9uUmVjZWlwdFJlcGx5Ej0KB3JlY2VpcHQYASABKAsyLC5jYXBhYmlsaXRpZXMuYmxvY2tjaGFpbi5ldm0udjFhbHBoYS5SZWNlaXB0IpkCCgdSZWNlaXB0EhIKBnN0YXR1cxgBIAEoBEICMAASFAoIZ2FzX3VzZWQYAiABKARCAjAAEhQKCHR4X2luZGV4GAMgASgEQgIwABISCgpibG9ja19oYXNoGAQgASgMEjYKBGxvZ3MYBiADKAsyKC5jYXBhYmlsaXRpZXMuYmxvY2tjaGFpbi5ldm0udjFhbHBoYS5Mb2cSDwoHdHhfaGFzaBgHIAEoDBIuChNlZmZlY3RpdmVfZ2FzX3ByaWNlGAggASgLMhEudmFsdWVzLnYxLkJpZ0ludBInCgxibG9ja19udW1iZXIYCSABKAsyES52YWx1ZXMudjEuQmlnSW50EhgKEGNvbnRyYWN0X2FkZHJlc3MYCiABKAwiQAoVSGVhZGVyQnlOdW1iZXJSZXF1ZXN0EicKDGJsb2NrX251bWJlchgBIAEoCzIRLnZhbHVlcy52MS5CaWdJbnQiUgoTSGVhZGVyQnlOdW1iZXJSZXBseRI7CgZoZWFkZXIYASABKAsyKy5jYXBhYmlsaXRpZXMuYmxvY2tjaGFpbi5ldm0udjFhbHBoYS5IZWFkZXIiawoGSGVhZGVyEhUKCXRpbWVzdGFtcBgBIAEoBEICMAASJwoMYmxvY2tfbnVtYmVyGAIgASgLMhEudmFsdWVzLnYxLkJpZ0ludBIMCgRoYXNoGAMgASgMEhMKC3BhcmVudF9oYXNoGAQgASgMIlsKGlJlZ2lzdGVyTG9nVHJhY2tpbmdSZXF1ZXN0Ej0KBmZpbHRlchgBIAEoCzItLmNhcGFiaWxpdGllcy5ibG9ja2NoYWluLmV2bS52MWFscGhhLkxQRmlsdGVyIsIBCghMUEZpbHRlchIZCg1tYXhfbG9nc19rZXB0GAEgASgEQgIwABIaCg5yZXRlbnRpb25fdGltZRgCIAEoA0ICMAASGgoObG9nc19wZXJfYmxvY2sYAyABKARCAjAAEgwKBG5hbWUYBCABKAkSEQoJYWRkcmVzc2VzGAUgAygMEhIKCmV2ZW50X3NpZ3MYBiADKAwSDgoGdG9waWMyGAcgAygMEg4KBnRvcGljMxgIIAMoDBIOCgZ0b3BpYzQYCSADKAwiMwocVW5yZWdpc3RlckxvZ1RyYWNraW5nUmVxdWVzdBITCgtmaWx0ZXJfbmFtZRgBIAEoCSKrAQoSV3JpdGVSZXBvcnRSZXF1ZXN0EhAKCHJlY2VpdmVyGAEgASgMEisKBnJlcG9ydBgCIAEoCzIbLnNkay52MWFscGhhLlJlcG9ydFJlc3BvbnNlEkcKCmdhc19jb25maWcYAyABKAsyLi5jYXBhYmlsaXRpZXMuYmxvY2tjaGFpbi5ldm0udjFhbHBoYS5HYXNDb25maWdIAIgBAUINCgtfZ2FzX2NvbmZpZyIiCglHYXNDb25maWcSFQoJZ2FzX2xpbWl0GAEgASgEQgIwACKHAwoQV3JpdGVSZXBvcnRSZXBseRJACgl0eF9zdGF0dXMYASABKA4yLS5jYXBhYmlsaXRpZXMuYmxvY2tjaGFpbi5ldm0udjFhbHBoYS5UeFN0YXR1cxJ1CiJyZWNlaXZlcl9jb250cmFjdF9leGVjdXRpb25fc3RhdHVzGAIgASgOMkQuY2FwYWJpbGl0aWVzLmJsb2NrY2hhaW4uZXZtLnYxYWxwaGEuUmVjZWl2ZXJDb250cmFjdEV4ZWN1dGlvblN0YXR1c0gAiAEBEhQKB3R4X2hhc2gYAyABKAxIAYgBARIvCg90cmFuc2FjdGlvbl9mZWUYBCABKAsyES52YWx1ZXMudjEuQmlnSW50SAKIAQESGgoNZXJyb3JfbWVzc2FnZRgFIAEoCUgDiAEBQiUKI19yZWNlaXZlcl9jb250cmFjdF9leGVjdXRpb25fc3RhdHVzQgoKCF90eF9oYXNoQhIKEF90cmFuc2FjdGlvbl9mZWVCEAoOX2Vycm9yX21lc3NhZ2UqaQoPQ29uZmlkZW5jZUxldmVsEhkKFUNPTkZJREVOQ0VfTEVWRUxfU0FGRRAAEhsKF0NPTkZJREVOQ0VfTEVWRUxfTEFURVNUEAESHgoaQ09ORklERU5DRV9MRVZFTF9GSU5BTElaRUQQAiqCAQofUmVjZWl2ZXJDb250cmFjdEV4ZWN1dGlvblN0YXR1cxIuCipSRUNFSVZFUl9DT05UUkFDVF9FWEVDVVRJT05fU1RBVFVTX1NVQ0NFU1MQABIvCitSRUNFSVZFUl9DT05UUkFDVF9FWEVDVVRJT05fU1RBVFVTX1JFVkVSVEVEEAEqTgoIVHhTdGF0dXMSEwoPVFhfU1RBVFVTX0ZBVEFMEAASFgoSVFhfU1RBVFVTX1JFVkVSVEVEEAESFQoRVFhfU1RBVFVTX1NVQ0NFU1MQAjLXDwoGQ2xpZW50EoABCgxDYWxsQ29udHJhY3QSOC5jYXBhYmlsaXRpZXMuYmxvY2tjaGFpbi5ldm0udjFhbHBoYS5DYWxsQ29udHJhY3RSZXF1ZXN0GjYuY2FwYWJpbGl0aWVzLmJsb2NrY2hhaW4uZXZtLnYxYWxwaGEuQ2FsbENvbnRyYWN0UmVwbHkSegoKRmlsdGVyTG9ncxI2LmNhcGFiaWxpdGllcy5ibG9ja2NoYWluLmV2bS52MWFscGhhLkZpbHRlckxvZ3NSZXF1ZXN0GjQuY2FwYWJpbGl0aWVzLmJsb2NrY2hhaW4uZXZtLnYxYWxwaGEuRmlsdGVyTG9nc1JlcGx5EncKCUJhbGFuY2VBdBI1LmNhcGFiaWxpdGllcy5ibG9ja2NoYWluLmV2bS52MWFscGhhLkJhbGFuY2VBdFJlcXVlc3QaMy5jYXBhYmlsaXRpZXMuYmxvY2tjaGFpbi5ldm0udjFhbHBoYS5CYWxhbmNlQXRSZXBseRJ9CgtFc3RpbWF0ZUdhcxI3LmNhcGFiaWxpdGllcy5ibG9ja2NoYWluLmV2bS52MWFscGhhLkVzdGltYXRlR2FzUmVxdWVzdBo1LmNhcGFiaWxpdGllcy5ibG9ja2NoYWluLmV2bS52MWFscGhhLkVzdGltYXRlR2FzUmVwbHkSmAEKFEdldFRyYW5zYWN0aW9uQnlIYXNoEkAuY2FwYWJpbGl0aWVzLmJsb2NrY2hhaW4uZXZtLnYxYWxwaGEuR2V0VHJhbnNhY3Rpb25CeUhhc2hSZXF1ZXN0Gj4uY2FwYWJpbGl0aWVzLmJsb2NrY2hhaW4uZXZtLnYxYWxwaGEuR2V0VHJhbnNhY3Rpb25CeUhhc2hSZXBseRKbAQoVR2V0VHJhbnNhY3Rpb25SZWNlaXB0EkEuY2FwYWJpbGl0aWVzLmJsb2NrY2hhaW4uZXZtLnYxYWxwaGEuR2V0VHJhbnNhY3Rpb25SZWNlaXB0UmVxdWVzdBo/LmNhcGFiaWxpdGllcy5ibG9ja2NoYWluLmV2bS52MWFscGhhLkdldFRyYW5zYWN0aW9uUmVjZWlwdFJlcGx5EoYBCg5IZWFkZXJCeU51bWJlchI6LmNhcGFiaWxpdGllcy5ibG9ja2NoYWluLmV2bS52MWFscGhhLkhlYWRlckJ5TnVtYmVyUmVxdWVzdBo4LmNhcGFiaWxpdGllcy5ibG9ja2NoYWluLmV2bS52MWFscGhhLkhlYWRlckJ5TnVtYmVyUmVwbHkSbgoTUmVnaXN0ZXJMb2dUcmFja2luZxI/LmNhcGFiaWxpdGllcy5ibG9ja2NoYWluLmV2bS52MWFscGhhLlJlZ2lzdGVyTG9nVHJhY2tpbmdSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5EnIKFVVucmVnaXN0ZXJMb2dUcmFja2luZxJBLmNhcGFiaWxpdGllcy5ibG9ja2NoYWluLmV2bS52MWFscGhhLlVucmVnaXN0ZXJMb2dUcmFja2luZ1JlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkSdgoKTG9nVHJpZ2dlchI8LmNhcGFiaWxpdGllcy5ibG9ja2NoYWluLmV2bS52MWFscGhhLkZpbHRlckxvZ1RyaWdnZXJSZXF1ZXN0GiguY2FwYWJpbGl0aWVzLmJsb2NrY2hhaW4uZXZtLnYxYWxwaGEuTG9nMAESfQoLV3JpdGVSZXBvcnQSNy5jYXBhYmlsaXRpZXMuYmxvY2tjaGFpbi5ldm0udjFhbHBoYS5Xcml0ZVJlcG9ydFJlcXVlc3QaNS5jYXBhYmlsaXRpZXMuYmxvY2tjaGFpbi5ldm0udjFhbHBoYS5Xcml0ZVJlcG9ydFJlcGx5GrgEgrUYswQIARIJZXZtQDEuMC4wGqMECg1DaGFpblNlbGVjdG9yEpEEEo4ECh0KEWF2YWxhbmNoZS1tYWlubmV0ENXnisDh1ZikWQojChZhdmFsYW5jaGUtdGVzdG5ldC1mdWppEJv5/JCi46j4zAEKLwojYmluYW5jZV9zbWFydF9jaGFpbi1tYWlubmV0LW9wYm5iLTEQia2P75PG17sGCjAKI2JpbmFuY2Vfc21hcnRfY2hhaW4tdGVzdG5ldC1vcGJuYi0xEI71hZHBg4+cuAEKHAoQZXRoZXJldW0tbWFpbm5ldBCV9vHkz7KmwkUKJwobZXRoZXJldW0tbWFpbm5ldC1hcmJpdHJ1bS0xEMTojc2Om6HXRAonChtldGhlcmV1bS1tYWlubmV0LW9wdGltaXNtLTEQuJWPw/f+0OkzCiUKGGV0aGVyZXVtLXRlc3RuZXQtc2Vwb2xpYRDZteTO/MnuoN4BCi8KI2V0aGVyZXVtLXRlc3RuZXQtc2Vwb2xpYS1hcmJpdHJ1bS0xEOrO7v/qtoSjMAosCh9ldGhlcmV1bS10ZXN0bmV0LXNlcG9saWEtYmFzZS0xELjKue/2kK7IjwEKLwojZXRoZXJldW0tdGVzdG5ldC1zZXBvbGlhLW9wdGltaXNtLTEQn4bFob7Yw8BIChsKD3BvbHlnb24tbWFpbm5ldBCxq+TwmpKGnTgKIQoUcG9seWdvbi10ZXN0bmV0LWFtb3kQzY/W3/HHkPrhAULlAQonY29tLmNhcGFiaWxpdGllcy5ibG9ja2NoYWluLmV2bS52MWFscGhhQgtDbGllbnRQcm90b1ABogIDQ0JFqgIjQ2FwYWJpbGl0aWVzLkJsb2NrY2hhaW4uRXZtLlYxYWxwaGHKAiNDYXBhYmlsaXRpZXNcQmxvY2tjaGFpblxFdm1cVjFhbHBoYeICL0NhcGFiaWxpdGllc1xCbG9ja2NoYWluXEV2bVxWMWFscGhhXEdQQk1ldGFkYXRh6gImQ2FwYWJpbGl0aWVzOjpCbG9ja2NoYWluOjpFdm06OlYxYWxwaGFiBnByb3RvMw', - [ - file_google_protobuf_empty, - file_sdk_v1alpha_sdk, - file_tools_generator_v1alpha_cre_metadata, - file_values_v1_values, - ], - ) +export const file_capabilities_blockchain_evm_v1alpha_client: GenFile = /*@__PURE__*/ + fileDesc("CjBjYXBhYmlsaXRpZXMvYmxvY2tjaGFpbi9ldm0vdjFhbHBoYS9jbGllbnQucHJvdG8SI2NhcGFiaWxpdGllcy5ibG9ja2NoYWluLmV2bS52MWFscGhhIh0KC1RvcGljVmFsdWVzEg4KBnZhbHVlcxgBIAMoDCK4AQoXRmlsdGVyTG9nVHJpZ2dlclJlcXVlc3QSEQoJYWRkcmVzc2VzGAEgAygMEkAKBnRvcGljcxgCIAMoCzIwLmNhcGFiaWxpdGllcy5ibG9ja2NoYWluLmV2bS52MWFscGhhLlRvcGljVmFsdWVzEkgKCmNvbmZpZGVuY2UYAyABKA4yNC5jYXBhYmlsaXRpZXMuYmxvY2tjaGFpbi5ldm0udjFhbHBoYS5Db25maWRlbmNlTGV2ZWwiegoTQ2FsbENvbnRyYWN0UmVxdWVzdBI6CgRjYWxsGAEgASgLMiwuY2FwYWJpbGl0aWVzLmJsb2NrY2hhaW4uZXZtLnYxYWxwaGEuQ2FsbE1zZxInCgxibG9ja19udW1iZXIYAiABKAsyES52YWx1ZXMudjEuQmlnSW50IiEKEUNhbGxDb250cmFjdFJlcGx5EgwKBGRhdGEYASABKAwiWwoRRmlsdGVyTG9nc1JlcXVlc3QSRgoMZmlsdGVyX3F1ZXJ5GAEgASgLMjAuY2FwYWJpbGl0aWVzLmJsb2NrY2hhaW4uZXZtLnYxYWxwaGEuRmlsdGVyUXVlcnkiSQoPRmlsdGVyTG9nc1JlcGx5EjYKBGxvZ3MYASADKAsyKC5jYXBhYmlsaXRpZXMuYmxvY2tjaGFpbi5ldm0udjFhbHBoYS5Mb2cixwEKA0xvZxIPCgdhZGRyZXNzGAEgASgMEg4KBnRvcGljcxgCIAMoDBIPCgd0eF9oYXNoGAMgASgMEhIKCmJsb2NrX2hhc2gYBCABKAwSDAoEZGF0YRgFIAEoDBIRCglldmVudF9zaWcYBiABKAwSJwoMYmxvY2tfbnVtYmVyGAcgASgLMhEudmFsdWVzLnYxLkJpZ0ludBIQCgh0eF9pbmRleBgIIAEoDRINCgVpbmRleBgJIAEoDRIPCgdyZW1vdmVkGAogASgIIjEKB0NhbGxNc2cSDAoEZnJvbRgBIAEoDBIKCgJ0bxgCIAEoDBIMCgRkYXRhGAMgASgMIr0BCgtGaWx0ZXJRdWVyeRISCgpibG9ja19oYXNoGAEgASgMEiUKCmZyb21fYmxvY2sYAiABKAsyES52YWx1ZXMudjEuQmlnSW50EiMKCHRvX2Jsb2NrGAMgASgLMhEudmFsdWVzLnYxLkJpZ0ludBIRCglhZGRyZXNzZXMYBCADKAwSOwoGdG9waWNzGAUgAygLMisuY2FwYWJpbGl0aWVzLmJsb2NrY2hhaW4uZXZtLnYxYWxwaGEuVG9waWNzIhcKBlRvcGljcxINCgV0b3BpYxgBIAMoDCJMChBCYWxhbmNlQXRSZXF1ZXN0Eg8KB2FjY291bnQYASABKAwSJwoMYmxvY2tfbnVtYmVyGAIgASgLMhEudmFsdWVzLnYxLkJpZ0ludCI0Cg5CYWxhbmNlQXRSZXBseRIiCgdiYWxhbmNlGAEgASgLMhEudmFsdWVzLnYxLkJpZ0ludCJPChJFc3RpbWF0ZUdhc1JlcXVlc3QSOQoDbXNnGAEgASgLMiwuY2FwYWJpbGl0aWVzLmJsb2NrY2hhaW4uZXZtLnYxYWxwaGEuQ2FsbE1zZyIjChBFc3RpbWF0ZUdhc1JlcGx5Eg8KA2dhcxgBIAEoBEICMAAiKwobR2V0VHJhbnNhY3Rpb25CeUhhc2hSZXF1ZXN0EgwKBGhhc2gYASABKAwiYgoZR2V0VHJhbnNhY3Rpb25CeUhhc2hSZXBseRJFCgt0cmFuc2FjdGlvbhgBIAEoCzIwLmNhcGFiaWxpdGllcy5ibG9ja2NoYWluLmV2bS52MWFscGhhLlRyYW5zYWN0aW9uIqEBCgtUcmFuc2FjdGlvbhIRCgVub25jZRgBIAEoBEICMAASDwoDZ2FzGAIgASgEQgIwABIKCgJ0bxgDIAEoDBIMCgRkYXRhGAQgASgMEgwKBGhhc2gYBSABKAwSIAoFdmFsdWUYBiABKAsyES52YWx1ZXMudjEuQmlnSW50EiQKCWdhc19wcmljZRgHIAEoCzIRLnZhbHVlcy52MS5CaWdJbnQiLAocR2V0VHJhbnNhY3Rpb25SZWNlaXB0UmVxdWVzdBIMCgRoYXNoGAEgASgMIlsKGkdldFRyYW5zYWN0aW9uUmVjZWlwdFJlcGx5Ej0KB3JlY2VpcHQYASABKAsyLC5jYXBhYmlsaXRpZXMuYmxvY2tjaGFpbi5ldm0udjFhbHBoYS5SZWNlaXB0IpkCCgdSZWNlaXB0EhIKBnN0YXR1cxgBIAEoBEICMAASFAoIZ2FzX3VzZWQYAiABKARCAjAAEhQKCHR4X2luZGV4GAMgASgEQgIwABISCgpibG9ja19oYXNoGAQgASgMEjYKBGxvZ3MYBiADKAsyKC5jYXBhYmlsaXRpZXMuYmxvY2tjaGFpbi5ldm0udjFhbHBoYS5Mb2cSDwoHdHhfaGFzaBgHIAEoDBIuChNlZmZlY3RpdmVfZ2FzX3ByaWNlGAggASgLMhEudmFsdWVzLnYxLkJpZ0ludBInCgxibG9ja19udW1iZXIYCSABKAsyES52YWx1ZXMudjEuQmlnSW50EhgKEGNvbnRyYWN0X2FkZHJlc3MYCiABKAwiQAoVSGVhZGVyQnlOdW1iZXJSZXF1ZXN0EicKDGJsb2NrX251bWJlchgBIAEoCzIRLnZhbHVlcy52MS5CaWdJbnQiUgoTSGVhZGVyQnlOdW1iZXJSZXBseRI7CgZoZWFkZXIYASABKAsyKy5jYXBhYmlsaXRpZXMuYmxvY2tjaGFpbi5ldm0udjFhbHBoYS5IZWFkZXIiawoGSGVhZGVyEhUKCXRpbWVzdGFtcBgBIAEoBEICMAASJwoMYmxvY2tfbnVtYmVyGAIgASgLMhEudmFsdWVzLnYxLkJpZ0ludBIMCgRoYXNoGAMgASgMEhMKC3BhcmVudF9oYXNoGAQgASgMIlsKGlJlZ2lzdGVyTG9nVHJhY2tpbmdSZXF1ZXN0Ej0KBmZpbHRlchgBIAEoCzItLmNhcGFiaWxpdGllcy5ibG9ja2NoYWluLmV2bS52MWFscGhhLkxQRmlsdGVyIsIBCghMUEZpbHRlchIZCg1tYXhfbG9nc19rZXB0GAEgASgEQgIwABIaCg5yZXRlbnRpb25fdGltZRgCIAEoA0ICMAASGgoObG9nc19wZXJfYmxvY2sYAyABKARCAjAAEgwKBG5hbWUYBCABKAkSEQoJYWRkcmVzc2VzGAUgAygMEhIKCmV2ZW50X3NpZ3MYBiADKAwSDgoGdG9waWMyGAcgAygMEg4KBnRvcGljMxgIIAMoDBIOCgZ0b3BpYzQYCSADKAwiMwocVW5yZWdpc3RlckxvZ1RyYWNraW5nUmVxdWVzdBITCgtmaWx0ZXJfbmFtZRgBIAEoCSKrAQoSV3JpdGVSZXBvcnRSZXF1ZXN0EhAKCHJlY2VpdmVyGAEgASgMEisKBnJlcG9ydBgCIAEoCzIbLnNkay52MWFscGhhLlJlcG9ydFJlc3BvbnNlEkcKCmdhc19jb25maWcYAyABKAsyLi5jYXBhYmlsaXRpZXMuYmxvY2tjaGFpbi5ldm0udjFhbHBoYS5HYXNDb25maWdIAIgBAUINCgtfZ2FzX2NvbmZpZyIiCglHYXNDb25maWcSFQoJZ2FzX2xpbWl0GAEgASgEQgIwACKHAwoQV3JpdGVSZXBvcnRSZXBseRJACgl0eF9zdGF0dXMYASABKA4yLS5jYXBhYmlsaXRpZXMuYmxvY2tjaGFpbi5ldm0udjFhbHBoYS5UeFN0YXR1cxJ1CiJyZWNlaXZlcl9jb250cmFjdF9leGVjdXRpb25fc3RhdHVzGAIgASgOMkQuY2FwYWJpbGl0aWVzLmJsb2NrY2hhaW4uZXZtLnYxYWxwaGEuUmVjZWl2ZXJDb250cmFjdEV4ZWN1dGlvblN0YXR1c0gAiAEBEhQKB3R4X2hhc2gYAyABKAxIAYgBARIvCg90cmFuc2FjdGlvbl9mZWUYBCABKAsyES52YWx1ZXMudjEuQmlnSW50SAKIAQESGgoNZXJyb3JfbWVzc2FnZRgFIAEoCUgDiAEBQiUKI19yZWNlaXZlcl9jb250cmFjdF9leGVjdXRpb25fc3RhdHVzQgoKCF90eF9oYXNoQhIKEF90cmFuc2FjdGlvbl9mZWVCEAoOX2Vycm9yX21lc3NhZ2UqaQoPQ29uZmlkZW5jZUxldmVsEhkKFUNPTkZJREVOQ0VfTEVWRUxfU0FGRRAAEhsKF0NPTkZJREVOQ0VfTEVWRUxfTEFURVNUEAESHgoaQ09ORklERU5DRV9MRVZFTF9GSU5BTElaRUQQAiqCAQofUmVjZWl2ZXJDb250cmFjdEV4ZWN1dGlvblN0YXR1cxIuCipSRUNFSVZFUl9DT05UUkFDVF9FWEVDVVRJT05fU1RBVFVTX1NVQ0NFU1MQABIvCitSRUNFSVZFUl9DT05UUkFDVF9FWEVDVVRJT05fU1RBVFVTX1JFVkVSVEVEEAEqTgoIVHhTdGF0dXMSEwoPVFhfU1RBVFVTX0ZBVEFMEAASFgoSVFhfU1RBVFVTX1JFVkVSVEVEEAESFQoRVFhfU1RBVFVTX1NVQ0NFU1MQAjLXDwoGQ2xpZW50EoABCgxDYWxsQ29udHJhY3QSOC5jYXBhYmlsaXRpZXMuYmxvY2tjaGFpbi5ldm0udjFhbHBoYS5DYWxsQ29udHJhY3RSZXF1ZXN0GjYuY2FwYWJpbGl0aWVzLmJsb2NrY2hhaW4uZXZtLnYxYWxwaGEuQ2FsbENvbnRyYWN0UmVwbHkSegoKRmlsdGVyTG9ncxI2LmNhcGFiaWxpdGllcy5ibG9ja2NoYWluLmV2bS52MWFscGhhLkZpbHRlckxvZ3NSZXF1ZXN0GjQuY2FwYWJpbGl0aWVzLmJsb2NrY2hhaW4uZXZtLnYxYWxwaGEuRmlsdGVyTG9nc1JlcGx5EncKCUJhbGFuY2VBdBI1LmNhcGFiaWxpdGllcy5ibG9ja2NoYWluLmV2bS52MWFscGhhLkJhbGFuY2VBdFJlcXVlc3QaMy5jYXBhYmlsaXRpZXMuYmxvY2tjaGFpbi5ldm0udjFhbHBoYS5CYWxhbmNlQXRSZXBseRJ9CgtFc3RpbWF0ZUdhcxI3LmNhcGFiaWxpdGllcy5ibG9ja2NoYWluLmV2bS52MWFscGhhLkVzdGltYXRlR2FzUmVxdWVzdBo1LmNhcGFiaWxpdGllcy5ibG9ja2NoYWluLmV2bS52MWFscGhhLkVzdGltYXRlR2FzUmVwbHkSmAEKFEdldFRyYW5zYWN0aW9uQnlIYXNoEkAuY2FwYWJpbGl0aWVzLmJsb2NrY2hhaW4uZXZtLnYxYWxwaGEuR2V0VHJhbnNhY3Rpb25CeUhhc2hSZXF1ZXN0Gj4uY2FwYWJpbGl0aWVzLmJsb2NrY2hhaW4uZXZtLnYxYWxwaGEuR2V0VHJhbnNhY3Rpb25CeUhhc2hSZXBseRKbAQoVR2V0VHJhbnNhY3Rpb25SZWNlaXB0EkEuY2FwYWJpbGl0aWVzLmJsb2NrY2hhaW4uZXZtLnYxYWxwaGEuR2V0VHJhbnNhY3Rpb25SZWNlaXB0UmVxdWVzdBo/LmNhcGFiaWxpdGllcy5ibG9ja2NoYWluLmV2bS52MWFscGhhLkdldFRyYW5zYWN0aW9uUmVjZWlwdFJlcGx5EoYBCg5IZWFkZXJCeU51bWJlchI6LmNhcGFiaWxpdGllcy5ibG9ja2NoYWluLmV2bS52MWFscGhhLkhlYWRlckJ5TnVtYmVyUmVxdWVzdBo4LmNhcGFiaWxpdGllcy5ibG9ja2NoYWluLmV2bS52MWFscGhhLkhlYWRlckJ5TnVtYmVyUmVwbHkSbgoTUmVnaXN0ZXJMb2dUcmFja2luZxI/LmNhcGFiaWxpdGllcy5ibG9ja2NoYWluLmV2bS52MWFscGhhLlJlZ2lzdGVyTG9nVHJhY2tpbmdSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5EnIKFVVucmVnaXN0ZXJMb2dUcmFja2luZxJBLmNhcGFiaWxpdGllcy5ibG9ja2NoYWluLmV2bS52MWFscGhhLlVucmVnaXN0ZXJMb2dUcmFja2luZ1JlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkSdgoKTG9nVHJpZ2dlchI8LmNhcGFiaWxpdGllcy5ibG9ja2NoYWluLmV2bS52MWFscGhhLkZpbHRlckxvZ1RyaWdnZXJSZXF1ZXN0GiguY2FwYWJpbGl0aWVzLmJsb2NrY2hhaW4uZXZtLnYxYWxwaGEuTG9nMAESfQoLV3JpdGVSZXBvcnQSNy5jYXBhYmlsaXRpZXMuYmxvY2tjaGFpbi5ldm0udjFhbHBoYS5Xcml0ZVJlcG9ydFJlcXVlc3QaNS5jYXBhYmlsaXRpZXMuYmxvY2tjaGFpbi5ldm0udjFhbHBoYS5Xcml0ZVJlcG9ydFJlcGx5GrgEgrUYswQIARIJZXZtQDEuMC4wGqMECg1DaGFpblNlbGVjdG9yEpEEEo4ECh0KEWF2YWxhbmNoZS1tYWlubmV0ENXnisDh1ZikWQojChZhdmFsYW5jaGUtdGVzdG5ldC1mdWppEJv5/JCi46j4zAEKLwojYmluYW5jZV9zbWFydF9jaGFpbi1tYWlubmV0LW9wYm5iLTEQia2P75PG17sGCjAKI2JpbmFuY2Vfc21hcnRfY2hhaW4tdGVzdG5ldC1vcGJuYi0xEI71hZHBg4+cuAEKHAoQZXRoZXJldW0tbWFpbm5ldBCV9vHkz7KmwkUKJwobZXRoZXJldW0tbWFpbm5ldC1hcmJpdHJ1bS0xEMTojc2Om6HXRAonChtldGhlcmV1bS1tYWlubmV0LW9wdGltaXNtLTEQuJWPw/f+0OkzCiUKGGV0aGVyZXVtLXRlc3RuZXQtc2Vwb2xpYRDZteTO/MnuoN4BCi8KI2V0aGVyZXVtLXRlc3RuZXQtc2Vwb2xpYS1hcmJpdHJ1bS0xEOrO7v/qtoSjMAosCh9ldGhlcmV1bS10ZXN0bmV0LXNlcG9saWEtYmFzZS0xELjKue/2kK7IjwEKLwojZXRoZXJldW0tdGVzdG5ldC1zZXBvbGlhLW9wdGltaXNtLTEQn4bFob7Yw8BIChsKD3BvbHlnb24tbWFpbm5ldBCxq+TwmpKGnTgKIQoUcG9seWdvbi10ZXN0bmV0LWFtb3kQzY/W3/HHkPrhAULlAQonY29tLmNhcGFiaWxpdGllcy5ibG9ja2NoYWluLmV2bS52MWFscGhhQgtDbGllbnRQcm90b1ABogIDQ0JFqgIjQ2FwYWJpbGl0aWVzLkJsb2NrY2hhaW4uRXZtLlYxYWxwaGHKAiNDYXBhYmlsaXRpZXNcQmxvY2tjaGFpblxFdm1cVjFhbHBoYeICL0NhcGFiaWxpdGllc1xCbG9ja2NoYWluXEV2bVxWMWFscGhhXEdQQk1ldGFkYXRh6gImQ2FwYWJpbGl0aWVzOjpCbG9ja2NoYWluOjpFdm06OlYxYWxwaGFiBnByb3RvMw", [file_google_protobuf_empty, file_sdk_v1alpha_sdk, file_tools_generator_v1alpha_cre_metadata, file_values_v1_values]); /** * @generated from message capabilities.blockchain.evm.v1alpha.TopicValues */ -export type TopicValues = Message<'capabilities.blockchain.evm.v1alpha.TopicValues'> & { - /** - * list of possible values for any topic, in [32]byte fix-sized array format - * - * @generated from field: repeated bytes values = 1; - */ - values: Uint8Array[] -} +export type TopicValues = Message<"capabilities.blockchain.evm.v1alpha.TopicValues"> & { + /** + * list of possible values for any topic, in [32]byte fix-sized array format + * + * @generated from field: repeated bytes values = 1; + */ + values: Uint8Array[]; +}; /** * @generated from message capabilities.blockchain.evm.v1alpha.TopicValues */ export type TopicValuesJson = { - /** - * list of possible values for any topic, in [32]byte fix-sized array format - * - * @generated from field: repeated bytes values = 1; - */ - values?: string[] -} + /** + * list of possible values for any topic, in [32]byte fix-sized array format + * + * @generated from field: repeated bytes values = 1; + */ + values?: string[]; +}; /** * Describes the message capabilities.blockchain.evm.v1alpha.TopicValues. * Use `create(TopicValuesSchema)` to create a new message. */ -export const TopicValuesSchema: GenMessage = - /*@__PURE__*/ - messageDesc(file_capabilities_blockchain_evm_v1alpha_client, 0) +export const TopicValuesSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_capabilities_blockchain_evm_v1alpha_client, 0); /** * @generated from message capabilities.blockchain.evm.v1alpha.FilterLogTriggerRequest */ -export type FilterLogTriggerRequest = - Message<'capabilities.blockchain.evm.v1alpha.FilterLogTriggerRequest'> & { - /** - * list of addresses to include in evm address [20]byte fix-sized array format, at least one address is required - * - * @generated from field: repeated bytes addresses = 1; - */ - addresses: Uint8Array[] - - /** - * - * TopicValues is a fixed 4 length array of possible values for any topic where: - * a) the first element is an array of the event signatures (keccak256 of the event name and indexed args types), it has to have at least one value - * b) the second element is an array of possible values for the first indexed argument, can be empty - * c) the third element is an array of possible values for the second indexed argument, can be empty - * d) the fourth element is an array of possible values for the third indexed argument, can be empty - * - * @generated from field: repeated capabilities.blockchain.evm.v1alpha.TopicValues topics = 2; - */ - topics: TopicValues[] - - /** - * optional, defaults to "SAFE" - * - * @generated from field: capabilities.blockchain.evm.v1alpha.ConfidenceLevel confidence = 3; - */ - confidence: ConfidenceLevel - } +export type FilterLogTriggerRequest = Message<"capabilities.blockchain.evm.v1alpha.FilterLogTriggerRequest"> & { + /** + * list of addresses to include in evm address [20]byte fix-sized array format, at least one address is required + * + * @generated from field: repeated bytes addresses = 1; + */ + addresses: Uint8Array[]; + + /** + * + * TopicValues is a fixed 4 length array of possible values for any topic where: + * a) the first element is an array of the event signatures (keccak256 of the event name and indexed args types), it has to have at least one value + * b) the second element is an array of possible values for the first indexed argument, can be empty + * c) the third element is an array of possible values for the second indexed argument, can be empty + * d) the fourth element is an array of possible values for the third indexed argument, can be empty + * + * @generated from field: repeated capabilities.blockchain.evm.v1alpha.TopicValues topics = 2; + */ + topics: TopicValues[]; + + /** + * optional, defaults to "SAFE" + * + * @generated from field: capabilities.blockchain.evm.v1alpha.ConfidenceLevel confidence = 3; + */ + confidence: ConfidenceLevel; +}; /** * @generated from message capabilities.blockchain.evm.v1alpha.FilterLogTriggerRequest */ export type FilterLogTriggerRequestJson = { - /** - * list of addresses to include in evm address [20]byte fix-sized array format, at least one address is required - * - * @generated from field: repeated bytes addresses = 1; - */ - addresses?: string[] - - /** - * - * TopicValues is a fixed 4 length array of possible values for any topic where: - * a) the first element is an array of the event signatures (keccak256 of the event name and indexed args types), it has to have at least one value - * b) the second element is an array of possible values for the first indexed argument, can be empty - * c) the third element is an array of possible values for the second indexed argument, can be empty - * d) the fourth element is an array of possible values for the third indexed argument, can be empty - * - * @generated from field: repeated capabilities.blockchain.evm.v1alpha.TopicValues topics = 2; - */ - topics?: TopicValuesJson[] - - /** - * optional, defaults to "SAFE" - * - * @generated from field: capabilities.blockchain.evm.v1alpha.ConfidenceLevel confidence = 3; - */ - confidence?: ConfidenceLevelJson -} + /** + * list of addresses to include in evm address [20]byte fix-sized array format, at least one address is required + * + * @generated from field: repeated bytes addresses = 1; + */ + addresses?: string[]; + + /** + * + * TopicValues is a fixed 4 length array of possible values for any topic where: + * a) the first element is an array of the event signatures (keccak256 of the event name and indexed args types), it has to have at least one value + * b) the second element is an array of possible values for the first indexed argument, can be empty + * c) the third element is an array of possible values for the second indexed argument, can be empty + * d) the fourth element is an array of possible values for the third indexed argument, can be empty + * + * @generated from field: repeated capabilities.blockchain.evm.v1alpha.TopicValues topics = 2; + */ + topics?: TopicValuesJson[]; + + /** + * optional, defaults to "SAFE" + * + * @generated from field: capabilities.blockchain.evm.v1alpha.ConfidenceLevel confidence = 3; + */ + confidence?: ConfidenceLevelJson; +}; /** * Describes the message capabilities.blockchain.evm.v1alpha.FilterLogTriggerRequest. * Use `create(FilterLogTriggerRequestSchema)` to create a new message. */ -export const FilterLogTriggerRequestSchema: GenMessage< - FilterLogTriggerRequest, - { jsonType: FilterLogTriggerRequestJson } -> = /*@__PURE__*/ messageDesc(file_capabilities_blockchain_evm_v1alpha_client, 1) +export const FilterLogTriggerRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_capabilities_blockchain_evm_v1alpha_client, 1); /** * CallContractRequest has arguments for reading a contract as specified in the call message at a block height defined by blockNumber where: @@ -142,18 +129,17 @@ export const FilterLogTriggerRequestSchema: GenMessage< * * @generated from message capabilities.blockchain.evm.v1alpha.CallContractRequest */ -export type CallContractRequest = - Message<'capabilities.blockchain.evm.v1alpha.CallContractRequest'> & { - /** - * @generated from field: capabilities.blockchain.evm.v1alpha.CallMsg call = 1; - */ - call?: CallMsg +export type CallContractRequest = Message<"capabilities.blockchain.evm.v1alpha.CallContractRequest"> & { + /** + * @generated from field: capabilities.blockchain.evm.v1alpha.CallMsg call = 1; + */ + call?: CallMsg; - /** - * @generated from field: values.v1.BigInt block_number = 2; - */ - blockNumber?: BigInt - } + /** + * @generated from field: values.v1.BigInt block_number = 2; + */ + blockNumber?: BigInt; +}; /** * CallContractRequest has arguments for reading a contract as specified in the call message at a block height defined by blockNumber where: @@ -166,192 +152,185 @@ export type CallContractRequest = * @generated from message capabilities.blockchain.evm.v1alpha.CallContractRequest */ export type CallContractRequestJson = { - /** - * @generated from field: capabilities.blockchain.evm.v1alpha.CallMsg call = 1; - */ - call?: CallMsgJson - - /** - * @generated from field: values.v1.BigInt block_number = 2; - */ - blockNumber?: BigIntJson -} + /** + * @generated from field: capabilities.blockchain.evm.v1alpha.CallMsg call = 1; + */ + call?: CallMsgJson; + + /** + * @generated from field: values.v1.BigInt block_number = 2; + */ + blockNumber?: BigIntJson; +}; /** * Describes the message capabilities.blockchain.evm.v1alpha.CallContractRequest. * Use `create(CallContractRequestSchema)` to create a new message. */ -export const CallContractRequestSchema: GenMessage< - CallContractRequest, - { jsonType: CallContractRequestJson } -> = /*@__PURE__*/ messageDesc(file_capabilities_blockchain_evm_v1alpha_client, 2) +export const CallContractRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_capabilities_blockchain_evm_v1alpha_client, 2); /** * @generated from message capabilities.blockchain.evm.v1alpha.CallContractReply */ -export type CallContractReply = Message<'capabilities.blockchain.evm.v1alpha.CallContractReply'> & { - /** - * solidity-spec abi encoded bytes - * - * @generated from field: bytes data = 1; - */ - data: Uint8Array -} +export type CallContractReply = Message<"capabilities.blockchain.evm.v1alpha.CallContractReply"> & { + /** + * solidity-spec abi encoded bytes + * + * @generated from field: bytes data = 1; + */ + data: Uint8Array; +}; /** * @generated from message capabilities.blockchain.evm.v1alpha.CallContractReply */ export type CallContractReplyJson = { - /** - * solidity-spec abi encoded bytes - * - * @generated from field: bytes data = 1; - */ - data?: string -} + /** + * solidity-spec abi encoded bytes + * + * @generated from field: bytes data = 1; + */ + data?: string; +}; /** * Describes the message capabilities.blockchain.evm.v1alpha.CallContractReply. * Use `create(CallContractReplySchema)` to create a new message. */ -export const CallContractReplySchema: GenMessage< - CallContractReply, - { jsonType: CallContractReplyJson } -> = /*@__PURE__*/ messageDesc(file_capabilities_blockchain_evm_v1alpha_client, 3) +export const CallContractReplySchema: GenMessage = /*@__PURE__*/ + messageDesc(file_capabilities_blockchain_evm_v1alpha_client, 3); /** * @generated from message capabilities.blockchain.evm.v1alpha.FilterLogsRequest */ -export type FilterLogsRequest = Message<'capabilities.blockchain.evm.v1alpha.FilterLogsRequest'> & { - /** - * @generated from field: capabilities.blockchain.evm.v1alpha.FilterQuery filter_query = 1; - */ - filterQuery?: FilterQuery -} +export type FilterLogsRequest = Message<"capabilities.blockchain.evm.v1alpha.FilterLogsRequest"> & { + /** + * @generated from field: capabilities.blockchain.evm.v1alpha.FilterQuery filter_query = 1; + */ + filterQuery?: FilterQuery; +}; /** * @generated from message capabilities.blockchain.evm.v1alpha.FilterLogsRequest */ export type FilterLogsRequestJson = { - /** - * @generated from field: capabilities.blockchain.evm.v1alpha.FilterQuery filter_query = 1; - */ - filterQuery?: FilterQueryJson -} + /** + * @generated from field: capabilities.blockchain.evm.v1alpha.FilterQuery filter_query = 1; + */ + filterQuery?: FilterQueryJson; +}; /** * Describes the message capabilities.blockchain.evm.v1alpha.FilterLogsRequest. * Use `create(FilterLogsRequestSchema)` to create a new message. */ -export const FilterLogsRequestSchema: GenMessage< - FilterLogsRequest, - { jsonType: FilterLogsRequestJson } -> = /*@__PURE__*/ messageDesc(file_capabilities_blockchain_evm_v1alpha_client, 4) +export const FilterLogsRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_capabilities_blockchain_evm_v1alpha_client, 4); /** * @generated from message capabilities.blockchain.evm.v1alpha.FilterLogsReply */ -export type FilterLogsReply = Message<'capabilities.blockchain.evm.v1alpha.FilterLogsReply'> & { - /** - * @generated from field: repeated capabilities.blockchain.evm.v1alpha.Log logs = 1; - */ - logs: Log[] -} +export type FilterLogsReply = Message<"capabilities.blockchain.evm.v1alpha.FilterLogsReply"> & { + /** + * @generated from field: repeated capabilities.blockchain.evm.v1alpha.Log logs = 1; + */ + logs: Log[]; +}; /** * @generated from message capabilities.blockchain.evm.v1alpha.FilterLogsReply */ export type FilterLogsReplyJson = { - /** - * @generated from field: repeated capabilities.blockchain.evm.v1alpha.Log logs = 1; - */ - logs?: LogJson[] -} + /** + * @generated from field: repeated capabilities.blockchain.evm.v1alpha.Log logs = 1; + */ + logs?: LogJson[]; +}; /** * Describes the message capabilities.blockchain.evm.v1alpha.FilterLogsReply. * Use `create(FilterLogsReplySchema)` to create a new message. */ -export const FilterLogsReplySchema: GenMessage = - /*@__PURE__*/ - messageDesc(file_capabilities_blockchain_evm_v1alpha_client, 5) +export const FilterLogsReplySchema: GenMessage = /*@__PURE__*/ + messageDesc(file_capabilities_blockchain_evm_v1alpha_client, 5); /** * represents evm-style log * * @generated from message capabilities.blockchain.evm.v1alpha.Log */ -export type Log = Message<'capabilities.blockchain.evm.v1alpha.Log'> & { - /** - * address of the contract emitted the log in evm address [20]byte fix-sized array format - * - * @generated from field: bytes address = 1; - */ - address: Uint8Array - - /** - * indexed log fields, in [32]byte fix-sized array format - * - * @generated from field: repeated bytes topics = 2; - */ - topics: Uint8Array[] - - /** - * hash of the transaction containing the log, in [32]byte fix-sized array format - * - * @generated from field: bytes tx_hash = 3; - */ - txHash: Uint8Array - - /** - * hash of the block containing the log, in [32]byte fix-sized array format - * - * @generated from field: bytes block_hash = 4; - */ - blockHash: Uint8Array - - /** - * solidity-spec abi encoded log Data - * - * @generated from field: bytes data = 5; - */ - data: Uint8Array - - /** - * keccak256 of event signature, in [32]byte fix-sized array format - * - * @generated from field: bytes event_sig = 6; - */ - eventSig: Uint8Array - - /** - * block number containing the log - * - * @generated from field: values.v1.BigInt block_number = 7; - */ - blockNumber?: BigInt - - /** - * index of transaction emmited the log - * - * @generated from field: uint32 tx_index = 8; - */ - txIndex: number - - /** - * index of the Log within the intire block - * - * @generated from field: uint32 index = 9; - */ - index: number - - /** - * flag if the log was removed during reorg - * - * @generated from field: bool removed = 10; - */ - removed: boolean -} +export type Log = Message<"capabilities.blockchain.evm.v1alpha.Log"> & { + /** + * address of the contract emitted the log in evm address [20]byte fix-sized array format + * + * @generated from field: bytes address = 1; + */ + address: Uint8Array; + + /** + * indexed log fields, in [32]byte fix-sized array format + * + * @generated from field: repeated bytes topics = 2; + */ + topics: Uint8Array[]; + + /** + * hash of the transaction containing the log, in [32]byte fix-sized array format + * + * @generated from field: bytes tx_hash = 3; + */ + txHash: Uint8Array; + + /** + * hash of the block containing the log, in [32]byte fix-sized array format + * + * @generated from field: bytes block_hash = 4; + */ + blockHash: Uint8Array; + + /** + * solidity-spec abi encoded log Data + * + * @generated from field: bytes data = 5; + */ + data: Uint8Array; + + /** + * keccak256 of event signature, in [32]byte fix-sized array format + * + * @generated from field: bytes event_sig = 6; + */ + eventSig: Uint8Array; + + /** + * block number containing the log + * + * @generated from field: values.v1.BigInt block_number = 7; + */ + blockNumber?: BigInt; + + /** + * index of transaction emmited the log + * + * @generated from field: uint32 tx_index = 8; + */ + txIndex: number; + + /** + * index of the Log within the intire block + * + * @generated from field: uint32 index = 9; + */ + index: number; + + /** + * flag if the log was removed during reorg + * + * @generated from field: bool removed = 10; + */ + removed: boolean; +}; /** * represents evm-style log @@ -359,112 +338,111 @@ export type Log = Message<'capabilities.blockchain.evm.v1alpha.Log'> & { * @generated from message capabilities.blockchain.evm.v1alpha.Log */ export type LogJson = { - /** - * address of the contract emitted the log in evm address [20]byte fix-sized array format - * - * @generated from field: bytes address = 1; - */ - address?: string - - /** - * indexed log fields, in [32]byte fix-sized array format - * - * @generated from field: repeated bytes topics = 2; - */ - topics?: string[] - - /** - * hash of the transaction containing the log, in [32]byte fix-sized array format - * - * @generated from field: bytes tx_hash = 3; - */ - txHash?: string - - /** - * hash of the block containing the log, in [32]byte fix-sized array format - * - * @generated from field: bytes block_hash = 4; - */ - blockHash?: string - - /** - * solidity-spec abi encoded log Data - * - * @generated from field: bytes data = 5; - */ - data?: string - - /** - * keccak256 of event signature, in [32]byte fix-sized array format - * - * @generated from field: bytes event_sig = 6; - */ - eventSig?: string - - /** - * block number containing the log - * - * @generated from field: values.v1.BigInt block_number = 7; - */ - blockNumber?: BigIntJson - - /** - * index of transaction emmited the log - * - * @generated from field: uint32 tx_index = 8; - */ - txIndex?: number - - /** - * index of the Log within the intire block - * - * @generated from field: uint32 index = 9; - */ - index?: number - - /** - * flag if the log was removed during reorg - * - * @generated from field: bool removed = 10; - */ - removed?: boolean -} + /** + * address of the contract emitted the log in evm address [20]byte fix-sized array format + * + * @generated from field: bytes address = 1; + */ + address?: string; + + /** + * indexed log fields, in [32]byte fix-sized array format + * + * @generated from field: repeated bytes topics = 2; + */ + topics?: string[]; + + /** + * hash of the transaction containing the log, in [32]byte fix-sized array format + * + * @generated from field: bytes tx_hash = 3; + */ + txHash?: string; + + /** + * hash of the block containing the log, in [32]byte fix-sized array format + * + * @generated from field: bytes block_hash = 4; + */ + blockHash?: string; + + /** + * solidity-spec abi encoded log Data + * + * @generated from field: bytes data = 5; + */ + data?: string; + + /** + * keccak256 of event signature, in [32]byte fix-sized array format + * + * @generated from field: bytes event_sig = 6; + */ + eventSig?: string; + + /** + * block number containing the log + * + * @generated from field: values.v1.BigInt block_number = 7; + */ + blockNumber?: BigIntJson; + + /** + * index of transaction emmited the log + * + * @generated from field: uint32 tx_index = 8; + */ + txIndex?: number; + + /** + * index of the Log within the intire block + * + * @generated from field: uint32 index = 9; + */ + index?: number; + + /** + * flag if the log was removed during reorg + * + * @generated from field: bool removed = 10; + */ + removed?: boolean; +}; /** * Describes the message capabilities.blockchain.evm.v1alpha.Log. * Use `create(LogSchema)` to create a new message. */ -export const LogSchema: GenMessage = - /*@__PURE__*/ - messageDesc(file_capabilities_blockchain_evm_v1alpha_client, 6) +export const LogSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_capabilities_blockchain_evm_v1alpha_client, 6); /** * represents simplified evm-style CallMsg * * @generated from message capabilities.blockchain.evm.v1alpha.CallMsg */ -export type CallMsg = Message<'capabilities.blockchain.evm.v1alpha.CallMsg'> & { - /** - * sender address in evm address [20]byte fix-sized array format - * - * @generated from field: bytes from = 1; - */ - from: Uint8Array - - /** - * contract address in evm address [20]byte fix-sized array format - * - * @generated from field: bytes to = 2; - */ - to: Uint8Array - - /** - * solidity-spec abi encoded bytes - * - * @generated from field: bytes data = 3; - */ - data: Uint8Array -} +export type CallMsg = Message<"capabilities.blockchain.evm.v1alpha.CallMsg"> & { + /** + * sender address in evm address [20]byte fix-sized array format + * + * @generated from field: bytes from = 1; + */ + from: Uint8Array; + + /** + * contract address in evm address [20]byte fix-sized array format + * + * @generated from field: bytes to = 2; + */ + to: Uint8Array; + + /** + * solidity-spec abi encoded bytes + * + * @generated from field: bytes data = 3; + */ + data: Uint8Array; +}; /** * represents simplified evm-style CallMsg @@ -472,77 +450,76 @@ export type CallMsg = Message<'capabilities.blockchain.evm.v1alpha.CallMsg'> & { * @generated from message capabilities.blockchain.evm.v1alpha.CallMsg */ export type CallMsgJson = { - /** - * sender address in evm address [20]byte fix-sized array format - * - * @generated from field: bytes from = 1; - */ - from?: string - - /** - * contract address in evm address [20]byte fix-sized array format - * - * @generated from field: bytes to = 2; - */ - to?: string - - /** - * solidity-spec abi encoded bytes - * - * @generated from field: bytes data = 3; - */ - data?: string -} + /** + * sender address in evm address [20]byte fix-sized array format + * + * @generated from field: bytes from = 1; + */ + from?: string; + + /** + * contract address in evm address [20]byte fix-sized array format + * + * @generated from field: bytes to = 2; + */ + to?: string; + + /** + * solidity-spec abi encoded bytes + * + * @generated from field: bytes data = 3; + */ + data?: string; +}; /** * Describes the message capabilities.blockchain.evm.v1alpha.CallMsg. * Use `create(CallMsgSchema)` to create a new message. */ -export const CallMsgSchema: GenMessage = - /*@__PURE__*/ - messageDesc(file_capabilities_blockchain_evm_v1alpha_client, 7) +export const CallMsgSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_capabilities_blockchain_evm_v1alpha_client, 7); /** * represents evm-style filter query * * @generated from message capabilities.blockchain.evm.v1alpha.FilterQuery */ -export type FilterQuery = Message<'capabilities.blockchain.evm.v1alpha.FilterQuery'> & { - /** - * exact block (cant use from/to), in [32]byte fix-sized array format - * - * @generated from field: bytes block_hash = 1; - */ - blockHash: Uint8Array - - /** - * start block range - * - * @generated from field: values.v1.BigInt from_block = 2; - */ - fromBlock?: BigInt - - /** - * end block range - * - * @generated from field: values.v1.BigInt to_block = 3; - */ - toBlock?: BigInt - - /** - * contract(s) to filter logs from in evm address [20]byte fix-sized array format - * - * @generated from field: repeated bytes addresses = 4; - */ - addresses: Uint8Array[] - - /** - * filter log by event signature and indexed args - * - * @generated from field: repeated capabilities.blockchain.evm.v1alpha.Topics topics = 5; - */ - topics: Topics[] -} +export type FilterQuery = Message<"capabilities.blockchain.evm.v1alpha.FilterQuery"> & { + /** + * exact block (cant use from/to), in [32]byte fix-sized array format + * + * @generated from field: bytes block_hash = 1; + */ + blockHash: Uint8Array; + + /** + * start block range + * + * @generated from field: values.v1.BigInt from_block = 2; + */ + fromBlock?: BigInt; + + /** + * end block range + * + * @generated from field: values.v1.BigInt to_block = 3; + */ + toBlock?: BigInt; + + /** + * contract(s) to filter logs from in evm address [20]byte fix-sized array format + * + * @generated from field: repeated bytes addresses = 4; + */ + addresses: Uint8Array[]; + + /** + * filter log by event signature and indexed args + * + * @generated from field: repeated capabilities.blockchain.evm.v1alpha.Topics topics = 5; + */ + topics: Topics[]; +}; /** * represents evm-style filter query @@ -550,343 +527,327 @@ export type FilterQuery = Message<'capabilities.blockchain.evm.v1alpha.FilterQue * @generated from message capabilities.blockchain.evm.v1alpha.FilterQuery */ export type FilterQueryJson = { - /** - * exact block (cant use from/to), in [32]byte fix-sized array format - * - * @generated from field: bytes block_hash = 1; - */ - blockHash?: string - - /** - * start block range - * - * @generated from field: values.v1.BigInt from_block = 2; - */ - fromBlock?: BigIntJson - - /** - * end block range - * - * @generated from field: values.v1.BigInt to_block = 3; - */ - toBlock?: BigIntJson - - /** - * contract(s) to filter logs from in evm address [20]byte fix-sized array format - * - * @generated from field: repeated bytes addresses = 4; - */ - addresses?: string[] - - /** - * filter log by event signature and indexed args - * - * @generated from field: repeated capabilities.blockchain.evm.v1alpha.Topics topics = 5; - */ - topics?: TopicsJson[] -} + /** + * exact block (cant use from/to), in [32]byte fix-sized array format + * + * @generated from field: bytes block_hash = 1; + */ + blockHash?: string; + + /** + * start block range + * + * @generated from field: values.v1.BigInt from_block = 2; + */ + fromBlock?: BigIntJson; + + /** + * end block range + * + * @generated from field: values.v1.BigInt to_block = 3; + */ + toBlock?: BigIntJson; + + /** + * contract(s) to filter logs from in evm address [20]byte fix-sized array format + * + * @generated from field: repeated bytes addresses = 4; + */ + addresses?: string[]; + + /** + * filter log by event signature and indexed args + * + * @generated from field: repeated capabilities.blockchain.evm.v1alpha.Topics topics = 5; + */ + topics?: TopicsJson[]; +}; /** * Describes the message capabilities.blockchain.evm.v1alpha.FilterQuery. * Use `create(FilterQuerySchema)` to create a new message. */ -export const FilterQuerySchema: GenMessage = - /*@__PURE__*/ - messageDesc(file_capabilities_blockchain_evm_v1alpha_client, 8) +export const FilterQuerySchema: GenMessage = /*@__PURE__*/ + messageDesc(file_capabilities_blockchain_evm_v1alpha_client, 8); /** * @generated from message capabilities.blockchain.evm.v1alpha.Topics */ -export type Topics = Message<'capabilities.blockchain.evm.v1alpha.Topics'> & { - /** - * in [32]byte fix-sized array format - * - * @generated from field: repeated bytes topic = 1; - */ - topic: Uint8Array[] -} +export type Topics = Message<"capabilities.blockchain.evm.v1alpha.Topics"> & { + /** + * in [32]byte fix-sized array format + * + * @generated from field: repeated bytes topic = 1; + */ + topic: Uint8Array[]; +}; /** * @generated from message capabilities.blockchain.evm.v1alpha.Topics */ export type TopicsJson = { - /** - * in [32]byte fix-sized array format - * - * @generated from field: repeated bytes topic = 1; - */ - topic?: string[] -} + /** + * in [32]byte fix-sized array format + * + * @generated from field: repeated bytes topic = 1; + */ + topic?: string[]; +}; /** * Describes the message capabilities.blockchain.evm.v1alpha.Topics. * Use `create(TopicsSchema)` to create a new message. */ -export const TopicsSchema: GenMessage = - /*@__PURE__*/ - messageDesc(file_capabilities_blockchain_evm_v1alpha_client, 9) +export const TopicsSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_capabilities_blockchain_evm_v1alpha_client, 9); /** * @generated from message capabilities.blockchain.evm.v1alpha.BalanceAtRequest */ -export type BalanceAtRequest = Message<'capabilities.blockchain.evm.v1alpha.BalanceAtRequest'> & { - /** - * in evm address [20]byte fix-sized array format - * - * @generated from field: bytes account = 1; - */ - account: Uint8Array - - /** - * @generated from field: values.v1.BigInt block_number = 2; - */ - blockNumber?: BigInt -} +export type BalanceAtRequest = Message<"capabilities.blockchain.evm.v1alpha.BalanceAtRequest"> & { + /** + * in evm address [20]byte fix-sized array format + * + * @generated from field: bytes account = 1; + */ + account: Uint8Array; + + /** + * @generated from field: values.v1.BigInt block_number = 2; + */ + blockNumber?: BigInt; +}; /** * @generated from message capabilities.blockchain.evm.v1alpha.BalanceAtRequest */ export type BalanceAtRequestJson = { - /** - * in evm address [20]byte fix-sized array format - * - * @generated from field: bytes account = 1; - */ - account?: string - - /** - * @generated from field: values.v1.BigInt block_number = 2; - */ - blockNumber?: BigIntJson -} + /** + * in evm address [20]byte fix-sized array format + * + * @generated from field: bytes account = 1; + */ + account?: string; + + /** + * @generated from field: values.v1.BigInt block_number = 2; + */ + blockNumber?: BigIntJson; +}; /** * Describes the message capabilities.blockchain.evm.v1alpha.BalanceAtRequest. * Use `create(BalanceAtRequestSchema)` to create a new message. */ -export const BalanceAtRequestSchema: GenMessage< - BalanceAtRequest, - { jsonType: BalanceAtRequestJson } -> = /*@__PURE__*/ messageDesc(file_capabilities_blockchain_evm_v1alpha_client, 10) +export const BalanceAtRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_capabilities_blockchain_evm_v1alpha_client, 10); /** * @generated from message capabilities.blockchain.evm.v1alpha.BalanceAtReply */ -export type BalanceAtReply = Message<'capabilities.blockchain.evm.v1alpha.BalanceAtReply'> & { - /** - * Balance of the account in wei (10^-18 eth) - * - * @generated from field: values.v1.BigInt balance = 1; - */ - balance?: BigInt -} +export type BalanceAtReply = Message<"capabilities.blockchain.evm.v1alpha.BalanceAtReply"> & { + /** + * Balance of the account in wei (10^-18 eth) + * + * @generated from field: values.v1.BigInt balance = 1; + */ + balance?: BigInt; +}; /** * @generated from message capabilities.blockchain.evm.v1alpha.BalanceAtReply */ export type BalanceAtReplyJson = { - /** - * Balance of the account in wei (10^-18 eth) - * - * @generated from field: values.v1.BigInt balance = 1; - */ - balance?: BigIntJson -} + /** + * Balance of the account in wei (10^-18 eth) + * + * @generated from field: values.v1.BigInt balance = 1; + */ + balance?: BigIntJson; +}; /** * Describes the message capabilities.blockchain.evm.v1alpha.BalanceAtReply. * Use `create(BalanceAtReplySchema)` to create a new message. */ -export const BalanceAtReplySchema: GenMessage = - /*@__PURE__*/ - messageDesc(file_capabilities_blockchain_evm_v1alpha_client, 11) +export const BalanceAtReplySchema: GenMessage = /*@__PURE__*/ + messageDesc(file_capabilities_blockchain_evm_v1alpha_client, 11); /** * @generated from message capabilities.blockchain.evm.v1alpha.EstimateGasRequest */ -export type EstimateGasRequest = - Message<'capabilities.blockchain.evm.v1alpha.EstimateGasRequest'> & { - /** - * simulates tx execution returns approximate amount of gas units needed - * - * @generated from field: capabilities.blockchain.evm.v1alpha.CallMsg msg = 1; - */ - msg?: CallMsg - } +export type EstimateGasRequest = Message<"capabilities.blockchain.evm.v1alpha.EstimateGasRequest"> & { + /** + * simulates tx execution returns approximate amount of gas units needed + * + * @generated from field: capabilities.blockchain.evm.v1alpha.CallMsg msg = 1; + */ + msg?: CallMsg; +}; /** * @generated from message capabilities.blockchain.evm.v1alpha.EstimateGasRequest */ export type EstimateGasRequestJson = { - /** - * simulates tx execution returns approximate amount of gas units needed - * - * @generated from field: capabilities.blockchain.evm.v1alpha.CallMsg msg = 1; - */ - msg?: CallMsgJson -} + /** + * simulates tx execution returns approximate amount of gas units needed + * + * @generated from field: capabilities.blockchain.evm.v1alpha.CallMsg msg = 1; + */ + msg?: CallMsgJson; +}; /** * Describes the message capabilities.blockchain.evm.v1alpha.EstimateGasRequest. * Use `create(EstimateGasRequestSchema)` to create a new message. */ -export const EstimateGasRequestSchema: GenMessage< - EstimateGasRequest, - { jsonType: EstimateGasRequestJson } -> = /*@__PURE__*/ messageDesc(file_capabilities_blockchain_evm_v1alpha_client, 12) +export const EstimateGasRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_capabilities_blockchain_evm_v1alpha_client, 12); /** * @generated from message capabilities.blockchain.evm.v1alpha.EstimateGasReply */ -export type EstimateGasReply = Message<'capabilities.blockchain.evm.v1alpha.EstimateGasReply'> & { - /** - * estimated amount of gas in gas units, needed for tx execution - * - * @generated from field: uint64 gas = 1 [jstype = JS_NORMAL]; - */ - gas: bigint -} +export type EstimateGasReply = Message<"capabilities.blockchain.evm.v1alpha.EstimateGasReply"> & { + /** + * estimated amount of gas in gas units, needed for tx execution + * + * @generated from field: uint64 gas = 1 [jstype = JS_NORMAL]; + */ + gas: bigint; +}; /** * @generated from message capabilities.blockchain.evm.v1alpha.EstimateGasReply */ export type EstimateGasReplyJson = { - /** - * estimated amount of gas in gas units, needed for tx execution - * - * @generated from field: uint64 gas = 1 [jstype = JS_NORMAL]; - */ - gas?: string -} + /** + * estimated amount of gas in gas units, needed for tx execution + * + * @generated from field: uint64 gas = 1 [jstype = JS_NORMAL]; + */ + gas?: string; +}; /** * Describes the message capabilities.blockchain.evm.v1alpha.EstimateGasReply. * Use `create(EstimateGasReplySchema)` to create a new message. */ -export const EstimateGasReplySchema: GenMessage< - EstimateGasReply, - { jsonType: EstimateGasReplyJson } -> = /*@__PURE__*/ messageDesc(file_capabilities_blockchain_evm_v1alpha_client, 13) +export const EstimateGasReplySchema: GenMessage = /*@__PURE__*/ + messageDesc(file_capabilities_blockchain_evm_v1alpha_client, 13); /** * @generated from message capabilities.blockchain.evm.v1alpha.GetTransactionByHashRequest */ -export type GetTransactionByHashRequest = - Message<'capabilities.blockchain.evm.v1alpha.GetTransactionByHashRequest'> & { - /** - * in [32]byte fix-sized array format - * - * @generated from field: bytes hash = 1; - */ - hash: Uint8Array - } +export type GetTransactionByHashRequest = Message<"capabilities.blockchain.evm.v1alpha.GetTransactionByHashRequest"> & { + /** + * in [32]byte fix-sized array format + * + * @generated from field: bytes hash = 1; + */ + hash: Uint8Array; +}; /** * @generated from message capabilities.blockchain.evm.v1alpha.GetTransactionByHashRequest */ export type GetTransactionByHashRequestJson = { - /** - * in [32]byte fix-sized array format - * - * @generated from field: bytes hash = 1; - */ - hash?: string -} + /** + * in [32]byte fix-sized array format + * + * @generated from field: bytes hash = 1; + */ + hash?: string; +}; /** * Describes the message capabilities.blockchain.evm.v1alpha.GetTransactionByHashRequest. * Use `create(GetTransactionByHashRequestSchema)` to create a new message. */ -export const GetTransactionByHashRequestSchema: GenMessage< - GetTransactionByHashRequest, - { jsonType: GetTransactionByHashRequestJson } -> = /*@__PURE__*/ messageDesc(file_capabilities_blockchain_evm_v1alpha_client, 14) +export const GetTransactionByHashRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_capabilities_blockchain_evm_v1alpha_client, 14); /** * @generated from message capabilities.blockchain.evm.v1alpha.GetTransactionByHashReply */ -export type GetTransactionByHashReply = - Message<'capabilities.blockchain.evm.v1alpha.GetTransactionByHashReply'> & { - /** - * @generated from field: capabilities.blockchain.evm.v1alpha.Transaction transaction = 1; - */ - transaction?: Transaction - } +export type GetTransactionByHashReply = Message<"capabilities.blockchain.evm.v1alpha.GetTransactionByHashReply"> & { + /** + * @generated from field: capabilities.blockchain.evm.v1alpha.Transaction transaction = 1; + */ + transaction?: Transaction; +}; /** * @generated from message capabilities.blockchain.evm.v1alpha.GetTransactionByHashReply */ export type GetTransactionByHashReplyJson = { - /** - * @generated from field: capabilities.blockchain.evm.v1alpha.Transaction transaction = 1; - */ - transaction?: TransactionJson -} + /** + * @generated from field: capabilities.blockchain.evm.v1alpha.Transaction transaction = 1; + */ + transaction?: TransactionJson; +}; /** * Describes the message capabilities.blockchain.evm.v1alpha.GetTransactionByHashReply. * Use `create(GetTransactionByHashReplySchema)` to create a new message. */ -export const GetTransactionByHashReplySchema: GenMessage< - GetTransactionByHashReply, - { jsonType: GetTransactionByHashReplyJson } -> = /*@__PURE__*/ messageDesc(file_capabilities_blockchain_evm_v1alpha_client, 15) +export const GetTransactionByHashReplySchema: GenMessage = /*@__PURE__*/ + messageDesc(file_capabilities_blockchain_evm_v1alpha_client, 15); /** * represents evm-style transaction * * @generated from message capabilities.blockchain.evm.v1alpha.Transaction */ -export type Transaction = Message<'capabilities.blockchain.evm.v1alpha.Transaction'> & { - /** - * number of txs sent from sender - * - * @generated from field: uint64 nonce = 1 [jstype = JS_NORMAL]; - */ - nonce: bigint - - /** - * max gas allowed per execution (in gas units) - * - * @generated from field: uint64 gas = 2 [jstype = JS_NORMAL]; - */ - gas: bigint - - /** - * recipient address in evm address [20]byte fix-sized array format - * - * @generated from field: bytes to = 3; - */ - to: Uint8Array - - /** - * solidity-spec abi encoded input data for function call payload - * - * @generated from field: bytes data = 4; - */ - data: Uint8Array - - /** - * transaction hash, in [32]byte fix-sized array format - * - * @generated from field: bytes hash = 5; - */ - hash: Uint8Array - - /** - * amount of eth sent in wei - * - * @generated from field: values.v1.BigInt value = 6; - */ - value?: BigInt - - /** - * price for a single gas unit in wei - * - * @generated from field: values.v1.BigInt gas_price = 7; - */ - gasPrice?: BigInt -} +export type Transaction = Message<"capabilities.blockchain.evm.v1alpha.Transaction"> & { + /** + * number of txs sent from sender + * + * @generated from field: uint64 nonce = 1 [jstype = JS_NORMAL]; + */ + nonce: bigint; + + /** + * max gas allowed per execution (in gas units) + * + * @generated from field: uint64 gas = 2 [jstype = JS_NORMAL]; + */ + gas: bigint; + + /** + * recipient address in evm address [20]byte fix-sized array format + * + * @generated from field: bytes to = 3; + */ + to: Uint8Array; + + /** + * solidity-spec abi encoded input data for function call payload + * + * @generated from field: bytes data = 4; + */ + data: Uint8Array; + + /** + * transaction hash, in [32]byte fix-sized array format + * + * @generated from field: bytes hash = 5; + */ + hash: Uint8Array; + + /** + * amount of eth sent in wei + * + * @generated from field: values.v1.BigInt value = 6; + */ + value?: BigInt; + + /** + * price for a single gas unit in wei + * + * @generated from field: values.v1.BigInt gas_price = 7; + */ + gasPrice?: BigInt; +}; /** * represents evm-style transaction @@ -894,197 +855,190 @@ export type Transaction = Message<'capabilities.blockchain.evm.v1alpha.Transacti * @generated from message capabilities.blockchain.evm.v1alpha.Transaction */ export type TransactionJson = { - /** - * number of txs sent from sender - * - * @generated from field: uint64 nonce = 1 [jstype = JS_NORMAL]; - */ - nonce?: string - - /** - * max gas allowed per execution (in gas units) - * - * @generated from field: uint64 gas = 2 [jstype = JS_NORMAL]; - */ - gas?: string - - /** - * recipient address in evm address [20]byte fix-sized array format - * - * @generated from field: bytes to = 3; - */ - to?: string - - /** - * solidity-spec abi encoded input data for function call payload - * - * @generated from field: bytes data = 4; - */ - data?: string - - /** - * transaction hash, in [32]byte fix-sized array format - * - * @generated from field: bytes hash = 5; - */ - hash?: string - - /** - * amount of eth sent in wei - * - * @generated from field: values.v1.BigInt value = 6; - */ - value?: BigIntJson - - /** - * price for a single gas unit in wei - * - * @generated from field: values.v1.BigInt gas_price = 7; - */ - gasPrice?: BigIntJson -} + /** + * number of txs sent from sender + * + * @generated from field: uint64 nonce = 1 [jstype = JS_NORMAL]; + */ + nonce?: string; + + /** + * max gas allowed per execution (in gas units) + * + * @generated from field: uint64 gas = 2 [jstype = JS_NORMAL]; + */ + gas?: string; + + /** + * recipient address in evm address [20]byte fix-sized array format + * + * @generated from field: bytes to = 3; + */ + to?: string; + + /** + * solidity-spec abi encoded input data for function call payload + * + * @generated from field: bytes data = 4; + */ + data?: string; + + /** + * transaction hash, in [32]byte fix-sized array format + * + * @generated from field: bytes hash = 5; + */ + hash?: string; + + /** + * amount of eth sent in wei + * + * @generated from field: values.v1.BigInt value = 6; + */ + value?: BigIntJson; + + /** + * price for a single gas unit in wei + * + * @generated from field: values.v1.BigInt gas_price = 7; + */ + gasPrice?: BigIntJson; +}; /** * Describes the message capabilities.blockchain.evm.v1alpha.Transaction. * Use `create(TransactionSchema)` to create a new message. */ -export const TransactionSchema: GenMessage = - /*@__PURE__*/ - messageDesc(file_capabilities_blockchain_evm_v1alpha_client, 16) +export const TransactionSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_capabilities_blockchain_evm_v1alpha_client, 16); /** * @generated from message capabilities.blockchain.evm.v1alpha.GetTransactionReceiptRequest */ -export type GetTransactionReceiptRequest = - Message<'capabilities.blockchain.evm.v1alpha.GetTransactionReceiptRequest'> & { - /** - * in [32]byte fix-sized array format - * - * @generated from field: bytes hash = 1; - */ - hash: Uint8Array - } +export type GetTransactionReceiptRequest = Message<"capabilities.blockchain.evm.v1alpha.GetTransactionReceiptRequest"> & { + /** + * in [32]byte fix-sized array format + * + * @generated from field: bytes hash = 1; + */ + hash: Uint8Array; +}; /** * @generated from message capabilities.blockchain.evm.v1alpha.GetTransactionReceiptRequest */ export type GetTransactionReceiptRequestJson = { - /** - * in [32]byte fix-sized array format - * - * @generated from field: bytes hash = 1; - */ - hash?: string -} + /** + * in [32]byte fix-sized array format + * + * @generated from field: bytes hash = 1; + */ + hash?: string; +}; /** * Describes the message capabilities.blockchain.evm.v1alpha.GetTransactionReceiptRequest. * Use `create(GetTransactionReceiptRequestSchema)` to create a new message. */ -export const GetTransactionReceiptRequestSchema: GenMessage< - GetTransactionReceiptRequest, - { jsonType: GetTransactionReceiptRequestJson } -> = /*@__PURE__*/ messageDesc(file_capabilities_blockchain_evm_v1alpha_client, 17) +export const GetTransactionReceiptRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_capabilities_blockchain_evm_v1alpha_client, 17); /** * @generated from message capabilities.blockchain.evm.v1alpha.GetTransactionReceiptReply */ -export type GetTransactionReceiptReply = - Message<'capabilities.blockchain.evm.v1alpha.GetTransactionReceiptReply'> & { - /** - * @generated from field: capabilities.blockchain.evm.v1alpha.Receipt receipt = 1; - */ - receipt?: Receipt - } +export type GetTransactionReceiptReply = Message<"capabilities.blockchain.evm.v1alpha.GetTransactionReceiptReply"> & { + /** + * @generated from field: capabilities.blockchain.evm.v1alpha.Receipt receipt = 1; + */ + receipt?: Receipt; +}; /** * @generated from message capabilities.blockchain.evm.v1alpha.GetTransactionReceiptReply */ export type GetTransactionReceiptReplyJson = { - /** - * @generated from field: capabilities.blockchain.evm.v1alpha.Receipt receipt = 1; - */ - receipt?: ReceiptJson -} + /** + * @generated from field: capabilities.blockchain.evm.v1alpha.Receipt receipt = 1; + */ + receipt?: ReceiptJson; +}; /** * Describes the message capabilities.blockchain.evm.v1alpha.GetTransactionReceiptReply. * Use `create(GetTransactionReceiptReplySchema)` to create a new message. */ -export const GetTransactionReceiptReplySchema: GenMessage< - GetTransactionReceiptReply, - { jsonType: GetTransactionReceiptReplyJson } -> = /*@__PURE__*/ messageDesc(file_capabilities_blockchain_evm_v1alpha_client, 18) +export const GetTransactionReceiptReplySchema: GenMessage = /*@__PURE__*/ + messageDesc(file_capabilities_blockchain_evm_v1alpha_client, 18); /** * represents evm-style receipt * * @generated from message capabilities.blockchain.evm.v1alpha.Receipt */ -export type Receipt = Message<'capabilities.blockchain.evm.v1alpha.Receipt'> & { - /** - * 1 for success 0 for failure - * - * @generated from field: uint64 status = 1 [jstype = JS_NORMAL]; - */ - status: bigint - - /** - * gas used by this transaction (in gas units) - * - * @generated from field: uint64 gas_used = 2 [jstype = JS_NORMAL]; - */ - gasUsed: bigint - - /** - * index of the transaction inside of the block - * - * @generated from field: uint64 tx_index = 3 [jstype = JS_NORMAL]; - */ - txIndex: bigint - - /** - * block hash containing the transaction - * - * @generated from field: bytes block_hash = 4; - */ - blockHash: Uint8Array - - /** - * logs emitted by this transaction - * - * @generated from field: repeated capabilities.blockchain.evm.v1alpha.Log logs = 6; - */ - logs: Log[] - - /** - * hash of the transaction this receipt is for, in [32]byte fix-sized array format - * - * @generated from field: bytes tx_hash = 7; - */ - txHash: Uint8Array - - /** - * actual gas price paid in wei (include after EIP-1559) - * - * @generated from field: values.v1.BigInt effective_gas_price = 8; - */ - effectiveGasPrice?: BigInt - - /** - * block number containing the transaction - * - * @generated from field: values.v1.BigInt block_number = 9; - */ - blockNumber?: BigInt - - /** - * address of the contract if this transaction created one in evm address [20]byte fix-sized array format - * - * @generated from field: bytes contract_address = 10; - */ - contractAddress: Uint8Array -} +export type Receipt = Message<"capabilities.blockchain.evm.v1alpha.Receipt"> & { + /** + * 1 for success 0 for failure + * + * @generated from field: uint64 status = 1 [jstype = JS_NORMAL]; + */ + status: bigint; + + /** + * gas used by this transaction (in gas units) + * + * @generated from field: uint64 gas_used = 2 [jstype = JS_NORMAL]; + */ + gasUsed: bigint; + + /** + * index of the transaction inside of the block + * + * @generated from field: uint64 tx_index = 3 [jstype = JS_NORMAL]; + */ + txIndex: bigint; + + /** + * block hash containing the transaction + * + * @generated from field: bytes block_hash = 4; + */ + blockHash: Uint8Array; + + /** + * logs emitted by this transaction + * + * @generated from field: repeated capabilities.blockchain.evm.v1alpha.Log logs = 6; + */ + logs: Log[]; + + /** + * hash of the transaction this receipt is for, in [32]byte fix-sized array format + * + * @generated from field: bytes tx_hash = 7; + */ + txHash: Uint8Array; + + /** + * actual gas price paid in wei (include after EIP-1559) + * + * @generated from field: values.v1.BigInt effective_gas_price = 8; + */ + effectiveGasPrice?: BigInt; + + /** + * block number containing the transaction + * + * @generated from field: values.v1.BigInt block_number = 9; + */ + blockNumber?: BigInt; + + /** + * address of the contract if this transaction created one in evm address [20]byte fix-sized array format + * + * @generated from field: bytes contract_address = 10; + */ + contractAddress: Uint8Array; +}; /** * represents evm-style receipt @@ -1092,90 +1046,88 @@ export type Receipt = Message<'capabilities.blockchain.evm.v1alpha.Receipt'> & { * @generated from message capabilities.blockchain.evm.v1alpha.Receipt */ export type ReceiptJson = { - /** - * 1 for success 0 for failure - * - * @generated from field: uint64 status = 1 [jstype = JS_NORMAL]; - */ - status?: string - - /** - * gas used by this transaction (in gas units) - * - * @generated from field: uint64 gas_used = 2 [jstype = JS_NORMAL]; - */ - gasUsed?: string - - /** - * index of the transaction inside of the block - * - * @generated from field: uint64 tx_index = 3 [jstype = JS_NORMAL]; - */ - txIndex?: string - - /** - * block hash containing the transaction - * - * @generated from field: bytes block_hash = 4; - */ - blockHash?: string - - /** - * logs emitted by this transaction - * - * @generated from field: repeated capabilities.blockchain.evm.v1alpha.Log logs = 6; - */ - logs?: LogJson[] - - /** - * hash of the transaction this receipt is for, in [32]byte fix-sized array format - * - * @generated from field: bytes tx_hash = 7; - */ - txHash?: string - - /** - * actual gas price paid in wei (include after EIP-1559) - * - * @generated from field: values.v1.BigInt effective_gas_price = 8; - */ - effectiveGasPrice?: BigIntJson - - /** - * block number containing the transaction - * - * @generated from field: values.v1.BigInt block_number = 9; - */ - blockNumber?: BigIntJson - - /** - * address of the contract if this transaction created one in evm address [20]byte fix-sized array format - * - * @generated from field: bytes contract_address = 10; - */ - contractAddress?: string -} + /** + * 1 for success 0 for failure + * + * @generated from field: uint64 status = 1 [jstype = JS_NORMAL]; + */ + status?: string; + + /** + * gas used by this transaction (in gas units) + * + * @generated from field: uint64 gas_used = 2 [jstype = JS_NORMAL]; + */ + gasUsed?: string; + + /** + * index of the transaction inside of the block + * + * @generated from field: uint64 tx_index = 3 [jstype = JS_NORMAL]; + */ + txIndex?: string; + + /** + * block hash containing the transaction + * + * @generated from field: bytes block_hash = 4; + */ + blockHash?: string; + + /** + * logs emitted by this transaction + * + * @generated from field: repeated capabilities.blockchain.evm.v1alpha.Log logs = 6; + */ + logs?: LogJson[]; + + /** + * hash of the transaction this receipt is for, in [32]byte fix-sized array format + * + * @generated from field: bytes tx_hash = 7; + */ + txHash?: string; + + /** + * actual gas price paid in wei (include after EIP-1559) + * + * @generated from field: values.v1.BigInt effective_gas_price = 8; + */ + effectiveGasPrice?: BigIntJson; + + /** + * block number containing the transaction + * + * @generated from field: values.v1.BigInt block_number = 9; + */ + blockNumber?: BigIntJson; + + /** + * address of the contract if this transaction created one in evm address [20]byte fix-sized array format + * + * @generated from field: bytes contract_address = 10; + */ + contractAddress?: string; +}; /** * Describes the message capabilities.blockchain.evm.v1alpha.Receipt. * Use `create(ReceiptSchema)` to create a new message. */ -export const ReceiptSchema: GenMessage = - /*@__PURE__*/ - messageDesc(file_capabilities_blockchain_evm_v1alpha_client, 19) +export const ReceiptSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_capabilities_blockchain_evm_v1alpha_client, 19); /** * ----- Request/Reply Wrappers ----- * * @generated from message capabilities.blockchain.evm.v1alpha.HeaderByNumberRequest */ -export type HeaderByNumberRequest = - Message<'capabilities.blockchain.evm.v1alpha.HeaderByNumberRequest'> & { - /** - * @generated from field: values.v1.BigInt block_number = 1; - */ - blockNumber?: BigInt - } +export type HeaderByNumberRequest = Message<"capabilities.blockchain.evm.v1alpha.HeaderByNumberRequest"> & { + /** + * @generated from field: values.v1.BigInt block_number = 1; + */ + blockNumber?: BigInt; +}; /** * ----- Request/Reply Wrappers ----- @@ -1183,659 +1135,633 @@ export type HeaderByNumberRequest = * @generated from message capabilities.blockchain.evm.v1alpha.HeaderByNumberRequest */ export type HeaderByNumberRequestJson = { - /** - * @generated from field: values.v1.BigInt block_number = 1; - */ - blockNumber?: BigIntJson -} + /** + * @generated from field: values.v1.BigInt block_number = 1; + */ + blockNumber?: BigIntJson; +}; /** * Describes the message capabilities.blockchain.evm.v1alpha.HeaderByNumberRequest. * Use `create(HeaderByNumberRequestSchema)` to create a new message. */ -export const HeaderByNumberRequestSchema: GenMessage< - HeaderByNumberRequest, - { jsonType: HeaderByNumberRequestJson } -> = /*@__PURE__*/ messageDesc(file_capabilities_blockchain_evm_v1alpha_client, 20) +export const HeaderByNumberRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_capabilities_blockchain_evm_v1alpha_client, 20); /** * @generated from message capabilities.blockchain.evm.v1alpha.HeaderByNumberReply */ -export type HeaderByNumberReply = - Message<'capabilities.blockchain.evm.v1alpha.HeaderByNumberReply'> & { - /** - * @generated from field: capabilities.blockchain.evm.v1alpha.Header header = 1; - */ - header?: Header - } +export type HeaderByNumberReply = Message<"capabilities.blockchain.evm.v1alpha.HeaderByNumberReply"> & { + /** + * @generated from field: capabilities.blockchain.evm.v1alpha.Header header = 1; + */ + header?: Header; +}; /** * @generated from message capabilities.blockchain.evm.v1alpha.HeaderByNumberReply */ export type HeaderByNumberReplyJson = { - /** - * @generated from field: capabilities.blockchain.evm.v1alpha.Header header = 1; - */ - header?: HeaderJson -} + /** + * @generated from field: capabilities.blockchain.evm.v1alpha.Header header = 1; + */ + header?: HeaderJson; +}; /** * Describes the message capabilities.blockchain.evm.v1alpha.HeaderByNumberReply. * Use `create(HeaderByNumberReplySchema)` to create a new message. */ -export const HeaderByNumberReplySchema: GenMessage< - HeaderByNumberReply, - { jsonType: HeaderByNumberReplyJson } -> = /*@__PURE__*/ messageDesc(file_capabilities_blockchain_evm_v1alpha_client, 21) +export const HeaderByNumberReplySchema: GenMessage = /*@__PURE__*/ + messageDesc(file_capabilities_blockchain_evm_v1alpha_client, 21); /** * @generated from message capabilities.blockchain.evm.v1alpha.Header */ -export type Header = Message<'capabilities.blockchain.evm.v1alpha.Header'> & { - /** - * unix timestamp - * - * @generated from field: uint64 timestamp = 1 [jstype = JS_NORMAL]; - */ - timestamp: bigint - - /** - * @generated from field: values.v1.BigInt block_number = 2; - */ - blockNumber?: BigInt - - /** - * in [32]byte fix-sized array format - * - * @generated from field: bytes hash = 3; - */ - hash: Uint8Array - - /** - * in [32]byte fix-sized array format - * - * @generated from field: bytes parent_hash = 4; - */ - parentHash: Uint8Array -} +export type Header = Message<"capabilities.blockchain.evm.v1alpha.Header"> & { + /** + * unix timestamp + * + * @generated from field: uint64 timestamp = 1 [jstype = JS_NORMAL]; + */ + timestamp: bigint; + + /** + * @generated from field: values.v1.BigInt block_number = 2; + */ + blockNumber?: BigInt; + + /** + * in [32]byte fix-sized array format + * + * @generated from field: bytes hash = 3; + */ + hash: Uint8Array; + + /** + * in [32]byte fix-sized array format + * + * @generated from field: bytes parent_hash = 4; + */ + parentHash: Uint8Array; +}; /** * @generated from message capabilities.blockchain.evm.v1alpha.Header */ export type HeaderJson = { - /** - * unix timestamp - * - * @generated from field: uint64 timestamp = 1 [jstype = JS_NORMAL]; - */ - timestamp?: string - - /** - * @generated from field: values.v1.BigInt block_number = 2; - */ - blockNumber?: BigIntJson - - /** - * in [32]byte fix-sized array format - * - * @generated from field: bytes hash = 3; - */ - hash?: string - - /** - * in [32]byte fix-sized array format - * - * @generated from field: bytes parent_hash = 4; - */ - parentHash?: string -} + /** + * unix timestamp + * + * @generated from field: uint64 timestamp = 1 [jstype = JS_NORMAL]; + */ + timestamp?: string; + + /** + * @generated from field: values.v1.BigInt block_number = 2; + */ + blockNumber?: BigIntJson; + + /** + * in [32]byte fix-sized array format + * + * @generated from field: bytes hash = 3; + */ + hash?: string; + + /** + * in [32]byte fix-sized array format + * + * @generated from field: bytes parent_hash = 4; + */ + parentHash?: string; +}; /** * Describes the message capabilities.blockchain.evm.v1alpha.Header. * Use `create(HeaderSchema)` to create a new message. */ -export const HeaderSchema: GenMessage = - /*@__PURE__*/ - messageDesc(file_capabilities_blockchain_evm_v1alpha_client, 22) +export const HeaderSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_capabilities_blockchain_evm_v1alpha_client, 22); /** * @generated from message capabilities.blockchain.evm.v1alpha.RegisterLogTrackingRequest */ -export type RegisterLogTrackingRequest = - Message<'capabilities.blockchain.evm.v1alpha.RegisterLogTrackingRequest'> & { - /** - * @generated from field: capabilities.blockchain.evm.v1alpha.LPFilter filter = 1; - */ - filter?: LPFilter - } +export type RegisterLogTrackingRequest = Message<"capabilities.blockchain.evm.v1alpha.RegisterLogTrackingRequest"> & { + /** + * @generated from field: capabilities.blockchain.evm.v1alpha.LPFilter filter = 1; + */ + filter?: LPFilter; +}; /** * @generated from message capabilities.blockchain.evm.v1alpha.RegisterLogTrackingRequest */ export type RegisterLogTrackingRequestJson = { - /** - * @generated from field: capabilities.blockchain.evm.v1alpha.LPFilter filter = 1; - */ - filter?: LPFilterJson -} + /** + * @generated from field: capabilities.blockchain.evm.v1alpha.LPFilter filter = 1; + */ + filter?: LPFilterJson; +}; /** * Describes the message capabilities.blockchain.evm.v1alpha.RegisterLogTrackingRequest. * Use `create(RegisterLogTrackingRequestSchema)` to create a new message. */ -export const RegisterLogTrackingRequestSchema: GenMessage< - RegisterLogTrackingRequest, - { jsonType: RegisterLogTrackingRequestJson } -> = /*@__PURE__*/ messageDesc(file_capabilities_blockchain_evm_v1alpha_client, 23) +export const RegisterLogTrackingRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_capabilities_blockchain_evm_v1alpha_client, 23); /** * @generated from message capabilities.blockchain.evm.v1alpha.LPFilter */ -export type LPFilter = Message<'capabilities.blockchain.evm.v1alpha.LPFilter'> & { - /** - * maximum number of logs to retain ( 0 = unlimited ) - * - * @generated from field: uint64 max_logs_kept = 1 [jstype = JS_NORMAL]; - */ - maxLogsKept: bigint - - /** - * maximum amount of time to retain logs in seconds - * - * @generated from field: int64 retention_time = 2 [jstype = JS_NORMAL]; - */ - retentionTime: bigint - - /** - * rate limit ( maximum # of logs per block, 0 = unlimited ) - * - * @generated from field: uint64 logs_per_block = 3 [jstype = JS_NORMAL]; - */ - logsPerBlock: bigint - - /** - * filter name, has to persist for removing filter - * - * @generated from field: string name = 4; - */ - name: string - - /** - * list of addresses to include in evm address [20]byte fix-sized array format - * - * @generated from field: repeated bytes addresses = 5; - */ - addresses: Uint8Array[] - - /** - * list of possible signatures (aka topic1), in [32]byte fix-sized array format - * - * @generated from field: repeated bytes event_sigs = 6; - */ - eventSigs: Uint8Array[] - - /** - * list of possible values for topic2, in [32]byte fix-sized array format - * - * @generated from field: repeated bytes topic2 = 7; - */ - topic2: Uint8Array[] - - /** - * list of possible values for topic3, in [32]byte fix-sized array format - * - * @generated from field: repeated bytes topic3 = 8; - */ - topic3: Uint8Array[] - - /** - * list of possible values for topic4, in [32]byte fix-sized array format - * - * @generated from field: repeated bytes topic4 = 9; - */ - topic4: Uint8Array[] -} +export type LPFilter = Message<"capabilities.blockchain.evm.v1alpha.LPFilter"> & { + /** + * maximum number of logs to retain ( 0 = unlimited ) + * + * @generated from field: uint64 max_logs_kept = 1 [jstype = JS_NORMAL]; + */ + maxLogsKept: bigint; + + /** + * maximum amount of time to retain logs in seconds + * + * @generated from field: int64 retention_time = 2 [jstype = JS_NORMAL]; + */ + retentionTime: bigint; + + /** + * rate limit ( maximum # of logs per block, 0 = unlimited ) + * + * @generated from field: uint64 logs_per_block = 3 [jstype = JS_NORMAL]; + */ + logsPerBlock: bigint; + + /** + * filter name, has to persist for removing filter + * + * @generated from field: string name = 4; + */ + name: string; + + /** + * list of addresses to include in evm address [20]byte fix-sized array format + * + * @generated from field: repeated bytes addresses = 5; + */ + addresses: Uint8Array[]; + + /** + * list of possible signatures (aka topic1), in [32]byte fix-sized array format + * + * @generated from field: repeated bytes event_sigs = 6; + */ + eventSigs: Uint8Array[]; + + /** + * list of possible values for topic2, in [32]byte fix-sized array format + * + * @generated from field: repeated bytes topic2 = 7; + */ + topic2: Uint8Array[]; + + /** + * list of possible values for topic3, in [32]byte fix-sized array format + * + * @generated from field: repeated bytes topic3 = 8; + */ + topic3: Uint8Array[]; + + /** + * list of possible values for topic4, in [32]byte fix-sized array format + * + * @generated from field: repeated bytes topic4 = 9; + */ + topic4: Uint8Array[]; +}; /** * @generated from message capabilities.blockchain.evm.v1alpha.LPFilter */ export type LPFilterJson = { - /** - * maximum number of logs to retain ( 0 = unlimited ) - * - * @generated from field: uint64 max_logs_kept = 1 [jstype = JS_NORMAL]; - */ - maxLogsKept?: string - - /** - * maximum amount of time to retain logs in seconds - * - * @generated from field: int64 retention_time = 2 [jstype = JS_NORMAL]; - */ - retentionTime?: string - - /** - * rate limit ( maximum # of logs per block, 0 = unlimited ) - * - * @generated from field: uint64 logs_per_block = 3 [jstype = JS_NORMAL]; - */ - logsPerBlock?: string - - /** - * filter name, has to persist for removing filter - * - * @generated from field: string name = 4; - */ - name?: string - - /** - * list of addresses to include in evm address [20]byte fix-sized array format - * - * @generated from field: repeated bytes addresses = 5; - */ - addresses?: string[] - - /** - * list of possible signatures (aka topic1), in [32]byte fix-sized array format - * - * @generated from field: repeated bytes event_sigs = 6; - */ - eventSigs?: string[] - - /** - * list of possible values for topic2, in [32]byte fix-sized array format - * - * @generated from field: repeated bytes topic2 = 7; - */ - topic2?: string[] - - /** - * list of possible values for topic3, in [32]byte fix-sized array format - * - * @generated from field: repeated bytes topic3 = 8; - */ - topic3?: string[] - - /** - * list of possible values for topic4, in [32]byte fix-sized array format - * - * @generated from field: repeated bytes topic4 = 9; - */ - topic4?: string[] -} + /** + * maximum number of logs to retain ( 0 = unlimited ) + * + * @generated from field: uint64 max_logs_kept = 1 [jstype = JS_NORMAL]; + */ + maxLogsKept?: string; + + /** + * maximum amount of time to retain logs in seconds + * + * @generated from field: int64 retention_time = 2 [jstype = JS_NORMAL]; + */ + retentionTime?: string; + + /** + * rate limit ( maximum # of logs per block, 0 = unlimited ) + * + * @generated from field: uint64 logs_per_block = 3 [jstype = JS_NORMAL]; + */ + logsPerBlock?: string; + + /** + * filter name, has to persist for removing filter + * + * @generated from field: string name = 4; + */ + name?: string; + + /** + * list of addresses to include in evm address [20]byte fix-sized array format + * + * @generated from field: repeated bytes addresses = 5; + */ + addresses?: string[]; + + /** + * list of possible signatures (aka topic1), in [32]byte fix-sized array format + * + * @generated from field: repeated bytes event_sigs = 6; + */ + eventSigs?: string[]; + + /** + * list of possible values for topic2, in [32]byte fix-sized array format + * + * @generated from field: repeated bytes topic2 = 7; + */ + topic2?: string[]; + + /** + * list of possible values for topic3, in [32]byte fix-sized array format + * + * @generated from field: repeated bytes topic3 = 8; + */ + topic3?: string[]; + + /** + * list of possible values for topic4, in [32]byte fix-sized array format + * + * @generated from field: repeated bytes topic4 = 9; + */ + topic4?: string[]; +}; /** * Describes the message capabilities.blockchain.evm.v1alpha.LPFilter. * Use `create(LPFilterSchema)` to create a new message. */ -export const LPFilterSchema: GenMessage = - /*@__PURE__*/ - messageDesc(file_capabilities_blockchain_evm_v1alpha_client, 24) +export const LPFilterSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_capabilities_blockchain_evm_v1alpha_client, 24); /** * @generated from message capabilities.blockchain.evm.v1alpha.UnregisterLogTrackingRequest */ -export type UnregisterLogTrackingRequest = - Message<'capabilities.blockchain.evm.v1alpha.UnregisterLogTrackingRequest'> & { - /** - * @generated from field: string filter_name = 1; - */ - filterName: string - } +export type UnregisterLogTrackingRequest = Message<"capabilities.blockchain.evm.v1alpha.UnregisterLogTrackingRequest"> & { + /** + * @generated from field: string filter_name = 1; + */ + filterName: string; +}; /** * @generated from message capabilities.blockchain.evm.v1alpha.UnregisterLogTrackingRequest */ export type UnregisterLogTrackingRequestJson = { - /** - * @generated from field: string filter_name = 1; - */ - filterName?: string -} + /** + * @generated from field: string filter_name = 1; + */ + filterName?: string; +}; /** * Describes the message capabilities.blockchain.evm.v1alpha.UnregisterLogTrackingRequest. * Use `create(UnregisterLogTrackingRequestSchema)` to create a new message. */ -export const UnregisterLogTrackingRequestSchema: GenMessage< - UnregisterLogTrackingRequest, - { jsonType: UnregisterLogTrackingRequestJson } -> = /*@__PURE__*/ messageDesc(file_capabilities_blockchain_evm_v1alpha_client, 25) +export const UnregisterLogTrackingRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_capabilities_blockchain_evm_v1alpha_client, 25); /** * @generated from message capabilities.blockchain.evm.v1alpha.WriteReportRequest */ -export type WriteReportRequest = - Message<'capabilities.blockchain.evm.v1alpha.WriteReportRequest'> & { - /** - * @generated from field: bytes receiver = 1; - */ - receiver: Uint8Array +export type WriteReportRequest = Message<"capabilities.blockchain.evm.v1alpha.WriteReportRequest"> & { + /** + * @generated from field: bytes receiver = 1; + */ + receiver: Uint8Array; - /** - * @generated from field: sdk.v1alpha.ReportResponse report = 2; - */ - report?: ReportResponse + /** + * @generated from field: sdk.v1alpha.ReportResponse report = 2; + */ + report?: ReportResponse; - /** - * @generated from field: optional capabilities.blockchain.evm.v1alpha.GasConfig gas_config = 3; - */ - gasConfig?: GasConfig - } + /** + * @generated from field: optional capabilities.blockchain.evm.v1alpha.GasConfig gas_config = 3; + */ + gasConfig?: GasConfig; +}; /** * @generated from message capabilities.blockchain.evm.v1alpha.WriteReportRequest */ export type WriteReportRequestJson = { - /** - * @generated from field: bytes receiver = 1; - */ - receiver?: string - - /** - * @generated from field: sdk.v1alpha.ReportResponse report = 2; - */ - report?: ReportResponseJson - - /** - * @generated from field: optional capabilities.blockchain.evm.v1alpha.GasConfig gas_config = 3; - */ - gasConfig?: GasConfigJson -} + /** + * @generated from field: bytes receiver = 1; + */ + receiver?: string; + + /** + * @generated from field: sdk.v1alpha.ReportResponse report = 2; + */ + report?: ReportResponseJson; + + /** + * @generated from field: optional capabilities.blockchain.evm.v1alpha.GasConfig gas_config = 3; + */ + gasConfig?: GasConfigJson; +}; /** * Describes the message capabilities.blockchain.evm.v1alpha.WriteReportRequest. * Use `create(WriteReportRequestSchema)` to create a new message. */ -export const WriteReportRequestSchema: GenMessage< - WriteReportRequest, - { jsonType: WriteReportRequestJson } -> = /*@__PURE__*/ messageDesc(file_capabilities_blockchain_evm_v1alpha_client, 26) +export const WriteReportRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_capabilities_blockchain_evm_v1alpha_client, 26); /** * @generated from message capabilities.blockchain.evm.v1alpha.GasConfig */ -export type GasConfig = Message<'capabilities.blockchain.evm.v1alpha.GasConfig'> & { - /** - * @generated from field: uint64 gas_limit = 1 [jstype = JS_NORMAL]; - */ - gasLimit: bigint -} +export type GasConfig = Message<"capabilities.blockchain.evm.v1alpha.GasConfig"> & { + /** + * @generated from field: uint64 gas_limit = 1 [jstype = JS_NORMAL]; + */ + gasLimit: bigint; +}; /** * @generated from message capabilities.blockchain.evm.v1alpha.GasConfig */ export type GasConfigJson = { - /** - * @generated from field: uint64 gas_limit = 1 [jstype = JS_NORMAL]; - */ - gasLimit?: string -} + /** + * @generated from field: uint64 gas_limit = 1 [jstype = JS_NORMAL]; + */ + gasLimit?: string; +}; /** * Describes the message capabilities.blockchain.evm.v1alpha.GasConfig. * Use `create(GasConfigSchema)` to create a new message. */ -export const GasConfigSchema: GenMessage = - /*@__PURE__*/ - messageDesc(file_capabilities_blockchain_evm_v1alpha_client, 27) +export const GasConfigSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_capabilities_blockchain_evm_v1alpha_client, 27); /** * @generated from message capabilities.blockchain.evm.v1alpha.WriteReportReply */ -export type WriteReportReply = Message<'capabilities.blockchain.evm.v1alpha.WriteReportReply'> & { - /** - * @generated from field: capabilities.blockchain.evm.v1alpha.TxStatus tx_status = 1; - */ - txStatus: TxStatus - - /** - * @generated from field: optional capabilities.blockchain.evm.v1alpha.ReceiverContractExecutionStatus receiver_contract_execution_status = 2; - */ - receiverContractExecutionStatus?: ReceiverContractExecutionStatus - - /** - * @generated from field: optional bytes tx_hash = 3; - */ - txHash?: Uint8Array - - /** - * @generated from field: optional values.v1.BigInt transaction_fee = 4; - */ - transactionFee?: BigInt - - /** - * @generated from field: optional string error_message = 5; - */ - errorMessage?: string -} +export type WriteReportReply = Message<"capabilities.blockchain.evm.v1alpha.WriteReportReply"> & { + /** + * @generated from field: capabilities.blockchain.evm.v1alpha.TxStatus tx_status = 1; + */ + txStatus: TxStatus; + + /** + * @generated from field: optional capabilities.blockchain.evm.v1alpha.ReceiverContractExecutionStatus receiver_contract_execution_status = 2; + */ + receiverContractExecutionStatus?: ReceiverContractExecutionStatus; + + /** + * @generated from field: optional bytes tx_hash = 3; + */ + txHash?: Uint8Array; + + /** + * @generated from field: optional values.v1.BigInt transaction_fee = 4; + */ + transactionFee?: BigInt; + + /** + * @generated from field: optional string error_message = 5; + */ + errorMessage?: string; +}; /** * @generated from message capabilities.blockchain.evm.v1alpha.WriteReportReply */ export type WriteReportReplyJson = { - /** - * @generated from field: capabilities.blockchain.evm.v1alpha.TxStatus tx_status = 1; - */ - txStatus?: TxStatusJson - - /** - * @generated from field: optional capabilities.blockchain.evm.v1alpha.ReceiverContractExecutionStatus receiver_contract_execution_status = 2; - */ - receiverContractExecutionStatus?: ReceiverContractExecutionStatusJson - - /** - * @generated from field: optional bytes tx_hash = 3; - */ - txHash?: string - - /** - * @generated from field: optional values.v1.BigInt transaction_fee = 4; - */ - transactionFee?: BigIntJson - - /** - * @generated from field: optional string error_message = 5; - */ - errorMessage?: string -} + /** + * @generated from field: capabilities.blockchain.evm.v1alpha.TxStatus tx_status = 1; + */ + txStatus?: TxStatusJson; + + /** + * @generated from field: optional capabilities.blockchain.evm.v1alpha.ReceiverContractExecutionStatus receiver_contract_execution_status = 2; + */ + receiverContractExecutionStatus?: ReceiverContractExecutionStatusJson; + + /** + * @generated from field: optional bytes tx_hash = 3; + */ + txHash?: string; + + /** + * @generated from field: optional values.v1.BigInt transaction_fee = 4; + */ + transactionFee?: BigIntJson; + + /** + * @generated from field: optional string error_message = 5; + */ + errorMessage?: string; +}; /** * Describes the message capabilities.blockchain.evm.v1alpha.WriteReportReply. * Use `create(WriteReportReplySchema)` to create a new message. */ -export const WriteReportReplySchema: GenMessage< - WriteReportReply, - { jsonType: WriteReportReplyJson } -> = /*@__PURE__*/ messageDesc(file_capabilities_blockchain_evm_v1alpha_client, 28) +export const WriteReportReplySchema: GenMessage = /*@__PURE__*/ + messageDesc(file_capabilities_blockchain_evm_v1alpha_client, 28); /** * @generated from enum capabilities.blockchain.evm.v1alpha.ConfidenceLevel */ export enum ConfidenceLevel { - /** - * @generated from enum value: CONFIDENCE_LEVEL_SAFE = 0; - */ - SAFE = 0, - - /** - * @generated from enum value: CONFIDENCE_LEVEL_LATEST = 1; - */ - LATEST = 1, - - /** - * @generated from enum value: CONFIDENCE_LEVEL_FINALIZED = 2; - */ - FINALIZED = 2, + /** + * @generated from enum value: CONFIDENCE_LEVEL_SAFE = 0; + */ + SAFE = 0, + + /** + * @generated from enum value: CONFIDENCE_LEVEL_LATEST = 1; + */ + LATEST = 1, + + /** + * @generated from enum value: CONFIDENCE_LEVEL_FINALIZED = 2; + */ + FINALIZED = 2, } /** * @generated from enum capabilities.blockchain.evm.v1alpha.ConfidenceLevel */ -export type ConfidenceLevelJson = - | 'CONFIDENCE_LEVEL_SAFE' - | 'CONFIDENCE_LEVEL_LATEST' - | 'CONFIDENCE_LEVEL_FINALIZED' +export type ConfidenceLevelJson = "CONFIDENCE_LEVEL_SAFE" | "CONFIDENCE_LEVEL_LATEST" | "CONFIDENCE_LEVEL_FINALIZED"; /** * Describes the enum capabilities.blockchain.evm.v1alpha.ConfidenceLevel. */ -export const ConfidenceLevelSchema: GenEnum = - /*@__PURE__*/ - enumDesc(file_capabilities_blockchain_evm_v1alpha_client, 0) +export const ConfidenceLevelSchema: GenEnum = /*@__PURE__*/ + enumDesc(file_capabilities_blockchain_evm_v1alpha_client, 0); /** * @generated from enum capabilities.blockchain.evm.v1alpha.ReceiverContractExecutionStatus */ export enum ReceiverContractExecutionStatus { - /** - * @generated from enum value: RECEIVER_CONTRACT_EXECUTION_STATUS_SUCCESS = 0; - */ - SUCCESS = 0, - - /** - * @generated from enum value: RECEIVER_CONTRACT_EXECUTION_STATUS_REVERTED = 1; - */ - REVERTED = 1, + /** + * @generated from enum value: RECEIVER_CONTRACT_EXECUTION_STATUS_SUCCESS = 0; + */ + SUCCESS = 0, + + /** + * @generated from enum value: RECEIVER_CONTRACT_EXECUTION_STATUS_REVERTED = 1; + */ + REVERTED = 1, } /** * @generated from enum capabilities.blockchain.evm.v1alpha.ReceiverContractExecutionStatus */ -export type ReceiverContractExecutionStatusJson = - | 'RECEIVER_CONTRACT_EXECUTION_STATUS_SUCCESS' - | 'RECEIVER_CONTRACT_EXECUTION_STATUS_REVERTED' +export type ReceiverContractExecutionStatusJson = "RECEIVER_CONTRACT_EXECUTION_STATUS_SUCCESS" | "RECEIVER_CONTRACT_EXECUTION_STATUS_REVERTED"; /** * Describes the enum capabilities.blockchain.evm.v1alpha.ReceiverContractExecutionStatus. */ -export const ReceiverContractExecutionStatusSchema: GenEnum< - ReceiverContractExecutionStatus, - ReceiverContractExecutionStatusJson -> = /*@__PURE__*/ enumDesc(file_capabilities_blockchain_evm_v1alpha_client, 1) +export const ReceiverContractExecutionStatusSchema: GenEnum = /*@__PURE__*/ + enumDesc(file_capabilities_blockchain_evm_v1alpha_client, 1); /** * @generated from enum capabilities.blockchain.evm.v1alpha.TxStatus */ export enum TxStatus { - /** - * @generated from enum value: TX_STATUS_FATAL = 0; - */ - FATAL = 0, - - /** - * @generated from enum value: TX_STATUS_REVERTED = 1; - */ - REVERTED = 1, - - /** - * @generated from enum value: TX_STATUS_SUCCESS = 2; - */ - SUCCESS = 2, + /** + * @generated from enum value: TX_STATUS_FATAL = 0; + */ + FATAL = 0, + + /** + * @generated from enum value: TX_STATUS_REVERTED = 1; + */ + REVERTED = 1, + + /** + * @generated from enum value: TX_STATUS_SUCCESS = 2; + */ + SUCCESS = 2, } /** * @generated from enum capabilities.blockchain.evm.v1alpha.TxStatus */ -export type TxStatusJson = 'TX_STATUS_FATAL' | 'TX_STATUS_REVERTED' | 'TX_STATUS_SUCCESS' +export type TxStatusJson = "TX_STATUS_FATAL" | "TX_STATUS_REVERTED" | "TX_STATUS_SUCCESS"; /** * Describes the enum capabilities.blockchain.evm.v1alpha.TxStatus. */ -export const TxStatusSchema: GenEnum = - /*@__PURE__*/ - enumDesc(file_capabilities_blockchain_evm_v1alpha_client, 2) +export const TxStatusSchema: GenEnum = /*@__PURE__*/ + enumDesc(file_capabilities_blockchain_evm_v1alpha_client, 2); /** * @generated from service capabilities.blockchain.evm.v1alpha.Client */ export const Client: GenService<{ - /** - * @generated from rpc capabilities.blockchain.evm.v1alpha.Client.CallContract - */ - callContract: { - methodKind: 'unary' - input: typeof CallContractRequestSchema - output: typeof CallContractReplySchema - } - /** - * @generated from rpc capabilities.blockchain.evm.v1alpha.Client.FilterLogs - */ - filterLogs: { - methodKind: 'unary' - input: typeof FilterLogsRequestSchema - output: typeof FilterLogsReplySchema - } - /** - * @generated from rpc capabilities.blockchain.evm.v1alpha.Client.BalanceAt - */ - balanceAt: { - methodKind: 'unary' - input: typeof BalanceAtRequestSchema - output: typeof BalanceAtReplySchema - } - /** - * @generated from rpc capabilities.blockchain.evm.v1alpha.Client.EstimateGas - */ - estimateGas: { - methodKind: 'unary' - input: typeof EstimateGasRequestSchema - output: typeof EstimateGasReplySchema - } - /** - * @generated from rpc capabilities.blockchain.evm.v1alpha.Client.GetTransactionByHash - */ - getTransactionByHash: { - methodKind: 'unary' - input: typeof GetTransactionByHashRequestSchema - output: typeof GetTransactionByHashReplySchema - } - /** - * @generated from rpc capabilities.blockchain.evm.v1alpha.Client.GetTransactionReceipt - */ - getTransactionReceipt: { - methodKind: 'unary' - input: typeof GetTransactionReceiptRequestSchema - output: typeof GetTransactionReceiptReplySchema - } - /** - * @generated from rpc capabilities.blockchain.evm.v1alpha.Client.HeaderByNumber - */ - headerByNumber: { - methodKind: 'unary' - input: typeof HeaderByNumberRequestSchema - output: typeof HeaderByNumberReplySchema - } - /** - * @generated from rpc capabilities.blockchain.evm.v1alpha.Client.RegisterLogTracking - */ - registerLogTracking: { - methodKind: 'unary' - input: typeof RegisterLogTrackingRequestSchema - output: typeof EmptySchema - } - /** - * @generated from rpc capabilities.blockchain.evm.v1alpha.Client.UnregisterLogTracking - */ - unregisterLogTracking: { - methodKind: 'unary' - input: typeof UnregisterLogTrackingRequestSchema - output: typeof EmptySchema - } - /** - * @generated from rpc capabilities.blockchain.evm.v1alpha.Client.LogTrigger - */ - logTrigger: { - methodKind: 'server_streaming' - input: typeof FilterLogTriggerRequestSchema - output: typeof LogSchema - } - /** - * @generated from rpc capabilities.blockchain.evm.v1alpha.Client.WriteReport - */ - writeReport: { - methodKind: 'unary' - input: typeof WriteReportRequestSchema - output: typeof WriteReportReplySchema - } -}> = /*@__PURE__*/ serviceDesc(file_capabilities_blockchain_evm_v1alpha_client, 0) + /** + * @generated from rpc capabilities.blockchain.evm.v1alpha.Client.CallContract + */ + callContract: { + methodKind: "unary"; + input: typeof CallContractRequestSchema; + output: typeof CallContractReplySchema; + }, + /** + * @generated from rpc capabilities.blockchain.evm.v1alpha.Client.FilterLogs + */ + filterLogs: { + methodKind: "unary"; + input: typeof FilterLogsRequestSchema; + output: typeof FilterLogsReplySchema; + }, + /** + * @generated from rpc capabilities.blockchain.evm.v1alpha.Client.BalanceAt + */ + balanceAt: { + methodKind: "unary"; + input: typeof BalanceAtRequestSchema; + output: typeof BalanceAtReplySchema; + }, + /** + * @generated from rpc capabilities.blockchain.evm.v1alpha.Client.EstimateGas + */ + estimateGas: { + methodKind: "unary"; + input: typeof EstimateGasRequestSchema; + output: typeof EstimateGasReplySchema; + }, + /** + * @generated from rpc capabilities.blockchain.evm.v1alpha.Client.GetTransactionByHash + */ + getTransactionByHash: { + methodKind: "unary"; + input: typeof GetTransactionByHashRequestSchema; + output: typeof GetTransactionByHashReplySchema; + }, + /** + * @generated from rpc capabilities.blockchain.evm.v1alpha.Client.GetTransactionReceipt + */ + getTransactionReceipt: { + methodKind: "unary"; + input: typeof GetTransactionReceiptRequestSchema; + output: typeof GetTransactionReceiptReplySchema; + }, + /** + * @generated from rpc capabilities.blockchain.evm.v1alpha.Client.HeaderByNumber + */ + headerByNumber: { + methodKind: "unary"; + input: typeof HeaderByNumberRequestSchema; + output: typeof HeaderByNumberReplySchema; + }, + /** + * @generated from rpc capabilities.blockchain.evm.v1alpha.Client.RegisterLogTracking + */ + registerLogTracking: { + methodKind: "unary"; + input: typeof RegisterLogTrackingRequestSchema; + output: typeof EmptySchema; + }, + /** + * @generated from rpc capabilities.blockchain.evm.v1alpha.Client.UnregisterLogTracking + */ + unregisterLogTracking: { + methodKind: "unary"; + input: typeof UnregisterLogTrackingRequestSchema; + output: typeof EmptySchema; + }, + /** + * @generated from rpc capabilities.blockchain.evm.v1alpha.Client.LogTrigger + */ + logTrigger: { + methodKind: "server_streaming"; + input: typeof FilterLogTriggerRequestSchema; + output: typeof LogSchema; + }, + /** + * @generated from rpc capabilities.blockchain.evm.v1alpha.Client.WriteReport + */ + writeReport: { + methodKind: "unary"; + input: typeof WriteReportRequestSchema; + output: typeof WriteReportReplySchema; + }, +}> = /*@__PURE__*/ + serviceDesc(file_capabilities_blockchain_evm_v1alpha_client, 0); + diff --git a/src/generated/capabilities/internal/actionandtrigger/v1/action_and_trigger_pb.ts b/src/generated/capabilities/internal/actionandtrigger/v1/action_and_trigger_pb.ts index 53a10721..6cba3f9b 100644 --- a/src/generated/capabilities/internal/actionandtrigger/v1/action_and_trigger_pb.ts +++ b/src/generated/capabilities/internal/actionandtrigger/v1/action_and_trigger_pb.ts @@ -2,161 +2,155 @@ // @generated from file capabilities/internal/actionandtrigger/v1/action_and_trigger.proto (package capabilities.internal.actionandtrigger.v1, syntax proto3) /* eslint-disable */ -import type { GenFile, GenMessage, GenService } from '@bufbuild/protobuf/codegenv2' -import { fileDesc, messageDesc, serviceDesc } from '@bufbuild/protobuf/codegenv2' -import { file_tools_generator_v1alpha_cre_metadata } from '../../../../tools/generator/v1alpha/cre_metadata_pb' -import type { Message } from '@bufbuild/protobuf' +import type { GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv2"; +import { fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv2"; +import { file_tools_generator_v1alpha_cre_metadata } from "../../../../tools/generator/v1alpha/cre_metadata_pb"; +import type { Message } from "@bufbuild/protobuf"; /** * Describes the file capabilities/internal/actionandtrigger/v1/action_and_trigger.proto. */ -export const file_capabilities_internal_actionandtrigger_v1_action_and_trigger: GenFile = - /*@__PURE__*/ - fileDesc( - 'CkJjYXBhYmlsaXRpZXMvaW50ZXJuYWwvYWN0aW9uYW5kdHJpZ2dlci92MS9hY3Rpb25fYW5kX3RyaWdnZXIucHJvdG8SKWNhcGFiaWxpdGllcy5pbnRlcm5hbC5hY3Rpb25hbmR0cmlnZ2VyLnYxIiYKBkNvbmZpZxIMCgRuYW1lGAEgASgJEg4KBm51bWJlchgCIAEoBSIjCgxUcmlnZ2VyRXZlbnQSEwoLY29vbF9vdXRwdXQYASABKAkiFQoFSW5wdXQSDAoEbmFtZRgBIAEoCSIZCgZPdXRwdXQSDwoHd2VsY29tZRgBIAEoCTKYAgoFQmFzaWMSbQoGQWN0aW9uEjAuY2FwYWJpbGl0aWVzLmludGVybmFsLmFjdGlvbmFuZHRyaWdnZXIudjEuSW5wdXQaMS5jYXBhYmlsaXRpZXMuaW50ZXJuYWwuYWN0aW9uYW5kdHJpZ2dlci52MS5PdXRwdXQSdwoHVHJpZ2dlchIxLmNhcGFiaWxpdGllcy5pbnRlcm5hbC5hY3Rpb25hbmR0cmlnZ2VyLnYxLkNvbmZpZxo3LmNhcGFiaWxpdGllcy5pbnRlcm5hbC5hY3Rpb25hbmR0cmlnZ2VyLnYxLlRyaWdnZXJFdmVudDABGieCtRgjCAESH2Jhc2ljLXRlc3QtYWN0aW9uLXRyaWdnZXJAMS4wLjBCjQIKLWNvbS5jYXBhYmlsaXRpZXMuaW50ZXJuYWwuYWN0aW9uYW5kdHJpZ2dlci52MUIVQWN0aW9uQW5kVHJpZ2dlclByb3RvUAGiAgNDSUGqAilDYXBhYmlsaXRpZXMuSW50ZXJuYWwuQWN0aW9uYW5kdHJpZ2dlci5WMcoCKUNhcGFiaWxpdGllc1xJbnRlcm5hbFxBY3Rpb25hbmR0cmlnZ2VyXFYx4gI1Q2FwYWJpbGl0aWVzXEludGVybmFsXEFjdGlvbmFuZHRyaWdnZXJcVjFcR1BCTWV0YWRhdGHqAixDYXBhYmlsaXRpZXM6OkludGVybmFsOjpBY3Rpb25hbmR0cmlnZ2VyOjpWMWIGcHJvdG8z', - [file_tools_generator_v1alpha_cre_metadata], - ) +export const file_capabilities_internal_actionandtrigger_v1_action_and_trigger: GenFile = /*@__PURE__*/ + fileDesc("CkJjYXBhYmlsaXRpZXMvaW50ZXJuYWwvYWN0aW9uYW5kdHJpZ2dlci92MS9hY3Rpb25fYW5kX3RyaWdnZXIucHJvdG8SKWNhcGFiaWxpdGllcy5pbnRlcm5hbC5hY3Rpb25hbmR0cmlnZ2VyLnYxIiYKBkNvbmZpZxIMCgRuYW1lGAEgASgJEg4KBm51bWJlchgCIAEoBSIjCgxUcmlnZ2VyRXZlbnQSEwoLY29vbF9vdXRwdXQYASABKAkiFQoFSW5wdXQSDAoEbmFtZRgBIAEoCSIZCgZPdXRwdXQSDwoHd2VsY29tZRgBIAEoCTKYAgoFQmFzaWMSbQoGQWN0aW9uEjAuY2FwYWJpbGl0aWVzLmludGVybmFsLmFjdGlvbmFuZHRyaWdnZXIudjEuSW5wdXQaMS5jYXBhYmlsaXRpZXMuaW50ZXJuYWwuYWN0aW9uYW5kdHJpZ2dlci52MS5PdXRwdXQSdwoHVHJpZ2dlchIxLmNhcGFiaWxpdGllcy5pbnRlcm5hbC5hY3Rpb25hbmR0cmlnZ2VyLnYxLkNvbmZpZxo3LmNhcGFiaWxpdGllcy5pbnRlcm5hbC5hY3Rpb25hbmR0cmlnZ2VyLnYxLlRyaWdnZXJFdmVudDABGieCtRgjCAESH2Jhc2ljLXRlc3QtYWN0aW9uLXRyaWdnZXJAMS4wLjBCjQIKLWNvbS5jYXBhYmlsaXRpZXMuaW50ZXJuYWwuYWN0aW9uYW5kdHJpZ2dlci52MUIVQWN0aW9uQW5kVHJpZ2dlclByb3RvUAGiAgNDSUGqAilDYXBhYmlsaXRpZXMuSW50ZXJuYWwuQWN0aW9uYW5kdHJpZ2dlci5WMcoCKUNhcGFiaWxpdGllc1xJbnRlcm5hbFxBY3Rpb25hbmR0cmlnZ2VyXFYx4gI1Q2FwYWJpbGl0aWVzXEludGVybmFsXEFjdGlvbmFuZHRyaWdnZXJcVjFcR1BCTWV0YWRhdGHqAixDYXBhYmlsaXRpZXM6OkludGVybmFsOjpBY3Rpb25hbmR0cmlnZ2VyOjpWMWIGcHJvdG8z", [file_tools_generator_v1alpha_cre_metadata]); /** * @generated from message capabilities.internal.actionandtrigger.v1.Config */ -export type Config = Message<'capabilities.internal.actionandtrigger.v1.Config'> & { - /** - * @generated from field: string name = 1; - */ - name: string - - /** - * @generated from field: int32 number = 2; - */ - number: number -} +export type Config = Message<"capabilities.internal.actionandtrigger.v1.Config"> & { + /** + * @generated from field: string name = 1; + */ + name: string; + + /** + * @generated from field: int32 number = 2; + */ + number: number; +}; /** * @generated from message capabilities.internal.actionandtrigger.v1.Config */ export type ConfigJson = { - /** - * @generated from field: string name = 1; - */ - name?: string + /** + * @generated from field: string name = 1; + */ + name?: string; - /** - * @generated from field: int32 number = 2; - */ - number?: number -} + /** + * @generated from field: int32 number = 2; + */ + number?: number; +}; /** * Describes the message capabilities.internal.actionandtrigger.v1.Config. * Use `create(ConfigSchema)` to create a new message. */ -export const ConfigSchema: GenMessage = - /*@__PURE__*/ - messageDesc(file_capabilities_internal_actionandtrigger_v1_action_and_trigger, 0) +export const ConfigSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_capabilities_internal_actionandtrigger_v1_action_and_trigger, 0); /** * @generated from message capabilities.internal.actionandtrigger.v1.TriggerEvent */ -export type TriggerEvent = Message<'capabilities.internal.actionandtrigger.v1.TriggerEvent'> & { - /** - * @generated from field: string cool_output = 1; - */ - coolOutput: string -} +export type TriggerEvent = Message<"capabilities.internal.actionandtrigger.v1.TriggerEvent"> & { + /** + * @generated from field: string cool_output = 1; + */ + coolOutput: string; +}; /** * @generated from message capabilities.internal.actionandtrigger.v1.TriggerEvent */ export type TriggerEventJson = { - /** - * @generated from field: string cool_output = 1; - */ - coolOutput?: string -} + /** + * @generated from field: string cool_output = 1; + */ + coolOutput?: string; +}; /** * Describes the message capabilities.internal.actionandtrigger.v1.TriggerEvent. * Use `create(TriggerEventSchema)` to create a new message. */ -export const TriggerEventSchema: GenMessage = - /*@__PURE__*/ - messageDesc(file_capabilities_internal_actionandtrigger_v1_action_and_trigger, 1) +export const TriggerEventSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_capabilities_internal_actionandtrigger_v1_action_and_trigger, 1); /** * @generated from message capabilities.internal.actionandtrigger.v1.Input */ -export type Input = Message<'capabilities.internal.actionandtrigger.v1.Input'> & { - /** - * @generated from field: string name = 1; - */ - name: string -} +export type Input = Message<"capabilities.internal.actionandtrigger.v1.Input"> & { + /** + * @generated from field: string name = 1; + */ + name: string; +}; /** * @generated from message capabilities.internal.actionandtrigger.v1.Input */ export type InputJson = { - /** - * @generated from field: string name = 1; - */ - name?: string -} + /** + * @generated from field: string name = 1; + */ + name?: string; +}; /** * Describes the message capabilities.internal.actionandtrigger.v1.Input. * Use `create(InputSchema)` to create a new message. */ -export const InputSchema: GenMessage = - /*@__PURE__*/ - messageDesc(file_capabilities_internal_actionandtrigger_v1_action_and_trigger, 2) +export const InputSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_capabilities_internal_actionandtrigger_v1_action_and_trigger, 2); /** * @generated from message capabilities.internal.actionandtrigger.v1.Output */ -export type Output = Message<'capabilities.internal.actionandtrigger.v1.Output'> & { - /** - * @generated from field: string welcome = 1; - */ - welcome: string -} +export type Output = Message<"capabilities.internal.actionandtrigger.v1.Output"> & { + /** + * @generated from field: string welcome = 1; + */ + welcome: string; +}; /** * @generated from message capabilities.internal.actionandtrigger.v1.Output */ export type OutputJson = { - /** - * @generated from field: string welcome = 1; - */ - welcome?: string -} + /** + * @generated from field: string welcome = 1; + */ + welcome?: string; +}; /** * Describes the message capabilities.internal.actionandtrigger.v1.Output. * Use `create(OutputSchema)` to create a new message. */ -export const OutputSchema: GenMessage = - /*@__PURE__*/ - messageDesc(file_capabilities_internal_actionandtrigger_v1_action_and_trigger, 3) +export const OutputSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_capabilities_internal_actionandtrigger_v1_action_and_trigger, 3); /** * @generated from service capabilities.internal.actionandtrigger.v1.Basic */ export const Basic: GenService<{ - /** - * @generated from rpc capabilities.internal.actionandtrigger.v1.Basic.Action - */ - action: { - methodKind: 'unary' - input: typeof InputSchema - output: typeof OutputSchema - } - /** - * @generated from rpc capabilities.internal.actionandtrigger.v1.Basic.Trigger - */ - trigger: { - methodKind: 'server_streaming' - input: typeof ConfigSchema - output: typeof TriggerEventSchema - } -}> = /*@__PURE__*/ serviceDesc(file_capabilities_internal_actionandtrigger_v1_action_and_trigger, 0) + /** + * @generated from rpc capabilities.internal.actionandtrigger.v1.Basic.Action + */ + action: { + methodKind: "unary"; + input: typeof InputSchema; + output: typeof OutputSchema; + }, + /** + * @generated from rpc capabilities.internal.actionandtrigger.v1.Basic.Trigger + */ + trigger: { + methodKind: "server_streaming"; + input: typeof ConfigSchema; + output: typeof TriggerEventSchema; + }, +}> = /*@__PURE__*/ + serviceDesc(file_capabilities_internal_actionandtrigger_v1_action_and_trigger, 0); + diff --git a/src/generated/capabilities/internal/basicaction/v1/basic_action_pb.ts b/src/generated/capabilities/internal/basicaction/v1/basic_action_pb.ts index 4957ffbf..f225faed 100644 --- a/src/generated/capabilities/internal/basicaction/v1/basic_action_pb.ts +++ b/src/generated/capabilities/internal/basicaction/v1/basic_action_pb.ts @@ -2,76 +2,70 @@ // @generated from file capabilities/internal/basicaction/v1/basic_action.proto (package capabilities.internal.basicaction.v1, syntax proto3) /* eslint-disable */ -import type { GenFile, GenMessage, GenService } from '@bufbuild/protobuf/codegenv2' -import { fileDesc, messageDesc, serviceDesc } from '@bufbuild/protobuf/codegenv2' -import { file_tools_generator_v1alpha_cre_metadata } from '../../../../tools/generator/v1alpha/cre_metadata_pb' -import type { Message } from '@bufbuild/protobuf' +import type { GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv2"; +import { fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv2"; +import { file_tools_generator_v1alpha_cre_metadata } from "../../../../tools/generator/v1alpha/cre_metadata_pb"; +import type { Message } from "@bufbuild/protobuf"; /** * Describes the file capabilities/internal/basicaction/v1/basic_action.proto. */ -export const file_capabilities_internal_basicaction_v1_basic_action: GenFile = - /*@__PURE__*/ - fileDesc( - 'CjdjYXBhYmlsaXRpZXMvaW50ZXJuYWwvYmFzaWNhY3Rpb24vdjEvYmFzaWNfYWN0aW9uLnByb3RvEiRjYXBhYmlsaXRpZXMuaW50ZXJuYWwuYmFzaWNhY3Rpb24udjEiHQoGSW5wdXRzEhMKC2lucHV0X3RoaW5nGAEgASgIIiAKB091dHB1dHMSFQoNYWRhcHRlZF90aGluZxgBIAEoCTKcAQoLQmFzaWNBY3Rpb24SbAoNUGVyZm9ybUFjdGlvbhIsLmNhcGFiaWxpdGllcy5pbnRlcm5hbC5iYXNpY2FjdGlvbi52MS5JbnB1dHMaLS5jYXBhYmlsaXRpZXMuaW50ZXJuYWwuYmFzaWNhY3Rpb24udjEuT3V0cHV0cxofgrUYGwgBEhdiYXNpYy10ZXN0LWFjdGlvbkAxLjAuMELvAQooY29tLmNhcGFiaWxpdGllcy5pbnRlcm5hbC5iYXNpY2FjdGlvbi52MUIQQmFzaWNBY3Rpb25Qcm90b1ABogIDQ0lCqgIkQ2FwYWJpbGl0aWVzLkludGVybmFsLkJhc2ljYWN0aW9uLlYxygIkQ2FwYWJpbGl0aWVzXEludGVybmFsXEJhc2ljYWN0aW9uXFYx4gIwQ2FwYWJpbGl0aWVzXEludGVybmFsXEJhc2ljYWN0aW9uXFYxXEdQQk1ldGFkYXRh6gInQ2FwYWJpbGl0aWVzOjpJbnRlcm5hbDo6QmFzaWNhY3Rpb246OlYxYgZwcm90bzM', - [file_tools_generator_v1alpha_cre_metadata], - ) +export const file_capabilities_internal_basicaction_v1_basic_action: GenFile = /*@__PURE__*/ + fileDesc("CjdjYXBhYmlsaXRpZXMvaW50ZXJuYWwvYmFzaWNhY3Rpb24vdjEvYmFzaWNfYWN0aW9uLnByb3RvEiRjYXBhYmlsaXRpZXMuaW50ZXJuYWwuYmFzaWNhY3Rpb24udjEiHQoGSW5wdXRzEhMKC2lucHV0X3RoaW5nGAEgASgIIiAKB091dHB1dHMSFQoNYWRhcHRlZF90aGluZxgBIAEoCTKcAQoLQmFzaWNBY3Rpb24SbAoNUGVyZm9ybUFjdGlvbhIsLmNhcGFiaWxpdGllcy5pbnRlcm5hbC5iYXNpY2FjdGlvbi52MS5JbnB1dHMaLS5jYXBhYmlsaXRpZXMuaW50ZXJuYWwuYmFzaWNhY3Rpb24udjEuT3V0cHV0cxofgrUYGwgBEhdiYXNpYy10ZXN0LWFjdGlvbkAxLjAuMELvAQooY29tLmNhcGFiaWxpdGllcy5pbnRlcm5hbC5iYXNpY2FjdGlvbi52MUIQQmFzaWNBY3Rpb25Qcm90b1ABogIDQ0lCqgIkQ2FwYWJpbGl0aWVzLkludGVybmFsLkJhc2ljYWN0aW9uLlYxygIkQ2FwYWJpbGl0aWVzXEludGVybmFsXEJhc2ljYWN0aW9uXFYx4gIwQ2FwYWJpbGl0aWVzXEludGVybmFsXEJhc2ljYWN0aW9uXFYxXEdQQk1ldGFkYXRh6gInQ2FwYWJpbGl0aWVzOjpJbnRlcm5hbDo6QmFzaWNhY3Rpb246OlYxYgZwcm90bzM", [file_tools_generator_v1alpha_cre_metadata]); /** * @generated from message capabilities.internal.basicaction.v1.Inputs */ -export type Inputs = Message<'capabilities.internal.basicaction.v1.Inputs'> & { - /** - * @generated from field: bool input_thing = 1; - */ - inputThing: boolean -} +export type Inputs = Message<"capabilities.internal.basicaction.v1.Inputs"> & { + /** + * @generated from field: bool input_thing = 1; + */ + inputThing: boolean; +}; /** * @generated from message capabilities.internal.basicaction.v1.Inputs */ export type InputsJson = { - /** - * @generated from field: bool input_thing = 1; - */ - inputThing?: boolean -} + /** + * @generated from field: bool input_thing = 1; + */ + inputThing?: boolean; +}; /** * Describes the message capabilities.internal.basicaction.v1.Inputs. * Use `create(InputsSchema)` to create a new message. */ -export const InputsSchema: GenMessage = - /*@__PURE__*/ - messageDesc(file_capabilities_internal_basicaction_v1_basic_action, 0) +export const InputsSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_capabilities_internal_basicaction_v1_basic_action, 0); /** * @generated from message capabilities.internal.basicaction.v1.Outputs */ -export type Outputs = Message<'capabilities.internal.basicaction.v1.Outputs'> & { - /** - * @generated from field: string adapted_thing = 1; - */ - adaptedThing: string -} +export type Outputs = Message<"capabilities.internal.basicaction.v1.Outputs"> & { + /** + * @generated from field: string adapted_thing = 1; + */ + adaptedThing: string; +}; /** * @generated from message capabilities.internal.basicaction.v1.Outputs */ export type OutputsJson = { - /** - * @generated from field: string adapted_thing = 1; - */ - adaptedThing?: string -} + /** + * @generated from field: string adapted_thing = 1; + */ + adaptedThing?: string; +}; /** * Describes the message capabilities.internal.basicaction.v1.Outputs. * Use `create(OutputsSchema)` to create a new message. */ -export const OutputsSchema: GenMessage = - /*@__PURE__*/ - messageDesc(file_capabilities_internal_basicaction_v1_basic_action, 1) +export const OutputsSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_capabilities_internal_basicaction_v1_basic_action, 1); /** * This action server for testing purposes only. @@ -81,16 +75,18 @@ export const OutputsSchema: GenMessage = * @generated from service capabilities.internal.basicaction.v1.BasicAction */ export const BasicAction: GenService<{ - /** - * This comment tests the generator's ability to handle leading comments on methods. - * - * This comment tests the generator's ability to handle trailing comments on methods. - * - * @generated from rpc capabilities.internal.basicaction.v1.BasicAction.PerformAction - */ - performAction: { - methodKind: 'unary' - input: typeof InputsSchema - output: typeof OutputsSchema - } -}> = /*@__PURE__*/ serviceDesc(file_capabilities_internal_basicaction_v1_basic_action, 0) + /** + * This comment tests the generator's ability to handle leading comments on methods. + * + * This comment tests the generator's ability to handle trailing comments on methods. + * + * @generated from rpc capabilities.internal.basicaction.v1.BasicAction.PerformAction + */ + performAction: { + methodKind: "unary"; + input: typeof InputsSchema; + output: typeof OutputsSchema; + }, +}> = /*@__PURE__*/ + serviceDesc(file_capabilities_internal_basicaction_v1_basic_action, 0); + diff --git a/src/generated/capabilities/internal/basictrigger/v1/basic_trigger_pb.ts b/src/generated/capabilities/internal/basictrigger/v1/basic_trigger_pb.ts index c62a37dc..8f8a538f 100644 --- a/src/generated/capabilities/internal/basictrigger/v1/basic_trigger_pb.ts +++ b/src/generated/capabilities/internal/basictrigger/v1/basic_trigger_pb.ts @@ -2,97 +2,93 @@ // @generated from file capabilities/internal/basictrigger/v1/basic_trigger.proto (package capabilities.internal.basictrigger.v1, syntax proto3) /* eslint-disable */ -import type { GenFile, GenMessage, GenService } from '@bufbuild/protobuf/codegenv2' -import { fileDesc, messageDesc, serviceDesc } from '@bufbuild/protobuf/codegenv2' -import { file_tools_generator_v1alpha_cre_metadata } from '../../../../tools/generator/v1alpha/cre_metadata_pb' -import type { Message } from '@bufbuild/protobuf' +import type { GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv2"; +import { fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv2"; +import { file_tools_generator_v1alpha_cre_metadata } from "../../../../tools/generator/v1alpha/cre_metadata_pb"; +import type { Message } from "@bufbuild/protobuf"; /** * Describes the file capabilities/internal/basictrigger/v1/basic_trigger.proto. */ -export const file_capabilities_internal_basictrigger_v1_basic_trigger: GenFile = - /*@__PURE__*/ - fileDesc( - 'CjljYXBhYmlsaXRpZXMvaW50ZXJuYWwvYmFzaWN0cmlnZ2VyL3YxL2Jhc2ljX3RyaWdnZXIucHJvdG8SJWNhcGFiaWxpdGllcy5pbnRlcm5hbC5iYXNpY3RyaWdnZXIudjEiJgoGQ29uZmlnEgwKBG5hbWUYASABKAkSDgoGbnVtYmVyGAIgASgFIh4KB091dHB1dHMSEwoLY29vbF9vdXRwdXQYASABKAkylQEKBUJhc2ljEmoKB1RyaWdnZXISLS5jYXBhYmlsaXRpZXMuaW50ZXJuYWwuYmFzaWN0cmlnZ2VyLnYxLkNvbmZpZxouLmNhcGFiaWxpdGllcy5pbnRlcm5hbC5iYXNpY3RyaWdnZXIudjEuT3V0cHV0czABGiCCtRgcCAESGGJhc2ljLXRlc3QtdHJpZ2dlckAxLjAuMEL1AQopY29tLmNhcGFiaWxpdGllcy5pbnRlcm5hbC5iYXNpY3RyaWdnZXIudjFCEUJhc2ljVHJpZ2dlclByb3RvUAGiAgNDSUKqAiVDYXBhYmlsaXRpZXMuSW50ZXJuYWwuQmFzaWN0cmlnZ2VyLlYxygIlQ2FwYWJpbGl0aWVzXEludGVybmFsXEJhc2ljdHJpZ2dlclxWMeICMUNhcGFiaWxpdGllc1xJbnRlcm5hbFxCYXNpY3RyaWdnZXJcVjFcR1BCTWV0YWRhdGHqAihDYXBhYmlsaXRpZXM6OkludGVybmFsOjpCYXNpY3RyaWdnZXI6OlYxYgZwcm90bzM', - [file_tools_generator_v1alpha_cre_metadata], - ) +export const file_capabilities_internal_basictrigger_v1_basic_trigger: GenFile = /*@__PURE__*/ + fileDesc("CjljYXBhYmlsaXRpZXMvaW50ZXJuYWwvYmFzaWN0cmlnZ2VyL3YxL2Jhc2ljX3RyaWdnZXIucHJvdG8SJWNhcGFiaWxpdGllcy5pbnRlcm5hbC5iYXNpY3RyaWdnZXIudjEiJgoGQ29uZmlnEgwKBG5hbWUYASABKAkSDgoGbnVtYmVyGAIgASgFIh4KB091dHB1dHMSEwoLY29vbF9vdXRwdXQYASABKAkylQEKBUJhc2ljEmoKB1RyaWdnZXISLS5jYXBhYmlsaXRpZXMuaW50ZXJuYWwuYmFzaWN0cmlnZ2VyLnYxLkNvbmZpZxouLmNhcGFiaWxpdGllcy5pbnRlcm5hbC5iYXNpY3RyaWdnZXIudjEuT3V0cHV0czABGiCCtRgcCAESGGJhc2ljLXRlc3QtdHJpZ2dlckAxLjAuMEL1AQopY29tLmNhcGFiaWxpdGllcy5pbnRlcm5hbC5iYXNpY3RyaWdnZXIudjFCEUJhc2ljVHJpZ2dlclByb3RvUAGiAgNDSUKqAiVDYXBhYmlsaXRpZXMuSW50ZXJuYWwuQmFzaWN0cmlnZ2VyLlYxygIlQ2FwYWJpbGl0aWVzXEludGVybmFsXEJhc2ljdHJpZ2dlclxWMeICMUNhcGFiaWxpdGllc1xJbnRlcm5hbFxCYXNpY3RyaWdnZXJcVjFcR1BCTWV0YWRhdGHqAihDYXBhYmlsaXRpZXM6OkludGVybmFsOjpCYXNpY3RyaWdnZXI6OlYxYgZwcm90bzM", [file_tools_generator_v1alpha_cre_metadata]); /** * @generated from message capabilities.internal.basictrigger.v1.Config */ -export type Config = Message<'capabilities.internal.basictrigger.v1.Config'> & { - /** - * @generated from field: string name = 1; - */ - name: string +export type Config = Message<"capabilities.internal.basictrigger.v1.Config"> & { + /** + * @generated from field: string name = 1; + */ + name: string; - /** - * @generated from field: int32 number = 2; - */ - number: number -} + /** + * @generated from field: int32 number = 2; + */ + number: number; +}; /** * @generated from message capabilities.internal.basictrigger.v1.Config */ export type ConfigJson = { - /** - * @generated from field: string name = 1; - */ - name?: string + /** + * @generated from field: string name = 1; + */ + name?: string; - /** - * @generated from field: int32 number = 2; - */ - number?: number -} + /** + * @generated from field: int32 number = 2; + */ + number?: number; +}; /** * Describes the message capabilities.internal.basictrigger.v1.Config. * Use `create(ConfigSchema)` to create a new message. */ -export const ConfigSchema: GenMessage = - /*@__PURE__*/ - messageDesc(file_capabilities_internal_basictrigger_v1_basic_trigger, 0) +export const ConfigSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_capabilities_internal_basictrigger_v1_basic_trigger, 0); /** * @generated from message capabilities.internal.basictrigger.v1.Outputs */ -export type Outputs = Message<'capabilities.internal.basictrigger.v1.Outputs'> & { - /** - * @generated from field: string cool_output = 1; - */ - coolOutput: string -} +export type Outputs = Message<"capabilities.internal.basictrigger.v1.Outputs"> & { + /** + * @generated from field: string cool_output = 1; + */ + coolOutput: string; +}; /** * @generated from message capabilities.internal.basictrigger.v1.Outputs */ export type OutputsJson = { - /** - * @generated from field: string cool_output = 1; - */ - coolOutput?: string -} + /** + * @generated from field: string cool_output = 1; + */ + coolOutput?: string; +}; /** * Describes the message capabilities.internal.basictrigger.v1.Outputs. * Use `create(OutputsSchema)` to create a new message. */ -export const OutputsSchema: GenMessage = - /*@__PURE__*/ - messageDesc(file_capabilities_internal_basictrigger_v1_basic_trigger, 1) +export const OutputsSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_capabilities_internal_basictrigger_v1_basic_trigger, 1); /** * @generated from service capabilities.internal.basictrigger.v1.Basic */ export const Basic: GenService<{ - /** - * @generated from rpc capabilities.internal.basictrigger.v1.Basic.Trigger - */ - trigger: { - methodKind: 'server_streaming' - input: typeof ConfigSchema - output: typeof OutputsSchema - } -}> = /*@__PURE__*/ serviceDesc(file_capabilities_internal_basictrigger_v1_basic_trigger, 0) + /** + * @generated from rpc capabilities.internal.basictrigger.v1.Basic.Trigger + */ + trigger: { + methodKind: "server_streaming"; + input: typeof ConfigSchema; + output: typeof OutputsSchema; + }, +}> = /*@__PURE__*/ + serviceDesc(file_capabilities_internal_basictrigger_v1_basic_trigger, 0); + diff --git a/src/generated/capabilities/internal/consensus/v1alpha/consensus_pb.ts b/src/generated/capabilities/internal/consensus/v1alpha/consensus_pb.ts index 0accb578..2977a437 100644 --- a/src/generated/capabilities/internal/consensus/v1alpha/consensus_pb.ts +++ b/src/generated/capabilities/internal/consensus/v1alpha/consensus_pb.ts @@ -2,46 +2,40 @@ // @generated from file capabilities/internal/consensus/v1alpha/consensus.proto (package capabilities.internal.consensus.v1alpha, syntax proto3) /* eslint-disable */ -import type { GenFile, GenService } from '@bufbuild/protobuf/codegenv2' -import { fileDesc, serviceDesc } from '@bufbuild/protobuf/codegenv2' -import type { - ReportRequestSchema, - ReportResponseSchema, - SimpleConsensusInputsSchema, -} from '../../../../sdk/v1alpha/sdk_pb' -import { file_sdk_v1alpha_sdk } from '../../../../sdk/v1alpha/sdk_pb' -import { file_tools_generator_v1alpha_cre_metadata } from '../../../../tools/generator/v1alpha/cre_metadata_pb' -import type { ValueSchema } from '../../../../values/v1/values_pb' -import { file_values_v1_values } from '../../../../values/v1/values_pb' +import type { GenFile, GenService } from "@bufbuild/protobuf/codegenv2"; +import { fileDesc, serviceDesc } from "@bufbuild/protobuf/codegenv2"; +import type { ReportRequestSchema, ReportResponseSchema, SimpleConsensusInputsSchema } from "../../../../sdk/v1alpha/sdk_pb"; +import { file_sdk_v1alpha_sdk } from "../../../../sdk/v1alpha/sdk_pb"; +import { file_tools_generator_v1alpha_cre_metadata } from "../../../../tools/generator/v1alpha/cre_metadata_pb"; +import type { ValueSchema } from "../../../../values/v1/values_pb"; +import { file_values_v1_values } from "../../../../values/v1/values_pb"; /** * Describes the file capabilities/internal/consensus/v1alpha/consensus.proto. */ -export const file_capabilities_internal_consensus_v1alpha_consensus: GenFile = - /*@__PURE__*/ - fileDesc( - 'CjdjYXBhYmlsaXRpZXMvaW50ZXJuYWwvY29uc2Vuc3VzL3YxYWxwaGEvY29uc2Vuc3VzLnByb3RvEidjYXBhYmlsaXRpZXMuaW50ZXJuYWwuY29uc2Vuc3VzLnYxYWxwaGEyrQEKCUNvbnNlbnN1cxI+CgZTaW1wbGUSIi5zZGsudjFhbHBoYS5TaW1wbGVDb25zZW5zdXNJbnB1dHMaEC52YWx1ZXMudjEuVmFsdWUSQQoGUmVwb3J0Ehouc2RrLnYxYWxwaGEuUmVwb3J0UmVxdWVzdBobLnNkay52MWFscGhhLlJlcG9ydFJlc3BvbnNlGh2CtRgZCAESFWNvbnNlbnN1c0AxLjAuMC1hbHBoYUL8AQorY29tLmNhcGFiaWxpdGllcy5pbnRlcm5hbC5jb25zZW5zdXMudjFhbHBoYUIOQ29uc2Vuc3VzUHJvdG9QAaICA0NJQ6oCJ0NhcGFiaWxpdGllcy5JbnRlcm5hbC5Db25zZW5zdXMuVjFhbHBoYcoCJ0NhcGFiaWxpdGllc1xJbnRlcm5hbFxDb25zZW5zdXNcVjFhbHBoYeICM0NhcGFiaWxpdGllc1xJbnRlcm5hbFxDb25zZW5zdXNcVjFhbHBoYVxHUEJNZXRhZGF0YeoCKkNhcGFiaWxpdGllczo6SW50ZXJuYWw6OkNvbnNlbnN1czo6VjFhbHBoYWIGcHJvdG8z', - [file_sdk_v1alpha_sdk, file_tools_generator_v1alpha_cre_metadata, file_values_v1_values], - ) +export const file_capabilities_internal_consensus_v1alpha_consensus: GenFile = /*@__PURE__*/ + fileDesc("CjdjYXBhYmlsaXRpZXMvaW50ZXJuYWwvY29uc2Vuc3VzL3YxYWxwaGEvY29uc2Vuc3VzLnByb3RvEidjYXBhYmlsaXRpZXMuaW50ZXJuYWwuY29uc2Vuc3VzLnYxYWxwaGEyrQEKCUNvbnNlbnN1cxI+CgZTaW1wbGUSIi5zZGsudjFhbHBoYS5TaW1wbGVDb25zZW5zdXNJbnB1dHMaEC52YWx1ZXMudjEuVmFsdWUSQQoGUmVwb3J0Ehouc2RrLnYxYWxwaGEuUmVwb3J0UmVxdWVzdBobLnNkay52MWFscGhhLlJlcG9ydFJlc3BvbnNlGh2CtRgZCAESFWNvbnNlbnN1c0AxLjAuMC1hbHBoYUL8AQorY29tLmNhcGFiaWxpdGllcy5pbnRlcm5hbC5jb25zZW5zdXMudjFhbHBoYUIOQ29uc2Vuc3VzUHJvdG9QAaICA0NJQ6oCJ0NhcGFiaWxpdGllcy5JbnRlcm5hbC5Db25zZW5zdXMuVjFhbHBoYcoCJ0NhcGFiaWxpdGllc1xJbnRlcm5hbFxDb25zZW5zdXNcVjFhbHBoYeICM0NhcGFiaWxpdGllc1xJbnRlcm5hbFxDb25zZW5zdXNcVjFhbHBoYVxHUEJNZXRhZGF0YeoCKkNhcGFiaWxpdGllczo6SW50ZXJuYWw6OkNvbnNlbnN1czo6VjFhbHBoYWIGcHJvdG8z", [file_sdk_v1alpha_sdk, file_tools_generator_v1alpha_cre_metadata, file_values_v1_values]); /** * @generated from service capabilities.internal.consensus.v1alpha.Consensus */ export const Consensus: GenService<{ - /** - * @generated from rpc capabilities.internal.consensus.v1alpha.Consensus.Simple - */ - simple: { - methodKind: 'unary' - input: typeof SimpleConsensusInputsSchema - output: typeof ValueSchema - } - /** - * @generated from rpc capabilities.internal.consensus.v1alpha.Consensus.Report - */ - report: { - methodKind: 'unary' - input: typeof ReportRequestSchema - output: typeof ReportResponseSchema - } -}> = /*@__PURE__*/ serviceDesc(file_capabilities_internal_consensus_v1alpha_consensus, 0) + /** + * @generated from rpc capabilities.internal.consensus.v1alpha.Consensus.Simple + */ + simple: { + methodKind: "unary"; + input: typeof SimpleConsensusInputsSchema; + output: typeof ValueSchema; + }, + /** + * @generated from rpc capabilities.internal.consensus.v1alpha.Consensus.Report + */ + report: { + methodKind: "unary"; + input: typeof ReportRequestSchema; + output: typeof ReportResponseSchema; + }, +}> = /*@__PURE__*/ + serviceDesc(file_capabilities_internal_consensus_v1alpha_consensus, 0); + diff --git a/src/generated/capabilities/internal/importclash/p1/v1/import_pb.ts b/src/generated/capabilities/internal/importclash/p1/v1/import_pb.ts index 4fba7663..a93fe8dd 100644 --- a/src/generated/capabilities/internal/importclash/p1/v1/import_pb.ts +++ b/src/generated/capabilities/internal/importclash/p1/v1/import_pb.ts @@ -2,43 +2,40 @@ // @generated from file capabilities/internal/importclash/p1/v1/import.proto (package capabilities.internal.importclash.p1.v1, syntax proto3) /* eslint-disable */ -import type { GenFile, GenMessage } from '@bufbuild/protobuf/codegenv2' -import { fileDesc, messageDesc } from '@bufbuild/protobuf/codegenv2' -import type { Message } from '@bufbuild/protobuf' +import type { GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2"; +import { fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2"; +import type { Message } from "@bufbuild/protobuf"; /** * Describes the file capabilities/internal/importclash/p1/v1/import.proto. */ -export const file_capabilities_internal_importclash_p1_v1_import: GenFile = - /*@__PURE__*/ - fileDesc( - 'CjRjYXBhYmlsaXRpZXMvaW50ZXJuYWwvaW1wb3J0Y2xhc2gvcDEvdjEvaW1wb3J0LnByb3RvEidjYXBhYmlsaXRpZXMuaW50ZXJuYWwuaW1wb3J0Y2xhc2gucDEudjEiGwoESXRlbRITCgtpbnB1dF90aGluZxgBIAEoCEL7AQorY29tLmNhcGFiaWxpdGllcy5pbnRlcm5hbC5pbXBvcnRjbGFzaC5wMS52MUILSW1wb3J0UHJvdG9QAaICBENJSVCqAidDYXBhYmlsaXRpZXMuSW50ZXJuYWwuSW1wb3J0Y2xhc2guUDEuVjHKAidDYXBhYmlsaXRpZXNcSW50ZXJuYWxcSW1wb3J0Y2xhc2hcUDFcVjHiAjNDYXBhYmlsaXRpZXNcSW50ZXJuYWxcSW1wb3J0Y2xhc2hcUDFcVjFcR1BCTWV0YWRhdGHqAitDYXBhYmlsaXRpZXM6OkludGVybmFsOjpJbXBvcnRjbGFzaDo6UDE6OlYxYgZwcm90bzM', - ) +export const file_capabilities_internal_importclash_p1_v1_import: GenFile = /*@__PURE__*/ + fileDesc("CjRjYXBhYmlsaXRpZXMvaW50ZXJuYWwvaW1wb3J0Y2xhc2gvcDEvdjEvaW1wb3J0LnByb3RvEidjYXBhYmlsaXRpZXMuaW50ZXJuYWwuaW1wb3J0Y2xhc2gucDEudjEiGwoESXRlbRITCgtpbnB1dF90aGluZxgBIAEoCEL7AQorY29tLmNhcGFiaWxpdGllcy5pbnRlcm5hbC5pbXBvcnRjbGFzaC5wMS52MUILSW1wb3J0UHJvdG9QAaICBENJSVCqAidDYXBhYmlsaXRpZXMuSW50ZXJuYWwuSW1wb3J0Y2xhc2guUDEuVjHKAidDYXBhYmlsaXRpZXNcSW50ZXJuYWxcSW1wb3J0Y2xhc2hcUDFcVjHiAjNDYXBhYmlsaXRpZXNcSW50ZXJuYWxcSW1wb3J0Y2xhc2hcUDFcVjFcR1BCTWV0YWRhdGHqAitDYXBhYmlsaXRpZXM6OkludGVybmFsOjpJbXBvcnRjbGFzaDo6UDE6OlYxYgZwcm90bzM"); /** * @generated from message capabilities.internal.importclash.p1.v1.Item */ -export type Item = Message<'capabilities.internal.importclash.p1.v1.Item'> & { - /** - * @generated from field: bool input_thing = 1; - */ - inputThing: boolean -} +export type Item = Message<"capabilities.internal.importclash.p1.v1.Item"> & { + /** + * @generated from field: bool input_thing = 1; + */ + inputThing: boolean; +}; /** * @generated from message capabilities.internal.importclash.p1.v1.Item */ export type ItemJson = { - /** - * @generated from field: bool input_thing = 1; - */ - inputThing?: boolean -} + /** + * @generated from field: bool input_thing = 1; + */ + inputThing?: boolean; +}; /** * Describes the message capabilities.internal.importclash.p1.v1.Item. * Use `create(ItemSchema)` to create a new message. */ -export const ItemSchema: GenMessage = - /*@__PURE__*/ - messageDesc(file_capabilities_internal_importclash_p1_v1_import, 0) +export const ItemSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_capabilities_internal_importclash_p1_v1_import, 0); + diff --git a/src/generated/capabilities/internal/importclash/p2/v1/import_pb.ts b/src/generated/capabilities/internal/importclash/p2/v1/import_pb.ts index b6a0cfd6..ee6a57fd 100644 --- a/src/generated/capabilities/internal/importclash/p2/v1/import_pb.ts +++ b/src/generated/capabilities/internal/importclash/p2/v1/import_pb.ts @@ -2,43 +2,40 @@ // @generated from file capabilities/internal/importclash/p2/v1/import.proto (package capabilities.internal.importclash.p2.v1, syntax proto3) /* eslint-disable */ -import type { GenFile, GenMessage } from '@bufbuild/protobuf/codegenv2' -import { fileDesc, messageDesc } from '@bufbuild/protobuf/codegenv2' -import type { Message } from '@bufbuild/protobuf' +import type { GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2"; +import { fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2"; +import type { Message } from "@bufbuild/protobuf"; /** * Describes the file capabilities/internal/importclash/p2/v1/import.proto. */ -export const file_capabilities_internal_importclash_p2_v1_import: GenFile = - /*@__PURE__*/ - fileDesc( - 'CjRjYXBhYmlsaXRpZXMvaW50ZXJuYWwvaW1wb3J0Y2xhc2gvcDIvdjEvaW1wb3J0LnByb3RvEidjYXBhYmlsaXRpZXMuaW50ZXJuYWwuaW1wb3J0Y2xhc2gucDIudjEiHQoESXRlbRIVCg1hZGFwdGVkX3RoaW5nGAEgASgJQvsBCitjb20uY2FwYWJpbGl0aWVzLmludGVybmFsLmltcG9ydGNsYXNoLnAyLnYxQgtJbXBvcnRQcm90b1ABogIEQ0lJUKoCJ0NhcGFiaWxpdGllcy5JbnRlcm5hbC5JbXBvcnRjbGFzaC5QMi5WMcoCJ0NhcGFiaWxpdGllc1xJbnRlcm5hbFxJbXBvcnRjbGFzaFxQMlxWMeICM0NhcGFiaWxpdGllc1xJbnRlcm5hbFxJbXBvcnRjbGFzaFxQMlxWMVxHUEJNZXRhZGF0YeoCK0NhcGFiaWxpdGllczo6SW50ZXJuYWw6OkltcG9ydGNsYXNoOjpQMjo6VjFiBnByb3RvMw', - ) +export const file_capabilities_internal_importclash_p2_v1_import: GenFile = /*@__PURE__*/ + fileDesc("CjRjYXBhYmlsaXRpZXMvaW50ZXJuYWwvaW1wb3J0Y2xhc2gvcDIvdjEvaW1wb3J0LnByb3RvEidjYXBhYmlsaXRpZXMuaW50ZXJuYWwuaW1wb3J0Y2xhc2gucDIudjEiHQoESXRlbRIVCg1hZGFwdGVkX3RoaW5nGAEgASgJQvsBCitjb20uY2FwYWJpbGl0aWVzLmludGVybmFsLmltcG9ydGNsYXNoLnAyLnYxQgtJbXBvcnRQcm90b1ABogIEQ0lJUKoCJ0NhcGFiaWxpdGllcy5JbnRlcm5hbC5JbXBvcnRjbGFzaC5QMi5WMcoCJ0NhcGFiaWxpdGllc1xJbnRlcm5hbFxJbXBvcnRjbGFzaFxQMlxWMeICM0NhcGFiaWxpdGllc1xJbnRlcm5hbFxJbXBvcnRjbGFzaFxQMlxWMVxHUEJNZXRhZGF0YeoCK0NhcGFiaWxpdGllczo6SW50ZXJuYWw6OkltcG9ydGNsYXNoOjpQMjo6VjFiBnByb3RvMw"); /** * @generated from message capabilities.internal.importclash.p2.v1.Item */ -export type Item = Message<'capabilities.internal.importclash.p2.v1.Item'> & { - /** - * @generated from field: string adapted_thing = 1; - */ - adaptedThing: string -} +export type Item = Message<"capabilities.internal.importclash.p2.v1.Item"> & { + /** + * @generated from field: string adapted_thing = 1; + */ + adaptedThing: string; +}; /** * @generated from message capabilities.internal.importclash.p2.v1.Item */ export type ItemJson = { - /** - * @generated from field: string adapted_thing = 1; - */ - adaptedThing?: string -} + /** + * @generated from field: string adapted_thing = 1; + */ + adaptedThing?: string; +}; /** * Describes the message capabilities.internal.importclash.p2.v1.Item. * Use `create(ItemSchema)` to create a new message. */ -export const ItemSchema: GenMessage = - /*@__PURE__*/ - messageDesc(file_capabilities_internal_importclash_p2_v1_import, 0) +export const ItemSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_capabilities_internal_importclash_p2_v1_import, 0); + diff --git a/src/generated/capabilities/internal/importclash/v1/clash_pb.ts b/src/generated/capabilities/internal/importclash/v1/clash_pb.ts index 33cda750..de884309 100644 --- a/src/generated/capabilities/internal/importclash/v1/clash_pb.ts +++ b/src/generated/capabilities/internal/importclash/v1/clash_pb.ts @@ -2,38 +2,32 @@ // @generated from file capabilities/internal/importclash/v1/clash.proto (package capabilities.internal.importclash.v1, syntax proto3) /* eslint-disable */ -import type { GenFile, GenService } from '@bufbuild/protobuf/codegenv2' -import { fileDesc, serviceDesc } from '@bufbuild/protobuf/codegenv2' -import type { ItemSchema } from '../p1/v1/import_pb' -import { file_capabilities_internal_importclash_p1_v1_import } from '../p1/v1/import_pb' -import type { ItemSchema as ItemSchema$1 } from '../p2/v1/import_pb' -import { file_capabilities_internal_importclash_p2_v1_import } from '../p2/v1/import_pb' -import { file_tools_generator_v1alpha_cre_metadata } from '../../../../tools/generator/v1alpha/cre_metadata_pb' +import type { GenFile, GenService } from "@bufbuild/protobuf/codegenv2"; +import { fileDesc, serviceDesc } from "@bufbuild/protobuf/codegenv2"; +import type { ItemSchema } from "../p1/v1/import_pb"; +import { file_capabilities_internal_importclash_p1_v1_import } from "../p1/v1/import_pb"; +import type { ItemSchema as ItemSchema$1 } from "../p2/v1/import_pb"; +import { file_capabilities_internal_importclash_p2_v1_import } from "../p2/v1/import_pb"; +import { file_tools_generator_v1alpha_cre_metadata } from "../../../../tools/generator/v1alpha/cre_metadata_pb"; /** * Describes the file capabilities/internal/importclash/v1/clash.proto. */ -export const file_capabilities_internal_importclash_v1_clash: GenFile = - /*@__PURE__*/ - fileDesc( - 'CjBjYXBhYmlsaXRpZXMvaW50ZXJuYWwvaW1wb3J0Y2xhc2gvdjEvY2xhc2gucHJvdG8SJGNhcGFiaWxpdGllcy5pbnRlcm5hbC5pbXBvcnRjbGFzaC52MTKYAQoLQmFzaWNBY3Rpb24SbQoNUGVyZm9ybUFjdGlvbhItLmNhcGFiaWxpdGllcy5pbnRlcm5hbC5pbXBvcnRjbGFzaC5wMS52MS5JdGVtGi0uY2FwYWJpbGl0aWVzLmludGVybmFsLmltcG9ydGNsYXNoLnAyLnYxLkl0ZW0aGoK1GBYIARISaW1wb3J0LWNsYXNoQDEuMC4wQukBCihjb20uY2FwYWJpbGl0aWVzLmludGVybmFsLmltcG9ydGNsYXNoLnYxQgpDbGFzaFByb3RvUAGiAgNDSUmqAiRDYXBhYmlsaXRpZXMuSW50ZXJuYWwuSW1wb3J0Y2xhc2guVjHKAiRDYXBhYmlsaXRpZXNcSW50ZXJuYWxcSW1wb3J0Y2xhc2hcVjHiAjBDYXBhYmlsaXRpZXNcSW50ZXJuYWxcSW1wb3J0Y2xhc2hcVjFcR1BCTWV0YWRhdGHqAidDYXBhYmlsaXRpZXM6OkludGVybmFsOjpJbXBvcnRjbGFzaDo6VjFiBnByb3RvMw', - [ - file_capabilities_internal_importclash_p1_v1_import, - file_capabilities_internal_importclash_p2_v1_import, - file_tools_generator_v1alpha_cre_metadata, - ], - ) +export const file_capabilities_internal_importclash_v1_clash: GenFile = /*@__PURE__*/ + fileDesc("CjBjYXBhYmlsaXRpZXMvaW50ZXJuYWwvaW1wb3J0Y2xhc2gvdjEvY2xhc2gucHJvdG8SJGNhcGFiaWxpdGllcy5pbnRlcm5hbC5pbXBvcnRjbGFzaC52MTKYAQoLQmFzaWNBY3Rpb24SbQoNUGVyZm9ybUFjdGlvbhItLmNhcGFiaWxpdGllcy5pbnRlcm5hbC5pbXBvcnRjbGFzaC5wMS52MS5JdGVtGi0uY2FwYWJpbGl0aWVzLmludGVybmFsLmltcG9ydGNsYXNoLnAyLnYxLkl0ZW0aGoK1GBYIARISaW1wb3J0LWNsYXNoQDEuMC4wQukBCihjb20uY2FwYWJpbGl0aWVzLmludGVybmFsLmltcG9ydGNsYXNoLnYxQgpDbGFzaFByb3RvUAGiAgNDSUmqAiRDYXBhYmlsaXRpZXMuSW50ZXJuYWwuSW1wb3J0Y2xhc2guVjHKAiRDYXBhYmlsaXRpZXNcSW50ZXJuYWxcSW1wb3J0Y2xhc2hcVjHiAjBDYXBhYmlsaXRpZXNcSW50ZXJuYWxcSW1wb3J0Y2xhc2hcVjFcR1BCTWV0YWRhdGHqAidDYXBhYmlsaXRpZXM6OkludGVybmFsOjpJbXBvcnRjbGFzaDo6VjFiBnByb3RvMw", [file_capabilities_internal_importclash_p1_v1_import, file_capabilities_internal_importclash_p2_v1_import, file_tools_generator_v1alpha_cre_metadata]); /** * @generated from service capabilities.internal.importclash.v1.BasicAction */ export const BasicAction: GenService<{ - /** - * @generated from rpc capabilities.internal.importclash.v1.BasicAction.PerformAction - */ - performAction: { - methodKind: 'unary' - input: typeof ItemSchema - output: typeof ItemSchema$1 - } -}> = /*@__PURE__*/ serviceDesc(file_capabilities_internal_importclash_v1_clash, 0) + /** + * @generated from rpc capabilities.internal.importclash.v1.BasicAction.PerformAction + */ + performAction: { + methodKind: "unary"; + input: typeof ItemSchema; + output: typeof ItemSchema$1; + }, +}> = /*@__PURE__*/ + serviceDesc(file_capabilities_internal_importclash_v1_clash, 0); + diff --git a/src/generated/capabilities/internal/nodeaction/v1/node_action_pb.ts b/src/generated/capabilities/internal/nodeaction/v1/node_action_pb.ts index 563bb0a6..d36ac88b 100644 --- a/src/generated/capabilities/internal/nodeaction/v1/node_action_pb.ts +++ b/src/generated/capabilities/internal/nodeaction/v1/node_action_pb.ts @@ -2,87 +2,83 @@ // @generated from file capabilities/internal/nodeaction/v1/node_action.proto (package capabilities.internal.nodeaction.v1, syntax proto3) /* eslint-disable */ -import type { GenFile, GenMessage, GenService } from '@bufbuild/protobuf/codegenv2' -import { fileDesc, messageDesc, serviceDesc } from '@bufbuild/protobuf/codegenv2' -import { file_tools_generator_v1alpha_cre_metadata } from '../../../../tools/generator/v1alpha/cre_metadata_pb' -import type { Message } from '@bufbuild/protobuf' +import type { GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv2"; +import { fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv2"; +import { file_tools_generator_v1alpha_cre_metadata } from "../../../../tools/generator/v1alpha/cre_metadata_pb"; +import type { Message } from "@bufbuild/protobuf"; /** * Describes the file capabilities/internal/nodeaction/v1/node_action.proto. */ -export const file_capabilities_internal_nodeaction_v1_node_action: GenFile = - /*@__PURE__*/ - fileDesc( - 'CjVjYXBhYmlsaXRpZXMvaW50ZXJuYWwvbm9kZWFjdGlvbi92MS9ub2RlX2FjdGlvbi5wcm90bxIjY2FwYWJpbGl0aWVzLmludGVybmFsLm5vZGVhY3Rpb24udjEiIQoKTm9kZUlucHV0cxITCgtpbnB1dF90aGluZxgBIAEoCCIjCgtOb2RlT3V0cHV0cxIUCgxvdXRwdXRfdGhpbmcYASABKAUypwEKC0Jhc2ljQWN0aW9uEnIKDVBlcmZvcm1BY3Rpb24SLy5jYXBhYmlsaXRpZXMuaW50ZXJuYWwubm9kZWFjdGlvbi52MS5Ob2RlSW5wdXRzGjAuY2FwYWJpbGl0aWVzLmludGVybmFsLm5vZGVhY3Rpb24udjEuTm9kZU91dHB1dHMaJIK1GCAIAhIcYmFzaWMtdGVzdC1ub2RlLWFjdGlvbkAxLjAuMELpAQonY29tLmNhcGFiaWxpdGllcy5pbnRlcm5hbC5ub2RlYWN0aW9uLnYxQg9Ob2RlQWN0aW9uUHJvdG9QAaICA0NJTqoCI0NhcGFiaWxpdGllcy5JbnRlcm5hbC5Ob2RlYWN0aW9uLlYxygIjQ2FwYWJpbGl0aWVzXEludGVybmFsXE5vZGVhY3Rpb25cVjHiAi9DYXBhYmlsaXRpZXNcSW50ZXJuYWxcTm9kZWFjdGlvblxWMVxHUEJNZXRhZGF0YeoCJkNhcGFiaWxpdGllczo6SW50ZXJuYWw6Ok5vZGVhY3Rpb246OlYxYgZwcm90bzM', - [file_tools_generator_v1alpha_cre_metadata], - ) +export const file_capabilities_internal_nodeaction_v1_node_action: GenFile = /*@__PURE__*/ + fileDesc("CjVjYXBhYmlsaXRpZXMvaW50ZXJuYWwvbm9kZWFjdGlvbi92MS9ub2RlX2FjdGlvbi5wcm90bxIjY2FwYWJpbGl0aWVzLmludGVybmFsLm5vZGVhY3Rpb24udjEiIQoKTm9kZUlucHV0cxITCgtpbnB1dF90aGluZxgBIAEoCCIjCgtOb2RlT3V0cHV0cxIUCgxvdXRwdXRfdGhpbmcYASABKAUypwEKC0Jhc2ljQWN0aW9uEnIKDVBlcmZvcm1BY3Rpb24SLy5jYXBhYmlsaXRpZXMuaW50ZXJuYWwubm9kZWFjdGlvbi52MS5Ob2RlSW5wdXRzGjAuY2FwYWJpbGl0aWVzLmludGVybmFsLm5vZGVhY3Rpb24udjEuTm9kZU91dHB1dHMaJIK1GCAIAhIcYmFzaWMtdGVzdC1ub2RlLWFjdGlvbkAxLjAuMELpAQonY29tLmNhcGFiaWxpdGllcy5pbnRlcm5hbC5ub2RlYWN0aW9uLnYxQg9Ob2RlQWN0aW9uUHJvdG9QAaICA0NJTqoCI0NhcGFiaWxpdGllcy5JbnRlcm5hbC5Ob2RlYWN0aW9uLlYxygIjQ2FwYWJpbGl0aWVzXEludGVybmFsXE5vZGVhY3Rpb25cVjHiAi9DYXBhYmlsaXRpZXNcSW50ZXJuYWxcTm9kZWFjdGlvblxWMVxHUEJNZXRhZGF0YeoCJkNhcGFiaWxpdGllczo6SW50ZXJuYWw6Ok5vZGVhY3Rpb246OlYxYgZwcm90bzM", [file_tools_generator_v1alpha_cre_metadata]); /** * @generated from message capabilities.internal.nodeaction.v1.NodeInputs */ -export type NodeInputs = Message<'capabilities.internal.nodeaction.v1.NodeInputs'> & { - /** - * @generated from field: bool input_thing = 1; - */ - inputThing: boolean -} +export type NodeInputs = Message<"capabilities.internal.nodeaction.v1.NodeInputs"> & { + /** + * @generated from field: bool input_thing = 1; + */ + inputThing: boolean; +}; /** * @generated from message capabilities.internal.nodeaction.v1.NodeInputs */ export type NodeInputsJson = { - /** - * @generated from field: bool input_thing = 1; - */ - inputThing?: boolean -} + /** + * @generated from field: bool input_thing = 1; + */ + inputThing?: boolean; +}; /** * Describes the message capabilities.internal.nodeaction.v1.NodeInputs. * Use `create(NodeInputsSchema)` to create a new message. */ -export const NodeInputsSchema: GenMessage = - /*@__PURE__*/ - messageDesc(file_capabilities_internal_nodeaction_v1_node_action, 0) +export const NodeInputsSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_capabilities_internal_nodeaction_v1_node_action, 0); /** * @generated from message capabilities.internal.nodeaction.v1.NodeOutputs */ -export type NodeOutputs = Message<'capabilities.internal.nodeaction.v1.NodeOutputs'> & { - /** - * @generated from field: int32 output_thing = 1; - */ - outputThing: number -} +export type NodeOutputs = Message<"capabilities.internal.nodeaction.v1.NodeOutputs"> & { + /** + * @generated from field: int32 output_thing = 1; + */ + outputThing: number; +}; /** * @generated from message capabilities.internal.nodeaction.v1.NodeOutputs */ export type NodeOutputsJson = { - /** - * @generated from field: int32 output_thing = 1; - */ - outputThing?: number -} + /** + * @generated from field: int32 output_thing = 1; + */ + outputThing?: number; +}; /** * Describes the message capabilities.internal.nodeaction.v1.NodeOutputs. * Use `create(NodeOutputsSchema)` to create a new message. */ -export const NodeOutputsSchema: GenMessage = - /*@__PURE__*/ - messageDesc(file_capabilities_internal_nodeaction_v1_node_action, 1) +export const NodeOutputsSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_capabilities_internal_nodeaction_v1_node_action, 1); /** * @generated from service capabilities.internal.nodeaction.v1.BasicAction */ export const BasicAction: GenService<{ - /** - * @generated from rpc capabilities.internal.nodeaction.v1.BasicAction.PerformAction - */ - performAction: { - methodKind: 'unary' - input: typeof NodeInputsSchema - output: typeof NodeOutputsSchema - } -}> = /*@__PURE__*/ serviceDesc(file_capabilities_internal_nodeaction_v1_node_action, 0) + /** + * @generated from rpc capabilities.internal.nodeaction.v1.BasicAction.PerformAction + */ + performAction: { + methodKind: "unary"; + input: typeof NodeInputsSchema; + output: typeof NodeOutputsSchema; + }, +}> = /*@__PURE__*/ + serviceDesc(file_capabilities_internal_nodeaction_v1_node_action, 0); + diff --git a/src/generated/capabilities/networking/confidentialhttp/v1alpha/client_pb.ts b/src/generated/capabilities/networking/confidentialhttp/v1alpha/client_pb.ts index 4069f96f..74377f34 100644 --- a/src/generated/capabilities/networking/confidentialhttp/v1alpha/client_pb.ts +++ b/src/generated/capabilities/networking/confidentialhttp/v1alpha/client_pb.ts @@ -2,267 +2,256 @@ // @generated from file capabilities/networking/confidentialhttp/v1alpha/client.proto (package capabilities.networking.confidentialhttp.v1alpha, syntax proto3) /* eslint-disable */ -import type { GenFile, GenMessage, GenService } from '@bufbuild/protobuf/codegenv2' -import { fileDesc, messageDesc, serviceDesc } from '@bufbuild/protobuf/codegenv2' -import type { StructJson } from '@bufbuild/protobuf/wkt' -import { file_google_protobuf_struct } from '@bufbuild/protobuf/wkt' -import { file_tools_generator_v1alpha_cre_metadata } from '../../../../tools/generator/v1alpha/cre_metadata_pb' -import type { JsonObject, Message } from '@bufbuild/protobuf' +import type { GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv2"; +import { fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv2"; +import type { StructJson } from "@bufbuild/protobuf/wkt"; +import { file_google_protobuf_struct } from "@bufbuild/protobuf/wkt"; +import { file_tools_generator_v1alpha_cre_metadata } from "../../../../tools/generator/v1alpha/cre_metadata_pb"; +import type { JsonObject, Message } from "@bufbuild/protobuf"; /** * Describes the file capabilities/networking/confidentialhttp/v1alpha/client.proto. */ -export const file_capabilities_networking_confidentialhttp_v1alpha_client: GenFile = - /*@__PURE__*/ - fileDesc( - 'Cj1jYXBhYmlsaXRpZXMvbmV0d29ya2luZy9jb25maWRlbnRpYWxodHRwL3YxYWxwaGEvY2xpZW50LnByb3RvEjBjYXBhYmlsaXRpZXMubmV0d29ya2luZy5jb25maWRlbnRpYWxodHRwLnYxYWxwaGEiUAoQU2VjcmV0SWRlbnRpZmllchILCgNrZXkYASABKAkSEQoJbmFtZXNwYWNlGAIgASgJEhIKBW93bmVyGAMgASgJSACIAQFCCAoGX293bmVyIpoBCgdSZXF1ZXN0EgwKBGJvZHkYASABKAkSGgoSY3VzdG9tX2NlcnRfYnVuZGxlGAIgASgMEg8KB2hlYWRlcnMYAyADKAkSDgoGbWV0aG9kGAQgASgJEjcKFnB1YmxpY190ZW1wbGF0ZV92YWx1ZXMYBSABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0EgsKA3VybBgGIAEoCSKzAQoFSW5wdXQSSwoIcmVxdWVzdHMYASADKAsyOS5jYXBhYmlsaXRpZXMubmV0d29ya2luZy5jb25maWRlbnRpYWxodHRwLnYxYWxwaGEuUmVxdWVzdBJdChF2YXVsdF9kb25fc2VjcmV0cxgCIAMoCzJCLmNhcGFiaWxpdGllcy5uZXR3b3JraW5nLmNvbmZpZGVudGlhbGh0dHAudjFhbHBoYS5TZWNyZXRJZGVudGlmaWVyIjwKE091dHB1dFJlc3BvbnNlc0VsZW0SDAoEYm9keRgBIAEoDBIXCgtzdGF0dXNfY29kZRgCIAEoA0ICMAAiYgoGT3V0cHV0ElgKCXJlc3BvbnNlcxgBIAMoCzJFLmNhcGFiaWxpdGllcy5uZXR3b3JraW5nLmNvbmZpZGVudGlhbGh0dHAudjFhbHBoYS5PdXRwdXRSZXNwb25zZXNFbGVtMrsBCgZDbGllbnQSgQEKDFNlbmRSZXF1ZXN0cxI3LmNhcGFiaWxpdGllcy5uZXR3b3JraW5nLmNvbmZpZGVudGlhbGh0dHAudjFhbHBoYS5JbnB1dBo4LmNhcGFiaWxpdGllcy5uZXR3b3JraW5nLmNvbmZpZGVudGlhbGh0dHAudjFhbHBoYS5PdXRwdXQaLYK1GCkIAhIlY29uZmlkZW50aWFsLWh0dHAtYWN0aW9uc0AxLjAuMC1hbHBoYUKmAgo0Y29tLmNhcGFiaWxpdGllcy5uZXR3b3JraW5nLmNvbmZpZGVudGlhbGh0dHAudjFhbHBoYUILQ2xpZW50UHJvdG9QAaICA0NOQ6oCMENhcGFiaWxpdGllcy5OZXR3b3JraW5nLkNvbmZpZGVudGlhbGh0dHAuVjFhbHBoYcoCMENhcGFiaWxpdGllc1xOZXR3b3JraW5nXENvbmZpZGVudGlhbGh0dHBcVjFhbHBoYeICPENhcGFiaWxpdGllc1xOZXR3b3JraW5nXENvbmZpZGVudGlhbGh0dHBcVjFhbHBoYVxHUEJNZXRhZGF0YeoCM0NhcGFiaWxpdGllczo6TmV0d29ya2luZzo6Q29uZmlkZW50aWFsaHR0cDo6VjFhbHBoYWIGcHJvdG8z', - [file_google_protobuf_struct, file_tools_generator_v1alpha_cre_metadata], - ) +export const file_capabilities_networking_confidentialhttp_v1alpha_client: GenFile = /*@__PURE__*/ + fileDesc("Cj1jYXBhYmlsaXRpZXMvbmV0d29ya2luZy9jb25maWRlbnRpYWxodHRwL3YxYWxwaGEvY2xpZW50LnByb3RvEjBjYXBhYmlsaXRpZXMubmV0d29ya2luZy5jb25maWRlbnRpYWxodHRwLnYxYWxwaGEiUAoQU2VjcmV0SWRlbnRpZmllchILCgNrZXkYASABKAkSEQoJbmFtZXNwYWNlGAIgASgJEhIKBW93bmVyGAMgASgJSACIAQFCCAoGX293bmVyIpoBCgdSZXF1ZXN0EgwKBGJvZHkYASABKAkSGgoSY3VzdG9tX2NlcnRfYnVuZGxlGAIgASgMEg8KB2hlYWRlcnMYAyADKAkSDgoGbWV0aG9kGAQgASgJEjcKFnB1YmxpY190ZW1wbGF0ZV92YWx1ZXMYBSABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0EgsKA3VybBgGIAEoCSKzAQoFSW5wdXQSSwoIcmVxdWVzdHMYASADKAsyOS5jYXBhYmlsaXRpZXMubmV0d29ya2luZy5jb25maWRlbnRpYWxodHRwLnYxYWxwaGEuUmVxdWVzdBJdChF2YXVsdF9kb25fc2VjcmV0cxgCIAMoCzJCLmNhcGFiaWxpdGllcy5uZXR3b3JraW5nLmNvbmZpZGVudGlhbGh0dHAudjFhbHBoYS5TZWNyZXRJZGVudGlmaWVyIjwKE091dHB1dFJlc3BvbnNlc0VsZW0SDAoEYm9keRgBIAEoDBIXCgtzdGF0dXNfY29kZRgCIAEoA0ICMAAiYgoGT3V0cHV0ElgKCXJlc3BvbnNlcxgBIAMoCzJFLmNhcGFiaWxpdGllcy5uZXR3b3JraW5nLmNvbmZpZGVudGlhbGh0dHAudjFhbHBoYS5PdXRwdXRSZXNwb25zZXNFbGVtMrsBCgZDbGllbnQSgQEKDFNlbmRSZXF1ZXN0cxI3LmNhcGFiaWxpdGllcy5uZXR3b3JraW5nLmNvbmZpZGVudGlhbGh0dHAudjFhbHBoYS5JbnB1dBo4LmNhcGFiaWxpdGllcy5uZXR3b3JraW5nLmNvbmZpZGVudGlhbGh0dHAudjFhbHBoYS5PdXRwdXQaLYK1GCkIAhIlY29uZmlkZW50aWFsLWh0dHAtYWN0aW9uc0AxLjAuMC1hbHBoYUKmAgo0Y29tLmNhcGFiaWxpdGllcy5uZXR3b3JraW5nLmNvbmZpZGVudGlhbGh0dHAudjFhbHBoYUILQ2xpZW50UHJvdG9QAaICA0NOQ6oCMENhcGFiaWxpdGllcy5OZXR3b3JraW5nLkNvbmZpZGVudGlhbGh0dHAuVjFhbHBoYcoCMENhcGFiaWxpdGllc1xOZXR3b3JraW5nXENvbmZpZGVudGlhbGh0dHBcVjFhbHBoYeICPENhcGFiaWxpdGllc1xOZXR3b3JraW5nXENvbmZpZGVudGlhbGh0dHBcVjFhbHBoYVxHUEJNZXRhZGF0YeoCM0NhcGFiaWxpdGllczo6TmV0d29ya2luZzo6Q29uZmlkZW50aWFsaHR0cDo6VjFhbHBoYWIGcHJvdG8z", [file_google_protobuf_struct, file_tools_generator_v1alpha_cre_metadata]); /** * @generated from message capabilities.networking.confidentialhttp.v1alpha.SecretIdentifier */ -export type SecretIdentifier = - Message<'capabilities.networking.confidentialhttp.v1alpha.SecretIdentifier'> & { - /** - * @generated from field: string key = 1; - */ - key: string - - /** - * @generated from field: string namespace = 2; - */ - namespace: string - - /** - * @generated from field: optional string owner = 3; - */ - owner?: string - } +export type SecretIdentifier = Message<"capabilities.networking.confidentialhttp.v1alpha.SecretIdentifier"> & { + /** + * @generated from field: string key = 1; + */ + key: string; + + /** + * @generated from field: string namespace = 2; + */ + namespace: string; + + /** + * @generated from field: optional string owner = 3; + */ + owner?: string; +}; /** * @generated from message capabilities.networking.confidentialhttp.v1alpha.SecretIdentifier */ export type SecretIdentifierJson = { - /** - * @generated from field: string key = 1; - */ - key?: string - - /** - * @generated from field: string namespace = 2; - */ - namespace?: string - - /** - * @generated from field: optional string owner = 3; - */ - owner?: string -} + /** + * @generated from field: string key = 1; + */ + key?: string; + + /** + * @generated from field: string namespace = 2; + */ + namespace?: string; + + /** + * @generated from field: optional string owner = 3; + */ + owner?: string; +}; /** * Describes the message capabilities.networking.confidentialhttp.v1alpha.SecretIdentifier. * Use `create(SecretIdentifierSchema)` to create a new message. */ -export const SecretIdentifierSchema: GenMessage< - SecretIdentifier, - { jsonType: SecretIdentifierJson } -> = /*@__PURE__*/ messageDesc(file_capabilities_networking_confidentialhttp_v1alpha_client, 0) +export const SecretIdentifierSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_capabilities_networking_confidentialhttp_v1alpha_client, 0); /** * @generated from message capabilities.networking.confidentialhttp.v1alpha.Request */ -export type Request = Message<'capabilities.networking.confidentialhttp.v1alpha.Request'> & { - /** - * @generated from field: string body = 1; - */ - body: string - - /** - * @generated from field: bytes custom_cert_bundle = 2; - */ - customCertBundle: Uint8Array - - /** - * @generated from field: repeated string headers = 3; - */ - headers: string[] - - /** - * @generated from field: string method = 4; - */ - method: string - - /** - * @generated from field: google.protobuf.Struct public_template_values = 5; - */ - publicTemplateValues?: JsonObject - - /** - * @generated from field: string url = 6; - */ - url: string -} +export type Request = Message<"capabilities.networking.confidentialhttp.v1alpha.Request"> & { + /** + * @generated from field: string body = 1; + */ + body: string; + + /** + * @generated from field: bytes custom_cert_bundle = 2; + */ + customCertBundle: Uint8Array; + + /** + * @generated from field: repeated string headers = 3; + */ + headers: string[]; + + /** + * @generated from field: string method = 4; + */ + method: string; + + /** + * @generated from field: google.protobuf.Struct public_template_values = 5; + */ + publicTemplateValues?: JsonObject; + + /** + * @generated from field: string url = 6; + */ + url: string; +}; /** * @generated from message capabilities.networking.confidentialhttp.v1alpha.Request */ export type RequestJson = { - /** - * @generated from field: string body = 1; - */ - body?: string - - /** - * @generated from field: bytes custom_cert_bundle = 2; - */ - customCertBundle?: string - - /** - * @generated from field: repeated string headers = 3; - */ - headers?: string[] - - /** - * @generated from field: string method = 4; - */ - method?: string - - /** - * @generated from field: google.protobuf.Struct public_template_values = 5; - */ - publicTemplateValues?: StructJson - - /** - * @generated from field: string url = 6; - */ - url?: string -} + /** + * @generated from field: string body = 1; + */ + body?: string; + + /** + * @generated from field: bytes custom_cert_bundle = 2; + */ + customCertBundle?: string; + + /** + * @generated from field: repeated string headers = 3; + */ + headers?: string[]; + + /** + * @generated from field: string method = 4; + */ + method?: string; + + /** + * @generated from field: google.protobuf.Struct public_template_values = 5; + */ + publicTemplateValues?: StructJson; + + /** + * @generated from field: string url = 6; + */ + url?: string; +}; /** * Describes the message capabilities.networking.confidentialhttp.v1alpha.Request. * Use `create(RequestSchema)` to create a new message. */ -export const RequestSchema: GenMessage = - /*@__PURE__*/ - messageDesc(file_capabilities_networking_confidentialhttp_v1alpha_client, 1) +export const RequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_capabilities_networking_confidentialhttp_v1alpha_client, 1); /** * @generated from message capabilities.networking.confidentialhttp.v1alpha.Input */ -export type Input = Message<'capabilities.networking.confidentialhttp.v1alpha.Input'> & { - /** - * @generated from field: repeated capabilities.networking.confidentialhttp.v1alpha.Request requests = 1; - */ - requests: Request[] - - /** - * @generated from field: repeated capabilities.networking.confidentialhttp.v1alpha.SecretIdentifier vault_don_secrets = 2; - */ - vaultDonSecrets: SecretIdentifier[] -} +export type Input = Message<"capabilities.networking.confidentialhttp.v1alpha.Input"> & { + /** + * @generated from field: repeated capabilities.networking.confidentialhttp.v1alpha.Request requests = 1; + */ + requests: Request[]; + + /** + * @generated from field: repeated capabilities.networking.confidentialhttp.v1alpha.SecretIdentifier vault_don_secrets = 2; + */ + vaultDonSecrets: SecretIdentifier[]; +}; /** * @generated from message capabilities.networking.confidentialhttp.v1alpha.Input */ export type InputJson = { - /** - * @generated from field: repeated capabilities.networking.confidentialhttp.v1alpha.Request requests = 1; - */ - requests?: RequestJson[] + /** + * @generated from field: repeated capabilities.networking.confidentialhttp.v1alpha.Request requests = 1; + */ + requests?: RequestJson[]; - /** - * @generated from field: repeated capabilities.networking.confidentialhttp.v1alpha.SecretIdentifier vault_don_secrets = 2; - */ - vaultDonSecrets?: SecretIdentifierJson[] -} + /** + * @generated from field: repeated capabilities.networking.confidentialhttp.v1alpha.SecretIdentifier vault_don_secrets = 2; + */ + vaultDonSecrets?: SecretIdentifierJson[]; +}; /** * Describes the message capabilities.networking.confidentialhttp.v1alpha.Input. * Use `create(InputSchema)` to create a new message. */ -export const InputSchema: GenMessage = - /*@__PURE__*/ - messageDesc(file_capabilities_networking_confidentialhttp_v1alpha_client, 2) +export const InputSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_capabilities_networking_confidentialhttp_v1alpha_client, 2); /** * @generated from message capabilities.networking.confidentialhttp.v1alpha.OutputResponsesElem */ -export type OutputResponsesElem = - Message<'capabilities.networking.confidentialhttp.v1alpha.OutputResponsesElem'> & { - /** - * @generated from field: bytes body = 1; - */ - body: Uint8Array - - /** - * @generated from field: int64 status_code = 2 [jstype = JS_NORMAL]; - */ - statusCode: bigint - } +export type OutputResponsesElem = Message<"capabilities.networking.confidentialhttp.v1alpha.OutputResponsesElem"> & { + /** + * @generated from field: bytes body = 1; + */ + body: Uint8Array; + + /** + * @generated from field: int64 status_code = 2 [jstype = JS_NORMAL]; + */ + statusCode: bigint; +}; /** * @generated from message capabilities.networking.confidentialhttp.v1alpha.OutputResponsesElem */ export type OutputResponsesElemJson = { - /** - * @generated from field: bytes body = 1; - */ - body?: string + /** + * @generated from field: bytes body = 1; + */ + body?: string; - /** - * @generated from field: int64 status_code = 2 [jstype = JS_NORMAL]; - */ - statusCode?: string -} + /** + * @generated from field: int64 status_code = 2 [jstype = JS_NORMAL]; + */ + statusCode?: string; +}; /** * Describes the message capabilities.networking.confidentialhttp.v1alpha.OutputResponsesElem. * Use `create(OutputResponsesElemSchema)` to create a new message. */ -export const OutputResponsesElemSchema: GenMessage< - OutputResponsesElem, - { jsonType: OutputResponsesElemJson } -> = /*@__PURE__*/ messageDesc(file_capabilities_networking_confidentialhttp_v1alpha_client, 3) +export const OutputResponsesElemSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_capabilities_networking_confidentialhttp_v1alpha_client, 3); /** * @generated from message capabilities.networking.confidentialhttp.v1alpha.Output */ -export type Output = Message<'capabilities.networking.confidentialhttp.v1alpha.Output'> & { - /** - * @generated from field: repeated capabilities.networking.confidentialhttp.v1alpha.OutputResponsesElem responses = 1; - */ - responses: OutputResponsesElem[] -} +export type Output = Message<"capabilities.networking.confidentialhttp.v1alpha.Output"> & { + /** + * @generated from field: repeated capabilities.networking.confidentialhttp.v1alpha.OutputResponsesElem responses = 1; + */ + responses: OutputResponsesElem[]; +}; /** * @generated from message capabilities.networking.confidentialhttp.v1alpha.Output */ export type OutputJson = { - /** - * @generated from field: repeated capabilities.networking.confidentialhttp.v1alpha.OutputResponsesElem responses = 1; - */ - responses?: OutputResponsesElemJson[] -} + /** + * @generated from field: repeated capabilities.networking.confidentialhttp.v1alpha.OutputResponsesElem responses = 1; + */ + responses?: OutputResponsesElemJson[]; +}; /** * Describes the message capabilities.networking.confidentialhttp.v1alpha.Output. * Use `create(OutputSchema)` to create a new message. */ -export const OutputSchema: GenMessage = - /*@__PURE__*/ - messageDesc(file_capabilities_networking_confidentialhttp_v1alpha_client, 4) +export const OutputSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_capabilities_networking_confidentialhttp_v1alpha_client, 4); /** * @generated from service capabilities.networking.confidentialhttp.v1alpha.Client */ export const Client: GenService<{ - /** - * @generated from rpc capabilities.networking.confidentialhttp.v1alpha.Client.SendRequests - */ - sendRequests: { - methodKind: 'unary' - input: typeof InputSchema - output: typeof OutputSchema - } -}> = /*@__PURE__*/ serviceDesc(file_capabilities_networking_confidentialhttp_v1alpha_client, 0) + /** + * @generated from rpc capabilities.networking.confidentialhttp.v1alpha.Client.SendRequests + */ + sendRequests: { + methodKind: "unary"; + input: typeof InputSchema; + output: typeof OutputSchema; + }, +}> = /*@__PURE__*/ + serviceDesc(file_capabilities_networking_confidentialhttp_v1alpha_client, 0); + diff --git a/src/generated/capabilities/networking/http/v1alpha/client_pb.ts b/src/generated/capabilities/networking/http/v1alpha/client_pb.ts index 87de3765..c0cbfbe0 100644 --- a/src/generated/capabilities/networking/http/v1alpha/client_pb.ts +++ b/src/generated/capabilities/networking/http/v1alpha/client_pb.ts @@ -2,41 +2,37 @@ // @generated from file capabilities/networking/http/v1alpha/client.proto (package capabilities.networking.http.v1alpha, syntax proto3) /* eslint-disable */ -import type { GenFile, GenMessage, GenService } from '@bufbuild/protobuf/codegenv2' -import { fileDesc, messageDesc, serviceDesc } from '@bufbuild/protobuf/codegenv2' -import { file_tools_generator_v1alpha_cre_metadata } from '../../../../tools/generator/v1alpha/cre_metadata_pb' -import type { Message } from '@bufbuild/protobuf' +import type { GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv2"; +import { fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv2"; +import { file_tools_generator_v1alpha_cre_metadata } from "../../../../tools/generator/v1alpha/cre_metadata_pb"; +import type { Message } from "@bufbuild/protobuf"; /** * Describes the file capabilities/networking/http/v1alpha/client.proto. */ -export const file_capabilities_networking_http_v1alpha_client: GenFile = - /*@__PURE__*/ - fileDesc( - 'CjFjYXBhYmlsaXRpZXMvbmV0d29ya2luZy9odHRwL3YxYWxwaGEvY2xpZW50LnByb3RvEiRjYXBhYmlsaXRpZXMubmV0d29ya2luZy5odHRwLnYxYWxwaGEiPAoNQ2FjaGVTZXR0aW5ncxIXCg9yZWFkX2Zyb21fY2FjaGUYASABKAgSEgoKbWF4X2FnZV9tcxgCIAEoBSKSAgoHUmVxdWVzdBILCgN1cmwYASABKAkSDgoGbWV0aG9kGAIgASgJEksKB2hlYWRlcnMYAyADKAsyOi5jYXBhYmlsaXRpZXMubmV0d29ya2luZy5odHRwLnYxYWxwaGEuUmVxdWVzdC5IZWFkZXJzRW50cnkSDAoEYm9keRgEIAEoDBISCgp0aW1lb3V0X21zGAUgASgFEksKDmNhY2hlX3NldHRpbmdzGAYgASgLMjMuY2FwYWJpbGl0aWVzLm5ldHdvcmtpbmcuaHR0cC52MWFscGhhLkNhY2hlU2V0dGluZ3MaLgoMSGVhZGVyc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEiqwEKCFJlc3BvbnNlEhMKC3N0YXR1c19jb2RlGAEgASgNEkwKB2hlYWRlcnMYAiADKAsyOy5jYXBhYmlsaXRpZXMubmV0d29ya2luZy5odHRwLnYxYWxwaGEuUmVzcG9uc2UuSGVhZGVyc0VudHJ5EgwKBGJvZHkYAyABKAwaLgoMSGVhZGVyc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEymAEKBkNsaWVudBJsCgtTZW5kUmVxdWVzdBItLmNhcGFiaWxpdGllcy5uZXR3b3JraW5nLmh0dHAudjFhbHBoYS5SZXF1ZXN0Gi4uY2FwYWJpbGl0aWVzLm5ldHdvcmtpbmcuaHR0cC52MWFscGhhLlJlc3BvbnNlGiCCtRgcCAISGGh0dHAtYWN0aW9uc0AxLjAuMC1hbHBoYULqAQooY29tLmNhcGFiaWxpdGllcy5uZXR3b3JraW5nLmh0dHAudjFhbHBoYUILQ2xpZW50UHJvdG9QAaICA0NOSKoCJENhcGFiaWxpdGllcy5OZXR3b3JraW5nLkh0dHAuVjFhbHBoYcoCJENhcGFiaWxpdGllc1xOZXR3b3JraW5nXEh0dHBcVjFhbHBoYeICMENhcGFiaWxpdGllc1xOZXR3b3JraW5nXEh0dHBcVjFhbHBoYVxHUEJNZXRhZGF0YeoCJ0NhcGFiaWxpdGllczo6TmV0d29ya2luZzo6SHR0cDo6VjFhbHBoYWIGcHJvdG8z', - [file_tools_generator_v1alpha_cre_metadata], - ) +export const file_capabilities_networking_http_v1alpha_client: GenFile = /*@__PURE__*/ + fileDesc("CjFjYXBhYmlsaXRpZXMvbmV0d29ya2luZy9odHRwL3YxYWxwaGEvY2xpZW50LnByb3RvEiRjYXBhYmlsaXRpZXMubmV0d29ya2luZy5odHRwLnYxYWxwaGEiPAoNQ2FjaGVTZXR0aW5ncxIXCg9yZWFkX2Zyb21fY2FjaGUYASABKAgSEgoKbWF4X2FnZV9tcxgCIAEoBSKSAgoHUmVxdWVzdBILCgN1cmwYASABKAkSDgoGbWV0aG9kGAIgASgJEksKB2hlYWRlcnMYAyADKAsyOi5jYXBhYmlsaXRpZXMubmV0d29ya2luZy5odHRwLnYxYWxwaGEuUmVxdWVzdC5IZWFkZXJzRW50cnkSDAoEYm9keRgEIAEoDBISCgp0aW1lb3V0X21zGAUgASgFEksKDmNhY2hlX3NldHRpbmdzGAYgASgLMjMuY2FwYWJpbGl0aWVzLm5ldHdvcmtpbmcuaHR0cC52MWFscGhhLkNhY2hlU2V0dGluZ3MaLgoMSGVhZGVyc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEiqwEKCFJlc3BvbnNlEhMKC3N0YXR1c19jb2RlGAEgASgNEkwKB2hlYWRlcnMYAiADKAsyOy5jYXBhYmlsaXRpZXMubmV0d29ya2luZy5odHRwLnYxYWxwaGEuUmVzcG9uc2UuSGVhZGVyc0VudHJ5EgwKBGJvZHkYAyABKAwaLgoMSGVhZGVyc0VudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAEymAEKBkNsaWVudBJsCgtTZW5kUmVxdWVzdBItLmNhcGFiaWxpdGllcy5uZXR3b3JraW5nLmh0dHAudjFhbHBoYS5SZXF1ZXN0Gi4uY2FwYWJpbGl0aWVzLm5ldHdvcmtpbmcuaHR0cC52MWFscGhhLlJlc3BvbnNlGiCCtRgcCAISGGh0dHAtYWN0aW9uc0AxLjAuMC1hbHBoYULqAQooY29tLmNhcGFiaWxpdGllcy5uZXR3b3JraW5nLmh0dHAudjFhbHBoYUILQ2xpZW50UHJvdG9QAaICA0NOSKoCJENhcGFiaWxpdGllcy5OZXR3b3JraW5nLkh0dHAuVjFhbHBoYcoCJENhcGFiaWxpdGllc1xOZXR3b3JraW5nXEh0dHBcVjFhbHBoYeICMENhcGFiaWxpdGllc1xOZXR3b3JraW5nXEh0dHBcVjFhbHBoYVxHUEJNZXRhZGF0YeoCJ0NhcGFiaWxpdGllczo6TmV0d29ya2luZzo6SHR0cDo6VjFhbHBoYWIGcHJvdG8z", [file_tools_generator_v1alpha_cre_metadata]); /** * CacheSettings defines cache control options for outbound HTTP requests. * * @generated from message capabilities.networking.http.v1alpha.CacheSettings */ -export type CacheSettings = Message<'capabilities.networking.http.v1alpha.CacheSettings'> & { - /** - * If true, attempt to read a cached response for the request. - * - * @generated from field: bool read_from_cache = 1; - */ - readFromCache: boolean - - /** - * Maximum age of a cached response in milliseconds. - * - * @generated from field: int32 max_age_ms = 2; - */ - maxAgeMs: number -} +export type CacheSettings = Message<"capabilities.networking.http.v1alpha.CacheSettings"> & { + /** + * If true, attempt to read a cached response for the request. + * + * @generated from field: bool read_from_cache = 1; + */ + readFromCache: boolean; + + /** + * Maximum age of a cached response in milliseconds. + * + * @generated from field: int32 max_age_ms = 2; + */ + maxAgeMs: number; +}; /** * CacheSettings defines cache control options for outbound HTTP requests. @@ -44,165 +40,164 @@ export type CacheSettings = Message<'capabilities.networking.http.v1alpha.CacheS * @generated from message capabilities.networking.http.v1alpha.CacheSettings */ export type CacheSettingsJson = { - /** - * If true, attempt to read a cached response for the request. - * - * @generated from field: bool read_from_cache = 1; - */ - readFromCache?: boolean - - /** - * Maximum age of a cached response in milliseconds. - * - * @generated from field: int32 max_age_ms = 2; - */ - maxAgeMs?: number -} + /** + * If true, attempt to read a cached response for the request. + * + * @generated from field: bool read_from_cache = 1; + */ + readFromCache?: boolean; + + /** + * Maximum age of a cached response in milliseconds. + * + * @generated from field: int32 max_age_ms = 2; + */ + maxAgeMs?: number; +}; /** * Describes the message capabilities.networking.http.v1alpha.CacheSettings. * Use `create(CacheSettingsSchema)` to create a new message. */ -export const CacheSettingsSchema: GenMessage = - /*@__PURE__*/ - messageDesc(file_capabilities_networking_http_v1alpha_client, 0) +export const CacheSettingsSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_capabilities_networking_http_v1alpha_client, 0); /** * @generated from message capabilities.networking.http.v1alpha.Request */ -export type Request = Message<'capabilities.networking.http.v1alpha.Request'> & { - /** - * @generated from field: string url = 1; - */ - url: string - - /** - * @generated from field: string method = 2; - */ - method: string - - /** - * @generated from field: map headers = 3; - */ - headers: { [key: string]: string } - - /** - * @generated from field: bytes body = 4; - */ - body: Uint8Array - - /** - * @generated from field: int32 timeout_ms = 5; - */ - timeoutMs: number - - /** - * @generated from field: capabilities.networking.http.v1alpha.CacheSettings cache_settings = 6; - */ - cacheSettings?: CacheSettings -} +export type Request = Message<"capabilities.networking.http.v1alpha.Request"> & { + /** + * @generated from field: string url = 1; + */ + url: string; + + /** + * @generated from field: string method = 2; + */ + method: string; + + /** + * @generated from field: map headers = 3; + */ + headers: { [key: string]: string }; + + /** + * @generated from field: bytes body = 4; + */ + body: Uint8Array; + + /** + * @generated from field: int32 timeout_ms = 5; + */ + timeoutMs: number; + + /** + * @generated from field: capabilities.networking.http.v1alpha.CacheSettings cache_settings = 6; + */ + cacheSettings?: CacheSettings; +}; /** * @generated from message capabilities.networking.http.v1alpha.Request */ export type RequestJson = { - /** - * @generated from field: string url = 1; - */ - url?: string - - /** - * @generated from field: string method = 2; - */ - method?: string - - /** - * @generated from field: map headers = 3; - */ - headers?: { [key: string]: string } - - /** - * @generated from field: bytes body = 4; - */ - body?: string - - /** - * @generated from field: int32 timeout_ms = 5; - */ - timeoutMs?: number - - /** - * @generated from field: capabilities.networking.http.v1alpha.CacheSettings cache_settings = 6; - */ - cacheSettings?: CacheSettingsJson -} + /** + * @generated from field: string url = 1; + */ + url?: string; + + /** + * @generated from field: string method = 2; + */ + method?: string; + + /** + * @generated from field: map headers = 3; + */ + headers?: { [key: string]: string }; + + /** + * @generated from field: bytes body = 4; + */ + body?: string; + + /** + * @generated from field: int32 timeout_ms = 5; + */ + timeoutMs?: number; + + /** + * @generated from field: capabilities.networking.http.v1alpha.CacheSettings cache_settings = 6; + */ + cacheSettings?: CacheSettingsJson; +}; /** * Describes the message capabilities.networking.http.v1alpha.Request. * Use `create(RequestSchema)` to create a new message. */ -export const RequestSchema: GenMessage = - /*@__PURE__*/ - messageDesc(file_capabilities_networking_http_v1alpha_client, 1) +export const RequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_capabilities_networking_http_v1alpha_client, 1); /** * @generated from message capabilities.networking.http.v1alpha.Response */ -export type Response = Message<'capabilities.networking.http.v1alpha.Response'> & { - /** - * @generated from field: uint32 status_code = 1; - */ - statusCode: number - - /** - * @generated from field: map headers = 2; - */ - headers: { [key: string]: string } - - /** - * @generated from field: bytes body = 3; - */ - body: Uint8Array -} +export type Response = Message<"capabilities.networking.http.v1alpha.Response"> & { + /** + * @generated from field: uint32 status_code = 1; + */ + statusCode: number; + + /** + * @generated from field: map headers = 2; + */ + headers: { [key: string]: string }; + + /** + * @generated from field: bytes body = 3; + */ + body: Uint8Array; +}; /** * @generated from message capabilities.networking.http.v1alpha.Response */ export type ResponseJson = { - /** - * @generated from field: uint32 status_code = 1; - */ - statusCode?: number - - /** - * @generated from field: map headers = 2; - */ - headers?: { [key: string]: string } - - /** - * @generated from field: bytes body = 3; - */ - body?: string -} + /** + * @generated from field: uint32 status_code = 1; + */ + statusCode?: number; + + /** + * @generated from field: map headers = 2; + */ + headers?: { [key: string]: string }; + + /** + * @generated from field: bytes body = 3; + */ + body?: string; +}; /** * Describes the message capabilities.networking.http.v1alpha.Response. * Use `create(ResponseSchema)` to create a new message. */ -export const ResponseSchema: GenMessage = - /*@__PURE__*/ - messageDesc(file_capabilities_networking_http_v1alpha_client, 2) +export const ResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_capabilities_networking_http_v1alpha_client, 2); /** * @generated from service capabilities.networking.http.v1alpha.Client */ export const Client: GenService<{ - /** - * @generated from rpc capabilities.networking.http.v1alpha.Client.SendRequest - */ - sendRequest: { - methodKind: 'unary' - input: typeof RequestSchema - output: typeof ResponseSchema - } -}> = /*@__PURE__*/ serviceDesc(file_capabilities_networking_http_v1alpha_client, 0) + /** + * @generated from rpc capabilities.networking.http.v1alpha.Client.SendRequest + */ + sendRequest: { + methodKind: "unary"; + input: typeof RequestSchema; + output: typeof ResponseSchema; + }, +}> = /*@__PURE__*/ + serviceDesc(file_capabilities_networking_http_v1alpha_client, 0); + diff --git a/src/generated/capabilities/networking/http/v1alpha/trigger_pb.ts b/src/generated/capabilities/networking/http/v1alpha/trigger_pb.ts index bc4ee640..783367a3 100644 --- a/src/generated/capabilities/networking/http/v1alpha/trigger_pb.ts +++ b/src/generated/capabilities/networking/http/v1alpha/trigger_pb.ts @@ -2,115 +2,109 @@ // @generated from file capabilities/networking/http/v1alpha/trigger.proto (package capabilities.networking.http.v1alpha, syntax proto3) /* eslint-disable */ -import type { GenEnum, GenFile, GenMessage, GenService } from '@bufbuild/protobuf/codegenv2' -import { enumDesc, fileDesc, messageDesc, serviceDesc } from '@bufbuild/protobuf/codegenv2' -import { file_tools_generator_v1alpha_cre_metadata } from '../../../../tools/generator/v1alpha/cre_metadata_pb' -import type { Message } from '@bufbuild/protobuf' +import type { GenEnum, GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv2"; +import { enumDesc, fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv2"; +import { file_tools_generator_v1alpha_cre_metadata } from "../../../../tools/generator/v1alpha/cre_metadata_pb"; +import type { Message } from "@bufbuild/protobuf"; /** * Describes the file capabilities/networking/http/v1alpha/trigger.proto. */ -export const file_capabilities_networking_http_v1alpha_trigger: GenFile = - /*@__PURE__*/ - fileDesc( - 'CjJjYXBhYmlsaXRpZXMvbmV0d29ya2luZy9odHRwL3YxYWxwaGEvdHJpZ2dlci5wcm90bxIkY2FwYWJpbGl0aWVzLm5ldHdvcmtpbmcuaHR0cC52MWFscGhhIlYKBkNvbmZpZxJMCg9hdXRob3JpemVkX2tleXMYASADKAsyMy5jYXBhYmlsaXRpZXMubmV0d29ya2luZy5odHRwLnYxYWxwaGEuQXV0aG9yaXplZEtleSJaCgdQYXlsb2FkEg0KBWlucHV0GAEgASgMEkAKA2tleRgCIAEoCzIzLmNhcGFiaWxpdGllcy5uZXR3b3JraW5nLmh0dHAudjFhbHBoYS5BdXRob3JpemVkS2V5ImAKDUF1dGhvcml6ZWRLZXkSOwoEdHlwZRgBIAEoDjItLmNhcGFiaWxpdGllcy5uZXR3b3JraW5nLmh0dHAudjFhbHBoYS5LZXlUeXBlEhIKCnB1YmxpY19rZXkYAiABKAkqOwoHS2V5VHlwZRIYChRLRVlfVFlQRV9VTlNQRUNJRklFRBAAEhYKEktFWV9UWVBFX0VDRFNBX0VWTRABMpIBCgRIVFRQEmgKB1RyaWdnZXISLC5jYXBhYmlsaXRpZXMubmV0d29ya2luZy5odHRwLnYxYWxwaGEuQ29uZmlnGi0uY2FwYWJpbGl0aWVzLm5ldHdvcmtpbmcuaHR0cC52MWFscGhhLlBheWxvYWQwARoggrUYHAgBEhhodHRwLXRyaWdnZXJAMS4wLjAtYWxwaGFC6wEKKGNvbS5jYXBhYmlsaXRpZXMubmV0d29ya2luZy5odHRwLnYxYWxwaGFCDFRyaWdnZXJQcm90b1ABogIDQ05IqgIkQ2FwYWJpbGl0aWVzLk5ldHdvcmtpbmcuSHR0cC5WMWFscGhhygIkQ2FwYWJpbGl0aWVzXE5ldHdvcmtpbmdcSHR0cFxWMWFscGhh4gIwQ2FwYWJpbGl0aWVzXE5ldHdvcmtpbmdcSHR0cFxWMWFscGhhXEdQQk1ldGFkYXRh6gInQ2FwYWJpbGl0aWVzOjpOZXR3b3JraW5nOjpIdHRwOjpWMWFscGhhYgZwcm90bzM', - [file_tools_generator_v1alpha_cre_metadata], - ) +export const file_capabilities_networking_http_v1alpha_trigger: GenFile = /*@__PURE__*/ + fileDesc("CjJjYXBhYmlsaXRpZXMvbmV0d29ya2luZy9odHRwL3YxYWxwaGEvdHJpZ2dlci5wcm90bxIkY2FwYWJpbGl0aWVzLm5ldHdvcmtpbmcuaHR0cC52MWFscGhhIlYKBkNvbmZpZxJMCg9hdXRob3JpemVkX2tleXMYASADKAsyMy5jYXBhYmlsaXRpZXMubmV0d29ya2luZy5odHRwLnYxYWxwaGEuQXV0aG9yaXplZEtleSJaCgdQYXlsb2FkEg0KBWlucHV0GAEgASgMEkAKA2tleRgCIAEoCzIzLmNhcGFiaWxpdGllcy5uZXR3b3JraW5nLmh0dHAudjFhbHBoYS5BdXRob3JpemVkS2V5ImAKDUF1dGhvcml6ZWRLZXkSOwoEdHlwZRgBIAEoDjItLmNhcGFiaWxpdGllcy5uZXR3b3JraW5nLmh0dHAudjFhbHBoYS5LZXlUeXBlEhIKCnB1YmxpY19rZXkYAiABKAkqOwoHS2V5VHlwZRIYChRLRVlfVFlQRV9VTlNQRUNJRklFRBAAEhYKEktFWV9UWVBFX0VDRFNBX0VWTRABMpIBCgRIVFRQEmgKB1RyaWdnZXISLC5jYXBhYmlsaXRpZXMubmV0d29ya2luZy5odHRwLnYxYWxwaGEuQ29uZmlnGi0uY2FwYWJpbGl0aWVzLm5ldHdvcmtpbmcuaHR0cC52MWFscGhhLlBheWxvYWQwARoggrUYHAgBEhhodHRwLXRyaWdnZXJAMS4wLjAtYWxwaGFC6wEKKGNvbS5jYXBhYmlsaXRpZXMubmV0d29ya2luZy5odHRwLnYxYWxwaGFCDFRyaWdnZXJQcm90b1ABogIDQ05IqgIkQ2FwYWJpbGl0aWVzLk5ldHdvcmtpbmcuSHR0cC5WMWFscGhhygIkQ2FwYWJpbGl0aWVzXE5ldHdvcmtpbmdcSHR0cFxWMWFscGhh4gIwQ2FwYWJpbGl0aWVzXE5ldHdvcmtpbmdcSHR0cFxWMWFscGhhXEdQQk1ldGFkYXRh6gInQ2FwYWJpbGl0aWVzOjpOZXR3b3JraW5nOjpIdHRwOjpWMWFscGhhYgZwcm90bzM", [file_tools_generator_v1alpha_cre_metadata]); /** * @generated from message capabilities.networking.http.v1alpha.Config */ -export type Config = Message<'capabilities.networking.http.v1alpha.Config'> & { - /** - * Public keys against which the signature of incoming requests are validated - * - * @generated from field: repeated capabilities.networking.http.v1alpha.AuthorizedKey authorized_keys = 1; - */ - authorizedKeys: AuthorizedKey[] -} +export type Config = Message<"capabilities.networking.http.v1alpha.Config"> & { + /** + * Public keys against which the signature of incoming requests are validated + * + * @generated from field: repeated capabilities.networking.http.v1alpha.AuthorizedKey authorized_keys = 1; + */ + authorizedKeys: AuthorizedKey[]; +}; /** * @generated from message capabilities.networking.http.v1alpha.Config */ export type ConfigJson = { - /** - * Public keys against which the signature of incoming requests are validated - * - * @generated from field: repeated capabilities.networking.http.v1alpha.AuthorizedKey authorized_keys = 1; - */ - authorizedKeys?: AuthorizedKeyJson[] -} + /** + * Public keys against which the signature of incoming requests are validated + * + * @generated from field: repeated capabilities.networking.http.v1alpha.AuthorizedKey authorized_keys = 1; + */ + authorizedKeys?: AuthorizedKeyJson[]; +}; /** * Describes the message capabilities.networking.http.v1alpha.Config. * Use `create(ConfigSchema)` to create a new message. */ -export const ConfigSchema: GenMessage = - /*@__PURE__*/ - messageDesc(file_capabilities_networking_http_v1alpha_trigger, 0) +export const ConfigSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_capabilities_networking_http_v1alpha_trigger, 0); /** * @generated from message capabilities.networking.http.v1alpha.Payload */ -export type Payload = Message<'capabilities.networking.http.v1alpha.Payload'> & { - /** - * JSON input in the HTTP trigger request (as bytes) - * - * @generated from field: bytes input = 1; - */ - input: Uint8Array - - /** - * Key used to sign the HTTP trigger request - * - * @generated from field: capabilities.networking.http.v1alpha.AuthorizedKey key = 2; - */ - key?: AuthorizedKey -} +export type Payload = Message<"capabilities.networking.http.v1alpha.Payload"> & { + /** + * JSON input in the HTTP trigger request (as bytes) + * + * @generated from field: bytes input = 1; + */ + input: Uint8Array; + + /** + * Key used to sign the HTTP trigger request + * + * @generated from field: capabilities.networking.http.v1alpha.AuthorizedKey key = 2; + */ + key?: AuthorizedKey; +}; /** * @generated from message capabilities.networking.http.v1alpha.Payload */ export type PayloadJson = { - /** - * JSON input in the HTTP trigger request (as bytes) - * - * @generated from field: bytes input = 1; - */ - input?: string - - /** - * Key used to sign the HTTP trigger request - * - * @generated from field: capabilities.networking.http.v1alpha.AuthorizedKey key = 2; - */ - key?: AuthorizedKeyJson -} + /** + * JSON input in the HTTP trigger request (as bytes) + * + * @generated from field: bytes input = 1; + */ + input?: string; + + /** + * Key used to sign the HTTP trigger request + * + * @generated from field: capabilities.networking.http.v1alpha.AuthorizedKey key = 2; + */ + key?: AuthorizedKeyJson; +}; /** * Describes the message capabilities.networking.http.v1alpha.Payload. * Use `create(PayloadSchema)` to create a new message. */ -export const PayloadSchema: GenMessage = - /*@__PURE__*/ - messageDesc(file_capabilities_networking_http_v1alpha_trigger, 1) +export const PayloadSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_capabilities_networking_http_v1alpha_trigger, 1); /** * Generic and extensible authorized signer abstraction * * @generated from message capabilities.networking.http.v1alpha.AuthorizedKey */ -export type AuthorizedKey = Message<'capabilities.networking.http.v1alpha.AuthorizedKey'> & { - /** - * @generated from field: capabilities.networking.http.v1alpha.KeyType type = 1; - */ - type: KeyType - - /** - * @generated from field: string public_key = 2; - */ - publicKey: string -} +export type AuthorizedKey = Message<"capabilities.networking.http.v1alpha.AuthorizedKey"> & { + /** + * @generated from field: capabilities.networking.http.v1alpha.KeyType type = 1; + */ + type: KeyType; + + /** + * @generated from field: string public_key = 2; + */ + publicKey: string; +}; /** * Generic and extensible authorized signer abstraction @@ -118,62 +112,62 @@ export type AuthorizedKey = Message<'capabilities.networking.http.v1alpha.Author * @generated from message capabilities.networking.http.v1alpha.AuthorizedKey */ export type AuthorizedKeyJson = { - /** - * @generated from field: capabilities.networking.http.v1alpha.KeyType type = 1; - */ - type?: KeyTypeJson - - /** - * @generated from field: string public_key = 2; - */ - publicKey?: string -} + /** + * @generated from field: capabilities.networking.http.v1alpha.KeyType type = 1; + */ + type?: KeyTypeJson; + + /** + * @generated from field: string public_key = 2; + */ + publicKey?: string; +}; /** * Describes the message capabilities.networking.http.v1alpha.AuthorizedKey. * Use `create(AuthorizedKeySchema)` to create a new message. */ -export const AuthorizedKeySchema: GenMessage = - /*@__PURE__*/ - messageDesc(file_capabilities_networking_http_v1alpha_trigger, 2) +export const AuthorizedKeySchema: GenMessage = /*@__PURE__*/ + messageDesc(file_capabilities_networking_http_v1alpha_trigger, 2); /** * @generated from enum capabilities.networking.http.v1alpha.KeyType */ export enum KeyType { - /** - * @generated from enum value: KEY_TYPE_UNSPECIFIED = 0; - */ - UNSPECIFIED = 0, - - /** - * @generated from enum value: KEY_TYPE_ECDSA_EVM = 1; - */ - ECDSA_EVM = 1, + /** + * @generated from enum value: KEY_TYPE_UNSPECIFIED = 0; + */ + UNSPECIFIED = 0, + + /** + * @generated from enum value: KEY_TYPE_ECDSA_EVM = 1; + */ + ECDSA_EVM = 1, } /** * @generated from enum capabilities.networking.http.v1alpha.KeyType */ -export type KeyTypeJson = 'KEY_TYPE_UNSPECIFIED' | 'KEY_TYPE_ECDSA_EVM' +export type KeyTypeJson = "KEY_TYPE_UNSPECIFIED" | "KEY_TYPE_ECDSA_EVM"; /** * Describes the enum capabilities.networking.http.v1alpha.KeyType. */ -export const KeyTypeSchema: GenEnum = - /*@__PURE__*/ - enumDesc(file_capabilities_networking_http_v1alpha_trigger, 0) +export const KeyTypeSchema: GenEnum = /*@__PURE__*/ + enumDesc(file_capabilities_networking_http_v1alpha_trigger, 0); /** * @generated from service capabilities.networking.http.v1alpha.HTTP */ export const HTTP: GenService<{ - /** - * @generated from rpc capabilities.networking.http.v1alpha.HTTP.Trigger - */ - trigger: { - methodKind: 'server_streaming' - input: typeof ConfigSchema - output: typeof PayloadSchema - } -}> = /*@__PURE__*/ serviceDesc(file_capabilities_networking_http_v1alpha_trigger, 0) + /** + * @generated from rpc capabilities.networking.http.v1alpha.HTTP.Trigger + */ + trigger: { + methodKind: "server_streaming"; + input: typeof ConfigSchema; + output: typeof PayloadSchema; + }, +}> = /*@__PURE__*/ + serviceDesc(file_capabilities_networking_http_v1alpha_trigger, 0); + diff --git a/src/generated/capabilities/scheduler/cron/v1/trigger_pb.ts b/src/generated/capabilities/scheduler/cron/v1/trigger_pb.ts index 56d270df..063ea161 100644 --- a/src/generated/capabilities/scheduler/cron/v1/trigger_pb.ts +++ b/src/generated/capabilities/scheduler/cron/v1/trigger_pb.ts @@ -2,137 +2,132 @@ // @generated from file capabilities/scheduler/cron/v1/trigger.proto (package capabilities.scheduler.cron.v1, syntax proto3) /* eslint-disable */ -import type { GenFile, GenMessage, GenService } from '@bufbuild/protobuf/codegenv2' -import { fileDesc, messageDesc, serviceDesc } from '@bufbuild/protobuf/codegenv2' -import type { Timestamp, TimestampJson } from '@bufbuild/protobuf/wkt' -import { file_google_protobuf_timestamp } from '@bufbuild/protobuf/wkt' -import { file_tools_generator_v1alpha_cre_metadata } from '../../../../tools/generator/v1alpha/cre_metadata_pb' -import type { Message } from '@bufbuild/protobuf' +import type { GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv2"; +import { fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv2"; +import type { Timestamp, TimestampJson } from "@bufbuild/protobuf/wkt"; +import { file_google_protobuf_timestamp } from "@bufbuild/protobuf/wkt"; +import { file_tools_generator_v1alpha_cre_metadata } from "../../../../tools/generator/v1alpha/cre_metadata_pb"; +import type { Message } from "@bufbuild/protobuf"; /** * Describes the file capabilities/scheduler/cron/v1/trigger.proto. */ -export const file_capabilities_scheduler_cron_v1_trigger: GenFile = - /*@__PURE__*/ - fileDesc( - 'CixjYXBhYmlsaXRpZXMvc2NoZWR1bGVyL2Nyb24vdjEvdHJpZ2dlci5wcm90bxIeY2FwYWJpbGl0aWVzLnNjaGVkdWxlci5jcm9uLnYxIhoKBkNvbmZpZxIQCghzY2hlZHVsZRgBIAEoCSJHCgdQYXlsb2FkEjwKGHNjaGVkdWxlZF9leGVjdXRpb25fdGltZRgBIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAiNQoNTGVnYWN5UGF5bG9hZBIgChhzY2hlZHVsZWRfZXhlY3V0aW9uX3RpbWUYASABKAk6AhgBMvUBCgRDcm9uElwKB1RyaWdnZXISJi5jYXBhYmlsaXRpZXMuc2NoZWR1bGVyLmNyb24udjEuQ29uZmlnGicuY2FwYWJpbGl0aWVzLnNjaGVkdWxlci5jcm9uLnYxLlBheWxvYWQwARJzCg1MZWdhY3lUcmlnZ2VyEiYuY2FwYWJpbGl0aWVzLnNjaGVkdWxlci5jcm9uLnYxLkNvbmZpZxotLmNhcGFiaWxpdGllcy5zY2hlZHVsZXIuY3Jvbi52MS5MZWdhY3lQYXlsb2FkIgmIAgGKtRgCCAEwARoagrUYFggBEhJjcm9uLXRyaWdnZXJAMS4wLjBCzQEKImNvbS5jYXBhYmlsaXRpZXMuc2NoZWR1bGVyLmNyb24udjFCDFRyaWdnZXJQcm90b1ABogIDQ1NDqgIeQ2FwYWJpbGl0aWVzLlNjaGVkdWxlci5Dcm9uLlYxygIeQ2FwYWJpbGl0aWVzXFNjaGVkdWxlclxDcm9uXFYx4gIqQ2FwYWJpbGl0aWVzXFNjaGVkdWxlclxDcm9uXFYxXEdQQk1ldGFkYXRh6gIhQ2FwYWJpbGl0aWVzOjpTY2hlZHVsZXI6OkNyb246OlYxYgZwcm90bzM', - [file_google_protobuf_timestamp, file_tools_generator_v1alpha_cre_metadata], - ) +export const file_capabilities_scheduler_cron_v1_trigger: GenFile = /*@__PURE__*/ + fileDesc("CixjYXBhYmlsaXRpZXMvc2NoZWR1bGVyL2Nyb24vdjEvdHJpZ2dlci5wcm90bxIeY2FwYWJpbGl0aWVzLnNjaGVkdWxlci5jcm9uLnYxIhoKBkNvbmZpZxIQCghzY2hlZHVsZRgBIAEoCSJHCgdQYXlsb2FkEjwKGHNjaGVkdWxlZF9leGVjdXRpb25fdGltZRgBIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAiNQoNTGVnYWN5UGF5bG9hZBIgChhzY2hlZHVsZWRfZXhlY3V0aW9uX3RpbWUYASABKAk6AhgBMvUBCgRDcm9uElwKB1RyaWdnZXISJi5jYXBhYmlsaXRpZXMuc2NoZWR1bGVyLmNyb24udjEuQ29uZmlnGicuY2FwYWJpbGl0aWVzLnNjaGVkdWxlci5jcm9uLnYxLlBheWxvYWQwARJzCg1MZWdhY3lUcmlnZ2VyEiYuY2FwYWJpbGl0aWVzLnNjaGVkdWxlci5jcm9uLnYxLkNvbmZpZxotLmNhcGFiaWxpdGllcy5zY2hlZHVsZXIuY3Jvbi52MS5MZWdhY3lQYXlsb2FkIgmIAgGKtRgCCAEwARoagrUYFggBEhJjcm9uLXRyaWdnZXJAMS4wLjBCzQEKImNvbS5jYXBhYmlsaXRpZXMuc2NoZWR1bGVyLmNyb24udjFCDFRyaWdnZXJQcm90b1ABogIDQ1NDqgIeQ2FwYWJpbGl0aWVzLlNjaGVkdWxlci5Dcm9uLlYxygIeQ2FwYWJpbGl0aWVzXFNjaGVkdWxlclxDcm9uXFYx4gIqQ2FwYWJpbGl0aWVzXFNjaGVkdWxlclxDcm9uXFYxXEdQQk1ldGFkYXRh6gIhQ2FwYWJpbGl0aWVzOjpTY2hlZHVsZXI6OkNyb246OlYxYgZwcm90bzM", [file_google_protobuf_timestamp, file_tools_generator_v1alpha_cre_metadata]); /** * @generated from message capabilities.scheduler.cron.v1.Config */ -export type Config = Message<'capabilities.scheduler.cron.v1.Config'> & { - /** - * Cron schedule string - * - * @generated from field: string schedule = 1; - */ - schedule: string -} +export type Config = Message<"capabilities.scheduler.cron.v1.Config"> & { + /** + * Cron schedule string + * + * @generated from field: string schedule = 1; + */ + schedule: string; +}; /** * @generated from message capabilities.scheduler.cron.v1.Config */ export type ConfigJson = { - /** - * Cron schedule string - * - * @generated from field: string schedule = 1; - */ - schedule?: string -} + /** + * Cron schedule string + * + * @generated from field: string schedule = 1; + */ + schedule?: string; +}; /** * Describes the message capabilities.scheduler.cron.v1.Config. * Use `create(ConfigSchema)` to create a new message. */ -export const ConfigSchema: GenMessage = - /*@__PURE__*/ - messageDesc(file_capabilities_scheduler_cron_v1_trigger, 0) +export const ConfigSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_capabilities_scheduler_cron_v1_trigger, 0); /** * @generated from message capabilities.scheduler.cron.v1.Payload */ -export type Payload = Message<'capabilities.scheduler.cron.v1.Payload'> & { - /** - * @generated from field: google.protobuf.Timestamp scheduled_execution_time = 1; - */ - scheduledExecutionTime?: Timestamp -} +export type Payload = Message<"capabilities.scheduler.cron.v1.Payload"> & { + /** + * @generated from field: google.protobuf.Timestamp scheduled_execution_time = 1; + */ + scheduledExecutionTime?: Timestamp; +}; /** * @generated from message capabilities.scheduler.cron.v1.Payload */ export type PayloadJson = { - /** - * @generated from field: google.protobuf.Timestamp scheduled_execution_time = 1; - */ - scheduledExecutionTime?: TimestampJson -} + /** + * @generated from field: google.protobuf.Timestamp scheduled_execution_time = 1; + */ + scheduledExecutionTime?: TimestampJson; +}; /** * Describes the message capabilities.scheduler.cron.v1.Payload. * Use `create(PayloadSchema)` to create a new message. */ -export const PayloadSchema: GenMessage = - /*@__PURE__*/ - messageDesc(file_capabilities_scheduler_cron_v1_trigger, 1) +export const PayloadSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_capabilities_scheduler_cron_v1_trigger, 1); /** * @generated from message capabilities.scheduler.cron.v1.LegacyPayload * @deprecated */ -export type LegacyPayload = Message<'capabilities.scheduler.cron.v1.LegacyPayload'> & { - /** - * Time that cron trigger's task execution had been scheduled to occur (RFC3339Nano formatted) - * - * @generated from field: string scheduled_execution_time = 1; - */ - scheduledExecutionTime: string -} +export type LegacyPayload = Message<"capabilities.scheduler.cron.v1.LegacyPayload"> & { + /** + * Time that cron trigger's task execution had been scheduled to occur (RFC3339Nano formatted) + * + * @generated from field: string scheduled_execution_time = 1; + */ + scheduledExecutionTime: string; +}; /** * @generated from message capabilities.scheduler.cron.v1.LegacyPayload * @deprecated */ export type LegacyPayloadJson = { - /** - * Time that cron trigger's task execution had been scheduled to occur (RFC3339Nano formatted) - * - * @generated from field: string scheduled_execution_time = 1; - */ - scheduledExecutionTime?: string -} + /** + * Time that cron trigger's task execution had been scheduled to occur (RFC3339Nano formatted) + * + * @generated from field: string scheduled_execution_time = 1; + */ + scheduledExecutionTime?: string; +}; /** * Describes the message capabilities.scheduler.cron.v1.LegacyPayload. * Use `create(LegacyPayloadSchema)` to create a new message. * @deprecated */ -export const LegacyPayloadSchema: GenMessage = - /*@__PURE__*/ - messageDesc(file_capabilities_scheduler_cron_v1_trigger, 2) +export const LegacyPayloadSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_capabilities_scheduler_cron_v1_trigger, 2); /** * @generated from service capabilities.scheduler.cron.v1.Cron */ export const Cron: GenService<{ - /** - * @generated from rpc capabilities.scheduler.cron.v1.Cron.Trigger - */ - trigger: { - methodKind: 'server_streaming' - input: typeof ConfigSchema - output: typeof PayloadSchema - } - /** - * @generated from rpc capabilities.scheduler.cron.v1.Cron.LegacyTrigger - * @deprecated - */ - legacyTrigger: { - methodKind: 'server_streaming' - input: typeof ConfigSchema - output: typeof LegacyPayloadSchema - } -}> = /*@__PURE__*/ serviceDesc(file_capabilities_scheduler_cron_v1_trigger, 0) + /** + * @generated from rpc capabilities.scheduler.cron.v1.Cron.Trigger + */ + trigger: { + methodKind: "server_streaming"; + input: typeof ConfigSchema; + output: typeof PayloadSchema; + }, + /** + * @generated from rpc capabilities.scheduler.cron.v1.Cron.LegacyTrigger + * @deprecated + */ + legacyTrigger: { + methodKind: "server_streaming"; + input: typeof ConfigSchema; + output: typeof LegacyPayloadSchema; + }, +}> = /*@__PURE__*/ + serviceDesc(file_capabilities_scheduler_cron_v1_trigger, 0); + diff --git a/src/generated/sdk/v1alpha/sdk_pb.ts b/src/generated/sdk/v1alpha/sdk_pb.ts index 97c0b08f..daf96160 100644 --- a/src/generated/sdk/v1alpha/sdk_pb.ts +++ b/src/generated/sdk/v1alpha/sdk_pb.ts @@ -2,1149 +2,1087 @@ // @generated from file sdk/v1alpha/sdk.proto (package sdk.v1alpha, syntax proto3) /* eslint-disable */ -import type { GenEnum, GenFile, GenMessage } from '@bufbuild/protobuf/codegenv2' -import { enumDesc, fileDesc, messageDesc } from '@bufbuild/protobuf/codegenv2' -import type { Any, AnyJson, Empty, EmptyJson } from '@bufbuild/protobuf/wkt' -import { file_google_protobuf_any, file_google_protobuf_empty } from '@bufbuild/protobuf/wkt' -import type { Value, ValueJson } from '../../values/v1/values_pb' -import { file_values_v1_values } from '../../values/v1/values_pb' -import type { Message } from '@bufbuild/protobuf' +import type { GenEnum, GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2"; +import { enumDesc, fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2"; +import type { Any, AnyJson, Empty, EmptyJson } from "@bufbuild/protobuf/wkt"; +import { file_google_protobuf_any, file_google_protobuf_empty } from "@bufbuild/protobuf/wkt"; +import type { Value, ValueJson } from "../../values/v1/values_pb"; +import { file_values_v1_values } from "../../values/v1/values_pb"; +import type { Message } from "@bufbuild/protobuf"; /** * Describes the file sdk/v1alpha/sdk.proto. */ -export const file_sdk_v1alpha_sdk: GenFile = - /*@__PURE__*/ - fileDesc( - 'ChVzZGsvdjFhbHBoYS9zZGsucHJvdG8SC3Nkay52MWFscGhhIrQBChVTaW1wbGVDb25zZW5zdXNJbnB1dHMSIQoFdmFsdWUYASABKAsyEC52YWx1ZXMudjEuVmFsdWVIABIPCgVlcnJvchgCIAEoCUgAEjUKC2Rlc2NyaXB0b3JzGAMgASgLMiAuc2RrLnYxYWxwaGEuQ29uc2Vuc3VzRGVzY3JpcHRvchIhCgdkZWZhdWx0GAQgASgLMhAudmFsdWVzLnYxLlZhbHVlQg0KC29ic2VydmF0aW9uIpABCglGaWVsZHNNYXASMgoGZmllbGRzGAEgAygLMiIuc2RrLnYxYWxwaGEuRmllbGRzTWFwLkZpZWxkc0VudHJ5Gk8KC0ZpZWxkc0VudHJ5EgsKA2tleRgBIAEoCRIvCgV2YWx1ZRgCIAEoCzIgLnNkay52MWFscGhhLkNvbnNlbnN1c0Rlc2NyaXB0b3I6AjgBIoYBChNDb25zZW5zdXNEZXNjcmlwdG9yEjMKC2FnZ3JlZ2F0aW9uGAEgASgOMhwuc2RrLnYxYWxwaGEuQWdncmVnYXRpb25UeXBlSAASLAoKZmllbGRzX21hcBgCIAEoCzIWLnNkay52MWFscGhhLkZpZWxkc01hcEgAQgwKCmRlc2NyaXB0b3IiagoNUmVwb3J0UmVxdWVzdBIXCg9lbmNvZGVkX3BheWxvYWQYASABKAwSFAoMZW5jb2Rlcl9uYW1lGAIgASgJEhQKDHNpZ25pbmdfYWxnbxgDIAEoCRIUCgxoYXNoaW5nX2FsZ28YBCABKAkilwEKDlJlcG9ydFJlc3BvbnNlEhUKDWNvbmZpZ19kaWdlc3QYASABKAwSEgoGc2VxX25yGAIgASgEQgIwABIWCg5yZXBvcnRfY29udGV4dBgDIAEoDBISCgpyYXdfcmVwb3J0GAQgASgMEi4KBHNpZ3MYBSADKAsyIC5zZGsudjFhbHBoYS5BdHRyaWJ1dGVkU2lnbmF0dXJlIjsKE0F0dHJpYnV0ZWRTaWduYXR1cmUSEQoJc2lnbmF0dXJlGAEgASgMEhEKCXNpZ25lcl9pZBgCIAEoDSJrChFDYXBhYmlsaXR5UmVxdWVzdBIKCgJpZBgBIAEoCRIlCgdwYXlsb2FkGAIgASgLMhQuZ29vZ2xlLnByb3RvYnVmLkFueRIOCgZtZXRob2QYAyABKAkSEwoLY2FsbGJhY2tfaWQYBCABKAUiWgoSQ2FwYWJpbGl0eVJlc3BvbnNlEicKB3BheWxvYWQYASABKAsyFC5nb29nbGUucHJvdG9idWYuQW55SAASDwoFZXJyb3IYAiABKAlIAEIKCghyZXNwb25zZSJYChNUcmlnZ2VyU3Vic2NyaXB0aW9uEgoKAmlkGAEgASgJEiUKB3BheWxvYWQYAiABKAsyFC5nb29nbGUucHJvdG9idWYuQW55Eg4KBm1ldGhvZBgDIAEoCSJVChpUcmlnZ2VyU3Vic2NyaXB0aW9uUmVxdWVzdBI3Cg1zdWJzY3JpcHRpb25zGAEgAygLMiAuc2RrLnYxYWxwaGEuVHJpZ2dlclN1YnNjcmlwdGlvbiJACgdUcmlnZ2VyEg4KAmlkGAEgASgEQgIwABIlCgdwYXlsb2FkGAIgASgLMhQuZ29vZ2xlLnByb3RvYnVmLkFueSInChhBd2FpdENhcGFiaWxpdGllc1JlcXVlc3QSCwoDaWRzGAEgAygFIrgBChlBd2FpdENhcGFiaWxpdGllc1Jlc3BvbnNlEkgKCXJlc3BvbnNlcxgBIAMoCzI1LnNkay52MWFscGhhLkF3YWl0Q2FwYWJpbGl0aWVzUmVzcG9uc2UuUmVzcG9uc2VzRW50cnkaUQoOUmVzcG9uc2VzRW50cnkSCwoDa2V5GAEgASgFEi4KBXZhbHVlGAIgASgLMh8uc2RrLnYxYWxwaGEuQ2FwYWJpbGl0eVJlc3BvbnNlOgI4ASKgAQoORXhlY3V0ZVJlcXVlc3QSDgoGY29uZmlnGAEgASgMEisKCXN1YnNjcmliZRgCIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eUgAEicKB3RyaWdnZXIYAyABKAsyFC5zZGsudjFhbHBoYS5UcmlnZ2VySAASHQoRbWF4X3Jlc3BvbnNlX3NpemUYBCABKARCAjAAQgkKB3JlcXVlc3QimQEKD0V4ZWN1dGlvblJlc3VsdBIhCgV2YWx1ZRgBIAEoCzIQLnZhbHVlcy52MS5WYWx1ZUgAEg8KBWVycm9yGAIgASgJSAASSAoVdHJpZ2dlcl9zdWJzY3JpcHRpb25zGAMgASgLMicuc2RrLnYxYWxwaGEuVHJpZ2dlclN1YnNjcmlwdGlvblJlcXVlc3RIAEIICgZyZXN1bHQiVgoRR2V0U2VjcmV0c1JlcXVlc3QSLAoIcmVxdWVzdHMYASADKAsyGi5zZGsudjFhbHBoYS5TZWNyZXRSZXF1ZXN0EhMKC2NhbGxiYWNrX2lkGAIgASgFIiIKE0F3YWl0U2VjcmV0c1JlcXVlc3QSCwoDaWRzGAEgAygFIqsBChRBd2FpdFNlY3JldHNSZXNwb25zZRJDCglyZXNwb25zZXMYASADKAsyMC5zZGsudjFhbHBoYS5Bd2FpdFNlY3JldHNSZXNwb25zZS5SZXNwb25zZXNFbnRyeRpOCg5SZXNwb25zZXNFbnRyeRILCgNrZXkYASABKAUSKwoFdmFsdWUYAiABKAsyHC5zZGsudjFhbHBoYS5TZWNyZXRSZXNwb25zZXM6AjgBIi4KDVNlY3JldFJlcXVlc3QSCgoCaWQYASABKAkSEQoJbmFtZXNwYWNlGAIgASgJIkUKBlNlY3JldBIKCgJpZBgBIAEoCRIRCgluYW1lc3BhY2UYAiABKAkSDQoFb3duZXIYAyABKAkSDQoFdmFsdWUYBCABKAkiSgoLU2VjcmV0RXJyb3ISCgoCaWQYASABKAkSEQoJbmFtZXNwYWNlGAIgASgJEg0KBW93bmVyGAMgASgJEg0KBWVycm9yGAQgASgJIm4KDlNlY3JldFJlc3BvbnNlEiUKBnNlY3JldBgBIAEoCzITLnNkay52MWFscGhhLlNlY3JldEgAEikKBWVycm9yGAIgASgLMhguc2RrLnYxYWxwaGEuU2VjcmV0RXJyb3JIAEIKCghyZXNwb25zZSJBCg9TZWNyZXRSZXNwb25zZXMSLgoJcmVzcG9uc2VzGAEgAygLMhsuc2RrLnYxYWxwaGEuU2VjcmV0UmVzcG9uc2UquAEKD0FnZ3JlZ2F0aW9uVHlwZRIgChxBR0dSRUdBVElPTl9UWVBFX1VOU1BFQ0lGSUVEEAASGwoXQUdHUkVHQVRJT05fVFlQRV9NRURJQU4QARIeChpBR0dSRUdBVElPTl9UWVBFX0lERU5USUNBTBACEiIKHkFHR1JFR0FUSU9OX1RZUEVfQ09NTU9OX1BSRUZJWBADEiIKHkFHR1JFR0FUSU9OX1RZUEVfQ09NTU9OX1NVRkZJWBAEKjkKBE1vZGUSFAoQTU9ERV9VTlNQRUNJRklFRBAAEgwKCE1PREVfRE9OEAESDQoJTU9ERV9OT0RFEAJCaAoPY29tLnNkay52MWFscGhhQghTZGtQcm90b1ABogIDU1hYqgILU2RrLlYxYWxwaGHKAgtTZGtcVjFhbHBoYeICF1Nka1xWMWFscGhhXEdQQk1ldGFkYXRh6gIMU2RrOjpWMWFscGhhYgZwcm90bzM', - [file_google_protobuf_any, file_google_protobuf_empty, file_values_v1_values], - ) +export const file_sdk_v1alpha_sdk: GenFile = /*@__PURE__*/ + fileDesc("ChVzZGsvdjFhbHBoYS9zZGsucHJvdG8SC3Nkay52MWFscGhhIrQBChVTaW1wbGVDb25zZW5zdXNJbnB1dHMSIQoFdmFsdWUYASABKAsyEC52YWx1ZXMudjEuVmFsdWVIABIPCgVlcnJvchgCIAEoCUgAEjUKC2Rlc2NyaXB0b3JzGAMgASgLMiAuc2RrLnYxYWxwaGEuQ29uc2Vuc3VzRGVzY3JpcHRvchIhCgdkZWZhdWx0GAQgASgLMhAudmFsdWVzLnYxLlZhbHVlQg0KC29ic2VydmF0aW9uIpABCglGaWVsZHNNYXASMgoGZmllbGRzGAEgAygLMiIuc2RrLnYxYWxwaGEuRmllbGRzTWFwLkZpZWxkc0VudHJ5Gk8KC0ZpZWxkc0VudHJ5EgsKA2tleRgBIAEoCRIvCgV2YWx1ZRgCIAEoCzIgLnNkay52MWFscGhhLkNvbnNlbnN1c0Rlc2NyaXB0b3I6AjgBIoYBChNDb25zZW5zdXNEZXNjcmlwdG9yEjMKC2FnZ3JlZ2F0aW9uGAEgASgOMhwuc2RrLnYxYWxwaGEuQWdncmVnYXRpb25UeXBlSAASLAoKZmllbGRzX21hcBgCIAEoCzIWLnNkay52MWFscGhhLkZpZWxkc01hcEgAQgwKCmRlc2NyaXB0b3IiagoNUmVwb3J0UmVxdWVzdBIXCg9lbmNvZGVkX3BheWxvYWQYASABKAwSFAoMZW5jb2Rlcl9uYW1lGAIgASgJEhQKDHNpZ25pbmdfYWxnbxgDIAEoCRIUCgxoYXNoaW5nX2FsZ28YBCABKAkilwEKDlJlcG9ydFJlc3BvbnNlEhUKDWNvbmZpZ19kaWdlc3QYASABKAwSEgoGc2VxX25yGAIgASgEQgIwABIWCg5yZXBvcnRfY29udGV4dBgDIAEoDBISCgpyYXdfcmVwb3J0GAQgASgMEi4KBHNpZ3MYBSADKAsyIC5zZGsudjFhbHBoYS5BdHRyaWJ1dGVkU2lnbmF0dXJlIjsKE0F0dHJpYnV0ZWRTaWduYXR1cmUSEQoJc2lnbmF0dXJlGAEgASgMEhEKCXNpZ25lcl9pZBgCIAEoDSJrChFDYXBhYmlsaXR5UmVxdWVzdBIKCgJpZBgBIAEoCRIlCgdwYXlsb2FkGAIgASgLMhQuZ29vZ2xlLnByb3RvYnVmLkFueRIOCgZtZXRob2QYAyABKAkSEwoLY2FsbGJhY2tfaWQYBCABKAUiWgoSQ2FwYWJpbGl0eVJlc3BvbnNlEicKB3BheWxvYWQYASABKAsyFC5nb29nbGUucHJvdG9idWYuQW55SAASDwoFZXJyb3IYAiABKAlIAEIKCghyZXNwb25zZSJYChNUcmlnZ2VyU3Vic2NyaXB0aW9uEgoKAmlkGAEgASgJEiUKB3BheWxvYWQYAiABKAsyFC5nb29nbGUucHJvdG9idWYuQW55Eg4KBm1ldGhvZBgDIAEoCSJVChpUcmlnZ2VyU3Vic2NyaXB0aW9uUmVxdWVzdBI3Cg1zdWJzY3JpcHRpb25zGAEgAygLMiAuc2RrLnYxYWxwaGEuVHJpZ2dlclN1YnNjcmlwdGlvbiJACgdUcmlnZ2VyEg4KAmlkGAEgASgEQgIwABIlCgdwYXlsb2FkGAIgASgLMhQuZ29vZ2xlLnByb3RvYnVmLkFueSInChhBd2FpdENhcGFiaWxpdGllc1JlcXVlc3QSCwoDaWRzGAEgAygFIrgBChlBd2FpdENhcGFiaWxpdGllc1Jlc3BvbnNlEkgKCXJlc3BvbnNlcxgBIAMoCzI1LnNkay52MWFscGhhLkF3YWl0Q2FwYWJpbGl0aWVzUmVzcG9uc2UuUmVzcG9uc2VzRW50cnkaUQoOUmVzcG9uc2VzRW50cnkSCwoDa2V5GAEgASgFEi4KBXZhbHVlGAIgASgLMh8uc2RrLnYxYWxwaGEuQ2FwYWJpbGl0eVJlc3BvbnNlOgI4ASKgAQoORXhlY3V0ZVJlcXVlc3QSDgoGY29uZmlnGAEgASgMEisKCXN1YnNjcmliZRgCIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eUgAEicKB3RyaWdnZXIYAyABKAsyFC5zZGsudjFhbHBoYS5UcmlnZ2VySAASHQoRbWF4X3Jlc3BvbnNlX3NpemUYBCABKARCAjAAQgkKB3JlcXVlc3QimQEKD0V4ZWN1dGlvblJlc3VsdBIhCgV2YWx1ZRgBIAEoCzIQLnZhbHVlcy52MS5WYWx1ZUgAEg8KBWVycm9yGAIgASgJSAASSAoVdHJpZ2dlcl9zdWJzY3JpcHRpb25zGAMgASgLMicuc2RrLnYxYWxwaGEuVHJpZ2dlclN1YnNjcmlwdGlvblJlcXVlc3RIAEIICgZyZXN1bHQiVgoRR2V0U2VjcmV0c1JlcXVlc3QSLAoIcmVxdWVzdHMYASADKAsyGi5zZGsudjFhbHBoYS5TZWNyZXRSZXF1ZXN0EhMKC2NhbGxiYWNrX2lkGAIgASgFIiIKE0F3YWl0U2VjcmV0c1JlcXVlc3QSCwoDaWRzGAEgAygFIqsBChRBd2FpdFNlY3JldHNSZXNwb25zZRJDCglyZXNwb25zZXMYASADKAsyMC5zZGsudjFhbHBoYS5Bd2FpdFNlY3JldHNSZXNwb25zZS5SZXNwb25zZXNFbnRyeRpOCg5SZXNwb25zZXNFbnRyeRILCgNrZXkYASABKAUSKwoFdmFsdWUYAiABKAsyHC5zZGsudjFhbHBoYS5TZWNyZXRSZXNwb25zZXM6AjgBIi4KDVNlY3JldFJlcXVlc3QSCgoCaWQYASABKAkSEQoJbmFtZXNwYWNlGAIgASgJIkUKBlNlY3JldBIKCgJpZBgBIAEoCRIRCgluYW1lc3BhY2UYAiABKAkSDQoFb3duZXIYAyABKAkSDQoFdmFsdWUYBCABKAkiSgoLU2VjcmV0RXJyb3ISCgoCaWQYASABKAkSEQoJbmFtZXNwYWNlGAIgASgJEg0KBW93bmVyGAMgASgJEg0KBWVycm9yGAQgASgJIm4KDlNlY3JldFJlc3BvbnNlEiUKBnNlY3JldBgBIAEoCzITLnNkay52MWFscGhhLlNlY3JldEgAEikKBWVycm9yGAIgASgLMhguc2RrLnYxYWxwaGEuU2VjcmV0RXJyb3JIAEIKCghyZXNwb25zZSJBCg9TZWNyZXRSZXNwb25zZXMSLgoJcmVzcG9uc2VzGAEgAygLMhsuc2RrLnYxYWxwaGEuU2VjcmV0UmVzcG9uc2UquAEKD0FnZ3JlZ2F0aW9uVHlwZRIgChxBR0dSRUdBVElPTl9UWVBFX1VOU1BFQ0lGSUVEEAASGwoXQUdHUkVHQVRJT05fVFlQRV9NRURJQU4QARIeChpBR0dSRUdBVElPTl9UWVBFX0lERU5USUNBTBACEiIKHkFHR1JFR0FUSU9OX1RZUEVfQ09NTU9OX1BSRUZJWBADEiIKHkFHR1JFR0FUSU9OX1RZUEVfQ09NTU9OX1NVRkZJWBAEKjkKBE1vZGUSFAoQTU9ERV9VTlNQRUNJRklFRBAAEgwKCE1PREVfRE9OEAESDQoJTU9ERV9OT0RFEAJCaAoPY29tLnNkay52MWFscGhhQghTZGtQcm90b1ABogIDU1hYqgILU2RrLlYxYWxwaGHKAgtTZGtcVjFhbHBoYeICF1Nka1xWMWFscGhhXEdQQk1ldGFkYXRh6gIMU2RrOjpWMWFscGhhYgZwcm90bzM", [file_google_protobuf_any, file_google_protobuf_empty, file_values_v1_values]); /** * @generated from message sdk.v1alpha.SimpleConsensusInputs */ -export type SimpleConsensusInputs = Message<'sdk.v1alpha.SimpleConsensusInputs'> & { - /** - * @generated from oneof sdk.v1alpha.SimpleConsensusInputs.observation - */ - observation: - | { - /** - * @generated from field: values.v1.Value value = 1; - */ - value: Value - case: 'value' - } - | { - /** - * @generated from field: string error = 2; - */ - value: string - case: 'error' - } - | { case: undefined; value?: undefined } - - /** - * @generated from field: sdk.v1alpha.ConsensusDescriptor descriptors = 3; - */ - descriptors?: ConsensusDescriptor - - /** - * @generated from field: values.v1.Value default = 4; - */ - default?: Value -} +export type SimpleConsensusInputs = Message<"sdk.v1alpha.SimpleConsensusInputs"> & { + /** + * @generated from oneof sdk.v1alpha.SimpleConsensusInputs.observation + */ + observation: { + /** + * @generated from field: values.v1.Value value = 1; + */ + value: Value; + case: "value"; + } | { + /** + * @generated from field: string error = 2; + */ + value: string; + case: "error"; + } | { case: undefined; value?: undefined }; + + /** + * @generated from field: sdk.v1alpha.ConsensusDescriptor descriptors = 3; + */ + descriptors?: ConsensusDescriptor; + + /** + * @generated from field: values.v1.Value default = 4; + */ + default?: Value; +}; /** * @generated from message sdk.v1alpha.SimpleConsensusInputs */ export type SimpleConsensusInputsJson = { - /** - * @generated from field: values.v1.Value value = 1; - */ - value?: ValueJson - - /** - * @generated from field: string error = 2; - */ - error?: string - - /** - * @generated from field: sdk.v1alpha.ConsensusDescriptor descriptors = 3; - */ - descriptors?: ConsensusDescriptorJson - - /** - * @generated from field: values.v1.Value default = 4; - */ - default?: ValueJson -} + /** + * @generated from field: values.v1.Value value = 1; + */ + value?: ValueJson; + + /** + * @generated from field: string error = 2; + */ + error?: string; + + /** + * @generated from field: sdk.v1alpha.ConsensusDescriptor descriptors = 3; + */ + descriptors?: ConsensusDescriptorJson; + + /** + * @generated from field: values.v1.Value default = 4; + */ + default?: ValueJson; +}; /** * Describes the message sdk.v1alpha.SimpleConsensusInputs. * Use `create(SimpleConsensusInputsSchema)` to create a new message. */ -export const SimpleConsensusInputsSchema: GenMessage< - SimpleConsensusInputs, - { jsonType: SimpleConsensusInputsJson } -> = /*@__PURE__*/ messageDesc(file_sdk_v1alpha_sdk, 0) +export const SimpleConsensusInputsSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_sdk_v1alpha_sdk, 0); /** * @generated from message sdk.v1alpha.FieldsMap */ -export type FieldsMap = Message<'sdk.v1alpha.FieldsMap'> & { - /** - * @generated from field: map fields = 1; - */ - fields: { [key: string]: ConsensusDescriptor } -} +export type FieldsMap = Message<"sdk.v1alpha.FieldsMap"> & { + /** + * @generated from field: map fields = 1; + */ + fields: { [key: string]: ConsensusDescriptor }; +}; /** * @generated from message sdk.v1alpha.FieldsMap */ export type FieldsMapJson = { - /** - * @generated from field: map fields = 1; - */ - fields?: { [key: string]: ConsensusDescriptorJson } -} + /** + * @generated from field: map fields = 1; + */ + fields?: { [key: string]: ConsensusDescriptorJson }; +}; /** * Describes the message sdk.v1alpha.FieldsMap. * Use `create(FieldsMapSchema)` to create a new message. */ -export const FieldsMapSchema: GenMessage = - /*@__PURE__*/ - messageDesc(file_sdk_v1alpha_sdk, 1) +export const FieldsMapSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_sdk_v1alpha_sdk, 1); /** * @generated from message sdk.v1alpha.ConsensusDescriptor */ -export type ConsensusDescriptor = Message<'sdk.v1alpha.ConsensusDescriptor'> & { - /** - * @generated from oneof sdk.v1alpha.ConsensusDescriptor.descriptor - */ - descriptor: - | { - /** - * @generated from field: sdk.v1alpha.AggregationType aggregation = 1; - */ - value: AggregationType - case: 'aggregation' - } - | { - /** - * @generated from field: sdk.v1alpha.FieldsMap fields_map = 2; - */ - value: FieldsMap - case: 'fieldsMap' - } - | { case: undefined; value?: undefined } -} +export type ConsensusDescriptor = Message<"sdk.v1alpha.ConsensusDescriptor"> & { + /** + * @generated from oneof sdk.v1alpha.ConsensusDescriptor.descriptor + */ + descriptor: { + /** + * @generated from field: sdk.v1alpha.AggregationType aggregation = 1; + */ + value: AggregationType; + case: "aggregation"; + } | { + /** + * @generated from field: sdk.v1alpha.FieldsMap fields_map = 2; + */ + value: FieldsMap; + case: "fieldsMap"; + } | { case: undefined; value?: undefined }; +}; /** * @generated from message sdk.v1alpha.ConsensusDescriptor */ export type ConsensusDescriptorJson = { - /** - * @generated from field: sdk.v1alpha.AggregationType aggregation = 1; - */ - aggregation?: AggregationTypeJson - - /** - * @generated from field: sdk.v1alpha.FieldsMap fields_map = 2; - */ - fieldsMap?: FieldsMapJson -} + /** + * @generated from field: sdk.v1alpha.AggregationType aggregation = 1; + */ + aggregation?: AggregationTypeJson; + + /** + * @generated from field: sdk.v1alpha.FieldsMap fields_map = 2; + */ + fieldsMap?: FieldsMapJson; +}; /** * Describes the message sdk.v1alpha.ConsensusDescriptor. * Use `create(ConsensusDescriptorSchema)` to create a new message. */ -export const ConsensusDescriptorSchema: GenMessage< - ConsensusDescriptor, - { jsonType: ConsensusDescriptorJson } -> = /*@__PURE__*/ messageDesc(file_sdk_v1alpha_sdk, 2) +export const ConsensusDescriptorSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_sdk_v1alpha_sdk, 2); /** * @generated from message sdk.v1alpha.ReportRequest */ -export type ReportRequest = Message<'sdk.v1alpha.ReportRequest'> & { - /** - * @generated from field: bytes encoded_payload = 1; - */ - encodedPayload: Uint8Array - - /** - * @generated from field: string encoder_name = 2; - */ - encoderName: string - - /** - * @generated from field: string signing_algo = 3; - */ - signingAlgo: string - - /** - * @generated from field: string hashing_algo = 4; - */ - hashingAlgo: string -} +export type ReportRequest = Message<"sdk.v1alpha.ReportRequest"> & { + /** + * @generated from field: bytes encoded_payload = 1; + */ + encodedPayload: Uint8Array; + + /** + * @generated from field: string encoder_name = 2; + */ + encoderName: string; + + /** + * @generated from field: string signing_algo = 3; + */ + signingAlgo: string; + + /** + * @generated from field: string hashing_algo = 4; + */ + hashingAlgo: string; +}; /** * @generated from message sdk.v1alpha.ReportRequest */ export type ReportRequestJson = { - /** - * @generated from field: bytes encoded_payload = 1; - */ - encodedPayload?: string - - /** - * @generated from field: string encoder_name = 2; - */ - encoderName?: string - - /** - * @generated from field: string signing_algo = 3; - */ - signingAlgo?: string - - /** - * @generated from field: string hashing_algo = 4; - */ - hashingAlgo?: string -} + /** + * @generated from field: bytes encoded_payload = 1; + */ + encodedPayload?: string; + + /** + * @generated from field: string encoder_name = 2; + */ + encoderName?: string; + + /** + * @generated from field: string signing_algo = 3; + */ + signingAlgo?: string; + + /** + * @generated from field: string hashing_algo = 4; + */ + hashingAlgo?: string; +}; /** * Describes the message sdk.v1alpha.ReportRequest. * Use `create(ReportRequestSchema)` to create a new message. */ -export const ReportRequestSchema: GenMessage = - /*@__PURE__*/ - messageDesc(file_sdk_v1alpha_sdk, 3) +export const ReportRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_sdk_v1alpha_sdk, 3); /** * @generated from message sdk.v1alpha.ReportResponse */ -export type ReportResponse = Message<'sdk.v1alpha.ReportResponse'> & { - /** - * @generated from field: bytes config_digest = 1; - */ - configDigest: Uint8Array - - /** - * @generated from field: uint64 seq_nr = 2 [jstype = JS_NORMAL]; - */ - seqNr: bigint - - /** - * combination of seq_nr and config_digest - * - * @generated from field: bytes report_context = 3; - */ - reportContext: Uint8Array - - /** - * @generated from field: bytes raw_report = 4; - */ - rawReport: Uint8Array - - /** - * @generated from field: repeated sdk.v1alpha.AttributedSignature sigs = 5; - */ - sigs: AttributedSignature[] -} +export type ReportResponse = Message<"sdk.v1alpha.ReportResponse"> & { + /** + * @generated from field: bytes config_digest = 1; + */ + configDigest: Uint8Array; + + /** + * @generated from field: uint64 seq_nr = 2 [jstype = JS_NORMAL]; + */ + seqNr: bigint; + + /** + * combination of seq_nr and config_digest + * + * @generated from field: bytes report_context = 3; + */ + reportContext: Uint8Array; + + /** + * @generated from field: bytes raw_report = 4; + */ + rawReport: Uint8Array; + + /** + * @generated from field: repeated sdk.v1alpha.AttributedSignature sigs = 5; + */ + sigs: AttributedSignature[]; +}; /** * @generated from message sdk.v1alpha.ReportResponse */ export type ReportResponseJson = { - /** - * @generated from field: bytes config_digest = 1; - */ - configDigest?: string - - /** - * @generated from field: uint64 seq_nr = 2 [jstype = JS_NORMAL]; - */ - seqNr?: string - - /** - * combination of seq_nr and config_digest - * - * @generated from field: bytes report_context = 3; - */ - reportContext?: string - - /** - * @generated from field: bytes raw_report = 4; - */ - rawReport?: string - - /** - * @generated from field: repeated sdk.v1alpha.AttributedSignature sigs = 5; - */ - sigs?: AttributedSignatureJson[] -} + /** + * @generated from field: bytes config_digest = 1; + */ + configDigest?: string; + + /** + * @generated from field: uint64 seq_nr = 2 [jstype = JS_NORMAL]; + */ + seqNr?: string; + + /** + * combination of seq_nr and config_digest + * + * @generated from field: bytes report_context = 3; + */ + reportContext?: string; + + /** + * @generated from field: bytes raw_report = 4; + */ + rawReport?: string; + + /** + * @generated from field: repeated sdk.v1alpha.AttributedSignature sigs = 5; + */ + sigs?: AttributedSignatureJson[]; +}; /** * Describes the message sdk.v1alpha.ReportResponse. * Use `create(ReportResponseSchema)` to create a new message. */ -export const ReportResponseSchema: GenMessage = - /*@__PURE__*/ - messageDesc(file_sdk_v1alpha_sdk, 4) +export const ReportResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_sdk_v1alpha_sdk, 4); /** * @generated from message sdk.v1alpha.AttributedSignature */ -export type AttributedSignature = Message<'sdk.v1alpha.AttributedSignature'> & { - /** - * @generated from field: bytes signature = 1; - */ - signature: Uint8Array +export type AttributedSignature = Message<"sdk.v1alpha.AttributedSignature"> & { + /** + * @generated from field: bytes signature = 1; + */ + signature: Uint8Array; - /** - * @generated from field: uint32 signer_id = 2; - */ - signerId: number -} + /** + * @generated from field: uint32 signer_id = 2; + */ + signerId: number; +}; /** * @generated from message sdk.v1alpha.AttributedSignature */ export type AttributedSignatureJson = { - /** - * @generated from field: bytes signature = 1; - */ - signature?: string - - /** - * @generated from field: uint32 signer_id = 2; - */ - signerId?: number -} + /** + * @generated from field: bytes signature = 1; + */ + signature?: string; + + /** + * @generated from field: uint32 signer_id = 2; + */ + signerId?: number; +}; /** * Describes the message sdk.v1alpha.AttributedSignature. * Use `create(AttributedSignatureSchema)` to create a new message. */ -export const AttributedSignatureSchema: GenMessage< - AttributedSignature, - { jsonType: AttributedSignatureJson } -> = /*@__PURE__*/ messageDesc(file_sdk_v1alpha_sdk, 5) +export const AttributedSignatureSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_sdk_v1alpha_sdk, 5); /** * @generated from message sdk.v1alpha.CapabilityRequest */ -export type CapabilityRequest = Message<'sdk.v1alpha.CapabilityRequest'> & { - /** - * @generated from field: string id = 1; - */ - id: string - - /** - * @generated from field: google.protobuf.Any payload = 2; - */ - payload?: Any - - /** - * @generated from field: string method = 3; - */ - method: string - - /** - * @generated from field: int32 callback_id = 4; - */ - callbackId: number -} +export type CapabilityRequest = Message<"sdk.v1alpha.CapabilityRequest"> & { + /** + * @generated from field: string id = 1; + */ + id: string; + + /** + * @generated from field: google.protobuf.Any payload = 2; + */ + payload?: Any; + + /** + * @generated from field: string method = 3; + */ + method: string; + + /** + * @generated from field: int32 callback_id = 4; + */ + callbackId: number; +}; /** * @generated from message sdk.v1alpha.CapabilityRequest */ export type CapabilityRequestJson = { - /** - * @generated from field: string id = 1; - */ - id?: string - - /** - * @generated from field: google.protobuf.Any payload = 2; - */ - payload?: AnyJson - - /** - * @generated from field: string method = 3; - */ - method?: string - - /** - * @generated from field: int32 callback_id = 4; - */ - callbackId?: number -} + /** + * @generated from field: string id = 1; + */ + id?: string; + + /** + * @generated from field: google.protobuf.Any payload = 2; + */ + payload?: AnyJson; + + /** + * @generated from field: string method = 3; + */ + method?: string; + + /** + * @generated from field: int32 callback_id = 4; + */ + callbackId?: number; +}; /** * Describes the message sdk.v1alpha.CapabilityRequest. * Use `create(CapabilityRequestSchema)` to create a new message. */ -export const CapabilityRequestSchema: GenMessage< - CapabilityRequest, - { jsonType: CapabilityRequestJson } -> = /*@__PURE__*/ messageDesc(file_sdk_v1alpha_sdk, 6) +export const CapabilityRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_sdk_v1alpha_sdk, 6); /** * @generated from message sdk.v1alpha.CapabilityResponse */ -export type CapabilityResponse = Message<'sdk.v1alpha.CapabilityResponse'> & { - /** - * @generated from oneof sdk.v1alpha.CapabilityResponse.response - */ - response: - | { - /** - * @generated from field: google.protobuf.Any payload = 1; - */ - value: Any - case: 'payload' - } - | { - /** - * @generated from field: string error = 2; - */ - value: string - case: 'error' - } - | { case: undefined; value?: undefined } -} +export type CapabilityResponse = Message<"sdk.v1alpha.CapabilityResponse"> & { + /** + * @generated from oneof sdk.v1alpha.CapabilityResponse.response + */ + response: { + /** + * @generated from field: google.protobuf.Any payload = 1; + */ + value: Any; + case: "payload"; + } | { + /** + * @generated from field: string error = 2; + */ + value: string; + case: "error"; + } | { case: undefined; value?: undefined }; +}; /** * @generated from message sdk.v1alpha.CapabilityResponse */ export type CapabilityResponseJson = { - /** - * @generated from field: google.protobuf.Any payload = 1; - */ - payload?: AnyJson - - /** - * @generated from field: string error = 2; - */ - error?: string -} + /** + * @generated from field: google.protobuf.Any payload = 1; + */ + payload?: AnyJson; + + /** + * @generated from field: string error = 2; + */ + error?: string; +}; /** * Describes the message sdk.v1alpha.CapabilityResponse. * Use `create(CapabilityResponseSchema)` to create a new message. */ -export const CapabilityResponseSchema: GenMessage< - CapabilityResponse, - { jsonType: CapabilityResponseJson } -> = /*@__PURE__*/ messageDesc(file_sdk_v1alpha_sdk, 7) +export const CapabilityResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_sdk_v1alpha_sdk, 7); /** * @generated from message sdk.v1alpha.TriggerSubscription */ -export type TriggerSubscription = Message<'sdk.v1alpha.TriggerSubscription'> & { - /** - * @generated from field: string id = 1; - */ - id: string - - /** - * @generated from field: google.protobuf.Any payload = 2; - */ - payload?: Any - - /** - * @generated from field: string method = 3; - */ - method: string -} +export type TriggerSubscription = Message<"sdk.v1alpha.TriggerSubscription"> & { + /** + * @generated from field: string id = 1; + */ + id: string; + + /** + * @generated from field: google.protobuf.Any payload = 2; + */ + payload?: Any; + + /** + * @generated from field: string method = 3; + */ + method: string; +}; /** * @generated from message sdk.v1alpha.TriggerSubscription */ export type TriggerSubscriptionJson = { - /** - * @generated from field: string id = 1; - */ - id?: string - - /** - * @generated from field: google.protobuf.Any payload = 2; - */ - payload?: AnyJson - - /** - * @generated from field: string method = 3; - */ - method?: string -} + /** + * @generated from field: string id = 1; + */ + id?: string; + + /** + * @generated from field: google.protobuf.Any payload = 2; + */ + payload?: AnyJson; + + /** + * @generated from field: string method = 3; + */ + method?: string; +}; /** * Describes the message sdk.v1alpha.TriggerSubscription. * Use `create(TriggerSubscriptionSchema)` to create a new message. */ -export const TriggerSubscriptionSchema: GenMessage< - TriggerSubscription, - { jsonType: TriggerSubscriptionJson } -> = /*@__PURE__*/ messageDesc(file_sdk_v1alpha_sdk, 8) +export const TriggerSubscriptionSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_sdk_v1alpha_sdk, 8); /** * @generated from message sdk.v1alpha.TriggerSubscriptionRequest */ -export type TriggerSubscriptionRequest = Message<'sdk.v1alpha.TriggerSubscriptionRequest'> & { - /** - * @generated from field: repeated sdk.v1alpha.TriggerSubscription subscriptions = 1; - */ - subscriptions: TriggerSubscription[] -} +export type TriggerSubscriptionRequest = Message<"sdk.v1alpha.TriggerSubscriptionRequest"> & { + /** + * @generated from field: repeated sdk.v1alpha.TriggerSubscription subscriptions = 1; + */ + subscriptions: TriggerSubscription[]; +}; /** * @generated from message sdk.v1alpha.TriggerSubscriptionRequest */ export type TriggerSubscriptionRequestJson = { - /** - * @generated from field: repeated sdk.v1alpha.TriggerSubscription subscriptions = 1; - */ - subscriptions?: TriggerSubscriptionJson[] -} + /** + * @generated from field: repeated sdk.v1alpha.TriggerSubscription subscriptions = 1; + */ + subscriptions?: TriggerSubscriptionJson[]; +}; /** * Describes the message sdk.v1alpha.TriggerSubscriptionRequest. * Use `create(TriggerSubscriptionRequestSchema)` to create a new message. */ -export const TriggerSubscriptionRequestSchema: GenMessage< - TriggerSubscriptionRequest, - { jsonType: TriggerSubscriptionRequestJson } -> = /*@__PURE__*/ messageDesc(file_sdk_v1alpha_sdk, 9) +export const TriggerSubscriptionRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_sdk_v1alpha_sdk, 9); /** * @generated from message sdk.v1alpha.Trigger */ -export type Trigger = Message<'sdk.v1alpha.Trigger'> & { - /** - * @generated from field: uint64 id = 1 [jstype = JS_NORMAL]; - */ - id: bigint +export type Trigger = Message<"sdk.v1alpha.Trigger"> & { + /** + * @generated from field: uint64 id = 1 [jstype = JS_NORMAL]; + */ + id: bigint; - /** - * @generated from field: google.protobuf.Any payload = 2; - */ - payload?: Any -} + /** + * @generated from field: google.protobuf.Any payload = 2; + */ + payload?: Any; +}; /** * @generated from message sdk.v1alpha.Trigger */ export type TriggerJson = { - /** - * @generated from field: uint64 id = 1 [jstype = JS_NORMAL]; - */ - id?: string - - /** - * @generated from field: google.protobuf.Any payload = 2; - */ - payload?: AnyJson -} + /** + * @generated from field: uint64 id = 1 [jstype = JS_NORMAL]; + */ + id?: string; + + /** + * @generated from field: google.protobuf.Any payload = 2; + */ + payload?: AnyJson; +}; /** * Describes the message sdk.v1alpha.Trigger. * Use `create(TriggerSchema)` to create a new message. */ -export const TriggerSchema: GenMessage = - /*@__PURE__*/ - messageDesc(file_sdk_v1alpha_sdk, 10) +export const TriggerSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_sdk_v1alpha_sdk, 10); /** * @generated from message sdk.v1alpha.AwaitCapabilitiesRequest */ -export type AwaitCapabilitiesRequest = Message<'sdk.v1alpha.AwaitCapabilitiesRequest'> & { - /** - * @generated from field: repeated int32 ids = 1; - */ - ids: number[] -} +export type AwaitCapabilitiesRequest = Message<"sdk.v1alpha.AwaitCapabilitiesRequest"> & { + /** + * @generated from field: repeated int32 ids = 1; + */ + ids: number[]; +}; /** * @generated from message sdk.v1alpha.AwaitCapabilitiesRequest */ export type AwaitCapabilitiesRequestJson = { - /** - * @generated from field: repeated int32 ids = 1; - */ - ids?: number[] -} + /** + * @generated from field: repeated int32 ids = 1; + */ + ids?: number[]; +}; /** * Describes the message sdk.v1alpha.AwaitCapabilitiesRequest. * Use `create(AwaitCapabilitiesRequestSchema)` to create a new message. */ -export const AwaitCapabilitiesRequestSchema: GenMessage< - AwaitCapabilitiesRequest, - { jsonType: AwaitCapabilitiesRequestJson } -> = /*@__PURE__*/ messageDesc(file_sdk_v1alpha_sdk, 11) +export const AwaitCapabilitiesRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_sdk_v1alpha_sdk, 11); /** * @generated from message sdk.v1alpha.AwaitCapabilitiesResponse */ -export type AwaitCapabilitiesResponse = Message<'sdk.v1alpha.AwaitCapabilitiesResponse'> & { - /** - * @generated from field: map responses = 1; - */ - responses: { [key: number]: CapabilityResponse } -} +export type AwaitCapabilitiesResponse = Message<"sdk.v1alpha.AwaitCapabilitiesResponse"> & { + /** + * @generated from field: map responses = 1; + */ + responses: { [key: number]: CapabilityResponse }; +}; /** * @generated from message sdk.v1alpha.AwaitCapabilitiesResponse */ export type AwaitCapabilitiesResponseJson = { - /** - * @generated from field: map responses = 1; - */ - responses?: { [key: number]: CapabilityResponseJson } -} + /** + * @generated from field: map responses = 1; + */ + responses?: { [key: number]: CapabilityResponseJson }; +}; /** * Describes the message sdk.v1alpha.AwaitCapabilitiesResponse. * Use `create(AwaitCapabilitiesResponseSchema)` to create a new message. */ -export const AwaitCapabilitiesResponseSchema: GenMessage< - AwaitCapabilitiesResponse, - { jsonType: AwaitCapabilitiesResponseJson } -> = /*@__PURE__*/ messageDesc(file_sdk_v1alpha_sdk, 12) +export const AwaitCapabilitiesResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_sdk_v1alpha_sdk, 12); /** * @generated from message sdk.v1alpha.ExecuteRequest */ -export type ExecuteRequest = Message<'sdk.v1alpha.ExecuteRequest'> & { - /** - * @generated from field: bytes config = 1; - */ - config: Uint8Array - - /** - * @generated from oneof sdk.v1alpha.ExecuteRequest.request - */ - request: - | { - /** - * @generated from field: google.protobuf.Empty subscribe = 2; - */ - value: Empty - case: 'subscribe' - } - | { - /** - * @generated from field: sdk.v1alpha.Trigger trigger = 3; - */ - value: Trigger - case: 'trigger' - } - | { case: undefined; value?: undefined } - - /** - * @generated from field: uint64 max_response_size = 4 [jstype = JS_NORMAL]; - */ - maxResponseSize: bigint -} +export type ExecuteRequest = Message<"sdk.v1alpha.ExecuteRequest"> & { + /** + * @generated from field: bytes config = 1; + */ + config: Uint8Array; + + /** + * @generated from oneof sdk.v1alpha.ExecuteRequest.request + */ + request: { + /** + * @generated from field: google.protobuf.Empty subscribe = 2; + */ + value: Empty; + case: "subscribe"; + } | { + /** + * @generated from field: sdk.v1alpha.Trigger trigger = 3; + */ + value: Trigger; + case: "trigger"; + } | { case: undefined; value?: undefined }; + + /** + * @generated from field: uint64 max_response_size = 4 [jstype = JS_NORMAL]; + */ + maxResponseSize: bigint; +}; /** * @generated from message sdk.v1alpha.ExecuteRequest */ export type ExecuteRequestJson = { - /** - * @generated from field: bytes config = 1; - */ - config?: string - - /** - * @generated from field: google.protobuf.Empty subscribe = 2; - */ - subscribe?: EmptyJson - - /** - * @generated from field: sdk.v1alpha.Trigger trigger = 3; - */ - trigger?: TriggerJson - - /** - * @generated from field: uint64 max_response_size = 4 [jstype = JS_NORMAL]; - */ - maxResponseSize?: string -} + /** + * @generated from field: bytes config = 1; + */ + config?: string; + + /** + * @generated from field: google.protobuf.Empty subscribe = 2; + */ + subscribe?: EmptyJson; + + /** + * @generated from field: sdk.v1alpha.Trigger trigger = 3; + */ + trigger?: TriggerJson; + + /** + * @generated from field: uint64 max_response_size = 4 [jstype = JS_NORMAL]; + */ + maxResponseSize?: string; +}; /** * Describes the message sdk.v1alpha.ExecuteRequest. * Use `create(ExecuteRequestSchema)` to create a new message. */ -export const ExecuteRequestSchema: GenMessage = - /*@__PURE__*/ - messageDesc(file_sdk_v1alpha_sdk, 13) +export const ExecuteRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_sdk_v1alpha_sdk, 13); /** * @generated from message sdk.v1alpha.ExecutionResult */ -export type ExecutionResult = Message<'sdk.v1alpha.ExecutionResult'> & { - /** - * @generated from oneof sdk.v1alpha.ExecutionResult.result - */ - result: - | { - /** - * @generated from field: values.v1.Value value = 1; - */ - value: Value - case: 'value' - } - | { - /** - * @generated from field: string error = 2; - */ - value: string - case: 'error' - } - | { - /** - * @generated from field: sdk.v1alpha.TriggerSubscriptionRequest trigger_subscriptions = 3; - */ - value: TriggerSubscriptionRequest - case: 'triggerSubscriptions' - } - | { case: undefined; value?: undefined } -} +export type ExecutionResult = Message<"sdk.v1alpha.ExecutionResult"> & { + /** + * @generated from oneof sdk.v1alpha.ExecutionResult.result + */ + result: { + /** + * @generated from field: values.v1.Value value = 1; + */ + value: Value; + case: "value"; + } | { + /** + * @generated from field: string error = 2; + */ + value: string; + case: "error"; + } | { + /** + * @generated from field: sdk.v1alpha.TriggerSubscriptionRequest trigger_subscriptions = 3; + */ + value: TriggerSubscriptionRequest; + case: "triggerSubscriptions"; + } | { case: undefined; value?: undefined }; +}; /** * @generated from message sdk.v1alpha.ExecutionResult */ export type ExecutionResultJson = { - /** - * @generated from field: values.v1.Value value = 1; - */ - value?: ValueJson - - /** - * @generated from field: string error = 2; - */ - error?: string - - /** - * @generated from field: sdk.v1alpha.TriggerSubscriptionRequest trigger_subscriptions = 3; - */ - triggerSubscriptions?: TriggerSubscriptionRequestJson -} + /** + * @generated from field: values.v1.Value value = 1; + */ + value?: ValueJson; + + /** + * @generated from field: string error = 2; + */ + error?: string; + + /** + * @generated from field: sdk.v1alpha.TriggerSubscriptionRequest trigger_subscriptions = 3; + */ + triggerSubscriptions?: TriggerSubscriptionRequestJson; +}; /** * Describes the message sdk.v1alpha.ExecutionResult. * Use `create(ExecutionResultSchema)` to create a new message. */ -export const ExecutionResultSchema: GenMessage = - /*@__PURE__*/ - messageDesc(file_sdk_v1alpha_sdk, 14) +export const ExecutionResultSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_sdk_v1alpha_sdk, 14); /** * @generated from message sdk.v1alpha.GetSecretsRequest */ -export type GetSecretsRequest = Message<'sdk.v1alpha.GetSecretsRequest'> & { - /** - * @generated from field: repeated sdk.v1alpha.SecretRequest requests = 1; - */ - requests: SecretRequest[] +export type GetSecretsRequest = Message<"sdk.v1alpha.GetSecretsRequest"> & { + /** + * @generated from field: repeated sdk.v1alpha.SecretRequest requests = 1; + */ + requests: SecretRequest[]; - /** - * @generated from field: int32 callback_id = 2; - */ - callbackId: number -} + /** + * @generated from field: int32 callback_id = 2; + */ + callbackId: number; +}; /** * @generated from message sdk.v1alpha.GetSecretsRequest */ export type GetSecretsRequestJson = { - /** - * @generated from field: repeated sdk.v1alpha.SecretRequest requests = 1; - */ - requests?: SecretRequestJson[] - - /** - * @generated from field: int32 callback_id = 2; - */ - callbackId?: number -} + /** + * @generated from field: repeated sdk.v1alpha.SecretRequest requests = 1; + */ + requests?: SecretRequestJson[]; + + /** + * @generated from field: int32 callback_id = 2; + */ + callbackId?: number; +}; /** * Describes the message sdk.v1alpha.GetSecretsRequest. * Use `create(GetSecretsRequestSchema)` to create a new message. */ -export const GetSecretsRequestSchema: GenMessage< - GetSecretsRequest, - { jsonType: GetSecretsRequestJson } -> = /*@__PURE__*/ messageDesc(file_sdk_v1alpha_sdk, 15) +export const GetSecretsRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_sdk_v1alpha_sdk, 15); /** * @generated from message sdk.v1alpha.AwaitSecretsRequest */ -export type AwaitSecretsRequest = Message<'sdk.v1alpha.AwaitSecretsRequest'> & { - /** - * @generated from field: repeated int32 ids = 1; - */ - ids: number[] -} +export type AwaitSecretsRequest = Message<"sdk.v1alpha.AwaitSecretsRequest"> & { + /** + * @generated from field: repeated int32 ids = 1; + */ + ids: number[]; +}; /** * @generated from message sdk.v1alpha.AwaitSecretsRequest */ export type AwaitSecretsRequestJson = { - /** - * @generated from field: repeated int32 ids = 1; - */ - ids?: number[] -} + /** + * @generated from field: repeated int32 ids = 1; + */ + ids?: number[]; +}; /** * Describes the message sdk.v1alpha.AwaitSecretsRequest. * Use `create(AwaitSecretsRequestSchema)` to create a new message. */ -export const AwaitSecretsRequestSchema: GenMessage< - AwaitSecretsRequest, - { jsonType: AwaitSecretsRequestJson } -> = /*@__PURE__*/ messageDesc(file_sdk_v1alpha_sdk, 16) +export const AwaitSecretsRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_sdk_v1alpha_sdk, 16); /** * @generated from message sdk.v1alpha.AwaitSecretsResponse */ -export type AwaitSecretsResponse = Message<'sdk.v1alpha.AwaitSecretsResponse'> & { - /** - * @generated from field: map responses = 1; - */ - responses: { [key: number]: SecretResponses } -} +export type AwaitSecretsResponse = Message<"sdk.v1alpha.AwaitSecretsResponse"> & { + /** + * @generated from field: map responses = 1; + */ + responses: { [key: number]: SecretResponses }; +}; /** * @generated from message sdk.v1alpha.AwaitSecretsResponse */ export type AwaitSecretsResponseJson = { - /** - * @generated from field: map responses = 1; - */ - responses?: { [key: number]: SecretResponsesJson } -} + /** + * @generated from field: map responses = 1; + */ + responses?: { [key: number]: SecretResponsesJson }; +}; /** * Describes the message sdk.v1alpha.AwaitSecretsResponse. * Use `create(AwaitSecretsResponseSchema)` to create a new message. */ -export const AwaitSecretsResponseSchema: GenMessage< - AwaitSecretsResponse, - { jsonType: AwaitSecretsResponseJson } -> = /*@__PURE__*/ messageDesc(file_sdk_v1alpha_sdk, 17) +export const AwaitSecretsResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_sdk_v1alpha_sdk, 17); /** * @generated from message sdk.v1alpha.SecretRequest */ -export type SecretRequest = Message<'sdk.v1alpha.SecretRequest'> & { - /** - * @generated from field: string id = 1; - */ - id: string +export type SecretRequest = Message<"sdk.v1alpha.SecretRequest"> & { + /** + * @generated from field: string id = 1; + */ + id: string; - /** - * @generated from field: string namespace = 2; - */ - namespace: string -} + /** + * @generated from field: string namespace = 2; + */ + namespace: string; +}; /** * @generated from message sdk.v1alpha.SecretRequest */ export type SecretRequestJson = { - /** - * @generated from field: string id = 1; - */ - id?: string - - /** - * @generated from field: string namespace = 2; - */ - namespace?: string -} + /** + * @generated from field: string id = 1; + */ + id?: string; + + /** + * @generated from field: string namespace = 2; + */ + namespace?: string; +}; /** * Describes the message sdk.v1alpha.SecretRequest. * Use `create(SecretRequestSchema)` to create a new message. */ -export const SecretRequestSchema: GenMessage = - /*@__PURE__*/ - messageDesc(file_sdk_v1alpha_sdk, 18) +export const SecretRequestSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_sdk_v1alpha_sdk, 18); /** * @generated from message sdk.v1alpha.Secret */ -export type Secret = Message<'sdk.v1alpha.Secret'> & { - /** - * @generated from field: string id = 1; - */ - id: string - - /** - * @generated from field: string namespace = 2; - */ - namespace: string - - /** - * @generated from field: string owner = 3; - */ - owner: string - - /** - * @generated from field: string value = 4; - */ - value: string -} +export type Secret = Message<"sdk.v1alpha.Secret"> & { + /** + * @generated from field: string id = 1; + */ + id: string; + + /** + * @generated from field: string namespace = 2; + */ + namespace: string; + + /** + * @generated from field: string owner = 3; + */ + owner: string; + + /** + * @generated from field: string value = 4; + */ + value: string; +}; /** * @generated from message sdk.v1alpha.Secret */ export type SecretJson = { - /** - * @generated from field: string id = 1; - */ - id?: string - - /** - * @generated from field: string namespace = 2; - */ - namespace?: string - - /** - * @generated from field: string owner = 3; - */ - owner?: string - - /** - * @generated from field: string value = 4; - */ - value?: string -} + /** + * @generated from field: string id = 1; + */ + id?: string; + + /** + * @generated from field: string namespace = 2; + */ + namespace?: string; + + /** + * @generated from field: string owner = 3; + */ + owner?: string; + + /** + * @generated from field: string value = 4; + */ + value?: string; +}; /** * Describes the message sdk.v1alpha.Secret. * Use `create(SecretSchema)` to create a new message. */ -export const SecretSchema: GenMessage = - /*@__PURE__*/ - messageDesc(file_sdk_v1alpha_sdk, 19) +export const SecretSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_sdk_v1alpha_sdk, 19); /** * @generated from message sdk.v1alpha.SecretError */ -export type SecretError = Message<'sdk.v1alpha.SecretError'> & { - /** - * @generated from field: string id = 1; - */ - id: string - - /** - * @generated from field: string namespace = 2; - */ - namespace: string - - /** - * @generated from field: string owner = 3; - */ - owner: string - - /** - * @generated from field: string error = 4; - */ - error: string -} +export type SecretError = Message<"sdk.v1alpha.SecretError"> & { + /** + * @generated from field: string id = 1; + */ + id: string; + + /** + * @generated from field: string namespace = 2; + */ + namespace: string; + + /** + * @generated from field: string owner = 3; + */ + owner: string; + + /** + * @generated from field: string error = 4; + */ + error: string; +}; /** * @generated from message sdk.v1alpha.SecretError */ export type SecretErrorJson = { - /** - * @generated from field: string id = 1; - */ - id?: string - - /** - * @generated from field: string namespace = 2; - */ - namespace?: string - - /** - * @generated from field: string owner = 3; - */ - owner?: string - - /** - * @generated from field: string error = 4; - */ - error?: string -} + /** + * @generated from field: string id = 1; + */ + id?: string; + + /** + * @generated from field: string namespace = 2; + */ + namespace?: string; + + /** + * @generated from field: string owner = 3; + */ + owner?: string; + + /** + * @generated from field: string error = 4; + */ + error?: string; +}; /** * Describes the message sdk.v1alpha.SecretError. * Use `create(SecretErrorSchema)` to create a new message. */ -export const SecretErrorSchema: GenMessage = - /*@__PURE__*/ - messageDesc(file_sdk_v1alpha_sdk, 20) +export const SecretErrorSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_sdk_v1alpha_sdk, 20); /** * @generated from message sdk.v1alpha.SecretResponse */ -export type SecretResponse = Message<'sdk.v1alpha.SecretResponse'> & { - /** - * @generated from oneof sdk.v1alpha.SecretResponse.response - */ - response: - | { - /** - * @generated from field: sdk.v1alpha.Secret secret = 1; - */ - value: Secret - case: 'secret' - } - | { - /** - * @generated from field: sdk.v1alpha.SecretError error = 2; - */ - value: SecretError - case: 'error' - } - | { case: undefined; value?: undefined } -} +export type SecretResponse = Message<"sdk.v1alpha.SecretResponse"> & { + /** + * @generated from oneof sdk.v1alpha.SecretResponse.response + */ + response: { + /** + * @generated from field: sdk.v1alpha.Secret secret = 1; + */ + value: Secret; + case: "secret"; + } | { + /** + * @generated from field: sdk.v1alpha.SecretError error = 2; + */ + value: SecretError; + case: "error"; + } | { case: undefined; value?: undefined }; +}; /** * @generated from message sdk.v1alpha.SecretResponse */ export type SecretResponseJson = { - /** - * @generated from field: sdk.v1alpha.Secret secret = 1; - */ - secret?: SecretJson - - /** - * @generated from field: sdk.v1alpha.SecretError error = 2; - */ - error?: SecretErrorJson -} + /** + * @generated from field: sdk.v1alpha.Secret secret = 1; + */ + secret?: SecretJson; + + /** + * @generated from field: sdk.v1alpha.SecretError error = 2; + */ + error?: SecretErrorJson; +}; /** * Describes the message sdk.v1alpha.SecretResponse. * Use `create(SecretResponseSchema)` to create a new message. */ -export const SecretResponseSchema: GenMessage = - /*@__PURE__*/ - messageDesc(file_sdk_v1alpha_sdk, 21) +export const SecretResponseSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_sdk_v1alpha_sdk, 21); /** * @generated from message sdk.v1alpha.SecretResponses */ -export type SecretResponses = Message<'sdk.v1alpha.SecretResponses'> & { - /** - * @generated from field: repeated sdk.v1alpha.SecretResponse responses = 1; - */ - responses: SecretResponse[] -} +export type SecretResponses = Message<"sdk.v1alpha.SecretResponses"> & { + /** + * @generated from field: repeated sdk.v1alpha.SecretResponse responses = 1; + */ + responses: SecretResponse[]; +}; /** * @generated from message sdk.v1alpha.SecretResponses */ export type SecretResponsesJson = { - /** - * @generated from field: repeated sdk.v1alpha.SecretResponse responses = 1; - */ - responses?: SecretResponseJson[] -} + /** + * @generated from field: repeated sdk.v1alpha.SecretResponse responses = 1; + */ + responses?: SecretResponseJson[]; +}; /** * Describes the message sdk.v1alpha.SecretResponses. * Use `create(SecretResponsesSchema)` to create a new message. */ -export const SecretResponsesSchema: GenMessage = - /*@__PURE__*/ - messageDesc(file_sdk_v1alpha_sdk, 22) +export const SecretResponsesSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_sdk_v1alpha_sdk, 22); /** * @generated from enum sdk.v1alpha.AggregationType */ export enum AggregationType { - /** - * @generated from enum value: AGGREGATION_TYPE_UNSPECIFIED = 0; - */ - UNSPECIFIED = 0, - - /** - * @generated from enum value: AGGREGATION_TYPE_MEDIAN = 1; - */ - MEDIAN = 1, - - /** - * @generated from enum value: AGGREGATION_TYPE_IDENTICAL = 2; - */ - IDENTICAL = 2, - - /** - * @generated from enum value: AGGREGATION_TYPE_COMMON_PREFIX = 3; - */ - COMMON_PREFIX = 3, - - /** - * @generated from enum value: AGGREGATION_TYPE_COMMON_SUFFIX = 4; - */ - COMMON_SUFFIX = 4, + /** + * @generated from enum value: AGGREGATION_TYPE_UNSPECIFIED = 0; + */ + UNSPECIFIED = 0, + + /** + * @generated from enum value: AGGREGATION_TYPE_MEDIAN = 1; + */ + MEDIAN = 1, + + /** + * @generated from enum value: AGGREGATION_TYPE_IDENTICAL = 2; + */ + IDENTICAL = 2, + + /** + * @generated from enum value: AGGREGATION_TYPE_COMMON_PREFIX = 3; + */ + COMMON_PREFIX = 3, + + /** + * @generated from enum value: AGGREGATION_TYPE_COMMON_SUFFIX = 4; + */ + COMMON_SUFFIX = 4, } /** * @generated from enum sdk.v1alpha.AggregationType */ -export type AggregationTypeJson = - | 'AGGREGATION_TYPE_UNSPECIFIED' - | 'AGGREGATION_TYPE_MEDIAN' - | 'AGGREGATION_TYPE_IDENTICAL' - | 'AGGREGATION_TYPE_COMMON_PREFIX' - | 'AGGREGATION_TYPE_COMMON_SUFFIX' +export type AggregationTypeJson = "AGGREGATION_TYPE_UNSPECIFIED" | "AGGREGATION_TYPE_MEDIAN" | "AGGREGATION_TYPE_IDENTICAL" | "AGGREGATION_TYPE_COMMON_PREFIX" | "AGGREGATION_TYPE_COMMON_SUFFIX"; /** * Describes the enum sdk.v1alpha.AggregationType. */ -export const AggregationTypeSchema: GenEnum = - /*@__PURE__*/ - enumDesc(file_sdk_v1alpha_sdk, 0) +export const AggregationTypeSchema: GenEnum = /*@__PURE__*/ + enumDesc(file_sdk_v1alpha_sdk, 0); /** * @generated from enum sdk.v1alpha.Mode */ export enum Mode { - /** - * @generated from enum value: MODE_UNSPECIFIED = 0; - */ - UNSPECIFIED = 0, - - /** - * @generated from enum value: MODE_DON = 1; - */ - DON = 1, - - /** - * @generated from enum value: MODE_NODE = 2; - */ - NODE = 2, + /** + * @generated from enum value: MODE_UNSPECIFIED = 0; + */ + UNSPECIFIED = 0, + + /** + * @generated from enum value: MODE_DON = 1; + */ + DON = 1, + + /** + * @generated from enum value: MODE_NODE = 2; + */ + NODE = 2, } /** * @generated from enum sdk.v1alpha.Mode */ -export type ModeJson = 'MODE_UNSPECIFIED' | 'MODE_DON' | 'MODE_NODE' +export type ModeJson = "MODE_UNSPECIFIED" | "MODE_DON" | "MODE_NODE"; /** * Describes the enum sdk.v1alpha.Mode. */ -export const ModeSchema: GenEnum = /*@__PURE__*/ enumDesc(file_sdk_v1alpha_sdk, 1) +export const ModeSchema: GenEnum = /*@__PURE__*/ + enumDesc(file_sdk_v1alpha_sdk, 1); + diff --git a/src/generated/tools/generator/v1alpha/cre_metadata_pb.ts b/src/generated/tools/generator/v1alpha/cre_metadata_pb.ts index f317d6ad..957437ce 100644 --- a/src/generated/tools/generator/v1alpha/cre_metadata_pb.ts +++ b/src/generated/tools/generator/v1alpha/cre_metadata_pb.ts @@ -2,341 +2,319 @@ // @generated from file tools/generator/v1alpha/cre_metadata.proto (package tools.generator.v1alpha, syntax proto3) /* eslint-disable */ -import type { GenExtension, GenFile, GenMessage } from '@bufbuild/protobuf/codegenv2' -import { extDesc, fileDesc, messageDesc } from '@bufbuild/protobuf/codegenv2' -import type { MethodOptions, ServiceOptions } from '@bufbuild/protobuf/wkt' -import { file_google_protobuf_descriptor } from '@bufbuild/protobuf/wkt' -import type { Mode, ModeJson } from '../../../sdk/v1alpha/sdk_pb' -import { file_sdk_v1alpha_sdk } from '../../../sdk/v1alpha/sdk_pb' -import type { Message } from '@bufbuild/protobuf' +import type { GenExtension, GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2"; +import { extDesc, fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2"; +import type { MethodOptions, ServiceOptions } from "@bufbuild/protobuf/wkt"; +import { file_google_protobuf_descriptor } from "@bufbuild/protobuf/wkt"; +import type { Mode, ModeJson } from "../../../sdk/v1alpha/sdk_pb"; +import { file_sdk_v1alpha_sdk } from "../../../sdk/v1alpha/sdk_pb"; +import type { Message } from "@bufbuild/protobuf"; /** * Describes the file tools/generator/v1alpha/cre_metadata.proto. */ -export const file_tools_generator_v1alpha_cre_metadata: GenFile = - /*@__PURE__*/ - fileDesc( - 'Cip0b29scy9nZW5lcmF0b3IvdjFhbHBoYS9jcmVfbWV0YWRhdGEucHJvdG8SF3Rvb2xzLmdlbmVyYXRvci52MWFscGhhIoQBCgtTdHJpbmdMYWJlbBJECghkZWZhdWx0cxgBIAMoCzIyLnRvb2xzLmdlbmVyYXRvci52MWFscGhhLlN0cmluZ0xhYmVsLkRlZmF1bHRzRW50cnkaLwoNRGVmYXVsdHNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBIogBCgtVaW50NjRMYWJlbBJECghkZWZhdWx0cxgBIAMoCzIyLnRvb2xzLmdlbmVyYXRvci52MWFscGhhLlVpbnQ2NExhYmVsLkRlZmF1bHRzRW50cnkaMwoNRGVmYXVsdHNFbnRyeRILCgNrZXkYASABKAkSEQoFdmFsdWUYAiABKARCAjAAOgI4ASKEAQoLVWludDMyTGFiZWwSRAoIZGVmYXVsdHMYASADKAsyMi50b29scy5nZW5lcmF0b3IudjFhbHBoYS5VaW50MzJMYWJlbC5EZWZhdWx0c0VudHJ5Gi8KDURlZmF1bHRzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgNOgI4ASKGAQoKSW50NjRMYWJlbBJDCghkZWZhdWx0cxgBIAMoCzIxLnRvb2xzLmdlbmVyYXRvci52MWFscGhhLkludDY0TGFiZWwuRGVmYXVsdHNFbnRyeRozCg1EZWZhdWx0c0VudHJ5EgsKA2tleRgBIAEoCRIRCgV2YWx1ZRgCIAEoA0ICMAA6AjgBIoIBCgpJbnQzMkxhYmVsEkMKCGRlZmF1bHRzGAEgAygLMjEudG9vbHMuZ2VuZXJhdG9yLnYxYWxwaGEuSW50MzJMYWJlbC5EZWZhdWx0c0VudHJ5Gi8KDURlZmF1bHRzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgFOgI4ASLBAgoFTGFiZWwSPAoMc3RyaW5nX2xhYmVsGAEgASgLMiQudG9vbHMuZ2VuZXJhdG9yLnYxYWxwaGEuU3RyaW5nTGFiZWxIABI8Cgx1aW50NjRfbGFiZWwYAiABKAsyJC50b29scy5nZW5lcmF0b3IudjFhbHBoYS5VaW50NjRMYWJlbEgAEjoKC2ludDY0X2xhYmVsGAMgASgLMiMudG9vbHMuZ2VuZXJhdG9yLnYxYWxwaGEuSW50NjRMYWJlbEgAEjwKDHVpbnQzMl9sYWJlbBgEIAEoCzIkLnRvb2xzLmdlbmVyYXRvci52MWFscGhhLlVpbnQzMkxhYmVsSAASOgoLaW50MzJfbGFiZWwYBSABKAsyIy50b29scy5nZW5lcmF0b3IudjFhbHBoYS5JbnQzMkxhYmVsSABCBgoEa2luZCLkAQoSQ2FwYWJpbGl0eU1ldGFkYXRhEh8KBG1vZGUYASABKA4yES5zZGsudjFhbHBoYS5Nb2RlEhUKDWNhcGFiaWxpdHlfaWQYAiABKAkSRwoGbGFiZWxzGAMgAygLMjcudG9vbHMuZ2VuZXJhdG9yLnYxYWxwaGEuQ2FwYWJpbGl0eU1ldGFkYXRhLkxhYmVsc0VudHJ5Gk0KC0xhYmVsc0VudHJ5EgsKA2tleRgBIAEoCRItCgV2YWx1ZRgCIAEoCzIeLnRvb2xzLmdlbmVyYXRvci52MWFscGhhLkxhYmVsOgI4ASI2ChhDYXBhYmlsaXR5TWV0aG9kTWV0YWRhdGESGgoSbWFwX3RvX3VudHlwZWRfYXBpGAEgASgIOm4KCmNhcGFiaWxpdHkSHy5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMY0IYDIAEoCzIrLnRvb2xzLmdlbmVyYXRvci52MWFscGhhLkNhcGFiaWxpdHlNZXRhZGF0YVIKY2FwYWJpbGl0eTprCgZtZXRob2QSHi5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucxjRhgMgASgLMjEudG9vbHMuZ2VuZXJhdG9yLnYxYWxwaGEuQ2FwYWJpbGl0eU1ldGhvZE1ldGFkYXRhUgZtZXRob2RCrwEKG2NvbS50b29scy5nZW5lcmF0b3IudjFhbHBoYUIQQ3JlTWV0YWRhdGFQcm90b1ABogIDVEdYqgIXVG9vbHMuR2VuZXJhdG9yLlYxYWxwaGHKAhhUb29sc1xHZW5lcmF0b3JfXFYxYWxwaGHiAiRUb29sc1xHZW5lcmF0b3JfXFYxYWxwaGFcR1BCTWV0YWRhdGHqAhlUb29sczo6R2VuZXJhdG9yOjpWMWFscGhhYgZwcm90bzM', - [file_google_protobuf_descriptor, file_sdk_v1alpha_sdk], - ) +export const file_tools_generator_v1alpha_cre_metadata: GenFile = /*@__PURE__*/ + fileDesc("Cip0b29scy9nZW5lcmF0b3IvdjFhbHBoYS9jcmVfbWV0YWRhdGEucHJvdG8SF3Rvb2xzLmdlbmVyYXRvci52MWFscGhhIoQBCgtTdHJpbmdMYWJlbBJECghkZWZhdWx0cxgBIAMoCzIyLnRvb2xzLmdlbmVyYXRvci52MWFscGhhLlN0cmluZ0xhYmVsLkRlZmF1bHRzRW50cnkaLwoNRGVmYXVsdHNFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBIogBCgtVaW50NjRMYWJlbBJECghkZWZhdWx0cxgBIAMoCzIyLnRvb2xzLmdlbmVyYXRvci52MWFscGhhLlVpbnQ2NExhYmVsLkRlZmF1bHRzRW50cnkaMwoNRGVmYXVsdHNFbnRyeRILCgNrZXkYASABKAkSEQoFdmFsdWUYAiABKARCAjAAOgI4ASKEAQoLVWludDMyTGFiZWwSRAoIZGVmYXVsdHMYASADKAsyMi50b29scy5nZW5lcmF0b3IudjFhbHBoYS5VaW50MzJMYWJlbC5EZWZhdWx0c0VudHJ5Gi8KDURlZmF1bHRzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgNOgI4ASKGAQoKSW50NjRMYWJlbBJDCghkZWZhdWx0cxgBIAMoCzIxLnRvb2xzLmdlbmVyYXRvci52MWFscGhhLkludDY0TGFiZWwuRGVmYXVsdHNFbnRyeRozCg1EZWZhdWx0c0VudHJ5EgsKA2tleRgBIAEoCRIRCgV2YWx1ZRgCIAEoA0ICMAA6AjgBIoIBCgpJbnQzMkxhYmVsEkMKCGRlZmF1bHRzGAEgAygLMjEudG9vbHMuZ2VuZXJhdG9yLnYxYWxwaGEuSW50MzJMYWJlbC5EZWZhdWx0c0VudHJ5Gi8KDURlZmF1bHRzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgFOgI4ASLBAgoFTGFiZWwSPAoMc3RyaW5nX2xhYmVsGAEgASgLMiQudG9vbHMuZ2VuZXJhdG9yLnYxYWxwaGEuU3RyaW5nTGFiZWxIABI8Cgx1aW50NjRfbGFiZWwYAiABKAsyJC50b29scy5nZW5lcmF0b3IudjFhbHBoYS5VaW50NjRMYWJlbEgAEjoKC2ludDY0X2xhYmVsGAMgASgLMiMudG9vbHMuZ2VuZXJhdG9yLnYxYWxwaGEuSW50NjRMYWJlbEgAEjwKDHVpbnQzMl9sYWJlbBgEIAEoCzIkLnRvb2xzLmdlbmVyYXRvci52MWFscGhhLlVpbnQzMkxhYmVsSAASOgoLaW50MzJfbGFiZWwYBSABKAsyIy50b29scy5nZW5lcmF0b3IudjFhbHBoYS5JbnQzMkxhYmVsSABCBgoEa2luZCLkAQoSQ2FwYWJpbGl0eU1ldGFkYXRhEh8KBG1vZGUYASABKA4yES5zZGsudjFhbHBoYS5Nb2RlEhUKDWNhcGFiaWxpdHlfaWQYAiABKAkSRwoGbGFiZWxzGAMgAygLMjcudG9vbHMuZ2VuZXJhdG9yLnYxYWxwaGEuQ2FwYWJpbGl0eU1ldGFkYXRhLkxhYmVsc0VudHJ5Gk0KC0xhYmVsc0VudHJ5EgsKA2tleRgBIAEoCRItCgV2YWx1ZRgCIAEoCzIeLnRvb2xzLmdlbmVyYXRvci52MWFscGhhLkxhYmVsOgI4ASI2ChhDYXBhYmlsaXR5TWV0aG9kTWV0YWRhdGESGgoSbWFwX3RvX3VudHlwZWRfYXBpGAEgASgIOm4KCmNhcGFiaWxpdHkSHy5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnMY0IYDIAEoCzIrLnRvb2xzLmdlbmVyYXRvci52MWFscGhhLkNhcGFiaWxpdHlNZXRhZGF0YVIKY2FwYWJpbGl0eTprCgZtZXRob2QSHi5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucxjRhgMgASgLMjEudG9vbHMuZ2VuZXJhdG9yLnYxYWxwaGEuQ2FwYWJpbGl0eU1ldGhvZE1ldGFkYXRhUgZtZXRob2RCrwEKG2NvbS50b29scy5nZW5lcmF0b3IudjFhbHBoYUIQQ3JlTWV0YWRhdGFQcm90b1ABogIDVEdYqgIXVG9vbHMuR2VuZXJhdG9yLlYxYWxwaGHKAhhUb29sc1xHZW5lcmF0b3JfXFYxYWxwaGHiAiRUb29sc1xHZW5lcmF0b3JfXFYxYWxwaGFcR1BCTWV0YWRhdGHqAhlUb29sczo6R2VuZXJhdG9yOjpWMWFscGhhYgZwcm90bzM", [file_google_protobuf_descriptor, file_sdk_v1alpha_sdk]); /** * @generated from message tools.generator.v1alpha.StringLabel */ -export type StringLabel = Message<'tools.generator.v1alpha.StringLabel'> & { - /** - * @generated from field: map defaults = 1; - */ - defaults: { [key: string]: string } -} +export type StringLabel = Message<"tools.generator.v1alpha.StringLabel"> & { + /** + * @generated from field: map defaults = 1; + */ + defaults: { [key: string]: string }; +}; /** * @generated from message tools.generator.v1alpha.StringLabel */ export type StringLabelJson = { - /** - * @generated from field: map defaults = 1; - */ - defaults?: { [key: string]: string } -} + /** + * @generated from field: map defaults = 1; + */ + defaults?: { [key: string]: string }; +}; /** * Describes the message tools.generator.v1alpha.StringLabel. * Use `create(StringLabelSchema)` to create a new message. */ -export const StringLabelSchema: GenMessage = - /*@__PURE__*/ - messageDesc(file_tools_generator_v1alpha_cre_metadata, 0) +export const StringLabelSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_tools_generator_v1alpha_cre_metadata, 0); /** * @generated from message tools.generator.v1alpha.Uint64Label */ -export type Uint64Label = Message<'tools.generator.v1alpha.Uint64Label'> & { - /** - * @generated from field: map defaults = 1; - */ - defaults: { [key: string]: bigint } -} +export type Uint64Label = Message<"tools.generator.v1alpha.Uint64Label"> & { + /** + * @generated from field: map defaults = 1; + */ + defaults: { [key: string]: bigint }; +}; /** * @generated from message tools.generator.v1alpha.Uint64Label */ export type Uint64LabelJson = { - /** - * @generated from field: map defaults = 1; - */ - defaults?: { [key: string]: string } -} + /** + * @generated from field: map defaults = 1; + */ + defaults?: { [key: string]: string }; +}; /** * Describes the message tools.generator.v1alpha.Uint64Label. * Use `create(Uint64LabelSchema)` to create a new message. */ -export const Uint64LabelSchema: GenMessage = - /*@__PURE__*/ - messageDesc(file_tools_generator_v1alpha_cre_metadata, 1) +export const Uint64LabelSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_tools_generator_v1alpha_cre_metadata, 1); /** * @generated from message tools.generator.v1alpha.Uint32Label */ -export type Uint32Label = Message<'tools.generator.v1alpha.Uint32Label'> & { - /** - * @generated from field: map defaults = 1; - */ - defaults: { [key: string]: number } -} +export type Uint32Label = Message<"tools.generator.v1alpha.Uint32Label"> & { + /** + * @generated from field: map defaults = 1; + */ + defaults: { [key: string]: number }; +}; /** * @generated from message tools.generator.v1alpha.Uint32Label */ export type Uint32LabelJson = { - /** - * @generated from field: map defaults = 1; - */ - defaults?: { [key: string]: number } -} + /** + * @generated from field: map defaults = 1; + */ + defaults?: { [key: string]: number }; +}; /** * Describes the message tools.generator.v1alpha.Uint32Label. * Use `create(Uint32LabelSchema)` to create a new message. */ -export const Uint32LabelSchema: GenMessage = - /*@__PURE__*/ - messageDesc(file_tools_generator_v1alpha_cre_metadata, 2) +export const Uint32LabelSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_tools_generator_v1alpha_cre_metadata, 2); /** * @generated from message tools.generator.v1alpha.Int64Label */ -export type Int64Label = Message<'tools.generator.v1alpha.Int64Label'> & { - /** - * @generated from field: map defaults = 1; - */ - defaults: { [key: string]: bigint } -} +export type Int64Label = Message<"tools.generator.v1alpha.Int64Label"> & { + /** + * @generated from field: map defaults = 1; + */ + defaults: { [key: string]: bigint }; +}; /** * @generated from message tools.generator.v1alpha.Int64Label */ export type Int64LabelJson = { - /** - * @generated from field: map defaults = 1; - */ - defaults?: { [key: string]: string } -} + /** + * @generated from field: map defaults = 1; + */ + defaults?: { [key: string]: string }; +}; /** * Describes the message tools.generator.v1alpha.Int64Label. * Use `create(Int64LabelSchema)` to create a new message. */ -export const Int64LabelSchema: GenMessage = - /*@__PURE__*/ - messageDesc(file_tools_generator_v1alpha_cre_metadata, 3) +export const Int64LabelSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_tools_generator_v1alpha_cre_metadata, 3); /** * @generated from message tools.generator.v1alpha.Int32Label */ -export type Int32Label = Message<'tools.generator.v1alpha.Int32Label'> & { - /** - * @generated from field: map defaults = 1; - */ - defaults: { [key: string]: number } -} +export type Int32Label = Message<"tools.generator.v1alpha.Int32Label"> & { + /** + * @generated from field: map defaults = 1; + */ + defaults: { [key: string]: number }; +}; /** * @generated from message tools.generator.v1alpha.Int32Label */ export type Int32LabelJson = { - /** - * @generated from field: map defaults = 1; - */ - defaults?: { [key: string]: number } -} + /** + * @generated from field: map defaults = 1; + */ + defaults?: { [key: string]: number }; +}; /** * Describes the message tools.generator.v1alpha.Int32Label. * Use `create(Int32LabelSchema)` to create a new message. */ -export const Int32LabelSchema: GenMessage = - /*@__PURE__*/ - messageDesc(file_tools_generator_v1alpha_cre_metadata, 4) +export const Int32LabelSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_tools_generator_v1alpha_cre_metadata, 4); /** * @generated from message tools.generator.v1alpha.Label */ -export type Label = Message<'tools.generator.v1alpha.Label'> & { - /** - * @generated from oneof tools.generator.v1alpha.Label.kind - */ - kind: - | { - /** - * @generated from field: tools.generator.v1alpha.StringLabel string_label = 1; - */ - value: StringLabel - case: 'stringLabel' - } - | { - /** - * @generated from field: tools.generator.v1alpha.Uint64Label uint64_label = 2; - */ - value: Uint64Label - case: 'uint64Label' - } - | { - /** - * @generated from field: tools.generator.v1alpha.Int64Label int64_label = 3; - */ - value: Int64Label - case: 'int64Label' - } - | { - /** - * @generated from field: tools.generator.v1alpha.Uint32Label uint32_label = 4; - */ - value: Uint32Label - case: 'uint32Label' - } - | { - /** - * @generated from field: tools.generator.v1alpha.Int32Label int32_label = 5; - */ - value: Int32Label - case: 'int32Label' - } - | { case: undefined; value?: undefined } -} +export type Label = Message<"tools.generator.v1alpha.Label"> & { + /** + * @generated from oneof tools.generator.v1alpha.Label.kind + */ + kind: { + /** + * @generated from field: tools.generator.v1alpha.StringLabel string_label = 1; + */ + value: StringLabel; + case: "stringLabel"; + } | { + /** + * @generated from field: tools.generator.v1alpha.Uint64Label uint64_label = 2; + */ + value: Uint64Label; + case: "uint64Label"; + } | { + /** + * @generated from field: tools.generator.v1alpha.Int64Label int64_label = 3; + */ + value: Int64Label; + case: "int64Label"; + } | { + /** + * @generated from field: tools.generator.v1alpha.Uint32Label uint32_label = 4; + */ + value: Uint32Label; + case: "uint32Label"; + } | { + /** + * @generated from field: tools.generator.v1alpha.Int32Label int32_label = 5; + */ + value: Int32Label; + case: "int32Label"; + } | { case: undefined; value?: undefined }; +}; /** * @generated from message tools.generator.v1alpha.Label */ export type LabelJson = { - /** - * @generated from field: tools.generator.v1alpha.StringLabel string_label = 1; - */ - stringLabel?: StringLabelJson - - /** - * @generated from field: tools.generator.v1alpha.Uint64Label uint64_label = 2; - */ - uint64Label?: Uint64LabelJson - - /** - * @generated from field: tools.generator.v1alpha.Int64Label int64_label = 3; - */ - int64Label?: Int64LabelJson - - /** - * @generated from field: tools.generator.v1alpha.Uint32Label uint32_label = 4; - */ - uint32Label?: Uint32LabelJson - - /** - * @generated from field: tools.generator.v1alpha.Int32Label int32_label = 5; - */ - int32Label?: Int32LabelJson -} + /** + * @generated from field: tools.generator.v1alpha.StringLabel string_label = 1; + */ + stringLabel?: StringLabelJson; + + /** + * @generated from field: tools.generator.v1alpha.Uint64Label uint64_label = 2; + */ + uint64Label?: Uint64LabelJson; + + /** + * @generated from field: tools.generator.v1alpha.Int64Label int64_label = 3; + */ + int64Label?: Int64LabelJson; + + /** + * @generated from field: tools.generator.v1alpha.Uint32Label uint32_label = 4; + */ + uint32Label?: Uint32LabelJson; + + /** + * @generated from field: tools.generator.v1alpha.Int32Label int32_label = 5; + */ + int32Label?: Int32LabelJson; +}; /** * Describes the message tools.generator.v1alpha.Label. * Use `create(LabelSchema)` to create a new message. */ -export const LabelSchema: GenMessage = - /*@__PURE__*/ - messageDesc(file_tools_generator_v1alpha_cre_metadata, 5) +export const LabelSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_tools_generator_v1alpha_cre_metadata, 5); /** * @generated from message tools.generator.v1alpha.CapabilityMetadata */ -export type CapabilityMetadata = Message<'tools.generator.v1alpha.CapabilityMetadata'> & { - /** - * @generated from field: sdk.v1alpha.Mode mode = 1; - */ - mode: Mode - - /** - * @generated from field: string capability_id = 2; - */ - capabilityId: string - - /** - * @generated from field: map labels = 3; - */ - labels: { [key: string]: Label } -} +export type CapabilityMetadata = Message<"tools.generator.v1alpha.CapabilityMetadata"> & { + /** + * @generated from field: sdk.v1alpha.Mode mode = 1; + */ + mode: Mode; + + /** + * @generated from field: string capability_id = 2; + */ + capabilityId: string; + + /** + * @generated from field: map labels = 3; + */ + labels: { [key: string]: Label }; +}; /** * @generated from message tools.generator.v1alpha.CapabilityMetadata */ export type CapabilityMetadataJson = { - /** - * @generated from field: sdk.v1alpha.Mode mode = 1; - */ - mode?: ModeJson - - /** - * @generated from field: string capability_id = 2; - */ - capabilityId?: string - - /** - * @generated from field: map labels = 3; - */ - labels?: { [key: string]: LabelJson } -} + /** + * @generated from field: sdk.v1alpha.Mode mode = 1; + */ + mode?: ModeJson; + + /** + * @generated from field: string capability_id = 2; + */ + capabilityId?: string; + + /** + * @generated from field: map labels = 3; + */ + labels?: { [key: string]: LabelJson }; +}; /** * Describes the message tools.generator.v1alpha.CapabilityMetadata. * Use `create(CapabilityMetadataSchema)` to create a new message. */ -export const CapabilityMetadataSchema: GenMessage< - CapabilityMetadata, - { jsonType: CapabilityMetadataJson } -> = /*@__PURE__*/ messageDesc(file_tools_generator_v1alpha_cre_metadata, 6) +export const CapabilityMetadataSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_tools_generator_v1alpha_cre_metadata, 6); /** * @generated from message tools.generator.v1alpha.CapabilityMethodMetadata */ -export type CapabilityMethodMetadata = - Message<'tools.generator.v1alpha.CapabilityMethodMetadata'> & { - /** - * @generated from field: bool map_to_untyped_api = 1; - */ - mapToUntypedApi: boolean - } +export type CapabilityMethodMetadata = Message<"tools.generator.v1alpha.CapabilityMethodMetadata"> & { + /** + * @generated from field: bool map_to_untyped_api = 1; + */ + mapToUntypedApi: boolean; +}; /** * @generated from message tools.generator.v1alpha.CapabilityMethodMetadata */ export type CapabilityMethodMetadataJson = { - /** - * @generated from field: bool map_to_untyped_api = 1; - */ - mapToUntypedApi?: boolean -} + /** + * @generated from field: bool map_to_untyped_api = 1; + */ + mapToUntypedApi?: boolean; +}; /** * Describes the message tools.generator.v1alpha.CapabilityMethodMetadata. * Use `create(CapabilityMethodMetadataSchema)` to create a new message. */ -export const CapabilityMethodMetadataSchema: GenMessage< - CapabilityMethodMetadata, - { jsonType: CapabilityMethodMetadataJson } -> = /*@__PURE__*/ messageDesc(file_tools_generator_v1alpha_cre_metadata, 7) +export const CapabilityMethodMetadataSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_tools_generator_v1alpha_cre_metadata, 7); /** * 50000-99999 is the range for custom options. * * @generated from extension: tools.generator.v1alpha.CapabilityMetadata capability = 50000; */ -export const capability: GenExtension = - /*@__PURE__*/ - extDesc(file_tools_generator_v1alpha_cre_metadata, 0) +export const capability: GenExtension = /*@__PURE__*/ + extDesc(file_tools_generator_v1alpha_cre_metadata, 0); /** * 50000-99999 is the range for custom options. * * @generated from extension: tools.generator.v1alpha.CapabilityMethodMetadata method = 50001; */ -export const method: GenExtension = - /*@__PURE__*/ - extDesc(file_tools_generator_v1alpha_cre_metadata, 1) +export const method: GenExtension = /*@__PURE__*/ + extDesc(file_tools_generator_v1alpha_cre_metadata, 1); + diff --git a/src/generated/values/v1/values_pb.ts b/src/generated/values/v1/values_pb.ts index f72a0559..929239c0 100644 --- a/src/generated/values/v1/values_pb.ts +++ b/src/generated/values/v1/values_pb.ts @@ -2,306 +2,286 @@ // @generated from file values/v1/values.proto (package values.v1, syntax proto3) /* eslint-disable */ -import type { GenFile, GenMessage } from '@bufbuild/protobuf/codegenv2' -import { fileDesc, messageDesc } from '@bufbuild/protobuf/codegenv2' -import type { Timestamp, TimestampJson } from '@bufbuild/protobuf/wkt' -import { file_google_protobuf_timestamp } from '@bufbuild/protobuf/wkt' -import type { Message } from '@bufbuild/protobuf' +import type { GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2"; +import { fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2"; +import type { Timestamp, TimestampJson } from "@bufbuild/protobuf/wkt"; +import { file_google_protobuf_timestamp } from "@bufbuild/protobuf/wkt"; +import type { Message } from "@bufbuild/protobuf"; /** * Describes the file values/v1/values.proto. */ -export const file_values_v1_values: GenFile = - /*@__PURE__*/ - fileDesc( - 'ChZ2YWx1ZXMvdjEvdmFsdWVzLnByb3RvEgl2YWx1ZXMudjEigQMKBVZhbHVlEhYKDHN0cmluZ192YWx1ZRgBIAEoCUgAEhQKCmJvb2xfdmFsdWUYAiABKAhIABIVCgtieXRlc192YWx1ZRgDIAEoDEgAEiMKCW1hcF92YWx1ZRgEIAEoCzIOLnZhbHVlcy52MS5NYXBIABIlCgpsaXN0X3ZhbHVlGAUgASgLMg8udmFsdWVzLnYxLkxpc3RIABIrCg1kZWNpbWFsX3ZhbHVlGAYgASgLMhIudmFsdWVzLnYxLkRlY2ltYWxIABIZCgtpbnQ2NF92YWx1ZRgHIAEoA0ICMABIABIpCgxiaWdpbnRfdmFsdWUYCSABKAsyES52YWx1ZXMudjEuQmlnSW50SAASMAoKdGltZV92YWx1ZRgKIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBIABIXCg1mbG9hdDY0X3ZhbHVlGAsgASgBSAASGgoMdWludDY0X3ZhbHVlGAwgASgEQgIwAEgAQgcKBXZhbHVlSgQICBAJIisKBkJpZ0ludBIPCgdhYnNfdmFsGAEgASgMEhAKBHNpZ24YAiABKANCAjAAInIKA01hcBIqCgZmaWVsZHMYASADKAsyGi52YWx1ZXMudjEuTWFwLkZpZWxkc0VudHJ5Gj8KC0ZpZWxkc0VudHJ5EgsKA2tleRgBIAEoCRIfCgV2YWx1ZRgCIAEoCzIQLnZhbHVlcy52MS5WYWx1ZToCOAEiKAoETGlzdBIgCgZmaWVsZHMYAiADKAsyEC52YWx1ZXMudjEuVmFsdWUiQwoHRGVjaW1hbBImCgtjb2VmZmljaWVudBgBIAEoCzIRLnZhbHVlcy52MS5CaWdJbnQSEAoIZXhwb25lbnQYAiABKAVCYQoNY29tLnZhbHVlcy52MUILVmFsdWVzUHJvdG9QAaICA1ZYWKoCCVZhbHVlcy5WMcoCCVZhbHVlc1xWMeICFVZhbHVlc1xWMVxHUEJNZXRhZGF0YeoCClZhbHVlczo6VjFiBnByb3RvMw', - [file_google_protobuf_timestamp], - ) +export const file_values_v1_values: GenFile = /*@__PURE__*/ + fileDesc("ChZ2YWx1ZXMvdjEvdmFsdWVzLnByb3RvEgl2YWx1ZXMudjEigQMKBVZhbHVlEhYKDHN0cmluZ192YWx1ZRgBIAEoCUgAEhQKCmJvb2xfdmFsdWUYAiABKAhIABIVCgtieXRlc192YWx1ZRgDIAEoDEgAEiMKCW1hcF92YWx1ZRgEIAEoCzIOLnZhbHVlcy52MS5NYXBIABIlCgpsaXN0X3ZhbHVlGAUgASgLMg8udmFsdWVzLnYxLkxpc3RIABIrCg1kZWNpbWFsX3ZhbHVlGAYgASgLMhIudmFsdWVzLnYxLkRlY2ltYWxIABIZCgtpbnQ2NF92YWx1ZRgHIAEoA0ICMABIABIpCgxiaWdpbnRfdmFsdWUYCSABKAsyES52YWx1ZXMudjEuQmlnSW50SAASMAoKdGltZV92YWx1ZRgKIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBIABIXCg1mbG9hdDY0X3ZhbHVlGAsgASgBSAASGgoMdWludDY0X3ZhbHVlGAwgASgEQgIwAEgAQgcKBXZhbHVlSgQICBAJIisKBkJpZ0ludBIPCgdhYnNfdmFsGAEgASgMEhAKBHNpZ24YAiABKANCAjAAInIKA01hcBIqCgZmaWVsZHMYASADKAsyGi52YWx1ZXMudjEuTWFwLkZpZWxkc0VudHJ5Gj8KC0ZpZWxkc0VudHJ5EgsKA2tleRgBIAEoCRIfCgV2YWx1ZRgCIAEoCzIQLnZhbHVlcy52MS5WYWx1ZToCOAEiKAoETGlzdBIgCgZmaWVsZHMYAiADKAsyEC52YWx1ZXMudjEuVmFsdWUiQwoHRGVjaW1hbBImCgtjb2VmZmljaWVudBgBIAEoCzIRLnZhbHVlcy52MS5CaWdJbnQSEAoIZXhwb25lbnQYAiABKAVCYQoNY29tLnZhbHVlcy52MUILVmFsdWVzUHJvdG9QAaICA1ZYWKoCCVZhbHVlcy5WMcoCCVZhbHVlc1xWMeICFVZhbHVlc1xWMVxHUEJNZXRhZGF0YeoCClZhbHVlczo6VjFiBnByb3RvMw", [file_google_protobuf_timestamp]); /** * @generated from message values.v1.Value */ -export type Value = Message<'values.v1.Value'> & { - /** - * @generated from oneof values.v1.Value.value - */ - value: - | { - /** - * @generated from field: string string_value = 1; - */ - value: string - case: 'stringValue' - } - | { - /** - * @generated from field: bool bool_value = 2; - */ - value: boolean - case: 'boolValue' - } - | { - /** - * @generated from field: bytes bytes_value = 3; - */ - value: Uint8Array - case: 'bytesValue' - } - | { - /** - * @generated from field: values.v1.Map map_value = 4; - */ - value: Map - case: 'mapValue' - } - | { - /** - * @generated from field: values.v1.List list_value = 5; - */ - value: List - case: 'listValue' - } - | { - /** - * @generated from field: values.v1.Decimal decimal_value = 6; - */ - value: Decimal - case: 'decimalValue' - } - | { - /** - * @generated from field: int64 int64_value = 7 [jstype = JS_NORMAL]; - */ - value: bigint - case: 'int64Value' - } - | { - /** - * @generated from field: values.v1.BigInt bigint_value = 9; - */ - value: BigInt - case: 'bigintValue' - } - | { - /** - * @generated from field: google.protobuf.Timestamp time_value = 10; - */ - value: Timestamp - case: 'timeValue' - } - | { - /** - * @generated from field: double float64_value = 11; - */ - value: number - case: 'float64Value' - } - | { - /** - * @generated from field: uint64 uint64_value = 12 [jstype = JS_NORMAL]; - */ - value: bigint - case: 'uint64Value' - } - | { case: undefined; value?: undefined } -} +export type Value = Message<"values.v1.Value"> & { + /** + * @generated from oneof values.v1.Value.value + */ + value: { + /** + * @generated from field: string string_value = 1; + */ + value: string; + case: "stringValue"; + } | { + /** + * @generated from field: bool bool_value = 2; + */ + value: boolean; + case: "boolValue"; + } | { + /** + * @generated from field: bytes bytes_value = 3; + */ + value: Uint8Array; + case: "bytesValue"; + } | { + /** + * @generated from field: values.v1.Map map_value = 4; + */ + value: Map; + case: "mapValue"; + } | { + /** + * @generated from field: values.v1.List list_value = 5; + */ + value: List; + case: "listValue"; + } | { + /** + * @generated from field: values.v1.Decimal decimal_value = 6; + */ + value: Decimal; + case: "decimalValue"; + } | { + /** + * @generated from field: int64 int64_value = 7 [jstype = JS_NORMAL]; + */ + value: bigint; + case: "int64Value"; + } | { + /** + * @generated from field: values.v1.BigInt bigint_value = 9; + */ + value: BigInt; + case: "bigintValue"; + } | { + /** + * @generated from field: google.protobuf.Timestamp time_value = 10; + */ + value: Timestamp; + case: "timeValue"; + } | { + /** + * @generated from field: double float64_value = 11; + */ + value: number; + case: "float64Value"; + } | { + /** + * @generated from field: uint64 uint64_value = 12 [jstype = JS_NORMAL]; + */ + value: bigint; + case: "uint64Value"; + } | { case: undefined; value?: undefined }; +}; /** * @generated from message values.v1.Value */ export type ValueJson = { - /** - * @generated from field: string string_value = 1; - */ - stringValue?: string - - /** - * @generated from field: bool bool_value = 2; - */ - boolValue?: boolean - - /** - * @generated from field: bytes bytes_value = 3; - */ - bytesValue?: string - - /** - * @generated from field: values.v1.Map map_value = 4; - */ - mapValue?: MapJson - - /** - * @generated from field: values.v1.List list_value = 5; - */ - listValue?: ListJson - - /** - * @generated from field: values.v1.Decimal decimal_value = 6; - */ - decimalValue?: DecimalJson - - /** - * @generated from field: int64 int64_value = 7 [jstype = JS_NORMAL]; - */ - int64Value?: string - - /** - * @generated from field: values.v1.BigInt bigint_value = 9; - */ - bigintValue?: BigIntJson - - /** - * @generated from field: google.protobuf.Timestamp time_value = 10; - */ - timeValue?: TimestampJson - - /** - * @generated from field: double float64_value = 11; - */ - float64Value?: number | 'NaN' | 'Infinity' | '-Infinity' - - /** - * @generated from field: uint64 uint64_value = 12 [jstype = JS_NORMAL]; - */ - uint64Value?: string -} + /** + * @generated from field: string string_value = 1; + */ + stringValue?: string; + + /** + * @generated from field: bool bool_value = 2; + */ + boolValue?: boolean; + + /** + * @generated from field: bytes bytes_value = 3; + */ + bytesValue?: string; + + /** + * @generated from field: values.v1.Map map_value = 4; + */ + mapValue?: MapJson; + + /** + * @generated from field: values.v1.List list_value = 5; + */ + listValue?: ListJson; + + /** + * @generated from field: values.v1.Decimal decimal_value = 6; + */ + decimalValue?: DecimalJson; + + /** + * @generated from field: int64 int64_value = 7 [jstype = JS_NORMAL]; + */ + int64Value?: string; + + /** + * @generated from field: values.v1.BigInt bigint_value = 9; + */ + bigintValue?: BigIntJson; + + /** + * @generated from field: google.protobuf.Timestamp time_value = 10; + */ + timeValue?: TimestampJson; + + /** + * @generated from field: double float64_value = 11; + */ + float64Value?: number | "NaN" | "Infinity" | "-Infinity"; + + /** + * @generated from field: uint64 uint64_value = 12 [jstype = JS_NORMAL]; + */ + uint64Value?: string; +}; /** * Describes the message values.v1.Value. * Use `create(ValueSchema)` to create a new message. */ -export const ValueSchema: GenMessage = - /*@__PURE__*/ - messageDesc(file_values_v1_values, 0) +export const ValueSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_values_v1_values, 0); /** * @generated from message values.v1.BigInt */ -export type BigInt = Message<'values.v1.BigInt'> & { - /** - * @generated from field: bytes abs_val = 1; - */ - absVal: Uint8Array - - /** - * @generated from field: int64 sign = 2 [jstype = JS_NORMAL]; - */ - sign: bigint -} +export type BigInt = Message<"values.v1.BigInt"> & { + /** + * @generated from field: bytes abs_val = 1; + */ + absVal: Uint8Array; + + /** + * @generated from field: int64 sign = 2 [jstype = JS_NORMAL]; + */ + sign: bigint; +}; /** * @generated from message values.v1.BigInt */ export type BigIntJson = { - /** - * @generated from field: bytes abs_val = 1; - */ - absVal?: string + /** + * @generated from field: bytes abs_val = 1; + */ + absVal?: string; - /** - * @generated from field: int64 sign = 2 [jstype = JS_NORMAL]; - */ - sign?: string -} + /** + * @generated from field: int64 sign = 2 [jstype = JS_NORMAL]; + */ + sign?: string; +}; /** * Describes the message values.v1.BigInt. * Use `create(BigIntSchema)` to create a new message. */ -export const BigIntSchema: GenMessage = - /*@__PURE__*/ - messageDesc(file_values_v1_values, 1) +export const BigIntSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_values_v1_values, 1); /** * @generated from message values.v1.Map */ -export type Map = Message<'values.v1.Map'> & { - /** - * @generated from field: map fields = 1; - */ - fields: { [key: string]: Value } -} +export type Map = Message<"values.v1.Map"> & { + /** + * @generated from field: map fields = 1; + */ + fields: { [key: string]: Value }; +}; /** * @generated from message values.v1.Map */ export type MapJson = { - /** - * @generated from field: map fields = 1; - */ - fields?: { [key: string]: ValueJson } -} + /** + * @generated from field: map fields = 1; + */ + fields?: { [key: string]: ValueJson }; +}; /** * Describes the message values.v1.Map. * Use `create(MapSchema)` to create a new message. */ -export const MapSchema: GenMessage = - /*@__PURE__*/ - messageDesc(file_values_v1_values, 2) +export const MapSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_values_v1_values, 2); /** * @generated from message values.v1.List */ -export type List = Message<'values.v1.List'> & { - /** - * @generated from field: repeated values.v1.Value fields = 2; - */ - fields: Value[] -} +export type List = Message<"values.v1.List"> & { + /** + * @generated from field: repeated values.v1.Value fields = 2; + */ + fields: Value[]; +}; /** * @generated from message values.v1.List */ export type ListJson = { - /** - * @generated from field: repeated values.v1.Value fields = 2; - */ - fields?: ValueJson[] -} + /** + * @generated from field: repeated values.v1.Value fields = 2; + */ + fields?: ValueJson[]; +}; /** * Describes the message values.v1.List. * Use `create(ListSchema)` to create a new message. */ -export const ListSchema: GenMessage = - /*@__PURE__*/ - messageDesc(file_values_v1_values, 3) +export const ListSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_values_v1_values, 3); /** * @generated from message values.v1.Decimal */ -export type Decimal = Message<'values.v1.Decimal'> & { - /** - * @generated from field: values.v1.BigInt coefficient = 1; - */ - coefficient?: BigInt - - /** - * @generated from field: int32 exponent = 2; - */ - exponent: number -} +export type Decimal = Message<"values.v1.Decimal"> & { + /** + * @generated from field: values.v1.BigInt coefficient = 1; + */ + coefficient?: BigInt; + + /** + * @generated from field: int32 exponent = 2; + */ + exponent: number; +}; /** * @generated from message values.v1.Decimal */ export type DecimalJson = { - /** - * @generated from field: values.v1.BigInt coefficient = 1; - */ - coefficient?: BigIntJson + /** + * @generated from field: values.v1.BigInt coefficient = 1; + */ + coefficient?: BigIntJson; - /** - * @generated from field: int32 exponent = 2; - */ - exponent?: number -} + /** + * @generated from field: int32 exponent = 2; + */ + exponent?: number; +}; /** * Describes the message values.v1.Decimal. * Use `create(DecimalSchema)` to create a new message. */ -export const DecimalSchema: GenMessage = - /*@__PURE__*/ - messageDesc(file_values_v1_values, 4) +export const DecimalSchema: GenMessage = /*@__PURE__*/ + messageDesc(file_values_v1_values, 4); + diff --git a/src/generator/generate-action.ts b/src/generator/generate-action.ts index 9d9dbce8..e2063703 100644 --- a/src/generator/generate-action.ts +++ b/src/generator/generate-action.ts @@ -25,10 +25,12 @@ export function generateActionMethod( const capabilityId = ${capabilityClassName}.CAPABILITY_ID;` return ` - async ${methodName}(input: ${method.input.name}Json): Promise<${method.output.name}> { + async ${methodName}(input: ${method.input.name} | ${method.input.name}Json): Promise<${method.output.name}> { + // biome-ignore lint/suspicious/noExplicitAny: Needed for runtime type checking of protocol buffer messages + const value = (input as any).$typeName ? input as ${method.input.name} : fromJson(${method.input.name}Schema, input as ${method.input.name}Json) const payload = { typeUrl: getTypeUrl(${method.input.name}Schema), - value: toBinary(${method.input.name}Schema, fromJson(${method.input.name}Schema, input)), + value: toBinary(${method.input.name}Schema, value), };${capabilityIdLogic} return callCapability({ diff --git a/src/generator/generate-sdk.ts b/src/generator/generate-sdk.ts index 9e224c29..a2be201d 100644 --- a/src/generator/generate-sdk.ts +++ b/src/generator/generate-sdk.ts @@ -61,6 +61,7 @@ export function generateSdk(file: GenFile, outputDir: string) { const inputPathTypes = typeImports.get(inputPath)! inputPathTypes.add(`${method.input.name}Schema`) inputPathTypes.add(`type ${method.input.name}Json`) + inputPathTypes.add(`type ${method.input.name}`) // Handle output type const outputFile = method.output.file @@ -83,7 +84,11 @@ export function generateSdk(file: GenFile, outputDir: string) { // Build import statements const imports = new Set() - imports.add('import { fromBinary, toBinary, fromJson, create } from "@bufbuild/protobuf";') + if (hasTriggers) { + imports.add('import { fromBinary, toBinary, fromJson, create } from "@bufbuild/protobuf";') + } else { + imports.add('import { fromBinary, toBinary, fromJson } from "@bufbuild/protobuf";') + } imports.add(`import { Mode, type CapabilityResponse, diff --git a/src/generator/generate-trigger.ts b/src/generator/generate-trigger.ts index 2f090015..40a6b3f9 100644 --- a/src/generator/generate-trigger.ts +++ b/src/generator/generate-trigger.ts @@ -39,12 +39,16 @@ export function generateTriggerClass(method: DescMethod, className: string): str * Trigger implementation for ${method.name} */ class ${triggerClassName} implements Trigger<${method.output.name}, ${method.output.name}> { + public readonly config: ${method.input.name} constructor( public readonly mode: Mode, - public readonly config: ${method.input.name}Json, + config: ${method.input.name} | ${method.input.name}Json, private readonly _capabilityId: string, private readonly _method: string - ) {} + ) { + // biome-ignore lint/suspicious/noExplicitAny: Needed for runtime type checking of protocol buffer messages + this.config = (config as any).$typeName ? config as ${method.input.name} : fromJson(${method.input.name}Schema, config as ${method.input.name}Json) + } capabilityId(): string { return this._capabilityId; @@ -59,10 +63,9 @@ class ${triggerClassName} implements Trigger<${method.output.name}, ${method.out } configAsAny(): Any { - const configMessage = fromJson(${method.input.name}Schema, this.config); return create(AnySchema, { typeUrl: getTypeUrl(${method.input.name}Schema), - value: toBinary(${method.input.name}Schema, configMessage), + value: toBinary(${method.input.name}Schema, this.config), }); } diff --git a/src/sdk/cre/index.ts b/src/sdk/cre/index.ts index c87137bb..2e617fc1 100644 --- a/src/sdk/cre/index.ts +++ b/src/sdk/cre/index.ts @@ -8,7 +8,6 @@ import { runInNodeMode } from '@cre/sdk/runtime/run-in-node-mode' import { CronCapability } from '@cre/generated-sdk/capabilities/scheduler/cron/v1/cron_sdk_gen' import { ClientCapability as EVMClient } from '@cre/generated-sdk/capabilities/blockchain/evm/v1alpha/client_sdk_gen' import { ClientCapability as HTTPClient } from '@cre/generated-sdk/capabilities/networking/http/v1alpha/client_sdk_gen' -import { getAggregatedValue } from '@cre/sdk/utils/values/consensus' import { creFetch } from '@cre/sdk/utils/capabilities/http/fetch' import { sendResponseValue } from '@cre/sdk/utils/send-response-value' import { withErrorBoundary } from '@cre/sdk/utils/error-boundary' @@ -30,9 +29,6 @@ export const cre = { newRunner: Runner.newRunner, runInNodeMode, utils: { - consensus: { - getAggregatedValue, - }, fetch: creFetch, }, sendResponseValue, diff --git a/src/sdk/engine/execute.ts b/src/sdk/engine/execute.ts index a0c36d90..cc4fb0fd 100644 --- a/src/sdk/engine/execute.ts +++ b/src/sdk/engine/execute.ts @@ -1,4 +1,4 @@ -import type { ExecuteRequest, CapabilityResponse } from '@cre/generated/sdk/v1alpha/sdk_pb' +import { type ExecuteRequest, type CapabilityResponse, Mode } from '@cre/generated/sdk/v1alpha/sdk_pb' import type { Workflow } from '@cre/sdk/workflow' import type { Runtime } from '@cre/sdk/runtime/runtime' import { handleSubscribePhase } from './handleSubscribePhase' @@ -15,6 +15,7 @@ export const handleExecuteRequest = async ( } if (req.request.case === 'trigger') { + runtime.switchModes(Mode.DON) return handleExecutionPhase(req, workflow, config, runtime) } } diff --git a/src/sdk/runtime/errors.ts b/src/sdk/runtime/errors.ts index d854b8cd..039c6041 100644 --- a/src/sdk/runtime/errors.ts +++ b/src/sdk/runtime/errors.ts @@ -7,7 +7,7 @@ export class DonModeError extends Error { public mode?: Mode constructor( - message = 'cannot use DON Runtime inside Node mode', + message = 'cannot use Runtime inside RunInNodeMode', options?: { capabilityId?: string method?: string @@ -30,9 +30,8 @@ export class NodeModeError extends Error { public capabilityId?: string public method?: string public mode?: Mode - constructor( - message = 'cannot use Node Runtime inside DON mode', + message = 'cannot use NodeRuntime outside RunInNodeMode', options?: { capabilityId?: string method?: string diff --git a/src/sdk/runtime/run-in-node-mode.test.ts b/src/sdk/runtime/run-in-node-mode.test.ts index 0cafa4ee..46fca81a 100644 --- a/src/sdk/runtime/run-in-node-mode.test.ts +++ b/src/sdk/runtime/run-in-node-mode.test.ts @@ -1,8 +1,10 @@ import { describe, test, expect, mock } from 'bun:test' import { create } from '@bufbuild/protobuf' import { + AggregationType, + ConsensusDescriptorSchema, Mode, - SimpleConsensusInputsSchema, + type SimpleConsensusInputs, type SimpleConsensusInputsJson, } from '@cre/generated/sdk/v1alpha/sdk_pb' import { ConsensusCapability } from '@cre/generated-sdk/capabilities/internal/consensus/v1alpha/consensus_sdk_gen' @@ -10,77 +12,140 @@ import { ConsensusCapability } from '@cre/generated-sdk/capabilities/internal/co import { calls } from '@cre/sdk/testhelpers/mock-host-bindings' import { type NodeRuntime } from '@cre/sdk/runtime/runtime' import { runInNodeMode } from '@cre/sdk/runtime/run-in-node-mode' +import { Value, consensusIdenticalAggregation, consensusMedianAggregation } from '../utils' +import type { Value as ProtoValue } from '@cre/generated/values/v1/values_pb' +import { BasicActionCapability } from '@cre/generated-sdk/capabilities/internal/basicaction/v1/basicaction_sdk_gen' + +function expectObservation(i: SimpleConsensusInputs): Value { + expect(i.observation.case).toEqual('value') + return Value.wrap(i.observation.value as ProtoValue) +} + +function expectError(i: SimpleConsensusInputs): string { + expect(i.observation.case).toEqual('error') + return i.observation.value as string +} describe('runInNodeMode', () => { - test('accepts message input and returns Value', async () => { + test('successful run', async () => { + // Clear the calls array for this test + calls.length = 0 + + const anyObservation = 120 + const anyResult = 123 + // spy on consensus.simple const origSimple = ConsensusCapability.prototype.simple - ConsensusCapability.prototype.simple = mock(async (_: SimpleConsensusInputsJson) => { - return {} as any // a Value; not asserting shape here - }) - - const res = await runInNodeMode(() => create(SimpleConsensusInputsSchema)) - expect(res).toBeDefined() + ConsensusCapability.prototype.simple = mock(async (inputs: SimpleConsensusInputs | SimpleConsensusInputsJson) => { + calls.push('CONSENSUS_SIMPLE') - ConsensusCapability.prototype.simple = origSimple - }) + // biome-ignore lint/suspicious/noExplicitAny: Needed for runtime type checking of protocol buffer messages + expect((inputs as any).$typeName).toBeDefined() + const castedInputs = inputs as SimpleConsensusInputs + expect(castedInputs.default).toBeUndefined() + const actualObservation = expectObservation(castedInputs) + expect(Value.from(anyObservation)).toEqual(actualObservation) - test('accepts json input and returns Value', async () => { - const origSimple = ConsensusCapability.prototype.simple - ConsensusCapability.prototype.simple = mock(async (_: SimpleConsensusInputsJson) => { - return {} as any + const expectedDescriptor = create(ConsensusDescriptorSchema, { + descriptor: { + case: 'aggregation', + value: AggregationType.MEDIAN + } + }) + expect(castedInputs.descriptors).toEqual(expectedDescriptor) + + return Value.from(anyResult).proto() }) - const res = await runInNodeMode(() => ({}) as SimpleConsensusInputsJson) - expect(res).toBeDefined() + const res = await runInNodeMode((_: NodeRuntime) => anyObservation, consensusMedianAggregation())() + expect(res).toEqual(anyResult) + expect(calls).toEqual(['NODE', 'DON', 'CONSENSUS_SIMPLE']) + + // Restore the original method after the test ConsensusCapability.prototype.simple = origSimple }) - test('restores DON mode before calling consensus', async () => { + test('local failure with consensus', async () => { // Clear the calls array for this test calls.length = 0 + const anyError = Error("nope") + const anyResult = 123 + + + // spy on consensus.simple const origSimple = ConsensusCapability.prototype.simple - ConsensusCapability.prototype.simple = mock(async (_: SimpleConsensusInputsJson) => { - // At this point we expect mode to have been restored to DON + ConsensusCapability.prototype.simple = mock(async (inputs: SimpleConsensusInputs | SimpleConsensusInputsJson) => { calls.push('CONSENSUS_SIMPLE') - return {} as any + + // biome-ignore lint/suspicious/noExplicitAny: Needed for runtime type checking of protocol buffer messages + expect((inputs as any).$typeName).toBeDefined() + const castedInputs = inputs as SimpleConsensusInputs + expect(castedInputs.default).toBeUndefined() + const actualError = expectError(castedInputs) + expect(anyError.message).toEqual(actualError) + + const expectedDescriptor = create(ConsensusDescriptorSchema, { + descriptor: { + case: 'aggregation', + value: AggregationType.MEDIAN + } + }) + expect(castedInputs.descriptors).toEqual(expectedDescriptor) + + return Value.from(anyResult).proto() }) - await runInNodeMode(() => create(SimpleConsensusInputsSchema)) - expect(calls).toEqual(['NODE', 'DON', 'CONSENSUS_SIMPLE']) + const errFn: (_: NodeRuntime) => number = (_: NodeRuntime) => { throw anyError } + const res = await runInNodeMode(errFn, consensusMedianAggregation())() + expect(res).toEqual(anyResult) - // restore + expect(calls).toEqual(['NODE', 'DON', 'CONSENSUS_SIMPLE']) + + // Restore the original method after the test ConsensusCapability.prototype.simple = origSimple }) - test('guards DON calls while in node mode', async () => { + test('guards DON calls while in node mode, also local and consensus failure', async () => { // Simulate switchModes by touching global function used by host const origSwitch = (globalThis as any).switchModes ;(globalThis as any).switchModes = (_m: Mode) => {} - // Mock consensus.simple but also try to make a DON call in node mode + + // spy on consensus.simple const origSimple = ConsensusCapability.prototype.simple - ConsensusCapability.prototype.simple = mock(async (_: SimpleConsensusInputsJson) => { - return {} as any - }) + ConsensusCapability.prototype.simple = mock(async (inputs: SimpleConsensusInputs | SimpleConsensusInputsJson) => { + calls.push('CONSENSUS_SIMPLE') + + // biome-ignore lint/suspicious/noExplicitAny: Needed for runtime type checking of protocol buffer messages + expect((inputs as any).$typeName).toBeDefined() + const castedInputs = inputs as SimpleConsensusInputs + expect(castedInputs.default).toBeUndefined() + const actualError = expectError(castedInputs) + expect(actualError).toContain('cannot use Runtime inside RunInNodeMode.') - let threw = false - try { - await runInNodeMode(async (nodeRuntime: NodeRuntime) => { - // During builder, we are in NODE mode, performing a DON call should throw - expect(() => nodeRuntime.logger.log('')) - return create(SimpleConsensusInputsSchema) + const expectedDescriptor = create(ConsensusDescriptorSchema, { + descriptor: { + case: 'aggregation', + value: AggregationType.IDENTICAL + } }) - } catch (_e) { - threw = true - } + expect(castedInputs.descriptors).toEqual(expectedDescriptor) + + throw Error(actualError) + }) + + expect(async () => { + await runInNodeMode(async (_: NodeRuntime) => { + const ba = new BasicActionCapability() + const result = await ba.performAction({ inputThing: true }) + return result.adaptedThing + }, consensusIdenticalAggregation())() + }).toThrow(RegExp(".*cannot use Runtime inside RunInNodeMode.*")) - // The guard may not throw on host.log; rely on callCapability guard instead by attempting a DON call - // restore + // Restore the original method and global after the test ConsensusCapability.prototype.simple = origSimple ;(globalThis as any).switchModes = origSwitch - expect(threw).toBeFalse() }) }) diff --git a/src/sdk/runtime/run-in-node-mode.ts b/src/sdk/runtime/run-in-node-mode.ts index fbf74cd8..dc1f4a15 100644 --- a/src/sdk/runtime/run-in-node-mode.ts +++ b/src/sdk/runtime/run-in-node-mode.ts @@ -1,68 +1,54 @@ -import { toJson } from '@bufbuild/protobuf' +import { create, toJson } from '@bufbuild/protobuf' import { Mode, SimpleConsensusInputsSchema, - type SimpleConsensusInputs, - type SimpleConsensusInputsJson, } from '@cre/generated/sdk/v1alpha/sdk_pb' import { ConsensusCapability } from '@cre/generated-sdk/capabilities/internal/consensus/v1alpha/consensus_sdk_gen' -import type { Value } from '@cre/generated/values/v1/values_pb' import { runtime, type NodeRuntime } from '@cre/sdk/runtime/runtime' - -type Inputs = SimpleConsensusInputs | SimpleConsensusInputsJson - -const isMessageInputs = (i: unknown): i is SimpleConsensusInputs => { - const anyI = i as any - return ( - anyI && - typeof anyI === 'object' && - 'observation' in anyI && - anyI.observation && - typeof anyI.observation === 'object' && - 'case' in anyI.observation - ) -} - -const isJsonInputs = (i: unknown): i is SimpleConsensusInputsJson => { - const anyI = i as any - if (!anyI || typeof anyI !== 'object') return false - if (!('observation' in anyI)) return true - const obs = anyI.observation - if (obs == null) return true - return typeof obs === 'object' && ('value' in obs || 'error' in obs) -} - -const toInputsJson = (input: Inputs): SimpleConsensusInputsJson => { - if (isMessageInputs(input)) { - return toJson(SimpleConsensusInputsSchema, input) - } - if (isJsonInputs(input)) { - return input - } - throw new Error( - 'runInNodeMode: invalid input shape; expected SimpleConsensusInputs message or SimpleConsensusInputsJson', - ) -} +import type { UnwrapOptions, ConsensusAggregation, CreSerializable, PrimitiveTypes } from '../utils' +import { Value } from '../utils' /** * Runs the provided builder inside Node mode and returns the consensus result Value. * Ensures mode is switched back to DON even if errors occur. */ -export const runInNodeMode = async ( - buildConsensusInputs: (nodeRuntime: NodeRuntime) => Promise | Inputs, -): Promise => { - const nodeRuntime: NodeRuntime = runtime.switchModes(Mode.NODE) - let consensusInputJson: SimpleConsensusInputsJson - try { - const consensusInput = await buildConsensusInputs(nodeRuntime) - consensusInputJson = toInputsJson(consensusInput) - } finally { - // Always restore DON mode before invoking consensus - runtime.switchModes(Mode.DON) - } +/** + * Runs the provided builder inside Node mode and returns the consensus result Value. + * For primitive types (number, bigint, Date, boolean, string), it will use unwrap() + * For complex types, it will use unwrapToType() with the provided options + */ +export function runInNodeMode( + fn: (nodeRuntime: NodeRuntime, ...args: TArgs) => Promise | TOutput, + consesusAggretation: ConsensusAggregation, + unwrapOptions?: TOutput extends PrimitiveTypes ? never : UnwrapOptions +): (...args: TArgs) => Promise { + return async (...args: TArgs) => { + const nodeRuntime: NodeRuntime = runtime.switchModes(Mode.NODE) + + const consensusInput = create(SimpleConsensusInputsSchema, { descriptors: consesusAggretation.descriptor }) + if (consesusAggretation.defaultValue) { + // This cast is safe, since ConsensusAggregation can only have true its second argument if T extends CreSerializable + consensusInput.default = Value.from(consesusAggretation.defaultValue as CreSerializable).proto() + } - const consensus = new ConsensusCapability() - // simple() expects JSON per generated client conventions - const result = await consensus.simple(consensusInputJson) - return result + try { + const observation = await fn(nodeRuntime, ...args) + // This cast is safe, since ConsensusAggregation can only have true its second argument if T extends CreSerializable + consensusInput.observation = { case: 'value', value: Value.from(observation as CreSerializable).proto() } + + } catch (e: any) { + consensusInput.observation = { case: 'error', value: e.message || String(e) } + } finally { + // Always restore DON mode before invoking consensus + runtime.switchModes(Mode.DON) + } + + const consensus = new ConsensusCapability() + const result = await consensus.simple(consensusInput) + const wrappedValue = Value.wrap(result) + + return unwrapOptions + ? wrappedValue.unwrapToType(unwrapOptions) + : wrappedValue.unwrap() as TOutput + } } diff --git a/src/sdk/runtime/runtime.ts b/src/sdk/runtime/runtime.ts index e9919518..10a21cb4 100644 --- a/src/sdk/runtime/runtime.ts +++ b/src/sdk/runtime/runtime.ts @@ -14,7 +14,7 @@ import { getTimeAsDate } from '@cre/sdk/utils/time/get-time' * If not the prepared error will be thrown. */ export const runtimeGuards = (() => { - let currentMode: Mode = Mode.DON + let currentMode: Mode = Mode.UNSPECIFIED let donModeGuardError: DonModeError | null = null let nodeModeGuardError: NodeModeError | null = new NodeModeError() @@ -76,7 +76,6 @@ export type NodeRuntime = BaseRuntime & { // Shared implementation for mode switching function switchModes(mode: Mode.NODE): NodeRuntime function switchModes(mode: Mode.DON): Runtime -function switchModes(mode: Mode): Runtime | NodeRuntime function switchModes(mode: Mode): Runtime | NodeRuntime { // Changing to the same mode should be a noop, we make sure to actually call switching logic if it's different mode if (mode !== runtimeGuards.getMode()) { diff --git a/src/sdk/utils/hex-utils.ts b/src/sdk/utils/hex-utils.ts index 342c77cf..4c0ff201 100644 --- a/src/sdk/utils/hex-utils.ts +++ b/src/sdk/utils/hex-utils.ts @@ -1,7 +1,7 @@ /** * Hex conversion utilities for blockchain data * - * Note: BigInt utilities are available in @cre/sdk/utils/values/value + * Note: BigInt utilities are available in @cre/sdk/utils * Use val.bigint() or bigIntToProtoBigInt() for BigInt conversions */ import { type Hex } from 'viem' diff --git a/src/sdk/utils/index.ts b/src/sdk/utils/index.ts index 564aec12..5607ba7b 100644 --- a/src/sdk/utils/index.ts +++ b/src/sdk/utils/index.ts @@ -1,5 +1,6 @@ export * from './error-boundary' export * from './hex-utils' export * from './send-response-value' -export * from './values/consensus-hooks' +export * from './values/consensus_aggregators' +export * from './values/serializer_types' export * from './values/value' diff --git a/src/sdk/utils/send-response-value.ts b/src/sdk/utils/send-response-value.ts index ebf958dc..d453de4f 100644 --- a/src/sdk/utils/send-response-value.ts +++ b/src/sdk/utils/send-response-value.ts @@ -1,4 +1,4 @@ -import { Value } from '@cre/sdk/utils/values/value' +import { Value } from '@cre/sdk/utils' import { type ExecutionResult, ExecutionResultSchema } from '@cre/generated/sdk/v1alpha/sdk_pb' import { create, toBinary } from '@bufbuild/protobuf' @@ -7,7 +7,7 @@ export const sendResponseValue = (value: Value): void => { const execResult: ExecutionResult = create(ExecutionResultSchema, { result: { case: 'value', - value: value.proto, + value: value.proto(), }, }) diff --git a/src/sdk/utils/values/consensus-hooks.ts b/src/sdk/utils/values/consensus-hooks.ts deleted file mode 100644 index 780a8e1f..00000000 --- a/src/sdk/utils/values/consensus-hooks.ts +++ /dev/null @@ -1,93 +0,0 @@ -import { cre } from '@cre/sdk/cre' -import { Value } from '@cre/sdk/utils/values/value' -import { type ConsenusAggregator, getAggregatedValue } from '@cre/sdk/utils/values/consensus' -import { type SupportedValueTypes } from '@cre/sdk/utils/values/value' -import { type NodeRuntime } from '@cre/sdk/runtime/runtime' - -// ===== TYPE HELPERS FOR BETTER TYPE SAFETY ===== - -// Map value types to their expected input types -type ValueTypeInput = { - string: string - float64: number - int64: number | bigint | string - bigint: bigint - bool: boolean - bytes: Uint8Array | ArrayBuffer - time: Date | number | string - list: Array - mapValue: Record - decimal: string - from: unknown -} - -// ===== CORE CONSENSUS WRAPPER ===== - -/** - * Core consensus wrapper with strong typing - * Ensures the function return type matches the value type input requirements - */ -export const useConsensus = < - TValueType extends keyof ValueTypeInput & SupportedValueTypes, - TArgs extends readonly any[], - TReturn extends ValueTypeInput[TValueType], ->( - fn: (...args: TArgs) => Promise, - valueType: TValueType, - aggregationType: ConsenusAggregator, -) => { - return async (...args: TArgs): Promise => { - return cre.runInNodeMode(async (_nodeRuntime: NodeRuntime) => { - const result = await fn(...args) - return getAggregatedValue(new Value(result), aggregationType) - }) - } -} - -// ===== TYPED CONVENIENCE WRAPPERS ===== - -/** - * Median consensus for numerical data - * Automatically infers correct return type based on value type - */ -export const useMedianConsensus = ( - fn: (...args: TArgs) => Promise, - valueType: 'float64' | 'int64' = 'float64', -) => useConsensus(fn, valueType, 'median') - -/** - * Identical consensus - all nodes must agree exactly - * Supports any value type with proper typing - */ -export const useIdenticalConsensus = < - TValueType extends keyof ValueTypeInput & SupportedValueTypes, - TArgs extends readonly any[], - TReturn extends ValueTypeInput[TValueType], ->( - fn: (...args: TArgs) => Promise, - valueType: TValueType, -) => useConsensus(fn, valueType, 'identical') - -/** - * Common prefix consensus for strings and bytes - */ -export const useCommonPrefixConsensus = < - TValueType extends ('string' | 'bytes') & keyof ValueTypeInput, - TArgs extends readonly any[], - TReturn extends ValueTypeInput[TValueType], ->( - fn: (...args: TArgs) => Promise, - valueType: TValueType, -) => useConsensus(fn, valueType, 'commonPrefix') - -/** - * Common suffix consensus for strings and bytes - */ -export const useCommonSuffixConsensus = < - TValueType extends ('string' | 'bytes') & keyof ValueTypeInput, - TArgs extends readonly any[], - TReturn extends ValueTypeInput[TValueType], ->( - fn: (...args: TArgs) => Promise, - valueType: TValueType, -) => useConsensus(fn, valueType, 'commonSuffix') diff --git a/src/sdk/utils/values/consensus.test.ts b/src/sdk/utils/values/consensus.test.ts deleted file mode 100644 index e5697c6d..00000000 --- a/src/sdk/utils/values/consensus.test.ts +++ /dev/null @@ -1,129 +0,0 @@ -import { describe, expect, test } from 'bun:test' -import { AggregationType } from '@cre/generated/sdk/v1alpha/sdk_pb' -import type { ConsensusDescriptor } from '@cre/generated/sdk/v1alpha/sdk_pb' -import { - consensusDescriptorMedian, - consensusDescriptorIdentical, - consensusDescriptorCommonPrefix, - consensusDescriptorCommonSuffix, - createConsensusDescriptorAggregation, - consensusFields, - consensusFieldsFrom, - observationValue, - observationError, - getAggregatedValue, -} from './consensus' -import { Value } from './value' - -const getAggregation = (d: ConsensusDescriptor): AggregationType | undefined => - d.descriptor.case === 'aggregation' ? d.descriptor.value : undefined - -const isFieldsMap = (d: ConsensusDescriptor): boolean => d.descriptor.case === 'fieldsMap' - -describe('consensus helpers', () => { - test('aggregation helpers', () => { - expect(getAggregation(consensusDescriptorMedian)).toBe(AggregationType.MEDIAN) - expect(getAggregation(consensusDescriptorIdentical)).toBe(AggregationType.IDENTICAL) - expect(getAggregation(consensusDescriptorCommonPrefix)).toBe(AggregationType.COMMON_PREFIX) - expect(getAggregation(consensusDescriptorCommonSuffix)).toBe(AggregationType.COMMON_SUFFIX) - }) - - test('createConsensusDescriptorAggregation', () => { - const d = createConsensusDescriptorAggregation(AggregationType.IDENTICAL) - expect(getAggregation(d)).toBe(AggregationType.IDENTICAL) - }) - - test('consensusFields builds fieldsMap', () => { - const fields: Record = { - Price: createConsensusDescriptorAggregation(AggregationType.MEDIAN), - } - const d = consensusFields(fields) - expect(isFieldsMap(d)).toBe(true) - const map = d.descriptor.case === 'fieldsMap' ? d.descriptor.value.fields : {} - expect(Object.keys(map)).toEqual(['Price']) - expect(getAggregation(map.Price!)).toBe(AggregationType.MEDIAN) - }) - - test('consensusFieldsFrom normalizes enums and descriptors', () => { - const prebuilt = createConsensusDescriptorAggregation(AggregationType.IDENTICAL) - const d = consensusFieldsFrom({ - a: AggregationType.MEDIAN, - b: prebuilt, - }) - expect(isFieldsMap(d)).toBe(true) - const map = d.descriptor.case === 'fieldsMap' ? d.descriptor.value.fields : {} - expect(getAggregation(map.a!)).toBe(AggregationType.MEDIAN) - expect(getAggregation(map.b!)).toBe(AggregationType.IDENTICAL) - }) - - test('consensusFieldsFrom nested fieldsMap', () => { - const nested = consensusFieldsFrom({ - In: consensusFieldsFrom({ Score: AggregationType.MEDIAN }), - }) - expect(isFieldsMap(nested)).toBe(true) - const outer = nested.descriptor.case === 'fieldsMap' ? nested.descriptor.value.fields : {} - const inner = outer.In! - expect(isFieldsMap(inner)).toBe(true) - const innerFields = inner.descriptor.case === 'fieldsMap' ? inner.descriptor.value.fields : {} - expect(getAggregation(innerFields.Score!)).toBe(AggregationType.MEDIAN) - }) - - test('consensusFieldsFrom with mixed data types and aggregation strategies', () => { - const d = consensusFieldsFrom({ - Foo: AggregationType.MEDIAN, - Bar: AggregationType.IDENTICAL, - Baz: AggregationType.COMMON_PREFIX, - }) - expect(isFieldsMap(d)).toBe(true) - const map = d.descriptor.case === 'fieldsMap' ? d.descriptor.value.fields : {} - expect(Object.keys(map)).toEqual(['Foo', 'Bar', 'Baz']) - expect(getAggregation(map.Foo!)).toBe(AggregationType.MEDIAN) - expect(getAggregation(map.Bar!)).toBe(AggregationType.IDENTICAL) - expect(getAggregation(map.Baz!)).toBe(AggregationType.COMMON_PREFIX) - }) - - test('consensusFieldsFrom with numeric enum values', () => { - const d = consensusFieldsFrom({ - Foo: AggregationType.MEDIAN, - Bar: AggregationType.IDENTICAL, - }) - expect(isFieldsMap(d)).toBe(true) - const map = d.descriptor.case === 'fieldsMap' ? d.descriptor.value.fields : {} - expect(getAggregation(map.Foo!)).toBe(AggregationType.MEDIAN) - expect(getAggregation(map.Bar!)).toBe(AggregationType.IDENTICAL) - }) - - test('consensusFieldsFrom with empty object', () => { - const d = consensusFieldsFrom({}) - expect(isFieldsMap(d)).toBe(true) - const map = d.descriptor.case === 'fieldsMap' ? d.descriptor.value.fields : {} - expect(Object.keys(map)).toEqual([]) - }) - - test('observation helpers', () => { - const ov = observationValue(new Value('ok')) - expect(ov.case).toBe('value') - expect(ov.value.value.case).toBe('stringValue') - - const oe = observationError('boom') - expect(oe.case).toBe('error') - expect(oe.value).toBe('boom') - }) - - test('getAggregatedValue with different consensus strategies', () => { - const priceInput = getAggregatedValue(new Value(1850.5), 'median') - expect(priceInput.observation.case).toBe('value') - expect(priceInput.descriptors).toBe(consensusDescriptorMedian) - - const statusInput = getAggregatedValue(new Value(true), 'identical') - expect(statusInput.observation.case).toBe('value') - expect(statusInput.descriptors).toBe(consensusDescriptorIdentical) - - const urlInput = getAggregatedValue( - new Value('https://api.example.com/v1/data'), - 'commonPrefix', - ) - expect(urlInput.observation.case).toBe('value') - expect(urlInput.descriptors).toBe(consensusDescriptorCommonPrefix) - }) -}) diff --git a/src/sdk/utils/values/consensus.ts b/src/sdk/utils/values/consensus.ts deleted file mode 100644 index 049a6750..00000000 --- a/src/sdk/utils/values/consensus.ts +++ /dev/null @@ -1,196 +0,0 @@ -import { create } from '@bufbuild/protobuf' -import type { ConsensusDescriptor, SimpleConsensusInputs } from '@cre/generated/sdk/v1alpha/sdk_pb' -import type { Value } from './value' -import { - AggregationType, - ConsensusDescriptorSchema, - FieldsMapSchema, - SimpleConsensusInputsSchema, -} from '@cre/generated/sdk/v1alpha/sdk_pb' - -export { AggregationType } from '@cre/generated/sdk/v1alpha/sdk_pb' - -const consensusAggregators = ['median', 'identical', 'commonPrefix', 'commonSuffix'] as const -export type ConsenusAggregator = (typeof consensusAggregators)[number] - -export const consensusDescriptorMedian = create(ConsensusDescriptorSchema, { - descriptor: { - case: 'aggregation', - value: AggregationType.MEDIAN, - }, -}) - -export const consensusDescriptorIdentical = create(ConsensusDescriptorSchema, { - descriptor: { - case: 'aggregation', - value: AggregationType.IDENTICAL, - }, -}) - -export const consensusDescriptorCommonPrefix = create(ConsensusDescriptorSchema, { - descriptor: { - case: 'aggregation', - value: AggregationType.COMMON_PREFIX, - }, -}) - -export const consensusDescriptorCommonSuffix = create(ConsensusDescriptorSchema, { - descriptor: { - case: 'aggregation', - value: AggregationType.COMMON_SUFFIX, - }, -}) - -const consensusAggregatorsMap = { - median: consensusDescriptorMedian, - identical: consensusDescriptorIdentical, - commonPrefix: consensusDescriptorCommonPrefix, - commonSuffix: consensusDescriptorCommonSuffix, -} as const - -export const createConsensusDescriptorAggregation = (aggregation: AggregationType) => - create(ConsensusDescriptorSchema, { - descriptor: { - case: 'aggregation', - value: aggregation, - }, - }) - -export const consensusFields = (fields: Record) => - create(ConsensusDescriptorSchema, { - descriptor: { - case: 'fieldsMap', - value: create(FieldsMapSchema, { fields }), - }, - }) - -/** - * Creates a consensus fields descriptor from a mixed specification of aggregation types and descriptors. - * - * This function normalizes a mixed object where values can be either: - * - `AggregationType` enum values (numbers) - automatically converted to consensus descriptors - * - `ConsensusDescriptor` objects - used as-is - * - * @param spec - Object mapping field names to either AggregationType enum values or ConsensusDescriptor objects - * @returns A ConsensusDescriptor with a fieldsMap containing the normalized field descriptors - * - * @example - * ```typescript - * // Using AggregationType enum values (most common usage) - * const descriptors = consensusFieldsFrom({ - * "Price": AggregationType.MEDIAN, - * "Volume": AggregationType.IDENTICAL - * }); - * - * @example - * ```typescript - * // Mixed usage with pre-built descriptors - * const prebuilt = createConsensusDescriptorAggregation(AggregationType.COMMON_PREFIX); - * const descriptors = consensusFieldsFrom({ - * "Foo": AggregationType.MEDIAN, - * "Bar": AggregationType.IDENTICAL, - * "Baz": prebuilt // Reuse pre-built descriptor - * }); - * - * @example - * ```typescript - * // Nested field maps for complex consensus structures - * const nested = consensusFieldsFrom({ - * "OuterField": consensusFieldsFrom({ - * "InnerField": AggregationType.MEDIAN - * }) - * }); - * - * @example - * ```typescript - * // Real-world usage in workflow consensus inputs - * const consensusInput = create(SimpleConsensusInputsSchema, { - * observation: observationValue(val.mapValue({ - * Foo: val.int64(response.fooValue), - * Bar: val.int64(response.barValue), - * Baz: val.string(response.bazValue) - * })), - * descriptors: consensusFieldsFrom({ - * Foo: AggregationType.MEDIAN, - * Bar: AggregationType.IDENTICAL, - * Baz: AggregationType.COMMON_PREFIX, - * }), - * default: val.mapValue({ - * Foo: val.int64(42), - * Bar: val.int64(123), - * Baz: val.string("default"), - * }), - * }); - * ``` - */ -export const consensusFieldsFrom = ( - spec: Record, -) => { - const normalized: Record = {} - for (const key of Object.keys(spec)) { - const value = spec[key] - normalized[key] = - typeof value === 'number' ? createConsensusDescriptorAggregation(value) : value - } - return consensusFields(normalized) -} - -export type ObservationValueCase = Extract - -export type ObservationErrorCase = Extract - -export const observationValue = (value: Value): ObservationValueCase => ({ - case: 'value', - value: value.proto, -}) - -export const observationError = (message: string): ObservationErrorCase => ({ - case: 'error', - value: message, -}) - -/** - * Creates consensus inputs for oracle network data aggregation. - * - * This function prepares an individual observation for distributed consensus - * among multiple oracle nodes. Each consensus strategy aggregates observations - * differently to produce a single trusted result. - * - * **Note**: This function only handles single values with a single consensus strategy. - * For complex objects with multiple fields using different consensus strategies, - * use `consensusFieldsFrom` directly with `create(SimpleConsensusInputsSchema, ...)`. - * - * @param value - The observation value from this oracle node - * @param consensus - The consensus mechanism to use for aggregation: - * - `"median"` - Takes middle value when sorted (ideal for numerical data, like prices) - * - `"identical"` - Requires all nodes to report exact same value (for critical boolean/status data) - * - `"commonPrefix"` - Finds longest shared beginning of strings (useful for URLs/addresses) - * - `"commonSuffix"` - Finds longest shared ending of strings - * @returns SimpleConsensusInputs object containing the observation and consensus descriptor - * - * @example - * ```typescript - * // Price feed - use median to resist outliers - * const priceInput = getAggregatedValue(val.float64(1850.50), "median"); - * - * // System status - require exact consensus - * const statusInput = getAggregatedValue(val.bool(true), "identical"); - * - * // API endpoint - find common base URL - * const urlInput = getAggregatedValue(val.string("https://api.example.com/v1/data"), "commonPrefix"); - * - * // For complex multi-field consensus, use consensusFieldsFrom instead: - * // const complexInput = create(SimpleConsensusInputsSchema, { - * // observation: observationValue(val.mapValue({ Foo: val.int64(42), Bar: val.string("test") })), - * // descriptors: consensusFieldsFrom({ - * // Foo: AggregationType.MEDIAN, - * // Bar: AggregationType.IDENTICAL, - * // }), - * // }); - * ``` - */ -export const getAggregatedValue = (value: Value, consensus: ConsenusAggregator) => - create(SimpleConsensusInputsSchema, { - observation: observationValue(value), - descriptors: consensusAggregatorsMap[consensus], - }) diff --git a/src/sdk/utils/values/consensus_aggregators.test.ts b/src/sdk/utils/values/consensus_aggregators.test.ts new file mode 100644 index 00000000..320c93f5 --- /dev/null +++ b/src/sdk/utils/values/consensus_aggregators.test.ts @@ -0,0 +1,186 @@ +import { describe, expect, test } from 'bun:test' +import { commonPrefix, commonSuffix, ConsensusAggregationByFields, consensusCommonPrefixAggregation, consensusCommonSuffixAggregation, type ConsensusFieldAggregation, consensusIdenticalAggregation, consensusMedianAggregation, identical, ignore, median, type ConsensusAggregation } from './consensus_aggregators' +import { AggregationType, type ConsensusDescriptor } from '@cre/generated/sdk/v1alpha/sdk_pb' + +// Similar to the tests for serialization, there are portions of the tests to verify that the retuned type is correct. +// The compilation itself is enough to validate it is correct, but it's broken into tests to make it easier to see what is tested. +// Since CreSerializable is tested in depth in the serializer tests, tests in this file only verify one invalid type. +describe('test consensus', () => { + test('median', () => { + assertSimpleConsensus(consensusMedianAggregation(), AggregationType.MEDIAN) + usableForConsensus(consensusMedianAggregation()) + usableForConsensus(consensusMedianAggregation()) + usableForConsensus(consensusMedianAggregation()) + // Restrictions on consensusMedianAggregation won't allow other types + }) + + test('identical', () => { + assertSimpleConsensus(consensusIdenticalAggregation(), AggregationType.IDENTICAL) + usableForConsensus(consensusIdenticalAggregation()) + usableForConsensus(consensusIdenticalAggregation()) + usableForConsensus(consensusIdenticalAggregation()) + usableForConsensus(consensusIdenticalAggregation()) + usableForConsensus(consensusIdenticalAggregation()) + usableForConsensus(consensusIdenticalAggregation()) + }) + + test('common prefix', () => { + assertSimpleConsensus(consensusCommonPrefixAggregation(), AggregationType.COMMON_PREFIX) + usableForConsensus(consensusCommonPrefixAggregation()) + usableForConsensus(consensusCommonPrefixAggregation()) + usableForConsensus(consensusCommonPrefixAggregation()) + usableForConsensus(consensusCommonPrefixAggregation()) + usableForConsensus(consensusCommonPrefixAggregation()) + usableForConsensus(consensusCommonPrefixAggregation()) + }) + + test('common prefix', () => { + assertSimpleConsensus(consensusCommonSuffixAggregation(), AggregationType.COMMON_SUFFIX) + usableForConsensus(consensusCommonSuffixAggregation()) + usableForConsensus(consensusCommonSuffixAggregation()) + usableForConsensus(consensusCommonSuffixAggregation()) + usableForConsensus(consensusCommonSuffixAggregation()) + usableForConsensus(consensusCommonSuffixAggregation()) + usableForConsensus(consensusCommonSuffixAggregation()) + }) + + test('with default adds default', () => { + const original = consensusMedianAggregation() + const anyDefaultValue = 10 + const withDefault = original.withDefault(anyDefaultValue) + + expect(original.defaultValue).toBeUndefined() + expect(withDefault.descriptor).toEqual(original.descriptor) + expect(withDefault.defaultValue).toEqual(anyDefaultValue) + }) + + test('with default overrides default', () => { + const anyDefaultValue = 10 + const original = consensusMedianAggregation().withDefault(anyDefaultValue) + const anyDifferentDefaultValue = anyDefaultValue + 20 + const withDefault = original.withDefault(anyDifferentDefaultValue) + + expect(original.defaultValue).toEqual(anyDefaultValue) + expect(withDefault.descriptor).toEqual(original.descriptor) + expect(withDefault.defaultValue).toEqual(anyDifferentDefaultValue) + }) + + describe('test fields', () => { + test('median', () => { + const consensusAggregation = ConsensusAggregationByFields>({ + f1: median, + f2: median + }) + assertFieldConsensus(consensusAggregation, AggregationType.MEDIAN) + usableForFieldConsensus(median) + usableForFieldConsensus(median) + usableForFieldConsensus(median) + // Restrictions on median won't allow other types + }) + + test('identical', () => { + const consensusAggregation = ConsensusAggregationByFields>({ + f1: identical, + f2: identical + }) + assertFieldConsensus(consensusAggregation, AggregationType.IDENTICAL) + + usableForFieldConsensus(identical) + usableForFieldConsensus(identical) + usableForFieldConsensus(identical) + usableForFieldConsensus(identical) + usableForFieldConsensus(identical) + usableForFieldConsensus(identical) + }) + + test('common prefix', () => { + const consensusAggregation = ConsensusAggregationByFields>({ + f1: commonPrefix, + f2: commonPrefix + }) + assertFieldConsensus(consensusAggregation, AggregationType.COMMON_PREFIX) + usableForFieldConsensus(commonPrefix) + usableForFieldConsensus(commonPrefix) + usableForFieldConsensus(commonPrefix) + usableForFieldConsensus(commonPrefix) + usableForFieldConsensus(commonPrefix) + usableForFieldConsensus(commonPrefix) + }) + + test('common suffix', () => { + const consensusAggregation = ConsensusAggregationByFields>({ + f1: commonSuffix, + f2: commonSuffix + }) + assertFieldConsensus(consensusAggregation, AggregationType.COMMON_SUFFIX) + usableForFieldConsensus(commonSuffix) + usableForFieldConsensus(commonSuffix) + usableForFieldConsensus(commonSuffix) + usableForFieldConsensus(commonSuffix) + usableForFieldConsensus(commonSuffix) + usableForFieldConsensus(commonSuffix) + }) + + test('ignore', () => { + const consensusAggregation = ConsensusAggregationByFields({ + f1: identical, + f2: identical, + ignoreString: ignore, + ignoreRegExp: ignore + }) + assertFieldConsensus(consensusAggregation, AggregationType.IDENTICAL) + }) + }) +}) + +function assertSimpleConsensus(c: ConsensusAggregation, expected: AggregationType) { + expect(c.defaultValue).toBeUndefined() + const actual = expectCase(c.descriptor, 'aggregation') + expect(actual).toEqual(expected) +} + +function assertFieldConsensus(c: ConsensusAggregation, expected: AggregationType) { + expect(c.defaultValue).toBeUndefined() + const actual = expectCase(c.descriptor, 'fieldsMap').fields + const entries = Object.entries(actual) + expect(entries).toHaveLength(2) + + expect(actual).toHaveProperty('f1') + expect(actual).toHaveProperty('f2') + + const f1Descriptor = actual['f1'] + const f2Descriptor = actual['f2'] + + expect(f1Descriptor.descriptor).toBeDefined() + expect(f1Descriptor.descriptor.case).toBe('aggregation') + expect(f1Descriptor.descriptor.value).toEqual(expected) + + expect(f2Descriptor.descriptor).toBeDefined() + expect(f2Descriptor.descriptor.case).toBe('aggregation') + expect(f2Descriptor.descriptor.value).toEqual(expected) +} + +function expectCase, V = Extract, { case: C }>['value']>( + actual: ConsensusDescriptor, + expectedCase: C +): V { + expect(actual.descriptor).toBeDefined() + expect(actual.descriptor.case).toBe(expectedCase) + return actual.descriptor.value as V +} + +class SimpleFieldType { + constructor(public f1: T, public f2: T) { } +} + +class InvalidFieldType { + constructor(public f1: string, public f2: string, public ignoreString: string, public ignoreRegExp: RegExp) { } +} + +function usableForConsensus(a: ConsensusAggregation): ConsensusAggregation { + return a +} + +function usableForFieldConsensus(a: () =>ConsensusFieldAggregation): ()=> ConsensusFieldAggregation { + return a +} \ No newline at end of file diff --git a/src/sdk/utils/values/consensus_aggregators.ts b/src/sdk/utils/values/consensus_aggregators.ts new file mode 100644 index 00000000..8a9af73a --- /dev/null +++ b/src/sdk/utils/values/consensus_aggregators.ts @@ -0,0 +1,98 @@ +import { AggregationType, ConsensusDescriptorSchema, FieldsMapSchema, type ConsensusDescriptor, type FieldsMap } from "@cre/generated/sdk/v1alpha/sdk_pb"; +import { create } from "@bufbuild/protobuf"; +import type { CreSerializable, NumericType, TypeVerifier } from "./serializer_types"; + +export type ConsensusAggregation = { + readonly descriptor: ConsensusDescriptor + readonly defaultValue?: T + withDefault(t: T): ConsensusAggregation + _usesUToForceShape(u: U): void +} +// Maybe make ConsensusAggregation take a second parameter, and it'll be true or false, then make anything using it require true +// Only take one type, but make the return type ConsensusAggregation> +// Similar for fields, but ignore would always return ConsensusAggregationFields instead of ConsensusAggregationFields>, and so would ConsensusAggregationByFields :D + +export function consensusMedianAggregation(): ConsensusAggregation>> { + return simpleConsensus(AggregationType.MEDIAN) +} + +export function consensusIdenticalAggregation(): ConsensusAggregation>> { + return simpleConsensus(AggregationType.IDENTICAL) +} + +export function consensusCommonPrefixAggregation(): ConsensusAggregation>> { + return simpleConsensus(AggregationType.COMMON_PREFIX) +} + +export function consensusCommonSuffixAggregation(): ConsensusAggregation>> { + return simpleConsensus (AggregationType.COMMON_SUFFIX) +} + +class ConsensusImpl implements ConsensusAggregation { + constructor(readonly descriptor: ConsensusDescriptor, readonly defaultValue?: T) {} + withDefault(t: T): ConsensusAggregation { + return new ConsensusImpl(this.descriptor, t) + } + _usesUToForceShape(_: U): void{} +} + +function simpleConsensus(agg: AggregationType): ConsensusAggregation>> { + return new ConsensusImpl>>(simpleDescriptor(agg)) +} + +function simpleDescriptor(agg: AggregationType): ConsensusDescriptor { + return create(ConsensusDescriptorSchema, { + descriptor: { + case: 'aggregation', + value: agg + } + }) +} + +export function median(): ConsensusFieldAggregation { + return new ConsensusFieldAggregation(simpleDescriptor(AggregationType.MEDIAN)) +} + +// identical requires the type twice due to limitations in circular references in TypeScripts validation system. +export function identical(): ConsensusFieldAggregation>> { + return new ConsensusFieldAggregation(simpleDescriptor(AggregationType.IDENTICAL)) +} + +export function commonPrefix(): ConsensusFieldAggregation>> { + return new ConsensusFieldAggregation(simpleDescriptor(AggregationType.COMMON_PREFIX)) +} + +export function commonSuffix(): ConsensusFieldAggregation>> { + return new ConsensusFieldAggregation(simpleDescriptor(AggregationType.COMMON_SUFFIX)) +} + +export function ignore(): ConsensusFieldAggregation { + return new ConsensusFieldAggregation() +} + +export class ConsensusFieldAggregation { + // t and u are included in the constructor to force the shape of ConsensusFieldAggregation to include them. + // This disallows automatic casting from other ConsensusFieldAggregation types. + constructor(public fieldDescriptor?: ConsensusDescriptor, protected readonly t?: T, protected readonly u?: U) { } +} + +export type ConsensusAggregationFields = { [K in keyof T]: () => ConsensusFieldAggregation } + +export function ConsensusAggregationByFields(aggregation: ConsensusAggregationFields): ConsensusAggregation { + const fieldMap = create(FieldsMapSchema) + + Object.keys(aggregation).forEach(key => { + const fieldFn = aggregation[key as keyof T] + const fieldAggregation = fieldFn() + if (fieldAggregation.fieldDescriptor) { + fieldMap.fields[key] = fieldAggregation.fieldDescriptor + } + }) + + return new ConsensusImpl(create(ConsensusDescriptorSchema, { + descriptor: { + case: 'fieldsMap', + value: fieldMap + } + })) +} \ No newline at end of file diff --git a/src/sdk/utils/values/serializer_types.test.ts b/src/sdk/utils/values/serializer_types.test.ts new file mode 100644 index 00000000..48542356 --- /dev/null +++ b/src/sdk/utils/values/serializer_types.test.ts @@ -0,0 +1,117 @@ +import { describe, test } from 'bun:test' +import type { NumericType, PrimitiveTypes, NonSerializable, CreSerializableNested, CreSerializable, TypeVerifier } from './serializer_types'; +import { Decimal, Int64, UInt64, type Value } from './value'; + +// These tests verify types are set up correctly. +// The compilation itself is enough to validate it is correct, but it's broken into tests to make it easier to see what is tested. +// Each path in a type is tested at laest once, in order of their occurence +// False values are meant to demonstrate the constraints, but cannot be exaustive, for each type check, there's one false to capture it. +describe('test types', () => { + test('NumericType', () => { + verifyType(true) + verifyType(true) + verifyType(true) + verifyType(true) + verifyType(true) + verifyType(true) + verifyType(false) + }) + + test('PrimitiveTypes', () => { + verifyType(true) + verifyType(true) + verifyType(true) + verifyType(false) + }) + + test('NonSerializable', () => { + verifyType(true) + verifyType, NonSerializable>(true) + verifyType, NonSerializable>(true) + verifyType(true) + verifyType(true) + verifyType(false) + }) + + test('CreSerializableNested', () => { + verifyType>(true) + verifyType>(true) + verifyType<(a: number, b: RegExp) => boolean, CreSerializableNested<(a: number, b: RegExp) => boolean>>(true) + verifyType<() => void, CreSerializableNested<() => void>>(true) + verifyType>(false) + verifyType, CreSerializableNested>>(false) + verifyType>(true) + verifyType>(true) + verifyType>(true) + verifyType>(true) + verifyType>(true) + verifyType>(true) + verifyType >(true) + verifyType>(true) + verifyType(false) + verifyType>(false) + verifyType>(false) + verifyType>(false) + verifyType>(false) + }) + + test('CreSerializable', () => { + verifyType>(true) + verifyType>(true) + verifyType<(a: number, b: RegExp) => boolean, CreSerializable<(a: number, b: RegExp) => boolean>>(false) + verifyType<() => void, CreSerializable<() => void>>(false) + verifyType>(false) + verifyType, CreSerializable>>(false) + verifyType>(true) + verifyType>(true) + verifyType>(true) + verifyType>(true) + verifyType>(true) + verifyType>(true) + verifyType >(true) + verifyType>(true) + verifyType(false) + verifyType>(false) + verifyType>(false) + verifyType>(false) + verifyType>(false) + }) +}) + +class Empty{} + +class TestSerializableClass { + constructor(public a: string, public b: () => RegExp) { } + foo(): boolean { return false } +} + +interface TestSerializableInterface { + a: string + foo(): boolean +} + +type TestSerializableType = { + a: string + foo(): boolean +} + +class TestSerializableClassPrivateNonSerializableMembers { + constructor(public a: string, private b: RegExp, private readonly c : RegExp) { } +} + +class TestNonSerializableClass { + constructor(public a: RegExp) { } +} + + +interface TestNonSerializableInterface { + a: RegExp +} + +type TestNonSerializableType = { + a: RegExp +} + +function verifyType(isType: TypeVerifier): boolean { + return isType +} \ No newline at end of file diff --git a/src/sdk/utils/values/serializer_types.ts b/src/sdk/utils/values/serializer_types.ts new file mode 100644 index 00000000..b76e38fe --- /dev/null +++ b/src/sdk/utils/values/serializer_types.ts @@ -0,0 +1,32 @@ +import type { Decimal, Int64, UInt64 } from "./value" + +export type NumericType = number | bigint | Date | Decimal | Int64 | UInt64 +export type PrimitiveTypes = NumericType | boolean | string +export type NonSerializable = null | Map | Set | RegExp | Int8Array + +export type CreSerializableNested = + T extends PrimitiveTypes ? + T + : T extends Function ? + T + : T extends NonSerializable ? + never + : T extends any[] ? + CreSerializableNested[] + : T extends object ? + { [K in keyof T]: CreSerializableNested } + : never + +export type CreSerializable = T extends PrimitiveTypes? + T + : T extends Function? +never +: T extends NonSerializable? +never : +T extends any[]? +CreSerializableNested[] + : T extends object? +{ [K in keyof T]: CreSerializableNested } +: never + +export type TypeVerifier = T extends U ? true : false diff --git a/src/sdk/utils/values/value.test.ts b/src/sdk/utils/values/value.test.ts index 137df03a..309678ac 100644 --- a/src/sdk/utils/values/value.test.ts +++ b/src/sdk/utils/values/value.test.ts @@ -1,14 +1,12 @@ import { describe, expect, test } from 'bun:test' import type { Value as ProtoValue } from '@cre/generated/values/v1/values_pb' -import { - ValueSchema, - BigIntSchema, - MapSchema, - ListSchema, - DecimalSchema, -} from '@cre/generated/values/v1/values_pb' -import { Value } from './value' -import { timestampDate, TimestampSchema, FieldMaskSchema } from '@bufbuild/protobuf/wkt' +import { ValueSchema, BigIntSchema, MapSchema, ListSchema, DecimalSchema } from '@cre/generated/values/v1/values_pb' +import { Decimal, Int64, UInt64, Value } from './value' +import { + timestampDate, + TimestampSchema, + FieldMaskSchema +} from '@bufbuild/protobuf/wkt' import { create } from '@bufbuild/protobuf' const bytesToBigIntBE = (bytes: Uint8Array): bigint => { @@ -23,261 +21,282 @@ const expectProto = (actual: ProtoValue, expected: NonNullable) => { - expectProto(actual.proto, expected) + expectProto(actual.proto(), expected) expect(actual.unwrap()).toEqual(expected.value) } -function expectCase< - C extends NonNullable, - V = Extract, { case: C }>['value'], ->(actual: ProtoValue, expectedCase: C): V { - expect(actual.value).toBeDefined() - expect(actual.value.case).toBe(expectedCase) - return actual.value.value as V +function expectCase, V = Extract, { case: C }>['value']>( + actual: ProtoValue, + expectedCase: C +): V { + expect(actual.value).toBeDefined() + expect(actual.value.case).toBe(expectedCase) + return actual.value.value as V } describe('val helpers', () => { test('another value', () => { - const val = new Value('10') - const val2 = new Value(val) + const val = Value.from("10") + const val2 = Value.from(val) expect(val).toEqual(val2) }) test('nested value', () => { - const val = new Value(10) - const val2 = new Value({ foo: 99, val: val }) - expectProto(val2.proto, { - case: 'mapValue', - value: create(MapSchema, { - fields: { - foo: create(ValueSchema, { value: { case: 'float64Value', value: 99 } }), - val: create(ValueSchema, { value: { case: 'float64Value', value: 10 } }), - }, - }), - }) + const val = Value.from(10) + const val2 = Value.from({ foo: 99, val: val }) + expectProto(val2.proto(), { + case: 'mapValue', + value: create(MapSchema, { + fields: { + 'foo': create(ValueSchema, { value: { case: 'float64Value', value: 99 } }), + 'val': create(ValueSchema, { value: { case: 'float64Value', value: 10 } }) + } + }) + }) }) describe('protos directly', () => { type ValueCase = NonNullable['case']> - - type AllTests = { [K in ValueCase]: { proto: ProtoValue; expected: any } } + + type AllTests = { [K in ValueCase]: {proto: ProtoValue, expected: any} } const allCases: AllTests = { - stringValue: { + 'stringValue': { proto: create(ValueSchema, { - value: { case: 'stringValue', value: 'hello' }, + value: { case: 'stringValue', value: 'hello' } }), - expected: 'hello', + expected: 'hello' }, - boolValue: { + 'boolValue': { proto: create(ValueSchema, { - value: { case: 'boolValue', value: true }, + value: { case: 'boolValue', value: true } }), - expected: true, + expected: true }, - bytesValue: { + 'bytesValue': { proto: create(ValueSchema, { - value: { case: 'bytesValue', value: new Uint8Array([1, 2, 3]) }, + value: { case: 'bytesValue', value: new Uint8Array([1, 2, 3]) } }), - expected: new Uint8Array([1, 2, 3]), + expected: new Uint8Array([1, 2, 3]) }, - float64Value: { + 'float64Value': { proto: create(ValueSchema, { - value: { case: 'float64Value', value: 3.14159 }, + value: { case: 'float64Value', value: 3.14159 } }), - expected: 3.14159, + expected: 3.14159 }, - int64Value: { + 'int64Value': { proto: create(ValueSchema, { - value: { case: 'int64Value', value: 42n }, + value: { case: 'int64Value', value: 42n } }), - expected: 42n, + expected: new Int64(42n) }, - uint64Value: { + 'uint64Value': { proto: create(ValueSchema, { - value: { case: 'uint64Value', value: 42n }, + value: { case: 'uint64Value', value: 42n } }), - expected: 42n, + expected: new UInt64(42n) }, - timeValue: { + 'timeValue': { proto: create(ValueSchema, { - value: { - case: 'timeValue', - value: create(TimestampSchema, { - seconds: 1700000123n, - nanos: 456000000, - }), - }, + value: { + case: 'timeValue', + value: create(TimestampSchema, { + seconds: 1700000123n, + nanos: 456000000 + }) + } }), expected: new Date(1700000123456), }, - bigintValue: { + 'bigintValue': { proto: create(ValueSchema, { - value: { - case: 'bigintValue', + value: { + case: 'bigintValue', value: create(BigIntSchema, { absVal: new Uint8Array([0x01, 0x23, 0x45, 0x67, 0x89]), - sign: 1n, - }), - }, + sign: 1n + }) + } }), - expected: 0x0123456789n, + expected: 0x0123456789n }, - listValue: { + 'listValue': { proto: create(ValueSchema, { - value: { - case: 'listValue', + value: { + case: 'listValue', value: create(ListSchema, { fields: [ create(ValueSchema, { value: { case: 'stringValue', value: 'item1' } }), - create(ValueSchema, { value: { case: 'float64Value', value: 2.5 } }), - ], - }), - }, + create(ValueSchema, { value: { case: 'float64Value', value: 2.5 } }) + ] + }) + } }), - expected: ['item1', 2.5], + expected: ['item1', 2.5] }, - mapValue: { + 'mapValue': { proto: create(ValueSchema, { - value: { - case: 'mapValue', + value: { + case: 'mapValue', value: create(MapSchema, { fields: { - key1: create(ValueSchema, { value: { case: 'stringValue', value: 'value1' } }), - key2: create(ValueSchema, { value: { case: 'float64Value', value: 2.5 } }), - }, - }), - }, + 'key1': create(ValueSchema, { value: { case: 'stringValue', value: 'value1' } }), + 'key2': create(ValueSchema, { value: { case: 'float64Value', value: 2.5 } }) + } + }) + } }), - expected: { key1: 'value1', key2: 2.5 }, + expected: { key1: 'value1', key2: 2.5 } }, - decimalValue: { + 'decimalValue': { proto: create(ValueSchema, { - value: { - case: 'decimalValue', + value: { + case: 'decimalValue', value: create(DecimalSchema, { coefficient: create(BigIntSchema, { absVal: new Uint8Array([0x04, 0xd2]), // 1234 in big-endian - sign: 1n, + sign: 1n }), - exponent: -2, - }), - }, + exponent: -2 + }) + } }), - expected: '12.34', - }, + expected: new Decimal(1234n, -2) + } } - + const possibleCases = Object.keys(allCases) as ValueCase[] - possibleCases.forEach((caseType) => { + possibleCases.forEach(caseType => { const testCase = allCases[caseType] test(`handles ${caseType} correctly`, () => { - var val = new Value(testCase.proto) - - expect(val.proto.value).toBeDefined() - expect(val.proto.value!.case).toBe(caseType) - + var val = Value.wrap(testCase.proto) + + expect(val.proto().value).toBeDefined() + expect(val.proto().value!.case).toBe(caseType) + expect(val.unwrap()).toEqual(testCase.expected) }) }) }) test('string', () => { - expectValue(new Value('hello'), { case: 'stringValue', value: 'hello' }) + expectValue(Value.from('hello'), { case: 'stringValue', value: 'hello'}) }) test('bool', () => { - const val = new Value(true) - expectValue(new Value(true), { case: 'boolValue', value: true }) + const val = Value.from(true) + expectValue(Value.from(true), { case: 'boolValue', value: true}) }) test('bytes Uint8Array', () => { const data = new Uint8Array([1, 2, 3]) - const val = new Value(data) + const val = Value.from(data) expectValue(val, { case: 'bytesValue', value: new Uint8Array([1, 2, 3]) }) }) test('bytes ArrayBuffer', () => { const ab = new Uint8Array([1, 2, 3]) - const val = new Value(ab.buffer) + const val = Value.from(ab.buffer) expectValue(val, { case: 'bytesValue', value: new Uint8Array([1, 2, 3]) }) }) + + // Use expectProto instead and verify against the int64 etc test('int64 from number', () => { - expectValue(Value.int64(42), { case: 'int64Value', value: 42n }) + const val = Value.from(new Int64(42)) + const pb = expectCase(val.proto(), 'int64Value') + expect(pb).toBe(42n) + expect(val.unwrap()).toEqual(new Int64(42)) }) test('int64 from bigint within range', () => { - expectValue(Value.int64(123n), { case: 'int64Value', value: 123n }) + const val = Value.from(new Int64(123n)) + const pb = expectCase(val.proto(), 'int64Value') + expect(pb).toBe(123n) + expect(val.unwrap()).toEqual(new Int64(123n)) }) test('int64 throws on non-integer number', () => { - expect(() => Value.int64(1.5)).toThrow() + expect(() => new Int64(1.5)).toThrow() }) test('int64 overflow throws (number)', () => { // larger than int64 max const tooBig = Number(2n ** 63n) expect(Number.isFinite(tooBig)).toBe(true) - expect(() => Value.int64(tooBig)).toThrow() + expect(() => new Int64(tooBig)).toThrow() }) test('int64 underflow throws (number)', () => { // smaller than int64 min const tooSmall = Number(-(2n ** 64n)) expect(Number.isFinite(tooSmall)).toBe(true) - expect(() => Value.int64(tooSmall)).toThrow() + expect(() => new Int64(tooSmall)).toThrow() }) test('int64 from string ', () => { - expectValue(Value.int64('-42'), { case: 'int64Value', value: -42n }) + const val = Value.from(new Int64('-42')) + const pb = expectCase(val.proto(), 'int64Value') + expect(pb).toBe(-42n) + expect(val.unwrap()).toEqual(new Int64(-42)) }) + test('uint64 from number', () => { - expectValue(Value.uint64(42), { case: 'uint64Value', value: 42n }) + const val = Value.from(new UInt64(42)) + const pb = expectCase(val.proto(), 'uint64Value') + expect(pb).toBe(42n) + expect(val.unwrap()).toEqual(new UInt64(42)) }) test('uint64 from bigint within range', () => { - expectValue(Value.uint64(123n), { case: 'uint64Value', value: 123n }) + const val = Value.from(new UInt64(123n)) + const pb = expectCase(val.proto(), 'uint64Value') + expect(pb).toBe(123n) + expect(val.unwrap()).toEqual(new UInt64(123n)) }) test('uint64 throws on non-integer number', () => { - expect(() => Value.uint64(1.5)).toThrow() + expect(() => new UInt64(1.5)).toThrow() }) test('uint64 overflow throws (number)', () => { // larger than uint64 max const tooBig = Number(2n ** 64n) expect(Number.isFinite(tooBig)).toBe(true) - expect(() => Value.uint64(tooBig)).toThrow() + expect(() => new UInt64(tooBig)).toThrow() }) test('uint64 underflow throws (number)', () => { // larger than uint64 min const tooSmall = Number(-1) expect(Number.isFinite(tooSmall)).toBe(true) - expect(() => Value.uint64(tooSmall)).toThrow() + expect(() => new UInt64(tooSmall)).toThrow() }) test('uint64 from string ', () => { - expectValue(Value.uint64('42'), { case: 'uint64Value', value: 42n }) + const val = Value.from(new UInt64('42')) + const pb = expectCase(val.proto(), 'uint64Value') + expect(pb).toBe(42n) + expect(val.unwrap()).toEqual(new UInt64(42n)) }) test('float64', () => { // safe, since the any rounding would occur before the nubmer is a float // this does a copy without math - expectValue(new Value(3.14), { case: 'float64Value', value: 3.14 }) + expectValue(Value.from(3.14), {case: 'float64Value', value: 3.14}) }) test('float64 supports NaN and Infinity', () => { - const nan = new Value(NaN) - var value = expectCase(nan.proto, 'float64Value') + const nan = Value.from(NaN) + var value = expectCase(nan.proto(), 'float64Value') expect(Number.isNaN(value)).toBe(true) const unwrappedNaN = nan.unwrap() expect(Number.isNaN(unwrappedNaN)).toBe(true) - const inf = new Value(Infinity) - var value = expectCase(inf.proto, 'float64Value') + const inf = Value.from(Infinity) + var value = expectCase(inf.proto(), 'float64Value') expect(Number.isFinite(value)).toBe(false) const unwrappedInf = inf.unwrap() expect(Number.isFinite(unwrappedInf)).toBe(false) @@ -285,9 +304,9 @@ describe('val helpers', () => { test('bigint encodes sign and abs bytes', () => { const big = -123456789012345678901234567890n - const val = new Value(big) - - const pb = expectCase(val.proto, 'bigintValue') + const val = Value.from(big) + + const pb = expectCase(val.proto(), 'bigintValue') expect(pb.sign).toBe(-1n) const abs = bytesToBigIntBE(pb.absVal) expect(abs).toBe(-big) @@ -298,9 +317,9 @@ describe('val helpers', () => { test('time from Date', () => { const d = new Date(1700000123456) - const val = new Value(d) + const val = Value.from(d) - const ts = expectCase(val.proto, 'timeValue') + const ts = expectCase(val.proto(), 'timeValue') expect(timestampDate(ts)).toEqual(d) const unwrapped = val.unwrap() @@ -309,78 +328,48 @@ describe('val helpers', () => { test('list', () => { const items = [1, 'x', true] - const val = new Value(items) + const val = Value.from(items) - const protoItems = expectCase(val.proto, 'listValue').fields + const protoItems = expectCase(val.proto(), 'listValue').fields expect(protoItems).toHaveLength(3) expectProto(protoItems[0], { case: 'float64Value', value: 1 }) expectProto(protoItems[1], { case: 'stringValue', value: 'x' }) expectProto(protoItems[2], { case: 'boolValue', value: true }) - + const unwrapped = val.unwrap() expect(unwrapped).toEqual(items) }) test('list empty', () => { - const val = new Value([]) + const val = Value.from([]) - const protoItems = expectCase(val.proto, 'listValue').fields + const protoItems = expectCase(val.proto(), 'listValue').fields expect(protoItems).toHaveLength(0) }) test('map', () => { - const inputMap = { d: 1.25, s: 'ok' } - const val = new Value(inputMap) - - const m = expectCase(val.proto, 'mapValue').fields + const inputMap = {d: 1.25, s: 'ok' } + const val = Value.from(inputMap) + + const m = expectCase(val.proto(), 'mapValue').fields expect(Object.keys(m)).toHaveLength(2) expectProto(m['d'], { case: 'float64Value', value: 1.25 }) - expectProto(m['s'], { case: 'stringValue', value: 'ok' }) + expectProto(m['s'], {case: 'stringValue', value: "ok"}) expect(val.unwrap()).toEqual(inputMap) }) test('map empty', () => { - const val = new Value({}) - - const m = expectCase(val.proto, 'mapValue').fields + const val = Value.from({}) + + const m = expectCase(val.proto(), 'mapValue').fields expect(Object.keys(m)).toHaveLength(0) const unwrapped = val.unwrap() as Record expect(Object.keys(unwrapped)).toHaveLength(0) }) - test('from objec', () => { - class Test { - constructor( - public i: number, - public s: string, - ) {} - getI(): number { - return this.i - } - } - - const inputObject = new Test(123, 'abc') - const val = new Value(inputObject) - - const fields = expectCase(val.proto, 'mapValue').fields - expect(Object.keys(fields)).toHaveLength(2) - expectProto(fields['i'], { case: 'float64Value', value: 123 }) - expectProto(fields['s'], { case: 'stringValue', value: 'abc' }) - - const rawUnwrapped = val.unwrap() - expect(rawUnwrapped).toEqual({ i: 123, s: 'abc' }) - - const unwrappedObject = val.unwrapToType({ - factory: () => new Test(0, ''), - }) - expect(unwrappedObject).toEqual(inputObject) - expect(unwrappedObject).toBeInstanceOf(Test) - expect(unwrappedObject.getI()).toEqual(123) - }) - test('from object with schema', () => { var schemaCalled = false const personSchema = { @@ -389,19 +378,19 @@ describe('val helpers', () => { if (typeof value !== 'object' || value === null) { throw new Error('Expected an object') } - + const v = value as any if (typeof v.name !== 'string' || typeof v.age !== 'number') { throw new Error('Invalid person schema') } - + return { name: v.name, age: v.age } - }, + } } - + const person = { name: 'Alice', age: 30 } - const val = new Value(person) - + const val = Value.from(person) + // Test unwrapToType with schema const unwrapped = val.unwrapToType({ schema: personSchema }) expect(unwrapped).toEqual(person) @@ -410,32 +399,33 @@ describe('val helpers', () => { test('from object with constructor', () => { class Test { - constructor( - public i: number, - public s: string, - ) {} - getI(): number { + public i: number = 0 + public s: string = "" + constructor() { } + getI() : number { return this.i } } - const inputObject = new Test(123, 'abc') - const val = new Value(inputObject) + const inputObject = new Test() + inputObject.i = 123 + inputObject.s = "abc" + const val = Value.from(inputObject) - const fields = expectCase(val.proto, 'mapValue').fields + const fields = expectCase(val.proto(), 'mapValue').fields expect(Object.keys(fields)).toHaveLength(2) expectProto(fields['i'], { case: 'float64Value', value: 123 }) - expectProto(fields['s'], { case: 'stringValue', value: 'abc' }) - + expectProto(fields['s'], { case: 'stringValue', value: "abc" }) + const rawUnwrapped = val.unwrap() - expect(rawUnwrapped).toEqual({ i: 123, s: 'abc' }) + expect(rawUnwrapped).toEqual({i: 123, s: "abc"}) var factoryCalled = false const unwrappedObject = val.unwrapToType({ factory: () => { factoryCalled = true - return new Test(0, '') - }, + return new Test() + } }) expect(unwrappedObject).toEqual(inputObject) expect(unwrappedObject).toBeInstanceOf(Test) @@ -443,91 +433,87 @@ describe('val helpers', () => { expect(factoryCalled).toBe(true) }) - test('from unsupported object instances throw (Set, Map, Int8Array)', () => { - expect(() => new Value(new Set([1, 2]))).toThrow() - expect(() => new Value(new Map([['a', 1]]))).toThrow() - expect(() => new Value(new Int8Array([1, 2]))).toThrow() - }) - test('decimal normalization and structure', () => { - const val = Value.decimal('15.2300') - const d = expectCase(val.proto, 'decimalValue') - + const val = Value.from(Decimal.parse('15.2300')) + const d = expectCase(val.proto(), 'decimalValue') + expect(d.exponent).toBe(-2) // coefficient should be 1523 (sign + digits) const coeffAbs = bytesToBigIntBE(d.coefficient!.absVal) expect(d.coefficient!.sign).toBe(1n) expect(coeffAbs).toBe(1523n) + const unwrapped = val.unwrap() - expect(unwrapped).toEqual('15.23') + expect(unwrapped).toEqual(new Decimal(1523n, -2)) }) test('decimal negative and integer only', () => { - const val = Value.decimal('-123.4500') - - const d = expectCase(val.proto, 'decimalValue') + const val = Value.from(Decimal.parse('-123.4500')) + + const d = expectCase(val.proto(), 'decimalValue') expect(d.exponent).toBe(-2) expect(d.coefficient!.sign).toBe(-1n) const coeffAbs = bytesToBigIntBE(d.coefficient!.absVal) expect(coeffAbs).toBe(12345n) const unwrapped = val.unwrap() - expect(unwrapped).toEqual('-123.45') + expect(unwrapped).toEqual(new Decimal(-12345n, -2)) const intString = '42' - const i = Value.decimal(intString) + const i = Value.from(Decimal.parse(intString)) - const id = expectCase(i.proto, 'decimalValue') + const id = expectCase(i.proto(), 'decimalValue') expect(id.exponent).toBe(0) expect(bytesToBigIntBE(id.coefficient!.absVal)).toBe(42n) const iunwrapped = i.unwrap() - expect(iunwrapped).toEqual(intString) + expect(iunwrapped).toEqual(new Decimal(42n, 0)) }) test('decimal invalid strings throw', () => { - expect(() => Value.decimal('abc')).toThrow() - expect(() => Value.decimal('1.')).toThrow() - expect(() => Value.decimal('.5')).toThrow() + expect(() => Value.from(Decimal.parse('abc'))).toThrow() + expect(() => Value.from(Decimal.parse('1.'))).toThrow() + expect(() => Value.from(Decimal.parse('.5'))).toThrow() }) test('from throws on null/undefined', () => { - expect(() => new Value(null as unknown as string)).toThrow() - expect(() => new Value(undefined as unknown as string)).toThrow() + expect(() => Value.from(null as unknown as string)).toThrow() + expect(() => Value.from(undefined as unknown as string)).toThrow() }) test('non value protos', () => { // An proto that isn't related to values const fieldMask = create(FieldMaskSchema, { - paths: ['user.displayName', 'user.email', 'posts.*.title'], + paths: ['user.displayName', 'user.email', 'posts.*.title'] }) - - const val = new Value(fieldMask) - - const mapValue = expectCase(val.proto, 'mapValue').fields + + const val = Value.from(fieldMask) + + const mapValue = expectCase(val.proto(), 'mapValue').fields expect(Object.keys(mapValue)).toContain('$typeName') expect(Object.keys(mapValue)).toContain('paths') - + // Check that the typeName was preserved expectProto(mapValue['$typeName'], { case: 'stringValue', value: 'google.protobuf.FieldMask' }) - + const pathsList = expectCase(mapValue['paths'], 'listValue').fields expect(pathsList).toHaveLength(3) expectProto(pathsList[0], { case: 'stringValue', value: 'user.displayName' }) expectProto(pathsList[1], { case: 'stringValue', value: 'user.email' }) expectProto(pathsList[2], { case: 'stringValue', value: 'posts.*.title' }) - + // Test unwrap to plain object const unwrapped = val.unwrap() as Record expect(unwrapped.$typeName).toBe('google.protobuf.FieldMask') expect(Array.isArray(unwrapped.paths)).toBe(true) expect(unwrapped.paths).toEqual(['user.displayName', 'user.email', 'posts.*.title']) - + + const directProto = val.unwrapToType({ - factory: () => create(FieldMaskSchema), + factory: () => create(FieldMaskSchema) }) - + // Verify this approach also works expect(directProto.$typeName).toBe('google.protobuf.FieldMask') expect(directProto.paths).toEqual(['user.displayName', 'user.email', 'posts.*.title']) diff --git a/src/sdk/utils/values/value.ts b/src/sdk/utils/values/value.ts index 4907bbcb..e14cf990 100644 --- a/src/sdk/utils/values/value.ts +++ b/src/sdk/utils/values/value.ts @@ -15,65 +15,118 @@ import { DecimalSchema, } from '@cre/generated/values/v1/values_pb' -export type SupportedValueTypes = - | 'string' - | 'bool' - | 'bytes' - | 'int64' - | 'uint64' - | 'float64' - | 'bigint' - | 'time' - | 'list' - | 'map' - | 'decimal' +import type { CreSerializable } from "./serializer_types" /** * Type that can validate a value and return a typed result. * Compatible with Zod schemas, Yup validators, and other similar libraries. */ export interface SchemaValidator { - parse(value: unknown): T + parse(value: unknown): T } /** * Options for the unwrapToType function - either use a schema validator OR a factory function, not both. */ -export type UnwrapOptions = +export type UnwrapOptions = | { schema: SchemaValidator; factory?: never } | { schema?: never; factory: () => T } -export class Value { - private readonly value: ProtoValue - +export class Int64 { // int64 bounds - private static readonly INT64_MIN = -(2n ** 63n) - private static readonly INT64_MAX = 2n ** 63n - 1n - private static readonly UINT64_MAX = 2n ** 64n - 1n - - // int64 craetes a Value wrapping an int64 value. - // This can be used to communicate with other languages, as TypeScript doesn't have built-int 64 bit integer types - public static int64(n: number | bigint | string): Value { - return new Value( - create(ValueSchema, { - value: { case: 'int64Value', value: Value.toInt64Bigint(n) }, - }), - ) + static readonly INT64_MIN = -(2n ** 63n) + static readonly INT64_MAX = 2n ** 63n - 1n + + public readonly value: bigint + + public static toInt64Bigint(v: number | bigint | string): bigint { + if (typeof v === 'string') { + const bi: bigint = BigInt(v) + return Int64.toInt64Bigint(bi) + } + + if (typeof v === 'bigint') { + if (v > Int64.INT64_MAX) throw new Error('int64 overflow') + else if (v < Int64.INT64_MIN) throw new Error('int64 underflow') + return v + } + + if (!Number.isFinite(v) || !Number.isInteger(v)) + throw new Error('int64 requires an integer number') + + const bi = BigInt(v) + if (bi > Int64.INT64_MAX) throw new Error('int64 overflow') + else if (bi < Int64.INT64_MIN) throw new Error('int64 underflow') + return bi + } + + public constructor(v: number | bigint | string) { + this.value = Int64.toInt64Bigint(v) + } + + public add(i: Int64, safe: boolean = true): Int64 { + return safe ? new Int64(this.value + i.value) : new Int64(BigInt.asIntN(64, this.value + i.value)) } - // uint64 craetes a Value wrapping an uint64 value. - // This can be used to communicate with other languages, as TypeScript doesn't have built-int 64 bit integer types. - public static uint64(n: number | bigint | string): Value { - return new Value( - create(ValueSchema, { - value: { case: 'uint64Value', value: Value.toUint64Bigint(n) }, - }), - ) + public sub(i: Int64, safe: boolean = true): Int64 { + return safe ? new Int64(this.value - i.value) : new Int64(BigInt.asIntN(64, this.value - i.value)) } + + public mul(i: Int64, safe: boolean = true): Int64 { + return safe ? new Int64(this.value * i.value) : new Int64(BigInt.asIntN(64, this.value * i.value)) + } + + public div(i: Int64, safe: boolean = true): Int64 { + return new Int64(this.value / i.value) + } +} - // decimal creates a Value wrapping of a decimal. - // This can be used to communicate with other languages, as TypeScript doesn't have built-int decimal type. - public static decimal(s: string): Value { +export class UInt64 { + static readonly UINT64_MAX = 2n ** 64n - 1n + public readonly value: bigint + + public static toUint64Bigint(v: number | bigint | string): bigint { + if (typeof v === 'string') { + const bi: bigint = BigInt(v) + return UInt64.toUint64Bigint(bi) + } + if (typeof v === 'bigint') { + if (v > UInt64.UINT64_MAX) throw new Error('uint64 overflow') + else if (v < 0n) throw new Error('uint64 underflow') + return v + } + + if (!Number.isFinite(v) || !Number.isInteger(v)) + throw new Error('int64 requires an integer number') + const bi = BigInt(v) + if (bi > UInt64.UINT64_MAX) throw new Error('uint64 overflow') + else if (bi < 0n) throw new Error('uint64 underflow') + return bi + } + + public constructor(v: number | bigint | string) { + this.value = UInt64.toUint64Bigint(v) + } + + public add(i: UInt64, safe: boolean = true): UInt64 { + return safe ? new UInt64(this.value + i.value) : new UInt64(BigInt.asUintN(64, this.value + i.value)) + } + + public sub(i: UInt64, safe: boolean = true): UInt64 { + return safe ? new UInt64(this.value - i.value) : new UInt64(BigInt.asUintN(64, this.value - i.value)) + } + + public mul(i: UInt64, safe: boolean = true): UInt64 { + return safe ? new UInt64(this.value * i.value) : new UInt64(BigInt.asUintN(64, this.value * i.value)) + } + + public div(i: UInt64, safe: boolean = true): UInt64 { + return new UInt64(this.value / i.value) + } +} + +export class Decimal { + public static parse(s: string): Decimal { // Parse decimal string into coefficient (bigint) and exponent (int32) const m = /^([+-])?(\d+)(?:\.(\d+))?$/.exec(s.trim()) if (!m) throw new Error('invalid decimal string') @@ -82,22 +135,26 @@ export class Value { let fracPart = m[3] ?? '' // remove trailing zeros in fractional part to normalize fracPart = fracPart.replace(/0+$/g, '') - const exp = fracPart.length === 0 ? 0 : -fracPart.length + const exponent = fracPart.length === 0 ? 0 : -fracPart.length const digits = intPart + fracPart || '0' - const coeff = BigInt((signStr === '-' ? '-' : '') + digits) - const decimal: ProtoDecimal = create(DecimalSchema, { - coefficient: Value.bigIntToProtoBigInt(coeff), - exponent: exp, - }) + const coeffecient = BigInt((signStr === '-' ? '-' : '') + digits) + return new Decimal(coeffecient, exponent) + } + constructor(public readonly coeffecient: bigint, public readonly exponent: number) {} +} + +export class Value { + private readonly value: ProtoValue + + public static from(value: CreSerializable): Value { + return new Value(value) + } - return new Value( - create(ValueSchema, { - value: { case: 'decimalValue', value: decimal }, - }), - ) + public static wrap(value: ProtoValue): Value { + return new Value(value) } - constructor(value: any) { + private constructor(value: any) { if (value instanceof Value) { this.value = value.value } else if (isValueProto(value)) { @@ -106,11 +163,11 @@ export class Value { this.value = Value.wrapInternal(value) } } - - get proto(): ProtoValue { + + proto(): ProtoValue { return this.value } - + private static toUint8Array(input: Uint8Array | ArrayBuffer): Uint8Array { return input instanceof Uint8Array ? input : new Uint8Array(input) } @@ -125,7 +182,7 @@ export class Value { if (hex.length % 2 === 1) hex = '0' + hex const len = hex.length / 2 const out = new Uint8Array(len) - for (let i = 0; i < len; i++) { + for (let i = 0; i Value.INT64_MAX) throw new Error('int64 overflow') - else if (v < Value.INT64_MIN) throw new Error('int64 underflow') - return v - } - - if (!Number.isFinite(v) || !Number.isInteger(v)) - throw new Error('int64 requires an integer number') - const bi = BigInt(v) - if (bi > Value.INT64_MAX) throw new Error('int64 overflow') - else if (bi < Value.INT64_MIN) throw new Error('int64 underflow') - return bi - } - - private static toUint64Bigint(v: number | bigint | string): bigint { - if (typeof v === 'string') { - const bi: bigint = BigInt(v) - return Value.toUint64Bigint(bi) - } - if (typeof v === 'bigint') { - if (v > Value.UINT64_MAX) throw new Error('uint64 overflow') - else if (v < 0n) throw new Error('uint64 underflow') - return v - } - - if (!Number.isFinite(v) || !Number.isInteger(v)) - throw new Error('int64 requires an integer number') - const bi = BigInt(v) - if (bi > Value.UINT64_MAX) throw new Error('uint64 overflow') - else if (bi < 0n) throw new Error('uint64 underflow') - return bi - } - private static toTimestamp(d: Date | number | string): Timestamp { const date = d instanceof Date ? d : new Date(d) return timestampFromDate(date) @@ -189,7 +208,7 @@ export class Value { private static isPlainObject(v: unknown): v is Record { return typeof v === 'object' && v !== null && v.constructor === Object } - + private static isObject(v: unknown): v is Record { return typeof v === 'object' && v !== null } @@ -197,23 +216,40 @@ export class Value { private static wrapInternal(v: unknown): ProtoValue { // null/undefined not supported by Value oneof if (v === null || v === undefined) throw new Error('cannot wrap null/undefined into Value') - + if (v instanceof Value) { - return v.proto + return v.proto() } - if (v instanceof Uint8Array) + if (v instanceof Uint8Array) return create(ValueSchema, { value: { case: 'bytesValue', value: v } }) + if (v instanceof ArrayBuffer) return create(ValueSchema, { value: { case: 'bytesValue', value: Value.toUint8Array(v) }, }) - + if (v instanceof Date) return create(ValueSchema, { value: { case: 'timeValue', value: Value.toTimestamp(v) }, }) + if (v instanceof Int64) { + return create(ValueSchema, { value: { case: 'int64Value', value: v.value } }) + } + + if (v instanceof UInt64) { + return create(ValueSchema, { value: { case: 'uint64Value', value: v.value } }) + } + + if (v instanceof Decimal) { + const decimalProto: ProtoDecimal = create(DecimalSchema, { + coefficient: Value.bigIntToProtoBigInt(v.coeffecient), + exponent: v.exponent, + }) + return create(ValueSchema, { value: { case: 'decimalValue', value: decimalProto } }) + } + switch (typeof v) { case 'string': return create(ValueSchema, { value: { case: 'stringValue', value: v } }) @@ -233,6 +269,7 @@ export class Value { throw new Error(`unsupported type: ${typeof v}`) } + if (Array.isArray(v)) { const fields = v.map(Value.wrapInternal) const list: ProtoList = create(ListSchema, { fields }) @@ -247,14 +284,9 @@ export class Value { const map: ProtoMap = create(MapSchema, { fields }) return create(ValueSchema, { value: { case: 'mapValue', value: map } }) } - - // TODO why? + + if (Value.isObject(v) && v.constructor !== Object) { - // Check for unsupported types specifically - if (v instanceof Set || v instanceof Map || v instanceof Int8Array) { - throw new Error('unsupported object instance') - } - const fields: Record = {} for (const [k, vv] of Object.entries(v)) { fields[k] = Value.wrapInternal(vv) @@ -265,97 +297,85 @@ export class Value { throw new Error('unsupported object instance') } - + // Instance methods for unwrapping unwrap(): unknown { return unwrap(this.value) } - - /** - * Unwraps a Value object into its native JavaScript equivalent and casts it to type T. - * If the value is null or undefined, throws an exception. - * - * @param options - Either a schema validator or a factory function (but not both) - * @returns The unwrapped JavaScript value cast to type T - * @throws Error if value is null, undefined, contains an invalid case, or fails schema validation - */ - unwrapToType(options?: UnwrapOptions): T { - const unwrapped = this.unwrap() - - if (!options) { - return unwrapped as T - } - - // Apply schema validation if provided - if (options.schema) { - return options.schema.parse(unwrapped) - } - - // Apply factory function if provided (preserves methods) - if (options.factory) { - const instance = options.factory() - - // Copy properties from unwrapped to the instance - if (typeof unwrapped === 'object' && unwrapped !== null) { - // Use Object.assign for more efficient property copying - Object.assign(instance as object, unwrapped) - } else { - // For primitive types, this won't work well - throw new Error( - `Cannot copy properties from primitive value to object instance. Use a schema instead.`, - ) - } - - return instance - } - - return unwrapped as T + +/** + * Unwraps a Value object into its native JavaScript equivalent and casts it to type T. + * If the value is null or undefined, throws an exception. + * + * @param options - Either a schema validator or a factory function (but not both) + * @returns The unwrapped JavaScript value cast to type T + * @throws Error if value is null, undefined, contains an invalid case, or fails schema validation + */ + unwrapToType(options: UnwrapOptions): T { + const unwrapped = this.unwrap() + + if (options.schema) { + return options.schema.parse(unwrapped) + } + + + const instance = options.factory() + + if (typeof unwrapped === 'object' && unwrapped !== null) { + // Use Object.assign for more efficient property copying + Object.assign(instance as object, unwrapped) + } else { + throw new Error(`Cannot copy properties from primitive value to object instance. Use a schema instead.`) } + + return instance +} } + /** * Unwraps a Value object into its native JavaScript equivalent. * If the value is null or undefined, throws an exception. - * + * * @param value - The Value object to unwrap * @returns The unwrapped JavaScript value * @throws Error if value is null, undefined, or contains an invalid case */ function unwrap(value: ProtoValue): unknown { switch (value.value.case) { - case 'stringValue': - return value.value.value - case 'boolValue': + case "stringValue": return value.value.value - case 'bytesValue': + case "boolValue": return value.value.value - case 'int64Value': + case "bytesValue": return value.value.value - case 'uint64Value': + case "int64Value": + return new Int64(value.value.value) + case "uint64Value": + return new UInt64(value.value.value) + case "float64Value": return value.value.value - case 'float64Value': - return value.value.value - case 'bigintValue': { + case "bigintValue": { const bigIntValue = value.value.value const absVal = bigIntValue.absVal const sign = bigIntValue.sign - + // Convert bytes to bigint let result = 0n for (const byte of absVal) { result = (result << 8n) | BigInt(byte) } - + return sign < 0n ? -result : result } - case 'timeValue': { + case "timeValue": { return timestampDate(value.value.value) } - case 'listValue': { + case "listValue": { const list = value.value.value return list.fields.map(unwrap) } - case 'mapValue': { + case "mapValue": { const map = value.value.value const result: Record = {} for (const [key, val] of Object.entries(map.fields)) { @@ -363,64 +383,35 @@ function unwrap(value: ProtoValue): unknown { } return result } - case 'decimalValue': { + case "decimalValue": { + const decimal = value.value.value const coefficient = decimal.coefficient const exponent = decimal.exponent - if (!coefficient) { - return '0' + return new Decimal(0n, 0) } - + // Convert coefficient to bigint let coeffBigInt: bigint const absVal = coefficient.absVal const sign = coefficient.sign - + // Convert bytes to bigint let result = 0n for (const byte of absVal) { result = (result << 8n) | BigInt(byte) } - + coeffBigInt = sign < 0n ? -result : result - - if (exponent === 0) { - return coeffBigInt.toString() - } - - // Handle decimal point placement - if (exponent < 0) { - const coeffStr = coeffBigInt.toString().replace('-', '') - const isNegative = coeffBigInt < 0n - const absExp = Math.abs(exponent) - - if (coeffStr.length <= absExp) { - // Need leading zeros - const zeros = '0'.repeat(absExp - coeffStr.length) - const sign = isNegative ? '-' : '' - return `${sign}0.${zeros}${coeffStr}` - } else { - // Insert decimal point - const insertPos = coeffStr.length - absExp - const withDecimal = coeffStr.slice(0, insertPos) + '.' + coeffStr.slice(insertPos) - const finalValue = isNegative ? '-' + withDecimal : withDecimal - - // Remove any trailing zeros after the decimal point - return finalValue.replace(/\.?0+$/, '') - } - } else { - // Positive exponent (multiply by 10^exponent) - return (coeffBigInt * 10n ** BigInt(exponent)).toString() - } + + return new Decimal(coeffBigInt, exponent) } - default: - throw new Error(`Unsupported value type: ${(value.value as any).case}`) - } + default: + throw new Error(`Unsupported value type: ${(value.value as any).case}`) + } } function isValueProto(value: any): boolean { - return ( - value.$typeName && typeof value.$typeName === 'string' && value.$typeName === 'values.v1.Value' - ) -} + return value.$typeName && typeof value.$typeName === 'string' && value.$typeName === 'values.v1.Value' +} \ No newline at end of file diff --git a/src/workflows/hello-world/hello-world.ts b/src/workflows/hello-world/hello-world.ts index a19745ac..57c92b48 100644 --- a/src/workflows/hello-world/hello-world.ts +++ b/src/workflows/hello-world/hello-world.ts @@ -1,4 +1,4 @@ -import { Value } from '@cre/sdk/utils/values/value' +import { Value } from '@cre/sdk/utils' import { cre } from '@cre/sdk/cre' import type { Runtime } from '@cre/sdk/runtime/runtime' import { withErrorBoundary } from '@cre/sdk/utils/error-boundary' @@ -9,7 +9,7 @@ type Config = { const onCronTrigger = (_: Config, runtime: Runtime): void => { runtime.logger.log('Hello, Calculator! Workflow triggered.') - cre.sendResponseValue(new Value('Hello, Calculator!')) + cre.sendResponseValue(Value.from('Hello, Calculator!')) } const initWorkflow = (config: Config) => { diff --git a/src/workflows/http-fetch/http-fetch-hook.ts b/src/workflows/http-fetch/http-fetch-hook.ts index 3d9601bf..1a78cdb5 100644 --- a/src/workflows/http-fetch/http-fetch-hook.ts +++ b/src/workflows/http-fetch/http-fetch-hook.ts @@ -1,8 +1,9 @@ import { z } from 'zod' import { cre } from '@cre/sdk/cre' -import { useMedianConsensus } from '@cre/sdk/utils/values/consensus-hooks' import { withErrorBoundary } from '@cre/sdk/utils/error-boundary' -import { Value } from '@cre/sdk/utils/values/value' +import { Value, consensusMedianAggregation } from '@cre/sdk/utils' +import { type NodeRuntime } from '@cre/sdk/runtime/runtime' +import { runInNodeMode } from '@cre/sdk/runtime/run-in-node-mode' const configSchema = z.object({ schedule: z.string(), @@ -11,7 +12,7 @@ const configSchema = z.object({ type Config = z.infer -const fetchMathResult = useMedianConsensus(async (config: Config) => { +const fetchMathResult = async (_: NodeRuntime, config: Config) => { try { const response = await cre.utils.fetch({ url: config.apiUrl, @@ -21,11 +22,11 @@ const fetchMathResult = useMedianConsensus(async (config: Config) => { console.log('fetch error', error) return 0 } -}, 'float64') +} const onCronTrigger = async (config: Config) => { - const aggregatedValue = await fetchMathResult(config) - cre.sendResponseValue(new Value({ Result: aggregatedValue })) + const aggregatedValue = await runInNodeMode(fetchMathResult, consensusMedianAggregation())(config) + cre.sendResponseValue(Value.from(aggregatedValue)) } const initWorkflow = (config: Config) => { diff --git a/src/workflows/http-fetch/http-fetch.ts b/src/workflows/http-fetch/http-fetch.ts index 393bdda9..71e7bd7d 100644 --- a/src/workflows/http-fetch/http-fetch.ts +++ b/src/workflows/http-fetch/http-fetch.ts @@ -2,7 +2,8 @@ import { z } from 'zod' import { cre } from '@cre/sdk/cre' import { type NodeRuntime } from '@cre/sdk/runtime/runtime' import { withErrorBoundary } from '@cre/sdk/utils/error-boundary' -import { Value } from '@cre/sdk/utils/values/value' +import { Value, consensusMedianAggregation } from '@cre/sdk/utils' +import { runInNodeMode } from '@cre/sdk/runtime/run-in-node-mode' const configSchema = z.object({ schedule: z.string(), @@ -11,22 +12,17 @@ const configSchema = z.object({ type Config = z.infer -const fetchMathResult = async (config: Config) => { +const fetchMathResult = async (nodeRuntime: NodeRuntime, config: Config) => { const response = await cre.utils.fetch({ url: config.apiUrl, }) return Number.parseFloat(response.body.trim()) } - -const fetchAggregatedResult = async (config: Config) => - cre.runInNodeMode(async (_nodeRuntime: NodeRuntime) => { - const result = await fetchMathResult(config) - return cre.utils.consensus.getAggregatedValue(new Value(result), 'median') - }) + const onCronTrigger = async (config: Config) => { - const aggregatedValue = await fetchAggregatedResult(config) - cre.sendResponseValue(new Value({ Result: aggregatedValue })) + const aggregatedValue = await runInNodeMode(fetchMathResult, consensusMedianAggregation())(config) + cre.sendResponseValue(Value.from(aggregatedValue)) } const initWorkflow = (config: Config) => { diff --git a/src/workflows/on-chain-write/on-chain-write.ts b/src/workflows/on-chain-write/on-chain-write.ts index d9bbb84e..93ad8383 100644 --- a/src/workflows/on-chain-write/on-chain-write.ts +++ b/src/workflows/on-chain-write/on-chain-write.ts @@ -1,10 +1,9 @@ -import { cre, type Runtime } from '@cre/sdk/cre' +import { cre, type NodeRuntime, type Runtime } from '@cre/sdk/cre' import { withErrorBoundary } from '@cre/sdk/utils/error-boundary' import { bytesToHex, hexToBase64 } from '@cre/sdk/utils/hex-utils' import { sendResponseValue } from '@cre/sdk/utils/send-response-value' -import { useMedianConsensus } from '@cre/sdk/utils/values/consensus-hooks' import { decodeFunctionResult, encodeFunctionData, toHex, zeroAddress } from 'viem' -import { Value } from '@cre/sdk/utils/values/value' +import { Value, consensusMedianAggregation } from '@cre/sdk/utils' import { z } from 'zod' // TODO: In production, load ABI from external file or contract metadata @@ -25,12 +24,12 @@ const configSchema = z.object({ type Config = z.infer -const fetchMathResult = useMedianConsensus(async (config: Config) => { +async function fetchMathResult(nodeRuntime: NodeRuntime, config: Config): Promise { const response = await cre.utils.fetch({ url: config.apiUrl, }) return Number.parseFloat(response.body.trim()) -}, 'float64') +} const onCronTrigger = async (config: Config, runtime: Runtime): Promise => { if (!config.evms?.length) { @@ -38,7 +37,7 @@ const onCronTrigger = async (config: Config, runtime: Runtime): Promise => } // Step 1: Fetch offchain data using consensus (from Part 2) - const offchainValue = await fetchMathResult(config) + const offchainValue = await cre.runInNodeMode(fetchMathResult, consensusMedianAggregation())(config) runtime.logger.log('Successfully fetched offchain value') @@ -79,9 +78,7 @@ const onCronTrigger = async (config: Config, runtime: Runtime): Promise => runtime.logger.log(`Successfully read onchain value: ${onchainValue.toString()}`) // Step 3: Combine the results - convert offchain float to bigint and add - const offchainFloat = offchainValue.value.case === 'float64Value' ? offchainValue.value.value : 0 - - const offchainBigInt = BigInt(Math.floor(offchainFloat)) + const offchainBigInt = BigInt(Math.floor(offchainValue)) const finalResult = onchainValue + offchainBigInt runtime.logger.log('Final calculated result') @@ -150,7 +147,7 @@ const onCronTrigger = async (config: Config, runtime: Runtime): Promise => } sendResponseValue( - new Value({ + Value.from({ OffchainValue: offchainBigInt, OnchainValue: onchainValue, FinalResult: finalResult, diff --git a/src/workflows/on-chain/on-chain.ts b/src/workflows/on-chain/on-chain.ts index 34ed2aaf..dc0ea256 100644 --- a/src/workflows/on-chain/on-chain.ts +++ b/src/workflows/on-chain/on-chain.ts @@ -1,11 +1,10 @@ import { z } from 'zod' import { cre } from '@cre/sdk/cre' import { sendResponseValue } from '@cre/sdk/utils/send-response-value' -import { Value } from '@cre/sdk/utils/values/value' +import { Value, consensusMedianAggregation } from '@cre/sdk/utils' import { encodeFunctionData, decodeFunctionResult, zeroAddress } from 'viem' import { bytesToHex } from '@cre/sdk/utils/hex-utils' -import type { Runtime } from '@cre/sdk/runtime/runtime' -import { useMedianConsensus } from '@cre/sdk/utils/values/consensus-hooks' +import type { NodeRuntime, Runtime } from '@cre/sdk/runtime/runtime' import { hexToBase64 } from '@cre/sdk/utils/hex-utils' import { withErrorBoundary } from '@cre/sdk/utils/error-boundary' @@ -25,12 +24,12 @@ const configSchema = z.object({ type Config = z.infer -const fetchMathResult = useMedianConsensus(async (config: Config) => { +async function fetchMathResult(nodeRuntime: NodeRuntime, config: Config): Promise { const response = await cre.utils.fetch({ url: config.apiUrl, }) return Number.parseFloat(response.body.trim()) -}, 'float64') +} const onCronTrigger = async (config: Config, runtime: Runtime): Promise => { if (!config.evms?.length) { @@ -38,7 +37,7 @@ const onCronTrigger = async (config: Config, runtime: Runtime): Promise => } // Step 1: Fetch offchain data using consensus (from Part 2) - const offchainValue = await fetchMathResult(config) + const offchainValue = await cre.runInNodeMode(fetchMathResult, consensusMedianAggregation())(config) runtime.logger.log(`Successfully fetched offchain value: ${offchainValue}`) @@ -79,13 +78,11 @@ const onCronTrigger = async (config: Config, runtime: Runtime): Promise => runtime.logger.log(`Successfully read onchain value: ${onchainValue.toString()}`) // Step 3: Combine the results - convert offchain float to bigint and add - const offchainFloat = offchainValue.value.case === 'float64Value' ? offchainValue.value.value : 0 - - const offchainBigInt = BigInt(Math.floor(offchainFloat)) + const offchainBigInt = BigInt(Math.floor(offchainValue)) const finalResult = onchainValue + offchainBigInt sendResponseValue( - new Value({ + Value.from({ FinalResult: finalResult, }), ) diff --git a/src/workflows/standard_tests/capability_calls_are_async/test.ts b/src/workflows/standard_tests/capability_calls_are_async/test.ts index 0a99bbfc..b74b2e7f 100644 --- a/src/workflows/standard_tests/capability_calls_are_async/test.ts +++ b/src/workflows/standard_tests/capability_calls_are_async/test.ts @@ -1,5 +1,5 @@ import { cre } from '@cre/sdk/cre' -import { Value } from '@cre/sdk/utils/values/value' +import { Value } from '@cre/sdk/utils' import { BasicActionCapability } from '@cre/generated-sdk/capabilities/internal/basicaction/v1/basicaction_sdk_gen' import { BasicCapability as BasicTriggerCapability } from '@cre/generated-sdk/capabilities/internal/basictrigger/v1/basic_sdk_gen' @@ -17,7 +17,7 @@ const asyncCalls = async () => { const r2 = await p2 const r1 = await p1 - cre.sendResponseValue(new Value(`${r1.adaptedThing}${r2.adaptedThing}`)) + cre.sendResponseValue(Value.from(`${r1.adaptedThing}${r2.adaptedThing}`)) } const initWorkflow = () => { diff --git a/src/workflows/standard_tests/config/test.ts b/src/workflows/standard_tests/config/test.ts index 78a48247..f10fe29c 100644 --- a/src/workflows/standard_tests/config/test.ts +++ b/src/workflows/standard_tests/config/test.ts @@ -1,11 +1,11 @@ import { cre } from '@cre/sdk/cre' import { BasicCapability as BasicTriggerCapability } from '@cre/generated-sdk/capabilities/internal/basictrigger/v1/basic_sdk_gen' -import { Value } from '@cre/sdk/utils/values/value' +import { Value } from '@cre/sdk/utils' type Config = 'config' const sendBackConfig = (config: Config) => { - cre.sendResponseValue(new Value(Buffer.from(config))) + cre.sendResponseValue(Value.from(Buffer.from(config))) } const initWorkflow = () => { diff --git a/src/workflows/standard_tests/logging/test.ts b/src/workflows/standard_tests/logging/test.ts index 96e8cd22..712757ba 100644 --- a/src/workflows/standard_tests/logging/test.ts +++ b/src/workflows/standard_tests/logging/test.ts @@ -1,12 +1,12 @@ import { cre, type Runtime } from '@cre/sdk/cre' import { BasicCapability as BasicTriggerCapability } from '@cre/generated-sdk/capabilities/internal/basictrigger/v1/basic_sdk_gen' -import { Value } from '@cre/sdk/utils/values/value' +import { Value } from '@cre/sdk/utils' type Config = 'config' const doLog = (config: Config, runtime: Runtime) => { runtime.logger.log('log from wasm!') - cre.sendResponseValue(new Value(Buffer.from(config))) + cre.sendResponseValue(Value.from(Buffer.from(config))) } const initWorkflow = () => { diff --git a/src/workflows/standard_tests/mode_switch/don_runtime_in_node_mode/test.ts b/src/workflows/standard_tests/mode_switch/don_runtime_in_node_mode/test.ts index 44be97eb..8bc04ebf 100644 --- a/src/workflows/standard_tests/mode_switch/don_runtime_in_node_mode/test.ts +++ b/src/workflows/standard_tests/mode_switch/don_runtime_in_node_mode/test.ts @@ -1,40 +1,22 @@ -import { Mode } from '@cre/generated/sdk/v1alpha/sdk_pb' -import { SimpleConsensusInputsSchema } from '@cre/generated/sdk/v1alpha/sdk_pb' -import { CapabilityError } from '@cre/sdk/utils/capabilities/capability-error' -import { create, toJson } from '@bufbuild/protobuf' -import { ConsensusCapability } from '@cre/generated-sdk/capabilities/internal/consensus/v1alpha/consensus_sdk_gen' -import { consensusDescriptorIdentical, observationError } from '@cre/sdk/utils/values/consensus' import { cre } from '@cre/sdk/cre' import { BasicCapability as BasicTriggerCapability } from '@cre/generated-sdk/capabilities/internal/basictrigger/v1/basic_sdk_gen' -import { type Runtime } from '@cre/sdk/runtime/runtime' +import type { NodeRuntime, Runtime } from '@cre/sdk/runtime/runtime' +import { runInNodeMode } from '@cre/sdk/runtime/run-in-node-mode' +import { BasicActionCapability } from '@cre/generated-sdk/capabilities/internal/basicaction/v1/basicaction_sdk_gen' +import { consensusIdenticalAggregation } from '@cre/sdk/utils' // Doesn't matter for this test type Config = any const handler = async (_config: Config, runtime: Runtime) => { - const nodeRuntime = runtime.switchModes(Mode.NODE) - - const consensusInput = create(SimpleConsensusInputsSchema, { - observation: observationError('cannot use Runtime inside RunInNodeMode'), - descriptors: consensusDescriptorIdentical, - }) - try { - // Note: ConsensusCapability won't work in NODE mode. - // We're forcing it here just for test purposes. - // Normally, if we don't force the wrong mode, the runtime guards would prevent call to `callCapability` in the first place. - // Because test expectation is to callCapability and verify error output, we need to "trick" the guards. - const consensusCapability = new ConsensusCapability(Mode.NODE) - await consensusCapability.simple(toJson(SimpleConsensusInputsSchema, consensusInput)) + await runInNodeMode(async (nr: NodeRuntime) => { + const basicCap = new BasicActionCapability() + return (await basicCap.performAction({ inputThing: true })).adaptedThing + }, consensusIdenticalAggregation())() } catch (e) { - if (e instanceof CapabilityError) { - cre.sendError('cannot use Runtime inside RunInNodeMode') - } else { - throw e - } + cre.sendError(e as Error) } - - nodeRuntime.switchModes(Mode.DON) } const initWorkflow = () => { diff --git a/src/workflows/standard_tests/mode_switch/node_runtime_in_don_mode/test.ts b/src/workflows/standard_tests/mode_switch/node_runtime_in_don_mode/test.ts index c8611fd1..112b0c05 100644 --- a/src/workflows/standard_tests/mode_switch/node_runtime_in_don_mode/test.ts +++ b/src/workflows/standard_tests/mode_switch/node_runtime_in_don_mode/test.ts @@ -1,33 +1,29 @@ -import { SimpleConsensusInputsSchema } from '@cre/generated/sdk/v1alpha/sdk_pb' -import { create } from '@bufbuild/protobuf' -import { consensusDescriptorIdentical, observationValue } from '@cre/sdk/utils/values/consensus' +import { consensusIdenticalAggregation } from '@cre/sdk/utils' import { BasicCapability as BasicTriggerCapability } from '@cre/generated-sdk/capabilities/internal/basictrigger/v1/basic_sdk_gen' import { BasicActionCapability as NodeActionCapability } from '@cre/generated-sdk/capabilities/internal/nodeaction/v1/basicaction_sdk_gen' import { cre, type NodeRuntime } from '@cre/sdk/cre' import { NodeModeError } from '@cre/sdk/runtime/errors' -import { Value } from '@cre/sdk/utils/values/value' const handler = async () => { // First, run in node mode and do consensus - this makes the expected CallCapability call + var nrt: NodeRuntime | undefined = undefined await cre.runInNodeMode(async (nodeRuntime: NodeRuntime) => { - const consensusInput = create(SimpleConsensusInputsSchema, { - observation: observationValue(new Value('hi')), - descriptors: consensusDescriptorIdentical, - }) - - return consensusInput - }) + nrt = nodeRuntime + return "hi" + }, consensusIdenticalAggregation())() try { // Now we're back in DON mode, try to use a NODE mode capability // This should trigger assertNodeSafe() and throw "cannot use NodeRuntime outside RunInNodeMode" + // We shoudl be using node runtime here in future... + const _ = nrt const nodeActionCapability = new NodeActionCapability() await nodeActionCapability.performAction({ inputThing: true }) } catch (e) { console.log('error', e) if (e instanceof NodeModeError) { // The runtime guards should catch this and throw the expected error - cre.sendError('cannot use NodeRuntime outside RunInNodeMode') + cre.sendError(e) } else { // Should still fail the test if something else got broken throw e diff --git a/src/workflows/standard_tests/mode_switch/successful_mode_switch/test.ts b/src/workflows/standard_tests/mode_switch/successful_mode_switch/test.ts index 5b6bd565..8e53f24c 100644 --- a/src/workflows/standard_tests/mode_switch/successful_mode_switch/test.ts +++ b/src/workflows/standard_tests/mode_switch/successful_mode_switch/test.ts @@ -1,58 +1,37 @@ -import { AggregationType, Mode } from '@cre/generated/sdk/v1alpha/sdk_pb' -import { SimpleConsensusInputsSchema } from '@cre/generated/sdk/v1alpha/sdk_pb' -import { ValueSchema } from '@cre/generated/values/v1/values_pb' -import { create, toJson } from '@bufbuild/protobuf' import { BasicActionCapability } from '@cre/generated-sdk/capabilities/internal/basicaction/v1/basicaction_sdk_gen' import { BasicActionCapability as NodeActionCapability } from '@cre/generated-sdk/capabilities/internal/nodeaction/v1/basicaction_sdk_gen' -import { consensusFieldsFrom, observationValue } from '@cre/sdk/utils/values/consensus' -import { type NodeRuntime } from '@cre/sdk/runtime/runtime' +import type { NodeRuntime } from '@cre/sdk/runtime/runtime' import { BasicCapability as BasicTriggerCapability } from '@cre/generated-sdk/capabilities/internal/basictrigger/v1/basic_sdk_gen' import { cre, type Runtime } from '@cre/sdk/cre' -import { Value } from '@cre/sdk/utils/values/value' +import { Int64, Value, ConsensusAggregationByFields, median } from '@cre/sdk/utils' // Doesn't matter for this test type Config = any +class Output { + constructor(public OutputThing: Int64) { } +} + const handler = async (_config: Config, runtime: Runtime) => { const donInput = { inputThing: true } const basicActionCapability = new BasicActionCapability() const donResponse = await basicActionCapability.performAction(donInput) + runtime.now() - const consensusOutput = await cre.runInNodeMode(async (nodeRuntime: NodeRuntime) => { + const consensusOutput = await cre.runInNodeMode(async (nodeRuntime: NodeRuntime): Promise => { nodeRuntime.now() const nodeActionCapability = new NodeActionCapability() - const nodeResponse = await nodeActionCapability.performAction({ - inputThing: true, - }) - - return create(SimpleConsensusInputsSchema, { - observation: observationValue( - new Value({ - OutputThing: Value.int64(nodeResponse.outputThing), - }), - ), - descriptors: consensusFieldsFrom({ - OutputThing: AggregationType.MEDIAN, - }), - default: new Value({ - OutputThing: Value.int64(123), - }).proto, - }) - }) - - runtime.now() + const nodeResponse = await nodeActionCapability.performAction({inputThing: true}) - const nodeRuntime = runtime.switchModes(Mode.NODE) - nodeRuntime.now() - nodeRuntime.switchModes(Mode.DON) + return new Output(new Int64(nodeResponse.outputThing)) + }, ConsensusAggregationByFields({OutputThing: median}).withDefault(new Output(new Int64(123))))() runtime.now() - const outputJson = toJson(ValueSchema, consensusOutput) cre.sendResponseValue( - new Value( - `${donResponse.adaptedThing}${outputJson?.mapValue?.fields?.OutputThing?.int64Value}`, + Value.from( + `${donResponse.adaptedThing}${consensusOutput.OutputThing.value}`, ), ) } diff --git a/src/workflows/standard_tests/multiple_triggers/test.ts b/src/workflows/standard_tests/multiple_triggers/test.ts index 1959aea7..8dc7cb0e 100644 --- a/src/workflows/standard_tests/multiple_triggers/test.ts +++ b/src/workflows/standard_tests/multiple_triggers/test.ts @@ -3,21 +3,21 @@ import { BasicCapability as ActionAndTriggerCapability } from '@cre/generated-sd import { type Outputs } from '@cre/generated/capabilities/internal/basictrigger/v1/basic_trigger_pb' import { type TriggerEvent } from '@cre/generated/capabilities/internal/actionandtrigger/v1/action_and_trigger_pb' import { cre, type Runtime } from '@cre/sdk/cre' -import { Value } from '@cre/sdk/utils/values/value' +import { Value } from '@cre/sdk/utils' // Doesn't matter for this test type Config = any const doLog0 = (_config: Config, _runtime: Runtime, output: Outputs) => { - cre.sendResponseValue(new Value(`called 0 with ${output.coolOutput}`)) + cre.sendResponseValue(Value.from(`called 0 with ${output.coolOutput}`)) } const doLog1 = (_config: Config, _runtime: Runtime, output: TriggerEvent) => { - cre.sendResponseValue(new Value(`called 1 with ${output.coolOutput}`)) + cre.sendResponseValue(Value.from(`called 1 with ${output.coolOutput}`)) } const doLog2 = (_config: Config, _runtime: Runtime, output: Outputs) => { - cre.sendResponseValue(new Value(`called 2 with ${output.coolOutput}`)) + cre.sendResponseValue(Value.from(`called 2 with ${output.coolOutput}`)) } const initWorkflow = () => { diff --git a/src/workflows/standard_tests/random/test.ts b/src/workflows/standard_tests/random/test.ts index 801ab66c..53b5e99c 100644 --- a/src/workflows/standard_tests/random/test.ts +++ b/src/workflows/standard_tests/random/test.ts @@ -5,12 +5,15 @@ import { BasicCapability as BasicTriggerCapability } from '@cre/generated-sdk/ca import { AggregationType, Mode } from '@cre/generated/sdk/v1alpha/sdk_pb' import { SimpleConsensusInputsSchema } from '@cre/generated/sdk/v1alpha/sdk_pb' import { BasicActionCapability as NodeActionCapability } from '@cre/generated-sdk/capabilities/internal/nodeaction/v1/basicaction_sdk_gen' -import { consensusFieldsFrom, observationValue } from '@cre/sdk/utils/values/consensus' -import { Value } from '@cre/sdk/utils/values/value' +import { Int64, Value, ConsensusAggregationByFields, median } from '@cre/sdk/utils' const configSchema = z.object({ config: z.string() }) type Config = z.infer +class Output { + constructor(public OutputThing: Int64) { } +} + const randHandler = async (_config: Config, runtime: Runtime) => { const donRandomNumber = runtime.getRand().Uint64() let total = donRandomNumber @@ -27,26 +30,14 @@ const randHandler = async (_config: Config, runtime: Runtime) => { log('***' + nodeRandomNumber.toString()) } - const consensusInput = create(SimpleConsensusInputsSchema, { - observation: observationValue( - new Value({ - OutputThing: Value.int64(nodeResponse.outputThing), - }), - ), - descriptors: consensusFieldsFrom({ - OutputThing: AggregationType.MEDIAN, - }), - default: new Value({ - OutputThing: Value.int64(123), - }).proto, - }) - - return consensusInput - }) + return new Output(new Int64(nodeResponse.outputThing)) + }, ConsensusAggregationByFields({ + OutputThing: median + }).withDefault(new Output(new Int64(123))))() total += donRandomNumber - cre.sendResponseValue(new Value(total)) + cre.sendResponseValue(Value.from(total)) } const initWorkflow = () => { diff --git a/src/workflows/standard_tests/secrets/test.ts b/src/workflows/standard_tests/secrets/test.ts index f9a9be8e..dc8c8002 100644 --- a/src/workflows/standard_tests/secrets/test.ts +++ b/src/workflows/standard_tests/secrets/test.ts @@ -1,7 +1,7 @@ import { cre, type Runtime } from '@cre/sdk/cre' import { BasicCapability as BasicTriggerCapability } from '@cre/generated-sdk/capabilities/internal/basictrigger/v1/basic_sdk_gen' import { SecretsError } from '@cre/sdk/utils/secrets-error' -import { Value } from '@cre/sdk/utils/values/value' +import { Value } from '@cre/sdk/utils' // Doesn't matter for this test type Config = any @@ -9,7 +9,7 @@ type Config = any const handleSecret = async (_config: Config, runtime: Runtime) => { try { const secret = await runtime.getSecret('Foo') - cre.sendResponseValue(new Value(secret)) + cre.sendResponseValue(Value.from(secret)) } catch (error) { // One of the tests covers the lack of particular secret. // We cover that in this catch block, however any other error should still be thrown. diff --git a/src/workflows/standard_tests/secrets_fail_in_node_mode/test.ts b/src/workflows/standard_tests/secrets_fail_in_node_mode/test.ts index d2a949f3..da189f78 100644 --- a/src/workflows/standard_tests/secrets_fail_in_node_mode/test.ts +++ b/src/workflows/standard_tests/secrets_fail_in_node_mode/test.ts @@ -1,9 +1,6 @@ -import { create } from '@bufbuild/protobuf' import { cre, type Runtime, type NodeRuntime } from '@cre/sdk/cre' import { BasicCapability as BasicTriggerCapability } from '@cre/generated-sdk/capabilities/internal/basictrigger/v1/basic_sdk_gen' -// TODO: is this part of CRE or test utils? -import { consensusDescriptorIdentical, observationError } from '@cre/sdk/utils/values/consensus' -import { SimpleConsensusInputsSchema } from '@cre/generated/sdk/v1alpha/sdk_pb' +import { consensusMedianAggregation } from '@cre/sdk/utils' // Doesn't matter for this test type Config = any @@ -11,17 +8,8 @@ type Config = any const secretAccessInNodeMode = async (_config: Config, runtime: Runtime) => { try { await cre.runInNodeMode(async (_nodeRuntime: NodeRuntime) => { - try { - await runtime.getSecret('anything') - } catch { - // This is expected to fail due to Don Mode guards, ignore error - } - - return create(SimpleConsensusInputsSchema, { - observation: observationError('cannot use Runtime inside RunInNodeMode'), - descriptors: consensusDescriptorIdentical, - }) - }) + return await runtime.getSecret('anything') + }, consensusMedianAggregation())() } catch { cre.sendError('cannot use Runtime inside RunInNodeMode') } From 2e651df65aa228bcb12216be398496c882c9daf3 Mon Sep 17 00:00:00 2001 From: Ryan Tinianov Date: Tue, 16 Sep 2025 11:24:44 -0400 Subject: [PATCH 2/2] Remove package-log.json and re-run build:all --- dist/javy-chainlink-sdk.plugin.wasm | Bin 1158431 -> 1158431 bytes package-lock.json | 1899 --------------------------- 2 files changed, 1899 deletions(-) delete mode 100644 package-lock.json diff --git a/dist/javy-chainlink-sdk.plugin.wasm b/dist/javy-chainlink-sdk.plugin.wasm index f8b3a7c16a756782e629536d0cc0076e5fd09a22..a6afccfa4d9a777b8af87e3af7d11a8f477481ca 100644 GIT binary patch delta 56 zcmbP#%WeKGw}uwR7N!>F7M2#)7Pc1l7LFFq7OocV7M>Q~7QPn#Ednp6uF7M2#)7Pc1l7LFFq7OocV7M>Q~7QPn#Ednp6uq-tAQQZD^ Mioo`_Qv{7908=IvUjP6A diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 822507e1..00000000 --- a/package-lock.json +++ /dev/null @@ -1,1899 +0,0 @@ -{ - "name": "cre-sdk-typescript", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "cre-sdk-typescript", - "dependencies": { - "@bufbuild/protobuf": "2.6.3", - "@bufbuild/protoc-gen-es": "2.6.3", - "@standard-schema/spec": "1.0.0", - "rxjs": "7.8.2", - "viem": "2.34.0", - "zod": "3.25.76" - }, - "devDependencies": { - "@biomejs/biome": "2.1.3", - "@bufbuild/buf": "1.56.0", - "@types/bun": "1.2.21", - "fast-glob": "3.3.3", - "ts-proto": "2.7.5", - "tsd": "^0.33.0", - "typescript": "5.9.2" - } - }, - "node_modules/@adraffy/ens-normalize": { - "version": "1.11.0", - "license": "MIT" - }, - "node_modules/@babel/code-frame": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", - "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.27.1", - "js-tokens": "^4.0.0", - "picocolors": "^1.1.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", - "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@biomejs/biome": { - "version": "2.1.3", - "dev": true, - "license": "MIT OR Apache-2.0", - "bin": { - "biome": "bin/biome" - }, - "engines": { - "node": ">=14.21.3" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/biome" - }, - "optionalDependencies": { - "@biomejs/cli-darwin-arm64": "2.1.3", - "@biomejs/cli-darwin-x64": "2.1.3", - "@biomejs/cli-linux-arm64": "2.1.3", - "@biomejs/cli-linux-arm64-musl": "2.1.3", - "@biomejs/cli-linux-x64": "2.1.3", - "@biomejs/cli-linux-x64-musl": "2.1.3", - "@biomejs/cli-win32-arm64": "2.1.3", - "@biomejs/cli-win32-x64": "2.1.3" - } - }, - "node_modules/@biomejs/cli-darwin-arm64": { - "version": "2.1.3", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT OR Apache-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=14.21.3" - } - }, - "node_modules/@bufbuild/buf": { - "version": "1.56.0", - "dev": true, - "hasInstallScript": true, - "license": "Apache-2.0", - "bin": { - "buf": "bin/buf", - "protoc-gen-buf-breaking": "bin/protoc-gen-buf-breaking", - "protoc-gen-buf-lint": "bin/protoc-gen-buf-lint" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@bufbuild/buf-darwin-arm64": "1.56.0", - "@bufbuild/buf-darwin-x64": "1.56.0", - "@bufbuild/buf-linux-aarch64": "1.56.0", - "@bufbuild/buf-linux-armv7": "1.56.0", - "@bufbuild/buf-linux-x64": "1.56.0", - "@bufbuild/buf-win32-arm64": "1.56.0", - "@bufbuild/buf-win32-x64": "1.56.0" - } - }, - "node_modules/@bufbuild/buf-darwin-arm64": { - "version": "1.56.0", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "Apache-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@bufbuild/protobuf": { - "version": "2.6.3", - "license": "(Apache-2.0 AND BSD-3-Clause)" - }, - "node_modules/@bufbuild/protoc-gen-es": { - "version": "2.6.3", - "license": "Apache-2.0", - "dependencies": { - "@bufbuild/protobuf": "2.6.3", - "@bufbuild/protoplugin": "2.6.3" - }, - "bin": { - "protoc-gen-es": "bin/protoc-gen-es" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@bufbuild/protobuf": "2.6.3" - }, - "peerDependenciesMeta": { - "@bufbuild/protobuf": { - "optional": true - } - } - }, - "node_modules/@bufbuild/protoplugin": { - "version": "2.6.3", - "license": "Apache-2.0", - "dependencies": { - "@bufbuild/protobuf": "2.6.3", - "@typescript/vfs": "^1.5.2", - "typescript": "5.4.5" - } - }, - "node_modules/@bufbuild/protoplugin/node_modules/typescript": { - "version": "5.4.5", - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@noble/ciphers": { - "version": "1.3.0", - "license": "MIT", - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@noble/curves": { - "version": "1.9.6", - "license": "MIT", - "dependencies": { - "@noble/hashes": "1.8.0" - }, - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@noble/hashes": { - "version": "1.8.0", - "license": "MIT", - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@scure/base": { - "version": "1.2.6", - "license": "MIT", - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@scure/bip32": { - "version": "1.7.0", - "license": "MIT", - "dependencies": { - "@noble/curves": "~1.9.0", - "@noble/hashes": "~1.8.0", - "@scure/base": "~1.2.5" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@scure/bip39": { - "version": "1.6.0", - "license": "MIT", - "dependencies": { - "@noble/hashes": "~1.8.0", - "@scure/base": "~1.2.5" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@standard-schema/spec": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/@tsd/typescript": { - "version": "5.9.2", - "resolved": "https://registry.npmjs.org/@tsd/typescript/-/typescript-5.9.2.tgz", - "integrity": "sha512-mSMM0QtEPdMd+rdMDd17yCUYD4yI3pKHap89+jEZrZ3KIO5PhDofBjER0OtgHdvOXF74KMLO3fyD6k3Hz0v03A==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.17" - } - }, - "node_modules/@types/bun": { - "version": "1.2.21", - "dev": true, - "license": "MIT", - "dependencies": { - "bun-types": "1.2.21" - } - }, - "node_modules/@types/eslint": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.29.0.tgz", - "integrity": "sha512-VNcvioYDH8/FxaeTKkM4/TiTwt6pBV9E3OfGmvaw8tPl0rrHCJ4Ll15HRT+pMiFAf/MLQvAzC+6RzUMEL9Ceng==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/estree": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", - "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "22.14.1", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", - "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/react": { - "version": "19.1.8", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "csstype": "^3.0.2" - } - }, - "node_modules/@typescript/vfs": { - "version": "1.6.1", - "license": "MIT", - "dependencies": { - "debug": "^4.1.1" - }, - "peerDependencies": { - "typescript": "*" - } - }, - "node_modules/abitype": { - "version": "1.0.8", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/wevm" - }, - "peerDependencies": { - "typescript": ">=5.0.4", - "zod": "^3 >=3.22.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - }, - "zod": { - "optional": true - } - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/bun-types": { - "version": "1.2.21", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - }, - "peerDependencies": { - "@types/react": "^19" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase-keys": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", - "dev": true, - "license": "MIT", - "dependencies": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/case-anything": { - "version": "2.1.13", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.13" - }, - "funding": { - "url": "https://github.com/sponsors/mesqueeb" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true, - "license": "MIT" - }, - "node_modules/csstype": { - "version": "3.1.3", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/debug": { - "version": "4.4.1", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decamelize-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", - "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", - "dev": true, - "license": "MIT", - "dependencies": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decamelize-keys/node_modules/map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/detect-libc": { - "version": "1.0.3", - "dev": true, - "license": "Apache-2.0", - "bin": { - "detect-libc": "bin/detect-libc.js" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/diff-sequences": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dprint-node": { - "version": "1.0.8", - "dev": true, - "license": "MIT", - "dependencies": { - "detect-libc": "^1.0.3" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true, - "license": "MIT" - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/eslint-formatter-pretty": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/eslint-formatter-pretty/-/eslint-formatter-pretty-4.1.0.tgz", - "integrity": "sha512-IsUTtGxF1hrH6lMWiSl1WbGaiP01eT6kzywdY1U+zLc0MP+nwEnUiS9UI8IaOTUhTeQJLlCEWIbXINBH4YJbBQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/eslint": "^7.2.13", - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.0", - "eslint-rule-docs": "^1.1.5", - "log-symbols": "^4.0.0", - "plur": "^4.0.0", - "string-width": "^4.2.0", - "supports-hyperlinks": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint-rule-docs": { - "version": "1.1.235", - "resolved": "https://registry.npmjs.org/eslint-rule-docs/-/eslint-rule-docs-1.1.235.tgz", - "integrity": "sha512-+TQ+x4JdTnDoFEXXb3fDvfGOwnyNV7duH8fXWTPD1ieaBmB8omj7Gw/pMBBu4uI2uJCCU8APDaQJzWuXnTsH4A==", - "dev": true, - "license": "MIT" - }, - "node_modules/eventemitter3": { - "version": "5.0.1", - "license": "MIT" - }, - "node_modules/fast-glob": { - "version": "3.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.8" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fastq": { - "version": "1.19.1", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/irregular-plurals": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-3.5.0.tgz", - "integrity": "sha512-1ANGLZ+Nkv1ptFb2pa8oG8Lem4krflKuX/gINiHJHjJUKaJHk/SXk5x6K3J+39/p0h1RQ2saROclJJ+QLvETCQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true, - "license": "MIT" - }, - "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", - "dev": true, - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isows": { - "version": "1.0.7", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/wevm" - } - ], - "license": "MIT", - "peerDependencies": { - "ws": "*" - } - }, - "node_modules/jest-diff": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", - "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.6.3", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-get-type": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true, - "license": "MIT" - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true, - "license": "MIT" - }, - "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true, - "license": "MIT" - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", - "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize": "^1.2.0", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow/node_modules/type-fest": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/merge2": { - "version": "1.4.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/minimist-options": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", - "dev": true, - "license": "MIT", - "dependencies": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/ms": { - "version": "2.1.3", - "license": "MIT" - }, - "node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ox": { - "version": "0.8.7", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/wevm" - } - ], - "license": "MIT", - "dependencies": { - "@adraffy/ens-normalize": "^1.11.0", - "@noble/ciphers": "^1.3.0", - "@noble/curves": "^1.9.1", - "@noble/hashes": "^1.8.0", - "@scure/bip32": "^1.7.0", - "@scure/bip39": "^1.6.0", - "abitype": "^1.0.8", - "eventemitter3": "5.0.1" - }, - "peerDependencies": { - "typescript": ">=5.4.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true, - "license": "MIT" - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true, - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/plur": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/plur/-/plur-4.0.0.tgz", - "integrity": "sha512-4UGewrYgqDFw9vV6zNV+ADmPAUAfJPKtGvb/VdpQAx25X5f3xXdGdyOEVFwkl8Hl/tl7+xbeHqSEM+D5/TirUg==", - "dev": true, - "license": "MIT", - "dependencies": { - "irregular-plurals": "^3.2.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/quick-lru": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/react-is": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true, - "license": "MIT" - }, - "node_modules/read-pkg": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg/node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true, - "license": "ISC" - }, - "node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/read-pkg/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=8" - } - }, - "node_modules/redent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", - "dev": true, - "license": "MIT", - "dependencies": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve": { - "version": "1.22.10", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", - "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", - "dev": true, - "license": "MIT", - "dependencies": { - "is-core-module": "^2.16.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/reusify": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rxjs": { - "version": "7.8.2", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", - "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", - "dev": true, - "license": "CC-BY-3.0" - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "license": "MIT", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.22", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.22.tgz", - "integrity": "sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "min-indent": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", - "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/trim-newlines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ts-poet": { - "version": "6.12.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "dprint-node": "^1.0.8" - } - }, - "node_modules/ts-proto": { - "version": "2.7.5", - "dev": true, - "license": "ISC", - "dependencies": { - "@bufbuild/protobuf": "^2.0.0", - "case-anything": "^2.1.13", - "ts-poet": "^6.12.0", - "ts-proto-descriptors": "2.0.0" - }, - "bin": { - "protoc-gen-ts_proto": "protoc-gen-ts_proto" - } - }, - "node_modules/ts-proto-descriptors": { - "version": "2.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "@bufbuild/protobuf": "^2.0.0" - } - }, - "node_modules/ts-proto-descriptors/node_modules/@bufbuild/protobuf": { - "version": "2.5.2", - "dev": true, - "license": "(Apache-2.0 AND BSD-3-Clause)" - }, - "node_modules/ts-proto/node_modules/@bufbuild/protobuf": { - "version": "2.5.2", - "dev": true, - "license": "(Apache-2.0 AND BSD-3-Clause)" - }, - "node_modules/tsd": { - "version": "0.33.0", - "resolved": "https://registry.npmjs.org/tsd/-/tsd-0.33.0.tgz", - "integrity": "sha512-/PQtykJFVw90QICG7zyPDMIyueOXKL7jOJVoX5pILnb3Ux+7QqynOxfVvarE+K+yi7BZyOSY4r+OZNWSWRiEwQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@tsd/typescript": "^5.9.2", - "eslint-formatter-pretty": "^4.1.0", - "globby": "^11.0.1", - "jest-diff": "^29.0.3", - "meow": "^9.0.0", - "path-exists": "^4.0.0", - "read-pkg-up": "^7.0.0" - }, - "bin": { - "tsd": "dist/cli.js" - }, - "engines": { - "node": ">=14.16" - } - }, - "node_modules/tslib": { - "version": "2.8.1", - "license": "0BSD" - }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typescript": { - "version": "5.9.2", - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/undici-types": { - "version": "6.21.0", - "dev": true, - "license": "MIT" - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/viem": { - "version": "2.34.0", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/wevm" - } - ], - "license": "MIT", - "dependencies": { - "@noble/curves": "1.9.6", - "@noble/hashes": "1.8.0", - "@scure/bip32": "1.7.0", - "@scure/bip39": "1.6.0", - "abitype": "1.0.8", - "isows": "1.0.7", - "ox": "0.8.7", - "ws": "8.18.3" - }, - "peerDependencies": { - "typescript": ">=5.0.4" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/ws": { - "version": "8.18.3", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true, - "license": "ISC" - }, - "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/zod": { - "version": "3.25.76", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/colinhacks" - } - } - } -}