diff --git a/.gitignore b/.gitignore index e077ed4..41dd424 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,5 @@ trash node_modules dist build -tmp \ No newline at end of file +tmp +certs \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index fb38fa3..e0be05e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,7 +6,7 @@ WORKDIR /app RUN apk add --no-cache bash wget python3 py3-pip&& \ export NO_CONDA="1" && \ npm i && npm run build - ++ # Runner FROM node:alpine RUN mkdir -p /app @@ -18,18 +18,18 @@ RUN \ npm i --production && \ chown 1000:1000 -Rf /app -ENV NOSTR_CONNECT_GRPC_BINDING_ADDRESS="0.0.0.0" -ENV NOSTR_CONNECT_GRPC_BINDING_PORT=5000 -ENV NOSTR_CONNECT_GRPC_DESCRIPTOR_PATH="/app/build/docs/descriptor.pb" -ENV NOSTR_CONNECT_DOCS_PATH="/app/build/docs" -ENV NOSTR_CONNECT_DOCS_PORT=5001 -ENV NOSTR_CONNECT_DOCS_BINDING_ADDRESS="0.0.0.0" +ENV GRPC_BINDING_ADDRESS="0.0.0.0" +ENV GRPC_BINDING_PORT=5000 + +ENV GRPC_CA_CRT="" +ENV GRPC_SERVER_CRT="" +ENV GRPC_SERVER_KEY="" # NOSTR_CONNECT_SECRET_KEY empty = generate random key -ENV NOSTR_CONNECT_SECRET_KEY="" +ENV NOSTR_SECRET_KEY="" +ENV NOSTR_RELAYS="" EXPOSE 5000 -EXPOSE 5001 USER 1000 CMD ["npm","run", "start"] diff --git a/build-docker.sh b/build-docker.sh index e4624c6..83ae182 100644 --- a/build-docker.sh +++ b/build-docker.sh @@ -1,3 +1,3 @@ #!/bin/bash set -e -docker build -t openagents-grpc . \ No newline at end of file +docker build -t openagents-pool . \ No newline at end of file diff --git a/build-docs.sh b/build-docs.sh deleted file mode 100644 index d3ca58d..0000000 --- a/build-docs.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/bin/bash -mkdir -p build/docs -mkdir -p tmp - -npx protoc --proto_path proto proto/*.proto \ ---experimental_allow_proto3_optional \ --o build/docs/descriptor.pb --include_source_info - - -if [ "`which conda`" != "" ]; then - if [ ! -d ./tmp/docsenv ]; - then - conda create -y --prefix ./tmp/docsenv python=3.12 - fi - eval "$(conda shell.bash hook)" - conda init bash - conda activate ./tmp/docsenv -else - if [ "$NO_CONDA" != "1" ]; - then - echo "Please install conda to generaste documentation" - exit 0 - else - python3 -m venv ./tmp/docsenv2 - . ./tmp/docsenv2/bin/activate - fi -fi - - -pip install sabledocs protobuf -cp sabledocs.toml build/docs -cd build/docs -sabledocs diff --git a/build-proto.sh b/build-proto.sh deleted file mode 100644 index b4e3d7d..0000000 --- a/build-proto.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/bash - -# typescript -npm install @protobuf-ts/plugin -mkdir -p dist/proto/typescript -npx protoc --ts_out dist/proto/typescript \ ---experimental_allow_proto3_optional \ ---ts_opt long_type_number,server_generic \ - --proto_path proto proto/*.proto -mkdir -p src/proto -cp -Rf dist/proto/typescript/* src/proto/ - - -# python -python3 -m venv tmp/protobuild-venv -. tmp/protobuild-venv/bin/activate -pip install grpcio-tools -mkdir -p dist/proto/python -python -m grpc_tools.protoc -Iproto --python_out=dist/proto/python --pyi_out=dist/proto/python --grpc_python_out=dist/proto/python proto/*.proto diff --git a/gen-certs.sh b/gen-certs.sh new file mode 100755 index 0000000..cfc56ea --- /dev/null +++ b/gen-certs.sh @@ -0,0 +1,19 @@ +#!/bin/bash +set -e +mkdir -p certs +cd certs + +function newca { + openssl genrsa -out ca.key 4096 + openssl req -new -x509 -days 365 -key ca.key -out ca.crt -subj "/C=CL/ST=RM/L=Santiago/O=Test/OU=Test/CN=ca" +} + +function newcert { + name=$1 + openssl genrsa -out $name.key 4096 + openssl req -new -key $name.key -out $name.csr -subj "/C=CL/ST=RM/L=Santiago/O=Test/OU=$name/CN=localhost" + openssl x509 -req -days 999 -in $name.csr -CA ca.crt -CAkey ca.key -out $name.crt + openssl rsa -in $name.key -out $name.key +} + +$@ \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 83e5c6f..0d542d6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,12 +14,12 @@ "@protobuf-ts/grpc-backend": "^2.9.4", "@protobuf-ts/plugin": "^2.9.4", "@types/google-protobuf": "^3.15.12", - "express": "^4.19.2", "google-protobuf": "^3.21.2", "grpc-tools": "^1.12.4", "install": "^0.13.0", "nostr-tools": "^2.3.2", "npm": "^10.5.0", + "openagents-grpc-proto": "https://github.com/riccardobl/openagents-grpc-proto/releases/download/v0.3.6/openagents_grpc_proto-JAVASCRIPT.tgz", "ts-protoc-gen": "^0.15.0", "uuidv4": "^6.2.13", "ws": "^8.16.0" @@ -30,9 +30,9 @@ } }, "node_modules/@grpc/grpc-js": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.10.4.tgz", - "integrity": "sha512-MqBisuxTkYvPFnEiu+dag3xG/NBUDzSbAFAWlzfkGnQkjVZ6by3h4atbBc+Ikqup1z5BfB4BN18gKWR1YyppNw==", + "version": "1.10.6", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.10.6.tgz", + "integrity": "sha512-xP58G7wDQ4TCmN/cMUHh00DS7SRDv/+lC+xFLrTkMIN8h55X5NhZMLYbvy7dSELP15qlI6hPhNCRWVMtZMwqLA==", "dependencies": { "@grpc/proto-loader": "^0.7.10", "@js-sdsl/ordered-map": "^4.4.2" @@ -380,18 +380,6 @@ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", @@ -455,11 +443,6 @@ "node": ">=10" } }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, "node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", @@ -486,42 +469,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/body-parser": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -543,32 +490,6 @@ "node": ">=8" } }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/chokidar": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", @@ -657,38 +578,6 @@ "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -705,44 +594,11 @@ } } }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, "node_modules/detect-libc": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", @@ -763,43 +619,11 @@ "node": ">=8" } }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, "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==" }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "engines": { - "node": ">= 0.4" - } - }, "node_modules/escalade": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", @@ -808,73 +632,6 @@ "node": ">=6" } }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", - "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.2", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.6.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/express/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, "node_modules/fast-glob": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", @@ -912,52 +669,6 @@ "node": ">=8" } }, - "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/fs-minipass": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", @@ -999,14 +710,6 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "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==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/gauge": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", @@ -1034,24 +737,6 @@ "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -1108,17 +793,6 @@ "resolved": "https://registry.npmjs.org/google-protobuf/-/google-protobuf-3.21.2.tgz", "integrity": "sha512-3MSOYFO5U9mPGikIYCzK0SaThypfGgS6bHqrUGXG3DPHCrb+txNqeEcns1W0lkGfk0rCyNXm7xB9rMxnCiZOoA==" }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/grpc-tools": { "version": "1.12.4", "resolved": "https://registry.npmjs.org/grpc-tools/-/grpc-tools-1.12.4.tgz", @@ -1132,70 +806,11 @@ "grpc_tools_node_protoc_plugin": "bin/protoc_plugin.js" } }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/https-proxy-agent": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", @@ -1208,17 +823,6 @@ "node": ">= 6" } }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/ignore": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", @@ -1250,14 +854,6 @@ "node": ">= 0.10" } }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "engines": { - "node": ">= 0.10" - } - }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -1351,19 +947,6 @@ "semver": "bin/semver.js" } }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" - }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -1373,14 +956,6 @@ "node": ">= 8" } }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/micromatch": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", @@ -1394,36 +969,6 @@ "node": ">=8.6" } }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -1495,14 +1040,6 @@ "url": "https://github.com/sponsors/raouldeheer" } }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/node-fetch": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", @@ -4139,25 +3676,6 @@ "node": ">=0.10.0" } }, - "node_modules/object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -4166,12 +3684,13 @@ "wrappy": "1" } }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "engines": { - "node": ">= 0.8" + "node_modules/openagents-grpc-proto": { + "version": "0.3.6", + "resolved": "https://github.com/riccardobl/openagents-grpc-proto/releases/download/v0.3.6/openagents_grpc_proto-JAVASCRIPT.tgz", + "integrity": "sha512-0NE+Rg8BzNOSDu8kw1qLa/ei40gDeUoeIRET88QDuhihUH7uo7bIUZ/Sn7wc705M9rtzj6gs026kJSLTSdtpYQ==", + "dependencies": { + "@grpc/grpc-js": "^1.10.6", + "@protobuf-ts/plugin": "^2.9.4" } }, "node_modules/path-is-absolute": { @@ -4182,11 +3701,6 @@ "node": ">=0.10.0" } }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -4243,32 +3757,6 @@ "node": ">=12.0.0" } }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/queue-lit": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/queue-lit/-/queue-lit-1.5.2.tgz", @@ -4298,28 +3786,6 @@ } ] }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", @@ -4419,11 +3885,6 @@ } ] }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, "node_modules/semver": { "version": "7.6.0", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", @@ -4438,104 +3899,11 @@ "node": ">=10" } }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/send/node_modules/debug/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", @@ -4550,14 +3918,6 @@ "node": ">=8" } }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -4618,14 +3978,6 @@ "node": ">=8.0" } }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "engines": { - "node": ">=0.6" - } - }, "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", @@ -4659,18 +4011,6 @@ "tsc-alias": "dist/bin/index.js" } }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/typescript": { "version": "5.4.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.3.tgz", @@ -4689,27 +4029,11 @@ "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", @@ -4727,14 +4051,6 @@ "uuid": "8.3.2" } }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", diff --git a/package.json b/package.json index 215595d..8c75d1d 100644 --- a/package.json +++ b/package.json @@ -4,10 +4,8 @@ "description": "", "main": "src/main.js", "scripts": { - "build-docs": "bash build-docs.sh", - "build-proto": "bash build-proto.sh", "build-src": "npx tsc -p ./tsconfig.json && npx tsc-alias -p tsconfig.json", - "build": "npm run build-proto && npm run build-src && npm run build-docs", + "build": "npm run build-src", "start": "node build/js/main.js", "debug": "npm run build && cd build && node --trace-warnings js/main.js", "ui": "bash run-grpc-ui.sh", @@ -23,12 +21,12 @@ "@protobuf-ts/grpc-backend": "^2.9.4", "@protobuf-ts/plugin": "^2.9.4", "@types/google-protobuf": "^3.15.12", - "express": "^4.19.2", "google-protobuf": "^3.21.2", "grpc-tools": "^1.12.4", "install": "^0.13.0", "nostr-tools": "^2.3.2", "npm": "^10.5.0", + "openagents-grpc-proto": "https://github.com/riccardobl/openagents-grpc-proto/releases/download/v0.3.6/openagents_grpc_proto-JAVASCRIPT.tgz", "ts-protoc-gen": "^0.15.0", "uuidv4": "^6.2.13", "ws": "^8.16.0" @@ -37,4 +35,4 @@ "tsc-alias": "^1.8.8", "typescript": "^5.4.3" } -} \ No newline at end of file +} diff --git a/proto/Job.proto b/proto/Job.proto deleted file mode 100644 index 7fcfd2c..0000000 --- a/proto/Job.proto +++ /dev/null @@ -1,38 +0,0 @@ -syntax = "proto3"; - -import "JobParam.proto"; -import "JobInput.proto"; -import "JobState.proto"; -import "JobResult.proto"; - - - -message Job { - string id = 1; - uint32 kind = 14; - - string runOn = 2; - uint64 expiration = 3; - uint64 timestamp = 4; - - repeated JobInput input = 5; // primary input - repeated JobParam param = 6; // additional parameters - - string customerPublicKey = 7; - string description = 8; - string provider = 9; - - repeated string relays = 10; - - JobResult result = 12; - JobState state = 11; - - uint64 maxExecutionTime = 13; // enforced by the provider - // map results = 12; - - // map states = 11; - - - - -} \ No newline at end of file diff --git a/proto/JobInput.proto b/proto/JobInput.proto deleted file mode 100644 index e4a597f..0000000 --- a/proto/JobInput.proto +++ /dev/null @@ -1,9 +0,0 @@ -syntax = "proto3"; - -message JobInput { - optional string data = 1; - optional string ref = 2; - string type = 3; - string marker = 4; - optional string source = 5; -} diff --git a/proto/JobParam.proto b/proto/JobParam.proto deleted file mode 100644 index 85aab52..0000000 --- a/proto/JobParam.proto +++ /dev/null @@ -1,6 +0,0 @@ -syntax = "proto3"; - -message JobParam { - string key = 1; - repeated string value = 2; -} \ No newline at end of file diff --git a/proto/JobResult.proto b/proto/JobResult.proto deleted file mode 100644 index d3abf23..0000000 --- a/proto/JobResult.proto +++ /dev/null @@ -1,8 +0,0 @@ -syntax = "proto3"; - -message JobResult { - string content = 1; - uint64 timestamp = 2; - string id = 3; -} - diff --git a/proto/JobState.proto b/proto/JobState.proto deleted file mode 100644 index 61eaf67..0000000 --- a/proto/JobState.proto +++ /dev/null @@ -1,15 +0,0 @@ -syntax = "proto3"; - -import "Log.proto"; -import "JobStatus.proto"; - - - - -message JobState { - uint64 acceptedAt = 13; - string acceptedBy = 14; - JobStatus status = 15; - repeated Log logs = 17; - uint64 timestamp = 18; -} \ No newline at end of file diff --git a/proto/JobStatus.proto b/proto/JobStatus.proto deleted file mode 100644 index 4c06a07..0000000 --- a/proto/JobStatus.proto +++ /dev/null @@ -1,12 +0,0 @@ - -syntax = "proto3"; - -enum JobStatus { - PENDING = 0; - PROCESSING = 1; - ERROR = 2; - SUCCESS = 3; - PARTIAL = 4; - PAYMENT_REQUIRED = 7; - UNKNOWN=99; -} \ No newline at end of file diff --git a/proto/Log.proto b/proto/Log.proto deleted file mode 100644 index 6d32604..0000000 --- a/proto/Log.proto +++ /dev/null @@ -1,10 +0,0 @@ - -syntax = "proto3"; - -message Log { - string id=1; - string log = 2; - string level = 3; - uint64 timestamp = 4; - string source = 5; -} diff --git a/proto/rpc.proto b/proto/rpc.proto deleted file mode 100644 index 9436876..0000000 --- a/proto/rpc.proto +++ /dev/null @@ -1,140 +0,0 @@ -syntax = "proto3"; - -import "Log.proto"; -import "JobStatus.proto"; -import "JobState.proto"; -import "JobParam.proto"; -import "JobInput.proto"; -import "JobResult.proto"; -import "Job.proto"; - -message RpcRequestJob { - string runOn = 1; - uint64 expireAfter = 2; - repeated JobInput input = 3; - repeated JobParam param = 4; - string description = 6; - optional uint32 kind = 7; - optional string outputFormat = 8; -} - -message RpcGetJob { - string jobId = 1; -} - -message RpcGetPendingJobs { - optional string filterByRunOn = 1; - optional string filterByCustomer = 2; - optional string filterByDescription = 3; - optional string filterById = 4; - optional string filterByKind = 5; - -} - -message PendingJobs { - repeated Job jobs = 1; -} - - - -message RpcIsJobDone { - bool isDone = 1; -} - -message RpcAcceptJob { - string jobId = 1; -} - -message RpcCancelJob { - string jobId = 1; - string reason = 2; -} - -message RpcJobOutput{ - string jobId = 1; - string output = 2; -} - -message RpcJobComplete{ - string jobId = 1; - string output = 2; - optional string info = 3; -} - -message RpcJobLog { - string jobId = 1; - string log = 2; - -} - -message RpcSendSignedEventRequest { - string parentJob = 1; - string event = 2; -} - -message RpcSubscribeToEventsRequest { - string parentJob = 1; - repeated string filters = 2; -} - -message RpcSubscribeToEventsResponse{ - string parentJob = 1; - string subscriptionId = 2; -} - -message RpcGetEventsRequest { - string parentJob = 1; - string subscriptionId = 2; - uint32 limit = 3; // optional : 0 or unset means no limit -} - -message RpcGetEventsResponse { - string parentJob = 1; - uint32 count = 2; - string subscriptionId = 3; - repeated string events = 4; -} - - -message RpcSendSignedEventResponse{ - string parentJob = 1; - bool success = 2; -} - -message RpcUnsubscribeFromEventsRequest{ - string parentJob = 1; - string subscriptionId = 2; -} - -message RpcUnsubscribeFromEventsResponse{ - bool success = 1; -} - -service NostrConnector { - // job management - rpc requestJob (RpcRequestJob) returns (Job); - rpc getJob (RpcGetJob) returns (Job); - rpc getPendingJobs (RpcGetPendingJobs) returns (PendingJobs); - rpc isJobDone (RpcGetJob) returns (RpcIsJobDone); - rpc acceptJob(RpcAcceptJob) returns (Job); - rpc cancelJob(RpcCancelJob) returns (Job); - rpc outputForJob(RpcJobOutput) returns (Job); - rpc completeJob(RpcJobComplete) returns (Job); - rpc logForJob(RpcJobLog) returns (Job); - - - - // generic nostr events - rpc sendSignedEvent (RpcSendSignedEventRequest) returns (RpcSendSignedEventResponse); - rpc subscribeToEvents (RpcSubscribeToEventsRequest) returns (RpcSubscribeToEventsResponse); - rpc unsubscribeFromEvents (RpcUnsubscribeFromEventsRequest) returns (RpcUnsubscribeFromEventsResponse); - rpc getEvents(RpcGetEventsRequest) returns (RpcGetEventsResponse); -} - - - - - - - - diff --git a/sabledocs.toml b/sabledocs.toml deleted file mode 100644 index 1d7b314..0000000 --- a/sabledocs.toml +++ /dev/null @@ -1,22 +0,0 @@ -module-title = "OpenAgents Nostr gRPC" - - - -output-dir = "." - -enable-lunr-search = true - - -# The following 3 fields configure the source control repository of the project. -# They are used to generate deeplinks for the members of the Proto model pointing to the original source -# code. By default these fields are not configured, and source code links are not included in the docs. -# The repository-type field supports two possible values, "github" and "bitbucket". -# The fields repository-url and repository-branch should be configured to point to the correct repository. -# repository-dir should be set only if the root of your Protobuf module is in a specific directory inside your repository. -#repository-type = "github" -#repository-url = "https://github.com/janedoe/myawesomeproject" -#repository-branch = "main" -#repository-dir = "proto" - -member-ordering = "preserve" - diff --git a/src/Auth.ts b/src/Auth.ts new file mode 100644 index 0000000..98b495f --- /dev/null +++ b/src/Auth.ts @@ -0,0 +1,34 @@ +import * as GRPC from "@grpc/grpc-js"; +import Utils from "./Utils"; + +export default class Auth { + static isAuthorized(methodName: string, nodeId: string): boolean { + return true; + } + static adaptService(data: [GRPC.ServiceDefinition, GRPC.UntypedServiceImplementation]): [GRPC.ServiceDefinition, GRPC.UntypedServiceImplementation]{ + let [def, impl] = data; + + impl = Object.fromEntries( + Object.entries(impl).map(([methodName, methodImplementation]: [any, any]) => [ + methodName, + (call, callback) => { + const metadata = call.metadata.getMap(); + const token: string = metadata["authorization"] || Utils.uuidFrom(call.getPeer()); + const id = Utils.uuidFrom(token); + call.metadata.set("nodeid", id); + if (this.isAuthorized(methodName, id)) { + methodImplementation(call, callback); + } else { + callback({ + code: GRPC.status.UNAUTHENTICATED, + message: "Invalid token", + }); + } + }, + ]) + ); + + return [def, impl]; + + } +} diff --git a/src/Job.ts b/src/Job.ts index 4434f31..0b7d4cb 100644 --- a/src/Job.ts +++ b/src/Job.ts @@ -1,12 +1,7 @@ import { Event } from "nostr-tools"; -import { Job as _Job } from "./proto/Job"; -import { JobInput } from "./proto/JobInput"; -import { Log} from "./proto/Log"; -import { JobState} from "./proto/JobState"; -import { JobStatus} from "./proto/JobStatus"; -import {JobResult} from "./proto/JobResult"; -import { JobParam } from "./proto/JobParam"; +import { Job as _Job, JobInput, Log, JobState, JobStatus, JobResult, JobParam } from "openagents-grpc-proto"; + import Utils from "./Utils"; import { SimplePool, @@ -49,7 +44,7 @@ export default class Job implements _Job { expireAfter: number; maxExecutionTime: number; outputFormat: string = "application/json"; - + nodeId: string = ""; constructor( expireAfter: number, runOn: string, @@ -59,12 +54,14 @@ export default class Job implements _Job { maxExecutionTime: number, relays?: string[], kind?: number, - outputFormat?: string + outputFormat?: string, + nodeId?: string ) { this.timestamp = Date.now(); this.expireAfter = expireAfter; this.expiration = this.timestamp + expireAfter; this.maxExecutionTime = maxExecutionTime; + this.nodeId = nodeId || ""; if (outputFormat) { this.outputFormat = outputFormat; @@ -112,6 +109,7 @@ export default class Job implements _Job { timestamp + this.expireAfter, timestamp + this.expireAfter ); + const nodeId = Utils.getTagVars(event, ["d"])[0][0] || ""; const relays: Array = Utils.getTagVars(event, ["relays"])[0] || defaultRelays; // const bid = Utils.getTagVars(event, ["bid"], 1)[0]; @@ -152,6 +150,7 @@ export default class Job implements _Job { }); } + this.nodeId = nodeId; this.id = id; this.runOn = runOn; this.expiration = expiration; @@ -163,7 +162,7 @@ export default class Job implements _Job { // this.results = {}; // this.states = {}; this.input = inputs; - this.kind=kind; + this.kind = kind; for (const r of relays) { if (!this.relays.includes(r)) { this.relays.push(r); @@ -197,7 +196,7 @@ export default class Job implements _Job { } const timestamp = Number(event.created_at) * 1000; - + const nodeId= Utils.getTagVars(event, ["d"])[0][0] || ""; if (event.kind == 7000) { // TODO: content? let [status, info] = Utils.getTagVars(event, ["status"])[0]; @@ -207,6 +206,7 @@ export default class Job implements _Job { if (info) { const log: Log = { + nodeId, id: event.id, timestamp, log: info, @@ -272,7 +272,7 @@ export default class Job implements _Job { return this.expiration < Date.now(); } - async accept(pk: string, sk: Uint8Array): Promise> { + async accept(nodeId: string, pk: string, sk: Uint8Array): Promise> { const t = Date.now(); const state = this.state; state.acceptedAt = t; @@ -288,6 +288,7 @@ export default class Job implements _Job { ["status", "processing"], ["e", this.id], ["p", customerPublicKey], + ["d", nodeId], ["expiration", "" + Math.floor(this.expiration / 1000)], ], }; @@ -296,7 +297,7 @@ export default class Job implements _Job { return events; } - async cancel(pk: string, sk: Uint8Array, reason: string): Promise> { + async cancel(nodeId: string, pk: string, sk: Uint8Array, reason: string): Promise> { const state = this.state; state.acceptedAt = 0; state.acceptedBy = ""; @@ -311,6 +312,7 @@ export default class Job implements _Job { ["status", "error", reason], ["e", this.id], ["p", customerPublicKey], + ["d", nodeId], ["expiration", "" + Math.floor(this.expiration / 1000)], ], }; @@ -323,12 +325,13 @@ export default class Job implements _Job { log: reason, level: "error", source: pk, + nodeId: nodeId, }); return events; } - async output(pk: string, sk: Uint8Array, data: string): Promise> { + async output(nodeId: string, pk: string, sk: Uint8Array, data: string): Promise> { const t = Date.now(); const resultEvent: EventTemplate = { kind: 6003, @@ -338,6 +341,7 @@ export default class Job implements _Job { ["e", this.id], ["p", this.customerPublicKey], ["expiration", "" + Math.floor(this.expiration / 1000)], + ["d", nodeId], ], }; this.result.content = data; @@ -348,9 +352,15 @@ export default class Job implements _Job { return events; } - async complete(pk: string, sk: Uint8Array, result: any, info?: string): Promise> { + async complete( + nodeId: string, + pk: string, + sk: Uint8Array, + result: any, + info?: string + ): Promise> { const events: Array = []; - events.push(...(await this.output(pk, sk, result))); + events.push(...(await this.output(nodeId, pk, sk, result))); const feedbackEvent: EventTemplate = { kind: 7000, content: info || "", @@ -360,6 +370,7 @@ export default class Job implements _Job { ["e", this.id], ["p", this.customerPublicKey], ["expiration", "" + Math.floor(this.expiration / 1000)], + ["d", nodeId], ], }; events.push(finalizeEvent(feedbackEvent, sk)); @@ -368,7 +379,7 @@ export default class Job implements _Job { return events; } - async log(pk: string, sk: Uint8Array, log: string): Promise> { + async log(nodeId:string, pk: string, sk: Uint8Array, log: string): Promise> { const t = Date.now(); const state = this.state; const feedbackEvent: EventTemplate = { @@ -380,6 +391,7 @@ export default class Job implements _Job { ["e", this.id], ["p", this.customerPublicKey], ["expiration", "" + Math.floor(this.expiration / 1000)], + ["d", nodeId] ], }; const events: Array = []; @@ -390,6 +402,7 @@ export default class Job implements _Job { log: log, level: "log", source: pk, + nodeId: nodeId }); return events; } @@ -445,6 +458,7 @@ export default class Job implements _Job { ["param", "run-on", this.runOn], ["param", "description", this.description], ["output", this.outputFormat], + ["d", this.nodeId], ], }; diff --git a/src/Node.ts b/src/Node.ts new file mode 100644 index 0000000..3905c3c --- /dev/null +++ b/src/Node.ts @@ -0,0 +1,196 @@ +import { EventTemplate as NostrEventTemplate } from 'nostr-tools'; +import { Node as _Node } from "openagents-grpc-proto"; + +import { + SimplePool, + Filter, + VerifiedEvent, + UnsignedEvent, + finalizeEvent, + getPublicKey, +} from "nostr-tools"; +import Utils from './Utils'; + + +// type OAEventTemplate = { +// kind: number; +// created_at?: string; // default +// tags: [ +// ["param", "run-on", string], +// ["param", "description", string], +// ...[["i", string, string?, string?]], +// ...[["param", string, ...string[]]], +// ["output", string]?, // optional +// ["expiration", string]?, // default +// ["relays", ...string[]]?, // optional +// ["bid", string]?, // optional +// ["t", string]?, // optional +// ["tos", string]?, // optional +// ["privacy", string]?, // optional +// ["author", string]?, // optional +// ["web", string]?, // optional +// ["picture", string]?, // optional +// ["name", string]?, // optional: if unset => use description +// ]; +// }; + +// type StdEventTemplate = { +// kind: number; +// created_at?: string; +// tags: [ +// ["param", "description", string], +// ...[["i", string, string?, string?]], +// ...[["param", string, ...string[]]], +// ["expiration", string]?, // default +// ["output", string]?, // optional +// ["relays", ...string[]]?, // optional +// ["bid", string]?, // optional +// ["t", string]?, // optional +// ["tos", string]?, // optional +// ["privacy", string]?, // optional +// ["author", string]?, // optional +// ["web", string]?, // optional +// ["picture", string]?, // optional +// ["name", string]?, // optional: if unset => use description +// ]; +// }; + +// type EventTemplate = OAEventTemplate | StdEventTemplate; + +type EventTemplateRegistration = { + uuid: string; + eventId: number; + timestamp: number; + kind: number; +} + +export default class Node implements _Node { + id: string; + iconUrl: string = ""; + name: string = ""; + description: string = ""; + eventTemplates: string[] = []; + eventRegistration: EventTemplateRegistration[] = []; + timestamp: number; + announcementTimeout: number; + updateNeeded: boolean = false; + lastUpdate: number = 0; + + constructor( + id: string, + name: string, + iconUrl: string, + description: string, + announcementTimeout: number + ) { + this.id = id; + this.name = name; + this.iconUrl = iconUrl; + this.description = description; + this.timestamp = Date.now(); + this.announcementTimeout = announcementTimeout; + } + + getId() { + return this.id; + } + + isExpired() { + return Date.now() - this.timestamp > this.announcementTimeout*1.5; + } + + refresh(name?: string, iconUrl?: string, description?: string): number { + if (name&&this.name!==name) { + this.name = name; + this.updateNeeded = true; + } + if (iconUrl&&this.iconUrl !== iconUrl) { + this.iconUrl = iconUrl; + this.updateNeeded = true; + } + if (description&&this.description !== description) { + this.description = description; + this.updateNeeded = true; + } + this.timestamp = Date.now(); + return this.announcementTimeout; + } + + registerTemplate(template: string) : number{ + const uuid = Utils.uuidFrom(template); + const existingReg = this.eventRegistration.find((reg) => reg.uuid === uuid); + if (!existingReg) { + const eventObject: NostrEventTemplate = JSON.parse(template) ; + const kind = eventObject.kind; + this.eventRegistration.push({ + uuid, + eventId: this.eventTemplates.length, + timestamp: Date.now(), + kind + }); + this.eventTemplates.push(template); + this.updateNeeded = true; + } else { + existingReg.timestamp = Date.now(); + } + return this.announcementTimeout; + } + + isUpdateNeeded() { + return this.updateNeeded||Date.now() - this.lastUpdate > this.announcementTimeout*0.5; + } + + clearUpdateNeeded(){ + this.updateNeeded=false; + this.lastUpdate=Date.now(); + } + + + toEvent(secretKey: Uint8Array) { + // remove expired templates + const now = Date.now(); + this.eventRegistration = this.eventRegistration.filter((reg) => { + if (now - reg.timestamp > this.announcementTimeout) { + this.eventTemplates[reg.eventId] = null; + return false; + } + return true; + }); + this.eventTemplates = this.eventTemplates.filter((t) => t !== null); + + // build announcement event + + const ks = []; + for (const ev of this.eventRegistration) { + if (!ks.find((k) => k[1] === ev.kind)) { + ks.push(["k", ""+ev.kind]); + } + } + + const event: NostrEventTemplate = { + kind: 31990, + created_at: Math.floor(Date.now() / 1000), + content: JSON.stringify( + { + name: this.name, + picture: this.iconUrl || "", + description: this.description, + eventTemplates: this.eventTemplates.map((e) => { + let ev: any = JSON.parse(e); + ev.created_at = "%TIMESTAMP_SECONDS_NUMBER%"; + ev.tags = ev.tags.filter((t) => t[0] !== "expiration") as any; + ev.tags.push(["expiration", "%EXPIRATION_TIMESTAMP_SECONDS%"]); + ev=JSON.stringify(ev, null, 2); + ev=Utils.fixParameterizedJSON(ev); + return ev; + }), + }, + null, 2 + ), + tags: [["d", this.id], ...ks], + }; + + const events = [finalizeEvent(event, secretKey)]; + return events; + } +} \ No newline at end of file diff --git a/src/NostrConnector.ts b/src/NostrConnector.ts index 80a1442..b0e3f59 100644 --- a/src/NostrConnector.ts +++ b/src/NostrConnector.ts @@ -15,9 +15,10 @@ import Utils from './Utils'; import Job from "./Job"; import { hexToBytes } from '@noble/hashes/utils' ; -import { JobInput } from "./proto/JobInput"; -import { JobParam } from "./proto/JobParam"; +import { JobInput, JobParam } from "openagents-grpc-proto"; + import Ws from "ws"; +import Node from "./Node"; useWebSocketImplementation(Ws); type CustomSubscription = { @@ -35,7 +36,9 @@ export default class NostrConnector { sk: Uint8Array; pk: string; customSubscriptions: Map>; + nodes: Array= []; + announcementTimeout: number; maxEventDuration: number; maxJobExecutionTime: number; since: number; @@ -47,7 +50,8 @@ export default class NostrConnector { relays: Array, filterProvider: ((provider: string) => boolean) | undefined, maxEventDuration: number = 1000 * 60 * 60, - maxJobExecutionTime: number = 1000 * 60 * 10 + maxJobExecutionTime: number = 1000 * 60 * 10, + announcementTimeout: number = 1000 * 60 * 10 ) { this.jobs = []; this.customSubscriptions = new Map(); @@ -56,6 +60,7 @@ export default class NostrConnector { this.pk = getPublicKey(this.sk); this.relays = relays; this.pool = new SimplePool(); + this.announcementTimeout=announcementTimeout; this.maxEventDuration = maxEventDuration; this.maxJobExecutionTime = maxJobExecutionTime; this.filterProvider = filterProvider; @@ -74,7 +79,7 @@ export default class NostrConnector { try { if (event.kind >= 5000 && event.kind <= 5999) { console.log("Received event", event); - this.getJob(event.id, true).then((job) => { + this.getJob("", event.id, true).then((job) => { if (!job) return; job.merge(event, this.relays, this.filterProvider); this.addExtraRelays(job.relays); @@ -83,7 +88,7 @@ export default class NostrConnector { console.log("Received event", event); const e: string = Utils.getTagVars(event, ["e"])[0][0]; if (!e) throw new Error("Event missing e tag"); - this.getJob(e, true).then((job) => { + this.getJob("", e, true).then((job) => { if (!job) return; job.merge(event, this.relays, this.filterProvider); this.addExtraRelays(job.relays); @@ -212,10 +217,28 @@ export default class NostrConnector { } async _loop() { - try{ + try { await this.evictExpired(); - }catch(e){ - console.error("Error looping",e); + } catch (e) { + console.error("Error looping", e); + } + + for (const node of this.nodes) { + try { + if(!node.isUpdateNeeded())continue; + const events=await node.toEvent(this.sk); + console.log("Announce node\n",JSON.stringify(events,null,2),"\n"); + for (const event of events) this.sendEvent(event); + node.clearUpdateNeeded(); + } catch (e) { + console.error("Error reannuncing nodes", e); + } + } + + try { + this.nodes = this.nodes.filter((node) => !node.isExpired()); + } catch (e) { + console.error("Error filtering nodes", e); } setTimeout(() => this._loop(), 1000); } @@ -224,17 +247,17 @@ export default class NostrConnector { let nJobs = this.jobs.length; const expiredJobs = this.jobs.filter((job) => job.isExpired()); for (const job of expiredJobs) { - try{ + try { await this.closeAllCustomSubscriptions(job.id); - }catch(e){ - console.error("Error closing custom subscriptions",e); + } catch (e) { + console.error("Error closing custom subscriptions", e); } } - this.jobs = this.jobs.filter((job) => expiredJobs.indexOf(job) === -1); - if(nJobs!=this.jobs.length)console.log("Evicted",nJobs-this.jobs.length,"jobs"); + this.jobs = this.jobs.filter((job) => expiredJobs.indexOf(job) === -1); + if (nJobs != this.jobs.length) console.log("Evicted", nJobs - this.jobs.length, "jobs"); } - async _resolveJobInputs(job: Job) { + async _resolveJobInputs(nodeId: string, job: Job) { await job.resolveInputs(async (res: string, type: string) => { switch (type) { case "event": { @@ -250,7 +273,7 @@ export default class NostrConnector { return undefined; } case "job": { - const job = await this.getJob(res, false); + const job = await this.getJob(nodeId, res, false); return job.result.content; } } @@ -258,6 +281,7 @@ export default class NostrConnector { } async findJobs( + nodeId: string, jobIdFilter: RegExp, runOnFilter: RegExp, descriptionFilter: RegExp, @@ -281,12 +305,12 @@ export default class NostrConnector { } } for (const job of jobs) { - await this._resolveJobInputs(job); + await this._resolveJobInputs(nodeId, job); } return jobs.filter((job) => job.areInputsAvailable()); } - async getJob(id: string, createIfMissing: boolean = false): Promise { + async getJob(nodeId: string, id: string, createIfMissing: boolean = false): Promise { let job: Job | undefined = this.jobs.find((job) => job.id === id); if (!job && createIfMissing) { job = new Job(this.maxEventDuration, "", "", [], [], this.maxJobExecutionTime); @@ -295,7 +319,7 @@ export default class NostrConnector { } console.log(this.jobs.length, "jobs"); if (job) { - await this._resolveJobInputs(job); + await this._resolveJobInputs(nodeId, job); if (!job.areInputsAvailable()) { return undefined; } @@ -303,17 +327,17 @@ export default class NostrConnector { return job; } - async acceptJob(id: string) { - const job = await this.getJob(id); + async acceptJob(nodeId: string, id: string) { + const job = await this.getJob(nodeId, id); if (!job) { throw new Error("Job not found " + id); } if (job.isAvailable()) { - job.accept(this.pk, this.sk); + job.accept(nodeId, this.pk, this.sk); } else { throw new Error("Job already assigned " + id); } - await this._resolveJobInputs(job); + await this._resolveJobInputs(nodeId, job); if (!job.areInputsAvailable()) { throw new Error("Inputs not available " + id); } @@ -321,62 +345,63 @@ export default class NostrConnector { return job; } - async cancelJob(id: string, reason: string) { - const job = await this.getJob(id); + async cancelJob(nodeId: string, id: string, reason: string) { + const job = await this.getJob(nodeId, id); if (!job) { throw new Error("Job not found " + id); } if (job.isAvailable()) { throw new Error("Job not assigned"); } - const eventQueue: VerifiedEvent[] = await job.cancel(this.pk, this.sk, reason); + const eventQueue: VerifiedEvent[] = await job.cancel(nodeId, this.pk, this.sk, reason); for (const event of eventQueue) this.sendEvent(event); this.closeAllCustomSubscriptions(id); return job; } - async outputForJob(id: string, output: any) { - const job = await this.getJob(id); + async outputForJob(nodeId: string, id: string, output: any) { + const job = await this.getJob(nodeId, id); if (!job) { throw new Error("Job not found " + id); } if (job.isAvailable()) { throw new Error("Job not assigned " + id); } - const eventQueue: VerifiedEvent[] = await job.output(this.pk, this.sk, output); + const eventQueue: VerifiedEvent[] = await job.output(nodeId, this.pk, this.sk, output); for (const event of eventQueue) this.sendEvent(event); return job; } - async completeJob(id: string, result: string) { - const job = await this.getJob(id); + async completeJob(nodeId: string, id: string, result: string) { + const job = await this.getJob(nodeId, id); if (!job) { throw new Error("Job not found " + id); } if (job.isAvailable()) { throw new Error("Job not assigned"); } - const eventQueue: VerifiedEvent[] = await job.complete(this.pk, this.sk, result); + const eventQueue: VerifiedEvent[] = await job.complete(nodeId, this.pk, this.sk, result); for (const event of eventQueue) this.sendEvent(event); this.closeAllCustomSubscriptions(id); return job; } - async logForJob(id: string, log: string) { - const job = await this.getJob(id); + async logForJob(nodeId: string, id: string, log: string) { + const job = await this.getJob(nodeId, id); if (!job) { throw new Error("Job not found " + id); } if (job.isAvailable()) { throw new Error("Job not assigned " + id); } - const eventQueue: VerifiedEvent[] = await job.log(this.pk, this.sk, log); + const eventQueue: VerifiedEvent[] = await job.log(nodeId, this.pk, this.sk, log); for (const event of eventQueue) this.sendEvent(event); return job; } async requestJob( + nodeId: string, runOn: string, expireAfter: number, input: Array, @@ -386,7 +411,7 @@ export default class NostrConnector { outputFormat?: string ): Promise { let sk: Uint8Array = this.sk; - if (kind&&!((kind >= 5000 && kind <= 5999) || (kind >= 6000 && kind <= 6999))) + if (kind && !((kind >= 5000 && kind <= 5999) || (kind >= 6000 && kind <= 6999))) throw new Error("Invalid kind " + kind); const job = new Job( expireAfter, @@ -397,10 +422,27 @@ export default class NostrConnector { this.maxJobExecutionTime, this.relays, kind, - outputFormat + outputFormat, + nodeId ); const events: Array = await job.toRequest(sk); for (const event of events) this.sendEvent(event); return job; } + + async registerNode(id: string, name: string, iconUrl: string, description: string): Promise<[Node,number]> { + let node = this.nodes.find((node) => node.id == id); + if (!node) { + node = new Node(id, name, iconUrl, description, this.announcementTimeout); + this.nodes.push(node); + } + const timeout = node.refresh(name, iconUrl, description); + return [node, timeout]; + } + + getNode(id){ + return this.nodes.find((node) => node.id == id); + } + + } \ No newline at end of file diff --git a/src/RPCServer.ts b/src/RPCServer.ts index 6ddc4bf..b7d518e 100644 --- a/src/RPCServer.ts +++ b/src/RPCServer.ts @@ -2,14 +2,19 @@ import * as GRPC from "@grpc/grpc-js"; import * as GPRCBackend from "@protobuf-ts/grpc-backend"; import { ReflectionService } from "@grpc/reflection"; import { loadFileDescriptorSetFromBuffer } from "@grpc/proto-loader"; +import Auth from "./Auth"; -import { INostrConnector } from "./proto/rpc.server"; -import { NostrConnector as NostrConnectorType, RpcSendSignedEventResponse } from "./proto/rpc"; + import { ServerCallContext, } from "@protobuf-ts/runtime-rpc"; import { + NostrConnector as NostrConnectorType, + RpcAnnounceNodeRequest, + RpcAnnounceTemplateRequest, + RpcAnnounceTemplateResponse, + RpcSendSignedEventResponse, RpcGetEventsResponse, RpcGetEventsRequest, RpcSubscribeToEventsResponse, @@ -26,11 +31,14 @@ import { RpcUnsubscribeFromEventsRequest, RpcUnsubscribeFromEventsResponse, RpcJobComplete, - RpcJobLog, -} from "./proto/rpc"; + RpcJobLog, + RpcAnnounceNodeResponse, + JobStatus, + INostrConnector +} from "openagents-grpc-proto"; import Job from "./Job"; import NostrConnector from "./NostrConnector"; -import { JobStatus } from "./proto/JobStatus"; + import Fs from 'fs'; class RpcNostrConnector implements INostrConnector { @@ -39,19 +47,27 @@ class RpcNostrConnector implements INostrConnector { this.conn = conn; } + + getNodeId(context: ServerCallContext): string { + return context.headers["nodeid"] as string; + } + async getJob(request: RpcGetJob, context: ServerCallContext): Promise { + const nodeId = this.getNodeId(context); const id = request.jobId; - const job = await this.conn.getJob(id); + const job = await this.conn.getJob(nodeId, id); return job; } async getPendingJobs(request: RpcGetPendingJobs, context: ServerCallContext): Promise { + const nodeId = this.getNodeId(context); const jobIdFilter: RegExp = new RegExp(request.filterById || ".*"); const customerFilter: RegExp = new RegExp(request.filterByCustomer || ".*"); const runOnFilter: RegExp = new RegExp(request.filterByRunOn || ".*"); const descriptionFilter: RegExp = new RegExp(request.filterByDescription || ".*"); const kindFilter: RegExp = new RegExp(request.filterByKind || ".*"); const jobs = await this.conn.findJobs( + nodeId, jobIdFilter, runOnFilter, descriptionFilter, @@ -66,6 +82,7 @@ class RpcNostrConnector implements INostrConnector { } async isJobDone(request: RpcGetJob, context: ServerCallContext): Promise { + const nodeId = this.getNodeId(context); const job = await this.getJob(request, context); if (job && job.state.status == JobStatus.SUCCESS) { return { @@ -79,34 +96,41 @@ class RpcNostrConnector implements INostrConnector { } acceptJob(request: RpcAcceptJob, context: ServerCallContext): Promise { - return this.conn.acceptJob(request.jobId); + const nodeId = this.getNodeId(context); + return this.conn.acceptJob(nodeId, request.jobId); } cancelJob(request: RpcCancelJob, context: ServerCallContext): Promise { - return this.conn.cancelJob(request.jobId, request.reason); + const nodeId = this.getNodeId(context); + return this.conn.cancelJob(nodeId, request.jobId, request.reason); } outputForJob(request: RpcJobOutput, context: ServerCallContext): Promise { - return this.conn.outputForJob(request.jobId, request.output); + const nodeId = this.getNodeId(context); + return this.conn.outputForJob(nodeId, request.jobId, request.output); } completeJob(request: RpcJobComplete, context: ServerCallContext): Promise { - return this.conn.completeJob(request.jobId, request.output); + const nodeId = this.getNodeId(context); + return this.conn.completeJob(nodeId, request.jobId, request.output); } logForJob(request: RpcJobLog, context: ServerCallContext): Promise { - return this.conn.logForJob(request.jobId, request.log); + const nodeId = this.getNodeId(context); + return this.conn.logForJob(nodeId, request.jobId, request.log); } requestJob(request: RpcRequestJob, context: ServerCallContext): Promise { + const nodeId = this.getNodeId(context); return this.conn.requestJob( + nodeId, request.runOn, request.expireAfter, request.input, request.param, request.description, request.kind, - request.outputFormat + request.outputFormat, ); } @@ -114,6 +138,7 @@ class RpcNostrConnector implements INostrConnector { request: RpcSendSignedEventRequest, context: ServerCallContext ): Promise { + const nodeId = this.getNodeId(context); await this.conn.sendSignedEvent(request.event); return { parentJob: request.parentJob, @@ -125,6 +150,7 @@ class RpcNostrConnector implements INostrConnector { request: RpcSubscribeToEventsRequest, context: ServerCallContext ): Promise { + const nodeId = this.getNodeId(context); const subId = await this.conn.openCustomSubscription(request.parentJob, request.filters); return { parentJob: request.parentJob, @@ -134,6 +160,7 @@ class RpcNostrConnector implements INostrConnector { async getEvents(request: RpcGetEventsRequest, context: ServerCallContext): Promise { + const nodeId = this.getNodeId(context); const events: string[] = await this.conn.getAndConsumeCustomEvents( request.parentJob, request.subscriptionId, @@ -151,11 +178,39 @@ class RpcNostrConnector implements INostrConnector { request: RpcUnsubscribeFromEventsRequest, context: ServerCallContext ): Promise { + const nodeId = this.getNodeId(context); await this.conn.closeCustomSubscription(request.parentJob, request.subscriptionId); return { success: true, }; } + + async announceNode(request: RpcAnnounceNodeRequest, context: ServerCallContext): Promise { + const nodeId = this.getNodeId(context); + const [node, timeout] = await this.conn.registerNode( + nodeId, + request.name, + request.iconUrl, + request.description + ); + return { + success: true, + node: node, + refreshInterval: timeout + }; + } + + async announceEventTemplate(request: RpcAnnounceTemplateRequest, context: ServerCallContext): Promise { + const nodeId = this.getNodeId(context); + const node = this.conn.getNode(nodeId); + if(!node) throw new Error("Node not found"); + const timeout = node.registerTemplate(request.eventTemplate); + return { + success: true, + node: node, + refreshInterval: timeout + }; + } } @@ -164,42 +219,72 @@ export default class RPCServer { port: number; descriptorPath: string; nostrConnector: NostrConnector; - constructor(addr:string, port:number, descriptorPath:string,nostrConnector: NostrConnector) { + caCrt: Buffer | undefined; + serverCrt: Buffer | undefined; + serverKey: Buffer | undefined; + constructor( + addr: string, + port: number, + descriptorPath: string, + nostrConnector: NostrConnector, + caCrt?: Buffer, + serverCrt?: Buffer, + serverKey?: Buffer + ) { this.addr = addr; this.port = port; this.descriptorPath = descriptorPath; - this.nostrConnector=nostrConnector; + this.nostrConnector = nostrConnector; + this.caCrt = caCrt; + this.serverCrt = serverCrt; + this.serverKey = serverKey; } async start() { + return new Promise((resolve, reject) => { - const server = new GRPC.Server({ interceptors: [], }); - server.addService(...GPRCBackend.adaptService(NostrConnectorType, new RpcNostrConnector(this.nostrConnector))); - if(Fs.existsSync(this.descriptorPath)){ + + + server.addService( + ...Auth.adaptService( + GPRCBackend.adaptService(NostrConnectorType, new RpcNostrConnector(this.nostrConnector)) + ) + ); + + if (Fs.existsSync(this.descriptorPath)) { const descriptorSetBuffer = Fs.readFileSync(this.descriptorPath); - const pkg = loadFileDescriptorSetFromBuffer(descriptorSetBuffer); + const pkg = loadFileDescriptorSetFromBuffer(descriptorSetBuffer); const reflection = new ReflectionService(pkg); reflection.addToServer(server); } server.bindAsync( `${this.addr}:${this.port}`, - GRPC.ServerCredentials.createInsecure(), + this.caCrt && this.serverCrt && this.serverKey + ? GRPC.ServerCredentials.createSsl( + this.caCrt, + [ + { + private_key: this.serverKey, + cert_chain: this.serverCrt, + }, + ], + false + ) + : GRPC.ServerCredentials.createInsecure(), (err: Error | null, port: number) => { if (err) { - reject(err); + reject(err); console.error(`Server error: ${err.message}`); } else { resolve(true); console.log(`Server bound on port: ${port}`); } - } ); - }); } } diff --git a/src/Utils.ts b/src/Utils.ts index 9b028cc..2ff7bba 100644 --- a/src/Utils.ts +++ b/src/Utils.ts @@ -1,14 +1,20 @@ import { Event } from "nostr-tools"; import { uuid as uuidv4 } from "uuidv4"; +import Crypto from "crypto"; export default class Utils { - static newUUID(){ + static newUUID() { return uuidv4(); } - static getTagVars( - event: Event, - tagName: Array | string - ): Array> { + static uuidFrom(v:any):string{ + if(typeof v=="string"){ + return Crypto.createHash("sha256").update(v as string).digest("hex"); + }else{ + v=JSON.stringify(v); + return Utils.uuidFrom(v); + } + } + static getTagVars(event: Event, tagName: Array | string): Array> { const results = new Array>(); for (const t of event.tags) { let isMatch = true; @@ -26,10 +32,14 @@ export default class Utils { const values: Array = t.slice(Array.isArray(tagName) ? tagName.length : 1); results.push(values); } - if(results.length==0){ + if (results.length == 0) { results.push([]); } return results; } + static fixParameterizedJSON(json: string): string { + json=json.replace(/(")(%.+_NUMBER%)(")/gim, "$2"); + return json; + } } diff --git a/src/main.ts b/src/main.ts index d323080..7b4c451 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,31 +1,32 @@ import RPCServer from "./RPCServer"; import Fs from "fs"; -import Express from "express"; import NostrConnector from "./NostrConnector"; import { generateSecretKey } from "nostr-tools"; import { bytesToHex } from '@noble/hashes/utils' async function main(){ - const IP = process.env.NOSTR_CONNECT_GRPC_BINDING_ADDRESS || "0.0.0.0"; - const PORT = Number(process.env.NOSTR_CONNECT_GRPC_BINDING_PORT || 5000); - const DESCRIPTOR_PATH= process.env.NOSTR_CONNECT_GRPC_DESCRIPTOR_PATH || "./docs/descriptor.pb"; - const SECRET_KEY = process.env.NOSTR_CONNECT_SECRET_KEY || bytesToHex(generateSecretKey()); - const RELAYS = (process.env.NOSTR_CONNECT_RELAYS || "wss://nostr.rblb.it:7777").split(","); + const IP = process.env.GRPC_BINDING_ADDRESS || "0.0.0.0"; + const PORT = Number(process.env.GRPC_BINDING_PORT || 5000); + const DESCRIPTOR_PATH= process.env.GRPC_PROTO_DESCRIPTOR_PATH || "./docs/descriptor.pb"; + const SECRET_KEY = process.env.NOSTR_SECRET_KEY || bytesToHex(generateSecretKey()); + const RELAYS = (process.env.NOSTR_RELAYS || "wss://nostr.rblb.it:7777").split(","); + + const CA_CRT_PATH: string = process.env.GRPC_CA_CRT || ""; + const SERVER_CRT_PATH: string = process.env.GRPC_SERVER_CRT || ""; + const SERVER_KEY_PATH: string = process.env.GRPC_SERVER_KEY || ""; + + const CA_CRT: Buffer | undefined = + CA_CRT_PATH && Fs.existsSync(CA_CRT_PATH) ? Fs.readFileSync(CA_CRT_PATH) : undefined; + const SERVER_CRT: Buffer | undefined = + SERVER_CRT_PATH && Fs.existsSync(SERVER_CRT_PATH) ? Fs.readFileSync(SERVER_CRT_PATH) : undefined; + const SERVER_KEY: Buffer | undefined = + SERVER_KEY_PATH && Fs.existsSync(SERVER_KEY_PATH) ? Fs.readFileSync(SERVER_KEY_PATH) : undefined; + const nostr = new NostrConnector(SECRET_KEY, RELAYS, undefined); - const server = new RPCServer(IP, PORT, DESCRIPTOR_PATH, nostr); + const server = new RPCServer(IP, PORT, DESCRIPTOR_PATH, nostr, CA_CRT, SERVER_CRT, SERVER_KEY); await server.start(); - const docsPath = process.env.NOSTR_CONNECT_DOCS_PATH||"./docs"; - if(Fs.existsSync(docsPath)){ - const DOCS_PORT = Number(process.env.NOSTR_CONNECT_DOCS_PORT || PORT+1); - console.info(`Loading docs: ${docsPath}`); - const app = Express(); - app.use(Express.static(docsPath)); - app.listen(DOCS_PORT, () => { - console.info(`Docs server started on port ${DOCS_PORT}`); - }); - } } main(); \ No newline at end of file diff --git a/src/proto/Job.ts b/src/proto/Job.ts deleted file mode 100644 index c32bab9..0000000 --- a/src/proto/Job.ts +++ /dev/null @@ -1,226 +0,0 @@ -// @generated by protobuf-ts 2.9.4 with parameter long_type_number,server_generic -// @generated from protobuf file "Job.proto" (syntax proto3) -// tslint:disable -import type { BinaryWriteOptions } from "@protobuf-ts/runtime"; -import type { IBinaryWriter } from "@protobuf-ts/runtime"; -import { WireType } from "@protobuf-ts/runtime"; -import type { BinaryReadOptions } from "@protobuf-ts/runtime"; -import type { IBinaryReader } from "@protobuf-ts/runtime"; -import { UnknownFieldHandler } from "@protobuf-ts/runtime"; -import type { PartialMessage } from "@protobuf-ts/runtime"; -import { reflectionMergePartial } from "@protobuf-ts/runtime"; -import { MessageType } from "@protobuf-ts/runtime"; -import { JobState } from "./JobState"; -import { JobResult } from "./JobResult"; -import { JobParam } from "./JobParam"; -import { JobInput } from "./JobInput"; -/** - * @generated from protobuf message Job - */ -export interface Job { - /** - * @generated from protobuf field: string id = 1; - */ - id: string; - /** - * @generated from protobuf field: uint32 kind = 14; - */ - kind: number; - /** - * @generated from protobuf field: string runOn = 2; - */ - runOn: string; - /** - * @generated from protobuf field: uint64 expiration = 3; - */ - expiration: number; - /** - * @generated from protobuf field: uint64 timestamp = 4; - */ - timestamp: number; - /** - * @generated from protobuf field: repeated JobInput input = 5; - */ - input: JobInput[]; // primary input - /** - * @generated from protobuf field: repeated JobParam param = 6; - */ - param: JobParam[]; // additional parameters - /** - * @generated from protobuf field: string customerPublicKey = 7; - */ - customerPublicKey: string; - /** - * @generated from protobuf field: string description = 8; - */ - description: string; - /** - * @generated from protobuf field: string provider = 9; - */ - provider: string; - /** - * @generated from protobuf field: repeated string relays = 10; - */ - relays: string[]; - /** - * @generated from protobuf field: JobResult result = 12; - */ - result?: JobResult; - /** - * @generated from protobuf field: JobState state = 11; - */ - state?: JobState; - /** - * @generated from protobuf field: uint64 maxExecutionTime = 13; - */ - maxExecutionTime: number; // enforced by the provider -} -// @generated message type with reflection information, may provide speed optimized methods -class Job$Type extends MessageType { - constructor() { - super("Job", [ - { no: 1, name: "id", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, - { no: 14, name: "kind", kind: "scalar", T: 13 /*ScalarType.UINT32*/ }, - { no: 2, name: "runOn", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, - { no: 3, name: "expiration", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 2 /*LongType.NUMBER*/ }, - { no: 4, name: "timestamp", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 2 /*LongType.NUMBER*/ }, - { no: 5, name: "input", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => JobInput }, - { no: 6, name: "param", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => JobParam }, - { no: 7, name: "customerPublicKey", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, - { no: 8, name: "description", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, - { no: 9, name: "provider", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, - { no: 10, name: "relays", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/ }, - { no: 12, name: "result", kind: "message", T: () => JobResult }, - { no: 11, name: "state", kind: "message", T: () => JobState }, - { no: 13, name: "maxExecutionTime", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 2 /*LongType.NUMBER*/ } - ]); - } - create(value?: PartialMessage): Job { - const message = globalThis.Object.create((this.messagePrototype!)); - message.id = ""; - message.kind = 0; - message.runOn = ""; - message.expiration = 0; - message.timestamp = 0; - message.input = []; - message.param = []; - message.customerPublicKey = ""; - message.description = ""; - message.provider = ""; - message.relays = []; - message.maxExecutionTime = 0; - if (value !== undefined) - reflectionMergePartial(this, message, value); - return message; - } - internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: Job): Job { - let message = target ?? this.create(), end = reader.pos + length; - while (reader.pos < end) { - let [fieldNo, wireType] = reader.tag(); - switch (fieldNo) { - case /* string id */ 1: - message.id = reader.string(); - break; - case /* uint32 kind */ 14: - message.kind = reader.uint32(); - break; - case /* string runOn */ 2: - message.runOn = reader.string(); - break; - case /* uint64 expiration */ 3: - message.expiration = reader.uint64().toNumber(); - break; - case /* uint64 timestamp */ 4: - message.timestamp = reader.uint64().toNumber(); - break; - case /* repeated JobInput input */ 5: - message.input.push(JobInput.internalBinaryRead(reader, reader.uint32(), options)); - break; - case /* repeated JobParam param */ 6: - message.param.push(JobParam.internalBinaryRead(reader, reader.uint32(), options)); - break; - case /* string customerPublicKey */ 7: - message.customerPublicKey = reader.string(); - break; - case /* string description */ 8: - message.description = reader.string(); - break; - case /* string provider */ 9: - message.provider = reader.string(); - break; - case /* repeated string relays */ 10: - message.relays.push(reader.string()); - break; - case /* JobResult result */ 12: - message.result = JobResult.internalBinaryRead(reader, reader.uint32(), options, message.result); - break; - case /* JobState state */ 11: - message.state = JobState.internalBinaryRead(reader, reader.uint32(), options, message.state); - break; - case /* uint64 maxExecutionTime */ 13: - message.maxExecutionTime = reader.uint64().toNumber(); - break; - default: - let u = options.readUnknownField; - if (u === "throw") - throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); - let d = reader.skip(wireType); - if (u !== false) - (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); - } - } - return message; - } - internalBinaryWrite(message: Job, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { - /* string id = 1; */ - if (message.id !== "") - writer.tag(1, WireType.LengthDelimited).string(message.id); - /* uint32 kind = 14; */ - if (message.kind !== 0) - writer.tag(14, WireType.Varint).uint32(message.kind); - /* string runOn = 2; */ - if (message.runOn !== "") - writer.tag(2, WireType.LengthDelimited).string(message.runOn); - /* uint64 expiration = 3; */ - if (message.expiration !== 0) - writer.tag(3, WireType.Varint).uint64(message.expiration); - /* uint64 timestamp = 4; */ - if (message.timestamp !== 0) - writer.tag(4, WireType.Varint).uint64(message.timestamp); - /* repeated JobInput input = 5; */ - for (let i = 0; i < message.input.length; i++) - JobInput.internalBinaryWrite(message.input[i], writer.tag(5, WireType.LengthDelimited).fork(), options).join(); - /* repeated JobParam param = 6; */ - for (let i = 0; i < message.param.length; i++) - JobParam.internalBinaryWrite(message.param[i], writer.tag(6, WireType.LengthDelimited).fork(), options).join(); - /* string customerPublicKey = 7; */ - if (message.customerPublicKey !== "") - writer.tag(7, WireType.LengthDelimited).string(message.customerPublicKey); - /* string description = 8; */ - if (message.description !== "") - writer.tag(8, WireType.LengthDelimited).string(message.description); - /* string provider = 9; */ - if (message.provider !== "") - writer.tag(9, WireType.LengthDelimited).string(message.provider); - /* repeated string relays = 10; */ - for (let i = 0; i < message.relays.length; i++) - writer.tag(10, WireType.LengthDelimited).string(message.relays[i]); - /* JobResult result = 12; */ - if (message.result) - JobResult.internalBinaryWrite(message.result, writer.tag(12, WireType.LengthDelimited).fork(), options).join(); - /* JobState state = 11; */ - if (message.state) - JobState.internalBinaryWrite(message.state, writer.tag(11, WireType.LengthDelimited).fork(), options).join(); - /* uint64 maxExecutionTime = 13; */ - if (message.maxExecutionTime !== 0) - writer.tag(13, WireType.Varint).uint64(message.maxExecutionTime); - let u = options.writeUnknownFields; - if (u !== false) - (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); - return writer; - } -} -/** - * @generated MessageType for protobuf message Job - */ -export const Job = new Job$Type(); diff --git a/src/proto/JobInput.ts b/src/proto/JobInput.ts deleted file mode 100644 index b078c1c..0000000 --- a/src/proto/JobInput.ts +++ /dev/null @@ -1,113 +0,0 @@ -// @generated by protobuf-ts 2.9.4 with parameter long_type_number,server_generic -// @generated from protobuf file "JobInput.proto" (syntax proto3) -// tslint:disable -import type { BinaryWriteOptions } from "@protobuf-ts/runtime"; -import type { IBinaryWriter } from "@protobuf-ts/runtime"; -import { WireType } from "@protobuf-ts/runtime"; -import type { BinaryReadOptions } from "@protobuf-ts/runtime"; -import type { IBinaryReader } from "@protobuf-ts/runtime"; -import { UnknownFieldHandler } from "@protobuf-ts/runtime"; -import type { PartialMessage } from "@protobuf-ts/runtime"; -import { reflectionMergePartial } from "@protobuf-ts/runtime"; -import { MessageType } from "@protobuf-ts/runtime"; -/** - * @generated from protobuf message JobInput - */ -export interface JobInput { - /** - * @generated from protobuf field: optional string data = 1; - */ - data?: string; - /** - * @generated from protobuf field: optional string ref = 2; - */ - ref?: string; - /** - * @generated from protobuf field: string type = 3; - */ - type: string; - /** - * @generated from protobuf field: string marker = 4; - */ - marker: string; - /** - * @generated from protobuf field: optional string source = 5; - */ - source?: string; -} -// @generated message type with reflection information, may provide speed optimized methods -class JobInput$Type extends MessageType { - constructor() { - super("JobInput", [ - { no: 1, name: "data", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ }, - { no: 2, name: "ref", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ }, - { no: 3, name: "type", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, - { no: 4, name: "marker", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, - { no: 5, name: "source", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ } - ]); - } - create(value?: PartialMessage): JobInput { - const message = globalThis.Object.create((this.messagePrototype!)); - message.type = ""; - message.marker = ""; - if (value !== undefined) - reflectionMergePartial(this, message, value); - return message; - } - internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: JobInput): JobInput { - let message = target ?? this.create(), end = reader.pos + length; - while (reader.pos < end) { - let [fieldNo, wireType] = reader.tag(); - switch (fieldNo) { - case /* optional string data */ 1: - message.data = reader.string(); - break; - case /* optional string ref */ 2: - message.ref = reader.string(); - break; - case /* string type */ 3: - message.type = reader.string(); - break; - case /* string marker */ 4: - message.marker = reader.string(); - break; - case /* optional string source */ 5: - message.source = reader.string(); - break; - default: - let u = options.readUnknownField; - if (u === "throw") - throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); - let d = reader.skip(wireType); - if (u !== false) - (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); - } - } - return message; - } - internalBinaryWrite(message: JobInput, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { - /* optional string data = 1; */ - if (message.data !== undefined) - writer.tag(1, WireType.LengthDelimited).string(message.data); - /* optional string ref = 2; */ - if (message.ref !== undefined) - writer.tag(2, WireType.LengthDelimited).string(message.ref); - /* string type = 3; */ - if (message.type !== "") - writer.tag(3, WireType.LengthDelimited).string(message.type); - /* string marker = 4; */ - if (message.marker !== "") - writer.tag(4, WireType.LengthDelimited).string(message.marker); - /* optional string source = 5; */ - if (message.source !== undefined) - writer.tag(5, WireType.LengthDelimited).string(message.source); - let u = options.writeUnknownFields; - if (u !== false) - (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); - return writer; - } -} -/** - * @generated MessageType for protobuf message JobInput - */ -export const JobInput = new JobInput$Type(); diff --git a/src/proto/JobParam.ts b/src/proto/JobParam.ts deleted file mode 100644 index 97a5754..0000000 --- a/src/proto/JobParam.ts +++ /dev/null @@ -1,80 +0,0 @@ -// @generated by protobuf-ts 2.9.4 with parameter long_type_number,server_generic -// @generated from protobuf file "JobParam.proto" (syntax proto3) -// tslint:disable -import type { BinaryWriteOptions } from "@protobuf-ts/runtime"; -import type { IBinaryWriter } from "@protobuf-ts/runtime"; -import { WireType } from "@protobuf-ts/runtime"; -import type { BinaryReadOptions } from "@protobuf-ts/runtime"; -import type { IBinaryReader } from "@protobuf-ts/runtime"; -import { UnknownFieldHandler } from "@protobuf-ts/runtime"; -import type { PartialMessage } from "@protobuf-ts/runtime"; -import { reflectionMergePartial } from "@protobuf-ts/runtime"; -import { MessageType } from "@protobuf-ts/runtime"; -/** - * @generated from protobuf message JobParam - */ -export interface JobParam { - /** - * @generated from protobuf field: string key = 1; - */ - key: string; - /** - * @generated from protobuf field: repeated string value = 2; - */ - value: string[]; -} -// @generated message type with reflection information, may provide speed optimized methods -class JobParam$Type extends MessageType { - constructor() { - super("JobParam", [ - { no: 1, name: "key", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, - { no: 2, name: "value", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/ } - ]); - } - create(value?: PartialMessage): JobParam { - const message = globalThis.Object.create((this.messagePrototype!)); - message.key = ""; - message.value = []; - if (value !== undefined) - reflectionMergePartial(this, message, value); - return message; - } - internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: JobParam): JobParam { - let message = target ?? this.create(), end = reader.pos + length; - while (reader.pos < end) { - let [fieldNo, wireType] = reader.tag(); - switch (fieldNo) { - case /* string key */ 1: - message.key = reader.string(); - break; - case /* repeated string value */ 2: - message.value.push(reader.string()); - break; - default: - let u = options.readUnknownField; - if (u === "throw") - throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); - let d = reader.skip(wireType); - if (u !== false) - (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); - } - } - return message; - } - internalBinaryWrite(message: JobParam, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { - /* string key = 1; */ - if (message.key !== "") - writer.tag(1, WireType.LengthDelimited).string(message.key); - /* repeated string value = 2; */ - for (let i = 0; i < message.value.length; i++) - writer.tag(2, WireType.LengthDelimited).string(message.value[i]); - let u = options.writeUnknownFields; - if (u !== false) - (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); - return writer; - } -} -/** - * @generated MessageType for protobuf message JobParam - */ -export const JobParam = new JobParam$Type(); diff --git a/src/proto/JobResult.ts b/src/proto/JobResult.ts deleted file mode 100644 index a7650bb..0000000 --- a/src/proto/JobResult.ts +++ /dev/null @@ -1,92 +0,0 @@ -// @generated by protobuf-ts 2.9.4 with parameter long_type_number,server_generic -// @generated from protobuf file "JobResult.proto" (syntax proto3) -// tslint:disable -import type { BinaryWriteOptions } from "@protobuf-ts/runtime"; -import type { IBinaryWriter } from "@protobuf-ts/runtime"; -import { WireType } from "@protobuf-ts/runtime"; -import type { BinaryReadOptions } from "@protobuf-ts/runtime"; -import type { IBinaryReader } from "@protobuf-ts/runtime"; -import { UnknownFieldHandler } from "@protobuf-ts/runtime"; -import type { PartialMessage } from "@protobuf-ts/runtime"; -import { reflectionMergePartial } from "@protobuf-ts/runtime"; -import { MessageType } from "@protobuf-ts/runtime"; -/** - * @generated from protobuf message JobResult - */ -export interface JobResult { - /** - * @generated from protobuf field: string content = 1; - */ - content: string; - /** - * @generated from protobuf field: uint64 timestamp = 2; - */ - timestamp: number; - /** - * @generated from protobuf field: string id = 3; - */ - id: string; -} -// @generated message type with reflection information, may provide speed optimized methods -class JobResult$Type extends MessageType { - constructor() { - super("JobResult", [ - { no: 1, name: "content", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, - { no: 2, name: "timestamp", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 2 /*LongType.NUMBER*/ }, - { no: 3, name: "id", kind: "scalar", T: 9 /*ScalarType.STRING*/ } - ]); - } - create(value?: PartialMessage): JobResult { - const message = globalThis.Object.create((this.messagePrototype!)); - message.content = ""; - message.timestamp = 0; - message.id = ""; - if (value !== undefined) - reflectionMergePartial(this, message, value); - return message; - } - internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: JobResult): JobResult { - let message = target ?? this.create(), end = reader.pos + length; - while (reader.pos < end) { - let [fieldNo, wireType] = reader.tag(); - switch (fieldNo) { - case /* string content */ 1: - message.content = reader.string(); - break; - case /* uint64 timestamp */ 2: - message.timestamp = reader.uint64().toNumber(); - break; - case /* string id */ 3: - message.id = reader.string(); - break; - default: - let u = options.readUnknownField; - if (u === "throw") - throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); - let d = reader.skip(wireType); - if (u !== false) - (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); - } - } - return message; - } - internalBinaryWrite(message: JobResult, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { - /* string content = 1; */ - if (message.content !== "") - writer.tag(1, WireType.LengthDelimited).string(message.content); - /* uint64 timestamp = 2; */ - if (message.timestamp !== 0) - writer.tag(2, WireType.Varint).uint64(message.timestamp); - /* string id = 3; */ - if (message.id !== "") - writer.tag(3, WireType.LengthDelimited).string(message.id); - let u = options.writeUnknownFields; - if (u !== false) - (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); - return writer; - } -} -/** - * @generated MessageType for protobuf message JobResult - */ -export const JobResult = new JobResult$Type(); diff --git a/src/proto/JobState.ts b/src/proto/JobState.ts deleted file mode 100644 index 177f42a..0000000 --- a/src/proto/JobState.ts +++ /dev/null @@ -1,118 +0,0 @@ -// @generated by protobuf-ts 2.9.4 with parameter long_type_number,server_generic -// @generated from protobuf file "JobState.proto" (syntax proto3) -// tslint:disable -import type { BinaryWriteOptions } from "@protobuf-ts/runtime"; -import type { IBinaryWriter } from "@protobuf-ts/runtime"; -import { WireType } from "@protobuf-ts/runtime"; -import type { BinaryReadOptions } from "@protobuf-ts/runtime"; -import type { IBinaryReader } from "@protobuf-ts/runtime"; -import { UnknownFieldHandler } from "@protobuf-ts/runtime"; -import type { PartialMessage } from "@protobuf-ts/runtime"; -import { reflectionMergePartial } from "@protobuf-ts/runtime"; -import { MessageType } from "@protobuf-ts/runtime"; -import { Log } from "./Log"; -import { JobStatus } from "./JobStatus"; -/** - * @generated from protobuf message JobState - */ -export interface JobState { - /** - * @generated from protobuf field: uint64 acceptedAt = 13; - */ - acceptedAt: number; - /** - * @generated from protobuf field: string acceptedBy = 14; - */ - acceptedBy: string; - /** - * @generated from protobuf field: JobStatus status = 15; - */ - status: JobStatus; - /** - * @generated from protobuf field: repeated Log logs = 17; - */ - logs: Log[]; - /** - * @generated from protobuf field: uint64 timestamp = 18; - */ - timestamp: number; -} -// @generated message type with reflection information, may provide speed optimized methods -class JobState$Type extends MessageType { - constructor() { - super("JobState", [ - { no: 13, name: "acceptedAt", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 2 /*LongType.NUMBER*/ }, - { no: 14, name: "acceptedBy", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, - { no: 15, name: "status", kind: "enum", T: () => ["JobStatus", JobStatus] }, - { no: 17, name: "logs", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => Log }, - { no: 18, name: "timestamp", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 2 /*LongType.NUMBER*/ } - ]); - } - create(value?: PartialMessage): JobState { - const message = globalThis.Object.create((this.messagePrototype!)); - message.acceptedAt = 0; - message.acceptedBy = ""; - message.status = 0; - message.logs = []; - message.timestamp = 0; - if (value !== undefined) - reflectionMergePartial(this, message, value); - return message; - } - internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: JobState): JobState { - let message = target ?? this.create(), end = reader.pos + length; - while (reader.pos < end) { - let [fieldNo, wireType] = reader.tag(); - switch (fieldNo) { - case /* uint64 acceptedAt */ 13: - message.acceptedAt = reader.uint64().toNumber(); - break; - case /* string acceptedBy */ 14: - message.acceptedBy = reader.string(); - break; - case /* JobStatus status */ 15: - message.status = reader.int32(); - break; - case /* repeated Log logs */ 17: - message.logs.push(Log.internalBinaryRead(reader, reader.uint32(), options)); - break; - case /* uint64 timestamp */ 18: - message.timestamp = reader.uint64().toNumber(); - break; - default: - let u = options.readUnknownField; - if (u === "throw") - throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); - let d = reader.skip(wireType); - if (u !== false) - (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); - } - } - return message; - } - internalBinaryWrite(message: JobState, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { - /* uint64 acceptedAt = 13; */ - if (message.acceptedAt !== 0) - writer.tag(13, WireType.Varint).uint64(message.acceptedAt); - /* string acceptedBy = 14; */ - if (message.acceptedBy !== "") - writer.tag(14, WireType.LengthDelimited).string(message.acceptedBy); - /* JobStatus status = 15; */ - if (message.status !== 0) - writer.tag(15, WireType.Varint).int32(message.status); - /* repeated Log logs = 17; */ - for (let i = 0; i < message.logs.length; i++) - Log.internalBinaryWrite(message.logs[i], writer.tag(17, WireType.LengthDelimited).fork(), options).join(); - /* uint64 timestamp = 18; */ - if (message.timestamp !== 0) - writer.tag(18, WireType.Varint).uint64(message.timestamp); - let u = options.writeUnknownFields; - if (u !== false) - (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); - return writer; - } -} -/** - * @generated MessageType for protobuf message JobState - */ -export const JobState = new JobState$Type(); diff --git a/src/proto/JobStatus.ts b/src/proto/JobStatus.ts deleted file mode 100644 index 2c9b637..0000000 --- a/src/proto/JobStatus.ts +++ /dev/null @@ -1,36 +0,0 @@ -// @generated by protobuf-ts 2.9.4 with parameter long_type_number,server_generic -// @generated from protobuf file "JobStatus.proto" (syntax proto3) -// tslint:disable -/** - * @generated from protobuf enum JobStatus - */ -export enum JobStatus { - /** - * @generated from protobuf enum value: PENDING = 0; - */ - PENDING = 0, - /** - * @generated from protobuf enum value: PROCESSING = 1; - */ - PROCESSING = 1, - /** - * @generated from protobuf enum value: ERROR = 2; - */ - ERROR = 2, - /** - * @generated from protobuf enum value: SUCCESS = 3; - */ - SUCCESS = 3, - /** - * @generated from protobuf enum value: PARTIAL = 4; - */ - PARTIAL = 4, - /** - * @generated from protobuf enum value: PAYMENT_REQUIRED = 7; - */ - PAYMENT_REQUIRED = 7, - /** - * @generated from protobuf enum value: UNKNOWN = 99; - */ - UNKNOWN = 99 -} diff --git a/src/proto/Log.ts b/src/proto/Log.ts deleted file mode 100644 index d95820d..0000000 --- a/src/proto/Log.ts +++ /dev/null @@ -1,116 +0,0 @@ -// @generated by protobuf-ts 2.9.4 with parameter long_type_number,server_generic -// @generated from protobuf file "Log.proto" (syntax proto3) -// tslint:disable -import type { BinaryWriteOptions } from "@protobuf-ts/runtime"; -import type { IBinaryWriter } from "@protobuf-ts/runtime"; -import { WireType } from "@protobuf-ts/runtime"; -import type { BinaryReadOptions } from "@protobuf-ts/runtime"; -import type { IBinaryReader } from "@protobuf-ts/runtime"; -import { UnknownFieldHandler } from "@protobuf-ts/runtime"; -import type { PartialMessage } from "@protobuf-ts/runtime"; -import { reflectionMergePartial } from "@protobuf-ts/runtime"; -import { MessageType } from "@protobuf-ts/runtime"; -/** - * @generated from protobuf message Log - */ -export interface Log { - /** - * @generated from protobuf field: string id = 1; - */ - id: string; - /** - * @generated from protobuf field: string log = 2; - */ - log: string; - /** - * @generated from protobuf field: string level = 3; - */ - level: string; - /** - * @generated from protobuf field: uint64 timestamp = 4; - */ - timestamp: number; - /** - * @generated from protobuf field: string source = 5; - */ - source: string; -} -// @generated message type with reflection information, may provide speed optimized methods -class Log$Type extends MessageType { - constructor() { - super("Log", [ - { no: 1, name: "id", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, - { no: 2, name: "log", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, - { no: 3, name: "level", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, - { no: 4, name: "timestamp", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 2 /*LongType.NUMBER*/ }, - { no: 5, name: "source", kind: "scalar", T: 9 /*ScalarType.STRING*/ } - ]); - } - create(value?: PartialMessage): Log { - const message = globalThis.Object.create((this.messagePrototype!)); - message.id = ""; - message.log = ""; - message.level = ""; - message.timestamp = 0; - message.source = ""; - if (value !== undefined) - reflectionMergePartial(this, message, value); - return message; - } - internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: Log): Log { - let message = target ?? this.create(), end = reader.pos + length; - while (reader.pos < end) { - let [fieldNo, wireType] = reader.tag(); - switch (fieldNo) { - case /* string id */ 1: - message.id = reader.string(); - break; - case /* string log */ 2: - message.log = reader.string(); - break; - case /* string level */ 3: - message.level = reader.string(); - break; - case /* uint64 timestamp */ 4: - message.timestamp = reader.uint64().toNumber(); - break; - case /* string source */ 5: - message.source = reader.string(); - break; - default: - let u = options.readUnknownField; - if (u === "throw") - throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); - let d = reader.skip(wireType); - if (u !== false) - (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); - } - } - return message; - } - internalBinaryWrite(message: Log, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { - /* string id = 1; */ - if (message.id !== "") - writer.tag(1, WireType.LengthDelimited).string(message.id); - /* string log = 2; */ - if (message.log !== "") - writer.tag(2, WireType.LengthDelimited).string(message.log); - /* string level = 3; */ - if (message.level !== "") - writer.tag(3, WireType.LengthDelimited).string(message.level); - /* uint64 timestamp = 4; */ - if (message.timestamp !== 0) - writer.tag(4, WireType.Varint).uint64(message.timestamp); - /* string source = 5; */ - if (message.source !== "") - writer.tag(5, WireType.LengthDelimited).string(message.source); - let u = options.writeUnknownFields; - if (u !== false) - (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); - return writer; - } -} -/** - * @generated MessageType for protobuf message Log - */ -export const Log = new Log$Type(); diff --git a/src/proto/rpc.client.ts b/src/proto/rpc.client.ts deleted file mode 100644 index e1866e5..0000000 --- a/src/proto/rpc.client.ts +++ /dev/null @@ -1,194 +0,0 @@ -// @generated by protobuf-ts 2.9.4 with parameter long_type_number,server_generic -// @generated from protobuf file "rpc.proto" (syntax proto3) -// tslint:disable -import type { RpcTransport } from "@protobuf-ts/runtime-rpc"; -import type { ServiceInfo } from "@protobuf-ts/runtime-rpc"; -import { NostrConnector } from "./rpc"; -import type { RpcGetEventsResponse } from "./rpc"; -import type { RpcGetEventsRequest } from "./rpc"; -import type { RpcUnsubscribeFromEventsResponse } from "./rpc"; -import type { RpcUnsubscribeFromEventsRequest } from "./rpc"; -import type { RpcSubscribeToEventsResponse } from "./rpc"; -import type { RpcSubscribeToEventsRequest } from "./rpc"; -import type { RpcSendSignedEventResponse } from "./rpc"; -import type { RpcSendSignedEventRequest } from "./rpc"; -import type { RpcJobLog } from "./rpc"; -import type { RpcJobComplete } from "./rpc"; -import type { RpcJobOutput } from "./rpc"; -import type { RpcCancelJob } from "./rpc"; -import type { RpcAcceptJob } from "./rpc"; -import type { RpcIsJobDone } from "./rpc"; -import type { PendingJobs } from "./rpc"; -import type { RpcGetPendingJobs } from "./rpc"; -import type { RpcGetJob } from "./rpc"; -import { stackIntercept } from "@protobuf-ts/runtime-rpc"; -import type { Job } from "./Job"; -import type { RpcRequestJob } from "./rpc"; -import type { UnaryCall } from "@protobuf-ts/runtime-rpc"; -import type { RpcOptions } from "@protobuf-ts/runtime-rpc"; -/** - * @generated from protobuf service NostrConnector - */ -export interface INostrConnectorClient { - /** - * job management - * - * @generated from protobuf rpc: requestJob(RpcRequestJob) returns (Job); - */ - requestJob(input: RpcRequestJob, options?: RpcOptions): UnaryCall; - /** - * @generated from protobuf rpc: getJob(RpcGetJob) returns (Job); - */ - getJob(input: RpcGetJob, options?: RpcOptions): UnaryCall; - /** - * @generated from protobuf rpc: getPendingJobs(RpcGetPendingJobs) returns (PendingJobs); - */ - getPendingJobs(input: RpcGetPendingJobs, options?: RpcOptions): UnaryCall; - /** - * @generated from protobuf rpc: isJobDone(RpcGetJob) returns (RpcIsJobDone); - */ - isJobDone(input: RpcGetJob, options?: RpcOptions): UnaryCall; - /** - * @generated from protobuf rpc: acceptJob(RpcAcceptJob) returns (Job); - */ - acceptJob(input: RpcAcceptJob, options?: RpcOptions): UnaryCall; - /** - * @generated from protobuf rpc: cancelJob(RpcCancelJob) returns (Job); - */ - cancelJob(input: RpcCancelJob, options?: RpcOptions): UnaryCall; - /** - * @generated from protobuf rpc: outputForJob(RpcJobOutput) returns (Job); - */ - outputForJob(input: RpcJobOutput, options?: RpcOptions): UnaryCall; - /** - * @generated from protobuf rpc: completeJob(RpcJobComplete) returns (Job); - */ - completeJob(input: RpcJobComplete, options?: RpcOptions): UnaryCall; - /** - * @generated from protobuf rpc: logForJob(RpcJobLog) returns (Job); - */ - logForJob(input: RpcJobLog, options?: RpcOptions): UnaryCall; - /** - * generic nostr events - * - * @generated from protobuf rpc: sendSignedEvent(RpcSendSignedEventRequest) returns (RpcSendSignedEventResponse); - */ - sendSignedEvent(input: RpcSendSignedEventRequest, options?: RpcOptions): UnaryCall; - /** - * @generated from protobuf rpc: subscribeToEvents(RpcSubscribeToEventsRequest) returns (RpcSubscribeToEventsResponse); - */ - subscribeToEvents(input: RpcSubscribeToEventsRequest, options?: RpcOptions): UnaryCall; - /** - * @generated from protobuf rpc: unsubscribeFromEvents(RpcUnsubscribeFromEventsRequest) returns (RpcUnsubscribeFromEventsResponse); - */ - unsubscribeFromEvents(input: RpcUnsubscribeFromEventsRequest, options?: RpcOptions): UnaryCall; - /** - * @generated from protobuf rpc: getEvents(RpcGetEventsRequest) returns (RpcGetEventsResponse); - */ - getEvents(input: RpcGetEventsRequest, options?: RpcOptions): UnaryCall; -} -/** - * @generated from protobuf service NostrConnector - */ -export class NostrConnectorClient implements INostrConnectorClient, ServiceInfo { - typeName = NostrConnector.typeName; - methods = NostrConnector.methods; - options = NostrConnector.options; - constructor(private readonly _transport: RpcTransport) { - } - /** - * job management - * - * @generated from protobuf rpc: requestJob(RpcRequestJob) returns (Job); - */ - requestJob(input: RpcRequestJob, options?: RpcOptions): UnaryCall { - const method = this.methods[0], opt = this._transport.mergeOptions(options); - return stackIntercept("unary", this._transport, method, opt, input); - } - /** - * @generated from protobuf rpc: getJob(RpcGetJob) returns (Job); - */ - getJob(input: RpcGetJob, options?: RpcOptions): UnaryCall { - const method = this.methods[1], opt = this._transport.mergeOptions(options); - return stackIntercept("unary", this._transport, method, opt, input); - } - /** - * @generated from protobuf rpc: getPendingJobs(RpcGetPendingJobs) returns (PendingJobs); - */ - getPendingJobs(input: RpcGetPendingJobs, options?: RpcOptions): UnaryCall { - const method = this.methods[2], opt = this._transport.mergeOptions(options); - return stackIntercept("unary", this._transport, method, opt, input); - } - /** - * @generated from protobuf rpc: isJobDone(RpcGetJob) returns (RpcIsJobDone); - */ - isJobDone(input: RpcGetJob, options?: RpcOptions): UnaryCall { - const method = this.methods[3], opt = this._transport.mergeOptions(options); - return stackIntercept("unary", this._transport, method, opt, input); - } - /** - * @generated from protobuf rpc: acceptJob(RpcAcceptJob) returns (Job); - */ - acceptJob(input: RpcAcceptJob, options?: RpcOptions): UnaryCall { - const method = this.methods[4], opt = this._transport.mergeOptions(options); - return stackIntercept("unary", this._transport, method, opt, input); - } - /** - * @generated from protobuf rpc: cancelJob(RpcCancelJob) returns (Job); - */ - cancelJob(input: RpcCancelJob, options?: RpcOptions): UnaryCall { - const method = this.methods[5], opt = this._transport.mergeOptions(options); - return stackIntercept("unary", this._transport, method, opt, input); - } - /** - * @generated from protobuf rpc: outputForJob(RpcJobOutput) returns (Job); - */ - outputForJob(input: RpcJobOutput, options?: RpcOptions): UnaryCall { - const method = this.methods[6], opt = this._transport.mergeOptions(options); - return stackIntercept("unary", this._transport, method, opt, input); - } - /** - * @generated from protobuf rpc: completeJob(RpcJobComplete) returns (Job); - */ - completeJob(input: RpcJobComplete, options?: RpcOptions): UnaryCall { - const method = this.methods[7], opt = this._transport.mergeOptions(options); - return stackIntercept("unary", this._transport, method, opt, input); - } - /** - * @generated from protobuf rpc: logForJob(RpcJobLog) returns (Job); - */ - logForJob(input: RpcJobLog, options?: RpcOptions): UnaryCall { - const method = this.methods[8], opt = this._transport.mergeOptions(options); - return stackIntercept("unary", this._transport, method, opt, input); - } - /** - * generic nostr events - * - * @generated from protobuf rpc: sendSignedEvent(RpcSendSignedEventRequest) returns (RpcSendSignedEventResponse); - */ - sendSignedEvent(input: RpcSendSignedEventRequest, options?: RpcOptions): UnaryCall { - const method = this.methods[9], opt = this._transport.mergeOptions(options); - return stackIntercept("unary", this._transport, method, opt, input); - } - /** - * @generated from protobuf rpc: subscribeToEvents(RpcSubscribeToEventsRequest) returns (RpcSubscribeToEventsResponse); - */ - subscribeToEvents(input: RpcSubscribeToEventsRequest, options?: RpcOptions): UnaryCall { - const method = this.methods[10], opt = this._transport.mergeOptions(options); - return stackIntercept("unary", this._transport, method, opt, input); - } - /** - * @generated from protobuf rpc: unsubscribeFromEvents(RpcUnsubscribeFromEventsRequest) returns (RpcUnsubscribeFromEventsResponse); - */ - unsubscribeFromEvents(input: RpcUnsubscribeFromEventsRequest, options?: RpcOptions): UnaryCall { - const method = this.methods[11], opt = this._transport.mergeOptions(options); - return stackIntercept("unary", this._transport, method, opt, input); - } - /** - * @generated from protobuf rpc: getEvents(RpcGetEventsRequest) returns (RpcGetEventsResponse); - */ - getEvents(input: RpcGetEventsRequest, options?: RpcOptions): UnaryCall { - const method = this.methods[12], opt = this._transport.mergeOptions(options); - return stackIntercept("unary", this._transport, method, opt, input); - } -} diff --git a/src/proto/rpc.server.ts b/src/proto/rpc.server.ts deleted file mode 100644 index 6be63b7..0000000 --- a/src/proto/rpc.server.ts +++ /dev/null @@ -1,84 +0,0 @@ -// @generated by protobuf-ts 2.9.4 with parameter long_type_number,server_generic -// @generated from protobuf file "rpc.proto" (syntax proto3) -// tslint:disable -import { RpcGetEventsResponse } from "./rpc"; -import { RpcGetEventsRequest } from "./rpc"; -import { RpcUnsubscribeFromEventsResponse } from "./rpc"; -import { RpcUnsubscribeFromEventsRequest } from "./rpc"; -import { RpcSubscribeToEventsResponse } from "./rpc"; -import { RpcSubscribeToEventsRequest } from "./rpc"; -import { RpcSendSignedEventResponse } from "./rpc"; -import { RpcSendSignedEventRequest } from "./rpc"; -import { RpcJobLog } from "./rpc"; -import { RpcJobComplete } from "./rpc"; -import { RpcJobOutput } from "./rpc"; -import { RpcCancelJob } from "./rpc"; -import { RpcAcceptJob } from "./rpc"; -import { RpcIsJobDone } from "./rpc"; -import { PendingJobs } from "./rpc"; -import { RpcGetPendingJobs } from "./rpc"; -import { RpcGetJob } from "./rpc"; -import { Job } from "./Job"; -import { RpcRequestJob } from "./rpc"; -import { ServerCallContext } from "@protobuf-ts/runtime-rpc"; -/** - * @generated from protobuf service NostrConnector - */ -export interface INostrConnector { - /** - * job management - * - * @generated from protobuf rpc: requestJob(RpcRequestJob) returns (Job); - */ - requestJob(request: RpcRequestJob, context: T): Promise; - /** - * @generated from protobuf rpc: getJob(RpcGetJob) returns (Job); - */ - getJob(request: RpcGetJob, context: T): Promise; - /** - * @generated from protobuf rpc: getPendingJobs(RpcGetPendingJobs) returns (PendingJobs); - */ - getPendingJobs(request: RpcGetPendingJobs, context: T): Promise; - /** - * @generated from protobuf rpc: isJobDone(RpcGetJob) returns (RpcIsJobDone); - */ - isJobDone(request: RpcGetJob, context: T): Promise; - /** - * @generated from protobuf rpc: acceptJob(RpcAcceptJob) returns (Job); - */ - acceptJob(request: RpcAcceptJob, context: T): Promise; - /** - * @generated from protobuf rpc: cancelJob(RpcCancelJob) returns (Job); - */ - cancelJob(request: RpcCancelJob, context: T): Promise; - /** - * @generated from protobuf rpc: outputForJob(RpcJobOutput) returns (Job); - */ - outputForJob(request: RpcJobOutput, context: T): Promise; - /** - * @generated from protobuf rpc: completeJob(RpcJobComplete) returns (Job); - */ - completeJob(request: RpcJobComplete, context: T): Promise; - /** - * @generated from protobuf rpc: logForJob(RpcJobLog) returns (Job); - */ - logForJob(request: RpcJobLog, context: T): Promise; - /** - * generic nostr events - * - * @generated from protobuf rpc: sendSignedEvent(RpcSendSignedEventRequest) returns (RpcSendSignedEventResponse); - */ - sendSignedEvent(request: RpcSendSignedEventRequest, context: T): Promise; - /** - * @generated from protobuf rpc: subscribeToEvents(RpcSubscribeToEventsRequest) returns (RpcSubscribeToEventsResponse); - */ - subscribeToEvents(request: RpcSubscribeToEventsRequest, context: T): Promise; - /** - * @generated from protobuf rpc: unsubscribeFromEvents(RpcUnsubscribeFromEventsRequest) returns (RpcUnsubscribeFromEventsResponse); - */ - unsubscribeFromEvents(request: RpcUnsubscribeFromEventsRequest, context: T): Promise; - /** - * @generated from protobuf rpc: getEvents(RpcGetEventsRequest) returns (RpcGetEventsResponse); - */ - getEvents(request: RpcGetEventsRequest, context: T): Promise; -} diff --git a/src/proto/rpc.ts b/src/proto/rpc.ts deleted file mode 100644 index 22a1e95..0000000 --- a/src/proto/rpc.ts +++ /dev/null @@ -1,1334 +0,0 @@ -// @generated by protobuf-ts 2.9.4 with parameter long_type_number,server_generic -// @generated from protobuf file "rpc.proto" (syntax proto3) -// tslint:disable -import { ServiceType } from "@protobuf-ts/runtime-rpc"; -import type { BinaryWriteOptions } from "@protobuf-ts/runtime"; -import type { IBinaryWriter } from "@protobuf-ts/runtime"; -import { WireType } from "@protobuf-ts/runtime"; -import type { BinaryReadOptions } from "@protobuf-ts/runtime"; -import type { IBinaryReader } from "@protobuf-ts/runtime"; -import { UnknownFieldHandler } from "@protobuf-ts/runtime"; -import type { PartialMessage } from "@protobuf-ts/runtime"; -import { reflectionMergePartial } from "@protobuf-ts/runtime"; -import { MessageType } from "@protobuf-ts/runtime"; -import { Job } from "./Job"; -import { JobParam } from "./JobParam"; -import { JobInput } from "./JobInput"; -/** - * @generated from protobuf message RpcRequestJob - */ -export interface RpcRequestJob { - /** - * @generated from protobuf field: string runOn = 1; - */ - runOn: string; - /** - * @generated from protobuf field: uint64 expireAfter = 2; - */ - expireAfter: number; - /** - * @generated from protobuf field: repeated JobInput input = 3; - */ - input: JobInput[]; - /** - * @generated from protobuf field: repeated JobParam param = 4; - */ - param: JobParam[]; - /** - * @generated from protobuf field: string description = 6; - */ - description: string; - /** - * @generated from protobuf field: optional uint32 kind = 7; - */ - kind?: number; - /** - * @generated from protobuf field: optional string outputFormat = 8; - */ - outputFormat?: string; -} -/** - * @generated from protobuf message RpcGetJob - */ -export interface RpcGetJob { - /** - * @generated from protobuf field: string jobId = 1; - */ - jobId: string; -} -/** - * @generated from protobuf message RpcGetPendingJobs - */ -export interface RpcGetPendingJobs { - /** - * @generated from protobuf field: optional string filterByRunOn = 1; - */ - filterByRunOn?: string; - /** - * @generated from protobuf field: optional string filterByCustomer = 2; - */ - filterByCustomer?: string; - /** - * @generated from protobuf field: optional string filterByDescription = 3; - */ - filterByDescription?: string; - /** - * @generated from protobuf field: optional string filterById = 4; - */ - filterById?: string; - /** - * @generated from protobuf field: optional string filterByKind = 5; - */ - filterByKind?: string; -} -/** - * @generated from protobuf message PendingJobs - */ -export interface PendingJobs { - /** - * @generated from protobuf field: repeated Job jobs = 1; - */ - jobs: Job[]; -} -/** - * @generated from protobuf message RpcIsJobDone - */ -export interface RpcIsJobDone { - /** - * @generated from protobuf field: bool isDone = 1; - */ - isDone: boolean; -} -/** - * @generated from protobuf message RpcAcceptJob - */ -export interface RpcAcceptJob { - /** - * @generated from protobuf field: string jobId = 1; - */ - jobId: string; -} -/** - * @generated from protobuf message RpcCancelJob - */ -export interface RpcCancelJob { - /** - * @generated from protobuf field: string jobId = 1; - */ - jobId: string; - /** - * @generated from protobuf field: string reason = 2; - */ - reason: string; -} -/** - * @generated from protobuf message RpcJobOutput - */ -export interface RpcJobOutput { - /** - * @generated from protobuf field: string jobId = 1; - */ - jobId: string; - /** - * @generated from protobuf field: string output = 2; - */ - output: string; -} -/** - * @generated from protobuf message RpcJobComplete - */ -export interface RpcJobComplete { - /** - * @generated from protobuf field: string jobId = 1; - */ - jobId: string; - /** - * @generated from protobuf field: string output = 2; - */ - output: string; - /** - * @generated from protobuf field: optional string info = 3; - */ - info?: string; -} -/** - * @generated from protobuf message RpcJobLog - */ -export interface RpcJobLog { - /** - * @generated from protobuf field: string jobId = 1; - */ - jobId: string; - /** - * @generated from protobuf field: string log = 2; - */ - log: string; -} -/** - * @generated from protobuf message RpcSendSignedEventRequest - */ -export interface RpcSendSignedEventRequest { - /** - * @generated from protobuf field: string parentJob = 1; - */ - parentJob: string; - /** - * @generated from protobuf field: string event = 2; - */ - event: string; -} -/** - * @generated from protobuf message RpcSubscribeToEventsRequest - */ -export interface RpcSubscribeToEventsRequest { - /** - * @generated from protobuf field: string parentJob = 1; - */ - parentJob: string; - /** - * @generated from protobuf field: repeated string filters = 2; - */ - filters: string[]; -} -/** - * @generated from protobuf message RpcSubscribeToEventsResponse - */ -export interface RpcSubscribeToEventsResponse { - /** - * @generated from protobuf field: string parentJob = 1; - */ - parentJob: string; - /** - * @generated from protobuf field: string subscriptionId = 2; - */ - subscriptionId: string; -} -/** - * @generated from protobuf message RpcGetEventsRequest - */ -export interface RpcGetEventsRequest { - /** - * @generated from protobuf field: string parentJob = 1; - */ - parentJob: string; - /** - * @generated from protobuf field: string subscriptionId = 2; - */ - subscriptionId: string; - /** - * @generated from protobuf field: uint32 limit = 3; - */ - limit: number; // optional : 0 or unset means no limit -} -/** - * @generated from protobuf message RpcGetEventsResponse - */ -export interface RpcGetEventsResponse { - /** - * @generated from protobuf field: string parentJob = 1; - */ - parentJob: string; - /** - * @generated from protobuf field: uint32 count = 2; - */ - count: number; - /** - * @generated from protobuf field: string subscriptionId = 3; - */ - subscriptionId: string; - /** - * @generated from protobuf field: repeated string events = 4; - */ - events: string[]; -} -/** - * @generated from protobuf message RpcSendSignedEventResponse - */ -export interface RpcSendSignedEventResponse { - /** - * @generated from protobuf field: string parentJob = 1; - */ - parentJob: string; - /** - * @generated from protobuf field: bool success = 2; - */ - success: boolean; -} -/** - * @generated from protobuf message RpcUnsubscribeFromEventsRequest - */ -export interface RpcUnsubscribeFromEventsRequest { - /** - * @generated from protobuf field: string parentJob = 1; - */ - parentJob: string; - /** - * @generated from protobuf field: string subscriptionId = 2; - */ - subscriptionId: string; -} -/** - * @generated from protobuf message RpcUnsubscribeFromEventsResponse - */ -export interface RpcUnsubscribeFromEventsResponse { - /** - * @generated from protobuf field: bool success = 1; - */ - success: boolean; -} -// @generated message type with reflection information, may provide speed optimized methods -class RpcRequestJob$Type extends MessageType { - constructor() { - super("RpcRequestJob", [ - { no: 1, name: "runOn", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, - { no: 2, name: "expireAfter", kind: "scalar", T: 4 /*ScalarType.UINT64*/, L: 2 /*LongType.NUMBER*/ }, - { no: 3, name: "input", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => JobInput }, - { no: 4, name: "param", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => JobParam }, - { no: 6, name: "description", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, - { no: 7, name: "kind", kind: "scalar", opt: true, T: 13 /*ScalarType.UINT32*/ }, - { no: 8, name: "outputFormat", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ } - ]); - } - create(value?: PartialMessage): RpcRequestJob { - const message = globalThis.Object.create((this.messagePrototype!)); - message.runOn = ""; - message.expireAfter = 0; - message.input = []; - message.param = []; - message.description = ""; - if (value !== undefined) - reflectionMergePartial(this, message, value); - return message; - } - internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: RpcRequestJob): RpcRequestJob { - let message = target ?? this.create(), end = reader.pos + length; - while (reader.pos < end) { - let [fieldNo, wireType] = reader.tag(); - switch (fieldNo) { - case /* string runOn */ 1: - message.runOn = reader.string(); - break; - case /* uint64 expireAfter */ 2: - message.expireAfter = reader.uint64().toNumber(); - break; - case /* repeated JobInput input */ 3: - message.input.push(JobInput.internalBinaryRead(reader, reader.uint32(), options)); - break; - case /* repeated JobParam param */ 4: - message.param.push(JobParam.internalBinaryRead(reader, reader.uint32(), options)); - break; - case /* string description */ 6: - message.description = reader.string(); - break; - case /* optional uint32 kind */ 7: - message.kind = reader.uint32(); - break; - case /* optional string outputFormat */ 8: - message.outputFormat = reader.string(); - break; - default: - let u = options.readUnknownField; - if (u === "throw") - throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); - let d = reader.skip(wireType); - if (u !== false) - (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); - } - } - return message; - } - internalBinaryWrite(message: RpcRequestJob, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { - /* string runOn = 1; */ - if (message.runOn !== "") - writer.tag(1, WireType.LengthDelimited).string(message.runOn); - /* uint64 expireAfter = 2; */ - if (message.expireAfter !== 0) - writer.tag(2, WireType.Varint).uint64(message.expireAfter); - /* repeated JobInput input = 3; */ - for (let i = 0; i < message.input.length; i++) - JobInput.internalBinaryWrite(message.input[i], writer.tag(3, WireType.LengthDelimited).fork(), options).join(); - /* repeated JobParam param = 4; */ - for (let i = 0; i < message.param.length; i++) - JobParam.internalBinaryWrite(message.param[i], writer.tag(4, WireType.LengthDelimited).fork(), options).join(); - /* string description = 6; */ - if (message.description !== "") - writer.tag(6, WireType.LengthDelimited).string(message.description); - /* optional uint32 kind = 7; */ - if (message.kind !== undefined) - writer.tag(7, WireType.Varint).uint32(message.kind); - /* optional string outputFormat = 8; */ - if (message.outputFormat !== undefined) - writer.tag(8, WireType.LengthDelimited).string(message.outputFormat); - let u = options.writeUnknownFields; - if (u !== false) - (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); - return writer; - } -} -/** - * @generated MessageType for protobuf message RpcRequestJob - */ -export const RpcRequestJob = new RpcRequestJob$Type(); -// @generated message type with reflection information, may provide speed optimized methods -class RpcGetJob$Type extends MessageType { - constructor() { - super("RpcGetJob", [ - { no: 1, name: "jobId", kind: "scalar", T: 9 /*ScalarType.STRING*/ } - ]); - } - create(value?: PartialMessage): RpcGetJob { - const message = globalThis.Object.create((this.messagePrototype!)); - message.jobId = ""; - if (value !== undefined) - reflectionMergePartial(this, message, value); - return message; - } - internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: RpcGetJob): RpcGetJob { - let message = target ?? this.create(), end = reader.pos + length; - while (reader.pos < end) { - let [fieldNo, wireType] = reader.tag(); - switch (fieldNo) { - case /* string jobId */ 1: - message.jobId = reader.string(); - break; - default: - let u = options.readUnknownField; - if (u === "throw") - throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); - let d = reader.skip(wireType); - if (u !== false) - (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); - } - } - return message; - } - internalBinaryWrite(message: RpcGetJob, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { - /* string jobId = 1; */ - if (message.jobId !== "") - writer.tag(1, WireType.LengthDelimited).string(message.jobId); - let u = options.writeUnknownFields; - if (u !== false) - (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); - return writer; - } -} -/** - * @generated MessageType for protobuf message RpcGetJob - */ -export const RpcGetJob = new RpcGetJob$Type(); -// @generated message type with reflection information, may provide speed optimized methods -class RpcGetPendingJobs$Type extends MessageType { - constructor() { - super("RpcGetPendingJobs", [ - { no: 1, name: "filterByRunOn", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ }, - { no: 2, name: "filterByCustomer", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ }, - { no: 3, name: "filterByDescription", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ }, - { no: 4, name: "filterById", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ }, - { no: 5, name: "filterByKind", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ } - ]); - } - create(value?: PartialMessage): RpcGetPendingJobs { - const message = globalThis.Object.create((this.messagePrototype!)); - if (value !== undefined) - reflectionMergePartial(this, message, value); - return message; - } - internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: RpcGetPendingJobs): RpcGetPendingJobs { - let message = target ?? this.create(), end = reader.pos + length; - while (reader.pos < end) { - let [fieldNo, wireType] = reader.tag(); - switch (fieldNo) { - case /* optional string filterByRunOn */ 1: - message.filterByRunOn = reader.string(); - break; - case /* optional string filterByCustomer */ 2: - message.filterByCustomer = reader.string(); - break; - case /* optional string filterByDescription */ 3: - message.filterByDescription = reader.string(); - break; - case /* optional string filterById */ 4: - message.filterById = reader.string(); - break; - case /* optional string filterByKind */ 5: - message.filterByKind = reader.string(); - break; - default: - let u = options.readUnknownField; - if (u === "throw") - throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); - let d = reader.skip(wireType); - if (u !== false) - (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); - } - } - return message; - } - internalBinaryWrite(message: RpcGetPendingJobs, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { - /* optional string filterByRunOn = 1; */ - if (message.filterByRunOn !== undefined) - writer.tag(1, WireType.LengthDelimited).string(message.filterByRunOn); - /* optional string filterByCustomer = 2; */ - if (message.filterByCustomer !== undefined) - writer.tag(2, WireType.LengthDelimited).string(message.filterByCustomer); - /* optional string filterByDescription = 3; */ - if (message.filterByDescription !== undefined) - writer.tag(3, WireType.LengthDelimited).string(message.filterByDescription); - /* optional string filterById = 4; */ - if (message.filterById !== undefined) - writer.tag(4, WireType.LengthDelimited).string(message.filterById); - /* optional string filterByKind = 5; */ - if (message.filterByKind !== undefined) - writer.tag(5, WireType.LengthDelimited).string(message.filterByKind); - let u = options.writeUnknownFields; - if (u !== false) - (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); - return writer; - } -} -/** - * @generated MessageType for protobuf message RpcGetPendingJobs - */ -export const RpcGetPendingJobs = new RpcGetPendingJobs$Type(); -// @generated message type with reflection information, may provide speed optimized methods -class PendingJobs$Type extends MessageType { - constructor() { - super("PendingJobs", [ - { no: 1, name: "jobs", kind: "message", repeat: 1 /*RepeatType.PACKED*/, T: () => Job } - ]); - } - create(value?: PartialMessage): PendingJobs { - const message = globalThis.Object.create((this.messagePrototype!)); - message.jobs = []; - if (value !== undefined) - reflectionMergePartial(this, message, value); - return message; - } - internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: PendingJobs): PendingJobs { - let message = target ?? this.create(), end = reader.pos + length; - while (reader.pos < end) { - let [fieldNo, wireType] = reader.tag(); - switch (fieldNo) { - case /* repeated Job jobs */ 1: - message.jobs.push(Job.internalBinaryRead(reader, reader.uint32(), options)); - break; - default: - let u = options.readUnknownField; - if (u === "throw") - throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); - let d = reader.skip(wireType); - if (u !== false) - (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); - } - } - return message; - } - internalBinaryWrite(message: PendingJobs, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { - /* repeated Job jobs = 1; */ - for (let i = 0; i < message.jobs.length; i++) - Job.internalBinaryWrite(message.jobs[i], writer.tag(1, WireType.LengthDelimited).fork(), options).join(); - let u = options.writeUnknownFields; - if (u !== false) - (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); - return writer; - } -} -/** - * @generated MessageType for protobuf message PendingJobs - */ -export const PendingJobs = new PendingJobs$Type(); -// @generated message type with reflection information, may provide speed optimized methods -class RpcIsJobDone$Type extends MessageType { - constructor() { - super("RpcIsJobDone", [ - { no: 1, name: "isDone", kind: "scalar", T: 8 /*ScalarType.BOOL*/ } - ]); - } - create(value?: PartialMessage): RpcIsJobDone { - const message = globalThis.Object.create((this.messagePrototype!)); - message.isDone = false; - if (value !== undefined) - reflectionMergePartial(this, message, value); - return message; - } - internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: RpcIsJobDone): RpcIsJobDone { - let message = target ?? this.create(), end = reader.pos + length; - while (reader.pos < end) { - let [fieldNo, wireType] = reader.tag(); - switch (fieldNo) { - case /* bool isDone */ 1: - message.isDone = reader.bool(); - break; - default: - let u = options.readUnknownField; - if (u === "throw") - throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); - let d = reader.skip(wireType); - if (u !== false) - (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); - } - } - return message; - } - internalBinaryWrite(message: RpcIsJobDone, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { - /* bool isDone = 1; */ - if (message.isDone !== false) - writer.tag(1, WireType.Varint).bool(message.isDone); - let u = options.writeUnknownFields; - if (u !== false) - (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); - return writer; - } -} -/** - * @generated MessageType for protobuf message RpcIsJobDone - */ -export const RpcIsJobDone = new RpcIsJobDone$Type(); -// @generated message type with reflection information, may provide speed optimized methods -class RpcAcceptJob$Type extends MessageType { - constructor() { - super("RpcAcceptJob", [ - { no: 1, name: "jobId", kind: "scalar", T: 9 /*ScalarType.STRING*/ } - ]); - } - create(value?: PartialMessage): RpcAcceptJob { - const message = globalThis.Object.create((this.messagePrototype!)); - message.jobId = ""; - if (value !== undefined) - reflectionMergePartial(this, message, value); - return message; - } - internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: RpcAcceptJob): RpcAcceptJob { - let message = target ?? this.create(), end = reader.pos + length; - while (reader.pos < end) { - let [fieldNo, wireType] = reader.tag(); - switch (fieldNo) { - case /* string jobId */ 1: - message.jobId = reader.string(); - break; - default: - let u = options.readUnknownField; - if (u === "throw") - throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); - let d = reader.skip(wireType); - if (u !== false) - (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); - } - } - return message; - } - internalBinaryWrite(message: RpcAcceptJob, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { - /* string jobId = 1; */ - if (message.jobId !== "") - writer.tag(1, WireType.LengthDelimited).string(message.jobId); - let u = options.writeUnknownFields; - if (u !== false) - (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); - return writer; - } -} -/** - * @generated MessageType for protobuf message RpcAcceptJob - */ -export const RpcAcceptJob = new RpcAcceptJob$Type(); -// @generated message type with reflection information, may provide speed optimized methods -class RpcCancelJob$Type extends MessageType { - constructor() { - super("RpcCancelJob", [ - { no: 1, name: "jobId", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, - { no: 2, name: "reason", kind: "scalar", T: 9 /*ScalarType.STRING*/ } - ]); - } - create(value?: PartialMessage): RpcCancelJob { - const message = globalThis.Object.create((this.messagePrototype!)); - message.jobId = ""; - message.reason = ""; - if (value !== undefined) - reflectionMergePartial(this, message, value); - return message; - } - internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: RpcCancelJob): RpcCancelJob { - let message = target ?? this.create(), end = reader.pos + length; - while (reader.pos < end) { - let [fieldNo, wireType] = reader.tag(); - switch (fieldNo) { - case /* string jobId */ 1: - message.jobId = reader.string(); - break; - case /* string reason */ 2: - message.reason = reader.string(); - break; - default: - let u = options.readUnknownField; - if (u === "throw") - throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); - let d = reader.skip(wireType); - if (u !== false) - (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); - } - } - return message; - } - internalBinaryWrite(message: RpcCancelJob, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { - /* string jobId = 1; */ - if (message.jobId !== "") - writer.tag(1, WireType.LengthDelimited).string(message.jobId); - /* string reason = 2; */ - if (message.reason !== "") - writer.tag(2, WireType.LengthDelimited).string(message.reason); - let u = options.writeUnknownFields; - if (u !== false) - (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); - return writer; - } -} -/** - * @generated MessageType for protobuf message RpcCancelJob - */ -export const RpcCancelJob = new RpcCancelJob$Type(); -// @generated message type with reflection information, may provide speed optimized methods -class RpcJobOutput$Type extends MessageType { - constructor() { - super("RpcJobOutput", [ - { no: 1, name: "jobId", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, - { no: 2, name: "output", kind: "scalar", T: 9 /*ScalarType.STRING*/ } - ]); - } - create(value?: PartialMessage): RpcJobOutput { - const message = globalThis.Object.create((this.messagePrototype!)); - message.jobId = ""; - message.output = ""; - if (value !== undefined) - reflectionMergePartial(this, message, value); - return message; - } - internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: RpcJobOutput): RpcJobOutput { - let message = target ?? this.create(), end = reader.pos + length; - while (reader.pos < end) { - let [fieldNo, wireType] = reader.tag(); - switch (fieldNo) { - case /* string jobId */ 1: - message.jobId = reader.string(); - break; - case /* string output */ 2: - message.output = reader.string(); - break; - default: - let u = options.readUnknownField; - if (u === "throw") - throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); - let d = reader.skip(wireType); - if (u !== false) - (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); - } - } - return message; - } - internalBinaryWrite(message: RpcJobOutput, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { - /* string jobId = 1; */ - if (message.jobId !== "") - writer.tag(1, WireType.LengthDelimited).string(message.jobId); - /* string output = 2; */ - if (message.output !== "") - writer.tag(2, WireType.LengthDelimited).string(message.output); - let u = options.writeUnknownFields; - if (u !== false) - (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); - return writer; - } -} -/** - * @generated MessageType for protobuf message RpcJobOutput - */ -export const RpcJobOutput = new RpcJobOutput$Type(); -// @generated message type with reflection information, may provide speed optimized methods -class RpcJobComplete$Type extends MessageType { - constructor() { - super("RpcJobComplete", [ - { no: 1, name: "jobId", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, - { no: 2, name: "output", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, - { no: 3, name: "info", kind: "scalar", opt: true, T: 9 /*ScalarType.STRING*/ } - ]); - } - create(value?: PartialMessage): RpcJobComplete { - const message = globalThis.Object.create((this.messagePrototype!)); - message.jobId = ""; - message.output = ""; - if (value !== undefined) - reflectionMergePartial(this, message, value); - return message; - } - internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: RpcJobComplete): RpcJobComplete { - let message = target ?? this.create(), end = reader.pos + length; - while (reader.pos < end) { - let [fieldNo, wireType] = reader.tag(); - switch (fieldNo) { - case /* string jobId */ 1: - message.jobId = reader.string(); - break; - case /* string output */ 2: - message.output = reader.string(); - break; - case /* optional string info */ 3: - message.info = reader.string(); - break; - default: - let u = options.readUnknownField; - if (u === "throw") - throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); - let d = reader.skip(wireType); - if (u !== false) - (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); - } - } - return message; - } - internalBinaryWrite(message: RpcJobComplete, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { - /* string jobId = 1; */ - if (message.jobId !== "") - writer.tag(1, WireType.LengthDelimited).string(message.jobId); - /* string output = 2; */ - if (message.output !== "") - writer.tag(2, WireType.LengthDelimited).string(message.output); - /* optional string info = 3; */ - if (message.info !== undefined) - writer.tag(3, WireType.LengthDelimited).string(message.info); - let u = options.writeUnknownFields; - if (u !== false) - (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); - return writer; - } -} -/** - * @generated MessageType for protobuf message RpcJobComplete - */ -export const RpcJobComplete = new RpcJobComplete$Type(); -// @generated message type with reflection information, may provide speed optimized methods -class RpcJobLog$Type extends MessageType { - constructor() { - super("RpcJobLog", [ - { no: 1, name: "jobId", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, - { no: 2, name: "log", kind: "scalar", T: 9 /*ScalarType.STRING*/ } - ]); - } - create(value?: PartialMessage): RpcJobLog { - const message = globalThis.Object.create((this.messagePrototype!)); - message.jobId = ""; - message.log = ""; - if (value !== undefined) - reflectionMergePartial(this, message, value); - return message; - } - internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: RpcJobLog): RpcJobLog { - let message = target ?? this.create(), end = reader.pos + length; - while (reader.pos < end) { - let [fieldNo, wireType] = reader.tag(); - switch (fieldNo) { - case /* string jobId */ 1: - message.jobId = reader.string(); - break; - case /* string log */ 2: - message.log = reader.string(); - break; - default: - let u = options.readUnknownField; - if (u === "throw") - throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); - let d = reader.skip(wireType); - if (u !== false) - (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); - } - } - return message; - } - internalBinaryWrite(message: RpcJobLog, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { - /* string jobId = 1; */ - if (message.jobId !== "") - writer.tag(1, WireType.LengthDelimited).string(message.jobId); - /* string log = 2; */ - if (message.log !== "") - writer.tag(2, WireType.LengthDelimited).string(message.log); - let u = options.writeUnknownFields; - if (u !== false) - (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); - return writer; - } -} -/** - * @generated MessageType for protobuf message RpcJobLog - */ -export const RpcJobLog = new RpcJobLog$Type(); -// @generated message type with reflection information, may provide speed optimized methods -class RpcSendSignedEventRequest$Type extends MessageType { - constructor() { - super("RpcSendSignedEventRequest", [ - { no: 1, name: "parentJob", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, - { no: 2, name: "event", kind: "scalar", T: 9 /*ScalarType.STRING*/ } - ]); - } - create(value?: PartialMessage): RpcSendSignedEventRequest { - const message = globalThis.Object.create((this.messagePrototype!)); - message.parentJob = ""; - message.event = ""; - if (value !== undefined) - reflectionMergePartial(this, message, value); - return message; - } - internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: RpcSendSignedEventRequest): RpcSendSignedEventRequest { - let message = target ?? this.create(), end = reader.pos + length; - while (reader.pos < end) { - let [fieldNo, wireType] = reader.tag(); - switch (fieldNo) { - case /* string parentJob */ 1: - message.parentJob = reader.string(); - break; - case /* string event */ 2: - message.event = reader.string(); - break; - default: - let u = options.readUnknownField; - if (u === "throw") - throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); - let d = reader.skip(wireType); - if (u !== false) - (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); - } - } - return message; - } - internalBinaryWrite(message: RpcSendSignedEventRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { - /* string parentJob = 1; */ - if (message.parentJob !== "") - writer.tag(1, WireType.LengthDelimited).string(message.parentJob); - /* string event = 2; */ - if (message.event !== "") - writer.tag(2, WireType.LengthDelimited).string(message.event); - let u = options.writeUnknownFields; - if (u !== false) - (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); - return writer; - } -} -/** - * @generated MessageType for protobuf message RpcSendSignedEventRequest - */ -export const RpcSendSignedEventRequest = new RpcSendSignedEventRequest$Type(); -// @generated message type with reflection information, may provide speed optimized methods -class RpcSubscribeToEventsRequest$Type extends MessageType { - constructor() { - super("RpcSubscribeToEventsRequest", [ - { no: 1, name: "parentJob", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, - { no: 2, name: "filters", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/ } - ]); - } - create(value?: PartialMessage): RpcSubscribeToEventsRequest { - const message = globalThis.Object.create((this.messagePrototype!)); - message.parentJob = ""; - message.filters = []; - if (value !== undefined) - reflectionMergePartial(this, message, value); - return message; - } - internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: RpcSubscribeToEventsRequest): RpcSubscribeToEventsRequest { - let message = target ?? this.create(), end = reader.pos + length; - while (reader.pos < end) { - let [fieldNo, wireType] = reader.tag(); - switch (fieldNo) { - case /* string parentJob */ 1: - message.parentJob = reader.string(); - break; - case /* repeated string filters */ 2: - message.filters.push(reader.string()); - break; - default: - let u = options.readUnknownField; - if (u === "throw") - throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); - let d = reader.skip(wireType); - if (u !== false) - (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); - } - } - return message; - } - internalBinaryWrite(message: RpcSubscribeToEventsRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { - /* string parentJob = 1; */ - if (message.parentJob !== "") - writer.tag(1, WireType.LengthDelimited).string(message.parentJob); - /* repeated string filters = 2; */ - for (let i = 0; i < message.filters.length; i++) - writer.tag(2, WireType.LengthDelimited).string(message.filters[i]); - let u = options.writeUnknownFields; - if (u !== false) - (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); - return writer; - } -} -/** - * @generated MessageType for protobuf message RpcSubscribeToEventsRequest - */ -export const RpcSubscribeToEventsRequest = new RpcSubscribeToEventsRequest$Type(); -// @generated message type with reflection information, may provide speed optimized methods -class RpcSubscribeToEventsResponse$Type extends MessageType { - constructor() { - super("RpcSubscribeToEventsResponse", [ - { no: 1, name: "parentJob", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, - { no: 2, name: "subscriptionId", kind: "scalar", T: 9 /*ScalarType.STRING*/ } - ]); - } - create(value?: PartialMessage): RpcSubscribeToEventsResponse { - const message = globalThis.Object.create((this.messagePrototype!)); - message.parentJob = ""; - message.subscriptionId = ""; - if (value !== undefined) - reflectionMergePartial(this, message, value); - return message; - } - internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: RpcSubscribeToEventsResponse): RpcSubscribeToEventsResponse { - let message = target ?? this.create(), end = reader.pos + length; - while (reader.pos < end) { - let [fieldNo, wireType] = reader.tag(); - switch (fieldNo) { - case /* string parentJob */ 1: - message.parentJob = reader.string(); - break; - case /* string subscriptionId */ 2: - message.subscriptionId = reader.string(); - break; - default: - let u = options.readUnknownField; - if (u === "throw") - throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); - let d = reader.skip(wireType); - if (u !== false) - (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); - } - } - return message; - } - internalBinaryWrite(message: RpcSubscribeToEventsResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { - /* string parentJob = 1; */ - if (message.parentJob !== "") - writer.tag(1, WireType.LengthDelimited).string(message.parentJob); - /* string subscriptionId = 2; */ - if (message.subscriptionId !== "") - writer.tag(2, WireType.LengthDelimited).string(message.subscriptionId); - let u = options.writeUnknownFields; - if (u !== false) - (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); - return writer; - } -} -/** - * @generated MessageType for protobuf message RpcSubscribeToEventsResponse - */ -export const RpcSubscribeToEventsResponse = new RpcSubscribeToEventsResponse$Type(); -// @generated message type with reflection information, may provide speed optimized methods -class RpcGetEventsRequest$Type extends MessageType { - constructor() { - super("RpcGetEventsRequest", [ - { no: 1, name: "parentJob", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, - { no: 2, name: "subscriptionId", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, - { no: 3, name: "limit", kind: "scalar", T: 13 /*ScalarType.UINT32*/ } - ]); - } - create(value?: PartialMessage): RpcGetEventsRequest { - const message = globalThis.Object.create((this.messagePrototype!)); - message.parentJob = ""; - message.subscriptionId = ""; - message.limit = 0; - if (value !== undefined) - reflectionMergePartial(this, message, value); - return message; - } - internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: RpcGetEventsRequest): RpcGetEventsRequest { - let message = target ?? this.create(), end = reader.pos + length; - while (reader.pos < end) { - let [fieldNo, wireType] = reader.tag(); - switch (fieldNo) { - case /* string parentJob */ 1: - message.parentJob = reader.string(); - break; - case /* string subscriptionId */ 2: - message.subscriptionId = reader.string(); - break; - case /* uint32 limit */ 3: - message.limit = reader.uint32(); - break; - default: - let u = options.readUnknownField; - if (u === "throw") - throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); - let d = reader.skip(wireType); - if (u !== false) - (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); - } - } - return message; - } - internalBinaryWrite(message: RpcGetEventsRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { - /* string parentJob = 1; */ - if (message.parentJob !== "") - writer.tag(1, WireType.LengthDelimited).string(message.parentJob); - /* string subscriptionId = 2; */ - if (message.subscriptionId !== "") - writer.tag(2, WireType.LengthDelimited).string(message.subscriptionId); - /* uint32 limit = 3; */ - if (message.limit !== 0) - writer.tag(3, WireType.Varint).uint32(message.limit); - let u = options.writeUnknownFields; - if (u !== false) - (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); - return writer; - } -} -/** - * @generated MessageType for protobuf message RpcGetEventsRequest - */ -export const RpcGetEventsRequest = new RpcGetEventsRequest$Type(); -// @generated message type with reflection information, may provide speed optimized methods -class RpcGetEventsResponse$Type extends MessageType { - constructor() { - super("RpcGetEventsResponse", [ - { no: 1, name: "parentJob", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, - { no: 2, name: "count", kind: "scalar", T: 13 /*ScalarType.UINT32*/ }, - { no: 3, name: "subscriptionId", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, - { no: 4, name: "events", kind: "scalar", repeat: 2 /*RepeatType.UNPACKED*/, T: 9 /*ScalarType.STRING*/ } - ]); - } - create(value?: PartialMessage): RpcGetEventsResponse { - const message = globalThis.Object.create((this.messagePrototype!)); - message.parentJob = ""; - message.count = 0; - message.subscriptionId = ""; - message.events = []; - if (value !== undefined) - reflectionMergePartial(this, message, value); - return message; - } - internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: RpcGetEventsResponse): RpcGetEventsResponse { - let message = target ?? this.create(), end = reader.pos + length; - while (reader.pos < end) { - let [fieldNo, wireType] = reader.tag(); - switch (fieldNo) { - case /* string parentJob */ 1: - message.parentJob = reader.string(); - break; - case /* uint32 count */ 2: - message.count = reader.uint32(); - break; - case /* string subscriptionId */ 3: - message.subscriptionId = reader.string(); - break; - case /* repeated string events */ 4: - message.events.push(reader.string()); - break; - default: - let u = options.readUnknownField; - if (u === "throw") - throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); - let d = reader.skip(wireType); - if (u !== false) - (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); - } - } - return message; - } - internalBinaryWrite(message: RpcGetEventsResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { - /* string parentJob = 1; */ - if (message.parentJob !== "") - writer.tag(1, WireType.LengthDelimited).string(message.parentJob); - /* uint32 count = 2; */ - if (message.count !== 0) - writer.tag(2, WireType.Varint).uint32(message.count); - /* string subscriptionId = 3; */ - if (message.subscriptionId !== "") - writer.tag(3, WireType.LengthDelimited).string(message.subscriptionId); - /* repeated string events = 4; */ - for (let i = 0; i < message.events.length; i++) - writer.tag(4, WireType.LengthDelimited).string(message.events[i]); - let u = options.writeUnknownFields; - if (u !== false) - (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); - return writer; - } -} -/** - * @generated MessageType for protobuf message RpcGetEventsResponse - */ -export const RpcGetEventsResponse = new RpcGetEventsResponse$Type(); -// @generated message type with reflection information, may provide speed optimized methods -class RpcSendSignedEventResponse$Type extends MessageType { - constructor() { - super("RpcSendSignedEventResponse", [ - { no: 1, name: "parentJob", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, - { no: 2, name: "success", kind: "scalar", T: 8 /*ScalarType.BOOL*/ } - ]); - } - create(value?: PartialMessage): RpcSendSignedEventResponse { - const message = globalThis.Object.create((this.messagePrototype!)); - message.parentJob = ""; - message.success = false; - if (value !== undefined) - reflectionMergePartial(this, message, value); - return message; - } - internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: RpcSendSignedEventResponse): RpcSendSignedEventResponse { - let message = target ?? this.create(), end = reader.pos + length; - while (reader.pos < end) { - let [fieldNo, wireType] = reader.tag(); - switch (fieldNo) { - case /* string parentJob */ 1: - message.parentJob = reader.string(); - break; - case /* bool success */ 2: - message.success = reader.bool(); - break; - default: - let u = options.readUnknownField; - if (u === "throw") - throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); - let d = reader.skip(wireType); - if (u !== false) - (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); - } - } - return message; - } - internalBinaryWrite(message: RpcSendSignedEventResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { - /* string parentJob = 1; */ - if (message.parentJob !== "") - writer.tag(1, WireType.LengthDelimited).string(message.parentJob); - /* bool success = 2; */ - if (message.success !== false) - writer.tag(2, WireType.Varint).bool(message.success); - let u = options.writeUnknownFields; - if (u !== false) - (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); - return writer; - } -} -/** - * @generated MessageType for protobuf message RpcSendSignedEventResponse - */ -export const RpcSendSignedEventResponse = new RpcSendSignedEventResponse$Type(); -// @generated message type with reflection information, may provide speed optimized methods -class RpcUnsubscribeFromEventsRequest$Type extends MessageType { - constructor() { - super("RpcUnsubscribeFromEventsRequest", [ - { no: 1, name: "parentJob", kind: "scalar", T: 9 /*ScalarType.STRING*/ }, - { no: 2, name: "subscriptionId", kind: "scalar", T: 9 /*ScalarType.STRING*/ } - ]); - } - create(value?: PartialMessage): RpcUnsubscribeFromEventsRequest { - const message = globalThis.Object.create((this.messagePrototype!)); - message.parentJob = ""; - message.subscriptionId = ""; - if (value !== undefined) - reflectionMergePartial(this, message, value); - return message; - } - internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: RpcUnsubscribeFromEventsRequest): RpcUnsubscribeFromEventsRequest { - let message = target ?? this.create(), end = reader.pos + length; - while (reader.pos < end) { - let [fieldNo, wireType] = reader.tag(); - switch (fieldNo) { - case /* string parentJob */ 1: - message.parentJob = reader.string(); - break; - case /* string subscriptionId */ 2: - message.subscriptionId = reader.string(); - break; - default: - let u = options.readUnknownField; - if (u === "throw") - throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); - let d = reader.skip(wireType); - if (u !== false) - (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); - } - } - return message; - } - internalBinaryWrite(message: RpcUnsubscribeFromEventsRequest, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { - /* string parentJob = 1; */ - if (message.parentJob !== "") - writer.tag(1, WireType.LengthDelimited).string(message.parentJob); - /* string subscriptionId = 2; */ - if (message.subscriptionId !== "") - writer.tag(2, WireType.LengthDelimited).string(message.subscriptionId); - let u = options.writeUnknownFields; - if (u !== false) - (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); - return writer; - } -} -/** - * @generated MessageType for protobuf message RpcUnsubscribeFromEventsRequest - */ -export const RpcUnsubscribeFromEventsRequest = new RpcUnsubscribeFromEventsRequest$Type(); -// @generated message type with reflection information, may provide speed optimized methods -class RpcUnsubscribeFromEventsResponse$Type extends MessageType { - constructor() { - super("RpcUnsubscribeFromEventsResponse", [ - { no: 1, name: "success", kind: "scalar", T: 8 /*ScalarType.BOOL*/ } - ]); - } - create(value?: PartialMessage): RpcUnsubscribeFromEventsResponse { - const message = globalThis.Object.create((this.messagePrototype!)); - message.success = false; - if (value !== undefined) - reflectionMergePartial(this, message, value); - return message; - } - internalBinaryRead(reader: IBinaryReader, length: number, options: BinaryReadOptions, target?: RpcUnsubscribeFromEventsResponse): RpcUnsubscribeFromEventsResponse { - let message = target ?? this.create(), end = reader.pos + length; - while (reader.pos < end) { - let [fieldNo, wireType] = reader.tag(); - switch (fieldNo) { - case /* bool success */ 1: - message.success = reader.bool(); - break; - default: - let u = options.readUnknownField; - if (u === "throw") - throw new globalThis.Error(`Unknown field ${fieldNo} (wire type ${wireType}) for ${this.typeName}`); - let d = reader.skip(wireType); - if (u !== false) - (u === true ? UnknownFieldHandler.onRead : u)(this.typeName, message, fieldNo, wireType, d); - } - } - return message; - } - internalBinaryWrite(message: RpcUnsubscribeFromEventsResponse, writer: IBinaryWriter, options: BinaryWriteOptions): IBinaryWriter { - /* bool success = 1; */ - if (message.success !== false) - writer.tag(1, WireType.Varint).bool(message.success); - let u = options.writeUnknownFields; - if (u !== false) - (u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer); - return writer; - } -} -/** - * @generated MessageType for protobuf message RpcUnsubscribeFromEventsResponse - */ -export const RpcUnsubscribeFromEventsResponse = new RpcUnsubscribeFromEventsResponse$Type(); -/** - * @generated ServiceType for protobuf service NostrConnector - */ -export const NostrConnector = new ServiceType("NostrConnector", [ - { name: "requestJob", options: {}, I: RpcRequestJob, O: Job }, - { name: "getJob", options: {}, I: RpcGetJob, O: Job }, - { name: "getPendingJobs", options: {}, I: RpcGetPendingJobs, O: PendingJobs }, - { name: "isJobDone", options: {}, I: RpcGetJob, O: RpcIsJobDone }, - { name: "acceptJob", options: {}, I: RpcAcceptJob, O: Job }, - { name: "cancelJob", options: {}, I: RpcCancelJob, O: Job }, - { name: "outputForJob", options: {}, I: RpcJobOutput, O: Job }, - { name: "completeJob", options: {}, I: RpcJobComplete, O: Job }, - { name: "logForJob", options: {}, I: RpcJobLog, O: Job }, - { name: "sendSignedEvent", options: {}, I: RpcSendSignedEventRequest, O: RpcSendSignedEventResponse }, - { name: "subscribeToEvents", options: {}, I: RpcSubscribeToEventsRequest, O: RpcSubscribeToEventsResponse }, - { name: "unsubscribeFromEvents", options: {}, I: RpcUnsubscribeFromEventsRequest, O: RpcUnsubscribeFromEventsResponse }, - { name: "getEvents", options: {}, I: RpcGetEventsRequest, O: RpcGetEventsResponse } -]); diff --git a/src/tests/number_serialization_in_template.js b/src/tests/number_serialization_in_template.js new file mode 100644 index 0000000..9fc43bb --- /dev/null +++ b/src/tests/number_serialization_in_template.js @@ -0,0 +1,14 @@ +async function main() { + const s=JSON.stringify({ + "test": "%SOMETHING%", + "test2": "%SOMETHING_NUMBER%", + a: { + b: "%SOMETHING_NUMBER%", + c: "%SOMETHING%", + } + }, null, 2); + console.log(s.replace(/(")(%.+_NUMBER%)(")/gmi, "$2")); + +} + +main(); \ No newline at end of file diff --git a/test-docker.sh b/test-docker.sh index cedb8db..d37e196 100644 --- a/test-docker.sh +++ b/test-docker.sh @@ -4,12 +4,11 @@ bash build-docker.sh docker run \ -p 5000:5000 \ --p 5001:5001 \ --read-only \ --tmpfs /tmp \ --tmpfs /run \ --tmpfs /var/log \ -it \ --rm \ ---name=openagents-grpc \ -openagents-grpc \ No newline at end of file +--name=openagents-pool \ +openagents-pool \ No newline at end of file