diff --git a/README.md b/README.md index fb380897..e9acd7be 100644 --- a/README.md +++ b/README.md @@ -80,6 +80,13 @@ const response = await cloudService.list(ListCloudsRequest.fromPartial({ Check [examples](./examples) directory for more examples. +To run example scripts, you should execute the following commands: +```bash +cd examples +npm i +YC_OAUTH_TOKEN=... YC_FOLDER_ID=... npm run start path/to/example.ts +``` + ## Services * AI Translate; diff --git a/examples/package-lock.json b/examples/package-lock.json index d63c95f9..3af69824 100644 --- a/examples/package-lock.json +++ b/examples/package-lock.json @@ -9,7 +9,11 @@ "version": "1.0.0", "license": "ISC", "dependencies": { - "@yandex-cloud/nodejs-sdk": "^2.0.0-alpha.7" + "@yandex-cloud/nodejs-sdk": "^2.0.0-beta.2", + "wav": "^1.0.2" + }, + "devDependencies": { + "@types/wav": "^1.0.1" } }, "..": { @@ -63,9 +67,9 @@ } }, "node_modules/@grpc/grpc-js": { - "version": "1.4.4", + "version": "1.5.5", "resolved": "https://gitpkg.now.sh/DavyJohnes/grpc-node/packages/grpc-js?fix-class-options-issue-with-dist", - "integrity": "sha512-RzhxaO5zpygPvFLKiWu24lb3lYlEdQBeZJAYlEgoB+OaqIZLFDeG/833v+lInxVYvPiNB/GMCfQrhktzsereiw==", + "integrity": "sha512-GrWZNWxbvWNKOWphkYZGiilHZvRHFzOyrSNTc52ZckQDVRG17obLd8L/eZPLZA+4OqHWLqiPSgA7cK3jqVKhkA==", "license": "Apache-2.0", "dependencies": { "@grpc/proto-loader": "^0.6.4", @@ -162,10 +166,19 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.10.tgz", "integrity": "sha512-S/3xB4KzyFxYGCppyDt68yzBU9ysL88lSdIah4D6cptdcltc4NCPCAMc0+PCpg/lLIyC7IPvj2Z52OJWeIUkog==" }, + "node_modules/@types/wav": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/wav/-/wav-1.0.1.tgz", + "integrity": "sha512-AKJeM5mqO1pdR2/HaTUQzSCm12No36KUM1larivXUmsLx+4JmMuC2Tv0kCdZzTx66h7IH2Xr92DGc9NQsXxa9Q==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@yandex-cloud/nodejs-sdk": { - "version": "2.0.0-alpha.7", - "resolved": "https://registry.npmjs.org/@yandex-cloud/nodejs-sdk/-/nodejs-sdk-2.0.0-alpha.7.tgz", - "integrity": "sha512-vQkmav7Ke+J24GjyaDhh9wl0/jI5C9y0gwbOT0zVu29GfK8y9BwopcSt8NOM9BGBfVLQwYSMqmTcByPcPx0slQ==", + "version": "2.0.0-beta.2", + "resolved": "https://registry.npmjs.org/@yandex-cloud/nodejs-sdk/-/nodejs-sdk-2.0.0-beta.2.tgz", + "integrity": "sha512-38malOtD1lu8CWEb3CwwBEpaicK8g9GADp7Yo8YVnhtgZjkx+4aWfz7kuLtC8Cz5lUF8woXwCmHdmVweLO81Rg==", "dependencies": { "@grpc/grpc-js": "https://gitpkg.now.sh/DavyJohnes/grpc-node/packages/grpc-js?fix-class-options-issue-with-dist", "axios": "0.24.0", @@ -174,8 +187,8 @@ "log4js": "6.3.0", "long": "5.2.0", "luxon": "2.2.0", - "nice-grpc": "1.0.4", - "nice-grpc-client-middleware-deadline": "1.0.4", + "nice-grpc": "1.0.6", + "nice-grpc-client-middleware-deadline": "1.0.6", "protobufjs": "6.8.8", "utility-types": "3.10.0" }, @@ -256,11 +269,35 @@ "follow-redirects": "^1.14.4" } }, + "node_modules/buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "dependencies": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "node_modules/buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" + }, "node_modules/buffer-equal-constant-time": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" }, + "node_modules/buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=" + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, "node_modules/cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -287,6 +324,11 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, "node_modules/date-format": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/date-format/-/date-format-3.0.0.tgz", @@ -387,6 +429,11 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", @@ -395,6 +442,11 @@ "node": ">=8" } }, + "node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, "node_modules/jsonfile": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", @@ -522,22 +574,22 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/nice-grpc": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/nice-grpc/-/nice-grpc-1.0.4.tgz", - "integrity": "sha512-/1fAKywTdwHzVxt1Ski6120lx6S++RpGjXp7y0OUTZze4wHrwgC64xuuRTT6COz5BcX+Pch7gTc2m5fz7+M4nA==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/nice-grpc/-/nice-grpc-1.0.6.tgz", + "integrity": "sha512-cRImN+SpnPaTAqWSbuU5ixq/wo1Jr1QOv0IZjmcb40XNU0og4JEyt7VCtTM7SAbeLAjdFxd65wiIid696kVTJA==", "dependencies": { - "@grpc/grpc-js": "^1.2.6", + "@grpc/grpc-js": "^1.5.1", "abort-controller-x": "^0.2.4", - "nice-grpc-common": "^1.0.3", + "nice-grpc-common": "^1.0.4", "node-abort-controller": "^1.2.1" } }, "node_modules/nice-grpc-client-middleware-deadline": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/nice-grpc-client-middleware-deadline/-/nice-grpc-client-middleware-deadline-1.0.4.tgz", - "integrity": "sha512-IYLEzWkLI0ij41WVDLBjBJohmlh2cI+2ttMDawK8h7G209vrAndEJ4iiN9gQUqtguVzq4S3e8BzQgJ26hBMQtw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/nice-grpc-client-middleware-deadline/-/nice-grpc-client-middleware-deadline-1.0.6.tgz", + "integrity": "sha512-AokugSveg+2IPohuLbGR5OITgh3W4yZvAmLhuqistjwSRLchzQI4CwQEL1Tj4R0wscreSFoiHkXyG4qtKygOug==", "dependencies": { - "nice-grpc-common": "^1.0.3", + "nice-grpc-common": "^1.0.4", "node-abort-controller": "^2.0.0" } }, @@ -594,6 +646,17 @@ "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" }, + "node_modules/readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, "node_modules/require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -634,6 +697,27 @@ "semver": "bin/semver" } }, + "node_modules/stream-parser": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/stream-parser/-/stream-parser-0.3.1.tgz", + "integrity": "sha1-FhhUhpRCACGhGC/wrxkRwSl2F3M=", + "dependencies": { + "debug": "2" + } + }, + "node_modules/stream-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/stream-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, "node_modules/streamroller": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-2.2.4.tgz", @@ -655,6 +739,11 @@ "node": ">=4.0" } }, + "node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -695,6 +784,31 @@ "node": ">= 4" } }, + "node_modules/wav": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wav/-/wav-1.0.2.tgz", + "integrity": "sha512-viHtz3cDd/Tcr/HbNqzQCofKdF6kWUymH9LGDdskfWFoIy/HJ+RTihgjEcHfnsy1PO4e9B+y4HwgTwMrByquhg==", + "dependencies": { + "buffer-alloc": "^1.1.0", + "buffer-from": "^1.0.0", + "debug": "^2.2.0", + "readable-stream": "^1.1.14", + "stream-parser": "^0.3.1" + } + }, + "node_modules/wav/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/wav/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", @@ -748,7 +862,7 @@ "dependencies": { "@grpc/grpc-js": { "version": "https://gitpkg.now.sh/DavyJohnes/grpc-node/packages/grpc-js?fix-class-options-issue-with-dist", - "integrity": "sha512-RzhxaO5zpygPvFLKiWu24lb3lYlEdQBeZJAYlEgoB+OaqIZLFDeG/833v+lInxVYvPiNB/GMCfQrhktzsereiw==", + "integrity": "sha512-GrWZNWxbvWNKOWphkYZGiilHZvRHFzOyrSNTc52ZckQDVRG17obLd8L/eZPLZA+4OqHWLqiPSgA7cK3jqVKhkA==", "requires": { "@grpc/proto-loader": "^0.6.4", "@types/node": ">=12.12.47" @@ -837,10 +951,19 @@ "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.10.tgz", "integrity": "sha512-S/3xB4KzyFxYGCppyDt68yzBU9ysL88lSdIah4D6cptdcltc4NCPCAMc0+PCpg/lLIyC7IPvj2Z52OJWeIUkog==" }, + "@types/wav": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/wav/-/wav-1.0.1.tgz", + "integrity": "sha512-AKJeM5mqO1pdR2/HaTUQzSCm12No36KUM1larivXUmsLx+4JmMuC2Tv0kCdZzTx66h7IH2Xr92DGc9NQsXxa9Q==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "@yandex-cloud/nodejs-sdk": { - "version": "2.0.0-alpha.7", - "resolved": "https://registry.npmjs.org/@yandex-cloud/nodejs-sdk/-/nodejs-sdk-2.0.0-alpha.7.tgz", - "integrity": "sha512-vQkmav7Ke+J24GjyaDhh9wl0/jI5C9y0gwbOT0zVu29GfK8y9BwopcSt8NOM9BGBfVLQwYSMqmTcByPcPx0slQ==", + "version": "2.0.0-beta.2", + "resolved": "https://registry.npmjs.org/@yandex-cloud/nodejs-sdk/-/nodejs-sdk-2.0.0-beta.2.tgz", + "integrity": "sha512-38malOtD1lu8CWEb3CwwBEpaicK8g9GADp7Yo8YVnhtgZjkx+4aWfz7kuLtC8Cz5lUF8woXwCmHdmVweLO81Rg==", "requires": { "@grpc/grpc-js": "https://gitpkg.now.sh/DavyJohnes/grpc-node/packages/grpc-js?fix-class-options-issue-with-dist", "axios": "0.24.0", @@ -849,8 +972,8 @@ "log4js": "6.3.0", "long": "5.2.0", "luxon": "2.2.0", - "nice-grpc": "1.0.4", - "nice-grpc-client-middleware-deadline": "1.0.4", + "nice-grpc": "1.0.6", + "nice-grpc-client-middleware-deadline": "1.0.6", "protobufjs": "6.8.8", "utility-types": "3.10.0" }, @@ -918,11 +1041,35 @@ "follow-redirects": "^1.14.4" } }, + "buffer-alloc": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", + "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "requires": { + "buffer-alloc-unsafe": "^1.1.0", + "buffer-fill": "^1.0.0" + } + }, + "buffer-alloc-unsafe": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" + }, "buffer-equal-constant-time": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" }, + "buffer-fill": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", + "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=" + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, "cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -946,6 +1093,11 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, "date-format": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/date-format/-/date-format-3.0.0.tgz", @@ -1014,11 +1166,21 @@ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, "jsonfile": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", @@ -1136,22 +1298,22 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "nice-grpc": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/nice-grpc/-/nice-grpc-1.0.4.tgz", - "integrity": "sha512-/1fAKywTdwHzVxt1Ski6120lx6S++RpGjXp7y0OUTZze4wHrwgC64xuuRTT6COz5BcX+Pch7gTc2m5fz7+M4nA==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/nice-grpc/-/nice-grpc-1.0.6.tgz", + "integrity": "sha512-cRImN+SpnPaTAqWSbuU5ixq/wo1Jr1QOv0IZjmcb40XNU0og4JEyt7VCtTM7SAbeLAjdFxd65wiIid696kVTJA==", "requires": { - "@grpc/grpc-js": "^1.2.6", + "@grpc/grpc-js": "^1.5.1", "abort-controller-x": "^0.2.4", - "nice-grpc-common": "^1.0.3", + "nice-grpc-common": "^1.0.4", "node-abort-controller": "^1.2.1" } }, "nice-grpc-client-middleware-deadline": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/nice-grpc-client-middleware-deadline/-/nice-grpc-client-middleware-deadline-1.0.4.tgz", - "integrity": "sha512-IYLEzWkLI0ij41WVDLBjBJohmlh2cI+2ttMDawK8h7G209vrAndEJ4iiN9gQUqtguVzq4S3e8BzQgJ26hBMQtw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/nice-grpc-client-middleware-deadline/-/nice-grpc-client-middleware-deadline-1.0.6.tgz", + "integrity": "sha512-AokugSveg+2IPohuLbGR5OITgh3W4yZvAmLhuqistjwSRLchzQI4CwQEL1Tj4R0wscreSFoiHkXyG4qtKygOug==", "requires": { - "nice-grpc-common": "^1.0.3", + "nice-grpc-common": "^1.0.4", "node-abort-controller": "^2.0.0" }, "dependencies": { @@ -1209,6 +1371,17 @@ } } }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -1229,6 +1402,29 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" }, + "stream-parser": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/stream-parser/-/stream-parser-0.3.1.tgz", + "integrity": "sha1-FhhUhpRCACGhGC/wrxkRwSl2F3M=", + "requires": { + "debug": "2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, "streamroller": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-2.2.4.tgz", @@ -1246,6 +1442,11 @@ } } }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + }, "string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -1274,6 +1475,33 @@ "resolved": "https://registry.npmjs.org/utility-types/-/utility-types-3.10.0.tgz", "integrity": "sha512-O11mqxmi7wMKCo6HKFt5AhO4BwY3VV68YU07tgxfz8zJTIxr4BpsezN49Ffwy9j3ZpwwJp4fkRwjRzq3uWE6Rg==" }, + "wav": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wav/-/wav-1.0.2.tgz", + "integrity": "sha512-viHtz3cDd/Tcr/HbNqzQCofKdF6kWUymH9LGDdskfWFoIy/HJ+RTihgjEcHfnsy1PO4e9B+y4HwgTwMrByquhg==", + "requires": { + "buffer-alloc": "^1.1.0", + "buffer-from": "^1.0.0", + "debug": "^2.2.0", + "readable-stream": "^1.1.14", + "stream-parser": "^0.3.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } + }, "wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", diff --git a/examples/package.json b/examples/package.json index 34dc4909..92b6dbbb 100644 --- a/examples/package.json +++ b/examples/package.json @@ -10,6 +10,10 @@ "author": "", "license": "ISC", "dependencies": { - "@yandex-cloud/nodejs-sdk": "^2.0.0-alpha.7" + "@yandex-cloud/nodejs-sdk": "^2.0.0-beta.2", + "wav": "^1.0.2" + }, + "devDependencies": { + "@types/wav": "^1.0.1" } } diff --git a/examples/stream-stt/index.ts b/examples/stream-stt/index.ts new file mode 100644 index 00000000..5a1058e4 --- /dev/null +++ b/examples/stream-stt/index.ts @@ -0,0 +1,63 @@ +import { serviceClients, Session } from '@yandex-cloud/nodejs-sdk'; +import { + RecognitionSpec_AudioEncoding, + StreamingRecognitionRequest, +} from '@yandex-cloud/nodejs-sdk/dist/generated/yandex/cloud/ai/stt/v2/stt_service'; +import * as fs from 'fs'; +import * as path from 'path'; +import * as stream from 'stream'; +import * as wav from 'wav'; +import { getEnv } from '../utils/get-env'; +import { log } from '../utils/logger'; + +// eslint-disable-next-line unicorn/prefer-module +const file = fs.createReadStream(path.join(__dirname, 'test.wav')); +const reader = new wav.Reader(); +const data = new stream.PassThrough(); + +const formatPromise = new Promise((resolve) => { + // the "format" event gets emitted at the end of the WAVE header + reader.on('format', (format: wav.Format) => { + // pass the format object + resolve(format); + }); +}); + +// pipe the WAVE file to the Reader instance +file.pipe(reader); +reader.pipe(data); + +(async () => { + const authToken = getEnv('YC_OAUTH_TOKEN'); + const folderId = getEnv('YC_FOLDER_ID'); + const session = new Session({ oauthToken: authToken }); + const client = session.client(serviceClients.SttServiceClient); + + async function* createRequest(): AsyncIterable { + const format = await formatPromise; + + yield StreamingRecognitionRequest.fromPartial({ + config: { + specification: { + audioEncoding: RecognitionSpec_AudioEncoding.LINEAR16_PCM, + sampleRateHertz: format.sampleRate, + audioChannelCount: format.channels, + }, + folderId, + }, + }); + for await (const chunk of data) { + yield StreamingRecognitionRequest.fromPartial({ + audioContent: chunk, + }); + } + } + + try { + for await (const response of client.streamingRecognize(createRequest())) { + log(JSON.stringify(response, null, 2)); + } + } catch (error) { + log(error); + } +})(); diff --git a/examples/stream-stt/test.wav b/examples/stream-stt/test.wav new file mode 100644 index 00000000..c1d933f1 Binary files /dev/null and b/examples/stream-stt/test.wav differ diff --git a/examples/utils/logger.ts b/examples/utils/logger.ts index 59bc9fd8..2a1e8afe 100644 --- a/examples/utils/logger.ts +++ b/examples/utils/logger.ts @@ -1,4 +1,5 @@ -export const log = (message: string) => { +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export const log = (message: any) => { // eslint-disable-next-line no-console console.log(message); };