@tabstack/sdk 1.0.4 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +90 -0
- package/LICENSE +22 -11
- package/README.md +276 -377
- package/api-promise.d.mts +2 -0
- package/api-promise.d.mts.map +1 -0
- package/api-promise.d.ts +2 -0
- package/api-promise.d.ts.map +1 -0
- package/api-promise.js +6 -0
- package/api-promise.js.map +1 -0
- package/api-promise.mjs +2 -0
- package/api-promise.mjs.map +1 -0
- package/client.d.mts +186 -0
- package/client.d.mts.map +1 -0
- package/client.d.ts +186 -0
- package/client.d.ts.map +1 -0
- package/client.js +467 -0
- package/client.js.map +1 -0
- package/client.mjs +463 -0
- package/client.mjs.map +1 -0
- package/core/api-promise.d.mts +46 -0
- package/core/api-promise.d.mts.map +1 -0
- package/core/api-promise.d.ts +46 -0
- package/core/api-promise.d.ts.map +1 -0
- package/core/api-promise.js +74 -0
- package/core/api-promise.js.map +1 -0
- package/core/api-promise.mjs +70 -0
- package/core/api-promise.mjs.map +1 -0
- package/core/error.d.mts +46 -0
- package/core/error.d.mts.map +1 -0
- package/core/error.d.ts +46 -0
- package/core/error.d.ts.map +1 -0
- package/core/error.js +113 -0
- package/core/error.js.map +1 -0
- package/core/error.mjs +97 -0
- package/core/error.mjs.map +1 -0
- package/core/resource.d.mts +6 -0
- package/core/resource.d.mts.map +1 -0
- package/core/resource.d.ts +6 -0
- package/core/resource.d.ts.map +1 -0
- package/core/resource.js +11 -0
- package/core/resource.js.map +1 -0
- package/core/resource.mjs +7 -0
- package/core/resource.mjs.map +1 -0
- package/core/streaming.d.mts +33 -0
- package/core/streaming.d.mts.map +1 -0
- package/core/streaming.d.ts +33 -0
- package/core/streaming.d.ts.map +1 -0
- package/core/streaming.js +263 -0
- package/core/streaming.js.map +1 -0
- package/core/streaming.mjs +258 -0
- package/core/streaming.mjs.map +1 -0
- package/core/uploads.d.mts +3 -0
- package/core/uploads.d.mts.map +1 -0
- package/core/uploads.d.ts +3 -0
- package/core/uploads.d.ts.map +1 -0
- package/core/uploads.js +6 -0
- package/core/uploads.js.map +1 -0
- package/core/uploads.mjs +2 -0
- package/core/uploads.mjs.map +1 -0
- package/error.d.mts +2 -0
- package/error.d.mts.map +1 -0
- package/error.d.ts +2 -0
- package/error.d.ts.map +1 -0
- package/error.js +6 -0
- package/error.js.map +1 -0
- package/error.mjs +2 -0
- package/error.mjs.map +1 -0
- package/index.d.mts +6 -0
- package/index.d.mts.map +1 -0
- package/index.d.ts +6 -0
- package/index.d.ts.map +1 -0
- package/index.js +30 -0
- package/index.js.map +1 -0
- package/index.mjs +7 -0
- package/index.mjs.map +1 -0
- package/internal/builtin-types.d.mts +73 -0
- package/internal/builtin-types.d.mts.map +1 -0
- package/internal/builtin-types.d.ts +73 -0
- package/internal/builtin-types.d.ts.map +1 -0
- package/internal/builtin-types.js +4 -0
- package/internal/builtin-types.js.map +1 -0
- package/internal/builtin-types.mjs +3 -0
- package/internal/builtin-types.mjs.map +1 -0
- package/internal/decoders/line.d.mts +17 -0
- package/internal/decoders/line.d.mts.map +1 -0
- package/internal/decoders/line.d.ts +17 -0
- package/internal/decoders/line.d.ts.map +1 -0
- package/internal/decoders/line.js +113 -0
- package/internal/decoders/line.js.map +1 -0
- package/internal/decoders/line.mjs +108 -0
- package/internal/decoders/line.mjs.map +1 -0
- package/internal/detect-platform.d.mts +15 -0
- package/internal/detect-platform.d.mts.map +1 -0
- package/internal/detect-platform.d.ts +15 -0
- package/internal/detect-platform.d.ts.map +1 -0
- package/internal/detect-platform.js +162 -0
- package/internal/detect-platform.js.map +1 -0
- package/internal/detect-platform.mjs +157 -0
- package/internal/detect-platform.mjs.map +1 -0
- package/internal/errors.d.mts +3 -0
- package/internal/errors.d.mts.map +1 -0
- package/internal/errors.d.ts +3 -0
- package/internal/errors.d.ts.map +1 -0
- package/internal/errors.js +41 -0
- package/internal/errors.js.map +1 -0
- package/internal/errors.mjs +36 -0
- package/internal/errors.mjs.map +1 -0
- package/internal/headers.d.mts +20 -0
- package/internal/headers.d.mts.map +1 -0
- package/internal/headers.d.ts +20 -0
- package/internal/headers.d.ts.map +1 -0
- package/internal/headers.js +79 -0
- package/internal/headers.js.map +1 -0
- package/internal/headers.mjs +74 -0
- package/internal/headers.mjs.map +1 -0
- package/internal/parse.d.mts +12 -0
- package/internal/parse.d.mts.map +1 -0
- package/internal/parse.d.ts +12 -0
- package/internal/parse.d.ts.map +1 -0
- package/internal/parse.js +45 -0
- package/internal/parse.js.map +1 -0
- package/internal/parse.mjs +42 -0
- package/internal/parse.mjs.map +1 -0
- package/internal/request-options.d.mts +77 -0
- package/internal/request-options.d.mts.map +1 -0
- package/internal/request-options.d.ts +77 -0
- package/internal/request-options.d.ts.map +1 -0
- package/internal/request-options.js +14 -0
- package/internal/request-options.js.map +1 -0
- package/internal/request-options.mjs +10 -0
- package/internal/request-options.mjs.map +1 -0
- package/internal/shim-types.d.mts +17 -0
- package/internal/shim-types.d.mts.map +1 -0
- package/internal/shim-types.d.ts +17 -0
- package/internal/shim-types.d.ts.map +1 -0
- package/internal/shim-types.js +4 -0
- package/internal/shim-types.js.map +1 -0
- package/internal/shim-types.mjs +3 -0
- package/internal/shim-types.mjs.map +1 -0
- package/internal/shims.d.mts +20 -0
- package/internal/shims.d.mts.map +1 -0
- package/internal/shims.d.ts +20 -0
- package/internal/shims.d.ts.map +1 -0
- package/internal/shims.js +92 -0
- package/internal/shims.js.map +1 -0
- package/internal/shims.mjs +85 -0
- package/internal/shims.mjs.map +1 -0
- package/internal/to-file.d.mts +45 -0
- package/internal/to-file.d.mts.map +1 -0
- package/internal/to-file.d.ts +45 -0
- package/internal/to-file.d.ts.map +1 -0
- package/internal/to-file.js +91 -0
- package/internal/to-file.js.map +1 -0
- package/internal/to-file.mjs +88 -0
- package/internal/to-file.mjs.map +1 -0
- package/internal/tslib.js +81 -0
- package/internal/tslib.mjs +17 -0
- package/internal/types.d.mts +69 -0
- package/internal/types.d.mts.map +1 -0
- package/internal/types.d.ts +69 -0
- package/internal/types.d.ts.map +1 -0
- package/internal/types.js +4 -0
- package/internal/types.js.map +1 -0
- package/internal/types.mjs +3 -0
- package/internal/types.mjs.map +1 -0
- package/internal/uploads.d.mts +42 -0
- package/internal/uploads.d.mts.map +1 -0
- package/internal/uploads.d.ts +42 -0
- package/internal/uploads.d.ts.map +1 -0
- package/internal/uploads.js +141 -0
- package/internal/uploads.js.map +1 -0
- package/internal/uploads.mjs +131 -0
- package/internal/uploads.mjs.map +1 -0
- package/internal/utils/base64.d.mts +3 -0
- package/internal/utils/base64.d.mts.map +1 -0
- package/internal/utils/base64.d.ts +3 -0
- package/internal/utils/base64.d.ts.map +1 -0
- package/internal/utils/base64.js +38 -0
- package/internal/utils/base64.js.map +1 -0
- package/internal/utils/base64.mjs +33 -0
- package/internal/utils/base64.mjs.map +1 -0
- package/internal/utils/bytes.d.mts +4 -0
- package/internal/utils/bytes.d.mts.map +1 -0
- package/internal/utils/bytes.d.ts +4 -0
- package/internal/utils/bytes.d.ts.map +1 -0
- package/internal/utils/bytes.js +31 -0
- package/internal/utils/bytes.js.map +1 -0
- package/internal/utils/bytes.mjs +26 -0
- package/internal/utils/bytes.mjs.map +1 -0
- package/internal/utils/env.d.mts +9 -0
- package/internal/utils/env.d.mts.map +1 -0
- package/internal/utils/env.d.ts +9 -0
- package/internal/utils/env.d.ts.map +1 -0
- package/internal/utils/env.js +22 -0
- package/internal/utils/env.js.map +1 -0
- package/internal/utils/env.mjs +18 -0
- package/internal/utils/env.mjs.map +1 -0
- package/internal/utils/log.d.mts +37 -0
- package/internal/utils/log.d.mts.map +1 -0
- package/internal/utils/log.d.ts +37 -0
- package/internal/utils/log.d.ts.map +1 -0
- package/internal/utils/log.js +85 -0
- package/internal/utils/log.js.map +1 -0
- package/internal/utils/log.mjs +79 -0
- package/internal/utils/log.mjs.map +1 -0
- package/internal/utils/path.d.mts +15 -0
- package/internal/utils/path.d.mts.map +1 -0
- package/internal/utils/path.d.ts +15 -0
- package/internal/utils/path.d.ts.map +1 -0
- package/internal/utils/path.js +79 -0
- package/internal/utils/path.js.map +1 -0
- package/internal/utils/path.mjs +74 -0
- package/internal/utils/path.mjs.map +1 -0
- package/internal/utils/sleep.d.mts +2 -0
- package/internal/utils/sleep.d.mts.map +1 -0
- package/internal/utils/sleep.d.ts +2 -0
- package/internal/utils/sleep.d.ts.map +1 -0
- package/internal/utils/sleep.js +7 -0
- package/internal/utils/sleep.js.map +1 -0
- package/internal/utils/sleep.mjs +3 -0
- package/internal/utils/sleep.mjs.map +1 -0
- package/internal/utils/uuid.d.mts +5 -0
- package/internal/utils/uuid.d.mts.map +1 -0
- package/internal/utils/uuid.d.ts +5 -0
- package/internal/utils/uuid.d.ts.map +1 -0
- package/internal/utils/uuid.js +19 -0
- package/internal/utils/uuid.js.map +1 -0
- package/internal/utils/uuid.mjs +15 -0
- package/internal/utils/uuid.mjs.map +1 -0
- package/internal/utils/values.d.mts +18 -0
- package/internal/utils/values.d.mts.map +1 -0
- package/internal/utils/values.d.ts +18 -0
- package/internal/utils/values.d.ts.map +1 -0
- package/internal/utils/values.js +112 -0
- package/internal/utils/values.js.map +1 -0
- package/internal/utils/values.mjs +94 -0
- package/internal/utils/values.mjs.map +1 -0
- package/internal/utils.d.mts +7 -0
- package/internal/utils.d.mts.map +1 -0
- package/internal/utils.d.ts +7 -0
- package/internal/utils.d.ts.map +1 -0
- package/internal/utils.js +11 -0
- package/internal/utils.js.map +1 -0
- package/internal/utils.mjs +8 -0
- package/internal/utils.mjs.map +1 -0
- package/package.json +139 -82
- package/resource.d.mts +2 -0
- package/resource.d.mts.map +1 -0
- package/resource.d.ts +2 -0
- package/resource.d.ts.map +1 -0
- package/resource.js +6 -0
- package/resource.js.map +1 -0
- package/resource.mjs +2 -0
- package/resource.mjs.map +1 -0
- package/resources/agent.d.mts +74 -0
- package/resources/agent.d.mts.map +1 -0
- package/resources/agent.d.ts +74 -0
- package/resources/agent.d.ts.map +1 -0
- package/resources/agent.js +45 -0
- package/resources/agent.js.map +1 -0
- package/resources/agent.mjs +41 -0
- package/resources/agent.mjs.map +1 -0
- package/resources/extract.d.mts +118 -0
- package/resources/extract.d.mts.map +1 -0
- package/resources/extract.d.ts +118 -0
- package/resources/extract.d.ts.map +1 -0
- package/resources/extract.js +37 -0
- package/resources/extract.js.map +1 -0
- package/resources/extract.mjs +33 -0
- package/resources/extract.mjs.map +1 -0
- package/resources/generate.d.mts +45 -0
- package/resources/generate.d.mts.map +1 -0
- package/resources/generate.d.ts +45 -0
- package/resources/generate.d.ts.map +1 -0
- package/resources/generate.js +26 -0
- package/resources/generate.js.map +1 -0
- package/resources/generate.mjs +22 -0
- package/resources/generate.mjs.map +1 -0
- package/resources/index.d.mts +4 -0
- package/resources/index.d.mts.map +1 -0
- package/resources/index.d.ts +4 -0
- package/resources/index.d.ts.map +1 -0
- package/resources/index.js +11 -0
- package/resources/index.js.map +1 -0
- package/resources/index.mjs +5 -0
- package/resources/index.mjs.map +1 -0
- package/resources.d.mts +2 -0
- package/resources.d.mts.map +1 -0
- package/resources.d.ts +2 -0
- package/resources.d.ts.map +1 -0
- package/resources.js +5 -0
- package/resources.js.map +1 -0
- package/resources.mjs +2 -0
- package/resources.mjs.map +1 -0
- package/src/api-promise.ts +2 -0
- package/src/client.ts +756 -0
- package/src/core/README.md +3 -0
- package/src/core/api-promise.ts +92 -0
- package/src/core/error.ts +130 -0
- package/src/core/resource.ts +11 -0
- package/src/core/streaming.ts +315 -0
- package/src/core/uploads.ts +2 -0
- package/src/error.ts +2 -0
- package/src/index.ts +22 -0
- package/src/internal/README.md +3 -0
- package/src/internal/builtin-types.ts +93 -0
- package/src/internal/decoders/line.ts +135 -0
- package/src/internal/detect-platform.ts +196 -0
- package/src/internal/errors.ts +33 -0
- package/src/internal/headers.ts +97 -0
- package/src/internal/parse.ts +64 -0
- package/src/internal/request-options.ts +93 -0
- package/src/internal/shim-types.ts +26 -0
- package/src/internal/shims.ts +107 -0
- package/src/internal/to-file.ts +154 -0
- package/src/internal/types.ts +95 -0
- package/src/internal/uploads.ts +187 -0
- package/src/internal/utils/base64.ts +40 -0
- package/src/internal/utils/bytes.ts +32 -0
- package/src/internal/utils/env.ts +18 -0
- package/src/internal/utils/log.ts +126 -0
- package/src/internal/utils/path.ts +88 -0
- package/src/internal/utils/sleep.ts +3 -0
- package/src/internal/utils/uuid.ts +17 -0
- package/src/internal/utils/values.ts +105 -0
- package/src/internal/utils.ts +8 -0
- package/src/lib/.keep +4 -0
- package/src/resource.ts +2 -0
- package/src/resources/agent.ts +93 -0
- package/src/resources/extract.ts +147 -0
- package/src/resources/generate.ts +53 -0
- package/src/resources/index.ts +11 -0
- package/src/resources.ts +1 -0
- package/src/streaming.ts +2 -0
- package/src/tsconfig.json +11 -0
- package/src/uploads.ts +2 -0
- package/src/version.ts +1 -0
- package/streaming.d.mts +2 -0
- package/streaming.d.mts.map +1 -0
- package/streaming.d.ts +2 -0
- package/streaming.d.ts.map +1 -0
- package/streaming.js +6 -0
- package/streaming.js.map +1 -0
- package/streaming.mjs +2 -0
- package/streaming.mjs.map +1 -0
- package/uploads.d.mts +2 -0
- package/uploads.d.mts.map +1 -0
- package/uploads.d.ts +2 -0
- package/uploads.d.ts.map +1 -0
- package/uploads.js +6 -0
- package/uploads.js.map +1 -0
- package/uploads.mjs +2 -0
- package/uploads.mjs.map +1 -0
- package/version.d.mts +2 -0
- package/version.d.mts.map +1 -0
- package/version.d.ts +2 -0
- package/version.d.ts.map +1 -0
- package/version.js +5 -0
- package/version.js.map +1 -0
- package/version.mjs +2 -0
- package/version.mjs.map +1 -0
- package/dist/cjs/automate.d.ts +0 -156
- package/dist/cjs/automate.d.ts.map +0 -1
- package/dist/cjs/automate.js +0 -211
- package/dist/cjs/automate.js.map +0 -1
- package/dist/cjs/automate.test.d.ts +0 -5
- package/dist/cjs/automate.test.d.ts.map +0 -1
- package/dist/cjs/automate.test.js +0 -441
- package/dist/cjs/automate.test.js.map +0 -1
- package/dist/cjs/client.d.ts +0 -58
- package/dist/cjs/client.d.ts.map +0 -1
- package/dist/cjs/client.js +0 -58
- package/dist/cjs/client.js.map +0 -1
- package/dist/cjs/client.test.d.ts +0 -5
- package/dist/cjs/client.test.d.ts.map +0 -1
- package/dist/cjs/client.test.js +0 -256
- package/dist/cjs/client.test.js.map +0 -1
- package/dist/cjs/exceptions.d.ts +0 -57
- package/dist/cjs/exceptions.d.ts.map +0 -1
- package/dist/cjs/exceptions.js +0 -95
- package/dist/cjs/exceptions.js.map +0 -1
- package/dist/cjs/exceptions.test.d.ts +0 -5
- package/dist/cjs/exceptions.test.d.ts.map +0 -1
- package/dist/cjs/exceptions.test.js +0 -239
- package/dist/cjs/exceptions.test.js.map +0 -1
- package/dist/cjs/extract.d.ts +0 -206
- package/dist/cjs/extract.d.ts.map +0 -1
- package/dist/cjs/extract.js +0 -223
- package/dist/cjs/extract.js.map +0 -1
- package/dist/cjs/extract.test.d.ts +0 -5
- package/dist/cjs/extract.test.d.ts.map +0 -1
- package/dist/cjs/extract.test.js +0 -364
- package/dist/cjs/extract.test.js.map +0 -1
- package/dist/cjs/generate.d.ts +0 -113
- package/dist/cjs/generate.d.ts.map +0 -1
- package/dist/cjs/generate.js +0 -124
- package/dist/cjs/generate.js.map +0 -1
- package/dist/cjs/generate.test.d.ts +0 -5
- package/dist/cjs/generate.test.d.ts.map +0 -1
- package/dist/cjs/generate.test.js +0 -314
- package/dist/cjs/generate.test.js.map +0 -1
- package/dist/cjs/index.d.ts +0 -52
- package/dist/cjs/index.d.ts.map +0 -1
- package/dist/cjs/index.js +0 -72
- package/dist/cjs/index.js.map +0 -1
- package/dist/cjs/package.json +0 -3
- package/dist/cjs/types.d.ts +0 -73
- package/dist/cjs/types.d.ts.map +0 -1
- package/dist/cjs/types.js +0 -118
- package/dist/cjs/types.js.map +0 -1
- package/dist/cjs/types.test.d.ts +0 -5
- package/dist/cjs/types.test.d.ts.map +0 -1
- package/dist/cjs/types.test.js +0 -370
- package/dist/cjs/types.test.js.map +0 -1
- package/dist/cjs/util/http.d.ts +0 -29
- package/dist/cjs/util/http.d.ts.map +0 -1
- package/dist/cjs/util/http.js +0 -201
- package/dist/cjs/util/http.js.map +0 -1
- package/dist/cjs/util/http.test.d.ts +0 -5
- package/dist/cjs/util/http.test.d.ts.map +0 -1
- package/dist/cjs/util/http.test.js +0 -237
- package/dist/cjs/util/http.test.js.map +0 -1
- package/dist/esm/automate.d.ts +0 -156
- package/dist/esm/automate.d.ts.map +0 -1
- package/dist/esm/automate.js +0 -207
- package/dist/esm/automate.js.map +0 -1
- package/dist/esm/automate.test.d.ts +0 -5
- package/dist/esm/automate.test.d.ts.map +0 -1
- package/dist/esm/automate.test.js +0 -439
- package/dist/esm/automate.test.js.map +0 -1
- package/dist/esm/client.d.ts +0 -58
- package/dist/esm/client.d.ts.map +0 -1
- package/dist/esm/client.js +0 -54
- package/dist/esm/client.js.map +0 -1
- package/dist/esm/client.test.d.ts +0 -5
- package/dist/esm/client.test.d.ts.map +0 -1
- package/dist/esm/client.test.js +0 -254
- package/dist/esm/client.test.js.map +0 -1
- package/dist/esm/exceptions.d.ts +0 -57
- package/dist/esm/exceptions.d.ts.map +0 -1
- package/dist/esm/exceptions.js +0 -85
- package/dist/esm/exceptions.js.map +0 -1
- package/dist/esm/exceptions.test.d.ts +0 -5
- package/dist/esm/exceptions.test.d.ts.map +0 -1
- package/dist/esm/exceptions.test.js +0 -237
- package/dist/esm/exceptions.test.js.map +0 -1
- package/dist/esm/extract.d.ts +0 -206
- package/dist/esm/extract.d.ts.map +0 -1
- package/dist/esm/extract.js +0 -219
- package/dist/esm/extract.js.map +0 -1
- package/dist/esm/extract.test.d.ts +0 -5
- package/dist/esm/extract.test.d.ts.map +0 -1
- package/dist/esm/extract.test.js +0 -362
- package/dist/esm/extract.test.js.map +0 -1
- package/dist/esm/generate.d.ts +0 -113
- package/dist/esm/generate.d.ts.map +0 -1
- package/dist/esm/generate.js +0 -120
- package/dist/esm/generate.js.map +0 -1
- package/dist/esm/generate.test.d.ts +0 -5
- package/dist/esm/generate.test.d.ts.map +0 -1
- package/dist/esm/generate.test.js +0 -312
- package/dist/esm/generate.test.js.map +0 -1
- package/dist/esm/index.d.ts +0 -52
- package/dist/esm/index.d.ts.map +0 -1
- package/dist/esm/index.js +0 -53
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/package.json +0 -3
- package/dist/esm/types.d.ts +0 -73
- package/dist/esm/types.d.ts.map +0 -1
- package/dist/esm/types.js +0 -110
- package/dist/esm/types.js.map +0 -1
- package/dist/esm/types.test.d.ts +0 -5
- package/dist/esm/types.test.d.ts.map +0 -1
- package/dist/esm/types.test.js +0 -368
- package/dist/esm/types.test.js.map +0 -1
- package/dist/esm/util/http.d.ts +0 -29
- package/dist/esm/util/http.d.ts.map +0 -1
- package/dist/esm/util/http.js +0 -164
- package/dist/esm/util/http.js.map +0 -1
- package/dist/esm/util/http.test.d.ts +0 -5
- package/dist/esm/util/http.test.d.ts.map +0 -1
- package/dist/esm/util/http.test.js +0 -232
- package/dist/esm/util/http.test.js.map +0 -1
- package/dist/types/automate.d.ts +0 -156
- package/dist/types/automate.d.ts.map +0 -1
- package/dist/types/automate.test.d.ts +0 -5
- package/dist/types/automate.test.d.ts.map +0 -1
- package/dist/types/client.d.ts +0 -58
- package/dist/types/client.d.ts.map +0 -1
- package/dist/types/client.test.d.ts +0 -5
- package/dist/types/client.test.d.ts.map +0 -1
- package/dist/types/exceptions.d.ts +0 -57
- package/dist/types/exceptions.d.ts.map +0 -1
- package/dist/types/exceptions.test.d.ts +0 -5
- package/dist/types/exceptions.test.d.ts.map +0 -1
- package/dist/types/extract.d.ts +0 -206
- package/dist/types/extract.d.ts.map +0 -1
- package/dist/types/extract.test.d.ts +0 -5
- package/dist/types/extract.test.d.ts.map +0 -1
- package/dist/types/generate.d.ts +0 -113
- package/dist/types/generate.d.ts.map +0 -1
- package/dist/types/generate.test.d.ts +0 -5
- package/dist/types/generate.test.d.ts.map +0 -1
- package/dist/types/index.d.ts +0 -52
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/types.d.ts +0 -73
- package/dist/types/types.d.ts.map +0 -1
- package/dist/types/types.test.d.ts +0 -5
- package/dist/types/types.test.d.ts.map +0 -1
- package/dist/types/util/http.d.ts +0 -29
- package/dist/types/util/http.d.ts.map +0 -1
- package/dist/types/util/http.test.d.ts +0 -5
- package/dist/types/util/http.test.d.ts.map +0 -1
package/README.md
CHANGED
|
@@ -1,485 +1,384 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Tabstack TypeScript API Library
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[>)](https://npmjs.org/package/@tabstack/sdk) 
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
This library provides convenient access to the Tabstack REST API from server-side TypeScript or JavaScript.
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
- **Generate**: Transform web content using AI with custom instructions
|
|
9
|
-
- **Automate**: Execute complex browser automation tasks with natural language
|
|
10
|
-
- **Type-Safe**: Full TypeScript support with comprehensive type definitions
|
|
11
|
-
- **Zero Dependencies**: Uses only Node.js standard library
|
|
12
|
-
- **Universal Module Support**: Works with CommonJS, ESM, and all TypeScript configurations
|
|
7
|
+
The full API of this library can be found in [api.md](api.md).
|
|
13
8
|
|
|
14
|
-
|
|
9
|
+
It is generated with [Stainless](https://www.stainless.com/).
|
|
10
|
+
|
|
11
|
+
## MCP Server
|
|
12
|
+
|
|
13
|
+
Use the Tabstack MCP Server to enable AI assistants to interact with this API, allowing them to explore endpoints, make test requests, and use documentation to help integrate this SDK into your application.
|
|
14
|
+
|
|
15
|
+
[](https://cursor.com/en-US/install-mcp?name=tabstack-mcp&config=eyJuYW1lIjoidGFic3RhY2stbWNwIiwidHJhbnNwb3J0Ijoic3NlIiwidXJsIjoiaHR0cHM6Ly90YWJzdGFjay5zdGxtY3AuY29tL3NzZSJ9)
|
|
16
|
+
[](https://vscode.stainless.com/mcp/%7B%22name%22%3A%22tabstack-mcp%22%2C%22type%22%3A%22sse%22%2C%22url%22%3A%22https%3A%2F%2Ftabstack.stlmcp.com%2Fsse%22%7D)
|
|
17
|
+
|
|
18
|
+
> Note: You may need to set environment variables in your MCP client.
|
|
15
19
|
|
|
16
|
-
|
|
20
|
+
## Installation
|
|
17
21
|
|
|
18
|
-
|
|
19
|
-
```bash
|
|
22
|
+
```sh
|
|
20
23
|
npm install @tabstack/sdk
|
|
21
24
|
```
|
|
22
25
|
|
|
23
|
-
|
|
24
|
-
```bash
|
|
25
|
-
yarn add @tabstack/sdk
|
|
26
|
-
```
|
|
26
|
+
## Usage
|
|
27
27
|
|
|
28
|
-
|
|
29
|
-
```bash
|
|
30
|
-
pnpm add @tabstack/sdk
|
|
31
|
-
```
|
|
28
|
+
The full API of this library can be found in [api.md](api.md).
|
|
32
29
|
|
|
33
|
-
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
```
|
|
30
|
+
<!-- prettier-ignore -->
|
|
31
|
+
```js
|
|
32
|
+
import Tabstack from '@tabstack/sdk';
|
|
37
33
|
|
|
38
|
-
|
|
34
|
+
const client = new Tabstack({
|
|
35
|
+
apiKey: process.env['TABSTACK_API_KEY'], // This is the default and can be omitted
|
|
36
|
+
});
|
|
39
37
|
|
|
40
|
-
|
|
38
|
+
const automateEvent = await client.agent.automate({
|
|
39
|
+
task: 'Find the top 3 trending repositories and extract their names, descriptions, and star counts',
|
|
40
|
+
});
|
|
41
41
|
|
|
42
|
-
|
|
43
|
-
git clone https://github.com/tabstack/tabs-typescript.git
|
|
44
|
-
cd tabs-typescript
|
|
45
|
-
npm install
|
|
46
|
-
npm run build
|
|
42
|
+
console.log(automateEvent.data);
|
|
47
43
|
```
|
|
48
44
|
|
|
49
|
-
|
|
45
|
+
### Request & Response types
|
|
50
46
|
|
|
51
|
-
|
|
52
|
-
# Link the package globally
|
|
53
|
-
npm link
|
|
47
|
+
This library includes TypeScript definitions for all request params and response fields. You may import and use them like so:
|
|
54
48
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
49
|
+
<!-- prettier-ignore -->
|
|
50
|
+
```ts
|
|
51
|
+
import Tabstack from '@tabstack/sdk';
|
|
58
52
|
|
|
59
|
-
|
|
53
|
+
const client = new Tabstack({
|
|
54
|
+
apiKey: process.env['TABSTACK_API_KEY'], // This is the default and can be omitted
|
|
55
|
+
});
|
|
60
56
|
|
|
61
|
-
|
|
62
|
-
|
|
57
|
+
const params: Tabstack.AgentAutomateParams = {
|
|
58
|
+
task: 'Find the top 3 trending repositories and extract their names, descriptions, and star counts',
|
|
59
|
+
};
|
|
60
|
+
const automateEvent: Tabstack.AutomateEvent = await client.agent.automate(params);
|
|
63
61
|
```
|
|
64
62
|
|
|
65
|
-
|
|
63
|
+
Documentation for each method, request param, and response field are available in docstrings and will appear on hover in most modern editors.
|
|
66
64
|
|
|
67
|
-
|
|
65
|
+
## Handling errors
|
|
68
66
|
|
|
69
|
-
|
|
67
|
+
When the library is unable to connect to the API,
|
|
68
|
+
or if the API returns a non-success status code (i.e., 4xx or 5xx response),
|
|
69
|
+
a subclass of `APIError` will be thrown:
|
|
70
70
|
|
|
71
|
-
|
|
71
|
+
<!-- prettier-ignore -->
|
|
72
|
+
```ts
|
|
73
|
+
const automateEvent = await client.agent
|
|
74
|
+
.automate({
|
|
75
|
+
task: 'Find the top 3 trending repositories and extract their names, descriptions, and star counts',
|
|
76
|
+
})
|
|
77
|
+
.catch(async (err) => {
|
|
78
|
+
if (err instanceof Tabstack.APIError) {
|
|
79
|
+
console.log(err.status); // 400
|
|
80
|
+
console.log(err.name); // BadRequestError
|
|
81
|
+
console.log(err.headers); // {server: 'nginx', ...}
|
|
82
|
+
} else {
|
|
83
|
+
throw err;
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
```
|
|
72
87
|
|
|
73
|
-
|
|
74
|
-
```typescript
|
|
75
|
-
import { TABStack } from '@tabstack/sdk';
|
|
88
|
+
Error codes are as follows:
|
|
76
89
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
90
|
+
| Status Code | Error Type |
|
|
91
|
+
| ----------- | -------------------------- |
|
|
92
|
+
| 400 | `BadRequestError` |
|
|
93
|
+
| 401 | `AuthenticationError` |
|
|
94
|
+
| 403 | `PermissionDeniedError` |
|
|
95
|
+
| 404 | `NotFoundError` |
|
|
96
|
+
| 422 | `UnprocessableEntityError` |
|
|
97
|
+
| 429 | `RateLimitError` |
|
|
98
|
+
| >=500 | `InternalServerError` |
|
|
99
|
+
| N/A | `APIConnectionError` |
|
|
80
100
|
|
|
81
|
-
|
|
82
|
-
const markdown = await tabs.extract.markdown('https://example.com');
|
|
83
|
-
console.log(markdown.content);
|
|
84
|
-
|
|
85
|
-
// Extract structured data with JSON schema
|
|
86
|
-
const schema = {
|
|
87
|
-
type: 'object',
|
|
88
|
-
properties: {
|
|
89
|
-
stories: {
|
|
90
|
-
type: 'array',
|
|
91
|
-
items: {
|
|
92
|
-
type: 'object',
|
|
93
|
-
properties: {
|
|
94
|
-
title: { type: 'string' },
|
|
95
|
-
points: { type: 'number' },
|
|
96
|
-
author: { type: 'string' }
|
|
97
|
-
},
|
|
98
|
-
required: ['title', 'points', 'author']
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
},
|
|
102
|
-
required: ['stories']
|
|
103
|
-
};
|
|
101
|
+
### Retries
|
|
104
102
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
103
|
+
Certain errors will be automatically retried 2 times by default, with a short exponential backoff.
|
|
104
|
+
Connection errors (for example, due to a network connectivity problem), 408 Request Timeout, 409 Conflict,
|
|
105
|
+
429 Rate Limit, and >=500 Internal errors will all be retried by default.
|
|
108
106
|
|
|
109
|
-
|
|
110
|
-
```javascript
|
|
111
|
-
const { TABStack } = require('@tabstack/sdk');
|
|
107
|
+
You can use the `maxRetries` option to configure or disable this:
|
|
112
108
|
|
|
113
|
-
|
|
114
|
-
|
|
109
|
+
<!-- prettier-ignore -->
|
|
110
|
+
```js
|
|
111
|
+
// Configure the default for all requests:
|
|
112
|
+
const client = new Tabstack({
|
|
113
|
+
maxRetries: 0, // default is 2
|
|
115
114
|
});
|
|
116
115
|
|
|
117
|
-
//
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
})
|
|
122
|
-
.catch(error => {
|
|
123
|
-
console.error('Error:', error.message);
|
|
124
|
-
});
|
|
116
|
+
// Or, configure per-request:
|
|
117
|
+
await client.agent.automate({ task: 'Find the top 3 trending repositories and extract their names, descriptions, and star counts' }, {
|
|
118
|
+
maxRetries: 5,
|
|
119
|
+
});
|
|
125
120
|
```
|
|
126
121
|
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
### Extract Markdown
|
|
122
|
+
### Timeouts
|
|
130
123
|
|
|
131
|
-
|
|
124
|
+
Requests time out after 1 minute by default. You can configure this with a `timeout` option:
|
|
132
125
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
126
|
+
<!-- prettier-ignore -->
|
|
127
|
+
```ts
|
|
128
|
+
// Configure the default for all requests:
|
|
129
|
+
const client = new Tabstack({
|
|
130
|
+
timeout: 20 * 1000, // 20 seconds (default is 1 minute)
|
|
137
131
|
});
|
|
138
132
|
|
|
139
|
-
|
|
140
|
-
|
|
133
|
+
// Override per-request:
|
|
134
|
+
await client.agent.automate({ task: 'Find the top 3 trending repositories and extract their names, descriptions, and star counts' }, {
|
|
135
|
+
timeout: 5 * 1000,
|
|
136
|
+
});
|
|
141
137
|
```
|
|
142
138
|
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
Extract data matching a JSON schema:
|
|
146
|
-
|
|
147
|
-
```typescript
|
|
148
|
-
const schema = {
|
|
149
|
-
type: 'object',
|
|
150
|
-
properties: {
|
|
151
|
-
products: {
|
|
152
|
-
type: 'array',
|
|
153
|
-
items: {
|
|
154
|
-
type: 'object',
|
|
155
|
-
properties: {
|
|
156
|
-
name: { type: 'string' },
|
|
157
|
-
price: { type: 'number' },
|
|
158
|
-
inStock: { type: 'boolean' }
|
|
159
|
-
},
|
|
160
|
-
required: ['name', 'price', 'inStock']
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
},
|
|
164
|
-
required: ['products']
|
|
165
|
-
};
|
|
139
|
+
On timeout, an `APIConnectionTimeoutError` is thrown.
|
|
166
140
|
|
|
167
|
-
|
|
168
|
-
console.log(result.data);
|
|
169
|
-
```
|
|
141
|
+
Note that requests which time out will be [retried twice by default](#retries).
|
|
170
142
|
|
|
171
|
-
|
|
143
|
+
## Advanced Usage
|
|
172
144
|
|
|
173
|
-
|
|
145
|
+
### Accessing raw Response data (e.g., headers)
|
|
174
146
|
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
instructions: 'extract top stories with title, points, and author'
|
|
178
|
-
});
|
|
147
|
+
The "raw" `Response` returned by `fetch()` can be accessed through the `.asResponse()` method on the `APIPromise` type that all methods return.
|
|
148
|
+
This method returns as soon as the headers for a successful response are received and does not consume the response body, so you are free to write custom parsing or streaming logic.
|
|
179
149
|
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
console.log(result.data);
|
|
183
|
-
```
|
|
150
|
+
You can also use the `.withResponse()` method to get the raw `Response` along with the parsed data.
|
|
151
|
+
Unlike `.asResponse()` this method consumes the body, returning once it is parsed.
|
|
184
152
|
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
```typescript
|
|
190
|
-
const schema = {
|
|
191
|
-
type: 'object',
|
|
192
|
-
properties: {
|
|
193
|
-
summaries: {
|
|
194
|
-
type: 'array',
|
|
195
|
-
items: {
|
|
196
|
-
type: 'object',
|
|
197
|
-
properties: {
|
|
198
|
-
title: { type: 'string' },
|
|
199
|
-
category: { type: 'string' },
|
|
200
|
-
summary: { type: 'string' }
|
|
201
|
-
},
|
|
202
|
-
required: ['title', 'category', 'summary']
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
},
|
|
206
|
-
required: ['summaries']
|
|
207
|
-
};
|
|
153
|
+
<!-- prettier-ignore -->
|
|
154
|
+
```ts
|
|
155
|
+
const client = new Tabstack();
|
|
208
156
|
|
|
209
|
-
const
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
);
|
|
157
|
+
const response = await client.agent
|
|
158
|
+
.automate({
|
|
159
|
+
task: 'Find the top 3 trending repositories and extract their names, descriptions, and star counts',
|
|
160
|
+
})
|
|
161
|
+
.asResponse();
|
|
162
|
+
console.log(response.headers.get('X-My-Header'));
|
|
163
|
+
console.log(response.statusText); // access the underlying Response object
|
|
214
164
|
|
|
215
|
-
|
|
165
|
+
const { data: automateEvent, response: raw } = await client.agent
|
|
166
|
+
.automate({
|
|
167
|
+
task: 'Find the top 3 trending repositories and extract their names, descriptions, and star counts',
|
|
168
|
+
})
|
|
169
|
+
.withResponse();
|
|
170
|
+
console.log(raw.headers.get('X-My-Header'));
|
|
171
|
+
console.log(automateEvent.data);
|
|
216
172
|
```
|
|
217
173
|
|
|
218
|
-
###
|
|
219
|
-
|
|
220
|
-
Execute browser automation tasks with streaming updates:
|
|
221
|
-
|
|
222
|
-
```typescript
|
|
223
|
-
for await (const event of tabs.automate.execute(
|
|
224
|
-
'Find the top 3 trending repositories and extract their details',
|
|
225
|
-
{
|
|
226
|
-
url: 'https://github.com/trending',
|
|
227
|
-
guardrails: 'browse and extract only',
|
|
228
|
-
maxIterations: 50
|
|
229
|
-
}
|
|
230
|
-
)) {
|
|
231
|
-
console.log(`Event: ${event.type}`);
|
|
232
|
-
|
|
233
|
-
if (event.type === 'task:completed') {
|
|
234
|
-
console.log('Result:', event.data.get('finalAnswer'));
|
|
235
|
-
} else if (event.type === 'agent:extracted') {
|
|
236
|
-
console.log('Extracted:', event.data.get('extractedData'));
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
```
|
|
174
|
+
### Logging
|
|
240
175
|
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
### Manual Schema Definition
|
|
246
|
-
|
|
247
|
-
```typescript
|
|
248
|
-
const schema = {
|
|
249
|
-
type: 'object',
|
|
250
|
-
properties: {
|
|
251
|
-
name: { type: 'string', description: 'Person name' },
|
|
252
|
-
age: { type: 'number', description: 'Person age' },
|
|
253
|
-
isActive: { type: 'boolean', description: 'Active status' },
|
|
254
|
-
tags: {
|
|
255
|
-
type: 'array',
|
|
256
|
-
items: { type: 'string' }
|
|
257
|
-
},
|
|
258
|
-
addresses: {
|
|
259
|
-
type: 'array',
|
|
260
|
-
items: {
|
|
261
|
-
type: 'object',
|
|
262
|
-
properties: {
|
|
263
|
-
street: { type: 'string' },
|
|
264
|
-
city: { type: 'string' },
|
|
265
|
-
zipCode: { type: 'number' }
|
|
266
|
-
},
|
|
267
|
-
required: ['street', 'city', 'zipCode']
|
|
268
|
-
}
|
|
269
|
-
},
|
|
270
|
-
metadata: {
|
|
271
|
-
type: 'object',
|
|
272
|
-
properties: {
|
|
273
|
-
createdAt: { type: 'string' },
|
|
274
|
-
updatedAt: { type: 'string' }
|
|
275
|
-
},
|
|
276
|
-
required: ['createdAt', 'updatedAt']
|
|
277
|
-
}
|
|
278
|
-
},
|
|
279
|
-
required: ['name', 'age']
|
|
280
|
-
};
|
|
281
|
-
```
|
|
176
|
+
> [!IMPORTANT]
|
|
177
|
+
> All log messages are intended for debugging only. The format and content of log messages
|
|
178
|
+
> may change between releases.
|
|
282
179
|
|
|
283
|
-
|
|
180
|
+
#### Log levels
|
|
284
181
|
|
|
285
|
-
|
|
182
|
+
The log level can be configured in two ways:
|
|
286
183
|
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
const schema = await tabs.extract.schema('https://news.ycombinator.com', {
|
|
290
|
-
instructions: 'extract stories with title, points, and author'
|
|
291
|
-
});
|
|
184
|
+
1. Via the `TABSTACK_LOG` environment variable
|
|
185
|
+
2. Using the `logLevel` client option (overrides the environment variable if set)
|
|
292
186
|
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
```
|
|
187
|
+
```ts
|
|
188
|
+
import Tabstack from '@tabstack/sdk';
|
|
296
189
|
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
```typescript
|
|
302
|
-
import {
|
|
303
|
-
TABStackError,
|
|
304
|
-
UnauthorizedError,
|
|
305
|
-
InvalidURLError,
|
|
306
|
-
BadRequestError,
|
|
307
|
-
ServerError
|
|
308
|
-
} from '@tabstack/sdk';
|
|
309
|
-
|
|
310
|
-
try {
|
|
311
|
-
const result = await tabs.extract.markdown('https://example.com');
|
|
312
|
-
} catch (error) {
|
|
313
|
-
if (error instanceof UnauthorizedError) {
|
|
314
|
-
console.error('Invalid API key');
|
|
315
|
-
} else if (error instanceof InvalidURLError) {
|
|
316
|
-
console.error('Invalid or inaccessible URL');
|
|
317
|
-
} else if (error instanceof TABStackError) {
|
|
318
|
-
console.error(`API error: ${error.message}`);
|
|
319
|
-
}
|
|
320
|
-
}
|
|
190
|
+
const client = new Tabstack({
|
|
191
|
+
logLevel: 'debug', // Show all log messages
|
|
192
|
+
});
|
|
321
193
|
```
|
|
322
194
|
|
|
323
|
-
|
|
195
|
+
Available log levels, from most to least verbose:
|
|
324
196
|
|
|
325
|
-
- `
|
|
326
|
-
- `
|
|
327
|
-
- `
|
|
328
|
-
- `
|
|
329
|
-
- `
|
|
330
|
-
- `ServiceUnavailableError` - 503: Service unavailable
|
|
331
|
-
- `APIError` - Generic API error with status code
|
|
197
|
+
- `'debug'` - Show debug messages, info, warnings, and errors
|
|
198
|
+
- `'info'` - Show info messages, warnings, and errors
|
|
199
|
+
- `'warn'` - Show warnings and errors (default)
|
|
200
|
+
- `'error'` - Show only errors
|
|
201
|
+
- `'off'` - Disable all logging
|
|
332
202
|
|
|
333
|
-
|
|
203
|
+
At the `'debug'` level, all HTTP requests and responses are logged, including headers and bodies.
|
|
204
|
+
Some authentication-related headers are redacted, but sensitive data in request and response bodies
|
|
205
|
+
may still be visible.
|
|
334
206
|
|
|
335
|
-
|
|
336
|
-
- TABStack API key ([get one here](https://tabstack.ai))
|
|
207
|
+
#### Custom logger
|
|
337
208
|
|
|
338
|
-
|
|
209
|
+
By default, this library logs to `globalThis.console`. You can also provide a custom logger.
|
|
210
|
+
Most logging libraries are supported, including [pino](https://www.npmjs.com/package/pino), [winston](https://www.npmjs.com/package/winston), [bunyan](https://www.npmjs.com/package/bunyan), [consola](https://www.npmjs.com/package/consola), [signale](https://www.npmjs.com/package/signale), and [@std/log](https://jsr.io/@std/log). If your logger doesn't work, please open an issue.
|
|
339
211
|
|
|
340
|
-
|
|
212
|
+
When providing a custom logger, the `logLevel` option still controls which messages are emitted, messages
|
|
213
|
+
below the configured level will not be sent to your logger.
|
|
341
214
|
|
|
342
|
-
|
|
215
|
+
```ts
|
|
216
|
+
import Tabstack from '@tabstack/sdk';
|
|
217
|
+
import pino from 'pino';
|
|
343
218
|
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
219
|
+
const logger = pino();
|
|
220
|
+
|
|
221
|
+
const client = new Tabstack({
|
|
222
|
+
logger: logger.child({ name: 'Tabstack' }),
|
|
223
|
+
logLevel: 'debug', // Send all messages to pino, allowing it to filter
|
|
224
|
+
});
|
|
225
|
+
```
|
|
347
226
|
|
|
348
|
-
|
|
349
|
-
npm run test:unit
|
|
227
|
+
### Making custom/undocumented requests
|
|
350
228
|
|
|
351
|
-
|
|
352
|
-
|
|
229
|
+
This library is typed for convenient access to the documented API. If you need to access undocumented
|
|
230
|
+
endpoints, params, or response properties, the library can still be used.
|
|
353
231
|
|
|
354
|
-
|
|
355
|
-
npm run test:watch
|
|
232
|
+
#### Undocumented endpoints
|
|
356
233
|
|
|
357
|
-
|
|
358
|
-
|
|
234
|
+
To make requests to undocumented endpoints, you can use `client.get`, `client.post`, and other HTTP verbs.
|
|
235
|
+
Options on the client, such as retries, will be respected when making these requests.
|
|
359
236
|
|
|
360
|
-
|
|
361
|
-
|
|
237
|
+
```ts
|
|
238
|
+
await client.post('/some/path', {
|
|
239
|
+
body: { some_prop: 'foo' },
|
|
240
|
+
query: { some_query_arg: 'bar' },
|
|
241
|
+
});
|
|
362
242
|
```
|
|
363
243
|
|
|
364
|
-
|
|
244
|
+
#### Undocumented request params
|
|
365
245
|
|
|
366
|
-
|
|
246
|
+
To make requests using undocumented parameters, you may use `// @ts-expect-error` on the undocumented
|
|
247
|
+
parameter. This library doesn't validate at runtime that the request matches the type, so any extra values you
|
|
248
|
+
send will be sent as-is.
|
|
367
249
|
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
- Client tests - Main client initialization and configuration
|
|
250
|
+
```ts
|
|
251
|
+
client.agent.automate({
|
|
252
|
+
// ...
|
|
253
|
+
// @ts-expect-error baz is not yet public
|
|
254
|
+
baz: 'undocumented option',
|
|
255
|
+
});
|
|
256
|
+
```
|
|
376
257
|
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
- Real-world use case scenarios
|
|
380
|
-
- Error handling and edge cases
|
|
381
|
-
- Multi-operation workflows
|
|
258
|
+
For requests with the `GET` verb, any extra params will be in the query, all other requests will send the
|
|
259
|
+
extra param in the body.
|
|
382
260
|
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
- Generic type inference
|
|
386
|
-
- Type guard verification
|
|
387
|
-
- Compile-time type checking
|
|
261
|
+
If you want to explicitly send an extra argument, you can do so with the `query`, `body`, and `headers` request
|
|
262
|
+
options.
|
|
388
263
|
|
|
389
|
-
|
|
264
|
+
#### Undocumented response properties
|
|
390
265
|
|
|
391
|
-
|
|
266
|
+
To access undocumented response properties, you may access the response object with `// @ts-expect-error` on
|
|
267
|
+
the response object, or cast the response object to the requisite type. Like the request params, we do not
|
|
268
|
+
validate or strip extra properties from the response from the API.
|
|
392
269
|
|
|
393
|
-
|
|
394
|
-
- **~70%+ code coverage** across branches, functions, lines, and statements
|
|
395
|
-
- **Mocked HTTP requests** using `nock` for fast, reliable tests
|
|
396
|
-
- **Type-safe tests** with full TypeScript support
|
|
270
|
+
### Customizing the fetch client
|
|
397
271
|
|
|
398
|
-
|
|
272
|
+
By default, this library expects a global `fetch` function is defined.
|
|
399
273
|
|
|
400
|
-
|
|
401
|
-
- **ts-jest** - TypeScript support for Jest
|
|
402
|
-
- **nock** - HTTP request mocking
|
|
403
|
-
- **tsd** - TypeScript type definition testing
|
|
274
|
+
If you want to use a different `fetch` function, you can either polyfill the global:
|
|
404
275
|
|
|
405
|
-
|
|
276
|
+
```ts
|
|
277
|
+
import fetch from 'my-fetch';
|
|
406
278
|
|
|
407
|
-
|
|
279
|
+
globalThis.fetch = fetch;
|
|
280
|
+
```
|
|
408
281
|
|
|
409
|
-
|
|
410
|
-
2. Maintain or improve code coverage
|
|
411
|
-
3. Use descriptive test names that explain the behavior being tested
|
|
412
|
-
4. Mock external HTTP requests using `nock`
|
|
413
|
-
5. Test both success and error scenarios
|
|
414
|
-
6. Add type tests for new public APIs
|
|
282
|
+
Or pass it to the client:
|
|
415
283
|
|
|
416
|
-
|
|
284
|
+
```ts
|
|
285
|
+
import Tabstack from '@tabstack/sdk';
|
|
286
|
+
import fetch from 'my-fetch';
|
|
417
287
|
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
describe('method', () => {
|
|
421
|
-
it('should handle success case', async () => {
|
|
422
|
-
// Arrange
|
|
423
|
-
const mockData = { result: 'success' };
|
|
424
|
-
nock('https://api.tabstack.ai')
|
|
425
|
-
.post('/endpoint')
|
|
426
|
-
.reply(200, mockData);
|
|
288
|
+
const client = new Tabstack({ fetch });
|
|
289
|
+
```
|
|
427
290
|
|
|
428
|
-
|
|
429
|
-
const result = await client.feature.method();
|
|
291
|
+
### Fetch options
|
|
430
292
|
|
|
431
|
-
|
|
432
|
-
expect(result).toEqual(mockData);
|
|
433
|
-
});
|
|
293
|
+
If you want to set custom `fetch` options without overriding the `fetch` function, you can provide a `fetchOptions` object when instantiating the client or making a request. (Request-specific options override client options.)
|
|
434
294
|
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
.post('/endpoint')
|
|
438
|
-
.reply(400, { error: 'Bad request' });
|
|
295
|
+
```ts
|
|
296
|
+
import Tabstack from '@tabstack/sdk';
|
|
439
297
|
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
298
|
+
const client = new Tabstack({
|
|
299
|
+
fetchOptions: {
|
|
300
|
+
// `RequestInit` options
|
|
301
|
+
},
|
|
443
302
|
});
|
|
444
303
|
```
|
|
445
304
|
|
|
446
|
-
|
|
305
|
+
#### Configuring proxies
|
|
306
|
+
|
|
307
|
+
To modify proxy behavior, you can provide custom `fetchOptions` that add runtime-specific proxy
|
|
308
|
+
options to requests:
|
|
447
309
|
|
|
448
|
-
|
|
310
|
+
<img src="https://raw.githubusercontent.com/stainless-api/sdk-assets/refs/heads/main/node.svg" align="top" width="18" height="21"> **Node** <sup>[[docs](https://github.com/nodejs/undici/blob/main/docs/docs/api/ProxyAgent.md#example---proxyagent-with-fetch)]</sup>
|
|
449
311
|
|
|
450
|
-
|
|
312
|
+
```ts
|
|
313
|
+
import Tabstack from '@tabstack/sdk';
|
|
314
|
+
import * as undici from 'undici';
|
|
451
315
|
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
316
|
+
const proxyAgent = new undici.ProxyAgent('http://localhost:8888');
|
|
317
|
+
const client = new Tabstack({
|
|
318
|
+
fetchOptions: {
|
|
319
|
+
dispatcher: proxyAgent,
|
|
320
|
+
},
|
|
321
|
+
});
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
<img src="https://raw.githubusercontent.com/stainless-api/sdk-assets/refs/heads/main/bun.svg" align="top" width="18" height="21"> **Bun** <sup>[[docs](https://bun.sh/guides/http/proxy)]</sup>
|
|
325
|
+
|
|
326
|
+
```ts
|
|
327
|
+
import Tabstack from '@tabstack/sdk';
|
|
328
|
+
|
|
329
|
+
const client = new Tabstack({
|
|
330
|
+
fetchOptions: {
|
|
331
|
+
proxy: 'http://localhost:8888',
|
|
332
|
+
},
|
|
333
|
+
});
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
<img src="https://raw.githubusercontent.com/stainless-api/sdk-assets/refs/heads/main/deno.svg" align="top" width="18" height="21"> **Deno** <sup>[[docs](https://docs.deno.com/api/deno/~/Deno.createHttpClient)]</sup>
|
|
456
337
|
|
|
457
|
-
|
|
458
|
-
npm
|
|
338
|
+
```ts
|
|
339
|
+
import Tabstack from 'npm:@tabstack/sdk';
|
|
459
340
|
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
341
|
+
const httpClient = Deno.createHttpClient({ proxy: { url: 'http://localhost:8888' } });
|
|
342
|
+
const client = new Tabstack({
|
|
343
|
+
fetchOptions: {
|
|
344
|
+
client: httpClient,
|
|
345
|
+
},
|
|
346
|
+
});
|
|
465
347
|
```
|
|
466
348
|
|
|
467
|
-
|
|
349
|
+
## Frequently Asked Questions
|
|
350
|
+
|
|
351
|
+
## Semantic versioning
|
|
352
|
+
|
|
353
|
+
This package generally follows [SemVer](https://semver.org/spec/v2.0.0.html) conventions, though certain backwards-incompatible changes may be released as minor versions:
|
|
354
|
+
|
|
355
|
+
1. Changes that only affect static types, without breaking runtime behavior.
|
|
356
|
+
2. Changes to library internals which are technically public but not intended or documented for external use. _(Please open a GitHub issue to let us know if you are relying on such internals.)_
|
|
357
|
+
3. Changes that we do not expect to impact the vast majority of users in practice.
|
|
468
358
|
|
|
469
|
-
|
|
359
|
+
We take backwards-compatibility seriously and work hard to ensure you can rely on a smooth upgrade experience.
|
|
470
360
|
|
|
471
|
-
|
|
472
|
-
- ✅ **Node 20, 22, 24** - Tests and builds on all supported Node versions
|
|
473
|
-
- ✅ **Code Review** - Approval from maintainers
|
|
361
|
+
We are keen for your feedback; please open an [issue](https://www.github.com/Mozilla-Ocho/tabstack-typescript/issues) with questions, bugs, or suggestions.
|
|
474
362
|
|
|
475
|
-
|
|
363
|
+
## Requirements
|
|
364
|
+
|
|
365
|
+
TypeScript >= 4.9 is supported.
|
|
366
|
+
|
|
367
|
+
The following runtimes are supported:
|
|
476
368
|
|
|
477
|
-
|
|
369
|
+
- Web browsers (Up-to-date Chrome, Firefox, Safari, Edge, and more)
|
|
370
|
+
- Node.js 20 LTS or later ([non-EOL](https://endoflife.date/nodejs)) versions.
|
|
371
|
+
- Deno v1.28.0 or higher.
|
|
372
|
+
- Bun 1.0 or later.
|
|
373
|
+
- Cloudflare Workers.
|
|
374
|
+
- Vercel Edge Runtime.
|
|
375
|
+
- Jest 28 or greater with the `"node"` environment (`"jsdom"` is not supported at this time).
|
|
376
|
+
- Nitro v2.6 or greater.
|
|
478
377
|
|
|
479
|
-
|
|
378
|
+
Note that React Native is not supported at this time.
|
|
480
379
|
|
|
481
|
-
|
|
380
|
+
If you are interested in other runtime environments, please open or upvote an issue on GitHub.
|
|
381
|
+
|
|
382
|
+
## Contributing
|
|
482
383
|
|
|
483
|
-
|
|
484
|
-
- GitHub Issues: [https://github.com/tabstack/tabs-typescript/issues](https://github.com/tabstack/tabs-typescript/issues)
|
|
485
|
-
- Website: [https://tabstack.ai](https://tabstack.ai)
|
|
384
|
+
See [the contributing documentation](./CONTRIBUTING.md).
|