From 7c0c5b44a266985fce190d8545fbb84e626344a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E5=96=86?= Date: Mon, 3 Nov 2025 14:35:31 +0800 Subject: [PATCH] chore: remove legacy deepagens-static site (keep deepagens-new only) --- .DS_Store | Bin 0 -> 8196 bytes .codebuddy/sandbox/sandbox.json | 6 +- .codebuddy/status.log | 1 + .codebuddy/todo.json | 1 + TODO | 0 deepagens-new/contact.html | 40 - deepagens-static/about.html | 38 - deepagens-static/blog.html | 38 - deepagens-static/cases.html | 76 - deepagens-static/contact.html | 51 - deepagens-static/developers.html | 36 - deepagens-static/index.html | 132 - deepagens-static/media.html | 35 - deepagens-static/pricing.html | 55 - deepagens-static/privacy.html | 35 - deepagens-static/resources.html | 38 - deepagens-static/script.js | 8 - deepagens-static/solutions.html | 74 - deepagens-static/styles.css | 59 - doubao-asr-demo/.DS_Store | Bin 0 -> 6148 bytes doubao-asr-demo/.env | 7 + doubao-asr-demo/.env.example | 6 + doubao-asr-demo/README.md | 86 + doubao-asr-demo/index.html | 248 + doubao-asr-demo/logs/asr.log | 2401 +++++ doubao-asr-demo/main.js | 973 ++ doubao-asr-demo/node_modules/.DS_Store | Bin 0 -> 20484 bytes doubao-asr-demo/node_modules/.bin/mime | 1 + .../node_modules/.package-lock.json | 996 ++ .../node_modules/accepts/HISTORY.md | 243 + doubao-asr-demo/node_modules/accepts/LICENSE | 23 + .../node_modules/accepts/README.md | 140 + doubao-asr-demo/node_modules/accepts/index.js | 238 + .../node_modules/accepts/package.json | 47 + .../node_modules/array-flatten/LICENSE | 21 + .../node_modules/array-flatten/README.md | 43 + .../array-flatten/array-flatten.js | 64 + .../node_modules/array-flatten/package.json | 39 + .../node_modules/body-parser/HISTORY.md | 672 ++ .../node_modules/body-parser/LICENSE | 23 + .../node_modules/body-parser/README.md | 476 + .../node_modules/body-parser/SECURITY.md | 25 + .../node_modules/body-parser/index.js | 156 + .../node_modules/body-parser/lib/read.js | 205 + .../body-parser/lib/types/json.js | 247 + .../node_modules/body-parser/lib/types/raw.js | 101 + .../body-parser/lib/types/text.js | 121 + .../body-parser/lib/types/urlencoded.js | 307 + .../node_modules/body-parser/package.json | 56 + doubao-asr-demo/node_modules/bytes/History.md | 97 + doubao-asr-demo/node_modules/bytes/LICENSE | 23 + doubao-asr-demo/node_modules/bytes/Readme.md | 152 + doubao-asr-demo/node_modules/bytes/index.js | 170 + .../node_modules/bytes/package.json | 42 + .../call-bind-apply-helpers/.eslintrc | 17 + .../.github/FUNDING.yml | 12 + .../call-bind-apply-helpers/.nycrc | 9 + .../call-bind-apply-helpers/CHANGELOG.md | 30 + .../call-bind-apply-helpers/LICENSE | 21 + .../call-bind-apply-helpers/README.md | 62 + .../call-bind-apply-helpers/actualApply.d.ts | 1 + .../call-bind-apply-helpers/actualApply.js | 10 + .../call-bind-apply-helpers/applyBind.d.ts | 19 + .../call-bind-apply-helpers/applyBind.js | 10 + .../functionApply.d.ts | 1 + .../call-bind-apply-helpers/functionApply.js | 4 + .../call-bind-apply-helpers/functionCall.d.ts | 1 + .../call-bind-apply-helpers/functionCall.js | 4 + .../call-bind-apply-helpers/index.d.ts | 64 + .../call-bind-apply-helpers/index.js | 15 + .../call-bind-apply-helpers/package.json | 85 + .../call-bind-apply-helpers/reflectApply.d.ts | 3 + .../call-bind-apply-helpers/reflectApply.js | 4 + .../call-bind-apply-helpers/test/index.js | 63 + .../call-bind-apply-helpers/tsconfig.json | 9 + .../node_modules/call-bound/.eslintrc | 13 + .../call-bound/.github/FUNDING.yml | 12 + .../node_modules/call-bound/.nycrc | 9 + .../node_modules/call-bound/CHANGELOG.md | 42 + .../node_modules/call-bound/LICENSE | 21 + .../node_modules/call-bound/README.md | 53 + .../node_modules/call-bound/index.d.ts | 94 + .../node_modules/call-bound/index.js | 19 + .../node_modules/call-bound/package.json | 99 + .../node_modules/call-bound/test/index.js | 61 + .../node_modules/call-bound/tsconfig.json | 10 + .../content-disposition/HISTORY.md | 60 + .../node_modules/content-disposition/LICENSE | 22 + .../content-disposition/README.md | 142 + .../node_modules/content-disposition/index.js | 458 + .../content-disposition/package.json | 44 + .../node_modules/content-type/HISTORY.md | 29 + .../node_modules/content-type/LICENSE | 22 + .../node_modules/content-type/README.md | 94 + .../node_modules/content-type/index.js | 225 + .../node_modules/content-type/package.json | 42 + .../node_modules/cookie-signature/.npmignore | 4 + .../node_modules/cookie-signature/History.md | 38 + .../node_modules/cookie-signature/Readme.md | 42 + .../node_modules/cookie-signature/index.js | 51 + .../cookie-signature/package.json | 18 + doubao-asr-demo/node_modules/cookie/LICENSE | 24 + doubao-asr-demo/node_modules/cookie/README.md | 317 + .../node_modules/cookie/SECURITY.md | 25 + doubao-asr-demo/node_modules/cookie/index.js | 334 + .../node_modules/cookie/package.json | 44 + .../node_modules/cors/CONTRIBUTING.md | 33 + doubao-asr-demo/node_modules/cors/HISTORY.md | 58 + doubao-asr-demo/node_modules/cors/LICENSE | 22 + doubao-asr-demo/node_modules/cors/README.md | 243 + .../node_modules/cors/lib/index.js | 238 + .../node_modules/cors/package.json | 41 + .../node_modules/data-uri-to-buffer/README.md | 88 + .../data-uri-to-buffer/dist/index.d.ts | 15 + .../data-uri-to-buffer/dist/index.js | 53 + .../data-uri-to-buffer/dist/index.js.map | 1 + .../data-uri-to-buffer/package.json | 62 + .../data-uri-to-buffer/src/index.ts | 68 + .../node_modules/debug/.coveralls.yml | 1 + doubao-asr-demo/node_modules/debug/.eslintrc | 11 + doubao-asr-demo/node_modules/debug/.npmignore | 9 + .../node_modules/debug/.travis.yml | 14 + .../node_modules/debug/CHANGELOG.md | 362 + doubao-asr-demo/node_modules/debug/LICENSE | 19 + doubao-asr-demo/node_modules/debug/Makefile | 50 + doubao-asr-demo/node_modules/debug/README.md | 312 + .../node_modules/debug/component.json | 19 + .../node_modules/debug/karma.conf.js | 70 + doubao-asr-demo/node_modules/debug/node.js | 1 + .../node_modules/debug/package.json | 49 + .../node_modules/debug/src/browser.js | 185 + .../node_modules/debug/src/debug.js | 202 + .../node_modules/debug/src/index.js | 10 + .../node_modules/debug/src/inspector-log.js | 15 + .../node_modules/debug/src/node.js | 248 + doubao-asr-demo/node_modules/depd/History.md | 103 + doubao-asr-demo/node_modules/depd/LICENSE | 22 + doubao-asr-demo/node_modules/depd/Readme.md | 280 + doubao-asr-demo/node_modules/depd/index.js | 538 ++ .../node_modules/depd/lib/browser/index.js | 77 + .../node_modules/depd/package.json | 45 + doubao-asr-demo/node_modules/destroy/LICENSE | 23 + .../node_modules/destroy/README.md | 63 + doubao-asr-demo/node_modules/destroy/index.js | 209 + .../node_modules/destroy/package.json | 48 + .../node_modules/dotenv/CHANGELOG.md | 598 ++ doubao-asr-demo/node_modules/dotenv/LICENSE | 23 + .../node_modules/dotenv/README-es.md | 405 + doubao-asr-demo/node_modules/dotenv/README.md | 692 ++ .../node_modules/dotenv/SECURITY.md | 1 + .../node_modules/dotenv/config.d.ts | 1 + doubao-asr-demo/node_modules/dotenv/config.js | 9 + .../node_modules/dotenv/lib/cli-options.js | 17 + .../node_modules/dotenv/lib/env-options.js | 28 + .../node_modules/dotenv/lib/main.d.ts | 179 + .../node_modules/dotenv/lib/main.js | 434 + .../node_modules/dotenv/package.json | 62 + .../node_modules/dunder-proto/.eslintrc | 5 + .../dunder-proto/.github/FUNDING.yml | 12 + .../node_modules/dunder-proto/.nycrc | 13 + .../node_modules/dunder-proto/CHANGELOG.md | 24 + .../node_modules/dunder-proto/LICENSE | 21 + .../node_modules/dunder-proto/README.md | 54 + .../node_modules/dunder-proto/get.d.ts | 5 + .../node_modules/dunder-proto/get.js | 30 + .../node_modules/dunder-proto/package.json | 76 + .../node_modules/dunder-proto/set.d.ts | 5 + .../node_modules/dunder-proto/set.js | 35 + .../node_modules/dunder-proto/test/get.js | 34 + .../node_modules/dunder-proto/test/index.js | 4 + .../node_modules/dunder-proto/test/set.js | 50 + .../node_modules/dunder-proto/tsconfig.json | 9 + doubao-asr-demo/node_modules/ee-first/LICENSE | 22 + .../node_modules/ee-first/README.md | 80 + .../node_modules/ee-first/index.js | 95 + .../node_modules/ee-first/package.json | 29 + .../node_modules/encodeurl/LICENSE | 22 + .../node_modules/encodeurl/README.md | 109 + .../node_modules/encodeurl/index.js | 60 + .../node_modules/encodeurl/package.json | 40 + .../node_modules/es-define-property/.eslintrc | 13 + .../es-define-property/.github/FUNDING.yml | 12 + .../node_modules/es-define-property/.nycrc | 9 + .../es-define-property/CHANGELOG.md | 29 + .../node_modules/es-define-property/LICENSE | 21 + .../node_modules/es-define-property/README.md | 49 + .../es-define-property/index.d.ts | 3 + .../node_modules/es-define-property/index.js | 14 + .../es-define-property/package.json | 81 + .../es-define-property/test/index.js | 56 + .../es-define-property/tsconfig.json | 10 + .../node_modules/es-errors/.eslintrc | 5 + .../es-errors/.github/FUNDING.yml | 12 + .../node_modules/es-errors/CHANGELOG.md | 40 + .../node_modules/es-errors/LICENSE | 21 + .../node_modules/es-errors/README.md | 55 + .../node_modules/es-errors/eval.d.ts | 3 + .../node_modules/es-errors/eval.js | 4 + .../node_modules/es-errors/index.d.ts | 3 + .../node_modules/es-errors/index.js | 4 + .../node_modules/es-errors/package.json | 80 + .../node_modules/es-errors/range.d.ts | 3 + .../node_modules/es-errors/range.js | 4 + .../node_modules/es-errors/ref.d.ts | 3 + doubao-asr-demo/node_modules/es-errors/ref.js | 4 + .../node_modules/es-errors/syntax.d.ts | 3 + .../node_modules/es-errors/syntax.js | 4 + .../node_modules/es-errors/test/index.js | 19 + .../node_modules/es-errors/tsconfig.json | 49 + .../node_modules/es-errors/type.d.ts | 3 + .../node_modules/es-errors/type.js | 4 + .../node_modules/es-errors/uri.d.ts | 3 + doubao-asr-demo/node_modules/es-errors/uri.js | 4 + .../node_modules/es-object-atoms/.eslintrc | 16 + .../es-object-atoms/.github/FUNDING.yml | 12 + .../node_modules/es-object-atoms/CHANGELOG.md | 37 + .../node_modules/es-object-atoms/LICENSE | 21 + .../node_modules/es-object-atoms/README.md | 63 + .../RequireObjectCoercible.d.ts | 3 + .../es-object-atoms/RequireObjectCoercible.js | 11 + .../es-object-atoms/ToObject.d.ts | 7 + .../node_modules/es-object-atoms/ToObject.js | 10 + .../node_modules/es-object-atoms/index.d.ts | 3 + .../node_modules/es-object-atoms/index.js | 4 + .../es-object-atoms/isObject.d.ts | 3 + .../node_modules/es-object-atoms/isObject.js | 6 + .../node_modules/es-object-atoms/package.json | 80 + .../es-object-atoms/test/index.js | 38 + .../es-object-atoms/tsconfig.json | 6 + .../node_modules/escape-html/LICENSE | 24 + .../node_modules/escape-html/Readme.md | 43 + .../node_modules/escape-html/index.js | 78 + .../node_modules/escape-html/package.json | 24 + doubao-asr-demo/node_modules/etag/HISTORY.md | 83 + doubao-asr-demo/node_modules/etag/LICENSE | 22 + doubao-asr-demo/node_modules/etag/README.md | 159 + doubao-asr-demo/node_modules/etag/index.js | 131 + .../node_modules/etag/package.json | 47 + .../node_modules/eventemitter3/LICENSE | 21 + .../node_modules/eventemitter3/README.md | 94 + .../node_modules/eventemitter3/index.d.ts | 134 + .../node_modules/eventemitter3/index.js | 336 + .../node_modules/eventemitter3/package.json | 56 + .../eventemitter3/umd/eventemitter3.js | 340 + .../eventemitter3/umd/eventemitter3.min.js | 1 + .../umd/eventemitter3.min.js.map | 1 + .../node_modules/express/History.md | 3656 +++++++ doubao-asr-demo/node_modules/express/LICENSE | 24 + .../node_modules/express/Readme.md | 260 + doubao-asr-demo/node_modules/express/index.js | 11 + .../node_modules/express/lib/application.js | 661 ++ .../node_modules/express/lib/express.js | 116 + .../express/lib/middleware/init.js | 43 + .../express/lib/middleware/query.js | 47 + .../node_modules/express/lib/request.js | 525 + .../node_modules/express/lib/response.js | 1179 +++ .../node_modules/express/lib/router/index.js | 673 ++ .../node_modules/express/lib/router/layer.js | 181 + .../node_modules/express/lib/router/route.js | 230 + .../node_modules/express/lib/utils.js | 303 + .../node_modules/express/lib/view.js | 182 + .../node_modules/express/package.json | 102 + .../node_modules/fetch-blob/LICENSE | 21 + .../node_modules/fetch-blob/README.md | 106 + .../node_modules/fetch-blob/file.d.ts | 2 + .../node_modules/fetch-blob/file.js | 49 + .../node_modules/fetch-blob/from.d.ts | 26 + .../node_modules/fetch-blob/from.js | 100 + .../node_modules/fetch-blob/index.d.ts | 3 + .../node_modules/fetch-blob/index.js | 250 + .../node_modules/fetch-blob/package.json | 56 + .../node_modules/fetch-blob/streams.cjs | 51 + .../node_modules/finalhandler/HISTORY.md | 210 + .../node_modules/finalhandler/LICENSE | 22 + .../node_modules/finalhandler/README.md | 147 + .../node_modules/finalhandler/SECURITY.md | 25 + .../node_modules/finalhandler/index.js | 341 + .../node_modules/finalhandler/package.json | 47 + .../node_modules/follow-redirects/LICENSE | 18 + .../node_modules/follow-redirects/README.md | 155 + .../node_modules/follow-redirects/debug.js | 15 + .../node_modules/follow-redirects/http.js | 1 + .../node_modules/follow-redirects/https.js | 1 + .../node_modules/follow-redirects/index.js | 686 ++ .../follow-redirects/package.json | 58 + .../formdata-polyfill/FormData.js | 441 + .../node_modules/formdata-polyfill/LICENSE | 21 + .../node_modules/formdata-polyfill/README.md | 145 + .../formdata-polyfill/esm.min.d.ts | 5 + .../node_modules/formdata-polyfill/esm.min.js | 40 + .../formdata-polyfill/formdata-to-blob.js | 39 + .../formdata-polyfill/formdata.min.js | 21 + .../formdata-polyfill/package.json | 50 + .../node_modules/forwarded/HISTORY.md | 21 + .../node_modules/forwarded/LICENSE | 22 + .../node_modules/forwarded/README.md | 57 + .../node_modules/forwarded/index.js | 90 + .../node_modules/forwarded/package.json | 45 + doubao-asr-demo/node_modules/fresh/HISTORY.md | 70 + doubao-asr-demo/node_modules/fresh/LICENSE | 23 + doubao-asr-demo/node_modules/fresh/README.md | 119 + doubao-asr-demo/node_modules/fresh/index.js | 137 + .../node_modules/fresh/package.json | 46 + .../node_modules/function-bind/.eslintrc | 21 + .../function-bind/.github/FUNDING.yml | 12 + .../function-bind/.github/SECURITY.md | 3 + .../node_modules/function-bind/.nycrc | 13 + .../node_modules/function-bind/CHANGELOG.md | 136 + .../node_modules/function-bind/LICENSE | 20 + .../node_modules/function-bind/README.md | 46 + .../function-bind/implementation.js | 84 + .../node_modules/function-bind/index.js | 5 + .../node_modules/function-bind/package.json | 87 + .../node_modules/function-bind/test/.eslintrc | 9 + .../node_modules/function-bind/test/index.js | 252 + .../node_modules/get-intrinsic/.eslintrc | 42 + .../get-intrinsic/.github/FUNDING.yml | 12 + .../node_modules/get-intrinsic/.nycrc | 9 + .../node_modules/get-intrinsic/CHANGELOG.md | 186 + .../node_modules/get-intrinsic/LICENSE | 21 + .../node_modules/get-intrinsic/README.md | 71 + .../node_modules/get-intrinsic/index.js | 378 + .../node_modules/get-intrinsic/package.json | 97 + .../get-intrinsic/test/GetIntrinsic.js | 274 + .../node_modules/get-proto/.eslintrc | 10 + .../get-proto/.github/FUNDING.yml | 12 + doubao-asr-demo/node_modules/get-proto/.nycrc | 9 + .../node_modules/get-proto/CHANGELOG.md | 21 + .../node_modules/get-proto/LICENSE | 21 + .../get-proto/Object.getPrototypeOf.d.ts | 5 + .../get-proto/Object.getPrototypeOf.js | 6 + .../node_modules/get-proto/README.md | 50 + .../get-proto/Reflect.getPrototypeOf.d.ts | 3 + .../get-proto/Reflect.getPrototypeOf.js | 4 + .../node_modules/get-proto/index.d.ts | 5 + .../node_modules/get-proto/index.js | 27 + .../node_modules/get-proto/package.json | 81 + .../node_modules/get-proto/test/index.js | 68 + .../node_modules/get-proto/tsconfig.json | 9 + doubao-asr-demo/node_modules/gopd/.eslintrc | 16 + .../node_modules/gopd/.github/FUNDING.yml | 12 + .../node_modules/gopd/CHANGELOG.md | 45 + doubao-asr-demo/node_modules/gopd/LICENSE | 21 + doubao-asr-demo/node_modules/gopd/README.md | 40 + doubao-asr-demo/node_modules/gopd/gOPD.d.ts | 1 + doubao-asr-demo/node_modules/gopd/gOPD.js | 4 + doubao-asr-demo/node_modules/gopd/index.d.ts | 5 + doubao-asr-demo/node_modules/gopd/index.js | 15 + .../node_modules/gopd/package.json | 77 + .../node_modules/gopd/test/index.js | 36 + .../node_modules/gopd/tsconfig.json | 9 + .../node_modules/has-symbols/.eslintrc | 11 + .../has-symbols/.github/FUNDING.yml | 12 + .../node_modules/has-symbols/.nycrc | 9 + .../node_modules/has-symbols/CHANGELOG.md | 91 + .../node_modules/has-symbols/LICENSE | 21 + .../node_modules/has-symbols/README.md | 46 + .../node_modules/has-symbols/index.d.ts | 3 + .../node_modules/has-symbols/index.js | 14 + .../node_modules/has-symbols/package.json | 111 + .../node_modules/has-symbols/shams.d.ts | 3 + .../node_modules/has-symbols/shams.js | 45 + .../node_modules/has-symbols/test/index.js | 22 + .../has-symbols/test/shams/core-js.js | 29 + .../test/shams/get-own-property-symbols.js | 29 + .../node_modules/has-symbols/test/tests.js | 58 + .../node_modules/has-symbols/tsconfig.json | 10 + doubao-asr-demo/node_modules/hasown/.eslintrc | 5 + .../node_modules/hasown/.github/FUNDING.yml | 12 + doubao-asr-demo/node_modules/hasown/.nycrc | 13 + .../node_modules/hasown/CHANGELOG.md | 40 + doubao-asr-demo/node_modules/hasown/LICENSE | 21 + doubao-asr-demo/node_modules/hasown/README.md | 40 + .../node_modules/hasown/index.d.ts | 3 + doubao-asr-demo/node_modules/hasown/index.js | 8 + .../node_modules/hasown/package.json | 92 + .../node_modules/hasown/tsconfig.json | 6 + .../node_modules/http-errors/HISTORY.md | 180 + .../node_modules/http-errors/LICENSE | 23 + .../node_modules/http-errors/README.md | 169 + .../node_modules/http-errors/index.js | 289 + .../node_modules/http-errors/package.json | 50 + .../node_modules/http-proxy/.auto-changelog | 6 + .../node_modules/http-proxy/.gitattributes | 1 + .../node_modules/http-proxy/CHANGELOG.md | 1872 ++++ .../http-proxy/CODE_OF_CONDUCT.md | 74 + .../node_modules/http-proxy/LICENSE | 23 + .../node_modules/http-proxy/README.md | 568 ++ .../node_modules/http-proxy/codecov.yml | 10 + .../node_modules/http-proxy/index.js | 13 + .../node_modules/http-proxy/lib/http-proxy.js | 66 + .../http-proxy/lib/http-proxy/common.js | 248 + .../http-proxy/lib/http-proxy/index.js | 185 + .../lib/http-proxy/passes/web-incoming.js | 194 + .../lib/http-proxy/passes/web-outgoing.js | 147 + .../lib/http-proxy/passes/ws-incoming.js | 162 + .../node_modules/http-proxy/package.json | 41 + .../node_modules/http-proxy/renovate.json | 19 + .../node_modules/iconv-lite/Changelog.md | 162 + .../node_modules/iconv-lite/LICENSE | 21 + .../node_modules/iconv-lite/README.md | 156 + .../iconv-lite/encodings/dbcs-codec.js | 555 ++ .../iconv-lite/encodings/dbcs-data.js | 176 + .../iconv-lite/encodings/index.js | 22 + .../iconv-lite/encodings/internal.js | 188 + .../iconv-lite/encodings/sbcs-codec.js | 72 + .../encodings/sbcs-data-generated.js | 451 + .../iconv-lite/encodings/sbcs-data.js | 174 + .../encodings/tables/big5-added.json | 122 + .../iconv-lite/encodings/tables/cp936.json | 264 + .../iconv-lite/encodings/tables/cp949.json | 273 + .../iconv-lite/encodings/tables/cp950.json | 177 + .../iconv-lite/encodings/tables/eucjp.json | 182 + .../encodings/tables/gb18030-ranges.json | 1 + .../encodings/tables/gbk-added.json | 55 + .../iconv-lite/encodings/tables/shiftjis.json | 125 + .../iconv-lite/encodings/utf16.js | 177 + .../node_modules/iconv-lite/encodings/utf7.js | 290 + .../iconv-lite/lib/bom-handling.js | 52 + .../iconv-lite/lib/extend-node.js | 217 + .../node_modules/iconv-lite/lib/index.d.ts | 24 + .../node_modules/iconv-lite/lib/index.js | 153 + .../node_modules/iconv-lite/lib/streams.js | 121 + .../node_modules/iconv-lite/package.json | 46 + doubao-asr-demo/node_modules/inherits/LICENSE | 16 + .../node_modules/inherits/README.md | 42 + .../node_modules/inherits/inherits.js | 9 + .../node_modules/inherits/inherits_browser.js | 27 + .../node_modules/inherits/package.json | 29 + .../node_modules/ipaddr.js/LICENSE | 19 + .../node_modules/ipaddr.js/README.md | 233 + .../node_modules/ipaddr.js/ipaddr.min.js | 1 + .../node_modules/ipaddr.js/lib/ipaddr.js | 673 ++ .../node_modules/ipaddr.js/lib/ipaddr.js.d.ts | 68 + .../node_modules/ipaddr.js/package.json | 35 + .../node_modules/math-intrinsics/.eslintrc | 16 + .../math-intrinsics/.github/FUNDING.yml | 12 + .../node_modules/math-intrinsics/CHANGELOG.md | 24 + .../node_modules/math-intrinsics/LICENSE | 21 + .../node_modules/math-intrinsics/README.md | 50 + .../node_modules/math-intrinsics/abs.d.ts | 1 + .../node_modules/math-intrinsics/abs.js | 4 + .../constants/maxArrayLength.d.ts | 3 + .../constants/maxArrayLength.js | 4 + .../constants/maxSafeInteger.d.ts | 3 + .../constants/maxSafeInteger.js | 5 + .../math-intrinsics/constants/maxValue.d.ts | 3 + .../math-intrinsics/constants/maxValue.js | 5 + .../node_modules/math-intrinsics/floor.d.ts | 1 + .../node_modules/math-intrinsics/floor.js | 4 + .../math-intrinsics/isFinite.d.ts | 3 + .../node_modules/math-intrinsics/isFinite.js | 12 + .../math-intrinsics/isInteger.d.ts | 3 + .../node_modules/math-intrinsics/isInteger.js | 16 + .../node_modules/math-intrinsics/isNaN.d.ts | 1 + .../node_modules/math-intrinsics/isNaN.js | 6 + .../math-intrinsics/isNegativeZero.d.ts | 3 + .../math-intrinsics/isNegativeZero.js | 6 + .../node_modules/math-intrinsics/max.d.ts | 1 + .../node_modules/math-intrinsics/max.js | 4 + .../node_modules/math-intrinsics/min.d.ts | 1 + .../node_modules/math-intrinsics/min.js | 4 + .../node_modules/math-intrinsics/mod.d.ts | 3 + .../node_modules/math-intrinsics/mod.js | 9 + .../node_modules/math-intrinsics/package.json | 86 + .../node_modules/math-intrinsics/pow.d.ts | 1 + .../node_modules/math-intrinsics/pow.js | 4 + .../node_modules/math-intrinsics/round.d.ts | 1 + .../node_modules/math-intrinsics/round.js | 4 + .../node_modules/math-intrinsics/sign.d.ts | 3 + .../node_modules/math-intrinsics/sign.js | 11 + .../math-intrinsics/test/index.js | 192 + .../math-intrinsics/tsconfig.json | 3 + .../node_modules/media-typer/HISTORY.md | 22 + .../node_modules/media-typer/LICENSE | 22 + .../node_modules/media-typer/README.md | 81 + .../node_modules/media-typer/index.js | 270 + .../node_modules/media-typer/package.json | 26 + .../node_modules/merge-descriptors/HISTORY.md | 21 + .../node_modules/merge-descriptors/LICENSE | 23 + .../node_modules/merge-descriptors/README.md | 49 + .../node_modules/merge-descriptors/index.js | 60 + .../merge-descriptors/package.json | 39 + .../node_modules/methods/HISTORY.md | 29 + doubao-asr-demo/node_modules/methods/LICENSE | 24 + .../node_modules/methods/README.md | 51 + doubao-asr-demo/node_modules/methods/index.js | 69 + .../node_modules/methods/package.json | 36 + .../node_modules/mime-db/HISTORY.md | 507 + doubao-asr-demo/node_modules/mime-db/LICENSE | 23 + .../node_modules/mime-db/README.md | 100 + doubao-asr-demo/node_modules/mime-db/db.json | 8519 +++++++++++++++++ doubao-asr-demo/node_modules/mime-db/index.js | 12 + .../node_modules/mime-db/package.json | 60 + .../node_modules/mime-types/HISTORY.md | 397 + .../node_modules/mime-types/LICENSE | 23 + .../node_modules/mime-types/README.md | 113 + .../node_modules/mime-types/index.js | 188 + .../node_modules/mime-types/package.json | 44 + doubao-asr-demo/node_modules/mime/.npmignore | 0 .../node_modules/mime/CHANGELOG.md | 164 + doubao-asr-demo/node_modules/mime/LICENSE | 21 + doubao-asr-demo/node_modules/mime/README.md | 90 + doubao-asr-demo/node_modules/mime/cli.js | 8 + doubao-asr-demo/node_modules/mime/mime.js | 108 + .../node_modules/mime/package.json | 44 + .../node_modules/mime/src/build.js | 53 + doubao-asr-demo/node_modules/mime/src/test.js | 60 + doubao-asr-demo/node_modules/mime/types.json | 1 + doubao-asr-demo/node_modules/ms/index.js | 152 + doubao-asr-demo/node_modules/ms/license.md | 21 + doubao-asr-demo/node_modules/ms/package.json | 37 + doubao-asr-demo/node_modules/ms/readme.md | 51 + .../node_modules/negotiator/HISTORY.md | 108 + .../node_modules/negotiator/LICENSE | 24 + .../node_modules/negotiator/README.md | 203 + .../node_modules/negotiator/index.js | 82 + .../node_modules/negotiator/lib/charset.js | 169 + .../node_modules/negotiator/lib/encoding.js | 184 + .../node_modules/negotiator/lib/language.js | 179 + .../node_modules/negotiator/lib/mediaType.js | 294 + .../node_modules/negotiator/package.json | 42 + .../.history/README_20210527203617.md | 2 + .../.history/README_20210527212714.md | 41 + .../.history/README_20210527213345.md | 36 + .../.history/README_20210527213411.md | 36 + .../.history/README_20210527213803.md | 36 + .../.history/README_20210527214323.md | 38 + .../.history/README_20210527214408.md | 38 + .../.history/index_20210527203842.js | 0 .../.history/index_20210527203947.js | 8 + .../.history/index_20210527204259.js | 9 + .../.history/index_20210527204418.js | 9 + .../.history/index_20210527204756.js | 11 + .../.history/index_20210527204833.js | 11 + .../.history/index_20210527211208.js | 15 + .../.history/index_20210527211248.js | 15 + .../.history/index_20210527212722.js | 23 + .../.history/index_20210527212731.js | 23 + .../.history/index_20210527212746.js | 15 + .../.history/index_20210527212900.js | 16 + .../.history/index_20210527213022.js | 16 + .../.history/index_20210527213822.js | 16 + .../.history/index_20210527213843.js | 17 + .../.history/index_20210527213852.js | 17 + .../.history/index_20210527213910.js | 16 + .../.history/index_20210527214034.js | 16 + .../.history/index_20210527214643.js | 41 + .../.history/index_20210527214654.js | 41 + .../.history/index_20210527214700.js | 16 + .../.history/package_20210527203733.json | 19 + .../.history/package_20210527203825.json | 16 + .../.history/package_20210527204621.json | 19 + .../.history/package_20210527204913.json | 25 + .../.history/package_20210527204925.json | 25 + .../.history/package_20210527205145.json | 29 + .../.history/package_20210527205156.json | 29 + .../.history/test_20210527205603.js | 0 .../.history/test_20210527205957.js | 3 + .../.history/test_20210527210021.js | 3 + .../node_modules/node-domexception/LICENSE | 21 + .../node_modules/node-domexception/README.md | 46 + .../node_modules/node-domexception/index.js | 16 + .../node-domexception/package.json | 29 + .../node_modules/node-fetch/@types/index.d.ts | 219 + .../node_modules/node-fetch/LICENSE.md | 22 + .../node_modules/node-fetch/README.md | 872 ++ .../node_modules/node-fetch/package.json | 131 + .../node_modules/node-fetch/src/body.js | 397 + .../node-fetch/src/errors/abort-error.js | 10 + .../node-fetch/src/errors/base.js | 17 + .../node-fetch/src/errors/fetch-error.js | 26 + .../node_modules/node-fetch/src/headers.js | 267 + .../node_modules/node-fetch/src/index.js | 417 + .../node_modules/node-fetch/src/request.js | 313 + .../node_modules/node-fetch/src/response.js | 160 + .../node-fetch/src/utils/get-search.js | 9 + .../node-fetch/src/utils/is-redirect.js | 11 + .../node_modules/node-fetch/src/utils/is.js | 87 + .../node-fetch/src/utils/multipart-parser.js | 432 + .../node-fetch/src/utils/referrer.js | 340 + .../node_modules/object-assign/index.js | 90 + .../node_modules/object-assign/license | 21 + .../node_modules/object-assign/package.json | 42 + .../node_modules/object-assign/readme.md | 61 + .../node_modules/object-inspect/.eslintrc | 53 + .../object-inspect/.github/FUNDING.yml | 12 + .../node_modules/object-inspect/.nycrc | 13 + .../node_modules/object-inspect/CHANGELOG.md | 424 + .../node_modules/object-inspect/LICENSE | 21 + .../object-inspect/example/all.js | 23 + .../object-inspect/example/circular.js | 6 + .../node_modules/object-inspect/example/fn.js | 5 + .../object-inspect/example/inspect.js | 10 + .../node_modules/object-inspect/index.js | 544 ++ .../object-inspect/package-support.json | 20 + .../node_modules/object-inspect/package.json | 105 + .../object-inspect/readme.markdown | 84 + .../object-inspect/test-core-js.js | 26 + .../object-inspect/test/bigint.js | 58 + .../object-inspect/test/browser/dom.js | 15 + .../object-inspect/test/circular.js | 16 + .../node_modules/object-inspect/test/deep.js | 12 + .../object-inspect/test/element.js | 53 + .../node_modules/object-inspect/test/err.js | 48 + .../node_modules/object-inspect/test/fakes.js | 29 + .../node_modules/object-inspect/test/fn.js | 76 + .../object-inspect/test/global.js | 17 + .../node_modules/object-inspect/test/has.js | 15 + .../node_modules/object-inspect/test/holes.js | 15 + .../object-inspect/test/indent-option.js | 271 + .../object-inspect/test/inspect.js | 139 + .../object-inspect/test/lowbyte.js | 12 + .../object-inspect/test/number.js | 58 + .../object-inspect/test/quoteStyle.js | 26 + .../object-inspect/test/toStringTag.js | 40 + .../node_modules/object-inspect/test/undef.js | 12 + .../object-inspect/test/values.js | 261 + .../object-inspect/util.inspect.js | 1 + .../node_modules/on-finished/HISTORY.md | 98 + .../node_modules/on-finished/LICENSE | 23 + .../node_modules/on-finished/README.md | 162 + .../node_modules/on-finished/index.js | 234 + .../node_modules/on-finished/package.json | 39 + .../node_modules/parseurl/HISTORY.md | 58 + doubao-asr-demo/node_modules/parseurl/LICENSE | 24 + .../node_modules/parseurl/README.md | 133 + .../node_modules/parseurl/index.js | 158 + .../node_modules/parseurl/package.json | 40 + .../node_modules/path-to-regexp/LICENSE | 21 + .../node_modules/path-to-regexp/Readme.md | 35 + .../node_modules/path-to-regexp/index.js | 156 + .../node_modules/path-to-regexp/package.json | 30 + .../node_modules/proxy-addr/HISTORY.md | 161 + .../node_modules/proxy-addr/LICENSE | 22 + .../node_modules/proxy-addr/README.md | 139 + .../node_modules/proxy-addr/index.js | 327 + .../node_modules/proxy-addr/package.json | 47 + doubao-asr-demo/node_modules/qs/.editorconfig | 46 + doubao-asr-demo/node_modules/qs/.eslintrc | 38 + .../node_modules/qs/.github/FUNDING.yml | 12 + doubao-asr-demo/node_modules/qs/.nycrc | 13 + doubao-asr-demo/node_modules/qs/CHANGELOG.md | 600 ++ doubao-asr-demo/node_modules/qs/LICENSE.md | 29 + doubao-asr-demo/node_modules/qs/README.md | 709 ++ doubao-asr-demo/node_modules/qs/dist/qs.js | 90 + .../node_modules/qs/lib/formats.js | 23 + doubao-asr-demo/node_modules/qs/lib/index.js | 11 + doubao-asr-demo/node_modules/qs/lib/parse.js | 296 + .../node_modules/qs/lib/stringify.js | 351 + doubao-asr-demo/node_modules/qs/lib/utils.js | 265 + doubao-asr-demo/node_modules/qs/package.json | 91 + .../node_modules/qs/test/empty-keys-cases.js | 267 + doubao-asr-demo/node_modules/qs/test/parse.js | 1170 +++ .../node_modules/qs/test/stringify.js | 1298 +++ doubao-asr-demo/node_modules/qs/test/utils.js | 136 + .../node_modules/range-parser/HISTORY.md | 56 + .../node_modules/range-parser/LICENSE | 23 + .../node_modules/range-parser/README.md | 84 + .../node_modules/range-parser/index.js | 162 + .../node_modules/range-parser/package.json | 44 + .../node_modules/raw-body/HISTORY.md | 308 + doubao-asr-demo/node_modules/raw-body/LICENSE | 22 + .../node_modules/raw-body/README.md | 223 + .../node_modules/raw-body/SECURITY.md | 24 + .../node_modules/raw-body/index.d.ts | 87 + .../node_modules/raw-body/index.js | 336 + .../node_modules/raw-body/package.json | 49 + .../node_modules/requires-port/.npmignore | 2 + .../node_modules/requires-port/.travis.yml | 19 + .../node_modules/requires-port/LICENSE | 22 + .../node_modules/requires-port/README.md | 47 + .../node_modules/requires-port/index.js | 38 + .../node_modules/requires-port/package.json | 47 + .../node_modules/requires-port/test.js | 98 + .../node_modules/safe-buffer/LICENSE | 21 + .../node_modules/safe-buffer/README.md | 584 ++ .../node_modules/safe-buffer/index.d.ts | 187 + .../node_modules/safe-buffer/index.js | 65 + .../node_modules/safe-buffer/package.json | 51 + .../node_modules/safer-buffer/LICENSE | 21 + .../safer-buffer/Porting-Buffer.md | 268 + .../node_modules/safer-buffer/Readme.md | 156 + .../node_modules/safer-buffer/dangerous.js | 58 + .../node_modules/safer-buffer/package.json | 34 + .../node_modules/safer-buffer/safer.js | 77 + .../node_modules/safer-buffer/tests.js | 406 + doubao-asr-demo/node_modules/send/HISTORY.md | 526 + doubao-asr-demo/node_modules/send/LICENSE | 23 + doubao-asr-demo/node_modules/send/README.md | 327 + doubao-asr-demo/node_modules/send/SECURITY.md | 24 + doubao-asr-demo/node_modules/send/index.js | 1142 +++ .../send/node_modules/encodeurl/HISTORY.md | 14 + .../send/node_modules/encodeurl/LICENSE | 22 + .../send/node_modules/encodeurl/README.md | 128 + .../send/node_modules/encodeurl/index.js | 60 + .../send/node_modules/encodeurl/package.json | 40 + .../send/node_modules/ms/index.js | 162 + .../send/node_modules/ms/license.md | 21 + .../send/node_modules/ms/package.json | 38 + .../send/node_modules/ms/readme.md | 59 + .../node_modules/send/package.json | 62 + .../node_modules/serve-static/HISTORY.md | 487 + .../node_modules/serve-static/LICENSE | 25 + .../node_modules/serve-static/README.md | 257 + .../node_modules/serve-static/index.js | 209 + .../node_modules/serve-static/package.json | 42 + .../node_modules/setprototypeof/LICENSE | 13 + .../node_modules/setprototypeof/README.md | 31 + .../node_modules/setprototypeof/index.d.ts | 2 + .../node_modules/setprototypeof/index.js | 17 + .../node_modules/setprototypeof/package.json | 38 + .../node_modules/setprototypeof/test/index.js | 24 + .../side-channel-list/.editorconfig | 9 + .../node_modules/side-channel-list/.eslintrc | 11 + .../side-channel-list/.github/FUNDING.yml | 12 + .../node_modules/side-channel-list/.nycrc | 13 + .../side-channel-list/CHANGELOG.md | 15 + .../node_modules/side-channel-list/LICENSE | 21 + .../node_modules/side-channel-list/README.md | 62 + .../node_modules/side-channel-list/index.d.ts | 13 + .../node_modules/side-channel-list/index.js | 113 + .../node_modules/side-channel-list/list.d.ts | 14 + .../side-channel-list/package.json | 77 + .../side-channel-list/test/index.js | 104 + .../side-channel-list/tsconfig.json | 9 + .../side-channel-map/.editorconfig | 9 + .../node_modules/side-channel-map/.eslintrc | 11 + .../side-channel-map/.github/FUNDING.yml | 12 + .../node_modules/side-channel-map/.nycrc | 13 + .../side-channel-map/CHANGELOG.md | 22 + .../node_modules/side-channel-map/LICENSE | 21 + .../node_modules/side-channel-map/README.md | 62 + .../node_modules/side-channel-map/index.d.ts | 15 + .../node_modules/side-channel-map/index.js | 68 + .../side-channel-map/package.json | 80 + .../side-channel-map/test/index.js | 114 + .../side-channel-map/tsconfig.json | 9 + .../side-channel-weakmap/.editorconfig | 9 + .../side-channel-weakmap/.eslintrc | 12 + .../side-channel-weakmap/.github/FUNDING.yml | 12 + .../node_modules/side-channel-weakmap/.nycrc | 13 + .../side-channel-weakmap/CHANGELOG.md | 28 + .../node_modules/side-channel-weakmap/LICENSE | 21 + .../side-channel-weakmap/README.md | 62 + .../side-channel-weakmap/index.d.ts | 15 + .../side-channel-weakmap/index.js | 84 + .../side-channel-weakmap/package.json | 87 + .../side-channel-weakmap/test/index.js | 114 + .../side-channel-weakmap/tsconfig.json | 9 + .../node_modules/side-channel/.editorconfig | 9 + .../node_modules/side-channel/.eslintrc | 12 + .../side-channel/.github/FUNDING.yml | 12 + .../node_modules/side-channel/.nycrc | 13 + .../node_modules/side-channel/CHANGELOG.md | 110 + .../node_modules/side-channel/LICENSE | 21 + .../node_modules/side-channel/README.md | 61 + .../node_modules/side-channel/index.d.ts | 14 + .../node_modules/side-channel/index.js | 43 + .../node_modules/side-channel/package.json | 85 + .../node_modules/side-channel/test/index.js | 104 + .../node_modules/side-channel/tsconfig.json | 9 + .../node_modules/statuses/HISTORY.md | 82 + doubao-asr-demo/node_modules/statuses/LICENSE | 23 + .../node_modules/statuses/README.md | 136 + .../node_modules/statuses/codes.json | 65 + .../node_modules/statuses/index.js | 146 + .../node_modules/statuses/package.json | 49 + .../node_modules/toidentifier/HISTORY.md | 9 + .../node_modules/toidentifier/LICENSE | 21 + .../node_modules/toidentifier/README.md | 61 + .../node_modules/toidentifier/index.js | 32 + .../node_modules/toidentifier/package.json | 38 + .../node_modules/type-is/HISTORY.md | 259 + doubao-asr-demo/node_modules/type-is/LICENSE | 23 + .../node_modules/type-is/README.md | 170 + doubao-asr-demo/node_modules/type-is/index.js | 266 + .../node_modules/type-is/package.json | 45 + .../node_modules/unpipe/HISTORY.md | 4 + doubao-asr-demo/node_modules/unpipe/LICENSE | 22 + doubao-asr-demo/node_modules/unpipe/README.md | 43 + doubao-asr-demo/node_modules/unpipe/index.js | 69 + .../node_modules/unpipe/package.json | 27 + .../node_modules/utils-merge/.npmignore | 9 + .../node_modules/utils-merge/LICENSE | 20 + .../node_modules/utils-merge/README.md | 34 + .../node_modules/utils-merge/index.js | 23 + .../node_modules/utils-merge/package.json | 40 + doubao-asr-demo/node_modules/vary/HISTORY.md | 39 + doubao-asr-demo/node_modules/vary/LICENSE | 22 + doubao-asr-demo/node_modules/vary/README.md | 101 + doubao-asr-demo/node_modules/vary/index.js | 149 + .../node_modules/vary/package.json | 43 + .../node_modules/web-streams-polyfill/LICENSE | 22 + .../web-streams-polyfill/README.md | 110 + .../dist/polyfill.es2018.js | 4765 +++++++++ .../dist/polyfill.es2018.js.map | 1 + .../dist/polyfill.es2018.min.js | 9 + .../dist/polyfill.es2018.min.js.map | 1 + .../dist/polyfill.es2018.mjs | 4745 +++++++++ .../dist/polyfill.es2018.mjs.map | 1 + .../web-streams-polyfill/dist/polyfill.es6.js | 4838 ++++++++++ .../dist/polyfill.es6.js.map | 1 + .../dist/polyfill.es6.min.js | 9 + .../dist/polyfill.es6.min.js.map | 1 + .../dist/polyfill.es6.mjs | 4818 ++++++++++ .../dist/polyfill.es6.mjs.map | 1 + .../web-streams-polyfill/dist/polyfill.js | 5011 ++++++++++ .../web-streams-polyfill/dist/polyfill.js.map | 1 + .../web-streams-polyfill/dist/polyfill.min.js | 9 + .../dist/polyfill.min.js.map | 1 + .../web-streams-polyfill/dist/polyfill.mjs | 4991 ++++++++++ .../dist/polyfill.mjs.map | 1 + .../dist/ponyfill.es2018.js | 4737 +++++++++ .../dist/ponyfill.es2018.js.map | 1 + .../dist/ponyfill.es2018.mjs | 4717 +++++++++ .../dist/ponyfill.es2018.mjs.map | 1 + .../web-streams-polyfill/dist/ponyfill.es6.js | 4810 ++++++++++ .../dist/ponyfill.es6.js.map | 1 + .../dist/ponyfill.es6.mjs | 4790 +++++++++ .../dist/ponyfill.es6.mjs.map | 1 + .../web-streams-polyfill/dist/ponyfill.js | 4983 ++++++++++ .../web-streams-polyfill/dist/ponyfill.js.map | 1 + .../web-streams-polyfill/dist/ponyfill.mjs | 4963 ++++++++++ .../dist/ponyfill.mjs.map | 1 + .../dist/types/polyfill.d.ts | 24 + .../dist/types/ponyfill.d.ts | 780 ++ .../dist/types/ts3.6/polyfill.d.ts | 28 + .../dist/types/ts3.6/ponyfill.d.ts | 821 ++ .../dist/types/tsdoc-metadata.json | 11 + .../web-streams-polyfill/es2018/package.json | 14 + .../web-streams-polyfill/es6/package.json | 14 + .../web-streams-polyfill/package.json | 83 + .../ponyfill/es2018/package.json | 13 + .../ponyfill/es6/package.json | 13 + .../ponyfill/package.json | 13 + doubao-asr-demo/package-lock.json | 1008 ++ doubao-asr-demo/package.json | 21 + doubao-asr-demo/server/index.js | 228 + doubao-asr-demo/styles.css | 394 + legacy-deepagens/.DS_Store | Bin 0 -> 6148 bytes .../deepagens-new}/about.html | 0 .../deepagens-new}/assets/about-team.svg | 0 .../deepagens-new}/assets/blog1.svg | 0 .../deepagens-new}/assets/blog2.svg | 0 .../deepagens-new}/assets/blog3.svg | 0 .../deepagens-new}/assets/brand1.svg | 0 .../deepagens-new}/assets/brand2.svg | 0 .../deepagens-new}/assets/brand3.svg | 0 .../deepagens-new}/assets/brand4.svg | 0 .../deepagens-new}/assets/brand5.svg | 0 .../deepagens-new}/assets/case1.svg | 0 .../deepagens-new}/assets/case2.svg | 0 .../deepagens-new}/assets/case3.svg | 0 .../deepagens-new}/assets/chart-cost.svg | 0 .../deepagens-new}/assets/chart-growth.svg | 0 .../deepagens-new}/assets/contact-hero.svg | 0 .../deepagens-new}/assets/flow-raas.svg | 0 .../deepagens-new}/assets/hero.svg | 0 .../deepagens-new}/assets/icon-check.svg | 0 .../deepagens-new}/assets/qr-raas.svg | 0 .../deepagens-new}/assets/slide1.svg | 0 .../deepagens-new}/assets/slide2.svg | 0 .../deepagens-new}/assets/slide3.svg | 0 .../deepagens-new}/assets/slide4.svg | 0 .../deepagens-new}/assets/slide5.svg | 0 .../deepagens-new}/assets/testimonial1.svg | 0 .../deepagens-new}/assets/testimonial2.svg | 0 .../deepagens-new}/assets/testimonial3.svg | 0 .../deepagens-new}/blog.html | 0 .../deepagens-new}/cases.html | 0 legacy-deepagens/deepagens-new/contact.html | 86 + .../deepagens-new}/index.html | 23 +- .../deepagens-new}/privacy.html | 0 .../deepagens-new}/script.js | 0 .../services/raas-platform/index.html | 0 .../deepagens-new}/solutions.html | 0 .../deepagens-new}/styles.css | 16 +- .../deepagens-new}/terms.html | 0 879 files changed, 147339 insertions(+), 735 deletions(-) create mode 100644 .DS_Store create mode 100644 .codebuddy/status.log create mode 100644 .codebuddy/todo.json create mode 100644 TODO delete mode 100644 deepagens-new/contact.html delete mode 100644 deepagens-static/about.html delete mode 100644 deepagens-static/blog.html delete mode 100644 deepagens-static/cases.html delete mode 100644 deepagens-static/contact.html delete mode 100644 deepagens-static/developers.html delete mode 100644 deepagens-static/index.html delete mode 100644 deepagens-static/media.html delete mode 100644 deepagens-static/pricing.html delete mode 100644 deepagens-static/privacy.html delete mode 100644 deepagens-static/resources.html delete mode 100644 deepagens-static/script.js delete mode 100644 deepagens-static/solutions.html delete mode 100644 deepagens-static/styles.css create mode 100644 doubao-asr-demo/.DS_Store create mode 100644 doubao-asr-demo/.env create mode 100644 doubao-asr-demo/.env.example create mode 100644 doubao-asr-demo/README.md create mode 100644 doubao-asr-demo/index.html create mode 100644 doubao-asr-demo/logs/asr.log create mode 100644 doubao-asr-demo/main.js create mode 100644 doubao-asr-demo/node_modules/.DS_Store create mode 120000 doubao-asr-demo/node_modules/.bin/mime create mode 100644 doubao-asr-demo/node_modules/.package-lock.json create mode 100644 doubao-asr-demo/node_modules/accepts/HISTORY.md create mode 100644 doubao-asr-demo/node_modules/accepts/LICENSE create mode 100644 doubao-asr-demo/node_modules/accepts/README.md create mode 100644 doubao-asr-demo/node_modules/accepts/index.js create mode 100644 doubao-asr-demo/node_modules/accepts/package.json create mode 100644 doubao-asr-demo/node_modules/array-flatten/LICENSE create mode 100644 doubao-asr-demo/node_modules/array-flatten/README.md create mode 100644 doubao-asr-demo/node_modules/array-flatten/array-flatten.js create mode 100644 doubao-asr-demo/node_modules/array-flatten/package.json create mode 100644 doubao-asr-demo/node_modules/body-parser/HISTORY.md create mode 100644 doubao-asr-demo/node_modules/body-parser/LICENSE create mode 100644 doubao-asr-demo/node_modules/body-parser/README.md create mode 100644 doubao-asr-demo/node_modules/body-parser/SECURITY.md create mode 100644 doubao-asr-demo/node_modules/body-parser/index.js create mode 100644 doubao-asr-demo/node_modules/body-parser/lib/read.js create mode 100644 doubao-asr-demo/node_modules/body-parser/lib/types/json.js create mode 100644 doubao-asr-demo/node_modules/body-parser/lib/types/raw.js create mode 100644 doubao-asr-demo/node_modules/body-parser/lib/types/text.js create mode 100644 doubao-asr-demo/node_modules/body-parser/lib/types/urlencoded.js create mode 100644 doubao-asr-demo/node_modules/body-parser/package.json create mode 100644 doubao-asr-demo/node_modules/bytes/History.md create mode 100644 doubao-asr-demo/node_modules/bytes/LICENSE create mode 100644 doubao-asr-demo/node_modules/bytes/Readme.md create mode 100644 doubao-asr-demo/node_modules/bytes/index.js create mode 100644 doubao-asr-demo/node_modules/bytes/package.json create mode 100644 doubao-asr-demo/node_modules/call-bind-apply-helpers/.eslintrc create mode 100644 doubao-asr-demo/node_modules/call-bind-apply-helpers/.github/FUNDING.yml create mode 100644 doubao-asr-demo/node_modules/call-bind-apply-helpers/.nycrc create mode 100644 doubao-asr-demo/node_modules/call-bind-apply-helpers/CHANGELOG.md create mode 100644 doubao-asr-demo/node_modules/call-bind-apply-helpers/LICENSE create mode 100644 doubao-asr-demo/node_modules/call-bind-apply-helpers/README.md create mode 100644 doubao-asr-demo/node_modules/call-bind-apply-helpers/actualApply.d.ts create mode 100644 doubao-asr-demo/node_modules/call-bind-apply-helpers/actualApply.js create mode 100644 doubao-asr-demo/node_modules/call-bind-apply-helpers/applyBind.d.ts create mode 100644 doubao-asr-demo/node_modules/call-bind-apply-helpers/applyBind.js create mode 100644 doubao-asr-demo/node_modules/call-bind-apply-helpers/functionApply.d.ts create mode 100644 doubao-asr-demo/node_modules/call-bind-apply-helpers/functionApply.js create mode 100644 doubao-asr-demo/node_modules/call-bind-apply-helpers/functionCall.d.ts create mode 100644 doubao-asr-demo/node_modules/call-bind-apply-helpers/functionCall.js create mode 100644 doubao-asr-demo/node_modules/call-bind-apply-helpers/index.d.ts create mode 100644 doubao-asr-demo/node_modules/call-bind-apply-helpers/index.js create mode 100644 doubao-asr-demo/node_modules/call-bind-apply-helpers/package.json create mode 100644 doubao-asr-demo/node_modules/call-bind-apply-helpers/reflectApply.d.ts create mode 100644 doubao-asr-demo/node_modules/call-bind-apply-helpers/reflectApply.js create mode 100644 doubao-asr-demo/node_modules/call-bind-apply-helpers/test/index.js create mode 100644 doubao-asr-demo/node_modules/call-bind-apply-helpers/tsconfig.json create mode 100644 doubao-asr-demo/node_modules/call-bound/.eslintrc create mode 100644 doubao-asr-demo/node_modules/call-bound/.github/FUNDING.yml create mode 100644 doubao-asr-demo/node_modules/call-bound/.nycrc create mode 100644 doubao-asr-demo/node_modules/call-bound/CHANGELOG.md create mode 100644 doubao-asr-demo/node_modules/call-bound/LICENSE create mode 100644 doubao-asr-demo/node_modules/call-bound/README.md create mode 100644 doubao-asr-demo/node_modules/call-bound/index.d.ts create mode 100644 doubao-asr-demo/node_modules/call-bound/index.js create mode 100644 doubao-asr-demo/node_modules/call-bound/package.json create mode 100644 doubao-asr-demo/node_modules/call-bound/test/index.js create mode 100644 doubao-asr-demo/node_modules/call-bound/tsconfig.json create mode 100644 doubao-asr-demo/node_modules/content-disposition/HISTORY.md create mode 100644 doubao-asr-demo/node_modules/content-disposition/LICENSE create mode 100644 doubao-asr-demo/node_modules/content-disposition/README.md create mode 100644 doubao-asr-demo/node_modules/content-disposition/index.js create mode 100644 doubao-asr-demo/node_modules/content-disposition/package.json create mode 100644 doubao-asr-demo/node_modules/content-type/HISTORY.md create mode 100644 doubao-asr-demo/node_modules/content-type/LICENSE create mode 100644 doubao-asr-demo/node_modules/content-type/README.md create mode 100644 doubao-asr-demo/node_modules/content-type/index.js create mode 100644 doubao-asr-demo/node_modules/content-type/package.json create mode 100644 doubao-asr-demo/node_modules/cookie-signature/.npmignore create mode 100644 doubao-asr-demo/node_modules/cookie-signature/History.md create mode 100644 doubao-asr-demo/node_modules/cookie-signature/Readme.md create mode 100644 doubao-asr-demo/node_modules/cookie-signature/index.js create mode 100644 doubao-asr-demo/node_modules/cookie-signature/package.json create mode 100644 doubao-asr-demo/node_modules/cookie/LICENSE create mode 100644 doubao-asr-demo/node_modules/cookie/README.md create mode 100644 doubao-asr-demo/node_modules/cookie/SECURITY.md create mode 100644 doubao-asr-demo/node_modules/cookie/index.js create mode 100644 doubao-asr-demo/node_modules/cookie/package.json create mode 100644 doubao-asr-demo/node_modules/cors/CONTRIBUTING.md create mode 100644 doubao-asr-demo/node_modules/cors/HISTORY.md create mode 100644 doubao-asr-demo/node_modules/cors/LICENSE create mode 100644 doubao-asr-demo/node_modules/cors/README.md create mode 100644 doubao-asr-demo/node_modules/cors/lib/index.js create mode 100644 doubao-asr-demo/node_modules/cors/package.json create mode 100644 doubao-asr-demo/node_modules/data-uri-to-buffer/README.md create mode 100644 doubao-asr-demo/node_modules/data-uri-to-buffer/dist/index.d.ts create mode 100644 doubao-asr-demo/node_modules/data-uri-to-buffer/dist/index.js create mode 100644 doubao-asr-demo/node_modules/data-uri-to-buffer/dist/index.js.map create mode 100644 doubao-asr-demo/node_modules/data-uri-to-buffer/package.json create mode 100644 doubao-asr-demo/node_modules/data-uri-to-buffer/src/index.ts create mode 100644 doubao-asr-demo/node_modules/debug/.coveralls.yml create mode 100644 doubao-asr-demo/node_modules/debug/.eslintrc create mode 100644 doubao-asr-demo/node_modules/debug/.npmignore create mode 100644 doubao-asr-demo/node_modules/debug/.travis.yml create mode 100644 doubao-asr-demo/node_modules/debug/CHANGELOG.md create mode 100644 doubao-asr-demo/node_modules/debug/LICENSE create mode 100644 doubao-asr-demo/node_modules/debug/Makefile create mode 100644 doubao-asr-demo/node_modules/debug/README.md create mode 100644 doubao-asr-demo/node_modules/debug/component.json create mode 100644 doubao-asr-demo/node_modules/debug/karma.conf.js create mode 100644 doubao-asr-demo/node_modules/debug/node.js create mode 100644 doubao-asr-demo/node_modules/debug/package.json create mode 100644 doubao-asr-demo/node_modules/debug/src/browser.js create mode 100644 doubao-asr-demo/node_modules/debug/src/debug.js create mode 100644 doubao-asr-demo/node_modules/debug/src/index.js create mode 100644 doubao-asr-demo/node_modules/debug/src/inspector-log.js create mode 100644 doubao-asr-demo/node_modules/debug/src/node.js create mode 100644 doubao-asr-demo/node_modules/depd/History.md create mode 100644 doubao-asr-demo/node_modules/depd/LICENSE create mode 100644 doubao-asr-demo/node_modules/depd/Readme.md create mode 100644 doubao-asr-demo/node_modules/depd/index.js create mode 100644 doubao-asr-demo/node_modules/depd/lib/browser/index.js create mode 100644 doubao-asr-demo/node_modules/depd/package.json create mode 100644 doubao-asr-demo/node_modules/destroy/LICENSE create mode 100644 doubao-asr-demo/node_modules/destroy/README.md create mode 100644 doubao-asr-demo/node_modules/destroy/index.js create mode 100644 doubao-asr-demo/node_modules/destroy/package.json create mode 100644 doubao-asr-demo/node_modules/dotenv/CHANGELOG.md create mode 100644 doubao-asr-demo/node_modules/dotenv/LICENSE create mode 100644 doubao-asr-demo/node_modules/dotenv/README-es.md create mode 100644 doubao-asr-demo/node_modules/dotenv/README.md create mode 100644 doubao-asr-demo/node_modules/dotenv/SECURITY.md create mode 100644 doubao-asr-demo/node_modules/dotenv/config.d.ts create mode 100644 doubao-asr-demo/node_modules/dotenv/config.js create mode 100644 doubao-asr-demo/node_modules/dotenv/lib/cli-options.js create mode 100644 doubao-asr-demo/node_modules/dotenv/lib/env-options.js create mode 100644 doubao-asr-demo/node_modules/dotenv/lib/main.d.ts create mode 100644 doubao-asr-demo/node_modules/dotenv/lib/main.js create mode 100644 doubao-asr-demo/node_modules/dotenv/package.json create mode 100644 doubao-asr-demo/node_modules/dunder-proto/.eslintrc create mode 100644 doubao-asr-demo/node_modules/dunder-proto/.github/FUNDING.yml create mode 100644 doubao-asr-demo/node_modules/dunder-proto/.nycrc create mode 100644 doubao-asr-demo/node_modules/dunder-proto/CHANGELOG.md create mode 100644 doubao-asr-demo/node_modules/dunder-proto/LICENSE create mode 100644 doubao-asr-demo/node_modules/dunder-proto/README.md create mode 100644 doubao-asr-demo/node_modules/dunder-proto/get.d.ts create mode 100644 doubao-asr-demo/node_modules/dunder-proto/get.js create mode 100644 doubao-asr-demo/node_modules/dunder-proto/package.json create mode 100644 doubao-asr-demo/node_modules/dunder-proto/set.d.ts create mode 100644 doubao-asr-demo/node_modules/dunder-proto/set.js create mode 100644 doubao-asr-demo/node_modules/dunder-proto/test/get.js create mode 100644 doubao-asr-demo/node_modules/dunder-proto/test/index.js create mode 100644 doubao-asr-demo/node_modules/dunder-proto/test/set.js create mode 100644 doubao-asr-demo/node_modules/dunder-proto/tsconfig.json create mode 100644 doubao-asr-demo/node_modules/ee-first/LICENSE create mode 100644 doubao-asr-demo/node_modules/ee-first/README.md create mode 100644 doubao-asr-demo/node_modules/ee-first/index.js create mode 100644 doubao-asr-demo/node_modules/ee-first/package.json create mode 100644 doubao-asr-demo/node_modules/encodeurl/LICENSE create mode 100644 doubao-asr-demo/node_modules/encodeurl/README.md create mode 100644 doubao-asr-demo/node_modules/encodeurl/index.js create mode 100644 doubao-asr-demo/node_modules/encodeurl/package.json create mode 100644 doubao-asr-demo/node_modules/es-define-property/.eslintrc create mode 100644 doubao-asr-demo/node_modules/es-define-property/.github/FUNDING.yml create mode 100644 doubao-asr-demo/node_modules/es-define-property/.nycrc create mode 100644 doubao-asr-demo/node_modules/es-define-property/CHANGELOG.md create mode 100644 doubao-asr-demo/node_modules/es-define-property/LICENSE create mode 100644 doubao-asr-demo/node_modules/es-define-property/README.md create mode 100644 doubao-asr-demo/node_modules/es-define-property/index.d.ts create mode 100644 doubao-asr-demo/node_modules/es-define-property/index.js create mode 100644 doubao-asr-demo/node_modules/es-define-property/package.json create mode 100644 doubao-asr-demo/node_modules/es-define-property/test/index.js create mode 100644 doubao-asr-demo/node_modules/es-define-property/tsconfig.json create mode 100644 doubao-asr-demo/node_modules/es-errors/.eslintrc create mode 100644 doubao-asr-demo/node_modules/es-errors/.github/FUNDING.yml create mode 100644 doubao-asr-demo/node_modules/es-errors/CHANGELOG.md create mode 100644 doubao-asr-demo/node_modules/es-errors/LICENSE create mode 100644 doubao-asr-demo/node_modules/es-errors/README.md create mode 100644 doubao-asr-demo/node_modules/es-errors/eval.d.ts create mode 100644 doubao-asr-demo/node_modules/es-errors/eval.js create mode 100644 doubao-asr-demo/node_modules/es-errors/index.d.ts create mode 100644 doubao-asr-demo/node_modules/es-errors/index.js create mode 100644 doubao-asr-demo/node_modules/es-errors/package.json create mode 100644 doubao-asr-demo/node_modules/es-errors/range.d.ts create mode 100644 doubao-asr-demo/node_modules/es-errors/range.js create mode 100644 doubao-asr-demo/node_modules/es-errors/ref.d.ts create mode 100644 doubao-asr-demo/node_modules/es-errors/ref.js create mode 100644 doubao-asr-demo/node_modules/es-errors/syntax.d.ts create mode 100644 doubao-asr-demo/node_modules/es-errors/syntax.js create mode 100644 doubao-asr-demo/node_modules/es-errors/test/index.js create mode 100644 doubao-asr-demo/node_modules/es-errors/tsconfig.json create mode 100644 doubao-asr-demo/node_modules/es-errors/type.d.ts create mode 100644 doubao-asr-demo/node_modules/es-errors/type.js create mode 100644 doubao-asr-demo/node_modules/es-errors/uri.d.ts create mode 100644 doubao-asr-demo/node_modules/es-errors/uri.js create mode 100644 doubao-asr-demo/node_modules/es-object-atoms/.eslintrc create mode 100644 doubao-asr-demo/node_modules/es-object-atoms/.github/FUNDING.yml create mode 100644 doubao-asr-demo/node_modules/es-object-atoms/CHANGELOG.md create mode 100644 doubao-asr-demo/node_modules/es-object-atoms/LICENSE create mode 100644 doubao-asr-demo/node_modules/es-object-atoms/README.md create mode 100644 doubao-asr-demo/node_modules/es-object-atoms/RequireObjectCoercible.d.ts create mode 100644 doubao-asr-demo/node_modules/es-object-atoms/RequireObjectCoercible.js create mode 100644 doubao-asr-demo/node_modules/es-object-atoms/ToObject.d.ts create mode 100644 doubao-asr-demo/node_modules/es-object-atoms/ToObject.js create mode 100644 doubao-asr-demo/node_modules/es-object-atoms/index.d.ts create mode 100644 doubao-asr-demo/node_modules/es-object-atoms/index.js create mode 100644 doubao-asr-demo/node_modules/es-object-atoms/isObject.d.ts create mode 100644 doubao-asr-demo/node_modules/es-object-atoms/isObject.js create mode 100644 doubao-asr-demo/node_modules/es-object-atoms/package.json create mode 100644 doubao-asr-demo/node_modules/es-object-atoms/test/index.js create mode 100644 doubao-asr-demo/node_modules/es-object-atoms/tsconfig.json create mode 100644 doubao-asr-demo/node_modules/escape-html/LICENSE create mode 100644 doubao-asr-demo/node_modules/escape-html/Readme.md create mode 100644 doubao-asr-demo/node_modules/escape-html/index.js create mode 100644 doubao-asr-demo/node_modules/escape-html/package.json create mode 100644 doubao-asr-demo/node_modules/etag/HISTORY.md create mode 100644 doubao-asr-demo/node_modules/etag/LICENSE create mode 100644 doubao-asr-demo/node_modules/etag/README.md create mode 100644 doubao-asr-demo/node_modules/etag/index.js create mode 100644 doubao-asr-demo/node_modules/etag/package.json create mode 100644 doubao-asr-demo/node_modules/eventemitter3/LICENSE create mode 100644 doubao-asr-demo/node_modules/eventemitter3/README.md create mode 100644 doubao-asr-demo/node_modules/eventemitter3/index.d.ts create mode 100644 doubao-asr-demo/node_modules/eventemitter3/index.js create mode 100644 doubao-asr-demo/node_modules/eventemitter3/package.json create mode 100644 doubao-asr-demo/node_modules/eventemitter3/umd/eventemitter3.js create mode 100644 doubao-asr-demo/node_modules/eventemitter3/umd/eventemitter3.min.js create mode 100644 doubao-asr-demo/node_modules/eventemitter3/umd/eventemitter3.min.js.map create mode 100644 doubao-asr-demo/node_modules/express/History.md create mode 100644 doubao-asr-demo/node_modules/express/LICENSE create mode 100644 doubao-asr-demo/node_modules/express/Readme.md create mode 100644 doubao-asr-demo/node_modules/express/index.js create mode 100644 doubao-asr-demo/node_modules/express/lib/application.js create mode 100644 doubao-asr-demo/node_modules/express/lib/express.js create mode 100644 doubao-asr-demo/node_modules/express/lib/middleware/init.js create mode 100644 doubao-asr-demo/node_modules/express/lib/middleware/query.js create mode 100644 doubao-asr-demo/node_modules/express/lib/request.js create mode 100644 doubao-asr-demo/node_modules/express/lib/response.js create mode 100644 doubao-asr-demo/node_modules/express/lib/router/index.js create mode 100644 doubao-asr-demo/node_modules/express/lib/router/layer.js create mode 100644 doubao-asr-demo/node_modules/express/lib/router/route.js create mode 100644 doubao-asr-demo/node_modules/express/lib/utils.js create mode 100644 doubao-asr-demo/node_modules/express/lib/view.js create mode 100644 doubao-asr-demo/node_modules/express/package.json create mode 100644 doubao-asr-demo/node_modules/fetch-blob/LICENSE create mode 100644 doubao-asr-demo/node_modules/fetch-blob/README.md create mode 100644 doubao-asr-demo/node_modules/fetch-blob/file.d.ts create mode 100644 doubao-asr-demo/node_modules/fetch-blob/file.js create mode 100644 doubao-asr-demo/node_modules/fetch-blob/from.d.ts create mode 100644 doubao-asr-demo/node_modules/fetch-blob/from.js create mode 100644 doubao-asr-demo/node_modules/fetch-blob/index.d.ts create mode 100644 doubao-asr-demo/node_modules/fetch-blob/index.js create mode 100644 doubao-asr-demo/node_modules/fetch-blob/package.json create mode 100644 doubao-asr-demo/node_modules/fetch-blob/streams.cjs create mode 100644 doubao-asr-demo/node_modules/finalhandler/HISTORY.md create mode 100644 doubao-asr-demo/node_modules/finalhandler/LICENSE create mode 100644 doubao-asr-demo/node_modules/finalhandler/README.md create mode 100644 doubao-asr-demo/node_modules/finalhandler/SECURITY.md create mode 100644 doubao-asr-demo/node_modules/finalhandler/index.js create mode 100644 doubao-asr-demo/node_modules/finalhandler/package.json create mode 100644 doubao-asr-demo/node_modules/follow-redirects/LICENSE create mode 100644 doubao-asr-demo/node_modules/follow-redirects/README.md create mode 100644 doubao-asr-demo/node_modules/follow-redirects/debug.js create mode 100644 doubao-asr-demo/node_modules/follow-redirects/http.js create mode 100644 doubao-asr-demo/node_modules/follow-redirects/https.js create mode 100644 doubao-asr-demo/node_modules/follow-redirects/index.js create mode 100644 doubao-asr-demo/node_modules/follow-redirects/package.json create mode 100644 doubao-asr-demo/node_modules/formdata-polyfill/FormData.js create mode 100644 doubao-asr-demo/node_modules/formdata-polyfill/LICENSE create mode 100644 doubao-asr-demo/node_modules/formdata-polyfill/README.md create mode 100644 doubao-asr-demo/node_modules/formdata-polyfill/esm.min.d.ts create mode 100644 doubao-asr-demo/node_modules/formdata-polyfill/esm.min.js create mode 100644 doubao-asr-demo/node_modules/formdata-polyfill/formdata-to-blob.js create mode 100644 doubao-asr-demo/node_modules/formdata-polyfill/formdata.min.js create mode 100644 doubao-asr-demo/node_modules/formdata-polyfill/package.json create mode 100644 doubao-asr-demo/node_modules/forwarded/HISTORY.md create mode 100644 doubao-asr-demo/node_modules/forwarded/LICENSE create mode 100644 doubao-asr-demo/node_modules/forwarded/README.md create mode 100644 doubao-asr-demo/node_modules/forwarded/index.js create mode 100644 doubao-asr-demo/node_modules/forwarded/package.json create mode 100644 doubao-asr-demo/node_modules/fresh/HISTORY.md create mode 100644 doubao-asr-demo/node_modules/fresh/LICENSE create mode 100644 doubao-asr-demo/node_modules/fresh/README.md create mode 100644 doubao-asr-demo/node_modules/fresh/index.js create mode 100644 doubao-asr-demo/node_modules/fresh/package.json create mode 100644 doubao-asr-demo/node_modules/function-bind/.eslintrc create mode 100644 doubao-asr-demo/node_modules/function-bind/.github/FUNDING.yml create mode 100644 doubao-asr-demo/node_modules/function-bind/.github/SECURITY.md create mode 100644 doubao-asr-demo/node_modules/function-bind/.nycrc create mode 100644 doubao-asr-demo/node_modules/function-bind/CHANGELOG.md create mode 100644 doubao-asr-demo/node_modules/function-bind/LICENSE create mode 100644 doubao-asr-demo/node_modules/function-bind/README.md create mode 100644 doubao-asr-demo/node_modules/function-bind/implementation.js create mode 100644 doubao-asr-demo/node_modules/function-bind/index.js create mode 100644 doubao-asr-demo/node_modules/function-bind/package.json create mode 100644 doubao-asr-demo/node_modules/function-bind/test/.eslintrc create mode 100644 doubao-asr-demo/node_modules/function-bind/test/index.js create mode 100644 doubao-asr-demo/node_modules/get-intrinsic/.eslintrc create mode 100644 doubao-asr-demo/node_modules/get-intrinsic/.github/FUNDING.yml create mode 100644 doubao-asr-demo/node_modules/get-intrinsic/.nycrc create mode 100644 doubao-asr-demo/node_modules/get-intrinsic/CHANGELOG.md create mode 100644 doubao-asr-demo/node_modules/get-intrinsic/LICENSE create mode 100644 doubao-asr-demo/node_modules/get-intrinsic/README.md create mode 100644 doubao-asr-demo/node_modules/get-intrinsic/index.js create mode 100644 doubao-asr-demo/node_modules/get-intrinsic/package.json create mode 100644 doubao-asr-demo/node_modules/get-intrinsic/test/GetIntrinsic.js create mode 100644 doubao-asr-demo/node_modules/get-proto/.eslintrc create mode 100644 doubao-asr-demo/node_modules/get-proto/.github/FUNDING.yml create mode 100644 doubao-asr-demo/node_modules/get-proto/.nycrc create mode 100644 doubao-asr-demo/node_modules/get-proto/CHANGELOG.md create mode 100644 doubao-asr-demo/node_modules/get-proto/LICENSE create mode 100644 doubao-asr-demo/node_modules/get-proto/Object.getPrototypeOf.d.ts create mode 100644 doubao-asr-demo/node_modules/get-proto/Object.getPrototypeOf.js create mode 100644 doubao-asr-demo/node_modules/get-proto/README.md create mode 100644 doubao-asr-demo/node_modules/get-proto/Reflect.getPrototypeOf.d.ts create mode 100644 doubao-asr-demo/node_modules/get-proto/Reflect.getPrototypeOf.js create mode 100644 doubao-asr-demo/node_modules/get-proto/index.d.ts create mode 100644 doubao-asr-demo/node_modules/get-proto/index.js create mode 100644 doubao-asr-demo/node_modules/get-proto/package.json create mode 100644 doubao-asr-demo/node_modules/get-proto/test/index.js create mode 100644 doubao-asr-demo/node_modules/get-proto/tsconfig.json create mode 100644 doubao-asr-demo/node_modules/gopd/.eslintrc create mode 100644 doubao-asr-demo/node_modules/gopd/.github/FUNDING.yml create mode 100644 doubao-asr-demo/node_modules/gopd/CHANGELOG.md create mode 100644 doubao-asr-demo/node_modules/gopd/LICENSE create mode 100644 doubao-asr-demo/node_modules/gopd/README.md create mode 100644 doubao-asr-demo/node_modules/gopd/gOPD.d.ts create mode 100644 doubao-asr-demo/node_modules/gopd/gOPD.js create mode 100644 doubao-asr-demo/node_modules/gopd/index.d.ts create mode 100644 doubao-asr-demo/node_modules/gopd/index.js create mode 100644 doubao-asr-demo/node_modules/gopd/package.json create mode 100644 doubao-asr-demo/node_modules/gopd/test/index.js create mode 100644 doubao-asr-demo/node_modules/gopd/tsconfig.json create mode 100644 doubao-asr-demo/node_modules/has-symbols/.eslintrc create mode 100644 doubao-asr-demo/node_modules/has-symbols/.github/FUNDING.yml create mode 100644 doubao-asr-demo/node_modules/has-symbols/.nycrc create mode 100644 doubao-asr-demo/node_modules/has-symbols/CHANGELOG.md create mode 100644 doubao-asr-demo/node_modules/has-symbols/LICENSE create mode 100644 doubao-asr-demo/node_modules/has-symbols/README.md create mode 100644 doubao-asr-demo/node_modules/has-symbols/index.d.ts create mode 100644 doubao-asr-demo/node_modules/has-symbols/index.js create mode 100644 doubao-asr-demo/node_modules/has-symbols/package.json create mode 100644 doubao-asr-demo/node_modules/has-symbols/shams.d.ts create mode 100644 doubao-asr-demo/node_modules/has-symbols/shams.js create mode 100644 doubao-asr-demo/node_modules/has-symbols/test/index.js create mode 100644 doubao-asr-demo/node_modules/has-symbols/test/shams/core-js.js create mode 100644 doubao-asr-demo/node_modules/has-symbols/test/shams/get-own-property-symbols.js create mode 100644 doubao-asr-demo/node_modules/has-symbols/test/tests.js create mode 100644 doubao-asr-demo/node_modules/has-symbols/tsconfig.json create mode 100644 doubao-asr-demo/node_modules/hasown/.eslintrc create mode 100644 doubao-asr-demo/node_modules/hasown/.github/FUNDING.yml create mode 100644 doubao-asr-demo/node_modules/hasown/.nycrc create mode 100644 doubao-asr-demo/node_modules/hasown/CHANGELOG.md create mode 100644 doubao-asr-demo/node_modules/hasown/LICENSE create mode 100644 doubao-asr-demo/node_modules/hasown/README.md create mode 100644 doubao-asr-demo/node_modules/hasown/index.d.ts create mode 100644 doubao-asr-demo/node_modules/hasown/index.js create mode 100644 doubao-asr-demo/node_modules/hasown/package.json create mode 100644 doubao-asr-demo/node_modules/hasown/tsconfig.json create mode 100644 doubao-asr-demo/node_modules/http-errors/HISTORY.md create mode 100644 doubao-asr-demo/node_modules/http-errors/LICENSE create mode 100644 doubao-asr-demo/node_modules/http-errors/README.md create mode 100644 doubao-asr-demo/node_modules/http-errors/index.js create mode 100644 doubao-asr-demo/node_modules/http-errors/package.json create mode 100644 doubao-asr-demo/node_modules/http-proxy/.auto-changelog create mode 100644 doubao-asr-demo/node_modules/http-proxy/.gitattributes create mode 100644 doubao-asr-demo/node_modules/http-proxy/CHANGELOG.md create mode 100644 doubao-asr-demo/node_modules/http-proxy/CODE_OF_CONDUCT.md create mode 100644 doubao-asr-demo/node_modules/http-proxy/LICENSE create mode 100644 doubao-asr-demo/node_modules/http-proxy/README.md create mode 100644 doubao-asr-demo/node_modules/http-proxy/codecov.yml create mode 100644 doubao-asr-demo/node_modules/http-proxy/index.js create mode 100644 doubao-asr-demo/node_modules/http-proxy/lib/http-proxy.js create mode 100644 doubao-asr-demo/node_modules/http-proxy/lib/http-proxy/common.js create mode 100644 doubao-asr-demo/node_modules/http-proxy/lib/http-proxy/index.js create mode 100644 doubao-asr-demo/node_modules/http-proxy/lib/http-proxy/passes/web-incoming.js create mode 100644 doubao-asr-demo/node_modules/http-proxy/lib/http-proxy/passes/web-outgoing.js create mode 100644 doubao-asr-demo/node_modules/http-proxy/lib/http-proxy/passes/ws-incoming.js create mode 100644 doubao-asr-demo/node_modules/http-proxy/package.json create mode 100644 doubao-asr-demo/node_modules/http-proxy/renovate.json create mode 100644 doubao-asr-demo/node_modules/iconv-lite/Changelog.md create mode 100644 doubao-asr-demo/node_modules/iconv-lite/LICENSE create mode 100644 doubao-asr-demo/node_modules/iconv-lite/README.md create mode 100644 doubao-asr-demo/node_modules/iconv-lite/encodings/dbcs-codec.js create mode 100644 doubao-asr-demo/node_modules/iconv-lite/encodings/dbcs-data.js create mode 100644 doubao-asr-demo/node_modules/iconv-lite/encodings/index.js create mode 100644 doubao-asr-demo/node_modules/iconv-lite/encodings/internal.js create mode 100644 doubao-asr-demo/node_modules/iconv-lite/encodings/sbcs-codec.js create mode 100644 doubao-asr-demo/node_modules/iconv-lite/encodings/sbcs-data-generated.js create mode 100644 doubao-asr-demo/node_modules/iconv-lite/encodings/sbcs-data.js create mode 100644 doubao-asr-demo/node_modules/iconv-lite/encodings/tables/big5-added.json create mode 100644 doubao-asr-demo/node_modules/iconv-lite/encodings/tables/cp936.json create mode 100644 doubao-asr-demo/node_modules/iconv-lite/encodings/tables/cp949.json create mode 100644 doubao-asr-demo/node_modules/iconv-lite/encodings/tables/cp950.json create mode 100644 doubao-asr-demo/node_modules/iconv-lite/encodings/tables/eucjp.json create mode 100644 doubao-asr-demo/node_modules/iconv-lite/encodings/tables/gb18030-ranges.json create mode 100644 doubao-asr-demo/node_modules/iconv-lite/encodings/tables/gbk-added.json create mode 100644 doubao-asr-demo/node_modules/iconv-lite/encodings/tables/shiftjis.json create mode 100644 doubao-asr-demo/node_modules/iconv-lite/encodings/utf16.js create mode 100644 doubao-asr-demo/node_modules/iconv-lite/encodings/utf7.js create mode 100644 doubao-asr-demo/node_modules/iconv-lite/lib/bom-handling.js create mode 100644 doubao-asr-demo/node_modules/iconv-lite/lib/extend-node.js create mode 100644 doubao-asr-demo/node_modules/iconv-lite/lib/index.d.ts create mode 100644 doubao-asr-demo/node_modules/iconv-lite/lib/index.js create mode 100644 doubao-asr-demo/node_modules/iconv-lite/lib/streams.js create mode 100644 doubao-asr-demo/node_modules/iconv-lite/package.json create mode 100644 doubao-asr-demo/node_modules/inherits/LICENSE create mode 100644 doubao-asr-demo/node_modules/inherits/README.md create mode 100644 doubao-asr-demo/node_modules/inherits/inherits.js create mode 100644 doubao-asr-demo/node_modules/inherits/inherits_browser.js create mode 100644 doubao-asr-demo/node_modules/inherits/package.json create mode 100644 doubao-asr-demo/node_modules/ipaddr.js/LICENSE create mode 100644 doubao-asr-demo/node_modules/ipaddr.js/README.md create mode 100644 doubao-asr-demo/node_modules/ipaddr.js/ipaddr.min.js create mode 100644 doubao-asr-demo/node_modules/ipaddr.js/lib/ipaddr.js create mode 100644 doubao-asr-demo/node_modules/ipaddr.js/lib/ipaddr.js.d.ts create mode 100644 doubao-asr-demo/node_modules/ipaddr.js/package.json create mode 100644 doubao-asr-demo/node_modules/math-intrinsics/.eslintrc create mode 100644 doubao-asr-demo/node_modules/math-intrinsics/.github/FUNDING.yml create mode 100644 doubao-asr-demo/node_modules/math-intrinsics/CHANGELOG.md create mode 100644 doubao-asr-demo/node_modules/math-intrinsics/LICENSE create mode 100644 doubao-asr-demo/node_modules/math-intrinsics/README.md create mode 100644 doubao-asr-demo/node_modules/math-intrinsics/abs.d.ts create mode 100644 doubao-asr-demo/node_modules/math-intrinsics/abs.js create mode 100644 doubao-asr-demo/node_modules/math-intrinsics/constants/maxArrayLength.d.ts create mode 100644 doubao-asr-demo/node_modules/math-intrinsics/constants/maxArrayLength.js create mode 100644 doubao-asr-demo/node_modules/math-intrinsics/constants/maxSafeInteger.d.ts create mode 100644 doubao-asr-demo/node_modules/math-intrinsics/constants/maxSafeInteger.js create mode 100644 doubao-asr-demo/node_modules/math-intrinsics/constants/maxValue.d.ts create mode 100644 doubao-asr-demo/node_modules/math-intrinsics/constants/maxValue.js create mode 100644 doubao-asr-demo/node_modules/math-intrinsics/floor.d.ts create mode 100644 doubao-asr-demo/node_modules/math-intrinsics/floor.js create mode 100644 doubao-asr-demo/node_modules/math-intrinsics/isFinite.d.ts create mode 100644 doubao-asr-demo/node_modules/math-intrinsics/isFinite.js create mode 100644 doubao-asr-demo/node_modules/math-intrinsics/isInteger.d.ts create mode 100644 doubao-asr-demo/node_modules/math-intrinsics/isInteger.js create mode 100644 doubao-asr-demo/node_modules/math-intrinsics/isNaN.d.ts create mode 100644 doubao-asr-demo/node_modules/math-intrinsics/isNaN.js create mode 100644 doubao-asr-demo/node_modules/math-intrinsics/isNegativeZero.d.ts create mode 100644 doubao-asr-demo/node_modules/math-intrinsics/isNegativeZero.js create mode 100644 doubao-asr-demo/node_modules/math-intrinsics/max.d.ts create mode 100644 doubao-asr-demo/node_modules/math-intrinsics/max.js create mode 100644 doubao-asr-demo/node_modules/math-intrinsics/min.d.ts create mode 100644 doubao-asr-demo/node_modules/math-intrinsics/min.js create mode 100644 doubao-asr-demo/node_modules/math-intrinsics/mod.d.ts create mode 100644 doubao-asr-demo/node_modules/math-intrinsics/mod.js create mode 100644 doubao-asr-demo/node_modules/math-intrinsics/package.json create mode 100644 doubao-asr-demo/node_modules/math-intrinsics/pow.d.ts create mode 100644 doubao-asr-demo/node_modules/math-intrinsics/pow.js create mode 100644 doubao-asr-demo/node_modules/math-intrinsics/round.d.ts create mode 100644 doubao-asr-demo/node_modules/math-intrinsics/round.js create mode 100644 doubao-asr-demo/node_modules/math-intrinsics/sign.d.ts create mode 100644 doubao-asr-demo/node_modules/math-intrinsics/sign.js create mode 100644 doubao-asr-demo/node_modules/math-intrinsics/test/index.js create mode 100644 doubao-asr-demo/node_modules/math-intrinsics/tsconfig.json create mode 100644 doubao-asr-demo/node_modules/media-typer/HISTORY.md create mode 100644 doubao-asr-demo/node_modules/media-typer/LICENSE create mode 100644 doubao-asr-demo/node_modules/media-typer/README.md create mode 100644 doubao-asr-demo/node_modules/media-typer/index.js create mode 100644 doubao-asr-demo/node_modules/media-typer/package.json create mode 100644 doubao-asr-demo/node_modules/merge-descriptors/HISTORY.md create mode 100644 doubao-asr-demo/node_modules/merge-descriptors/LICENSE create mode 100644 doubao-asr-demo/node_modules/merge-descriptors/README.md create mode 100644 doubao-asr-demo/node_modules/merge-descriptors/index.js create mode 100644 doubao-asr-demo/node_modules/merge-descriptors/package.json create mode 100644 doubao-asr-demo/node_modules/methods/HISTORY.md create mode 100644 doubao-asr-demo/node_modules/methods/LICENSE create mode 100644 doubao-asr-demo/node_modules/methods/README.md create mode 100644 doubao-asr-demo/node_modules/methods/index.js create mode 100644 doubao-asr-demo/node_modules/methods/package.json create mode 100644 doubao-asr-demo/node_modules/mime-db/HISTORY.md create mode 100644 doubao-asr-demo/node_modules/mime-db/LICENSE create mode 100644 doubao-asr-demo/node_modules/mime-db/README.md create mode 100644 doubao-asr-demo/node_modules/mime-db/db.json create mode 100644 doubao-asr-demo/node_modules/mime-db/index.js create mode 100644 doubao-asr-demo/node_modules/mime-db/package.json create mode 100644 doubao-asr-demo/node_modules/mime-types/HISTORY.md create mode 100644 doubao-asr-demo/node_modules/mime-types/LICENSE create mode 100644 doubao-asr-demo/node_modules/mime-types/README.md create mode 100644 doubao-asr-demo/node_modules/mime-types/index.js create mode 100644 doubao-asr-demo/node_modules/mime-types/package.json create mode 100644 doubao-asr-demo/node_modules/mime/.npmignore create mode 100644 doubao-asr-demo/node_modules/mime/CHANGELOG.md create mode 100644 doubao-asr-demo/node_modules/mime/LICENSE create mode 100644 doubao-asr-demo/node_modules/mime/README.md create mode 100755 doubao-asr-demo/node_modules/mime/cli.js create mode 100644 doubao-asr-demo/node_modules/mime/mime.js create mode 100644 doubao-asr-demo/node_modules/mime/package.json create mode 100755 doubao-asr-demo/node_modules/mime/src/build.js create mode 100644 doubao-asr-demo/node_modules/mime/src/test.js create mode 100644 doubao-asr-demo/node_modules/mime/types.json create mode 100644 doubao-asr-demo/node_modules/ms/index.js create mode 100644 doubao-asr-demo/node_modules/ms/license.md create mode 100644 doubao-asr-demo/node_modules/ms/package.json create mode 100644 doubao-asr-demo/node_modules/ms/readme.md create mode 100644 doubao-asr-demo/node_modules/negotiator/HISTORY.md create mode 100644 doubao-asr-demo/node_modules/negotiator/LICENSE create mode 100644 doubao-asr-demo/node_modules/negotiator/README.md create mode 100644 doubao-asr-demo/node_modules/negotiator/index.js create mode 100644 doubao-asr-demo/node_modules/negotiator/lib/charset.js create mode 100644 doubao-asr-demo/node_modules/negotiator/lib/encoding.js create mode 100644 doubao-asr-demo/node_modules/negotiator/lib/language.js create mode 100644 doubao-asr-demo/node_modules/negotiator/lib/mediaType.js create mode 100644 doubao-asr-demo/node_modules/negotiator/package.json create mode 100644 doubao-asr-demo/node_modules/node-domexception/.history/README_20210527203617.md create mode 100644 doubao-asr-demo/node_modules/node-domexception/.history/README_20210527212714.md create mode 100644 doubao-asr-demo/node_modules/node-domexception/.history/README_20210527213345.md create mode 100644 doubao-asr-demo/node_modules/node-domexception/.history/README_20210527213411.md create mode 100644 doubao-asr-demo/node_modules/node-domexception/.history/README_20210527213803.md create mode 100644 doubao-asr-demo/node_modules/node-domexception/.history/README_20210527214323.md create mode 100644 doubao-asr-demo/node_modules/node-domexception/.history/README_20210527214408.md create mode 100644 doubao-asr-demo/node_modules/node-domexception/.history/index_20210527203842.js create mode 100644 doubao-asr-demo/node_modules/node-domexception/.history/index_20210527203947.js create mode 100644 doubao-asr-demo/node_modules/node-domexception/.history/index_20210527204259.js create mode 100644 doubao-asr-demo/node_modules/node-domexception/.history/index_20210527204418.js create mode 100644 doubao-asr-demo/node_modules/node-domexception/.history/index_20210527204756.js create mode 100644 doubao-asr-demo/node_modules/node-domexception/.history/index_20210527204833.js create mode 100644 doubao-asr-demo/node_modules/node-domexception/.history/index_20210527211208.js create mode 100644 doubao-asr-demo/node_modules/node-domexception/.history/index_20210527211248.js create mode 100644 doubao-asr-demo/node_modules/node-domexception/.history/index_20210527212722.js create mode 100644 doubao-asr-demo/node_modules/node-domexception/.history/index_20210527212731.js create mode 100644 doubao-asr-demo/node_modules/node-domexception/.history/index_20210527212746.js create mode 100644 doubao-asr-demo/node_modules/node-domexception/.history/index_20210527212900.js create mode 100644 doubao-asr-demo/node_modules/node-domexception/.history/index_20210527213022.js create mode 100644 doubao-asr-demo/node_modules/node-domexception/.history/index_20210527213822.js create mode 100644 doubao-asr-demo/node_modules/node-domexception/.history/index_20210527213843.js create mode 100644 doubao-asr-demo/node_modules/node-domexception/.history/index_20210527213852.js create mode 100644 doubao-asr-demo/node_modules/node-domexception/.history/index_20210527213910.js create mode 100644 doubao-asr-demo/node_modules/node-domexception/.history/index_20210527214034.js create mode 100644 doubao-asr-demo/node_modules/node-domexception/.history/index_20210527214643.js create mode 100644 doubao-asr-demo/node_modules/node-domexception/.history/index_20210527214654.js create mode 100644 doubao-asr-demo/node_modules/node-domexception/.history/index_20210527214700.js create mode 100644 doubao-asr-demo/node_modules/node-domexception/.history/package_20210527203733.json create mode 100644 doubao-asr-demo/node_modules/node-domexception/.history/package_20210527203825.json create mode 100644 doubao-asr-demo/node_modules/node-domexception/.history/package_20210527204621.json create mode 100644 doubao-asr-demo/node_modules/node-domexception/.history/package_20210527204913.json create mode 100644 doubao-asr-demo/node_modules/node-domexception/.history/package_20210527204925.json create mode 100644 doubao-asr-demo/node_modules/node-domexception/.history/package_20210527205145.json create mode 100644 doubao-asr-demo/node_modules/node-domexception/.history/package_20210527205156.json create mode 100644 doubao-asr-demo/node_modules/node-domexception/.history/test_20210527205603.js create mode 100644 doubao-asr-demo/node_modules/node-domexception/.history/test_20210527205957.js create mode 100644 doubao-asr-demo/node_modules/node-domexception/.history/test_20210527210021.js create mode 100644 doubao-asr-demo/node_modules/node-domexception/LICENSE create mode 100644 doubao-asr-demo/node_modules/node-domexception/README.md create mode 100644 doubao-asr-demo/node_modules/node-domexception/index.js create mode 100644 doubao-asr-demo/node_modules/node-domexception/package.json create mode 100644 doubao-asr-demo/node_modules/node-fetch/@types/index.d.ts create mode 100644 doubao-asr-demo/node_modules/node-fetch/LICENSE.md create mode 100644 doubao-asr-demo/node_modules/node-fetch/README.md create mode 100644 doubao-asr-demo/node_modules/node-fetch/package.json create mode 100644 doubao-asr-demo/node_modules/node-fetch/src/body.js create mode 100644 doubao-asr-demo/node_modules/node-fetch/src/errors/abort-error.js create mode 100644 doubao-asr-demo/node_modules/node-fetch/src/errors/base.js create mode 100644 doubao-asr-demo/node_modules/node-fetch/src/errors/fetch-error.js create mode 100644 doubao-asr-demo/node_modules/node-fetch/src/headers.js create mode 100644 doubao-asr-demo/node_modules/node-fetch/src/index.js create mode 100644 doubao-asr-demo/node_modules/node-fetch/src/request.js create mode 100644 doubao-asr-demo/node_modules/node-fetch/src/response.js create mode 100644 doubao-asr-demo/node_modules/node-fetch/src/utils/get-search.js create mode 100644 doubao-asr-demo/node_modules/node-fetch/src/utils/is-redirect.js create mode 100644 doubao-asr-demo/node_modules/node-fetch/src/utils/is.js create mode 100644 doubao-asr-demo/node_modules/node-fetch/src/utils/multipart-parser.js create mode 100644 doubao-asr-demo/node_modules/node-fetch/src/utils/referrer.js create mode 100644 doubao-asr-demo/node_modules/object-assign/index.js create mode 100644 doubao-asr-demo/node_modules/object-assign/license create mode 100644 doubao-asr-demo/node_modules/object-assign/package.json create mode 100644 doubao-asr-demo/node_modules/object-assign/readme.md create mode 100644 doubao-asr-demo/node_modules/object-inspect/.eslintrc create mode 100644 doubao-asr-demo/node_modules/object-inspect/.github/FUNDING.yml create mode 100644 doubao-asr-demo/node_modules/object-inspect/.nycrc create mode 100644 doubao-asr-demo/node_modules/object-inspect/CHANGELOG.md create mode 100644 doubao-asr-demo/node_modules/object-inspect/LICENSE create mode 100644 doubao-asr-demo/node_modules/object-inspect/example/all.js create mode 100644 doubao-asr-demo/node_modules/object-inspect/example/circular.js create mode 100644 doubao-asr-demo/node_modules/object-inspect/example/fn.js create mode 100644 doubao-asr-demo/node_modules/object-inspect/example/inspect.js create mode 100644 doubao-asr-demo/node_modules/object-inspect/index.js create mode 100644 doubao-asr-demo/node_modules/object-inspect/package-support.json create mode 100644 doubao-asr-demo/node_modules/object-inspect/package.json create mode 100644 doubao-asr-demo/node_modules/object-inspect/readme.markdown create mode 100644 doubao-asr-demo/node_modules/object-inspect/test-core-js.js create mode 100644 doubao-asr-demo/node_modules/object-inspect/test/bigint.js create mode 100644 doubao-asr-demo/node_modules/object-inspect/test/browser/dom.js create mode 100644 doubao-asr-demo/node_modules/object-inspect/test/circular.js create mode 100644 doubao-asr-demo/node_modules/object-inspect/test/deep.js create mode 100644 doubao-asr-demo/node_modules/object-inspect/test/element.js create mode 100644 doubao-asr-demo/node_modules/object-inspect/test/err.js create mode 100644 doubao-asr-demo/node_modules/object-inspect/test/fakes.js create mode 100644 doubao-asr-demo/node_modules/object-inspect/test/fn.js create mode 100644 doubao-asr-demo/node_modules/object-inspect/test/global.js create mode 100644 doubao-asr-demo/node_modules/object-inspect/test/has.js create mode 100644 doubao-asr-demo/node_modules/object-inspect/test/holes.js create mode 100644 doubao-asr-demo/node_modules/object-inspect/test/indent-option.js create mode 100644 doubao-asr-demo/node_modules/object-inspect/test/inspect.js create mode 100644 doubao-asr-demo/node_modules/object-inspect/test/lowbyte.js create mode 100644 doubao-asr-demo/node_modules/object-inspect/test/number.js create mode 100644 doubao-asr-demo/node_modules/object-inspect/test/quoteStyle.js create mode 100644 doubao-asr-demo/node_modules/object-inspect/test/toStringTag.js create mode 100644 doubao-asr-demo/node_modules/object-inspect/test/undef.js create mode 100644 doubao-asr-demo/node_modules/object-inspect/test/values.js create mode 100644 doubao-asr-demo/node_modules/object-inspect/util.inspect.js create mode 100644 doubao-asr-demo/node_modules/on-finished/HISTORY.md create mode 100644 doubao-asr-demo/node_modules/on-finished/LICENSE create mode 100644 doubao-asr-demo/node_modules/on-finished/README.md create mode 100644 doubao-asr-demo/node_modules/on-finished/index.js create mode 100644 doubao-asr-demo/node_modules/on-finished/package.json create mode 100644 doubao-asr-demo/node_modules/parseurl/HISTORY.md create mode 100644 doubao-asr-demo/node_modules/parseurl/LICENSE create mode 100644 doubao-asr-demo/node_modules/parseurl/README.md create mode 100644 doubao-asr-demo/node_modules/parseurl/index.js create mode 100644 doubao-asr-demo/node_modules/parseurl/package.json create mode 100644 doubao-asr-demo/node_modules/path-to-regexp/LICENSE create mode 100644 doubao-asr-demo/node_modules/path-to-regexp/Readme.md create mode 100644 doubao-asr-demo/node_modules/path-to-regexp/index.js create mode 100644 doubao-asr-demo/node_modules/path-to-regexp/package.json create mode 100644 doubao-asr-demo/node_modules/proxy-addr/HISTORY.md create mode 100644 doubao-asr-demo/node_modules/proxy-addr/LICENSE create mode 100644 doubao-asr-demo/node_modules/proxy-addr/README.md create mode 100644 doubao-asr-demo/node_modules/proxy-addr/index.js create mode 100644 doubao-asr-demo/node_modules/proxy-addr/package.json create mode 100644 doubao-asr-demo/node_modules/qs/.editorconfig create mode 100644 doubao-asr-demo/node_modules/qs/.eslintrc create mode 100644 doubao-asr-demo/node_modules/qs/.github/FUNDING.yml create mode 100644 doubao-asr-demo/node_modules/qs/.nycrc create mode 100644 doubao-asr-demo/node_modules/qs/CHANGELOG.md create mode 100644 doubao-asr-demo/node_modules/qs/LICENSE.md create mode 100644 doubao-asr-demo/node_modules/qs/README.md create mode 100644 doubao-asr-demo/node_modules/qs/dist/qs.js create mode 100644 doubao-asr-demo/node_modules/qs/lib/formats.js create mode 100644 doubao-asr-demo/node_modules/qs/lib/index.js create mode 100644 doubao-asr-demo/node_modules/qs/lib/parse.js create mode 100644 doubao-asr-demo/node_modules/qs/lib/stringify.js create mode 100644 doubao-asr-demo/node_modules/qs/lib/utils.js create mode 100644 doubao-asr-demo/node_modules/qs/package.json create mode 100644 doubao-asr-demo/node_modules/qs/test/empty-keys-cases.js create mode 100644 doubao-asr-demo/node_modules/qs/test/parse.js create mode 100644 doubao-asr-demo/node_modules/qs/test/stringify.js create mode 100644 doubao-asr-demo/node_modules/qs/test/utils.js create mode 100644 doubao-asr-demo/node_modules/range-parser/HISTORY.md create mode 100644 doubao-asr-demo/node_modules/range-parser/LICENSE create mode 100644 doubao-asr-demo/node_modules/range-parser/README.md create mode 100644 doubao-asr-demo/node_modules/range-parser/index.js create mode 100644 doubao-asr-demo/node_modules/range-parser/package.json create mode 100644 doubao-asr-demo/node_modules/raw-body/HISTORY.md create mode 100644 doubao-asr-demo/node_modules/raw-body/LICENSE create mode 100644 doubao-asr-demo/node_modules/raw-body/README.md create mode 100644 doubao-asr-demo/node_modules/raw-body/SECURITY.md create mode 100644 doubao-asr-demo/node_modules/raw-body/index.d.ts create mode 100644 doubao-asr-demo/node_modules/raw-body/index.js create mode 100644 doubao-asr-demo/node_modules/raw-body/package.json create mode 100644 doubao-asr-demo/node_modules/requires-port/.npmignore create mode 100644 doubao-asr-demo/node_modules/requires-port/.travis.yml create mode 100644 doubao-asr-demo/node_modules/requires-port/LICENSE create mode 100644 doubao-asr-demo/node_modules/requires-port/README.md create mode 100644 doubao-asr-demo/node_modules/requires-port/index.js create mode 100644 doubao-asr-demo/node_modules/requires-port/package.json create mode 100644 doubao-asr-demo/node_modules/requires-port/test.js create mode 100644 doubao-asr-demo/node_modules/safe-buffer/LICENSE create mode 100644 doubao-asr-demo/node_modules/safe-buffer/README.md create mode 100644 doubao-asr-demo/node_modules/safe-buffer/index.d.ts create mode 100644 doubao-asr-demo/node_modules/safe-buffer/index.js create mode 100644 doubao-asr-demo/node_modules/safe-buffer/package.json create mode 100644 doubao-asr-demo/node_modules/safer-buffer/LICENSE create mode 100644 doubao-asr-demo/node_modules/safer-buffer/Porting-Buffer.md create mode 100644 doubao-asr-demo/node_modules/safer-buffer/Readme.md create mode 100644 doubao-asr-demo/node_modules/safer-buffer/dangerous.js create mode 100644 doubao-asr-demo/node_modules/safer-buffer/package.json create mode 100644 doubao-asr-demo/node_modules/safer-buffer/safer.js create mode 100644 doubao-asr-demo/node_modules/safer-buffer/tests.js create mode 100644 doubao-asr-demo/node_modules/send/HISTORY.md create mode 100644 doubao-asr-demo/node_modules/send/LICENSE create mode 100644 doubao-asr-demo/node_modules/send/README.md create mode 100644 doubao-asr-demo/node_modules/send/SECURITY.md create mode 100644 doubao-asr-demo/node_modules/send/index.js create mode 100644 doubao-asr-demo/node_modules/send/node_modules/encodeurl/HISTORY.md create mode 100644 doubao-asr-demo/node_modules/send/node_modules/encodeurl/LICENSE create mode 100644 doubao-asr-demo/node_modules/send/node_modules/encodeurl/README.md create mode 100644 doubao-asr-demo/node_modules/send/node_modules/encodeurl/index.js create mode 100644 doubao-asr-demo/node_modules/send/node_modules/encodeurl/package.json create mode 100644 doubao-asr-demo/node_modules/send/node_modules/ms/index.js create mode 100644 doubao-asr-demo/node_modules/send/node_modules/ms/license.md create mode 100644 doubao-asr-demo/node_modules/send/node_modules/ms/package.json create mode 100644 doubao-asr-demo/node_modules/send/node_modules/ms/readme.md create mode 100644 doubao-asr-demo/node_modules/send/package.json create mode 100644 doubao-asr-demo/node_modules/serve-static/HISTORY.md create mode 100644 doubao-asr-demo/node_modules/serve-static/LICENSE create mode 100644 doubao-asr-demo/node_modules/serve-static/README.md create mode 100644 doubao-asr-demo/node_modules/serve-static/index.js create mode 100644 doubao-asr-demo/node_modules/serve-static/package.json create mode 100644 doubao-asr-demo/node_modules/setprototypeof/LICENSE create mode 100644 doubao-asr-demo/node_modules/setprototypeof/README.md create mode 100644 doubao-asr-demo/node_modules/setprototypeof/index.d.ts create mode 100644 doubao-asr-demo/node_modules/setprototypeof/index.js create mode 100644 doubao-asr-demo/node_modules/setprototypeof/package.json create mode 100644 doubao-asr-demo/node_modules/setprototypeof/test/index.js create mode 100644 doubao-asr-demo/node_modules/side-channel-list/.editorconfig create mode 100644 doubao-asr-demo/node_modules/side-channel-list/.eslintrc create mode 100644 doubao-asr-demo/node_modules/side-channel-list/.github/FUNDING.yml create mode 100644 doubao-asr-demo/node_modules/side-channel-list/.nycrc create mode 100644 doubao-asr-demo/node_modules/side-channel-list/CHANGELOG.md create mode 100644 doubao-asr-demo/node_modules/side-channel-list/LICENSE create mode 100644 doubao-asr-demo/node_modules/side-channel-list/README.md create mode 100644 doubao-asr-demo/node_modules/side-channel-list/index.d.ts create mode 100644 doubao-asr-demo/node_modules/side-channel-list/index.js create mode 100644 doubao-asr-demo/node_modules/side-channel-list/list.d.ts create mode 100644 doubao-asr-demo/node_modules/side-channel-list/package.json create mode 100644 doubao-asr-demo/node_modules/side-channel-list/test/index.js create mode 100644 doubao-asr-demo/node_modules/side-channel-list/tsconfig.json create mode 100644 doubao-asr-demo/node_modules/side-channel-map/.editorconfig create mode 100644 doubao-asr-demo/node_modules/side-channel-map/.eslintrc create mode 100644 doubao-asr-demo/node_modules/side-channel-map/.github/FUNDING.yml create mode 100644 doubao-asr-demo/node_modules/side-channel-map/.nycrc create mode 100644 doubao-asr-demo/node_modules/side-channel-map/CHANGELOG.md create mode 100644 doubao-asr-demo/node_modules/side-channel-map/LICENSE create mode 100644 doubao-asr-demo/node_modules/side-channel-map/README.md create mode 100644 doubao-asr-demo/node_modules/side-channel-map/index.d.ts create mode 100644 doubao-asr-demo/node_modules/side-channel-map/index.js create mode 100644 doubao-asr-demo/node_modules/side-channel-map/package.json create mode 100644 doubao-asr-demo/node_modules/side-channel-map/test/index.js create mode 100644 doubao-asr-demo/node_modules/side-channel-map/tsconfig.json create mode 100644 doubao-asr-demo/node_modules/side-channel-weakmap/.editorconfig create mode 100644 doubao-asr-demo/node_modules/side-channel-weakmap/.eslintrc create mode 100644 doubao-asr-demo/node_modules/side-channel-weakmap/.github/FUNDING.yml create mode 100644 doubao-asr-demo/node_modules/side-channel-weakmap/.nycrc create mode 100644 doubao-asr-demo/node_modules/side-channel-weakmap/CHANGELOG.md create mode 100644 doubao-asr-demo/node_modules/side-channel-weakmap/LICENSE create mode 100644 doubao-asr-demo/node_modules/side-channel-weakmap/README.md create mode 100644 doubao-asr-demo/node_modules/side-channel-weakmap/index.d.ts create mode 100644 doubao-asr-demo/node_modules/side-channel-weakmap/index.js create mode 100644 doubao-asr-demo/node_modules/side-channel-weakmap/package.json create mode 100644 doubao-asr-demo/node_modules/side-channel-weakmap/test/index.js create mode 100644 doubao-asr-demo/node_modules/side-channel-weakmap/tsconfig.json create mode 100644 doubao-asr-demo/node_modules/side-channel/.editorconfig create mode 100644 doubao-asr-demo/node_modules/side-channel/.eslintrc create mode 100644 doubao-asr-demo/node_modules/side-channel/.github/FUNDING.yml create mode 100644 doubao-asr-demo/node_modules/side-channel/.nycrc create mode 100644 doubao-asr-demo/node_modules/side-channel/CHANGELOG.md create mode 100644 doubao-asr-demo/node_modules/side-channel/LICENSE create mode 100644 doubao-asr-demo/node_modules/side-channel/README.md create mode 100644 doubao-asr-demo/node_modules/side-channel/index.d.ts create mode 100644 doubao-asr-demo/node_modules/side-channel/index.js create mode 100644 doubao-asr-demo/node_modules/side-channel/package.json create mode 100644 doubao-asr-demo/node_modules/side-channel/test/index.js create mode 100644 doubao-asr-demo/node_modules/side-channel/tsconfig.json create mode 100644 doubao-asr-demo/node_modules/statuses/HISTORY.md create mode 100644 doubao-asr-demo/node_modules/statuses/LICENSE create mode 100644 doubao-asr-demo/node_modules/statuses/README.md create mode 100644 doubao-asr-demo/node_modules/statuses/codes.json create mode 100644 doubao-asr-demo/node_modules/statuses/index.js create mode 100644 doubao-asr-demo/node_modules/statuses/package.json create mode 100644 doubao-asr-demo/node_modules/toidentifier/HISTORY.md create mode 100644 doubao-asr-demo/node_modules/toidentifier/LICENSE create mode 100644 doubao-asr-demo/node_modules/toidentifier/README.md create mode 100644 doubao-asr-demo/node_modules/toidentifier/index.js create mode 100644 doubao-asr-demo/node_modules/toidentifier/package.json create mode 100644 doubao-asr-demo/node_modules/type-is/HISTORY.md create mode 100644 doubao-asr-demo/node_modules/type-is/LICENSE create mode 100644 doubao-asr-demo/node_modules/type-is/README.md create mode 100644 doubao-asr-demo/node_modules/type-is/index.js create mode 100644 doubao-asr-demo/node_modules/type-is/package.json create mode 100644 doubao-asr-demo/node_modules/unpipe/HISTORY.md create mode 100644 doubao-asr-demo/node_modules/unpipe/LICENSE create mode 100644 doubao-asr-demo/node_modules/unpipe/README.md create mode 100644 doubao-asr-demo/node_modules/unpipe/index.js create mode 100644 doubao-asr-demo/node_modules/unpipe/package.json create mode 100644 doubao-asr-demo/node_modules/utils-merge/.npmignore create mode 100644 doubao-asr-demo/node_modules/utils-merge/LICENSE create mode 100644 doubao-asr-demo/node_modules/utils-merge/README.md create mode 100644 doubao-asr-demo/node_modules/utils-merge/index.js create mode 100644 doubao-asr-demo/node_modules/utils-merge/package.json create mode 100644 doubao-asr-demo/node_modules/vary/HISTORY.md create mode 100644 doubao-asr-demo/node_modules/vary/LICENSE create mode 100644 doubao-asr-demo/node_modules/vary/README.md create mode 100644 doubao-asr-demo/node_modules/vary/index.js create mode 100644 doubao-asr-demo/node_modules/vary/package.json create mode 100644 doubao-asr-demo/node_modules/web-streams-polyfill/LICENSE create mode 100644 doubao-asr-demo/node_modules/web-streams-polyfill/README.md create mode 100644 doubao-asr-demo/node_modules/web-streams-polyfill/dist/polyfill.es2018.js create mode 100644 doubao-asr-demo/node_modules/web-streams-polyfill/dist/polyfill.es2018.js.map create mode 100644 doubao-asr-demo/node_modules/web-streams-polyfill/dist/polyfill.es2018.min.js create mode 100644 doubao-asr-demo/node_modules/web-streams-polyfill/dist/polyfill.es2018.min.js.map create mode 100644 doubao-asr-demo/node_modules/web-streams-polyfill/dist/polyfill.es2018.mjs create mode 100644 doubao-asr-demo/node_modules/web-streams-polyfill/dist/polyfill.es2018.mjs.map create mode 100644 doubao-asr-demo/node_modules/web-streams-polyfill/dist/polyfill.es6.js create mode 100644 doubao-asr-demo/node_modules/web-streams-polyfill/dist/polyfill.es6.js.map create mode 100644 doubao-asr-demo/node_modules/web-streams-polyfill/dist/polyfill.es6.min.js create mode 100644 doubao-asr-demo/node_modules/web-streams-polyfill/dist/polyfill.es6.min.js.map create mode 100644 doubao-asr-demo/node_modules/web-streams-polyfill/dist/polyfill.es6.mjs create mode 100644 doubao-asr-demo/node_modules/web-streams-polyfill/dist/polyfill.es6.mjs.map create mode 100644 doubao-asr-demo/node_modules/web-streams-polyfill/dist/polyfill.js create mode 100644 doubao-asr-demo/node_modules/web-streams-polyfill/dist/polyfill.js.map create mode 100644 doubao-asr-demo/node_modules/web-streams-polyfill/dist/polyfill.min.js create mode 100644 doubao-asr-demo/node_modules/web-streams-polyfill/dist/polyfill.min.js.map create mode 100644 doubao-asr-demo/node_modules/web-streams-polyfill/dist/polyfill.mjs create mode 100644 doubao-asr-demo/node_modules/web-streams-polyfill/dist/polyfill.mjs.map create mode 100644 doubao-asr-demo/node_modules/web-streams-polyfill/dist/ponyfill.es2018.js create mode 100644 doubao-asr-demo/node_modules/web-streams-polyfill/dist/ponyfill.es2018.js.map create mode 100644 doubao-asr-demo/node_modules/web-streams-polyfill/dist/ponyfill.es2018.mjs create mode 100644 doubao-asr-demo/node_modules/web-streams-polyfill/dist/ponyfill.es2018.mjs.map create mode 100644 doubao-asr-demo/node_modules/web-streams-polyfill/dist/ponyfill.es6.js create mode 100644 doubao-asr-demo/node_modules/web-streams-polyfill/dist/ponyfill.es6.js.map create mode 100644 doubao-asr-demo/node_modules/web-streams-polyfill/dist/ponyfill.es6.mjs create mode 100644 doubao-asr-demo/node_modules/web-streams-polyfill/dist/ponyfill.es6.mjs.map create mode 100644 doubao-asr-demo/node_modules/web-streams-polyfill/dist/ponyfill.js create mode 100644 doubao-asr-demo/node_modules/web-streams-polyfill/dist/ponyfill.js.map create mode 100644 doubao-asr-demo/node_modules/web-streams-polyfill/dist/ponyfill.mjs create mode 100644 doubao-asr-demo/node_modules/web-streams-polyfill/dist/ponyfill.mjs.map create mode 100644 doubao-asr-demo/node_modules/web-streams-polyfill/dist/types/polyfill.d.ts create mode 100644 doubao-asr-demo/node_modules/web-streams-polyfill/dist/types/ponyfill.d.ts create mode 100644 doubao-asr-demo/node_modules/web-streams-polyfill/dist/types/ts3.6/polyfill.d.ts create mode 100644 doubao-asr-demo/node_modules/web-streams-polyfill/dist/types/ts3.6/ponyfill.d.ts create mode 100644 doubao-asr-demo/node_modules/web-streams-polyfill/dist/types/tsdoc-metadata.json create mode 100644 doubao-asr-demo/node_modules/web-streams-polyfill/es2018/package.json create mode 100644 doubao-asr-demo/node_modules/web-streams-polyfill/es6/package.json create mode 100644 doubao-asr-demo/node_modules/web-streams-polyfill/package.json create mode 100644 doubao-asr-demo/node_modules/web-streams-polyfill/ponyfill/es2018/package.json create mode 100644 doubao-asr-demo/node_modules/web-streams-polyfill/ponyfill/es6/package.json create mode 100644 doubao-asr-demo/node_modules/web-streams-polyfill/ponyfill/package.json create mode 100644 doubao-asr-demo/package-lock.json create mode 100644 doubao-asr-demo/package.json create mode 100644 doubao-asr-demo/server/index.js create mode 100644 doubao-asr-demo/styles.css create mode 100644 legacy-deepagens/.DS_Store rename {deepagens-new => legacy-deepagens/deepagens-new}/about.html (100%) rename {deepagens-new => legacy-deepagens/deepagens-new}/assets/about-team.svg (100%) rename {deepagens-new => legacy-deepagens/deepagens-new}/assets/blog1.svg (100%) rename {deepagens-new => legacy-deepagens/deepagens-new}/assets/blog2.svg (100%) rename {deepagens-new => legacy-deepagens/deepagens-new}/assets/blog3.svg (100%) rename {deepagens-new => legacy-deepagens/deepagens-new}/assets/brand1.svg (100%) rename {deepagens-new => legacy-deepagens/deepagens-new}/assets/brand2.svg (100%) rename {deepagens-new => legacy-deepagens/deepagens-new}/assets/brand3.svg (100%) rename {deepagens-new => legacy-deepagens/deepagens-new}/assets/brand4.svg (100%) rename {deepagens-new => legacy-deepagens/deepagens-new}/assets/brand5.svg (100%) rename {deepagens-new => legacy-deepagens/deepagens-new}/assets/case1.svg (100%) rename {deepagens-new => legacy-deepagens/deepagens-new}/assets/case2.svg (100%) rename {deepagens-new => legacy-deepagens/deepagens-new}/assets/case3.svg (100%) rename {deepagens-new => legacy-deepagens/deepagens-new}/assets/chart-cost.svg (100%) rename {deepagens-new => legacy-deepagens/deepagens-new}/assets/chart-growth.svg (100%) rename {deepagens-new => legacy-deepagens/deepagens-new}/assets/contact-hero.svg (100%) rename {deepagens-new => legacy-deepagens/deepagens-new}/assets/flow-raas.svg (100%) rename {deepagens-new => legacy-deepagens/deepagens-new}/assets/hero.svg (100%) rename {deepagens-new => legacy-deepagens/deepagens-new}/assets/icon-check.svg (100%) rename {deepagens-new => legacy-deepagens/deepagens-new}/assets/qr-raas.svg (100%) rename {deepagens-new => legacy-deepagens/deepagens-new}/assets/slide1.svg (100%) rename {deepagens-new => legacy-deepagens/deepagens-new}/assets/slide2.svg (100%) rename {deepagens-new => legacy-deepagens/deepagens-new}/assets/slide3.svg (100%) rename {deepagens-new => legacy-deepagens/deepagens-new}/assets/slide4.svg (100%) rename {deepagens-new => legacy-deepagens/deepagens-new}/assets/slide5.svg (100%) rename {deepagens-new => legacy-deepagens/deepagens-new}/assets/testimonial1.svg (100%) rename {deepagens-new => legacy-deepagens/deepagens-new}/assets/testimonial2.svg (100%) rename {deepagens-new => legacy-deepagens/deepagens-new}/assets/testimonial3.svg (100%) rename {deepagens-new => legacy-deepagens/deepagens-new}/blog.html (100%) rename {deepagens-new => legacy-deepagens/deepagens-new}/cases.html (100%) create mode 100644 legacy-deepagens/deepagens-new/contact.html rename {deepagens-new => legacy-deepagens/deepagens-new}/index.html (93%) rename {deepagens-new => legacy-deepagens/deepagens-new}/privacy.html (100%) rename {deepagens-new => legacy-deepagens/deepagens-new}/script.js (100%) rename {deepagens-new => legacy-deepagens/deepagens-new}/services/raas-platform/index.html (100%) rename {deepagens-new => legacy-deepagens/deepagens-new}/solutions.html (100%) rename {deepagens-new => legacy-deepagens/deepagens-new}/styles.css (93%) rename {deepagens-new => legacy-deepagens/deepagens-new}/terms.html (100%) diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..6ac81dc119fc1e03b87cd29efee92263abc87d7c GIT binary patch literal 8196 zcmeHMO^*yg7=CLFdMvh=U6zn^%td0cz9S;q7-2cgMsL{lHM)ChXPcg?Nq5hVwb^8D z5)wba5AXw=#K}dRTpc7hxk)&=^47<&cFD*dgs4iYp113LpQ^5>Q`PhK001dAtNQ?k z0Kmd3(C)?NCq?*0T~c~<&l*I6d;lLf?8Y{QWJ$E?FbWt2i~>dhqkvK1Z%_c=*`ip# zc<(E(X^jF#f&WqgaXvU$1-csB3gyv(jZ6U$bJ#5l+L#AOj-%1l*j6a1IHt-Th^7*q zVh}|~zazpCU5#ypiVj54f#{iu&QOS)9eIun2jVI;tx>=zuv7t&yZ1pA^Y$hLKjiPb zv6n&}_-M?-Am#x^ip^ETy61~5Xmw@BwS8X5>kS$EwEVt1qs~huJ)d>=#umY4ZiGcEeb6>&Arc^q_XKe!mtR>dAT#aZS@j3$y0 zRVjvCy%e!3ZxwlyRa43Jl*7tf`HDR>H@E-Dp<(C1k)!j&&fL-cBg4+Y1Bd75^VVQt z@39M&TXCK7dqN02MD<|{>(uqP_C8u&*BON~dY$BDXPxhCyR*{#n%=eR*7w={8#eY2 z^bZaWZrVJwW$V^$6?9A7R6nl)$8B8 z#%CKCGw{7bj&&xXlwGMMQMEiZmC|ftfjwEV`_eGsaXiM;D2q6oyqco;qZzG_vMG); z&Y{WN#e5_EzVwx{eZ@0R^(a6>mpK&h6@=>s2EAk?KS)`Vzt7F zPfFf`JJvCFD#M0?GVr(hK*!QZ3eSQY(jI4=(R{w(p4To5cEL$F2OdmA3m(8jcmz-2 zIlP7s@R{VuCbEON2^ zP7cPQ3?(T4xOvD9^ex;x7%a{hL2@*@8rur>U77d4l*2Sefn_VOLNSL#{(l咨询与联系|深度云海 - - -

获取定制方案

平均响应<2小时,专家1对1沟通。

联系示意图
-
-
-
- - -
-
- - -
- - -
- - -
-
-

致电咨询:133-5928-2414(工作日 9:00-18:00)

-
- - \ No newline at end of file diff --git a/deepagens-static/about.html b/deepagens-static/about.html deleted file mode 100644 index 891b4be..0000000 --- a/deepagens-static/about.html +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - 关于我们|深度未来(Deepagens) - - - - -
-
-

关于深度未来

-

使命:让AI主动推荐你。愿景:构建可被机器与人同时理解的品牌资产。

-
-
-
-
-

里程碑

2025年发布AI搜索全链路方案,首批客户营收破百万。

-

团队

AI工程、增长、产品、市场的跨职能团队。

-

资质

专利:权威信号点埋入技术;合规:GDPR/CCPA。

-
-
- - diff --git a/deepagens-static/blog.html b/deepagens-static/blog.html deleted file mode 100644 index be0465a..0000000 --- a/deepagens-static/blog.html +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - 博客|深度未来(Deepagens) - - - - -
-
-

AI营销洞察

-

围绕“AI搜索优化”“GEO营销”“AI建站系统”“智能体客服”的思想领导力内容。

-
-
-
-
-

支柱页:AI搜索时代企业获客终极指南

8000字长文占位。

-

专题:GEO营销方法论

互链至支柱页。

-

专题:智能体客服转化提升

实操案例与数据。

-
-
- - diff --git a/deepagens-static/cases.html b/deepagens-static/cases.html deleted file mode 100644 index 303ecbd..0000000 --- a/deepagens-static/cases.html +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - 客户案例|深度未来(Deepagens) - - - - - - -
-
-

客户案例

-

按行业查看成功故事与量化结果,支持下载 PDF 摘要与客户证言视频嵌入。

- -
-
- -
-
-

行业筛选

-
-

制造业

质量检测与售后提升。

-

零售业

AI搜索咨询量提升 190%。

-

生活服务

途悠居集团:GEO优化后咨询量 +200%。

-
-
-
- -
-
-

精选案例

-
-
-
-

豫信新能源

-

挑战:未被AI推荐导致月流失500+商机

-

方案:AI建站 + 200个蒸馏问答

-

结果:品牌AI提及率 5% → 62%,转化成本下降35%

-
-
-
-

途悠居集团

-

行业:生活服务

-

结果:GEO优化后咨询量 +200%

-
-
-
-

某零售品牌

-

AI搜索咨询量提升 190%

-
-
-
-
- - - - diff --git a/deepagens-static/contact.html b/deepagens-static/contact.html deleted file mode 100644 index 4dfa74c..0000000 --- a/deepagens-static/contact.html +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - 联系我们|深度未来(Deepagens) - - - - -
-
-

联系与获取线索

-

请填写表单,我们将在一个工作日内联系您。

-
-
-
-
-
-
- - -
-
- - -
- -
- - -
-
-
-
- - - diff --git a/deepagens-static/developers.html b/deepagens-static/developers.html deleted file mode 100644 index cafbb72..0000000 --- a/deepagens-static/developers.html +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - 开发者中心|深度未来(Deepagens) - - - - -
-
-

开发者中心

-

API/SDK文档占位:快速开始、认证、示例请求、Webhook、错误码。

-
-
-
-
-

快速开始

生成密钥、初始化SDK。

-

示例

Node/Python调用示例。

-

状态与变更

版本更新与状态页占位。

-
-
- - diff --git a/deepagens-static/index.html b/deepagens-static/index.html deleted file mode 100644 index ece3633..0000000 --- a/deepagens-static/index.html +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - 深度未来(Deepagens)— AI搜索营销全链路方案 - - - - - - -
-
-

AI搜索时代,你的品牌必须被看见

-

深度未来通过AI搜索全链路营销闭环,帮助中小企业平均7天完成AI建站上线;部分客户获客成本下降40%(详见案例)。

- -
-
-
-
-
- -
-
-
-

10分钟AI建站

-

专利Schema预埋技术,自动生成可被AI理解的品牌资产。

-
-
-

实时GEO监控

-

跨平台品牌提及率追踪,看板实时洞察与预警。

-
-
-

智能体销售转化

-

92.7%情感识别准确率,蒸馏问答驱动转化闭环。

-
-
-
- -
-
-

受信任于行业头部客户

-
-
爱尔眼科
-
豫信新能源
-
锐之旗
-
途悠居集团
-
示例客户A
-
示例客户B
-
-
-
- -
-
-

定价中心

-
-
-

标准版

-
    -
  • AI建站
  • -
  • 基础GEO监控
  • -
  • 智能体客服(FAQ限定)
  • -
  • 邮件支持
  • -
- 开始试用 -
- -
-
-
- -
-
-

资源库

-
-
-

AI搜索营销白皮书

-

下载需要填写基本信息。

- 下载白皮书 -
-
-

产品手册

-

PDF与PPT模板。

- 下载手册 -
-
-

开发者文档

-

API与SDK占位。

- 查看文档 -
-
-
-
- - - - - - diff --git a/deepagens-static/media.html b/deepagens-static/media.html deleted file mode 100644 index 8150bf3..0000000 --- a/deepagens-static/media.html +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - 媒体中心|深度未来(Deepagens) - - - - -
-
-

媒体与新闻

-

媒体报道、新闻稿与品牌素材下载。

-
-
-
-
-

新闻稿

新品发布与案例报道。

-

媒体报道

第三方媒体链接。

-

品牌素材

Logo与使用规范。

-
-
- - diff --git a/deepagens-static/pricing.html b/deepagens-static/pricing.html deleted file mode 100644 index b1a7f2a..0000000 --- a/deepagens-static/pricing.html +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - 定价中心|深度未来(Deepagens) - - - - -
-
-

定价与方案

-

为中小企业到大型集团提供可扩展的AI搜索营销解决方案。

-
-
-
-
-
-

标准版

-
    -
  • AI建站
  • -
  • 基础GEO监控
  • -
  • 智能体客服(FAQ限定)
  • -
  • 邮件支持
  • -
- 开始试用 -
- -
-
- - diff --git a/deepagens-static/privacy.html b/deepagens-static/privacy.html deleted file mode 100644 index 066d249..0000000 --- a/deepagens-static/privacy.html +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - 隐私与条款|深度未来(Deepagens) - - - - -
-
-

隐私与合规

-

占位:GDPR/CCPA合规、Cookie策略与用户权利说明。

-
-
-
-
-

隐私政策

数据收集、使用与存储。

-

使用条款

服务使用的规则与限制。

-

GDPR声明

数据主体权利与请求方式。

-
-
- - diff --git a/deepagens-static/resources.html b/deepagens-static/resources.html deleted file mode 100644 index dc327c6..0000000 --- a/deepagens-static/resources.html +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - 资源库|深度未来(Deepagens) - - - - -
-
-

资源中心

-

白皮书、产品手册、开发文档等,支持下载与演示。

-
-
-
-
-

AI搜索营销白皮书

填写信息后获取下载链接。

-

产品手册

PDF/PPT模板。

-

开发者文档

API与SDK占位。

-
-
- - diff --git a/deepagens-static/script.js b/deepagens-static/script.js deleted file mode 100644 index 4ba3582..0000000 --- a/deepagens-static/script.js +++ /dev/null @@ -1,8 +0,0 @@ -document.getElementById('contact-form').addEventListener('submit', function (e) { - e.preventDefault(); - const btn = this.querySelector('button[type="submit"]'); - btn.disabled = true; - const msg = document.getElementById('form-msg'); - msg.textContent = '感谢提交!我们将尽快联系您。'; - setTimeout(() => { btn.disabled = false; msg.textContent = ''; }, 3000); -}); diff --git a/deepagens-static/solutions.html b/deepagens-static/solutions.html deleted file mode 100644 index 5a2fcf3..0000000 --- a/deepagens-static/solutions.html +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - 解决方案|深度未来(Deepagens) - - - - - - -
-
-

AI搜索全链路解决方案

-

问题场景:AI搜索导致自然流量下降40%(参考行业报告)。我们以四层技术栈实现从数据到转化的闭环:数据采集 → AI分析 → 内容执行 → 追踪反馈。

- -
-
- -
-
-

技术架构

-
-

数据采集

跨平台抓取品牌相关问答与提及,构建知识库。

-

AI分析

蒸馏问答与情感识别,提取权威信号点。

-

内容执行

AI一键建站,专利Schema预埋,生成结构化资产。

-

追踪反馈

GEO监控看板,品牌提及率与转化闭环。

-
-
-
- -
-
-

功能模块

-
-
-

AI一键建站

-

结构化资产生成(Schema预埋专利)。

-
-
-

GEO监控看板

-

品牌提及率跨平台追踪,异常提醒。

-
-
-

智能体客服

-

高准确情感识别与蒸馏问答,促进成交。

-
-
- -
-
- - - - diff --git a/deepagens-static/styles.css b/deepagens-static/styles.css deleted file mode 100644 index a2c3e38..0000000 --- a/deepagens-static/styles.css +++ /dev/null @@ -1,59 +0,0 @@ -* { box-sizing: border-box; } -html, body { margin: 0; padding: 0; font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, PingFang SC, Helvetica, Arial, sans-serif; color: #e6f2ff; background: #0b1220; } -:root { - --bg-start: #07121f; /* 深色 */ - --bg-end: #0d2137; /* 渐变过渡 */ - --accent-1: #1fb6ff; /* 湖蓝主色 */ - --accent-2: #00c9a7; /* 湖蓝-青色过渡 */ - --text-primary: #e6f2ff; - --text-muted: #a8c0d8; - --card-bg: #0f1a2b; - --card-border: #16324a; - --btn-ghost: #a8c0d8; -} -.container { max-width: 1100px; margin: 0 auto; padding: 0 20px; } -.nav { position: sticky; top: 0; background: rgba(7,18,31,0.65); backdrop-filter: saturate(180%) blur(10px); border-bottom: 1px solid var(--card-border); } -.nav-inner { display: flex; align-items: center; justify-content: space-between; height: 64px; } -.nav a { margin-left: 16px; color: var(--text-muted); text-decoration: none; } -.nav a:hover { color: var(--text-primary); } -.logo { font-weight: 700; letter-spacing: 0.5px; color: var(--text-primary); } -.btn { display: inline-block; padding: 10px 16px; border-radius: 8px; text-decoration: none; font-weight: 600; } -.btn-primary { background: linear-gradient(90deg, var(--accent-1), var(--accent-2)); color: #04121f; } -.btn-secondary { background: #0c2a43; color: var(--text-primary); border: 1px solid var(--card-border); } -.btn-outline { border: 1px solid var(--card-border); color: var(--text-primary); } -.btn-ghost { color: var(--btn-ghost); } -.center { text-align: center; } -.hero { padding: 80px 0 40px; background: radial-gradient(1200px 600px at 30% -20%, rgba(31,182,255,0.25), rgba(0,201,167,0.18) 40%, rgba(11,18,32,0) 75%), linear-gradient(180deg, var(--bg-start), var(--bg-end)); } -.hero h1 { font-size: 40px; margin: 0 0 12px; color: var(--text-primary); } -.hero .sub { color: var(--text-muted); max-width: 720px; } -.cta { margin: 20px 0; display: flex; gap: 12px; flex-wrap: wrap; } -.hero-visual { margin-top: 28px; height: 240px; display: flex; align-items: center; } -.globe { width: 240px; height: 240px; border-radius: 50%; background: radial-gradient(circle at 30% 30%, var(--accent-2), var(--accent-1) 60%, #0b1220 100%); box-shadow: 0 10px 30px rgba(2,6,23,0.35); animation: spin 12s linear infinite; } -@keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } } -.section { padding: 40px 0; background: linear-gradient(180deg, var(--bg-start), var(--bg-end)); } -.selling { padding: 40px 0; } -.grid-3 { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; } -.grid-2 { display: grid; grid-template-columns: repeat(2, 1fr); gap: 16px; } -.card { padding: 16px; border: 1px solid var(--card-border); border-radius: 12px; background: var(--card-bg); } -.card h3 { color: var(--text-primary); } -.card p { color: var(--text-muted); } -.logo-wall { display: grid; grid-template-columns: repeat(6, 1fr); gap: 8px; margin-top: 10px; } -.logo-item { border: 1px dashed var(--card-border); border-radius: 10px; padding: 10px; text-align: center; color: var(--text-muted); background: #0a1929; } -.solutions, .cases, .pricing, .resources, .contact { padding: 40px 0; } -.section h2, .solutions h2, .cases h2, .pricing h2, .resources h2, .contact h2 { color: var(--text-primary); } -.case-card { border: 1px solid var(--card-border); border-radius: 12px; padding: 16px; background: var(--card-bg); } -.case-thumb { height: 120px; background: #0a1929; border-radius: 8px; margin-bottom: 10px; } -.price-card { border: 1px solid var(--card-border); border-radius: 12px; padding: 16px; background: var(--card-bg); } -.price-card.featured { border-color: var(--accent-1); box-shadow: 0 8px 24px rgba(31,182,255,0.2); } -.form label { display: flex; flex-direction: column; gap: 6px; color: var(--text-muted); } -.form input, .form textarea { padding: 10px; border: 1px solid #1c3852; border-radius: 8px; font-size: 14px; background: #091524; color: var(--text-primary); } -.form input::placeholder, .form textarea::placeholder { color: #6b8aa7; } -.actions { display: flex; align-items: center; gap: 10px; margin-top: 10px; } -.muted { color: var(--text-muted); font-size: 14px; } -.footer { padding: 30px 0; border-top: 1px solid var(--card-border); background: linear-gradient(180deg, var(--bg-end), var(--bg-start)); color: var(--text-muted); } -@media (max-width: 900px) { - .grid-3 { grid-template-columns: 1fr; } - .grid-2 { grid-template-columns: 1fr; } - .logo-wall { grid-template-columns: repeat(3, 1fr); } - .hero h1 { font-size: 32px; } -} diff --git a/doubao-asr-demo/.DS_Store b/doubao-asr-demo/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..8b61f1de467e299ba565ee7e1ce7a2df59e00142 GIT binary patch literal 6148 zcmeHKu};G<5IwgQDxyOdBvdhYXX+n>Dtti~!~!j?TA_qgRApkw#K14`3Ct{f0Q>?B zd=bZ2CmzO9P6Orl625q7y5!KNcE1T%PFrMdDvWoXKfQHvd zM(yrtmQG5M>iDY)@UyE?LK%%{8a%(s$4zlA&EmM9WPSMRt=sL_-qF*3I6qiBKN%O^ zjVixy)Sz?hJD?#QQ!1kwm<*SA++RJci!Jiny?ft#J``Rn*G{tq&+o(sykCU(22H{8 zf-boaG^17zT!Z-{zsKvh^vv;Fidk@46%+6vi*3|Y0aZX1_^|@0*=+SKhuW(Gs(>mm zSAf3{7L76Tm^+kD2Rb*c} literal 0 HcmV?d00001 diff --git a/doubao-asr-demo/.env b/doubao-asr-demo/.env new file mode 100644 index 0000000..c22d7fa --- /dev/null +++ b/doubao-asr-demo/.env @@ -0,0 +1,7 @@ +DOU_BAO_API_KEY=ca6ac254-64ee-468c-9047-5f6404fa78f2 +DOU_BAO_RESOURCE_ID=volc.bigasr.auc +DOU_BAO_SUBMIT_URL=https://openspeech.bytedance.com/api/v3/auc/bigmodel/submit +DOU_BAO_RESULT_URL=https://openspeech.bytedance.com/api/v3/auc/bigmodel/query +PORT=6174 +SERVE_STATIC=true +STATIC_PORT=4173 diff --git a/doubao-asr-demo/.env.example b/doubao-asr-demo/.env.example new file mode 100644 index 0000000..29d979c --- /dev/null +++ b/doubao-asr-demo/.env.example @@ -0,0 +1,6 @@ +# 豆包 ASR 代理配置示例 +DOU_BAO_API_KEY=替换为豆包控制台生成的APIKey +DOU_BAO_RESOURCE_ID=volc.bigasr.auc +DOU_BAO_SUBMIT_URL=https://openspeech.bytedance.com/api/v3/auc/bigmodel/submit +DOU_BAO_RESULT_URL=https://openspeech.bytedance.com/api/v3/auc/bigmodel/get_result +PORT=5174 diff --git a/doubao-asr-demo/README.md b/doubao-asr-demo/README.md new file mode 100644 index 0000000..e43252e --- /dev/null +++ b/doubao-asr-demo/README.md @@ -0,0 +1,86 @@ +# 豆包语音转写演示 + +本项目提供一个简单的前端页面用于上传音频并调用豆包语音转写接口(submit/get_result),同时包含一个 Node.js 代理服务,避免在前端暴露 API Key 与跨域问题。 + +## 项目结构 + +``` +doubao-asr-demo/ +├── index.html # 前端页面入口 +├── main.js # 前端逻辑 +├── styles.css # 页面样式 +├── server/ +│ └── index.js # Node 代理服务(Express) +├── .env.example # 代理环境变量示例 +├── package.json +└── package-lock.json +``` + +## 快速启动 + +1. 克隆或下载项目后进入目录 + +```bash +cd doubao-asr-demo +``` + +2. 安装依赖 + +```bash +npm install +``` + +3. 准备环境变量 + +复制 `.env.example` 为 `.env`,填入豆包平台申请的密钥: + +``` +cp .env.example .env +# 编辑 .env,至少配置 DOU_BAO_API_KEY +``` + +主要变量说明: +- `DOU_BAO_API_KEY`:豆包开放平台生成的 API Key(必填) +- `DOU_BAO_RESOURCE_ID`:资源 ID,默认 `volc.bigasr.auc` +- `DOU_BAO_SUBMIT_URL` 与 `DOU_BAO_RESULT_URL`:如无特殊需求保持默认 +- `PORT`:代理服务监听端口,默认 5174 + +4. 启动代理服务 + +```bash +npm run dev +``` + +代理启动后默认监听 `http://localhost:5174`。 + +5. 启动静态资源服务 + +使用任意方式托管静态页面(如 VS Code Live Server、`python -m http.server` 等),或将页面放入任意静态网站服务器。必须保证页面能访问到代理服务 `http://localhost:5174`。 + +示例: + +```bash +python3 -m http.server 4173 +``` + +然后在浏览器访问 `http://localhost:4173/index.html`。 + +## 使用方法 + +1. 在页面选择音频文件,填写必要参数。 +2. 如果本地代理已启动且地址为默认值,可将“API 基础地址”留空,前端会自动调用代理接口 `/api/asr/...`。 +3. 若需要直连豆包官方接口,在“API 基础地址”输入官方地址,并确保浏览器环境允许该接口的 CORS(通常不可行)。此时必须在页面中填写 `X-Api-Key`,否则会提示错误。 +4. 点击“提交识别任务”,页面会先提交任务,再自动轮询结果并展示转写文本,同时在“调试日志”中输出详细日志。 + +## 注意事项 + +- 前端直接调用官方接口会暴露密钥且受 CORS 限制,强烈建议通过本项目提供的代理转发。 +- 代理只作为演示用途,生产环境请增加鉴权、限流、日志、安全审计等措施。 +- 上传音频大小受限于前端与代理的请求体限制(默认 12 MB),可根据实际需要调整。 +- 如果豆包接口返回的字段结构与示例不同,请在 `main.js` 中调整 `extractTranscript` 解析逻辑。 + +## 常见问题 + +- **Failed to fetch**:通常因为前端直连被 CORS 拒绝或未启动代理,请使用代理方式或检查网络。 +- **服务器未配置 DOU_BAO_API_KEY**:请确认 `.env` 已设置该变量,并在启动代理前加载。 +- **轮询超时**:可根据实际需求增加 `maxAttempts` 或 `pollIntervalMs`,同时检查豆包接口是否正常返回。 diff --git a/doubao-asr-demo/index.html b/doubao-asr-demo/index.html new file mode 100644 index 0000000..7a0d465 --- /dev/null +++ b/doubao-asr-demo/index.html @@ -0,0 +1,248 @@ + + + + + + + 录音文件转文字工具 + + + + + + + +
+ + +
+
+
上传录音文件
+
+
+
+

拖拽录音文件到这里或点击上传

+

支持 MP3, WAV, FLAC, AAC, M4A 等格式,最大500MB

+ + +
+
+
+ +
+
上传状态
+
+
+
文件上传进度0%
+
+
未选择文件准备就绪
+
+ +
+
+ +
+
转写分析
+
+
+
+

AI正在分析音频内容,识别不同发言者

+

转写用时 00:00

+
+
+
+
+ +
+
+
+
+

录音文件

+
+
+ +
+
+
0:00
+
+
+
+
+ + + +
+
+ + +
+
+
+
+ +
+
+
+ + +
+
+
+
+
+
+
+ + + +
+
+
+ + +
+
调试日志
+
+
+ +
+
+
等待提交…
+
+
+
+ + +
+ + + + + + + diff --git a/doubao-asr-demo/logs/asr.log b/doubao-asr-demo/logs/asr.log new file mode 100644 index 0000000..e1ca437 --- /dev/null +++ b/doubao-asr-demo/logs/asr.log @@ -0,0 +1,2401 @@ +[dotenv@17.2.3] injecting env (0) from .env -- tip: 🛠️ run anywhere with `dotenvx run -- yourcommand` +豆包 ASR 代理服务已启动,端口 6174 +[incoming] GET /health +[incoming] GET / +[incoming] GET /main.js +[incoming] GET /health +[incoming] GET / +[incoming] GET /main.js +[incoming] GET /health +[incoming] GET / +[incoming] GET /main.js +[incoming] GET /health +[incoming] GET / +[incoming] GET /main.js +[incoming] GET /health +[incoming] GET / +[incoming] GET /main.js +[incoming] GET /health +[incoming] GET / +[incoming] GET /main.js +[incoming] GET /health +[incoming] GET / +[incoming] GET /main.js +[incoming] GET /health +[incoming] GET / +[incoming] GET /main.js +[incoming] GET /health +[incoming] POST /api/asr/submit +[submit] 转发至 https://openspeech.bytedance.com/api/v3/auc/bigmodel/submit { + hasAudioData: true, + audioDataLength: 10000996, + audioFormat: 'mp3', + audioCodec: 'mp3', + sampleRate: 44100, + bits: 16, + channel: 1, + hasAudioUrl: false, + modelName: 'bigmodel', + uid: 'AudioToText' +} { + request: { + model_name: 'bigmodel', + enable_itn: true, + enable_punc: true, + enable_ddc: true, + enable_speaker_info: true, + enable_channel_split: false, + show_utterances: true, + vad_segment: true, + sensitive_words_filter: '' + } +} +[submit] 响应 200 { + __upstream: { + status: 200, + ok: true, + headers: { + 'access-control-allow-credentials': 'true', + 'access-control-allow-headers': 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,X-Api-App-Key,X-Api-Access-Key,X-Api-Request-Id,X-Api-Resource-Id,X-Api-Sequence', + 'access-control-allow-methods': 'GET, POST, OPTIONS', + 'access-control-allow-origin': '*', + 'access-control-expose-headers': 'X-Tt-Logid,X-Api-Status-Code,X-Api-Message', + 'api-service-host': 'fdbd:dc02:28:228::29', + connection: 'keep-alive', + 'content-length': '2', + 'content-type': 'application/json; charset=utf-8', + date: 'Mon, 03 Nov 2025 03:12:54 GMT', + eagleid: '74c4862417621395737057724e', + server: 'Tengine', + 'server-timing': 'inner; dur=275, cdn-cache;desc=MISS,edge;dur=0,origin;dur=1216', + 'timing-allow-origin': '*', + via: 'dynamic5.cn7551[1216,0]', + 'x-api-message': 'OK', + 'x-api-request-id': '0be82fcb-42bf-4585-9c10-b5f189a21d14', + 'x-api-status-code': '20000000', + 'x-tt-logid': '2025110311125319C18D58AB6D001038A0', + 'x-tt-trace-host': '01be378494562453161574e6794e202125265c741817ab9e586e318a081976de1ae565bbfc55642589f69e6deeaebb5f084265ede5d30cf36af7623db4a4ae641e1f60cb4fa43b21491fdd713c157a4b110779e37e5eae7438154f761c10419754', + 'x-tt-trace-id': '00-25110311125319C18D58AB6D001038A0-2164E9DB2CA208AB-00', + 'x-tt-trace-tag': 'id=03;cdn-cache=miss;type=dyn' + }, + rawText: '{}', + requestId: '0be82fcb-42bf-4585-9c10-b5f189a21d14' + }, + result: { job_key: '0be82fcb-42bf-4585-9c10-b5f189a21d14' }, + data: { job_key: '0be82fcb-42bf-4585-9c10-b5f189a21d14' } +} +[incoming] POST /api/asr/result +[result] 转发至 https://openspeech.bytedance.com/api/v3/auc/bigmodel/query { + hasAudioData: false, + audioDataLength: 0, + audioFormat: undefined, + audioCodec: undefined, + sampleRate: undefined, + bits: undefined, + channel: undefined, + hasAudioUrl: false, + modelName: undefined, + uid: undefined +} { request: undefined } +[result] 响应 200 { + audio_info: {}, + result: { text: '', job_key: '0be82fcb-42bf-4585-9c10-b5f189a21d14' }, + __upstream: { + status: 200, + ok: true, + headers: { + 'access-control-allow-credentials': 'true', + 'access-control-allow-headers': 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,X-Api-App-Key,X-Api-Access-Key,X-Api-Request-Id,X-Api-Resource-Id,X-Api-Sequence', + 'access-control-allow-methods': 'GET, POST, OPTIONS', + 'access-control-allow-origin': '*', + 'access-control-expose-headers': 'X-Tt-Logid,X-Api-Status-Code,X-Api-Message', + 'api-service-host': 'fdbd:dc01:2a:86::13', + connection: 'keep-alive', + 'content-length': '38', + 'content-type': 'application/json; charset=utf-8', + date: 'Mon, 03 Nov 2025 03:12:55 GMT', + eagleid: '74c4862417621395749643374e', + server: 'Tengine', + 'server-timing': 'inner; dur=12, cdn-cache;desc=MISS,edge;dur=0,origin;dur=70', + 'timing-allow-origin': '*', + via: 'dynamic5.cn7551[70,0]', + 'x-api-message': '[Processing in progress] Handle response: Start Processing', + 'x-api-request-id': '0be82fcb-42bf-4585-9c10-b5f189a21d14', + 'x-api-status-code': '20000001', + 'x-tt-logid': '202511031112559AEACDC069DF3402E862', + 'x-tt-trace-host': '01be378494562453161574e6794e20212542e3ea510421bf05423331cea2d1c089d4961bc04989e1b525e3de091ef46f9bc1f4c0b1ca73e337f34a97aeb00ac58fa0fb56965390b25da4b8d4e01667efdbd69ab009841ca98f8e6c35d204e8a8d7', + 'x-tt-trace-id': '00-2511031112559AEACDC069DF3402E862-7C46A1FA732907B9-00', + 'x-tt-trace-tag': 'id=03;cdn-cache=miss;type=dyn' + }, + rawText: '{"audio_info":{},"result":{"text":""}}', + requestId: '0be82fcb-42bf-4585-9c10-b5f189a21d14' + }, + data: { text: '', job_key: '0be82fcb-42bf-4585-9c10-b5f189a21d14' } +} +[incoming] POST /api/asr/result +[result] 转发至 https://openspeech.bytedance.com/api/v3/auc/bigmodel/query { + hasAudioData: false, + audioDataLength: 0, + audioFormat: undefined, + audioCodec: undefined, + sampleRate: undefined, + bits: undefined, + channel: undefined, + hasAudioUrl: false, + modelName: undefined, + uid: undefined +} { request: undefined } +[result] 响应 200 { + audio_info: {}, + result: { text: '', job_key: '0be82fcb-42bf-4585-9c10-b5f189a21d14' }, + __upstream: { + status: 200, + ok: true, + headers: { + 'access-control-allow-credentials': 'true', + 'access-control-allow-headers': 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,X-Api-App-Key,X-Api-Access-Key,X-Api-Request-Id,X-Api-Resource-Id,X-Api-Sequence', + 'access-control-allow-methods': 'GET, POST, OPTIONS', + 'access-control-allow-origin': '*', + 'access-control-expose-headers': 'X-Tt-Logid,X-Api-Status-Code,X-Api-Message', + 'api-service-host': 'fdbd:dc03:f:416::25', + connection: 'keep-alive', + 'content-length': '38', + 'content-type': 'application/json; charset=utf-8', + date: 'Mon, 03 Nov 2025 03:12:59 GMT', + eagleid: '74c4862417621395790883410e', + server: 'Tengine', + 'server-timing': 'inner; dur=19, cdn-cache;desc=MISS,edge;dur=0,origin;dur=121', + 'timing-allow-origin': '*', + via: 'dynamic5.cn7551[121,0]', + 'x-api-message': '[Processing in progress] Handle response: Start Processing', + 'x-api-request-id': '0be82fcb-42bf-4585-9c10-b5f189a21d14', + 'x-api-status-code': '20000001', + 'x-tt-logid': '20251103111259A8E59283087C163AEC8C', + 'x-tt-trace-host': '01be378494562453161574e6794e202125fcbe65ce61745d03cc612578b35f2b01e32dd05d14f082ffd181107eea0f59c47d157c1a931487f1f950e78b16e87eabb0d4d327a608f8849ef78ec496fb6de8449951635f7c1d1d387cd76f639e4023', + 'x-tt-trace-id': '00-251103111259A8E59283087C163AEC8C-365AA16D06F44C29-00', + 'x-tt-trace-tag': 'id=03;cdn-cache=miss;type=dyn' + }, + rawText: '{"audio_info":{},"result":{"text":""}}', + requestId: '0be82fcb-42bf-4585-9c10-b5f189a21d14' + }, + data: { text: '', job_key: '0be82fcb-42bf-4585-9c10-b5f189a21d14' } +} +[incoming] POST /api/asr/result +[result] 转发至 https://openspeech.bytedance.com/api/v3/auc/bigmodel/query { + hasAudioData: false, + audioDataLength: 0, + audioFormat: undefined, + audioCodec: undefined, + sampleRate: undefined, + bits: undefined, + channel: undefined, + hasAudioUrl: false, + modelName: undefined, + uid: undefined +} { request: undefined } +[result] 响应 200 { + audio_info: {}, + result: { text: '', job_key: '0be82fcb-42bf-4585-9c10-b5f189a21d14' }, + __upstream: { + status: 200, + ok: true, + headers: { + 'access-control-allow-credentials': 'true', + 'access-control-allow-headers': 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,X-Api-App-Key,X-Api-Access-Key,X-Api-Request-Id,X-Api-Resource-Id,X-Api-Sequence', + 'access-control-allow-methods': 'GET, POST, OPTIONS', + 'access-control-allow-origin': '*', + 'access-control-expose-headers': 'X-Tt-Logid,X-Api-Status-Code,X-Api-Message', + 'api-service-host': 'fdbd:dc02:28:a12::31', + connection: 'keep-alive', + 'content-length': '38', + 'content-type': 'application/json; charset=utf-8', + date: 'Mon, 03 Nov 2025 03:13:02 GMT', + eagleid: '74c4862417621395826385225e', + server: 'Tengine', + 'server-timing': 'inner; dur=18, cdn-cache;desc=MISS,edge;dur=0,origin;dur=65', + 'timing-allow-origin': '*', + via: 'dynamic5.cn7551[65,0]', + 'x-api-message': '[Processing in progress] Handle response: Start Processing', + 'x-api-request-id': '0be82fcb-42bf-4585-9c10-b5f189a21d14', + 'x-api-status-code': '20000001', + 'x-tt-logid': '2025110311130207E707AB215B5D00A3D6', + 'x-tt-trace-host': '01be378494562453161574e6794e202125265c741817ab9e586e318a081976de1ae565bbfc55642589f69e6deeaebb5f08ac0ae964a94a9a68a16e20ce75fe0b40d66cbe9eb719d7f381d6f5163df4c9607c3e403e9e4c636c19465ebee8c4911d', + 'x-tt-trace-id': '00-25110311130207E707AB215B5D00A3D6-03644F9B45E65CB7-00', + 'x-tt-trace-tag': 'id=03;cdn-cache=miss;type=dyn' + }, + rawText: '{"audio_info":{},"result":{"text":""}}', + requestId: '0be82fcb-42bf-4585-9c10-b5f189a21d14' + }, + data: { text: '', job_key: '0be82fcb-42bf-4585-9c10-b5f189a21d14' } +} +[incoming] POST /api/asr/result +[result] 转发至 https://openspeech.bytedance.com/api/v3/auc/bigmodel/query { + hasAudioData: false, + audioDataLength: 0, + audioFormat: undefined, + audioCodec: undefined, + sampleRate: undefined, + bits: undefined, + channel: undefined, + hasAudioUrl: false, + modelName: undefined, + uid: undefined +} { request: undefined } +[result] 响应 200 { + audio_info: {}, + result: { text: '', job_key: '0be82fcb-42bf-4585-9c10-b5f189a21d14' }, + __upstream: { + status: 200, + ok: true, + headers: { + 'access-control-allow-credentials': 'true', + 'access-control-allow-headers': 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,X-Api-App-Key,X-Api-Access-Key,X-Api-Request-Id,X-Api-Resource-Id,X-Api-Sequence', + 'access-control-allow-methods': 'GET, POST, OPTIONS', + 'access-control-allow-origin': '*', + 'access-control-expose-headers': 'X-Tt-Logid,X-Api-Status-Code,X-Api-Message', + 'api-service-host': 'fdbd:dc01:2a:527::18', + connection: 'keep-alive', + 'content-length': '38', + 'content-type': 'application/json; charset=utf-8', + date: 'Mon, 03 Nov 2025 03:13:07 GMT', + eagleid: '74c4862417621395876232607e', + server: 'Tengine', + 'server-timing': 'inner; dur=35, cdn-cache;desc=MISS,edge;dur=0,origin;dur=93', + 'timing-allow-origin': '*', + via: 'dynamic5.cn7551[93,0]', + 'x-api-message': '[Processing in progress] Handle response: Start Processing', + 'x-api-request-id': '0be82fcb-42bf-4585-9c10-b5f189a21d14', + 'x-api-status-code': '20000001', + 'x-tt-logid': '202511031113070D9331281401AD29F0BA', + 'x-tt-trace-host': '01be378494562453161574e6794e20212542e3ea510421bf05423331cea2d1c089d4961bc04989e1b525e3de091ef46f9b5e2147bcd00e85d70c72ada36d235169431e169a893f8966f49bd51eea997e9048d6ed26a25a6015d67ed81a5bd1ca20', + 'x-tt-trace-id': '00-2511031113070D9331281401AD29F0BA-178739AB2E235CFF-00', + 'x-tt-trace-tag': 'id=03;cdn-cache=miss;type=dyn' + }, + rawText: '{"audio_info":{},"result":{"text":""}}', + requestId: '0be82fcb-42bf-4585-9c10-b5f189a21d14' + }, + data: { text: '', job_key: '0be82fcb-42bf-4585-9c10-b5f189a21d14' } +} +[incoming] POST /api/asr/result +[result] 转发至 https://openspeech.bytedance.com/api/v3/auc/bigmodel/query { + hasAudioData: false, + audioDataLength: 0, + audioFormat: undefined, + audioCodec: undefined, + sampleRate: undefined, + bits: undefined, + channel: undefined, + hasAudioUrl: false, + modelName: undefined, + uid: undefined +} { request: undefined } +[result] 响应 200 { + audio_info: {}, + result: { text: '', job_key: '0be82fcb-42bf-4585-9c10-b5f189a21d14' }, + __upstream: { + status: 200, + ok: true, + headers: { + 'access-control-allow-credentials': 'true', + 'access-control-allow-headers': 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,X-Api-App-Key,X-Api-Access-Key,X-Api-Request-Id,X-Api-Resource-Id,X-Api-Sequence', + 'access-control-allow-methods': 'GET, POST, OPTIONS', + 'access-control-allow-origin': '*', + 'access-control-expose-headers': 'X-Tt-Logid,X-Api-Status-Code,X-Api-Message', + 'api-service-host': 'fdbd:dc03:14:e46::142', + connection: 'keep-alive', + 'content-length': '38', + 'content-type': 'application/json; charset=utf-8', + date: 'Mon, 03 Nov 2025 03:13:11 GMT', + eagleid: '74c4862417621395910008069e', + server: 'Tengine', + 'server-timing': 'inner; dur=21, cdn-cache;desc=MISS,edge;dur=0,origin;dur=110', + 'timing-allow-origin': '*', + via: 'dynamic5.cn7551[110,0]', + 'x-api-message': '[Processing in progress] Handle response: Start Processing', + 'x-api-request-id': '0be82fcb-42bf-4585-9c10-b5f189a21d14', + 'x-api-status-code': '20000001', + 'x-tt-logid': '20251103111311094853908D686E3D07F8', + 'x-tt-trace-host': '01be378494562453161574e6794e202125fcbe65ce61745d03cc612578b35f2b0192aabd7e7b7410dd2e5f389ff5370be1c1c6f30a99e76280ade3745486ec2b0401abfcc3eec7a7b9a473a06556fbcaf7576fa429f235086fb44ba48695f86857', + 'x-tt-trace-id': '00-251103111311094853908D686E3D07F8-44FB02EE738049BD-00', + 'x-tt-trace-tag': 'id=03;cdn-cache=miss;type=dyn' + }, + rawText: '{"audio_info":{},"result":{"text":""}}', + requestId: '0be82fcb-42bf-4585-9c10-b5f189a21d14' + }, + data: { text: '', job_key: '0be82fcb-42bf-4585-9c10-b5f189a21d14' } +} +[incoming] POST /api/asr/result +[result] 转发至 https://openspeech.bytedance.com/api/v3/auc/bigmodel/query { + hasAudioData: false, + audioDataLength: 0, + audioFormat: undefined, + audioCodec: undefined, + sampleRate: undefined, + bits: undefined, + channel: undefined, + hasAudioUrl: false, + modelName: undefined, + uid: undefined +} { request: undefined } +[result] 响应 200 { + audio_info: {}, + result: { text: '', job_key: '0be82fcb-42bf-4585-9c10-b5f189a21d14' }, + __upstream: { + status: 200, + ok: true, + headers: { + 'access-control-allow-credentials': 'true', + 'access-control-allow-headers': 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,X-Api-App-Key,X-Api-Access-Key,X-Api-Request-Id,X-Api-Resource-Id,X-Api-Sequence', + 'access-control-allow-methods': 'GET, POST, OPTIONS', + 'access-control-allow-origin': '*', + 'access-control-expose-headers': 'X-Tt-Logid,X-Api-Status-Code,X-Api-Message', + 'api-service-host': 'fdbd:dc03:15:390::73', + connection: 'keep-alive', + 'content-length': '38', + 'content-type': 'application/json; charset=utf-8', + date: 'Mon, 03 Nov 2025 03:13:17 GMT', + eagleid: '74c4872717621395969893235e', + server: 'Tengine', + 'server-timing': 'inner; dur=19, cdn-cache;desc=MISS,edge;dur=0,origin;dur=120', + 'timing-allow-origin': '*', + via: 'dynamic8.cn7535[120,0]', + 'x-api-message': '[Processing in progress] Handle response: Start Processing', + 'x-api-request-id': '0be82fcb-42bf-4585-9c10-b5f189a21d14', + 'x-api-status-code': '20000001', + 'x-tt-logid': '2025110311131701EEE0611BFD13458BF2', + 'x-tt-trace-host': '01be378494562453161574e6794e2021254ffbd1bdae5c8a468b480d20bf512c299c43e2a2d020ac2b27bfcd1d8bb1f4014a2a22d444eab2dcd12f4453c8458fb6e15f6d8749fa2a7ba1b0d262761439e8c2019a902c27b86f2dc44115dd9bc2a3', + 'x-tt-trace-id': '00-25110311131701EEE0611BFD13458BF2-39563F7059C723C7-00', + 'x-tt-trace-tag': 'id=03;cdn-cache=miss;type=dyn' + }, + rawText: '{"audio_info":{},"result":{"text":""}}', + requestId: '0be82fcb-42bf-4585-9c10-b5f189a21d14' + }, + data: { text: '', job_key: '0be82fcb-42bf-4585-9c10-b5f189a21d14' } +} +[incoming] POST /api/asr/result +[result] 转发至 https://openspeech.bytedance.com/api/v3/auc/bigmodel/query { + hasAudioData: false, + audioDataLength: 0, + audioFormat: undefined, + audioCodec: undefined, + sampleRate: undefined, + bits: undefined, + channel: undefined, + hasAudioUrl: false, + modelName: undefined, + uid: undefined +} { request: undefined } +[result] 响应 200 { + audio_info: {}, + result: { text: '', job_key: '0be82fcb-42bf-4585-9c10-b5f189a21d14' }, + __upstream: { + status: 200, + ok: true, + headers: { + 'access-control-allow-credentials': 'true', + 'access-control-allow-headers': 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,X-Api-App-Key,X-Api-Access-Key,X-Api-Request-Id,X-Api-Resource-Id,X-Api-Sequence', + 'access-control-allow-methods': 'GET, POST, OPTIONS', + 'access-control-allow-origin': '*', + 'access-control-expose-headers': 'X-Tt-Logid,X-Api-Status-Code,X-Api-Message', + 'api-service-host': 'fdbd:dc03:14:420::19', + connection: 'keep-alive', + 'content-length': '38', + 'content-type': 'application/json; charset=utf-8', + date: 'Mon, 03 Nov 2025 03:13:20 GMT', + eagleid: '74c4872717621396003827116e', + server: 'Tengine', + 'server-timing': 'inner; dur=33, cdn-cache;desc=MISS,edge;dur=0,origin;dur=86', + 'timing-allow-origin': '*', + via: 'dynamic8.cn7535[86,0]', + 'x-api-message': '[Processing in progress] Handle response: Start Processing', + 'x-api-request-id': '0be82fcb-42bf-4585-9c10-b5f189a21d14', + 'x-api-status-code': '20000001', + 'x-tt-logid': '2025110311132034F5E309C379F706C3A5', + 'x-tt-trace-host': '01be378494562453161574e6794e202125de2ae0aca95529d2af2e67428647347a8c2d84cde571c9c3e2f458cd7bf52d9700a9a239f69e46e053928b6c0424874ddc36c04a58423548e2f7554fdf35ed711d88fb6a56d0a8851a9f15805f875938', + 'x-tt-trace-id': '00-25110311132034F5E309C379F706C3A5-7422B73F6C87CD19-00', + 'x-tt-trace-tag': 'id=03;cdn-cache=miss;type=dyn' + }, + rawText: '{"audio_info":{},"result":{"text":""}}', + requestId: '0be82fcb-42bf-4585-9c10-b5f189a21d14' + }, + data: { text: '', job_key: '0be82fcb-42bf-4585-9c10-b5f189a21d14' } +} +[incoming] POST /api/asr/result +[result] 转发至 https://openspeech.bytedance.com/api/v3/auc/bigmodel/query { + hasAudioData: false, + audioDataLength: 0, + audioFormat: undefined, + audioCodec: undefined, + sampleRate: undefined, + bits: undefined, + channel: undefined, + hasAudioUrl: false, + modelName: undefined, + uid: undefined +} { request: undefined } +[result] 响应 200 { + audio_info: { duration: 312527 }, + result: { + additions: { duration: '312527' }, + text: '能听到吗?哎,你好你好。哎,你好。是这个龙总,对吧?对,我是龙杰,啊,对。哎,董洁你好,我我也在线了,我是吴丽丽。啊,丽丽。叶总好。 OK 那个,磊子。哎,我在啦。哎哎哎,好,那个就是我们今天主要的这个会议啊,这人都齐了,就主要就是 就针对咱们这个相关的产品和一些技术的一些方向呢,我们做一个基本的交流和这个龙杰龙总。所以呢这个辛苦一下龙总,完了以后呢我们邀请了我们的一个顾问呐,专家顾问啊,这个 赵雷总啊,他这个这方面是,对对对,说一起交流一下,大概是这么一个情况。所以那个龙杰龙总,能不能就你现在的一个,咱们现在的产品的开发。以及这个思路,还有这些方面呢,能不能做一个简单的,一个,比如说三五分钟的介绍,咱们从这个边起个头,好不好?可以,好的好的。目前呢,因为现在的市场啊比较比较那个,也比较大嘛。然后我们就现在就是说,以前的 SEO 转化到现在的 GEO 对吧?那么我们通过那个上次钱总展示那篇论文,得到了一个结论,就是说我们需要第一就是很很很很机械的去发文章给的,让大模型去搜,去收录。那么它大模型怎么收录呢?其实我们先把这个原理搞一下,就是 首先我们去去去搜一个内容的时候,我们去看大模型从哪些方面去去去到从哪些方面,那个去去抓它需要的内容,对吧?因为目前来说,大模型它是训练的时候呢,它其实它也是,它的数据其实就终止到了它训练那那个的一个数据数据段。那他需要回答我们问问题的时候呢,他肯定是需要去调用其他的外部接口。比如说像那个 Dubbo,他可能调用的是博查,豆包可能调用他内部的一些接口,包括博查的一些接口。混元呢,他可能调用的是他自己内部的一些私域上面的一些一些链接,对。然后他把这个内容抓到这些内容之后呢,再把这个内容提交到到大模型里面去分析、去总结,然后 给出用户需要的一个答案。对,这是这是大模型抓起的一个一个一个流程。那基于这个流程呢?我们就就就做了一些工具。首先就是这个文章怎么获取,怎么规划,就是怎么把它的内容结构化,让它更好的去把这个内容给呈现出来,这是第一点。第二点呢,其实我们在分析的过程中呢,其实也发现,尤其是豆包和第,那个,尤其是豆包,它对于那个数据的来源,它特别喜欢去抓一些官网上的一些数据。对,然后呢在这个过程中呢,我我们就就做了一个那个自动复制官网的,就,其实也不能叫自动复制官网,就是做一个 官网的一个克隆,那它不,当然了它不是简单一个克隆的一个一个一个一个一个功能啊,就是其实目前的整,那个叫法呢,就是叫 AI 克隆嘛。但是它的工作原理呢,其实就是说 我们先从他已已有的官网上把数据先拿到我们的数据本,那个我我们我们这边来。然后呢再再通过我们的一些工具去对数据加工,就我们的一些 agent 对数据做一些加工。然后继续加工之后呢,同时我们也去去那个生成一些关键字,去那个外保上,那个丰富这些数据源。拿到这些数据源之后呢,再把那个数据再整理,整理成我们需要的这个,不是我们,整理成大模型比较喜欢的这种结构结构化的一些文章,然后再再那个那个发布 到我们内部的,就是我们克隆出来的这个这个官网上来。对,这是这是第二个工具,就是这,对,不,但,但是我说的工具只是说一个,一些 agent 的一些总集啊,他对,我们不只是一个一个工具一个工具的做,我们是做一部分 agent 然后组装成为一个工,一个工,这所谓的一个工具,其实也就是一个 agent 集合。对。目前呢在做的是是这么两个两个事,然后第三个事呢,其实正在规划做的是那个我们怎么去监控大模型是不是把我们的内容,是否已经呈现出来了这么一件事,对。这个事的思路呢,其实我们是模拟着模拟着这个人,对我们提供的一些关键字,模拟的人,然后对那个大模型进行提问,提问得出来之后之后呢,就是', + utterances: [ + [Object], [Object], [Object], + [Object], [Object], [Object], + [Object], [Object], [Object], + [Object], [Object], [Object], + [Object], [Object], [Object], + [Object], [Object], [Object], + [Object], [Object], [Object], + [Object], [Object], [Object], + [Object], [Object], [Object], + [Object] + ], + job_key: '0be82fcb-42bf-4585-9c10-b5f189a21d14' + }, + __upstream: { + status: 200, + ok: true, + headers: { + 'access-control-allow-credentials': 'true', + 'access-control-allow-headers': 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,X-Api-App-Key,X-Api-Access-Key,X-Api-Request-Id,X-Api-Resource-Id,X-Api-Sequence', + 'access-control-allow-methods': 'GET, POST, OPTIONS', + 'access-control-allow-origin': '*', + 'access-control-expose-headers': 'X-Tt-Logid,X-Api-Status-Code,X-Api-Message', + 'api-service-host': 'fdbd:dc03:f:b26::17', + connection: 'keep-alive', + 'content-encoding': 'br', + 'content-type': 'application/json; charset=utf-8', + date: 'Mon, 03 Nov 2025 03:13:25 GMT', + eagleid: '74c4872717621396052264638e', + server: 'Tengine', + 'server-timing': 'inner; dur=31, cdn-cache;desc=MISS,edge;dur=0,origin;dur=114', + 'timing-allow-origin': '*', + 'transfer-encoding': 'chunked', + vary: 'Accept-Encoding', + via: 'dynamic8.cn7535[114,0]', + 'x-api-message': 'OK', + 'x-api-request-id': '0be82fcb-42bf-4585-9c10-b5f189a21d14', + 'x-api-status-code': '20000000', + 'x-tt-logid': '202511031113257D2CFA5F9FBC6538631E', + 'x-tt-trace-host': '01be378494562453161574e6794e2021254ffbd1bdae5c8a468b480d20bf512c29bea02c0fc8496fdbc0571509a4b88b99a7743b4657060254f407f68eda23903d9fa27410548a836901c7095d4f99fb4944dc5337f780c7e4eeb97d5de6ef0bfc', + 'x-tt-trace-id': '00-2511031113257D2CFA5F9FBC6538631E-20413C1F735F5AF4-00', + 'x-tt-trace-tag': 'id=03;cdn-cache=miss;type=dyn' + }, + rawText: '{"audio_info":{"duration":312527},"result":{"additions":{"duration":"312527"},"text":"能听到吗?哎,你好你好。哎,你好。是这个龙总,对吧?对,我是龙杰,啊,对。哎,董洁你好,我我也在线了,我是吴丽丽。啊,丽丽。叶总好。 OK 那个,磊子。哎,我在啦。哎哎哎,好,那个就是我们今天主要的这个会议啊,这人都齐了,就主要就是 就针对咱们这个相关的产品和一些技术的一些方向呢,我们做一个基本的交流和这个龙杰龙总。所以呢这个辛苦一下龙总,完了以后呢我们邀请了我们的一个顾问呐,专家顾问啊,这个 赵雷总啊,他这个这方面是,对对对,说一起交流一下,大概是这么一个情况。所以那个龙杰龙总,能不能就你现在的一个,咱们现在的产品的开发。以及这个思路,还有这些方面呢,能不能做一个简单的,一个,比如说三五分钟的介绍,咱们从这个边起个头,好不好?可以,好的好的。目前呢,因为现在的市场啊比较比较那个,也比较大嘛。然后我们就现在就是说,以前的 SEO 转化到现在的 GEO 对吧?那么我们通过那个上次钱总展示那篇论文,得到了一个结论,就是说我们需要第一就是很很很很机械的去发文章给的,让大模型去搜,去收录。那么它大模型怎么收录呢?其实我们先把这个原理搞一下,就是 首先我们去去去搜一个内容的时候,我们去看大模型从哪些方面去去去到从哪些方面,那个去去抓它需要的内容,对吧?因为目前来说,大模型它是训练的时候呢,它其实它也是,它的数据其实就终止到了它训练那那个的一个数据数据段。那他需要回答我们问问题的时候呢,他肯定是需要去调用其他的外部接口。比如说像那个 Dubbo,他可能调用的是博查,豆包可能调用他内部的一些接口,包括博查的一些接口。混元呢,他可能调用的是他自己内部的一些私域上面的一些一些链接,对。然后他把这个内容抓到这些内容之后呢,再把这个内容提交到到大模型里面去分析、去总结,然后 给出用户需要的一个答案。对,这是这是大模型抓起的一个一个一个流程。那基于这个流程呢?我们就就就做了一些工具。首先就是这个文章怎么获取,怎么规划,就是怎么把它的内容结构化,让它更好的去把这个内容给呈现出来,这是第一点。第二点呢,其实我们在分析的过程中呢,其实也发现,尤其是豆包和第,那个,尤其是豆包,它对于那个数据的来源,它特别喜欢去抓一些官网上的一些数据。对,然后呢在这个过程中呢,我我们就就做了一个那个自动复制官网的,就,其实也不能叫自动复制官网,就是做一个 官网的一个克隆,那它不,当然了它不是简单一个克隆的一个一个一个一个一个功能啊,就是其实目前的整,那个叫法呢,就是叫 AI 克隆嘛。但是它的工作原理呢,其实就是说 我们先从他已已有的官网上把数据先拿到我们的数据本,那个我我们我们这边来。然后呢再再通过我们的一些工具去对数据加工,就我们的一些 agent 对数据做一些加工。然后继续加工之后呢,同时我们也去去那个生成一些关键字,去那个外保上,那个丰富这些数据源。拿到这些数据源之后呢,再把那个数据再整理,整理成我们需要的这个,不是我们,整理成大模型比较喜欢的这种结构结构化的一些文章,然后再再那个那个发布 到我们内部的,就是我们克隆出来的这个这个官网上来。对,这是这是第二个工具,就是这,对,不,但,但是我说的工具只是说一个,一些 agent 的一些总集啊,他对,我们不只是一个一个工具一个工具的做,我们是做一部分 agent 然后组装成为一个工,一个工,这所谓的一个工具,其实也就是一个 agent 集合。对。目前呢在做的是是这么两个两个事,然后第三个事呢,其实正在规划做的是那个我们怎么去监控大模型是不是把我们的内容,是否已经呈现出来了这么一件事,对。这个事的思路呢,其实我们是模拟着模拟着这个人,对我们提供的一些关键字,模拟的人,然后对那个大模型进行提问,提问得出来之后之后呢,就是","utterances":[{"additions":{"speaker":"1"},"end_time":880,"start_time":40,"text":"能听到吗?","words":[{"confidence":0,"end_time":280,"start_time":40,"text":"能"},{"confidence":0,"end_time":440,"start_time":280,"text":"听"},{"confidence":0,"end_time":600,"start_time":440,"text":"到"},{"confidence":0,"end_time":880,"start_time":600,"text":"吗"}]},{"additions":{"speaker":"2"},"end_time":4230,"start_time":2670,"text":"哎,你好你好。","words":[{"confidence":0,"end_time":2750,"start_time":2670,"text":"哎"},{"confidence":0,"end_time":3390,"start_time":3110,"text":"你"},{"confidence":0,"end_time":3670,"start_time":3390,"text":"好"},{"confidence":0,"end_time":3830,"start_time":3710,"text":"你"},{"confidence":0,"end_time":4230,"start_time":3830,"text":"好"}]},{"additions":{"speaker":"2"},"end_time":12160,"start_time":6280,"text":"哎,你好。是这个龙总,对吧?对,我是龙杰,啊,对。","words":[{"confidence":0,"end_time":6360,"start_time":6280,"text":"哎"},{"confidence":0,"end_time":6600,"start_time":6440,"text":"你"},{"confidence":0,"end_time":6960,"start_time":6600,"text":"好"},{"confidence":0,"end_time":9640,"start_time":9080,"text":"是"},{"confidence":0,"end_time":9920,"start_time":9640,"text":"这"},{"confidence":0,"end_time":10120,"start_time":9920,"text":"个"},{"confidence":0,"end_time":10320,"start_time":10120,"text":"龙"},{"confidence":0,"end_time":10560,"start_time":10360,"text":"总"},{"confidence":0,"end_time":10640,"start_time":10600,"text":"对"},{"confidence":0,"end_time":10760,"start_time":10640,"text":"吧"},{"confidence":0,"end_time":11120,"start_time":11000,"text":"对"},{"confidence":0,"end_time":11200,"start_time":11120,"text":"我"},{"confidence":0,"end_time":11320,"start_time":11200,"text":"是"},{"confidence":0,"end_time":11400,"start_time":11360,"text":"龙"},{"confidence":0,"end_time":11600,"start_time":11520,"text":"杰"},{"confidence":0,"end_time":11840,"start_time":11680,"text":"啊"},{"confidence":0,"end_time":12160,"start_time":11840,"text":"对"}]},{"additions":{"speaker":"3"},"end_time":19390,"start_time":13350,"text":"哎,董洁你好,我我也在线了,我是吴丽丽。啊,丽丽。叶总好。","words":[{"confidence":0,"end_time":13470,"start_time":13350,"text":"哎"},{"confidence":0,"end_time":13790,"start_time":13750,"text":"董"},{"confidence":0,"end_time":14030,"start_time":13950,"text":"洁"},{"confidence":0,"end_time":14270,"start_time":14110,"text":"你"},{"confidence":0,"end_time":14510,"start_time":14270,"text":"好"},{"confidence":0,"end_time":15030,"start_time":14670,"text":"我"},{"confidence":0,"end_time":15350,"start_time":15110,"text":"我"},{"confidence":0,"end_time":15510,"start_time":15350,"text":"也"},{"confidence":0,"end_time":15750,"start_time":15510,"text":"在"},{"confidence":0,"end_time":15950,"start_time":15750,"text":"线"},{"confidence":0,"end_time":16150,"start_time":15950,"text":"了"},{"confidence":0,"end_time":16310,"start_time":16150,"text":"我"},{"confidence":0,"end_time":16550,"start_time":16310,"text":"是"},{"confidence":0,"end_time":16670,"start_time":16590,"text":"吴"},{"confidence":0,"end_time":16870,"start_time":16830,"text":"丽"},{"confidence":0,"end_time":17030,"start_time":16990,"text":"丽"},{"confidence":0,"end_time":17430,"start_time":17310,"text":"啊"},{"confidence":0,"end_time":17630,"start_time":17590,"text":"丽"},{"confidence":0,"end_time":17750,"start_time":17710,"text":"丽"},{"confidence":0,"end_time":18870,"start_time":18790,"text":"叶"},{"confidence":0,"end_time":19030,"start_time":18950,"text":"总"},{"confidence":0,"end_time":19390,"start_time":19190,"text":"好"}]},{"additions":{"speaker":"2"},"end_time":22200,"start_time":21320,"text":" OK","words":[{"confidence":0,"end_time":-1,"start_time":-1,"text":" "},{"confidence":0,"end_time":22200,"start_time":21320,"text":"OK"}]},{"additions":{"speaker":"2"},"end_time":25160,"start_time":23520,"text":" 那个,磊子。","words":[{"confidence":0,"end_time":-1,"start_time":-1,"text":" "},{"confidence":0,"end_time":23720,"start_time":23520,"text":"那"},{"confidence":0,"end_time":24120,"start_time":23720,"text":"个"},{"confidence":0,"end_time":24920,"start_time":24880,"text":"磊"},{"confidence":0,"end_time":25160,"start_time":25080,"text":"子"}]},{"additions":{"speaker":"2"},"end_time":39120,"start_time":27840,"text":"哎,我在啦。哎哎哎,好,那个就是我们今天主要的这个会议啊,这人都齐了,就主要就是","words":[{"confidence":0,"end_time":27920,"start_time":27840,"text":"哎"},{"confidence":0,"end_time":28200,"start_time":28000,"text":"我"},{"confidence":0,"end_time":28440,"start_time":28200,"text":"在"},{"confidence":0,"end_time":28560,"start_time":28480,"text":"啦"},{"confidence":0,"end_time":29320,"start_time":29240,"text":"哎"},{"confidence":0,"end_time":29600,"start_time":29520,"text":"哎"},{"confidence":0,"end_time":29800,"start_time":29720,"text":"哎"},{"confidence":0,"end_time":30600,"start_time":30240,"text":"好"},{"confidence":0,"end_time":31160,"start_time":30920,"text":"那"},{"confidence":0,"end_time":31480,"start_time":31160,"text":"个"},{"confidence":0,"end_time":32120,"start_time":31800,"text":"就"},{"confidence":0,"end_time":32560,"start_time":32120,"text":"是"},{"confidence":0,"end_time":33280,"start_time":33040,"text":"我"},{"confidence":0,"end_time":33440,"start_time":33280,"text":"们"},{"confidence":0,"end_time":33680,"start_time":33440,"text":"今"},{"confidence":0,"end_time":33920,"start_time":33680,"text":"天"},{"confidence":0,"end_time":34280,"start_time":34000,"text":"主"},{"confidence":0,"end_time":34440,"start_time":34280,"text":"要"},{"confidence":0,"end_time":34680,"start_time":34440,"text":"的"},{"confidence":0,"end_time":34920,"start_time":34680,"text":"这"},{"confidence":0,"end_time":35240,"start_time":34920,"text":"个"},{"confidence":0,"end_time":36360,"start_time":36000,"text":"会"},{"confidence":0,"end_time":36600,"start_time":36360,"text":"议"},{"confidence":0,"end_time":36800,"start_time":36640,"text":"啊"},{"confidence":0,"end_time":37280,"start_time":37160,"text":"这"},{"confidence":0,"end_time":37520,"start_time":37320,"text":"人"},{"confidence":0,"end_time":37720,"start_time":37520,"text":"都"},{"confidence":0,"end_time":37920,"start_time":37720,"text":"齐"},{"confidence":0,"end_time":38080,"start_time":37920,"text":"了"},{"confidence":0,"end_time":38320,"start_time":38200,"text":"就"},{"confidence":0,"end_time":38480,"start_time":38360,"text":"主"},{"confidence":0,"end_time":38600,"start_time":38480,"text":"要"},{"confidence":0,"end_time":38800,"start_time":38600,"text":"就"},{"confidence":0,"end_time":39120,"start_time":38800,"text":"是"}]},{"additions":{"speaker":"2"},"end_time":55980,"start_time":39710,"text":"就针对咱们这个相关的产品和一些技术的一些方向呢,我们做一个基本的交流和这个龙杰龙总。所以呢这个辛苦一下龙总,完了以后呢我们邀请了我们的一个顾问呐,专家顾问啊,这个","words":[{"confidence":0,"end_time":39860,"start_time":39710,"text":"就"},{"confidence":0,"end_time":40020,"start_time":39860,"text":"针"},{"confidence":0,"end_time":40180,"start_time":40020,"text":"对"},{"confidence":0,"end_time":40340,"start_time":40180,"text":"咱"},{"confidence":0,"end_time":40500,"start_time":40340,"text":"们"},{"confidence":0,"end_time":40660,"start_time":40500,"text":"这"},{"confidence":0,"end_time":40900,"start_time":40660,"text":"个"},{"confidence":0,"end_time":41180,"start_time":40900,"text":"相"},{"confidence":0,"end_time":41340,"start_time":41180,"text":"关"},{"confidence":0,"end_time":41540,"start_time":41340,"text":"的"},{"confidence":0,"end_time":41780,"start_time":41540,"text":"产"},{"confidence":0,"end_time":42060,"start_time":41780,"text":"品"},{"confidence":0,"end_time":42940,"start_time":42620,"text":"和"},{"confidence":0,"end_time":43100,"start_time":42940,"text":"一"},{"confidence":0,"end_time":43300,"start_time":43100,"text":"些"},{"confidence":0,"end_time":43540,"start_time":43300,"text":"技"},{"confidence":0,"end_time":43660,"start_time":43540,"text":"术"},{"confidence":0,"end_time":43820,"start_time":43660,"text":"的"},{"confidence":0,"end_time":43940,"start_time":43820,"text":"一"},{"confidence":0,"end_time":44060,"start_time":43940,"text":"些"},{"confidence":0,"end_time":44260,"start_time":44060,"text":"方"},{"confidence":0,"end_time":44380,"start_time":44260,"text":"向"},{"confidence":0,"end_time":44580,"start_time":44420,"text":"呢"},{"confidence":0,"end_time":44700,"start_time":44580,"text":"我"},{"confidence":0,"end_time":44820,"start_time":44700,"text":"们"},{"confidence":0,"end_time":44980,"start_time":44820,"text":"做"},{"confidence":0,"end_time":45140,"start_time":45020,"text":"一"},{"confidence":0,"end_time":45340,"start_time":45140,"text":"个"},{"confidence":0,"end_time":45540,"start_time":4'... 84049 more characters, + requestId: '0be82fcb-42bf-4585-9c10-b5f189a21d14' + }, + data: { + additions: { duration: '312527' }, + text: '能听到吗?哎,你好你好。哎,你好。是这个龙总,对吧?对,我是龙杰,啊,对。哎,董洁你好,我我也在线了,我是吴丽丽。啊,丽丽。叶总好。 OK 那个,磊子。哎,我在啦。哎哎哎,好,那个就是我们今天主要的这个会议啊,这人都齐了,就主要就是 就针对咱们这个相关的产品和一些技术的一些方向呢,我们做一个基本的交流和这个龙杰龙总。所以呢这个辛苦一下龙总,完了以后呢我们邀请了我们的一个顾问呐,专家顾问啊,这个 赵雷总啊,他这个这方面是,对对对,说一起交流一下,大概是这么一个情况。所以那个龙杰龙总,能不能就你现在的一个,咱们现在的产品的开发。以及这个思路,还有这些方面呢,能不能做一个简单的,一个,比如说三五分钟的介绍,咱们从这个边起个头,好不好?可以,好的好的。目前呢,因为现在的市场啊比较比较那个,也比较大嘛。然后我们就现在就是说,以前的 SEO 转化到现在的 GEO 对吧?那么我们通过那个上次钱总展示那篇论文,得到了一个结论,就是说我们需要第一就是很很很很机械的去发文章给的,让大模型去搜,去收录。那么它大模型怎么收录呢?其实我们先把这个原理搞一下,就是 首先我们去去去搜一个内容的时候,我们去看大模型从哪些方面去去去到从哪些方面,那个去去抓它需要的内容,对吧?因为目前来说,大模型它是训练的时候呢,它其实它也是,它的数据其实就终止到了它训练那那个的一个数据数据段。那他需要回答我们问问题的时候呢,他肯定是需要去调用其他的外部接口。比如说像那个 Dubbo,他可能调用的是博查,豆包可能调用他内部的一些接口,包括博查的一些接口。混元呢,他可能调用的是他自己内部的一些私域上面的一些一些链接,对。然后他把这个内容抓到这些内容之后呢,再把这个内容提交到到大模型里面去分析、去总结,然后 给出用户需要的一个答案。对,这是这是大模型抓起的一个一个一个流程。那基于这个流程呢?我们就就就做了一些工具。首先就是这个文章怎么获取,怎么规划,就是怎么把它的内容结构化,让它更好的去把这个内容给呈现出来,这是第一点。第二点呢,其实我们在分析的过程中呢,其实也发现,尤其是豆包和第,那个,尤其是豆包,它对于那个数据的来源,它特别喜欢去抓一些官网上的一些数据。对,然后呢在这个过程中呢,我我们就就做了一个那个自动复制官网的,就,其实也不能叫自动复制官网,就是做一个 官网的一个克隆,那它不,当然了它不是简单一个克隆的一个一个一个一个一个功能啊,就是其实目前的整,那个叫法呢,就是叫 AI 克隆嘛。但是它的工作原理呢,其实就是说 我们先从他已已有的官网上把数据先拿到我们的数据本,那个我我们我们这边来。然后呢再再通过我们的一些工具去对数据加工,就我们的一些 agent 对数据做一些加工。然后继续加工之后呢,同时我们也去去那个生成一些关键字,去那个外保上,那个丰富这些数据源。拿到这些数据源之后呢,再把那个数据再整理,整理成我们需要的这个,不是我们,整理成大模型比较喜欢的这种结构结构化的一些文章,然后再再那个那个发布 到我们内部的,就是我们克隆出来的这个这个官网上来。对,这是这是第二个工具,就是这,对,不,但,但是我说的工具只是说一个,一些 agent 的一些总集啊,他对,我们不只是一个一个工具一个工具的做,我们是做一部分 agent 然后组装成为一个工,一个工,这所谓的一个工具,其实也就是一个 agent 集合。对。目前呢在做的是是这么两个两个事,然后第三个事呢,其实正在规划做的是那个我们怎么去监控大模型是不是把我们的内容,是否已经呈现出来了这么一件事,对。这个事的思路呢,其实我们是模拟着模拟着这个人,对我们提供的一些关键字,模拟的人,然后对那个大模型进行提问,提问得出来之后之后呢,就是', + utterances: [ + [Object], [Object], [Object], + [Object], [Object], [Object], + [Object], [Object], [Object], + [Object], [Object], [Object], + [Object], [Object], [Object], + [Object], [Object], [Object], + [Object], [Object], [Object], + [Object], [Object], [Object], + [Object], [Object], [Object], + [Object] + ], + job_key: '0be82fcb-42bf-4585-9c10-b5f189a21d14' + } +} +[incoming] GET / +[incoming] GET /main.js +[incoming] GET /health +[incoming] GET / +[incoming] GET /main.js +[incoming] GET / +[incoming] GET /main.js +[incoming] POST /api/asr/submit +[submit] 转发至 https://openspeech.bytedance.com/api/v3/auc/bigmodel/submit { + hasAudioData: true, + audioDataLength: 31399640, + audioFormat: 'm4a', + audioCodec: 'aac', + sampleRate: 44100, + bits: 16, + channel: 1, + hasAudioUrl: false, + modelName: 'bigmodel', + uid: 'AudioToText' +} { + request: { + model_name: 'bigmodel', + enable_itn: true, + enable_punc: true, + enable_ddc: true, + enable_speaker_info: true, + enable_channel_split: false, + show_utterances: true, + vad_segment: true, + sensitive_words_filter: '' + } +} +[incoming] GET /health +[submit] 响应 200 { + __upstream: { + status: 200, + ok: true, + headers: { + 'access-control-allow-credentials': 'true', + 'access-control-allow-headers': 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,X-Api-App-Key,X-Api-Access-Key,X-Api-Request-Id,X-Api-Resource-Id,X-Api-Sequence', + 'access-control-allow-methods': 'GET, POST, OPTIONS', + 'access-control-allow-origin': '*', + 'access-control-expose-headers': 'X-Tt-Logid,X-Api-Status-Code,X-Api-Message', + 'api-service-host': 'fdbd:dc03:14:420::19', + connection: 'keep-alive', + 'content-length': '2', + 'content-type': 'application/json; charset=utf-8', + date: 'Mon, 03 Nov 2025 03:40:44 GMT', + eagleid: '74c4862617621411827384890e', + server: 'Tengine', + 'server-timing': 'inner; dur=928, cdn-cache;desc=MISS,edge;dur=0,origin;dur=61576', + 'timing-allow-origin': '*', + via: 'dynamic7.cn7551[61576,0]', + 'x-api-message': 'OK', + 'x-api-request-id': '6f3397ab-782c-44a9-8e29-441a8b799457', + 'x-api-status-code': '20000000', + 'x-tt-logid': '20251103113942C0F6DDBEBEC2F439C55F', + 'x-tt-trace-host': '01be378494562453161574e6794e20212565ecbad37a95dd4ec5e8a9169922f46914225f34a6620321256592ddb2ba1387864305bf4d2b9ddd1c0c4b428e6561d5b7af64f89349588d05f6ac68f701db8ae4284f4d9eda60b212f9c7744ca58cd7', + 'x-tt-trace-id': '00-251103113942C0F6DDBEBEC2F439C55F-792E90875EC3BE37-00', + 'x-tt-trace-tag': 'id=03;cdn-cache=miss;type=dyn' + }, + rawText: '{}', + requestId: '6f3397ab-782c-44a9-8e29-441a8b799457' + }, + result: { job_key: '6f3397ab-782c-44a9-8e29-441a8b799457' }, + data: { job_key: '6f3397ab-782c-44a9-8e29-441a8b799457' } +} +[incoming] POST /api/asr/result +[result] 转发至 https://openspeech.bytedance.com/api/v3/auc/bigmodel/query { + hasAudioData: false, + audioDataLength: 0, + audioFormat: undefined, + audioCodec: undefined, + sampleRate: undefined, + bits: undefined, + channel: undefined, + hasAudioUrl: false, + modelName: undefined, + uid: undefined +} { request: undefined } +[result] 响应 200 { + audio_info: {}, + result: { text: '', job_key: '6f3397ab-782c-44a9-8e29-441a8b799457' }, + __upstream: { + status: 200, + ok: true, + headers: { + 'access-control-allow-credentials': 'true', + 'access-control-allow-headers': 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,X-Api-App-Key,X-Api-Access-Key,X-Api-Request-Id,X-Api-Resource-Id,X-Api-Sequence', + 'access-control-allow-methods': 'GET, POST, OPTIONS', + 'access-control-allow-origin': '*', + 'access-control-expose-headers': 'X-Tt-Logid,X-Api-Status-Code,X-Api-Message', + 'api-service-host': 'fdbd:dc03:14:228::30', + connection: 'keep-alive', + 'content-length': '38', + 'content-type': 'application/json; charset=utf-8', + date: 'Mon, 03 Nov 2025 03:40:44 GMT', + eagleid: '74c4862617621412444103136e', + server: 'Tengine', + 'server-timing': 'inner; dur=21, cdn-cache;desc=MISS,edge;dur=0,origin;dur=50', + 'timing-allow-origin': '*', + via: 'dynamic7.cn7551[50,0]', + 'x-api-message': '[Processing in progress] Handle response: Start Processing', + 'x-api-request-id': '6f3397ab-782c-44a9-8e29-441a8b799457', + 'x-api-status-code': '20000001', + 'x-tt-logid': '20251103114044C0F6DDBEBEC2F439CCA9', + 'x-tt-trace-host': '01be378494562453161574e6794e20212565ecbad37a95dd4ec5e8a9169922f46914225f34a6620321256592ddb2ba1387864305bf4d2b9ddd1c0c4b428e6561d51960c11b36b03794e2ac540229a6e2786533685e873dfffd9b35d19b2845442c', + 'x-tt-trace-id': '00-251103114044C0F6DDBEBEC2F439CCA9-792E90875EC3CD13-00', + 'x-tt-trace-tag': 'id=03;cdn-cache=miss;type=dyn' + }, + rawText: '{"audio_info":{},"result":{"text":""}}', + requestId: '6f3397ab-782c-44a9-8e29-441a8b799457' + }, + data: { text: '', job_key: '6f3397ab-782c-44a9-8e29-441a8b799457' } +} +[incoming] POST /api/asr/result +[result] 转发至 https://openspeech.bytedance.com/api/v3/auc/bigmodel/query { + hasAudioData: false, + audioDataLength: 0, + audioFormat: undefined, + audioCodec: undefined, + sampleRate: undefined, + bits: undefined, + channel: undefined, + hasAudioUrl: false, + modelName: undefined, + uid: undefined +} { request: undefined } +[result] 响应 200 { + audio_info: {}, + result: { text: '', job_key: '6f3397ab-782c-44a9-8e29-441a8b799457' }, + __upstream: { + status: 200, + ok: true, + headers: { + 'access-control-allow-credentials': 'true', + 'access-control-allow-headers': 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,X-Api-App-Key,X-Api-Access-Key,X-Api-Request-Id,X-Api-Resource-Id,X-Api-Sequence', + 'access-control-allow-methods': 'GET, POST, OPTIONS', + 'access-control-allow-origin': '*', + 'access-control-expose-headers': 'X-Tt-Logid,X-Api-Status-Code,X-Api-Message', + 'api-service-host': 'fdbd:dc02:c:226::20', + connection: 'keep-alive', + 'content-length': '38', + 'content-type': 'application/json; charset=utf-8', + date: 'Mon, 03 Nov 2025 03:40:53 GMT', + eagleid: '3da20f0a17621412531866082e', + server: 'Tengine', + 'server-timing': 'inner; dur=20, cdn-cache;desc=MISS,edge;dur=6,origin;dur=53', + 'timing-allow-origin': '*', + via: 'cache78.l2cn3051[53,0], cache6.cn8616[59,0]', + 'x-api-message': '[Processing in progress] Handle response: Start Processing', + 'x-api-request-id': '6f3397ab-782c-44a9-8e29-441a8b799457', + 'x-api-status-code': '20000001', + 'x-tt-logid': '20251103114053317C397EE24B6403B1C8', + 'x-tt-trace-host': '0152ac888c7fae3a5ca6d11f561e32ba24b97b56de6604a366ce0ed0bec0115e5f37cecc0ca7ac8c44e7ad865a666774d6ee71a32d6562f8fb62e30acdc77bc2b6404ab428b0dd1b141b2f670932686b3e65f4ac23a0e1c04c65f729dd4dead616', + 'x-tt-trace-id': '00-251103114053317C397EE24B6403B1C8-2792502A1A228DBF-00', + 'x-tt-trace-tag': 'id=03;cdn-cache=miss;type=dyn' + }, + rawText: '{"audio_info":{},"result":{"text":""}}', + requestId: '6f3397ab-782c-44a9-8e29-441a8b799457' + }, + data: { text: '', job_key: '6f3397ab-782c-44a9-8e29-441a8b799457' } +} +[incoming] POST /api/asr/result +[result] 转发至 https://openspeech.bytedance.com/api/v3/auc/bigmodel/query { + hasAudioData: false, + audioDataLength: 0, + audioFormat: undefined, + audioCodec: undefined, + sampleRate: undefined, + bits: undefined, + channel: undefined, + hasAudioUrl: false, + modelName: undefined, + uid: undefined +} { request: undefined } +[result] 响应 200 { + audio_info: {}, + result: { text: '', job_key: '6f3397ab-782c-44a9-8e29-441a8b799457' }, + __upstream: { + status: 200, + ok: true, + headers: { + 'access-control-allow-credentials': 'true', + 'access-control-allow-headers': 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,X-Api-App-Key,X-Api-Access-Key,X-Api-Request-Id,X-Api-Resource-Id,X-Api-Sequence', + 'access-control-allow-methods': 'GET, POST, OPTIONS', + 'access-control-allow-origin': '*', + 'access-control-expose-headers': 'X-Tt-Logid,X-Api-Status-Code,X-Api-Message', + 'api-service-host': 'fdbd:dc02:29:b4e::38', + connection: 'keep-alive', + 'content-length': '38', + 'content-type': 'application/json; charset=utf-8', + date: 'Mon, 03 Nov 2025 03:41:02 GMT', + eagleid: '3da20f0d17621412624007751e', + server: 'Tengine', + 'server-timing': 'inner; dur=17, cdn-cache;desc=MISS,edge;dur=8,origin;dur=34', + 'timing-allow-origin': '*', + via: 'cache38.l2cn3051[34,0], cache9.cn8616[42,0]', + 'x-api-message': '[Processing in progress] Handle response: Start Processing', + 'x-api-request-id': '6f3397ab-782c-44a9-8e29-441a8b799457', + 'x-api-status-code': '20000001', + 'x-tt-logid': '202511031141020615CAF737555304C027', + 'x-tt-trace-host': '0152ac888c7fae3a5ca6d11f561e32ba24419ff0394736417c26b9680d13cbdd964f871021923116690fbbe8bca62bd3ee8ed795708343919cef7c00c249c66d0230e41012c4132213d437f3038aec6e9fff78e0ad7b8578597f715cba632bdcc1', + 'x-tt-trace-id': '00-2511031141020615CAF737555304C027-792CCD6177C100DF-00', + 'x-tt-trace-tag': 'id=03;cdn-cache=miss;type=dyn' + }, + rawText: '{"audio_info":{},"result":{"text":""}}', + requestId: '6f3397ab-782c-44a9-8e29-441a8b799457' + }, + data: { text: '', job_key: '6f3397ab-782c-44a9-8e29-441a8b799457' } +} +[incoming] POST /api/asr/result +[result] 转发至 https://openspeech.bytedance.com/api/v3/auc/bigmodel/query { + hasAudioData: false, + audioDataLength: 0, + audioFormat: undefined, + audioCodec: undefined, + sampleRate: undefined, + bits: undefined, + channel: undefined, + hasAudioUrl: false, + modelName: undefined, + uid: undefined +} { request: undefined } +[result] 响应 200 { + audio_info: {}, + result: { text: '', job_key: '6f3397ab-782c-44a9-8e29-441a8b799457' }, + __upstream: { + status: 200, + ok: true, + headers: { + 'access-control-allow-credentials': 'true', + 'access-control-allow-headers': 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,X-Api-App-Key,X-Api-Access-Key,X-Api-Request-Id,X-Api-Resource-Id,X-Api-Sequence', + 'access-control-allow-methods': 'GET, POST, OPTIONS', + 'access-control-allow-origin': '*', + 'access-control-expose-headers': 'X-Tt-Logid,X-Api-Status-Code,X-Api-Message', + 'api-service-host': 'fdbd:dc02:28:124::27', + connection: 'keep-alive', + 'content-length': '38', + 'content-type': 'application/json; charset=utf-8', + date: 'Mon, 03 Nov 2025 03:41:10 GMT', + eagleid: '3da20f1117621412706105274e', + server: 'Tengine', + 'server-timing': 'inner; dur=22, cdn-cache;desc=MISS,edge;dur=5,origin;dur=100', + 'timing-allow-origin': '*', + via: 'cache47.l2cn3051[100,0], cache13.cn8616[105,0]', + 'x-api-message': '[Processing in progress] Handle response: Start Processing', + 'x-api-request-id': '6f3397ab-782c-44a9-8e29-441a8b799457', + 'x-api-status-code': '20000001', + 'x-tt-logid': '2025110311411042D1244B6D9F0901F6CE', + 'x-tt-trace-host': '0152ac888c7fae3a5ca6d11f561e32ba24b42d3c53b651b92d66df43e8b6c7e3eefb50d44ccaf7365bf6067564c5e54a8874565cf4b7ee64052216601dd3cd94c528cab0c12bb0640ab57f5f287067f895aeec3a3363a8b9fd05b19ad3a673f0da', + 'x-tt-trace-id': '00-25110311411042D1244B6D9F0901F6CE-5396DCEF36BC445E-00', + 'x-tt-trace-tag': 'id=03;cdn-cache=miss;type=dyn' + }, + rawText: '{"audio_info":{},"result":{"text":""}}', + requestId: '6f3397ab-782c-44a9-8e29-441a8b799457' + }, + data: { text: '', job_key: '6f3397ab-782c-44a9-8e29-441a8b799457' } +} +[incoming] POST /api/asr/result +[result] 转发至 https://openspeech.bytedance.com/api/v3/auc/bigmodel/query { + hasAudioData: false, + audioDataLength: 0, + audioFormat: undefined, + audioCodec: undefined, + sampleRate: undefined, + bits: undefined, + channel: undefined, + hasAudioUrl: false, + modelName: undefined, + uid: undefined +} { request: undefined } +[result] 响应 200 { + audio_info: {}, + result: { text: '', job_key: '6f3397ab-782c-44a9-8e29-441a8b799457' }, + __upstream: { + status: 200, + ok: true, + headers: { + 'access-control-allow-credentials': 'true', + 'access-control-allow-headers': 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,X-Api-App-Key,X-Api-Access-Key,X-Api-Request-Id,X-Api-Resource-Id,X-Api-Sequence', + 'access-control-allow-methods': 'GET, POST, OPTIONS', + 'access-control-allow-origin': '*', + 'access-control-expose-headers': 'X-Tt-Logid,X-Api-Status-Code,X-Api-Message', + 'api-service-host': 'fdbd:dc01:2a:490::12', + connection: 'keep-alive', + 'content-length': '38', + 'content-type': 'application/json; charset=utf-8', + date: 'Mon, 03 Nov 2025 03:41:19 GMT', + eagleid: '3da20f0817621412796062075e', + server: 'Tengine', + 'server-timing': 'inner; dur=12, cdn-cache;desc=MISS,edge;dur=11,origin;dur=46', + 'timing-allow-origin': '*', + via: 'cache57.l2cn3031[46,0], cache4.cn8616[57,0]', + 'x-api-message': '[Processing in progress] Handle response: Start Processing', + 'x-api-request-id': '6f3397ab-782c-44a9-8e29-441a8b799457', + 'x-api-status-code': '20000001', + 'x-tt-logid': '20251103114119BDCE1C2A7A1F651F8A33', + 'x-tt-trace-host': '0152ac888c7fae3a5ca6d11f561e32ba2437a17d59f16aa3824c15133e4ffda88c88f0f5867e20c83f0af56e1ad483426d59b98de540dcc53d9ee2ccf17500e89e65a2c9fe202aaadf6d1530b8ad77f307dcb1e33930c4f5c5844b7d69a9a5b649', + 'x-tt-trace-id': '00-251103114119BDCE1C2A7A1F651F8A33-1D5E7E4634D3D552-00', + 'x-tt-trace-tag': 'id=03;cdn-cache=miss;type=dyn' + }, + rawText: '{"audio_info":{},"result":{"text":""}}', + requestId: '6f3397ab-782c-44a9-8e29-441a8b799457' + }, + data: { text: '', job_key: '6f3397ab-782c-44a9-8e29-441a8b799457' } +} +[incoming] POST /api/asr/result +[result] 转发至 https://openspeech.bytedance.com/api/v3/auc/bigmodel/query { + hasAudioData: false, + audioDataLength: 0, + audioFormat: undefined, + audioCodec: undefined, + sampleRate: undefined, + bits: undefined, + channel: undefined, + hasAudioUrl: false, + modelName: undefined, + uid: undefined +} { request: undefined } +[result] 响应 200 { + audio_info: {}, + result: { text: '', job_key: '6f3397ab-782c-44a9-8e29-441a8b799457' }, + __upstream: { + status: 200, + ok: true, + headers: { + 'access-control-allow-credentials': 'true', + 'access-control-allow-headers': 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,X-Api-App-Key,X-Api-Access-Key,X-Api-Request-Id,X-Api-Resource-Id,X-Api-Sequence', + 'access-control-allow-methods': 'GET, POST, OPTIONS', + 'access-control-allow-origin': '*', + 'access-control-expose-headers': 'X-Tt-Logid,X-Api-Status-Code,X-Api-Message', + 'api-service-host': 'fdbd:dc02:28:16::53', + connection: 'keep-alive', + 'content-length': '38', + 'content-type': 'application/json; charset=utf-8', + date: 'Mon, 03 Nov 2025 03:41:33 GMT', + eagleid: '3da20f1517621412935537819e', + server: 'Tengine', + 'server-timing': 'inner; dur=24, cdn-cache;desc=MISS,edge;dur=15,origin;dur=109', + 'timing-allow-origin': '*', + via: 'cache69.l2cn3051[109,0], cache17.cn8616[124,0]', + 'x-api-message': '[Processing in progress] Handle response: Start Processing', + 'x-api-request-id': '6f3397ab-782c-44a9-8e29-441a8b799457', + 'x-api-status-code': '20000001', + 'x-tt-logid': '20251103114133E1BA19672AE36301B8B2', + 'x-tt-trace-host': '0152ac888c7fae3a5ca6d11f561e32ba2467d69e0f2854c44b3b6731e1ecfcb62f4ab12b4305abb0d18b7dd393139cb4c1c0b755bfa4b06030f075de75381cfdda4ff01bc641d9b6819fa3c941911a92a1f79e6b3b359e3d7e35f30c3f9a286e65', + 'x-tt-trace-id': '00-251103114133E1BA19672AE36301B8B2-4C2A921B525166B8-00', + 'x-tt-trace-tag': 'id=03;cdn-cache=miss;type=dyn' + }, + rawText: '{"audio_info":{},"result":{"text":""}}', + requestId: '6f3397ab-782c-44a9-8e29-441a8b799457' + }, + data: { text: '', job_key: '6f3397ab-782c-44a9-8e29-441a8b799457' } +} +[incoming] POST /api/asr/result +[result] 转发至 https://openspeech.bytedance.com/api/v3/auc/bigmodel/query { + hasAudioData: false, + audioDataLength: 0, + audioFormat: undefined, + audioCodec: undefined, + sampleRate: undefined, + bits: undefined, + channel: undefined, + hasAudioUrl: false, + modelName: undefined, + uid: undefined +} { request: undefined } +[result] 响应 200 { + audio_info: {}, + result: { text: '', job_key: '6f3397ab-782c-44a9-8e29-441a8b799457' }, + __upstream: { + status: 200, + ok: true, + headers: { + 'access-control-allow-credentials': 'true', + 'access-control-allow-headers': 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,X-Api-App-Key,X-Api-Access-Key,X-Api-Request-Id,X-Api-Resource-Id,X-Api-Sequence', + 'access-control-allow-methods': 'GET, POST, OPTIONS', + 'access-control-allow-origin': '*', + 'access-control-expose-headers': 'X-Tt-Logid,X-Api-Status-Code,X-Api-Message', + 'api-service-host': 'fdbd:dc01:2a:490::12', + connection: 'keep-alive', + 'content-length': '38', + 'content-type': 'application/json; charset=utf-8', + date: 'Mon, 03 Nov 2025 03:41:45 GMT', + eagleid: '3da20f1417621413055375942e', + server: 'Tengine', + 'server-timing': 'inner; dur=13, cdn-cache;desc=MISS,edge;dur=2,origin;dur=77', + 'timing-allow-origin': '*', + via: 'cache60.l2cn3031[77,0], cache16.cn8616[79,0]', + 'x-api-message': '[Processing in progress] Handle response: Start Processing', + 'x-api-request-id': '6f3397ab-782c-44a9-8e29-441a8b799457', + 'x-api-status-code': '20000001', + 'x-tt-logid': '20251103114145BF28D052168766F229B0', + 'x-tt-trace-host': '01be378494562453161574e6794e202125d9b97899a3e018abe596f27ca00f76b048ba64188cf2878a305b39aaa745cc1c3af64b461e410e8513a3621495afddca6d03522e8dd1b8dd7eed4ee085fcdff35d5d3ff5297ab0aff0a1fdd8f630aca1', + 'x-tt-trace-id': '00-251103114145BF28D052168766F229B0-100E9D034E3E1F09-00', + 'x-tt-trace-tag': 'id=03;cdn-cache=miss;type=dyn' + }, + rawText: '{"audio_info":{},"result":{"text":""}}', + requestId: '6f3397ab-782c-44a9-8e29-441a8b799457' + }, + data: { text: '', job_key: '6f3397ab-782c-44a9-8e29-441a8b799457' } +} +[incoming] POST /api/asr/result +[result] 转发至 https://openspeech.bytedance.com/api/v3/auc/bigmodel/query { + hasAudioData: false, + audioDataLength: 0, + audioFormat: undefined, + audioCodec: undefined, + sampleRate: undefined, + bits: undefined, + channel: undefined, + hasAudioUrl: false, + modelName: undefined, + uid: undefined +} { request: undefined } +[result] 响应 200 { + audio_info: {}, + result: { text: '', job_key: '6f3397ab-782c-44a9-8e29-441a8b799457' }, + __upstream: { + status: 200, + ok: true, + headers: { + 'access-control-allow-credentials': 'true', + 'access-control-allow-headers': 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,X-Api-App-Key,X-Api-Access-Key,X-Api-Request-Id,X-Api-Resource-Id,X-Api-Sequence', + 'access-control-allow-methods': 'GET, POST, OPTIONS', + 'access-control-allow-origin': '*', + 'access-control-expose-headers': 'X-Tt-Logid,X-Api-Status-Code,X-Api-Message', + 'api-service-host': 'fdbd:dc03:15:362::77', + connection: 'keep-alive', + 'content-length': '38', + 'content-type': 'application/json; charset=utf-8', + date: 'Mon, 03 Nov 2025 03:41:53 GMT', + eagleid: '3da20f0717621413134825918e', + server: 'Tengine', + 'server-timing': 'inner; dur=20, cdn-cache;desc=MISS,edge;dur=2,origin;dur=90', + 'timing-allow-origin': '*', + via: 'cache35.l2cn3031[90,0], cache3.cn8616[92,0]', + 'x-api-message': '[Processing in progress] Handle response: Start Processing', + 'x-api-request-id': '6f3397ab-782c-44a9-8e29-441a8b799457', + 'x-api-status-code': '20000001', + 'x-tt-logid': '20251103114153FFD3B5641AB6D43A2012', + 'x-tt-trace-host': '01be378494562453161574e6794e2021250587e0853d08e5fef68c8a14bc5e320dbc0d19dec350abfa391f6b425c1f3899fc9d50ea3dd423965b68656c8663ea982c12286d9f3e6a15d3131ab301b2de05640697580d7810a74e70cbd578ef3cc9', + 'x-tt-trace-id': '00-251103114153FFD3B5641AB6D43A2012-7FDAC8696B639071-00', + 'x-tt-trace-tag': 'id=03;cdn-cache=miss;type=dyn' + }, + rawText: '{"audio_info":{},"result":{"text":""}}', + requestId: '6f3397ab-782c-44a9-8e29-441a8b799457' + }, + data: { text: '', job_key: '6f3397ab-782c-44a9-8e29-441a8b799457' } +} +[incoming] POST /api/asr/result +[result] 转发至 https://openspeech.bytedance.com/api/v3/auc/bigmodel/query { + hasAudioData: false, + audioDataLength: 0, + audioFormat: undefined, + audioCodec: undefined, + sampleRate: undefined, + bits: undefined, + channel: undefined, + hasAudioUrl: false, + modelName: undefined, + uid: undefined +} { request: undefined } +[result] 响应 200 { + audio_info: {}, + result: { text: '', job_key: '6f3397ab-782c-44a9-8e29-441a8b799457' }, + __upstream: { + status: 200, + ok: true, + headers: { + 'access-control-allow-credentials': 'true', + 'access-control-allow-headers': 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,X-Api-App-Key,X-Api-Access-Key,X-Api-Request-Id,X-Api-Resource-Id,X-Api-Sequence', + 'access-control-allow-methods': 'GET, POST, OPTIONS', + 'access-control-allow-origin': '*', + 'access-control-expose-headers': 'X-Tt-Logid,X-Api-Status-Code,X-Api-Message', + 'api-service-host': 'fdbd:dc03:11:111::159', + connection: 'keep-alive', + 'content-length': '38', + 'content-type': 'application/json; charset=utf-8', + date: 'Mon, 03 Nov 2025 03:42:02 GMT', + eagleid: '74c4872117621413225083059e', + server: 'Tengine', + 'server-timing': 'inner; dur=19, cdn-cache;desc=MISS,edge;dur=0,origin;dur=161', + 'timing-allow-origin': '*', + via: 'dynamic2.cn7535[161,0]', + 'x-api-message': '[Processing in progress] Handle response: Start Processing', + 'x-api-request-id': '6f3397ab-782c-44a9-8e29-441a8b799457', + 'x-api-status-code': '20000001', + 'x-tt-logid': '2025110311420259C8323CDE40BD462338', + 'x-tt-trace-host': '01be378494562453161574e6794e202125a139d68686d1a9386d93cf1efb53ec136b12bd95b4b109880b4ac67ef0b52697c5d5928c654fffdba30371f55592e3a331124dd11a9d04896611a432327e5a24c90215c8dabe01ca6b3dd30cbbd6732c', + 'x-tt-trace-id': '00-25110311420259C8323CDE40BD462338-3644362D65ADCC5F-00', + 'x-tt-trace-tag': 'id=03;cdn-cache=miss;type=dyn' + }, + rawText: '{"audio_info":{},"result":{"text":""}}', + requestId: '6f3397ab-782c-44a9-8e29-441a8b799457' + }, + data: { text: '', job_key: '6f3397ab-782c-44a9-8e29-441a8b799457' } +} +[incoming] POST /api/asr/result +[result] 转发至 https://openspeech.bytedance.com/api/v3/auc/bigmodel/query { + hasAudioData: false, + audioDataLength: 0, + audioFormat: undefined, + audioCodec: undefined, + sampleRate: undefined, + bits: undefined, + channel: undefined, + hasAudioUrl: false, + modelName: undefined, + uid: undefined +} { request: undefined } +[result] 响应 200 { + audio_info: {}, + result: { text: '', job_key: '6f3397ab-782c-44a9-8e29-441a8b799457' }, + __upstream: { + status: 200, + ok: true, + headers: { + 'access-control-allow-credentials': 'true', + 'access-control-allow-headers': 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,X-Api-App-Key,X-Api-Access-Key,X-Api-Request-Id,X-Api-Resource-Id,X-Api-Sequence', + 'access-control-allow-methods': 'GET, POST, OPTIONS', + 'access-control-allow-origin': '*', + 'access-control-expose-headers': 'X-Tt-Logid,X-Api-Status-Code,X-Api-Message', + 'api-service-host': 'fdbd:dc03:14:a30::13', + connection: 'keep-alive', + 'content-length': '38', + 'content-type': 'application/json; charset=utf-8', + date: 'Mon, 03 Nov 2025 03:42:13 GMT', + eagleid: '3da20f0d17621413333747403e', + server: 'Tengine', + 'server-timing': 'inner; dur=21, cdn-cache;desc=MISS,edge;dur=10,origin;dur=96', + 'timing-allow-origin': '*', + via: 'cache40.l2nu20-1[96,0], cache9.cn8616[106,0]', + 'x-api-message': '[Processing in progress] Handle response: Start Processing', + 'x-api-request-id': '6f3397ab-782c-44a9-8e29-441a8b799457', + 'x-api-status-code': '20000001', + 'x-tt-logid': '202511031142138EF5530B2E01953D4806', + 'x-tt-trace-host': '01be378494562453161574e6794e202125b5efa9a5681f28767106edbef791ebf43195cfc722d1a5ebb53a379d54e9ef5f3d63d94eaacca8bab8cf28683064c2073faae185b7729564a52da1e8836a881e9756e8d471e0eaf06f47841fd9d798b8', + 'x-tt-trace-id': '00-2511031142138EF5530B2E01953D4806-1294199519F3472F-00', + 'x-tt-trace-tag': 'id=03;cdn-cache=miss;type=dyn' + }, + rawText: '{"audio_info":{},"result":{"text":""}}', + requestId: '6f3397ab-782c-44a9-8e29-441a8b799457' + }, + data: { text: '', job_key: '6f3397ab-782c-44a9-8e29-441a8b799457' } +} +[incoming] POST /api/asr/result +[result] 转发至 https://openspeech.bytedance.com/api/v3/auc/bigmodel/query { + hasAudioData: false, + audioDataLength: 0, + audioFormat: undefined, + audioCodec: undefined, + sampleRate: undefined, + bits: undefined, + channel: undefined, + hasAudioUrl: false, + modelName: undefined, + uid: undefined +} { request: undefined } +[result] 响应 200 { + audio_info: {}, + result: { text: '', job_key: '6f3397ab-782c-44a9-8e29-441a8b799457' }, + __upstream: { + status: 200, + ok: true, + headers: { + 'access-control-allow-credentials': 'true', + 'access-control-allow-headers': 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,X-Api-App-Key,X-Api-Access-Key,X-Api-Request-Id,X-Api-Resource-Id,X-Api-Sequence', + 'access-control-allow-methods': 'GET, POST, OPTIONS', + 'access-control-allow-origin': '*', + 'access-control-expose-headers': 'X-Tt-Logid,X-Api-Status-Code,X-Api-Message', + 'api-service-host': 'fdbd:dc03:14:f28::37', + connection: 'keep-alive', + 'content-length': '38', + 'content-type': 'application/json; charset=utf-8', + date: 'Mon, 03 Nov 2025 03:42:23 GMT', + eagleid: '3da20f0617621413429481236e', + server: 'Tengine', + 'server-timing': 'inner; dur=25, cdn-cache;desc=MISS,edge;dur=0,origin;dur=114', + 'timing-allow-origin': '*', + via: 'cache2.cn8616[114,0]', + 'x-api-message': '[Processing in progress] Handle response: Start Processing', + 'x-api-request-id': '6f3397ab-782c-44a9-8e29-441a8b799457', + 'x-api-status-code': '20000001', + 'x-tt-logid': '202511031142233825CEF64773DA47719A', + 'x-tt-trace-host': '0133cfb7e6056b87307b552c2d344119764fd1d5ace5ab39cb0d0c09e763b84ea7d183daef3b6e5c1b9c0c440103466051a17818a8ce956b6428948198a817ddb684e29da46452b5c933169b74af48bea8059ca0e74afed0c22563ab32a12c3066', + 'x-tt-trace-id': '00-2511031142233825CEF64773DA47719A-28FD3C7516E0C980-00', + 'x-tt-trace-tag': 'id=03;cdn-cache=miss;type=dyn' + }, + rawText: '{"audio_info":{},"result":{"text":""}}', + requestId: '6f3397ab-782c-44a9-8e29-441a8b799457' + }, + data: { text: '', job_key: '6f3397ab-782c-44a9-8e29-441a8b799457' } +} +[incoming] POST /api/asr/result +[result] 转发至 https://openspeech.bytedance.com/api/v3/auc/bigmodel/query { + hasAudioData: false, + audioDataLength: 0, + audioFormat: undefined, + audioCodec: undefined, + sampleRate: undefined, + bits: undefined, + channel: undefined, + hasAudioUrl: false, + modelName: undefined, + uid: undefined +} { request: undefined } +[result] 响应 200 { + audio_info: {}, + result: { text: '', job_key: '6f3397ab-782c-44a9-8e29-441a8b799457' }, + __upstream: { + status: 200, + ok: true, + headers: { + 'access-control-allow-credentials': 'true', + 'access-control-allow-headers': 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,X-Api-App-Key,X-Api-Access-Key,X-Api-Request-Id,X-Api-Resource-Id,X-Api-Sequence', + 'access-control-allow-methods': 'GET, POST, OPTIONS', + 'access-control-allow-origin': '*', + 'access-control-expose-headers': 'X-Tt-Logid,X-Api-Status-Code,X-Api-Message', + 'api-service-host': 'fdbd:dc02:28:c06::40', + connection: 'keep-alive', + 'content-length': '38', + 'content-type': 'application/json; charset=utf-8', + date: 'Mon, 03 Nov 2025 03:42:32 GMT', + eagleid: '74c4872517621413519558001e', + server: 'Tengine', + 'server-timing': 'inner; dur=20, cdn-cache;desc=MISS,edge;dur=0,origin;dur=74', + 'timing-allow-origin': '*', + via: 'dynamic6.cn7535[74,0]', + 'x-api-message': '[Processing in progress] Handle response: Start Processing', + 'x-api-request-id': '6f3397ab-782c-44a9-8e29-441a8b799457', + 'x-api-status-code': '20000001', + 'x-tt-logid': '20251103114231755480F918B789001DC3', + 'x-tt-trace-host': '01be378494562453161574e6794e202125bb7fd63617eef7b70642f2321b13e45d3d6e2d847509958b37dcbd0951faca2c3822c5c6a7e984c523bbb62ab8da9a907a4499c55ecb33133e7eacd97dbb79ef9d14ad2a1cc8e291c5649ff69b9f103d', + 'x-tt-trace-id': '00-251103114231755480F918B789001DC3-7A2EB72E713E2AC2-00', + 'x-tt-trace-tag': 'id=03;cdn-cache=miss;type=dyn' + }, + rawText: '{"audio_info":{},"result":{"text":""}}', + requestId: '6f3397ab-782c-44a9-8e29-441a8b799457' + }, + data: { text: '', job_key: '6f3397ab-782c-44a9-8e29-441a8b799457' } +} +[incoming] POST /api/asr/result +[result] 转发至 https://openspeech.bytedance.com/api/v3/auc/bigmodel/query { + hasAudioData: false, + audioDataLength: 0, + audioFormat: undefined, + audioCodec: undefined, + sampleRate: undefined, + bits: undefined, + channel: undefined, + hasAudioUrl: false, + modelName: undefined, + uid: undefined +} { request: undefined } +[result] 响应 200 { + audio_info: {}, + result: { text: '', job_key: '6f3397ab-782c-44a9-8e29-441a8b799457' }, + __upstream: { + status: 200, + ok: true, + headers: { + 'access-control-allow-credentials': 'true', + 'access-control-allow-headers': 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,X-Api-App-Key,X-Api-Access-Key,X-Api-Request-Id,X-Api-Resource-Id,X-Api-Sequence', + 'access-control-allow-methods': 'GET, POST, OPTIONS', + 'access-control-allow-origin': '*', + 'access-control-expose-headers': 'X-Tt-Logid,X-Api-Status-Code,X-Api-Message', + 'api-service-host': 'fdbd:dc01:c:818::37', + connection: 'keep-alive', + 'content-length': '38', + 'content-type': 'application/json; charset=utf-8', + date: 'Mon, 03 Nov 2025 03:42:41 GMT', + eagleid: '74c4872417621413609623235e', + server: 'Tengine', + 'server-timing': 'inner; dur=11, cdn-cache;desc=MISS,edge;dur=0,origin;dur=57', + 'timing-allow-origin': '*', + via: 'dynamic5.cn7535[57,0]', + 'x-api-message': '[Processing in progress] Handle response: Start Processing', + 'x-api-request-id': '6f3397ab-782c-44a9-8e29-441a8b799457', + 'x-api-status-code': '20000001', + 'x-tt-logid': '20251103114240E26501AC7E7C87F1B223', + 'x-tt-trace-host': '01ddc7a14c66e6a750addc359fb5f349233536666fc5fbb17319de1658d31e7d2476dc1158e4506c88c592a59962f3c7f2622db0011d9a125c6ca028dca2cde573152c9546e2157a98a4c9ad33660ff7dfb898081fd776cc8593745df3cba57336', + 'x-tt-trace-id': '00-251103114240E26501AC7E7C87F1B223-30E612C15999F172-00', + 'x-tt-trace-tag': 'id=03;cdn-cache=miss;type=dyn' + }, + rawText: '{"audio_info":{},"result":{"text":""}}', + requestId: '6f3397ab-782c-44a9-8e29-441a8b799457' + }, + data: { text: '', job_key: '6f3397ab-782c-44a9-8e29-441a8b799457' } +} +[incoming] POST /api/asr/result +[result] 转发至 https://openspeech.bytedance.com/api/v3/auc/bigmodel/query { + hasAudioData: false, + audioDataLength: 0, + audioFormat: undefined, + audioCodec: undefined, + sampleRate: undefined, + bits: undefined, + channel: undefined, + hasAudioUrl: false, + modelName: undefined, + uid: undefined +} { request: undefined } +[result] 响应 200 { + audio_info: {}, + result: { text: '', job_key: '6f3397ab-782c-44a9-8e29-441a8b799457' }, + __upstream: { + status: 200, + ok: true, + headers: { + 'access-control-allow-credentials': 'true', + 'access-control-allow-headers': 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,X-Api-App-Key,X-Api-Access-Key,X-Api-Request-Id,X-Api-Resource-Id,X-Api-Sequence', + 'access-control-allow-methods': 'GET, POST, OPTIONS', + 'access-control-allow-origin': '*', + 'access-control-expose-headers': 'X-Tt-Logid,X-Api-Status-Code,X-Api-Message', + 'api-service-host': 'fdbd:dc03:11:111::159', + connection: 'keep-alive', + 'content-length': '38', + 'content-type': 'application/json; charset=utf-8', + date: 'Mon, 03 Nov 2025 03:42:49 GMT', + eagleid: '74c4862017621413691404723e', + server: 'Tengine', + 'server-timing': 'inner; dur=18, cdn-cache;desc=MISS,edge;dur=0,origin;dur=101', + 'timing-allow-origin': '*', + via: 'dynamic1.cn7551[101,0]', + 'x-api-message': '[Processing in progress] Handle response: Start Processing', + 'x-api-request-id': '6f3397ab-782c-44a9-8e29-441a8b799457', + 'x-api-status-code': '20000001', + 'x-tt-logid': '202511031142494126CD0D1C6B224B88AD', + 'x-tt-trace-host': '01be378494562453161574e6794e2021259fc50000cd729a9e981098786deee90df3ac0566877e26ff83e38b68ef019070b7d3ff927dcd79f055a89674d9fe0b25fe48f50325a4fb5d450acd391d14b4c1615ce739ce800ed90d396e61cee7a4c2', + 'x-tt-trace-id': '00-2511031142494126CD0D1C6B224B88AD-251716505CC956D3-00', + 'x-tt-trace-tag': 'id=03;cdn-cache=miss;type=dyn' + }, + rawText: '{"audio_info":{},"result":{"text":""}}', + requestId: '6f3397ab-782c-44a9-8e29-441a8b799457' + }, + data: { text: '', job_key: '6f3397ab-782c-44a9-8e29-441a8b799457' } +} +[incoming] POST /api/asr/result +[result] 转发至 https://openspeech.bytedance.com/api/v3/auc/bigmodel/query { + hasAudioData: false, + audioDataLength: 0, + audioFormat: undefined, + audioCodec: undefined, + sampleRate: undefined, + bits: undefined, + channel: undefined, + hasAudioUrl: false, + modelName: undefined, + uid: undefined +} { request: undefined } +[result] 响应 200 { + audio_info: {}, + result: { text: '', job_key: '6f3397ab-782c-44a9-8e29-441a8b799457' }, + __upstream: { + status: 200, + ok: true, + headers: { + 'access-control-allow-credentials': 'true', + 'access-control-allow-headers': 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,X-Api-App-Key,X-Api-Access-Key,X-Api-Request-Id,X-Api-Resource-Id,X-Api-Sequence', + 'access-control-allow-methods': 'GET, POST, OPTIONS', + 'access-control-allow-origin': '*', + 'access-control-expose-headers': 'X-Tt-Logid,X-Api-Status-Code,X-Api-Message', + 'api-service-host': 'fdbd:dc02:1a:d0c::47', + connection: 'keep-alive', + 'content-length': '38', + 'content-type': 'application/json; charset=utf-8', + date: 'Mon, 03 Nov 2025 03:42:58 GMT', + eagleid: '74c4872117621413781652755e', + server: 'Tengine', + 'server-timing': 'inner; dur=25, cdn-cache;desc=MISS,edge;dur=0,origin;dur=82', + 'timing-allow-origin': '*', + via: 'dynamic2.cn7535[82,0]', + 'x-api-message': '[Processing in progress] Handle response: Start Processing', + 'x-api-request-id': '6f3397ab-782c-44a9-8e29-441a8b799457', + 'x-api-status-code': '20000001', + 'x-tt-logid': '20251103114258BC40AA34432CE41945EC', + 'x-tt-trace-host': '01be378494562453161574e6794e2021251cce8afd154726ab8ccb8480424ea11cf0de0701a6ad7ba1f5cda9c1bc59e2dbc18ca7b633ffcf0afbdeee221b5cf559a03e2197185541d4473ff070190a43d047817eb2d5bff7e126cf304a783e40d4', + 'x-tt-trace-id': '00-251103114258BC40AA34432CE41945EC-1B620B5549A29A59-00', + 'x-tt-trace-tag': 'id=03;cdn-cache=miss;type=dyn' + }, + rawText: '{"audio_info":{},"result":{"text":""}}', + requestId: '6f3397ab-782c-44a9-8e29-441a8b799457' + }, + data: { text: '', job_key: '6f3397ab-782c-44a9-8e29-441a8b799457' } +} +[incoming] POST /api/asr/result +[result] 转发至 https://openspeech.bytedance.com/api/v3/auc/bigmodel/query { + hasAudioData: false, + audioDataLength: 0, + audioFormat: undefined, + audioCodec: undefined, + sampleRate: undefined, + bits: undefined, + channel: undefined, + hasAudioUrl: false, + modelName: undefined, + uid: undefined +} { request: undefined } +[result] 响应 200 { + audio_info: {}, + result: { text: '', job_key: '6f3397ab-782c-44a9-8e29-441a8b799457' }, + __upstream: { + status: 200, + ok: true, + headers: { + 'access-control-allow-credentials': 'true', + 'access-control-allow-headers': 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,X-Api-App-Key,X-Api-Access-Key,X-Api-Request-Id,X-Api-Resource-Id,X-Api-Sequence', + 'access-control-allow-methods': 'GET, POST, OPTIONS', + 'access-control-allow-origin': '*', + 'access-control-expose-headers': 'X-Tt-Logid,X-Api-Status-Code,X-Api-Message', + 'api-service-host': 'fdbd:dc02:1a:d0c::47', + connection: 'keep-alive', + 'content-length': '38', + 'content-type': 'application/json; charset=utf-8', + date: 'Mon, 03 Nov 2025 03:43:06 GMT', + eagleid: '74c4872717621413867143473e', + server: 'Tengine', + 'server-timing': 'inner; dur=16, cdn-cache;desc=MISS,edge;dur=0,origin;dur=82', + 'timing-allow-origin': '*', + via: 'dynamic8.cn7535[82,0]', + 'x-api-message': '[Processing in progress] Handle response: Start Processing', + 'x-api-request-id': '6f3397ab-782c-44a9-8e29-441a8b799457', + 'x-api-status-code': '20000001', + 'x-tt-logid': '20251103114306B57D2FE6694C4D3C1E4D', + 'x-tt-trace-host': '01be378494562453161574e6794e2021252ac70ef6f860cfe67a7655c610ebc9375d7b238b8afc6092c5fd9f0f12c459e75324d49567c55b4bbd4e5a8930c9cdaf177f21fd3c6730ba154f52865ff7755f1bf2666264cc9504d265ee86cbfdcf35', + 'x-tt-trace-id': '00-251103114306B57D2FE6694C4D3C1E4D-7B8DE6B04F644626-00', + 'x-tt-trace-tag': 'id=03;cdn-cache=miss;type=dyn' + }, + rawText: '{"audio_info":{},"result":{"text":""}}', + requestId: '6f3397ab-782c-44a9-8e29-441a8b799457' + }, + data: { text: '', job_key: '6f3397ab-782c-44a9-8e29-441a8b799457' } +} +[incoming] POST /api/asr/result +[result] 转发至 https://openspeech.bytedance.com/api/v3/auc/bigmodel/query { + hasAudioData: false, + audioDataLength: 0, + audioFormat: undefined, + audioCodec: undefined, + sampleRate: undefined, + bits: undefined, + channel: undefined, + hasAudioUrl: false, + modelName: undefined, + uid: undefined +} { request: undefined } +[result] 响应 200 { + audio_info: {}, + result: { text: '', job_key: '6f3397ab-782c-44a9-8e29-441a8b799457' }, + __upstream: { + status: 200, + ok: true, + headers: { + 'access-control-allow-credentials': 'true', + 'access-control-allow-headers': 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,X-Api-App-Key,X-Api-Access-Key,X-Api-Request-Id,X-Api-Resource-Id,X-Api-Sequence', + 'access-control-allow-methods': 'GET, POST, OPTIONS', + 'access-control-allow-origin': '*', + 'access-control-expose-headers': 'X-Tt-Logid,X-Api-Status-Code,X-Api-Message', + 'api-service-host': 'fdbd:dc02:28:13e::31', + connection: 'keep-alive', + 'content-length': '38', + 'content-type': 'application/json; charset=utf-8', + date: 'Mon, 03 Nov 2025 03:43:15 GMT', + eagleid: '1bdd61a717621413958687868e', + server: 'Tengine', + 'server-timing': 'inner; dur=21, cdn-cache;desc=MISS,edge;dur=10,origin;dur=55', + 'timing-allow-origin': '*', + via: 'cache79.l2cn3051[55,0], cache19.cn7150[65,0]', + 'x-api-message': '[Processing in progress] Handle response: Start Processing', + 'x-api-request-id': '6f3397ab-782c-44a9-8e29-441a8b799457', + 'x-api-status-code': '20000001', + 'x-tt-logid': '20251103114315CCB2BD9B5E2DB1037048', + 'x-tt-trace-host': '01be378494562453161574e6794e202125104ae79157bac0e45ccf92e9b55a87fabf5f6bf9fa7d1c66999c040c8e7f4eb7ed0ac33ef399132bc5fcfb8c5dc1c59304da754defd541eb2d4d0e289d54f41fdd25d3cb7dc71fa7eada46eef25a8fb2', + 'x-tt-trace-id': '00-251103114315CCB2BD9B5E2DB1037048-251716505C445B6D-00', + 'x-tt-trace-tag': 'id=03;cdn-cache=miss;type=dyn' + }, + rawText: '{"audio_info":{},"result":{"text":""}}', + requestId: '6f3397ab-782c-44a9-8e29-441a8b799457' + }, + data: { text: '', job_key: '6f3397ab-782c-44a9-8e29-441a8b799457' } +} +[incoming] POST /api/asr/result +[result] 转发至 https://openspeech.bytedance.com/api/v3/auc/bigmodel/query { + hasAudioData: false, + audioDataLength: 0, + audioFormat: undefined, + audioCodec: undefined, + sampleRate: undefined, + bits: undefined, + channel: undefined, + hasAudioUrl: false, + modelName: undefined, + uid: undefined +} { request: undefined } +[result] 响应 200 { + audio_info: {}, + result: { text: '', job_key: '6f3397ab-782c-44a9-8e29-441a8b799457' }, + __upstream: { + status: 200, + ok: true, + headers: { + 'access-control-allow-credentials': 'true', + 'access-control-allow-headers': 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,X-Api-App-Key,X-Api-Access-Key,X-Api-Request-Id,X-Api-Resource-Id,X-Api-Sequence', + 'access-control-allow-methods': 'GET, POST, OPTIONS', + 'access-control-allow-origin': '*', + 'access-control-expose-headers': 'X-Tt-Logid,X-Api-Status-Code,X-Api-Message', + 'api-service-host': 'fdbd:dc03:14:420::19', + connection: 'keep-alive', + 'content-length': '38', + 'content-type': 'application/json; charset=utf-8', + date: 'Mon, 03 Nov 2025 03:43:25 GMT', + eagleid: '74c4872117621414052887632e', + server: 'Tengine', + 'server-timing': 'inner; dur=19, cdn-cache;desc=MISS,edge;dur=0,origin;dur=102', + 'timing-allow-origin': '*', + via: 'dynamic2.cn7535[102,0]', + 'x-api-message': '[Processing in progress] Handle response: Start Processing', + 'x-api-request-id': '6f3397ab-782c-44a9-8e29-441a8b799457', + 'x-api-status-code': '20000001', + 'x-tt-logid': '20251103114325D9A306B61D875B391432', + 'x-tt-trace-host': '01ddc7a14c66e6a750addc359fb5f349231c2c52d4ac99131166ef5628c0d18dad0cb92758e095695684de568728a6c55cc69a965d7973a98e6e9796286278774eb9b0325831124f0158079313d8b59c6b95b1fbeadaeeba43bb46c2e5b9ec6877', + 'x-tt-trace-id': '00-251103114325D9A306B61D875B391432-25248C604342CCF2-00', + 'x-tt-trace-tag': 'id=03;cdn-cache=miss;type=dyn' + }, + rawText: '{"audio_info":{},"result":{"text":""}}', + requestId: '6f3397ab-782c-44a9-8e29-441a8b799457' + }, + data: { text: '', job_key: '6f3397ab-782c-44a9-8e29-441a8b799457' } +} +[incoming] POST /api/asr/result +[result] 转发至 https://openspeech.bytedance.com/api/v3/auc/bigmodel/query { + hasAudioData: false, + audioDataLength: 0, + audioFormat: undefined, + audioCodec: undefined, + sampleRate: undefined, + bits: undefined, + channel: undefined, + hasAudioUrl: false, + modelName: undefined, + uid: undefined +} { request: undefined } +[result] 响应 200 { + audio_info: {}, + result: { text: '', job_key: '6f3397ab-782c-44a9-8e29-441a8b799457' }, + __upstream: { + status: 200, + ok: true, + headers: { + 'access-control-allow-credentials': 'true', + 'access-control-allow-headers': 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,X-Api-App-Key,X-Api-Access-Key,X-Api-Request-Id,X-Api-Resource-Id,X-Api-Sequence', + 'access-control-allow-methods': 'GET, POST, OPTIONS', + 'access-control-allow-origin': '*', + 'access-control-expose-headers': 'X-Tt-Logid,X-Api-Status-Code,X-Api-Message', + 'api-service-host': 'fdbd:dc03:f:f4a::18', + connection: 'keep-alive', + 'content-length': '38', + 'content-type': 'application/json; charset=utf-8', + date: 'Mon, 03 Nov 2025 03:43:34 GMT', + eagleid: '74c4872217621414145607103e', + server: 'Tengine', + 'server-timing': 'inner; dur=19, cdn-cache;desc=MISS,edge;dur=0,origin;dur=116', + 'timing-allow-origin': '*', + via: 'dynamic3.cn7535[116,0]', + 'x-api-message': '[Processing in progress] Handle response: Start Processing', + 'x-api-request-id': '6f3397ab-782c-44a9-8e29-441a8b799457', + 'x-api-status-code': '20000001', + 'x-tt-logid': '20251103114334A034062F7873B63A0C21', + 'x-tt-trace-host': '01ddc7a14c66e6a750addc359fb5f349239678d0df8264b3e586564b531e9f18af1da21ab9de5859ed43b56f76c698209f4eee1fa0c12a609adec6a90674d60215eec992f72bd0f94288bc55e026cf665390eef3f590faae31a75c5d99e0bdf6de', + 'x-tt-trace-id': '00-251103114334A034062F7873B63A0C21-276DB7CD7E31F6CB-00', + 'x-tt-trace-tag': 'id=03;cdn-cache=miss;type=dyn' + }, + rawText: '{"audio_info":{},"result":{"text":""}}', + requestId: '6f3397ab-782c-44a9-8e29-441a8b799457' + }, + data: { text: '', job_key: '6f3397ab-782c-44a9-8e29-441a8b799457' } +} +[incoming] POST /api/asr/result +[result] 转发至 https://openspeech.bytedance.com/api/v3/auc/bigmodel/query { + hasAudioData: false, + audioDataLength: 0, + audioFormat: undefined, + audioCodec: undefined, + sampleRate: undefined, + bits: undefined, + channel: undefined, + hasAudioUrl: false, + modelName: undefined, + uid: undefined +} { request: undefined } +[result] 响应 200 { + audio_info: {}, + result: { text: '', job_key: '6f3397ab-782c-44a9-8e29-441a8b799457' }, + __upstream: { + status: 200, + ok: true, + headers: { + 'access-control-allow-credentials': 'true', + 'access-control-allow-headers': 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,X-Api-App-Key,X-Api-Access-Key,X-Api-Request-Id,X-Api-Resource-Id,X-Api-Sequence', + 'access-control-allow-methods': 'GET, POST, OPTIONS', + 'access-control-allow-origin': '*', + 'access-control-expose-headers': 'X-Tt-Logid,X-Api-Status-Code,X-Api-Message', + 'api-service-host': 'fdbd:dc02:28:802::30', + connection: 'keep-alive', + 'content-length': '38', + 'content-type': 'application/json; charset=utf-8', + date: 'Mon, 03 Nov 2025 03:43:43 GMT', + eagleid: '74c4872717621414236121668e', + server: 'Tengine', + 'server-timing': 'inner; dur=22, cdn-cache;desc=MISS,edge;dur=0,origin;dur=85', + 'timing-allow-origin': '*', + via: 'dynamic8.cn7535[85,0]', + 'x-api-message': '[Processing in progress] Handle response: Start Processing', + 'x-api-request-id': '6f3397ab-782c-44a9-8e29-441a8b799457', + 'x-api-status-code': '20000001', + 'x-tt-logid': '20251103114343AE79435031E577EF2A3A', + 'x-tt-trace-host': '01ddc7a14c66e6a750addc359fb5f3492362b8774d7a17de116450cf0daa0f5458d357eb1c52ab4cf9e7671d830215a4f3d70a29954cf0c36570a6b8fb8bd130da3cfe3071a1cacf5642f88080c69aa74a7d856ccb80bed656738a72170b48a2cc', + 'x-tt-trace-id': '00-251103114343AE79435031E577EF2A3A-100E9D034E3955EE-00', + 'x-tt-trace-tag': 'id=03;cdn-cache=miss;type=dyn' + }, + rawText: '{"audio_info":{},"result":{"text":""}}', + requestId: '6f3397ab-782c-44a9-8e29-441a8b799457' + }, + data: { text: '', job_key: '6f3397ab-782c-44a9-8e29-441a8b799457' } +} +[incoming] POST /api/asr/result +[result] 转发至 https://openspeech.bytedance.com/api/v3/auc/bigmodel/query { + hasAudioData: false, + audioDataLength: 0, + audioFormat: undefined, + audioCodec: undefined, + sampleRate: undefined, + bits: undefined, + channel: undefined, + hasAudioUrl: false, + modelName: undefined, + uid: undefined +} { request: undefined } +[result] 响应 200 { + audio_info: {}, + result: { text: '', job_key: '6f3397ab-782c-44a9-8e29-441a8b799457' }, + __upstream: { + status: 200, + ok: true, + headers: { + 'access-control-allow-credentials': 'true', + 'access-control-allow-headers': 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,X-Api-App-Key,X-Api-Access-Key,X-Api-Request-Id,X-Api-Resource-Id,X-Api-Sequence', + 'access-control-allow-methods': 'GET, POST, OPTIONS', + 'access-control-allow-origin': '*', + 'access-control-expose-headers': 'X-Tt-Logid,X-Api-Status-Code,X-Api-Message', + 'api-service-host': 'fdbd:dc03:11:111::159', + connection: 'keep-alive', + 'content-length': '38', + 'content-type': 'application/json; charset=utf-8', + date: 'Mon, 03 Nov 2025 03:43:53 GMT', + eagleid: '74c4872117621414329125730e', + server: 'Tengine', + 'server-timing': 'inner; dur=25, cdn-cache;desc=MISS,edge;dur=0,origin;dur=111', + 'timing-allow-origin': '*', + via: 'dynamic2.cn7535[111,0]', + 'x-api-message': '[Processing in progress] Handle response: Start Processing', + 'x-api-request-id': '6f3397ab-782c-44a9-8e29-441a8b799457', + 'x-api-status-code': '20000001', + 'x-tt-logid': '2025110311435211829210888DCD38907F', + 'x-tt-trace-host': '01ddc7a14c66e6a750addc359fb5f349231c2c52d4ac99131166ef5628c0d18dad0cb92758e095695684de568728a6c55c31e6d852959e33d1ab01160832cf67e79ccc7a4a7882d1947021944651c7fd51d178a647935936dbe8b90910015ca75e', + 'x-tt-trace-id': '00-25110311435211829210888DCD38907F-550D2B6C7B39C827-00', + 'x-tt-trace-tag': 'id=03;cdn-cache=miss;type=dyn' + }, + rawText: '{"audio_info":{},"result":{"text":""}}', + requestId: '6f3397ab-782c-44a9-8e29-441a8b799457' + }, + data: { text: '', job_key: '6f3397ab-782c-44a9-8e29-441a8b799457' } +} +[incoming] POST /api/asr/result +[result] 转发至 https://openspeech.bytedance.com/api/v3/auc/bigmodel/query { + hasAudioData: false, + audioDataLength: 0, + audioFormat: undefined, + audioCodec: undefined, + sampleRate: undefined, + bits: undefined, + channel: undefined, + hasAudioUrl: false, + modelName: undefined, + uid: undefined +} { request: undefined } +[result] 响应 200 { + audio_info: {}, + result: { text: '', job_key: '6f3397ab-782c-44a9-8e29-441a8b799457' }, + __upstream: { + status: 200, + ok: true, + headers: { + 'access-control-allow-credentials': 'true', + 'access-control-allow-headers': 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,X-Api-App-Key,X-Api-Access-Key,X-Api-Request-Id,X-Api-Resource-Id,X-Api-Sequence', + 'access-control-allow-methods': 'GET, POST, OPTIONS', + 'access-control-allow-origin': '*', + 'access-control-expose-headers': 'X-Tt-Logid,X-Api-Status-Code,X-Api-Message', + 'api-service-host': 'fdbd:dc02:29:b4e::38', + connection: 'keep-alive', + 'content-length': '38', + 'content-type': 'application/json; charset=utf-8', + date: 'Mon, 03 Nov 2025 03:44:02 GMT', + eagleid: '74c4872417621414423918117e', + server: 'Tengine', + 'server-timing': 'inner; dur=21, cdn-cache;desc=MISS,edge;dur=0,origin;dur=74', + 'timing-allow-origin': '*', + via: 'dynamic5.cn7535[74,0]', + 'x-api-message': '[Processing in progress] Handle response: Start Processing', + 'x-api-request-id': '6f3397ab-782c-44a9-8e29-441a8b799457', + 'x-api-status-code': '20000001', + 'x-tt-logid': '20251103114402CDDCCE28780FF100090F', + 'x-tt-trace-host': '01be378494562453161574e6794e2021250a6005aca56c74672d7d7378006fbe59c24a63af8576a62827f219d155f846b844534fc419cd0b3739fbf1fb4aaf3a9246b3311dc59923b444334d6091d3f5acd75d01ae9a8b8b14816e33d1bb4f4603', + 'x-tt-trace-id': '00-251103114402CDDCCE28780FF100090F-12941995197A75E4-00', + 'x-tt-trace-tag': 'id=03;cdn-cache=miss;type=dyn' + }, + rawText: '{"audio_info":{},"result":{"text":""}}', + requestId: '6f3397ab-782c-44a9-8e29-441a8b799457' + }, + data: { text: '', job_key: '6f3397ab-782c-44a9-8e29-441a8b799457' } +} +[incoming] POST /api/asr/result +[result] 转发至 https://openspeech.bytedance.com/api/v3/auc/bigmodel/query { + hasAudioData: false, + audioDataLength: 0, + audioFormat: undefined, + audioCodec: undefined, + sampleRate: undefined, + bits: undefined, + channel: undefined, + hasAudioUrl: false, + modelName: undefined, + uid: undefined +} { request: undefined } +[result] 响应 200 { + audio_info: {}, + result: { text: '', job_key: '6f3397ab-782c-44a9-8e29-441a8b799457' }, + __upstream: { + status: 200, + ok: true, + headers: { + 'access-control-allow-credentials': 'true', + 'access-control-allow-headers': 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,X-Api-App-Key,X-Api-Access-Key,X-Api-Request-Id,X-Api-Resource-Id,X-Api-Sequence', + 'access-control-allow-methods': 'GET, POST, OPTIONS', + 'access-control-allow-origin': '*', + 'access-control-expose-headers': 'X-Tt-Logid,X-Api-Status-Code,X-Api-Message', + 'api-service-host': 'fdbd:dc02:29:102::39', + connection: 'keep-alive', + 'content-length': '38', + 'content-type': 'application/json; charset=utf-8', + date: 'Mon, 03 Nov 2025 03:44:12 GMT', + eagleid: '74c4862517621414521811503e', + server: 'Tengine', + 'server-timing': 'inner; dur=23, cdn-cache;desc=MISS,edge;dur=0,origin;dur=70', + 'timing-allow-origin': '*', + via: 'dynamic6.cn7551[70,0]', + 'x-api-message': '[Processing in progress] Handle response: Start Processing', + 'x-api-request-id': '6f3397ab-782c-44a9-8e29-441a8b799457', + 'x-api-status-code': '20000001', + 'x-tt-logid': '20251103114412DD287441AFC828007398', + 'x-tt-trace-host': '01be378494562453161574e6794e202125dada1e4aa120eae558137acc87902dd87d0feb2456e40f98fac73eb0ae9d912e2fabda26c16c2f72fd2457c8a4ed86f8598d3d3ec6055db7334dad9293fb3dc7d3b1fea0e001305e004c532e870b857e', + 'x-tt-trace-id': '00-251103114412DD287441AFC828007398-1092EBAF63E7886E-00', + 'x-tt-trace-tag': 'id=03;cdn-cache=miss;type=dyn' + }, + rawText: '{"audio_info":{},"result":{"text":""}}', + requestId: '6f3397ab-782c-44a9-8e29-441a8b799457' + }, + data: { text: '', job_key: '6f3397ab-782c-44a9-8e29-441a8b799457' } +} +[incoming] POST /api/asr/result +[result] 转发至 https://openspeech.bytedance.com/api/v3/auc/bigmodel/query { + hasAudioData: false, + audioDataLength: 0, + audioFormat: undefined, + audioCodec: undefined, + sampleRate: undefined, + bits: undefined, + channel: undefined, + hasAudioUrl: false, + modelName: undefined, + uid: undefined +} { request: undefined } +[result] 响应 200 { + audio_info: {}, + result: { text: '', job_key: '6f3397ab-782c-44a9-8e29-441a8b799457' }, + __upstream: { + status: 200, + ok: true, + headers: { + 'access-control-allow-credentials': 'true', + 'access-control-allow-headers': 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,X-Api-App-Key,X-Api-Access-Key,X-Api-Request-Id,X-Api-Resource-Id,X-Api-Sequence', + 'access-control-allow-methods': 'GET, POST, OPTIONS', + 'access-control-allow-origin': '*', + 'access-control-expose-headers': 'X-Tt-Logid,X-Api-Status-Code,X-Api-Message', + 'api-service-host': 'fdbd:dc01:2a:152::17', + connection: 'keep-alive', + 'content-length': '38', + 'content-type': 'application/json; charset=utf-8', + date: 'Mon, 03 Nov 2025 03:44:22 GMT', + eagleid: '74c4862517621414621273149e', + server: 'Tengine', + 'server-timing': 'inner; dur=11, cdn-cache;desc=MISS,edge;dur=0,origin;dur=80', + 'timing-allow-origin': '*', + via: 'dynamic6.cn7551[80,0]', + 'x-api-message': '[Processing in progress] Handle response: Start Processing', + 'x-api-request-id': '6f3397ab-782c-44a9-8e29-441a8b799457', + 'x-api-status-code': '20000001', + 'x-tt-logid': '20251103114422D2F4623EF41249F1D88D', + 'x-tt-trace-host': '01be378494562453161574e6794e20212572957b296997ea12dd4618080d5051ff89934057425bb82da21623e5521757838767686a2e128fc07f03b6d507d32d7c3a1ba156af8fa9fa4b7b9b9e1136654edd27636db069445faf10b56406ea1afc', + 'x-tt-trace-id': '00-251103114422D2F4623EF41249F1D88D-632CC5E5291695B2-00', + 'x-tt-trace-tag': 'id=03;cdn-cache=miss;type=dyn' + }, + rawText: '{"audio_info":{},"result":{"text":""}}', + requestId: '6f3397ab-782c-44a9-8e29-441a8b799457' + }, + data: { text: '', job_key: '6f3397ab-782c-44a9-8e29-441a8b799457' } +} +[incoming] POST /api/asr/result +[result] 转发至 https://openspeech.bytedance.com/api/v3/auc/bigmodel/query { + hasAudioData: false, + audioDataLength: 0, + audioFormat: undefined, + audioCodec: undefined, + sampleRate: undefined, + bits: undefined, + channel: undefined, + hasAudioUrl: false, + modelName: undefined, + uid: undefined +} { request: undefined } +[result] 响应 200 { + audio_info: {}, + result: { text: '', job_key: '6f3397ab-782c-44a9-8e29-441a8b799457' }, + __upstream: { + status: 200, + ok: true, + headers: { + 'access-control-allow-credentials': 'true', + 'access-control-allow-headers': 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,X-Api-App-Key,X-Api-Access-Key,X-Api-Request-Id,X-Api-Resource-Id,X-Api-Sequence', + 'access-control-allow-methods': 'GET, POST, OPTIONS', + 'access-control-allow-origin': '*', + 'access-control-expose-headers': 'X-Tt-Logid,X-Api-Status-Code,X-Api-Message', + 'api-service-host': 'fdbd:dc03:f:f4a::18', + connection: 'keep-alive', + 'content-length': '38', + 'content-type': 'application/json; charset=utf-8', + date: 'Mon, 03 Nov 2025 03:44:31 GMT', + eagleid: '74c4862017621414716342441e', + server: 'Tengine', + 'server-timing': 'inner; dur=16, cdn-cache;desc=MISS,edge;dur=0,origin;dur=95', + 'timing-allow-origin': '*', + via: 'dynamic1.cn7551[95,0]', + 'x-api-message': '[Processing in progress] Handle response: Start Processing', + 'x-api-request-id': '6f3397ab-782c-44a9-8e29-441a8b799457', + 'x-api-status-code': '20000001', + 'x-tt-logid': '202511031144317515F56332AE9B37E82C', + 'x-tt-trace-host': '01be378494562453161574e6794e2021259fc50000cd729a9e981098786deee90df3ac0566877e26ff83e38b68ef019070d36194bf6de7f90b6b6a2153904858cd4a72060446812b30579efb76021fa201e7aa7252af6d5f6ca9a762d977ebf8ca', + 'x-tt-trace-id': '00-2511031144317515F56332AE9B37E82C-467FA65B54033E4F-00', + 'x-tt-trace-tag': 'id=03;cdn-cache=miss;type=dyn' + }, + rawText: '{"audio_info":{},"result":{"text":""}}', + requestId: '6f3397ab-782c-44a9-8e29-441a8b799457' + }, + data: { text: '', job_key: '6f3397ab-782c-44a9-8e29-441a8b799457' } +} +[incoming] POST /api/asr/result +[result] 转发至 https://openspeech.bytedance.com/api/v3/auc/bigmodel/query { + hasAudioData: false, + audioDataLength: 0, + audioFormat: undefined, + audioCodec: undefined, + sampleRate: undefined, + bits: undefined, + channel: undefined, + hasAudioUrl: false, + modelName: undefined, + uid: undefined +} { request: undefined } +[result] 响应 200 { + audio_info: { duration: 2746814 }, + result: { + additions: { duration: '2746814' }, + text: '能听到吗?哎,你好你好。哎,你好。是这个龙总,对吧?对,我是龙杰,啊,对。哎,董洁你好,我我也在线了,我是吴丽丽。叶总好。 OK 哎,那个磊子。哎,我在啦。哎哎哎,好,那个就是我们今天主要的这个会议啊,这人都齐了,就主要就是,就针对 对咱们这个相关的产品和一些技术的一些方向呢,我们做一个基本的交流和这个龙杰龙总。所以呢,这个辛苦一下龙总,完了以后呢,我们邀请了我们的一个 顾问呐,嗯,专家顾问啊,这个赵雷总啊,他这方面是,对对对,说一起交流一下,大概是这么一个情况。所以那个龙杰龙总能不能就你现在的一个 咱们现在的产品的开发,以及这个思路,还有这一些方面呢,能不能做一个简单的,一个,比如说三五分钟的介绍?咱们从这个边起个头,好不好?啊,可以,好的好的。目前呢,因为现在的市场啊比较比较那个,也比较大嘛。然后我们就现在就是说,以前的 SEO 转化到现在的 GEO 对吧?那么我们通过那个上次钱总展示那篇论文。得到了一个结论,就是说我们需要第一就是很很很很机械的去发文章给的,让大模型去搜,去收录。那么它大模型怎么收录呢?其实我们先把这个原理搞一下,就是 首先我们去去去搜一个内容的时候,我们去看大模型从哪些方面去去去到从哪些方面,那个去去抓它需要的内容,对吧?因为目前来说大模型它是训练的时候呢,它其实它也是,它的数据其实就终止到了它训练的那那个的一个数据数据段。那它需要回答我问问题的时候呢,它肯定是需要去调用其他的外部接口,比如说像 那个 Deepseek 它可能调用的是博查,豆包可能调用它内部的一些接口,包括博查的一些接口。混元呢,它可能调用的是它自己内部的一些私域上面的一些一些链接,对。然后他把这个内容抓到这些内容之后呢,再把这个内容提交到到大模型里面去分析、去总结,然后给出用户需要的一个答案。对,这是这是大模型抓起的一个一个一个流程。那基于这个流程呢?我们就就就做了一些工具。首先就是这个文章怎么获取,怎么规划,就是怎么把它的内容结构化,让它更好的去把这个内容给呈现出来,这是第一点。第二点呢,其实我们在分析的过程中呢,其实也发现,尤其是豆包和第,那个,尤其是豆包,它对于那个数据的来源,它特别喜欢去抓一些官网上的一些数据。对,然后呢在这个过程中呢,我我们就就做了一个那个自动复制官网的,就,其实也不能叫自动复制官网,就是做一个 官网的一个克隆,它不,当然了它不是简单一个克隆的一个一个一个一个一个功能啊,就是其实目前的整,那个叫法呢,就是叫 AI 克隆嘛。但是它的工作原理呢,其实就是说 我们先从他已已有的官网上把数据先拿到我们的数据本,那个我我们我们这边来。然后呢再再通过我们的一些工具去对数据加工,就我们的一些 agent 对数据做一些加工。然后继续加工之后呢,同时我们也去去那个生成一些关键字,去那个外网上,那个丰富这些数据源。拿到这些数据源之后呢,再把那个数据再整理,整理成我们需要的这个,不是我们,整理成大模型比较喜欢的这种结构结构化的一些文章,然后再再那个那个发 布到我们内部的,就是我们克隆出来的这个这个官网上来。对,这是这是第二个工具,就是这,对,不,但,但是我说的工具只是说一个,一些 agent 的一些总集啊,它对,我们不只是一个一个工具一个工具的做,我们是做一部分 agent 然后组装成为一个工,一个工具,这所谓的一个工具,其实也就是一个 agent 集合。对。目前呢,在做的是是这么两个两个事,然后第三个事呢,其实正在规划做的是那个我们怎么去监控大模型是不是把我们的内容,是否已经呈现出来了这么一件事,对。这个事的思路呢,其实我们是模拟着模拟的这个人,对我们提供的一些关键字,模拟的人,然后对那个大模型进行提问,提问得出来之后之后呢,就是他也会反馈一些数据给我们嘛,拿到数据之后呢,我们也会调用我们那个 agent 去做一些分析。然后得出我们一些报报告。但对目前的目,目前我们报告目前还是比较简单的,对。后续呢可能需要把一些竞品啊,这些报告也总结出来,然后提交到用户这边。对,然后后续可能就是跟,那个根据钱总这边的一个规划,我们可能还会把那个上次聊的那个数字人,把它加到我们这这这块来。对,但是这个呢,目前还没有,那个数字人模块我们是有了,但是还没有这么那那个智能,所以目前暂时可能先把这个先放一放。对,主要是主要是这么这么几件事。我的理解啊,我我我理解一下,就是我们现在做的关于针对模型,针对各个大模型喜好的一个。相对简单一点的这种,这个喜好的排查。之后呢,做了一些这个集合类的抓取工具,把这些抓取过来。在之后呢,做一些这种相关的,这。我不清,就是大概是这么几个内容吧,就现在我们做的工作,就开发的工作是吧?讲到历史。对,就是我们还要把,还有一些我发发布文章的这些工具,对。这些发布文章的工具是我们用 AI 做的吧?首先我我我我先先和您对齐一个,我们 AI 做的这么一个,我可能不太理解,可能我我我我我我可能不太理解你这个 AI 做是什么意思哈,就是这块。这一块的展现,因为我们肯定是要一个是报告嘛,就是给客户展现,另外一个是做一些文章,那这两个部分是用这个 我们调用一些这个模型来生成出来的吧?还是我们自己生成出来?报告就首先我们报告就是这是一,这是两个模块啊,一个是我们的报告生成模块,还有一个是文章发表模块,对。就是不能叫模块,就是工具嘛。其实我在我这边都统统称为工具,因为我的整个架构系统,它都是通过很多很多的工具,然后那个来做来做集合的。就是这样的好处呢,就是我们能快速的去适应,比如说大模型的一些那个算法,然后还有一个就是 要增加一个什么功能也比较方便,要减少个,那个去掉一些什么功能,替换什么功能也比较方便。对,所以我就说那个工具这一块,对。然后刚才您说到的这个。啊,报告其实是这样的,我们报告报告其实是给到一,那个我们的代理商这一块嘛,代理商这块的报告,它生成的方流程呢,其实是我们已经监测到我们那个 大模型的这一块的一个数据,然后通过数据这一块呢,我们会那个通过我们的代码,这个不是 AI 做的,是我们自己代码写的,对。来呈现出来。嗯。对。你好,OK。哎,那个赵磊啊,你看看你跟我们这个龙杰交流一下,关于在这个方面的一些这个相关内容呗。哎哎,赵总能听到吗?喂,周磊。哎,这会能听到我说话吗?哎,现在可以了现在可以了。啊,对,其实我刚才对对您刚才第最先提到这块比较感兴趣啊。就是我们在做这个技术优化的时候,我看您提到的第第第一块的话,实际上是你要在在网上抓很多的内容,然后固化到本地。然后还有那个,就是克隆网站的这块的功能。那这两块你你底层是怎么结合的呢?就是这个知识到本地会会对这块有什么样的那个 其实这块是这样的,就是第一就是我们去抓网站的时候,尤其是他网站一些产品,然后他还有网站的一些解决方案,对吧?因为我们目前做的是目前抓的这几个代理商呢,都是那个工业化的一些设备这一块,对。然后基于基于这个的话,目前的一个解决方案呢,其实就是我们先把这个官网上的一些数据,比如说他的公司的名称,然后地址、联系方式,这等等最基础的嘛,这是第一第一步,第一个模块,对吧?第二个模块呢,其实我我先把这个工具的流程给你简单的描述一下。可以。其实我们去抓这个网站的时候,其实我们输入的,拿到这个网址之后呢,我我们会提交,就是我我写了一个 agent。这个 Editor 的的的的的的的那个作用呢,其实就是去对这个官网,去它的官网的首页,去总结这个官网主要是去描述一个什么东西。对,然后拿到描述些什么东西之后呢,尤主要尤其就是它的主菜单嘛,对吧?然后它还有它主页的一些各个模块,因为主菜单上面可能有些模块没有,有些模块是有的,对。拿这个模块之后呢,我会有一个任务的一个 agent 去做这个任务的规划。比如说我抓这个,因为这个任务我我我要抓哪些内容,其实我是知道的。所以呢我会我会那个 agent 呢也会去抓着那个,去做一个任务的一个分配。比如说我要抓那个这个网站,我可能只只抓着它的那个新闻,然后还有那个解决方案,然后还有那个 产品这一块,对。然后呢这个任务规划出来之后呢,就是剩下的其实就是去调用我们的一些一些那个数据的一些,第,首先就类类似一个数据的,类似爬虫,但是比爬虫要稍微好一点。其实这个数据呢,拿下来之后呢,其实也会提交到大模型 里面去做分析的,就是是否满足我们的这个需求。对,这这个里面就有一个有个目前的,有个问题其实就是会受限一个那个大模型的一个上下文的一个一个一个一个卡壳。对,这个目前是解决了的,对。拿到这个东西之后呢,我们会生成一个本地的本地的一个知识库,其其实就是一个 Markdown 的一个文档。对,这是,就就是对这个官网做一个总结,对吧?然后内容我们也抓下来了,对。然后抓开之后呢,尤其是他这些图片什么的,我们也提交到我们的自己的那个CDN 或者是其他的存储存储设备上面去了。对,这是这是第一个第一个第第一个阶段。然后这个阶段完成之后呢?还有另一个 agent 其实就是做,我因为我们刚才已经做了一些,比如说是对新闻,那个每篇新闻可能就是一个一个知识库,或者是那个产品,它可能就是一个知识库,对。然后还有它解决犯可能就是知识库。然后我们会就会调用这些知识库的一些内容,会让那个大模型给我们生成。比如说我们就拿产品来说,因为产品比较比较好举例嘛。就产品的话,我们也会到网上那个就是调一些那个 NCP 啊等等的一些那个工具,然后在网上去搜 它这些相关的一些那个 这是那个那个数据来填充,它光,因为官网啊,现在对公,那个设备商的一些官网,它做的特别简单,所以我们需要把这个数据给补补充补充住,比较充分,对。嗯,对。拿到这个数据之后呢,然后这个这个也是,这个东西当然拿回来我们也是拿到大模型里面做一一一那个一定的分析嘛,对吧?然后分析,做,首先我们拿回来之后呢,其实第一步就是做数据的清洗,第二步就是让大模型来跟做,跟我们做一部分的分析嘛,分析完成之后,其实就最后一 步就是展成我们自己的那个内部格式。然后传到我们的后台上面去。对,就是就是抓抓抓官网的一个流程,对。那那这部分这知识在后续你去做那个,因为我我我理解了您的意思,其实在这块的话,一个是对于他网站的优化,另外一个就是对于他内部内容和结构的优化。那这些内容当你再去做营销或者做其 做那个可被大模型收入的时候,后续的动作你会做哪块,哪些呀?是这样,就是是,这这个就受,那个就就变成了,就就到我们第二个阶段嘛,其实第第三个阶段,对,就是这这个发文的阶段,对。然后发完阶段,我们这个数据不是已经已经提交到我们自己的那个服务器上来了嘛,对吧?然后然后,它要到服务器上来的话,我们会标注这个数据可能是有有有没有发发到,比如说是那个。比如说是什么排行榜网站啊,然后还有一些那个私,那个,都混音,比如说。什么什么那个那个那个叫叫那个混元刷的一些什么 腾讯的一些公众号啊等等这些这些地方去,对,我们都会做一些标注。这个标注当然是根据我们那个这个我们就是准备做的一个一个一个那个那个那个分析嘛,就是我们这篇文章可能发在哪,他可能就就需要做那个标注起来,就是拿到这个文章再去发。发到对应的网站上去,然后让大模型去抓的时候,就就快速的把我们呈现出来,对。啊,其实其实在这里面,你你你你发布的网站或什么,是根据不同的大模型,然后它它的检索引擎所内置的比较倾向的这种网站,然后你是通过量,然后让它来加剧它的收入,对吧?对对对,目前 可以说所有的 SEO 工具都是这么做的吧。就因为我们也是。问个题外话,然后您抓下来的这个数据,然后再通过这种形式去对外发文,那你拟定的官方文章和那个文章上的来源是怎么解决这个安全问题的?就是或者是法律风险的。其实是这样的,就是发布这个过程呢,其实是由人工做一个那个数数据的一个校校对的。其实这个我们发布文章之前都会给到那个,就上次钱总也提到过,就是我们会不会会有人专门针对这个这个文章做一个数据的校验。比如说这个数据,如果我们发上去了,这到到时候他做不 了,那不就那就那不就出出问题了嘛,对吧?所以这个东西是通过人来去去做一次那个校验的,对。嗯,哎,那这还有我还有个地方比较感兴趣啊。就是我们通过,就是我们跟,再去跟对应的客户再去谈这,比如说就是谈这个产品的时候,那一一种途径就是就是客户其实本来对这些相关的信息,他是有很,描述非常准确的这样的结,不管是结构化还是非结构化,他其实是有准确的数据给到咱们的。对,那我们前置去做这个 再去从它的官网上去抓这些信息,我们又又要经过。其实这个我我们都会遇到,其实你抓下来让大模型去做这个信息的整理或什么的,其实中间的过程还是很有挺多问题的。那那我们前置的这个动作和客户能直接提 提供这一块我我们做双向准备,是现在两个都兼容,就是做爬虫的那一块的核心的,就是或者说出发点在哪一块,考虑的出发点。是是这样,就是首先就如果客户提供我们数据之后,因为我刚才也提到我们建了一个,我们拿到数据之后会在本地建一个知识库,就是一个 文档嘛,对吧?然后这个这个的时候,如果客户提供给我们一些数据的时候,我们也是同样会建一个 Mac down 的一个知识库文档,就是对。然后建知识库文档之后,我们也会提,那写一些提的词,告诉大模型说我们这个课是那个权重会高很多,然后那个你 自己抓那个可能权重要低很多,对。就是做,目前来说是做了个简单的一个兼容。对,后续的话,因为根据根据业务和市场,这个在不断的发展,这个也是不断的在做调整吧。哦,明白了。哎,那那另外的一块就是,其实我我看了也有提到那个 AI 一键智能建站,这个的话其实是,就是传统工具加现在我们要优化的点相结合的一种方式。那这里面我们的核心,就是或者说技术壁垒在哪一块呢?或 怎怎么样描述这件事情?其实从技术的角度上来说哈,我们就是技术壁垒其实在做的过程中,目前碰到的,就比如说我们那个,你抓爬虫抓出来的数据特别大,然后你需要怎么去解决这个问题,这个当然就是一个思想上的一个巧妙的转换嘛,对吧?然后其次呢,其实还,其他的一些技术壁垒呢,其实就是如何去去告知大模型我们要的是哪些数据。其实就就写一些怎么巧妙的去优化一些提示词,对。明白了。然后还有一个就是,比如说如何去抓动态的网站。嗯,因为网站的话,因为如果是静态的网站都好说,对吧?如果是动态的话,就如何去来处理这个事。然后还有一个就是如何的用,那个缩短我们那个抓起的一个时间,尤尤其因为我前期开始做的时候也用了许多的开源的嘛。然后发现就是要不就抓,一抓一个网站,爬一个网站可能需要一个多小时、两个小时,这这也是有的,对。明白。哎,那我们的知知识库这块是,具体是那个用什么方案来,体系来去建设的?就是我我,就是我对咱们的那个底层 架构的支撑也比较感兴趣。目前呢,因为我们体量比较小,所以目前的这个知识库用的是 ChromeDB 这块来做一个数据的一个那个兼容嘛。然后其次,那个还有一个就是,一个还有一个就是如果我们抓这块的话,主要是采,嗯,目前呢可能就是一些铭文,就是我们就是把这个整理成一个格式化的,那个档的一个格式,格式化的一个文档。然后再再再结合那个大模型这一块,然后您说的这个知识库,其实就是,其实我知道你要问的是哪哪一块,可能怎么如何去解决那个大模型的一个一个上下文的一个问题嘛,对吧?其实这块的话其实就就是用那个,那那不是,那 Chrome DB 这一块来做的。哦,明白了。那那那对于我们抓下来的文章,我很,稍稍微细了一点。没事。就是我们的种子结构,或者说那个,它是有相关的因果关系的这样的数据。然后我们的知识库,是怎么处理这个结构的呢?这个是是这样,因为存这一块的话,首,其实就是类似一个 rag 的一个一个一个一个一个一个一个处理流程啊。就是内部的话,可能目前来说,由于那个上次钱总跟我聊过,所以这一块的话可能不太方便往外说,不好意思啊。明白明白,没关系。那我其实整体理解下来,我们其实我觉得这个这个这个理念或者靠近这个风口,嗯嗯,挺好的。然后其实我们结合了 应该是把一把一系列,然后其实我们的发展比较成熟的传统技术,然后通过这样的一个手段联合在一起完成了这样的一个那个既有优化的业务场景。我这样总结,您看对不对?啊,对,因为我们主要是因为我们,对 那个传统的开发,对互联网开发转过来的嘛,对吧?所以我们的思维一下子也不可能转这么快,对。所以呢大,还是的,还是按照这个,主要我们还是依依靠这个需求做一个推动。对,需求需要我们做什么,那么技术就就实现什么嘛,对吧?那我们如果解决不了的话,我们想办法去解决嘛。主要是这么一个一个一个流程,对。明白。嘿,那那个我们我们那个就是那个,有一个 AI 一键建站,这块更多的是为了优化它的官网吗?这 对,其实其实 AI 一键建站就是刚才我说那个第一个流程嘛。其实我首先就是我们抓官网的数据,第二呢其实我们做一些多多样化的一些模板,对吧?数据其实我们存在我们的自己数据库上面来了,其实就是通过通过第一阶段之后,然后第二个阶段就是说那个 AI 建站 的这块其实主要就是优化它之前的一些 SEO。 然后还有 GEO 的这些模板,这些工具,那我们做成一个一个工工工具化,一个模板化之后,我们就可以建立到其他的各个各各个行业嘛,对。明白。哎,那这个就是建站的这个本身的这个这个能力的话,是也是我们引用的那个成熟的技术,还是还是我们重新构建?这块整个那个,我把它叫克隆或者什么的,费效比怎么样?您觉得?目前的话,因为服务,现在因为这个供应商,我们就是服务这几个供应商的话,目前转化的效果还是就是我只说技术上的转化效果还是可以的。对,就是他的那个,这个应该,我理解我理解您的意思,就可能是应该我们能转换到他的,目前呢,就是说,我转换完成之后呢,其实就是就剩下的一个工作就是,把这个内容交给到那个我们的交互人员,然后跟那个客户去沟通这一块的一些,数据上的 一些,那个。一个对对数据的一一一个流程了,对。所以归,那个结构化啊,还有那他那个什么,他的那个模板结构化等等,这些东西基本上已经已经处理掉了,对。明白。还还还有一个小问题啊,就是在在我们后期这个这个发文的过程中,就是其实你肯定是向多个网站进行推送嘛。对。然后这个知识内容和知识含量的占比,然后和大模型的收入的频率,那这这样的一个其实是就是在未来,比如说假设啊我们还有 竞对,包括,甚至于说一些品牌公司也在不停的那个传递自己的信息。未来这个可能也是一个方向嘛,对吧?对。那这样的话,我们是懂,怎,我我们我们有没有考虑过这个未来,就是我们的知识质量的传递的 以及发布的这个数量,然后和他收入的这个整个的这个排名的情况,这这个这个整体的一个转化的比例,和我们有什么技术手段能保持这样的一个企企靠前的这样的一个一个程度呢?目前是是这样嘛,因为我们去做报告,去做用户报告的时候,就是我们去提交给代理商这个报告的时候呢,我们也是不断地去分析这个这个我们发的这篇文章,这发的,因为我们发的文章我们都有嘛,对吧?然后他可能会引用到哪篇文章,其实我们也可以拿得到,对吧?那那那我们我们就是拿到这个消息,拿到这些数据之后呢,其实我们也是在做分析,就是哪些,以后,因为模型这块它肯定也是不可能一成不变嘛,它肯定也是变的嘛。所以呢我们,就是这个流程本身就是我们,我我们就做这个过程中,其实也是一个附加的一个,其实说是附加吧,其实它也很重要,说从技术角度上来说,它就是一个附加的一个。一个一个一个一个一个一个结果,对。然后我们去分析它那个,比如说我们这篇文章采用的是哪些特点,它就,比如说它出现的概率就很高,那我们就知道那个大模型可能下一下一个规,它的优化的目标可能就是就是这么一个一一个一个方向,那我们就下篇文章可能就就这么来写,对。因为因为大模型对我们来说,不光是对我,我们来说,可能对于整个行业来说都是一个黑盒嘛,我们只能靠猜,目前来说是这样的。明白。那那后续包括我们,因为我看之前,不管是客户提供的数据,还是说我们抓取的数据,实际上你是在一个持续的 那个索引过程,然后来去入知识库,同时发文。那那知识的鲜活性以及大模型每一次收录,对知识的颠覆性的保证,那我们整个 rag 的过程。哦,这块的机制是怎么样?其实,RAG 它,我们是。是那个目前来说是,目目前来说是由人工,我们觉得需要他重新 rag,那我们再 rag,后续的话可能是通过一些技术手段,比如说,这这刚才说那个监控流程,通过那个来来来来处理,是不是需要重新 rag 了?对。目前来说我们是通过人工的,因为我们现在的那个体量还比较小嘛,对。一一下子也做不了那么多工具,对。明白明白,行。那那看这个,那个,谢哥你这边还有啥问题没?哎,这块那个,我是斌斌,我我打断一下,刚才那个赵总和 那龙总的问题就是这块通过,因为现在规模小,通过人工,能不能请这个龙杰稍微再描述一下,就是这个通过人工。这个这个工程的这个过程,就是你是什么样的人,然后怎么做,能够,我就是因为我这块可能不太懂啊,我就是希望 知道一下,就是是怎么操作的?是这样的,就是目前呢这块过程是由我们技术在处理,对,我我们就是,目前就是一个比较主观的一个过程了。对,就是觉得我们和钱总还有那个我们的哈林总,怎么讨论之后,还有其他一些技术讨论之后,觉得需要 rag 了。那我们就重新做那个 rag 的一个流程,对。这个就是以后如果说用户规模比较大的时候,这块会发生一个根本的变化吗?这个工作模式。这肯定是的呀,你通过人工来话,那那个都都没办法。没办法直接,就是如果工量太,做的太大的话,你你比如说你这个东西就没办法人工人工化了嘛,肯定如,我们技术主要就是解决这个问题的嘛,对吧?如果这个,对。那现在就是目前这个人工就是所包含的,就是你跟钱总也都在里边。也就是说还有你手下的工程师吗?就是说是哪些人要,就是这个人工现在是谁谁 谁在承担呢?目前这,那个出,主要操刀还是在我这边,对,就是我去点那个那个需要需要 rag 这一块,这个这个按钮是我来点的。但但是我们是根据报告这个这个来做的,不,也不是说我觉得需要点我就点,对,也不可能说我我我那个拍脑瓜我就去点,对。对,那那那也就是说,你你点之前,你是需要去人工阅读它的内容来决定是不是点吗?这个我们在交互的过程中就就会有这个这个产值。你你是,就是你是根据一个自动生成的阀值来判断,还是说你要去把这个客户的一些数据看一下,文章看一下,就是这个。这这个其实是这样,就是我们在交付的过程中,我们的交付工程师,就是我们的交付人员,也会我,给我们一些反馈。也不,我我也不可能说每一个文档文,那个报告我去看,那我 我其他事我也不用做了。对对对对对对对。那你说的交付人员是指上次咱们面谈的时候,钱总说的那些,对。就是就是那些客,就是客户服务的那些交付人员,是吗?对对对,就钱总说的那些。那就是说他们会第一反馈到你这里,然后呢相当于就是有可能需要人工处理的,对,然后你们再去判断。对对对,是的。那你说这个目前规模比较小,人工处理,将来规模大了呢,要转成技术处理。那你能够量化一下吗?就是多少个客户算是现阶段可以应付的?然后到什么规模?数量级的客户,就是必须是怎么样做的?目前来说呢,可能超过200个客户之后,我们就会上技术手段了。 OK,好的,行行,谢谢。好,谢谢。那个龙总,咱们现在的这个技术,就是在您这个板块的,大概有多少同事啊?目前全职的。目前就是两个,对。您一个,算您吗?算我在,对。因为我自己也写代码,对。还有一位同事是写代码的,对吧?对对对。啊,OK,明白。那这个产品现在是由您和这个钱总监着的,对吧?对对对。三个人做产品,对对对。三个人的产品组,对,完了以后其中这个有有有,以后其中有两两位是做技术的。啊,这样说。啊,对对对。因为体系比较小嘛,然后我们就扁平化了一些,对,可能职责分的就就没有这么清晰了。对。上次我跟那个陈总聊过这块的话,就是说我们也内部对了一下,大概需要6个人左右,根据不同的岗位来划分。对对对。大致是做哪些事情呢?首,都写代码的吗?对,我说的技术都是写代码的,对。然后可能有一位可能会去跟着那个做产品的,就因为产品规划到代码这层,还需要一个一个转换的一个过程嘛。没错,嗯,没错。就是剩下都是写代码的公司。对对对对对。都是准备放在北京对吧?对,是的。那您对于像这些,您如果将来计划招的6个,这个人员的画像描述。比如他有什么样的能力,大概工作多长时间,这些能不能简单的做一些这个规划一下?我们想听一听。是这样的,首先呢就是做算法这一块,就是跟跟大模型对接这块的一个人员呢,就是我我我希望他就是时间,'... 4122 more characters, + utterances: [ + [Object], [Object], [Object], [Object], [Object], [Object], + [Object], [Object], [Object], [Object], [Object], [Object], + [Object], [Object], [Object], [Object], [Object], [Object], + [Object], [Object], [Object], [Object], [Object], [Object], + [Object], [Object], [Object], [Object], [Object], [Object], + [Object], [Object], [Object], [Object], [Object], [Object], + [Object], [Object], [Object], [Object], [Object], [Object], + [Object], [Object], [Object], [Object], [Object], [Object], + [Object], [Object], [Object], [Object], [Object], [Object], + [Object], [Object], [Object], [Object], [Object], [Object], + [Object], [Object], [Object], [Object], [Object], [Object], + [Object], [Object], [Object], [Object], [Object], [Object], + [Object], [Object], [Object], [Object], [Object], [Object], + [Object], [Object], [Object], [Object], [Object], [Object], + [Object], [Object], [Object], [Object], [Object], [Object], + [Object], [Object], [Object], [Object], [Object], [Object], + [Object], [Object], [Object], [Object], + ... 121 more items + ], + job_key: '6f3397ab-782c-44a9-8e29-441a8b799457' + }, + __upstream: { + status: 200, + ok: true, + headers: { + 'access-control-allow-credentials': 'true', + 'access-control-allow-headers': 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,X-Api-App-Key,X-Api-Access-Key,X-Api-Request-Id,X-Api-Resource-Id,X-Api-Sequence', + 'access-control-allow-methods': 'GET, POST, OPTIONS', + 'access-control-allow-origin': '*', + 'access-control-expose-headers': 'X-Tt-Logid,X-Api-Status-Code,X-Api-Message', + 'api-service-host': 'fdbd:dc03:14:e46::142', + connection: 'keep-alive', + 'content-encoding': 'br', + 'content-type': 'application/json; charset=utf-8', + date: 'Mon, 03 Nov 2025 03:44:43 GMT', + eagleid: '1bdd61a817621414832625185e', + server: 'Tengine', + 'server-timing': 'inner; dur=174, cdn-cache;desc=MISS,edge;dur=3,origin;dur=218', + 'timing-allow-origin': '*', + 'transfer-encoding': 'chunked', + vary: 'Accept-Encoding', + via: 'cache47.l2cn3031[218,0], cache20.cn7150[221,0]', + 'x-api-message': 'OK', + 'x-api-request-id': '6f3397ab-782c-44a9-8e29-441a8b799457', + 'x-api-status-code': '20000000', + 'x-tt-logid': '202511031144437868F3415F2B3B026938', + 'x-tt-trace-host': '01be378494562453161574e6794e2021257952ca86444979ce1716b1d0f618ab5bca92f322ffe1448bd7f6f88055d5f0f2d3c672f32688de238a18cd123e1b76065692e27c92f1778e3bd0a4c18a905d670eefc4aa8bc06e5b73e214c36d01999f', + 'x-tt-trace-id': '00-2511031144437868F3415F2B3B026938-4756611625D4B492-00', + 'x-tt-trace-tag': 'id=03;cdn-cache=miss;type=dyn' + }, + rawText: '{"audio_info":{"duration":2746814},"result":{"additions":{"duration":"2746814"},"text":"能听到吗?哎,你好你好。哎,你好。是这个龙总,对吧?对,我是龙杰,啊,对。哎,董洁你好,我我也在线了,我是吴丽丽。叶总好。 OK 哎,那个磊子。哎,我在啦。哎哎哎,好,那个就是我们今天主要的这个会议啊,这人都齐了,就主要就是,就针对 对咱们这个相关的产品和一些技术的一些方向呢,我们做一个基本的交流和这个龙杰龙总。所以呢,这个辛苦一下龙总,完了以后呢,我们邀请了我们的一个 顾问呐,嗯,专家顾问啊,这个赵雷总啊,他这方面是,对对对,说一起交流一下,大概是这么一个情况。所以那个龙杰龙总能不能就你现在的一个 咱们现在的产品的开发,以及这个思路,还有这一些方面呢,能不能做一个简单的,一个,比如说三五分钟的介绍?咱们从这个边起个头,好不好?啊,可以,好的好的。目前呢,因为现在的市场啊比较比较那个,也比较大嘛。然后我们就现在就是说,以前的 SEO 转化到现在的 GEO 对吧?那么我们通过那个上次钱总展示那篇论文。得到了一个结论,就是说我们需要第一就是很很很很机械的去发文章给的,让大模型去搜,去收录。那么它大模型怎么收录呢?其实我们先把这个原理搞一下,就是 首先我们去去去搜一个内容的时候,我们去看大模型从哪些方面去去去到从哪些方面,那个去去抓它需要的内容,对吧?因为目前来说大模型它是训练的时候呢,它其实它也是,它的数据其实就终止到了它训练的那那个的一个数据数据段。那它需要回答我问问题的时候呢,它肯定是需要去调用其他的外部接口,比如说像 那个 Deepseek 它可能调用的是博查,豆包可能调用它内部的一些接口,包括博查的一些接口。混元呢,它可能调用的是它自己内部的一些私域上面的一些一些链接,对。然后他把这个内容抓到这些内容之后呢,再把这个内容提交到到大模型里面去分析、去总结,然后给出用户需要的一个答案。对,这是这是大模型抓起的一个一个一个流程。那基于这个流程呢?我们就就就做了一些工具。首先就是这个文章怎么获取,怎么规划,就是怎么把它的内容结构化,让它更好的去把这个内容给呈现出来,这是第一点。第二点呢,其实我们在分析的过程中呢,其实也发现,尤其是豆包和第,那个,尤其是豆包,它对于那个数据的来源,它特别喜欢去抓一些官网上的一些数据。对,然后呢在这个过程中呢,我我们就就做了一个那个自动复制官网的,就,其实也不能叫自动复制官网,就是做一个 官网的一个克隆,它不,当然了它不是简单一个克隆的一个一个一个一个一个功能啊,就是其实目前的整,那个叫法呢,就是叫 AI 克隆嘛。但是它的工作原理呢,其实就是说 我们先从他已已有的官网上把数据先拿到我们的数据本,那个我我们我们这边来。然后呢再再通过我们的一些工具去对数据加工,就我们的一些 agent 对数据做一些加工。然后继续加工之后呢,同时我们也去去那个生成一些关键字,去那个外网上,那个丰富这些数据源。拿到这些数据源之后呢,再把那个数据再整理,整理成我们需要的这个,不是我们,整理成大模型比较喜欢的这种结构结构化的一些文章,然后再再那个那个发 布到我们内部的,就是我们克隆出来的这个这个官网上来。对,这是这是第二个工具,就是这,对,不,但,但是我说的工具只是说一个,一些 agent 的一些总集啊,它对,我们不只是一个一个工具一个工具的做,我们是做一部分 agent 然后组装成为一个工,一个工具,这所谓的一个工具,其实也就是一个 agent 集合。对。目前呢,在做的是是这么两个两个事,然后第三个事呢,其实正在规划做的是那个我们怎么去监控大模型是不是把我们的内容,是否已经呈现出来了这么一件事,对。这个事的思路呢,其实我们是模拟着模拟的这个人,对我们提供的一些关键字,模拟的人,然后对那个大模型进行提问,提问得出来之后之后呢,就是他也会反馈一些数据给我们嘛,拿到数据之后呢,我们也会调用我们那个 agent 去做一些分析。然后得出我们一些报报告。但对目前的目,目前我们报告目前还是比较简单的,对。后续呢可能需要把一些竞品啊,这些报告也总结出来,然后提交到用户这边。对,然后后续可能就是跟,那个根据钱总这边的一个规划,我们可能还会把那个上次聊的那个数字人,把它加到我们这这这块来。对,但是这个呢,目前还没有,那个数字人模块我们是有了,但是还没有这么那那个智能,所以目前暂时可能先把这个先放一放。对,主要是主要是这么这么几件事。我的理解啊,我我我理解一下,就是我们现在做的关于针对模型,针对各个大模型喜好的一个。相对简单一点的这种,这个喜好的排查。之后呢,做了一些这个集合类的抓取工具,把这些抓取过来。在之后呢,做一些这种相关的,这。我不清,就是大概是这么几个内容吧,就现在我们做的工作,就开发的工作是吧?讲到历史。对,就是我们还要把,还有一些我发发布文章的这些工具,对。这些发布文章的工具是我们用 AI 做的吧?首先我我我我先先和您对齐一个,我们 AI 做的这么一个,我可能不太理解,可能我我我我我我可能不太理解你这个 AI 做是什么意思哈,就是这块。这一块的展现,因为我们肯定是要一个是报告嘛,就是给客户展现,另外一个是做一些文章,那这两个部分是用这个 我们调用一些这个模型来生成出来的吧?还是我们自己生成出来?报告就首先我们报告就是这是一,这是两个模块啊,一个是我们的报告生成模块,还有一个是文章发表模块,对。就是不能叫模块,就是工具嘛。其实我在我这边都统统称为工具,因为我的整个架构系统,它都是通过很多很多的工具,然后那个来做来做集合的。就是这样的好处呢,就是我们能快速的去适应,比如说大模型的一些那个算法,然后还有一个就是 要增加一个什么功能也比较方便,要减少个,那个去掉一些什么功能,替换什么功能也比较方便。对,所以我就说那个工具这一块,对。然后刚才您说到的这个。啊,报告其实是这样的,我们报告报告其实是给到一,那个我们的代理商这一块嘛,代理商这块的报告,它生成的方流程呢,其实是我们已经监测到我们那个 大模型的这一块的一个数据,然后通过数据这一块呢,我们会那个通过我们的代码,这个不是 AI 做的,是我们自己代码写的,对。来呈现出来。嗯。对。你好,OK。哎,那个赵磊啊,你看看你跟我们这个龙杰交流一下,关于在这个方面的一些这个相关内容呗。哎哎,赵总能听到吗?喂,周磊。哎,这会能听到我说话吗?哎,现在可以了现在可以了。啊,对,其实我刚才对对您刚才第最先提到这块比较感兴趣啊。就是我们在做这个技术优化的时候,我看您提到的第第第一块的话,实际上是你要在在网上抓很多的内容,然后固化到本地。然后还有那个,就是克隆网站的这块的功能。那这两块你你底层是怎么结合的呢?就是这个知识到本地会会对这块有什么样的那个 其实这块是这样的,就是第一就是我们去抓网站的时候,尤其是他网站一些产品,然后他还有网站的一些解决方案,对吧?因为我们目前做的是目前抓的这几个代理商呢,都是那个工业化的一些设备这一块,对。然后基于基于这个的话,目前的一个解决方案呢,其实就是我们先把这个官网上的一些数据,比如说他的公司的名称,然后地址、联系方式,这等等最基础的嘛,这是第一第一步,第一个模块,对吧?第二个模块呢,其实我我先把这个工具的流程给你简单的描述一下。可以。其实我们去抓这个网站的时候,其实我们输入的,拿到这个网址之后呢,我我们会提交,就是我我写了一个 agent。这个 Editor 的的的的的的的那个作用呢,其实就是去对这个官网,去它的官网的首页,去总结这个官网主要是去描述一个什么东西。对,然后拿到描述些什么东西之后呢,尤主要尤其就是它的主菜单嘛,对吧?然后它还有它主页的一些各个模块,因为主菜单上面可能有些模块没有,有些模块是有的,对。拿这个模块之后呢,我会有一个任务的一个 agent 去做这个任务的规划。比如说我抓这个,因为这个任务我我我要抓哪些内容,其实我是知道的。所以呢我会我会那个 agent 呢也会去抓着那个,去做一个任务的一个分配。比如说我要抓那个这个网站,我可能只只抓着它的那个新闻,然后还有那个解决方案,然后还有那个 产品这一块,对。然后呢这个任务规划出来之后呢,就是剩下的其实就是去调用我们的一些一些那个数据的一些,第,首先就类类似一个数据的,类似爬虫,但是比爬虫要稍微好一点。其实这个数据呢,拿下来之后呢,其实也会提交到大模型 里面去做分析的,就是是否满足我们的这个需求。对,这这个里面就有一个有个目前的,有个问题其实就是会受限一个那个大模型的一个上下文的一个一个一个一个卡壳。对,这个目前是解决了的,对。拿到这个东西之后呢,我们会生成一个本地的本地的一个知识库,其其实就是一个 Markdown 的一个文档。对,这是,就就是对这个官网做一个总结,对吧?然后内容我们也抓下来了,对。然后抓开之后呢,尤其是他这些图片什么的,我们也提交到我们的自己的那个CDN 或者是其他的存储存储设备上面去了。对,这是这是第一个第一个第第一个阶段。然后这个阶段完成之后呢?还有另一个 agent 其实就是做,我因为我们刚才已经做了一些,比如说是对新闻,那个每篇新闻可能就是一个一个知识库,或者是那个产品,它可能就是一个知识库,对。然后还有它解决犯可能就是知识库。然后我们会就会调用这些知识库的一些内容,会让那个大模型给我们生成。比如说我们就拿产品来说,因为产品比较比较好举例嘛。就产品的话,我们也会到网上那个就是调一些那个 NCP 啊等等的一些那个工具,然后在网上去搜 它这些相关的一些那个 这是那个那个数据来填充,它光,因为官网啊,现在对公,那个设备商的一些官网,它做的特别简单,所以我们需要把这个数据给补补充补充住,比较充分,对。嗯,对。拿到这个数据之后呢,然后这个这个也是,这个东西当然拿回来我们也是拿到大模型里面做一一一那个一定的分析嘛,对吧?然后分析,做,首先我们拿回来之后呢,其实第一步就是做数据的清洗,第二步就是让大模型来跟做,跟我们做一部分的分析嘛,分析完成之后,其实就最后一 步就是展成我们自己的那个内部格式。然后传到我们的后台上面去。对,就是就是抓抓抓官网的一个流程,对。那那这部分这知识在后续你去做那个,因为我我我理解了您的意思,其实在这块的话,一个是对于他网站的优化,另外一个就是对于他内部内容和结构的优化。那这些内容当你再去做营销或者做其 做那个可被大模型收入的时候,后续的动作你会做哪块,哪些呀?是这样,就是是,这这个就受,那个就就变成了,就就到我们第二个阶段嘛,其实第第三个阶段,对,就是这这个发文的阶段,对。然后发完阶段,我们这个数据不是已经已经提交到我们自己的那个服务器上来了嘛,对吧?然后然后,它要到服务器上来的话,我们会标注这个数据可能是有有有没有发发到,比如说是那个。比如说是什么排行榜网站啊,然后还有一些那个私,那个,都混音,比如说。什么什么那个那个那个叫叫那个混元刷的一些什么 腾讯的一些公众号啊等等这些这些地方去,对,我们都会做一些标注。这个标注当然是根据我们那个这个我们就是准备做的一个一个一个那个那个那个分析嘛,就是我们这篇文章可能发在哪,他可能就就需要做那个标注起来,就是拿到这个文章再去发。发到对应的网站上去,然后让大模型去抓的时候,就就快速的把我们呈现出来,对。啊,其实其实在这里面,你你你你发布的网站或什么,是根据不同的大模型,然后它它的检索引擎所内置的比较倾向的这种网站,然后你是通过量,然后让它来加剧它的收入,对吧?对对对,目前 可以说所有的 SEO 工具都是这么做的吧。就因为我们也是。问个题外话,然后您抓下来的这个数据,然后再通过这种形式去对外发文,那你拟定的官方文章和那个文章上的来源是怎么解决这个安全问题的?就是或者是法律风险的。其实是这样的,就是发布这个过程呢,其实是由人工做一个那个数数据的一个校校对的。其实这个我们发布文章之前都会给到那个,就上次钱总也提到过,就是我们会不会会有人专门针对这个这个文章做一个数据的校验。比如说这个数据,如果我们发上去了,这到到时候他做不 了,那不就那就那不就出出问题了嘛,对吧?所以这个东西是通过人来去去做一次那个校验的,对。嗯,哎,那这还有我还有个地方比较感兴趣啊。就是我们通过,就是我们跟,再去跟对应的客户再去谈这,比如说就是谈这个产品的时候,那一一种途径就是就是客户其实本来对这些相关的信息,他是有很,描述非常准确的这样的结,不管是结构化还是非结构化,他其实是有准确的数据给到咱们的。对,那我们前置去做这个 再去从它的官网上去抓这些信息,我们又又要经过。其实这个我我们都会遇到,其实你抓下来让大模型去做这个信息的整理或什么的,其实中间的过程还是很有挺多问题的。那那我们前置的这个动作和客户能直接提 提供这一块我我们做双向准备,是现在两个都兼容,就是做爬虫的那一块的核心的,就是或者说出发点在哪一块,考虑的出发点。是是这样,就是首先就如果客户提供我们数据之后,因为我刚才也提到我们建了一个,我们拿到数据之后会在本地建一个知识库,就是一个 文档嘛,对吧?然后这个这个的时候,如果客户提供给我们一些数据的时候,我们也是同样会建一个 Mac down 的一个知识库文档,就是对。然后建知识库文档之后,我们也会提,那写一些提的词,告诉大模型说我们这个课是那个权重会高很多,然后那个你 自己抓那个可能权重要低很多,对。就是做,目前来说是做了个简单的一个兼容。对,后续的话,因为根据根据业务和市场,这个在不断的发展,这个也是不断的在做调整吧。哦,明白了。哎,那那另外的一块就是,其实我我看了也有提到那个 AI 一键智能建站,这个的话其实是,就是传统工具加现在我们要优化的点相结合的一种方式。那这里面我们的核心,就是或者说技术壁垒在哪一块呢?或 怎怎么样描述这件事情?其实从技术的角度上来说哈,我们就是技术壁垒其实在做的过程中,目前碰到的,就比如说我们那个,你抓爬虫抓出来的数据特别大,然后你需要怎么去解决这个问题,这个当然就是一个思想上的一个巧妙的转换嘛,对吧?然后其次呢,其实还,其他的一些技术壁垒呢,其实就是如何去去告知大模型我们要的是哪些数据。其实就就写一些怎么巧妙的去优化一些提示词,对。明白了。然后还有一个就是,比如说如何去抓动态的网站。嗯,因为网站的话,因为如果是静态的网站都好说,对吧?如果是动态的话,就如何去来处理这个事。然后还有一个就是如何的用,那个缩短我们那个抓起的一个时间,尤尤其因为我前期开始做的时候也用了许多的开源的嘛。然后发现就是要不就抓,一抓一个网站,爬一个网站可能需要一个多小时、两个小时,这这也是有的,对。明白。哎,那我们的知知识库这块是,具体是那个用什么方案来,体系来去建设的?就是我我,就是我对咱们的那个底层 架构的支撑也比较感兴趣。目前呢,因为我们体量比较小,所以目前的这个知识库用的是 ChromeDB 这块来做一个数据的一个那个兼容嘛。然后其次,那个还有一个就是,一个还有一个就是如果我们抓这块的话,主要是采,嗯,目前呢可能就是一些铭文,就是我们就是把这个整理成一个格式化的,那个档的一个格式,格式化的一个文档。然后再再再结合那个大模型这一块,然后您说的这个知识库,其实就是,其实我知道你要问的是哪哪一块,可能怎么如何去解决那个大模型的一个一个上下文的一个问题嘛,对吧?其实这块的话其实就就是用那个,那那不是,那 Chrome DB 这一块来做的。哦,明白了。那那那对于我们抓下来的文章,我很,稍稍微细了一点。没事。就是我们的种子结构,或者说那个,它是有相关的因果关系的这样的数据。然后我们的知识库,是怎么处理这个结构的呢?这个是是这样,因为存这一块的话,首,其实就是类似一个 rag 的一个一个一个一个一个一个一个处理流程啊。就是内部的话,可能目前来说,由于那个上次钱总跟我聊过,所以这一块的话可能不太方便往外说,不好意思啊。明白明白,没关系。那我其实整体理解下来,我们其实我觉得这个这个这个理念或者靠近这个风口,嗯嗯,挺好的。然后其实我们结合了 应该是把一把一系列,然后其实我们的发展比较成熟的传统技术,然后通过这样的一个手段联合在一起完成了这样的一个那个既有优化的业务场景。我这样总结,您看对不对?啊,对,因为我们主要是因为我们,对 那个传统的开发,对互联网开发转过来的嘛,对吧?所以我们的思维一下子也不可能转这么快,对。所以呢大,还是的,还是按照这个,主要我们还是依依靠这个需求做一个推动。对,需求需要我们做什么,那么技术就就实现什么嘛,对吧?那我们如果解决不了的话,我们想办法去解决嘛。主要是这么一个一个一个流程,对。明白。嘿,那那个我们我们那个就是那个,有一个 AI 一键建站,这块更多的是为了优化它的官网吗?这 对,其实其实 AI 一键建站就是刚才我说那个第一个流程嘛。其实我首先就是我们抓官网的数据,第二呢其实我们做一些多多样化的一些模板,对吧?数据其实我们存在我们的自己数据库上面来了,其实就是通过通过第一阶段之后,然后第二个阶段就是说那个 AI 建站 的这块其实主要就是优化它之前的一些 SEO。 然后还有 GEO 的这些模板,这些工具,那我们做成一个一个工工工具化,一个模板化之后,我们就可以建立到其他的各个各各个行业嘛,对。明白。哎,那这个就是建站的这个本身的这个这个能力的话,是也是我们引用的那个成熟的技术,还是还是我们重新构建?这块整个那个,我把它叫克隆或者什么的,费效比怎么样?您觉得?目前的话,因为服务,现在因为这个供应商,我们就是服务这几个供应商的话,目前转化的效果还是就是我只说技术上的转化效果还是可以的。对,就是他的那个,这个应该,我理解我理解您的意思,就可能是应该我们能转换到他的,目前呢,就是说,我转换完成之后呢,其实就是就剩下的一个工作就是,把这个内容交给到那个我们的交互人员,然后跟那个客户去沟通这一块的一些,数据上的 一些,那个。一个对对数据的一一一个流程了,对。所以归,那个结构化啊,还有那他那个什么,他的那个模板结构化等等,这些东西基本上已经已经处理掉了,对。明白。还还还有一个小问题啊,就是在在我们后期这个这个发文的过程中,就是其实你肯定是向多个网站进行推送嘛。对。然后这个知识内容和知识含量的占比,然后和大模型的收入的频率,那这这样的一个其实是就是在未来,比如说假设啊我们还有 竞对,包括,甚至于说一些品牌公司也在不停的那个传递自己的信息。未来这个可能也是一个方向嘛,对吧?对。那这样的话,我们是懂,怎,我我们我们有没有考虑过这个未来,就是我们的知识质量的传递的 以及发布的这个数量,然后和他收入的这个整个的这个排名的情况,这这个这个整体的一个转化的比例,和我们有什么技术手段能保持这样的一个企企靠前的这样的一个一个程度呢?目前是是这样嘛,因为我们去做报告,去做用户报告的时候,就是我们去提交给代理商这个报告的时候呢,我们也是不断地去分析这个这个我们发的这篇文章,这发的,因为我们发的文章我们都有嘛,对吧?然后他可能会引用到哪篇文章,其实我们也可以拿得到,对吧?那那那我们我们就是拿到这个消息,拿到这些数据之后呢,其实我们也是在做分析,就是哪些,以后,因为模型这块它肯定也是不可能一成不变嘛,它肯定也是变的嘛。所以呢我们,就是这个流程本身就是我们,我我们就做这个过程中,其实也是一个附加的一个,其实说是附加吧,其实它也很重要,说从技术角度上来说,它就是一个附加的一个。一个一个一个一个一个一个结果,对。然后我们去分析它那个,比如说我们这篇文章采用的是哪些特点,它就,比如说它出现的概率就很高,那我们就知道那个大模型可能下一下一个规,它的优化的目标可能就是就是这么一个一一个一个方向,那我们就下篇文章可能就就这么来写,对。因为因为大模型对我们来说,不光是对我,我们来说,可能对于整个行业来说都是一个黑盒嘛,我们只能靠猜,目前来说是这样的。明白。那那后续包括我们,因为我看之前,不管是客户提供的数据,还是说我们抓取的数据,实际上你是在一个持续的 那个索引过程,然后来去入知识库,同时发文。那那知识的鲜活性以及大模型每一次收录,对知识的颠覆性的保证,那我们整个 rag 的过程。哦,这块的机制是怎么样?其实,RAG 它,我们是。是那个目前来说是,目目前来说是由人工,我们觉得需要他重新 rag,那我们再 rag,后续的话可能是通过一些技术手段,比如说,这这刚才说那个监控流程,通过那个来来来来处理,是不是需要重新 rag 了?对。目前来说我们是通过人工的,因为我们现在的那个体量还比较小嘛,对。一一下子也做不了那么多工具,对。明白明白,行。那那看这个,那个,谢哥你这边还有啥问题没?哎,这块那个,我是斌斌,我我打断一下,刚才那个赵总和 那龙总的问题就是这块通过,因为现在规模小,通过人工,能不能请这个龙杰稍微再描述一下,就是这个通过人工。这个这个工程的这个过程,就是你是什么样的人,然后怎么做,能够,我就是因为我这块可能不太懂啊,我就是希望 知道一下,就是是怎么操作的?是这样的,就是目前呢这块过程是由我们技术在处理,对,我我们就是,目前就是一个比较主观的一个过程了。对,就是觉得我们和钱总还有那个我们的哈林总,怎么讨论之后,还有其他一些技术讨论之后,觉得需要 rag 了。那我们就重新做那个 rag 的一个流程,对。这个就是以后如果说用户规模比较大的时候,这块会发生一个根本的变化吗?这个工作模式。这肯定是的呀,你通过人工来话,那那个都都没办法。没办法直接,就是如果工量太,做的太大的话,你你比如说你这个东西就没办法人工人工化了嘛,肯定如,我们技术主要就是解决这个问题的嘛,对吧?如果这个,对。那现在就是目前这个人工就是所包含的,就是你跟钱总也都在里边。也就是说还有你手下的工程师吗?就是说是哪些人要,就是这个人工现在是谁谁 谁在承担呢?目前这,那个出,主要操刀还是在我这边,对,就是我去点那个那个需要需要 rag 这一块,这个这个按钮是我来点的。但但是我们是根据报告这个这个来做的,不,也不是说我觉得需要点我就点,对,也不可能说我我我那个拍脑瓜我就去点,对。对,那那那也就是说,你你点之前,你是需要去人工阅读它的内容来决定是不是点吗?这个我们在交互的过程中就就会有这个这个产值。你你是,就是你是根据一个自动生成的阀值来判断,还是说你要去把这个客户的一些数据看一下,文章看一下,就是这个。这这个其实是这样,就是我们在交付的过程中,我们的交付工程师,就是我们的交付人员,也会我,给我们一些反馈。也不,我我也不可能说每一个文档文,那个报告我去看,那我 我其他事我也不用做了。对对对对对对对。那你说的交付人员是指上次咱们面谈的时候,钱总说的那些,对。就是就是那些客,就是客户服务的那些交付人员,是吗?对对对,就钱总说的那些。那就是说他们会第一反馈到你这里,然后呢相当于就是有可能需要人工处理的,对,然后你们再去判断。对对对,是的。那你说这个目前规模比较小,人工处理,将来规模大了呢,要转成技术处理。那你能够量化一下吗?就是多少个客户算是现阶段可以应付的?然后到什么规模?数量级的客户,就是必须是怎么样做的?目前来说呢,可能超过200个客户之后,我们就会上技术手段了。 OK,好的,行行,谢谢。好,谢谢。那个龙总,咱们现在的这个技术,就是在您这个板块的,大概有多少同事啊?目前全职的。目前就是两个,对。您一个,算您吗?算我在,对。因为我自己也写代码,对。还有一位同事是写代码的,对吧?对对对。啊,OK,明白。那这个产品现在是由您和这个钱总监着的,对吧?对对对。三个人做产品,对对对。三个人的产品组,对,完了以后其中这个有有有,以后其中有两两位是做技术的。啊,这样说。啊,对对对。因为体系比较小嘛,然后我们就扁平化了一些,对,可能职责分的就就没有这么清晰了。对。上次我跟那个陈总聊过这块的话,就是说我们也内部对了一下,大概需要6个人左右,根据不同的岗位来划分。对对对。大致是做哪些事情呢?首,都写代码的吗?对,我说的技术都是写代码的,对。然后可能有一位可能会去跟着那个做产品的,就因为产品规划到代码这层,还需要一个一个转换的一个过程嘛。没错,嗯,没错。就是剩下都是写代码的公司。对对对对对。都是准备放在北京对吧?对,是的。那您对于像这些,您如果将来计划招的6个,这个人员的画像描述。比如他有什'... 875405 more characters, + requestId: '6f3397ab-782c-44a9-8e29-441a8b799457' + }, + data: { + additions: { duration: '2746814' }, + text: '能听到吗?哎,你好你好。哎,你好。是这个龙总,对吧?对,我是龙杰,啊,对。哎,董洁你好,我我也在线了,我是吴丽丽。叶总好。 OK 哎,那个磊子。哎,我在啦。哎哎哎,好,那个就是我们今天主要的这个会议啊,这人都齐了,就主要就是,就针对 对咱们这个相关的产品和一些技术的一些方向呢,我们做一个基本的交流和这个龙杰龙总。所以呢,这个辛苦一下龙总,完了以后呢,我们邀请了我们的一个 顾问呐,嗯,专家顾问啊,这个赵雷总啊,他这方面是,对对对,说一起交流一下,大概是这么一个情况。所以那个龙杰龙总能不能就你现在的一个 咱们现在的产品的开发,以及这个思路,还有这一些方面呢,能不能做一个简单的,一个,比如说三五分钟的介绍?咱们从这个边起个头,好不好?啊,可以,好的好的。目前呢,因为现在的市场啊比较比较那个,也比较大嘛。然后我们就现在就是说,以前的 SEO 转化到现在的 GEO 对吧?那么我们通过那个上次钱总展示那篇论文。得到了一个结论,就是说我们需要第一就是很很很很机械的去发文章给的,让大模型去搜,去收录。那么它大模型怎么收录呢?其实我们先把这个原理搞一下,就是 首先我们去去去搜一个内容的时候,我们去看大模型从哪些方面去去去到从哪些方面,那个去去抓它需要的内容,对吧?因为目前来说大模型它是训练的时候呢,它其实它也是,它的数据其实就终止到了它训练的那那个的一个数据数据段。那它需要回答我问问题的时候呢,它肯定是需要去调用其他的外部接口,比如说像 那个 Deepseek 它可能调用的是博查,豆包可能调用它内部的一些接口,包括博查的一些接口。混元呢,它可能调用的是它自己内部的一些私域上面的一些一些链接,对。然后他把这个内容抓到这些内容之后呢,再把这个内容提交到到大模型里面去分析、去总结,然后给出用户需要的一个答案。对,这是这是大模型抓起的一个一个一个流程。那基于这个流程呢?我们就就就做了一些工具。首先就是这个文章怎么获取,怎么规划,就是怎么把它的内容结构化,让它更好的去把这个内容给呈现出来,这是第一点。第二点呢,其实我们在分析的过程中呢,其实也发现,尤其是豆包和第,那个,尤其是豆包,它对于那个数据的来源,它特别喜欢去抓一些官网上的一些数据。对,然后呢在这个过程中呢,我我们就就做了一个那个自动复制官网的,就,其实也不能叫自动复制官网,就是做一个 官网的一个克隆,它不,当然了它不是简单一个克隆的一个一个一个一个一个功能啊,就是其实目前的整,那个叫法呢,就是叫 AI 克隆嘛。但是它的工作原理呢,其实就是说 我们先从他已已有的官网上把数据先拿到我们的数据本,那个我我们我们这边来。然后呢再再通过我们的一些工具去对数据加工,就我们的一些 agent 对数据做一些加工。然后继续加工之后呢,同时我们也去去那个生成一些关键字,去那个外网上,那个丰富这些数据源。拿到这些数据源之后呢,再把那个数据再整理,整理成我们需要的这个,不是我们,整理成大模型比较喜欢的这种结构结构化的一些文章,然后再再那个那个发 布到我们内部的,就是我们克隆出来的这个这个官网上来。对,这是这是第二个工具,就是这,对,不,但,但是我说的工具只是说一个,一些 agent 的一些总集啊,它对,我们不只是一个一个工具一个工具的做,我们是做一部分 agent 然后组装成为一个工,一个工具,这所谓的一个工具,其实也就是一个 agent 集合。对。目前呢,在做的是是这么两个两个事,然后第三个事呢,其实正在规划做的是那个我们怎么去监控大模型是不是把我们的内容,是否已经呈现出来了这么一件事,对。这个事的思路呢,其实我们是模拟着模拟的这个人,对我们提供的一些关键字,模拟的人,然后对那个大模型进行提问,提问得出来之后之后呢,就是他也会反馈一些数据给我们嘛,拿到数据之后呢,我们也会调用我们那个 agent 去做一些分析。然后得出我们一些报报告。但对目前的目,目前我们报告目前还是比较简单的,对。后续呢可能需要把一些竞品啊,这些报告也总结出来,然后提交到用户这边。对,然后后续可能就是跟,那个根据钱总这边的一个规划,我们可能还会把那个上次聊的那个数字人,把它加到我们这这这块来。对,但是这个呢,目前还没有,那个数字人模块我们是有了,但是还没有这么那那个智能,所以目前暂时可能先把这个先放一放。对,主要是主要是这么这么几件事。我的理解啊,我我我理解一下,就是我们现在做的关于针对模型,针对各个大模型喜好的一个。相对简单一点的这种,这个喜好的排查。之后呢,做了一些这个集合类的抓取工具,把这些抓取过来。在之后呢,做一些这种相关的,这。我不清,就是大概是这么几个内容吧,就现在我们做的工作,就开发的工作是吧?讲到历史。对,就是我们还要把,还有一些我发发布文章的这些工具,对。这些发布文章的工具是我们用 AI 做的吧?首先我我我我先先和您对齐一个,我们 AI 做的这么一个,我可能不太理解,可能我我我我我我可能不太理解你这个 AI 做是什么意思哈,就是这块。这一块的展现,因为我们肯定是要一个是报告嘛,就是给客户展现,另外一个是做一些文章,那这两个部分是用这个 我们调用一些这个模型来生成出来的吧?还是我们自己生成出来?报告就首先我们报告就是这是一,这是两个模块啊,一个是我们的报告生成模块,还有一个是文章发表模块,对。就是不能叫模块,就是工具嘛。其实我在我这边都统统称为工具,因为我的整个架构系统,它都是通过很多很多的工具,然后那个来做来做集合的。就是这样的好处呢,就是我们能快速的去适应,比如说大模型的一些那个算法,然后还有一个就是 要增加一个什么功能也比较方便,要减少个,那个去掉一些什么功能,替换什么功能也比较方便。对,所以我就说那个工具这一块,对。然后刚才您说到的这个。啊,报告其实是这样的,我们报告报告其实是给到一,那个我们的代理商这一块嘛,代理商这块的报告,它生成的方流程呢,其实是我们已经监测到我们那个 大模型的这一块的一个数据,然后通过数据这一块呢,我们会那个通过我们的代码,这个不是 AI 做的,是我们自己代码写的,对。来呈现出来。嗯。对。你好,OK。哎,那个赵磊啊,你看看你跟我们这个龙杰交流一下,关于在这个方面的一些这个相关内容呗。哎哎,赵总能听到吗?喂,周磊。哎,这会能听到我说话吗?哎,现在可以了现在可以了。啊,对,其实我刚才对对您刚才第最先提到这块比较感兴趣啊。就是我们在做这个技术优化的时候,我看您提到的第第第一块的话,实际上是你要在在网上抓很多的内容,然后固化到本地。然后还有那个,就是克隆网站的这块的功能。那这两块你你底层是怎么结合的呢?就是这个知识到本地会会对这块有什么样的那个 其实这块是这样的,就是第一就是我们去抓网站的时候,尤其是他网站一些产品,然后他还有网站的一些解决方案,对吧?因为我们目前做的是目前抓的这几个代理商呢,都是那个工业化的一些设备这一块,对。然后基于基于这个的话,目前的一个解决方案呢,其实就是我们先把这个官网上的一些数据,比如说他的公司的名称,然后地址、联系方式,这等等最基础的嘛,这是第一第一步,第一个模块,对吧?第二个模块呢,其实我我先把这个工具的流程给你简单的描述一下。可以。其实我们去抓这个网站的时候,其实我们输入的,拿到这个网址之后呢,我我们会提交,就是我我写了一个 agent。这个 Editor 的的的的的的的那个作用呢,其实就是去对这个官网,去它的官网的首页,去总结这个官网主要是去描述一个什么东西。对,然后拿到描述些什么东西之后呢,尤主要尤其就是它的主菜单嘛,对吧?然后它还有它主页的一些各个模块,因为主菜单上面可能有些模块没有,有些模块是有的,对。拿这个模块之后呢,我会有一个任务的一个 agent 去做这个任务的规划。比如说我抓这个,因为这个任务我我我要抓哪些内容,其实我是知道的。所以呢我会我会那个 agent 呢也会去抓着那个,去做一个任务的一个分配。比如说我要抓那个这个网站,我可能只只抓着它的那个新闻,然后还有那个解决方案,然后还有那个 产品这一块,对。然后呢这个任务规划出来之后呢,就是剩下的其实就是去调用我们的一些一些那个数据的一些,第,首先就类类似一个数据的,类似爬虫,但是比爬虫要稍微好一点。其实这个数据呢,拿下来之后呢,其实也会提交到大模型 里面去做分析的,就是是否满足我们的这个需求。对,这这个里面就有一个有个目前的,有个问题其实就是会受限一个那个大模型的一个上下文的一个一个一个一个卡壳。对,这个目前是解决了的,对。拿到这个东西之后呢,我们会生成一个本地的本地的一个知识库,其其实就是一个 Markdown 的一个文档。对,这是,就就是对这个官网做一个总结,对吧?然后内容我们也抓下来了,对。然后抓开之后呢,尤其是他这些图片什么的,我们也提交到我们的自己的那个CDN 或者是其他的存储存储设备上面去了。对,这是这是第一个第一个第第一个阶段。然后这个阶段完成之后呢?还有另一个 agent 其实就是做,我因为我们刚才已经做了一些,比如说是对新闻,那个每篇新闻可能就是一个一个知识库,或者是那个产品,它可能就是一个知识库,对。然后还有它解决犯可能就是知识库。然后我们会就会调用这些知识库的一些内容,会让那个大模型给我们生成。比如说我们就拿产品来说,因为产品比较比较好举例嘛。就产品的话,我们也会到网上那个就是调一些那个 NCP 啊等等的一些那个工具,然后在网上去搜 它这些相关的一些那个 这是那个那个数据来填充,它光,因为官网啊,现在对公,那个设备商的一些官网,它做的特别简单,所以我们需要把这个数据给补补充补充住,比较充分,对。嗯,对。拿到这个数据之后呢,然后这个这个也是,这个东西当然拿回来我们也是拿到大模型里面做一一一那个一定的分析嘛,对吧?然后分析,做,首先我们拿回来之后呢,其实第一步就是做数据的清洗,第二步就是让大模型来跟做,跟我们做一部分的分析嘛,分析完成之后,其实就最后一 步就是展成我们自己的那个内部格式。然后传到我们的后台上面去。对,就是就是抓抓抓官网的一个流程,对。那那这部分这知识在后续你去做那个,因为我我我理解了您的意思,其实在这块的话,一个是对于他网站的优化,另外一个就是对于他内部内容和结构的优化。那这些内容当你再去做营销或者做其 做那个可被大模型收入的时候,后续的动作你会做哪块,哪些呀?是这样,就是是,这这个就受,那个就就变成了,就就到我们第二个阶段嘛,其实第第三个阶段,对,就是这这个发文的阶段,对。然后发完阶段,我们这个数据不是已经已经提交到我们自己的那个服务器上来了嘛,对吧?然后然后,它要到服务器上来的话,我们会标注这个数据可能是有有有没有发发到,比如说是那个。比如说是什么排行榜网站啊,然后还有一些那个私,那个,都混音,比如说。什么什么那个那个那个叫叫那个混元刷的一些什么 腾讯的一些公众号啊等等这些这些地方去,对,我们都会做一些标注。这个标注当然是根据我们那个这个我们就是准备做的一个一个一个那个那个那个分析嘛,就是我们这篇文章可能发在哪,他可能就就需要做那个标注起来,就是拿到这个文章再去发。发到对应的网站上去,然后让大模型去抓的时候,就就快速的把我们呈现出来,对。啊,其实其实在这里面,你你你你发布的网站或什么,是根据不同的大模型,然后它它的检索引擎所内置的比较倾向的这种网站,然后你是通过量,然后让它来加剧它的收入,对吧?对对对,目前 可以说所有的 SEO 工具都是这么做的吧。就因为我们也是。问个题外话,然后您抓下来的这个数据,然后再通过这种形式去对外发文,那你拟定的官方文章和那个文章上的来源是怎么解决这个安全问题的?就是或者是法律风险的。其实是这样的,就是发布这个过程呢,其实是由人工做一个那个数数据的一个校校对的。其实这个我们发布文章之前都会给到那个,就上次钱总也提到过,就是我们会不会会有人专门针对这个这个文章做一个数据的校验。比如说这个数据,如果我们发上去了,这到到时候他做不 了,那不就那就那不就出出问题了嘛,对吧?所以这个东西是通过人来去去做一次那个校验的,对。嗯,哎,那这还有我还有个地方比较感兴趣啊。就是我们通过,就是我们跟,再去跟对应的客户再去谈这,比如说就是谈这个产品的时候,那一一种途径就是就是客户其实本来对这些相关的信息,他是有很,描述非常准确的这样的结,不管是结构化还是非结构化,他其实是有准确的数据给到咱们的。对,那我们前置去做这个 再去从它的官网上去抓这些信息,我们又又要经过。其实这个我我们都会遇到,其实你抓下来让大模型去做这个信息的整理或什么的,其实中间的过程还是很有挺多问题的。那那我们前置的这个动作和客户能直接提 提供这一块我我们做双向准备,是现在两个都兼容,就是做爬虫的那一块的核心的,就是或者说出发点在哪一块,考虑的出发点。是是这样,就是首先就如果客户提供我们数据之后,因为我刚才也提到我们建了一个,我们拿到数据之后会在本地建一个知识库,就是一个 文档嘛,对吧?然后这个这个的时候,如果客户提供给我们一些数据的时候,我们也是同样会建一个 Mac down 的一个知识库文档,就是对。然后建知识库文档之后,我们也会提,那写一些提的词,告诉大模型说我们这个课是那个权重会高很多,然后那个你 自己抓那个可能权重要低很多,对。就是做,目前来说是做了个简单的一个兼容。对,后续的话,因为根据根据业务和市场,这个在不断的发展,这个也是不断的在做调整吧。哦,明白了。哎,那那另外的一块就是,其实我我看了也有提到那个 AI 一键智能建站,这个的话其实是,就是传统工具加现在我们要优化的点相结合的一种方式。那这里面我们的核心,就是或者说技术壁垒在哪一块呢?或 怎怎么样描述这件事情?其实从技术的角度上来说哈,我们就是技术壁垒其实在做的过程中,目前碰到的,就比如说我们那个,你抓爬虫抓出来的数据特别大,然后你需要怎么去解决这个问题,这个当然就是一个思想上的一个巧妙的转换嘛,对吧?然后其次呢,其实还,其他的一些技术壁垒呢,其实就是如何去去告知大模型我们要的是哪些数据。其实就就写一些怎么巧妙的去优化一些提示词,对。明白了。然后还有一个就是,比如说如何去抓动态的网站。嗯,因为网站的话,因为如果是静态的网站都好说,对吧?如果是动态的话,就如何去来处理这个事。然后还有一个就是如何的用,那个缩短我们那个抓起的一个时间,尤尤其因为我前期开始做的时候也用了许多的开源的嘛。然后发现就是要不就抓,一抓一个网站,爬一个网站可能需要一个多小时、两个小时,这这也是有的,对。明白。哎,那我们的知知识库这块是,具体是那个用什么方案来,体系来去建设的?就是我我,就是我对咱们的那个底层 架构的支撑也比较感兴趣。目前呢,因为我们体量比较小,所以目前的这个知识库用的是 ChromeDB 这块来做一个数据的一个那个兼容嘛。然后其次,那个还有一个就是,一个还有一个就是如果我们抓这块的话,主要是采,嗯,目前呢可能就是一些铭文,就是我们就是把这个整理成一个格式化的,那个档的一个格式,格式化的一个文档。然后再再再结合那个大模型这一块,然后您说的这个知识库,其实就是,其实我知道你要问的是哪哪一块,可能怎么如何去解决那个大模型的一个一个上下文的一个问题嘛,对吧?其实这块的话其实就就是用那个,那那不是,那 Chrome DB 这一块来做的。哦,明白了。那那那对于我们抓下来的文章,我很,稍稍微细了一点。没事。就是我们的种子结构,或者说那个,它是有相关的因果关系的这样的数据。然后我们的知识库,是怎么处理这个结构的呢?这个是是这样,因为存这一块的话,首,其实就是类似一个 rag 的一个一个一个一个一个一个一个处理流程啊。就是内部的话,可能目前来说,由于那个上次钱总跟我聊过,所以这一块的话可能不太方便往外说,不好意思啊。明白明白,没关系。那我其实整体理解下来,我们其实我觉得这个这个这个理念或者靠近这个风口,嗯嗯,挺好的。然后其实我们结合了 应该是把一把一系列,然后其实我们的发展比较成熟的传统技术,然后通过这样的一个手段联合在一起完成了这样的一个那个既有优化的业务场景。我这样总结,您看对不对?啊,对,因为我们主要是因为我们,对 那个传统的开发,对互联网开发转过来的嘛,对吧?所以我们的思维一下子也不可能转这么快,对。所以呢大,还是的,还是按照这个,主要我们还是依依靠这个需求做一个推动。对,需求需要我们做什么,那么技术就就实现什么嘛,对吧?那我们如果解决不了的话,我们想办法去解决嘛。主要是这么一个一个一个流程,对。明白。嘿,那那个我们我们那个就是那个,有一个 AI 一键建站,这块更多的是为了优化它的官网吗?这 对,其实其实 AI 一键建站就是刚才我说那个第一个流程嘛。其实我首先就是我们抓官网的数据,第二呢其实我们做一些多多样化的一些模板,对吧?数据其实我们存在我们的自己数据库上面来了,其实就是通过通过第一阶段之后,然后第二个阶段就是说那个 AI 建站 的这块其实主要就是优化它之前的一些 SEO。 然后还有 GEO 的这些模板,这些工具,那我们做成一个一个工工工具化,一个模板化之后,我们就可以建立到其他的各个各各个行业嘛,对。明白。哎,那这个就是建站的这个本身的这个这个能力的话,是也是我们引用的那个成熟的技术,还是还是我们重新构建?这块整个那个,我把它叫克隆或者什么的,费效比怎么样?您觉得?目前的话,因为服务,现在因为这个供应商,我们就是服务这几个供应商的话,目前转化的效果还是就是我只说技术上的转化效果还是可以的。对,就是他的那个,这个应该,我理解我理解您的意思,就可能是应该我们能转换到他的,目前呢,就是说,我转换完成之后呢,其实就是就剩下的一个工作就是,把这个内容交给到那个我们的交互人员,然后跟那个客户去沟通这一块的一些,数据上的 一些,那个。一个对对数据的一一一个流程了,对。所以归,那个结构化啊,还有那他那个什么,他的那个模板结构化等等,这些东西基本上已经已经处理掉了,对。明白。还还还有一个小问题啊,就是在在我们后期这个这个发文的过程中,就是其实你肯定是向多个网站进行推送嘛。对。然后这个知识内容和知识含量的占比,然后和大模型的收入的频率,那这这样的一个其实是就是在未来,比如说假设啊我们还有 竞对,包括,甚至于说一些品牌公司也在不停的那个传递自己的信息。未来这个可能也是一个方向嘛,对吧?对。那这样的话,我们是懂,怎,我我们我们有没有考虑过这个未来,就是我们的知识质量的传递的 以及发布的这个数量,然后和他收入的这个整个的这个排名的情况,这这个这个整体的一个转化的比例,和我们有什么技术手段能保持这样的一个企企靠前的这样的一个一个程度呢?目前是是这样嘛,因为我们去做报告,去做用户报告的时候,就是我们去提交给代理商这个报告的时候呢,我们也是不断地去分析这个这个我们发的这篇文章,这发的,因为我们发的文章我们都有嘛,对吧?然后他可能会引用到哪篇文章,其实我们也可以拿得到,对吧?那那那我们我们就是拿到这个消息,拿到这些数据之后呢,其实我们也是在做分析,就是哪些,以后,因为模型这块它肯定也是不可能一成不变嘛,它肯定也是变的嘛。所以呢我们,就是这个流程本身就是我们,我我们就做这个过程中,其实也是一个附加的一个,其实说是附加吧,其实它也很重要,说从技术角度上来说,它就是一个附加的一个。一个一个一个一个一个一个结果,对。然后我们去分析它那个,比如说我们这篇文章采用的是哪些特点,它就,比如说它出现的概率就很高,那我们就知道那个大模型可能下一下一个规,它的优化的目标可能就是就是这么一个一一个一个方向,那我们就下篇文章可能就就这么来写,对。因为因为大模型对我们来说,不光是对我,我们来说,可能对于整个行业来说都是一个黑盒嘛,我们只能靠猜,目前来说是这样的。明白。那那后续包括我们,因为我看之前,不管是客户提供的数据,还是说我们抓取的数据,实际上你是在一个持续的 那个索引过程,然后来去入知识库,同时发文。那那知识的鲜活性以及大模型每一次收录,对知识的颠覆性的保证,那我们整个 rag 的过程。哦,这块的机制是怎么样?其实,RAG 它,我们是。是那个目前来说是,目目前来说是由人工,我们觉得需要他重新 rag,那我们再 rag,后续的话可能是通过一些技术手段,比如说,这这刚才说那个监控流程,通过那个来来来来处理,是不是需要重新 rag 了?对。目前来说我们是通过人工的,因为我们现在的那个体量还比较小嘛,对。一一下子也做不了那么多工具,对。明白明白,行。那那看这个,那个,谢哥你这边还有啥问题没?哎,这块那个,我是斌斌,我我打断一下,刚才那个赵总和 那龙总的问题就是这块通过,因为现在规模小,通过人工,能不能请这个龙杰稍微再描述一下,就是这个通过人工。这个这个工程的这个过程,就是你是什么样的人,然后怎么做,能够,我就是因为我这块可能不太懂啊,我就是希望 知道一下,就是是怎么操作的?是这样的,就是目前呢这块过程是由我们技术在处理,对,我我们就是,目前就是一个比较主观的一个过程了。对,就是觉得我们和钱总还有那个我们的哈林总,怎么讨论之后,还有其他一些技术讨论之后,觉得需要 rag 了。那我们就重新做那个 rag 的一个流程,对。这个就是以后如果说用户规模比较大的时候,这块会发生一个根本的变化吗?这个工作模式。这肯定是的呀,你通过人工来话,那那个都都没办法。没办法直接,就是如果工量太,做的太大的话,你你比如说你这个东西就没办法人工人工化了嘛,肯定如,我们技术主要就是解决这个问题的嘛,对吧?如果这个,对。那现在就是目前这个人工就是所包含的,就是你跟钱总也都在里边。也就是说还有你手下的工程师吗?就是说是哪些人要,就是这个人工现在是谁谁 谁在承担呢?目前这,那个出,主要操刀还是在我这边,对,就是我去点那个那个需要需要 rag 这一块,这个这个按钮是我来点的。但但是我们是根据报告这个这个来做的,不,也不是说我觉得需要点我就点,对,也不可能说我我我那个拍脑瓜我就去点,对。对,那那那也就是说,你你点之前,你是需要去人工阅读它的内容来决定是不是点吗?这个我们在交互的过程中就就会有这个这个产值。你你是,就是你是根据一个自动生成的阀值来判断,还是说你要去把这个客户的一些数据看一下,文章看一下,就是这个。这这个其实是这样,就是我们在交付的过程中,我们的交付工程师,就是我们的交付人员,也会我,给我们一些反馈。也不,我我也不可能说每一个文档文,那个报告我去看,那我 我其他事我也不用做了。对对对对对对对。那你说的交付人员是指上次咱们面谈的时候,钱总说的那些,对。就是就是那些客,就是客户服务的那些交付人员,是吗?对对对,就钱总说的那些。那就是说他们会第一反馈到你这里,然后呢相当于就是有可能需要人工处理的,对,然后你们再去判断。对对对,是的。那你说这个目前规模比较小,人工处理,将来规模大了呢,要转成技术处理。那你能够量化一下吗?就是多少个客户算是现阶段可以应付的?然后到什么规模?数量级的客户,就是必须是怎么样做的?目前来说呢,可能超过200个客户之后,我们就会上技术手段了。 OK,好的,行行,谢谢。好,谢谢。那个龙总,咱们现在的这个技术,就是在您这个板块的,大概有多少同事啊?目前全职的。目前就是两个,对。您一个,算您吗?算我在,对。因为我自己也写代码,对。还有一位同事是写代码的,对吧?对对对。啊,OK,明白。那这个产品现在是由您和这个钱总监着的,对吧?对对对。三个人做产品,对对对。三个人的产品组,对,完了以后其中这个有有有,以后其中有两两位是做技术的。啊,这样说。啊,对对对。因为体系比较小嘛,然后我们就扁平化了一些,对,可能职责分的就就没有这么清晰了。对。上次我跟那个陈总聊过这块的话,就是说我们也内部对了一下,大概需要6个人左右,根据不同的岗位来划分。对对对。大致是做哪些事情呢?首,都写代码的吗?对,我说的技术都是写代码的,对。然后可能有一位可能会去跟着那个做产品的,就因为产品规划到代码这层,还需要一个一个转换的一个过程嘛。没错,嗯,没错。就是剩下都是写代码的公司。对对对对对。都是准备放在北京对吧?对,是的。那您对于像这些,您如果将来计划招的6个,这个人员的画像描述。比如他有什么样的能力,大概工作多长时间,这些能不能简单的做一些这个规划一下?我们想听一听。是这样的,首先呢就是做算法这一块,就是跟跟大模型对接这块的一个人员呢,就是我我我希望他就是时间,'... 4122 more characters, + utterances: [ + [Object], [Object], [Object], [Object], [Object], [Object], + [Object], [Object], [Object], [Object], [Object], [Object], + [Object], [Object], [Object], [Object], [Object], [Object], + [Object], [Object], [Object], [Object], [Object], [Object], + [Object], [Object], [Object], [Object], [Object], [Object], + [Object], [Object], [Object], [Object], [Object], [Object], + [Object], [Object], [Object], [Object], [Object], [Object], + [Object], [Object], [Object], [Object], [Object], [Object], + [Object], [Object], [Object], [Object], [Object], [Object], + [Object], [Object], [Object], [Object], [Object], [Object], + [Object], [Object], [Object], [Object], [Object], [Object], + [Object], [Object], [Object], [Object], [Object], [Object], + [Object], [Object], [Object], [Object], [Object], [Object], + [Object], [Object], [Object], [Object], [Object], [Object], + [Object], [Object], [Object], [Object], [Object], [Object], + [Object], [Object], [Object], [Object], [Object], [Object], + [Object], [Object], [Object], [Object], + ... 121 more items + ], + job_key: '6f3397ab-782c-44a9-8e29-441a8b799457' + } +} +[incoming] GET / +[incoming] GET /main.js +[incoming] GET /health +[incoming] GET /doubao-asr-demo/ +[incoming] GET / +[incoming] GET /main.js +[incoming] GET /health +[incoming] POST /api/asr/submit +[submit] 转发至 https://openspeech.bytedance.com/api/v3/auc/bigmodel/submit { + hasAudioData: true, + audioDataLength: 10000996, + audioFormat: 'mp3', + audioCodec: 'mp3', + sampleRate: 44100, + bits: 16, + channel: 1, + hasAudioUrl: false, + modelName: 'bigmodel', + uid: 'AudioToText' +} { + request: { + model_name: 'bigmodel', + enable_itn: true, + enable_punc: true, + enable_ddc: true, + enable_speaker_info: true, + enable_channel_split: false, + show_utterances: true, + vad_segment: true, + sensitive_words_filter: '' + } +} +[submit] 响应 200 { + __upstream: { + status: 200, + ok: true, + headers: { + 'access-control-allow-credentials': 'true', + 'access-control-allow-headers': 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,X-Api-App-Key,X-Api-Access-Key,X-Api-Request-Id,X-Api-Resource-Id,X-Api-Sequence', + 'access-control-allow-methods': 'GET, POST, OPTIONS', + 'access-control-allow-origin': '*', + 'access-control-expose-headers': 'X-Tt-Logid,X-Api-Status-Code,X-Api-Message', + 'api-service-host': 'fdbd:dc03:15:362::77', + connection: 'keep-alive', + 'content-length': '2', + 'content-type': 'application/json; charset=utf-8', + date: 'Mon, 03 Nov 2025 03:54:27 GMT', + eagleid: '3da20f0517621420608884572e', + server: 'Tengine', + 'server-timing': 'inner; dur=319, cdn-cache;desc=MISS,edge;dur=2,origin;dur=6607', + 'timing-allow-origin': '*', + via: 'cache17.l2cn3051[6607,0], cache1.cn8616[6609,0]', + 'x-api-message': 'OK', + 'x-api-request-id': '817eb4a5-c4d3-4278-ab5a-df02a1962883', + 'x-api-status-code': '20000000', + 'x-tt-logid': '2025110311542052BCDAA18B06B2394A95', + 'x-tt-trace-host': '01be378494562453161574e6794e202125e922b3ae430a0adb65d90c0c339b035c3105eb11810764b6f69b3e57bebcd69b54ddfb1a0f47e90cc6f97a23d09dcd38291976b6fbf95b21b7d3e824b2d3a60177fe6db3750b3ea6e5655383a4928e09', + 'x-tt-trace-id': '00-25110311542052BCDAA18B06B2394A95-66044F5D74B28D99-00', + 'x-tt-trace-tag': 'id=03;cdn-cache=miss;type=dyn' + }, + rawText: '{}', + requestId: '817eb4a5-c4d3-4278-ab5a-df02a1962883' + }, + result: { job_key: '817eb4a5-c4d3-4278-ab5a-df02a1962883' }, + data: { job_key: '817eb4a5-c4d3-4278-ab5a-df02a1962883' } +} +[incoming] POST /api/asr/result +[result] 转发至 https://openspeech.bytedance.com/api/v3/auc/bigmodel/query { + hasAudioData: false, + audioDataLength: 0, + audioFormat: undefined, + audioCodec: undefined, + sampleRate: undefined, + bits: undefined, + channel: undefined, + hasAudioUrl: false, + modelName: undefined, + uid: undefined +} { request: undefined } +[result] 响应 200 { + audio_info: {}, + result: { text: '', job_key: '817eb4a5-c4d3-4278-ab5a-df02a1962883' }, + __upstream: { + status: 200, + ok: true, + headers: { + 'access-control-allow-credentials': 'true', + 'access-control-allow-headers': 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,X-Api-App-Key,X-Api-Access-Key,X-Api-Request-Id,X-Api-Resource-Id,X-Api-Sequence', + 'access-control-allow-methods': 'GET, POST, OPTIONS', + 'access-control-allow-origin': '*', + 'access-control-expose-headers': 'X-Tt-Logid,X-Api-Status-Code,X-Api-Message', + 'api-service-host': 'fdbd:dc02:1a:f12::53', + connection: 'keep-alive', + 'content-length': '38', + 'content-type': 'application/json; charset=utf-8', + date: 'Mon, 03 Nov 2025 03:54:27 GMT', + eagleid: '3da20f0517621420675877175e', + server: 'Tengine', + 'server-timing': 'inner; dur=15, cdn-cache;desc=MISS,edge;dur=2,origin;dur=41', + 'timing-allow-origin': '*', + via: 'cache65.l2cn3031[41,0], cache1.cn8616[43,0]', + 'x-api-message': '[Processing in progress] Handle response: Start Processing', + 'x-api-request-id': '817eb4a5-c4d3-4278-ab5a-df02a1962883', + 'x-api-status-code': '20000001', + 'x-tt-logid': '202511031154277987BE738C04C81291C3', + 'x-tt-trace-host': '01be378494562453161574e6794e2021254985a9355d9d14990565e0d4af335996374feb3fbf094551a123650f48f86a2ffa5571f7eeb783b2e64aa45100a85a375f70de0d1d23bac379022a0f109d78f76a783ec5f974322f2decf8301acceb29', + 'x-tt-trace-id': '00-2511031154277987BE738C04C81291C3-691F700138202E9B-00', + 'x-tt-trace-tag': 'id=03;cdn-cache=miss;type=dyn' + }, + rawText: '{"audio_info":{},"result":{"text":""}}', + requestId: '817eb4a5-c4d3-4278-ab5a-df02a1962883' + }, + data: { text: '', job_key: '817eb4a5-c4d3-4278-ab5a-df02a1962883' } +} +[incoming] POST /api/asr/result +[result] 转发至 https://openspeech.bytedance.com/api/v3/auc/bigmodel/query { + hasAudioData: false, + audioDataLength: 0, + audioFormat: undefined, + audioCodec: undefined, + sampleRate: undefined, + bits: undefined, + channel: undefined, + hasAudioUrl: false, + modelName: undefined, + uid: undefined +} { request: undefined } +[result] 响应 200 { + audio_info: {}, + result: { text: '', job_key: '817eb4a5-c4d3-4278-ab5a-df02a1962883' }, + __upstream: { + status: 200, + ok: true, + headers: { + 'access-control-allow-credentials': 'true', + 'access-control-allow-headers': 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,X-Api-App-Key,X-Api-Access-Key,X-Api-Request-Id,X-Api-Resource-Id,X-Api-Sequence', + 'access-control-allow-methods': 'GET, POST, OPTIONS', + 'access-control-allow-origin': '*', + 'access-control-expose-headers': 'X-Tt-Logid,X-Api-Status-Code,X-Api-Message', + 'api-service-host': 'fdbd:dc01:2a:332::13', + connection: 'keep-alive', + 'content-length': '38', + 'content-type': 'application/json; charset=utf-8', + date: 'Mon, 03 Nov 2025 03:54:30 GMT', + eagleid: '3da20f0517621420705566141e', + server: 'Tengine', + 'server-timing': 'inner; dur=13, cdn-cache;desc=MISS,edge;dur=2,origin;dur=32', + 'timing-allow-origin': '*', + via: 'cache17.l2cn3051[32,0], cache1.cn8616[34,0]', + 'x-api-message': '[Processing in progress] Handle response: Start Processing', + 'x-api-request-id': '817eb4a5-c4d3-4278-ab5a-df02a1962883', + 'x-api-status-code': '20000001', + 'x-tt-logid': '202511031154300F9CE64A63FE501DD3D0', + 'x-tt-trace-host': '01be378494562453161574e6794e202125790f77309939f9773572a8ac79de1b5e6446657189e186868d86ed3ff57160d14ce8bbdb7a8ffb17fa887ce564ec6b3fcde106edaaff108273ed3946933201630e2cedfd5e1c65f573347380360e7794', + 'x-tt-trace-id': '00-2511031154300F9CE64A63FE501DD3D0-437201790D510C1E-00', + 'x-tt-trace-tag': 'id=03;cdn-cache=miss;type=dyn' + }, + rawText: '{"audio_info":{},"result":{"text":""}}', + requestId: '817eb4a5-c4d3-4278-ab5a-df02a1962883' + }, + data: { text: '', job_key: '817eb4a5-c4d3-4278-ab5a-df02a1962883' } +} +[incoming] POST /api/asr/result +[result] 转发至 https://openspeech.bytedance.com/api/v3/auc/bigmodel/query { + hasAudioData: false, + audioDataLength: 0, + audioFormat: undefined, + audioCodec: undefined, + sampleRate: undefined, + bits: undefined, + channel: undefined, + hasAudioUrl: false, + modelName: undefined, + uid: undefined +} { request: undefined } +[result] 响应 200 { + audio_info: {}, + result: { text: '', job_key: '817eb4a5-c4d3-4278-ab5a-df02a1962883' }, + __upstream: { + status: 200, + ok: true, + headers: { + 'access-control-allow-credentials': 'true', + 'access-control-allow-headers': 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,X-Api-App-Key,X-Api-Access-Key,X-Api-Request-Id,X-Api-Resource-Id,X-Api-Sequence', + 'access-control-allow-methods': 'GET, POST, OPTIONS', + 'access-control-allow-origin': '*', + 'access-control-expose-headers': 'X-Tt-Logid,X-Api-Status-Code,X-Api-Message', + 'api-service-host': 'fdbd:dc03:15:362::77', + connection: 'keep-alive', + 'content-length': '38', + 'content-type': 'application/json; charset=utf-8', + date: 'Mon, 03 Nov 2025 03:54:33 GMT', + eagleid: '3da20f0517621420735266113e', + server: 'Tengine', + 'server-timing': 'inner; dur=18, cdn-cache;desc=MISS,edge;dur=13,origin;dur=112', + 'timing-allow-origin': '*', + via: 'cache1.l2cn3051[112,0], cache1.cn8616[125,0]', + 'x-api-message': '[Processing in progress] Handle response: Start Processing', + 'x-api-request-id': '817eb4a5-c4d3-4278-ab5a-df02a1962883', + 'x-api-status-code': '20000001', + 'x-tt-logid': '2025110311543337574864F227093C72B5', + 'x-tt-trace-host': '01be378494562453161574e6794e20212543ca5e344c42ea00ae78b2d1cb5a012262e9d3935ebd48e85a602a58a27c33e7b1863ce7bfddd583435df6e8caee9654e24be9078c08c34ea26c6d51a59a122d5819d5a4bf5c4ee225d06c117cde8cb2', + 'x-tt-trace-id': '00-25110311543337574864F227093C72B5-0C1490A017B8FECA-00', + 'x-tt-trace-tag': 'id=03;cdn-cache=miss;type=dyn' + }, + rawText: '{"audio_info":{},"result":{"text":""}}', + requestId: '817eb4a5-c4d3-4278-ab5a-df02a1962883' + }, + data: { text: '', job_key: '817eb4a5-c4d3-4278-ab5a-df02a1962883' } +} +[incoming] POST /api/asr/result +[result] 转发至 https://openspeech.bytedance.com/api/v3/auc/bigmodel/query { + hasAudioData: false, + audioDataLength: 0, + audioFormat: undefined, + audioCodec: undefined, + sampleRate: undefined, + bits: undefined, + channel: undefined, + hasAudioUrl: false, + modelName: undefined, + uid: undefined +} { request: undefined } +[result] 响应 200 { + audio_info: {}, + result: { text: '', job_key: '817eb4a5-c4d3-4278-ab5a-df02a1962883' }, + __upstream: { + status: 200, + ok: true, + headers: { + 'access-control-allow-credentials': 'true', + 'access-control-allow-headers': 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,X-Api-App-Key,X-Api-Access-Key,X-Api-Request-Id,X-Api-Resource-Id,X-Api-Sequence', + 'access-control-allow-methods': 'GET, POST, OPTIONS', + 'access-control-allow-origin': '*', + 'access-control-expose-headers': 'X-Tt-Logid,X-Api-Status-Code,X-Api-Message', + 'api-service-host': 'fdbd:dc02:28:802::30', + connection: 'keep-alive', + 'content-length': '38', + 'content-type': 'application/json; charset=utf-8', + date: 'Mon, 03 Nov 2025 03:54:37 GMT', + eagleid: '3da20f0517621420770061306e', + server: 'Tengine', + 'server-timing': 'inner; dur=17, cdn-cache;desc=MISS,edge;dur=3,origin;dur=73', + 'timing-allow-origin': '*', + via: 'cache56.l2cn3031[73,0], cache1.cn8616[76,0]', + 'x-api-message': '[Processing in progress] Handle response: Start Processing', + 'x-api-request-id': '817eb4a5-c4d3-4278-ab5a-df02a1962883', + 'x-api-status-code': '20000001', + 'x-tt-logid': '20251103115437DD287441AFC82800C712', + 'x-tt-trace-host': '01be378494562453161574e6794e20212559fcdc643538a90ca659e0df0f9bd6f16e954343b676b4d11edb46034c099d7a1e1a90b9e59934713d9a14790bdf8579c578a65791f7ec19d0c1ebe962e7d41b36a3b47e879e7761c03147c0a77688b3', + 'x-tt-trace-id': '00-251103115437DD287441AFC82800C712-1092EBAF63E832AD-00', + 'x-tt-trace-tag': 'id=03;cdn-cache=miss;type=dyn' + }, + rawText: '{"audio_info":{},"result":{"text":""}}', + requestId: '817eb4a5-c4d3-4278-ab5a-df02a1962883' + }, + data: { text: '', job_key: '817eb4a5-c4d3-4278-ab5a-df02a1962883' } +} +[incoming] POST /api/asr/result +[result] 转发至 https://openspeech.bytedance.com/api/v3/auc/bigmodel/query { + hasAudioData: false, + audioDataLength: 0, + audioFormat: undefined, + audioCodec: undefined, + sampleRate: undefined, + bits: undefined, + channel: undefined, + hasAudioUrl: false, + modelName: undefined, + uid: undefined +} { request: undefined } +[result] 响应 200 { + audio_info: {}, + result: { text: '', job_key: '817eb4a5-c4d3-4278-ab5a-df02a1962883' }, + __upstream: { + status: 200, + ok: true, + headers: { + 'access-control-allow-credentials': 'true', + 'access-control-allow-headers': 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,X-Api-App-Key,X-Api-Access-Key,X-Api-Request-Id,X-Api-Resource-Id,X-Api-Sequence', + 'access-control-allow-methods': 'GET, POST, OPTIONS', + 'access-control-allow-origin': '*', + 'access-control-expose-headers': 'X-Tt-Logid,X-Api-Status-Code,X-Api-Message', + 'api-service-host': 'fdbd:dc01:2a:110::26', + connection: 'keep-alive', + 'content-length': '38', + 'content-type': 'application/json; charset=utf-8', + date: 'Mon, 03 Nov 2025 03:54:41 GMT', + eagleid: '3da20f0517621420817652406e', + server: 'Tengine', + 'server-timing': 'inner; dur=24, cdn-cache;desc=MISS,edge;dur=2,origin;dur=64', + 'timing-allow-origin': '*', + via: 'cache1.l2cn3051[64,0], cache1.cn8616[66,0]', + 'x-api-message': '[Processing in progress] Handle response: Start Processing', + 'x-api-request-id': '817eb4a5-c4d3-4278-ab5a-df02a1962883', + 'x-api-status-code': '20000001', + 'x-tt-logid': '20251103115441CA10C1C350F7E8F18C24', + 'x-tt-trace-host': '01be378494562453161574e6794e2021255e1aef52d59e2f84355b3f83c770075c30186c3f2008cd14e91102e156b5b6c4eaa3b657e5b9a6885c40872f4c7b488bd7f0ec748cbebaf39dd676ba9c6725d2edb576e54dbe80bd757de574881be378', + 'x-tt-trace-id': '00-251103115441CA10C1C350F7E8F18C24-632CC5E529167459-00', + 'x-tt-trace-tag': 'id=03;cdn-cache=miss;type=dyn' + }, + rawText: '{"audio_info":{},"result":{"text":""}}', + requestId: '817eb4a5-c4d3-4278-ab5a-df02a1962883' + }, + data: { text: '', job_key: '817eb4a5-c4d3-4278-ab5a-df02a1962883' } +} +[incoming] POST /api/asr/result +[result] 转发至 https://openspeech.bytedance.com/api/v3/auc/bigmodel/query { + hasAudioData: false, + audioDataLength: 0, + audioFormat: undefined, + audioCodec: undefined, + sampleRate: undefined, + bits: undefined, + channel: undefined, + hasAudioUrl: false, + modelName: undefined, + uid: undefined +} { request: undefined } +[result] 响应 200 { + audio_info: {}, + result: { text: '', job_key: '817eb4a5-c4d3-4278-ab5a-df02a1962883' }, + __upstream: { + status: 200, + ok: true, + headers: { + 'access-control-allow-credentials': 'true', + 'access-control-allow-headers': 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,X-Api-App-Key,X-Api-Access-Key,X-Api-Request-Id,X-Api-Resource-Id,X-Api-Sequence', + 'access-control-allow-methods': 'GET, POST, OPTIONS', + 'access-control-allow-origin': '*', + 'access-control-expose-headers': 'X-Tt-Logid,X-Api-Status-Code,X-Api-Message', + 'api-service-host': 'fdbd:dc03:14:d04::34', + connection: 'keep-alive', + 'content-length': '38', + 'content-type': 'application/json; charset=utf-8', + date: 'Mon, 03 Nov 2025 03:54:45 GMT', + eagleid: '3da20f0517621420853835804e', + server: 'Tengine', + 'server-timing': 'inner; dur=23, cdn-cache;desc=MISS,edge;dur=0,origin;dur=102', + 'timing-allow-origin': '*', + via: 'cache1.cn8616[102,0]', + 'x-api-message': '[Processing in progress] Handle response: Start Processing', + 'x-api-request-id': '817eb4a5-c4d3-4278-ab5a-df02a1962883', + 'x-api-status-code': '20000001', + 'x-tt-logid': '202511031154451727C9161BA71D37F690', + 'x-tt-trace-host': '0133cfb7e6056b87307b552c2d34411976af069e924330793ef51e1fb86dacdeaa4b2fe0f399ca9b1405b276f8709b9adb41787afe0ba07b4fb37914df4073ba64f57a6e059066c6f52156d814dfee75ff07f805fc7a91a1d49ba585003f805f3b', + 'x-tt-trace-id': '00-2511031154451727C9161BA71D37F690-55AFC7CB0DFF0C04-00', + 'x-tt-trace-tag': 'id=03;cdn-cache=miss;type=dyn' + }, + rawText: '{"audio_info":{},"result":{"text":""}}', + requestId: '817eb4a5-c4d3-4278-ab5a-df02a1962883' + }, + data: { text: '', job_key: '817eb4a5-c4d3-4278-ab5a-df02a1962883' } +} +[incoming] POST /api/asr/result +[result] 转发至 https://openspeech.bytedance.com/api/v3/auc/bigmodel/query { + hasAudioData: false, + audioDataLength: 0, + audioFormat: undefined, + audioCodec: undefined, + sampleRate: undefined, + bits: undefined, + channel: undefined, + hasAudioUrl: false, + modelName: undefined, + uid: undefined +} { request: undefined } +[result] 响应 200 { + audio_info: {}, + result: { text: '', job_key: '817eb4a5-c4d3-4278-ab5a-df02a1962883' }, + __upstream: { + status: 200, + ok: true, + headers: { + 'access-control-allow-credentials': 'true', + 'access-control-allow-headers': 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,X-Api-App-Key,X-Api-Access-Key,X-Api-Request-Id,X-Api-Resource-Id,X-Api-Sequence', + 'access-control-allow-methods': 'GET, POST, OPTIONS', + 'access-control-allow-origin': '*', + 'access-control-expose-headers': 'X-Tt-Logid,X-Api-Status-Code,X-Api-Message', + 'api-service-host': 'fdbd:dc02:29:102::39', + connection: 'keep-alive', + 'content-length': '38', + 'content-type': 'application/json; charset=utf-8', + date: 'Mon, 03 Nov 2025 03:54:49 GMT', + eagleid: '3da20f0517621420889968251e', + server: 'Tengine', + 'server-timing': 'inner; dur=17, cdn-cache;desc=MISS,edge;dur=0,origin;dur=63', + 'timing-allow-origin': '*', + via: 'cache1.cn8616[63,0]', + 'x-api-message': '[Processing in progress] Handle response: Start Processing', + 'x-api-request-id': '817eb4a5-c4d3-4278-ab5a-df02a1962883', + 'x-api-status-code': '20000001', + 'x-tt-logid': '2025110311544984542C9E3133A318DDBC', + 'x-tt-trace-host': '0133cfb7e6056b87307b552c2d3441197677a2c98b8c1876a511b5fc0558c519332c7248ef3c0db082fe262b9eb0889a3097cff7b1654928f0d34873ef5ad6378c95740b8dfd5c6b9f45743d0a973ce4a9735e6730d877fb0ad1cfc7e7badf04cb', + 'x-tt-trace-id': '00-25110311544984542C9E3133A318DDBC-0675D03D28113890-00', + 'x-tt-trace-tag': 'id=03;cdn-cache=miss;type=dyn' + }, + rawText: '{"audio_info":{},"result":{"text":""}}', + requestId: '817eb4a5-c4d3-4278-ab5a-df02a1962883' + }, + data: { text: '', job_key: '817eb4a5-c4d3-4278-ab5a-df02a1962883' } +} +[incoming] POST /api/asr/result +[result] 转发至 https://openspeech.bytedance.com/api/v3/auc/bigmodel/query { + hasAudioData: false, + audioDataLength: 0, + audioFormat: undefined, + audioCodec: undefined, + sampleRate: undefined, + bits: undefined, + channel: undefined, + hasAudioUrl: false, + modelName: undefined, + uid: undefined +} { request: undefined } +[result] 响应 200 { + audio_info: {}, + result: { text: '', job_key: '817eb4a5-c4d3-4278-ab5a-df02a1962883' }, + __upstream: { + status: 200, + ok: true, + headers: { + 'access-control-allow-credentials': 'true', + 'access-control-allow-headers': 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,X-Api-App-Key,X-Api-Access-Key,X-Api-Request-Id,X-Api-Resource-Id,X-Api-Sequence', + 'access-control-allow-methods': 'GET, POST, OPTIONS', + 'access-control-allow-origin': '*', + 'access-control-expose-headers': 'X-Tt-Logid,X-Api-Status-Code,X-Api-Message', + 'api-service-host': 'fdbd:dc01:2a:231::16', + connection: 'keep-alive', + 'content-length': '38', + 'content-type': 'application/json; charset=utf-8', + date: 'Mon, 03 Nov 2025 03:54:52 GMT', + eagleid: '3da20f0517621420920151458e', + server: 'Tengine', + 'server-timing': 'inner; dur=14, cdn-cache;desc=MISS,edge;dur=6,origin;dur=67', + 'timing-allow-origin': '*', + via: 'cache75.l2cn3031[67,0], cache1.cn8616[73,0]', + 'x-api-message': '[Processing in progress] Handle response: Start Processing', + 'x-api-request-id': '817eb4a5-c4d3-4278-ab5a-df02a1962883', + 'x-api-status-code': '20000001', + 'x-tt-logid': '20251103115452A0A4BE37CAC69FF42A6C', + 'x-tt-trace-host': '01be378494562453161574e6794e2021257b6a7b447e36a94086686c9a3888f1b6683ddd32e10b50baed62c05045a67363dd072dac90408acc0c6308a6158c8a677a8369a280c777d4a7c361c829be8d54055265eae6c28f41ad3ced71c13cf968', + 'x-tt-trace-id': '00-251103115452A0A4BE37CAC69FF42A6C-3798EBA6262F63B2-00', + 'x-tt-trace-tag': 'id=03;cdn-cache=miss;type=dyn' + }, + rawText: '{"audio_info":{},"result":{"text":""}}', + requestId: '817eb4a5-c4d3-4278-ab5a-df02a1962883' + }, + data: { text: '', job_key: '817eb4a5-c4d3-4278-ab5a-df02a1962883' } +} +[incoming] POST /api/asr/result +[result] 转发至 https://openspeech.bytedance.com/api/v3/auc/bigmodel/query { + hasAudioData: false, + audioDataLength: 0, + audioFormat: undefined, + audioCodec: undefined, + sampleRate: undefined, + bits: undefined, + channel: undefined, + hasAudioUrl: false, + modelName: undefined, + uid: undefined +} { request: undefined } +[result] 响应 200 { + audio_info: { duration: 312527 }, + result: { + additions: { duration: '312527' }, + text: '能听到吗?哎,你好你好。哎,你好。是这个龙总,对吧?对,我是龙杰,啊,对。哎,董洁你好,我我也在线了,我是吴丽丽。啊,丽丽。叶总好。 OK 那个,磊子。哎,我在啦。哎哎哎,好,那个就是我们今天主要的这个会议啊,这人都齐了,就主要就是 就针对咱们这个相关的产品和一些技术的一些方向呢,我们做一个基本的交流和这个龙杰龙总。所以呢这个辛苦一下龙总,完了以后呢我们邀请了我们的一个顾问呐,专家顾问啊,这个 赵雷总啊,他这个这方面是,对对对,说一起交流一下,大概是这么一个情况。所以那个龙杰龙总,能不能就你现在的一个,咱们现在的产品的开发。以及这个思路,还有这些方面呢,能不能做一个简单的,一个,比如说三五分钟的介绍,咱们从这个边起个头,好不好?可以,好的好的。目前呢,因为现在的市场啊比较比较那个,也比较大嘛。然后我们就现在就是说,以前的 SEO 转化到现在的 GEO 对吧?那么我们通过那个上次钱总展示那篇论文,得到了一个结论,就是说我们需要第一就是很很很很机械的去发文章给的,让大模型去搜,去收录。那么它大模型怎么收录呢?其实我们先把这个原理搞一下,就是 首先我们去去去搜一个内容的时候,我们去看大模型从哪些方面去去去到从哪些方面,那个去去抓它需要的内容,对吧?因为目前来说,大模型它是训练的时候呢,它其实它也是,它的数据其实就终止到了它训练那那个的一个数据数据段。那他需要回答我们问问题的时候呢,他肯定是需要去调用其他的外部接口。比如说像那个 Dubbo,他可能调用的是博查,豆包可能调用他内部的一些接口,包括博查的一些接口。混元呢,他可能调用的是他自己内部的一些私域上面的一些一些链接,对。然后他把这个内容抓到这些内容之后呢,再把这个内容提交到到大模型里面去分析,去总结,然后 给出用户需要的一个答案。对,这是这是大模型抓起的一个一个一个流程。那基于这个流程呢?我们就就就做了一些工具。首先就是这个文章怎么获取,怎么规划,就是怎么把它的内容结构化,让它更好的去把这个内容给呈现出来,这是第一点。第二点呢,其实我们在分析的过程中呢,其实也发现,尤其是豆包和第,那个,尤其是豆包,它对于那个数据的来源,它特别喜欢去抓一些官网上的一些数据。对,然后呢在这个过程中呢,我我们就就做了一个那个自动复制官网的,就,其实也不能叫自动复制官网,就是做一个 官网的一个克隆,那它不,当然了它不是简单一个克隆的一个一个一个一个一个功能啊,就是其实目前的整,那个叫法呢,就是叫 AI 克隆嘛。但是它的工作原理呢,其实就是说 我们先从他已已有的官网上把数据先拿到我们的数据本,那个我我们我们这边来。然后呢再再通过我们的一些工具去对数据加工,就我们的一些 agent 对数据做一些加工。然后继续加工之后呢,同时我们也去去那个生成一些关键字,去那个外保上,那个丰富这些数据源。拿到这些数据源之后呢,再把那个数据再整理,整理成我们需要的这个,不是我们,整理成大模型比较喜欢的这种结构结构化的一些文章,然后再再那个那个发布 到我们内部的,就是我们克隆出来的这个这个官网上来。对,这是这是第二个工具,就是这,对,不,但,但是我说的工具只是说一个,一些 agent 的一些总集啊,他对,我们不只是一个一个工具一个工具的做,我们是做一部分 agent 然后组装成为一个工,一个工,这所谓的一个工具,其实也就是一个 agent 集合。对。目前呢,在做的是是这么两个两个事,然后第三个事呢,其实正在规划做的是那个我们怎么去监控大模型是不是把我们的内容,是否已经呈现出来了这么一件事,对。这个事的思路呢,其实我们是模拟着模拟的这个人,对我们提供的一些关键字,模拟的人,然后对那个大模型进行提问,提问得出来之后之后呢,就是', + utterances: [ + [Object], [Object], [Object], + [Object], [Object], [Object], + [Object], [Object], [Object], + [Object], [Object], [Object], + [Object], [Object], [Object], + [Object], [Object], [Object], + [Object], [Object], [Object], + [Object], [Object], [Object], + [Object], [Object], [Object], + [Object] + ], + job_key: '817eb4a5-c4d3-4278-ab5a-df02a1962883' + }, + __upstream: { + status: 200, + ok: true, + headers: { + 'access-control-allow-credentials': 'true', + 'access-control-allow-headers': 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,X-Api-App-Key,X-Api-Access-Key,X-Api-Request-Id,X-Api-Resource-Id,X-Api-Sequence', + 'access-control-allow-methods': 'GET, POST, OPTIONS', + 'access-control-allow-origin': '*', + 'access-control-expose-headers': 'X-Tt-Logid,X-Api-Status-Code,X-Api-Message', + 'api-service-host': 'fdbd:dc03:14:228::30', + connection: 'keep-alive', + 'content-encoding': 'br', + 'content-type': 'application/json; charset=utf-8', + date: 'Mon, 03 Nov 2025 03:54:55 GMT', + eagleid: '3da20f0517621420951231459e', + server: 'Tengine', + 'server-timing': 'inner; dur=33, cdn-cache;desc=MISS,edge;dur=2,origin;dur=109', + 'timing-allow-origin': '*', + 'transfer-encoding': 'chunked', + vary: 'Accept-Encoding', + via: 'cache75.l2cn3031[109,0], cache1.cn8616[111,0]', + 'x-api-message': 'OK', + 'x-api-request-id': '817eb4a5-c4d3-4278-ab5a-df02a1962883', + 'x-api-status-code': '20000000', + 'x-tt-logid': '2025110311545559C8323CDE40BD468A54', + 'x-tt-trace-host': '01be378494562453161574e6794e20212521c089276a590b8b7c2d02a3ee016646fe3af4d8c897da4c597b6fd2464dc2837c95b305d4ebdcac1025148197598a87d30cc01346b8cbbc9976f18629a880ddc7b547c38a75c433245f6c09cc28790d', + 'x-tt-trace-id': '00-25110311545559C8323CDE40BD468A54-3644362D65AE9E07-00', + 'x-tt-trace-tag': 'id=03;cdn-cache=miss;type=dyn' + }, + rawText: '{"audio_info":{"duration":312527},"result":{"additions":{"duration":"312527"},"text":"能听到吗?哎,你好你好。哎,你好。是这个龙总,对吧?对,我是龙杰,啊,对。哎,董洁你好,我我也在线了,我是吴丽丽。啊,丽丽。叶总好。 OK 那个,磊子。哎,我在啦。哎哎哎,好,那个就是我们今天主要的这个会议啊,这人都齐了,就主要就是 就针对咱们这个相关的产品和一些技术的一些方向呢,我们做一个基本的交流和这个龙杰龙总。所以呢这个辛苦一下龙总,完了以后呢我们邀请了我们的一个顾问呐,专家顾问啊,这个 赵雷总啊,他这个这方面是,对对对,说一起交流一下,大概是这么一个情况。所以那个龙杰龙总,能不能就你现在的一个,咱们现在的产品的开发。以及这个思路,还有这些方面呢,能不能做一个简单的,一个,比如说三五分钟的介绍,咱们从这个边起个头,好不好?可以,好的好的。目前呢,因为现在的市场啊比较比较那个,也比较大嘛。然后我们就现在就是说,以前的 SEO 转化到现在的 GEO 对吧?那么我们通过那个上次钱总展示那篇论文,得到了一个结论,就是说我们需要第一就是很很很很机械的去发文章给的,让大模型去搜,去收录。那么它大模型怎么收录呢?其实我们先把这个原理搞一下,就是 首先我们去去去搜一个内容的时候,我们去看大模型从哪些方面去去去到从哪些方面,那个去去抓它需要的内容,对吧?因为目前来说,大模型它是训练的时候呢,它其实它也是,它的数据其实就终止到了它训练那那个的一个数据数据段。那他需要回答我们问问题的时候呢,他肯定是需要去调用其他的外部接口。比如说像那个 Dubbo,他可能调用的是博查,豆包可能调用他内部的一些接口,包括博查的一些接口。混元呢,他可能调用的是他自己内部的一些私域上面的一些一些链接,对。然后他把这个内容抓到这些内容之后呢,再把这个内容提交到到大模型里面去分析,去总结,然后 给出用户需要的一个答案。对,这是这是大模型抓起的一个一个一个流程。那基于这个流程呢?我们就就就做了一些工具。首先就是这个文章怎么获取,怎么规划,就是怎么把它的内容结构化,让它更好的去把这个内容给呈现出来,这是第一点。第二点呢,其实我们在分析的过程中呢,其实也发现,尤其是豆包和第,那个,尤其是豆包,它对于那个数据的来源,它特别喜欢去抓一些官网上的一些数据。对,然后呢在这个过程中呢,我我们就就做了一个那个自动复制官网的,就,其实也不能叫自动复制官网,就是做一个 官网的一个克隆,那它不,当然了它不是简单一个克隆的一个一个一个一个一个功能啊,就是其实目前的整,那个叫法呢,就是叫 AI 克隆嘛。但是它的工作原理呢,其实就是说 我们先从他已已有的官网上把数据先拿到我们的数据本,那个我我们我们这边来。然后呢再再通过我们的一些工具去对数据加工,就我们的一些 agent 对数据做一些加工。然后继续加工之后呢,同时我们也去去那个生成一些关键字,去那个外保上,那个丰富这些数据源。拿到这些数据源之后呢,再把那个数据再整理,整理成我们需要的这个,不是我们,整理成大模型比较喜欢的这种结构结构化的一些文章,然后再再那个那个发布 到我们内部的,就是我们克隆出来的这个这个官网上来。对,这是这是第二个工具,就是这,对,不,但,但是我说的工具只是说一个,一些 agent 的一些总集啊,他对,我们不只是一个一个工具一个工具的做,我们是做一部分 agent 然后组装成为一个工,一个工,这所谓的一个工具,其实也就是一个 agent 集合。对。目前呢,在做的是是这么两个两个事,然后第三个事呢,其实正在规划做的是那个我们怎么去监控大模型是不是把我们的内容,是否已经呈现出来了这么一件事,对。这个事的思路呢,其实我们是模拟着模拟的这个人,对我们提供的一些关键字,模拟的人,然后对那个大模型进行提问,提问得出来之后之后呢,就是","utterances":[{"additions":{"speaker":"1"},"end_time":880,"start_time":40,"text":"能听到吗?","words":[{"confidence":0,"end_time":280,"start_time":40,"text":"能"},{"confidence":0,"end_time":440,"start_time":280,"text":"听"},{"confidence":0,"end_time":600,"start_time":440,"text":"到"},{"confidence":0,"end_time":880,"start_time":600,"text":"吗"}]},{"additions":{"speaker":"2"},"end_time":4230,"start_time":2670,"text":"哎,你好你好。","words":[{"confidence":0,"end_time":2750,"start_time":2670,"text":"哎"},{"confidence":0,"end_time":3390,"start_time":3110,"text":"你"},{"confidence":0,"end_time":3670,"start_time":3390,"text":"好"},{"confidence":0,"end_time":3830,"start_time":3710,"text":"你"},{"confidence":0,"end_time":4230,"start_time":3830,"text":"好"}]},{"additions":{"speaker":"2"},"end_time":12160,"start_time":6280,"text":"哎,你好。是这个龙总,对吧?对,我是龙杰,啊,对。","words":[{"confidence":0,"end_time":6360,"start_time":6280,"text":"哎"},{"confidence":0,"end_time":6600,"start_time":6440,"text":"你"},{"confidence":0,"end_time":6960,"start_time":6600,"text":"好"},{"confidence":0,"end_time":9640,"start_time":9080,"text":"是"},{"confidence":0,"end_time":9920,"start_time":9640,"text":"这"},{"confidence":0,"end_time":10120,"start_time":9920,"text":"个"},{"confidence":0,"end_time":10320,"start_time":10120,"text":"龙"},{"confidence":0,"end_time":10560,"start_time":10360,"text":"总"},{"confidence":0,"end_time":10640,"start_time":10600,"text":"对"},{"confidence":0,"end_time":10760,"start_time":10640,"text":"吧"},{"confidence":0,"end_time":11120,"start_time":11000,"text":"对"},{"confidence":0,"end_time":11200,"start_time":11120,"text":"我"},{"confidence":0,"end_time":11320,"start_time":11200,"text":"是"},{"confidence":0,"end_time":11400,"start_time":11360,"text":"龙"},{"confidence":0,"end_time":11600,"start_time":11520,"text":"杰"},{"confidence":0,"end_time":11840,"start_time":11680,"text":"啊"},{"confidence":0,"end_time":12160,"start_time":11840,"text":"对"}]},{"additions":{"speaker":"3"},"end_time":19390,"start_time":13350,"text":"哎,董洁你好,我我也在线了,我是吴丽丽。啊,丽丽。叶总好。","words":[{"confidence":0,"end_time":13470,"start_time":13350,"text":"哎"},{"confidence":0,"end_time":13790,"start_time":13750,"text":"董"},{"confidence":0,"end_time":14030,"start_time":13950,"text":"洁"},{"confidence":0,"end_time":14270,"start_time":14110,"text":"你"},{"confidence":0,"end_time":14510,"start_time":14270,"text":"好"},{"confidence":0,"end_time":15030,"start_time":14670,"text":"我"},{"confidence":0,"end_time":15350,"start_time":15110,"text":"我"},{"confidence":0,"end_time":15510,"start_time":15350,"text":"也"},{"confidence":0,"end_time":15750,"start_time":15510,"text":"在"},{"confidence":0,"end_time":15950,"start_time":15750,"text":"线"},{"confidence":0,"end_time":16150,"start_time":15950,"text":"了"},{"confidence":0,"end_time":16310,"start_time":16150,"text":"我"},{"confidence":0,"end_time":16550,"start_time":16310,"text":"是"},{"confidence":0,"end_time":16670,"start_time":16590,"text":"吴"},{"confidence":0,"end_time":16870,"start_time":16830,"text":"丽"},{"confidence":0,"end_time":17030,"start_time":16990,"text":"丽"},{"confidence":0,"end_time":17430,"start_time":17310,"text":"啊"},{"confidence":0,"end_time":17630,"start_time":17590,"text":"丽"},{"confidence":0,"end_time":17750,"start_time":17710,"text":"丽"},{"confidence":0,"end_time":18870,"start_time":18790,"text":"叶"},{"confidence":0,"end_time":19030,"start_time":18950,"text":"总"},{"confidence":0,"end_time":19390,"start_time":19190,"text":"好"}]},{"additions":{"speaker":"2"},"end_time":22200,"start_time":21320,"text":" OK","words":[{"confidence":0,"end_time":-1,"start_time":-1,"text":" "},{"confidence":0,"end_time":22200,"start_time":21320,"text":"OK"}]},{"additions":{"speaker":"2"},"end_time":25160,"start_time":23520,"text":" 那个,磊子。","words":[{"confidence":0,"end_time":-1,"start_time":-1,"text":" "},{"confidence":0,"end_time":23720,"start_time":23520,"text":"那"},{"confidence":0,"end_time":24120,"start_time":23720,"text":"个"},{"confidence":0,"end_time":24920,"start_time":24880,"text":"磊"},{"confidence":0,"end_time":25160,"start_time":25080,"text":"子"}]},{"additions":{"speaker":"2"},"end_time":39120,"start_time":27840,"text":"哎,我在啦。哎哎哎,好,那个就是我们今天主要的这个会议啊,这人都齐了,就主要就是","words":[{"confidence":0,"end_time":27920,"start_time":27840,"text":"哎"},{"confidence":0,"end_time":28200,"start_time":28000,"text":"我"},{"confidence":0,"end_time":28440,"start_time":28200,"text":"在"},{"confidence":0,"end_time":28560,"start_time":28480,"text":"啦"},{"confidence":0,"end_time":29320,"start_time":29240,"text":"哎"},{"confidence":0,"end_time":29600,"start_time":29520,"text":"哎"},{"confidence":0,"end_time":29800,"start_time":29720,"text":"哎"},{"confidence":0,"end_time":30600,"start_time":30240,"text":"好"},{"confidence":0,"end_time":31160,"start_time":30920,"text":"那"},{"confidence":0,"end_time":31480,"start_time":31160,"text":"个"},{"confidence":0,"end_time":32120,"start_time":31800,"text":"就"},{"confidence":0,"end_time":32560,"start_time":32120,"text":"是"},{"confidence":0,"end_time":33280,"start_time":33040,"text":"我"},{"confidence":0,"end_time":33440,"start_time":33280,"text":"们"},{"confidence":0,"end_time":33680,"start_time":33440,"text":"今"},{"confidence":0,"end_time":33920,"start_time":33680,"text":"天"},{"confidence":0,"end_time":34280,"start_time":34000,"text":"主"},{"confidence":0,"end_time":34440,"start_time":34280,"text":"要"},{"confidence":0,"end_time":34680,"start_time":34440,"text":"的"},{"confidence":0,"end_time":34920,"start_time":34680,"text":"这"},{"confidence":0,"end_time":35240,"start_time":34920,"text":"个"},{"confidence":0,"end_time":36360,"start_time":36000,"text":"会"},{"confidence":0,"end_time":36600,"start_time":36360,"text":"议"},{"confidence":0,"end_time":36800,"start_time":36640,"text":"啊"},{"confidence":0,"end_time":37280,"start_time":37160,"text":"这"},{"confidence":0,"end_time":37520,"start_time":37320,"text":"人"},{"confidence":0,"end_time":37720,"start_time":37520,"text":"都"},{"confidence":0,"end_time":37920,"start_time":37720,"text":"齐"},{"confidence":0,"end_time":38080,"start_time":37920,"text":"了"},{"confidence":0,"end_time":38320,"start_time":38200,"text":"就"},{"confidence":0,"end_time":38480,"start_time":38360,"text":"主"},{"confidence":0,"end_time":38600,"start_time":38480,"text":"要"},{"confidence":0,"end_time":38800,"start_time":38600,"text":"就"},{"confidence":0,"end_time":39120,"start_time":38800,"text":"是"}]},{"additions":{"speaker":"2"},"end_time":55980,"start_time":39710,"text":"就针对咱们这个相关的产品和一些技术的一些方向呢,我们做一个基本的交流和这个龙杰龙总。所以呢这个辛苦一下龙总,完了以后呢我们邀请了我们的一个顾问呐,专家顾问啊,这个","words":[{"confidence":0,"end_time":39860,"start_time":39710,"text":"就"},{"confidence":0,"end_time":40020,"start_time":39860,"text":"针"},{"confidence":0,"end_time":40180,"start_time":40020,"text":"对"},{"confidence":0,"end_time":40340,"start_time":40180,"text":"咱"},{"confidence":0,"end_time":40500,"start_time":40340,"text":"们"},{"confidence":0,"end_time":40660,"start_time":40500,"text":"这"},{"confidence":0,"end_time":40900,"start_time":40660,"text":"个"},{"confidence":0,"end_time":41180,"start_time":40900,"text":"相"},{"confidence":0,"end_time":41340,"start_time":41180,"text":"关"},{"confidence":0,"end_time":41540,"start_time":41340,"text":"的"},{"confidence":0,"end_time":41780,"start_time":41540,"text":"产"},{"confidence":0,"end_time":42060,"start_time":41780,"text":"品"},{"confidence":0,"end_time":42940,"start_time":42620,"text":"和"},{"confidence":0,"end_time":43100,"start_time":42940,"text":"一"},{"confidence":0,"end_time":43300,"start_time":43100,"text":"些"},{"confidence":0,"end_time":43540,"start_time":43300,"text":"技"},{"confidence":0,"end_time":43660,"start_time":43540,"text":"术"},{"confidence":0,"end_time":43820,"start_time":43660,"text":"的"},{"confidence":0,"end_time":43940,"start_time":43820,"text":"一"},{"confidence":0,"end_time":44060,"start_time":43940,"text":"些"},{"confidence":0,"end_time":44260,"start_time":44060,"text":"方"},{"confidence":0,"end_time":44380,"start_time":44260,"text":"向"},{"confidence":0,"end_time":44580,"start_time":44420,"text":"呢"},{"confidence":0,"end_time":44700,"start_time":44580,"text":"我"},{"confidence":0,"end_time":44820,"start_time":44700,"text":"们"},{"confidence":0,"end_time":44980,"start_time":44820,"text":"做"},{"confidence":0,"end_time":45140,"start_time":45020,"text":"一"},{"confidence":0,"end_time":45340,"start_time":45140,"text":"个"},{"confidence":0,"end_time":45540,"start_time":'... 84051 more characters, + requestId: '817eb4a5-c4d3-4278-ab5a-df02a1962883' + }, + data: { + additions: { duration: '312527' }, + text: '能听到吗?哎,你好你好。哎,你好。是这个龙总,对吧?对,我是龙杰,啊,对。哎,董洁你好,我我也在线了,我是吴丽丽。啊,丽丽。叶总好。 OK 那个,磊子。哎,我在啦。哎哎哎,好,那个就是我们今天主要的这个会议啊,这人都齐了,就主要就是 就针对咱们这个相关的产品和一些技术的一些方向呢,我们做一个基本的交流和这个龙杰龙总。所以呢这个辛苦一下龙总,完了以后呢我们邀请了我们的一个顾问呐,专家顾问啊,这个 赵雷总啊,他这个这方面是,对对对,说一起交流一下,大概是这么一个情况。所以那个龙杰龙总,能不能就你现在的一个,咱们现在的产品的开发。以及这个思路,还有这些方面呢,能不能做一个简单的,一个,比如说三五分钟的介绍,咱们从这个边起个头,好不好?可以,好的好的。目前呢,因为现在的市场啊比较比较那个,也比较大嘛。然后我们就现在就是说,以前的 SEO 转化到现在的 GEO 对吧?那么我们通过那个上次钱总展示那篇论文,得到了一个结论,就是说我们需要第一就是很很很很机械的去发文章给的,让大模型去搜,去收录。那么它大模型怎么收录呢?其实我们先把这个原理搞一下,就是 首先我们去去去搜一个内容的时候,我们去看大模型从哪些方面去去去到从哪些方面,那个去去抓它需要的内容,对吧?因为目前来说,大模型它是训练的时候呢,它其实它也是,它的数据其实就终止到了它训练那那个的一个数据数据段。那他需要回答我们问问题的时候呢,他肯定是需要去调用其他的外部接口。比如说像那个 Dubbo,他可能调用的是博查,豆包可能调用他内部的一些接口,包括博查的一些接口。混元呢,他可能调用的是他自己内部的一些私域上面的一些一些链接,对。然后他把这个内容抓到这些内容之后呢,再把这个内容提交到到大模型里面去分析,去总结,然后 给出用户需要的一个答案。对,这是这是大模型抓起的一个一个一个流程。那基于这个流程呢?我们就就就做了一些工具。首先就是这个文章怎么获取,怎么规划,就是怎么把它的内容结构化,让它更好的去把这个内容给呈现出来,这是第一点。第二点呢,其实我们在分析的过程中呢,其实也发现,尤其是豆包和第,那个,尤其是豆包,它对于那个数据的来源,它特别喜欢去抓一些官网上的一些数据。对,然后呢在这个过程中呢,我我们就就做了一个那个自动复制官网的,就,其实也不能叫自动复制官网,就是做一个 官网的一个克隆,那它不,当然了它不是简单一个克隆的一个一个一个一个一个功能啊,就是其实目前的整,那个叫法呢,就是叫 AI 克隆嘛。但是它的工作原理呢,其实就是说 我们先从他已已有的官网上把数据先拿到我们的数据本,那个我我们我们这边来。然后呢再再通过我们的一些工具去对数据加工,就我们的一些 agent 对数据做一些加工。然后继续加工之后呢,同时我们也去去那个生成一些关键字,去那个外保上,那个丰富这些数据源。拿到这些数据源之后呢,再把那个数据再整理,整理成我们需要的这个,不是我们,整理成大模型比较喜欢的这种结构结构化的一些文章,然后再再那个那个发布 到我们内部的,就是我们克隆出来的这个这个官网上来。对,这是这是第二个工具,就是这,对,不,但,但是我说的工具只是说一个,一些 agent 的一些总集啊,他对,我们不只是一个一个工具一个工具的做,我们是做一部分 agent 然后组装成为一个工,一个工,这所谓的一个工具,其实也就是一个 agent 集合。对。目前呢,在做的是是这么两个两个事,然后第三个事呢,其实正在规划做的是那个我们怎么去监控大模型是不是把我们的内容,是否已经呈现出来了这么一件事,对。这个事的思路呢,其实我们是模拟着模拟的这个人,对我们提供的一些关键字,模拟的人,然后对那个大模型进行提问,提问得出来之后之后呢,就是', + utterances: [ + [Object], [Object], [Object], + [Object], [Object], [Object], + [Object], [Object], [Object], + [Object], [Object], [Object], + [Object], [Object], [Object], + [Object], [Object], [Object], + [Object], [Object], [Object], + [Object], [Object], [Object], + [Object], [Object], [Object], + [Object] + ], + job_key: '817eb4a5-c4d3-4278-ab5a-df02a1962883' + } +} diff --git a/doubao-asr-demo/main.js b/doubao-asr-demo/main.js new file mode 100644 index 0000000..4fe0a81 --- /dev/null +++ b/doubao-asr-demo/main.js @@ -0,0 +1,973 @@ +const formElement = null; // 旧表单已移除,使用新UI按钮触发 +const submitButton = document.getElementById("submitButton"); +let debugLogElement = document.getElementById("debugLog") || null; +const transcriptElement = document.getElementById("transcriptOutput") || null; +const downloadTxtBtn = document.getElementById("downloadTxtBtn"); +const downloadSrtBtn = document.getElementById("downloadSrtBtn"); +const copyBtn = document.getElementById("copyBtn"); +const viewModeSelect = document.getElementById("viewMode"); +const exportRangeTxtBtn = document.getElementById("exportRangeTxt"); +const exportRangeSrtBtn = document.getElementById("exportRangeSrt"); +const exportCsvBtn = document.getElementById("exportCsv"); +const rangeStartInput = document.getElementById("rangeStart"); +const rangeEndInput = document.getElementById("rangeEnd"); +const exportToolbar = document.getElementById("exportToolbar"); +let lastResultJson = null; +const editedMap = new Map(); // key: `${start}-${end}` -> edited text +// 说话人显示名与颜色映射 +const speakerNameMap = new Map(); // key: speakerId -> display name (可编辑) +const speakerColorMap = new Map(); // key: speakerId -> 1..3 映射到 tag-1..tag-3 +let editMode = false; // 是否开启“编辑说话人名称” + +// 前端脚本加载标记,便于确认 JS 是否生效 +appendLog('前端脚本已加载'); +window.addEventListener('DOMContentLoaded', () => { debugLogElement = document.getElementById('debugLog'); appendLog('DOM 已就绪'); fetch('/health').then(r=>r.json()).then(j=>appendLog('健康检查:'+JSON.stringify(j))).catch(e=>appendLog('健康检查失败:'+e.message)); }); +const proxySubmitEndpoint = "/api/asr/submit"; +const proxyResultEndpoint = "/api/asr/result"; +const pollIntervalMs = 2000; +const maxAttempts = 60; + +const statusSuccessSet = new Set(["SUCCEEDED", "SUCCESS", "FINISHED"]); +const statusFailureSet = new Set(["FAILED", "FAIL", "ERROR"]); + +function appendLog(message) { + const el = debugLogElement || document.getElementById("debugLog"); + if (!el) return; + const timestamp = new Date().toISOString(); + const nextLine = `[${timestamp}] ${message}`; + if (el.textContent === "等待提交…") { + el.textContent = nextLine; + } else { + el.textContent = `${el.textContent}\n${nextLine}`; + } +} + +function resetOutputs() { + if (transcriptElement) transcriptElement.value = ""; + if (debugLogElement) debugLogElement.textContent = "等待提交…"; + const lines = document.getElementById('transcriptLines'); + if (lines) lines.innerHTML = ''; + const tags = document.getElementById('speakerTags'); + if (tags) tags.innerHTML = ''; +} + +function stripDataUriPrefix(base64String) { + return base64String.replace(/^data:.*;base64,/, ""); +} + +function detectAudioFormat(nameOrUrl) { + if (!nameOrUrl || typeof nameOrUrl !== "string") return "wav"; + let s = nameOrUrl.trim(); + try { + // 若是 URL,取 pathname 再去掉查询/锚点 + const u = new URL(s); + s = u.pathname; + } catch (_) { + // 非 URL,继续用原字符串 + } + // 去掉查询/锚点残留 + s = s.split("?")[0].split("#")[0]; + const lastSlash = s.lastIndexOf("/"); + if (lastSlash !== -1) s = s.slice(lastSlash + 1); + const lastDot = s.lastIndexOf("."); + if (lastDot === -1) return "wav"; + const ext = s.slice(lastDot + 1).toLowerCase(); + // 归一化若干别名 + if (["m4a", "mp4a", "mp4"].includes(ext)) return "m4a"; + if (ext === "oga") return "ogg"; + return ext; +} + +function readFileAsBase64(file) { + return new Promise((resolve, reject) => { + const reader = new FileReader(); + reader.onload = () => resolve(reader.result); + reader.onerror = () => reject(new Error("读取文件失败")); + reader.readAsDataURL(file); + }); +} + +function createHeaders({ useProxy, apiKey, resourceId, requestId }) { + const headers = new Headers(); + headers.set("Content-Type", "application/json"); + if (useProxy) { + return headers; + } + + if (!apiKey) { + throw new Error("当直连豆包接口时必须填写 API Key"); + } + + headers.set("x-api-key", apiKey); + if (resourceId) { + headers.set("X-Api-Resource-Id", resourceId); + } + headers.set("X-Api-Request-Id", requestId); + headers.set("X-Api-Sequence", "-1"); + return headers; +} + +function buildSubmitPayload({ + base64Data, + format, + sampleRate, + bits, + channels, + uid, + modelName, + options +}) { + return { + user: { + uid + }, + audio: { + data: base64Data, + format, + codec: ["mp3", "wav", "pcm"].includes(format) ? "raw" : format, + rate: sampleRate, + bits, + channel: channels + }, + request: { + model_name: modelName, + enable_itn: options.enableItn, + enable_punc: options.enablePunc, + enable_ddc: options.enableDdc, + enable_speaker_info: options.enableSpeaker, + enable_channel_split: options.enableChannelSplit, + show_utterances: options.showUtterances, + vad_segment: options.vadSegment, + sensitive_words_filter: options.sensitiveWords + } + }; +} + +function extractJobKey(result) { + const candidates = [ + result?.result?.job_key, + result?.result?.task_id, + result?.result?.taskId, + result?.data?.job_key, + result?.data?.taskId, + result?.data?.task_id, + result?.job_key, + result?.task_id, + result?.taskId, + result?.RequestId, + result?.request_id + ]; + return candidates.find((value) => typeof value === "string" && value.length > 0) ?? null; +} + +function deriveStatus(result) { + const candidates = [ + result?.result?.status, + result?.result?.task_status, + result?.data?.status, + result?.data?.task_status, + result?.status + ]; + return candidates.find((value) => typeof value === "string" && value.length > 0) ?? null; +} + +function flattenSegmentsText(segments) { + if (!Array.isArray(segments) || segments.length === 0) { + return null; + } + const texts = segments + .map((segment) => { + if (typeof segment?.text === "string" && segment.text.trim().length > 0) { + return segment.text.trim(); + } + if (typeof segment?.transcript === "string" && segment.transcript.trim().length > 0) { + return segment.transcript.trim(); + } + return null; + }) + .filter((text) => typeof text === "string" && text.length > 0); + if (texts.length === 0) { + return null; + } + return texts.join("\n"); +} + +function extractTranscript(result) { + const segmentsTranscript = + flattenSegmentsText(result?.data?.result?.segments) ?? flattenSegmentsText(result?.result?.segments); + if (segmentsTranscript) { + return segmentsTranscript; + } + const candidates = [ + result?.data?.result?.text, + result?.result?.text, + result?.result?.output?.choices?.[0]?.text, + result?.result?.output?.transcript, + result?.result?.transcript, + result?.data?.output?.choices?.[0]?.text, + result?.data?.transcript + ]; + return candidates.find((value) => typeof value === "string" && value.trim().length > 0) ?? null; +} + +function msToTimestamp(ms) { + if (typeof ms !== "number" || Number.isNaN(ms)) return null; + const sign = ms < 0 ? "-" : ""; + const t = Math.abs(ms); + const hours = Math.floor(t / 3600000); + const minutes = Math.floor((t % 3600000) / 60000); + const seconds = Math.floor((t % 60000) / 1000); + const millis = Math.floor(t % 1000); + const hh = hours.toString().padStart(2, "0"); + const mm = minutes.toString().padStart(2, "0"); + const ss = seconds.toString().padStart(2, "0"); + const mmm = millis.toString().padStart(3, "0"); + return `${sign}${hh}:${mm}:${ss}.${mmm}`; +} + +function anyToMs(value) { + if (typeof value === "number") return value; + if (typeof value === "string") { + // 支持 "1.23" 秒或 "00:00:01.230" + if (/^\d+(\.\d+)?$/.test(value)) { + return Number(value) * 1000; + } + const m = value.match(/^(\d{2}):(\d{2}):(\d{2})\.(\d{1,3})$/); + if (m) { + const h = Number(m[1]); + const min = Number(m[2]); + const s = Number(m[3]); + const ms = Number(m[4].padEnd(3, "0")); + return ((h * 60 + min) * 60 + s) * 1000 + ms; + } + } + return null; +} + +function extractSegments(obj) { + const segs = obj?.data?.result?.segments || obj?.result?.segments || obj?.segments || null; + if (Array.isArray(segs) && segs.length > 0) return segs; + // 兼容返回的 utterances 字段,转换为统一的段落结构 + const utts = obj?.data?.result?.utterances || obj?.result?.utterances || obj?.utterances || null; + if (Array.isArray(utts) && utts.length > 0) { + return utts.map(u => ({ + start_ms: u.start_ms ?? u.start_time ?? u.start, + end_ms: u.end_ms ?? u.end_time ?? u.end, + text: u.text, + channel: u.channel ?? u.channel_index ?? u.ch ?? u.additions?.channel_id, + speaker: u.speaker ?? u.spk ?? u.speaker_id ?? u.additions?.speaker + })); + } + return null; +} + +function formatSegmentsDetailed(obj) { + const segments = extractSegments(obj); + if (!Array.isArray(segments) || segments.length === 0) return null; + const lines = []; + for (const seg of segments) { + const start = anyToMs(seg.start_ms ?? seg.start_time ?? seg.start ?? seg.begin_ms ?? seg.begin_time); + const end = anyToMs(seg.end_ms ?? seg.end_time ?? seg.end ?? seg.finish_ms ?? seg.finish_time); + const startTs = start != null ? msToTimestamp(start) : null; + const endTs = end != null ? msToTimestamp(end) : null; + const ch = seg.channel ?? seg.channel_index ?? seg.ch ?? null; + const spk = seg.speaker ?? seg.spk ?? seg.speaker_id ?? null; + const text = (typeof seg.text === "string" && seg.text.trim()) || (typeof seg.transcript === "string" && seg.transcript.trim()) || ""; + const attrs = []; + if (ch != null) attrs.push(`ch=${ch}`); + if (spk != null) attrs.push(`spk=${spk}`); + const range = startTs && endTs ? `[${startTs}-${endTs}]` : (startTs ? `[${startTs}-?]` : (endTs ? `[?-${endTs}]` : "")); + const header = [range, attrs.length ? `(${attrs.join(", ")})` : ""].filter(Boolean).join(" "); + lines.push(header ? `${header} ${text}` : text); + } + return lines.join("\n"); +} + +function sleep(durationMs) { + return new Promise((resolve) => setTimeout(resolve, durationMs)); +} + +function buildSegmentsFromEdited(obj) { + const segs = extractSegments(obj) || []; + return segs.map(s => { + const start = anyToMs(s.start_ms ?? s.start_time ?? s.start) ?? 0; + const end = anyToMs(s.end_ms ?? s.end_time ?? s.end) ?? 0; + const key = `${start}-${end}`; + const text = editedMap.get(key) ?? s.text ?? s.transcript ?? ""; + return { ...s, start_ms: start, end_ms: end, text }; + }); +} + +function buildSrtFromSegments(obj) { + const segs = extractSegments(obj); + if (!Array.isArray(segs) || segs.length === 0) return null; + const blocks = []; + let idx = 1; + for (const s of segs) { + const start = anyToMs(s.start_ms ?? s.start_time ?? s.start); + const end = anyToMs(s.end_ms ?? s.end_time ?? s.end); + const startTs = msToTimestamp(start)?.replace(".", ",") ?? "00:00:00,000"; + const endTs = msToTimestamp(end)?.replace(".", ",") ?? "00:00:00,000"; + const spkId = s.speaker ?? s.spk ?? s.speaker_id; + const spkName = spkId != null ? (speakerNameMap.get(spkId) || `说话人 ${spkId}`) : ""; + const text = (typeof s.text === "string" && s.text.trim()) || (typeof s.transcript === "string" && s.transcript.trim()) || ""; + const prefix = spkName ? `[${spkName}] ` : ""; + blocks.push(`${idx}\n${startTs} --> ${endTs}\n${prefix}${text}\n`); + idx += 1; + } + return blocks.join("\n"); +} + +function groupBySpeakerAndChannel(segs) { + const map = new Map(); // key: channel -> Map(speaker -> [segments]) + for (const s of segs) { + const ch = s.channel ?? s.channel_index ?? s.ch ?? s.additions?.channel_id ?? "unknown"; + const spk = s.speaker ?? s.spk ?? s.speaker_id ?? s.additions?.speaker ?? "unknown"; + if (!map.has(ch)) map.set(ch, new Map()); + const inner = map.get(ch); + if (!inner.has(spk)) inner.set(spk, []); + inner.get(spk).push(s); + } + return map; +} + +function buildTimeline(durationMs, rulerEl, onJump) { + if (!rulerEl) return; + rulerEl.innerHTML = ""; + if (!durationMs || durationMs <= 0) return; + const step = Math.max(10000, Math.floor(durationMs / 10)); // 10s 或更大 + + // Tooltip element + const tooltip = document.createElement("div"); + tooltip.className = "tooltip"; + tooltip.style.left = "0%"; + rulerEl.appendChild(tooltip); + + const updateTooltip = (x) => { + const width = rulerEl.clientWidth || 1; + const percent = Math.max(0, Math.min(1, x / width)); + const t = Math.round(durationMs * percent); + tooltip.style.left = `${percent * 100}%`; + let label = msToTimestamp(t)?.slice(0, 12) || ""; + const segs = Array.isArray(buildTimeline._segs) ? buildTimeline._segs : []; + const near = segs.find(s => { + const start = anyToMs(s.start_ms ?? s.start_time ?? s.start) ?? 0; + const end = anyToMs(s.end_ms ?? s.end_time ?? s.end) ?? 0; + return t >= start && t <= end; + }); + if (near) { + const ch = near.channel ?? near.channel_index ?? near.ch; + const spk = near.speaker ?? near.spk ?? near.speaker_id; + const previewRaw = (near.text || near.transcript || "").replace(/\n/g, " "); + const preview = previewRaw.length > 36 ? (previewRaw.slice(0, 36) + "…") : previewRaw; + label = `${msToTimestamp(t)?.slice(0, 12)} • ch=${ch ?? "-"} spk=${spk ?? "-"} • ${preview}`; + } + tooltip.textContent = label; + }; + + rulerEl.addEventListener("mousemove", (e) => { + const x = e.offsetX ?? (e.clientX - rulerEl.getBoundingClientRect().left); + updateTooltip(x); + }); + rulerEl.addEventListener("mouseenter", (e) => { + const x = e.offsetX ?? (e.clientX - rulerEl.getBoundingClientRect().left); + updateTooltip(x); + }); + rulerEl.addEventListener("click", (e) => { + const x = e.offsetX ?? (e.clientX - rulerEl.getBoundingClientRect().left); + const percent = Math.max(0, Math.min(1, x / (rulerEl.clientWidth || 1))); + const t = Math.round(durationMs * percent); + onJump?.(t); + }); + + for (let t = 0; t <= durationMs; t += step) { + const p = (t / durationMs) * 100; + const tick = document.createElement("div"); + tick.className = "tick"; + tick.style.left = `${p}%`; + const label = document.createElement("div"); + label.className = "label"; + label.style.left = `${p}%`; + label.textContent = msToTimestamp(t)?.slice(0, 8) || ""; + label.style.cursor = "pointer"; + label.addEventListener("click", () => onJump?.(t)); + rulerEl.appendChild(tick); + rulerEl.appendChild(label); + } +} + +function highlightKeywords(text, keywords) { + if (!keywords || keywords.length === 0) return text; + let safe = text; + for (const kw of keywords) { + if (!kw) continue; + const re = new RegExp(`(${kw.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")})`, "gi"); + safe = safe.replace(re, '$1'); + } + return safe; +} + +function renderStructuredView(json) { // 旧结构化保留但不使用 + + const segs = extractSegments(json) || []; + const container = document.getElementById("channelsContainer"); + const ruler = document.getElementById("timelineRuler"); + if (!container || !ruler) { appendLog('结构化容器缺失,跳过渲染'); return; } + const duration = anyToMs(json?.data?.additions?.duration || json?.result?.additions?.duration) || json?.audio_info?.duration || 0; + + container.innerHTML = ""; + buildTimeline._segs = segs; + buildTimeline(duration, ruler, (jumpMs) => { + // 时间轴点击 → 高亮对应时间附近的分段 + const near = segs.filter(s => { + const start = anyToMs(s.start_ms ?? s.start_time ?? s.start) ?? 0; + const end = anyToMs(s.end_ms ?? s.end_time ?? s.end) ?? 0; + return jumpMs >= start && jumpMs <= end; + }); + document.querySelectorAll('.segment-item.active').forEach(el => el.classList.remove('active')); + near.forEach(s => { + const selector = `.segment-item[data-start="${anyToMs(s.start_ms ?? s.start_time ?? s.start)}"][data-end="${anyToMs(s.end_ms ?? s.end_time ?? s.end)}"]`; + const el = container.querySelector(selector); + if (el) { + el.classList.add('active'); + el.scrollIntoView({ behavior: 'smooth', block: 'center' }); + } + }); + }); + + const channelMap = groupBySpeakerAndChannel(segs); + const keywordsInput = document.getElementById("sensitiveWords").value.trim(); + const keywords = keywordsInput ? keywordsInput.split(/[,,\s]+/).filter(Boolean) : []; + + for (const [ch, speakerMap] of channelMap.entries()) { + const column = document.createElement("div"); + column.className = "channel-column"; + + const header = document.createElement("div"); + header.className = "channel-header"; + header.innerHTML = `声道 ch=${ch}分组:说话人`; + column.appendChild(header); + + for (const [spk, items] of speakerMap.entries()) { + const group = document.createElement("div"); + group.className = "speaker-group"; + const title = document.createElement("div"); + title.className = "speaker-title"; + const avatar = document.createElement("span"); + avatar.className = "speaker-avatar"; + const colorIdx = (Number(spk) || 0) % 6 || 1; + avatar.style.background = getComputedStyle(document.documentElement).getPropertyValue(`--speaker-${colorIdx}`).trim() || "var(--accent)"; + // 徽标文字:若为字符串取首字母/首个汉字,若为数字直接显示 + let badgeText = ""; + if (typeof spk === "string") { + const m = spk.match(/[A-Za-z\u4e00-\u9fa5]/); + badgeText = (m ? m[0] : spk[0] || "?").toUpperCase(); + } else { + badgeText = String(spk ?? "?"); + } + avatar.textContent = badgeText; + const label = document.createElement("span"); + label.textContent = `说话人 ${spk}`; + title.appendChild(avatar); + title.appendChild(label); + group.appendChild(title); + + for (const s of items) { + const item = document.createElement("div"); + item.className = "segment-item"; + const start = anyToMs(s.start_ms ?? s.start_time ?? s.start); + const end = anyToMs(s.end_ms ?? s.end_time ?? s.end); + item.dataset.start = String(start ?? 0); + item.dataset.end = String(end ?? 0); + const meta = document.createElement("div"); + meta.className = "segment-meta"; + meta.textContent = `[${msToTimestamp(start)} - ${msToTimestamp(end)}]`; + const text = document.createElement("div"); + text.contentEditable = "true"; + text.className = "editable"; + const raw = (typeof s.text === "string" && s.text.trim()) || (typeof s.transcript === "string" && s.transcript.trim()) || ""; + const key = `${start}-${end}`; + if (!editedMap.has(key)) editedMap.set(key, raw); + text.innerHTML = highlightKeywords(editedMap.get(key), keywords); + text.addEventListener("input", () => { + editedMap.set(key, text.textContent || ""); + }); + item.appendChild(meta); + item.appendChild(text); + group.appendChild(item); + } + + column.appendChild(group); + } + + container.appendChild(column); + } +} + +function renderByViewMode() { /* 旧视图切换不再使用 */ } + + +// 旧视图切换移除 + + +function withinRange(s, fromMs, toMs) { + const start = anyToMs(s.start_ms ?? s.start_time ?? s.start) ?? 0; + const end = anyToMs(s.end_ms ?? s.end_time ?? s.end) ?? 0; + return (fromMs == null || end >= fromMs) && (toMs == null || start <= toMs); +} + +function parseTimeInput(v) { + if (!v) return null; + const s = v.trim(); + if (/^\d+$/.test(s)) return Number(s); + const m = s.match(/^(\d{1,2}):(\d{2})(?::(\d{2}))?$/); + if (m) { + const h = m[3] ? Number(m[1]) : 0; + const min = m[3] ? Number(m[2]) : Number(m[1]); + const sec = m[3] ? Number(m[3]) : Number(m[2]); + return ((h * 60 + min) * 60 + sec) * 1000; + } + return null; +} + +exportRangeTxtBtn?.addEventListener("click", () => { + if (!lastResultJson) return; + const fromMs = parseTimeInput(rangeStartInput?.value); + const toMs = parseTimeInput(rangeEndInput?.value); + const segs = buildSegmentsFromEdited(lastResultJson).filter(s => withinRange(s, fromMs, toMs)); + const text = segs.map(s => s.text || s.transcript || "").join("\n"); + triggerDownload(text, "transcript_range.txt"); +}); + +exportRangeSrtBtn?.addEventListener("click", () => { + if (!lastResultJson) return; + const fromMs = parseTimeInput(rangeStartInput?.value); + const toMs = parseTimeInput(rangeEndInput?.value); + const segs = buildSegmentsFromEdited(lastResultJson).filter(s => withinRange(s, fromMs, toMs)); + const srt = (function buildPartialSrt(items){ + if (!items.length) return ""; + let idx = 1; const out = []; + for (const s of items) { + const start = anyToMs(s.start_ms ?? s.start_time ?? s.start) ?? 0; + const end = anyToMs(s.end_ms ?? s.end_time ?? s.end) ?? 0; + const startTs = msToTimestamp(start)?.replace(".", ",") ?? "00:00:00,000"; + const endTs = msToTimestamp(end)?.replace(".", ",") ?? "00:00:00,000"; + out.push(`${idx}\n${startTs} --> ${endTs}\n${s.text || s.transcript || ""}\n`); + idx += 1; + } + return out.join("\n"); + })(segs); + triggerDownload(srt, "transcript_range.srt"); +}); + +exportCsvBtn?.addEventListener("click", () => { + if (!lastResultJson) return; + const segs = buildSegmentsFromEdited(lastResultJson); + const header = ["start_ms","end_ms","channel","speaker","text"]; + const rows = segs.map(s => [ + anyToMs(s.start_ms ?? s.start_time ?? s.start) ?? 0, + anyToMs(s.end_ms ?? s.end_time ?? s.end) ?? 0, + s.channel ?? "", + s.speaker ?? "", + (s.text || s.transcript || "").replace(/"/g,'""') + ]); + const csv = [header.join(","), ...rows.map(r => r.map(c => /[",\n]/.test(String(c)) ? `"${String(c)}"` : String(c)).join(","))].join("\n"); + triggerDownload(csv, "transcript.csv"); +}); + +const exportBtn = document.getElementById('exportBtn'); +const copyAllBtn = document.getElementById('copyAllBtn'); +copyAllBtn?.addEventListener("click", async () => { + try { + const segs = buildSegmentsFromEdited(lastResultJson || {}); + const text = segs.map(s => s.text || s.transcript || "").join("\n"); + await navigator.clipboard.writeText(text); + } catch (e) {} +}); + +function triggerDownload(content, filename) { + const blob = new Blob([content], { type: "text/plain;charset=utf-8" }); + const url = URL.createObjectURL(blob); + const a = document.createElement("a"); + a.href = url; + a.download = filename; + document.body.appendChild(a); + a.click(); + a.remove(); + URL.revokeObjectURL(url); +} + +downloadSrtBtn?.addEventListener("click", () => { + if (!lastResultJson) { return; } + const srt = buildSrtFromSegments({ ...lastResultJson, segments: buildSegmentsFromEdited(lastResultJson) }); + const text = srt || (lastResultJson?.transcript || extractTranscript(lastResultJson) || ""); + triggerDownload(text, srt ? "transcript.srt" : "transcript.txt"); +}); + +// 统一走导出按钮事件 +exportBtn?.addEventListener('click', () => { + if (!lastResultJson) { appendLog('暂无结果可下载'); return; } + // 导出为“带时间+说话人”的可读TXT + const segs = buildSegmentsFromEdited(lastResultJson); + const lines = segs.map(s => { + const start = anyToMs(s.start_ms ?? s.start_time ?? s.start) ?? 0; + const end = anyToMs(s.end_ms ?? s.end_time ?? s.end) ?? 0; + const time = `[${msToTimestamp(start)} - ${msToTimestamp(end)}]`; + const spkId = s.speaker ?? s.spk ?? s.speaker_id; + const spk = spkId != null ? (speakerNameMap.get(spkId) || `说话人 ${spkId}`) : ''; + const name = spk ? `${spk}: ` : ''; + const text = (s.text || s.transcript || '').trim(); + return `${time} ${name}${text}`; + }); + const content = lines.join('\n'); + triggerDownload(content, 'transcript.txt'); +}); + +function renderInNewUI(json){ + try{ + const segs = extractSegments(json) || []; + const tagsEl = document.getElementById('speakerTags'); + const linesEl = document.getElementById('transcriptLines'); + const editToggle = document.getElementById('editToggle'); + const saveSpkBtn = document.getElementById('saveSpkBtn'); + if (tagsEl) tagsEl.innerHTML = ''; + if (linesEl) linesEl.innerHTML = ''; + + // 收集说话人,建立稳定颜色映射(跨次渲染保持) + const speakers = []; + const spkSet = new Set(); + for (const s of segs){ + const spk = s.speaker ?? s.spk ?? s.speaker_id ?? null; + if (spk == null) continue; + if (!spkSet.has(spk)) { spkSet.add(spk); speakers.push(spk); } + if (!speakerColorMap.has(spk)) { + const used = new Set([...speakerColorMap.values()]); + const pool = [1,2,3,1,2,3]; + const pick = pool.find(i => !used.has(i)) || ((speakerColorMap.size % 3) + 1); + speakerColorMap.set(spk, pick); + } + if (!speakerNameMap.has(spk)) { + speakerNameMap.set(spk, `说话人 ${spk}`); + } + } + + // 渲染顶部可编辑标签 + if (tagsEl){ + speakers.forEach(spk => { + const colorIdx = speakerColorMap.get(spk) || 1; + const tag = document.createElement('span'); + tag.className = `speaker-tag tag-${colorIdx}`; + tag.contentEditable = editMode ? 'true' : 'false'; + tag.dataset.spk = String(spk); + tag.textContent = speakerNameMap.get(spk) || `说话人 ${spk}`; + tag.addEventListener('input', () => { + speakerNameMap.set(spk, tag.textContent || `说话人 ${spk}`); + // 同步更新下方所有同 speaker 的徽标文字 + linesEl?.querySelectorAll(`[data-spk="${CSS.escape(String(spk))}"]`).forEach(el => { + el.textContent = speakerNameMap.get(spk); + }); + }); + tagsEl.appendChild(tag); + }); + } + + // 渲染正文每行 + for (const s of segs){ + if (!linesEl) break; + const spk = s.speaker ?? s.spk ?? s.speaker_id ?? null; + const item = document.createElement('div'); + item.className = 'transcript-line'; + const ts = document.createElement('span'); + ts.className = 'timestamp'; + const start = anyToMs(s.start_ms ?? s.start_time ?? s.start); + const end = anyToMs(s.end_ms ?? s.end_time ?? s.end); + ts.textContent = `[${msToTimestamp(start) || '00:00:00.000'} - ${msToTimestamp(end) || '00:00:00.000'}]`; + const sp = document.createElement('span'); + const colorIdx = speakerColorMap.get(spk) || 1; + sp.className = `speaker tag-${colorIdx}`; + sp.dataset.spk = spk != null ? String(spk) : ''; + if (spk != null) sp.textContent = speakerNameMap.get(spk) || `说话人 ${spk}`; + const text = document.createElement('div'); + text.className = 'text-content'; + text.textContent = (s.text || s.transcript || '').trim(); + item.appendChild(ts); + if (spk != null) item.appendChild(sp); + item.appendChild(text); + linesEl.appendChild(item); + } + + // 绑定编辑开关 + if (editToggle){ + editToggle.onclick = () => { + editMode = !editMode; + if (saveSpkBtn) saveSpkBtn.style.display = editMode ? 'inline-flex' : 'none'; + tagsEl?.querySelectorAll('.speaker-tag').forEach(el => { el.contentEditable = editMode ? 'true' : 'false'; }); + }; + } + if (saveSpkBtn){ + saveSpkBtn.onclick = () => { + tagsEl?.querySelectorAll('.speaker-tag').forEach(el => { + const spk = el.dataset.spk; + speakerNameMap.set(spk, el.textContent || `说话人 ${spk}`); + }); + // 关闭编辑并同步正文徽标 + editMode = false; + saveSpkBtn.style.display = 'none'; + tagsEl?.querySelectorAll('.speaker-tag').forEach(el => { el.contentEditable = 'false'; }); + linesEl?.querySelectorAll('.speaker').forEach(el => { + const spk = el.dataset.spk; + el.textContent = speakerNameMap.get(spk) || `说话人 ${spk}`; + }); + }; + } + }catch(e){ appendLog('渲染失败:' + (e?.message || String(e))); } +} + +async function pollJobResult({ url, headers, body, useProxy }) { + for (let attempt = 1; attempt <= maxAttempts; attempt += 1) { + appendLog(`第 ${attempt} 次查询任务状态…`); + + if (!useProxy && headers.has("X-Api-Request-Id")) { + headers.set("X-Api-Request-Id", (self.crypto?.randomUUID?.() ?? `${Date.now()}-${Math.random()}`)); + } + + const response = await fetch(url, { + method: "POST", + headers, + body: JSON.stringify(body) + }); + + if (!response.ok) { + const errorBody = await response.text(); + throw new Error(`查询失败,HTTP ${response.status}:${errorBody}`); + } + + const json = await response.json().catch(() => { + throw new Error("解析查询结果时发生错误"); + }); + + try { + const segs = extractSegments(json) || []; + const txt = extractTranscript(json) || ''; + appendLog(`查询结果摘要:segments=${segs.length}, transcriptLen=${txt.length}`); + } catch(_) { appendLog('查询结果已更新'); } + + // 优先等待结构化分段(segments/utterances);仅文本不提前返回,避免“只有一大段文本”的情况 + const segs = extractSegments(json); + const hasSeg = Array.isArray(segs) && segs.length > 0; + const immediateTranscript = json?.transcript || extractTranscript(json); + if (hasSeg) { + return { ...json, transcript: immediateTranscript || null }; + } + + const status = deriveStatus(json); + if (!status) { + appendLog("未返回任务状态,继续轮询…"); + } else if (statusSuccessSet.has(status.toUpperCase())) { + return json; + } else if (statusFailureSet.has(status.toUpperCase())) { + throw new Error(`任务失败,状态:${status}`); + } + + await sleep(pollIntervalMs); + } + throw new Error("轮询超时,请稍后重试"); +} + +function readOptions() { + // 新UI默认全部开启,且不展示敏感词过滤 + return { + enableItn: true, + enablePunc: true, + enableDdc: true, + enableSpeaker: true, + enableChannelSplit: true, + showUtterances: true, + vadSegment: true, + sensitiveWords: "", + // 按你的需求默认不做声道拆分,避免同一句在左右声道各来一遍 + enableChannelSplit: false + }; +} + +// 使用新UI的“重新转换”按钮触发提交 +const convertBtn = document.getElementById('convertBtn'); +const fileInputNew = document.getElementById('fileInput'); +// 绑定文件选择后自动触发转换,避免内联脚本早于 main.js 导致点击丢失 +let converting = false; +const triggerConvert = () => { if (converting) { appendLog('已忽略:上一次转换仍在进行中'); return; } convertBtn?.click(); }; +fileInputNew?.addEventListener('change', () => { + appendLog('文件已选择,自动触发转换…'); + // 简单防抖 + clearTimeout(window.__conv_debounce); + window.__conv_debounce = setTimeout(triggerConvert, 50); +}); +convertBtn?.addEventListener('click', async (event) => { + if (converting) { appendLog('已忽略:转换进行中'); return; } + converting = true; + event.preventDefault(); + resetOutputs(); + if (location.protocol === 'file:') { appendLog('当前以 file:// 打开页面,无法向本地代理提交;请访问 http://localhost:6174'); } + + const audioUrlInput = { value: "" }; // 新UI不使用 URL + const fileInput = fileInputNew; + const uidInput = { value: "AudioToText" }; + const modelNameInput = { value: "bigmodel" }; + const sampleRateInput = { value: 16000 }; + const bitsInput = { value: 16 }; + const channelInput = { value: 1 }; + const apiBaseInput = { value: "" }; + const apiKeyInput = { value: "" }; + const resourceIdInput = { value: "" }; + + const audioUrl = audioUrlInput.value.trim(); + const audioFile = fileInput.files?.[0] ?? null; + if (!audioUrl && !audioFile) { + appendLog("未选择文件,等待提交…"); + return; + } + appendLog("检测到文件选择,开始提交识别任务…"); + + const apiBase = apiBaseInput.value.trim(); + const useProxy = apiBase.length === 0; + const submitUrl = useProxy ? proxySubmitEndpoint : `${apiBase}/submit`; + const resultUrl = useProxy ? proxyResultEndpoint : `${apiBase}/query`; + + const uid = uidInput.value.trim() || "anonymous"; + const modelName = modelNameInput.value.trim() || "bigmodel"; + const sampleRate = Number(sampleRateInput.value) || 16000; + const bits = Number(bitsInput.value) || 16; + const channels = Number(channelInput.value) || 1; + const format = audioUrl ? detectAudioFormat(audioUrl) : detectAudioFormat(audioFile.name); + + const requestId = (self.crypto?.randomUUID?.() ?? `${Date.now()}-${Math.random()}`); + const apiKey = apiKeyInput.value.trim(); + const resourceId = resourceIdInput.value.trim(); + + if (submitButton) submitButton.disabled = true; + if (audioUrl) { + appendLog(`使用音频 URL:${audioUrl}`); + } else { + appendLog(`读取文件:${audioFile.name}`); + } + + try { + const submitHeaders = createHeaders({ useProxy, apiKey, resourceId, requestId }); + const options = readOptions(); + + let payload; + if (audioUrl) { + const mappedCodec = (["wav","pcm","wave"].includes(format) ? "raw" : (format === "mp3" ? "mp3" : (["m4a","aac"].includes(format) ? "aac" : format))); + const finalRate = (["m4a","aac","mp3"].includes(format) && (!sampleRate || sampleRate < 22050)) ? 44100 : sampleRate; + appendLog(`提交参数:source=url, format=${format}, codec=${mappedCodec}, rate=${finalRate}, ch=${channels}`); + payload = { + user: { uid }, + audio: { url: audioUrl, format, codec: mappedCodec, rate: finalRate, bits, channel: channels }, + request: { + model_name: modelName, + enable_itn: !!options.enableItn, + enable_punc: !!options.enablePunc, + enable_ddc: !!options.enableDdc, + enable_speaker_info: !!options.enableSpeaker, + enable_channel_split: !!options.enableChannelSplit, + show_utterances: !!options.showUtterances, + vad_segment: !!options.vadSegment, + sensitive_words_filter: options.sensitiveWords || "" + } + }; + } else { + const base64WithPrefix = await readFileAsBase64(audioFile); + const base64Data = stripDataUriPrefix(base64WithPrefix); + appendLog(`文件编码完成,长度约 ${Math.round(base64Data.length / 1024)} KB`); + payload = buildSubmitPayload({ + base64Data, + format, + sampleRate, + bits, + channels, + uid, + modelName, + options + }); + // 纠正 codec 映射 + 压缩格式的采样率兜底 + const mappedCodec = (["wav","pcm","wave"].includes(format) ? "raw" : (format === "mp3" ? "mp3" : (["m4a","aac"].includes(format) ? "aac" : format))); + const finalRate = (["m4a","aac","mp3"].includes(format) && (!sampleRate || sampleRate < 22050)) ? 44100 : sampleRate; + payload.audio.codec = mappedCodec; + payload.audio.rate = finalRate; + payload.request.enable_itn = !!options.enableItn; + payload.request.enable_punc = !!options.enablePunc; + payload.request.enable_ddc = !!options.enableDdc; + payload.request.enable_speaker_info = !!options.enableSpeaker; + payload.request.enable_channel_split = !!options.enableChannelSplit; + payload.request.show_utterances = !!options.showUtterances; + payload.request.vad_segment = !!options.vadSegment; + payload.request.sensitive_words_filter = options.sensitiveWords || ""; + appendLog(`提交参数:source=file, format=${format}, codec=${mappedCodec}, rate=${finalRate}, ch=${channels}`); + } + + appendLog(`提交请求体:${JSON.stringify(payload)}`); + + const submitResponse = await fetch(submitUrl, { + method: "POST", + headers: submitHeaders, + body: JSON.stringify(payload) + }).catch(err => { + appendLog("提交请求未发出,可能没有后端代理或跨域受限"); + throw err; + }); + + if (!submitResponse.ok) { + const errorBody = await submitResponse.text(); + appendLog("提交失败:请在本地运行带代理版本,或在代码里配置直连 API 基础地址"); + throw new Error(`提交失败,HTTP ${submitResponse.status}:${errorBody}`); + } + + const submitJson = await submitResponse.json(); + appendLog(`提交成功:${JSON.stringify(submitJson)}`); + + const jobKey = extractJobKey(submitJson); + if (!jobKey) { + throw new Error("未能从提交响应中解析到任务 ID"); + } + + appendLog(`任务 ID:${jobKey}`); + + const pollHeaders = createHeaders({ useProxy, apiKey, resourceId, requestId: (self.crypto?.randomUUID?.() ?? `${Date.now()}-${Math.random()}`) }); + const pollBody = { job_key: jobKey, taskId: jobKey }; + const resultJson = await pollJobResult({ url: resultUrl, headers: pollHeaders, body: pollBody, useProxy }); + + appendLog("任务完成,处理结果如下:"); + appendLog(JSON.stringify(resultJson)); + + // 去重:同一时间窗口(±300ms)、相同文本合并(跨声道去重) + (function dedup(){ + const segs = extractSegments(resultJson) || []; + const norm = (ms)=>Math.round((anyToMs(ms)||0)/300); + const seen = new Set(); + const filtered = []; + for (const s of segs){ + const start = anyToMs(s.start_ms ?? s.start_time ?? s.start) ?? 0; + const end = anyToMs(s.end_ms ?? s.end_time ?? s.end) ?? 0; + const key = `${norm(start)}|${norm(end)}|${(s.text||s.transcript||'').trim()}`; + if (seen.has(key)) continue; + seen.add(key); + filtered.push(s); + } + if (!resultJson.data) resultJson.data = {}; + if (!resultJson.data.result) resultJson.data.result = {}; + resultJson.data.result.segments = filtered; + })(); + lastResultJson = resultJson; + renderInNewUI(lastResultJson); + + // 停止计时 + if (window.startAnalysisTimer && window.startAnalysisTimer._timer) { clearInterval(window.startAnalysisTimer._timer); window.startAnalysisTimer._timer=null; } + } catch (error) { + const message = error instanceof Error ? error.message : String(error); + appendLog(`发生错误:${message}`); + if (transcriptElement) transcriptElement.value = message; + } finally { + converting = false; + // 新UI无提交按钮禁用逻辑 + } +}); diff --git a/doubao-asr-demo/node_modules/.DS_Store b/doubao-asr-demo/node_modules/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..34297f8145c19a6d38833681bd1dc547c9854a30 GIT binary patch literal 20484 zcmeI4ZH!b`8OP7;4!g^~unVOHX`5`Rbt^9dzEf=-a7!tQqVNHW+SxZ?ad&6go#oB6 z*%(d4#)y@sq}XIFR6wH=6G*8BNlCF0V<`!>Mq{gfK-(0sqKQFU|IfK|?s=X&=iGaT zFB+T+vv+pR|2gOPJomicJFAq+EFJ4zq||byR0CdgZfnNJ_@y1^g?O2R(&<%p)Z&v2 z{&(U$3HD0$s4g|E`qX^2u}uBH_dyMi$cHRmO`skX{6#gW28K5-THR9^91h@fbb_a_ z7*zdu^$l#`>A#qTv^u;R5rq*|P}|gY#G*^};@`+%p|i7lpwNx2#g^YW_%eQh3vfviMMzf_NE1ga6JMxYvj|H}wq?53lkDL7Yu zRwGc2Ks5qk1gL*#$BWLn(s?{M>#hSoXbMf~G=D zrkTePyLCYHW9YSd;mDptp}zyG@VoUd`mt~_tnxY}m0V9SlBiE^^KoMx=E zyVQ`{pm!aH@qPsB_&zlv%2u~bM%i91=Q)4y8)ju5qqmG{^nzQhqWCmu?yXq!cVnNR zS8bQPy?b05&UxzCXH4A6^5QX!(@Cxg;%Wg`AFkaP_BZI=CEM$eTl%FXPeaw%SD-D-=z!lSB)t6fB0?U5Wk)USE9oa^ZMLxw9xZ#mQG z1-H`NQ#5z6v@cjhiz;GokoHOoYQ1D{JqGqzJ?Fpez!TuP#wh;Iym@_1qnF&T5cgDH-tc1prJ^QD4;DX? z&Wig|SR4A1qCD}hFr53D#e`Ol( z$HbSydj}4k?F-^`k}HoQ(f+CL3R>w9-uGjC?FV0Egq^lBPRltDy>X-Izr1<#_@>cI z?p4HH57wZ+olmV@wua?P$`zb(-V5Ov5y^*>`BjoYB2SS?%D> zV&tbeeq_EpdoBpWG|qI#&1X&hV(FH`mF_5ax}x5u8!@7GNi*XvM9a*M2T-@D9SlUq z!JU8j0k~4za_$Y6T0dKwdsbj?{kj@^;rBxmK(8Lxcm(c;e_8b|)a-sWBwIb^pe&8o z%`fgfW7>IW%ljW!x~N-0Q0vi#dho9gePA)#CokCxQAEKRrnj9m3}q_Y3j8X`GfqS; zx@V#N1iEX#9<7rSX^L-TJYH}?rgE-t?+w>G%$~Ej6{38l%b%g2_duVG zc9-W?I!O8}|(Wn?%dvS>`Avw{G{h*Xaz_6RJ4Mm z`3%x!Z?@u4dQ0xhvVR;i?I2~jye?L5E&UxQf1AtvEzM=6hqs@P({i77wLWL&MBco) z7isj8J5Ston!A7%8deCBb={0;I_F#17>+L@56WiRs`E(>Ui_kGyEEJ4?51(UmUC-G!{x zG_*I0T^C|GhMut>XId3fFY4L9?4T7^Dm%_Q^Va7LZ%SM1OQp8b&pi1#N$+!!Pa9+n zd5%^aER{1q_26TszYq#b=2nREGZR#PR+m2<-DB;4ou~1#KlpOEmJV%seRHLYa+NN( zUY8rJa|+Rw)~$D-^oW8py!PjH#{V*vje%b!d2~Im0}t(&VjiZph%1p<@<-5!bj~uf zIjrvyjV1AE1V`o!ia|fz8;ps1K0tFUdd3qqUofe6pN`XVzQ6AY_nN$U^Xr#JFSyku z;%)#h?bp%@mF|v3b~%zkoQE9rvNIJgf&PZEgLn z)K>a=*jxwllV-V8qsvB=g|u5t(T%9M4_hA$=d(_wC5~4LzF?iuS}M7K@nsX<_n^(u zJe|fI?7_$@Fz?4;O|anHmyd+8PqeZ=q_>j(P`G{1noB>XeB7_({I#DuW$M4@8Ft-Ia}ZLH`{y7-u!t?(pgA;Js#A9eVZNysAb4{Seu^%=7@rG?s;an9VbOT zoXxKiJXw7)8_`SAm8AP}G#48{`{ z;eCr#miB5@X6f*6a>>7~=;KE8Xdcf#2{1%i?ccZ8d>zxzbd(eC*5~m#}!4sqAe7heH z$JJO18@F^8feYbQTW& z$sxaIMKNbBxE(6an|U?lbt)}qyi)K5>xV4(3K-`iwc#D~JYSf`SzhQ4Sy;LyaHY#~ zPatc|lW26HIp-*LV+S#!QJ)m)W!G)?D>>7Sd&BvuCtu!nlGTDY(+&u%LjztK9U{Ar zv+sCwdgrLF_^xvh>st_9O)7r1rZt zr$fg%&t2GM`tC;RrJ{NA>zlT-W^DWwV!Q7iD%Zszc z=>%8s%oqBc54 zk|^s(zn^TuxyL%*FfmOihetTQmGGxVx2q=j6Uoj);tq_VU=Rc0yu z)AKy~rZ>$zHo}+QXnmS~5WYkdoO|V-rwn(Q$};*@4jvS!sKW@q&Cbia-1I$D9!s|+ zxza@$nRaBYJ<{Kl*H=`oMr&vPsa(Ms{NHTnZN#q|I+(SaA zj^N$`7~z_^!+g#;o_OdPbDgvek4!X8mXo7$8Znyn>G>Va z{ewNVNDr~;qEE*;?tJmM;c({3xstS!^DuEv1!u5NOg#hb`_Z0>d3MBczjyPi>8!X9 z$B({c`sftpagQpq6#mtWlYbO5<6pRoBjy&FeIM}YxDUBm=gd0QnJ1@C(n?O|W(_XHc;FQl~*e$=*;A5HLM2z^*^UxJ=~p!r^8h4#LJU&+~D``eSI&Uo_W zu}@YD-k?8g&@(@}`{caSb31*%rA)&aXFYnzFgkQLrg1vSrR(z)%@xe~f_vDst4Hg7 z?CgsApx$;0jInyo`=f`$emTL$vZu9?e&m3K{v%vDp;naU*pmOl9l_t83D*CxsV77H z?Vl$6z`7;+_kVKqdG)A9pc;W|I|7+(=jzU-@UisW`Z8~8@JTyfdA#T#-8j9$f%lY5 z=WOY$zlx9Fbq9-co<64o@5h5P-r@K!{1JfIv03z&)$xA_^SaW!qB{PoYi#`g5Acou A(f|Me literal 0 HcmV?d00001 diff --git a/doubao-asr-demo/node_modules/.bin/mime b/doubao-asr-demo/node_modules/.bin/mime new file mode 120000 index 0000000..fbb7ee0 --- /dev/null +++ b/doubao-asr-demo/node_modules/.bin/mime @@ -0,0 +1 @@ +../mime/cli.js \ No newline at end of file diff --git a/doubao-asr-demo/node_modules/.package-lock.json b/doubao-asr-demo/node_modules/.package-lock.json new file mode 100644 index 0000000..a6f2bfd --- /dev/null +++ b/doubao-asr-demo/node_modules/.package-lock.json @@ -0,0 +1,996 @@ +{ + "name": "doubao-asr-demo", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "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==", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "license": "MIT", + "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.13.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/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "license": "MIT", + "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==", + "license": "MIT" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/data-uri-to-buffer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.1.tgz", + "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==", + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/dotenv": { + "version": "17.2.3", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.2.3.tgz", + "integrity": "sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "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==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "license": "MIT" + }, + "node_modules/express": { + "version": "4.21.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.7.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.12", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "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" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/fetch-blob": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.2.0.tgz", + "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "dependencies": { + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" + }, + "engines": { + "node": "^12.20 || >= 14.13" + } + }, + "node_modules/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "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/follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", + "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", + "license": "MIT", + "dependencies": { + "fetch-blob": "^3.1.2" + }, + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "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==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "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==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "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==", + "license": "MIT", + "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/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "license": "MIT", + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/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==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/node-domexception": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", + "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", + "deprecated": "Use your platform's native DOMException instead", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.3.2.tgz", + "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", + "license": "MIT", + "dependencies": { + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "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==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "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/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "license": "MIT" + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "license": "MIT", + "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/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/web-streams-polyfill": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", + "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + } + } +} diff --git a/doubao-asr-demo/node_modules/accepts/HISTORY.md b/doubao-asr-demo/node_modules/accepts/HISTORY.md new file mode 100644 index 0000000..cb5990c --- /dev/null +++ b/doubao-asr-demo/node_modules/accepts/HISTORY.md @@ -0,0 +1,243 @@ +1.3.8 / 2022-02-02 +================== + + * deps: mime-types@~2.1.34 + - deps: mime-db@~1.51.0 + * deps: negotiator@0.6.3 + +1.3.7 / 2019-04-29 +================== + + * deps: negotiator@0.6.2 + - Fix sorting charset, encoding, and language with extra parameters + +1.3.6 / 2019-04-28 +================== + + * deps: mime-types@~2.1.24 + - deps: mime-db@~1.40.0 + +1.3.5 / 2018-02-28 +================== + + * deps: mime-types@~2.1.18 + - deps: mime-db@~1.33.0 + +1.3.4 / 2017-08-22 +================== + + * deps: mime-types@~2.1.16 + - deps: mime-db@~1.29.0 + +1.3.3 / 2016-05-02 +================== + + * deps: mime-types@~2.1.11 + - deps: mime-db@~1.23.0 + * deps: negotiator@0.6.1 + - perf: improve `Accept` parsing speed + - perf: improve `Accept-Charset` parsing speed + - perf: improve `Accept-Encoding` parsing speed + - perf: improve `Accept-Language` parsing speed + +1.3.2 / 2016-03-08 +================== + + * deps: mime-types@~2.1.10 + - Fix extension of `application/dash+xml` + - Update primary extension for `audio/mp4` + - deps: mime-db@~1.22.0 + +1.3.1 / 2016-01-19 +================== + + * deps: mime-types@~2.1.9 + - deps: mime-db@~1.21.0 + +1.3.0 / 2015-09-29 +================== + + * deps: mime-types@~2.1.7 + - deps: mime-db@~1.19.0 + * deps: negotiator@0.6.0 + - Fix including type extensions in parameters in `Accept` parsing + - Fix parsing `Accept` parameters with quoted equals + - Fix parsing `Accept` parameters with quoted semicolons + - Lazy-load modules from main entry point + - perf: delay type concatenation until needed + - perf: enable strict mode + - perf: hoist regular expressions + - perf: remove closures getting spec properties + - perf: remove a closure from media type parsing + - perf: remove property delete from media type parsing + +1.2.13 / 2015-09-06 +=================== + + * deps: mime-types@~2.1.6 + - deps: mime-db@~1.18.0 + +1.2.12 / 2015-07-30 +=================== + + * deps: mime-types@~2.1.4 + - deps: mime-db@~1.16.0 + +1.2.11 / 2015-07-16 +=================== + + * deps: mime-types@~2.1.3 + - deps: mime-db@~1.15.0 + +1.2.10 / 2015-07-01 +=================== + + * deps: mime-types@~2.1.2 + - deps: mime-db@~1.14.0 + +1.2.9 / 2015-06-08 +================== + + * deps: mime-types@~2.1.1 + - perf: fix deopt during mapping + +1.2.8 / 2015-06-07 +================== + + * deps: mime-types@~2.1.0 + - deps: mime-db@~1.13.0 + * perf: avoid argument reassignment & argument slice + * perf: avoid negotiator recursive construction + * perf: enable strict mode + * perf: remove unnecessary bitwise operator + +1.2.7 / 2015-05-10 +================== + + * deps: negotiator@0.5.3 + - Fix media type parameter matching to be case-insensitive + +1.2.6 / 2015-05-07 +================== + + * deps: mime-types@~2.0.11 + - deps: mime-db@~1.9.1 + * deps: negotiator@0.5.2 + - Fix comparing media types with quoted values + - Fix splitting media types with quoted commas + +1.2.5 / 2015-03-13 +================== + + * deps: mime-types@~2.0.10 + - deps: mime-db@~1.8.0 + +1.2.4 / 2015-02-14 +================== + + * Support Node.js 0.6 + * deps: mime-types@~2.0.9 + - deps: mime-db@~1.7.0 + * deps: negotiator@0.5.1 + - Fix preference sorting to be stable for long acceptable lists + +1.2.3 / 2015-01-31 +================== + + * deps: mime-types@~2.0.8 + - deps: mime-db@~1.6.0 + +1.2.2 / 2014-12-30 +================== + + * deps: mime-types@~2.0.7 + - deps: mime-db@~1.5.0 + +1.2.1 / 2014-12-30 +================== + + * deps: mime-types@~2.0.5 + - deps: mime-db@~1.3.1 + +1.2.0 / 2014-12-19 +================== + + * deps: negotiator@0.5.0 + - Fix list return order when large accepted list + - Fix missing identity encoding when q=0 exists + - Remove dynamic building of Negotiator class + +1.1.4 / 2014-12-10 +================== + + * deps: mime-types@~2.0.4 + - deps: mime-db@~1.3.0 + +1.1.3 / 2014-11-09 +================== + + * deps: mime-types@~2.0.3 + - deps: mime-db@~1.2.0 + +1.1.2 / 2014-10-14 +================== + + * deps: negotiator@0.4.9 + - Fix error when media type has invalid parameter + +1.1.1 / 2014-09-28 +================== + + * deps: mime-types@~2.0.2 + - deps: mime-db@~1.1.0 + * deps: negotiator@0.4.8 + - Fix all negotiations to be case-insensitive + - Stable sort preferences of same quality according to client order + +1.1.0 / 2014-09-02 +================== + + * update `mime-types` + +1.0.7 / 2014-07-04 +================== + + * Fix wrong type returned from `type` when match after unknown extension + +1.0.6 / 2014-06-24 +================== + + * deps: negotiator@0.4.7 + +1.0.5 / 2014-06-20 +================== + + * fix crash when unknown extension given + +1.0.4 / 2014-06-19 +================== + + * use `mime-types` + +1.0.3 / 2014-06-11 +================== + + * deps: negotiator@0.4.6 + - Order by specificity when quality is the same + +1.0.2 / 2014-05-29 +================== + + * Fix interpretation when header not in request + * deps: pin negotiator@0.4.5 + +1.0.1 / 2014-01-18 +================== + + * Identity encoding isn't always acceptable + * deps: negotiator@~0.4.0 + +1.0.0 / 2013-12-27 +================== + + * Genesis diff --git a/doubao-asr-demo/node_modules/accepts/LICENSE b/doubao-asr-demo/node_modules/accepts/LICENSE new file mode 100644 index 0000000..0616607 --- /dev/null +++ b/doubao-asr-demo/node_modules/accepts/LICENSE @@ -0,0 +1,23 @@ +(The MIT License) + +Copyright (c) 2014 Jonathan Ong +Copyright (c) 2015 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/doubao-asr-demo/node_modules/accepts/README.md b/doubao-asr-demo/node_modules/accepts/README.md new file mode 100644 index 0000000..82680c5 --- /dev/null +++ b/doubao-asr-demo/node_modules/accepts/README.md @@ -0,0 +1,140 @@ +# accepts + +[![NPM Version][npm-version-image]][npm-url] +[![NPM Downloads][npm-downloads-image]][npm-url] +[![Node.js Version][node-version-image]][node-version-url] +[![Build Status][github-actions-ci-image]][github-actions-ci-url] +[![Test Coverage][coveralls-image]][coveralls-url] + +Higher level content negotiation based on [negotiator](https://www.npmjs.com/package/negotiator). +Extracted from [koa](https://www.npmjs.com/package/koa) for general use. + +In addition to negotiator, it allows: + +- Allows types as an array or arguments list, ie `(['text/html', 'application/json'])` + as well as `('text/html', 'application/json')`. +- Allows type shorthands such as `json`. +- Returns `false` when no types match +- Treats non-existent headers as `*` + +## Installation + +This is a [Node.js](https://nodejs.org/en/) module available through the +[npm registry](https://www.npmjs.com/). Installation is done using the +[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally): + +```sh +$ npm install accepts +``` + +## API + +```js +var accepts = require('accepts') +``` + +### accepts(req) + +Create a new `Accepts` object for the given `req`. + +#### .charset(charsets) + +Return the first accepted charset. If nothing in `charsets` is accepted, +then `false` is returned. + +#### .charsets() + +Return the charsets that the request accepts, in the order of the client's +preference (most preferred first). + +#### .encoding(encodings) + +Return the first accepted encoding. If nothing in `encodings` is accepted, +then `false` is returned. + +#### .encodings() + +Return the encodings that the request accepts, in the order of the client's +preference (most preferred first). + +#### .language(languages) + +Return the first accepted language. If nothing in `languages` is accepted, +then `false` is returned. + +#### .languages() + +Return the languages that the request accepts, in the order of the client's +preference (most preferred first). + +#### .type(types) + +Return the first accepted type (and it is returned as the same text as what +appears in the `types` array). If nothing in `types` is accepted, then `false` +is returned. + +The `types` array can contain full MIME types or file extensions. Any value +that is not a full MIME types is passed to `require('mime-types').lookup`. + +#### .types() + +Return the types that the request accepts, in the order of the client's +preference (most preferred first). + +## Examples + +### Simple type negotiation + +This simple example shows how to use `accepts` to return a different typed +respond body based on what the client wants to accept. The server lists it's +preferences in order and will get back the best match between the client and +server. + +```js +var accepts = require('accepts') +var http = require('http') + +function app (req, res) { + var accept = accepts(req) + + // the order of this list is significant; should be server preferred order + switch (accept.type(['json', 'html'])) { + case 'json': + res.setHeader('Content-Type', 'application/json') + res.write('{"hello":"world!"}') + break + case 'html': + res.setHeader('Content-Type', 'text/html') + res.write('hello, world!') + break + default: + // the fallback is text/plain, so no need to specify it above + res.setHeader('Content-Type', 'text/plain') + res.write('hello, world!') + break + } + + res.end() +} + +http.createServer(app).listen(3000) +``` + +You can test this out with the cURL program: +```sh +curl -I -H'Accept: text/html' http://localhost:3000/ +``` + +## License + +[MIT](LICENSE) + +[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/accepts/master +[coveralls-url]: https://coveralls.io/r/jshttp/accepts?branch=master +[github-actions-ci-image]: https://badgen.net/github/checks/jshttp/accepts/master?label=ci +[github-actions-ci-url]: https://github.com/jshttp/accepts/actions/workflows/ci.yml +[node-version-image]: https://badgen.net/npm/node/accepts +[node-version-url]: https://nodejs.org/en/download +[npm-downloads-image]: https://badgen.net/npm/dm/accepts +[npm-url]: https://npmjs.org/package/accepts +[npm-version-image]: https://badgen.net/npm/v/accepts diff --git a/doubao-asr-demo/node_modules/accepts/index.js b/doubao-asr-demo/node_modules/accepts/index.js new file mode 100644 index 0000000..e9b2f63 --- /dev/null +++ b/doubao-asr-demo/node_modules/accepts/index.js @@ -0,0 +1,238 @@ +/*! + * accepts + * Copyright(c) 2014 Jonathan Ong + * Copyright(c) 2015 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict' + +/** + * Module dependencies. + * @private + */ + +var Negotiator = require('negotiator') +var mime = require('mime-types') + +/** + * Module exports. + * @public + */ + +module.exports = Accepts + +/** + * Create a new Accepts object for the given req. + * + * @param {object} req + * @public + */ + +function Accepts (req) { + if (!(this instanceof Accepts)) { + return new Accepts(req) + } + + this.headers = req.headers + this.negotiator = new Negotiator(req) +} + +/** + * Check if the given `type(s)` is acceptable, returning + * the best match when true, otherwise `undefined`, in which + * case you should respond with 406 "Not Acceptable". + * + * The `type` value may be a single mime type string + * such as "application/json", the extension name + * such as "json" or an array `["json", "html", "text/plain"]`. When a list + * or array is given the _best_ match, if any is returned. + * + * Examples: + * + * // Accept: text/html + * this.types('html'); + * // => "html" + * + * // Accept: text/*, application/json + * this.types('html'); + * // => "html" + * this.types('text/html'); + * // => "text/html" + * this.types('json', 'text'); + * // => "json" + * this.types('application/json'); + * // => "application/json" + * + * // Accept: text/*, application/json + * this.types('image/png'); + * this.types('png'); + * // => undefined + * + * // Accept: text/*;q=.5, application/json + * this.types(['html', 'json']); + * this.types('html', 'json'); + * // => "json" + * + * @param {String|Array} types... + * @return {String|Array|Boolean} + * @public + */ + +Accepts.prototype.type = +Accepts.prototype.types = function (types_) { + var types = types_ + + // support flattened arguments + if (types && !Array.isArray(types)) { + types = new Array(arguments.length) + for (var i = 0; i < types.length; i++) { + types[i] = arguments[i] + } + } + + // no types, return all requested types + if (!types || types.length === 0) { + return this.negotiator.mediaTypes() + } + + // no accept header, return first given type + if (!this.headers.accept) { + return types[0] + } + + var mimes = types.map(extToMime) + var accepts = this.negotiator.mediaTypes(mimes.filter(validMime)) + var first = accepts[0] + + return first + ? types[mimes.indexOf(first)] + : false +} + +/** + * Return accepted encodings or best fit based on `encodings`. + * + * Given `Accept-Encoding: gzip, deflate` + * an array sorted by quality is returned: + * + * ['gzip', 'deflate'] + * + * @param {String|Array} encodings... + * @return {String|Array} + * @public + */ + +Accepts.prototype.encoding = +Accepts.prototype.encodings = function (encodings_) { + var encodings = encodings_ + + // support flattened arguments + if (encodings && !Array.isArray(encodings)) { + encodings = new Array(arguments.length) + for (var i = 0; i < encodings.length; i++) { + encodings[i] = arguments[i] + } + } + + // no encodings, return all requested encodings + if (!encodings || encodings.length === 0) { + return this.negotiator.encodings() + } + + return this.negotiator.encodings(encodings)[0] || false +} + +/** + * Return accepted charsets or best fit based on `charsets`. + * + * Given `Accept-Charset: utf-8, iso-8859-1;q=0.2, utf-7;q=0.5` + * an array sorted by quality is returned: + * + * ['utf-8', 'utf-7', 'iso-8859-1'] + * + * @param {String|Array} charsets... + * @return {String|Array} + * @public + */ + +Accepts.prototype.charset = +Accepts.prototype.charsets = function (charsets_) { + var charsets = charsets_ + + // support flattened arguments + if (charsets && !Array.isArray(charsets)) { + charsets = new Array(arguments.length) + for (var i = 0; i < charsets.length; i++) { + charsets[i] = arguments[i] + } + } + + // no charsets, return all requested charsets + if (!charsets || charsets.length === 0) { + return this.negotiator.charsets() + } + + return this.negotiator.charsets(charsets)[0] || false +} + +/** + * Return accepted languages or best fit based on `langs`. + * + * Given `Accept-Language: en;q=0.8, es, pt` + * an array sorted by quality is returned: + * + * ['es', 'pt', 'en'] + * + * @param {String|Array} langs... + * @return {Array|String} + * @public + */ + +Accepts.prototype.lang = +Accepts.prototype.langs = +Accepts.prototype.language = +Accepts.prototype.languages = function (languages_) { + var languages = languages_ + + // support flattened arguments + if (languages && !Array.isArray(languages)) { + languages = new Array(arguments.length) + for (var i = 0; i < languages.length; i++) { + languages[i] = arguments[i] + } + } + + // no languages, return all requested languages + if (!languages || languages.length === 0) { + return this.negotiator.languages() + } + + return this.negotiator.languages(languages)[0] || false +} + +/** + * Convert extnames to mime. + * + * @param {String} type + * @return {String} + * @private + */ + +function extToMime (type) { + return type.indexOf('/') === -1 + ? mime.lookup(type) + : type +} + +/** + * Check if mime is valid. + * + * @param {String} type + * @return {String} + * @private + */ + +function validMime (type) { + return typeof type === 'string' +} diff --git a/doubao-asr-demo/node_modules/accepts/package.json b/doubao-asr-demo/node_modules/accepts/package.json new file mode 100644 index 0000000..0f2d15d --- /dev/null +++ b/doubao-asr-demo/node_modules/accepts/package.json @@ -0,0 +1,47 @@ +{ + "name": "accepts", + "description": "Higher-level content negotiation", + "version": "1.3.8", + "contributors": [ + "Douglas Christopher Wilson ", + "Jonathan Ong (http://jongleberry.com)" + ], + "license": "MIT", + "repository": "jshttp/accepts", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "devDependencies": { + "deep-equal": "1.0.1", + "eslint": "7.32.0", + "eslint-config-standard": "14.1.1", + "eslint-plugin-import": "2.25.4", + "eslint-plugin-markdown": "2.2.1", + "eslint-plugin-node": "11.1.0", + "eslint-plugin-promise": "4.3.1", + "eslint-plugin-standard": "4.1.0", + "mocha": "9.2.0", + "nyc": "15.1.0" + }, + "files": [ + "LICENSE", + "HISTORY.md", + "index.js" + ], + "engines": { + "node": ">= 0.6" + }, + "scripts": { + "lint": "eslint .", + "test": "mocha --reporter spec --check-leaks --bail test/", + "test-ci": "nyc --reporter=lcov --reporter=text npm test", + "test-cov": "nyc --reporter=html --reporter=text npm test" + }, + "keywords": [ + "content", + "negotiation", + "accept", + "accepts" + ] +} diff --git a/doubao-asr-demo/node_modules/array-flatten/LICENSE b/doubao-asr-demo/node_modules/array-flatten/LICENSE new file mode 100644 index 0000000..983fbe8 --- /dev/null +++ b/doubao-asr-demo/node_modules/array-flatten/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014 Blake Embrey (hello@blakeembrey.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/doubao-asr-demo/node_modules/array-flatten/README.md b/doubao-asr-demo/node_modules/array-flatten/README.md new file mode 100644 index 0000000..91fa5b6 --- /dev/null +++ b/doubao-asr-demo/node_modules/array-flatten/README.md @@ -0,0 +1,43 @@ +# Array Flatten + +[![NPM version][npm-image]][npm-url] +[![NPM downloads][downloads-image]][downloads-url] +[![Build status][travis-image]][travis-url] +[![Test coverage][coveralls-image]][coveralls-url] + +> Flatten an array of nested arrays into a single flat array. Accepts an optional depth. + +## Installation + +``` +npm install array-flatten --save +``` + +## Usage + +```javascript +var flatten = require('array-flatten') + +flatten([1, [2, [3, [4, [5], 6], 7], 8], 9]) +//=> [1, 2, 3, 4, 5, 6, 7, 8, 9] + +flatten([1, [2, [3, [4, [5], 6], 7], 8], 9], 2) +//=> [1, 2, 3, [4, [5], 6], 7, 8, 9] + +(function () { + flatten(arguments) //=> [1, 2, 3] +})(1, [2, 3]) +``` + +## License + +MIT + +[npm-image]: https://img.shields.io/npm/v/array-flatten.svg?style=flat +[npm-url]: https://npmjs.org/package/array-flatten +[downloads-image]: https://img.shields.io/npm/dm/array-flatten.svg?style=flat +[downloads-url]: https://npmjs.org/package/array-flatten +[travis-image]: https://img.shields.io/travis/blakeembrey/array-flatten.svg?style=flat +[travis-url]: https://travis-ci.org/blakeembrey/array-flatten +[coveralls-image]: https://img.shields.io/coveralls/blakeembrey/array-flatten.svg?style=flat +[coveralls-url]: https://coveralls.io/r/blakeembrey/array-flatten?branch=master diff --git a/doubao-asr-demo/node_modules/array-flatten/array-flatten.js b/doubao-asr-demo/node_modules/array-flatten/array-flatten.js new file mode 100644 index 0000000..089117b --- /dev/null +++ b/doubao-asr-demo/node_modules/array-flatten/array-flatten.js @@ -0,0 +1,64 @@ +'use strict' + +/** + * Expose `arrayFlatten`. + */ +module.exports = arrayFlatten + +/** + * Recursive flatten function with depth. + * + * @param {Array} array + * @param {Array} result + * @param {Number} depth + * @return {Array} + */ +function flattenWithDepth (array, result, depth) { + for (var i = 0; i < array.length; i++) { + var value = array[i] + + if (depth > 0 && Array.isArray(value)) { + flattenWithDepth(value, result, depth - 1) + } else { + result.push(value) + } + } + + return result +} + +/** + * Recursive flatten function. Omitting depth is slightly faster. + * + * @param {Array} array + * @param {Array} result + * @return {Array} + */ +function flattenForever (array, result) { + for (var i = 0; i < array.length; i++) { + var value = array[i] + + if (Array.isArray(value)) { + flattenForever(value, result) + } else { + result.push(value) + } + } + + return result +} + +/** + * Flatten an array, with the ability to define a depth. + * + * @param {Array} array + * @param {Number} depth + * @return {Array} + */ +function arrayFlatten (array, depth) { + if (depth == null) { + return flattenForever(array, []) + } + + return flattenWithDepth(array, [], depth) +} diff --git a/doubao-asr-demo/node_modules/array-flatten/package.json b/doubao-asr-demo/node_modules/array-flatten/package.json new file mode 100644 index 0000000..1a24e2a --- /dev/null +++ b/doubao-asr-demo/node_modules/array-flatten/package.json @@ -0,0 +1,39 @@ +{ + "name": "array-flatten", + "version": "1.1.1", + "description": "Flatten an array of nested arrays into a single flat array", + "main": "array-flatten.js", + "files": [ + "array-flatten.js", + "LICENSE" + ], + "scripts": { + "test": "istanbul cover _mocha -- -R spec" + }, + "repository": { + "type": "git", + "url": "git://github.com/blakeembrey/array-flatten.git" + }, + "keywords": [ + "array", + "flatten", + "arguments", + "depth" + ], + "author": { + "name": "Blake Embrey", + "email": "hello@blakeembrey.com", + "url": "http://blakeembrey.me" + }, + "license": "MIT", + "bugs": { + "url": "https://github.com/blakeembrey/array-flatten/issues" + }, + "homepage": "https://github.com/blakeembrey/array-flatten", + "devDependencies": { + "istanbul": "^0.3.13", + "mocha": "^2.2.4", + "pre-commit": "^1.0.7", + "standard": "^3.7.3" + } +} diff --git a/doubao-asr-demo/node_modules/body-parser/HISTORY.md b/doubao-asr-demo/node_modules/body-parser/HISTORY.md new file mode 100644 index 0000000..81d23e0 --- /dev/null +++ b/doubao-asr-demo/node_modules/body-parser/HISTORY.md @@ -0,0 +1,672 @@ +1.20.3 / 2024-09-10 +=================== + + * deps: qs@6.13.0 + * add `depth` option to customize the depth level in the parser + * IMPORTANT: The default `depth` level for parsing URL-encoded data is now `32` (previously was `Infinity`) + +1.20.2 / 2023-02-21 +=================== + + * Fix strict json error message on Node.js 19+ + * deps: content-type@~1.0.5 + - perf: skip value escaping when unnecessary + * deps: raw-body@2.5.2 + +1.20.1 / 2022-10-06 +=================== + + * deps: qs@6.11.0 + * perf: remove unnecessary object clone + +1.20.0 / 2022-04-02 +=================== + + * Fix error message for json parse whitespace in `strict` + * Fix internal error when inflated body exceeds limit + * Prevent loss of async hooks context + * Prevent hanging when request already read + * deps: depd@2.0.0 + - Replace internal `eval` usage with `Function` constructor + - Use instance methods on `process` to check for listeners + * deps: http-errors@2.0.0 + - deps: depd@2.0.0 + - deps: statuses@2.0.1 + * deps: on-finished@2.4.1 + * deps: qs@6.10.3 + * deps: raw-body@2.5.1 + - deps: http-errors@2.0.0 + +1.19.2 / 2022-02-15 +=================== + + * deps: bytes@3.1.2 + * deps: qs@6.9.7 + * Fix handling of `__proto__` keys + * deps: raw-body@2.4.3 + - deps: bytes@3.1.2 + +1.19.1 / 2021-12-10 +=================== + + * deps: bytes@3.1.1 + * deps: http-errors@1.8.1 + - deps: inherits@2.0.4 + - deps: toidentifier@1.0.1 + - deps: setprototypeof@1.2.0 + * deps: qs@6.9.6 + * deps: raw-body@2.4.2 + - deps: bytes@3.1.1 + - deps: http-errors@1.8.1 + * deps: safe-buffer@5.2.1 + * deps: type-is@~1.6.18 + +1.19.0 / 2019-04-25 +=================== + + * deps: bytes@3.1.0 + - Add petabyte (`pb`) support + * deps: http-errors@1.7.2 + - Set constructor name when possible + - deps: setprototypeof@1.1.1 + - deps: statuses@'>= 1.5.0 < 2' + * deps: iconv-lite@0.4.24 + - Added encoding MIK + * deps: qs@6.7.0 + - Fix parsing array brackets after index + * deps: raw-body@2.4.0 + - deps: bytes@3.1.0 + - deps: http-errors@1.7.2 + - deps: iconv-lite@0.4.24 + * deps: type-is@~1.6.17 + - deps: mime-types@~2.1.24 + - perf: prevent internal `throw` on invalid type + +1.18.3 / 2018-05-14 +=================== + + * Fix stack trace for strict json parse error + * deps: depd@~1.1.2 + - perf: remove argument reassignment + * deps: http-errors@~1.6.3 + - deps: depd@~1.1.2 + - deps: setprototypeof@1.1.0 + - deps: statuses@'>= 1.3.1 < 2' + * deps: iconv-lite@0.4.23 + - Fix loading encoding with year appended + - Fix deprecation warnings on Node.js 10+ + * deps: qs@6.5.2 + * deps: raw-body@2.3.3 + - deps: http-errors@1.6.3 + - deps: iconv-lite@0.4.23 + * deps: type-is@~1.6.16 + - deps: mime-types@~2.1.18 + +1.18.2 / 2017-09-22 +=================== + + * deps: debug@2.6.9 + * perf: remove argument reassignment + +1.18.1 / 2017-09-12 +=================== + + * deps: content-type@~1.0.4 + - perf: remove argument reassignment + - perf: skip parameter parsing when no parameters + * deps: iconv-lite@0.4.19 + - Fix ISO-8859-1 regression + - Update Windows-1255 + * deps: qs@6.5.1 + - Fix parsing & compacting very deep objects + * deps: raw-body@2.3.2 + - deps: iconv-lite@0.4.19 + +1.18.0 / 2017-09-08 +=================== + + * Fix JSON strict violation error to match native parse error + * Include the `body` property on verify errors + * Include the `type` property on all generated errors + * Use `http-errors` to set status code on errors + * deps: bytes@3.0.0 + * deps: debug@2.6.8 + * deps: depd@~1.1.1 + - Remove unnecessary `Buffer` loading + * deps: http-errors@~1.6.2 + - deps: depd@1.1.1 + * deps: iconv-lite@0.4.18 + - Add support for React Native + - Add a warning if not loaded as utf-8 + - Fix CESU-8 decoding in Node.js 8 + - Improve speed of ISO-8859-1 encoding + * deps: qs@6.5.0 + * deps: raw-body@2.3.1 + - Use `http-errors` for standard emitted errors + - deps: bytes@3.0.0 + - deps: iconv-lite@0.4.18 + - perf: skip buffer decoding on overage chunk + * perf: prevent internal `throw` when missing charset + +1.17.2 / 2017-05-17 +=================== + + * deps: debug@2.6.7 + - Fix `DEBUG_MAX_ARRAY_LENGTH` + - deps: ms@2.0.0 + * deps: type-is@~1.6.15 + - deps: mime-types@~2.1.15 + +1.17.1 / 2017-03-06 +=================== + + * deps: qs@6.4.0 + - Fix regression parsing keys starting with `[` + +1.17.0 / 2017-03-01 +=================== + + * deps: http-errors@~1.6.1 + - Make `message` property enumerable for `HttpError`s + - deps: setprototypeof@1.0.3 + * deps: qs@6.3.1 + - Fix compacting nested arrays + +1.16.1 / 2017-02-10 +=================== + + * deps: debug@2.6.1 + - Fix deprecation messages in WebStorm and other editors + - Undeprecate `DEBUG_FD` set to `1` or `2` + +1.16.0 / 2017-01-17 +=================== + + * deps: debug@2.6.0 + - Allow colors in workers + - Deprecated `DEBUG_FD` environment variable + - Fix error when running under React Native + - Use same color for same namespace + - deps: ms@0.7.2 + * deps: http-errors@~1.5.1 + - deps: inherits@2.0.3 + - deps: setprototypeof@1.0.2 + - deps: statuses@'>= 1.3.1 < 2' + * deps: iconv-lite@0.4.15 + - Added encoding MS-31J + - Added encoding MS-932 + - Added encoding MS-936 + - Added encoding MS-949 + - Added encoding MS-950 + - Fix GBK/GB18030 handling of Euro character + * deps: qs@6.2.1 + - Fix array parsing from skipping empty values + * deps: raw-body@~2.2.0 + - deps: iconv-lite@0.4.15 + * deps: type-is@~1.6.14 + - deps: mime-types@~2.1.13 + +1.15.2 / 2016-06-19 +=================== + + * deps: bytes@2.4.0 + * deps: content-type@~1.0.2 + - perf: enable strict mode + * deps: http-errors@~1.5.0 + - Use `setprototypeof` module to replace `__proto__` setting + - deps: statuses@'>= 1.3.0 < 2' + - perf: enable strict mode + * deps: qs@6.2.0 + * deps: raw-body@~2.1.7 + - deps: bytes@2.4.0 + - perf: remove double-cleanup on happy path + * deps: type-is@~1.6.13 + - deps: mime-types@~2.1.11 + +1.15.1 / 2016-05-05 +=================== + + * deps: bytes@2.3.0 + - Drop partial bytes on all parsed units + - Fix parsing byte string that looks like hex + * deps: raw-body@~2.1.6 + - deps: bytes@2.3.0 + * deps: type-is@~1.6.12 + - deps: mime-types@~2.1.10 + +1.15.0 / 2016-02-10 +=================== + + * deps: http-errors@~1.4.0 + - Add `HttpError` export, for `err instanceof createError.HttpError` + - deps: inherits@2.0.1 + - deps: statuses@'>= 1.2.1 < 2' + * deps: qs@6.1.0 + * deps: type-is@~1.6.11 + - deps: mime-types@~2.1.9 + +1.14.2 / 2015-12-16 +=================== + + * deps: bytes@2.2.0 + * deps: iconv-lite@0.4.13 + * deps: qs@5.2.0 + * deps: raw-body@~2.1.5 + - deps: bytes@2.2.0 + - deps: iconv-lite@0.4.13 + * deps: type-is@~1.6.10 + - deps: mime-types@~2.1.8 + +1.14.1 / 2015-09-27 +=================== + + * Fix issue where invalid charset results in 400 when `verify` used + * deps: iconv-lite@0.4.12 + - Fix CESU-8 decoding in Node.js 4.x + * deps: raw-body@~2.1.4 + - Fix masking critical errors from `iconv-lite` + - deps: iconv-lite@0.4.12 + * deps: type-is@~1.6.9 + - deps: mime-types@~2.1.7 + +1.14.0 / 2015-09-16 +=================== + + * Fix JSON strict parse error to match syntax errors + * Provide static `require` analysis in `urlencoded` parser + * deps: depd@~1.1.0 + - Support web browser loading + * deps: qs@5.1.0 + * deps: raw-body@~2.1.3 + - Fix sync callback when attaching data listener causes sync read + * deps: type-is@~1.6.8 + - Fix type error when given invalid type to match against + - deps: mime-types@~2.1.6 + +1.13.3 / 2015-07-31 +=================== + + * deps: type-is@~1.6.6 + - deps: mime-types@~2.1.4 + +1.13.2 / 2015-07-05 +=================== + + * deps: iconv-lite@0.4.11 + * deps: qs@4.0.0 + - Fix dropping parameters like `hasOwnProperty` + - Fix user-visible incompatibilities from 3.1.0 + - Fix various parsing edge cases + * deps: raw-body@~2.1.2 + - Fix error stack traces to skip `makeError` + - deps: iconv-lite@0.4.11 + * deps: type-is@~1.6.4 + - deps: mime-types@~2.1.2 + - perf: enable strict mode + - perf: remove argument reassignment + +1.13.1 / 2015-06-16 +=================== + + * deps: qs@2.4.2 + - Downgraded from 3.1.0 because of user-visible incompatibilities + +1.13.0 / 2015-06-14 +=================== + + * Add `statusCode` property on `Error`s, in addition to `status` + * Change `type` default to `application/json` for JSON parser + * Change `type` default to `application/x-www-form-urlencoded` for urlencoded parser + * Provide static `require` analysis + * Use the `http-errors` module to generate errors + * deps: bytes@2.1.0 + - Slight optimizations + * deps: iconv-lite@0.4.10 + - The encoding UTF-16 without BOM now defaults to UTF-16LE when detection fails + - Leading BOM is now removed when decoding + * deps: on-finished@~2.3.0 + - Add defined behavior for HTTP `CONNECT` requests + - Add defined behavior for HTTP `Upgrade` requests + - deps: ee-first@1.1.1 + * deps: qs@3.1.0 + - Fix dropping parameters like `hasOwnProperty` + - Fix various parsing edge cases + - Parsed object now has `null` prototype + * deps: raw-body@~2.1.1 + - Use `unpipe` module for unpiping requests + - deps: iconv-lite@0.4.10 + * deps: type-is@~1.6.3 + - deps: mime-types@~2.1.1 + - perf: reduce try block size + - perf: remove bitwise operations + * perf: enable strict mode + * perf: remove argument reassignment + * perf: remove delete call + +1.12.4 / 2015-05-10 +=================== + + * deps: debug@~2.2.0 + * deps: qs@2.4.2 + - Fix allowing parameters like `constructor` + * deps: on-finished@~2.2.1 + * deps: raw-body@~2.0.1 + - Fix a false-positive when unpiping in Node.js 0.8 + - deps: bytes@2.0.1 + * deps: type-is@~1.6.2 + - deps: mime-types@~2.0.11 + +1.12.3 / 2015-04-15 +=================== + + * Slight efficiency improvement when not debugging + * deps: depd@~1.0.1 + * deps: iconv-lite@0.4.8 + - Add encoding alias UNICODE-1-1-UTF-7 + * deps: raw-body@1.3.4 + - Fix hanging callback if request aborts during read + - deps: iconv-lite@0.4.8 + +1.12.2 / 2015-03-16 +=================== + + * deps: qs@2.4.1 + - Fix error when parameter `hasOwnProperty` is present + +1.12.1 / 2015-03-15 +=================== + + * deps: debug@~2.1.3 + - Fix high intensity foreground color for bold + - deps: ms@0.7.0 + * deps: type-is@~1.6.1 + - deps: mime-types@~2.0.10 + +1.12.0 / 2015-02-13 +=================== + + * add `debug` messages + * accept a function for the `type` option + * use `content-type` to parse `Content-Type` headers + * deps: iconv-lite@0.4.7 + - Gracefully support enumerables on `Object.prototype` + * deps: raw-body@1.3.3 + - deps: iconv-lite@0.4.7 + * deps: type-is@~1.6.0 + - fix argument reassignment + - fix false-positives in `hasBody` `Transfer-Encoding` check + - support wildcard for both type and subtype (`*/*`) + - deps: mime-types@~2.0.9 + +1.11.0 / 2015-01-30 +=================== + + * make internal `extended: true` depth limit infinity + * deps: type-is@~1.5.6 + - deps: mime-types@~2.0.8 + +1.10.2 / 2015-01-20 +=================== + + * deps: iconv-lite@0.4.6 + - Fix rare aliases of single-byte encodings + * deps: raw-body@1.3.2 + - deps: iconv-lite@0.4.6 + +1.10.1 / 2015-01-01 +=================== + + * deps: on-finished@~2.2.0 + * deps: type-is@~1.5.5 + - deps: mime-types@~2.0.7 + +1.10.0 / 2014-12-02 +=================== + + * make internal `extended: true` array limit dynamic + +1.9.3 / 2014-11-21 +================== + + * deps: iconv-lite@0.4.5 + - Fix Windows-31J and X-SJIS encoding support + * deps: qs@2.3.3 + - Fix `arrayLimit` behavior + * deps: raw-body@1.3.1 + - deps: iconv-lite@0.4.5 + * deps: type-is@~1.5.3 + - deps: mime-types@~2.0.3 + +1.9.2 / 2014-10-27 +================== + + * deps: qs@2.3.2 + - Fix parsing of mixed objects and values + +1.9.1 / 2014-10-22 +================== + + * deps: on-finished@~2.1.1 + - Fix handling of pipelined requests + * deps: qs@2.3.0 + - Fix parsing of mixed implicit and explicit arrays + * deps: type-is@~1.5.2 + - deps: mime-types@~2.0.2 + +1.9.0 / 2014-09-24 +================== + + * include the charset in "unsupported charset" error message + * include the encoding in "unsupported content encoding" error message + * deps: depd@~1.0.0 + +1.8.4 / 2014-09-23 +================== + + * fix content encoding to be case-insensitive + +1.8.3 / 2014-09-19 +================== + + * deps: qs@2.2.4 + - Fix issue with object keys starting with numbers truncated + +1.8.2 / 2014-09-15 +================== + + * deps: depd@0.4.5 + +1.8.1 / 2014-09-07 +================== + + * deps: media-typer@0.3.0 + * deps: type-is@~1.5.1 + +1.8.0 / 2014-09-05 +================== + + * make empty-body-handling consistent between chunked requests + - empty `json` produces `{}` + - empty `raw` produces `new Buffer(0)` + - empty `text` produces `''` + - empty `urlencoded` produces `{}` + * deps: qs@2.2.3 + - Fix issue where first empty value in array is discarded + * deps: type-is@~1.5.0 + - fix `hasbody` to be true for `content-length: 0` + +1.7.0 / 2014-09-01 +================== + + * add `parameterLimit` option to `urlencoded` parser + * change `urlencoded` extended array limit to 100 + * respond with 413 when over `parameterLimit` in `urlencoded` + +1.6.7 / 2014-08-29 +================== + + * deps: qs@2.2.2 + - Remove unnecessary cloning + +1.6.6 / 2014-08-27 +================== + + * deps: qs@2.2.0 + - Array parsing fix + - Performance improvements + +1.6.5 / 2014-08-16 +================== + + * deps: on-finished@2.1.0 + +1.6.4 / 2014-08-14 +================== + + * deps: qs@1.2.2 + +1.6.3 / 2014-08-10 +================== + + * deps: qs@1.2.1 + +1.6.2 / 2014-08-07 +================== + + * deps: qs@1.2.0 + - Fix parsing array of objects + +1.6.1 / 2014-08-06 +================== + + * deps: qs@1.1.0 + - Accept urlencoded square brackets + - Accept empty values in implicit array notation + +1.6.0 / 2014-08-05 +================== + + * deps: qs@1.0.2 + - Complete rewrite + - Limits array length to 20 + - Limits object depth to 5 + - Limits parameters to 1,000 + +1.5.2 / 2014-07-27 +================== + + * deps: depd@0.4.4 + - Work-around v8 generating empty stack traces + +1.5.1 / 2014-07-26 +================== + + * deps: depd@0.4.3 + - Fix exception when global `Error.stackTraceLimit` is too low + +1.5.0 / 2014-07-20 +================== + + * deps: depd@0.4.2 + - Add `TRACE_DEPRECATION` environment variable + - Remove non-standard grey color from color output + - Support `--no-deprecation` argument + - Support `--trace-deprecation` argument + * deps: iconv-lite@0.4.4 + - Added encoding UTF-7 + * deps: raw-body@1.3.0 + - deps: iconv-lite@0.4.4 + - Added encoding UTF-7 + - Fix `Cannot switch to old mode now` error on Node.js 0.10+ + * deps: type-is@~1.3.2 + +1.4.3 / 2014-06-19 +================== + + * deps: type-is@1.3.1 + - fix global variable leak + +1.4.2 / 2014-06-19 +================== + + * deps: type-is@1.3.0 + - improve type parsing + +1.4.1 / 2014-06-19 +================== + + * fix urlencoded extended deprecation message + +1.4.0 / 2014-06-19 +================== + + * add `text` parser + * add `raw` parser + * check accepted charset in content-type (accepts utf-8) + * check accepted encoding in content-encoding (accepts identity) + * deprecate `bodyParser()` middleware; use `.json()` and `.urlencoded()` as needed + * deprecate `urlencoded()` without provided `extended` option + * lazy-load urlencoded parsers + * parsers split into files for reduced mem usage + * support gzip and deflate bodies + - set `inflate: false` to turn off + * deps: raw-body@1.2.2 + - Support all encodings from `iconv-lite` + +1.3.1 / 2014-06-11 +================== + + * deps: type-is@1.2.1 + - Switch dependency from mime to mime-types@1.0.0 + +1.3.0 / 2014-05-31 +================== + + * add `extended` option to urlencoded parser + +1.2.2 / 2014-05-27 +================== + + * deps: raw-body@1.1.6 + - assert stream encoding on node.js 0.8 + - assert stream encoding on node.js < 0.10.6 + - deps: bytes@1 + +1.2.1 / 2014-05-26 +================== + + * invoke `next(err)` after request fully read + - prevents hung responses and socket hang ups + +1.2.0 / 2014-05-11 +================== + + * add `verify` option + * deps: type-is@1.2.0 + - support suffix matching + +1.1.2 / 2014-05-11 +================== + + * improve json parser speed + +1.1.1 / 2014-05-11 +================== + + * fix repeated limit parsing with every request + +1.1.0 / 2014-05-10 +================== + + * add `type` option + * deps: pin for safety and consistency + +1.0.2 / 2014-04-14 +================== + + * use `type-is` module + +1.0.1 / 2014-03-20 +================== + + * lower default limits to 100kb diff --git a/doubao-asr-demo/node_modules/body-parser/LICENSE b/doubao-asr-demo/node_modules/body-parser/LICENSE new file mode 100644 index 0000000..386b7b6 --- /dev/null +++ b/doubao-asr-demo/node_modules/body-parser/LICENSE @@ -0,0 +1,23 @@ +(The MIT License) + +Copyright (c) 2014 Jonathan Ong +Copyright (c) 2014-2015 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/doubao-asr-demo/node_modules/body-parser/README.md b/doubao-asr-demo/node_modules/body-parser/README.md new file mode 100644 index 0000000..f6661b7 --- /dev/null +++ b/doubao-asr-demo/node_modules/body-parser/README.md @@ -0,0 +1,476 @@ +# body-parser + +[![NPM Version][npm-version-image]][npm-url] +[![NPM Downloads][npm-downloads-image]][npm-url] +[![Build Status][ci-image]][ci-url] +[![Test Coverage][coveralls-image]][coveralls-url] +[![OpenSSF Scorecard Badge][ossf-scorecard-badge]][ossf-scorecard-visualizer] + +Node.js body parsing middleware. + +Parse incoming request bodies in a middleware before your handlers, available +under the `req.body` property. + +**Note** As `req.body`'s shape is based on user-controlled input, all +properties and values in this object are untrusted and should be validated +before trusting. For example, `req.body.foo.toString()` may fail in multiple +ways, for example the `foo` property may not be there or may not be a string, +and `toString` may not be a function and instead a string or other user input. + +[Learn about the anatomy of an HTTP transaction in Node.js](https://nodejs.org/en/docs/guides/anatomy-of-an-http-transaction/). + +_This does not handle multipart bodies_, due to their complex and typically +large nature. For multipart bodies, you may be interested in the following +modules: + + * [busboy](https://www.npmjs.org/package/busboy#readme) and + [connect-busboy](https://www.npmjs.org/package/connect-busboy#readme) + * [multiparty](https://www.npmjs.org/package/multiparty#readme) and + [connect-multiparty](https://www.npmjs.org/package/connect-multiparty#readme) + * [formidable](https://www.npmjs.org/package/formidable#readme) + * [multer](https://www.npmjs.org/package/multer#readme) + +This module provides the following parsers: + + * [JSON body parser](#bodyparserjsonoptions) + * [Raw body parser](#bodyparserrawoptions) + * [Text body parser](#bodyparsertextoptions) + * [URL-encoded form body parser](#bodyparserurlencodedoptions) + +Other body parsers you might be interested in: + +- [body](https://www.npmjs.org/package/body#readme) +- [co-body](https://www.npmjs.org/package/co-body#readme) + +## Installation + +```sh +$ npm install body-parser +``` + +## API + +```js +var bodyParser = require('body-parser') +``` + +The `bodyParser` object exposes various factories to create middlewares. All +middlewares will populate the `req.body` property with the parsed body when +the `Content-Type` request header matches the `type` option, or an empty +object (`{}`) if there was no body to parse, the `Content-Type` was not matched, +or an error occurred. + +The various errors returned by this module are described in the +[errors section](#errors). + +### bodyParser.json([options]) + +Returns middleware that only parses `json` and only looks at requests where +the `Content-Type` header matches the `type` option. This parser accepts any +Unicode encoding of the body and supports automatic inflation of `gzip` and +`deflate` encodings. + +A new `body` object containing the parsed data is populated on the `request` +object after the middleware (i.e. `req.body`). + +#### Options + +The `json` function takes an optional `options` object that may contain any of +the following keys: + +##### inflate + +When set to `true`, then deflated (compressed) bodies will be inflated; when +`false`, deflated bodies are rejected. Defaults to `true`. + +##### limit + +Controls the maximum request body size. If this is a number, then the value +specifies the number of bytes; if it is a string, the value is passed to the +[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults +to `'100kb'`. + +##### reviver + +The `reviver` option is passed directly to `JSON.parse` as the second +argument. You can find more information on this argument +[in the MDN documentation about JSON.parse](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Example.3A_Using_the_reviver_parameter). + +##### strict + +When set to `true`, will only accept arrays and objects; when `false` will +accept anything `JSON.parse` accepts. Defaults to `true`. + +##### type + +The `type` option is used to determine what media type the middleware will +parse. This option can be a string, array of strings, or a function. If not a +function, `type` option is passed directly to the +[type-is](https://www.npmjs.org/package/type-is#readme) library and this can +be an extension name (like `json`), a mime type (like `application/json`), or +a mime type with a wildcard (like `*/*` or `*/json`). If a function, the `type` +option is called as `fn(req)` and the request is parsed if it returns a truthy +value. Defaults to `application/json`. + +##### verify + +The `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`, +where `buf` is a `Buffer` of the raw request body and `encoding` is the +encoding of the request. The parsing can be aborted by throwing an error. + +### bodyParser.raw([options]) + +Returns middleware that parses all bodies as a `Buffer` and only looks at +requests where the `Content-Type` header matches the `type` option. This +parser supports automatic inflation of `gzip` and `deflate` encodings. + +A new `body` object containing the parsed data is populated on the `request` +object after the middleware (i.e. `req.body`). This will be a `Buffer` object +of the body. + +#### Options + +The `raw` function takes an optional `options` object that may contain any of +the following keys: + +##### inflate + +When set to `true`, then deflated (compressed) bodies will be inflated; when +`false`, deflated bodies are rejected. Defaults to `true`. + +##### limit + +Controls the maximum request body size. If this is a number, then the value +specifies the number of bytes; if it is a string, the value is passed to the +[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults +to `'100kb'`. + +##### type + +The `type` option is used to determine what media type the middleware will +parse. This option can be a string, array of strings, or a function. +If not a function, `type` option is passed directly to the +[type-is](https://www.npmjs.org/package/type-is#readme) library and this +can be an extension name (like `bin`), a mime type (like +`application/octet-stream`), or a mime type with a wildcard (like `*/*` or +`application/*`). If a function, the `type` option is called as `fn(req)` +and the request is parsed if it returns a truthy value. Defaults to +`application/octet-stream`. + +##### verify + +The `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`, +where `buf` is a `Buffer` of the raw request body and `encoding` is the +encoding of the request. The parsing can be aborted by throwing an error. + +### bodyParser.text([options]) + +Returns middleware that parses all bodies as a string and only looks at +requests where the `Content-Type` header matches the `type` option. This +parser supports automatic inflation of `gzip` and `deflate` encodings. + +A new `body` string containing the parsed data is populated on the `request` +object after the middleware (i.e. `req.body`). This will be a string of the +body. + +#### Options + +The `text` function takes an optional `options` object that may contain any of +the following keys: + +##### defaultCharset + +Specify the default character set for the text content if the charset is not +specified in the `Content-Type` header of the request. Defaults to `utf-8`. + +##### inflate + +When set to `true`, then deflated (compressed) bodies will be inflated; when +`false`, deflated bodies are rejected. Defaults to `true`. + +##### limit + +Controls the maximum request body size. If this is a number, then the value +specifies the number of bytes; if it is a string, the value is passed to the +[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults +to `'100kb'`. + +##### type + +The `type` option is used to determine what media type the middleware will +parse. This option can be a string, array of strings, or a function. If not +a function, `type` option is passed directly to the +[type-is](https://www.npmjs.org/package/type-is#readme) library and this can +be an extension name (like `txt`), a mime type (like `text/plain`), or a mime +type with a wildcard (like `*/*` or `text/*`). If a function, the `type` +option is called as `fn(req)` and the request is parsed if it returns a +truthy value. Defaults to `text/plain`. + +##### verify + +The `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`, +where `buf` is a `Buffer` of the raw request body and `encoding` is the +encoding of the request. The parsing can be aborted by throwing an error. + +### bodyParser.urlencoded([options]) + +Returns middleware that only parses `urlencoded` bodies and only looks at +requests where the `Content-Type` header matches the `type` option. This +parser accepts only UTF-8 encoding of the body and supports automatic +inflation of `gzip` and `deflate` encodings. + +A new `body` object containing the parsed data is populated on the `request` +object after the middleware (i.e. `req.body`). This object will contain +key-value pairs, where the value can be a string or array (when `extended` is +`false`), or any type (when `extended` is `true`). + +#### Options + +The `urlencoded` function takes an optional `options` object that may contain +any of the following keys: + +##### extended + +The `extended` option allows to choose between parsing the URL-encoded data +with the `querystring` library (when `false`) or the `qs` library (when +`true`). The "extended" syntax allows for rich objects and arrays to be +encoded into the URL-encoded format, allowing for a JSON-like experience +with URL-encoded. For more information, please +[see the qs library](https://www.npmjs.org/package/qs#readme). + +Defaults to `true`, but using the default has been deprecated. Please +research into the difference between `qs` and `querystring` and choose the +appropriate setting. + +##### inflate + +When set to `true`, then deflated (compressed) bodies will be inflated; when +`false`, deflated bodies are rejected. Defaults to `true`. + +##### limit + +Controls the maximum request body size. If this is a number, then the value +specifies the number of bytes; if it is a string, the value is passed to the +[bytes](https://www.npmjs.com/package/bytes) library for parsing. Defaults +to `'100kb'`. + +##### parameterLimit + +The `parameterLimit` option controls the maximum number of parameters that +are allowed in the URL-encoded data. If a request contains more parameters +than this value, a 413 will be returned to the client. Defaults to `1000`. + +##### type + +The `type` option is used to determine what media type the middleware will +parse. This option can be a string, array of strings, or a function. If not +a function, `type` option is passed directly to the +[type-is](https://www.npmjs.org/package/type-is#readme) library and this can +be an extension name (like `urlencoded`), a mime type (like +`application/x-www-form-urlencoded`), or a mime type with a wildcard (like +`*/x-www-form-urlencoded`). If a function, the `type` option is called as +`fn(req)` and the request is parsed if it returns a truthy value. Defaults +to `application/x-www-form-urlencoded`. + +##### verify + +The `verify` option, if supplied, is called as `verify(req, res, buf, encoding)`, +where `buf` is a `Buffer` of the raw request body and `encoding` is the +encoding of the request. The parsing can be aborted by throwing an error. + +#### depth + +The `depth` option is used to configure the maximum depth of the `qs` library when `extended` is `true`. This allows you to limit the amount of keys that are parsed and can be useful to prevent certain types of abuse. Defaults to `32`. It is recommended to keep this value as low as possible. + +## Errors + +The middlewares provided by this module create errors using the +[`http-errors` module](https://www.npmjs.com/package/http-errors). The errors +will typically have a `status`/`statusCode` property that contains the suggested +HTTP response code, an `expose` property to determine if the `message` property +should be displayed to the client, a `type` property to determine the type of +error without matching against the `message`, and a `body` property containing +the read body, if available. + +The following are the common errors created, though any error can come through +for various reasons. + +### content encoding unsupported + +This error will occur when the request had a `Content-Encoding` header that +contained an encoding but the "inflation" option was set to `false`. The +`status` property is set to `415`, the `type` property is set to +`'encoding.unsupported'`, and the `charset` property will be set to the +encoding that is unsupported. + +### entity parse failed + +This error will occur when the request contained an entity that could not be +parsed by the middleware. The `status` property is set to `400`, the `type` +property is set to `'entity.parse.failed'`, and the `body` property is set to +the entity value that failed parsing. + +### entity verify failed + +This error will occur when the request contained an entity that could not be +failed verification by the defined `verify` option. The `status` property is +set to `403`, the `type` property is set to `'entity.verify.failed'`, and the +`body` property is set to the entity value that failed verification. + +### request aborted + +This error will occur when the request is aborted by the client before reading +the body has finished. The `received` property will be set to the number of +bytes received before the request was aborted and the `expected` property is +set to the number of expected bytes. The `status` property is set to `400` +and `type` property is set to `'request.aborted'`. + +### request entity too large + +This error will occur when the request body's size is larger than the "limit" +option. The `limit` property will be set to the byte limit and the `length` +property will be set to the request body's length. The `status` property is +set to `413` and the `type` property is set to `'entity.too.large'`. + +### request size did not match content length + +This error will occur when the request's length did not match the length from +the `Content-Length` header. This typically occurs when the request is malformed, +typically when the `Content-Length` header was calculated based on characters +instead of bytes. The `status` property is set to `400` and the `type` property +is set to `'request.size.invalid'`. + +### stream encoding should not be set + +This error will occur when something called the `req.setEncoding` method prior +to this middleware. This module operates directly on bytes only and you cannot +call `req.setEncoding` when using this module. The `status` property is set to +`500` and the `type` property is set to `'stream.encoding.set'`. + +### stream is not readable + +This error will occur when the request is no longer readable when this middleware +attempts to read it. This typically means something other than a middleware from +this module read the request body already and the middleware was also configured to +read the same request. The `status` property is set to `500` and the `type` +property is set to `'stream.not.readable'`. + +### too many parameters + +This error will occur when the content of the request exceeds the configured +`parameterLimit` for the `urlencoded` parser. The `status` property is set to +`413` and the `type` property is set to `'parameters.too.many'`. + +### unsupported charset "BOGUS" + +This error will occur when the request had a charset parameter in the +`Content-Type` header, but the `iconv-lite` module does not support it OR the +parser does not support it. The charset is contained in the message as well +as in the `charset` property. The `status` property is set to `415`, the +`type` property is set to `'charset.unsupported'`, and the `charset` property +is set to the charset that is unsupported. + +### unsupported content encoding "bogus" + +This error will occur when the request had a `Content-Encoding` header that +contained an unsupported encoding. The encoding is contained in the message +as well as in the `encoding` property. The `status` property is set to `415`, +the `type` property is set to `'encoding.unsupported'`, and the `encoding` +property is set to the encoding that is unsupported. + +### The input exceeded the depth + +This error occurs when using `bodyParser.urlencoded` with the `extended` property set to `true` and the input exceeds the configured `depth` option. The `status` property is set to `400`. It is recommended to review the `depth` option and evaluate if it requires a higher value. When the `depth` option is set to `32` (default value), the error will not be thrown. + +## Examples + +### Express/Connect top-level generic + +This example demonstrates adding a generic JSON and URL-encoded parser as a +top-level middleware, which will parse the bodies of all incoming requests. +This is the simplest setup. + +```js +var express = require('express') +var bodyParser = require('body-parser') + +var app = express() + +// parse application/x-www-form-urlencoded +app.use(bodyParser.urlencoded({ extended: false })) + +// parse application/json +app.use(bodyParser.json()) + +app.use(function (req, res) { + res.setHeader('Content-Type', 'text/plain') + res.write('you posted:\n') + res.end(JSON.stringify(req.body, null, 2)) +}) +``` + +### Express route-specific + +This example demonstrates adding body parsers specifically to the routes that +need them. In general, this is the most recommended way to use body-parser with +Express. + +```js +var express = require('express') +var bodyParser = require('body-parser') + +var app = express() + +// create application/json parser +var jsonParser = bodyParser.json() + +// create application/x-www-form-urlencoded parser +var urlencodedParser = bodyParser.urlencoded({ extended: false }) + +// POST /login gets urlencoded bodies +app.post('/login', urlencodedParser, function (req, res) { + res.send('welcome, ' + req.body.username) +}) + +// POST /api/users gets JSON bodies +app.post('/api/users', jsonParser, function (req, res) { + // create user in req.body +}) +``` + +### Change accepted type for parsers + +All the parsers accept a `type` option which allows you to change the +`Content-Type` that the middleware will parse. + +```js +var express = require('express') +var bodyParser = require('body-parser') + +var app = express() + +// parse various different custom JSON types as JSON +app.use(bodyParser.json({ type: 'application/*+json' })) + +// parse some custom thing into a Buffer +app.use(bodyParser.raw({ type: 'application/vnd.custom-type' })) + +// parse an HTML body into a string +app.use(bodyParser.text({ type: 'text/html' })) +``` + +## License + +[MIT](LICENSE) + +[ci-image]: https://badgen.net/github/checks/expressjs/body-parser/master?label=ci +[ci-url]: https://github.com/expressjs/body-parser/actions/workflows/ci.yml +[coveralls-image]: https://badgen.net/coveralls/c/github/expressjs/body-parser/master +[coveralls-url]: https://coveralls.io/r/expressjs/body-parser?branch=master +[node-version-image]: https://badgen.net/npm/node/body-parser +[node-version-url]: https://nodejs.org/en/download +[npm-downloads-image]: https://badgen.net/npm/dm/body-parser +[npm-url]: https://npmjs.org/package/body-parser +[npm-version-image]: https://badgen.net/npm/v/body-parser +[ossf-scorecard-badge]: https://api.scorecard.dev/projects/github.com/expressjs/body-parser/badge +[ossf-scorecard-visualizer]: https://ossf.github.io/scorecard-visualizer/#/projects/github.com/expressjs/body-parser \ No newline at end of file diff --git a/doubao-asr-demo/node_modules/body-parser/SECURITY.md b/doubao-asr-demo/node_modules/body-parser/SECURITY.md new file mode 100644 index 0000000..9694d42 --- /dev/null +++ b/doubao-asr-demo/node_modules/body-parser/SECURITY.md @@ -0,0 +1,25 @@ +# Security Policies and Procedures + +## Reporting a Bug + +The Express team and community take all security bugs seriously. Thank you +for improving the security of Express. We appreciate your efforts and +responsible disclosure and will make every effort to acknowledge your +contributions. + +Report security bugs by emailing the current owner(s) of `body-parser`. This +information can be found in the npm registry using the command +`npm owner ls body-parser`. +If unsure or unable to get the information from the above, open an issue +in the [project issue tracker](https://github.com/expressjs/body-parser/issues) +asking for the current contact information. + +To ensure the timely response to your report, please ensure that the entirety +of the report is contained within the email body and not solely behind a web +link or an attachment. + +At least one owner will acknowledge your email within 48 hours, and will send a +more detailed response within 48 hours indicating the next steps in handling +your report. After the initial reply to your report, the owners will +endeavor to keep you informed of the progress towards a fix and full +announcement, and may ask for additional information or guidance. diff --git a/doubao-asr-demo/node_modules/body-parser/index.js b/doubao-asr-demo/node_modules/body-parser/index.js new file mode 100644 index 0000000..bb24d73 --- /dev/null +++ b/doubao-asr-demo/node_modules/body-parser/index.js @@ -0,0 +1,156 @@ +/*! + * body-parser + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict' + +/** + * Module dependencies. + * @private + */ + +var deprecate = require('depd')('body-parser') + +/** + * Cache of loaded parsers. + * @private + */ + +var parsers = Object.create(null) + +/** + * @typedef Parsers + * @type {function} + * @property {function} json + * @property {function} raw + * @property {function} text + * @property {function} urlencoded + */ + +/** + * Module exports. + * @type {Parsers} + */ + +exports = module.exports = deprecate.function(bodyParser, + 'bodyParser: use individual json/urlencoded middlewares') + +/** + * JSON parser. + * @public + */ + +Object.defineProperty(exports, 'json', { + configurable: true, + enumerable: true, + get: createParserGetter('json') +}) + +/** + * Raw parser. + * @public + */ + +Object.defineProperty(exports, 'raw', { + configurable: true, + enumerable: true, + get: createParserGetter('raw') +}) + +/** + * Text parser. + * @public + */ + +Object.defineProperty(exports, 'text', { + configurable: true, + enumerable: true, + get: createParserGetter('text') +}) + +/** + * URL-encoded parser. + * @public + */ + +Object.defineProperty(exports, 'urlencoded', { + configurable: true, + enumerable: true, + get: createParserGetter('urlencoded') +}) + +/** + * Create a middleware to parse json and urlencoded bodies. + * + * @param {object} [options] + * @return {function} + * @deprecated + * @public + */ + +function bodyParser (options) { + // use default type for parsers + var opts = Object.create(options || null, { + type: { + configurable: true, + enumerable: true, + value: undefined, + writable: true + } + }) + + var _urlencoded = exports.urlencoded(opts) + var _json = exports.json(opts) + + return function bodyParser (req, res, next) { + _json(req, res, function (err) { + if (err) return next(err) + _urlencoded(req, res, next) + }) + } +} + +/** + * Create a getter for loading a parser. + * @private + */ + +function createParserGetter (name) { + return function get () { + return loadParser(name) + } +} + +/** + * Load a parser module. + * @private + */ + +function loadParser (parserName) { + var parser = parsers[parserName] + + if (parser !== undefined) { + return parser + } + + // this uses a switch for static require analysis + switch (parserName) { + case 'json': + parser = require('./lib/types/json') + break + case 'raw': + parser = require('./lib/types/raw') + break + case 'text': + parser = require('./lib/types/text') + break + case 'urlencoded': + parser = require('./lib/types/urlencoded') + break + } + + // store to prevent invoking require() + return (parsers[parserName] = parser) +} diff --git a/doubao-asr-demo/node_modules/body-parser/lib/read.js b/doubao-asr-demo/node_modules/body-parser/lib/read.js new file mode 100644 index 0000000..fce6283 --- /dev/null +++ b/doubao-asr-demo/node_modules/body-parser/lib/read.js @@ -0,0 +1,205 @@ +/*! + * body-parser + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict' + +/** + * Module dependencies. + * @private + */ + +var createError = require('http-errors') +var destroy = require('destroy') +var getBody = require('raw-body') +var iconv = require('iconv-lite') +var onFinished = require('on-finished') +var unpipe = require('unpipe') +var zlib = require('zlib') + +/** + * Module exports. + */ + +module.exports = read + +/** + * Read a request into a buffer and parse. + * + * @param {object} req + * @param {object} res + * @param {function} next + * @param {function} parse + * @param {function} debug + * @param {object} options + * @private + */ + +function read (req, res, next, parse, debug, options) { + var length + var opts = options + var stream + + // flag as parsed + req._body = true + + // read options + var encoding = opts.encoding !== null + ? opts.encoding + : null + var verify = opts.verify + + try { + // get the content stream + stream = contentstream(req, debug, opts.inflate) + length = stream.length + stream.length = undefined + } catch (err) { + return next(err) + } + + // set raw-body options + opts.length = length + opts.encoding = verify + ? null + : encoding + + // assert charset is supported + if (opts.encoding === null && encoding !== null && !iconv.encodingExists(encoding)) { + return next(createError(415, 'unsupported charset "' + encoding.toUpperCase() + '"', { + charset: encoding.toLowerCase(), + type: 'charset.unsupported' + })) + } + + // read body + debug('read body') + getBody(stream, opts, function (error, body) { + if (error) { + var _error + + if (error.type === 'encoding.unsupported') { + // echo back charset + _error = createError(415, 'unsupported charset "' + encoding.toUpperCase() + '"', { + charset: encoding.toLowerCase(), + type: 'charset.unsupported' + }) + } else { + // set status code on error + _error = createError(400, error) + } + + // unpipe from stream and destroy + if (stream !== req) { + unpipe(req) + destroy(stream, true) + } + + // read off entire request + dump(req, function onfinished () { + next(createError(400, _error)) + }) + return + } + + // verify + if (verify) { + try { + debug('verify body') + verify(req, res, body, encoding) + } catch (err) { + next(createError(403, err, { + body: body, + type: err.type || 'entity.verify.failed' + })) + return + } + } + + // parse + var str = body + try { + debug('parse body') + str = typeof body !== 'string' && encoding !== null + ? iconv.decode(body, encoding) + : body + req.body = parse(str) + } catch (err) { + next(createError(400, err, { + body: str, + type: err.type || 'entity.parse.failed' + })) + return + } + + next() + }) +} + +/** + * Get the content stream of the request. + * + * @param {object} req + * @param {function} debug + * @param {boolean} [inflate=true] + * @return {object} + * @api private + */ + +function contentstream (req, debug, inflate) { + var encoding = (req.headers['content-encoding'] || 'identity').toLowerCase() + var length = req.headers['content-length'] + var stream + + debug('content-encoding "%s"', encoding) + + if (inflate === false && encoding !== 'identity') { + throw createError(415, 'content encoding unsupported', { + encoding: encoding, + type: 'encoding.unsupported' + }) + } + + switch (encoding) { + case 'deflate': + stream = zlib.createInflate() + debug('inflate body') + req.pipe(stream) + break + case 'gzip': + stream = zlib.createGunzip() + debug('gunzip body') + req.pipe(stream) + break + case 'identity': + stream = req + stream.length = length + break + default: + throw createError(415, 'unsupported content encoding "' + encoding + '"', { + encoding: encoding, + type: 'encoding.unsupported' + }) + } + + return stream +} + +/** + * Dump the contents of a request. + * + * @param {object} req + * @param {function} callback + * @api private + */ + +function dump (req, callback) { + if (onFinished.isFinished(req)) { + callback(null) + } else { + onFinished(req, callback) + req.resume() + } +} diff --git a/doubao-asr-demo/node_modules/body-parser/lib/types/json.js b/doubao-asr-demo/node_modules/body-parser/lib/types/json.js new file mode 100644 index 0000000..59f3f7e --- /dev/null +++ b/doubao-asr-demo/node_modules/body-parser/lib/types/json.js @@ -0,0 +1,247 @@ +/*! + * body-parser + * Copyright(c) 2014 Jonathan Ong + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict' + +/** + * Module dependencies. + * @private + */ + +var bytes = require('bytes') +var contentType = require('content-type') +var createError = require('http-errors') +var debug = require('debug')('body-parser:json') +var read = require('../read') +var typeis = require('type-is') + +/** + * Module exports. + */ + +module.exports = json + +/** + * RegExp to match the first non-space in a string. + * + * Allowed whitespace is defined in RFC 7159: + * + * ws = *( + * %x20 / ; Space + * %x09 / ; Horizontal tab + * %x0A / ; Line feed or New line + * %x0D ) ; Carriage return + */ + +var FIRST_CHAR_REGEXP = /^[\x20\x09\x0a\x0d]*([^\x20\x09\x0a\x0d])/ // eslint-disable-line no-control-regex + +var JSON_SYNTAX_CHAR = '#' +var JSON_SYNTAX_REGEXP = /#+/g + +/** + * Create a middleware to parse JSON bodies. + * + * @param {object} [options] + * @return {function} + * @public + */ + +function json (options) { + var opts = options || {} + + var limit = typeof opts.limit !== 'number' + ? bytes.parse(opts.limit || '100kb') + : opts.limit + var inflate = opts.inflate !== false + var reviver = opts.reviver + var strict = opts.strict !== false + var type = opts.type || 'application/json' + var verify = opts.verify || false + + if (verify !== false && typeof verify !== 'function') { + throw new TypeError('option verify must be function') + } + + // create the appropriate type checking function + var shouldParse = typeof type !== 'function' + ? typeChecker(type) + : type + + function parse (body) { + if (body.length === 0) { + // special-case empty json body, as it's a common client-side mistake + // TODO: maybe make this configurable or part of "strict" option + return {} + } + + if (strict) { + var first = firstchar(body) + + if (first !== '{' && first !== '[') { + debug('strict violation') + throw createStrictSyntaxError(body, first) + } + } + + try { + debug('parse json') + return JSON.parse(body, reviver) + } catch (e) { + throw normalizeJsonSyntaxError(e, { + message: e.message, + stack: e.stack + }) + } + } + + return function jsonParser (req, res, next) { + if (req._body) { + debug('body already parsed') + next() + return + } + + req.body = req.body || {} + + // skip requests without bodies + if (!typeis.hasBody(req)) { + debug('skip empty body') + next() + return + } + + debug('content-type %j', req.headers['content-type']) + + // determine if request should be parsed + if (!shouldParse(req)) { + debug('skip parsing') + next() + return + } + + // assert charset per RFC 7159 sec 8.1 + var charset = getCharset(req) || 'utf-8' + if (charset.slice(0, 4) !== 'utf-') { + debug('invalid charset') + next(createError(415, 'unsupported charset "' + charset.toUpperCase() + '"', { + charset: charset, + type: 'charset.unsupported' + })) + return + } + + // read + read(req, res, next, parse, debug, { + encoding: charset, + inflate: inflate, + limit: limit, + verify: verify + }) + } +} + +/** + * Create strict violation syntax error matching native error. + * + * @param {string} str + * @param {string} char + * @return {Error} + * @private + */ + +function createStrictSyntaxError (str, char) { + var index = str.indexOf(char) + var partial = '' + + if (index !== -1) { + partial = str.substring(0, index) + JSON_SYNTAX_CHAR + + for (var i = index + 1; i < str.length; i++) { + partial += JSON_SYNTAX_CHAR + } + } + + try { + JSON.parse(partial); /* istanbul ignore next */ throw new SyntaxError('strict violation') + } catch (e) { + return normalizeJsonSyntaxError(e, { + message: e.message.replace(JSON_SYNTAX_REGEXP, function (placeholder) { + return str.substring(index, index + placeholder.length) + }), + stack: e.stack + }) + } +} + +/** + * Get the first non-whitespace character in a string. + * + * @param {string} str + * @return {function} + * @private + */ + +function firstchar (str) { + var match = FIRST_CHAR_REGEXP.exec(str) + + return match + ? match[1] + : undefined +} + +/** + * Get the charset of a request. + * + * @param {object} req + * @api private + */ + +function getCharset (req) { + try { + return (contentType.parse(req).parameters.charset || '').toLowerCase() + } catch (e) { + return undefined + } +} + +/** + * Normalize a SyntaxError for JSON.parse. + * + * @param {SyntaxError} error + * @param {object} obj + * @return {SyntaxError} + */ + +function normalizeJsonSyntaxError (error, obj) { + var keys = Object.getOwnPropertyNames(error) + + for (var i = 0; i < keys.length; i++) { + var key = keys[i] + if (key !== 'stack' && key !== 'message') { + delete error[key] + } + } + + // replace stack before message for Node.js 0.10 and below + error.stack = obj.stack.replace(error.message, obj.message) + error.message = obj.message + + return error +} + +/** + * Get the simple type checker. + * + * @param {string} type + * @return {function} + */ + +function typeChecker (type) { + return function checkType (req) { + return Boolean(typeis(req, type)) + } +} diff --git a/doubao-asr-demo/node_modules/body-parser/lib/types/raw.js b/doubao-asr-demo/node_modules/body-parser/lib/types/raw.js new file mode 100644 index 0000000..f5d1b67 --- /dev/null +++ b/doubao-asr-demo/node_modules/body-parser/lib/types/raw.js @@ -0,0 +1,101 @@ +/*! + * body-parser + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict' + +/** + * Module dependencies. + */ + +var bytes = require('bytes') +var debug = require('debug')('body-parser:raw') +var read = require('../read') +var typeis = require('type-is') + +/** + * Module exports. + */ + +module.exports = raw + +/** + * Create a middleware to parse raw bodies. + * + * @param {object} [options] + * @return {function} + * @api public + */ + +function raw (options) { + var opts = options || {} + + var inflate = opts.inflate !== false + var limit = typeof opts.limit !== 'number' + ? bytes.parse(opts.limit || '100kb') + : opts.limit + var type = opts.type || 'application/octet-stream' + var verify = opts.verify || false + + if (verify !== false && typeof verify !== 'function') { + throw new TypeError('option verify must be function') + } + + // create the appropriate type checking function + var shouldParse = typeof type !== 'function' + ? typeChecker(type) + : type + + function parse (buf) { + return buf + } + + return function rawParser (req, res, next) { + if (req._body) { + debug('body already parsed') + next() + return + } + + req.body = req.body || {} + + // skip requests without bodies + if (!typeis.hasBody(req)) { + debug('skip empty body') + next() + return + } + + debug('content-type %j', req.headers['content-type']) + + // determine if request should be parsed + if (!shouldParse(req)) { + debug('skip parsing') + next() + return + } + + // read + read(req, res, next, parse, debug, { + encoding: null, + inflate: inflate, + limit: limit, + verify: verify + }) + } +} + +/** + * Get the simple type checker. + * + * @param {string} type + * @return {function} + */ + +function typeChecker (type) { + return function checkType (req) { + return Boolean(typeis(req, type)) + } +} diff --git a/doubao-asr-demo/node_modules/body-parser/lib/types/text.js b/doubao-asr-demo/node_modules/body-parser/lib/types/text.js new file mode 100644 index 0000000..083a009 --- /dev/null +++ b/doubao-asr-demo/node_modules/body-parser/lib/types/text.js @@ -0,0 +1,121 @@ +/*! + * body-parser + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict' + +/** + * Module dependencies. + */ + +var bytes = require('bytes') +var contentType = require('content-type') +var debug = require('debug')('body-parser:text') +var read = require('../read') +var typeis = require('type-is') + +/** + * Module exports. + */ + +module.exports = text + +/** + * Create a middleware to parse text bodies. + * + * @param {object} [options] + * @return {function} + * @api public + */ + +function text (options) { + var opts = options || {} + + var defaultCharset = opts.defaultCharset || 'utf-8' + var inflate = opts.inflate !== false + var limit = typeof opts.limit !== 'number' + ? bytes.parse(opts.limit || '100kb') + : opts.limit + var type = opts.type || 'text/plain' + var verify = opts.verify || false + + if (verify !== false && typeof verify !== 'function') { + throw new TypeError('option verify must be function') + } + + // create the appropriate type checking function + var shouldParse = typeof type !== 'function' + ? typeChecker(type) + : type + + function parse (buf) { + return buf + } + + return function textParser (req, res, next) { + if (req._body) { + debug('body already parsed') + next() + return + } + + req.body = req.body || {} + + // skip requests without bodies + if (!typeis.hasBody(req)) { + debug('skip empty body') + next() + return + } + + debug('content-type %j', req.headers['content-type']) + + // determine if request should be parsed + if (!shouldParse(req)) { + debug('skip parsing') + next() + return + } + + // get charset + var charset = getCharset(req) || defaultCharset + + // read + read(req, res, next, parse, debug, { + encoding: charset, + inflate: inflate, + limit: limit, + verify: verify + }) + } +} + +/** + * Get the charset of a request. + * + * @param {object} req + * @api private + */ + +function getCharset (req) { + try { + return (contentType.parse(req).parameters.charset || '').toLowerCase() + } catch (e) { + return undefined + } +} + +/** + * Get the simple type checker. + * + * @param {string} type + * @return {function} + */ + +function typeChecker (type) { + return function checkType (req) { + return Boolean(typeis(req, type)) + } +} diff --git a/doubao-asr-demo/node_modules/body-parser/lib/types/urlencoded.js b/doubao-asr-demo/node_modules/body-parser/lib/types/urlencoded.js new file mode 100644 index 0000000..2bd4485 --- /dev/null +++ b/doubao-asr-demo/node_modules/body-parser/lib/types/urlencoded.js @@ -0,0 +1,307 @@ +/*! + * body-parser + * Copyright(c) 2014 Jonathan Ong + * Copyright(c) 2014-2015 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict' + +/** + * Module dependencies. + * @private + */ + +var bytes = require('bytes') +var contentType = require('content-type') +var createError = require('http-errors') +var debug = require('debug')('body-parser:urlencoded') +var deprecate = require('depd')('body-parser') +var read = require('../read') +var typeis = require('type-is') + +/** + * Module exports. + */ + +module.exports = urlencoded + +/** + * Cache of parser modules. + */ + +var parsers = Object.create(null) + +/** + * Create a middleware to parse urlencoded bodies. + * + * @param {object} [options] + * @return {function} + * @public + */ + +function urlencoded (options) { + var opts = options || {} + + // notice because option default will flip in next major + if (opts.extended === undefined) { + deprecate('undefined extended: provide extended option') + } + + var extended = opts.extended !== false + var inflate = opts.inflate !== false + var limit = typeof opts.limit !== 'number' + ? bytes.parse(opts.limit || '100kb') + : opts.limit + var type = opts.type || 'application/x-www-form-urlencoded' + var verify = opts.verify || false + var depth = typeof opts.depth !== 'number' + ? Number(opts.depth || 32) + : opts.depth + + if (verify !== false && typeof verify !== 'function') { + throw new TypeError('option verify must be function') + } + + // create the appropriate query parser + var queryparse = extended + ? extendedparser(opts) + : simpleparser(opts) + + // create the appropriate type checking function + var shouldParse = typeof type !== 'function' + ? typeChecker(type) + : type + + function parse (body) { + return body.length + ? queryparse(body) + : {} + } + + return function urlencodedParser (req, res, next) { + if (req._body) { + debug('body already parsed') + next() + return + } + + req.body = req.body || {} + + // skip requests without bodies + if (!typeis.hasBody(req)) { + debug('skip empty body') + next() + return + } + + debug('content-type %j', req.headers['content-type']) + + // determine if request should be parsed + if (!shouldParse(req)) { + debug('skip parsing') + next() + return + } + + // assert charset + var charset = getCharset(req) || 'utf-8' + if (charset !== 'utf-8') { + debug('invalid charset') + next(createError(415, 'unsupported charset "' + charset.toUpperCase() + '"', { + charset: charset, + type: 'charset.unsupported' + })) + return + } + + // read + read(req, res, next, parse, debug, { + debug: debug, + encoding: charset, + inflate: inflate, + limit: limit, + verify: verify, + depth: depth + }) + } +} + +/** + * Get the extended query parser. + * + * @param {object} options + */ + +function extendedparser (options) { + var parameterLimit = options.parameterLimit !== undefined + ? options.parameterLimit + : 1000 + + var depth = typeof options.depth !== 'number' + ? Number(options.depth || 32) + : options.depth + var parse = parser('qs') + + if (isNaN(parameterLimit) || parameterLimit < 1) { + throw new TypeError('option parameterLimit must be a positive number') + } + + if (isNaN(depth) || depth < 0) { + throw new TypeError('option depth must be a zero or a positive number') + } + + if (isFinite(parameterLimit)) { + parameterLimit = parameterLimit | 0 + } + + return function queryparse (body) { + var paramCount = parameterCount(body, parameterLimit) + + if (paramCount === undefined) { + debug('too many parameters') + throw createError(413, 'too many parameters', { + type: 'parameters.too.many' + }) + } + + var arrayLimit = Math.max(100, paramCount) + + debug('parse extended urlencoding') + try { + return parse(body, { + allowPrototypes: true, + arrayLimit: arrayLimit, + depth: depth, + strictDepth: true, + parameterLimit: parameterLimit + }) + } catch (err) { + if (err instanceof RangeError) { + throw createError(400, 'The input exceeded the depth', { + type: 'querystring.parse.rangeError' + }) + } else { + throw err + } + } + } +} + +/** + * Get the charset of a request. + * + * @param {object} req + * @api private + */ + +function getCharset (req) { + try { + return (contentType.parse(req).parameters.charset || '').toLowerCase() + } catch (e) { + return undefined + } +} + +/** + * Count the number of parameters, stopping once limit reached + * + * @param {string} body + * @param {number} limit + * @api private + */ + +function parameterCount (body, limit) { + var count = 0 + var index = 0 + + while ((index = body.indexOf('&', index)) !== -1) { + count++ + index++ + + if (count === limit) { + return undefined + } + } + + return count +} + +/** + * Get parser for module name dynamically. + * + * @param {string} name + * @return {function} + * @api private + */ + +function parser (name) { + var mod = parsers[name] + + if (mod !== undefined) { + return mod.parse + } + + // this uses a switch for static require analysis + switch (name) { + case 'qs': + mod = require('qs') + break + case 'querystring': + mod = require('querystring') + break + } + + // store to prevent invoking require() + parsers[name] = mod + + return mod.parse +} + +/** + * Get the simple query parser. + * + * @param {object} options + */ + +function simpleparser (options) { + var parameterLimit = options.parameterLimit !== undefined + ? options.parameterLimit + : 1000 + var parse = parser('querystring') + + if (isNaN(parameterLimit) || parameterLimit < 1) { + throw new TypeError('option parameterLimit must be a positive number') + } + + if (isFinite(parameterLimit)) { + parameterLimit = parameterLimit | 0 + } + + return function queryparse (body) { + var paramCount = parameterCount(body, parameterLimit) + + if (paramCount === undefined) { + debug('too many parameters') + throw createError(413, 'too many parameters', { + type: 'parameters.too.many' + }) + } + + debug('parse urlencoding') + return parse(body, undefined, undefined, { maxKeys: parameterLimit }) + } +} + +/** + * Get the simple type checker. + * + * @param {string} type + * @return {function} + */ + +function typeChecker (type) { + return function checkType (req) { + return Boolean(typeis(req, type)) + } +} diff --git a/doubao-asr-demo/node_modules/body-parser/package.json b/doubao-asr-demo/node_modules/body-parser/package.json new file mode 100644 index 0000000..3c9926f --- /dev/null +++ b/doubao-asr-demo/node_modules/body-parser/package.json @@ -0,0 +1,56 @@ +{ + "name": "body-parser", + "description": "Node.js body parsing middleware", + "version": "1.20.3", + "contributors": [ + "Douglas Christopher Wilson ", + "Jonathan Ong (http://jongleberry.com)" + ], + "license": "MIT", + "repository": "expressjs/body-parser", + "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.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "devDependencies": { + "eslint": "8.34.0", + "eslint-config-standard": "14.1.1", + "eslint-plugin-import": "2.27.5", + "eslint-plugin-markdown": "3.0.0", + "eslint-plugin-node": "11.1.0", + "eslint-plugin-promise": "6.1.1", + "eslint-plugin-standard": "4.1.0", + "methods": "1.1.2", + "mocha": "10.2.0", + "nyc": "15.1.0", + "safe-buffer": "5.2.1", + "supertest": "6.3.3" + }, + "files": [ + "lib/", + "LICENSE", + "HISTORY.md", + "SECURITY.md", + "index.js" + ], + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + }, + "scripts": { + "lint": "eslint .", + "test": "mocha --require test/support/env --reporter spec --check-leaks --bail test/", + "test-ci": "nyc --reporter=lcov --reporter=text npm test", + "test-cov": "nyc --reporter=html --reporter=text npm test" + } +} diff --git a/doubao-asr-demo/node_modules/bytes/History.md b/doubao-asr-demo/node_modules/bytes/History.md new file mode 100644 index 0000000..d60ce0e --- /dev/null +++ b/doubao-asr-demo/node_modules/bytes/History.md @@ -0,0 +1,97 @@ +3.1.2 / 2022-01-27 +================== + + * Fix return value for un-parsable strings + +3.1.1 / 2021-11-15 +================== + + * Fix "thousandsSeparator" incorrecting formatting fractional part + +3.1.0 / 2019-01-22 +================== + + * Add petabyte (`pb`) support + +3.0.0 / 2017-08-31 +================== + + * Change "kB" to "KB" in format output + * Remove support for Node.js 0.6 + * Remove support for ComponentJS + +2.5.0 / 2017-03-24 +================== + + * Add option "unit" + +2.4.0 / 2016-06-01 +================== + + * Add option "unitSeparator" + +2.3.0 / 2016-02-15 +================== + + * Drop partial bytes on all parsed units + * Fix non-finite numbers to `.format` to return `null` + * Fix parsing byte string that looks like hex + * perf: hoist regular expressions + +2.2.0 / 2015-11-13 +================== + + * add option "decimalPlaces" + * add option "fixedDecimals" + +2.1.0 / 2015-05-21 +================== + + * add `.format` export + * add `.parse` export + +2.0.2 / 2015-05-20 +================== + + * remove map recreation + * remove unnecessary object construction + +2.0.1 / 2015-05-07 +================== + + * fix browserify require + * remove node.extend dependency + +2.0.0 / 2015-04-12 +================== + + * add option "case" + * add option "thousandsSeparator" + * return "null" on invalid parse input + * support proper round-trip: bytes(bytes(num)) === num + * units no longer case sensitive when parsing + +1.0.0 / 2014-05-05 +================== + + * add negative support. fixes #6 + +0.3.0 / 2014-03-19 +================== + + * added terabyte support + +0.2.1 / 2013-04-01 +================== + + * add .component + +0.2.0 / 2012-10-28 +================== + + * bytes(200).should.eql('200b') + +0.1.0 / 2012-07-04 +================== + + * add bytes to string conversion [yields] diff --git a/doubao-asr-demo/node_modules/bytes/LICENSE b/doubao-asr-demo/node_modules/bytes/LICENSE new file mode 100644 index 0000000..63e95a9 --- /dev/null +++ b/doubao-asr-demo/node_modules/bytes/LICENSE @@ -0,0 +1,23 @@ +(The MIT License) + +Copyright (c) 2012-2014 TJ Holowaychuk +Copyright (c) 2015 Jed Watson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/doubao-asr-demo/node_modules/bytes/Readme.md b/doubao-asr-demo/node_modules/bytes/Readme.md new file mode 100644 index 0000000..5790e23 --- /dev/null +++ b/doubao-asr-demo/node_modules/bytes/Readme.md @@ -0,0 +1,152 @@ +# Bytes utility + +[![NPM Version][npm-image]][npm-url] +[![NPM Downloads][downloads-image]][downloads-url] +[![Build Status][ci-image]][ci-url] +[![Test Coverage][coveralls-image]][coveralls-url] + +Utility to parse a string bytes (ex: `1TB`) to bytes (`1099511627776`) and vice-versa. + +## Installation + +This is a [Node.js](https://nodejs.org/en/) module available through the +[npm registry](https://www.npmjs.com/). Installation is done using the +[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally): + +```bash +$ npm install bytes +``` + +## Usage + +```js +var bytes = require('bytes'); +``` + +#### bytes(number|string value, [options]): number|string|null + +Default export function. Delegates to either `bytes.format` or `bytes.parse` based on the type of `value`. + +**Arguments** + +| Name | Type | Description | +|---------|----------|--------------------| +| value | `number`|`string` | Number value to format or string value to parse | +| options | `Object` | Conversion options for `format` | + +**Returns** + +| Name | Type | Description | +|---------|------------------|-------------------------------------------------| +| results | `string`|`number`|`null` | Return null upon error. Numeric value in bytes, or string value otherwise. | + +**Example** + +```js +bytes(1024); +// output: '1KB' + +bytes('1KB'); +// output: 1024 +``` + +#### bytes.format(number value, [options]): string|null + +Format the given value in bytes into a string. If the value is negative, it is kept as such. If it is a float, it is + rounded. + +**Arguments** + +| Name | Type | Description | +|---------|----------|--------------------| +| value | `number` | Value in bytes | +| options | `Object` | Conversion options | + +**Options** + +| Property | Type | Description | +|-------------------|--------|-----------------------------------------------------------------------------------------| +| decimalPlaces | `number`|`null` | Maximum number of decimal places to include in output. Default value to `2`. | +| fixedDecimals | `boolean`|`null` | Whether to always display the maximum number of decimal places. Default value to `false` | +| thousandsSeparator | `string`|`null` | Example of values: `' '`, `','` and `'.'`... Default value to `''`. | +| unit | `string`|`null` | The unit in which the result will be returned (B/KB/MB/GB/TB). Default value to `''` (which means auto detect). | +| unitSeparator | `string`|`null` | Separator to use between number and unit. Default value to `''`. | + +**Returns** + +| Name | Type | Description | +|---------|------------------|-------------------------------------------------| +| results | `string`|`null` | Return null upon error. String value otherwise. | + +**Example** + +```js +bytes.format(1024); +// output: '1KB' + +bytes.format(1000); +// output: '1000B' + +bytes.format(1000, {thousandsSeparator: ' '}); +// output: '1 000B' + +bytes.format(1024 * 1.7, {decimalPlaces: 0}); +// output: '2KB' + +bytes.format(1024, {unitSeparator: ' '}); +// output: '1 KB' +``` + +#### bytes.parse(string|number value): number|null + +Parse the string value into an integer in bytes. If no unit is given, or `value` +is a number, it is assumed the value is in bytes. + +Supported units and abbreviations are as follows and are case-insensitive: + + * `b` for bytes + * `kb` for kilobytes + * `mb` for megabytes + * `gb` for gigabytes + * `tb` for terabytes + * `pb` for petabytes + +The units are in powers of two, not ten. This means 1kb = 1024b according to this parser. + +**Arguments** + +| Name | Type | Description | +|---------------|--------|--------------------| +| value | `string`|`number` | String to parse, or number in bytes. | + +**Returns** + +| Name | Type | Description | +|---------|-------------|-------------------------| +| results | `number`|`null` | Return null upon error. Value in bytes otherwise. | + +**Example** + +```js +bytes.parse('1KB'); +// output: 1024 + +bytes.parse('1024'); +// output: 1024 + +bytes.parse(1024); +// output: 1024 +``` + +## License + +[MIT](LICENSE) + +[ci-image]: https://badgen.net/github/checks/visionmedia/bytes.js/master?label=ci +[ci-url]: https://github.com/visionmedia/bytes.js/actions?query=workflow%3Aci +[coveralls-image]: https://badgen.net/coveralls/c/github/visionmedia/bytes.js/master +[coveralls-url]: https://coveralls.io/r/visionmedia/bytes.js?branch=master +[downloads-image]: https://badgen.net/npm/dm/bytes +[downloads-url]: https://npmjs.org/package/bytes +[npm-image]: https://badgen.net/npm/v/bytes +[npm-url]: https://npmjs.org/package/bytes diff --git a/doubao-asr-demo/node_modules/bytes/index.js b/doubao-asr-demo/node_modules/bytes/index.js new file mode 100644 index 0000000..6f2d0f8 --- /dev/null +++ b/doubao-asr-demo/node_modules/bytes/index.js @@ -0,0 +1,170 @@ +/*! + * bytes + * Copyright(c) 2012-2014 TJ Holowaychuk + * Copyright(c) 2015 Jed Watson + * MIT Licensed + */ + +'use strict'; + +/** + * Module exports. + * @public + */ + +module.exports = bytes; +module.exports.format = format; +module.exports.parse = parse; + +/** + * Module variables. + * @private + */ + +var formatThousandsRegExp = /\B(?=(\d{3})+(?!\d))/g; + +var formatDecimalsRegExp = /(?:\.0*|(\.[^0]+)0+)$/; + +var map = { + b: 1, + kb: 1 << 10, + mb: 1 << 20, + gb: 1 << 30, + tb: Math.pow(1024, 4), + pb: Math.pow(1024, 5), +}; + +var parseRegExp = /^((-|\+)?(\d+(?:\.\d+)?)) *(kb|mb|gb|tb|pb)$/i; + +/** + * Convert the given value in bytes into a string or parse to string to an integer in bytes. + * + * @param {string|number} value + * @param {{ + * case: [string], + * decimalPlaces: [number] + * fixedDecimals: [boolean] + * thousandsSeparator: [string] + * unitSeparator: [string] + * }} [options] bytes options. + * + * @returns {string|number|null} + */ + +function bytes(value, options) { + if (typeof value === 'string') { + return parse(value); + } + + if (typeof value === 'number') { + return format(value, options); + } + + return null; +} + +/** + * Format the given value in bytes into a string. + * + * If the value is negative, it is kept as such. If it is a float, + * it is rounded. + * + * @param {number} value + * @param {object} [options] + * @param {number} [options.decimalPlaces=2] + * @param {number} [options.fixedDecimals=false] + * @param {string} [options.thousandsSeparator=] + * @param {string} [options.unit=] + * @param {string} [options.unitSeparator=] + * + * @returns {string|null} + * @public + */ + +function format(value, options) { + if (!Number.isFinite(value)) { + return null; + } + + var mag = Math.abs(value); + var thousandsSeparator = (options && options.thousandsSeparator) || ''; + var unitSeparator = (options && options.unitSeparator) || ''; + var decimalPlaces = (options && options.decimalPlaces !== undefined) ? options.decimalPlaces : 2; + var fixedDecimals = Boolean(options && options.fixedDecimals); + var unit = (options && options.unit) || ''; + + if (!unit || !map[unit.toLowerCase()]) { + if (mag >= map.pb) { + unit = 'PB'; + } else if (mag >= map.tb) { + unit = 'TB'; + } else if (mag >= map.gb) { + unit = 'GB'; + } else if (mag >= map.mb) { + unit = 'MB'; + } else if (mag >= map.kb) { + unit = 'KB'; + } else { + unit = 'B'; + } + } + + var val = value / map[unit.toLowerCase()]; + var str = val.toFixed(decimalPlaces); + + if (!fixedDecimals) { + str = str.replace(formatDecimalsRegExp, '$1'); + } + + if (thousandsSeparator) { + str = str.split('.').map(function (s, i) { + return i === 0 + ? s.replace(formatThousandsRegExp, thousandsSeparator) + : s + }).join('.'); + } + + return str + unitSeparator + unit; +} + +/** + * Parse the string value into an integer in bytes. + * + * If no unit is given, it is assumed the value is in bytes. + * + * @param {number|string} val + * + * @returns {number|null} + * @public + */ + +function parse(val) { + if (typeof val === 'number' && !isNaN(val)) { + return val; + } + + if (typeof val !== 'string') { + return null; + } + + // Test if the string passed is valid + var results = parseRegExp.exec(val); + var floatValue; + var unit = 'b'; + + if (!results) { + // Nothing could be extracted from the given string + floatValue = parseInt(val, 10); + unit = 'b' + } else { + // Retrieve the value and the unit + floatValue = parseFloat(results[1]); + unit = results[4].toLowerCase(); + } + + if (isNaN(floatValue)) { + return null; + } + + return Math.floor(map[unit] * floatValue); +} diff --git a/doubao-asr-demo/node_modules/bytes/package.json b/doubao-asr-demo/node_modules/bytes/package.json new file mode 100644 index 0000000..f2b6a8b --- /dev/null +++ b/doubao-asr-demo/node_modules/bytes/package.json @@ -0,0 +1,42 @@ +{ + "name": "bytes", + "description": "Utility to parse a string bytes to bytes and vice-versa", + "version": "3.1.2", + "author": "TJ Holowaychuk (http://tjholowaychuk.com)", + "contributors": [ + "Jed Watson ", + "Théo FIDRY " + ], + "license": "MIT", + "keywords": [ + "byte", + "bytes", + "utility", + "parse", + "parser", + "convert", + "converter" + ], + "repository": "visionmedia/bytes.js", + "devDependencies": { + "eslint": "7.32.0", + "eslint-plugin-markdown": "2.2.1", + "mocha": "9.2.0", + "nyc": "15.1.0" + }, + "files": [ + "History.md", + "LICENSE", + "Readme.md", + "index.js" + ], + "engines": { + "node": ">= 0.8" + }, + "scripts": { + "lint": "eslint .", + "test": "mocha --check-leaks --reporter spec", + "test-ci": "nyc --reporter=lcov --reporter=text npm test", + "test-cov": "nyc --reporter=html --reporter=text npm test" + } +} diff --git a/doubao-asr-demo/node_modules/call-bind-apply-helpers/.eslintrc b/doubao-asr-demo/node_modules/call-bind-apply-helpers/.eslintrc new file mode 100644 index 0000000..201e859 --- /dev/null +++ b/doubao-asr-demo/node_modules/call-bind-apply-helpers/.eslintrc @@ -0,0 +1,17 @@ +{ + "root": true, + + "extends": "@ljharb", + + "rules": { + "func-name-matching": 0, + "id-length": 0, + "new-cap": [2, { + "capIsNewExceptions": [ + "GetIntrinsic", + ], + }], + "no-extra-parens": 0, + "no-magic-numbers": 0, + }, +} diff --git a/doubao-asr-demo/node_modules/call-bind-apply-helpers/.github/FUNDING.yml b/doubao-asr-demo/node_modules/call-bind-apply-helpers/.github/FUNDING.yml new file mode 100644 index 0000000..0011e9d --- /dev/null +++ b/doubao-asr-demo/node_modules/call-bind-apply-helpers/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: [ljharb] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: npm/call-bind-apply-helpers +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/doubao-asr-demo/node_modules/call-bind-apply-helpers/.nycrc b/doubao-asr-demo/node_modules/call-bind-apply-helpers/.nycrc new file mode 100644 index 0000000..bdd626c --- /dev/null +++ b/doubao-asr-demo/node_modules/call-bind-apply-helpers/.nycrc @@ -0,0 +1,9 @@ +{ + "all": true, + "check-coverage": false, + "reporter": ["text-summary", "text", "html", "json"], + "exclude": [ + "coverage", + "test" + ] +} diff --git a/doubao-asr-demo/node_modules/call-bind-apply-helpers/CHANGELOG.md b/doubao-asr-demo/node_modules/call-bind-apply-helpers/CHANGELOG.md new file mode 100644 index 0000000..2484942 --- /dev/null +++ b/doubao-asr-demo/node_modules/call-bind-apply-helpers/CHANGELOG.md @@ -0,0 +1,30 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [v1.0.2](https://github.com/ljharb/call-bind-apply-helpers/compare/v1.0.1...v1.0.2) - 2025-02-12 + +### Commits + +- [types] improve inferred types [`e6f9586`](https://github.com/ljharb/call-bind-apply-helpers/commit/e6f95860a3c72879cb861a858cdfb8138fbedec1) +- [Dev Deps] update `@arethetypeswrong/cli`, `@ljharb/tsconfig`, `@types/tape`, `es-value-fixtures`, `for-each`, `has-strict-mode`, `object-inspect` [`e43d540`](https://github.com/ljharb/call-bind-apply-helpers/commit/e43d5409f97543bfbb11f345d47d8ce4e066d8c1) + +## [v1.0.1](https://github.com/ljharb/call-bind-apply-helpers/compare/v1.0.0...v1.0.1) - 2024-12-08 + +### Commits + +- [types] `reflectApply`: fix types [`4efc396`](https://github.com/ljharb/call-bind-apply-helpers/commit/4efc3965351a4f02cc55e836fa391d3d11ef2ef8) +- [Fix] `reflectApply`: oops, Reflect is not a function [`83cc739`](https://github.com/ljharb/call-bind-apply-helpers/commit/83cc7395de6b79b7730bdf092f1436f0b1263c75) +- [Dev Deps] update `@arethetypeswrong/cli` [`80bd5d3`](https://github.com/ljharb/call-bind-apply-helpers/commit/80bd5d3ae58b4f6b6995ce439dd5a1bcb178a940) + +## v1.0.0 - 2024-12-05 + +### Commits + +- Initial implementation, tests, readme [`7879629`](https://github.com/ljharb/call-bind-apply-helpers/commit/78796290f9b7430c9934d6f33d94ae9bc89fce04) +- Initial commit [`3f1dc16`](https://github.com/ljharb/call-bind-apply-helpers/commit/3f1dc164afc43285631b114a5f9dd9137b2b952f) +- npm init [`081df04`](https://github.com/ljharb/call-bind-apply-helpers/commit/081df048c312fcee400922026f6e97281200a603) +- Only apps should have lockfiles [`5b9ca0f`](https://github.com/ljharb/call-bind-apply-helpers/commit/5b9ca0fe8101ebfaf309c549caac4e0a017ed930) diff --git a/doubao-asr-demo/node_modules/call-bind-apply-helpers/LICENSE b/doubao-asr-demo/node_modules/call-bind-apply-helpers/LICENSE new file mode 100644 index 0000000..f82f389 --- /dev/null +++ b/doubao-asr-demo/node_modules/call-bind-apply-helpers/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Jordan Harband + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/doubao-asr-demo/node_modules/call-bind-apply-helpers/README.md b/doubao-asr-demo/node_modules/call-bind-apply-helpers/README.md new file mode 100644 index 0000000..8fc0dae --- /dev/null +++ b/doubao-asr-demo/node_modules/call-bind-apply-helpers/README.md @@ -0,0 +1,62 @@ +# call-bind-apply-helpers [![Version Badge][npm-version-svg]][package-url] + +[![github actions][actions-image]][actions-url] +[![coverage][codecov-image]][codecov-url] +[![dependency status][deps-svg]][deps-url] +[![dev dependency status][dev-deps-svg]][dev-deps-url] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][npm-badge-png]][package-url] + +Helper functions around Function call/apply/bind, for use in `call-bind`. + +The only packages that should likely ever use this package directly are `call-bind` and `get-intrinsic`. +Please use `call-bind` unless you have a very good reason not to. + +## Getting started + +```sh +npm install --save call-bind-apply-helpers +``` + +## Usage/Examples + +```js +const assert = require('assert'); +const callBindBasic = require('call-bind-apply-helpers'); + +function f(a, b) { + assert.equal(this, 1); + assert.equal(a, 2); + assert.equal(b, 3); + assert.equal(arguments.length, 2); +} + +const fBound = callBindBasic([f, 1]); + +delete Function.prototype.call; +delete Function.prototype.bind; + +fBound(2, 3); +``` + +## Tests + +Clone the repo, `npm install`, and run `npm test` + +[package-url]: https://npmjs.org/package/call-bind-apply-helpers +[npm-version-svg]: https://versionbadg.es/ljharb/call-bind-apply-helpers.svg +[deps-svg]: https://david-dm.org/ljharb/call-bind-apply-helpers.svg +[deps-url]: https://david-dm.org/ljharb/call-bind-apply-helpers +[dev-deps-svg]: https://david-dm.org/ljharb/call-bind-apply-helpers/dev-status.svg +[dev-deps-url]: https://david-dm.org/ljharb/call-bind-apply-helpers#info=devDependencies +[npm-badge-png]: https://nodei.co/npm/call-bind-apply-helpers.png?downloads=true&stars=true +[license-image]: https://img.shields.io/npm/l/call-bind-apply-helpers.svg +[license-url]: LICENSE +[downloads-image]: https://img.shields.io/npm/dm/call-bind-apply-helpers.svg +[downloads-url]: https://npm-stat.com/charts.html?package=call-bind-apply-helpers +[codecov-image]: https://codecov.io/gh/ljharb/call-bind-apply-helpers/branch/main/graphs/badge.svg +[codecov-url]: https://app.codecov.io/gh/ljharb/call-bind-apply-helpers/ +[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/ljharb/call-bind-apply-helpers +[actions-url]: https://github.com/ljharb/call-bind-apply-helpers/actions diff --git a/doubao-asr-demo/node_modules/call-bind-apply-helpers/actualApply.d.ts b/doubao-asr-demo/node_modules/call-bind-apply-helpers/actualApply.d.ts new file mode 100644 index 0000000..b87286a --- /dev/null +++ b/doubao-asr-demo/node_modules/call-bind-apply-helpers/actualApply.d.ts @@ -0,0 +1 @@ +export = Reflect.apply; \ No newline at end of file diff --git a/doubao-asr-demo/node_modules/call-bind-apply-helpers/actualApply.js b/doubao-asr-demo/node_modules/call-bind-apply-helpers/actualApply.js new file mode 100644 index 0000000..ffa5135 --- /dev/null +++ b/doubao-asr-demo/node_modules/call-bind-apply-helpers/actualApply.js @@ -0,0 +1,10 @@ +'use strict'; + +var bind = require('function-bind'); + +var $apply = require('./functionApply'); +var $call = require('./functionCall'); +var $reflectApply = require('./reflectApply'); + +/** @type {import('./actualApply')} */ +module.exports = $reflectApply || bind.call($call, $apply); diff --git a/doubao-asr-demo/node_modules/call-bind-apply-helpers/applyBind.d.ts b/doubao-asr-demo/node_modules/call-bind-apply-helpers/applyBind.d.ts new file mode 100644 index 0000000..d176c1a --- /dev/null +++ b/doubao-asr-demo/node_modules/call-bind-apply-helpers/applyBind.d.ts @@ -0,0 +1,19 @@ +import actualApply from './actualApply'; + +type TupleSplitHead = T['length'] extends N + ? T + : T extends [...infer R, any] + ? TupleSplitHead + : never + +type TupleSplitTail = O['length'] extends N + ? T + : T extends [infer F, ...infer R] + ? TupleSplitTail<[...R], N, [...O, F]> + : never + +type TupleSplit = [TupleSplitHead, TupleSplitTail] + +declare function applyBind(...args: TupleSplit, 2>[1]): ReturnType; + +export = applyBind; \ No newline at end of file diff --git a/doubao-asr-demo/node_modules/call-bind-apply-helpers/applyBind.js b/doubao-asr-demo/node_modules/call-bind-apply-helpers/applyBind.js new file mode 100644 index 0000000..d2b7723 --- /dev/null +++ b/doubao-asr-demo/node_modules/call-bind-apply-helpers/applyBind.js @@ -0,0 +1,10 @@ +'use strict'; + +var bind = require('function-bind'); +var $apply = require('./functionApply'); +var actualApply = require('./actualApply'); + +/** @type {import('./applyBind')} */ +module.exports = function applyBind() { + return actualApply(bind, $apply, arguments); +}; diff --git a/doubao-asr-demo/node_modules/call-bind-apply-helpers/functionApply.d.ts b/doubao-asr-demo/node_modules/call-bind-apply-helpers/functionApply.d.ts new file mode 100644 index 0000000..1f6e11b --- /dev/null +++ b/doubao-asr-demo/node_modules/call-bind-apply-helpers/functionApply.d.ts @@ -0,0 +1 @@ +export = Function.prototype.apply; \ No newline at end of file diff --git a/doubao-asr-demo/node_modules/call-bind-apply-helpers/functionApply.js b/doubao-asr-demo/node_modules/call-bind-apply-helpers/functionApply.js new file mode 100644 index 0000000..c71df9c --- /dev/null +++ b/doubao-asr-demo/node_modules/call-bind-apply-helpers/functionApply.js @@ -0,0 +1,4 @@ +'use strict'; + +/** @type {import('./functionApply')} */ +module.exports = Function.prototype.apply; diff --git a/doubao-asr-demo/node_modules/call-bind-apply-helpers/functionCall.d.ts b/doubao-asr-demo/node_modules/call-bind-apply-helpers/functionCall.d.ts new file mode 100644 index 0000000..15e93df --- /dev/null +++ b/doubao-asr-demo/node_modules/call-bind-apply-helpers/functionCall.d.ts @@ -0,0 +1 @@ +export = Function.prototype.call; \ No newline at end of file diff --git a/doubao-asr-demo/node_modules/call-bind-apply-helpers/functionCall.js b/doubao-asr-demo/node_modules/call-bind-apply-helpers/functionCall.js new file mode 100644 index 0000000..7a8d873 --- /dev/null +++ b/doubao-asr-demo/node_modules/call-bind-apply-helpers/functionCall.js @@ -0,0 +1,4 @@ +'use strict'; + +/** @type {import('./functionCall')} */ +module.exports = Function.prototype.call; diff --git a/doubao-asr-demo/node_modules/call-bind-apply-helpers/index.d.ts b/doubao-asr-demo/node_modules/call-bind-apply-helpers/index.d.ts new file mode 100644 index 0000000..541516b --- /dev/null +++ b/doubao-asr-demo/node_modules/call-bind-apply-helpers/index.d.ts @@ -0,0 +1,64 @@ +type RemoveFromTuple< + Tuple extends readonly unknown[], + RemoveCount extends number, + Index extends 1[] = [] +> = Index["length"] extends RemoveCount + ? Tuple + : Tuple extends [infer First, ...infer Rest] + ? RemoveFromTuple + : Tuple; + +type ConcatTuples< + Prefix extends readonly unknown[], + Suffix extends readonly unknown[] +> = [...Prefix, ...Suffix]; + +type ExtractFunctionParams = T extends (this: infer TThis, ...args: infer P extends readonly unknown[]) => infer R + ? { thisArg: TThis; params: P; returnType: R } + : never; + +type BindFunction< + T extends (this: any, ...args: any[]) => any, + TThis, + TBoundArgs extends readonly unknown[], + ReceiverBound extends boolean +> = ExtractFunctionParams extends { + thisArg: infer OrigThis; + params: infer P extends readonly unknown[]; + returnType: infer R; +} + ? ReceiverBound extends true + ? (...args: RemoveFromTuple>) => R extends [OrigThis, ...infer Rest] + ? [TThis, ...Rest] // Replace `this` with `thisArg` + : R + : >>( + thisArg: U, + ...args: RemainingArgs + ) => R extends [OrigThis, ...infer Rest] + ? [U, ...ConcatTuples] // Preserve bound args in return type + : R + : never; + +declare function callBind< + const T extends (this: any, ...args: any[]) => any, + Extracted extends ExtractFunctionParams, + const TBoundArgs extends Partial & readonly unknown[], + const TThis extends Extracted["thisArg"] +>( + args: [fn: T, thisArg: TThis, ...boundArgs: TBoundArgs] +): BindFunction; + +declare function callBind< + const T extends (this: any, ...args: any[]) => any, + Extracted extends ExtractFunctionParams, + const TBoundArgs extends Partial & readonly unknown[] +>( + args: [fn: T, ...boundArgs: TBoundArgs] +): BindFunction; + +declare function callBind( + args: [fn: Exclude, ...rest: TArgs] +): never; + +// export as namespace callBind; +export = callBind; diff --git a/doubao-asr-demo/node_modules/call-bind-apply-helpers/index.js b/doubao-asr-demo/node_modules/call-bind-apply-helpers/index.js new file mode 100644 index 0000000..2f6dab4 --- /dev/null +++ b/doubao-asr-demo/node_modules/call-bind-apply-helpers/index.js @@ -0,0 +1,15 @@ +'use strict'; + +var bind = require('function-bind'); +var $TypeError = require('es-errors/type'); + +var $call = require('./functionCall'); +var $actualApply = require('./actualApply'); + +/** @type {(args: [Function, thisArg?: unknown, ...args: unknown[]]) => Function} TODO FIXME, find a way to use import('.') */ +module.exports = function callBindBasic(args) { + if (args.length < 1 || typeof args[0] !== 'function') { + throw new $TypeError('a function is required'); + } + return $actualApply(bind, $call, args); +}; diff --git a/doubao-asr-demo/node_modules/call-bind-apply-helpers/package.json b/doubao-asr-demo/node_modules/call-bind-apply-helpers/package.json new file mode 100644 index 0000000..923b8be --- /dev/null +++ b/doubao-asr-demo/node_modules/call-bind-apply-helpers/package.json @@ -0,0 +1,85 @@ +{ + "name": "call-bind-apply-helpers", + "version": "1.0.2", + "description": "Helper functions around Function call/apply/bind, for use in `call-bind`", + "main": "index.js", + "exports": { + ".": "./index.js", + "./actualApply": "./actualApply.js", + "./applyBind": "./applyBind.js", + "./functionApply": "./functionApply.js", + "./functionCall": "./functionCall.js", + "./reflectApply": "./reflectApply.js", + "./package.json": "./package.json" + }, + "scripts": { + "prepack": "npmignore --auto --commentLines=auto", + "prepublish": "not-in-publish || npm run prepublishOnly", + "prepublishOnly": "safe-publish-latest", + "prelint": "evalmd README.md", + "lint": "eslint --ext=.js,.mjs .", + "postlint": "tsc -p . && attw -P", + "pretest": "npm run lint", + "tests-only": "nyc tape 'test/**/*.js'", + "test": "npm run tests-only", + "posttest": "npx npm@'>=10.2' audit --production", + "version": "auto-changelog && git add CHANGELOG.md", + "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/ljharb/call-bind-apply-helpers.git" + }, + "author": "Jordan Harband ", + "license": "MIT", + "bugs": { + "url": "https://github.com/ljharb/call-bind-apply-helpers/issues" + }, + "homepage": "https://github.com/ljharb/call-bind-apply-helpers#readme", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "devDependencies": { + "@arethetypeswrong/cli": "^0.17.3", + "@ljharb/eslint-config": "^21.1.1", + "@ljharb/tsconfig": "^0.2.3", + "@types/for-each": "^0.3.3", + "@types/function-bind": "^1.1.10", + "@types/object-inspect": "^1.13.0", + "@types/tape": "^5.8.1", + "auto-changelog": "^2.5.0", + "encoding": "^0.1.13", + "es-value-fixtures": "^1.7.1", + "eslint": "=8.8.0", + "evalmd": "^0.0.19", + "for-each": "^0.3.5", + "has-strict-mode": "^1.1.0", + "in-publish": "^2.0.1", + "npmignore": "^0.3.1", + "nyc": "^10.3.2", + "object-inspect": "^1.13.4", + "safe-publish-latest": "^2.0.0", + "tape": "^5.9.0", + "typescript": "next" + }, + "testling": { + "files": "test/index.js" + }, + "auto-changelog": { + "output": "CHANGELOG.md", + "template": "keepachangelog", + "unreleased": false, + "commitLimit": false, + "backfillLimit": false, + "hideCredit": true + }, + "publishConfig": { + "ignore": [ + ".github/workflows" + ] + }, + "engines": { + "node": ">= 0.4" + } +} diff --git a/doubao-asr-demo/node_modules/call-bind-apply-helpers/reflectApply.d.ts b/doubao-asr-demo/node_modules/call-bind-apply-helpers/reflectApply.d.ts new file mode 100644 index 0000000..6b2ae76 --- /dev/null +++ b/doubao-asr-demo/node_modules/call-bind-apply-helpers/reflectApply.d.ts @@ -0,0 +1,3 @@ +declare const reflectApply: false | typeof Reflect.apply; + +export = reflectApply; diff --git a/doubao-asr-demo/node_modules/call-bind-apply-helpers/reflectApply.js b/doubao-asr-demo/node_modules/call-bind-apply-helpers/reflectApply.js new file mode 100644 index 0000000..3d03caa --- /dev/null +++ b/doubao-asr-demo/node_modules/call-bind-apply-helpers/reflectApply.js @@ -0,0 +1,4 @@ +'use strict'; + +/** @type {import('./reflectApply')} */ +module.exports = typeof Reflect !== 'undefined' && Reflect && Reflect.apply; diff --git a/doubao-asr-demo/node_modules/call-bind-apply-helpers/test/index.js b/doubao-asr-demo/node_modules/call-bind-apply-helpers/test/index.js new file mode 100644 index 0000000..1cdc89e --- /dev/null +++ b/doubao-asr-demo/node_modules/call-bind-apply-helpers/test/index.js @@ -0,0 +1,63 @@ +'use strict'; + +var callBind = require('../'); +var hasStrictMode = require('has-strict-mode')(); +var forEach = require('for-each'); +var inspect = require('object-inspect'); +var v = require('es-value-fixtures'); + +var test = require('tape'); + +test('callBindBasic', function (t) { + forEach(v.nonFunctions, function (nonFunction) { + t['throws']( + // @ts-expect-error + function () { callBind([nonFunction]); }, + TypeError, + inspect(nonFunction) + ' is not a function' + ); + }); + + var sentinel = { sentinel: true }; + /** @type {(this: T, a: A, b: B) => [T | undefined, A, B]} */ + var func = function (a, b) { + // eslint-disable-next-line no-invalid-this + return [!hasStrictMode && this === global ? undefined : this, a, b]; + }; + t.equal(func.length, 2, 'original function length is 2'); + + /** type {(thisArg: unknown, a: number, b: number) => [unknown, number, number]} */ + var bound = callBind([func]); + /** type {((a: number, b: number) => [typeof sentinel, typeof a, typeof b])} */ + var boundR = callBind([func, sentinel]); + /** type {((b: number) => [typeof sentinel, number, typeof b])} */ + var boundArg = callBind([func, sentinel, /** @type {const} */ (1)]); + + // @ts-expect-error + t.deepEqual(bound(), [undefined, undefined, undefined], 'bound func with no args'); + + // @ts-expect-error + t.deepEqual(func(), [undefined, undefined, undefined], 'unbound func with too few args'); + // @ts-expect-error + t.deepEqual(bound(1, 2), [hasStrictMode ? 1 : Object(1), 2, undefined], 'bound func too few args'); + // @ts-expect-error + t.deepEqual(boundR(), [sentinel, undefined, undefined], 'bound func with receiver, with too few args'); + // @ts-expect-error + t.deepEqual(boundArg(), [sentinel, 1, undefined], 'bound func with receiver and arg, with too few args'); + + t.deepEqual(func(1, 2), [undefined, 1, 2], 'unbound func with right args'); + t.deepEqual(bound(1, 2, 3), [hasStrictMode ? 1 : Object(1), 2, 3], 'bound func with right args'); + t.deepEqual(boundR(1, 2), [sentinel, 1, 2], 'bound func with receiver, with right args'); + t.deepEqual(boundArg(2), [sentinel, 1, 2], 'bound func with receiver and arg, with right arg'); + + // @ts-expect-error + t.deepEqual(func(1, 2, 3), [undefined, 1, 2], 'unbound func with too many args'); + // @ts-expect-error + t.deepEqual(bound(1, 2, 3, 4), [hasStrictMode ? 1 : Object(1), 2, 3], 'bound func with too many args'); + // @ts-expect-error + t.deepEqual(boundR(1, 2, 3), [sentinel, 1, 2], 'bound func with receiver, with too many args'); + // @ts-expect-error + t.deepEqual(boundArg(2, 3), [sentinel, 1, 2], 'bound func with receiver and arg, with too many args'); + + t.end(); +}); diff --git a/doubao-asr-demo/node_modules/call-bind-apply-helpers/tsconfig.json b/doubao-asr-demo/node_modules/call-bind-apply-helpers/tsconfig.json new file mode 100644 index 0000000..aef9993 --- /dev/null +++ b/doubao-asr-demo/node_modules/call-bind-apply-helpers/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@ljharb/tsconfig", + "compilerOptions": { + "target": "es2021", + }, + "exclude": [ + "coverage", + ], +} \ No newline at end of file diff --git a/doubao-asr-demo/node_modules/call-bound/.eslintrc b/doubao-asr-demo/node_modules/call-bound/.eslintrc new file mode 100644 index 0000000..2612ed8 --- /dev/null +++ b/doubao-asr-demo/node_modules/call-bound/.eslintrc @@ -0,0 +1,13 @@ +{ + "root": true, + + "extends": "@ljharb", + + "rules": { + "new-cap": [2, { + "capIsNewExceptions": [ + "GetIntrinsic", + ], + }], + }, +} diff --git a/doubao-asr-demo/node_modules/call-bound/.github/FUNDING.yml b/doubao-asr-demo/node_modules/call-bound/.github/FUNDING.yml new file mode 100644 index 0000000..2a2a135 --- /dev/null +++ b/doubao-asr-demo/node_modules/call-bound/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: [ljharb] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: npm/call-bound +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/doubao-asr-demo/node_modules/call-bound/.nycrc b/doubao-asr-demo/node_modules/call-bound/.nycrc new file mode 100644 index 0000000..bdd626c --- /dev/null +++ b/doubao-asr-demo/node_modules/call-bound/.nycrc @@ -0,0 +1,9 @@ +{ + "all": true, + "check-coverage": false, + "reporter": ["text-summary", "text", "html", "json"], + "exclude": [ + "coverage", + "test" + ] +} diff --git a/doubao-asr-demo/node_modules/call-bound/CHANGELOG.md b/doubao-asr-demo/node_modules/call-bound/CHANGELOG.md new file mode 100644 index 0000000..8bde4e9 --- /dev/null +++ b/doubao-asr-demo/node_modules/call-bound/CHANGELOG.md @@ -0,0 +1,42 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [v1.0.4](https://github.com/ljharb/call-bound/compare/v1.0.3...v1.0.4) - 2025-03-03 + +### Commits + +- [types] improve types [`e648922`](https://github.com/ljharb/call-bound/commit/e6489222a9e54f350fbf952ceabe51fd8b6027ff) +- [Dev Deps] update `@arethetypeswrong/cli`, `@ljharb/tsconfig`, `@types/tape`, `es-value-fixtures`, `for-each`, `has-strict-mode`, `object-inspect` [`a42a5eb`](https://github.com/ljharb/call-bound/commit/a42a5ebe6c1b54fcdc7997c7dc64fdca9e936719) +- [Deps] update `call-bind-apply-helpers`, `get-intrinsic` [`f529eac`](https://github.com/ljharb/call-bound/commit/f529eac132404c17156bbc23ab2297a25d0f20b8) + +## [v1.0.3](https://github.com/ljharb/call-bound/compare/v1.0.2...v1.0.3) - 2024-12-15 + +### Commits + +- [Refactor] use `call-bind-apply-helpers` instead of `call-bind` [`5e0b134`](https://github.com/ljharb/call-bound/commit/5e0b13496df14fb7d05dae9412f088da8d3f75be) +- [Deps] update `get-intrinsic` [`41fc967`](https://github.com/ljharb/call-bound/commit/41fc96732a22c7b7e8f381f93ccc54bb6293be2e) +- [readme] fix example [`79a0137`](https://github.com/ljharb/call-bound/commit/79a0137723f7c6d09c9c05452bbf8d5efb5d6e49) +- [meta] add `sideEffects` flag [`08b07be`](https://github.com/ljharb/call-bound/commit/08b07be7f1c03f67dc6f3cdaf0906259771859f7) + +## [v1.0.2](https://github.com/ljharb/call-bound/compare/v1.0.1...v1.0.2) - 2024-12-10 + +### Commits + +- [Dev Deps] update `@arethetypeswrong/cli`, `@ljharb/tsconfig`, `gopd` [`e6a5ffe`](https://github.com/ljharb/call-bound/commit/e6a5ffe849368fe4f74dfd6cdeca1b9baa39e8d5) +- [Deps] update `call-bind`, `get-intrinsic` [`2aeb5b5`](https://github.com/ljharb/call-bound/commit/2aeb5b521dc2b2683d1345c753ea1161de2d1c14) +- [types] improve return type [`1a0c9fe`](https://github.com/ljharb/call-bound/commit/1a0c9fe3114471e7ca1f57d104e2efe713bb4871) + +## v1.0.1 - 2024-12-05 + +### Commits + +- Initial implementation, tests, readme, types [`6d94121`](https://github.com/ljharb/call-bound/commit/6d94121a9243602e506334069f7a03189fe3363d) +- Initial commit [`0eae867`](https://github.com/ljharb/call-bound/commit/0eae867334ea025c33e6e91cdecfc9df96680cf9) +- npm init [`71b2479`](https://github.com/ljharb/call-bound/commit/71b2479c6723e0b7d91a6b663613067e98b7b275) +- Only apps should have lockfiles [`c3754a9`](https://github.com/ljharb/call-bound/commit/c3754a949b7f9132b47e2d18c1729889736741eb) +- [actions] skip `npm ls` in node < 10 [`74275a5`](https://github.com/ljharb/call-bound/commit/74275a5186b8caf6309b6b97472bdcb0df4683a8) +- [Dev Deps] add missing peer dep [`1354de8`](https://github.com/ljharb/call-bound/commit/1354de8679413e4ae9c523d85f76fa7a5e032d97) diff --git a/doubao-asr-demo/node_modules/call-bound/LICENSE b/doubao-asr-demo/node_modules/call-bound/LICENSE new file mode 100644 index 0000000..f82f389 --- /dev/null +++ b/doubao-asr-demo/node_modules/call-bound/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Jordan Harband + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/doubao-asr-demo/node_modules/call-bound/README.md b/doubao-asr-demo/node_modules/call-bound/README.md new file mode 100644 index 0000000..a44e43e --- /dev/null +++ b/doubao-asr-demo/node_modules/call-bound/README.md @@ -0,0 +1,53 @@ +# call-bound [![Version Badge][npm-version-svg]][package-url] + +[![github actions][actions-image]][actions-url] +[![coverage][codecov-image]][codecov-url] +[![dependency status][deps-svg]][deps-url] +[![dev dependency status][dev-deps-svg]][dev-deps-url] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][npm-badge-png]][package-url] + +Robust call-bound JavaScript intrinsics, using `call-bind` and `get-intrinsic`. + +## Getting started + +```sh +npm install --save call-bound +``` + +## Usage/Examples + +```js +const assert = require('assert'); +const callBound = require('call-bound'); + +const slice = callBound('Array.prototype.slice'); + +delete Function.prototype.call; +delete Function.prototype.bind; +delete Array.prototype.slice; + +assert.deepEqual(slice([1, 2, 3, 4], 1, -1), [2, 3]); +``` + +## Tests + +Clone the repo, `npm install`, and run `npm test` + +[package-url]: https://npmjs.org/package/call-bound +[npm-version-svg]: https://versionbadg.es/ljharb/call-bound.svg +[deps-svg]: https://david-dm.org/ljharb/call-bound.svg +[deps-url]: https://david-dm.org/ljharb/call-bound +[dev-deps-svg]: https://david-dm.org/ljharb/call-bound/dev-status.svg +[dev-deps-url]: https://david-dm.org/ljharb/call-bound#info=devDependencies +[npm-badge-png]: https://nodei.co/npm/call-bound.png?downloads=true&stars=true +[license-image]: https://img.shields.io/npm/l/call-bound.svg +[license-url]: LICENSE +[downloads-image]: https://img.shields.io/npm/dm/call-bound.svg +[downloads-url]: https://npm-stat.com/charts.html?package=call-bound +[codecov-image]: https://codecov.io/gh/ljharb/call-bound/branch/main/graphs/badge.svg +[codecov-url]: https://app.codecov.io/gh/ljharb/call-bound/ +[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/ljharb/call-bound +[actions-url]: https://github.com/ljharb/call-bound/actions diff --git a/doubao-asr-demo/node_modules/call-bound/index.d.ts b/doubao-asr-demo/node_modules/call-bound/index.d.ts new file mode 100644 index 0000000..5562f00 --- /dev/null +++ b/doubao-asr-demo/node_modules/call-bound/index.d.ts @@ -0,0 +1,94 @@ +type Intrinsic = typeof globalThis; + +type IntrinsicName = keyof Intrinsic | `%${keyof Intrinsic}%`; + +type IntrinsicPath = IntrinsicName | `${StripPercents}.${string}` | `%${StripPercents}.${string}%`; + +type AllowMissing = boolean; + +type StripPercents = T extends `%${infer U}%` ? U : T; + +type BindMethodPrecise = + F extends (this: infer This, ...args: infer Args) => infer R + ? (obj: This, ...args: Args) => R + : F extends { + (this: infer This1, ...args: infer Args1): infer R1; + (this: infer This2, ...args: infer Args2): infer R2 + } + ? { + (obj: This1, ...args: Args1): R1; + (obj: This2, ...args: Args2): R2 + } + : never + +// Extract method type from a prototype +type GetPrototypeMethod = + (typeof globalThis)[T] extends { prototype: any } + ? M extends keyof (typeof globalThis)[T]['prototype'] + ? (typeof globalThis)[T]['prototype'][M] + : never + : never + +// Get static property/method +type GetStaticMember = + P extends keyof (typeof globalThis)[T] ? (typeof globalThis)[T][P] : never + +// Type that maps string path to actual bound function or value with better precision +type BoundIntrinsic = + S extends `${infer Obj}.prototype.${infer Method}` + ? Obj extends keyof typeof globalThis + ? BindMethodPrecise> + : unknown + : S extends `${infer Obj}.${infer Prop}` + ? Obj extends keyof typeof globalThis + ? GetStaticMember + : unknown + : unknown + +declare function arraySlice(array: readonly T[], start?: number, end?: number): T[]; +declare function arraySlice(array: ArrayLike, start?: number, end?: number): T[]; +declare function arraySlice(array: IArguments, start?: number, end?: number): T[]; + +// Special cases for methods that need explicit typing +interface SpecialCases { + '%Object.prototype.isPrototypeOf%': (thisArg: {}, obj: unknown) => boolean; + '%String.prototype.replace%': { + (str: string, searchValue: string | RegExp, replaceValue: string): string; + (str: string, searchValue: string | RegExp, replacer: (substring: string, ...args: any[]) => string): string + }; + '%Object.prototype.toString%': (obj: {}) => string; + '%Object.prototype.hasOwnProperty%': (obj: {}, v: PropertyKey) => boolean; + '%Array.prototype.slice%': typeof arraySlice; + '%Array.prototype.map%': (array: readonly T[], callbackfn: (value: T, index: number, array: readonly T[]) => U, thisArg?: any) => U[]; + '%Array.prototype.filter%': (array: readonly T[], predicate: (value: T, index: number, array: readonly T[]) => unknown, thisArg?: any) => T[]; + '%Array.prototype.indexOf%': (array: readonly T[], searchElement: T, fromIndex?: number) => number; + '%Function.prototype.apply%': (fn: (...args: A) => R, thisArg: any, args: A) => R; + '%Function.prototype.call%': (fn: (...args: A) => R, thisArg: any, ...args: A) => R; + '%Function.prototype.bind%': (fn: (...args: A) => R, thisArg: any, ...args: A) => (...remainingArgs: A) => R; + '%Promise.prototype.then%': { + (promise: Promise, onfulfilled: (value: T) => R | PromiseLike): Promise; + (promise: Promise, onfulfilled: ((value: T) => R | PromiseLike) | undefined | null, onrejected: (reason: any) => R | PromiseLike): Promise; + }; + '%RegExp.prototype.test%': (regexp: RegExp, str: string) => boolean; + '%RegExp.prototype.exec%': (regexp: RegExp, str: string) => RegExpExecArray | null; + '%Error.prototype.toString%': (error: Error) => string; + '%TypeError.prototype.toString%': (error: TypeError) => string; + '%String.prototype.split%': ( + obj: unknown, + splitter: string | RegExp | { + [Symbol.split](string: string, limit?: number): string[]; + }, + limit?: number | undefined + ) => string[]; +} + +/** + * Returns a bound function for a prototype method, or a value for a static property. + * + * @param name - The name of the intrinsic (e.g. 'Array.prototype.slice') + * @param {AllowMissing} [allowMissing] - Whether to allow missing intrinsics (default: false) + */ +declare function callBound, S extends IntrinsicPath>(name: K, allowMissing?: AllowMissing): SpecialCases[`%${StripPercents}%`]; +declare function callBound, S extends IntrinsicPath>(name: S, allowMissing?: AllowMissing): BoundIntrinsic; + +export = callBound; diff --git a/doubao-asr-demo/node_modules/call-bound/index.js b/doubao-asr-demo/node_modules/call-bound/index.js new file mode 100644 index 0000000..e9ade74 --- /dev/null +++ b/doubao-asr-demo/node_modules/call-bound/index.js @@ -0,0 +1,19 @@ +'use strict'; + +var GetIntrinsic = require('get-intrinsic'); + +var callBindBasic = require('call-bind-apply-helpers'); + +/** @type {(thisArg: string, searchString: string, position?: number) => number} */ +var $indexOf = callBindBasic([GetIntrinsic('%String.prototype.indexOf%')]); + +/** @type {import('.')} */ +module.exports = function callBoundIntrinsic(name, allowMissing) { + /* eslint no-extra-parens: 0 */ + + var intrinsic = /** @type {(this: unknown, ...args: unknown[]) => unknown} */ (GetIntrinsic(name, !!allowMissing)); + if (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) { + return callBindBasic(/** @type {const} */ ([intrinsic])); + } + return intrinsic; +}; diff --git a/doubao-asr-demo/node_modules/call-bound/package.json b/doubao-asr-demo/node_modules/call-bound/package.json new file mode 100644 index 0000000..d542db4 --- /dev/null +++ b/doubao-asr-demo/node_modules/call-bound/package.json @@ -0,0 +1,99 @@ +{ + "name": "call-bound", + "version": "1.0.4", + "description": "Robust call-bound JavaScript intrinsics, using `call-bind` and `get-intrinsic`.", + "main": "index.js", + "exports": { + ".": "./index.js", + "./package.json": "./package.json" + }, + "sideEffects": false, + "scripts": { + "prepack": "npmignore --auto --commentLines=auto", + "prepublish": "not-in-publish || npm run prepublishOnly", + "prepublishOnly": "safe-publish-latest", + "prelint": "evalmd README.md", + "lint": "eslint --ext=.js,.mjs .", + "postlint": "tsc -p . && attw -P", + "pretest": "npm run lint", + "tests-only": "nyc tape 'test/**/*.js'", + "test": "npm run tests-only", + "posttest": "npx npm@'>=10.2' audit --production", + "version": "auto-changelog && git add CHANGELOG.md", + "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/ljharb/call-bound.git" + }, + "keywords": [ + "javascript", + "ecmascript", + "es", + "js", + "callbind", + "callbound", + "call", + "bind", + "bound", + "call-bind", + "call-bound", + "function", + "es-abstract" + ], + "author": "Jordan Harband ", + "funding": { + "url": "https://github.com/sponsors/ljharb" + }, + "license": "MIT", + "bugs": { + "url": "https://github.com/ljharb/call-bound/issues" + }, + "homepage": "https://github.com/ljharb/call-bound#readme", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "devDependencies": { + "@arethetypeswrong/cli": "^0.17.4", + "@ljharb/eslint-config": "^21.1.1", + "@ljharb/tsconfig": "^0.3.0", + "@types/call-bind": "^1.0.5", + "@types/get-intrinsic": "^1.2.3", + "@types/tape": "^5.8.1", + "auto-changelog": "^2.5.0", + "encoding": "^0.1.13", + "es-value-fixtures": "^1.7.1", + "eslint": "=8.8.0", + "evalmd": "^0.0.19", + "for-each": "^0.3.5", + "gopd": "^1.2.0", + "has-strict-mode": "^1.1.0", + "in-publish": "^2.0.1", + "npmignore": "^0.3.1", + "nyc": "^10.3.2", + "object-inspect": "^1.13.4", + "safe-publish-latest": "^2.0.0", + "tape": "^5.9.0", + "typescript": "next" + }, + "testling": { + "files": "test/index.js" + }, + "auto-changelog": { + "output": "CHANGELOG.md", + "template": "keepachangelog", + "unreleased": false, + "commitLimit": false, + "backfillLimit": false, + "hideCredit": true + }, + "publishConfig": { + "ignore": [ + ".github/workflows" + ] + }, + "engines": { + "node": ">= 0.4" + } +} diff --git a/doubao-asr-demo/node_modules/call-bound/test/index.js b/doubao-asr-demo/node_modules/call-bound/test/index.js new file mode 100644 index 0000000..a2fc9f0 --- /dev/null +++ b/doubao-asr-demo/node_modules/call-bound/test/index.js @@ -0,0 +1,61 @@ +'use strict'; + +var test = require('tape'); + +var callBound = require('../'); + +/** @template {true} T @template U @typedef {T extends U ? T : never} AssertType */ + +test('callBound', function (t) { + // static primitive + t.equal(callBound('Array.length'), Array.length, 'Array.length yields itself'); + t.equal(callBound('%Array.length%'), Array.length, '%Array.length% yields itself'); + + // static non-function object + t.equal(callBound('Array.prototype'), Array.prototype, 'Array.prototype yields itself'); + t.equal(callBound('%Array.prototype%'), Array.prototype, '%Array.prototype% yields itself'); + t.equal(callBound('Array.constructor'), Array.constructor, 'Array.constructor yields itself'); + t.equal(callBound('%Array.constructor%'), Array.constructor, '%Array.constructor% yields itself'); + + // static function + t.equal(callBound('Date.parse'), Date.parse, 'Date.parse yields itself'); + t.equal(callBound('%Date.parse%'), Date.parse, '%Date.parse% yields itself'); + + // prototype primitive + t.equal(callBound('Error.prototype.message'), Error.prototype.message, 'Error.prototype.message yields itself'); + t.equal(callBound('%Error.prototype.message%'), Error.prototype.message, '%Error.prototype.message% yields itself'); + + var x = callBound('Object.prototype.toString'); + var y = callBound('%Object.prototype.toString%'); + + // prototype function + t.notEqual(x, Object.prototype.toString, 'Object.prototype.toString does not yield itself'); + t.notEqual(y, Object.prototype.toString, '%Object.prototype.toString% does not yield itself'); + t.equal(x(true), Object.prototype.toString.call(true), 'call-bound Object.prototype.toString calls into the original'); + t.equal(y(true), Object.prototype.toString.call(true), 'call-bound %Object.prototype.toString% calls into the original'); + + t['throws']( + // @ts-expect-error + function () { callBound('does not exist'); }, + SyntaxError, + 'nonexistent intrinsic throws' + ); + t['throws']( + // @ts-expect-error + function () { callBound('does not exist', true); }, + SyntaxError, + 'allowMissing arg still throws for unknown intrinsic' + ); + + t.test('real but absent intrinsic', { skip: typeof WeakRef !== 'undefined' }, function (st) { + st['throws']( + function () { callBound('WeakRef'); }, + TypeError, + 'real but absent intrinsic throws' + ); + st.equal(callBound('WeakRef', true), undefined, 'allowMissing arg avoids exception'); + st.end(); + }); + + t.end(); +}); diff --git a/doubao-asr-demo/node_modules/call-bound/tsconfig.json b/doubao-asr-demo/node_modules/call-bound/tsconfig.json new file mode 100644 index 0000000..8976d98 --- /dev/null +++ b/doubao-asr-demo/node_modules/call-bound/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "@ljharb/tsconfig", + "compilerOptions": { + "target": "ESNext", + "lib": ["es2024"], + }, + "exclude": [ + "coverage", + ], +} diff --git a/doubao-asr-demo/node_modules/content-disposition/HISTORY.md b/doubao-asr-demo/node_modules/content-disposition/HISTORY.md new file mode 100644 index 0000000..488effa --- /dev/null +++ b/doubao-asr-demo/node_modules/content-disposition/HISTORY.md @@ -0,0 +1,60 @@ +0.5.4 / 2021-12-10 +================== + + * deps: safe-buffer@5.2.1 + +0.5.3 / 2018-12-17 +================== + + * Use `safe-buffer` for improved Buffer API + +0.5.2 / 2016-12-08 +================== + + * Fix `parse` to accept any linear whitespace character + +0.5.1 / 2016-01-17 +================== + + * perf: enable strict mode + +0.5.0 / 2014-10-11 +================== + + * Add `parse` function + +0.4.0 / 2014-09-21 +================== + + * Expand non-Unicode `filename` to the full ISO-8859-1 charset + +0.3.0 / 2014-09-20 +================== + + * Add `fallback` option + * Add `type` option + +0.2.0 / 2014-09-19 +================== + + * Reduce ambiguity of file names with hex escape in buggy browsers + +0.1.2 / 2014-09-19 +================== + + * Fix periodic invalid Unicode filename header + +0.1.1 / 2014-09-19 +================== + + * Fix invalid characters appearing in `filename*` parameter + +0.1.0 / 2014-09-18 +================== + + * Make the `filename` argument optional + +0.0.0 / 2014-09-18 +================== + + * Initial release diff --git a/doubao-asr-demo/node_modules/content-disposition/LICENSE b/doubao-asr-demo/node_modules/content-disposition/LICENSE new file mode 100644 index 0000000..84441fb --- /dev/null +++ b/doubao-asr-demo/node_modules/content-disposition/LICENSE @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) 2014-2017 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/doubao-asr-demo/node_modules/content-disposition/README.md b/doubao-asr-demo/node_modules/content-disposition/README.md new file mode 100644 index 0000000..3a0bb05 --- /dev/null +++ b/doubao-asr-demo/node_modules/content-disposition/README.md @@ -0,0 +1,142 @@ +# content-disposition + +[![NPM Version][npm-image]][npm-url] +[![NPM Downloads][downloads-image]][downloads-url] +[![Node.js Version][node-version-image]][node-version-url] +[![Build Status][github-actions-ci-image]][github-actions-ci-url] +[![Test Coverage][coveralls-image]][coveralls-url] + +Create and parse HTTP `Content-Disposition` header + +## Installation + +```sh +$ npm install content-disposition +``` + +## API + +```js +var contentDisposition = require('content-disposition') +``` + +### contentDisposition(filename, options) + +Create an attachment `Content-Disposition` header value using the given file name, +if supplied. The `filename` is optional and if no file name is desired, but you +want to specify `options`, set `filename` to `undefined`. + +```js +res.setHeader('Content-Disposition', contentDisposition('∫ maths.pdf')) +``` + +**note** HTTP headers are of the ISO-8859-1 character set. If you are writing this +header through a means different from `setHeader` in Node.js, you'll want to specify +the `'binary'` encoding in Node.js. + +#### Options + +`contentDisposition` accepts these properties in the options object. + +##### fallback + +If the `filename` option is outside ISO-8859-1, then the file name is actually +stored in a supplemental field for clients that support Unicode file names and +a ISO-8859-1 version of the file name is automatically generated. + +This specifies the ISO-8859-1 file name to override the automatic generation or +disables the generation all together, defaults to `true`. + + - A string will specify the ISO-8859-1 file name to use in place of automatic + generation. + - `false` will disable including a ISO-8859-1 file name and only include the + Unicode version (unless the file name is already ISO-8859-1). + - `true` will enable automatic generation if the file name is outside ISO-8859-1. + +If the `filename` option is ISO-8859-1 and this option is specified and has a +different value, then the `filename` option is encoded in the extended field +and this set as the fallback field, even though they are both ISO-8859-1. + +##### type + +Specifies the disposition type, defaults to `"attachment"`. This can also be +`"inline"`, or any other value (all values except inline are treated like +`attachment`, but can convey additional information if both parties agree to +it). The type is normalized to lower-case. + +### contentDisposition.parse(string) + +```js +var disposition = contentDisposition.parse('attachment; filename="EURO rates.txt"; filename*=UTF-8\'\'%e2%82%ac%20rates.txt') +``` + +Parse a `Content-Disposition` header string. This automatically handles extended +("Unicode") parameters by decoding them and providing them under the standard +parameter name. This will return an object with the following properties (examples +are shown for the string `'attachment; filename="EURO rates.txt"; filename*=UTF-8\'\'%e2%82%ac%20rates.txt'`): + + - `type`: The disposition type (always lower case). Example: `'attachment'` + + - `parameters`: An object of the parameters in the disposition (name of parameter + always lower case and extended versions replace non-extended versions). Example: + `{filename: "€ rates.txt"}` + +## Examples + +### Send a file for download + +```js +var contentDisposition = require('content-disposition') +var destroy = require('destroy') +var fs = require('fs') +var http = require('http') +var onFinished = require('on-finished') + +var filePath = '/path/to/public/plans.pdf' + +http.createServer(function onRequest (req, res) { + // set headers + res.setHeader('Content-Type', 'application/pdf') + res.setHeader('Content-Disposition', contentDisposition(filePath)) + + // send file + var stream = fs.createReadStream(filePath) + stream.pipe(res) + onFinished(res, function () { + destroy(stream) + }) +}) +``` + +## Testing + +```sh +$ npm test +``` + +## References + +- [RFC 2616: Hypertext Transfer Protocol -- HTTP/1.1][rfc-2616] +- [RFC 5987: Character Set and Language Encoding for Hypertext Transfer Protocol (HTTP) Header Field Parameters][rfc-5987] +- [RFC 6266: Use of the Content-Disposition Header Field in the Hypertext Transfer Protocol (HTTP)][rfc-6266] +- [Test Cases for HTTP Content-Disposition header field (RFC 6266) and the Encodings defined in RFCs 2047, 2231 and 5987][tc-2231] + +[rfc-2616]: https://tools.ietf.org/html/rfc2616 +[rfc-5987]: https://tools.ietf.org/html/rfc5987 +[rfc-6266]: https://tools.ietf.org/html/rfc6266 +[tc-2231]: http://greenbytes.de/tech/tc2231/ + +## License + +[MIT](LICENSE) + +[npm-image]: https://img.shields.io/npm/v/content-disposition.svg +[npm-url]: https://npmjs.org/package/content-disposition +[node-version-image]: https://img.shields.io/node/v/content-disposition.svg +[node-version-url]: https://nodejs.org/en/download +[coveralls-image]: https://img.shields.io/coveralls/jshttp/content-disposition.svg +[coveralls-url]: https://coveralls.io/r/jshttp/content-disposition?branch=master +[downloads-image]: https://img.shields.io/npm/dm/content-disposition.svg +[downloads-url]: https://npmjs.org/package/content-disposition +[github-actions-ci-image]: https://img.shields.io/github/workflow/status/jshttp/content-disposition/ci/master?label=ci +[github-actions-ci-url]: https://github.com/jshttp/content-disposition?query=workflow%3Aci diff --git a/doubao-asr-demo/node_modules/content-disposition/index.js b/doubao-asr-demo/node_modules/content-disposition/index.js new file mode 100644 index 0000000..ecec899 --- /dev/null +++ b/doubao-asr-demo/node_modules/content-disposition/index.js @@ -0,0 +1,458 @@ +/*! + * content-disposition + * Copyright(c) 2014-2017 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict' + +/** + * Module exports. + * @public + */ + +module.exports = contentDisposition +module.exports.parse = parse + +/** + * Module dependencies. + * @private + */ + +var basename = require('path').basename +var Buffer = require('safe-buffer').Buffer + +/** + * RegExp to match non attr-char, *after* encodeURIComponent (i.e. not including "%") + * @private + */ + +var ENCODE_URL_ATTR_CHAR_REGEXP = /[\x00-\x20"'()*,/:;<=>?@[\\\]{}\x7f]/g // eslint-disable-line no-control-regex + +/** + * RegExp to match percent encoding escape. + * @private + */ + +var HEX_ESCAPE_REGEXP = /%[0-9A-Fa-f]{2}/ +var HEX_ESCAPE_REPLACE_REGEXP = /%([0-9A-Fa-f]{2})/g + +/** + * RegExp to match non-latin1 characters. + * @private + */ + +var NON_LATIN1_REGEXP = /[^\x20-\x7e\xa0-\xff]/g + +/** + * RegExp to match quoted-pair in RFC 2616 + * + * quoted-pair = "\" CHAR + * CHAR = + * @private + */ + +var QESC_REGEXP = /\\([\u0000-\u007f])/g // eslint-disable-line no-control-regex + +/** + * RegExp to match chars that must be quoted-pair in RFC 2616 + * @private + */ + +var QUOTE_REGEXP = /([\\"])/g + +/** + * RegExp for various RFC 2616 grammar + * + * parameter = token "=" ( token | quoted-string ) + * token = 1* + * separators = "(" | ")" | "<" | ">" | "@" + * | "," | ";" | ":" | "\" | <"> + * | "/" | "[" | "]" | "?" | "=" + * | "{" | "}" | SP | HT + * quoted-string = ( <"> *(qdtext | quoted-pair ) <"> ) + * qdtext = > + * quoted-pair = "\" CHAR + * CHAR = + * TEXT = + * LWS = [CRLF] 1*( SP | HT ) + * CRLF = CR LF + * CR = + * LF = + * SP = + * HT = + * CTL = + * OCTET = + * @private + */ + +var PARAM_REGEXP = /;[\x09\x20]*([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\x09\x20]*=[\x09\x20]*("(?:[\x20!\x23-\x5b\x5d-\x7e\x80-\xff]|\\[\x20-\x7e])*"|[!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\x09\x20]*/g // eslint-disable-line no-control-regex +var TEXT_REGEXP = /^[\x20-\x7e\x80-\xff]+$/ +var TOKEN_REGEXP = /^[!#$%&'*+.0-9A-Z^_`a-z|~-]+$/ + +/** + * RegExp for various RFC 5987 grammar + * + * ext-value = charset "'" [ language ] "'" value-chars + * charset = "UTF-8" / "ISO-8859-1" / mime-charset + * mime-charset = 1*mime-charsetc + * mime-charsetc = ALPHA / DIGIT + * / "!" / "#" / "$" / "%" / "&" + * / "+" / "-" / "^" / "_" / "`" + * / "{" / "}" / "~" + * language = ( 2*3ALPHA [ extlang ] ) + * / 4ALPHA + * / 5*8ALPHA + * extlang = *3( "-" 3ALPHA ) + * value-chars = *( pct-encoded / attr-char ) + * pct-encoded = "%" HEXDIG HEXDIG + * attr-char = ALPHA / DIGIT + * / "!" / "#" / "$" / "&" / "+" / "-" / "." + * / "^" / "_" / "`" / "|" / "~" + * @private + */ + +var EXT_VALUE_REGEXP = /^([A-Za-z0-9!#$%&+\-^_`{}~]+)'(?:[A-Za-z]{2,3}(?:-[A-Za-z]{3}){0,3}|[A-Za-z]{4,8}|)'((?:%[0-9A-Fa-f]{2}|[A-Za-z0-9!#$&+.^_`|~-])+)$/ + +/** + * RegExp for various RFC 6266 grammar + * + * disposition-type = "inline" | "attachment" | disp-ext-type + * disp-ext-type = token + * disposition-parm = filename-parm | disp-ext-parm + * filename-parm = "filename" "=" value + * | "filename*" "=" ext-value + * disp-ext-parm = token "=" value + * | ext-token "=" ext-value + * ext-token = + * @private + */ + +var DISPOSITION_TYPE_REGEXP = /^([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\x09\x20]*(?:$|;)/ // eslint-disable-line no-control-regex + +/** + * Create an attachment Content-Disposition header. + * + * @param {string} [filename] + * @param {object} [options] + * @param {string} [options.type=attachment] + * @param {string|boolean} [options.fallback=true] + * @return {string} + * @public + */ + +function contentDisposition (filename, options) { + var opts = options || {} + + // get type + var type = opts.type || 'attachment' + + // get parameters + var params = createparams(filename, opts.fallback) + + // format into string + return format(new ContentDisposition(type, params)) +} + +/** + * Create parameters object from filename and fallback. + * + * @param {string} [filename] + * @param {string|boolean} [fallback=true] + * @return {object} + * @private + */ + +function createparams (filename, fallback) { + if (filename === undefined) { + return + } + + var params = {} + + if (typeof filename !== 'string') { + throw new TypeError('filename must be a string') + } + + // fallback defaults to true + if (fallback === undefined) { + fallback = true + } + + if (typeof fallback !== 'string' && typeof fallback !== 'boolean') { + throw new TypeError('fallback must be a string or boolean') + } + + if (typeof fallback === 'string' && NON_LATIN1_REGEXP.test(fallback)) { + throw new TypeError('fallback must be ISO-8859-1 string') + } + + // restrict to file base name + var name = basename(filename) + + // determine if name is suitable for quoted string + var isQuotedString = TEXT_REGEXP.test(name) + + // generate fallback name + var fallbackName = typeof fallback !== 'string' + ? fallback && getlatin1(name) + : basename(fallback) + var hasFallback = typeof fallbackName === 'string' && fallbackName !== name + + // set extended filename parameter + if (hasFallback || !isQuotedString || HEX_ESCAPE_REGEXP.test(name)) { + params['filename*'] = name + } + + // set filename parameter + if (isQuotedString || hasFallback) { + params.filename = hasFallback + ? fallbackName + : name + } + + return params +} + +/** + * Format object to Content-Disposition header. + * + * @param {object} obj + * @param {string} obj.type + * @param {object} [obj.parameters] + * @return {string} + * @private + */ + +function format (obj) { + var parameters = obj.parameters + var type = obj.type + + if (!type || typeof type !== 'string' || !TOKEN_REGEXP.test(type)) { + throw new TypeError('invalid type') + } + + // start with normalized type + var string = String(type).toLowerCase() + + // append parameters + if (parameters && typeof parameters === 'object') { + var param + var params = Object.keys(parameters).sort() + + for (var i = 0; i < params.length; i++) { + param = params[i] + + var val = param.substr(-1) === '*' + ? ustring(parameters[param]) + : qstring(parameters[param]) + + string += '; ' + param + '=' + val + } + } + + return string +} + +/** + * Decode a RFC 5987 field value (gracefully). + * + * @param {string} str + * @return {string} + * @private + */ + +function decodefield (str) { + var match = EXT_VALUE_REGEXP.exec(str) + + if (!match) { + throw new TypeError('invalid extended field value') + } + + var charset = match[1].toLowerCase() + var encoded = match[2] + var value + + // to binary string + var binary = encoded.replace(HEX_ESCAPE_REPLACE_REGEXP, pdecode) + + switch (charset) { + case 'iso-8859-1': + value = getlatin1(binary) + break + case 'utf-8': + value = Buffer.from(binary, 'binary').toString('utf8') + break + default: + throw new TypeError('unsupported charset in extended field') + } + + return value +} + +/** + * Get ISO-8859-1 version of string. + * + * @param {string} val + * @return {string} + * @private + */ + +function getlatin1 (val) { + // simple Unicode -> ISO-8859-1 transformation + return String(val).replace(NON_LATIN1_REGEXP, '?') +} + +/** + * Parse Content-Disposition header string. + * + * @param {string} string + * @return {object} + * @public + */ + +function parse (string) { + if (!string || typeof string !== 'string') { + throw new TypeError('argument string is required') + } + + var match = DISPOSITION_TYPE_REGEXP.exec(string) + + if (!match) { + throw new TypeError('invalid type format') + } + + // normalize type + var index = match[0].length + var type = match[1].toLowerCase() + + var key + var names = [] + var params = {} + var value + + // calculate index to start at + index = PARAM_REGEXP.lastIndex = match[0].substr(-1) === ';' + ? index - 1 + : index + + // match parameters + while ((match = PARAM_REGEXP.exec(string))) { + if (match.index !== index) { + throw new TypeError('invalid parameter format') + } + + index += match[0].length + key = match[1].toLowerCase() + value = match[2] + + if (names.indexOf(key) !== -1) { + throw new TypeError('invalid duplicate parameter') + } + + names.push(key) + + if (key.indexOf('*') + 1 === key.length) { + // decode extended value + key = key.slice(0, -1) + value = decodefield(value) + + // overwrite existing value + params[key] = value + continue + } + + if (typeof params[key] === 'string') { + continue + } + + if (value[0] === '"') { + // remove quotes and escapes + value = value + .substr(1, value.length - 2) + .replace(QESC_REGEXP, '$1') + } + + params[key] = value + } + + if (index !== -1 && index !== string.length) { + throw new TypeError('invalid parameter format') + } + + return new ContentDisposition(type, params) +} + +/** + * Percent decode a single character. + * + * @param {string} str + * @param {string} hex + * @return {string} + * @private + */ + +function pdecode (str, hex) { + return String.fromCharCode(parseInt(hex, 16)) +} + +/** + * Percent encode a single character. + * + * @param {string} char + * @return {string} + * @private + */ + +function pencode (char) { + return '%' + String(char) + .charCodeAt(0) + .toString(16) + .toUpperCase() +} + +/** + * Quote a string for HTTP. + * + * @param {string} val + * @return {string} + * @private + */ + +function qstring (val) { + var str = String(val) + + return '"' + str.replace(QUOTE_REGEXP, '\\$1') + '"' +} + +/** + * Encode a Unicode string for HTTP (RFC 5987). + * + * @param {string} val + * @return {string} + * @private + */ + +function ustring (val) { + var str = String(val) + + // percent encode as UTF-8 + var encoded = encodeURIComponent(str) + .replace(ENCODE_URL_ATTR_CHAR_REGEXP, pencode) + + return 'UTF-8\'\'' + encoded +} + +/** + * Class for parsed Content-Disposition header for v8 optimization + * + * @public + * @param {string} type + * @param {object} parameters + * @constructor + */ + +function ContentDisposition (type, parameters) { + this.type = type + this.parameters = parameters +} diff --git a/doubao-asr-demo/node_modules/content-disposition/package.json b/doubao-asr-demo/node_modules/content-disposition/package.json new file mode 100644 index 0000000..43c70ce --- /dev/null +++ b/doubao-asr-demo/node_modules/content-disposition/package.json @@ -0,0 +1,44 @@ +{ + "name": "content-disposition", + "description": "Create and parse Content-Disposition header", + "version": "0.5.4", + "author": "Douglas Christopher Wilson ", + "license": "MIT", + "keywords": [ + "content-disposition", + "http", + "rfc6266", + "res" + ], + "repository": "jshttp/content-disposition", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "devDependencies": { + "deep-equal": "1.0.1", + "eslint": "7.32.0", + "eslint-config-standard": "13.0.1", + "eslint-plugin-import": "2.25.3", + "eslint-plugin-markdown": "2.2.1", + "eslint-plugin-node": "11.1.0", + "eslint-plugin-promise": "5.2.0", + "eslint-plugin-standard": "4.1.0", + "istanbul": "0.4.5", + "mocha": "9.1.3" + }, + "files": [ + "LICENSE", + "HISTORY.md", + "README.md", + "index.js" + ], + "engines": { + "node": ">= 0.6" + }, + "scripts": { + "lint": "eslint .", + "test": "mocha --reporter spec --bail --check-leaks test/", + "test-ci": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/", + "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/" + } +} diff --git a/doubao-asr-demo/node_modules/content-type/HISTORY.md b/doubao-asr-demo/node_modules/content-type/HISTORY.md new file mode 100644 index 0000000..4583671 --- /dev/null +++ b/doubao-asr-demo/node_modules/content-type/HISTORY.md @@ -0,0 +1,29 @@ +1.0.5 / 2023-01-29 +================== + + * perf: skip value escaping when unnecessary + +1.0.4 / 2017-09-11 +================== + + * perf: skip parameter parsing when no parameters + +1.0.3 / 2017-09-10 +================== + + * perf: remove argument reassignment + +1.0.2 / 2016-05-09 +================== + + * perf: enable strict mode + +1.0.1 / 2015-02-13 +================== + + * Improve missing `Content-Type` header error message + +1.0.0 / 2015-02-01 +================== + + * Initial implementation, derived from `media-typer@0.3.0` diff --git a/doubao-asr-demo/node_modules/content-type/LICENSE b/doubao-asr-demo/node_modules/content-type/LICENSE new file mode 100644 index 0000000..34b1a2d --- /dev/null +++ b/doubao-asr-demo/node_modules/content-type/LICENSE @@ -0,0 +1,22 @@ +(The MIT License) + +Copyright (c) 2015 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/doubao-asr-demo/node_modules/content-type/README.md b/doubao-asr-demo/node_modules/content-type/README.md new file mode 100644 index 0000000..c1a922a --- /dev/null +++ b/doubao-asr-demo/node_modules/content-type/README.md @@ -0,0 +1,94 @@ +# content-type + +[![NPM Version][npm-version-image]][npm-url] +[![NPM Downloads][npm-downloads-image]][npm-url] +[![Node.js Version][node-image]][node-url] +[![Build Status][ci-image]][ci-url] +[![Coverage Status][coveralls-image]][coveralls-url] + +Create and parse HTTP Content-Type header according to RFC 7231 + +## Installation + +```sh +$ npm install content-type +``` + +## API + +```js +var contentType = require('content-type') +``` + +### contentType.parse(string) + +```js +var obj = contentType.parse('image/svg+xml; charset=utf-8') +``` + +Parse a `Content-Type` header. This will return an object with the following +properties (examples are shown for the string `'image/svg+xml; charset=utf-8'`): + + - `type`: The media type (the type and subtype, always lower case). + Example: `'image/svg+xml'` + + - `parameters`: An object of the parameters in the media type (name of parameter + always lower case). Example: `{charset: 'utf-8'}` + +Throws a `TypeError` if the string is missing or invalid. + +### contentType.parse(req) + +```js +var obj = contentType.parse(req) +``` + +Parse the `Content-Type` header from the given `req`. Short-cut for +`contentType.parse(req.headers['content-type'])`. + +Throws a `TypeError` if the `Content-Type` header is missing or invalid. + +### contentType.parse(res) + +```js +var obj = contentType.parse(res) +``` + +Parse the `Content-Type` header set on the given `res`. Short-cut for +`contentType.parse(res.getHeader('content-type'))`. + +Throws a `TypeError` if the `Content-Type` header is missing or invalid. + +### contentType.format(obj) + +```js +var str = contentType.format({ + type: 'image/svg+xml', + parameters: { charset: 'utf-8' } +}) +``` + +Format an object into a `Content-Type` header. This will return a string of the +content type for the given object with the following properties (examples are +shown that produce the string `'image/svg+xml; charset=utf-8'`): + + - `type`: The media type (will be lower-cased). Example: `'image/svg+xml'` + + - `parameters`: An object of the parameters in the media type (name of the + parameter will be lower-cased). Example: `{charset: 'utf-8'}` + +Throws a `TypeError` if the object contains an invalid type or parameter names. + +## License + +[MIT](LICENSE) + +[ci-image]: https://badgen.net/github/checks/jshttp/content-type/master?label=ci +[ci-url]: https://github.com/jshttp/content-type/actions/workflows/ci.yml +[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/content-type/master +[coveralls-url]: https://coveralls.io/r/jshttp/content-type?branch=master +[node-image]: https://badgen.net/npm/node/content-type +[node-url]: https://nodejs.org/en/download +[npm-downloads-image]: https://badgen.net/npm/dm/content-type +[npm-url]: https://npmjs.org/package/content-type +[npm-version-image]: https://badgen.net/npm/v/content-type diff --git a/doubao-asr-demo/node_modules/content-type/index.js b/doubao-asr-demo/node_modules/content-type/index.js new file mode 100644 index 0000000..41840e7 --- /dev/null +++ b/doubao-asr-demo/node_modules/content-type/index.js @@ -0,0 +1,225 @@ +/*! + * content-type + * Copyright(c) 2015 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict' + +/** + * RegExp to match *( ";" parameter ) in RFC 7231 sec 3.1.1.1 + * + * parameter = token "=" ( token / quoted-string ) + * token = 1*tchar + * tchar = "!" / "#" / "$" / "%" / "&" / "'" / "*" + * / "+" / "-" / "." / "^" / "_" / "`" / "|" / "~" + * / DIGIT / ALPHA + * ; any VCHAR, except delimiters + * quoted-string = DQUOTE *( qdtext / quoted-pair ) DQUOTE + * qdtext = HTAB / SP / %x21 / %x23-5B / %x5D-7E / obs-text + * obs-text = %x80-FF + * quoted-pair = "\" ( HTAB / SP / VCHAR / obs-text ) + */ +var PARAM_REGEXP = /; *([!#$%&'*+.^_`|~0-9A-Za-z-]+) *= *("(?:[\u000b\u0020\u0021\u0023-\u005b\u005d-\u007e\u0080-\u00ff]|\\[\u000b\u0020-\u00ff])*"|[!#$%&'*+.^_`|~0-9A-Za-z-]+) */g // eslint-disable-line no-control-regex +var TEXT_REGEXP = /^[\u000b\u0020-\u007e\u0080-\u00ff]+$/ // eslint-disable-line no-control-regex +var TOKEN_REGEXP = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/ + +/** + * RegExp to match quoted-pair in RFC 7230 sec 3.2.6 + * + * quoted-pair = "\" ( HTAB / SP / VCHAR / obs-text ) + * obs-text = %x80-FF + */ +var QESC_REGEXP = /\\([\u000b\u0020-\u00ff])/g // eslint-disable-line no-control-regex + +/** + * RegExp to match chars that must be quoted-pair in RFC 7230 sec 3.2.6 + */ +var QUOTE_REGEXP = /([\\"])/g + +/** + * RegExp to match type in RFC 7231 sec 3.1.1.1 + * + * media-type = type "/" subtype + * type = token + * subtype = token + */ +var TYPE_REGEXP = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+\/[!#$%&'*+.^_`|~0-9A-Za-z-]+$/ + +/** + * Module exports. + * @public + */ + +exports.format = format +exports.parse = parse + +/** + * Format object to media type. + * + * @param {object} obj + * @return {string} + * @public + */ + +function format (obj) { + if (!obj || typeof obj !== 'object') { + throw new TypeError('argument obj is required') + } + + var parameters = obj.parameters + var type = obj.type + + if (!type || !TYPE_REGEXP.test(type)) { + throw new TypeError('invalid type') + } + + var string = type + + // append parameters + if (parameters && typeof parameters === 'object') { + var param + var params = Object.keys(parameters).sort() + + for (var i = 0; i < params.length; i++) { + param = params[i] + + if (!TOKEN_REGEXP.test(param)) { + throw new TypeError('invalid parameter name') + } + + string += '; ' + param + '=' + qstring(parameters[param]) + } + } + + return string +} + +/** + * Parse media type to object. + * + * @param {string|object} string + * @return {Object} + * @public + */ + +function parse (string) { + if (!string) { + throw new TypeError('argument string is required') + } + + // support req/res-like objects as argument + var header = typeof string === 'object' + ? getcontenttype(string) + : string + + if (typeof header !== 'string') { + throw new TypeError('argument string is required to be a string') + } + + var index = header.indexOf(';') + var type = index !== -1 + ? header.slice(0, index).trim() + : header.trim() + + if (!TYPE_REGEXP.test(type)) { + throw new TypeError('invalid media type') + } + + var obj = new ContentType(type.toLowerCase()) + + // parse parameters + if (index !== -1) { + var key + var match + var value + + PARAM_REGEXP.lastIndex = index + + while ((match = PARAM_REGEXP.exec(header))) { + if (match.index !== index) { + throw new TypeError('invalid parameter format') + } + + index += match[0].length + key = match[1].toLowerCase() + value = match[2] + + if (value.charCodeAt(0) === 0x22 /* " */) { + // remove quotes + value = value.slice(1, -1) + + // remove escapes + if (value.indexOf('\\') !== -1) { + value = value.replace(QESC_REGEXP, '$1') + } + } + + obj.parameters[key] = value + } + + if (index !== header.length) { + throw new TypeError('invalid parameter format') + } + } + + return obj +} + +/** + * Get content-type from req/res objects. + * + * @param {object} + * @return {Object} + * @private + */ + +function getcontenttype (obj) { + var header + + if (typeof obj.getHeader === 'function') { + // res-like + header = obj.getHeader('content-type') + } else if (typeof obj.headers === 'object') { + // req-like + header = obj.headers && obj.headers['content-type'] + } + + if (typeof header !== 'string') { + throw new TypeError('content-type header is missing from object') + } + + return header +} + +/** + * Quote a string if necessary. + * + * @param {string} val + * @return {string} + * @private + */ + +function qstring (val) { + var str = String(val) + + // no need to quote tokens + if (TOKEN_REGEXP.test(str)) { + return str + } + + if (str.length > 0 && !TEXT_REGEXP.test(str)) { + throw new TypeError('invalid parameter value') + } + + return '"' + str.replace(QUOTE_REGEXP, '\\$1') + '"' +} + +/** + * Class to represent a content type. + * @private + */ +function ContentType (type) { + this.parameters = Object.create(null) + this.type = type +} diff --git a/doubao-asr-demo/node_modules/content-type/package.json b/doubao-asr-demo/node_modules/content-type/package.json new file mode 100644 index 0000000..9db19f6 --- /dev/null +++ b/doubao-asr-demo/node_modules/content-type/package.json @@ -0,0 +1,42 @@ +{ + "name": "content-type", + "description": "Create and parse HTTP Content-Type header", + "version": "1.0.5", + "author": "Douglas Christopher Wilson ", + "license": "MIT", + "keywords": [ + "content-type", + "http", + "req", + "res", + "rfc7231" + ], + "repository": "jshttp/content-type", + "devDependencies": { + "deep-equal": "1.0.1", + "eslint": "8.32.0", + "eslint-config-standard": "15.0.1", + "eslint-plugin-import": "2.27.5", + "eslint-plugin-node": "11.1.0", + "eslint-plugin-promise": "6.1.1", + "eslint-plugin-standard": "4.1.0", + "mocha": "10.2.0", + "nyc": "15.1.0" + }, + "files": [ + "LICENSE", + "HISTORY.md", + "README.md", + "index.js" + ], + "engines": { + "node": ">= 0.6" + }, + "scripts": { + "lint": "eslint .", + "test": "mocha --reporter spec --check-leaks --bail test/", + "test-ci": "nyc --reporter=lcovonly --reporter=text npm test", + "test-cov": "nyc --reporter=html --reporter=text npm test", + "version": "node scripts/version-history.js && git add HISTORY.md" + } +} diff --git a/doubao-asr-demo/node_modules/cookie-signature/.npmignore b/doubao-asr-demo/node_modules/cookie-signature/.npmignore new file mode 100644 index 0000000..f1250e5 --- /dev/null +++ b/doubao-asr-demo/node_modules/cookie-signature/.npmignore @@ -0,0 +1,4 @@ +support +test +examples +*.sock diff --git a/doubao-asr-demo/node_modules/cookie-signature/History.md b/doubao-asr-demo/node_modules/cookie-signature/History.md new file mode 100644 index 0000000..78513cc --- /dev/null +++ b/doubao-asr-demo/node_modules/cookie-signature/History.md @@ -0,0 +1,38 @@ +1.0.6 / 2015-02-03 +================== + +* use `npm test` instead of `make test` to run tests +* clearer assertion messages when checking input + + +1.0.5 / 2014-09-05 +================== + +* add license to package.json + +1.0.4 / 2014-06-25 +================== + + * corrected avoidance of timing attacks (thanks @tenbits!) + +1.0.3 / 2014-01-28 +================== + + * [incorrect] fix for timing attacks + +1.0.2 / 2014-01-28 +================== + + * fix missing repository warning + * fix typo in test + +1.0.1 / 2013-04-15 +================== + + * Revert "Changed underlying HMAC algo. to sha512." + * Revert "Fix for timing attacks on MAC verification." + +0.0.1 / 2010-01-03 +================== + + * Initial release diff --git a/doubao-asr-demo/node_modules/cookie-signature/Readme.md b/doubao-asr-demo/node_modules/cookie-signature/Readme.md new file mode 100644 index 0000000..2559e84 --- /dev/null +++ b/doubao-asr-demo/node_modules/cookie-signature/Readme.md @@ -0,0 +1,42 @@ + +# cookie-signature + + Sign and unsign cookies. + +## Example + +```js +var cookie = require('cookie-signature'); + +var val = cookie.sign('hello', 'tobiiscool'); +val.should.equal('hello.DGDUkGlIkCzPz+C0B064FNgHdEjox7ch8tOBGslZ5QI'); + +var val = cookie.sign('hello', 'tobiiscool'); +cookie.unsign(val, 'tobiiscool').should.equal('hello'); +cookie.unsign(val, 'luna').should.be.false; +``` + +## License + +(The MIT License) + +Copyright (c) 2012 LearnBoost <tj@learnboost.com> + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/doubao-asr-demo/node_modules/cookie-signature/index.js b/doubao-asr-demo/node_modules/cookie-signature/index.js new file mode 100644 index 0000000..b8c9463 --- /dev/null +++ b/doubao-asr-demo/node_modules/cookie-signature/index.js @@ -0,0 +1,51 @@ +/** + * Module dependencies. + */ + +var crypto = require('crypto'); + +/** + * Sign the given `val` with `secret`. + * + * @param {String} val + * @param {String} secret + * @return {String} + * @api private + */ + +exports.sign = function(val, secret){ + if ('string' != typeof val) throw new TypeError("Cookie value must be provided as a string."); + if ('string' != typeof secret) throw new TypeError("Secret string must be provided."); + return val + '.' + crypto + .createHmac('sha256', secret) + .update(val) + .digest('base64') + .replace(/\=+$/, ''); +}; + +/** + * Unsign and decode the given `val` with `secret`, + * returning `false` if the signature is invalid. + * + * @param {String} val + * @param {String} secret + * @return {String|Boolean} + * @api private + */ + +exports.unsign = function(val, secret){ + if ('string' != typeof val) throw new TypeError("Signed cookie string must be provided."); + if ('string' != typeof secret) throw new TypeError("Secret string must be provided."); + var str = val.slice(0, val.lastIndexOf('.')) + , mac = exports.sign(str, secret); + + return sha1(mac) == sha1(val) ? str : false; +}; + +/** + * Private + */ + +function sha1(str){ + return crypto.createHash('sha1').update(str).digest('hex'); +} diff --git a/doubao-asr-demo/node_modules/cookie-signature/package.json b/doubao-asr-demo/node_modules/cookie-signature/package.json new file mode 100644 index 0000000..29c4498 --- /dev/null +++ b/doubao-asr-demo/node_modules/cookie-signature/package.json @@ -0,0 +1,18 @@ +{ + "name": "cookie-signature", + "version": "1.0.6", + "description": "Sign and unsign cookies", + "keywords": ["cookie", "sign", "unsign"], + "author": "TJ Holowaychuk ", + "license": "MIT", + "repository": { "type": "git", "url": "https://github.com/visionmedia/node-cookie-signature.git"}, + "dependencies": {}, + "devDependencies": { + "mocha": "*", + "should": "*" + }, + "scripts": { + "test": "mocha --require should --reporter spec" + }, + "main": "index" +} diff --git a/doubao-asr-demo/node_modules/cookie/LICENSE b/doubao-asr-demo/node_modules/cookie/LICENSE new file mode 100644 index 0000000..058b6b4 --- /dev/null +++ b/doubao-asr-demo/node_modules/cookie/LICENSE @@ -0,0 +1,24 @@ +(The MIT License) + +Copyright (c) 2012-2014 Roman Shtylman +Copyright (c) 2015 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/doubao-asr-demo/node_modules/cookie/README.md b/doubao-asr-demo/node_modules/cookie/README.md new file mode 100644 index 0000000..71fdac1 --- /dev/null +++ b/doubao-asr-demo/node_modules/cookie/README.md @@ -0,0 +1,317 @@ +# cookie + +[![NPM Version][npm-version-image]][npm-url] +[![NPM Downloads][npm-downloads-image]][npm-url] +[![Node.js Version][node-image]][node-url] +[![Build Status][ci-image]][ci-url] +[![Coverage Status][coveralls-image]][coveralls-url] + +Basic HTTP cookie parser and serializer for HTTP servers. + +## Installation + +This is a [Node.js](https://nodejs.org/en/) module available through the +[npm registry](https://www.npmjs.com/). Installation is done using the +[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally): + +```sh +$ npm install cookie +``` + +## API + +```js +var cookie = require('cookie'); +``` + +### cookie.parse(str, options) + +Parse an HTTP `Cookie` header string and returning an object of all cookie name-value pairs. +The `str` argument is the string representing a `Cookie` header value and `options` is an +optional object containing additional parsing options. + +```js +var cookies = cookie.parse('foo=bar; equation=E%3Dmc%5E2'); +// { foo: 'bar', equation: 'E=mc^2' } +``` + +#### Options + +`cookie.parse` accepts these properties in the options object. + +##### decode + +Specifies a function that will be used to decode a cookie's value. Since the value of a cookie +has a limited character set (and must be a simple string), this function can be used to decode +a previously-encoded cookie value into a JavaScript string or other object. + +The default function is the global `decodeURIComponent`, which will decode any URL-encoded +sequences into their byte representations. + +**note** if an error is thrown from this function, the original, non-decoded cookie value will +be returned as the cookie's value. + +### cookie.serialize(name, value, options) + +Serialize a cookie name-value pair into a `Set-Cookie` header string. The `name` argument is the +name for the cookie, the `value` argument is the value to set the cookie to, and the `options` +argument is an optional object containing additional serialization options. + +```js +var setCookie = cookie.serialize('foo', 'bar'); +// foo=bar +``` + +#### Options + +`cookie.serialize` accepts these properties in the options object. + +##### domain + +Specifies the value for the [`Domain` `Set-Cookie` attribute][rfc-6265-5.2.3]. By default, no +domain is set, and most clients will consider the cookie to apply to only the current domain. + +##### encode + +Specifies a function that will be used to encode a cookie's value. Since value of a cookie +has a limited character set (and must be a simple string), this function can be used to encode +a value into a string suited for a cookie's value. + +The default function is the global `encodeURIComponent`, which will encode a JavaScript string +into UTF-8 byte sequences and then URL-encode any that fall outside of the cookie range. + +##### expires + +Specifies the `Date` object to be the value for the [`Expires` `Set-Cookie` attribute][rfc-6265-5.2.1]. +By default, no expiration is set, and most clients will consider this a "non-persistent cookie" and +will delete it on a condition like exiting a web browser application. + +**note** the [cookie storage model specification][rfc-6265-5.3] states that if both `expires` and +`maxAge` are set, then `maxAge` takes precedence, but it is possible not all clients by obey this, +so if both are set, they should point to the same date and time. + +##### httpOnly + +Specifies the `boolean` value for the [`HttpOnly` `Set-Cookie` attribute][rfc-6265-5.2.6]. When truthy, +the `HttpOnly` attribute is set, otherwise it is not. By default, the `HttpOnly` attribute is not set. + +**note** be careful when setting this to `true`, as compliant clients will not allow client-side +JavaScript to see the cookie in `document.cookie`. + +##### maxAge + +Specifies the `number` (in seconds) to be the value for the [`Max-Age` `Set-Cookie` attribute][rfc-6265-5.2.2]. +The given number will be converted to an integer by rounding down. By default, no maximum age is set. + +**note** the [cookie storage model specification][rfc-6265-5.3] states that if both `expires` and +`maxAge` are set, then `maxAge` takes precedence, but it is possible not all clients by obey this, +so if both are set, they should point to the same date and time. + +##### partitioned + +Specifies the `boolean` value for the [`Partitioned` `Set-Cookie`](rfc-cutler-httpbis-partitioned-cookies) +attribute. When truthy, the `Partitioned` attribute is set, otherwise it is not. By default, the +`Partitioned` attribute is not set. + +**note** This is an attribute that has not yet been fully standardized, and may change in the future. +This also means many clients may ignore this attribute until they understand it. + +More information about can be found in [the proposal](https://github.com/privacycg/CHIPS). + +##### path + +Specifies the value for the [`Path` `Set-Cookie` attribute][rfc-6265-5.2.4]. By default, the path +is considered the ["default path"][rfc-6265-5.1.4]. + +##### priority + +Specifies the `string` to be the value for the [`Priority` `Set-Cookie` attribute][rfc-west-cookie-priority-00-4.1]. + + - `'low'` will set the `Priority` attribute to `Low`. + - `'medium'` will set the `Priority` attribute to `Medium`, the default priority when not set. + - `'high'` will set the `Priority` attribute to `High`. + +More information about the different priority levels can be found in +[the specification][rfc-west-cookie-priority-00-4.1]. + +**note** This is an attribute that has not yet been fully standardized, and may change in the future. +This also means many clients may ignore this attribute until they understand it. + +##### sameSite + +Specifies the `boolean` or `string` to be the value for the [`SameSite` `Set-Cookie` attribute][rfc-6265bis-09-5.4.7]. + + - `true` will set the `SameSite` attribute to `Strict` for strict same site enforcement. + - `false` will not set the `SameSite` attribute. + - `'lax'` will set the `SameSite` attribute to `Lax` for lax same site enforcement. + - `'none'` will set the `SameSite` attribute to `None` for an explicit cross-site cookie. + - `'strict'` will set the `SameSite` attribute to `Strict` for strict same site enforcement. + +More information about the different enforcement levels can be found in +[the specification][rfc-6265bis-09-5.4.7]. + +**note** This is an attribute that has not yet been fully standardized, and may change in the future. +This also means many clients may ignore this attribute until they understand it. + +##### secure + +Specifies the `boolean` value for the [`Secure` `Set-Cookie` attribute][rfc-6265-5.2.5]. When truthy, +the `Secure` attribute is set, otherwise it is not. By default, the `Secure` attribute is not set. + +**note** be careful when setting this to `true`, as compliant clients will not send the cookie back to +the server in the future if the browser does not have an HTTPS connection. + +## Example + +The following example uses this module in conjunction with the Node.js core HTTP server +to prompt a user for their name and display it back on future visits. + +```js +var cookie = require('cookie'); +var escapeHtml = require('escape-html'); +var http = require('http'); +var url = require('url'); + +function onRequest(req, res) { + // Parse the query string + var query = url.parse(req.url, true, true).query; + + if (query && query.name) { + // Set a new cookie with the name + res.setHeader('Set-Cookie', cookie.serialize('name', String(query.name), { + httpOnly: true, + maxAge: 60 * 60 * 24 * 7 // 1 week + })); + + // Redirect back after setting cookie + res.statusCode = 302; + res.setHeader('Location', req.headers.referer || '/'); + res.end(); + return; + } + + // Parse the cookies on the request + var cookies = cookie.parse(req.headers.cookie || ''); + + // Get the visitor name set in the cookie + var name = cookies.name; + + res.setHeader('Content-Type', 'text/html; charset=UTF-8'); + + if (name) { + res.write('

Welcome back, ' + escapeHtml(name) + '!

'); + } else { + res.write('

Hello, new visitor!

'); + } + + res.write('
'); + res.write(' '); + res.end('
'); +} + +http.createServer(onRequest).listen(3000); +``` + +## Testing + +```sh +$ npm test +``` + +## Benchmark + +``` +$ npm run bench + +> cookie@0.5.0 bench +> node benchmark/index.js + + node@18.18.2 + acorn@8.10.0 + ada@2.6.0 + ares@1.19.1 + brotli@1.0.9 + cldr@43.1 + icu@73.2 + llhttp@6.0.11 + modules@108 + napi@9 + nghttp2@1.57.0 + nghttp3@0.7.0 + ngtcp2@0.8.1 + openssl@3.0.10+quic + simdutf@3.2.14 + tz@2023c + undici@5.26.3 + unicode@15.0 + uv@1.44.2 + uvwasi@0.0.18 + v8@10.2.154.26-node.26 + zlib@1.2.13.1-motley + +> node benchmark/parse-top.js + + cookie.parse - top sites + + 14 tests completed. + + parse accounts.google.com x 2,588,913 ops/sec ±0.74% (186 runs sampled) + parse apple.com x 2,370,002 ops/sec ±0.69% (186 runs sampled) + parse cloudflare.com x 2,213,102 ops/sec ±0.88% (188 runs sampled) + parse docs.google.com x 2,194,157 ops/sec ±1.03% (184 runs sampled) + parse drive.google.com x 2,265,084 ops/sec ±0.79% (187 runs sampled) + parse en.wikipedia.org x 457,099 ops/sec ±0.81% (186 runs sampled) + parse linkedin.com x 504,407 ops/sec ±0.89% (186 runs sampled) + parse maps.google.com x 1,230,959 ops/sec ±0.98% (186 runs sampled) + parse microsoft.com x 926,294 ops/sec ±0.88% (184 runs sampled) + parse play.google.com x 2,311,338 ops/sec ±0.83% (185 runs sampled) + parse support.google.com x 1,508,850 ops/sec ±0.86% (186 runs sampled) + parse www.google.com x 1,022,582 ops/sec ±1.32% (182 runs sampled) + parse youtu.be x 332,136 ops/sec ±1.02% (185 runs sampled) + parse youtube.com x 323,833 ops/sec ±0.77% (183 runs sampled) + +> node benchmark/parse.js + + cookie.parse - generic + + 6 tests completed. + + simple x 3,214,032 ops/sec ±1.61% (183 runs sampled) + decode x 587,237 ops/sec ±1.16% (187 runs sampled) + unquote x 2,954,618 ops/sec ±1.35% (183 runs sampled) + duplicates x 857,008 ops/sec ±0.89% (187 runs sampled) + 10 cookies x 292,133 ops/sec ±0.89% (187 runs sampled) + 100 cookies x 22,610 ops/sec ±0.68% (187 runs sampled) +``` + +## References + +- [RFC 6265: HTTP State Management Mechanism][rfc-6265] +- [Same-site Cookies][rfc-6265bis-09-5.4.7] + +[rfc-cutler-httpbis-partitioned-cookies]: https://tools.ietf.org/html/draft-cutler-httpbis-partitioned-cookies/ +[rfc-west-cookie-priority-00-4.1]: https://tools.ietf.org/html/draft-west-cookie-priority-00#section-4.1 +[rfc-6265bis-09-5.4.7]: https://tools.ietf.org/html/draft-ietf-httpbis-rfc6265bis-09#section-5.4.7 +[rfc-6265]: https://tools.ietf.org/html/rfc6265 +[rfc-6265-5.1.4]: https://tools.ietf.org/html/rfc6265#section-5.1.4 +[rfc-6265-5.2.1]: https://tools.ietf.org/html/rfc6265#section-5.2.1 +[rfc-6265-5.2.2]: https://tools.ietf.org/html/rfc6265#section-5.2.2 +[rfc-6265-5.2.3]: https://tools.ietf.org/html/rfc6265#section-5.2.3 +[rfc-6265-5.2.4]: https://tools.ietf.org/html/rfc6265#section-5.2.4 +[rfc-6265-5.2.5]: https://tools.ietf.org/html/rfc6265#section-5.2.5 +[rfc-6265-5.2.6]: https://tools.ietf.org/html/rfc6265#section-5.2.6 +[rfc-6265-5.3]: https://tools.ietf.org/html/rfc6265#section-5.3 + +## License + +[MIT](LICENSE) + +[ci-image]: https://badgen.net/github/checks/jshttp/cookie/master?label=ci +[ci-url]: https://github.com/jshttp/cookie/actions/workflows/ci.yml +[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/cookie/master +[coveralls-url]: https://coveralls.io/r/jshttp/cookie?branch=master +[node-image]: https://badgen.net/npm/node/cookie +[node-url]: https://nodejs.org/en/download +[npm-downloads-image]: https://badgen.net/npm/dm/cookie +[npm-url]: https://npmjs.org/package/cookie +[npm-version-image]: https://badgen.net/npm/v/cookie diff --git a/doubao-asr-demo/node_modules/cookie/SECURITY.md b/doubao-asr-demo/node_modules/cookie/SECURITY.md new file mode 100644 index 0000000..fd4a6c5 --- /dev/null +++ b/doubao-asr-demo/node_modules/cookie/SECURITY.md @@ -0,0 +1,25 @@ +# Security Policies and Procedures + +## Reporting a Bug + +The `cookie` team and community take all security bugs seriously. Thank +you for improving the security of the project. We appreciate your efforts and +responsible disclosure and will make every effort to acknowledge your +contributions. + +Report security bugs by emailing the current owner(s) of `cookie`. This +information can be found in the npm registry using the command +`npm owner ls cookie`. +If unsure or unable to get the information from the above, open an issue +in the [project issue tracker](https://github.com/jshttp/cookie/issues) +asking for the current contact information. + +To ensure the timely response to your report, please ensure that the entirety +of the report is contained within the email body and not solely behind a web +link or an attachment. + +At least one owner will acknowledge your email within 48 hours, and will send a +more detailed response within 48 hours indicating the next steps in handling +your report. After the initial reply to your report, the owners will +endeavor to keep you informed of the progress towards a fix and full +announcement, and may ask for additional information or guidance. diff --git a/doubao-asr-demo/node_modules/cookie/index.js b/doubao-asr-demo/node_modules/cookie/index.js new file mode 100644 index 0000000..51a58cb --- /dev/null +++ b/doubao-asr-demo/node_modules/cookie/index.js @@ -0,0 +1,334 @@ +/*! + * cookie + * Copyright(c) 2012-2014 Roman Shtylman + * Copyright(c) 2015 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict'; + +/** + * Module exports. + * @public + */ + +exports.parse = parse; +exports.serialize = serialize; + +/** + * Module variables. + * @private + */ + +var __toString = Object.prototype.toString + +/** + * RegExp to match cookie-name in RFC 6265 sec 4.1.1 + * This refers out to the obsoleted definition of token in RFC 2616 sec 2.2 + * which has been replaced by the token definition in RFC 7230 appendix B. + * + * cookie-name = token + * token = 1*tchar + * tchar = "!" / "#" / "$" / "%" / "&" / "'" / + * "*" / "+" / "-" / "." / "^" / "_" / + * "`" / "|" / "~" / DIGIT / ALPHA + */ + +var cookieNameRegExp = /^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/; + +/** + * RegExp to match cookie-value in RFC 6265 sec 4.1.1 + * + * cookie-value = *cookie-octet / ( DQUOTE *cookie-octet DQUOTE ) + * cookie-octet = %x21 / %x23-2B / %x2D-3A / %x3C-5B / %x5D-7E + * ; US-ASCII characters excluding CTLs, + * ; whitespace DQUOTE, comma, semicolon, + * ; and backslash + */ + +var cookieValueRegExp = /^("?)[\u0021\u0023-\u002B\u002D-\u003A\u003C-\u005B\u005D-\u007E]*\1$/; + +/** + * RegExp to match domain-value in RFC 6265 sec 4.1.1 + * + * domain-value = + * ; defined in [RFC1034], Section 3.5, as + * ; enhanced by [RFC1123], Section 2.1 + * =