@tabstack/sdk 1.0.5 → 2.1.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 +117 -0
- package/LICENSE +1 -1
- package/README.md +282 -356
- 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 +154 -0
- package/resources/agent.d.mts.map +1 -0
- package/resources/agent.d.ts +154 -0
- package/resources/agent.d.ts.map +1 -0
- package/resources/agent.js +88 -0
- package/resources/agent.js.map +1 -0
- package/resources/agent.mjs +84 -0
- package/resources/agent.mjs.map +1 -0
- package/resources/extract.d.mts +207 -0
- package/resources/extract.d.mts.map +1 -0
- package/resources/extract.d.ts +207 -0
- package/resources/extract.d.ts.map +1 -0
- package/resources/extract.js +61 -0
- package/resources/extract.js.map +1 -0
- package/resources/extract.mjs +57 -0
- package/resources/extract.mjs.map +1 -0
- package/resources/generate.d.mts +79 -0
- package/resources/generate.d.mts.map +1 -0
- package/resources/generate.d.ts +79 -0
- package/resources/generate.d.ts.map +1 -0
- package/resources/generate.js +44 -0
- package/resources/generate.js.map +1 -0
- package/resources/generate.mjs +40 -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 +764 -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 +194 -0
- package/src/resources/extract.ts +248 -0
- package/src/resources/generate.ts +89 -0
- package/src/resources/index.ts +17 -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/agent.d.ts +0 -156
- package/dist/cjs/agent.d.ts.map +0 -1
- package/dist/cjs/agent.js +0 -211
- package/dist/cjs/agent.js.map +0 -1
- package/dist/cjs/agent.test.d.ts +0 -5
- package/dist/cjs/agent.test.d.ts.map +0 -1
- package/dist/cjs/agent.test.js +0 -441
- package/dist/cjs/agent.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 -255
- 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 -151
- package/dist/cjs/extract.d.ts.map +0 -1
- package/dist/cjs/extract.js +0 -165
- 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 -250
- 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/agent.d.ts +0 -156
- package/dist/esm/agent.d.ts.map +0 -1
- package/dist/esm/agent.js +0 -207
- package/dist/esm/agent.js.map +0 -1
- package/dist/esm/agent.test.d.ts +0 -5
- package/dist/esm/agent.test.d.ts.map +0 -1
- package/dist/esm/agent.test.js +0 -439
- package/dist/esm/agent.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 -253
- 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 -151
- package/dist/esm/extract.d.ts.map +0 -1
- package/dist/esm/extract.js +0 -161
- 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 -248
- 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/agent.d.ts +0 -156
- package/dist/types/agent.d.ts.map +0 -1
- package/dist/types/agent.test.d.ts +0 -5
- package/dist/types/agent.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 -151
- 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,458 +1,384 @@
|
|
|
1
|
-
# Tabstack TypeScript
|
|
1
|
+
# Tabstack TypeScript API Library
|
|
2
2
|
|
|
3
|
-
> [
|
|
4
|
-
> **Early Release**: This SDK is in early development. The API may change in future releases as we refine and improve the library based on user feedback.
|
|
3
|
+
[>)](https://npmjs.org/package/@tabstack/sdk) 
|
|
5
4
|
|
|
6
|
-
|
|
5
|
+
This library provides convenient access to the Tabstack REST API from server-side TypeScript or JavaScript.
|
|
7
6
|
|
|
8
|
-
|
|
7
|
+
The full API of this library can be found in [api.md](api.md).
|
|
9
8
|
|
|
10
|
-
|
|
11
|
-
- **Generate**: Transform web content using AI with custom instructions
|
|
12
|
-
- **Agent**: Execute complex browser automation tasks with natural language
|
|
13
|
-
- **Type-Safe**: Full TypeScript support with comprehensive type definitions
|
|
14
|
-
- **Zero Dependencies**: Uses only Node.js standard library
|
|
15
|
-
- **Universal Module Support**: Works with CommonJS, ESM, and all TypeScript configurations
|
|
9
|
+
It is generated with [Stainless](https://www.stainless.com/).
|
|
16
10
|
|
|
17
|
-
##
|
|
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=eyJuYW1lIjoidGFic3RhY2stbWNwIiwidHJhbnNwb3J0IjoiaHR0cCIsInVybCI6Imh0dHBzOi8vdGFic3RhY2suc3RsbWNwLmNvbSIsImhlYWRlcnMiOnsieC10YWJzdGFjay1hcGkta2V5IjoiTXkgQVBJIEtleSJ9fQ)
|
|
16
|
+
[](https://vscode.stainless.com/mcp/%7B%22name%22%3A%22tabstack-mcp%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Ftabstack.stlmcp.com%22%2C%22headers%22%3A%7B%22x-tabstack-api-key%22%3A%22My%20API%20Key%22%7D%7D)
|
|
18
17
|
|
|
19
|
-
|
|
18
|
+
> Note: You may need to set environment variables in your MCP client.
|
|
20
19
|
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
## Installation
|
|
21
|
+
|
|
22
|
+
```sh
|
|
23
23
|
npm install @tabstack/sdk
|
|
24
24
|
```
|
|
25
25
|
|
|
26
|
-
|
|
27
|
-
```bash
|
|
28
|
-
yarn add @tabstack/sdk
|
|
29
|
-
```
|
|
26
|
+
## Usage
|
|
30
27
|
|
|
31
|
-
|
|
32
|
-
```bash
|
|
33
|
-
pnpm add @tabstack/sdk
|
|
34
|
-
```
|
|
28
|
+
The full API of this library can be found in [api.md](api.md).
|
|
35
29
|
|
|
36
|
-
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
```
|
|
30
|
+
<!-- prettier-ignore -->
|
|
31
|
+
```js
|
|
32
|
+
import Tabstack from '@tabstack/sdk';
|
|
40
33
|
|
|
41
|
-
|
|
34
|
+
const client = new Tabstack({
|
|
35
|
+
apiKey: process.env['TABSTACK_API_KEY'], // This is the default and can be omitted
|
|
36
|
+
});
|
|
42
37
|
|
|
43
|
-
|
|
38
|
+
const automateEvent = await client.agent.automate({
|
|
39
|
+
task: 'Find the top 3 trending repositories and extract their names, descriptions, and star counts',
|
|
40
|
+
});
|
|
44
41
|
|
|
45
|
-
|
|
46
|
-
git clone https://github.com/tabstack/tabs-typescript.git
|
|
47
|
-
cd tabs-typescript
|
|
48
|
-
npm install
|
|
49
|
-
npm run build
|
|
42
|
+
console.log(automateEvent.data);
|
|
50
43
|
```
|
|
51
44
|
|
|
52
|
-
|
|
45
|
+
### Request & Response types
|
|
46
|
+
|
|
47
|
+
This library includes TypeScript definitions for all request params and response fields. You may import and use them like so:
|
|
53
48
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
49
|
+
<!-- prettier-ignore -->
|
|
50
|
+
```ts
|
|
51
|
+
import Tabstack from '@tabstack/sdk';
|
|
57
52
|
|
|
58
|
-
|
|
59
|
-
|
|
53
|
+
const client = new Tabstack({
|
|
54
|
+
apiKey: process.env['TABSTACK_API_KEY'], // This is the default and can be omitted
|
|
55
|
+
});
|
|
56
|
+
|
|
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);
|
|
60
61
|
```
|
|
61
62
|
|
|
62
|
-
|
|
63
|
+
Documentation for each method, request param, and response field are available in docstrings and will appear on hover in most modern editors.
|
|
64
|
+
|
|
65
|
+
## Handling errors
|
|
66
|
+
|
|
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:
|
|
63
70
|
|
|
64
|
-
|
|
65
|
-
|
|
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
|
+
});
|
|
66
86
|
```
|
|
67
87
|
|
|
68
|
-
|
|
88
|
+
Error codes are as follows:
|
|
69
89
|
|
|
70
|
-
|
|
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` |
|
|
71
100
|
|
|
72
|
-
|
|
101
|
+
### Retries
|
|
73
102
|
|
|
74
|
-
|
|
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.
|
|
75
106
|
|
|
76
|
-
|
|
77
|
-
```typescript
|
|
78
|
-
import { Tabstack } from '@tabstack/sdk';
|
|
107
|
+
You can use the `maxRetries` option to configure or disable this:
|
|
79
108
|
|
|
80
|
-
|
|
81
|
-
|
|
109
|
+
<!-- prettier-ignore -->
|
|
110
|
+
```js
|
|
111
|
+
// Configure the default for all requests:
|
|
112
|
+
const client = new Tabstack({
|
|
113
|
+
maxRetries: 0, // default is 2
|
|
82
114
|
});
|
|
83
115
|
|
|
84
|
-
//
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
// Extract structured data with JSON schema
|
|
89
|
-
const schema = {
|
|
90
|
-
type: 'object',
|
|
91
|
-
properties: {
|
|
92
|
-
stories: {
|
|
93
|
-
type: 'array',
|
|
94
|
-
items: {
|
|
95
|
-
type: 'object',
|
|
96
|
-
properties: {
|
|
97
|
-
title: { type: 'string' },
|
|
98
|
-
points: { type: 'number' },
|
|
99
|
-
author: { type: 'string' }
|
|
100
|
-
},
|
|
101
|
-
required: ['title', 'points', 'author']
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
},
|
|
105
|
-
required: ['stories']
|
|
106
|
-
};
|
|
107
|
-
|
|
108
|
-
const data = await tabs.extract.json('https://news.ycombinator.com', schema);
|
|
109
|
-
console.log(data.data);
|
|
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
|
+
});
|
|
110
120
|
```
|
|
111
121
|
|
|
112
|
-
|
|
113
|
-
```javascript
|
|
114
|
-
const { Tabstack } = require('@tabstack/sdk');
|
|
122
|
+
### Timeouts
|
|
115
123
|
|
|
116
|
-
|
|
117
|
-
|
|
124
|
+
Requests time out after 1 minute by default. You can configure this with a `timeout` option:
|
|
125
|
+
|
|
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)
|
|
118
131
|
});
|
|
119
132
|
|
|
120
|
-
//
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
})
|
|
125
|
-
.catch(error => {
|
|
126
|
-
console.error('Error:', error.message);
|
|
127
|
-
});
|
|
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
|
+
});
|
|
128
137
|
```
|
|
129
138
|
|
|
130
|
-
|
|
139
|
+
On timeout, an `APIConnectionTimeoutError` is thrown.
|
|
131
140
|
|
|
132
|
-
|
|
141
|
+
Note that requests which time out will be [retried twice by default](#retries).
|
|
133
142
|
|
|
134
|
-
|
|
143
|
+
## Advanced Usage
|
|
135
144
|
|
|
136
|
-
|
|
137
|
-
const result = await tabs.extract.markdown('https://example.com/blog/article', {
|
|
138
|
-
metadata: true, // optional: include page metadata
|
|
139
|
-
nocache: false // optional: bypass cache
|
|
140
|
-
});
|
|
145
|
+
### Accessing raw Response data (e.g., headers)
|
|
141
146
|
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
```
|
|
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.
|
|
145
149
|
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
```
|
|
151
|
-
const
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
price: { type: 'number' },
|
|
161
|
-
inStock: { type: 'boolean' }
|
|
162
|
-
},
|
|
163
|
-
required: ['name', 'price', 'inStock']
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
},
|
|
167
|
-
required: ['products']
|
|
168
|
-
};
|
|
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.
|
|
152
|
+
|
|
153
|
+
<!-- prettier-ignore -->
|
|
154
|
+
```ts
|
|
155
|
+
const client = new Tabstack();
|
|
156
|
+
|
|
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
|
|
169
164
|
|
|
170
|
-
const
|
|
171
|
-
|
|
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);
|
|
172
172
|
```
|
|
173
173
|
|
|
174
|
-
###
|
|
175
|
-
|
|
176
|
-
Transform web content using AI:
|
|
177
|
-
|
|
178
|
-
```typescript
|
|
179
|
-
const schema = {
|
|
180
|
-
type: 'object',
|
|
181
|
-
properties: {
|
|
182
|
-
summaries: {
|
|
183
|
-
type: 'array',
|
|
184
|
-
items: {
|
|
185
|
-
type: 'object',
|
|
186
|
-
properties: {
|
|
187
|
-
title: { type: 'string' },
|
|
188
|
-
category: { type: 'string' },
|
|
189
|
-
summary: { type: 'string' }
|
|
190
|
-
},
|
|
191
|
-
required: ['title', 'category', 'summary']
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
},
|
|
195
|
-
required: ['summaries']
|
|
196
|
-
};
|
|
174
|
+
### Logging
|
|
197
175
|
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
'Categorize each story and write a one-sentence summary'
|
|
202
|
-
);
|
|
176
|
+
> [!IMPORTANT]
|
|
177
|
+
> All log messages are intended for debugging only. The format and content of log messages
|
|
178
|
+
> may change between releases.
|
|
203
179
|
|
|
204
|
-
|
|
205
|
-
```
|
|
180
|
+
#### Log levels
|
|
206
181
|
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
Execute browser automation tasks with streaming updates:
|
|
210
|
-
|
|
211
|
-
```typescript
|
|
212
|
-
for await (const event of tabs.agent.automate(
|
|
213
|
-
'Find the top 3 trending repositories and extract their details',
|
|
214
|
-
{
|
|
215
|
-
url: 'https://github.com/trending',
|
|
216
|
-
guardrails: 'browse and extract only',
|
|
217
|
-
maxIterations: 50
|
|
218
|
-
}
|
|
219
|
-
)) {
|
|
220
|
-
console.log(`Event: ${event.type}`);
|
|
221
|
-
|
|
222
|
-
if (event.type === 'task:completed') {
|
|
223
|
-
console.log('Result:', event.data.get('finalAnswer'));
|
|
224
|
-
} else if (event.type === 'agent:extracted') {
|
|
225
|
-
console.log('Extracted:', event.data.get('extractedData'));
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
```
|
|
182
|
+
The log level can be configured in two ways:
|
|
229
183
|
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
The SDK uses standard [JSON Schema](https://json-schema.org/) format for defining data structures:
|
|
233
|
-
|
|
234
|
-
```typescript
|
|
235
|
-
const schema = {
|
|
236
|
-
type: 'object',
|
|
237
|
-
properties: {
|
|
238
|
-
name: { type: 'string', description: 'Person name' },
|
|
239
|
-
age: { type: 'number', description: 'Person age' },
|
|
240
|
-
isActive: { type: 'boolean', description: 'Active status' },
|
|
241
|
-
tags: {
|
|
242
|
-
type: 'array',
|
|
243
|
-
items: { type: 'string' }
|
|
244
|
-
},
|
|
245
|
-
addresses: {
|
|
246
|
-
type: 'array',
|
|
247
|
-
items: {
|
|
248
|
-
type: 'object',
|
|
249
|
-
properties: {
|
|
250
|
-
street: { type: 'string' },
|
|
251
|
-
city: { type: 'string' },
|
|
252
|
-
zipCode: { type: 'number' }
|
|
253
|
-
},
|
|
254
|
-
required: ['street', 'city', 'zipCode']
|
|
255
|
-
}
|
|
256
|
-
},
|
|
257
|
-
metadata: {
|
|
258
|
-
type: 'object',
|
|
259
|
-
properties: {
|
|
260
|
-
createdAt: { type: 'string' },
|
|
261
|
-
updatedAt: { type: 'string' }
|
|
262
|
-
},
|
|
263
|
-
required: ['createdAt', 'updatedAt']
|
|
264
|
-
}
|
|
265
|
-
},
|
|
266
|
-
required: ['name', 'age']
|
|
267
|
-
};
|
|
268
|
-
```
|
|
184
|
+
1. Via the `TABSTACK_LOG` environment variable
|
|
185
|
+
2. Using the `logLevel` client option (overrides the environment variable if set)
|
|
269
186
|
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
TabstackError,
|
|
277
|
-
UnauthorizedError,
|
|
278
|
-
InvalidURLError,
|
|
279
|
-
BadRequestError,
|
|
280
|
-
ServerError
|
|
281
|
-
} from '@tabstack/sdk';
|
|
282
|
-
|
|
283
|
-
try {
|
|
284
|
-
const result = await tabs.extract.markdown('https://example.com');
|
|
285
|
-
} catch (error) {
|
|
286
|
-
if (error instanceof UnauthorizedError) {
|
|
287
|
-
console.error('Invalid API key');
|
|
288
|
-
} else if (error instanceof InvalidURLError) {
|
|
289
|
-
console.error('Invalid or inaccessible URL');
|
|
290
|
-
} else if (error instanceof TabstackError) {
|
|
291
|
-
console.error(`API error: ${error.message}`);
|
|
292
|
-
}
|
|
293
|
-
}
|
|
187
|
+
```ts
|
|
188
|
+
import Tabstack from '@tabstack/sdk';
|
|
189
|
+
|
|
190
|
+
const client = new Tabstack({
|
|
191
|
+
logLevel: 'debug', // Show all log messages
|
|
192
|
+
});
|
|
294
193
|
```
|
|
295
194
|
|
|
296
|
-
|
|
195
|
+
Available log levels, from most to least verbose:
|
|
297
196
|
|
|
298
|
-
- `
|
|
299
|
-
- `
|
|
300
|
-
- `
|
|
301
|
-
- `
|
|
302
|
-
- `
|
|
303
|
-
- `ServiceUnavailableError` - 503: Service unavailable
|
|
304
|
-
- `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
|
|
305
202
|
|
|
306
|
-
|
|
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.
|
|
307
206
|
|
|
308
|
-
|
|
309
|
-
- Tabstack API key ([get one here](https://tabstack.ai))
|
|
207
|
+
#### Custom logger
|
|
310
208
|
|
|
311
|
-
|
|
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.
|
|
312
211
|
|
|
313
|
-
|
|
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.
|
|
314
214
|
|
|
315
|
-
|
|
215
|
+
```ts
|
|
216
|
+
import Tabstack from '@tabstack/sdk';
|
|
217
|
+
import pino from 'pino';
|
|
316
218
|
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
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
|
+
```
|
|
320
226
|
|
|
321
|
-
|
|
322
|
-
npm run test:unit
|
|
227
|
+
### Making custom/undocumented requests
|
|
323
228
|
|
|
324
|
-
|
|
325
|
-
|
|
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.
|
|
326
231
|
|
|
327
|
-
|
|
328
|
-
npm run test:watch
|
|
232
|
+
#### Undocumented endpoints
|
|
329
233
|
|
|
330
|
-
|
|
331
|
-
|
|
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.
|
|
332
236
|
|
|
333
|
-
|
|
334
|
-
|
|
237
|
+
```ts
|
|
238
|
+
await client.post('/some/path', {
|
|
239
|
+
body: { some_prop: 'foo' },
|
|
240
|
+
query: { some_query_arg: 'bar' },
|
|
241
|
+
});
|
|
335
242
|
```
|
|
336
243
|
|
|
337
|
-
|
|
244
|
+
#### Undocumented request params
|
|
338
245
|
|
|
339
|
-
|
|
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.
|
|
340
249
|
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
- 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
|
+
```
|
|
349
257
|
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
- Real-world use case scenarios
|
|
353
|
-
- Error handling and edge cases
|
|
354
|
-
- 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.
|
|
355
260
|
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
- Generic type inference
|
|
359
|
-
- Type guard verification
|
|
360
|
-
- 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.
|
|
361
263
|
|
|
362
|
-
|
|
264
|
+
#### Undocumented response properties
|
|
363
265
|
|
|
364
|
-
|
|
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.
|
|
365
269
|
|
|
366
|
-
|
|
367
|
-
- **~70%+ code coverage** across branches, functions, lines, and statements
|
|
368
|
-
- **Mocked HTTP requests** using `nock` for fast, reliable tests
|
|
369
|
-
- **Type-safe tests** with full TypeScript support
|
|
270
|
+
### Customizing the fetch client
|
|
370
271
|
|
|
371
|
-
|
|
272
|
+
By default, this library expects a global `fetch` function is defined.
|
|
372
273
|
|
|
373
|
-
|
|
374
|
-
- **ts-jest** - TypeScript support for Jest
|
|
375
|
-
- **nock** - HTTP request mocking
|
|
376
|
-
- **tsd** - TypeScript type definition testing
|
|
274
|
+
If you want to use a different `fetch` function, you can either polyfill the global:
|
|
377
275
|
|
|
378
|
-
|
|
276
|
+
```ts
|
|
277
|
+
import fetch from 'my-fetch';
|
|
379
278
|
|
|
380
|
-
|
|
279
|
+
globalThis.fetch = fetch;
|
|
280
|
+
```
|
|
381
281
|
|
|
382
|
-
|
|
383
|
-
2. Maintain or improve code coverage
|
|
384
|
-
3. Use descriptive test names that explain the behavior being tested
|
|
385
|
-
4. Mock external HTTP requests using `nock`
|
|
386
|
-
5. Test both success and error scenarios
|
|
387
|
-
6. Add type tests for new public APIs
|
|
282
|
+
Or pass it to the client:
|
|
388
283
|
|
|
389
|
-
|
|
284
|
+
```ts
|
|
285
|
+
import Tabstack from '@tabstack/sdk';
|
|
286
|
+
import fetch from 'my-fetch';
|
|
390
287
|
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
describe('method', () => {
|
|
394
|
-
it('should handle success case', async () => {
|
|
395
|
-
// Arrange
|
|
396
|
-
const mockData = { result: 'success' };
|
|
397
|
-
nock('https://api.tabstack.ai')
|
|
398
|
-
.post('/endpoint')
|
|
399
|
-
.reply(200, mockData);
|
|
288
|
+
const client = new Tabstack({ fetch });
|
|
289
|
+
```
|
|
400
290
|
|
|
401
|
-
|
|
402
|
-
const result = await client.feature.method();
|
|
291
|
+
### Fetch options
|
|
403
292
|
|
|
404
|
-
|
|
405
|
-
expect(result).toEqual(mockData);
|
|
406
|
-
});
|
|
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.)
|
|
407
294
|
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
.post('/endpoint')
|
|
411
|
-
.reply(400, { error: 'Bad request' });
|
|
295
|
+
```ts
|
|
296
|
+
import Tabstack from '@tabstack/sdk';
|
|
412
297
|
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
298
|
+
const client = new Tabstack({
|
|
299
|
+
fetchOptions: {
|
|
300
|
+
// `RequestInit` options
|
|
301
|
+
},
|
|
416
302
|
});
|
|
417
303
|
```
|
|
418
304
|
|
|
419
|
-
|
|
305
|
+
#### Configuring proxies
|
|
306
|
+
|
|
307
|
+
To modify proxy behavior, you can provide custom `fetchOptions` that add runtime-specific proxy
|
|
308
|
+
options to requests:
|
|
420
309
|
|
|
421
|
-
|
|
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>
|
|
422
311
|
|
|
423
|
-
|
|
312
|
+
```ts
|
|
313
|
+
import Tabstack from '@tabstack/sdk';
|
|
314
|
+
import * as undici from 'undici';
|
|
424
315
|
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
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>
|
|
429
337
|
|
|
430
|
-
|
|
431
|
-
npm
|
|
338
|
+
```ts
|
|
339
|
+
import Tabstack from 'npm:@tabstack/sdk';
|
|
432
340
|
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
341
|
+
const httpClient = Deno.createHttpClient({ proxy: { url: 'http://localhost:8888' } });
|
|
342
|
+
const client = new Tabstack({
|
|
343
|
+
fetchOptions: {
|
|
344
|
+
client: httpClient,
|
|
345
|
+
},
|
|
346
|
+
});
|
|
438
347
|
```
|
|
439
348
|
|
|
440
|
-
|
|
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.
|
|
441
358
|
|
|
442
|
-
|
|
359
|
+
We take backwards-compatibility seriously and work hard to ensure you can rely on a smooth upgrade experience.
|
|
443
360
|
|
|
444
|
-
|
|
445
|
-
- ✅ **Node 20, 22, 24** - Tests and builds on all supported Node versions
|
|
446
|
-
- ✅ **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.
|
|
447
362
|
|
|
448
|
-
|
|
363
|
+
## Requirements
|
|
364
|
+
|
|
365
|
+
TypeScript >= 4.9 is supported.
|
|
366
|
+
|
|
367
|
+
The following runtimes are supported:
|
|
449
368
|
|
|
450
|
-
|
|
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.
|
|
451
377
|
|
|
452
|
-
|
|
378
|
+
Note that React Native is not supported at this time.
|
|
453
379
|
|
|
454
|
-
|
|
380
|
+
If you are interested in other runtime environments, please open or upvote an issue on GitHub.
|
|
381
|
+
|
|
382
|
+
## Contributing
|
|
455
383
|
|
|
456
|
-
|
|
457
|
-
- GitHub Issues: [https://github.com/tabstack/tabs-typescript/issues](https://github.com/tabstack/tabs-typescript/issues)
|
|
458
|
-
- Website: [https://tabstack.ai](https://tabstack.ai)
|
|
384
|
+
See [the contributing documentation](./CONTRIBUTING.md).
|