@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/dist/cjs/extract.js
DELETED
|
@@ -1,223 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Extract operator for TABStack AI SDK
|
|
4
|
-
*/
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.Extract = void 0;
|
|
7
|
-
const types_1 = require("./types");
|
|
8
|
-
/**
|
|
9
|
-
* Extract operator for converting and extracting web content
|
|
10
|
-
*
|
|
11
|
-
* This class provides methods for extracting content from URLs in various formats:
|
|
12
|
-
* - Markdown conversion
|
|
13
|
-
* - Schema generation
|
|
14
|
-
* - Structured JSON extraction
|
|
15
|
-
*/
|
|
16
|
-
class Extract {
|
|
17
|
-
constructor(httpClient) {
|
|
18
|
-
this.httpClient = httpClient;
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Convert URL content to Markdown format
|
|
22
|
-
*
|
|
23
|
-
* Fetches a URL and converts its HTML content to clean Markdown format with
|
|
24
|
-
* optional metadata extraction. By default, metadata is included in the content
|
|
25
|
-
* as YAML frontmatter. When metadata option is true, it's also returned as
|
|
26
|
-
* a separate field in the response.
|
|
27
|
-
*
|
|
28
|
-
* @param url - URL to fetch and convert to markdown
|
|
29
|
-
* @param options - Optional extraction options
|
|
30
|
-
* @param options.metadata - Include extracted metadata (Open Graph and HTML metadata) as a separate field in the response. Default: false
|
|
31
|
-
* @param options.nocache - Bypass cache and force fresh data retrieval. Default: false
|
|
32
|
-
*
|
|
33
|
-
* @returns MarkdownResponse containing the converted content and optional metadata
|
|
34
|
-
*
|
|
35
|
-
* @throws {BadRequestError} When URL is missing
|
|
36
|
-
* @throws {UnauthorizedError} When API key is invalid or missing
|
|
37
|
-
* @throws {InvalidURLError} When URL is invalid or inaccessible
|
|
38
|
-
* @throws {ServerError} When server fails to fetch or convert the content
|
|
39
|
-
*
|
|
40
|
-
* @example
|
|
41
|
-
* Basic usage:
|
|
42
|
-
* ```typescript
|
|
43
|
-
* const result = await tabs.extract.markdown('https://example.com/blog/article');
|
|
44
|
-
* console.log(result.content); // Markdown with YAML frontmatter
|
|
45
|
-
* ```
|
|
46
|
-
*
|
|
47
|
-
* @example
|
|
48
|
-
* With separate metadata field:
|
|
49
|
-
* ```typescript
|
|
50
|
-
* const result = await tabs.extract.markdown('https://example.com/blog/article', {
|
|
51
|
-
* metadata: true
|
|
52
|
-
* });
|
|
53
|
-
* console.log(result.content); // Markdown without frontmatter
|
|
54
|
-
* console.log(result.metadata?.title); // "Example Article Title"
|
|
55
|
-
* console.log(result.metadata?.author); // "Example Author"
|
|
56
|
-
* console.log(result.metadata?.image); // "https://example.com/images/article.jpg"
|
|
57
|
-
* ```
|
|
58
|
-
*
|
|
59
|
-
* @example
|
|
60
|
-
* Force fresh data retrieval:
|
|
61
|
-
* ```typescript
|
|
62
|
-
* const result = await tabs.extract.markdown('https://example.com/blog/article', {
|
|
63
|
-
* nocache: true
|
|
64
|
-
* });
|
|
65
|
-
* ```
|
|
66
|
-
*/
|
|
67
|
-
async markdown(url, options) {
|
|
68
|
-
const requestData = { url };
|
|
69
|
-
if (options?.metadata)
|
|
70
|
-
requestData.metadata = options.metadata;
|
|
71
|
-
if (options?.nocache)
|
|
72
|
-
requestData.nocache = options.nocache;
|
|
73
|
-
const response = await this.httpClient.post('v1/extract/markdown', requestData);
|
|
74
|
-
return types_1.MarkdownResponse.fromJSON(response);
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* Generate JSON schema from URL content
|
|
78
|
-
*
|
|
79
|
-
* Analyzes URL content and generates a JSON schema that describes the structure
|
|
80
|
-
* of the data. Use this to create schemas for the json() method when you don't
|
|
81
|
-
* know the structure in advance. The generated schema can then be used to extract
|
|
82
|
-
* structured data from similar pages.
|
|
83
|
-
*
|
|
84
|
-
* @param url - URL to analyze and extract schema from
|
|
85
|
-
* @param options - Optional schema generation options
|
|
86
|
-
* @param options.instructions - Optional instructions to guide schema generation (max 1000 characters). Example: "extract only the top stories, for each story include the title, points, author, and comment count"
|
|
87
|
-
* @param options.nocache - Bypass cache and force fresh data retrieval. Default: false
|
|
88
|
-
*
|
|
89
|
-
* @returns The generated JSON schema object
|
|
90
|
-
*
|
|
91
|
-
* @throws {BadRequestError} When URL is missing or schema format is invalid
|
|
92
|
-
* @throws {UnauthorizedError} When API key is invalid or missing
|
|
93
|
-
* @throws {InvalidURLError} When URL is invalid
|
|
94
|
-
* @throws {ServerError} When server fails to fetch URL, page is too large, or schema generation fails
|
|
95
|
-
*
|
|
96
|
-
* @example
|
|
97
|
-
* Basic usage:
|
|
98
|
-
* ```typescript
|
|
99
|
-
* const schema = await tabs.extract.schema('https://news.ycombinator.com');
|
|
100
|
-
* console.log(schema); // JSON schema object describing the page structure
|
|
101
|
-
* ```
|
|
102
|
-
*
|
|
103
|
-
* @example
|
|
104
|
-
* With instructions:
|
|
105
|
-
* ```typescript
|
|
106
|
-
* const schema = await tabs.extract.schema('https://news.ycombinator.com', {
|
|
107
|
-
* instructions: 'extract only the top stories, for each story include the title, points, author, and comment count'
|
|
108
|
-
* });
|
|
109
|
-
* // Use the generated schema to extract data
|
|
110
|
-
* const data = await tabs.extract.json('https://news.ycombinator.com', schema);
|
|
111
|
-
* console.log(data.data); // Structured data matching the schema
|
|
112
|
-
* ```
|
|
113
|
-
*/
|
|
114
|
-
async schema(url, options) {
|
|
115
|
-
const requestData = { url };
|
|
116
|
-
if (options?.instructions)
|
|
117
|
-
requestData.instructions = options.instructions;
|
|
118
|
-
if (options?.nocache)
|
|
119
|
-
requestData.nocache = options.nocache;
|
|
120
|
-
return await this.httpClient.post('v1/extract/json/schema', requestData);
|
|
121
|
-
}
|
|
122
|
-
/**
|
|
123
|
-
* Extract structured JSON from URL content
|
|
124
|
-
*
|
|
125
|
-
* Fetches a URL and extracts structured data according to a provided JSON schema.
|
|
126
|
-
* The schema defines what data to extract and its structure. You can define your
|
|
127
|
-
* schema manually or generate one using the schema() method.
|
|
128
|
-
*
|
|
129
|
-
* @param url - URL to fetch and extract data from
|
|
130
|
-
* @param schema - JSON schema object defining the structure of data to extract
|
|
131
|
-
* @param options - Optional extraction options
|
|
132
|
-
* @param options.nocache - Bypass cache and force fresh data retrieval. Default: false
|
|
133
|
-
*
|
|
134
|
-
* @returns JsonResponse containing the extracted data matching the schema
|
|
135
|
-
*
|
|
136
|
-
* @throws {BadRequestError} When URL or schema is missing, or schema format is invalid
|
|
137
|
-
* @throws {UnauthorizedError} When API key is invalid or missing
|
|
138
|
-
* @throws {InvalidURLError} When URL is invalid
|
|
139
|
-
* @throws {ServerError} When server fails to fetch URL, page is too large, or JSON generation fails
|
|
140
|
-
*
|
|
141
|
-
* @example
|
|
142
|
-
* Extract news stories:
|
|
143
|
-
* ```typescript
|
|
144
|
-
* const schema = {
|
|
145
|
-
* type: 'object',
|
|
146
|
-
* properties: {
|
|
147
|
-
* stories: {
|
|
148
|
-
* type: 'array',
|
|
149
|
-
* items: {
|
|
150
|
-
* type: 'object',
|
|
151
|
-
* properties: {
|
|
152
|
-
* title: { type: 'string' },
|
|
153
|
-
* points: { type: 'number' },
|
|
154
|
-
* author: { type: 'string' }
|
|
155
|
-
* },
|
|
156
|
-
* required: ['title', 'points', 'author']
|
|
157
|
-
* }
|
|
158
|
-
* }
|
|
159
|
-
* },
|
|
160
|
-
* required: ['stories']
|
|
161
|
-
* };
|
|
162
|
-
*
|
|
163
|
-
* const result = await tabs.extract.json('https://news.ycombinator.com', schema);
|
|
164
|
-
* console.log(result.data.stories); // Array of story objects
|
|
165
|
-
* ```
|
|
166
|
-
*
|
|
167
|
-
* @example
|
|
168
|
-
* Extract product information:
|
|
169
|
-
* ```typescript
|
|
170
|
-
* const schema = {
|
|
171
|
-
* type: 'object',
|
|
172
|
-
* properties: {
|
|
173
|
-
* name: { type: 'string' },
|
|
174
|
-
* price: { type: 'number' },
|
|
175
|
-
* inStock: { type: 'boolean' },
|
|
176
|
-
* features: {
|
|
177
|
-
* type: 'array',
|
|
178
|
-
* items: { type: 'string' }
|
|
179
|
-
* }
|
|
180
|
-
* },
|
|
181
|
-
* required: ['name', 'price', 'inStock']
|
|
182
|
-
* };
|
|
183
|
-
*
|
|
184
|
-
* const result = await tabs.extract.json(
|
|
185
|
-
* 'https://example-store.com/product/wireless-headphones',
|
|
186
|
-
* schema
|
|
187
|
-
* );
|
|
188
|
-
* console.log(result.data.name); // "Premium Wireless Headphones"
|
|
189
|
-
* console.log(result.data.price); // 299.99
|
|
190
|
-
* console.log(result.data.inStock); // true
|
|
191
|
-
* ```
|
|
192
|
-
*
|
|
193
|
-
* @example
|
|
194
|
-
* Using generated schema:
|
|
195
|
-
* ```typescript
|
|
196
|
-
* const schema = await tabs.extract.schema('https://news.ycombinator.com', {
|
|
197
|
-
* instructions: 'extract top stories with title, points, and author'
|
|
198
|
-
* });
|
|
199
|
-
* const result = await tabs.extract.json('https://news.ycombinator.com', schema);
|
|
200
|
-
* console.log(result.data);
|
|
201
|
-
* ```
|
|
202
|
-
*
|
|
203
|
-
* @example
|
|
204
|
-
* Force fresh data retrieval:
|
|
205
|
-
* ```typescript
|
|
206
|
-
* const result = await tabs.extract.json('https://news.ycombinator.com', schema, {
|
|
207
|
-
* nocache: true
|
|
208
|
-
* });
|
|
209
|
-
* ```
|
|
210
|
-
*/
|
|
211
|
-
async json(url, schema, options) {
|
|
212
|
-
const requestData = {
|
|
213
|
-
url,
|
|
214
|
-
json_schema: schema,
|
|
215
|
-
};
|
|
216
|
-
if (options?.nocache)
|
|
217
|
-
requestData.nocache = options.nocache;
|
|
218
|
-
const response = await this.httpClient.post('v1/extract/json', requestData);
|
|
219
|
-
return types_1.JsonResponse.fromJSON(response);
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
exports.Extract = Extract;
|
|
223
|
-
//# sourceMappingURL=extract.js.map
|
package/dist/cjs/extract.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"extract.js","sourceRoot":"","sources":["../../src/extract.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAGH,mCAAyD;AAgBzD;;;;;;;GAOG;AACH,MAAa,OAAO;IAClB,YAAoB,UAAsB;QAAtB,eAAU,GAAV,UAAU,CAAY;IAAG,CAAC;IAE9C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8CG;IACH,KAAK,CAAC,QAAQ,CAAC,GAAW,EAAE,OAAgC;QAC1D,MAAM,WAAW,GAA4B,EAAE,GAAG,EAAE,CAAC;QACrD,IAAI,OAAO,EAAE,QAAQ;YAAE,WAAW,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QAC/D,IAAI,OAAO,EAAE,OAAO;YAAE,WAAW,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAE5D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CACzC,qBAAqB,EACrB,WAAW,CACZ,CAAC;QACF,OAAO,wBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC7C,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAqCG;IACH,KAAK,CAAC,MAAM,CAAC,GAAW,EAAE,OAA8B;QACtD,MAAM,WAAW,GAA4B,EAAE,GAAG,EAAE,CAAC;QACrD,IAAI,OAAO,EAAE,YAAY;YAAE,WAAW,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;QAC3E,IAAI,OAAO,EAAE,OAAO;YAAE,WAAW,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAE5D,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAC/B,wBAAwB,EACxB,WAAW,CACZ,CAAC;IACJ,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAwFG;IACH,KAAK,CAAC,IAAI,CACR,GAAW,EACX,MAA+B,EAC/B,OAA4B;QAE5B,MAAM,WAAW,GAA4B;YAC3C,GAAG;YACH,WAAW,EAAE,MAAM;SACpB,CAAC;QACF,IAAI,OAAO,EAAE,OAAO;YAAE,WAAW,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;QAE5D,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAI,iBAAiB,EAAE,WAAW,CAAC,CAAC;QAC/E,OAAO,oBAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACzC,CAAC;CACF;AAtND,0BAsNC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"extract.test.d.ts","sourceRoot":"","sources":["../../src/extract.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
package/dist/cjs/extract.test.js
DELETED
|
@@ -1,364 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Tests for Extract operator
|
|
4
|
-
*/
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const extract_1 = require("./extract");
|
|
7
|
-
const http_1 = require("./util/http");
|
|
8
|
-
const types_1 = require("./types");
|
|
9
|
-
// Mock HTTPClient
|
|
10
|
-
jest.mock('./util/http');
|
|
11
|
-
describe('Extract', () => {
|
|
12
|
-
let extract;
|
|
13
|
-
let mockHttpClient;
|
|
14
|
-
beforeEach(() => {
|
|
15
|
-
mockHttpClient = new http_1.HTTPClient({ apiKey: 'test-key' });
|
|
16
|
-
extract = new extract_1.Extract(mockHttpClient);
|
|
17
|
-
});
|
|
18
|
-
afterEach(() => {
|
|
19
|
-
jest.clearAllMocks();
|
|
20
|
-
});
|
|
21
|
-
describe('markdown', () => {
|
|
22
|
-
it('should extract markdown from URL', async () => {
|
|
23
|
-
const mockResponse = {
|
|
24
|
-
url: 'https://example.com',
|
|
25
|
-
content: '# Test Page\n\nContent here',
|
|
26
|
-
};
|
|
27
|
-
mockHttpClient.post = jest.fn().mockResolvedValue(mockResponse);
|
|
28
|
-
const result = await extract.markdown('https://example.com');
|
|
29
|
-
expect(mockHttpClient.post).toHaveBeenCalledWith('v1/extract/markdown', {
|
|
30
|
-
url: 'https://example.com',
|
|
31
|
-
});
|
|
32
|
-
expect(result).toBeInstanceOf(types_1.MarkdownResponse);
|
|
33
|
-
expect(result.url).toBe('https://example.com');
|
|
34
|
-
expect(result.content).toBe('# Test Page\n\nContent here');
|
|
35
|
-
});
|
|
36
|
-
it('should extract markdown with metadata option', async () => {
|
|
37
|
-
const mockResponse = {
|
|
38
|
-
url: 'https://example.com',
|
|
39
|
-
content: '# Test Page\n\nContent',
|
|
40
|
-
metadata: {
|
|
41
|
-
title: 'Test Page',
|
|
42
|
-
description: 'A test page',
|
|
43
|
-
site_name: 'Example Site',
|
|
44
|
-
},
|
|
45
|
-
};
|
|
46
|
-
mockHttpClient.post = jest.fn().mockResolvedValue(mockResponse);
|
|
47
|
-
const result = await extract.markdown('https://example.com', { metadata: true });
|
|
48
|
-
expect(mockHttpClient.post).toHaveBeenCalledWith('v1/extract/markdown', {
|
|
49
|
-
url: 'https://example.com',
|
|
50
|
-
metadata: true,
|
|
51
|
-
});
|
|
52
|
-
expect(result.metadata).toBeInstanceOf(types_1.Metadata);
|
|
53
|
-
expect(result.metadata?.title).toBe('Test Page');
|
|
54
|
-
expect(result.metadata?.siteName).toBe('Example Site');
|
|
55
|
-
});
|
|
56
|
-
it('should extract markdown with nocache option', async () => {
|
|
57
|
-
const mockResponse = {
|
|
58
|
-
url: 'https://example.com',
|
|
59
|
-
content: 'Fresh content',
|
|
60
|
-
};
|
|
61
|
-
mockHttpClient.post = jest.fn().mockResolvedValue(mockResponse);
|
|
62
|
-
await extract.markdown('https://example.com', { nocache: true });
|
|
63
|
-
expect(mockHttpClient.post).toHaveBeenCalledWith('v1/extract/markdown', {
|
|
64
|
-
url: 'https://example.com',
|
|
65
|
-
nocache: true,
|
|
66
|
-
});
|
|
67
|
-
});
|
|
68
|
-
it('should extract markdown with both metadata and nocache options', async () => {
|
|
69
|
-
const mockResponse = {
|
|
70
|
-
url: 'https://example.com',
|
|
71
|
-
content: 'Content',
|
|
72
|
-
metadata: { title: 'Test' },
|
|
73
|
-
};
|
|
74
|
-
mockHttpClient.post = jest.fn().mockResolvedValue(mockResponse);
|
|
75
|
-
await extract.markdown('https://example.com', { metadata: true, nocache: true });
|
|
76
|
-
expect(mockHttpClient.post).toHaveBeenCalledWith('v1/extract/markdown', {
|
|
77
|
-
url: 'https://example.com',
|
|
78
|
-
metadata: true,
|
|
79
|
-
nocache: true,
|
|
80
|
-
});
|
|
81
|
-
});
|
|
82
|
-
it('should handle empty content', async () => {
|
|
83
|
-
const mockResponse = {
|
|
84
|
-
url: 'https://example.com',
|
|
85
|
-
content: '',
|
|
86
|
-
};
|
|
87
|
-
mockHttpClient.post = jest.fn().mockResolvedValue(mockResponse);
|
|
88
|
-
const result = await extract.markdown('https://example.com');
|
|
89
|
-
expect(result.content).toBe('');
|
|
90
|
-
});
|
|
91
|
-
it('should handle markdown without metadata', async () => {
|
|
92
|
-
const mockResponse = {
|
|
93
|
-
url: 'https://example.com',
|
|
94
|
-
content: '# Title',
|
|
95
|
-
};
|
|
96
|
-
mockHttpClient.post = jest.fn().mockResolvedValue(mockResponse);
|
|
97
|
-
const result = await extract.markdown('https://example.com', { metadata: false });
|
|
98
|
-
expect(result.metadata).toBeUndefined();
|
|
99
|
-
});
|
|
100
|
-
it('should propagate errors from HTTP client', async () => {
|
|
101
|
-
const error = new Error('Network error');
|
|
102
|
-
mockHttpClient.post = jest.fn().mockRejectedValue(error);
|
|
103
|
-
await expect(extract.markdown('https://example.com')).rejects.toThrow('Network error');
|
|
104
|
-
});
|
|
105
|
-
});
|
|
106
|
-
describe('schema', () => {
|
|
107
|
-
it('should generate schema from URL', async () => {
|
|
108
|
-
const mockSchema = {
|
|
109
|
-
type: 'object',
|
|
110
|
-
properties: {
|
|
111
|
-
title: { type: 'string' },
|
|
112
|
-
items: {
|
|
113
|
-
type: 'array',
|
|
114
|
-
items: { type: 'string' },
|
|
115
|
-
},
|
|
116
|
-
},
|
|
117
|
-
};
|
|
118
|
-
mockHttpClient.post = jest.fn().mockResolvedValue(mockSchema);
|
|
119
|
-
const result = await extract.schema('https://example.com');
|
|
120
|
-
expect(mockHttpClient.post).toHaveBeenCalledWith('v1/extract/json/schema', {
|
|
121
|
-
url: 'https://example.com',
|
|
122
|
-
});
|
|
123
|
-
expect(result).toEqual(mockSchema);
|
|
124
|
-
});
|
|
125
|
-
it('should generate schema with instructions', async () => {
|
|
126
|
-
const mockSchema = {
|
|
127
|
-
type: 'object',
|
|
128
|
-
properties: {
|
|
129
|
-
stories: { type: 'array' },
|
|
130
|
-
},
|
|
131
|
-
};
|
|
132
|
-
mockHttpClient.post = jest.fn().mockResolvedValue(mockSchema);
|
|
133
|
-
await extract.schema('https://example.com', {
|
|
134
|
-
instructions: 'extract top stories with title and author',
|
|
135
|
-
});
|
|
136
|
-
expect(mockHttpClient.post).toHaveBeenCalledWith('v1/extract/json/schema', {
|
|
137
|
-
url: 'https://example.com',
|
|
138
|
-
instructions: 'extract top stories with title and author',
|
|
139
|
-
});
|
|
140
|
-
});
|
|
141
|
-
it('should generate schema with nocache option', async () => {
|
|
142
|
-
const mockSchema = { type: 'object' };
|
|
143
|
-
mockHttpClient.post = jest.fn().mockResolvedValue(mockSchema);
|
|
144
|
-
await extract.schema('https://example.com', { nocache: true });
|
|
145
|
-
expect(mockHttpClient.post).toHaveBeenCalledWith('v1/extract/json/schema', {
|
|
146
|
-
url: 'https://example.com',
|
|
147
|
-
nocache: true,
|
|
148
|
-
});
|
|
149
|
-
});
|
|
150
|
-
it('should generate schema with both instructions and nocache', async () => {
|
|
151
|
-
const mockSchema = { type: 'object' };
|
|
152
|
-
mockHttpClient.post = jest.fn().mockResolvedValue(mockSchema);
|
|
153
|
-
await extract.schema('https://example.com', {
|
|
154
|
-
instructions: 'extract products',
|
|
155
|
-
nocache: true,
|
|
156
|
-
});
|
|
157
|
-
expect(mockHttpClient.post).toHaveBeenCalledWith('v1/extract/json/schema', {
|
|
158
|
-
url: 'https://example.com',
|
|
159
|
-
instructions: 'extract products',
|
|
160
|
-
nocache: true,
|
|
161
|
-
});
|
|
162
|
-
});
|
|
163
|
-
it('should handle complex nested schemas', async () => {
|
|
164
|
-
const mockSchema = {
|
|
165
|
-
type: 'object',
|
|
166
|
-
properties: {
|
|
167
|
-
data: {
|
|
168
|
-
type: 'object',
|
|
169
|
-
properties: {
|
|
170
|
-
items: {
|
|
171
|
-
type: 'array',
|
|
172
|
-
items: {
|
|
173
|
-
type: 'object',
|
|
174
|
-
properties: {
|
|
175
|
-
name: { type: 'string' },
|
|
176
|
-
value: { type: 'number' },
|
|
177
|
-
},
|
|
178
|
-
},
|
|
179
|
-
},
|
|
180
|
-
},
|
|
181
|
-
},
|
|
182
|
-
},
|
|
183
|
-
};
|
|
184
|
-
mockHttpClient.post = jest.fn().mockResolvedValue(mockSchema);
|
|
185
|
-
const result = await extract.schema('https://example.com');
|
|
186
|
-
expect(result).toEqual(mockSchema);
|
|
187
|
-
});
|
|
188
|
-
it('should propagate errors from HTTP client', async () => {
|
|
189
|
-
const error = new Error('Schema generation failed');
|
|
190
|
-
mockHttpClient.post = jest.fn().mockRejectedValue(error);
|
|
191
|
-
await expect(extract.schema('https://example.com')).rejects.toThrow('Schema generation failed');
|
|
192
|
-
});
|
|
193
|
-
});
|
|
194
|
-
describe('json', () => {
|
|
195
|
-
const testSchema = {
|
|
196
|
-
type: 'object',
|
|
197
|
-
properties: {
|
|
198
|
-
title: { type: 'string' },
|
|
199
|
-
count: { type: 'number' },
|
|
200
|
-
},
|
|
201
|
-
};
|
|
202
|
-
it('should extract JSON data from URL', async () => {
|
|
203
|
-
const mockData = {
|
|
204
|
-
title: 'Test Article',
|
|
205
|
-
count: 42,
|
|
206
|
-
};
|
|
207
|
-
mockHttpClient.post = jest.fn().mockResolvedValue(mockData);
|
|
208
|
-
const result = await extract.json('https://example.com', testSchema);
|
|
209
|
-
expect(mockHttpClient.post).toHaveBeenCalledWith('v1/extract/json', {
|
|
210
|
-
url: 'https://example.com',
|
|
211
|
-
json_schema: testSchema,
|
|
212
|
-
});
|
|
213
|
-
expect(result).toBeInstanceOf(types_1.JsonResponse);
|
|
214
|
-
expect(result.data).toEqual(mockData);
|
|
215
|
-
});
|
|
216
|
-
it('should extract JSON with nocache option', async () => {
|
|
217
|
-
const mockData = { fresh: true };
|
|
218
|
-
mockHttpClient.post = jest.fn().mockResolvedValue(mockData);
|
|
219
|
-
await extract.json('https://example.com', testSchema, { nocache: true });
|
|
220
|
-
expect(mockHttpClient.post).toHaveBeenCalledWith('v1/extract/json', {
|
|
221
|
-
url: 'https://example.com',
|
|
222
|
-
json_schema: testSchema,
|
|
223
|
-
nocache: true,
|
|
224
|
-
});
|
|
225
|
-
});
|
|
226
|
-
it('should handle array data', async () => {
|
|
227
|
-
const schema = {
|
|
228
|
-
type: 'array',
|
|
229
|
-
items: {
|
|
230
|
-
type: 'object',
|
|
231
|
-
properties: {
|
|
232
|
-
id: { type: 'number' },
|
|
233
|
-
name: { type: 'string' },
|
|
234
|
-
},
|
|
235
|
-
},
|
|
236
|
-
};
|
|
237
|
-
const mockData = [
|
|
238
|
-
{ id: 1, name: 'Item 1' },
|
|
239
|
-
{ id: 2, name: 'Item 2' },
|
|
240
|
-
];
|
|
241
|
-
mockHttpClient.post = jest.fn().mockResolvedValue(mockData);
|
|
242
|
-
const result = await extract.json('https://example.com', schema);
|
|
243
|
-
expect(result.data).toEqual(mockData);
|
|
244
|
-
});
|
|
245
|
-
it('should handle nested object data', async () => {
|
|
246
|
-
const schema = {
|
|
247
|
-
type: 'object',
|
|
248
|
-
properties: {
|
|
249
|
-
user: {
|
|
250
|
-
type: 'object',
|
|
251
|
-
properties: {
|
|
252
|
-
profile: {
|
|
253
|
-
type: 'object',
|
|
254
|
-
properties: {
|
|
255
|
-
name: { type: 'string' },
|
|
256
|
-
age: { type: 'number' },
|
|
257
|
-
},
|
|
258
|
-
},
|
|
259
|
-
},
|
|
260
|
-
},
|
|
261
|
-
},
|
|
262
|
-
};
|
|
263
|
-
const mockData = {
|
|
264
|
-
user: {
|
|
265
|
-
profile: {
|
|
266
|
-
name: 'John Doe',
|
|
267
|
-
age: 30,
|
|
268
|
-
},
|
|
269
|
-
},
|
|
270
|
-
};
|
|
271
|
-
mockHttpClient.post = jest.fn().mockResolvedValue(mockData);
|
|
272
|
-
const result = await extract.json('https://example.com', schema);
|
|
273
|
-
expect(result.data).toEqual(mockData);
|
|
274
|
-
});
|
|
275
|
-
it('should work with TypeScript generics', async () => {
|
|
276
|
-
const mockData = {
|
|
277
|
-
name: 'Headphones',
|
|
278
|
-
price: 299.99,
|
|
279
|
-
inStock: true,
|
|
280
|
-
};
|
|
281
|
-
mockHttpClient.post = jest.fn().mockResolvedValue(mockData);
|
|
282
|
-
const result = await extract.json('https://example.com', testSchema);
|
|
283
|
-
expect(result.data.name).toBe('Headphones');
|
|
284
|
-
expect(result.data.price).toBe(299.99);
|
|
285
|
-
expect(result.data.inStock).toBe(true);
|
|
286
|
-
});
|
|
287
|
-
it('should handle empty schema', async () => {
|
|
288
|
-
const mockData = { value: 'test' };
|
|
289
|
-
mockHttpClient.post = jest.fn().mockResolvedValue(mockData);
|
|
290
|
-
const result = await extract.json('https://example.com', {});
|
|
291
|
-
expect(mockHttpClient.post).toHaveBeenCalledWith('v1/extract/json', {
|
|
292
|
-
url: 'https://example.com',
|
|
293
|
-
json_schema: {},
|
|
294
|
-
});
|
|
295
|
-
expect(result.data).toEqual(mockData);
|
|
296
|
-
});
|
|
297
|
-
it('should handle null data', async () => {
|
|
298
|
-
mockHttpClient.post = jest.fn().mockResolvedValue(null);
|
|
299
|
-
const result = await extract.json('https://example.com', testSchema);
|
|
300
|
-
expect(result.data).toBeNull();
|
|
301
|
-
});
|
|
302
|
-
it('should propagate errors from HTTP client', async () => {
|
|
303
|
-
const error = new Error('Extraction failed');
|
|
304
|
-
mockHttpClient.post = jest.fn().mockRejectedValue(error);
|
|
305
|
-
await expect(extract.json('https://example.com', testSchema)).rejects.toThrow('Extraction failed');
|
|
306
|
-
});
|
|
307
|
-
});
|
|
308
|
-
describe('Integration scenarios', () => {
|
|
309
|
-
it('should use generated schema for extraction', async () => {
|
|
310
|
-
const mockSchema = {
|
|
311
|
-
type: 'object',
|
|
312
|
-
properties: {
|
|
313
|
-
stories: { type: 'array' },
|
|
314
|
-
},
|
|
315
|
-
};
|
|
316
|
-
const mockData = {
|
|
317
|
-
stories: [
|
|
318
|
-
{ title: 'Story 1', points: 100 },
|
|
319
|
-
{ title: 'Story 2', points: 50 },
|
|
320
|
-
],
|
|
321
|
-
};
|
|
322
|
-
mockHttpClient.post = jest
|
|
323
|
-
.fn()
|
|
324
|
-
.mockResolvedValueOnce(mockSchema)
|
|
325
|
-
.mockResolvedValueOnce(mockData);
|
|
326
|
-
// First generate schema
|
|
327
|
-
const schema = await extract.schema('https://example.com', {
|
|
328
|
-
instructions: 'extract top stories',
|
|
329
|
-
});
|
|
330
|
-
// Then use it for extraction
|
|
331
|
-
const result = await extract.json('https://example.com', schema);
|
|
332
|
-
expect(mockHttpClient.post).toHaveBeenCalledTimes(2);
|
|
333
|
-
expect(result.data).toEqual(mockData);
|
|
334
|
-
});
|
|
335
|
-
it('should handle multiple extractions with same schema', async () => {
|
|
336
|
-
const schema = { type: 'object', properties: { value: { type: 'string' } } };
|
|
337
|
-
mockHttpClient.post = jest
|
|
338
|
-
.fn()
|
|
339
|
-
.mockResolvedValueOnce({ value: 'first' })
|
|
340
|
-
.mockResolvedValueOnce({ value: 'second' });
|
|
341
|
-
const result1 = await extract.json('https://example.com/page1', schema);
|
|
342
|
-
const result2 = await extract.json('https://example.com/page2', schema);
|
|
343
|
-
expect(result1.data).toEqual({ value: 'first' });
|
|
344
|
-
expect(result2.data).toEqual({ value: 'second' });
|
|
345
|
-
});
|
|
346
|
-
it('should extract markdown and JSON from same URL', async () => {
|
|
347
|
-
mockHttpClient.post = jest
|
|
348
|
-
.fn()
|
|
349
|
-
.mockResolvedValueOnce({
|
|
350
|
-
url: 'https://example.com',
|
|
351
|
-
content: '# Title',
|
|
352
|
-
})
|
|
353
|
-
.mockResolvedValueOnce({ title: 'Title', content: 'Content' });
|
|
354
|
-
const markdownResult = await extract.markdown('https://example.com');
|
|
355
|
-
const jsonResult = await extract.json('https://example.com', {
|
|
356
|
-
type: 'object',
|
|
357
|
-
properties: { title: { type: 'string' } },
|
|
358
|
-
});
|
|
359
|
-
expect(markdownResult.content).toBe('# Title');
|
|
360
|
-
expect(jsonResult.data).toEqual({ title: 'Title', content: 'Content' });
|
|
361
|
-
});
|
|
362
|
-
});
|
|
363
|
-
});
|
|
364
|
-
//# sourceMappingURL=extract.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"extract.test.js","sourceRoot":"","sources":["../../src/extract.test.ts"],"names":[],"mappings":"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"}
|