diff --git a/.ai/AGENTS.md b/.ai/AGENTS.md index 8702c618..8eac1091 100644 --- a/.ai/AGENTS.md +++ b/.ai/AGENTS.md @@ -4,9 +4,9 @@ This document serves as a quick reference for agentic coding assistants working ## Check your work -After making changes, always run `corepack yarn check`, this lints with typescript, formats code, -and runs quick unit tests. Remember that this formats code and may make changes, that you are to -commit if you were working on those files. +After making changes, always run `corepack yarn check`, which runs Knip (with fixes/removals), +lints TypeScript, formats code, and runs quick unit tests. Remember that Knip and formatting may +make changes that you must review and commit when you touched the affected files. ## When running in GitHub Actions diff --git a/.changeset/README.md b/.changeset/README.md new file mode 100644 index 00000000..e2bd8c23 --- /dev/null +++ b/.changeset/README.md @@ -0,0 +1,3 @@ +# Changesets + +Run `yarn changeset` to add a release note for your change. diff --git a/.changeset/config.json b/.changeset/config.json new file mode 100644 index 00000000..9c900b1d --- /dev/null +++ b/.changeset/config.json @@ -0,0 +1,16 @@ +{ + "$schema": "https://unpkg.com/@changesets/config@3.1.1/schema.json", + "changelog": [ + "@changesets/cli/changelog", + { + "repo": "transloadit/node-sdk" + } + ], + "commit": false, + "fixed": [["@transloadit/node", "transloadit", "@transloadit/types", "@transloadit/zod"]], + "linked": [], + "access": "public", + "baseBranch": "main", + "updateInternalDependencies": "patch", + "ignore": [] +} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8fba4932..33d51080 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -21,44 +21,33 @@ jobs: with: node-version: 22 - run: corepack yarn - - run: corepack yarn pack + - run: corepack yarn run pack - uses: actions/upload-artifact@v4 with: name: package path: '*.tgz' - biome: - name: Lint (Biome) + verify: + name: Verify (fast) runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: - node-version: 22 - - run: corepack yarn - - run: corepack yarn lint:js - - knip: - name: Knip - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version: 22 + node-version: 24 - run: corepack yarn - - run: corepack yarn knip + - run: corepack yarn verify - typescript: - name: Lint (TypeScript) + verify-full: + name: Verify (full) runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: - node-version: 22 + node-version: 24 - run: corepack yarn - - run: corepack yarn lint:ts + - run: corepack yarn verify:full unit: name: Unit tests (Node ${{ matrix.node }}) @@ -75,13 +64,18 @@ jobs: with: node-version: ${{ matrix.node }} - run: corepack yarn + # Root unit tests execute TypeScript scripts via Node's strip-types support. + # Keep those on Node 24+; Node 20/22 only run @transloadit/node unit tests. - run: corepack yarn test:unit + if: matrix.node == 24 + - run: corepack yarn workspace @transloadit/node test:unit + if: matrix.node != 24 - name: Upload coverage reports artifact if: matrix.node == 24 uses: actions/upload-artifact@v4 with: name: coverage-reports - path: coverage/ + path: packages/node/coverage/ e2e: name: E2E tests @@ -111,14 +105,14 @@ jobs: TRANSLOADIT_KEY: ${{ secrets.TRANSLOADIT_KEY }} TRANSLOADIT_SECRET: ${{ secrets.TRANSLOADIT_SECRET }} NODE_OPTIONS: --trace-deprecation --trace-warnings - CLOUDFLARED_PATH: ./cloudflared-linux-amd64 + CLOUDFLARED_PATH: ${{ github.workspace }}/cloudflared-linux-amd64 DEBUG: 'transloadit:*' - name: Generate the badge from the json-summary - run: node --experimental-strip-types test/generate-coverage-badge.ts coverage/coverage-summary.json + run: node --experimental-strip-types packages/node/test/generate-coverage-badge.ts packages/node/coverage/coverage-summary.json - name: Move HTML report and badge to the correct location run: | - mv coverage/lcov-report static-build + mv packages/node/coverage/lcov-report static-build mv coverage-badge.svg static-build/ # *** BEGIN PUBLISH STATIC SITE STEPS *** # Use the standard checkout action to check out the destination repo to a separate directory @@ -180,8 +174,8 @@ jobs: runs-on: ubuntu-latest needs: - pack - - biome - - typescript + - verify + - verify-full - unit if: startsWith(github.ref, 'refs/tags/') permissions: @@ -191,11 +185,12 @@ jobs: - uses: softprops/action-gh-release@v1 with: draft: true + - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: 22 registry-url: https://registry.npmjs.org - - uses: actions/download-artifact@v4 - with: { name: package } - - run: npm install -g npm@^11.5.1 - - run: npm publish *.tgz --provenance + - run: corepack yarn + - run: corepack yarn changeset publish + env: + NPM_CONFIG_PROVENANCE: "true" diff --git a/.gitignore b/.gitignore index e1e043e0..2e761c24 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,7 @@ sample.js npm-debug.log env.sh /coverage +packages/node/coverage .pnp.* .yarn/* @@ -19,3 +20,10 @@ env.sh .aider* .DS_Store .env +packages/types/src/generated +packages/zod/src/v3 +packages/zod/src/v4 +packages/transloadit/src +packages/transloadit/README.md +packages/transloadit/CHANGELOG.md +packages/transloadit/LICENSE diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d0e048f5..3cae4e96 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -20,6 +20,10 @@ To check for updates, run: yarn upgrade-interactive ``` +## Tooling requirements + +Local tooling (the TypeScript scripts in `scripts/` and package tests) requires Node 22.18+ so `node file.ts` works without flags. The published packages still support Node 20+ at runtime. + ## Linting This project is linted using Biome. You can lint the project by running: @@ -79,19 +83,34 @@ Coverage reports are: View the coverage report locally by opening `coverage/index.html` in your browser. -## Releasing +## Packaging the legacy `transloadit` package -Only maintainers can make releases. Releases to [npm](https://www.npmjs.com) are automated using GitHub actions. To make a release, perform the following steps: +The `packages/transloadit` folder is a generated legacy wrapper. The `src` directory and top-level `README.md`, `CHANGELOG.md`, and `LICENSE` are produced during packing by `scripts/prepare-transloadit.ts` and are not tracked in git. If you need to validate the legacy package contents, run: -1. Update `CHANGELOG.md` with a new entry describing the release. And `git add CHANGELOG.md && git commit -m "Update CHANGELOG.md"`. -2. Update the version using npm. This will update the version in the `package.json` file and create a git tag. E.g.: +```sh +yarn pack +``` -- `npm version patch` -- OR, for pre-releases: `npm version prerelease` +## Releasing -3. Push the tag to GitHub: `git push origin main --tags` -4. If the tests pass, GitHub actions will now publish the new version to npm. +Only maintainers can make releases. Releases to [npm](https://www.npmjs.com) are automated using GitHub actions and Changesets (including the legacy `transloadit` package). To make a release, perform the following steps: + +1. Create a changeset: + - `yarn changeset` +2. Version packages (updates `CHANGELOG.md` + workspace `package.json` files): + - `yarn changeset version` + - `git add -A && git commit -m "chore: version packages"` +3. Push the version commit and tags: + - `git push origin main` +4. Publish (maintainers only; GitHub Actions handles the release): + - `yarn changeset publish` 5. When successful add [release notes](https://github.com/transloadit/node-sdk/releases). -6. If this was a pre-release, remember to run this to reset the [npm `latest` tag](https://www.npmjs.com/package/transloadit?activeTab=versions) to the previous version (replace `x.y.z` with previous version): +6. Scoped packages publish with the `experimental` dist-tag by default. If you need to promote a scoped package to `latest`, update the tag manually. +7. If this was a pre-release, remember to reset the [npm `latest` tag](https://www.npmjs.com/package/transloadit?activeTab=versions) to the previous version (replace `x.y.z` with previous version): + - `npm dist-tag add transloadit@X.Y.Z latest` + +### Release FAQ -- `npm dist-tag add transloadit@X.Y.Z latest` +- **Lockstep versions:** Changesets use a fixed group, so version bumps and releases are always in lock‑step across `transloadit`, `@transloadit/node`, `@transloadit/types`, and `@transloadit/zod`. +- **Legacy parity:** `transloadit` is generated from `@transloadit/node` artifacts via `scripts/prepare-transloadit.ts`, then verified with `yarn parity:transloadit`. Only `package.json` metadata drift is allowed; any other drift fails. +- **Experimental packages:** Scoped packages (`@transloadit/node`, `@transloadit/types`, `@transloadit/zod`) publish with the `experimental` dist-tag. The unscoped `transloadit` package remains stable. diff --git a/biome.json b/biome.json index aef24a02..04c6f1f3 100644 --- a/biome.json +++ b/biome.json @@ -1,5 +1,5 @@ { - "$schema": "https://biomejs.dev/schemas/2.2.4/schema.json", + "$schema": "https://biomejs.dev/schemas/2.3.11/schema.json", "vcs": { "enabled": true, "clientKind": "git", "useIgnoreFile": true }, "files": { "ignoreUnknown": false, @@ -7,10 +7,13 @@ "**", "!package.json", "!coverage", + "!**/coverage", "!dist", "!fixture", "!.vscode", - "!src/alphalib" + "!packages/**/dist", + "!packages/**/node_modules", + "!packages/node/src/alphalib" ] }, "formatter": { @@ -93,6 +96,10 @@ "actions": { "source": { "organizeImports": "on" } } }, "overrides": [ + { + "includes": ["**/package.json"], + "formatter": { "expand": "always" } + }, { "includes": ["*.html"], "javascript": { "formatter": { "quoteStyle": "double" } } diff --git a/docs/fingerprint/transloadit-after.json b/docs/fingerprint/transloadit-after.json new file mode 100644 index 00000000..cca93ce0 --- /dev/null +++ b/docs/fingerprint/transloadit-after.json @@ -0,0 +1,2985 @@ +{ + "packageDir": "/home/kvz/code/node-sdk/packages/transloadit", + "tarball": { + "filename": "transloadit-4.1.2.tgz", + "sizeBytes": 1110470, + "sha256": "61a25c361b18372e0e590cf3195c617ae88966e53b3217acc88e1680493cad9f" + }, + "packageJson": { + "name": "transloadit", + "version": "4.1.2", + "main": "./dist/Transloadit.js", + "exports": { + ".": "./dist/Transloadit.js", + "./package.json": "./package.json" + }, + "files": ["dist", "src"] + }, + "files": [ + { + "path": "LICENSE", + "sizeBytes": 1081, + "sha256": "f2ef2628f6aafeca9a1b1230f13c21670af294088cb42d39fb764f8e5d569146" + }, + { + "path": "dist/alphalib/types/robots/_index.js", + "sizeBytes": 27976, + "sha256": "a78ae27fbae9d86e5b49d218a3685fac031cf2f6a6ccae372176f74e73d4af93" + }, + { + "path": "dist/alphalib/types/robots/_instructions-primitives.js", + "sizeBytes": 59552, + "sha256": "a9cb9b01c80fdb77fe5e8874ff58ade6447a725f2012c825ca87d2aaef5a339f" + }, + { + "path": "dist/alphalib/types/robots/ai-chat.js", + "sizeBytes": 9161, + "sha256": "3b750f7fa1d29200895f5b5b789326570fb85c1b65e51bc49bdeee73707dd3e0" + }, + { + "path": "dist/ApiError.js", + "sizeBytes": 1142, + "sha256": "04195425a4e243b510c7532ab81715fab616b626792c78d34cdacfd01b5e001e" + }, + { + "path": "dist/apiTypes.js", + "sizeBytes": 212, + "sha256": "b4f636535a1697010c34d7c2eca37ee2a0646441e3482174a83076a230031f47" + }, + { + "path": "dist/cli/commands/assemblies.js", + "sizeBytes": 41382, + "sha256": "5cf7b811de94982c89bcd5746dd2a25bf3fde22c78a2afb0c738b28de6a42031" + }, + { + "path": "dist/alphalib/types/assembliesGet.js", + "sizeBytes": 1454, + "sha256": "9e597e5a7b157453d64e4076d5eaa3e14af04e0a527faa7fee82e66252524d57" + }, + { + "path": "dist/alphalib/types/robots/assembly-savejson.js", + "sizeBytes": 829, + "sha256": "d5c6fae674126937d25d9f52ec84045c6a90c7c6f33a5b6a0adc96dfa8c94f83" + }, + { + "path": "dist/alphalib/types/assemblyReplay.js", + "sizeBytes": 708, + "sha256": "678ac3ccb4b3d4cfc239bc82315fecf3b6c0ab9830c4262af53094521efe49cd" + }, + { + "path": "dist/alphalib/types/assemblyReplayNotification.js", + "sizeBytes": 648, + "sha256": "99fc21decd44147f9800078b5f2030a5f4572eb939ad0d130e3d1b59aa919e74" + }, + { + "path": "dist/alphalib/types/assemblyStatus.js", + "sizeBytes": 28396, + "sha256": "4466ef1c9ed54e8955cae08480cd7f69d257b92965fa25a32402f1838929e075" + }, + { + "path": "dist/alphalib/types/robots/audio-artwork.js", + "sizeBytes": 3103, + "sha256": "76757ca647e388f1f25b9958d90eee491329ac055e69cc0d44f34f5588e01c32" + }, + { + "path": "dist/alphalib/types/robots/audio-concat.js", + "sizeBytes": 5014, + "sha256": "115fd94cccdb0a79e92b9c6bd0876c8c744d4c9abeba370cf2be6d9ca2e8ac1a" + }, + { + "path": "dist/alphalib/types/robots/audio-encode.js", + "sizeBytes": 2726, + "sha256": "c140e1b162b20e637ea71b3b6448dd4cd12ac7f1f1eb77d9d362458aabda4890" + }, + { + "path": "dist/alphalib/types/robots/audio-loop.js", + "sizeBytes": 2965, + "sha256": "dbe253c901dc7237b4641e5a915a4762b8e06406a5f1472d824ae3aa127e7cdc" + }, + { + "path": "dist/alphalib/types/robots/audio-merge.js", + "sizeBytes": 4445, + "sha256": "afe42b1aeeb4ae4521bdae2f9b66389c3e51a3be31ed6fef5444bf63e661094f" + }, + { + "path": "dist/alphalib/types/robots/audio-waveform.js", + "sizeBytes": 8845, + "sha256": "7303f23c4b4076e6c4df63b591ee5cd3eeef2eb704e6f5f5b09650bacf111c5e" + }, + { + "path": "dist/cli/commands/auth.js", + "sizeBytes": 10038, + "sha256": "58f10fbe648d8a655ececd76da07bfed67b9d737e879ca412f167988a1c164f2" + }, + { + "path": "dist/alphalib/types/robots/azure-import.js", + "sizeBytes": 3151, + "sha256": "6910a81f6a49a8d066f115fe5c01ca858544f1be5e873d69b4005eed8ff149dd" + }, + { + "path": "dist/alphalib/types/robots/azure-store.js", + "sizeBytes": 4221, + "sha256": "f172a4b516cee0ffa08ae7be418062269e1acb38a897758eb53af0ca6d75e6b7" + }, + { + "path": "dist/alphalib/types/robots/backblaze-import.js", + "sizeBytes": 3793, + "sha256": "d485074d56b7ad715a6bafcb24d325ddd82161375777624c2a051605dd08edbc" + }, + { + "path": "dist/alphalib/types/robots/backblaze-store.js", + "sizeBytes": 3067, + "sha256": "894476eb386dab764c1bcf6b432da7fa193181f4206523b1cefac17676fbef1c" + }, + { + "path": "dist/cli/commands/BaseCommand.js", + "sizeBytes": 1895, + "sha256": "1141a59a8ec2f47f6e5d4257b81e44fad8f50d693d1d22d6a0d6a2a08b5f8792" + }, + { + "path": "dist/alphalib/types/bill.js", + "sizeBytes": 223, + "sha256": "3dc47a7b3e5c570bf7ace002fe9438174b553118eee9ff95b5a9170d4c5d904f" + }, + { + "path": "dist/cli/commands/bills.js", + "sizeBytes": 2328, + "sha256": "fee6e43bf67ac5c5b2187300fde17c075e0ffc83a13b04d6485649ce23bd61e3" + }, + { + "path": "dist/cli.js", + "sizeBytes": 1147, + "sha256": "4d52d0cea6f64abe67fd99d9bdf14dee38a51ee9c366eb45f110f38ab008f4dd" + }, + { + "path": "dist/alphalib/types/robots/cloudfiles-import.js", + "sizeBytes": 3721, + "sha256": "e567b21d596f55897ac665f9381eeaae446bbd8b8d0194fe78eced661f90ee7d" + }, + { + "path": "dist/alphalib/types/robots/cloudfiles-store.js", + "sizeBytes": 2774, + "sha256": "4e62566a3bd5f3c721530756d69ffbdebe0f8068c481adc0cab0f89e045bfc98" + }, + { + "path": "dist/alphalib/types/robots/cloudflare-import.js", + "sizeBytes": 4080, + "sha256": "e9c54853a785a5c00c8f505e22f3f945cd916e4cc2ed86fa48df5a7615ceb6ee" + }, + { + "path": "dist/alphalib/types/robots/cloudflare-store.js", + "sizeBytes": 3732, + "sha256": "20620755e2983692110364ca87c5c2a33c682cf5bd0c4f2605fb7778aba0c269" + }, + { + "path": "dist/alphalib/types/robots/digitalocean-import.js", + "sizeBytes": 3732, + "sha256": "27446736ec4af2ed0cbc591d06c54d5ea267463dfdc966293412260fc9d209bc" + }, + { + "path": "dist/alphalib/types/robots/digitalocean-store.js", + "sizeBytes": 3911, + "sha256": "614596c4ce9011844b648692fe95579a630b81c47cf153a35bf5895daddb6930" + }, + { + "path": "dist/alphalib/types/robots/document-autorotate.js", + "sizeBytes": 1855, + "sha256": "f6b173cb57244a55a8b8664e995c4a6ed4fb24496acbbd88b72e236f935747aa" + }, + { + "path": "dist/alphalib/types/robots/document-convert.js", + "sizeBytes": 9264, + "sha256": "48fa4fcf88072fd2b0d5f77efe762fee2a1592696c16b715876856480dffb205" + }, + { + "path": "dist/alphalib/types/robots/document-merge.js", + "sizeBytes": 3113, + "sha256": "48c65c895d8d70c624a1a0485ed2d1330970644ffc253968fbeb1aa7e452dea3" + }, + { + "path": "dist/alphalib/types/robots/document-ocr.js", + "sizeBytes": 4580, + "sha256": "b9210e80eeebdcec9637eabe101d0bf60705b52c62241ad5b8363fd270ace5a3" + }, + { + "path": "dist/alphalib/types/robots/document-split.js", + "sizeBytes": 2052, + "sha256": "1cc694f4eb281b7ea81b3bd13e503d082d510cd7a709d312cd5e6345094e1e1b" + }, + { + "path": "dist/alphalib/types/robots/document-thumbs.js", + "sizeBytes": 9164, + "sha256": "b9b3bee876448a5994fa07b72c503c265ec0c424b720366c3e3f1f458e51106a" + }, + { + "path": "dist/alphalib/types/robots/dropbox-import.js", + "sizeBytes": 2739, + "sha256": "601c199b71199df3b6555751beb56a360601d811a8a101482abeb132dde7ce62" + }, + { + "path": "dist/alphalib/types/robots/dropbox-store.js", + "sizeBytes": 2641, + "sha256": "6cdd30c2c056d0088bada2d9291f161f4586098acdbc1f0b281a122190360287" + }, + { + "path": "dist/alphalib/types/robots/edgly-deliver.js", + "sizeBytes": 1993, + "sha256": "268fedb80d76c3a8406f6ea79ee453ce1b821dc9bdc2bc92977e429aeca9bcc2" + }, + { + "path": "dist/alphalib/types/robots/file-compress.js", + "sizeBytes": 6014, + "sha256": "2ae785374900612d9812ff336cb5de575dd9a3cfe7c07c79c92397f5b58ad8db" + }, + { + "path": "dist/alphalib/types/robots/file-decompress.js", + "sizeBytes": 3815, + "sha256": "ffb6ea41fcb598c2d9ac0931f0eb3a3327ceb78cd76b7975ecb61a797ed48726" + }, + { + "path": "dist/alphalib/types/robots/file-filter.js", + "sizeBytes": 6060, + "sha256": "7a2e6c361c4e23a1357d9771b0b4c953ccebcc0d1ead5f7783afa3042cf2f919" + }, + { + "path": "dist/alphalib/types/robots/file-hash.js", + "sizeBytes": 2160, + "sha256": "da50b20968ed9a1382b6798674d0d09170ddd27ecafba053c8f0cebd3959968c" + }, + { + "path": "dist/alphalib/types/robots/file-preview.js", + "sizeBytes": 12783, + "sha256": "167e45afe25e777baedeeff632cf90d394529a8c6fec6a891619b56257c26333" + }, + { + "path": "dist/alphalib/types/robots/file-read.js", + "sizeBytes": 1794, + "sha256": "990503f1b1c09b3de0220ed00539cc8b3bf8d01bb7b8a8f2da83c3d2f0d20981" + }, + { + "path": "dist/alphalib/types/robots/file-serve.js", + "sizeBytes": 5843, + "sha256": "1da5e06b7a0df96856d6e4f5eee1738f22d9df80a1f8634e0ddf5b0146e6a7ac" + }, + { + "path": "dist/alphalib/types/robots/file-verify.js", + "sizeBytes": 3481, + "sha256": "7400f95c002a9709a3815d1bd6ce7fe929821eb97178e4a2b9ddf66f6ebe827b" + }, + { + "path": "dist/alphalib/types/robots/file-virusscan.js", + "sizeBytes": 3859, + "sha256": "d47518d1d345ace571c9eaaad3e15b49ab4267fd7fb7dfed3d3c9539a4cffca9" + }, + { + "path": "dist/alphalib/types/robots/file-watermark.js", + "sizeBytes": 1228, + "sha256": "474e8f93000f842761a1cebe9282c17eeba8c809f1d8ef25db026796edacbf89" + }, + { + "path": "dist/alphalib/types/robots/ftp-import.js", + "sizeBytes": 2406, + "sha256": "ed845f664e1ae7ab2cf8bf3c061f294f0926bb8889935afefa38e056f98e6526" + }, + { + "path": "dist/alphalib/types/robots/ftp-store.js", + "sizeBytes": 3534, + "sha256": "c4bd648bb097acadbc349406192105367b9d94c516700b99c9f4d7a4b6c7a6f0" + }, + { + "path": "dist/alphalib/types/robots/google-import.js", + "sizeBytes": 3748, + "sha256": "0688e2f84f217ae26b187916b93c6e4f32539c0fc84b6cb162ea2230cd81ae27" + }, + { + "path": "dist/alphalib/types/robots/google-store.js", + "sizeBytes": 5495, + "sha256": "c35a94120a06d17559df3ddf18a18a7d6a89a858ff4cdff4c12a6a3d1dec17ed" + }, + { + "path": "dist/cli/helpers.js", + "sizeBytes": 1239, + "sha256": "3d5c40d5c39207a606a545b1492ab53ebdfbe1592cb66e0b1493de870bbdb6af" + }, + { + "path": "dist/alphalib/types/robots/html-convert.js", + "sizeBytes": 5294, + "sha256": "17c47da30d42ce1209bcb0c53dddc14c119a6c202ae8f0f27afaaf0927a2c72c" + }, + { + "path": "dist/alphalib/types/robots/http-import.js", + "sizeBytes": 5758, + "sha256": "6257ae9fa7e6c9ef61cfd9be9b9f807da82caeaabf7bfb381da61948376a36ee" + }, + { + "path": "dist/alphalib/types/robots/image-bgremove.js", + "sizeBytes": 2515, + "sha256": "0016427ea42441dfba53c65ece6a30586456b14818dafc48d8f025ff910697c2" + }, + { + "path": "dist/alphalib/types/robots/image-describe.js", + "sizeBytes": 4568, + "sha256": "8f1f5d50e461b9ec9f223fa894e278a2fb8198823fbdd8a8cae6ef7bfd50ff5d" + }, + { + "path": "dist/alphalib/types/robots/image-facedetect.js", + "sizeBytes": 6408, + "sha256": "b8b19422756cfe35d038bccd7167fcaee1935932df441de68d9d16598a6c3141" + }, + { + "path": "dist/alphalib/types/robots/image-generate.js", + "sizeBytes": 2681, + "sha256": "85713e4db98b326fca7530d3f50f8fea2acc3bb56c10582f63cb85bc3ceaadf6" + }, + { + "path": "dist/alphalib/types/robots/image-merge.js", + "sizeBytes": 3712, + "sha256": "23c06084dfe66c3ebdbf11f7c93de2e928112814507987902520e0695d2fe6a5" + }, + { + "path": "dist/alphalib/types/robots/image-ocr.js", + "sizeBytes": 4316, + "sha256": "fe040da6c69082e831c8897389f2c32b13f488714ae0d9e97685865176c6ddce" + }, + { + "path": "dist/alphalib/types/robots/image-optimize.js", + "sizeBytes": 4187, + "sha256": "d9d455acad58e028da5c948b735025943ee07b112338c3b66933ed0ff4db9e54" + }, + { + "path": "dist/alphalib/types/robots/image-resize.js", + "sizeBytes": 27934, + "sha256": "7683dca61e77618aad347431b7693fac282d208526dde351ba86387a53c962f4" + }, + { + "path": "dist/InconsistentResponseError.js", + "sizeBytes": 158, + "sha256": "ed9fa27d9022fa08f620bb0f94cc17222c35301dd9bda8bfc59db669c9262ada" + }, + { + "path": "dist/cli/commands/index.js", + "sizeBytes": 1730, + "sha256": "f9b0afff030bd07795df879b5bf78d75ede571973a6a671803c7551b6c3e87c9" + }, + { + "path": "dist/alphalib/mcache.js", + "sizeBytes": 4515, + "sha256": "abcc5fb21d05f7c04bb7c454bdbce15c25f7d4fec03b901291bc8b2925e95d16" + }, + { + "path": "dist/alphalib/types/robots/meta-read.js", + "sizeBytes": 1119, + "sha256": "94bd6bb2e45f20009fffbf2d0395ac702ac4295c1b7e5088ae7cb12e1bdaeb5e" + }, + { + "path": "dist/alphalib/types/robots/meta-write.js", + "sizeBytes": 2446, + "sha256": "5bb3b6372ca87e8a18aa0a3c41a50f7cee87cafdca8e95a885b4de83dbf4611a" + }, + { + "path": "dist/alphalib/types/robots/minio-import.js", + "sizeBytes": 3985, + "sha256": "053ed2a56f66ceb50e780cf4478a6a66c1e2503d0f0f295252beeaaa8a06e1b1" + }, + { + "path": "dist/alphalib/types/robots/minio-store.js", + "sizeBytes": 3504, + "sha256": "6194fc2e78f65aa48c1d5c85d7c9a488e501436f8ef6758077aaa0da8bc44185" + }, + { + "path": "dist/alphalib/lib/nativeGlobby.js", + "sizeBytes": 6315, + "sha256": "33e19cc01c00058e2c46866a7dddc29769edffaab132f412d671f6f52a4be380" + }, + { + "path": "dist/cli/commands/notifications.js", + "sizeBytes": 1640, + "sha256": "5a419d28577d2952f32282ff0227ffa2cfbec6f4c3a48a6974b5485453297e44" + }, + { + "path": "dist/cli/OutputCtl.js", + "sizeBytes": 2838, + "sha256": "ccd55e24ca9b05134aeb5051b2b17a9b1dc181bff73b875f63ccde8071564630" + }, + { + "path": "dist/PaginationStream.js", + "sizeBytes": 1049, + "sha256": "955003e8e346cb275a55989da117fc99d7fb17ad2f2282e02b1940c6b3fceb85" + }, + { + "path": "dist/PollingTimeoutError.js", + "sizeBytes": 172, + "sha256": "bef858dea74a3ac0a03e6d595e6276d63fe272f9cb601d3101eeec8723ebb48a" + }, + { + "path": "dist/alphalib/types/robots/progress-simulate.js", + "sizeBytes": 935, + "sha256": "e01935073eab55214d9e37fa2d25e5615368efb8e9e2aedfa7a765e0d6e2bd84" + }, + { + "path": "dist/alphalib/types/robots/s3-import.js", + "sizeBytes": 8446, + "sha256": "d2abd1d554916505892242fb68b64bcc29350963f97808ccd57e047f487bb00a" + }, + { + "path": "dist/alphalib/types/robots/s3-store.js", + "sizeBytes": 9698, + "sha256": "7ac1cebb40a5959581740147f7ef1e3d680199a9f9e39a3562e6f818fbc5a0cb" + }, + { + "path": "dist/alphalib/types/robots/script-run.js", + "sizeBytes": 3740, + "sha256": "94f608e168909cf2dbb588d4c9c591921fbc2c13d68e11c51784e08b1588649c" + }, + { + "path": "dist/alphalib/types/robots/sftp-import.js", + "sizeBytes": 2340, + "sha256": "453005b909a864b3a6abf2714232e45aa5f7c08303579454301d3e80f2ad8e97" + }, + { + "path": "dist/alphalib/types/robots/sftp-store.js", + "sizeBytes": 3455, + "sha256": "4c023f0931db25b7d99da7f56828d5d7d2132c6e467ceda0bb764a0ec21d2555" + }, + { + "path": "dist/alphalib/types/robots/speech-transcribe.js", + "sizeBytes": 5236, + "sha256": "e60ffe357e734f4031d64f6574d885f009eedd62b77ab4052318f23a35ef8a4e" + }, + { + "path": "dist/alphalib/types/stackVersions.js", + "sizeBytes": 359, + "sha256": "44173300fc46f06c80f670d5a3a72e403cfcaddd7eb60703bc057ece42292ece" + }, + { + "path": "dist/alphalib/types/robots/supabase-import.js", + "sizeBytes": 4131, + "sha256": "774aacd11972e02c5f07217c43dc5a5c553c28191c36ea35e1f276019cbe395b" + }, + { + "path": "dist/alphalib/types/robots/supabase-store.js", + "sizeBytes": 3326, + "sha256": "8d0a8f42a2b26ff4db7a4ff9053bebd4ca9c772df64ffff60b8a433e055ffcea" + }, + { + "path": "dist/alphalib/types/robots/swift-import.js", + "sizeBytes": 4025, + "sha256": "96c59605b04963ad242f8f689b20149d07fd9216d936f097e0ee9646f52411f3" + }, + { + "path": "dist/alphalib/types/robots/swift-store.js", + "sizeBytes": 3574, + "sha256": "0d8af15a6f01c57651930e010d9190341d5ca41be81565b5c10549e21406c3c7" + }, + { + "path": "dist/cli/template-last-modified.js", + "sizeBytes": 4183, + "sha256": "26fb01b74d324df74e120cd7640a64d221214879e44dd695903602afbc01ee58" + }, + { + "path": "dist/alphalib/types/template.js", + "sizeBytes": 10452, + "sha256": "b48fbb82af77032c3076c5016410f251759ad295344557215753d931679c0679" + }, + { + "path": "dist/alphalib/types/templateCredential.js", + "sizeBytes": 1423, + "sha256": "02c74c8b94d3514c65c86af727ccf69acf6f3ef1cac184eea35aab75bd0b554f" + }, + { + "path": "dist/cli/commands/templates.js", + "sizeBytes": 15694, + "sha256": "fc2e8b636bf2f3d6c61bca5d11cf54acdf9f2e23d57d608cf282c94e2f9ea984" + }, + { + "path": "dist/alphalib/types/robots/text-speak.js", + "sizeBytes": 4762, + "sha256": "9021afe8eee26c0a33cbaf894e6151bce60073c8d22a40dab0ef8db8ae37223d" + }, + { + "path": "dist/alphalib/types/robots/text-translate.js", + "sizeBytes": 5413, + "sha256": "e6619ba063df5a848d3f80193b7f3fd427d223d8ea6863f144fdf7ffa2cd6643" + }, + { + "path": "dist/alphalib/types/robots/tigris-import.js", + "sizeBytes": 4164, + "sha256": "1329c999c4e31bf4f91aa76b4376b642367e91cbb2da69914166a83cfe05a899" + }, + { + "path": "dist/alphalib/types/robots/tigris-store.js", + "sizeBytes": 3678, + "sha256": "ebba4a6bfdf08283da83254b89baed774aa8080f40f97e93b90c2831b58461dc" + }, + { + "path": "dist/alphalib/types/robots/tlcdn-deliver.js", + "sizeBytes": 1988, + "sha256": "84f79f7a6d04e6330a7c032d609db16748ece8d750ca3f3023eed43a440f4b15" + }, + { + "path": "dist/Transloadit.js", + "sizeBytes": 28131, + "sha256": "8a9f68704b6dfaef019f10a79fbcc967034e6be6787e3f112c2ee480ae1ba5d3" + }, + { + "path": "dist/alphalib/tryCatch.js", + "sizeBytes": 447, + "sha256": "822422b495de06b013adca2c952371b85c5ce27f05058112384eec0781d7b80b" + }, + { + "path": "dist/alphalib/types/robots/tus-store.js", + "sizeBytes": 4596, + "sha256": "b845028fc26a96ba0509b0f8dc2444bed647144ad2415d167bd495df84d3217b" + }, + { + "path": "dist/tus.js", + "sizeBytes": 5058, + "sha256": "1f287a9083e9264f509833a1193f8cf4fae161cfa6d126ac3f81849f05ca3bc9" + }, + { + "path": "dist/cli/types.js", + "sizeBytes": 1433, + "sha256": "26181f39ef63756230a5ce4a3746b745e07949246d1ec72306f9960207f8bdeb" + }, + { + "path": "dist/alphalib/types/robots/upload-handle.js", + "sizeBytes": 2710, + "sha256": "0da0cf7c28a54af82ac125af0129f885b111b9e48cd64c477865d5438e29974d" + }, + { + "path": "dist/alphalib/types/robots/video-adaptive.js", + "sizeBytes": 6059, + "sha256": "6f2630b0d877d9c3ec398535231ef25cb31d3916e4613eb4b406cba8bc334613" + }, + { + "path": "dist/alphalib/types/robots/video-concat.js", + "sizeBytes": 4707, + "sha256": "fa977c68900d0417506fabc3a2b15dd96571374da707e0f79cfd48e9612e82b9" + }, + { + "path": "dist/alphalib/types/robots/video-encode.js", + "sizeBytes": 4357, + "sha256": "39dc586629c3715b6b9d8534477b79f82d790b052979d09cdd942ea9767f93a2" + }, + { + "path": "dist/alphalib/types/robots/video-merge.js", + "sizeBytes": 5568, + "sha256": "eb7b72fe71fa99aabcd6d83b24f836f1642447d6b8f2d42126698a1b3ee22669" + }, + { + "path": "dist/alphalib/types/robots/video-ondemand.js", + "sizeBytes": 4856, + "sha256": "b3a449cba726f0256be971a52f445f4319b6fe98300782bfae82417f4c910701" + }, + { + "path": "dist/alphalib/types/robots/video-subtitle.js", + "sizeBytes": 4789, + "sha256": "154d14545e5ea067928b4310e904f4c3ebab0be18f2e57fa4afbe252df679063" + }, + { + "path": "dist/alphalib/types/robots/video-thumbs.js", + "sizeBytes": 5469, + "sha256": "f25a86957a6a6a8a0eadd4e5db493405528c0d3aedb4576ddef9d0b0bc1394d3" + }, + { + "path": "dist/alphalib/types/robots/vimeo-import.js", + "sizeBytes": 3486, + "sha256": "7877ea6f6f225d50cb3767c5dd9efa67a08f867ca13ea534939682fc1a65c109" + }, + { + "path": "dist/alphalib/types/robots/vimeo-store.js", + "sizeBytes": 4410, + "sha256": "68f6b9618c990bc00f822a0e61f87ac8972ea0ebb2f795a13f2dd0f5b9e39a4d" + }, + { + "path": "dist/alphalib/types/robots/wasabi-import.js", + "sizeBytes": 4149, + "sha256": "f0886f787e0b56a07bed3abdb6e9e1b142bbc9f6d422ad060426e7f343329cb8" + }, + { + "path": "dist/alphalib/types/robots/wasabi-store.js", + "sizeBytes": 3524, + "sha256": "59f53885f81e1ca96733076d59492b4ea16e090185f98a02f1182d57ceb71930" + }, + { + "path": "dist/alphalib/types/robots/youtube-store.js", + "sizeBytes": 4838, + "sha256": "cc711980ff82e0050c63b28e04714c82b38856d785ac5f9b08eefa89f4a1bd15" + }, + { + "path": "dist/alphalib/zodParseWithContext.js", + "sizeBytes": 13900, + "sha256": "95686fd259cf628f479d483dff11edf5ec4bceb75f9780e079fa2444948260fe" + }, + { + "path": "package.json", + "sizeBytes": 2601, + "sha256": "18cd60ab2fb8dd2a146181d9b0965e40e42a4ee1ffa9100f812bff85bd88a185" + }, + { + "path": "dist/alphalib/types/robots/_index.d.ts.map", + "sizeBytes": 83925, + "sha256": "4a58b2d2526d61cf04de1f64cd577281c16010c6c209bf03e2c9472d78e17ca1" + }, + { + "path": "dist/alphalib/types/robots/_index.js.map", + "sizeBytes": 10505, + "sha256": "0a08c1185a523b944b5beed2f8d4148ead599a31bae1233e7a4fe38f9678fc84" + }, + { + "path": "dist/alphalib/types/robots/_instructions-primitives.d.ts.map", + "sizeBytes": 10500, + "sha256": "ca5baf2a027f31493bb771f8bbdd9e7986ef3b5ad28013316c2fa0fedcce1eca" + }, + { + "path": "dist/alphalib/types/robots/_instructions-primitives.js.map", + "sizeBytes": 36172, + "sha256": "3436569bb5194b67b6f7606f4c7225aae7abf35285d4beab3196ed2ff7e30790" + }, + { + "path": "dist/alphalib/types/robots/ai-chat.d.ts.map", + "sizeBytes": 3190, + "sha256": "6921ce50d888101af8bd473fa0c52780df529fba30531295810ec191267a47f9" + }, + { + "path": "dist/alphalib/types/robots/ai-chat.js.map", + "sizeBytes": 7431, + "sha256": "38d154af5baea41967ac69fa5fa725189006ff7afcaaf098cde2178fb340e9c2" + }, + { + "path": "dist/ApiError.d.ts.map", + "sizeBytes": 669, + "sha256": "0f8015ffaa115fe02d3877267c7e236c3ad8b98c2e7bf9f5a66a389464ecdc62" + }, + { + "path": "dist/ApiError.js.map", + "sizeBytes": 1182, + "sha256": "b14ea886615cd781bf6d852ad60154339e06aa8541d70c1a352115807ea8af52" + }, + { + "path": "dist/apiTypes.d.ts.map", + "sizeBytes": 3499, + "sha256": "afccc6e3b08e1a87a42a680ffa1439d4cf0e883a1ebc3b19832b2f25db939987" + }, + { + "path": "dist/apiTypes.js.map", + "sizeBytes": 210, + "sha256": "74dee10f68f3060119affdbe0db6d1ad4cdc8a75b9345bc7107e071da1d69010" + }, + { + "path": "dist/cli/commands/assemblies.d.ts.map", + "sizeBytes": 3081, + "sha256": "3fbad0cc1518bfc5daa6aa1ac0ae071d9ee6d7559b655f1fdc03af4a6fc2b459" + }, + { + "path": "dist/cli/commands/assemblies.js.map", + "sizeBytes": 37213, + "sha256": "81900715bbe8def1da2bbaec42f51b311a083e7382daab88a3f4a899998cf4e9" + }, + { + "path": "dist/alphalib/types/assembliesGet.d.ts.map", + "sizeBytes": 263, + "sha256": "df2b0c48f851d217f2c2d31c8eb287c5eef4864eacaa0850fd3ac340a632487b" + }, + { + "path": "dist/alphalib/types/assembliesGet.js.map", + "sizeBytes": 961, + "sha256": "5295095d35108254c8b002333cf3d4d82d7d64d19be93fad049358ab1e78f217" + }, + { + "path": "dist/alphalib/types/robots/assembly-savejson.d.ts.map", + "sizeBytes": 573, + "sha256": "11ae78232682c6feb764982cb9c5166dd9660bad8f1fbfa26e9884a54daa2a66" + }, + { + "path": "dist/alphalib/types/robots/assembly-savejson.js.map", + "sizeBytes": 701, + "sha256": "1410553d8a5f26d188bb58de38ce04123e63f2d5d749bbfd0fe6495d84dd0078" + }, + { + "path": "dist/alphalib/types/assemblyReplay.d.ts.map", + "sizeBytes": 8129, + "sha256": "ac663fe8af49ddf31ac35347b4f1052c5234b98fb206fc7314cb18669fa4e0d5" + }, + { + "path": "dist/alphalib/types/assemblyReplay.js.map", + "sizeBytes": 612, + "sha256": "e3515c0e8c7af60e5655c8e8befc9d9456f0951c5db08b9fdbdc2753198a0719" + }, + { + "path": "dist/alphalib/types/assemblyReplayNotification.d.ts.map", + "sizeBytes": 8144, + "sha256": "aafb363bad7c9ae2ec4a94a79073be7b80f4e81ef7efe73e0e5b1ed11e853399" + }, + { + "path": "dist/alphalib/types/assemblyReplayNotification.js.map", + "sizeBytes": 477, + "sha256": "912872cd7b257168bb487687c7ca898633269f43849a8c36ac25629002604452" + }, + { + "path": "dist/alphalib/types/assemblyStatus.d.ts.map", + "sizeBytes": 73453, + "sha256": "51782d698296dcc8a71e651ab5c562b5a6939fc83fadf70538ddf0a6fda22532" + }, + { + "path": "dist/alphalib/types/assemblyStatus.js.map", + "sizeBytes": 31739, + "sha256": "d915945fb5cdcae71448b0baa4ad7a6ebd22848f5112858bb326920d8794be42" + }, + { + "path": "dist/alphalib/types/robots/audio-artwork.d.ts.map", + "sizeBytes": 3653, + "sha256": "353a21c0c3103024565abd36aa4767d7b67e04c55916ec2f34993c7aefd01118" + }, + { + "path": "dist/alphalib/types/robots/audio-artwork.js.map", + "sizeBytes": 1835, + "sha256": "8b45f9bcc11be303e408e50c56932d3747bc80c515eaad50fe9b9fc9de32b137" + }, + { + "path": "dist/alphalib/types/robots/audio-concat.d.ts.map", + "sizeBytes": 3700, + "sha256": "11a6b27a252899506dd9a75539c82cc65a94ad95057187cb7d60fd27dcbfd1b8" + }, + { + "path": "dist/alphalib/types/robots/audio-concat.js.map", + "sizeBytes": 2368, + "sha256": "cf43600aa6b1131695f23728291f4550688701f5aad2430631004c4b982a0df0" + }, + { + "path": "dist/alphalib/types/robots/audio-encode.d.ts.map", + "sizeBytes": 3648, + "sha256": "00bcc0475f9cd159b74fabff5ef5a9ec8659929d49dc01f660aa2214e6980c81" + }, + { + "path": "dist/alphalib/types/robots/audio-encode.js.map", + "sizeBytes": 1853, + "sha256": "170083f1b2e97951fe027d364d0508fb9be83f199e755f6c2dba565575b85866" + }, + { + "path": "dist/alphalib/types/robots/audio-loop.d.ts.map", + "sizeBytes": 3658, + "sha256": "506a308f01cfd07b72266b26c4ca70d439135e5333368273612fff8501061237" + }, + { + "path": "dist/alphalib/types/robots/audio-loop.js.map", + "sizeBytes": 1859, + "sha256": "e3c8723e8e8a6456269c5aa19f041beb95eecfb7077bebab05228fa42a0b01ef" + }, + { + "path": "dist/alphalib/types/robots/audio-merge.d.ts.map", + "sizeBytes": 3713, + "sha256": "200ce1e8d4be67a04522707ccb648b918f465f47cea81d253e282a3959d51bb4" + }, + { + "path": "dist/alphalib/types/robots/audio-merge.js.map", + "sizeBytes": 2434, + "sha256": "72aa8bf105e43533deb5a5f3aa3e7865120d9e1b0b92b1f0e7f1f5733be2b0bd" + }, + { + "path": "dist/alphalib/types/robots/audio-waveform.d.ts.map", + "sizeBytes": 3950, + "sha256": "8d1bc9e02a68d4d18d07a8fe5d55c9d1f8bcb5c61978b677deb0fb32f6ddd562" + }, + { + "path": "dist/alphalib/types/robots/audio-waveform.js.map", + "sizeBytes": 4691, + "sha256": "ef7f6f12ae396db830f8c92314712cfd958697a711a26725f6b2281019b7e170" + }, + { + "path": "dist/cli/commands/auth.d.ts.map", + "sizeBytes": 749, + "sha256": "a8fc5875ca97a6dbdb65b7830479c4c4cd9f5949fe4a8c95106700705439e966" + }, + { + "path": "dist/cli/commands/auth.js.map", + "sizeBytes": 9049, + "sha256": "2b239bbfbe26870ca1fb542220842283a0b391267cedbecf298fff39bc8e0da1" + }, + { + "path": "dist/alphalib/types/robots/azure-import.d.ts.map", + "sizeBytes": 994, + "sha256": "f176be84e91088b839e5769a7a249eb0f25ebcb67fde7db712997f46c2c32bd5" + }, + { + "path": "dist/alphalib/types/robots/azure-import.js.map", + "sizeBytes": 1772, + "sha256": "1a699e6491c85a6cea6a6dfd2de985fa5a5b2aef4fb99f92093dab8085c193eb" + }, + { + "path": "dist/alphalib/types/robots/azure-store.d.ts.map", + "sizeBytes": 1344, + "sha256": "24846cd482aa230e9c961d7032bdf5e3e02c21139ad6d4454c46d1dfa9acc94b" + }, + { + "path": "dist/alphalib/types/robots/azure-store.js.map", + "sizeBytes": 2407, + "sha256": "58b0f3158aca067ae6e398a5f4a37935907ce2916ac15e172dcef0ead8d9afcb" + }, + { + "path": "dist/alphalib/types/robots/backblaze-import.d.ts.map", + "sizeBytes": 1003, + "sha256": "c22ab6d436286cb3e0ba6fc739efe5e9a4c9fc073f3d7dc483c8cf2876f5e819" + }, + { + "path": "dist/alphalib/types/robots/backblaze-import.js.map", + "sizeBytes": 1838, + "sha256": "5328598e0fdf883487259800873e9155ebbe3458b5e13eb35247519a9f258e95" + }, + { + "path": "dist/alphalib/types/robots/backblaze-store.d.ts.map", + "sizeBytes": 1268, + "sha256": "b16532e497d1282929b3d743db600f4463052fdafc7b0c953371c86295efcda8" + }, + { + "path": "dist/alphalib/types/robots/backblaze-store.js.map", + "sizeBytes": 1779, + "sha256": "18a983d205a1a89ba39f80ed3f2f9c0af3c5b0bfbda262b09b0fa5510a82495b" + }, + { + "path": "dist/cli/commands/BaseCommand.d.ts.map", + "sizeBytes": 853, + "sha256": "22f956bf0d909d109be49926c456031c783bafccc688056d1911b7440cdf77c3" + }, + { + "path": "dist/cli/commands/BaseCommand.js.map", + "sizeBytes": 1740, + "sha256": "14ec91bb62f94bc02328d085cf1d6b7541f3e17d10703c39f85df40969cd84eb" + }, + { + "path": "dist/alphalib/types/bill.d.ts.map", + "sizeBytes": 233, + "sha256": "100418a9cbbb497bd3deb4fba29c4bff7cd202c869085f2ac1cd1293d403548a" + }, + { + "path": "dist/alphalib/types/bill.js.map", + "sizeBytes": 308, + "sha256": "6e2138660b44631f62207483c146991bd6e0e010067d85af9109d72f89224953" + }, + { + "path": "dist/cli/commands/bills.d.ts.map", + "sizeBytes": 585, + "sha256": "54258ccf4730a4b0989883ab5a4b67b5deb7e7fba3a25581743a20a9fc8bfa82" + }, + { + "path": "dist/cli/commands/bills.js.map", + "sizeBytes": 2277, + "sha256": "15f2a633092558d16a9026ac829a4458e6ff4e3f4b51f5277c40f9785df82cc0" + }, + { + "path": "dist/cli.d.ts.map", + "sizeBytes": 278, + "sha256": "5e6f1a916256a81fdc3e6678644c191a87bf1bbcb273e0e256a1e04533c045cd" + }, + { + "path": "dist/cli.js.map", + "sizeBytes": 1335, + "sha256": "aa838fe53a894d7c2eca041e15963a3ddb50e3bf127911f472da237aec07ae56" + }, + { + "path": "dist/alphalib/types/robots/cloudfiles-import.d.ts.map", + "sizeBytes": 1029, + "sha256": "0869484ee48ae682859788c6ccad011fcc16dab0854a6d6a727cd13a0cfb0902" + }, + { + "path": "dist/alphalib/types/robots/cloudfiles-import.js.map", + "sizeBytes": 1821, + "sha256": "067afacca012fb1d96267aa96370f459b1d85e75727922874910a5edcc07bc50" + }, + { + "path": "dist/alphalib/types/robots/cloudfiles-store.d.ts.map", + "sizeBytes": 1282, + "sha256": "71887d8900734a6c6bf3964018d0143135d016740daf537ddd2d6546a70dd3d4" + }, + { + "path": "dist/alphalib/types/robots/cloudfiles-store.js.map", + "sizeBytes": 1651, + "sha256": "7631f3c8361b3ed5315a26310954e49fd81db2c5a091954087006ba3efb9053b" + }, + { + "path": "dist/alphalib/types/robots/cloudflare-import.d.ts.map", + "sizeBytes": 1029, + "sha256": "ce4aab1f1c2d1be7f7fadf750582c137edd423c1839fb18581539b548184795f" + }, + { + "path": "dist/alphalib/types/robots/cloudflare-import.js.map", + "sizeBytes": 1839, + "sha256": "cb3a961fbf7e141e32692dcce6f94a5c37cba356f0f27e92b97d5bb4eca04da9" + }, + { + "path": "dist/alphalib/types/robots/cloudflare-store.d.ts.map", + "sizeBytes": 1307, + "sha256": "32f6c9187a32831b74c67f07d415f8e5132f7d7f5be73e3e42985f6bfa9ba7dd" + }, + { + "path": "dist/alphalib/types/robots/cloudflare-store.js.map", + "sizeBytes": 1990, + "sha256": "c62aed0ef67118db1bdf93e63a6159295e2dd818c1ee912a25ce54be09089361" + }, + { + "path": "dist/alphalib/types/robots/digitalocean-import.d.ts.map", + "sizeBytes": 1033, + "sha256": "b4ca8b8b29285f0ded9587aa9f66146d2feef4aa22f4fb04dc505e51074d0989" + }, + { + "path": "dist/alphalib/types/robots/digitalocean-import.js.map", + "sizeBytes": 1825, + "sha256": "a79d68e6246b971ce82c154c3f9d4922d8dc887a2387f369ae46dbc5ba0ce531" + }, + { + "path": "dist/alphalib/types/robots/digitalocean-store.d.ts.map", + "sizeBytes": 1323, + "sha256": "5516c371bf38b3d1e4ea87ee409602c49848c3f9891fb2a67648d61fa83a4829" + }, + { + "path": "dist/alphalib/types/robots/digitalocean-store.js.map", + "sizeBytes": 2110, + "sha256": "03bf0e17cc0b4752df73ccdf82aa4ca27e6f5455448d3b5469fb440649eb88dd" + }, + { + "path": "dist/alphalib/types/robots/document-autorotate.d.ts.map", + "sizeBytes": 1203, + "sha256": "2b806b760baa93da32c9ed78d7bf3ff51a2044d08e80e450a366912d7ad7bba2" + }, + { + "path": "dist/alphalib/types/robots/document-autorotate.js.map", + "sizeBytes": 1362, + "sha256": "1e7adcd6fc7ca833092b64c568d60775e939b70b5382c8fc20ae2dd4bcdc2cfe" + }, + { + "path": "dist/alphalib/types/robots/document-convert.d.ts.map", + "sizeBytes": 1306, + "sha256": "ce5ed754a73b39ad8143b4faef3d4132418bf8ffe09e0a294802834c31ac4b72" + }, + { + "path": "dist/alphalib/types/robots/document-convert.js.map", + "sizeBytes": 3091, + "sha256": "35966b6a021abdebdd4d232b6163c4fc9f951eaf7d5c57c3892da71a0cd26736" + }, + { + "path": "dist/alphalib/types/robots/document-merge.d.ts.map", + "sizeBytes": 1217, + "sha256": "c395a64c42eeae620a4522bb6ecce832f885485fee9ac7210bb7ce6c89be8b28" + }, + { + "path": "dist/alphalib/types/robots/document-merge.js.map", + "sizeBytes": 1738, + "sha256": "a058ab91732d822f8044c61040d69d12bc3903e354f34793b91bd72e6695549c" + }, + { + "path": "dist/alphalib/types/robots/document-ocr.d.ts.map", + "sizeBytes": 1225, + "sha256": "18c3a595151d7ede4e0a308bc61cb17c7f7fb5156ae93992868aea16b0d4f307" + }, + { + "path": "dist/alphalib/types/robots/document-ocr.js.map", + "sizeBytes": 1829, + "sha256": "a7b6169af7fb9b26d919cdab1b4b557f0134c5e6a15c53065e8168fd9dfd37e3" + }, + { + "path": "dist/alphalib/types/robots/document-split.d.ts.map", + "sizeBytes": 1204, + "sha256": "c19d3a5ce5d0d7876c1fdb06ae523cc8544c005f2299e0e38a78edea1148eaca" + }, + { + "path": "dist/alphalib/types/robots/document-split.js.map", + "sizeBytes": 1516, + "sha256": "0755d47cbbf71c6a78d9a858ff7e6602f6da2bf6482bf7e6b0adb6a43c779b05" + }, + { + "path": "dist/alphalib/types/robots/document-thumbs.d.ts.map", + "sizeBytes": 1383, + "sha256": "2243134191a54be4ff5f64897a9c50b6bff40a6d8539ab37e641dee1e78adfd2" + }, + { + "path": "dist/alphalib/types/robots/document-thumbs.js.map", + "sizeBytes": 3582, + "sha256": "18c7fccfe0abf172d679805454b84ef121c88c7daffb0172f6d4a2cf04a728a1" + }, + { + "path": "dist/alphalib/types/robots/dropbox-import.d.ts.map", + "sizeBytes": 931, + "sha256": "0f1b530229aad380249ed2cdced0fc3ba4dea4bb25bbdeba5196d1b25b83ca1f" + }, + { + "path": "dist/alphalib/types/robots/dropbox-import.js.map", + "sizeBytes": 1672, + "sha256": "acd1432e1b99bf224913f5cd9e827ace7949a2fc2f12118a8cd7ab5d635f22c1" + }, + { + "path": "dist/alphalib/types/robots/dropbox-store.d.ts.map", + "sizeBytes": 1304, + "sha256": "2929109a87204cf98b4c5bfd411ac7a764028314d02bbb290d2e4dfe79bf812c" + }, + { + "path": "dist/alphalib/types/robots/dropbox-store.js.map", + "sizeBytes": 1785, + "sha256": "d0f7854dfb91540f64c238ca9bee2a6100b84b1239ea6dfa4601e6308ff7ca7b" + }, + { + "path": "dist/alphalib/types/robots/edgly-deliver.d.ts.map", + "sizeBytes": 885, + "sha256": "8f9200e8e330adeea424d735f663ad757326e3662fdb166a44bad09b3443ee8f" + }, + { + "path": "dist/alphalib/types/robots/edgly-deliver.js.map", + "sizeBytes": 1366, + "sha256": "bf5b2ae88cc181f02afaf1ed026a327b8f1d3b4cec26ee2b87cb63d7dee4f17d" + }, + { + "path": "dist/alphalib/types/robots/file-compress.d.ts.map", + "sizeBytes": 1263, + "sha256": "67e26c961677ec63ae7b838ac54ce4ef92897bb844e32ce28980ba28e1a81593" + }, + { + "path": "dist/alphalib/types/robots/file-compress.js.map", + "sizeBytes": 2246, + "sha256": "6db06343a6a9606037cdd68c8aeec52f9db1d6abf621dac94acfd13186309c71" + }, + { + "path": "dist/alphalib/types/robots/file-decompress.d.ts.map", + "sizeBytes": 1194, + "sha256": "e3167146144669a49864af77a2844095e7a704fe8d6c3d138da2e2482fce4329" + }, + { + "path": "dist/alphalib/types/robots/file-decompress.js.map", + "sizeBytes": 1875, + "sha256": "8b480292b5374d7c2eed61ecb7ba958742b710b466a6ca6f8b3ad00ebb318792" + }, + { + "path": "dist/alphalib/types/robots/file-filter.d.ts.map", + "sizeBytes": 1247, + "sha256": "fbed0076ff28a613a9c4f8b6e5941058729b3aa39c196dccc8af789625d2eea3" + }, + { + "path": "dist/alphalib/types/robots/file-filter.js.map", + "sizeBytes": 2086, + "sha256": "a9bb479e9cc2816253fe182250b0b4fbc337301f361b13b8d632286501c2f377" + }, + { + "path": "dist/alphalib/types/robots/file-hash.d.ts.map", + "sizeBytes": 1193, + "sha256": "e32c94f338be64db833c3a52edebc813aa6cd92d1f03fffb463e0d72bbde941d" + }, + { + "path": "dist/alphalib/types/robots/file-hash.js.map", + "sizeBytes": 1611, + "sha256": "f589e306ee342792017d634feadfeb2b9854286960b0fc328ed8c68f2bf139f5" + }, + { + "path": "dist/alphalib/types/robots/file-preview.d.ts.map", + "sizeBytes": 1707, + "sha256": "bbd206d8489b7015987c19cc9a12a831855192f2f41dc718ef037d3cef144d6c" + }, + { + "path": "dist/alphalib/types/robots/file-preview.js.map", + "sizeBytes": 4716, + "sha256": "739b27deb2eba0c132a99420187415b97d3c5728f2d1d6ef57c934a557c41444" + }, + { + "path": "dist/alphalib/types/robots/file-read.d.ts.map", + "sizeBytes": 1181, + "sha256": "ced5f8c632d33c3f195178a40396cdb52f6ecb7b6bde3ceb4f78f97768727c8b" + }, + { + "path": "dist/alphalib/types/robots/file-read.js.map", + "sizeBytes": 1317, + "sha256": "e5dc39318ed77a5b044fa2d0957065adfb39b6badd98e78906a36dec52b78dd6" + }, + { + "path": "dist/alphalib/types/robots/file-serve.d.ts.map", + "sizeBytes": 1266, + "sha256": "2acd526a0502c1d9c0b8039cfadc6ddf84ca19127ad078898b9886fa53f30aa0" + }, + { + "path": "dist/alphalib/types/robots/file-serve.js.map", + "sizeBytes": 1687, + "sha256": "e553a47bd75cf6b95f70cfa50c64f99b7cfa4da788d0a84040adaf63b80eaa5f" + }, + { + "path": "dist/alphalib/types/robots/file-verify.d.ts.map", + "sizeBytes": 1223, + "sha256": "8e27540fb398c334b003fa1226cc4cca7f276841ab9c09d456effc04dc4f8e60" + }, + { + "path": "dist/alphalib/types/robots/file-verify.js.map", + "sizeBytes": 1788, + "sha256": "3e2b26391ed81f2083247cfc101ef82aeeeb02f69665ce999fddc6bab255d6d7" + }, + { + "path": "dist/alphalib/types/robots/file-virusscan.d.ts.map", + "sizeBytes": 1223, + "sha256": "84e84f34c14bced953ced1d8fd1f10987be49fcf7c6b28f3b0d815ea6d01ba56" + }, + { + "path": "dist/alphalib/types/robots/file-virusscan.js.map", + "sizeBytes": 1915, + "sha256": "220df6a5d0b0e7efcdbde6c62ac1354d81e61a377ce800ced9a33300098d818f" + }, + { + "path": "dist/alphalib/types/robots/file-watermark.d.ts.map", + "sizeBytes": 1203, + "sha256": "abf5b2f9284b433b8925e7f3a99e77781b2959dacdebf6dce4048ea00575e6fb" + }, + { + "path": "dist/alphalib/types/robots/file-watermark.js.map", + "sizeBytes": 1017, + "sha256": "6583f0e6b3a04b39758bc60bbd77383f00715365ac714be95b871ba6797050b9" + }, + { + "path": "dist/alphalib/types/robots/ftp-import.d.ts.map", + "sizeBytes": 976, + "sha256": "921de9063ecf8dfe8054bf4ce597658aefd55b28da6935b1dc22b9de4ab50534" + }, + { + "path": "dist/alphalib/types/robots/ftp-import.js.map", + "sizeBytes": 1632, + "sha256": "717f12442854a116abeceb646f0a0b0d43bddf7d355b1261603e365ee2f75954" + }, + { + "path": "dist/alphalib/types/robots/ftp-store.d.ts.map", + "sizeBytes": 1310, + "sha256": "a74b1c73d55dd9d4c277e173246d268c85f28b3c7ea85fb5b5fa202895affa13" + }, + { + "path": "dist/alphalib/types/robots/ftp-store.js.map", + "sizeBytes": 2145, + "sha256": "ce1bf48c1cc713ae843061cba3c3b119475baa5cb6b62ac4b575e50b297bcf71" + }, + { + "path": "dist/alphalib/types/robots/google-import.d.ts.map", + "sizeBytes": 960, + "sha256": "464452457441bede584276700d4aa2905186df95d7b0e8f853fd276556a3ca73" + }, + { + "path": "dist/alphalib/types/robots/google-import.js.map", + "sizeBytes": 1783, + "sha256": "25f2633e57de13845396a75c6f3e7dd4b59cfd8b7587300b5041dcd3970768f4" + }, + { + "path": "dist/alphalib/types/robots/google-store.d.ts.map", + "sizeBytes": 1260, + "sha256": "05d35ccb12ce96d6b2e5372640a02a2c9f8ff34b9ca0da87197e7174d3402429" + }, + { + "path": "dist/alphalib/types/robots/google-store.js.map", + "sizeBytes": 2233, + "sha256": "40ad8416070e56ba35c23114eea8e5503953f1e00248ecd75796be6bab4404de" + }, + { + "path": "dist/cli/helpers.d.ts.map", + "sizeBytes": 697, + "sha256": "7741da5e1fdb8a1fac23517391b55ef32185134622a06f5b044a31f87424de46" + }, + { + "path": "dist/cli/helpers.js.map", + "sizeBytes": 1656, + "sha256": "061d1985ffefb16813c96520199edb566e65fe0b2113dd8c83fe36116a80a9d0" + }, + { + "path": "dist/alphalib/types/robots/html-convert.d.ts.map", + "sizeBytes": 1315, + "sha256": "16452c1d458edb1c509b118e7de72886a1547100c74d636509b904cea851fb7e" + }, + { + "path": "dist/alphalib/types/robots/html-convert.js.map", + "sizeBytes": 2766, + "sha256": "eacdd8d74271b8273f8356dd343de5953253860859932e8370fec23d99c589b0" + }, + { + "path": "dist/alphalib/types/robots/http-import.d.ts.map", + "sizeBytes": 998, + "sha256": "ef3b63e0a2c104c1c3631d430ad09514953fb3555daddb69d0d0e5b5306752ed" + }, + { + "path": "dist/alphalib/types/robots/http-import.js.map", + "sizeBytes": 2893, + "sha256": "d90362259ac8cdcf6e4d304042836bb172bf9e37552f4381d793afb57eff1768" + }, + { + "path": "dist/alphalib/types/robots/image-bgremove.d.ts.map", + "sizeBytes": 1241, + "sha256": "1f2d8c7319395b5228a586231c110b98758a4a11c8a6b91d1b406a085aae7440" + }, + { + "path": "dist/alphalib/types/robots/image-bgremove.js.map", + "sizeBytes": 1885, + "sha256": "a5fbb151ec01dc82e30ab793f405a6b3a1146805511669748079d4a5b54de6a5" + }, + { + "path": "dist/alphalib/types/robots/image-describe.d.ts.map", + "sizeBytes": 1241, + "sha256": "44776af23c24f582ff0f6552d49e01155de4589ed09e52012ec1321a6ca698c8" + }, + { + "path": "dist/alphalib/types/robots/image-describe.js.map", + "sizeBytes": 1899, + "sha256": "10dfe79760d33f0efa5a600b2060b04350fc733bf0e70f1c557e9ba33c83c601" + }, + { + "path": "dist/alphalib/types/robots/image-facedetect.d.ts.map", + "sizeBytes": 1270, + "sha256": "bb9528a90de57e383b99dfdcf5196462ecc5528c101d6a98402b7eb12b8de284" + }, + { + "path": "dist/alphalib/types/robots/image-facedetect.js.map", + "sizeBytes": 2389, + "sha256": "538eabf594bb90fe2cd54eeb27f097b9b42b0ffff95d6ed3f442b47d694ec599" + }, + { + "path": "dist/alphalib/types/robots/image-generate.d.ts.map", + "sizeBytes": 1310, + "sha256": "25b14e8c4cd9e295533e60c401e2fc9a8822a075e2ca2703b8a179fdac957bdf" + }, + { + "path": "dist/alphalib/types/robots/image-generate.js.map", + "sizeBytes": 2205, + "sha256": "ebb90ad613707be35e72b368ef80323c368a9d7751daf0a54a9588223dafe355" + }, + { + "path": "dist/alphalib/types/robots/image-merge.d.ts.map", + "sizeBytes": 1259, + "sha256": "2880a90a84df8f77f0a2c30c1835fda589c87f52ef21f077729ee23dd145b8bc" + }, + { + "path": "dist/alphalib/types/robots/image-merge.js.map", + "sizeBytes": 2080, + "sha256": "564ae537d3189541c9c0b645ff56919c86df8440fac89685b4180b851d862f2a" + }, + { + "path": "dist/alphalib/types/robots/image-ocr.d.ts.map", + "sizeBytes": 1218, + "sha256": "afbf395a44bc6f1a0ef163d6ff6b45dacac15b9b1e01045365f88f1fe4ce403f" + }, + { + "path": "dist/alphalib/types/robots/image-ocr.js.map", + "sizeBytes": 1798, + "sha256": "135f86e2ad0c6690838ce611f6e48375642dbdc9857c19723040c8860d07c620" + }, + { + "path": "dist/alphalib/types/robots/image-optimize.d.ts.map", + "sizeBytes": 1241, + "sha256": "eb4d9d068c6538732c9ccf8d1f335a16444fd10a7f5f838529a81d81fade03aa" + }, + { + "path": "dist/alphalib/types/robots/image-optimize.js.map", + "sizeBytes": 1795, + "sha256": "aae465a013cc6e22dd12b7e44986a7be746a70563c3b7aff861d8229888dac39" + }, + { + "path": "dist/alphalib/types/robots/image-resize.d.ts.map", + "sizeBytes": 2575, + "sha256": "4039c44fe629044c78562654dea361edb3d5fc31f6cbcbaff8e8ef3b3f2c8362" + }, + { + "path": "dist/alphalib/types/robots/image-resize.js.map", + "sizeBytes": 9404, + "sha256": "655db1c155f512b6b8b9fa21e8a6150ecab07e3b366e186694ef2b289f04b688" + }, + { + "path": "dist/InconsistentResponseError.d.ts.map", + "sizeBytes": 208, + "sha256": "5333a56696e4ed761ee350c4a342fd2d90e4b4445c80606ea8ebc7f19210276f" + }, + { + "path": "dist/InconsistentResponseError.js.map", + "sizeBytes": 217, + "sha256": "b1145dc4071d1b9fe9b438dc6cacfad7aa127329c06ed2cfa8c4495d4db289a1" + }, + { + "path": "dist/cli/commands/index.d.ts.map", + "sizeBytes": 198, + "sha256": "02d46596bc9ebce98e9668a9ec4fd017aa2e553b828dfc47dcbcff96bff71f3e" + }, + { + "path": "dist/cli/commands/index.js.map", + "sizeBytes": 1584, + "sha256": "d44b8dc7479c999f6f694cdb90628b32087b5a7a13758f727b5174fdf291fea6" + }, + { + "path": "dist/alphalib/mcache.d.ts.map", + "sizeBytes": 968, + "sha256": "7e45e93e39d2031b2a197c7f145f7a535b83af9435129b21cdbc6577da7fa6f8" + }, + { + "path": "dist/alphalib/mcache.js.map", + "sizeBytes": 4326, + "sha256": "718daef94e4679b5326fda25a3d6060a0bbcf86895e3b6d4865a310767584aa3" + }, + { + "path": "dist/alphalib/types/robots/meta-read.d.ts.map", + "sizeBytes": 733, + "sha256": "74696fc88caf7dab3962245213e1553190b7daa91ce6c98d8842a26ba7aa78e7" + }, + { + "path": "dist/alphalib/types/robots/meta-read.js.map", + "sizeBytes": 944, + "sha256": "bebdb932e6d46cd2075e908e77d6c013127a2aa21bf63f1cd52ee53445431159" + }, + { + "path": "dist/alphalib/types/robots/meta-write.d.ts.map", + "sizeBytes": 3621, + "sha256": "2aa5bcd142a9675827964aaf5ff8faebe2a46b65fbd4f05e393d9ddd683dc312" + }, + { + "path": "dist/alphalib/types/robots/meta-write.js.map", + "sizeBytes": 1763, + "sha256": "0ee3d8d54a5d87e087020ac29cb96997d5ddc154be11f4506d69be0458c2b66e" + }, + { + "path": "dist/alphalib/types/robots/minio-import.d.ts.map", + "sizeBytes": 1018, + "sha256": "daa3c35498566645725c26eaf6cac16cccc7591ad52ec1102fb5568f8a67707e" + }, + { + "path": "dist/alphalib/types/robots/minio-import.js.map", + "sizeBytes": 1826, + "sha256": "54f186aa5939c1a4ee41dec57a40aa2e4e67adc694bff3394ceecef4d5c1e50a" + }, + { + "path": "dist/alphalib/types/robots/minio-store.d.ts.map", + "sizeBytes": 1296, + "sha256": "5cab9c663094f8ed691d3726e183c8205b8dcafcbecadb1209c1aee4a667022e" + }, + { + "path": "dist/alphalib/types/robots/minio-store.js.map", + "sizeBytes": 2022, + "sha256": "09880706215eb25ad7b6c8a07976fcd329853e016d6d680ee71c8657e234ab34" + }, + { + "path": "dist/alphalib/lib/nativeGlobby.d.ts.map", + "sizeBytes": 583, + "sha256": "8f3c30e2d30cfdfb4b7fda43590e36d0cc5f340b8dc75a69314602e19b566047" + }, + { + "path": "dist/alphalib/lib/nativeGlobby.js.map", + "sizeBytes": 7177, + "sha256": "faa6544a8c107851651831356371f77c7a2fbae9810951ad2b18f4968bf7580c" + }, + { + "path": "dist/cli/commands/notifications.d.ts.map", + "sizeBytes": 344, + "sha256": "b6d7ff0ac754f7977f133a78361ca7d469f23319dc9fd8a5a8c9093dac428eb6" + }, + { + "path": "dist/cli/commands/notifications.js.map", + "sizeBytes": 1500, + "sha256": "ba8bc70ab727c78e8641b541d992bb5487b9f8c6af9a329ed527a21d38cf3f45" + }, + { + "path": "dist/cli/OutputCtl.d.ts.map", + "sizeBytes": 1377, + "sha256": "d49a26f7287d6e2dbee8de015c9409ad54fa2a2ed5dfe44e99b2510f95ed93a1" + }, + { + "path": "dist/cli/OutputCtl.js.map", + "sizeBytes": 2947, + "sha256": "4922203562a927063b145504529b677a8205047aace3b4b86cbe8b8f75ef5b70" + }, + { + "path": "dist/PaginationStream.d.ts.map", + "sizeBytes": 664, + "sha256": "9bdfee8e9abe338b8b6deb1b484e54b8c1b20134dc2721ceddd42ad512b70d3c" + }, + { + "path": "dist/PaginationStream.js.map", + "sizeBytes": 1303, + "sha256": "861ba3671e06da0092b9f5d41d687441c16f98fb34c69332bbe4005f993ee12f" + }, + { + "path": "dist/PollingTimeoutError.d.ts.map", + "sizeBytes": 213, + "sha256": "e728bb40a887365822da6380ce35a2d5de504fa4c24e4a61a03a14d365f0b96d" + }, + { + "path": "dist/PollingTimeoutError.js.map", + "sizeBytes": 233, + "sha256": "1bf6de3e9b8f0e62b6900be45f7db6c9dad37510a1ee9dc05c7883319ac15a48" + }, + { + "path": "dist/alphalib/types/robots/progress-simulate.d.ts.map", + "sizeBytes": 750, + "sha256": "aec55a688c0da530314297cf6652d456b032580f848e84cfbb00054b3bc9ab91" + }, + { + "path": "dist/alphalib/types/robots/progress-simulate.js.map", + "sizeBytes": 854, + "sha256": "c743fb4ea5217d34ff665926bd14ecbb259dec99c2de862abfe787ece58817a0" + }, + { + "path": "dist/alphalib/types/robots/s3-import.d.ts.map", + "sizeBytes": 1023, + "sha256": "2fa93c5f1aacff33c82795f1f6f4b7bc533fa4f00dabb0da996021cfb3a36b58" + }, + { + "path": "dist/alphalib/types/robots/s3-import.js.map", + "sizeBytes": 2086, + "sha256": "2a512555a098d4da6785a118506d5992ced9c7f9ad6fadb139e68161425dc5a3" + }, + { + "path": "dist/alphalib/types/robots/s3-store.d.ts.map", + "sizeBytes": 1437, + "sha256": "77b3508baff7e474df2bd8bb4dca53f8fb09ffcd229cd16aa09a35e2d12cd608" + }, + { + "path": "dist/alphalib/types/robots/s3-store.js.map", + "sizeBytes": 2689, + "sha256": "354bf2bfe15c57ef1054242d90e09fc69a50fac4a57f07510b81ab91cefa73df" + }, + { + "path": "dist/alphalib/types/robots/script-run.d.ts.map", + "sizeBytes": 1202, + "sha256": "d73d6e081a159f0446e83051828a2b4cd919e0439ec4c79423fbf74ce938633a" + }, + { + "path": "dist/alphalib/types/robots/script-run.js.map", + "sizeBytes": 1502, + "sha256": "6e61b686b0b26ba5d90c62cdb94d6611e09e57081efe1a7042dda77d127fd51f" + }, + { + "path": "dist/alphalib/types/robots/sftp-import.d.ts.map", + "sizeBytes": 973, + "sha256": "dad41e054b1f3f496000c2fe3eba6222f59230b6af63c38fa75cc3ce37ea862f" + }, + { + "path": "dist/alphalib/types/robots/sftp-import.js.map", + "sizeBytes": 1628, + "sha256": "f903dbbee86ee2801eb24d091c17d85686090035b263a27965987e4766587d75" + }, + { + "path": "dist/alphalib/types/robots/sftp-store.d.ts.map", + "sizeBytes": 1299, + "sha256": "b37328dfadccc7c6d482a2d44e79ddea777c2a4ef8944d91f0039a88beae661d" + }, + { + "path": "dist/alphalib/types/robots/sftp-store.js.map", + "sizeBytes": 1972, + "sha256": "9e1dd16cb07a33783ce79a07599589d90c6991eb4d17f042e07bd41b04be52be" + }, + { + "path": "dist/alphalib/types/robots/speech-transcribe.d.ts.map", + "sizeBytes": 1260, + "sha256": "a0c4d3e87110af87e7d44e6b16edb861a9c8b60b5916f8a084701fb0889928a1" + }, + { + "path": "dist/alphalib/types/robots/speech-transcribe.js.map", + "sizeBytes": 2118, + "sha256": "062dce9e6e903b2013b9ae939e54b1eb63594bf2905bcd49981870b5ab18be67" + }, + { + "path": "dist/alphalib/types/stackVersions.d.ts.map", + "sizeBytes": 181, + "sha256": "8801a952778d7c9ff6ec5da9ab04f67cb8912592a64219bee73f89f9647e0311" + }, + { + "path": "dist/alphalib/types/stackVersions.js.map", + "sizeBytes": 403, + "sha256": "b502d17102001adede09a03d6bc1b8d21c857709ca59699c5771eba6ff187768" + }, + { + "path": "dist/alphalib/types/robots/supabase-import.d.ts.map", + "sizeBytes": 1036, + "sha256": "591b8a2e1f9a882c9a800101271bc944ac6a7720022d634a9f6a52b273d09b12" + }, + { + "path": "dist/alphalib/types/robots/supabase-import.js.map", + "sizeBytes": 1862, + "sha256": "fb87b0dd2b73a22dcb20c1103f640e4c59de2f5cfae91bcaa8bcbacf33646872" + }, + { + "path": "dist/alphalib/types/robots/supabase-store.d.ts.map", + "sizeBytes": 1302, + "sha256": "26b0c17d6bb419f009a55c63720a5a6e01315eee5e47639f827968677dbcbcc7" + }, + { + "path": "dist/alphalib/types/robots/supabase-store.js.map", + "sizeBytes": 1886, + "sha256": "51670b0c87beb48d14581510971e8f6702d6f7536fb19e9779e0dca22261c996" + }, + { + "path": "dist/alphalib/types/robots/swift-import.d.ts.map", + "sizeBytes": 1030, + "sha256": "62f71493d289ab513756c9a0801fea959d1dbfebac53a937d0ce3e40d8412f43" + }, + { + "path": "dist/alphalib/types/robots/swift-import.js.map", + "sizeBytes": 1828, + "sha256": "8266677cc62c1cbf8acbe28d70e38b73ead4da441c24da57549b8d5401ff09a6" + }, + { + "path": "dist/alphalib/types/robots/swift-store.d.ts.map", + "sizeBytes": 1308, + "sha256": "d7861db0ea1879346faf51aa54feea5889457c72f9b890e996a5db6dce5c27a9" + }, + { + "path": "dist/alphalib/types/robots/swift-store.js.map", + "sizeBytes": 2023, + "sha256": "a1051b980e394da608e7b95994ca490f6f9d6dbe5fb4d89707266c495175a347" + }, + { + "path": "dist/cli/template-last-modified.d.ts.map", + "sizeBytes": 492, + "sha256": "927f06c6c3ac447c7459f881ad4150ed0cbec8c199b114452590e25df57d6f44" + }, + { + "path": "dist/cli/template-last-modified.js.map", + "sizeBytes": 4406, + "sha256": "ecf48762d1c4275b90bab7da82b44a9e0c31b2cf8bb62a2f1381c34ceced91c9" + }, + { + "path": "dist/alphalib/types/template.d.ts.map", + "sizeBytes": 133490, + "sha256": "d2e7aac5bedd1f24066164e27d0b68f2737998853c38cc33234379b3c61a9681" + }, + { + "path": "dist/alphalib/types/template.js.map", + "sizeBytes": 5214, + "sha256": "df5e14bc81fcb702b288bb964fe05ac0f6976a0b4061e8dd6cc8586c19d18b9d" + }, + { + "path": "dist/alphalib/types/templateCredential.d.ts.map", + "sizeBytes": 347, + "sha256": "b47bd53ceca8cec91455635a28942287286b87d962de0b32bbf4afd785df1822" + }, + { + "path": "dist/alphalib/types/templateCredential.js.map", + "sizeBytes": 912, + "sha256": "125372bf800fcb2b436edf9b7ac47aeea00a7ae8bc6cd0592b5a1fc4419e1cd1" + }, + { + "path": "dist/cli/commands/templates.d.ts.map", + "sizeBytes": 2355, + "sha256": "dde861e027753cac8ae7255ac4cc9b31d40e86b341ac52d467696294df1b32b3" + }, + { + "path": "dist/cli/commands/templates.js.map", + "sizeBytes": 14657, + "sha256": "d8af75491dfa21dd4c3f6587ef199a28f14450a1533bf78f8437e8581a358fd6" + }, + { + "path": "dist/alphalib/types/robots/text-speak.d.ts.map", + "sizeBytes": 1244, + "sha256": "f6c1fbc4234dc0e9b2d9c57790fcc5678aea31e4aa528703f3ddcb2b31c2d6e3" + }, + { + "path": "dist/alphalib/types/robots/text-speak.js.map", + "sizeBytes": 2081, + "sha256": "152ee18242f273409266c8a95fb15b965069ac9646aebf6e61ddb4a02453146d" + }, + { + "path": "dist/alphalib/types/robots/text-translate.d.ts.map", + "sizeBytes": 1230, + "sha256": "b7b203cfdd08f1e497abc8614b4b2a4d3ce74e15c5c056eaa29d187d94f9927e" + }, + { + "path": "dist/alphalib/types/robots/text-translate.js.map", + "sizeBytes": 2951, + "sha256": "4c09df3519ed7bc416814b2541d8ee0f5b4b77e8dfb72d6d1a57e45ccdcccb32" + }, + { + "path": "dist/alphalib/types/robots/tigris-import.d.ts.map", + "sizeBytes": 1030, + "sha256": "324f86249a446619ec7c815c0a39ac79bf8f543a849a7ae92aabc9e304694c6e" + }, + { + "path": "dist/alphalib/types/robots/tigris-import.js.map", + "sizeBytes": 1910, + "sha256": "817e599e2f948bf8d2a84eaf23ab95a4cc45bf83a1ca126ab359d729378daaba" + }, + { + "path": "dist/alphalib/types/robots/tigris-store.d.ts.map", + "sizeBytes": 1308, + "sha256": "543391776a31c889d13fca5749fbc029c329c3d6ac78b79b4561ebcb07fe9b2d" + }, + { + "path": "dist/alphalib/types/robots/tigris-store.js.map", + "sizeBytes": 2102, + "sha256": "7dfa4c4a70c85be45c9185428fd349ba0c788132a886f71eabb9fff85563de09" + }, + { + "path": "dist/alphalib/types/robots/tlcdn-deliver.d.ts.map", + "sizeBytes": 885, + "sha256": "554ee0091f06fb0600daf9bfb8ec6211d5e5b125e23a4c4807381909df171ee3" + }, + { + "path": "dist/alphalib/types/robots/tlcdn-deliver.js.map", + "sizeBytes": 1365, + "sha256": "2cc54073267b8bcdebf87bfe2b94b78bef94cf5bce3a55c574adb033261a7faf" + }, + { + "path": "dist/Transloadit.d.ts.map", + "sizeBytes": 4955, + "sha256": "3933904963537b1d3c1a33218f154e2c0620fb7e6048135b5291fe6d4affcb84" + }, + { + "path": "dist/Transloadit.js.map", + "sizeBytes": 19217, + "sha256": "b07b0ec19dff6764da41b0dfe6978243370f2d7af425844ff79c95c439f5b1c7" + }, + { + "path": "dist/alphalib/tryCatch.d.ts.map", + "sizeBytes": 555, + "sha256": "5fa048d8181c4b97c76d21af2b1c7353cdd0c0ad7b5f7c0209c1a685ac13b1d8" + }, + { + "path": "dist/alphalib/tryCatch.js.map", + "sizeBytes": 364, + "sha256": "d8b6506cd4a2b2aef2c10d358a01858ee7795ab47ba68dc483cfe05bd8bcd304" + }, + { + "path": "dist/alphalib/types/robots/tus-store.d.ts.map", + "sizeBytes": 1254, + "sha256": "c018e01926cb975e5991815d950d23b794e8da606204d1012afdde5cd40be48c" + }, + { + "path": "dist/alphalib/types/robots/tus-store.js.map", + "sizeBytes": 2130, + "sha256": "e332628b81b5a2f1db21e2163f3e82b1e2d1aee3bdc5da31641f56ac8f8c84cd" + }, + { + "path": "dist/tus.d.ts.map", + "sizeBytes": 675, + "sha256": "4174cce4740dbfaa616f6ebfd69e7d8a67f43e74d7b6e72f783fd5d7aada6b56" + }, + { + "path": "dist/tus.js.map", + "sizeBytes": 4004, + "sha256": "c61b325945542f75b7e227f99388b3da266126a431ad115dbb1da82f0253a73c" + }, + { + "path": "dist/cli/types.d.ts.map", + "sizeBytes": 988, + "sha256": "9ec4dae6c1187072ce760a518f8e2b659b2df95173ece898c6a3e458b48dfe5e" + }, + { + "path": "dist/cli/types.js.map", + "sizeBytes": 1487, + "sha256": "ba68dc25f9bfc67b80d7d0a06927d55d59f1dd722cff7c7b99115fc6d8212d7a" + }, + { + "path": "dist/alphalib/types/robots/upload-handle.d.ts.map", + "sizeBytes": 885, + "sha256": "3cb0f33183cfbcb8cf5cd93dea02062c80415b5a778f4f01e59c203907712338" + }, + { + "path": "dist/alphalib/types/robots/upload-handle.js.map", + "sizeBytes": 1547, + "sha256": "5565507cacaccfbae0ed8af22fa55d0f2e1764db6d5b512ca275d2dc0baa52c7" + }, + { + "path": "dist/alphalib/types/robots/video-adaptive.d.ts.map", + "sizeBytes": 3703, + "sha256": "ad17ce7383971d02115b646735b2e887b02e8cdd431fd8870be7dd5432c0d968" + }, + { + "path": "dist/alphalib/types/robots/video-adaptive.js.map", + "sizeBytes": 2536, + "sha256": "935700eac713fc175e93597246e0f8a3430641e6c014d322fc133ca7a856ea47" + }, + { + "path": "dist/alphalib/types/robots/video-concat.d.ts.map", + "sizeBytes": 3675, + "sha256": "e02b704959be22d2a2b3bf2e085233d2caaff4a30b237ecb84ce9946bacced1b" + }, + { + "path": "dist/alphalib/types/robots/video-concat.js.map", + "sizeBytes": 1976, + "sha256": "1663bd7c7b505072d3f559221615e39f28dd990108def6f05ec2cb6e504fc607" + }, + { + "path": "dist/alphalib/types/robots/video-encode.d.ts.map", + "sizeBytes": 4064, + "sha256": "500f47f6364a47894b08b0fb4907679310c8be7389a46fdf622d454339fd0050" + }, + { + "path": "dist/alphalib/types/robots/video-encode.js.map", + "sizeBytes": 1856, + "sha256": "6461a5e4016592c7e9ea4390b88c1b7b1d614ad81296803c066c7d1946766e2e" + }, + { + "path": "dist/alphalib/types/robots/video-merge.d.ts.map", + "sizeBytes": 3769, + "sha256": "e19e2f55fd7d80116f97b13808d73ea3b213268d3fa8ace990b2e3b22eebcfb5" + }, + { + "path": "dist/alphalib/types/robots/video-merge.js.map", + "sizeBytes": 2366, + "sha256": "5aa6fd3a2e9b7531f1f8abc63fb3d508ad98224f7c9e508f36df4f41f05768d1" + }, + { + "path": "dist/alphalib/types/robots/video-ondemand.d.ts.map", + "sizeBytes": 5342, + "sha256": "c2115e7d16dc0802c7ce4b1df6658f1c78cc53f9b2a9b045c084615901243c40" + }, + { + "path": "dist/alphalib/types/robots/video-ondemand.js.map", + "sizeBytes": 2724, + "sha256": "c20260c3defe1778351ba4119259fb43252554db5467d44676136189ed4deb00" + }, + { + "path": "dist/alphalib/types/robots/video-subtitle.d.ts.map", + "sizeBytes": 3763, + "sha256": "97a1c9a22930643d78fd48ce5749bcfceb81253442f9f2029ed0204de19073ba" + }, + { + "path": "dist/alphalib/types/robots/video-subtitle.js.map", + "sizeBytes": 2827, + "sha256": "af93d44416d43e48085ec00d7be8248967807f6bd3323a927a47beaab122b4a4" + }, + { + "path": "dist/alphalib/types/robots/video-thumbs.d.ts.map", + "sizeBytes": 3722, + "sha256": "f594f39d5f0f72e59ff3d9fa5a9639f8e533c2e553a1c5fedb09b3c6242e30c1" + }, + { + "path": "dist/alphalib/types/robots/video-thumbs.js.map", + "sizeBytes": 2886, + "sha256": "02b98cbff11b63daaf474f4784d1105b4dd56e57d1082e8677cd7d80690cff51" + }, + { + "path": "dist/alphalib/types/robots/vimeo-import.d.ts.map", + "sizeBytes": 972, + "sha256": "9f97e32a87f8e40a48b2669b712cf2d810b7180e2f98c034a1e66b987a786867" + }, + { + "path": "dist/alphalib/types/robots/vimeo-import.js.map", + "sizeBytes": 2142, + "sha256": "912a3b1308b6b9f97052d14bb022f66b12058c4c9f180795b2d6e6d79a26c808" + }, + { + "path": "dist/alphalib/types/robots/vimeo-store.d.ts.map", + "sizeBytes": 1302, + "sha256": "c670114a11cd43867aa15bacace8e1e65a9a9aa83d6f5b42b3f5ae05938d405f" + }, + { + "path": "dist/alphalib/types/robots/vimeo-store.js.map", + "sizeBytes": 2393, + "sha256": "29227154e1ea921a08f345cbb76aa1fe2ca895b597df7bbf95e62d09fb56268e" + }, + { + "path": "dist/alphalib/types/robots/wasabi-import.d.ts.map", + "sizeBytes": 1030, + "sha256": "b7e6ada139a658355a85cef4b883a42c15515c1cc1a89c741e0eeb9f8fa19191" + }, + { + "path": "dist/alphalib/types/robots/wasabi-import.js.map", + "sizeBytes": 1910, + "sha256": "348c647bde3a01cf71187ed1d440fb0fa875ff93e535b8e7024e5f47a30824f4" + }, + { + "path": "dist/alphalib/types/robots/wasabi-store.d.ts.map", + "sizeBytes": 1310, + "sha256": "18968bde05eb5699ce98695f16f65333077ae83af2850fcc65fdc0b9662d0d0d" + }, + { + "path": "dist/alphalib/types/robots/wasabi-store.js.map", + "sizeBytes": 2022, + "sha256": "238f78cc0876c72bea35d35b9ea4dbb3d033dfe35e416007e405d26bd7ca2a45" + }, + { + "path": "dist/alphalib/types/robots/youtube-store.d.ts.map", + "sizeBytes": 1263, + "sha256": "13df33bee9919599cc7854debac40597a412d4ad3673122257fe343928f985ff" + }, + { + "path": "dist/alphalib/types/robots/youtube-store.js.map", + "sizeBytes": 2380, + "sha256": "b59ed4420731f9f161d7de7a4c889eead8868c089b4507e5ce810de59fe0bf17" + }, + { + "path": "dist/alphalib/zodParseWithContext.d.ts.map", + "sizeBytes": 711, + "sha256": "7422db554332a0a7a4e2d58e402c5714a1b67db6a1b2ea98f4709b3c319d3041" + }, + { + "path": "dist/alphalib/zodParseWithContext.js.map", + "sizeBytes": 9563, + "sha256": "c3ee1daecdb3fb7a6fb1ab0d5b5cb327e1620c94b3c16ab522b9b599a04c468a" + }, + { + "path": "README.md", + "sizeBytes": 30169, + "sha256": "47d191fb87e0add731c826a7553a26e2572f34ad6c8506e00b025a21ff322580" + }, + { + "path": "dist/alphalib/types/robots/_index.d.ts", + "sizeBytes": 4680970, + "sha256": "8ffd4631bfe520f6a594365f95301e832c560840456d7c2c086b40f83ed1d566" + }, + { + "path": "src/alphalib/types/robots/_index.ts", + "sizeBytes": 50795, + "sha256": "ae25dd93eac765b3a4f5a3d8a28e49c8e2b88b122f6d1534e5d2779d1186a302" + }, + { + "path": "dist/alphalib/types/robots/_instructions-primitives.d.ts", + "sizeBytes": 207294, + "sha256": "ec04807c7f1ee31c94b2242f05936ccac7a6f4791353fd29f43a0e8860499d3b" + }, + { + "path": "src/alphalib/types/robots/_instructions-primitives.ts", + "sizeBytes": 63648, + "sha256": "3bf5225f4881aff338cbdd430f5eb22e58b5ef793392bcc8c0b6f52507f6b7b3" + }, + { + "path": "dist/alphalib/types/robots/ai-chat.d.ts", + "sizeBytes": 90303, + "sha256": "a6fbd4c6b3d58a37a87ffd6226db7136ddd3d206d7de818c816b48003ab12bad" + }, + { + "path": "src/alphalib/types/robots/ai-chat.ts", + "sizeBytes": 10035, + "sha256": "05f5c0a9aba087f5fb2a83cec845c3bc462d1ada916abe01c6510eecfd99b392" + }, + { + "path": "dist/ApiError.d.ts", + "sizeBytes": 592, + "sha256": "dde26d7ee9dea3fa185dbc490915a99c6785cc1462f96138867f33a75f5f5dee" + }, + { + "path": "src/ApiError.ts", + "sizeBytes": 1335, + "sha256": "12b90cef5bbf9760c478a3882cc85162368b492aed39d1b5e2915df927db8a05" + }, + { + "path": "dist/apiTypes.d.ts", + "sizeBytes": 3730, + "sha256": "5c69b795640fa02650cf0733d262b28488a049848863392bf33a3992eb0049eb" + }, + { + "path": "src/apiTypes.ts", + "sizeBytes": 4042, + "sha256": "6be2494c40b5cee641b33329b6e2bc495c0357ffa3509228c4c531d59dbc0c5a" + }, + { + "path": "dist/cli/commands/assemblies.d.ts", + "sizeBytes": 3569, + "sha256": "cac7dbbcb9f413eb9b391eec586b905675793ab2497beb361d04a1f6f64a89e6" + }, + { + "path": "src/cli/commands/assemblies.ts", + "sizeBytes": 41625, + "sha256": "9989a3f1070e07117fe57371b61118421a6ac626c84836e647d677e4c5babe08" + }, + { + "path": "dist/alphalib/types/assembliesGet.d.ts", + "sizeBytes": 2112, + "sha256": "9708f78e367a541625e567768f5d2bc8339ec49057dd2fa454d5c7215216f7be" + }, + { + "path": "src/alphalib/types/assembliesGet.ts", + "sizeBytes": 1440, + "sha256": "acf47bb92b25c5552a8b19419be3c14323f158726b7ee16e462a248ff190a347" + }, + { + "path": "dist/alphalib/types/robots/assembly-savejson.d.ts", + "sizeBytes": 3053, + "sha256": "8c30087c4cebb948e6373c79e83e5df104c2dc7b669e862f5ffc2ffd2b07c2ed" + }, + { + "path": "src/alphalib/types/robots/assembly-savejson.ts", + "sizeBytes": 1221, + "sha256": "05973f206156273ed5fb7f26a24e34479844fef3012f7086e3ab2fb8e12eee50" + }, + { + "path": "dist/alphalib/types/assemblyReplay.d.ts", + "sizeBytes": 414604, + "sha256": "db12e59f0737b3aab4c748c45905f95ab335157af57cd7de252f1b8fd76eeacb" + }, + { + "path": "src/alphalib/types/assemblyReplay.ts", + "sizeBytes": 716, + "sha256": "dadae8a1525f6d8313d65d52810fdd40ac14f1d2c52aa3fbd9e227ea13482aa8" + }, + { + "path": "dist/alphalib/types/assemblyReplayNotification.d.ts", + "sizeBytes": 414166, + "sha256": "bf372161e78fdbd03487c0967307015b263445be87601c2266637a831e91ac7e" + }, + { + "path": "src/alphalib/types/assemblyReplayNotification.ts", + "sizeBytes": 632, + "sha256": "c6ddb9cc02103ad5f791d25bcfe6b899fa86500b2c457dd2a698db5ec0ebee25" + }, + { + "path": "dist/alphalib/types/assemblyStatus.d.ts", + "sizeBytes": 4247003, + "sha256": "224358eca0d6e38f26d82b64cd10ebc3d2b609824e46a5691d7f8162e21d2218" + }, + { + "path": "src/alphalib/types/assemblyStatus.ts", + "sizeBytes": 29485, + "sha256": "0ef4a2377e4c67c4de4dfd0d2f6475c47e046d4e2df232f3407acf7a53946f4c" + }, + { + "path": "dist/alphalib/types/robots/audio-artwork.d.ts", + "sizeBytes": 167655, + "sha256": "56670af4f3daa10c5d495be972649563a4b912828c1e9988b2b7d8119493af88" + }, + { + "path": "src/alphalib/types/robots/audio-artwork.ts", + "sizeBytes": 3845, + "sha256": "82df928d54f70ea3d34a6602cdfe8ffdb43a8de10a36656263661e4309a54026" + }, + { + "path": "dist/alphalib/types/robots/audio-concat.d.ts", + "sizeBytes": 169966, + "sha256": "9c4150072f77917ca68e63e7862e0c9fee3e7d9df890d54b78f5a734079937e7" + }, + { + "path": "src/alphalib/types/robots/audio-concat.ts", + "sizeBytes": 5511, + "sha256": "a4e0146b728bf265969dad46f8a7536638efee63875906c544d4860e1ed4557a" + }, + { + "path": "dist/alphalib/types/robots/audio-encode.d.ts", + "sizeBytes": 167466, + "sha256": "922043005e80121472fc0ff17a50c49ec9fa4173130e1563adab679cd279fa0f" + }, + { + "path": "src/alphalib/types/robots/audio-encode.ts", + "sizeBytes": 3451, + "sha256": "be951d6318aab6473087dbea86193b69837a58796aae68761b3d31ec88efc975" + }, + { + "path": "dist/alphalib/types/robots/audio-loop.d.ts", + "sizeBytes": 167878, + "sha256": "751a9f62bae4eeb980ac67ed6646fb9522e1328abc3d40bc913309a5c8fc1420" + }, + { + "path": "src/alphalib/types/robots/audio-loop.ts", + "sizeBytes": 3676, + "sha256": "d91da780538c130608a56936f148a9537b2cedde0e233e3872b7ec70b678ef83" + }, + { + "path": "dist/alphalib/types/robots/audio-merge.d.ts", + "sizeBytes": 170479, + "sha256": "7ff8b6a67c07fd16d9c2323da40deb65d7f193cdeb277182adef3b4a8a661ff7" + }, + { + "path": "src/alphalib/types/robots/audio-merge.ts", + "sizeBytes": 4923, + "sha256": "fa524f4d4f7186dc7b001d27bba6b8397edf746d2853a3e280aa28a60aab990a" + }, + { + "path": "dist/alphalib/types/robots/audio-waveform.d.ts", + "sizeBytes": 168087, + "sha256": "e6778bd4b1c71a3b87bbdaa097b8efc97efd29962279fafe39cf75d802cdce4c" + }, + { + "path": "src/alphalib/types/robots/audio-waveform.ts", + "sizeBytes": 9454, + "sha256": "4b61b0599fade66e3a0d954eea55f980e9745eff3f19341ce8f6786a80469d3f" + }, + { + "path": "dist/cli/commands/auth.d.ts", + "sizeBytes": 936, + "sha256": "20a1d35fb55fad8af33fb6decede3cbf2cd621007fe443d2866e9975bbe23b20" + }, + { + "path": "src/cli/commands/auth.ts", + "sizeBytes": 10502, + "sha256": "0dea0295f4f5798dd619860d01fe6f50f59efd99a83c36c1e35803d584f158aa" + }, + { + "path": "dist/alphalib/types/robots/azure-import.d.ts", + "sizeBytes": 11036, + "sha256": "fb0980e7bd0fcca08b195cc79b5f168e874a25673c97f9340ad89449d2a9c25b" + }, + { + "path": "src/alphalib/types/robots/azure-import.ts", + "sizeBytes": 3901, + "sha256": "162715ca46c65fce521ceefa5141d96ae5a8d51ca8ed8d045af6cd55f27282eb" + }, + { + "path": "dist/alphalib/types/robots/azure-store.d.ts", + "sizeBytes": 23317, + "sha256": "7bd4f1c2d33efe2a62e8dc2efd851f61785960145c1954058eeb8882daf7177f" + }, + { + "path": "src/alphalib/types/robots/azure-store.ts", + "sizeBytes": 4870, + "sha256": "98ece7cd3cd7575ffa57cc301aec88a2465851addda92a43d6f914e74fe44cb1" + }, + { + "path": "dist/alphalib/types/robots/backblaze-import.d.ts", + "sizeBytes": 11200, + "sha256": "656737162a0c93544d22a8a6d5c640892644a5363ef91fcdaa26d7e9f5fe2664" + }, + { + "path": "src/alphalib/types/robots/backblaze-import.ts", + "sizeBytes": 4572, + "sha256": "143f75fd564c8ab4b580eaec2ca3599df03738e93b6d265de650903f32c708f4" + }, + { + "path": "dist/alphalib/types/robots/backblaze-store.d.ts", + "sizeBytes": 19655, + "sha256": "728cd867f57b1ff2a919ef4f226e2a0ca9513813f92165a6d25bb51735cc22d9" + }, + { + "path": "src/alphalib/types/robots/backblaze-store.ts", + "sizeBytes": 3810, + "sha256": "60a83e189004145990e911398693103f92826456698c7b1e77f1951f832d8367" + }, + { + "path": "dist/cli/commands/BaseCommand.d.ts", + "sizeBytes": 944, + "sha256": "9f132cb73d644f225f0efa48ab02f0edc6a82c9db7db080e84ae2281d9cf845c" + }, + { + "path": "src/cli/commands/BaseCommand.ts", + "sizeBytes": 2146, + "sha256": "d0cab4ebb72ce5d555be82bf3de4ba1f09dd223b71702bc53527928cf1c7ac91" + }, + { + "path": "dist/alphalib/types/bill.d.ts", + "sizeBytes": 1340, + "sha256": "addda1ad6e3507c37fa8eaa835c6ed57ede1206a732d0237e40f109d329549db" + }, + { + "path": "src/alphalib/types/bill.ts", + "sizeBytes": 188, + "sha256": "2ec2d5c86e068794e85195e417a515e383a70e2741926c3a949d10002a1ad13b" + }, + { + "path": "dist/cli/commands/bills.d.ts", + "sizeBytes": 590, + "sha256": "08945c847c67df1e376230d66034497ac77cf548e33354b595d304b47ae86203" + }, + { + "path": "src/cli/commands/bills.ts", + "sizeBytes": 2402, + "sha256": "c3272b2808ff8ff1a2924aaea1431e01fb0bd46205861d5621d28ac08ef4f5f9" + }, + { + "path": "dist/cli.d.ts", + "sizeBytes": 256, + "sha256": "c0b85d46fb05f111ab4b71bf0adc491e71b78efd5b5344b74599e4126477979b" + }, + { + "path": "src/cli.ts", + "sizeBytes": 1101, + "sha256": "9f7fa1f5565e87ffdf37abd416e6e77661d3cdba15513ae37fc9a5952a24abc0" + }, + { + "path": "dist/alphalib/types/robots/cloudfiles-import.d.ts", + "sizeBytes": 12289, + "sha256": "420c6b08193c73d5acb5b533160f437847cac7707dbfb0d19772bcd3e1a6d56f" + }, + { + "path": "src/alphalib/types/robots/cloudfiles-import.ts", + "sizeBytes": 4513, + "sha256": "39f9b5ef411d7ebf410fd2d14dd47c5332ace0deda99b02a0bec775b3f1e6248" + }, + { + "path": "dist/alphalib/types/robots/cloudfiles-store.d.ts", + "sizeBytes": 20090, + "sha256": "7e427617b89defb34f177c39ed4cfc57e9546e81569054be66c3a3fdcc1d004e" + }, + { + "path": "src/alphalib/types/robots/cloudfiles-store.ts", + "sizeBytes": 3545, + "sha256": "e9e41caeb42b5518893e7abe897975e133854c98df0cae60a48d51cb0f835d7d" + }, + { + "path": "dist/alphalib/types/robots/cloudflare-import.d.ts", + "sizeBytes": 12177, + "sha256": "6b349b174338e3814f7afe52af2e53271f0357845dea3fb33ee2ba663f545302" + }, + { + "path": "src/alphalib/types/robots/cloudflare-import.ts", + "sizeBytes": 4880, + "sha256": "3f2055ece87c5d7e583d6237395a4da4fda556fc01505254c3d0a6a126939142" + }, + { + "path": "dist/alphalib/types/robots/cloudflare-store.d.ts", + "sizeBytes": 21058, + "sha256": "06a0b0724e064c0f8cc75210d7630e3147b5a086a7f82eaff618701e772fe934" + }, + { + "path": "src/alphalib/types/robots/cloudflare-store.ts", + "sizeBytes": 4479, + "sha256": "be419be86bd4a2bd1d54cad4c0a0670d52e8bff6b7a51a7d31eaeecb6c64f932" + }, + { + "path": "dist/alphalib/types/robots/digitalocean-import.d.ts", + "sizeBytes": 12247, + "sha256": "1e2ea0768661803a5f478255a60e075031eacc6755f198d24e3e19579b471ab2" + }, + { + "path": "src/alphalib/types/robots/digitalocean-import.ts", + "sizeBytes": 4556, + "sha256": "f48028a8d933f4521ef27b82848c82ec3d139c3baff7f7f46942e2b4b76e58e6" + }, + { + "path": "dist/alphalib/types/robots/digitalocean-store.d.ts", + "sizeBytes": 21638, + "sha256": "86c25da875cdf43b1adebe42e50b0125df3fb570950d7818a94908c942efd785" + }, + { + "path": "src/alphalib/types/robots/digitalocean-store.ts", + "sizeBytes": 4676, + "sha256": "1f6cb42c4dea85cf1919b8d535247ef07c4d989e7d497e10a98fe5190c8e5083" + }, + { + "path": "dist/alphalib/types/robots/document-autorotate.d.ts", + "sizeBytes": 16993, + "sha256": "ee70d548c8ca611c2cc14f313bf245c3134cf3dcf04750aac29d05a5ad0975ba" + }, + { + "path": "src/alphalib/types/robots/document-autorotate.ts", + "sizeBytes": 2719, + "sha256": "174985d88d0e927eb16a23d831c23fa924ffd0527a436692acaad3c609b8b2fb" + }, + { + "path": "dist/alphalib/types/robots/document-convert.d.ts", + "sizeBytes": 24638, + "sha256": "6a9a0d28e5e25d40de359d63d524519c4c24904b6eb332b940a8c4dbbe0d61dc" + }, + { + "path": "src/alphalib/types/robots/document-convert.ts", + "sizeBytes": 9975, + "sha256": "b5f73d19418a5bb67b1895d647b0f3f4328130540e476620b0ca1fecf3e084a1" + }, + { + "path": "dist/alphalib/types/robots/document-merge.d.ts", + "sizeBytes": 18042, + "sha256": "7f60c8960caade2fae1a9478c4075c120eb4858dec888e5060a95756c4e4ac5d" + }, + { + "path": "src/alphalib/types/robots/document-merge.ts", + "sizeBytes": 3835, + "sha256": "265357067cf08c107cec5fdab7951810832559e4902e7eff0ae3474b1c3bceb2" + }, + { + "path": "dist/alphalib/types/robots/document-ocr.d.ts", + "sizeBytes": 18676, + "sha256": "de5e1f257cf9c796390a18365d2883cb9e43b1465d2259fd967d3d3370217908" + }, + { + "path": "src/alphalib/types/robots/document-ocr.ts", + "sizeBytes": 5306, + "sha256": "3b47017593ee1014cbb6c320a9ef5b04a6962958cb0006d269144972cb89f9ed" + }, + { + "path": "dist/alphalib/types/robots/document-split.d.ts", + "sizeBytes": 17616, + "sha256": "99431a94cba0901a94742e7bcad58745a74f388ad3a0a42a944afe69065bd543" + }, + { + "path": "src/alphalib/types/robots/document-split.ts", + "sizeBytes": 2867, + "sha256": "a8965112f587ff50452a72e3448e9802de1850f63a300f2643ba841c8414cceb" + }, + { + "path": "dist/alphalib/types/robots/document-thumbs.d.ts", + "sizeBytes": 28207, + "sha256": "cf8bbcd2f6c105baf34678306b32ab0bce1f1b7b409173f08c52646f806b2588" + }, + { + "path": "src/alphalib/types/robots/document-thumbs.ts", + "sizeBytes": 9807, + "sha256": "3a2d6c877178fb51a0d77d44ff0e11fdf59af26cd3839818b5a3a74665961ab3" + }, + { + "path": "dist/alphalib/types/robots/dropbox-import.d.ts", + "sizeBytes": 8522, + "sha256": "24118bc0f2c3a8daa16eec2d2d9bfe74e4a39776fa7936316161bc446c9af408" + }, + { + "path": "src/alphalib/types/robots/dropbox-import.ts", + "sizeBytes": 3505, + "sha256": "80d05dfafc8be76e46712016da81a25fff3e1e9edff7787124b4d417a2003103" + }, + { + "path": "dist/alphalib/types/robots/dropbox-store.d.ts", + "sizeBytes": 18629, + "sha256": "56fbd6ad497fc0e28d1956afecfad9aa77dfecdd7bef23d29595c3224171dd97" + }, + { + "path": "src/alphalib/types/robots/dropbox-store.ts", + "sizeBytes": 3465, + "sha256": "5f0ecce1e742d401864a14c9599b618b7c27743926b9c4452b6f56d9491e4866" + }, + { + "path": "dist/alphalib/types/robots/edgly-deliver.d.ts", + "sizeBytes": 6141, + "sha256": "153eb50b9d1ee94be2e1ec67179e70a1568ff0b1eac63ef8cc5ba66325b9b867" + }, + { + "path": "src/alphalib/types/robots/edgly-deliver.ts", + "sizeBytes": 2785, + "sha256": "40d7a8b6567fd80057781d7a24f093e9e1918ee45c3191085ee1bc256f9eeb44" + }, + { + "path": "dist/alphalib/types/robots/file-compress.d.ts", + "sizeBytes": 20135, + "sha256": "70a145f269bdd19a0dfede425e33849d3b4ba56631f11739d58d648f8d0b3089" + }, + { + "path": "src/alphalib/types/robots/file-compress.ts", + "sizeBytes": 6687, + "sha256": "b28ad0566636340b965e4fba2f5b9c7da277cbba7bba75237cca5e4d07affd27" + }, + { + "path": "dist/alphalib/types/robots/file-decompress.d.ts", + "sizeBytes": 16983, + "sha256": "5579a9407db5af3e825f06bc34d2a5f11b0d6b87e1bcff6ddd3a15dac8a2cd9c" + }, + { + "path": "src/alphalib/types/robots/file-decompress.ts", + "sizeBytes": 4628, + "sha256": "8c460d61060e013707889172190ed615775467d3d69ee7850efd977e86bc58ff" + }, + { + "path": "dist/alphalib/types/robots/file-filter.d.ts", + "sizeBytes": 30301, + "sha256": "477f0767ef827af10ab26e016e308bff23f2989e868f2c815f4f23cd94b3313f" + }, + { + "path": "src/alphalib/types/robots/file-filter.ts", + "sizeBytes": 6781, + "sha256": "e9476b7df5be5397bec14e2e976aaf252a43c375c9f0ba777d76ce333b57c604" + }, + { + "path": "dist/alphalib/types/robots/file-hash.d.ts", + "sizeBytes": 17641, + "sha256": "96be0831960c7d0ae1f1c5856a6a3c003ae39ae665a3490850c13a9eb1a4fb57" + }, + { + "path": "src/alphalib/types/robots/file-hash.ts", + "sizeBytes": 2861, + "sha256": "733c4313ffcea9fb33b4b6ca9857b682a561b10cd59d1097464ab673c7b96bca" + }, + { + "path": "dist/alphalib/types/robots/file-preview.d.ts", + "sizeBytes": 37390, + "sha256": "9bdfda1a7ab6e8ed51a500afff37b3679515ad533c9551de399bc872ed97719f" + }, + { + "path": "src/alphalib/types/robots/file-preview.ts", + "sizeBytes": 13514, + "sha256": "4bb202a2bc5109d1c1234321237c019cd41986890f19fe114bd85d8c66e905db" + }, + { + "path": "dist/alphalib/types/robots/file-read.d.ts", + "sizeBytes": 16703, + "sha256": "08e84ba786ec43b289048db242e2833844918e550f5fd2033d9426993ce44fad" + }, + { + "path": "src/alphalib/types/robots/file-read.ts", + "sizeBytes": 2549, + "sha256": "5081ae04d3c9db4cb4196b74877e63f7f30ea51e53773cca75095536c7a50963" + }, + { + "path": "dist/alphalib/types/robots/file-serve.d.ts", + "sizeBytes": 17440, + "sha256": "adf1d55b0f2b0c52f32b9861b0ce7a5c7b1e6f0087a35534eaab752d290f1163" + }, + { + "path": "src/alphalib/types/robots/file-serve.ts", + "sizeBytes": 6708, + "sha256": "2f35e8b78f5024e954a4b962549ec71ae61d24953b6e711511cf827fe5f69be1" + }, + { + "path": "dist/alphalib/types/robots/file-verify.d.ts", + "sizeBytes": 18195, + "sha256": "c18447877b8a83c219f662f4e744dc0ab16745404ada77cb6d8260493f9bab32" + }, + { + "path": "src/alphalib/types/robots/file-verify.ts", + "sizeBytes": 4174, + "sha256": "2c1aa8e92175ec0811628d79d3e1d51dfdfcdae2b8dfa53f32434ef416d19acc" + }, + { + "path": "dist/alphalib/types/robots/file-virusscan.d.ts", + "sizeBytes": 18207, + "sha256": "b9cd21c5b31f1921db32af8e84d20c8ca1901ad308cf4b55171e77f87bc8c9de" + }, + { + "path": "src/alphalib/types/robots/file-virusscan.ts", + "sizeBytes": 4593, + "sha256": "b419a7a5c34ce59996b4eb71833a337d8b0e180d36765c6bb0b6d8236ce49b05" + }, + { + "path": "dist/alphalib/types/robots/file-watermark.d.ts", + "sizeBytes": 17410, + "sha256": "d13deaf037252d9d9f27e7b880329665ef6146b637720bd7cdc0de46cb217630" + }, + { + "path": "src/alphalib/types/robots/file-watermark.ts", + "sizeBytes": 2068, + "sha256": "08af2039f3e568d27b91508b8002ce2ee19714817d69360a4e942cf27f820657" + }, + { + "path": "dist/alphalib/types/robots/ftp-import.d.ts", + "sizeBytes": 10382, + "sha256": "02b494b7a354fed368245635c8c79033c22dc41f04d3adc1b25ea82d5860bd89" + }, + { + "path": "src/alphalib/types/robots/ftp-import.ts", + "sizeBytes": 3132, + "sha256": "2f816efd74d6de7773fea4c48c4c51dcee514133e4b74788bb419e3f22ee1b75" + }, + { + "path": "dist/alphalib/types/robots/ftp-store.d.ts", + "sizeBytes": 21536, + "sha256": "7674a4dbc884b65a376ccffff7de07967ec32a384237d34fcc46d6a75e32f3d6" + }, + { + "path": "src/alphalib/types/robots/ftp-store.ts", + "sizeBytes": 4197, + "sha256": "1bbaa2361cc3675a29178cbd0f4fcecaad1033032f154a6da36c5c677a9c9447" + }, + { + "path": "dist/alphalib/types/robots/google-import.d.ts", + "sizeBytes": 9781, + "sha256": "d7cba012863f00d62bfca4b1adb997305747f3edd291ade13cc7d982dfd7bc86" + }, + { + "path": "src/alphalib/types/robots/google-import.ts", + "sizeBytes": 4503, + "sha256": "4e20e80511a5380f1c6f72e5913f85f728699c412f72bec01d01a150f644e346" + }, + { + "path": "dist/alphalib/types/robots/google-store.d.ts", + "sizeBytes": 20168, + "sha256": "69e46d09a51354b678b390873d4039369450e77ec0a047c77e2ebca527e6328a" + }, + { + "path": "src/alphalib/types/robots/google-store.ts", + "sizeBytes": 6183, + "sha256": "e30cb47805e98e3099935ed4113e036b61c5da91bc483e6b9d1d1f6371221a8b" + }, + { + "path": "dist/cli/helpers.d.ts", + "sizeBytes": 571, + "sha256": "f42d526e9b8270d53f94c8759ea94396515f3280f04ef47abab1cfb8445827ba" + }, + { + "path": "src/cli/helpers.ts", + "sizeBytes": 1550, + "sha256": "2a78e29a2c099f330e65db968da8a42cf25614c95374744a96e04e7341b64aab" + }, + { + "path": "dist/alphalib/types/robots/html-convert.d.ts", + "sizeBytes": 22952, + "sha256": "66b4c1ed3f87bd77f402b970f86fcd4869ceab173534a222d029e0ca38e74555" + }, + { + "path": "src/alphalib/types/robots/html-convert.ts", + "sizeBytes": 5966, + "sha256": "35eeb778615a8f9fb18e05b8672c7e4c116bf41c3e42cbb114057524ea9118cf" + }, + { + "path": "dist/alphalib/types/robots/http-import.d.ts", + "sizeBytes": 12754, + "sha256": "07454a99e30a4a8d0c167c657b7f94fe0699ca2515f342cd3dacf94aa4dc8122" + }, + { + "path": "src/alphalib/types/robots/http-import.ts", + "sizeBytes": 6465, + "sha256": "280418e48e6e718e6822f384d151bb6f83a47fd275d05a9e523e935a4a6a70fd" + }, + { + "path": "dist/alphalib/types/robots/image-bgremove.d.ts", + "sizeBytes": 19322, + "sha256": "ce7cf8d8e520806ba5b362c69716a4dffd6d4b14ab2642b31ec964791e70296e" + }, + { + "path": "src/alphalib/types/robots/image-bgremove.ts", + "sizeBytes": 3278, + "sha256": "c9fd592d22e31b933f54eb6f1c83f0aaefa3be47a0f98089da43bbba43d958b4" + }, + { + "path": "dist/alphalib/types/robots/image-describe.d.ts", + "sizeBytes": 19548, + "sha256": "31cb9b81d026344d2587b754dacb5fb2cc6a16cc3c4a8e6be0ee3b85064c9a23" + }, + { + "path": "src/alphalib/types/robots/image-describe.ts", + "sizeBytes": 5324, + "sha256": "2d6ffb899a5b34185e81aed62e8bfbde3fa93ccb18fe73a5a79d74a2b8423083" + }, + { + "path": "dist/alphalib/types/robots/image-facedetect.d.ts", + "sizeBytes": 20924, + "sha256": "87b70b6ec7fc69cb54df4473756f28b9dfc08891f2edbcc2e9343c19fe304259" + }, + { + "path": "src/alphalib/types/robots/image-facedetect.ts", + "sizeBytes": 7149, + "sha256": "caafb37c5d568017348216b74330f7467ccb64d469f32fcf03fd7838021a8c33" + }, + { + "path": "dist/alphalib/types/robots/image-generate.d.ts", + "sizeBytes": 21767, + "sha256": "83ce96595700aac82a23a46643db97314a5cc7d79fd6f3bee6d89541eceaf74c" + }, + { + "path": "src/alphalib/types/robots/image-generate.ts", + "sizeBytes": 3465, + "sha256": "054a6d1a584bddf6cb2636cc4b8984f0da2f497066e15ec5ce1fb0b3e91d5958" + }, + { + "path": "dist/alphalib/types/robots/image-merge.d.ts", + "sizeBytes": 19863, + "sha256": "b7ad4dc952aaae6250d2cfd6ffaedf915ab177c9fa86cad92ff764f71980e2b3" + }, + { + "path": "src/alphalib/types/robots/image-merge.ts", + "sizeBytes": 4399, + "sha256": "f86cde29eaef40c73185ccd5a06cce1b16392af2fe5a3657f537d008516193c5" + }, + { + "path": "dist/alphalib/types/robots/image-ocr.d.ts", + "sizeBytes": 18589, + "sha256": "c7875da64b1b3d96c8febb34de10cba91c8b3a75bf4de71e4347a837ded157e7" + }, + { + "path": "src/alphalib/types/robots/image-ocr.ts", + "sizeBytes": 5013, + "sha256": "e52bf1ef75dcf595c648b071c9b1d0cec7332055ad17205795d87567855e9dc8" + }, + { + "path": "dist/alphalib/types/robots/image-optimize.d.ts", + "sizeBytes": 19364, + "sha256": "fcf380dbaa88647a2659f8fed5b8705179e11eb48b690d93732aa1697ddac733" + }, + { + "path": "src/alphalib/types/robots/image-optimize.ts", + "sizeBytes": 4943, + "sha256": "a28ba8e59e94cbc77d39fe0442115b1ef07edaaaaef39c8039b2cdf2b9740437" + }, + { + "path": "dist/alphalib/types/robots/image-resize.d.ts", + "sizeBytes": 90591, + "sha256": "06048ee955f4b4a4c918553461f5203b6666ee251f0eeebb250765425055bd1f" + }, + { + "path": "src/alphalib/types/robots/image-resize.ts", + "sizeBytes": 28301, + "sha256": "23a89aaa7f7e7721eac3e7dafb1f82fdb5c1277dc30d85cf3e3364c478e45151" + }, + { + "path": "dist/InconsistentResponseError.d.ts", + "sizeBytes": 138, + "sha256": "65e9660f7df57f53d44dc10f9b3b547411b1c32a5ee3c886f2ae02e8d65163ee" + }, + { + "path": "src/InconsistentResponseError.ts", + "sizeBytes": 111, + "sha256": "05f61ae5885cda2995817857c701155383cc4bc63f04a574b07dbd18111ac9ab" + }, + { + "path": "dist/cli/commands/index.d.ts", + "sizeBytes": 110, + "sha256": "8138bd76ab0a7ad7dc62b74d654fd7335de2fa86e1fb58f34788df74005ccc2d" + }, + { + "path": "src/cli/commands/index.ts", + "sizeBytes": 1648, + "sha256": "96dcf864fd177c933434cc0e43ca8fe58aa153332ed5013af6d1012d4fde9d8f" + }, + { + "path": "dist/alphalib/mcache.d.ts", + "sizeBytes": 1881, + "sha256": "35ca1c21bf3de9ba4b28e19637c937a83f15b88dc2081dc9106f6201619e6451" + }, + { + "path": "src/alphalib/mcache.ts", + "sizeBytes": 4861, + "sha256": "6481c39114c8a5d6a514e2cdb0c40ee56f6f8ab56bb0a83ce91ed4f69a58184f" + }, + { + "path": "dist/alphalib/types/robots/meta-read.d.ts", + "sizeBytes": 5750, + "sha256": "f96e77de20bbda56606331d247cd9f08e73c86bbc3734c1f2d650d7ba397edc3" + }, + { + "path": "src/alphalib/types/robots/meta-read.ts", + "sizeBytes": 1626, + "sha256": "d039db9cc3fb5dff8523c398dcfd5ec7a4165e82c386bdcf5c8e10bab79fcade" + }, + { + "path": "dist/alphalib/types/robots/meta-write.d.ts", + "sizeBytes": 154336, + "sha256": "6dbc3ba00bebfbae0453baed961ad5f22c95a6a917d2dafcd208a45a21481aa0" + }, + { + "path": "src/alphalib/types/robots/meta-write.ts", + "sizeBytes": 3125, + "sha256": "49b1262dbcb811d08288f1efb102378b5ffed43c2bf05339d1fb088d0edb5a29" + }, + { + "path": "dist/alphalib/types/robots/minio-import.d.ts", + "sizeBytes": 12032, + "sha256": "56f5ad945624b293847bec369f49c57e4679b37884e4931b1dee102ab52e0636" + }, + { + "path": "src/alphalib/types/robots/minio-import.ts", + "sizeBytes": 4729, + "sha256": "6211c7a5c246574b614f3d7c0735de4a03242ff1c50954b1bd4d1cdc28bf3ae5" + }, + { + "path": "dist/alphalib/types/robots/minio-store.d.ts", + "sizeBytes": 21007, + "sha256": "4381c1c9a5447d4809742d37d11a3ae213e8875a60cad6d918fcf771a5814a8c" + }, + { + "path": "src/alphalib/types/robots/minio-store.ts", + "sizeBytes": 4189, + "sha256": "dc468fce6896ee822cd01eb5c1684e1c157aaf0f91530d965aee360baedb58e3" + }, + { + "path": "dist/alphalib/lib/nativeGlobby.d.ts", + "sizeBytes": 466, + "sha256": "df27afec76a5a459e53a10ac12f263924a1a99caadf239af8d943e1cf6de582d" + }, + { + "path": "src/alphalib/lib/nativeGlobby.ts", + "sizeBytes": 6987, + "sha256": "85bb1d37eb0e2c18f46178d28553a993c35eb2b145cfdddc90425ac5d3f6ec11" + }, + { + "path": "dist/cli/commands/notifications.d.ts", + "sizeBytes": 368, + "sha256": "8a557cc08d30854ae63efdd10cfc65add0eeca9748747bf5976f6264b89c9d62" + }, + { + "path": "src/cli/commands/notifications.ts", + "sizeBytes": 1829, + "sha256": "2cf790e6076b7983c6b88fb6aee38069765e2997b86b897bd0a4878ed5e3f966" + }, + { + "path": "dist/cli/OutputCtl.d.ts", + "sizeBytes": 1612, + "sha256": "bcccf6179f7ee37b2f78c572cc2d1d853ca9511fc90f4c887d8f7f7e95ce559a" + }, + { + "path": "src/cli/OutputCtl.ts", + "sizeBytes": 3397, + "sha256": "d16381cf45ae93b8bc2f42a9f4de9e1a012a21962e33a7ca36071cabca0e616a" + }, + { + "path": "dist/PaginationStream.d.ts", + "sizeBytes": 581, + "sha256": "952b4a59f1af5ba76db5d2aa705a88f5ff0ac58eeb09072b7bb8a1234be88245" + }, + { + "path": "src/PaginationStream.ts", + "sizeBytes": 1204, + "sha256": "ac24517761007d62f9f895cd69f89947cb98c1f79bb7c1038972648464c39260" + }, + { + "path": "dist/PollingTimeoutError.d.ts", + "sizeBytes": 144, + "sha256": "b8c5c12ce75d4ae2c196e4be780a67378547dd15fdccdb2824963e35a8ca4c96" + }, + { + "path": "src/PollingTimeoutError.ts", + "sizeBytes": 129, + "sha256": "52cd41a954b98ea5fdcb4d4b238da5e8203bd5c66a1e9c56bc25520cc6c1a6d5" + }, + { + "path": "dist/alphalib/types/robots/progress-simulate.d.ts", + "sizeBytes": 9245, + "sha256": "12e4ab3ccd73da1e7e7a45463a4eddf2b3091e04adf318d7737c0a56e915ad01" + }, + { + "path": "src/alphalib/types/robots/progress-simulate.ts", + "sizeBytes": 1325, + "sha256": "0591686d6c3787e0af4821649506d88034d3f302b021969dc91d612f7e9b3e8b" + }, + { + "path": "dist/alphalib/types/robots/s3-import.d.ts", + "sizeBytes": 13045, + "sha256": "32ffbd902a5c6c730f53014f642d371798fc110764c75d2ec5ab0a1cda02eb63" + }, + { + "path": "src/alphalib/types/robots/s3-import.ts", + "sizeBytes": 9153, + "sha256": "d3c2beb8aab49ce388cc98a63aa96221c82b70a41b89273e161fd783cf16ece2" + }, + { + "path": "dist/alphalib/types/robots/s3-store.d.ts", + "sizeBytes": 24603, + "sha256": "b2b926fdf8ed60165b5339f98dbbad4c5cb7e82a0d33c92a2e96a6ef87257f19" + }, + { + "path": "src/alphalib/types/robots/s3-store.ts", + "sizeBytes": 10404, + "sha256": "e46e6aa2a6c15c5253b17146af9f68506446ab6032f19dcf86d03abedf22216f" + }, + { + "path": "dist/alphalib/types/robots/script-run.d.ts", + "sizeBytes": 17234, + "sha256": "63547b6645117601d1de851b79bada4301a9b0f62a4bca1cf3e89632754786d0" + }, + { + "path": "src/alphalib/types/robots/script-run.ts", + "sizeBytes": 4500, + "sha256": "1f2ef9f81a63f341d419e289d1483e4c09c11df803771313690182d81e1ce543" + }, + { + "path": "dist/alphalib/types/robots/sftp-import.d.ts", + "sizeBytes": 9785, + "sha256": "a7fd349a62c27f52b20dfe99ed009e6b1fc7b6eaad15b51761e7eaa6f78ca3ed" + }, + { + "path": "src/alphalib/types/robots/sftp-import.ts", + "sizeBytes": 3065, + "sha256": "fe02c9a941b0d77c063dbb5bc2627da6a4828366a97ce6b6d7a43f912dfd22aa" + }, + { + "path": "dist/alphalib/types/robots/sftp-store.d.ts", + "sizeBytes": 20864, + "sha256": "f1c8e65870880f7afca120b6dfb9bad0c8d1289953bc33221ff19035e2f3a291" + }, + { + "path": "src/alphalib/types/robots/sftp-store.ts", + "sizeBytes": 4129, + "sha256": "8a2f0b5f00e281b04d9270286c679f2829e1c2b5186d41e96f495039a865ec08" + }, + { + "path": "dist/alphalib/types/robots/speech-transcribe.d.ts", + "sizeBytes": 19949, + "sha256": "ace8aa2b1d2f366893cb34bee4a0413bf117ff4302ffa2dde911cea802779bd5" + }, + { + "path": "src/alphalib/types/robots/speech-transcribe.ts", + "sizeBytes": 5994, + "sha256": "62516b051ea830ceb759193b72258eb9f71eb1ef592caf583de713afb4735571" + }, + { + "path": "dist/alphalib/types/stackVersions.d.ts", + "sizeBytes": 345, + "sha256": "abffa61231b5d99c58c189e8f2fefe52befa7caf031d89f15f9a9019a77deded" + }, + { + "path": "src/alphalib/types/stackVersions.ts", + "sizeBytes": 321, + "sha256": "2905f2af4f9dc9989eb957552b6a7212015f9ccc3830f5c1b47b3fe493ae23cb" + }, + { + "path": "dist/alphalib/types/robots/supabase-import.d.ts", + "sizeBytes": 12627, + "sha256": "90adca5e04dcfa03b5b36bac2754cc117599d1b35b15641296a7f67077e7c5b6" + }, + { + "path": "src/alphalib/types/robots/supabase-import.ts", + "sizeBytes": 4908, + "sha256": "b5010e2b076201a833ab305dce1ef0d3e27ec02bd9087136b79ccfa8057fc18e" + }, + { + "path": "dist/alphalib/types/robots/supabase-store.d.ts", + "sizeBytes": 21036, + "sha256": "053600e9ef6680faef2101ae027846ca8fa758e09a1e81be61be32a4add5c303" + }, + { + "path": "src/alphalib/types/robots/supabase-store.ts", + "sizeBytes": 4050, + "sha256": "db0973dfb43a0cfa30d27d7fc1cb0f8bca7a89c0eae0ac42583641fd5fbd4eac" + }, + { + "path": "dist/alphalib/types/robots/swift-import.d.ts", + "sizeBytes": 12540, + "sha256": "ac69f5083e4b43aa681f4b4a6250927a99180c35fb8b582d2f9bc92182f843fd" + }, + { + "path": "src/alphalib/types/robots/swift-import.ts", + "sizeBytes": 4769, + "sha256": "db5b4fce872e9379b32cb451238900b1a384d28c1be5481caf5910b8f306a14a" + }, + { + "path": "dist/alphalib/types/robots/swift-store.d.ts", + "sizeBytes": 21515, + "sha256": "54fe47c918a5738080d1e602663fbf800c2545defb8bb0cacb48c3ee6657f2a4" + }, + { + "path": "src/alphalib/types/robots/swift-store.ts", + "sizeBytes": 4259, + "sha256": "a3a48fd577d0a3c8afcbfb0933d3f18e87ab573885287a6be5dc9554720b1168" + }, + { + "path": "dist/cli/template-last-modified.d.ts", + "sizeBytes": 376, + "sha256": "7752e122126205b1a294c18a2fbfb3fdc00f2a88c5f188d277b51e97f0525613" + }, + { + "path": "src/cli/template-last-modified.ts", + "sizeBytes": 3925, + "sha256": "c319bb83a5a3e24fb9998976eeae74a2e9094356e2ac1495d8519df7aaa371d6" + }, + { + "path": "dist/alphalib/types/template.d.ts", + "sizeBytes": 7679978, + "sha256": "758e25908eaa5329ae33a9d694b339e4d8cb6def4459d5a8d1581829eeb667f5" + }, + { + "path": "src/alphalib/types/template.ts", + "sizeBytes": 11635, + "sha256": "4c72d99aefee3ffe6dc9fb285f51773d7446b24b4d6fff4aafb0a8d5b89efa18" + }, + { + "path": "dist/alphalib/types/templateCredential.d.ts", + "sizeBytes": 3526, + "sha256": "09de6d53950e580a1ed01a61fca71047c70637c9df24298e1772b310d188c82a" + }, + { + "path": "src/alphalib/types/templateCredential.ts", + "sizeBytes": 1375, + "sha256": "2d0a63c819e86f0eee3bb4811d32033ede8be5692ff9ba02c30147db42a41520" + }, + { + "path": "dist/cli/commands/templates.d.ts", + "sizeBytes": 2875, + "sha256": "62c3ab8980473a08a6ebfb662d56b517ad8cbc1f8d82988aa7f181e07d010bf0" + }, + { + "path": "src/cli/commands/templates.ts", + "sizeBytes": 16146, + "sha256": "12037ee25c27331aaa630d519c52e6c81520f002f79a74782b4d647d66025b15" + }, + { + "path": "dist/alphalib/types/robots/text-speak.d.ts", + "sizeBytes": 19946, + "sha256": "0360f009914c68cec3f2dbfb143047650c3a9fde1e2f5b31f17462cdf44f5c96" + }, + { + "path": "src/alphalib/types/robots/text-speak.ts", + "sizeBytes": 5446, + "sha256": "61faa11c89a96029931a6f950d7bf85e8cd021b852a90e0fc509fc22f286d297" + }, + { + "path": "dist/alphalib/types/robots/text-translate.d.ts", + "sizeBytes": 30846, + "sha256": "061b8a82ec26534d96598aebd5814921c0776dab9611c68650e538ec4b9f5388" + }, + { + "path": "src/alphalib/types/robots/text-translate.ts", + "sizeBytes": 6167, + "sha256": "60a628fc3a73ac29d989600c4697c80fc20f380713e3070bdbcb065f8bc14244" + }, + { + "path": "dist/alphalib/types/robots/tigris-import.d.ts", + "sizeBytes": 12557, + "sha256": "367ac7fd0910a21d0c91f368125cfbc2ac41b311011a602f0e1196ccbc1c6256" + }, + { + "path": "src/alphalib/types/robots/tigris-import.ts", + "sizeBytes": 4913, + "sha256": "4314fcad1af19426e44a715dfddcf66ca567194c7b1c562816acfef33f51bee0" + }, + { + "path": "dist/alphalib/types/robots/tigris-store.d.ts", + "sizeBytes": 21532, + "sha256": "8c86efd7e6562ff020749b2863272de41dfd2af637a5ae281a3e9d628f6e8460" + }, + { + "path": "src/alphalib/types/robots/tigris-store.ts", + "sizeBytes": 4368, + "sha256": "2ab40d3bf6dfce8c075b506f6ca037ecbcb94f7a8987a1b0a3190facd97e11b7" + }, + { + "path": "dist/alphalib/types/robots/tlcdn-deliver.d.ts", + "sizeBytes": 6141, + "sha256": "2d55583c45f4821e987b2c6c91508a9c5432520dcd184e96f4c744772eac673d" + }, + { + "path": "src/alphalib/types/robots/tlcdn-deliver.ts", + "sizeBytes": 2780, + "sha256": "98a184703f11ae07882a2b4424b0fe606ae32ef7f89331a1e89660a8df27ea1c" + }, + { + "path": "dist/Transloadit.d.ts", + "sizeBytes": 9194, + "sha256": "cbd0295d32aa80473afdfdf5674991228724c5488094936ddae3af329a8d3fe8" + }, + { + "path": "src/Transloadit.ts", + "sizeBytes": 31079, + "sha256": "0e431a0e5454816551e3980adde72035b32b0be00b464e626288477356822842" + }, + { + "path": "dist/alphalib/tryCatch.d.ts", + "sizeBytes": 772, + "sha256": "1eece292533e3695a84b6fa2fcd6c1bd38fc77f9a6b7cef849ff0852b6d79456" + }, + { + "path": "src/alphalib/tryCatch.ts", + "sizeBytes": 880, + "sha256": "e0c9e9a35c092d88ca2c861a3a2d4a75f9efa5101ec50e1c6a52a2ac06ac917c" + }, + { + "path": "dist/alphalib/types/robots/tus-store.d.ts", + "sizeBytes": 19747, + "sha256": "57fc17b9635c1a9c52c8a18c961f45a21ab43668c5e5912a9c7bdbb60464d2a4" + }, + { + "path": "src/alphalib/types/robots/tus-store.ts", + "sizeBytes": 5261, + "sha256": "2360ca08adc4ebbc35c6d4e2a14e5c5f3f4b52e6d57720c5c7958a71cf99ce3f" + }, + { + "path": "dist/tus.d.ts", + "sizeBytes": 698, + "sha256": "71419e8ef5a5308428a59d52bca3be0ad68d5428547d7a44ba6d7c72feba8a93" + }, + { + "path": "src/tus.ts", + "sizeBytes": 5040, + "sha256": "5214697dff961d604f6db254e4ae04f7513913d70734fef8a3eee33ddadd6111" + }, + { + "path": "dist/cli/types.d.ts", + "sizeBytes": 2503, + "sha256": "c62e78eb76dea08fc842b9557143dee71f4b68aaa1171249497f60279844ef31" + }, + { + "path": "src/cli/types.ts", + "sizeBytes": 1988, + "sha256": "34046c83c95ddb5087632149583b39d1e60e3bb5f373788bfb52ae5abf03dd75" + }, + { + "path": "dist/alphalib/types/robots/upload-handle.d.ts", + "sizeBytes": 6141, + "sha256": "f92f0f4fb223e34c6d71bc585ab29c15c6a3a101208e2653c992b23ff43cf54f" + }, + { + "path": "src/alphalib/types/robots/upload-handle.ts", + "sizeBytes": 3439, + "sha256": "4bf3de4456a3aa53d370f4568a0ab1c5423ac8f251d83c62b593fe7d8f814a9d" + }, + { + "path": "dist/alphalib/types/robots/video-adaptive.d.ts", + "sizeBytes": 213318, + "sha256": "7a79447f68a242551c39d73a5e020e09d7bbfbb1321d5d1ad88d353ef9037ec4" + }, + { + "path": "src/alphalib/types/robots/video-adaptive.ts", + "sizeBytes": 6616, + "sha256": "e74aff371f673ca60e8d472ab257bf97fdc0ab53fb097798abefc8392bd575ab" + }, + { + "path": "dist/alphalib/types/robots/video-concat.d.ts", + "sizeBytes": 212250, + "sha256": "d1536349d4065446732696fa8ec3a2807496d2dc302a2649ba11b3b2a2f08a1f" + }, + { + "path": "src/alphalib/types/robots/video-concat.ts", + "sizeBytes": 5221, + "sha256": "3165f6d83e36251c505d443821e3b0ce9697569f050be5369a19728aff4e83d0" + }, + { + "path": "dist/alphalib/types/robots/video-encode.d.ts", + "sizeBytes": 233784, + "sha256": "4e8287533efdd130afd6848f6f66653a4d4366778849894827ab4b066af49205" + }, + { + "path": "src/alphalib/types/robots/video-encode.ts", + "sizeBytes": 5101, + "sha256": "f75e56eb0bc43e46e9fccfef8c11fa86da70fd0ed231ba3125228a9b93b368dc" + }, + { + "path": "dist/alphalib/types/robots/video-merge.d.ts", + "sizeBytes": 216753, + "sha256": "2951bd8b2a929ab0fa5d2f23a092e68017ec1a4e50110005bbdde70363691936" + }, + { + "path": "src/alphalib/types/robots/video-merge.ts", + "sizeBytes": 6305, + "sha256": "8f70bdaf791e1e49e875f0876f6800591288e8f1dc24afad094163cf9cd2bfd5" + }, + { + "path": "dist/alphalib/types/robots/video-ondemand.d.ts", + "sizeBytes": 328276, + "sha256": "da59f54bbb515fbd9ef9cb1a19aa97561c1acd356acf9b1318383f9583ed0545" + }, + { + "path": "src/alphalib/types/robots/video-ondemand.ts", + "sizeBytes": 5479, + "sha256": "e380a593595c0295feaeaee0bc338cd9df43dce8d68f955b3b28b96e7d1528f0" + }, + { + "path": "dist/alphalib/types/robots/video-subtitle.d.ts", + "sizeBytes": 216860, + "sha256": "b0a6152e9b4b8b363c9c2f9f07195320277e2137c80266d55353c30d94d53d3e" + }, + { + "path": "src/alphalib/types/robots/video-subtitle.ts", + "sizeBytes": 5356, + "sha256": "b829093f0b0d8518216a21e9d8d1c8fec095ed97fdf80d0442141c001b2a1aa0" + }, + { + "path": "dist/alphalib/types/robots/video-thumbs.d.ts", + "sizeBytes": 159836, + "sha256": "76099f2d09bc70305d94cdbd22ff6b1d7f0510aba2e41e235ccfebe9f7f121f5" + }, + { + "path": "src/alphalib/types/robots/video-thumbs.ts", + "sizeBytes": 6146, + "sha256": "56ff17844959e49ca07a6dd55699c87164bd903dd67f1763a89b5bdf21132d2e" + }, + { + "path": "dist/alphalib/types/robots/vimeo-import.d.ts", + "sizeBytes": 10628, + "sha256": "c3d04aa4ba8bc9d60dd0b9adbfc1cf58b3f7cfca8e8f3ef7106324f9502cc9cb" + }, + { + "path": "src/alphalib/types/robots/vimeo-import.ts", + "sizeBytes": 4152, + "sha256": "2986132be48ace59ec097593bb5a339ce11a4a6a321a7cd50cc42a86c960a07b" + }, + { + "path": "dist/alphalib/types/robots/vimeo-store.d.ts", + "sizeBytes": 21633, + "sha256": "451488a53edaabdc43a66b68473b80dca87426f38f484d4c45eeed9c653a021a" + }, + { + "path": "src/alphalib/types/robots/vimeo-store.ts", + "sizeBytes": 5071, + "sha256": "ac4db748b1713592ea0aa131ee4dc59e360c676c8b7df3514ae410fb8f992938" + }, + { + "path": "dist/alphalib/types/robots/wasabi-import.d.ts", + "sizeBytes": 12587, + "sha256": "d4066c0bbc2667dd25945e6fc8a14a845cce2cc5c00f05ea8c393081fb5c1689" + }, + { + "path": "src/alphalib/types/robots/wasabi-import.ts", + "sizeBytes": 4898, + "sha256": "441b3730b98c5b2f0b86084d8ef169a7765771d84ef9fff15584d0638cf9b9b9" + }, + { + "path": "dist/alphalib/types/robots/wasabi-store.d.ts", + "sizeBytes": 21544, + "sha256": "f93747dc3012a7d553398f2da21f8e3945cbc082bbe7cba42aadbf5ec41b6aa2" + }, + { + "path": "src/alphalib/types/robots/wasabi-store.ts", + "sizeBytes": 4220, + "sha256": "45d6d2a669f03eb1e49e53f0463cde1a8f873e3562960e6596366569e8a33a6f" + }, + { + "path": "dist/alphalib/types/robots/youtube-store.d.ts", + "sizeBytes": 21333, + "sha256": "738f8455435c681022c8a7a6e703ecb6d1a53c338ea5c7678d04e634485d2f44" + }, + { + "path": "src/alphalib/types/robots/youtube-store.ts", + "sizeBytes": 5592, + "sha256": "d894f341c86bf6d1d21bc328eed7df2d686b07f4e59734a9354da309bcdb73cf" + }, + { + "path": "dist/alphalib/zodParseWithContext.d.ts", + "sizeBytes": 524, + "sha256": "6d8328e22a9419e3c879e1d1ea6ad40fc8c724d31e1351e60e45f3b81472313a" + }, + { + "path": "src/alphalib/zodParseWithContext.ts", + "sizeBytes": 12282, + "sha256": "d5bf1ecfed63b2a910c20048fa89ca52a84e83c4848c4eb891369b6857e55459" + } + ] +} diff --git a/docs/fingerprint/transloadit-baseline.json b/docs/fingerprint/transloadit-baseline.json new file mode 100644 index 00000000..8e10805b --- /dev/null +++ b/docs/fingerprint/transloadit-baseline.json @@ -0,0 +1,2985 @@ +{ + "packageDir": "/home/kvz/code/node-sdk/packages/transloadit", + "tarball": { + "filename": "transloadit-4.1.2.tgz", + "sizeBytes": 1110479, + "sha256": "1f9d45a0d0055c488da28eac563ad79073cedfab16ccf7bd4e5ea9bb50cf655a" + }, + "packageJson": { + "name": "transloadit", + "version": "4.1.2", + "main": "./dist/Transloadit.js", + "exports": { + ".": "./dist/Transloadit.js", + "./package.json": "./package.json" + }, + "files": ["dist", "src"] + }, + "files": [ + { + "path": "LICENSE", + "sizeBytes": 1081, + "sha256": "f2ef2628f6aafeca9a1b1230f13c21670af294088cb42d39fb764f8e5d569146" + }, + { + "path": "dist/alphalib/types/robots/_index.js", + "sizeBytes": 27976, + "sha256": "a78ae27fbae9d86e5b49d218a3685fac031cf2f6a6ccae372176f74e73d4af93" + }, + { + "path": "dist/alphalib/types/robots/_instructions-primitives.js", + "sizeBytes": 59552, + "sha256": "a9cb9b01c80fdb77fe5e8874ff58ade6447a725f2012c825ca87d2aaef5a339f" + }, + { + "path": "dist/alphalib/types/robots/ai-chat.js", + "sizeBytes": 9161, + "sha256": "3b750f7fa1d29200895f5b5b789326570fb85c1b65e51bc49bdeee73707dd3e0" + }, + { + "path": "dist/ApiError.js", + "sizeBytes": 1142, + "sha256": "04195425a4e243b510c7532ab81715fab616b626792c78d34cdacfd01b5e001e" + }, + { + "path": "dist/apiTypes.js", + "sizeBytes": 212, + "sha256": "b4f636535a1697010c34d7c2eca37ee2a0646441e3482174a83076a230031f47" + }, + { + "path": "dist/cli/commands/assemblies.js", + "sizeBytes": 41382, + "sha256": "5cf7b811de94982c89bcd5746dd2a25bf3fde22c78a2afb0c738b28de6a42031" + }, + { + "path": "dist/alphalib/types/assembliesGet.js", + "sizeBytes": 1454, + "sha256": "9e597e5a7b157453d64e4076d5eaa3e14af04e0a527faa7fee82e66252524d57" + }, + { + "path": "dist/alphalib/types/robots/assembly-savejson.js", + "sizeBytes": 829, + "sha256": "d5c6fae674126937d25d9f52ec84045c6a90c7c6f33a5b6a0adc96dfa8c94f83" + }, + { + "path": "dist/alphalib/types/assemblyReplay.js", + "sizeBytes": 708, + "sha256": "678ac3ccb4b3d4cfc239bc82315fecf3b6c0ab9830c4262af53094521efe49cd" + }, + { + "path": "dist/alphalib/types/assemblyReplayNotification.js", + "sizeBytes": 648, + "sha256": "99fc21decd44147f9800078b5f2030a5f4572eb939ad0d130e3d1b59aa919e74" + }, + { + "path": "dist/alphalib/types/assemblyStatus.js", + "sizeBytes": 28396, + "sha256": "4466ef1c9ed54e8955cae08480cd7f69d257b92965fa25a32402f1838929e075" + }, + { + "path": "dist/alphalib/types/robots/audio-artwork.js", + "sizeBytes": 3103, + "sha256": "76757ca647e388f1f25b9958d90eee491329ac055e69cc0d44f34f5588e01c32" + }, + { + "path": "dist/alphalib/types/robots/audio-concat.js", + "sizeBytes": 5014, + "sha256": "115fd94cccdb0a79e92b9c6bd0876c8c744d4c9abeba370cf2be6d9ca2e8ac1a" + }, + { + "path": "dist/alphalib/types/robots/audio-encode.js", + "sizeBytes": 2726, + "sha256": "c140e1b162b20e637ea71b3b6448dd4cd12ac7f1f1eb77d9d362458aabda4890" + }, + { + "path": "dist/alphalib/types/robots/audio-loop.js", + "sizeBytes": 2965, + "sha256": "dbe253c901dc7237b4641e5a915a4762b8e06406a5f1472d824ae3aa127e7cdc" + }, + { + "path": "dist/alphalib/types/robots/audio-merge.js", + "sizeBytes": 4445, + "sha256": "afe42b1aeeb4ae4521bdae2f9b66389c3e51a3be31ed6fef5444bf63e661094f" + }, + { + "path": "dist/alphalib/types/robots/audio-waveform.js", + "sizeBytes": 8845, + "sha256": "7303f23c4b4076e6c4df63b591ee5cd3eeef2eb704e6f5f5b09650bacf111c5e" + }, + { + "path": "dist/cli/commands/auth.js", + "sizeBytes": 10038, + "sha256": "58f10fbe648d8a655ececd76da07bfed67b9d737e879ca412f167988a1c164f2" + }, + { + "path": "dist/alphalib/types/robots/azure-import.js", + "sizeBytes": 3151, + "sha256": "6910a81f6a49a8d066f115fe5c01ca858544f1be5e873d69b4005eed8ff149dd" + }, + { + "path": "dist/alphalib/types/robots/azure-store.js", + "sizeBytes": 4221, + "sha256": "f172a4b516cee0ffa08ae7be418062269e1acb38a897758eb53af0ca6d75e6b7" + }, + { + "path": "dist/alphalib/types/robots/backblaze-import.js", + "sizeBytes": 3793, + "sha256": "d485074d56b7ad715a6bafcb24d325ddd82161375777624c2a051605dd08edbc" + }, + { + "path": "dist/alphalib/types/robots/backblaze-store.js", + "sizeBytes": 3067, + "sha256": "894476eb386dab764c1bcf6b432da7fa193181f4206523b1cefac17676fbef1c" + }, + { + "path": "dist/cli/commands/BaseCommand.js", + "sizeBytes": 1895, + "sha256": "1141a59a8ec2f47f6e5d4257b81e44fad8f50d693d1d22d6a0d6a2a08b5f8792" + }, + { + "path": "dist/alphalib/types/bill.js", + "sizeBytes": 223, + "sha256": "3dc47a7b3e5c570bf7ace002fe9438174b553118eee9ff95b5a9170d4c5d904f" + }, + { + "path": "dist/cli/commands/bills.js", + "sizeBytes": 2328, + "sha256": "fee6e43bf67ac5c5b2187300fde17c075e0ffc83a13b04d6485649ce23bd61e3" + }, + { + "path": "dist/cli.js", + "sizeBytes": 1147, + "sha256": "4d52d0cea6f64abe67fd99d9bdf14dee38a51ee9c366eb45f110f38ab008f4dd" + }, + { + "path": "dist/alphalib/types/robots/cloudfiles-import.js", + "sizeBytes": 3721, + "sha256": "e567b21d596f55897ac665f9381eeaae446bbd8b8d0194fe78eced661f90ee7d" + }, + { + "path": "dist/alphalib/types/robots/cloudfiles-store.js", + "sizeBytes": 2774, + "sha256": "4e62566a3bd5f3c721530756d69ffbdebe0f8068c481adc0cab0f89e045bfc98" + }, + { + "path": "dist/alphalib/types/robots/cloudflare-import.js", + "sizeBytes": 4080, + "sha256": "e9c54853a785a5c00c8f505e22f3f945cd916e4cc2ed86fa48df5a7615ceb6ee" + }, + { + "path": "dist/alphalib/types/robots/cloudflare-store.js", + "sizeBytes": 3732, + "sha256": "20620755e2983692110364ca87c5c2a33c682cf5bd0c4f2605fb7778aba0c269" + }, + { + "path": "dist/alphalib/types/robots/digitalocean-import.js", + "sizeBytes": 3732, + "sha256": "27446736ec4af2ed0cbc591d06c54d5ea267463dfdc966293412260fc9d209bc" + }, + { + "path": "dist/alphalib/types/robots/digitalocean-store.js", + "sizeBytes": 3911, + "sha256": "614596c4ce9011844b648692fe95579a630b81c47cf153a35bf5895daddb6930" + }, + { + "path": "dist/alphalib/types/robots/document-autorotate.js", + "sizeBytes": 1855, + "sha256": "f6b173cb57244a55a8b8664e995c4a6ed4fb24496acbbd88b72e236f935747aa" + }, + { + "path": "dist/alphalib/types/robots/document-convert.js", + "sizeBytes": 9264, + "sha256": "48fa4fcf88072fd2b0d5f77efe762fee2a1592696c16b715876856480dffb205" + }, + { + "path": "dist/alphalib/types/robots/document-merge.js", + "sizeBytes": 3113, + "sha256": "48c65c895d8d70c624a1a0485ed2d1330970644ffc253968fbeb1aa7e452dea3" + }, + { + "path": "dist/alphalib/types/robots/document-ocr.js", + "sizeBytes": 4580, + "sha256": "b9210e80eeebdcec9637eabe101d0bf60705b52c62241ad5b8363fd270ace5a3" + }, + { + "path": "dist/alphalib/types/robots/document-split.js", + "sizeBytes": 2052, + "sha256": "1cc694f4eb281b7ea81b3bd13e503d082d510cd7a709d312cd5e6345094e1e1b" + }, + { + "path": "dist/alphalib/types/robots/document-thumbs.js", + "sizeBytes": 9164, + "sha256": "b9b3bee876448a5994fa07b72c503c265ec0c424b720366c3e3f1f458e51106a" + }, + { + "path": "dist/alphalib/types/robots/dropbox-import.js", + "sizeBytes": 2739, + "sha256": "601c199b71199df3b6555751beb56a360601d811a8a101482abeb132dde7ce62" + }, + { + "path": "dist/alphalib/types/robots/dropbox-store.js", + "sizeBytes": 2641, + "sha256": "6cdd30c2c056d0088bada2d9291f161f4586098acdbc1f0b281a122190360287" + }, + { + "path": "dist/alphalib/types/robots/edgly-deliver.js", + "sizeBytes": 1993, + "sha256": "268fedb80d76c3a8406f6ea79ee453ce1b821dc9bdc2bc92977e429aeca9bcc2" + }, + { + "path": "dist/alphalib/types/robots/file-compress.js", + "sizeBytes": 6014, + "sha256": "2ae785374900612d9812ff336cb5de575dd9a3cfe7c07c79c92397f5b58ad8db" + }, + { + "path": "dist/alphalib/types/robots/file-decompress.js", + "sizeBytes": 3815, + "sha256": "ffb6ea41fcb598c2d9ac0931f0eb3a3327ceb78cd76b7975ecb61a797ed48726" + }, + { + "path": "dist/alphalib/types/robots/file-filter.js", + "sizeBytes": 6060, + "sha256": "7a2e6c361c4e23a1357d9771b0b4c953ccebcc0d1ead5f7783afa3042cf2f919" + }, + { + "path": "dist/alphalib/types/robots/file-hash.js", + "sizeBytes": 2160, + "sha256": "da50b20968ed9a1382b6798674d0d09170ddd27ecafba053c8f0cebd3959968c" + }, + { + "path": "dist/alphalib/types/robots/file-preview.js", + "sizeBytes": 12783, + "sha256": "167e45afe25e777baedeeff632cf90d394529a8c6fec6a891619b56257c26333" + }, + { + "path": "dist/alphalib/types/robots/file-read.js", + "sizeBytes": 1794, + "sha256": "990503f1b1c09b3de0220ed00539cc8b3bf8d01bb7b8a8f2da83c3d2f0d20981" + }, + { + "path": "dist/alphalib/types/robots/file-serve.js", + "sizeBytes": 5843, + "sha256": "1da5e06b7a0df96856d6e4f5eee1738f22d9df80a1f8634e0ddf5b0146e6a7ac" + }, + { + "path": "dist/alphalib/types/robots/file-verify.js", + "sizeBytes": 3481, + "sha256": "7400f95c002a9709a3815d1bd6ce7fe929821eb97178e4a2b9ddf66f6ebe827b" + }, + { + "path": "dist/alphalib/types/robots/file-virusscan.js", + "sizeBytes": 3859, + "sha256": "d47518d1d345ace571c9eaaad3e15b49ab4267fd7fb7dfed3d3c9539a4cffca9" + }, + { + "path": "dist/alphalib/types/robots/file-watermark.js", + "sizeBytes": 1228, + "sha256": "474e8f93000f842761a1cebe9282c17eeba8c809f1d8ef25db026796edacbf89" + }, + { + "path": "dist/alphalib/types/robots/ftp-import.js", + "sizeBytes": 2406, + "sha256": "ed845f664e1ae7ab2cf8bf3c061f294f0926bb8889935afefa38e056f98e6526" + }, + { + "path": "dist/alphalib/types/robots/ftp-store.js", + "sizeBytes": 3534, + "sha256": "c4bd648bb097acadbc349406192105367b9d94c516700b99c9f4d7a4b6c7a6f0" + }, + { + "path": "dist/alphalib/types/robots/google-import.js", + "sizeBytes": 3748, + "sha256": "0688e2f84f217ae26b187916b93c6e4f32539c0fc84b6cb162ea2230cd81ae27" + }, + { + "path": "dist/alphalib/types/robots/google-store.js", + "sizeBytes": 5495, + "sha256": "c35a94120a06d17559df3ddf18a18a7d6a89a858ff4cdff4c12a6a3d1dec17ed" + }, + { + "path": "dist/cli/helpers.js", + "sizeBytes": 1239, + "sha256": "3d5c40d5c39207a606a545b1492ab53ebdfbe1592cb66e0b1493de870bbdb6af" + }, + { + "path": "dist/alphalib/types/robots/html-convert.js", + "sizeBytes": 5294, + "sha256": "17c47da30d42ce1209bcb0c53dddc14c119a6c202ae8f0f27afaaf0927a2c72c" + }, + { + "path": "dist/alphalib/types/robots/http-import.js", + "sizeBytes": 5758, + "sha256": "6257ae9fa7e6c9ef61cfd9be9b9f807da82caeaabf7bfb381da61948376a36ee" + }, + { + "path": "dist/alphalib/types/robots/image-bgremove.js", + "sizeBytes": 2515, + "sha256": "0016427ea42441dfba53c65ece6a30586456b14818dafc48d8f025ff910697c2" + }, + { + "path": "dist/alphalib/types/robots/image-describe.js", + "sizeBytes": 4568, + "sha256": "8f1f5d50e461b9ec9f223fa894e278a2fb8198823fbdd8a8cae6ef7bfd50ff5d" + }, + { + "path": "dist/alphalib/types/robots/image-facedetect.js", + "sizeBytes": 6408, + "sha256": "b8b19422756cfe35d038bccd7167fcaee1935932df441de68d9d16598a6c3141" + }, + { + "path": "dist/alphalib/types/robots/image-generate.js", + "sizeBytes": 2681, + "sha256": "85713e4db98b326fca7530d3f50f8fea2acc3bb56c10582f63cb85bc3ceaadf6" + }, + { + "path": "dist/alphalib/types/robots/image-merge.js", + "sizeBytes": 3712, + "sha256": "23c06084dfe66c3ebdbf11f7c93de2e928112814507987902520e0695d2fe6a5" + }, + { + "path": "dist/alphalib/types/robots/image-ocr.js", + "sizeBytes": 4316, + "sha256": "fe040da6c69082e831c8897389f2c32b13f488714ae0d9e97685865176c6ddce" + }, + { + "path": "dist/alphalib/types/robots/image-optimize.js", + "sizeBytes": 4187, + "sha256": "d9d455acad58e028da5c948b735025943ee07b112338c3b66933ed0ff4db9e54" + }, + { + "path": "dist/alphalib/types/robots/image-resize.js", + "sizeBytes": 27934, + "sha256": "7683dca61e77618aad347431b7693fac282d208526dde351ba86387a53c962f4" + }, + { + "path": "dist/InconsistentResponseError.js", + "sizeBytes": 158, + "sha256": "ed9fa27d9022fa08f620bb0f94cc17222c35301dd9bda8bfc59db669c9262ada" + }, + { + "path": "dist/cli/commands/index.js", + "sizeBytes": 1730, + "sha256": "f9b0afff030bd07795df879b5bf78d75ede571973a6a671803c7551b6c3e87c9" + }, + { + "path": "dist/alphalib/mcache.js", + "sizeBytes": 4515, + "sha256": "abcc5fb21d05f7c04bb7c454bdbce15c25f7d4fec03b901291bc8b2925e95d16" + }, + { + "path": "dist/alphalib/types/robots/meta-read.js", + "sizeBytes": 1119, + "sha256": "94bd6bb2e45f20009fffbf2d0395ac702ac4295c1b7e5088ae7cb12e1bdaeb5e" + }, + { + "path": "dist/alphalib/types/robots/meta-write.js", + "sizeBytes": 2446, + "sha256": "5bb3b6372ca87e8a18aa0a3c41a50f7cee87cafdca8e95a885b4de83dbf4611a" + }, + { + "path": "dist/alphalib/types/robots/minio-import.js", + "sizeBytes": 3985, + "sha256": "053ed2a56f66ceb50e780cf4478a6a66c1e2503d0f0f295252beeaaa8a06e1b1" + }, + { + "path": "dist/alphalib/types/robots/minio-store.js", + "sizeBytes": 3504, + "sha256": "6194fc2e78f65aa48c1d5c85d7c9a488e501436f8ef6758077aaa0da8bc44185" + }, + { + "path": "dist/alphalib/lib/nativeGlobby.js", + "sizeBytes": 6315, + "sha256": "33e19cc01c00058e2c46866a7dddc29769edffaab132f412d671f6f52a4be380" + }, + { + "path": "dist/cli/commands/notifications.js", + "sizeBytes": 1640, + "sha256": "5a419d28577d2952f32282ff0227ffa2cfbec6f4c3a48a6974b5485453297e44" + }, + { + "path": "dist/cli/OutputCtl.js", + "sizeBytes": 2838, + "sha256": "ccd55e24ca9b05134aeb5051b2b17a9b1dc181bff73b875f63ccde8071564630" + }, + { + "path": "dist/PaginationStream.js", + "sizeBytes": 1049, + "sha256": "955003e8e346cb275a55989da117fc99d7fb17ad2f2282e02b1940c6b3fceb85" + }, + { + "path": "dist/PollingTimeoutError.js", + "sizeBytes": 172, + "sha256": "bef858dea74a3ac0a03e6d595e6276d63fe272f9cb601d3101eeec8723ebb48a" + }, + { + "path": "dist/alphalib/types/robots/progress-simulate.js", + "sizeBytes": 935, + "sha256": "e01935073eab55214d9e37fa2d25e5615368efb8e9e2aedfa7a765e0d6e2bd84" + }, + { + "path": "dist/alphalib/types/robots/s3-import.js", + "sizeBytes": 8446, + "sha256": "d2abd1d554916505892242fb68b64bcc29350963f97808ccd57e047f487bb00a" + }, + { + "path": "dist/alphalib/types/robots/s3-store.js", + "sizeBytes": 9698, + "sha256": "7ac1cebb40a5959581740147f7ef1e3d680199a9f9e39a3562e6f818fbc5a0cb" + }, + { + "path": "dist/alphalib/types/robots/script-run.js", + "sizeBytes": 3740, + "sha256": "94f608e168909cf2dbb588d4c9c591921fbc2c13d68e11c51784e08b1588649c" + }, + { + "path": "dist/alphalib/types/robots/sftp-import.js", + "sizeBytes": 2340, + "sha256": "453005b909a864b3a6abf2714232e45aa5f7c08303579454301d3e80f2ad8e97" + }, + { + "path": "dist/alphalib/types/robots/sftp-store.js", + "sizeBytes": 3455, + "sha256": "4c023f0931db25b7d99da7f56828d5d7d2132c6e467ceda0bb764a0ec21d2555" + }, + { + "path": "dist/alphalib/types/robots/speech-transcribe.js", + "sizeBytes": 5236, + "sha256": "e60ffe357e734f4031d64f6574d885f009eedd62b77ab4052318f23a35ef8a4e" + }, + { + "path": "dist/alphalib/types/stackVersions.js", + "sizeBytes": 359, + "sha256": "44173300fc46f06c80f670d5a3a72e403cfcaddd7eb60703bc057ece42292ece" + }, + { + "path": "dist/alphalib/types/robots/supabase-import.js", + "sizeBytes": 4131, + "sha256": "774aacd11972e02c5f07217c43dc5a5c553c28191c36ea35e1f276019cbe395b" + }, + { + "path": "dist/alphalib/types/robots/supabase-store.js", + "sizeBytes": 3326, + "sha256": "8d0a8f42a2b26ff4db7a4ff9053bebd4ca9c772df64ffff60b8a433e055ffcea" + }, + { + "path": "dist/alphalib/types/robots/swift-import.js", + "sizeBytes": 4025, + "sha256": "96c59605b04963ad242f8f689b20149d07fd9216d936f097e0ee9646f52411f3" + }, + { + "path": "dist/alphalib/types/robots/swift-store.js", + "sizeBytes": 3574, + "sha256": "0d8af15a6f01c57651930e010d9190341d5ca41be81565b5c10549e21406c3c7" + }, + { + "path": "dist/cli/template-last-modified.js", + "sizeBytes": 4183, + "sha256": "26fb01b74d324df74e120cd7640a64d221214879e44dd695903602afbc01ee58" + }, + { + "path": "dist/alphalib/types/template.js", + "sizeBytes": 10452, + "sha256": "b48fbb82af77032c3076c5016410f251759ad295344557215753d931679c0679" + }, + { + "path": "dist/alphalib/types/templateCredential.js", + "sizeBytes": 1423, + "sha256": "02c74c8b94d3514c65c86af727ccf69acf6f3ef1cac184eea35aab75bd0b554f" + }, + { + "path": "dist/cli/commands/templates.js", + "sizeBytes": 15694, + "sha256": "fc2e8b636bf2f3d6c61bca5d11cf54acdf9f2e23d57d608cf282c94e2f9ea984" + }, + { + "path": "dist/alphalib/types/robots/text-speak.js", + "sizeBytes": 4762, + "sha256": "9021afe8eee26c0a33cbaf894e6151bce60073c8d22a40dab0ef8db8ae37223d" + }, + { + "path": "dist/alphalib/types/robots/text-translate.js", + "sizeBytes": 5413, + "sha256": "e6619ba063df5a848d3f80193b7f3fd427d223d8ea6863f144fdf7ffa2cd6643" + }, + { + "path": "dist/alphalib/types/robots/tigris-import.js", + "sizeBytes": 4164, + "sha256": "1329c999c4e31bf4f91aa76b4376b642367e91cbb2da69914166a83cfe05a899" + }, + { + "path": "dist/alphalib/types/robots/tigris-store.js", + "sizeBytes": 3678, + "sha256": "ebba4a6bfdf08283da83254b89baed774aa8080f40f97e93b90c2831b58461dc" + }, + { + "path": "dist/alphalib/types/robots/tlcdn-deliver.js", + "sizeBytes": 1988, + "sha256": "84f79f7a6d04e6330a7c032d609db16748ece8d750ca3f3023eed43a440f4b15" + }, + { + "path": "dist/Transloadit.js", + "sizeBytes": 28131, + "sha256": "8a9f68704b6dfaef019f10a79fbcc967034e6be6787e3f112c2ee480ae1ba5d3" + }, + { + "path": "dist/alphalib/tryCatch.js", + "sizeBytes": 447, + "sha256": "822422b495de06b013adca2c952371b85c5ce27f05058112384eec0781d7b80b" + }, + { + "path": "dist/alphalib/types/robots/tus-store.js", + "sizeBytes": 4596, + "sha256": "b845028fc26a96ba0509b0f8dc2444bed647144ad2415d167bd495df84d3217b" + }, + { + "path": "dist/tus.js", + "sizeBytes": 5058, + "sha256": "1f287a9083e9264f509833a1193f8cf4fae161cfa6d126ac3f81849f05ca3bc9" + }, + { + "path": "dist/cli/types.js", + "sizeBytes": 1433, + "sha256": "26181f39ef63756230a5ce4a3746b745e07949246d1ec72306f9960207f8bdeb" + }, + { + "path": "dist/alphalib/types/robots/upload-handle.js", + "sizeBytes": 2710, + "sha256": "0da0cf7c28a54af82ac125af0129f885b111b9e48cd64c477865d5438e29974d" + }, + { + "path": "dist/alphalib/types/robots/video-adaptive.js", + "sizeBytes": 6059, + "sha256": "6f2630b0d877d9c3ec398535231ef25cb31d3916e4613eb4b406cba8bc334613" + }, + { + "path": "dist/alphalib/types/robots/video-concat.js", + "sizeBytes": 4707, + "sha256": "fa977c68900d0417506fabc3a2b15dd96571374da707e0f79cfd48e9612e82b9" + }, + { + "path": "dist/alphalib/types/robots/video-encode.js", + "sizeBytes": 4357, + "sha256": "39dc586629c3715b6b9d8534477b79f82d790b052979d09cdd942ea9767f93a2" + }, + { + "path": "dist/alphalib/types/robots/video-merge.js", + "sizeBytes": 5568, + "sha256": "eb7b72fe71fa99aabcd6d83b24f836f1642447d6b8f2d42126698a1b3ee22669" + }, + { + "path": "dist/alphalib/types/robots/video-ondemand.js", + "sizeBytes": 4856, + "sha256": "b3a449cba726f0256be971a52f445f4319b6fe98300782bfae82417f4c910701" + }, + { + "path": "dist/alphalib/types/robots/video-subtitle.js", + "sizeBytes": 4789, + "sha256": "154d14545e5ea067928b4310e904f4c3ebab0be18f2e57fa4afbe252df679063" + }, + { + "path": "dist/alphalib/types/robots/video-thumbs.js", + "sizeBytes": 5469, + "sha256": "f25a86957a6a6a8a0eadd4e5db493405528c0d3aedb4576ddef9d0b0bc1394d3" + }, + { + "path": "dist/alphalib/types/robots/vimeo-import.js", + "sizeBytes": 3486, + "sha256": "7877ea6f6f225d50cb3767c5dd9efa67a08f867ca13ea534939682fc1a65c109" + }, + { + "path": "dist/alphalib/types/robots/vimeo-store.js", + "sizeBytes": 4410, + "sha256": "68f6b9618c990bc00f822a0e61f87ac8972ea0ebb2f795a13f2dd0f5b9e39a4d" + }, + { + "path": "dist/alphalib/types/robots/wasabi-import.js", + "sizeBytes": 4149, + "sha256": "f0886f787e0b56a07bed3abdb6e9e1b142bbc9f6d422ad060426e7f343329cb8" + }, + { + "path": "dist/alphalib/types/robots/wasabi-store.js", + "sizeBytes": 3524, + "sha256": "59f53885f81e1ca96733076d59492b4ea16e090185f98a02f1182d57ceb71930" + }, + { + "path": "dist/alphalib/types/robots/youtube-store.js", + "sizeBytes": 4838, + "sha256": "cc711980ff82e0050c63b28e04714c82b38856d785ac5f9b08eefa89f4a1bd15" + }, + { + "path": "dist/alphalib/zodParseWithContext.js", + "sizeBytes": 13900, + "sha256": "95686fd259cf628f479d483dff11edf5ec4bceb75f9780e079fa2444948260fe" + }, + { + "path": "package.json", + "sizeBytes": 2648, + "sha256": "a2fd83a1adc245ade4d1a376c3d8c92ba286e73412afb89fa5d8ef31212f560d" + }, + { + "path": "dist/alphalib/types/robots/_index.d.ts.map", + "sizeBytes": 83925, + "sha256": "4a58b2d2526d61cf04de1f64cd577281c16010c6c209bf03e2c9472d78e17ca1" + }, + { + "path": "dist/alphalib/types/robots/_index.js.map", + "sizeBytes": 10505, + "sha256": "0a08c1185a523b944b5beed2f8d4148ead599a31bae1233e7a4fe38f9678fc84" + }, + { + "path": "dist/alphalib/types/robots/_instructions-primitives.d.ts.map", + "sizeBytes": 10500, + "sha256": "ca5baf2a027f31493bb771f8bbdd9e7986ef3b5ad28013316c2fa0fedcce1eca" + }, + { + "path": "dist/alphalib/types/robots/_instructions-primitives.js.map", + "sizeBytes": 36172, + "sha256": "3436569bb5194b67b6f7606f4c7225aae7abf35285d4beab3196ed2ff7e30790" + }, + { + "path": "dist/alphalib/types/robots/ai-chat.d.ts.map", + "sizeBytes": 3190, + "sha256": "6921ce50d888101af8bd473fa0c52780df529fba30531295810ec191267a47f9" + }, + { + "path": "dist/alphalib/types/robots/ai-chat.js.map", + "sizeBytes": 7431, + "sha256": "38d154af5baea41967ac69fa5fa725189006ff7afcaaf098cde2178fb340e9c2" + }, + { + "path": "dist/ApiError.d.ts.map", + "sizeBytes": 669, + "sha256": "0f8015ffaa115fe02d3877267c7e236c3ad8b98c2e7bf9f5a66a389464ecdc62" + }, + { + "path": "dist/ApiError.js.map", + "sizeBytes": 1182, + "sha256": "b14ea886615cd781bf6d852ad60154339e06aa8541d70c1a352115807ea8af52" + }, + { + "path": "dist/apiTypes.d.ts.map", + "sizeBytes": 3499, + "sha256": "afccc6e3b08e1a87a42a680ffa1439d4cf0e883a1ebc3b19832b2f25db939987" + }, + { + "path": "dist/apiTypes.js.map", + "sizeBytes": 210, + "sha256": "74dee10f68f3060119affdbe0db6d1ad4cdc8a75b9345bc7107e071da1d69010" + }, + { + "path": "dist/cli/commands/assemblies.d.ts.map", + "sizeBytes": 3081, + "sha256": "3fbad0cc1518bfc5daa6aa1ac0ae071d9ee6d7559b655f1fdc03af4a6fc2b459" + }, + { + "path": "dist/cli/commands/assemblies.js.map", + "sizeBytes": 37213, + "sha256": "81900715bbe8def1da2bbaec42f51b311a083e7382daab88a3f4a899998cf4e9" + }, + { + "path": "dist/alphalib/types/assembliesGet.d.ts.map", + "sizeBytes": 263, + "sha256": "df2b0c48f851d217f2c2d31c8eb287c5eef4864eacaa0850fd3ac340a632487b" + }, + { + "path": "dist/alphalib/types/assembliesGet.js.map", + "sizeBytes": 961, + "sha256": "5295095d35108254c8b002333cf3d4d82d7d64d19be93fad049358ab1e78f217" + }, + { + "path": "dist/alphalib/types/robots/assembly-savejson.d.ts.map", + "sizeBytes": 573, + "sha256": "11ae78232682c6feb764982cb9c5166dd9660bad8f1fbfa26e9884a54daa2a66" + }, + { + "path": "dist/alphalib/types/robots/assembly-savejson.js.map", + "sizeBytes": 701, + "sha256": "1410553d8a5f26d188bb58de38ce04123e63f2d5d749bbfd0fe6495d84dd0078" + }, + { + "path": "dist/alphalib/types/assemblyReplay.d.ts.map", + "sizeBytes": 8129, + "sha256": "ac663fe8af49ddf31ac35347b4f1052c5234b98fb206fc7314cb18669fa4e0d5" + }, + { + "path": "dist/alphalib/types/assemblyReplay.js.map", + "sizeBytes": 612, + "sha256": "e3515c0e8c7af60e5655c8e8befc9d9456f0951c5db08b9fdbdc2753198a0719" + }, + { + "path": "dist/alphalib/types/assemblyReplayNotification.d.ts.map", + "sizeBytes": 8144, + "sha256": "aafb363bad7c9ae2ec4a94a79073be7b80f4e81ef7efe73e0e5b1ed11e853399" + }, + { + "path": "dist/alphalib/types/assemblyReplayNotification.js.map", + "sizeBytes": 477, + "sha256": "912872cd7b257168bb487687c7ca898633269f43849a8c36ac25629002604452" + }, + { + "path": "dist/alphalib/types/assemblyStatus.d.ts.map", + "sizeBytes": 73453, + "sha256": "51782d698296dcc8a71e651ab5c562b5a6939fc83fadf70538ddf0a6fda22532" + }, + { + "path": "dist/alphalib/types/assemblyStatus.js.map", + "sizeBytes": 31739, + "sha256": "d915945fb5cdcae71448b0baa4ad7a6ebd22848f5112858bb326920d8794be42" + }, + { + "path": "dist/alphalib/types/robots/audio-artwork.d.ts.map", + "sizeBytes": 3653, + "sha256": "353a21c0c3103024565abd36aa4767d7b67e04c55916ec2f34993c7aefd01118" + }, + { + "path": "dist/alphalib/types/robots/audio-artwork.js.map", + "sizeBytes": 1835, + "sha256": "8b45f9bcc11be303e408e50c56932d3747bc80c515eaad50fe9b9fc9de32b137" + }, + { + "path": "dist/alphalib/types/robots/audio-concat.d.ts.map", + "sizeBytes": 3700, + "sha256": "11a6b27a252899506dd9a75539c82cc65a94ad95057187cb7d60fd27dcbfd1b8" + }, + { + "path": "dist/alphalib/types/robots/audio-concat.js.map", + "sizeBytes": 2368, + "sha256": "cf43600aa6b1131695f23728291f4550688701f5aad2430631004c4b982a0df0" + }, + { + "path": "dist/alphalib/types/robots/audio-encode.d.ts.map", + "sizeBytes": 3648, + "sha256": "00bcc0475f9cd159b74fabff5ef5a9ec8659929d49dc01f660aa2214e6980c81" + }, + { + "path": "dist/alphalib/types/robots/audio-encode.js.map", + "sizeBytes": 1853, + "sha256": "170083f1b2e97951fe027d364d0508fb9be83f199e755f6c2dba565575b85866" + }, + { + "path": "dist/alphalib/types/robots/audio-loop.d.ts.map", + "sizeBytes": 3658, + "sha256": "506a308f01cfd07b72266b26c4ca70d439135e5333368273612fff8501061237" + }, + { + "path": "dist/alphalib/types/robots/audio-loop.js.map", + "sizeBytes": 1859, + "sha256": "e3c8723e8e8a6456269c5aa19f041beb95eecfb7077bebab05228fa42a0b01ef" + }, + { + "path": "dist/alphalib/types/robots/audio-merge.d.ts.map", + "sizeBytes": 3713, + "sha256": "200ce1e8d4be67a04522707ccb648b918f465f47cea81d253e282a3959d51bb4" + }, + { + "path": "dist/alphalib/types/robots/audio-merge.js.map", + "sizeBytes": 2434, + "sha256": "72aa8bf105e43533deb5a5f3aa3e7865120d9e1b0b92b1f0e7f1f5733be2b0bd" + }, + { + "path": "dist/alphalib/types/robots/audio-waveform.d.ts.map", + "sizeBytes": 3950, + "sha256": "8d1bc9e02a68d4d18d07a8fe5d55c9d1f8bcb5c61978b677deb0fb32f6ddd562" + }, + { + "path": "dist/alphalib/types/robots/audio-waveform.js.map", + "sizeBytes": 4691, + "sha256": "ef7f6f12ae396db830f8c92314712cfd958697a711a26725f6b2281019b7e170" + }, + { + "path": "dist/cli/commands/auth.d.ts.map", + "sizeBytes": 749, + "sha256": "a8fc5875ca97a6dbdb65b7830479c4c4cd9f5949fe4a8c95106700705439e966" + }, + { + "path": "dist/cli/commands/auth.js.map", + "sizeBytes": 9049, + "sha256": "2b239bbfbe26870ca1fb542220842283a0b391267cedbecf298fff39bc8e0da1" + }, + { + "path": "dist/alphalib/types/robots/azure-import.d.ts.map", + "sizeBytes": 994, + "sha256": "f176be84e91088b839e5769a7a249eb0f25ebcb67fde7db712997f46c2c32bd5" + }, + { + "path": "dist/alphalib/types/robots/azure-import.js.map", + "sizeBytes": 1772, + "sha256": "1a699e6491c85a6cea6a6dfd2de985fa5a5b2aef4fb99f92093dab8085c193eb" + }, + { + "path": "dist/alphalib/types/robots/azure-store.d.ts.map", + "sizeBytes": 1344, + "sha256": "24846cd482aa230e9c961d7032bdf5e3e02c21139ad6d4454c46d1dfa9acc94b" + }, + { + "path": "dist/alphalib/types/robots/azure-store.js.map", + "sizeBytes": 2407, + "sha256": "58b0f3158aca067ae6e398a5f4a37935907ce2916ac15e172dcef0ead8d9afcb" + }, + { + "path": "dist/alphalib/types/robots/backblaze-import.d.ts.map", + "sizeBytes": 1003, + "sha256": "c22ab6d436286cb3e0ba6fc739efe5e9a4c9fc073f3d7dc483c8cf2876f5e819" + }, + { + "path": "dist/alphalib/types/robots/backblaze-import.js.map", + "sizeBytes": 1838, + "sha256": "5328598e0fdf883487259800873e9155ebbe3458b5e13eb35247519a9f258e95" + }, + { + "path": "dist/alphalib/types/robots/backblaze-store.d.ts.map", + "sizeBytes": 1268, + "sha256": "b16532e497d1282929b3d743db600f4463052fdafc7b0c953371c86295efcda8" + }, + { + "path": "dist/alphalib/types/robots/backblaze-store.js.map", + "sizeBytes": 1779, + "sha256": "18a983d205a1a89ba39f80ed3f2f9c0af3c5b0bfbda262b09b0fa5510a82495b" + }, + { + "path": "dist/cli/commands/BaseCommand.d.ts.map", + "sizeBytes": 853, + "sha256": "22f956bf0d909d109be49926c456031c783bafccc688056d1911b7440cdf77c3" + }, + { + "path": "dist/cli/commands/BaseCommand.js.map", + "sizeBytes": 1740, + "sha256": "14ec91bb62f94bc02328d085cf1d6b7541f3e17d10703c39f85df40969cd84eb" + }, + { + "path": "dist/alphalib/types/bill.d.ts.map", + "sizeBytes": 233, + "sha256": "100418a9cbbb497bd3deb4fba29c4bff7cd202c869085f2ac1cd1293d403548a" + }, + { + "path": "dist/alphalib/types/bill.js.map", + "sizeBytes": 308, + "sha256": "6e2138660b44631f62207483c146991bd6e0e010067d85af9109d72f89224953" + }, + { + "path": "dist/cli/commands/bills.d.ts.map", + "sizeBytes": 585, + "sha256": "54258ccf4730a4b0989883ab5a4b67b5deb7e7fba3a25581743a20a9fc8bfa82" + }, + { + "path": "dist/cli/commands/bills.js.map", + "sizeBytes": 2277, + "sha256": "15f2a633092558d16a9026ac829a4458e6ff4e3f4b51f5277c40f9785df82cc0" + }, + { + "path": "dist/cli.d.ts.map", + "sizeBytes": 278, + "sha256": "5e6f1a916256a81fdc3e6678644c191a87bf1bbcb273e0e256a1e04533c045cd" + }, + { + "path": "dist/cli.js.map", + "sizeBytes": 1335, + "sha256": "aa838fe53a894d7c2eca041e15963a3ddb50e3bf127911f472da237aec07ae56" + }, + { + "path": "dist/alphalib/types/robots/cloudfiles-import.d.ts.map", + "sizeBytes": 1029, + "sha256": "0869484ee48ae682859788c6ccad011fcc16dab0854a6d6a727cd13a0cfb0902" + }, + { + "path": "dist/alphalib/types/robots/cloudfiles-import.js.map", + "sizeBytes": 1821, + "sha256": "067afacca012fb1d96267aa96370f459b1d85e75727922874910a5edcc07bc50" + }, + { + "path": "dist/alphalib/types/robots/cloudfiles-store.d.ts.map", + "sizeBytes": 1282, + "sha256": "71887d8900734a6c6bf3964018d0143135d016740daf537ddd2d6546a70dd3d4" + }, + { + "path": "dist/alphalib/types/robots/cloudfiles-store.js.map", + "sizeBytes": 1651, + "sha256": "7631f3c8361b3ed5315a26310954e49fd81db2c5a091954087006ba3efb9053b" + }, + { + "path": "dist/alphalib/types/robots/cloudflare-import.d.ts.map", + "sizeBytes": 1029, + "sha256": "ce4aab1f1c2d1be7f7fadf750582c137edd423c1839fb18581539b548184795f" + }, + { + "path": "dist/alphalib/types/robots/cloudflare-import.js.map", + "sizeBytes": 1839, + "sha256": "cb3a961fbf7e141e32692dcce6f94a5c37cba356f0f27e92b97d5bb4eca04da9" + }, + { + "path": "dist/alphalib/types/robots/cloudflare-store.d.ts.map", + "sizeBytes": 1307, + "sha256": "32f6c9187a32831b74c67f07d415f8e5132f7d7f5be73e3e42985f6bfa9ba7dd" + }, + { + "path": "dist/alphalib/types/robots/cloudflare-store.js.map", + "sizeBytes": 1990, + "sha256": "c62aed0ef67118db1bdf93e63a6159295e2dd818c1ee912a25ce54be09089361" + }, + { + "path": "dist/alphalib/types/robots/digitalocean-import.d.ts.map", + "sizeBytes": 1033, + "sha256": "b4ca8b8b29285f0ded9587aa9f66146d2feef4aa22f4fb04dc505e51074d0989" + }, + { + "path": "dist/alphalib/types/robots/digitalocean-import.js.map", + "sizeBytes": 1825, + "sha256": "a79d68e6246b971ce82c154c3f9d4922d8dc887a2387f369ae46dbc5ba0ce531" + }, + { + "path": "dist/alphalib/types/robots/digitalocean-store.d.ts.map", + "sizeBytes": 1323, + "sha256": "5516c371bf38b3d1e4ea87ee409602c49848c3f9891fb2a67648d61fa83a4829" + }, + { + "path": "dist/alphalib/types/robots/digitalocean-store.js.map", + "sizeBytes": 2110, + "sha256": "03bf0e17cc0b4752df73ccdf82aa4ca27e6f5455448d3b5469fb440649eb88dd" + }, + { + "path": "dist/alphalib/types/robots/document-autorotate.d.ts.map", + "sizeBytes": 1203, + "sha256": "2b806b760baa93da32c9ed78d7bf3ff51a2044d08e80e450a366912d7ad7bba2" + }, + { + "path": "dist/alphalib/types/robots/document-autorotate.js.map", + "sizeBytes": 1362, + "sha256": "1e7adcd6fc7ca833092b64c568d60775e939b70b5382c8fc20ae2dd4bcdc2cfe" + }, + { + "path": "dist/alphalib/types/robots/document-convert.d.ts.map", + "sizeBytes": 1306, + "sha256": "ce5ed754a73b39ad8143b4faef3d4132418bf8ffe09e0a294802834c31ac4b72" + }, + { + "path": "dist/alphalib/types/robots/document-convert.js.map", + "sizeBytes": 3091, + "sha256": "35966b6a021abdebdd4d232b6163c4fc9f951eaf7d5c57c3892da71a0cd26736" + }, + { + "path": "dist/alphalib/types/robots/document-merge.d.ts.map", + "sizeBytes": 1217, + "sha256": "c395a64c42eeae620a4522bb6ecce832f885485fee9ac7210bb7ce6c89be8b28" + }, + { + "path": "dist/alphalib/types/robots/document-merge.js.map", + "sizeBytes": 1738, + "sha256": "a058ab91732d822f8044c61040d69d12bc3903e354f34793b91bd72e6695549c" + }, + { + "path": "dist/alphalib/types/robots/document-ocr.d.ts.map", + "sizeBytes": 1225, + "sha256": "18c3a595151d7ede4e0a308bc61cb17c7f7fb5156ae93992868aea16b0d4f307" + }, + { + "path": "dist/alphalib/types/robots/document-ocr.js.map", + "sizeBytes": 1829, + "sha256": "a7b6169af7fb9b26d919cdab1b4b557f0134c5e6a15c53065e8168fd9dfd37e3" + }, + { + "path": "dist/alphalib/types/robots/document-split.d.ts.map", + "sizeBytes": 1204, + "sha256": "c19d3a5ce5d0d7876c1fdb06ae523cc8544c005f2299e0e38a78edea1148eaca" + }, + { + "path": "dist/alphalib/types/robots/document-split.js.map", + "sizeBytes": 1516, + "sha256": "0755d47cbbf71c6a78d9a858ff7e6602f6da2bf6482bf7e6b0adb6a43c779b05" + }, + { + "path": "dist/alphalib/types/robots/document-thumbs.d.ts.map", + "sizeBytes": 1383, + "sha256": "2243134191a54be4ff5f64897a9c50b6bff40a6d8539ab37e641dee1e78adfd2" + }, + { + "path": "dist/alphalib/types/robots/document-thumbs.js.map", + "sizeBytes": 3582, + "sha256": "18c7fccfe0abf172d679805454b84ef121c88c7daffb0172f6d4a2cf04a728a1" + }, + { + "path": "dist/alphalib/types/robots/dropbox-import.d.ts.map", + "sizeBytes": 931, + "sha256": "0f1b530229aad380249ed2cdced0fc3ba4dea4bb25bbdeba5196d1b25b83ca1f" + }, + { + "path": "dist/alphalib/types/robots/dropbox-import.js.map", + "sizeBytes": 1672, + "sha256": "acd1432e1b99bf224913f5cd9e827ace7949a2fc2f12118a8cd7ab5d635f22c1" + }, + { + "path": "dist/alphalib/types/robots/dropbox-store.d.ts.map", + "sizeBytes": 1304, + "sha256": "2929109a87204cf98b4c5bfd411ac7a764028314d02bbb290d2e4dfe79bf812c" + }, + { + "path": "dist/alphalib/types/robots/dropbox-store.js.map", + "sizeBytes": 1785, + "sha256": "d0f7854dfb91540f64c238ca9bee2a6100b84b1239ea6dfa4601e6308ff7ca7b" + }, + { + "path": "dist/alphalib/types/robots/edgly-deliver.d.ts.map", + "sizeBytes": 885, + "sha256": "8f9200e8e330adeea424d735f663ad757326e3662fdb166a44bad09b3443ee8f" + }, + { + "path": "dist/alphalib/types/robots/edgly-deliver.js.map", + "sizeBytes": 1366, + "sha256": "bf5b2ae88cc181f02afaf1ed026a327b8f1d3b4cec26ee2b87cb63d7dee4f17d" + }, + { + "path": "dist/alphalib/types/robots/file-compress.d.ts.map", + "sizeBytes": 1263, + "sha256": "67e26c961677ec63ae7b838ac54ce4ef92897bb844e32ce28980ba28e1a81593" + }, + { + "path": "dist/alphalib/types/robots/file-compress.js.map", + "sizeBytes": 2246, + "sha256": "6db06343a6a9606037cdd68c8aeec52f9db1d6abf621dac94acfd13186309c71" + }, + { + "path": "dist/alphalib/types/robots/file-decompress.d.ts.map", + "sizeBytes": 1194, + "sha256": "e3167146144669a49864af77a2844095e7a704fe8d6c3d138da2e2482fce4329" + }, + { + "path": "dist/alphalib/types/robots/file-decompress.js.map", + "sizeBytes": 1875, + "sha256": "8b480292b5374d7c2eed61ecb7ba958742b710b466a6ca6f8b3ad00ebb318792" + }, + { + "path": "dist/alphalib/types/robots/file-filter.d.ts.map", + "sizeBytes": 1247, + "sha256": "fbed0076ff28a613a9c4f8b6e5941058729b3aa39c196dccc8af789625d2eea3" + }, + { + "path": "dist/alphalib/types/robots/file-filter.js.map", + "sizeBytes": 2086, + "sha256": "a9bb479e9cc2816253fe182250b0b4fbc337301f361b13b8d632286501c2f377" + }, + { + "path": "dist/alphalib/types/robots/file-hash.d.ts.map", + "sizeBytes": 1193, + "sha256": "e32c94f338be64db833c3a52edebc813aa6cd92d1f03fffb463e0d72bbde941d" + }, + { + "path": "dist/alphalib/types/robots/file-hash.js.map", + "sizeBytes": 1611, + "sha256": "f589e306ee342792017d634feadfeb2b9854286960b0fc328ed8c68f2bf139f5" + }, + { + "path": "dist/alphalib/types/robots/file-preview.d.ts.map", + "sizeBytes": 1707, + "sha256": "bbd206d8489b7015987c19cc9a12a831855192f2f41dc718ef037d3cef144d6c" + }, + { + "path": "dist/alphalib/types/robots/file-preview.js.map", + "sizeBytes": 4716, + "sha256": "739b27deb2eba0c132a99420187415b97d3c5728f2d1d6ef57c934a557c41444" + }, + { + "path": "dist/alphalib/types/robots/file-read.d.ts.map", + "sizeBytes": 1181, + "sha256": "ced5f8c632d33c3f195178a40396cdb52f6ecb7b6bde3ceb4f78f97768727c8b" + }, + { + "path": "dist/alphalib/types/robots/file-read.js.map", + "sizeBytes": 1317, + "sha256": "e5dc39318ed77a5b044fa2d0957065adfb39b6badd98e78906a36dec52b78dd6" + }, + { + "path": "dist/alphalib/types/robots/file-serve.d.ts.map", + "sizeBytes": 1266, + "sha256": "2acd526a0502c1d9c0b8039cfadc6ddf84ca19127ad078898b9886fa53f30aa0" + }, + { + "path": "dist/alphalib/types/robots/file-serve.js.map", + "sizeBytes": 1687, + "sha256": "e553a47bd75cf6b95f70cfa50c64f99b7cfa4da788d0a84040adaf63b80eaa5f" + }, + { + "path": "dist/alphalib/types/robots/file-verify.d.ts.map", + "sizeBytes": 1223, + "sha256": "8e27540fb398c334b003fa1226cc4cca7f276841ab9c09d456effc04dc4f8e60" + }, + { + "path": "dist/alphalib/types/robots/file-verify.js.map", + "sizeBytes": 1788, + "sha256": "3e2b26391ed81f2083247cfc101ef82aeeeb02f69665ce999fddc6bab255d6d7" + }, + { + "path": "dist/alphalib/types/robots/file-virusscan.d.ts.map", + "sizeBytes": 1223, + "sha256": "84e84f34c14bced953ced1d8fd1f10987be49fcf7c6b28f3b0d815ea6d01ba56" + }, + { + "path": "dist/alphalib/types/robots/file-virusscan.js.map", + "sizeBytes": 1915, + "sha256": "220df6a5d0b0e7efcdbde6c62ac1354d81e61a377ce800ced9a33300098d818f" + }, + { + "path": "dist/alphalib/types/robots/file-watermark.d.ts.map", + "sizeBytes": 1203, + "sha256": "abf5b2f9284b433b8925e7f3a99e77781b2959dacdebf6dce4048ea00575e6fb" + }, + { + "path": "dist/alphalib/types/robots/file-watermark.js.map", + "sizeBytes": 1017, + "sha256": "6583f0e6b3a04b39758bc60bbd77383f00715365ac714be95b871ba6797050b9" + }, + { + "path": "dist/alphalib/types/robots/ftp-import.d.ts.map", + "sizeBytes": 976, + "sha256": "921de9063ecf8dfe8054bf4ce597658aefd55b28da6935b1dc22b9de4ab50534" + }, + { + "path": "dist/alphalib/types/robots/ftp-import.js.map", + "sizeBytes": 1632, + "sha256": "717f12442854a116abeceb646f0a0b0d43bddf7d355b1261603e365ee2f75954" + }, + { + "path": "dist/alphalib/types/robots/ftp-store.d.ts.map", + "sizeBytes": 1310, + "sha256": "a74b1c73d55dd9d4c277e173246d268c85f28b3c7ea85fb5b5fa202895affa13" + }, + { + "path": "dist/alphalib/types/robots/ftp-store.js.map", + "sizeBytes": 2145, + "sha256": "ce1bf48c1cc713ae843061cba3c3b119475baa5cb6b62ac4b575e50b297bcf71" + }, + { + "path": "dist/alphalib/types/robots/google-import.d.ts.map", + "sizeBytes": 960, + "sha256": "464452457441bede584276700d4aa2905186df95d7b0e8f853fd276556a3ca73" + }, + { + "path": "dist/alphalib/types/robots/google-import.js.map", + "sizeBytes": 1783, + "sha256": "25f2633e57de13845396a75c6f3e7dd4b59cfd8b7587300b5041dcd3970768f4" + }, + { + "path": "dist/alphalib/types/robots/google-store.d.ts.map", + "sizeBytes": 1260, + "sha256": "05d35ccb12ce96d6b2e5372640a02a2c9f8ff34b9ca0da87197e7174d3402429" + }, + { + "path": "dist/alphalib/types/robots/google-store.js.map", + "sizeBytes": 2233, + "sha256": "40ad8416070e56ba35c23114eea8e5503953f1e00248ecd75796be6bab4404de" + }, + { + "path": "dist/cli/helpers.d.ts.map", + "sizeBytes": 697, + "sha256": "7741da5e1fdb8a1fac23517391b55ef32185134622a06f5b044a31f87424de46" + }, + { + "path": "dist/cli/helpers.js.map", + "sizeBytes": 1656, + "sha256": "061d1985ffefb16813c96520199edb566e65fe0b2113dd8c83fe36116a80a9d0" + }, + { + "path": "dist/alphalib/types/robots/html-convert.d.ts.map", + "sizeBytes": 1315, + "sha256": "16452c1d458edb1c509b118e7de72886a1547100c74d636509b904cea851fb7e" + }, + { + "path": "dist/alphalib/types/robots/html-convert.js.map", + "sizeBytes": 2766, + "sha256": "eacdd8d74271b8273f8356dd343de5953253860859932e8370fec23d99c589b0" + }, + { + "path": "dist/alphalib/types/robots/http-import.d.ts.map", + "sizeBytes": 998, + "sha256": "ef3b63e0a2c104c1c3631d430ad09514953fb3555daddb69d0d0e5b5306752ed" + }, + { + "path": "dist/alphalib/types/robots/http-import.js.map", + "sizeBytes": 2893, + "sha256": "d90362259ac8cdcf6e4d304042836bb172bf9e37552f4381d793afb57eff1768" + }, + { + "path": "dist/alphalib/types/robots/image-bgremove.d.ts.map", + "sizeBytes": 1241, + "sha256": "1f2d8c7319395b5228a586231c110b98758a4a11c8a6b91d1b406a085aae7440" + }, + { + "path": "dist/alphalib/types/robots/image-bgremove.js.map", + "sizeBytes": 1885, + "sha256": "a5fbb151ec01dc82e30ab793f405a6b3a1146805511669748079d4a5b54de6a5" + }, + { + "path": "dist/alphalib/types/robots/image-describe.d.ts.map", + "sizeBytes": 1241, + "sha256": "44776af23c24f582ff0f6552d49e01155de4589ed09e52012ec1321a6ca698c8" + }, + { + "path": "dist/alphalib/types/robots/image-describe.js.map", + "sizeBytes": 1899, + "sha256": "10dfe79760d33f0efa5a600b2060b04350fc733bf0e70f1c557e9ba33c83c601" + }, + { + "path": "dist/alphalib/types/robots/image-facedetect.d.ts.map", + "sizeBytes": 1270, + "sha256": "bb9528a90de57e383b99dfdcf5196462ecc5528c101d6a98402b7eb12b8de284" + }, + { + "path": "dist/alphalib/types/robots/image-facedetect.js.map", + "sizeBytes": 2389, + "sha256": "538eabf594bb90fe2cd54eeb27f097b9b42b0ffff95d6ed3f442b47d694ec599" + }, + { + "path": "dist/alphalib/types/robots/image-generate.d.ts.map", + "sizeBytes": 1310, + "sha256": "25b14e8c4cd9e295533e60c401e2fc9a8822a075e2ca2703b8a179fdac957bdf" + }, + { + "path": "dist/alphalib/types/robots/image-generate.js.map", + "sizeBytes": 2205, + "sha256": "ebb90ad613707be35e72b368ef80323c368a9d7751daf0a54a9588223dafe355" + }, + { + "path": "dist/alphalib/types/robots/image-merge.d.ts.map", + "sizeBytes": 1259, + "sha256": "2880a90a84df8f77f0a2c30c1835fda589c87f52ef21f077729ee23dd145b8bc" + }, + { + "path": "dist/alphalib/types/robots/image-merge.js.map", + "sizeBytes": 2080, + "sha256": "564ae537d3189541c9c0b645ff56919c86df8440fac89685b4180b851d862f2a" + }, + { + "path": "dist/alphalib/types/robots/image-ocr.d.ts.map", + "sizeBytes": 1218, + "sha256": "afbf395a44bc6f1a0ef163d6ff6b45dacac15b9b1e01045365f88f1fe4ce403f" + }, + { + "path": "dist/alphalib/types/robots/image-ocr.js.map", + "sizeBytes": 1798, + "sha256": "135f86e2ad0c6690838ce611f6e48375642dbdc9857c19723040c8860d07c620" + }, + { + "path": "dist/alphalib/types/robots/image-optimize.d.ts.map", + "sizeBytes": 1241, + "sha256": "eb4d9d068c6538732c9ccf8d1f335a16444fd10a7f5f838529a81d81fade03aa" + }, + { + "path": "dist/alphalib/types/robots/image-optimize.js.map", + "sizeBytes": 1795, + "sha256": "aae465a013cc6e22dd12b7e44986a7be746a70563c3b7aff861d8229888dac39" + }, + { + "path": "dist/alphalib/types/robots/image-resize.d.ts.map", + "sizeBytes": 2575, + "sha256": "4039c44fe629044c78562654dea361edb3d5fc31f6cbcbaff8e8ef3b3f2c8362" + }, + { + "path": "dist/alphalib/types/robots/image-resize.js.map", + "sizeBytes": 9404, + "sha256": "655db1c155f512b6b8b9fa21e8a6150ecab07e3b366e186694ef2b289f04b688" + }, + { + "path": "dist/InconsistentResponseError.d.ts.map", + "sizeBytes": 208, + "sha256": "5333a56696e4ed761ee350c4a342fd2d90e4b4445c80606ea8ebc7f19210276f" + }, + { + "path": "dist/InconsistentResponseError.js.map", + "sizeBytes": 217, + "sha256": "b1145dc4071d1b9fe9b438dc6cacfad7aa127329c06ed2cfa8c4495d4db289a1" + }, + { + "path": "dist/cli/commands/index.d.ts.map", + "sizeBytes": 198, + "sha256": "02d46596bc9ebce98e9668a9ec4fd017aa2e553b828dfc47dcbcff96bff71f3e" + }, + { + "path": "dist/cli/commands/index.js.map", + "sizeBytes": 1584, + "sha256": "d44b8dc7479c999f6f694cdb90628b32087b5a7a13758f727b5174fdf291fea6" + }, + { + "path": "dist/alphalib/mcache.d.ts.map", + "sizeBytes": 968, + "sha256": "7e45e93e39d2031b2a197c7f145f7a535b83af9435129b21cdbc6577da7fa6f8" + }, + { + "path": "dist/alphalib/mcache.js.map", + "sizeBytes": 4326, + "sha256": "718daef94e4679b5326fda25a3d6060a0bbcf86895e3b6d4865a310767584aa3" + }, + { + "path": "dist/alphalib/types/robots/meta-read.d.ts.map", + "sizeBytes": 733, + "sha256": "74696fc88caf7dab3962245213e1553190b7daa91ce6c98d8842a26ba7aa78e7" + }, + { + "path": "dist/alphalib/types/robots/meta-read.js.map", + "sizeBytes": 944, + "sha256": "bebdb932e6d46cd2075e908e77d6c013127a2aa21bf63f1cd52ee53445431159" + }, + { + "path": "dist/alphalib/types/robots/meta-write.d.ts.map", + "sizeBytes": 3621, + "sha256": "2aa5bcd142a9675827964aaf5ff8faebe2a46b65fbd4f05e393d9ddd683dc312" + }, + { + "path": "dist/alphalib/types/robots/meta-write.js.map", + "sizeBytes": 1763, + "sha256": "0ee3d8d54a5d87e087020ac29cb96997d5ddc154be11f4506d69be0458c2b66e" + }, + { + "path": "dist/alphalib/types/robots/minio-import.d.ts.map", + "sizeBytes": 1018, + "sha256": "daa3c35498566645725c26eaf6cac16cccc7591ad52ec1102fb5568f8a67707e" + }, + { + "path": "dist/alphalib/types/robots/minio-import.js.map", + "sizeBytes": 1826, + "sha256": "54f186aa5939c1a4ee41dec57a40aa2e4e67adc694bff3394ceecef4d5c1e50a" + }, + { + "path": "dist/alphalib/types/robots/minio-store.d.ts.map", + "sizeBytes": 1296, + "sha256": "5cab9c663094f8ed691d3726e183c8205b8dcafcbecadb1209c1aee4a667022e" + }, + { + "path": "dist/alphalib/types/robots/minio-store.js.map", + "sizeBytes": 2022, + "sha256": "09880706215eb25ad7b6c8a07976fcd329853e016d6d680ee71c8657e234ab34" + }, + { + "path": "dist/alphalib/lib/nativeGlobby.d.ts.map", + "sizeBytes": 583, + "sha256": "8f3c30e2d30cfdfb4b7fda43590e36d0cc5f340b8dc75a69314602e19b566047" + }, + { + "path": "dist/alphalib/lib/nativeGlobby.js.map", + "sizeBytes": 7177, + "sha256": "faa6544a8c107851651831356371f77c7a2fbae9810951ad2b18f4968bf7580c" + }, + { + "path": "dist/cli/commands/notifications.d.ts.map", + "sizeBytes": 344, + "sha256": "b6d7ff0ac754f7977f133a78361ca7d469f23319dc9fd8a5a8c9093dac428eb6" + }, + { + "path": "dist/cli/commands/notifications.js.map", + "sizeBytes": 1500, + "sha256": "ba8bc70ab727c78e8641b541d992bb5487b9f8c6af9a329ed527a21d38cf3f45" + }, + { + "path": "dist/cli/OutputCtl.d.ts.map", + "sizeBytes": 1377, + "sha256": "d49a26f7287d6e2dbee8de015c9409ad54fa2a2ed5dfe44e99b2510f95ed93a1" + }, + { + "path": "dist/cli/OutputCtl.js.map", + "sizeBytes": 2947, + "sha256": "4922203562a927063b145504529b677a8205047aace3b4b86cbe8b8f75ef5b70" + }, + { + "path": "dist/PaginationStream.d.ts.map", + "sizeBytes": 664, + "sha256": "9bdfee8e9abe338b8b6deb1b484e54b8c1b20134dc2721ceddd42ad512b70d3c" + }, + { + "path": "dist/PaginationStream.js.map", + "sizeBytes": 1303, + "sha256": "861ba3671e06da0092b9f5d41d687441c16f98fb34c69332bbe4005f993ee12f" + }, + { + "path": "dist/PollingTimeoutError.d.ts.map", + "sizeBytes": 213, + "sha256": "e728bb40a887365822da6380ce35a2d5de504fa4c24e4a61a03a14d365f0b96d" + }, + { + "path": "dist/PollingTimeoutError.js.map", + "sizeBytes": 233, + "sha256": "1bf6de3e9b8f0e62b6900be45f7db6c9dad37510a1ee9dc05c7883319ac15a48" + }, + { + "path": "dist/alphalib/types/robots/progress-simulate.d.ts.map", + "sizeBytes": 750, + "sha256": "aec55a688c0da530314297cf6652d456b032580f848e84cfbb00054b3bc9ab91" + }, + { + "path": "dist/alphalib/types/robots/progress-simulate.js.map", + "sizeBytes": 854, + "sha256": "c743fb4ea5217d34ff665926bd14ecbb259dec99c2de862abfe787ece58817a0" + }, + { + "path": "dist/alphalib/types/robots/s3-import.d.ts.map", + "sizeBytes": 1023, + "sha256": "2fa93c5f1aacff33c82795f1f6f4b7bc533fa4f00dabb0da996021cfb3a36b58" + }, + { + "path": "dist/alphalib/types/robots/s3-import.js.map", + "sizeBytes": 2086, + "sha256": "2a512555a098d4da6785a118506d5992ced9c7f9ad6fadb139e68161425dc5a3" + }, + { + "path": "dist/alphalib/types/robots/s3-store.d.ts.map", + "sizeBytes": 1437, + "sha256": "77b3508baff7e474df2bd8bb4dca53f8fb09ffcd229cd16aa09a35e2d12cd608" + }, + { + "path": "dist/alphalib/types/robots/s3-store.js.map", + "sizeBytes": 2689, + "sha256": "354bf2bfe15c57ef1054242d90e09fc69a50fac4a57f07510b81ab91cefa73df" + }, + { + "path": "dist/alphalib/types/robots/script-run.d.ts.map", + "sizeBytes": 1202, + "sha256": "d73d6e081a159f0446e83051828a2b4cd919e0439ec4c79423fbf74ce938633a" + }, + { + "path": "dist/alphalib/types/robots/script-run.js.map", + "sizeBytes": 1502, + "sha256": "6e61b686b0b26ba5d90c62cdb94d6611e09e57081efe1a7042dda77d127fd51f" + }, + { + "path": "dist/alphalib/types/robots/sftp-import.d.ts.map", + "sizeBytes": 973, + "sha256": "dad41e054b1f3f496000c2fe3eba6222f59230b6af63c38fa75cc3ce37ea862f" + }, + { + "path": "dist/alphalib/types/robots/sftp-import.js.map", + "sizeBytes": 1628, + "sha256": "f903dbbee86ee2801eb24d091c17d85686090035b263a27965987e4766587d75" + }, + { + "path": "dist/alphalib/types/robots/sftp-store.d.ts.map", + "sizeBytes": 1299, + "sha256": "b37328dfadccc7c6d482a2d44e79ddea777c2a4ef8944d91f0039a88beae661d" + }, + { + "path": "dist/alphalib/types/robots/sftp-store.js.map", + "sizeBytes": 1972, + "sha256": "9e1dd16cb07a33783ce79a07599589d90c6991eb4d17f042e07bd41b04be52be" + }, + { + "path": "dist/alphalib/types/robots/speech-transcribe.d.ts.map", + "sizeBytes": 1260, + "sha256": "a0c4d3e87110af87e7d44e6b16edb861a9c8b60b5916f8a084701fb0889928a1" + }, + { + "path": "dist/alphalib/types/robots/speech-transcribe.js.map", + "sizeBytes": 2118, + "sha256": "062dce9e6e903b2013b9ae939e54b1eb63594bf2905bcd49981870b5ab18be67" + }, + { + "path": "dist/alphalib/types/stackVersions.d.ts.map", + "sizeBytes": 181, + "sha256": "8801a952778d7c9ff6ec5da9ab04f67cb8912592a64219bee73f89f9647e0311" + }, + { + "path": "dist/alphalib/types/stackVersions.js.map", + "sizeBytes": 403, + "sha256": "b502d17102001adede09a03d6bc1b8d21c857709ca59699c5771eba6ff187768" + }, + { + "path": "dist/alphalib/types/robots/supabase-import.d.ts.map", + "sizeBytes": 1036, + "sha256": "591b8a2e1f9a882c9a800101271bc944ac6a7720022d634a9f6a52b273d09b12" + }, + { + "path": "dist/alphalib/types/robots/supabase-import.js.map", + "sizeBytes": 1862, + "sha256": "fb87b0dd2b73a22dcb20c1103f640e4c59de2f5cfae91bcaa8bcbacf33646872" + }, + { + "path": "dist/alphalib/types/robots/supabase-store.d.ts.map", + "sizeBytes": 1302, + "sha256": "26b0c17d6bb419f009a55c63720a5a6e01315eee5e47639f827968677dbcbcc7" + }, + { + "path": "dist/alphalib/types/robots/supabase-store.js.map", + "sizeBytes": 1886, + "sha256": "51670b0c87beb48d14581510971e8f6702d6f7536fb19e9779e0dca22261c996" + }, + { + "path": "dist/alphalib/types/robots/swift-import.d.ts.map", + "sizeBytes": 1030, + "sha256": "62f71493d289ab513756c9a0801fea959d1dbfebac53a937d0ce3e40d8412f43" + }, + { + "path": "dist/alphalib/types/robots/swift-import.js.map", + "sizeBytes": 1828, + "sha256": "8266677cc62c1cbf8acbe28d70e38b73ead4da441c24da57549b8d5401ff09a6" + }, + { + "path": "dist/alphalib/types/robots/swift-store.d.ts.map", + "sizeBytes": 1308, + "sha256": "d7861db0ea1879346faf51aa54feea5889457c72f9b890e996a5db6dce5c27a9" + }, + { + "path": "dist/alphalib/types/robots/swift-store.js.map", + "sizeBytes": 2023, + "sha256": "a1051b980e394da608e7b95994ca490f6f9d6dbe5fb4d89707266c495175a347" + }, + { + "path": "dist/cli/template-last-modified.d.ts.map", + "sizeBytes": 492, + "sha256": "927f06c6c3ac447c7459f881ad4150ed0cbec8c199b114452590e25df57d6f44" + }, + { + "path": "dist/cli/template-last-modified.js.map", + "sizeBytes": 4406, + "sha256": "ecf48762d1c4275b90bab7da82b44a9e0c31b2cf8bb62a2f1381c34ceced91c9" + }, + { + "path": "dist/alphalib/types/template.d.ts.map", + "sizeBytes": 133490, + "sha256": "d2e7aac5bedd1f24066164e27d0b68f2737998853c38cc33234379b3c61a9681" + }, + { + "path": "dist/alphalib/types/template.js.map", + "sizeBytes": 5214, + "sha256": "df5e14bc81fcb702b288bb964fe05ac0f6976a0b4061e8dd6cc8586c19d18b9d" + }, + { + "path": "dist/alphalib/types/templateCredential.d.ts.map", + "sizeBytes": 347, + "sha256": "b47bd53ceca8cec91455635a28942287286b87d962de0b32bbf4afd785df1822" + }, + { + "path": "dist/alphalib/types/templateCredential.js.map", + "sizeBytes": 912, + "sha256": "125372bf800fcb2b436edf9b7ac47aeea00a7ae8bc6cd0592b5a1fc4419e1cd1" + }, + { + "path": "dist/cli/commands/templates.d.ts.map", + "sizeBytes": 2355, + "sha256": "dde861e027753cac8ae7255ac4cc9b31d40e86b341ac52d467696294df1b32b3" + }, + { + "path": "dist/cli/commands/templates.js.map", + "sizeBytes": 14657, + "sha256": "d8af75491dfa21dd4c3f6587ef199a28f14450a1533bf78f8437e8581a358fd6" + }, + { + "path": "dist/alphalib/types/robots/text-speak.d.ts.map", + "sizeBytes": 1244, + "sha256": "f6c1fbc4234dc0e9b2d9c57790fcc5678aea31e4aa528703f3ddcb2b31c2d6e3" + }, + { + "path": "dist/alphalib/types/robots/text-speak.js.map", + "sizeBytes": 2081, + "sha256": "152ee18242f273409266c8a95fb15b965069ac9646aebf6e61ddb4a02453146d" + }, + { + "path": "dist/alphalib/types/robots/text-translate.d.ts.map", + "sizeBytes": 1230, + "sha256": "b7b203cfdd08f1e497abc8614b4b2a4d3ce74e15c5c056eaa29d187d94f9927e" + }, + { + "path": "dist/alphalib/types/robots/text-translate.js.map", + "sizeBytes": 2951, + "sha256": "4c09df3519ed7bc416814b2541d8ee0f5b4b77e8dfb72d6d1a57e45ccdcccb32" + }, + { + "path": "dist/alphalib/types/robots/tigris-import.d.ts.map", + "sizeBytes": 1030, + "sha256": "324f86249a446619ec7c815c0a39ac79bf8f543a849a7ae92aabc9e304694c6e" + }, + { + "path": "dist/alphalib/types/robots/tigris-import.js.map", + "sizeBytes": 1910, + "sha256": "817e599e2f948bf8d2a84eaf23ab95a4cc45bf83a1ca126ab359d729378daaba" + }, + { + "path": "dist/alphalib/types/robots/tigris-store.d.ts.map", + "sizeBytes": 1308, + "sha256": "543391776a31c889d13fca5749fbc029c329c3d6ac78b79b4561ebcb07fe9b2d" + }, + { + "path": "dist/alphalib/types/robots/tigris-store.js.map", + "sizeBytes": 2102, + "sha256": "7dfa4c4a70c85be45c9185428fd349ba0c788132a886f71eabb9fff85563de09" + }, + { + "path": "dist/alphalib/types/robots/tlcdn-deliver.d.ts.map", + "sizeBytes": 885, + "sha256": "554ee0091f06fb0600daf9bfb8ec6211d5e5b125e23a4c4807381909df171ee3" + }, + { + "path": "dist/alphalib/types/robots/tlcdn-deliver.js.map", + "sizeBytes": 1365, + "sha256": "2cc54073267b8bcdebf87bfe2b94b78bef94cf5bce3a55c574adb033261a7faf" + }, + { + "path": "dist/Transloadit.d.ts.map", + "sizeBytes": 4955, + "sha256": "3933904963537b1d3c1a33218f154e2c0620fb7e6048135b5291fe6d4affcb84" + }, + { + "path": "dist/Transloadit.js.map", + "sizeBytes": 19217, + "sha256": "b07b0ec19dff6764da41b0dfe6978243370f2d7af425844ff79c95c439f5b1c7" + }, + { + "path": "dist/alphalib/tryCatch.d.ts.map", + "sizeBytes": 555, + "sha256": "5fa048d8181c4b97c76d21af2b1c7353cdd0c0ad7b5f7c0209c1a685ac13b1d8" + }, + { + "path": "dist/alphalib/tryCatch.js.map", + "sizeBytes": 364, + "sha256": "d8b6506cd4a2b2aef2c10d358a01858ee7795ab47ba68dc483cfe05bd8bcd304" + }, + { + "path": "dist/alphalib/types/robots/tus-store.d.ts.map", + "sizeBytes": 1254, + "sha256": "c018e01926cb975e5991815d950d23b794e8da606204d1012afdde5cd40be48c" + }, + { + "path": "dist/alphalib/types/robots/tus-store.js.map", + "sizeBytes": 2130, + "sha256": "e332628b81b5a2f1db21e2163f3e82b1e2d1aee3bdc5da31641f56ac8f8c84cd" + }, + { + "path": "dist/tus.d.ts.map", + "sizeBytes": 675, + "sha256": "4174cce4740dbfaa616f6ebfd69e7d8a67f43e74d7b6e72f783fd5d7aada6b56" + }, + { + "path": "dist/tus.js.map", + "sizeBytes": 4004, + "sha256": "c61b325945542f75b7e227f99388b3da266126a431ad115dbb1da82f0253a73c" + }, + { + "path": "dist/cli/types.d.ts.map", + "sizeBytes": 988, + "sha256": "9ec4dae6c1187072ce760a518f8e2b659b2df95173ece898c6a3e458b48dfe5e" + }, + { + "path": "dist/cli/types.js.map", + "sizeBytes": 1487, + "sha256": "ba68dc25f9bfc67b80d7d0a06927d55d59f1dd722cff7c7b99115fc6d8212d7a" + }, + { + "path": "dist/alphalib/types/robots/upload-handle.d.ts.map", + "sizeBytes": 885, + "sha256": "3cb0f33183cfbcb8cf5cd93dea02062c80415b5a778f4f01e59c203907712338" + }, + { + "path": "dist/alphalib/types/robots/upload-handle.js.map", + "sizeBytes": 1547, + "sha256": "5565507cacaccfbae0ed8af22fa55d0f2e1764db6d5b512ca275d2dc0baa52c7" + }, + { + "path": "dist/alphalib/types/robots/video-adaptive.d.ts.map", + "sizeBytes": 3703, + "sha256": "ad17ce7383971d02115b646735b2e887b02e8cdd431fd8870be7dd5432c0d968" + }, + { + "path": "dist/alphalib/types/robots/video-adaptive.js.map", + "sizeBytes": 2536, + "sha256": "935700eac713fc175e93597246e0f8a3430641e6c014d322fc133ca7a856ea47" + }, + { + "path": "dist/alphalib/types/robots/video-concat.d.ts.map", + "sizeBytes": 3675, + "sha256": "e02b704959be22d2a2b3bf2e085233d2caaff4a30b237ecb84ce9946bacced1b" + }, + { + "path": "dist/alphalib/types/robots/video-concat.js.map", + "sizeBytes": 1976, + "sha256": "1663bd7c7b505072d3f559221615e39f28dd990108def6f05ec2cb6e504fc607" + }, + { + "path": "dist/alphalib/types/robots/video-encode.d.ts.map", + "sizeBytes": 4064, + "sha256": "500f47f6364a47894b08b0fb4907679310c8be7389a46fdf622d454339fd0050" + }, + { + "path": "dist/alphalib/types/robots/video-encode.js.map", + "sizeBytes": 1856, + "sha256": "6461a5e4016592c7e9ea4390b88c1b7b1d614ad81296803c066c7d1946766e2e" + }, + { + "path": "dist/alphalib/types/robots/video-merge.d.ts.map", + "sizeBytes": 3769, + "sha256": "e19e2f55fd7d80116f97b13808d73ea3b213268d3fa8ace990b2e3b22eebcfb5" + }, + { + "path": "dist/alphalib/types/robots/video-merge.js.map", + "sizeBytes": 2366, + "sha256": "5aa6fd3a2e9b7531f1f8abc63fb3d508ad98224f7c9e508f36df4f41f05768d1" + }, + { + "path": "dist/alphalib/types/robots/video-ondemand.d.ts.map", + "sizeBytes": 5342, + "sha256": "c2115e7d16dc0802c7ce4b1df6658f1c78cc53f9b2a9b045c084615901243c40" + }, + { + "path": "dist/alphalib/types/robots/video-ondemand.js.map", + "sizeBytes": 2724, + "sha256": "c20260c3defe1778351ba4119259fb43252554db5467d44676136189ed4deb00" + }, + { + "path": "dist/alphalib/types/robots/video-subtitle.d.ts.map", + "sizeBytes": 3763, + "sha256": "97a1c9a22930643d78fd48ce5749bcfceb81253442f9f2029ed0204de19073ba" + }, + { + "path": "dist/alphalib/types/robots/video-subtitle.js.map", + "sizeBytes": 2827, + "sha256": "af93d44416d43e48085ec00d7be8248967807f6bd3323a927a47beaab122b4a4" + }, + { + "path": "dist/alphalib/types/robots/video-thumbs.d.ts.map", + "sizeBytes": 3722, + "sha256": "f594f39d5f0f72e59ff3d9fa5a9639f8e533c2e553a1c5fedb09b3c6242e30c1" + }, + { + "path": "dist/alphalib/types/robots/video-thumbs.js.map", + "sizeBytes": 2886, + "sha256": "02b98cbff11b63daaf474f4784d1105b4dd56e57d1082e8677cd7d80690cff51" + }, + { + "path": "dist/alphalib/types/robots/vimeo-import.d.ts.map", + "sizeBytes": 972, + "sha256": "9f97e32a87f8e40a48b2669b712cf2d810b7180e2f98c034a1e66b987a786867" + }, + { + "path": "dist/alphalib/types/robots/vimeo-import.js.map", + "sizeBytes": 2142, + "sha256": "912a3b1308b6b9f97052d14bb022f66b12058c4c9f180795b2d6e6d79a26c808" + }, + { + "path": "dist/alphalib/types/robots/vimeo-store.d.ts.map", + "sizeBytes": 1302, + "sha256": "c670114a11cd43867aa15bacace8e1e65a9a9aa83d6f5b42b3f5ae05938d405f" + }, + { + "path": "dist/alphalib/types/robots/vimeo-store.js.map", + "sizeBytes": 2393, + "sha256": "29227154e1ea921a08f345cbb76aa1fe2ca895b597df7bbf95e62d09fb56268e" + }, + { + "path": "dist/alphalib/types/robots/wasabi-import.d.ts.map", + "sizeBytes": 1030, + "sha256": "b7e6ada139a658355a85cef4b883a42c15515c1cc1a89c741e0eeb9f8fa19191" + }, + { + "path": "dist/alphalib/types/robots/wasabi-import.js.map", + "sizeBytes": 1910, + "sha256": "348c647bde3a01cf71187ed1d440fb0fa875ff93e535b8e7024e5f47a30824f4" + }, + { + "path": "dist/alphalib/types/robots/wasabi-store.d.ts.map", + "sizeBytes": 1310, + "sha256": "18968bde05eb5699ce98695f16f65333077ae83af2850fcc65fdc0b9662d0d0d" + }, + { + "path": "dist/alphalib/types/robots/wasabi-store.js.map", + "sizeBytes": 2022, + "sha256": "238f78cc0876c72bea35d35b9ea4dbb3d033dfe35e416007e405d26bd7ca2a45" + }, + { + "path": "dist/alphalib/types/robots/youtube-store.d.ts.map", + "sizeBytes": 1263, + "sha256": "13df33bee9919599cc7854debac40597a412d4ad3673122257fe343928f985ff" + }, + { + "path": "dist/alphalib/types/robots/youtube-store.js.map", + "sizeBytes": 2380, + "sha256": "b59ed4420731f9f161d7de7a4c889eead8868c089b4507e5ce810de59fe0bf17" + }, + { + "path": "dist/alphalib/zodParseWithContext.d.ts.map", + "sizeBytes": 711, + "sha256": "7422db554332a0a7a4e2d58e402c5714a1b67db6a1b2ea98f4709b3c319d3041" + }, + { + "path": "dist/alphalib/zodParseWithContext.js.map", + "sizeBytes": 9563, + "sha256": "c3ee1daecdb3fb7a6fb1ab0d5b5cb327e1620c94b3c16ab522b9b599a04c468a" + }, + { + "path": "README.md", + "sizeBytes": 30169, + "sha256": "47d191fb87e0add731c826a7553a26e2572f34ad6c8506e00b025a21ff322580" + }, + { + "path": "dist/alphalib/types/robots/_index.d.ts", + "sizeBytes": 4680970, + "sha256": "8ffd4631bfe520f6a594365f95301e832c560840456d7c2c086b40f83ed1d566" + }, + { + "path": "src/alphalib/types/robots/_index.ts", + "sizeBytes": 50795, + "sha256": "ae25dd93eac765b3a4f5a3d8a28e49c8e2b88b122f6d1534e5d2779d1186a302" + }, + { + "path": "dist/alphalib/types/robots/_instructions-primitives.d.ts", + "sizeBytes": 207294, + "sha256": "ec04807c7f1ee31c94b2242f05936ccac7a6f4791353fd29f43a0e8860499d3b" + }, + { + "path": "src/alphalib/types/robots/_instructions-primitives.ts", + "sizeBytes": 63648, + "sha256": "3bf5225f4881aff338cbdd430f5eb22e58b5ef793392bcc8c0b6f52507f6b7b3" + }, + { + "path": "dist/alphalib/types/robots/ai-chat.d.ts", + "sizeBytes": 90303, + "sha256": "a6fbd4c6b3d58a37a87ffd6226db7136ddd3d206d7de818c816b48003ab12bad" + }, + { + "path": "src/alphalib/types/robots/ai-chat.ts", + "sizeBytes": 10035, + "sha256": "05f5c0a9aba087f5fb2a83cec845c3bc462d1ada916abe01c6510eecfd99b392" + }, + { + "path": "dist/ApiError.d.ts", + "sizeBytes": 592, + "sha256": "dde26d7ee9dea3fa185dbc490915a99c6785cc1462f96138867f33a75f5f5dee" + }, + { + "path": "src/ApiError.ts", + "sizeBytes": 1335, + "sha256": "12b90cef5bbf9760c478a3882cc85162368b492aed39d1b5e2915df927db8a05" + }, + { + "path": "dist/apiTypes.d.ts", + "sizeBytes": 3730, + "sha256": "5c69b795640fa02650cf0733d262b28488a049848863392bf33a3992eb0049eb" + }, + { + "path": "src/apiTypes.ts", + "sizeBytes": 4042, + "sha256": "6be2494c40b5cee641b33329b6e2bc495c0357ffa3509228c4c531d59dbc0c5a" + }, + { + "path": "dist/cli/commands/assemblies.d.ts", + "sizeBytes": 3569, + "sha256": "cac7dbbcb9f413eb9b391eec586b905675793ab2497beb361d04a1f6f64a89e6" + }, + { + "path": "src/cli/commands/assemblies.ts", + "sizeBytes": 41625, + "sha256": "9989a3f1070e07117fe57371b61118421a6ac626c84836e647d677e4c5babe08" + }, + { + "path": "dist/alphalib/types/assembliesGet.d.ts", + "sizeBytes": 2112, + "sha256": "9708f78e367a541625e567768f5d2bc8339ec49057dd2fa454d5c7215216f7be" + }, + { + "path": "src/alphalib/types/assembliesGet.ts", + "sizeBytes": 1440, + "sha256": "acf47bb92b25c5552a8b19419be3c14323f158726b7ee16e462a248ff190a347" + }, + { + "path": "dist/alphalib/types/robots/assembly-savejson.d.ts", + "sizeBytes": 3053, + "sha256": "8c30087c4cebb948e6373c79e83e5df104c2dc7b669e862f5ffc2ffd2b07c2ed" + }, + { + "path": "src/alphalib/types/robots/assembly-savejson.ts", + "sizeBytes": 1221, + "sha256": "05973f206156273ed5fb7f26a24e34479844fef3012f7086e3ab2fb8e12eee50" + }, + { + "path": "dist/alphalib/types/assemblyReplay.d.ts", + "sizeBytes": 414604, + "sha256": "db12e59f0737b3aab4c748c45905f95ab335157af57cd7de252f1b8fd76eeacb" + }, + { + "path": "src/alphalib/types/assemblyReplay.ts", + "sizeBytes": 716, + "sha256": "dadae8a1525f6d8313d65d52810fdd40ac14f1d2c52aa3fbd9e227ea13482aa8" + }, + { + "path": "dist/alphalib/types/assemblyReplayNotification.d.ts", + "sizeBytes": 414166, + "sha256": "bf372161e78fdbd03487c0967307015b263445be87601c2266637a831e91ac7e" + }, + { + "path": "src/alphalib/types/assemblyReplayNotification.ts", + "sizeBytes": 632, + "sha256": "c6ddb9cc02103ad5f791d25bcfe6b899fa86500b2c457dd2a698db5ec0ebee25" + }, + { + "path": "dist/alphalib/types/assemblyStatus.d.ts", + "sizeBytes": 4247003, + "sha256": "224358eca0d6e38f26d82b64cd10ebc3d2b609824e46a5691d7f8162e21d2218" + }, + { + "path": "src/alphalib/types/assemblyStatus.ts", + "sizeBytes": 29485, + "sha256": "0ef4a2377e4c67c4de4dfd0d2f6475c47e046d4e2df232f3407acf7a53946f4c" + }, + { + "path": "dist/alphalib/types/robots/audio-artwork.d.ts", + "sizeBytes": 167655, + "sha256": "56670af4f3daa10c5d495be972649563a4b912828c1e9988b2b7d8119493af88" + }, + { + "path": "src/alphalib/types/robots/audio-artwork.ts", + "sizeBytes": 3845, + "sha256": "82df928d54f70ea3d34a6602cdfe8ffdb43a8de10a36656263661e4309a54026" + }, + { + "path": "dist/alphalib/types/robots/audio-concat.d.ts", + "sizeBytes": 169966, + "sha256": "9c4150072f77917ca68e63e7862e0c9fee3e7d9df890d54b78f5a734079937e7" + }, + { + "path": "src/alphalib/types/robots/audio-concat.ts", + "sizeBytes": 5511, + "sha256": "a4e0146b728bf265969dad46f8a7536638efee63875906c544d4860e1ed4557a" + }, + { + "path": "dist/alphalib/types/robots/audio-encode.d.ts", + "sizeBytes": 167466, + "sha256": "922043005e80121472fc0ff17a50c49ec9fa4173130e1563adab679cd279fa0f" + }, + { + "path": "src/alphalib/types/robots/audio-encode.ts", + "sizeBytes": 3451, + "sha256": "be951d6318aab6473087dbea86193b69837a58796aae68761b3d31ec88efc975" + }, + { + "path": "dist/alphalib/types/robots/audio-loop.d.ts", + "sizeBytes": 167878, + "sha256": "751a9f62bae4eeb980ac67ed6646fb9522e1328abc3d40bc913309a5c8fc1420" + }, + { + "path": "src/alphalib/types/robots/audio-loop.ts", + "sizeBytes": 3676, + "sha256": "d91da780538c130608a56936f148a9537b2cedde0e233e3872b7ec70b678ef83" + }, + { + "path": "dist/alphalib/types/robots/audio-merge.d.ts", + "sizeBytes": 170479, + "sha256": "7ff8b6a67c07fd16d9c2323da40deb65d7f193cdeb277182adef3b4a8a661ff7" + }, + { + "path": "src/alphalib/types/robots/audio-merge.ts", + "sizeBytes": 4923, + "sha256": "fa524f4d4f7186dc7b001d27bba6b8397edf746d2853a3e280aa28a60aab990a" + }, + { + "path": "dist/alphalib/types/robots/audio-waveform.d.ts", + "sizeBytes": 168087, + "sha256": "e6778bd4b1c71a3b87bbdaa097b8efc97efd29962279fafe39cf75d802cdce4c" + }, + { + "path": "src/alphalib/types/robots/audio-waveform.ts", + "sizeBytes": 9454, + "sha256": "4b61b0599fade66e3a0d954eea55f980e9745eff3f19341ce8f6786a80469d3f" + }, + { + "path": "dist/cli/commands/auth.d.ts", + "sizeBytes": 936, + "sha256": "20a1d35fb55fad8af33fb6decede3cbf2cd621007fe443d2866e9975bbe23b20" + }, + { + "path": "src/cli/commands/auth.ts", + "sizeBytes": 10502, + "sha256": "0dea0295f4f5798dd619860d01fe6f50f59efd99a83c36c1e35803d584f158aa" + }, + { + "path": "dist/alphalib/types/robots/azure-import.d.ts", + "sizeBytes": 11036, + "sha256": "fb0980e7bd0fcca08b195cc79b5f168e874a25673c97f9340ad89449d2a9c25b" + }, + { + "path": "src/alphalib/types/robots/azure-import.ts", + "sizeBytes": 3901, + "sha256": "162715ca46c65fce521ceefa5141d96ae5a8d51ca8ed8d045af6cd55f27282eb" + }, + { + "path": "dist/alphalib/types/robots/azure-store.d.ts", + "sizeBytes": 23317, + "sha256": "7bd4f1c2d33efe2a62e8dc2efd851f61785960145c1954058eeb8882daf7177f" + }, + { + "path": "src/alphalib/types/robots/azure-store.ts", + "sizeBytes": 4870, + "sha256": "98ece7cd3cd7575ffa57cc301aec88a2465851addda92a43d6f914e74fe44cb1" + }, + { + "path": "dist/alphalib/types/robots/backblaze-import.d.ts", + "sizeBytes": 11200, + "sha256": "656737162a0c93544d22a8a6d5c640892644a5363ef91fcdaa26d7e9f5fe2664" + }, + { + "path": "src/alphalib/types/robots/backblaze-import.ts", + "sizeBytes": 4572, + "sha256": "143f75fd564c8ab4b580eaec2ca3599df03738e93b6d265de650903f32c708f4" + }, + { + "path": "dist/alphalib/types/robots/backblaze-store.d.ts", + "sizeBytes": 19655, + "sha256": "728cd867f57b1ff2a919ef4f226e2a0ca9513813f92165a6d25bb51735cc22d9" + }, + { + "path": "src/alphalib/types/robots/backblaze-store.ts", + "sizeBytes": 3810, + "sha256": "60a83e189004145990e911398693103f92826456698c7b1e77f1951f832d8367" + }, + { + "path": "dist/cli/commands/BaseCommand.d.ts", + "sizeBytes": 944, + "sha256": "9f132cb73d644f225f0efa48ab02f0edc6a82c9db7db080e84ae2281d9cf845c" + }, + { + "path": "src/cli/commands/BaseCommand.ts", + "sizeBytes": 2146, + "sha256": "d0cab4ebb72ce5d555be82bf3de4ba1f09dd223b71702bc53527928cf1c7ac91" + }, + { + "path": "dist/alphalib/types/bill.d.ts", + "sizeBytes": 1340, + "sha256": "addda1ad6e3507c37fa8eaa835c6ed57ede1206a732d0237e40f109d329549db" + }, + { + "path": "src/alphalib/types/bill.ts", + "sizeBytes": 188, + "sha256": "2ec2d5c86e068794e85195e417a515e383a70e2741926c3a949d10002a1ad13b" + }, + { + "path": "dist/cli/commands/bills.d.ts", + "sizeBytes": 590, + "sha256": "08945c847c67df1e376230d66034497ac77cf548e33354b595d304b47ae86203" + }, + { + "path": "src/cli/commands/bills.ts", + "sizeBytes": 2402, + "sha256": "c3272b2808ff8ff1a2924aaea1431e01fb0bd46205861d5621d28ac08ef4f5f9" + }, + { + "path": "dist/cli.d.ts", + "sizeBytes": 256, + "sha256": "c0b85d46fb05f111ab4b71bf0adc491e71b78efd5b5344b74599e4126477979b" + }, + { + "path": "src/cli.ts", + "sizeBytes": 1101, + "sha256": "9f7fa1f5565e87ffdf37abd416e6e77661d3cdba15513ae37fc9a5952a24abc0" + }, + { + "path": "dist/alphalib/types/robots/cloudfiles-import.d.ts", + "sizeBytes": 12289, + "sha256": "420c6b08193c73d5acb5b533160f437847cac7707dbfb0d19772bcd3e1a6d56f" + }, + { + "path": "src/alphalib/types/robots/cloudfiles-import.ts", + "sizeBytes": 4513, + "sha256": "39f9b5ef411d7ebf410fd2d14dd47c5332ace0deda99b02a0bec775b3f1e6248" + }, + { + "path": "dist/alphalib/types/robots/cloudfiles-store.d.ts", + "sizeBytes": 20090, + "sha256": "7e427617b89defb34f177c39ed4cfc57e9546e81569054be66c3a3fdcc1d004e" + }, + { + "path": "src/alphalib/types/robots/cloudfiles-store.ts", + "sizeBytes": 3545, + "sha256": "e9e41caeb42b5518893e7abe897975e133854c98df0cae60a48d51cb0f835d7d" + }, + { + "path": "dist/alphalib/types/robots/cloudflare-import.d.ts", + "sizeBytes": 12177, + "sha256": "6b349b174338e3814f7afe52af2e53271f0357845dea3fb33ee2ba663f545302" + }, + { + "path": "src/alphalib/types/robots/cloudflare-import.ts", + "sizeBytes": 4880, + "sha256": "3f2055ece87c5d7e583d6237395a4da4fda556fc01505254c3d0a6a126939142" + }, + { + "path": "dist/alphalib/types/robots/cloudflare-store.d.ts", + "sizeBytes": 21058, + "sha256": "06a0b0724e064c0f8cc75210d7630e3147b5a086a7f82eaff618701e772fe934" + }, + { + "path": "src/alphalib/types/robots/cloudflare-store.ts", + "sizeBytes": 4479, + "sha256": "be419be86bd4a2bd1d54cad4c0a0670d52e8bff6b7a51a7d31eaeecb6c64f932" + }, + { + "path": "dist/alphalib/types/robots/digitalocean-import.d.ts", + "sizeBytes": 12247, + "sha256": "1e2ea0768661803a5f478255a60e075031eacc6755f198d24e3e19579b471ab2" + }, + { + "path": "src/alphalib/types/robots/digitalocean-import.ts", + "sizeBytes": 4556, + "sha256": "f48028a8d933f4521ef27b82848c82ec3d139c3baff7f7f46942e2b4b76e58e6" + }, + { + "path": "dist/alphalib/types/robots/digitalocean-store.d.ts", + "sizeBytes": 21638, + "sha256": "86c25da875cdf43b1adebe42e50b0125df3fb570950d7818a94908c942efd785" + }, + { + "path": "src/alphalib/types/robots/digitalocean-store.ts", + "sizeBytes": 4676, + "sha256": "1f6cb42c4dea85cf1919b8d535247ef07c4d989e7d497e10a98fe5190c8e5083" + }, + { + "path": "dist/alphalib/types/robots/document-autorotate.d.ts", + "sizeBytes": 16993, + "sha256": "ee70d548c8ca611c2cc14f313bf245c3134cf3dcf04750aac29d05a5ad0975ba" + }, + { + "path": "src/alphalib/types/robots/document-autorotate.ts", + "sizeBytes": 2719, + "sha256": "174985d88d0e927eb16a23d831c23fa924ffd0527a436692acaad3c609b8b2fb" + }, + { + "path": "dist/alphalib/types/robots/document-convert.d.ts", + "sizeBytes": 24638, + "sha256": "6a9a0d28e5e25d40de359d63d524519c4c24904b6eb332b940a8c4dbbe0d61dc" + }, + { + "path": "src/alphalib/types/robots/document-convert.ts", + "sizeBytes": 9975, + "sha256": "b5f73d19418a5bb67b1895d647b0f3f4328130540e476620b0ca1fecf3e084a1" + }, + { + "path": "dist/alphalib/types/robots/document-merge.d.ts", + "sizeBytes": 18042, + "sha256": "7f60c8960caade2fae1a9478c4075c120eb4858dec888e5060a95756c4e4ac5d" + }, + { + "path": "src/alphalib/types/robots/document-merge.ts", + "sizeBytes": 3835, + "sha256": "265357067cf08c107cec5fdab7951810832559e4902e7eff0ae3474b1c3bceb2" + }, + { + "path": "dist/alphalib/types/robots/document-ocr.d.ts", + "sizeBytes": 18676, + "sha256": "de5e1f257cf9c796390a18365d2883cb9e43b1465d2259fd967d3d3370217908" + }, + { + "path": "src/alphalib/types/robots/document-ocr.ts", + "sizeBytes": 5306, + "sha256": "3b47017593ee1014cbb6c320a9ef5b04a6962958cb0006d269144972cb89f9ed" + }, + { + "path": "dist/alphalib/types/robots/document-split.d.ts", + "sizeBytes": 17616, + "sha256": "99431a94cba0901a94742e7bcad58745a74f388ad3a0a42a944afe69065bd543" + }, + { + "path": "src/alphalib/types/robots/document-split.ts", + "sizeBytes": 2867, + "sha256": "a8965112f587ff50452a72e3448e9802de1850f63a300f2643ba841c8414cceb" + }, + { + "path": "dist/alphalib/types/robots/document-thumbs.d.ts", + "sizeBytes": 28207, + "sha256": "cf8bbcd2f6c105baf34678306b32ab0bce1f1b7b409173f08c52646f806b2588" + }, + { + "path": "src/alphalib/types/robots/document-thumbs.ts", + "sizeBytes": 9807, + "sha256": "3a2d6c877178fb51a0d77d44ff0e11fdf59af26cd3839818b5a3a74665961ab3" + }, + { + "path": "dist/alphalib/types/robots/dropbox-import.d.ts", + "sizeBytes": 8522, + "sha256": "24118bc0f2c3a8daa16eec2d2d9bfe74e4a39776fa7936316161bc446c9af408" + }, + { + "path": "src/alphalib/types/robots/dropbox-import.ts", + "sizeBytes": 3505, + "sha256": "80d05dfafc8be76e46712016da81a25fff3e1e9edff7787124b4d417a2003103" + }, + { + "path": "dist/alphalib/types/robots/dropbox-store.d.ts", + "sizeBytes": 18629, + "sha256": "56fbd6ad497fc0e28d1956afecfad9aa77dfecdd7bef23d29595c3224171dd97" + }, + { + "path": "src/alphalib/types/robots/dropbox-store.ts", + "sizeBytes": 3465, + "sha256": "5f0ecce1e742d401864a14c9599b618b7c27743926b9c4452b6f56d9491e4866" + }, + { + "path": "dist/alphalib/types/robots/edgly-deliver.d.ts", + "sizeBytes": 6141, + "sha256": "153eb50b9d1ee94be2e1ec67179e70a1568ff0b1eac63ef8cc5ba66325b9b867" + }, + { + "path": "src/alphalib/types/robots/edgly-deliver.ts", + "sizeBytes": 2785, + "sha256": "40d7a8b6567fd80057781d7a24f093e9e1918ee45c3191085ee1bc256f9eeb44" + }, + { + "path": "dist/alphalib/types/robots/file-compress.d.ts", + "sizeBytes": 20135, + "sha256": "70a145f269bdd19a0dfede425e33849d3b4ba56631f11739d58d648f8d0b3089" + }, + { + "path": "src/alphalib/types/robots/file-compress.ts", + "sizeBytes": 6687, + "sha256": "b28ad0566636340b965e4fba2f5b9c7da277cbba7bba75237cca5e4d07affd27" + }, + { + "path": "dist/alphalib/types/robots/file-decompress.d.ts", + "sizeBytes": 16983, + "sha256": "5579a9407db5af3e825f06bc34d2a5f11b0d6b87e1bcff6ddd3a15dac8a2cd9c" + }, + { + "path": "src/alphalib/types/robots/file-decompress.ts", + "sizeBytes": 4628, + "sha256": "8c460d61060e013707889172190ed615775467d3d69ee7850efd977e86bc58ff" + }, + { + "path": "dist/alphalib/types/robots/file-filter.d.ts", + "sizeBytes": 30301, + "sha256": "477f0767ef827af10ab26e016e308bff23f2989e868f2c815f4f23cd94b3313f" + }, + { + "path": "src/alphalib/types/robots/file-filter.ts", + "sizeBytes": 6781, + "sha256": "e9476b7df5be5397bec14e2e976aaf252a43c375c9f0ba777d76ce333b57c604" + }, + { + "path": "dist/alphalib/types/robots/file-hash.d.ts", + "sizeBytes": 17641, + "sha256": "96be0831960c7d0ae1f1c5856a6a3c003ae39ae665a3490850c13a9eb1a4fb57" + }, + { + "path": "src/alphalib/types/robots/file-hash.ts", + "sizeBytes": 2861, + "sha256": "733c4313ffcea9fb33b4b6ca9857b682a561b10cd59d1097464ab673c7b96bca" + }, + { + "path": "dist/alphalib/types/robots/file-preview.d.ts", + "sizeBytes": 37390, + "sha256": "9bdfda1a7ab6e8ed51a500afff37b3679515ad533c9551de399bc872ed97719f" + }, + { + "path": "src/alphalib/types/robots/file-preview.ts", + "sizeBytes": 13514, + "sha256": "4bb202a2bc5109d1c1234321237c019cd41986890f19fe114bd85d8c66e905db" + }, + { + "path": "dist/alphalib/types/robots/file-read.d.ts", + "sizeBytes": 16703, + "sha256": "08e84ba786ec43b289048db242e2833844918e550f5fd2033d9426993ce44fad" + }, + { + "path": "src/alphalib/types/robots/file-read.ts", + "sizeBytes": 2549, + "sha256": "5081ae04d3c9db4cb4196b74877e63f7f30ea51e53773cca75095536c7a50963" + }, + { + "path": "dist/alphalib/types/robots/file-serve.d.ts", + "sizeBytes": 17440, + "sha256": "adf1d55b0f2b0c52f32b9861b0ce7a5c7b1e6f0087a35534eaab752d290f1163" + }, + { + "path": "src/alphalib/types/robots/file-serve.ts", + "sizeBytes": 6708, + "sha256": "2f35e8b78f5024e954a4b962549ec71ae61d24953b6e711511cf827fe5f69be1" + }, + { + "path": "dist/alphalib/types/robots/file-verify.d.ts", + "sizeBytes": 18195, + "sha256": "c18447877b8a83c219f662f4e744dc0ab16745404ada77cb6d8260493f9bab32" + }, + { + "path": "src/alphalib/types/robots/file-verify.ts", + "sizeBytes": 4174, + "sha256": "2c1aa8e92175ec0811628d79d3e1d51dfdfcdae2b8dfa53f32434ef416d19acc" + }, + { + "path": "dist/alphalib/types/robots/file-virusscan.d.ts", + "sizeBytes": 18207, + "sha256": "b9cd21c5b31f1921db32af8e84d20c8ca1901ad308cf4b55171e77f87bc8c9de" + }, + { + "path": "src/alphalib/types/robots/file-virusscan.ts", + "sizeBytes": 4593, + "sha256": "b419a7a5c34ce59996b4eb71833a337d8b0e180d36765c6bb0b6d8236ce49b05" + }, + { + "path": "dist/alphalib/types/robots/file-watermark.d.ts", + "sizeBytes": 17410, + "sha256": "d13deaf037252d9d9f27e7b880329665ef6146b637720bd7cdc0de46cb217630" + }, + { + "path": "src/alphalib/types/robots/file-watermark.ts", + "sizeBytes": 2068, + "sha256": "08af2039f3e568d27b91508b8002ce2ee19714817d69360a4e942cf27f820657" + }, + { + "path": "dist/alphalib/types/robots/ftp-import.d.ts", + "sizeBytes": 10382, + "sha256": "02b494b7a354fed368245635c8c79033c22dc41f04d3adc1b25ea82d5860bd89" + }, + { + "path": "src/alphalib/types/robots/ftp-import.ts", + "sizeBytes": 3132, + "sha256": "2f816efd74d6de7773fea4c48c4c51dcee514133e4b74788bb419e3f22ee1b75" + }, + { + "path": "dist/alphalib/types/robots/ftp-store.d.ts", + "sizeBytes": 21536, + "sha256": "7674a4dbc884b65a376ccffff7de07967ec32a384237d34fcc46d6a75e32f3d6" + }, + { + "path": "src/alphalib/types/robots/ftp-store.ts", + "sizeBytes": 4197, + "sha256": "1bbaa2361cc3675a29178cbd0f4fcecaad1033032f154a6da36c5c677a9c9447" + }, + { + "path": "dist/alphalib/types/robots/google-import.d.ts", + "sizeBytes": 9781, + "sha256": "d7cba012863f00d62bfca4b1adb997305747f3edd291ade13cc7d982dfd7bc86" + }, + { + "path": "src/alphalib/types/robots/google-import.ts", + "sizeBytes": 4503, + "sha256": "4e20e80511a5380f1c6f72e5913f85f728699c412f72bec01d01a150f644e346" + }, + { + "path": "dist/alphalib/types/robots/google-store.d.ts", + "sizeBytes": 20168, + "sha256": "69e46d09a51354b678b390873d4039369450e77ec0a047c77e2ebca527e6328a" + }, + { + "path": "src/alphalib/types/robots/google-store.ts", + "sizeBytes": 6183, + "sha256": "e30cb47805e98e3099935ed4113e036b61c5da91bc483e6b9d1d1f6371221a8b" + }, + { + "path": "dist/cli/helpers.d.ts", + "sizeBytes": 571, + "sha256": "f42d526e9b8270d53f94c8759ea94396515f3280f04ef47abab1cfb8445827ba" + }, + { + "path": "src/cli/helpers.ts", + "sizeBytes": 1550, + "sha256": "2a78e29a2c099f330e65db968da8a42cf25614c95374744a96e04e7341b64aab" + }, + { + "path": "dist/alphalib/types/robots/html-convert.d.ts", + "sizeBytes": 22952, + "sha256": "66b4c1ed3f87bd77f402b970f86fcd4869ceab173534a222d029e0ca38e74555" + }, + { + "path": "src/alphalib/types/robots/html-convert.ts", + "sizeBytes": 5966, + "sha256": "35eeb778615a8f9fb18e05b8672c7e4c116bf41c3e42cbb114057524ea9118cf" + }, + { + "path": "dist/alphalib/types/robots/http-import.d.ts", + "sizeBytes": 12754, + "sha256": "07454a99e30a4a8d0c167c657b7f94fe0699ca2515f342cd3dacf94aa4dc8122" + }, + { + "path": "src/alphalib/types/robots/http-import.ts", + "sizeBytes": 6465, + "sha256": "280418e48e6e718e6822f384d151bb6f83a47fd275d05a9e523e935a4a6a70fd" + }, + { + "path": "dist/alphalib/types/robots/image-bgremove.d.ts", + "sizeBytes": 19322, + "sha256": "ce7cf8d8e520806ba5b362c69716a4dffd6d4b14ab2642b31ec964791e70296e" + }, + { + "path": "src/alphalib/types/robots/image-bgremove.ts", + "sizeBytes": 3278, + "sha256": "c9fd592d22e31b933f54eb6f1c83f0aaefa3be47a0f98089da43bbba43d958b4" + }, + { + "path": "dist/alphalib/types/robots/image-describe.d.ts", + "sizeBytes": 19548, + "sha256": "31cb9b81d026344d2587b754dacb5fb2cc6a16cc3c4a8e6be0ee3b85064c9a23" + }, + { + "path": "src/alphalib/types/robots/image-describe.ts", + "sizeBytes": 5324, + "sha256": "2d6ffb899a5b34185e81aed62e8bfbde3fa93ccb18fe73a5a79d74a2b8423083" + }, + { + "path": "dist/alphalib/types/robots/image-facedetect.d.ts", + "sizeBytes": 20924, + "sha256": "87b70b6ec7fc69cb54df4473756f28b9dfc08891f2edbcc2e9343c19fe304259" + }, + { + "path": "src/alphalib/types/robots/image-facedetect.ts", + "sizeBytes": 7149, + "sha256": "caafb37c5d568017348216b74330f7467ccb64d469f32fcf03fd7838021a8c33" + }, + { + "path": "dist/alphalib/types/robots/image-generate.d.ts", + "sizeBytes": 21767, + "sha256": "83ce96595700aac82a23a46643db97314a5cc7d79fd6f3bee6d89541eceaf74c" + }, + { + "path": "src/alphalib/types/robots/image-generate.ts", + "sizeBytes": 3465, + "sha256": "054a6d1a584bddf6cb2636cc4b8984f0da2f497066e15ec5ce1fb0b3e91d5958" + }, + { + "path": "dist/alphalib/types/robots/image-merge.d.ts", + "sizeBytes": 19863, + "sha256": "b7ad4dc952aaae6250d2cfd6ffaedf915ab177c9fa86cad92ff764f71980e2b3" + }, + { + "path": "src/alphalib/types/robots/image-merge.ts", + "sizeBytes": 4399, + "sha256": "f86cde29eaef40c73185ccd5a06cce1b16392af2fe5a3657f537d008516193c5" + }, + { + "path": "dist/alphalib/types/robots/image-ocr.d.ts", + "sizeBytes": 18589, + "sha256": "c7875da64b1b3d96c8febb34de10cba91c8b3a75bf4de71e4347a837ded157e7" + }, + { + "path": "src/alphalib/types/robots/image-ocr.ts", + "sizeBytes": 5013, + "sha256": "e52bf1ef75dcf595c648b071c9b1d0cec7332055ad17205795d87567855e9dc8" + }, + { + "path": "dist/alphalib/types/robots/image-optimize.d.ts", + "sizeBytes": 19364, + "sha256": "fcf380dbaa88647a2659f8fed5b8705179e11eb48b690d93732aa1697ddac733" + }, + { + "path": "src/alphalib/types/robots/image-optimize.ts", + "sizeBytes": 4943, + "sha256": "a28ba8e59e94cbc77d39fe0442115b1ef07edaaaaef39c8039b2cdf2b9740437" + }, + { + "path": "dist/alphalib/types/robots/image-resize.d.ts", + "sizeBytes": 90591, + "sha256": "06048ee955f4b4a4c918553461f5203b6666ee251f0eeebb250765425055bd1f" + }, + { + "path": "src/alphalib/types/robots/image-resize.ts", + "sizeBytes": 28301, + "sha256": "23a89aaa7f7e7721eac3e7dafb1f82fdb5c1277dc30d85cf3e3364c478e45151" + }, + { + "path": "dist/InconsistentResponseError.d.ts", + "sizeBytes": 138, + "sha256": "65e9660f7df57f53d44dc10f9b3b547411b1c32a5ee3c886f2ae02e8d65163ee" + }, + { + "path": "src/InconsistentResponseError.ts", + "sizeBytes": 111, + "sha256": "05f61ae5885cda2995817857c701155383cc4bc63f04a574b07dbd18111ac9ab" + }, + { + "path": "dist/cli/commands/index.d.ts", + "sizeBytes": 110, + "sha256": "8138bd76ab0a7ad7dc62b74d654fd7335de2fa86e1fb58f34788df74005ccc2d" + }, + { + "path": "src/cli/commands/index.ts", + "sizeBytes": 1648, + "sha256": "96dcf864fd177c933434cc0e43ca8fe58aa153332ed5013af6d1012d4fde9d8f" + }, + { + "path": "dist/alphalib/mcache.d.ts", + "sizeBytes": 1881, + "sha256": "35ca1c21bf3de9ba4b28e19637c937a83f15b88dc2081dc9106f6201619e6451" + }, + { + "path": "src/alphalib/mcache.ts", + "sizeBytes": 4861, + "sha256": "6481c39114c8a5d6a514e2cdb0c40ee56f6f8ab56bb0a83ce91ed4f69a58184f" + }, + { + "path": "dist/alphalib/types/robots/meta-read.d.ts", + "sizeBytes": 5750, + "sha256": "f96e77de20bbda56606331d247cd9f08e73c86bbc3734c1f2d650d7ba397edc3" + }, + { + "path": "src/alphalib/types/robots/meta-read.ts", + "sizeBytes": 1626, + "sha256": "d039db9cc3fb5dff8523c398dcfd5ec7a4165e82c386bdcf5c8e10bab79fcade" + }, + { + "path": "dist/alphalib/types/robots/meta-write.d.ts", + "sizeBytes": 154336, + "sha256": "6dbc3ba00bebfbae0453baed961ad5f22c95a6a917d2dafcd208a45a21481aa0" + }, + { + "path": "src/alphalib/types/robots/meta-write.ts", + "sizeBytes": 3125, + "sha256": "49b1262dbcb811d08288f1efb102378b5ffed43c2bf05339d1fb088d0edb5a29" + }, + { + "path": "dist/alphalib/types/robots/minio-import.d.ts", + "sizeBytes": 12032, + "sha256": "56f5ad945624b293847bec369f49c57e4679b37884e4931b1dee102ab52e0636" + }, + { + "path": "src/alphalib/types/robots/minio-import.ts", + "sizeBytes": 4729, + "sha256": "6211c7a5c246574b614f3d7c0735de4a03242ff1c50954b1bd4d1cdc28bf3ae5" + }, + { + "path": "dist/alphalib/types/robots/minio-store.d.ts", + "sizeBytes": 21007, + "sha256": "4381c1c9a5447d4809742d37d11a3ae213e8875a60cad6d918fcf771a5814a8c" + }, + { + "path": "src/alphalib/types/robots/minio-store.ts", + "sizeBytes": 4189, + "sha256": "dc468fce6896ee822cd01eb5c1684e1c157aaf0f91530d965aee360baedb58e3" + }, + { + "path": "dist/alphalib/lib/nativeGlobby.d.ts", + "sizeBytes": 466, + "sha256": "df27afec76a5a459e53a10ac12f263924a1a99caadf239af8d943e1cf6de582d" + }, + { + "path": "src/alphalib/lib/nativeGlobby.ts", + "sizeBytes": 6987, + "sha256": "85bb1d37eb0e2c18f46178d28553a993c35eb2b145cfdddc90425ac5d3f6ec11" + }, + { + "path": "dist/cli/commands/notifications.d.ts", + "sizeBytes": 368, + "sha256": "8a557cc08d30854ae63efdd10cfc65add0eeca9748747bf5976f6264b89c9d62" + }, + { + "path": "src/cli/commands/notifications.ts", + "sizeBytes": 1829, + "sha256": "2cf790e6076b7983c6b88fb6aee38069765e2997b86b897bd0a4878ed5e3f966" + }, + { + "path": "dist/cli/OutputCtl.d.ts", + "sizeBytes": 1612, + "sha256": "bcccf6179f7ee37b2f78c572cc2d1d853ca9511fc90f4c887d8f7f7e95ce559a" + }, + { + "path": "src/cli/OutputCtl.ts", + "sizeBytes": 3397, + "sha256": "d16381cf45ae93b8bc2f42a9f4de9e1a012a21962e33a7ca36071cabca0e616a" + }, + { + "path": "dist/PaginationStream.d.ts", + "sizeBytes": 581, + "sha256": "952b4a59f1af5ba76db5d2aa705a88f5ff0ac58eeb09072b7bb8a1234be88245" + }, + { + "path": "src/PaginationStream.ts", + "sizeBytes": 1204, + "sha256": "ac24517761007d62f9f895cd69f89947cb98c1f79bb7c1038972648464c39260" + }, + { + "path": "dist/PollingTimeoutError.d.ts", + "sizeBytes": 144, + "sha256": "b8c5c12ce75d4ae2c196e4be780a67378547dd15fdccdb2824963e35a8ca4c96" + }, + { + "path": "src/PollingTimeoutError.ts", + "sizeBytes": 129, + "sha256": "52cd41a954b98ea5fdcb4d4b238da5e8203bd5c66a1e9c56bc25520cc6c1a6d5" + }, + { + "path": "dist/alphalib/types/robots/progress-simulate.d.ts", + "sizeBytes": 9245, + "sha256": "12e4ab3ccd73da1e7e7a45463a4eddf2b3091e04adf318d7737c0a56e915ad01" + }, + { + "path": "src/alphalib/types/robots/progress-simulate.ts", + "sizeBytes": 1325, + "sha256": "0591686d6c3787e0af4821649506d88034d3f302b021969dc91d612f7e9b3e8b" + }, + { + "path": "dist/alphalib/types/robots/s3-import.d.ts", + "sizeBytes": 13045, + "sha256": "32ffbd902a5c6c730f53014f642d371798fc110764c75d2ec5ab0a1cda02eb63" + }, + { + "path": "src/alphalib/types/robots/s3-import.ts", + "sizeBytes": 9153, + "sha256": "d3c2beb8aab49ce388cc98a63aa96221c82b70a41b89273e161fd783cf16ece2" + }, + { + "path": "dist/alphalib/types/robots/s3-store.d.ts", + "sizeBytes": 24603, + "sha256": "b2b926fdf8ed60165b5339f98dbbad4c5cb7e82a0d33c92a2e96a6ef87257f19" + }, + { + "path": "src/alphalib/types/robots/s3-store.ts", + "sizeBytes": 10404, + "sha256": "e46e6aa2a6c15c5253b17146af9f68506446ab6032f19dcf86d03abedf22216f" + }, + { + "path": "dist/alphalib/types/robots/script-run.d.ts", + "sizeBytes": 17234, + "sha256": "63547b6645117601d1de851b79bada4301a9b0f62a4bca1cf3e89632754786d0" + }, + { + "path": "src/alphalib/types/robots/script-run.ts", + "sizeBytes": 4500, + "sha256": "1f2ef9f81a63f341d419e289d1483e4c09c11df803771313690182d81e1ce543" + }, + { + "path": "dist/alphalib/types/robots/sftp-import.d.ts", + "sizeBytes": 9785, + "sha256": "a7fd349a62c27f52b20dfe99ed009e6b1fc7b6eaad15b51761e7eaa6f78ca3ed" + }, + { + "path": "src/alphalib/types/robots/sftp-import.ts", + "sizeBytes": 3065, + "sha256": "fe02c9a941b0d77c063dbb5bc2627da6a4828366a97ce6b6d7a43f912dfd22aa" + }, + { + "path": "dist/alphalib/types/robots/sftp-store.d.ts", + "sizeBytes": 20864, + "sha256": "f1c8e65870880f7afca120b6dfb9bad0c8d1289953bc33221ff19035e2f3a291" + }, + { + "path": "src/alphalib/types/robots/sftp-store.ts", + "sizeBytes": 4129, + "sha256": "8a2f0b5f00e281b04d9270286c679f2829e1c2b5186d41e96f495039a865ec08" + }, + { + "path": "dist/alphalib/types/robots/speech-transcribe.d.ts", + "sizeBytes": 19949, + "sha256": "ace8aa2b1d2f366893cb34bee4a0413bf117ff4302ffa2dde911cea802779bd5" + }, + { + "path": "src/alphalib/types/robots/speech-transcribe.ts", + "sizeBytes": 5994, + "sha256": "62516b051ea830ceb759193b72258eb9f71eb1ef592caf583de713afb4735571" + }, + { + "path": "dist/alphalib/types/stackVersions.d.ts", + "sizeBytes": 345, + "sha256": "abffa61231b5d99c58c189e8f2fefe52befa7caf031d89f15f9a9019a77deded" + }, + { + "path": "src/alphalib/types/stackVersions.ts", + "sizeBytes": 321, + "sha256": "2905f2af4f9dc9989eb957552b6a7212015f9ccc3830f5c1b47b3fe493ae23cb" + }, + { + "path": "dist/alphalib/types/robots/supabase-import.d.ts", + "sizeBytes": 12627, + "sha256": "90adca5e04dcfa03b5b36bac2754cc117599d1b35b15641296a7f67077e7c5b6" + }, + { + "path": "src/alphalib/types/robots/supabase-import.ts", + "sizeBytes": 4908, + "sha256": "b5010e2b076201a833ab305dce1ef0d3e27ec02bd9087136b79ccfa8057fc18e" + }, + { + "path": "dist/alphalib/types/robots/supabase-store.d.ts", + "sizeBytes": 21036, + "sha256": "053600e9ef6680faef2101ae027846ca8fa758e09a1e81be61be32a4add5c303" + }, + { + "path": "src/alphalib/types/robots/supabase-store.ts", + "sizeBytes": 4050, + "sha256": "db0973dfb43a0cfa30d27d7fc1cb0f8bca7a89c0eae0ac42583641fd5fbd4eac" + }, + { + "path": "dist/alphalib/types/robots/swift-import.d.ts", + "sizeBytes": 12540, + "sha256": "ac69f5083e4b43aa681f4b4a6250927a99180c35fb8b582d2f9bc92182f843fd" + }, + { + "path": "src/alphalib/types/robots/swift-import.ts", + "sizeBytes": 4769, + "sha256": "db5b4fce872e9379b32cb451238900b1a384d28c1be5481caf5910b8f306a14a" + }, + { + "path": "dist/alphalib/types/robots/swift-store.d.ts", + "sizeBytes": 21515, + "sha256": "54fe47c918a5738080d1e602663fbf800c2545defb8bb0cacb48c3ee6657f2a4" + }, + { + "path": "src/alphalib/types/robots/swift-store.ts", + "sizeBytes": 4259, + "sha256": "a3a48fd577d0a3c8afcbfb0933d3f18e87ab573885287a6be5dc9554720b1168" + }, + { + "path": "dist/cli/template-last-modified.d.ts", + "sizeBytes": 376, + "sha256": "7752e122126205b1a294c18a2fbfb3fdc00f2a88c5f188d277b51e97f0525613" + }, + { + "path": "src/cli/template-last-modified.ts", + "sizeBytes": 3925, + "sha256": "c319bb83a5a3e24fb9998976eeae74a2e9094356e2ac1495d8519df7aaa371d6" + }, + { + "path": "dist/alphalib/types/template.d.ts", + "sizeBytes": 7679978, + "sha256": "758e25908eaa5329ae33a9d694b339e4d8cb6def4459d5a8d1581829eeb667f5" + }, + { + "path": "src/alphalib/types/template.ts", + "sizeBytes": 11635, + "sha256": "4c72d99aefee3ffe6dc9fb285f51773d7446b24b4d6fff4aafb0a8d5b89efa18" + }, + { + "path": "dist/alphalib/types/templateCredential.d.ts", + "sizeBytes": 3526, + "sha256": "09de6d53950e580a1ed01a61fca71047c70637c9df24298e1772b310d188c82a" + }, + { + "path": "src/alphalib/types/templateCredential.ts", + "sizeBytes": 1375, + "sha256": "2d0a63c819e86f0eee3bb4811d32033ede8be5692ff9ba02c30147db42a41520" + }, + { + "path": "dist/cli/commands/templates.d.ts", + "sizeBytes": 2875, + "sha256": "62c3ab8980473a08a6ebfb662d56b517ad8cbc1f8d82988aa7f181e07d010bf0" + }, + { + "path": "src/cli/commands/templates.ts", + "sizeBytes": 16146, + "sha256": "12037ee25c27331aaa630d519c52e6c81520f002f79a74782b4d647d66025b15" + }, + { + "path": "dist/alphalib/types/robots/text-speak.d.ts", + "sizeBytes": 19946, + "sha256": "0360f009914c68cec3f2dbfb143047650c3a9fde1e2f5b31f17462cdf44f5c96" + }, + { + "path": "src/alphalib/types/robots/text-speak.ts", + "sizeBytes": 5446, + "sha256": "61faa11c89a96029931a6f950d7bf85e8cd021b852a90e0fc509fc22f286d297" + }, + { + "path": "dist/alphalib/types/robots/text-translate.d.ts", + "sizeBytes": 30846, + "sha256": "061b8a82ec26534d96598aebd5814921c0776dab9611c68650e538ec4b9f5388" + }, + { + "path": "src/alphalib/types/robots/text-translate.ts", + "sizeBytes": 6167, + "sha256": "60a628fc3a73ac29d989600c4697c80fc20f380713e3070bdbcb065f8bc14244" + }, + { + "path": "dist/alphalib/types/robots/tigris-import.d.ts", + "sizeBytes": 12557, + "sha256": "367ac7fd0910a21d0c91f368125cfbc2ac41b311011a602f0e1196ccbc1c6256" + }, + { + "path": "src/alphalib/types/robots/tigris-import.ts", + "sizeBytes": 4913, + "sha256": "4314fcad1af19426e44a715dfddcf66ca567194c7b1c562816acfef33f51bee0" + }, + { + "path": "dist/alphalib/types/robots/tigris-store.d.ts", + "sizeBytes": 21532, + "sha256": "8c86efd7e6562ff020749b2863272de41dfd2af637a5ae281a3e9d628f6e8460" + }, + { + "path": "src/alphalib/types/robots/tigris-store.ts", + "sizeBytes": 4368, + "sha256": "2ab40d3bf6dfce8c075b506f6ca037ecbcb94f7a8987a1b0a3190facd97e11b7" + }, + { + "path": "dist/alphalib/types/robots/tlcdn-deliver.d.ts", + "sizeBytes": 6141, + "sha256": "2d55583c45f4821e987b2c6c91508a9c5432520dcd184e96f4c744772eac673d" + }, + { + "path": "src/alphalib/types/robots/tlcdn-deliver.ts", + "sizeBytes": 2780, + "sha256": "98a184703f11ae07882a2b4424b0fe606ae32ef7f89331a1e89660a8df27ea1c" + }, + { + "path": "dist/Transloadit.d.ts", + "sizeBytes": 9194, + "sha256": "cbd0295d32aa80473afdfdf5674991228724c5488094936ddae3af329a8d3fe8" + }, + { + "path": "src/Transloadit.ts", + "sizeBytes": 31079, + "sha256": "0e431a0e5454816551e3980adde72035b32b0be00b464e626288477356822842" + }, + { + "path": "dist/alphalib/tryCatch.d.ts", + "sizeBytes": 772, + "sha256": "1eece292533e3695a84b6fa2fcd6c1bd38fc77f9a6b7cef849ff0852b6d79456" + }, + { + "path": "src/alphalib/tryCatch.ts", + "sizeBytes": 880, + "sha256": "e0c9e9a35c092d88ca2c861a3a2d4a75f9efa5101ec50e1c6a52a2ac06ac917c" + }, + { + "path": "dist/alphalib/types/robots/tus-store.d.ts", + "sizeBytes": 19747, + "sha256": "57fc17b9635c1a9c52c8a18c961f45a21ab43668c5e5912a9c7bdbb60464d2a4" + }, + { + "path": "src/alphalib/types/robots/tus-store.ts", + "sizeBytes": 5261, + "sha256": "2360ca08adc4ebbc35c6d4e2a14e5c5f3f4b52e6d57720c5c7958a71cf99ce3f" + }, + { + "path": "dist/tus.d.ts", + "sizeBytes": 698, + "sha256": "71419e8ef5a5308428a59d52bca3be0ad68d5428547d7a44ba6d7c72feba8a93" + }, + { + "path": "src/tus.ts", + "sizeBytes": 5040, + "sha256": "5214697dff961d604f6db254e4ae04f7513913d70734fef8a3eee33ddadd6111" + }, + { + "path": "dist/cli/types.d.ts", + "sizeBytes": 2503, + "sha256": "c62e78eb76dea08fc842b9557143dee71f4b68aaa1171249497f60279844ef31" + }, + { + "path": "src/cli/types.ts", + "sizeBytes": 1988, + "sha256": "34046c83c95ddb5087632149583b39d1e60e3bb5f373788bfb52ae5abf03dd75" + }, + { + "path": "dist/alphalib/types/robots/upload-handle.d.ts", + "sizeBytes": 6141, + "sha256": "f92f0f4fb223e34c6d71bc585ab29c15c6a3a101208e2653c992b23ff43cf54f" + }, + { + "path": "src/alphalib/types/robots/upload-handle.ts", + "sizeBytes": 3439, + "sha256": "4bf3de4456a3aa53d370f4568a0ab1c5423ac8f251d83c62b593fe7d8f814a9d" + }, + { + "path": "dist/alphalib/types/robots/video-adaptive.d.ts", + "sizeBytes": 213318, + "sha256": "7a79447f68a242551c39d73a5e020e09d7bbfbb1321d5d1ad88d353ef9037ec4" + }, + { + "path": "src/alphalib/types/robots/video-adaptive.ts", + "sizeBytes": 6616, + "sha256": "e74aff371f673ca60e8d472ab257bf97fdc0ab53fb097798abefc8392bd575ab" + }, + { + "path": "dist/alphalib/types/robots/video-concat.d.ts", + "sizeBytes": 212250, + "sha256": "d1536349d4065446732696fa8ec3a2807496d2dc302a2649ba11b3b2a2f08a1f" + }, + { + "path": "src/alphalib/types/robots/video-concat.ts", + "sizeBytes": 5221, + "sha256": "3165f6d83e36251c505d443821e3b0ce9697569f050be5369a19728aff4e83d0" + }, + { + "path": "dist/alphalib/types/robots/video-encode.d.ts", + "sizeBytes": 233784, + "sha256": "4e8287533efdd130afd6848f6f66653a4d4366778849894827ab4b066af49205" + }, + { + "path": "src/alphalib/types/robots/video-encode.ts", + "sizeBytes": 5101, + "sha256": "f75e56eb0bc43e46e9fccfef8c11fa86da70fd0ed231ba3125228a9b93b368dc" + }, + { + "path": "dist/alphalib/types/robots/video-merge.d.ts", + "sizeBytes": 216753, + "sha256": "2951bd8b2a929ab0fa5d2f23a092e68017ec1a4e50110005bbdde70363691936" + }, + { + "path": "src/alphalib/types/robots/video-merge.ts", + "sizeBytes": 6305, + "sha256": "8f70bdaf791e1e49e875f0876f6800591288e8f1dc24afad094163cf9cd2bfd5" + }, + { + "path": "dist/alphalib/types/robots/video-ondemand.d.ts", + "sizeBytes": 328276, + "sha256": "da59f54bbb515fbd9ef9cb1a19aa97561c1acd356acf9b1318383f9583ed0545" + }, + { + "path": "src/alphalib/types/robots/video-ondemand.ts", + "sizeBytes": 5479, + "sha256": "e380a593595c0295feaeaee0bc338cd9df43dce8d68f955b3b28b96e7d1528f0" + }, + { + "path": "dist/alphalib/types/robots/video-subtitle.d.ts", + "sizeBytes": 216860, + "sha256": "b0a6152e9b4b8b363c9c2f9f07195320277e2137c80266d55353c30d94d53d3e" + }, + { + "path": "src/alphalib/types/robots/video-subtitle.ts", + "sizeBytes": 5356, + "sha256": "b829093f0b0d8518216a21e9d8d1c8fec095ed97fdf80d0442141c001b2a1aa0" + }, + { + "path": "dist/alphalib/types/robots/video-thumbs.d.ts", + "sizeBytes": 159836, + "sha256": "76099f2d09bc70305d94cdbd22ff6b1d7f0510aba2e41e235ccfebe9f7f121f5" + }, + { + "path": "src/alphalib/types/robots/video-thumbs.ts", + "sizeBytes": 6146, + "sha256": "56ff17844959e49ca07a6dd55699c87164bd903dd67f1763a89b5bdf21132d2e" + }, + { + "path": "dist/alphalib/types/robots/vimeo-import.d.ts", + "sizeBytes": 10628, + "sha256": "c3d04aa4ba8bc9d60dd0b9adbfc1cf58b3f7cfca8e8f3ef7106324f9502cc9cb" + }, + { + "path": "src/alphalib/types/robots/vimeo-import.ts", + "sizeBytes": 4152, + "sha256": "2986132be48ace59ec097593bb5a339ce11a4a6a321a7cd50cc42a86c960a07b" + }, + { + "path": "dist/alphalib/types/robots/vimeo-store.d.ts", + "sizeBytes": 21633, + "sha256": "451488a53edaabdc43a66b68473b80dca87426f38f484d4c45eeed9c653a021a" + }, + { + "path": "src/alphalib/types/robots/vimeo-store.ts", + "sizeBytes": 5071, + "sha256": "ac4db748b1713592ea0aa131ee4dc59e360c676c8b7df3514ae410fb8f992938" + }, + { + "path": "dist/alphalib/types/robots/wasabi-import.d.ts", + "sizeBytes": 12587, + "sha256": "d4066c0bbc2667dd25945e6fc8a14a845cce2cc5c00f05ea8c393081fb5c1689" + }, + { + "path": "src/alphalib/types/robots/wasabi-import.ts", + "sizeBytes": 4898, + "sha256": "441b3730b98c5b2f0b86084d8ef169a7765771d84ef9fff15584d0638cf9b9b9" + }, + { + "path": "dist/alphalib/types/robots/wasabi-store.d.ts", + "sizeBytes": 21544, + "sha256": "f93747dc3012a7d553398f2da21f8e3945cbc082bbe7cba42aadbf5ec41b6aa2" + }, + { + "path": "src/alphalib/types/robots/wasabi-store.ts", + "sizeBytes": 4220, + "sha256": "45d6d2a669f03eb1e49e53f0463cde1a8f873e3562960e6596366569e8a33a6f" + }, + { + "path": "dist/alphalib/types/robots/youtube-store.d.ts", + "sizeBytes": 21333, + "sha256": "738f8455435c681022c8a7a6e703ecb6d1a53c338ea5c7678d04e634485d2f44" + }, + { + "path": "src/alphalib/types/robots/youtube-store.ts", + "sizeBytes": 5592, + "sha256": "d894f341c86bf6d1d21bc328eed7df2d686b07f4e59734a9354da309bcdb73cf" + }, + { + "path": "dist/alphalib/zodParseWithContext.d.ts", + "sizeBytes": 524, + "sha256": "6d8328e22a9419e3c879e1d1ea6ad40fc8c724d31e1351e60e45f3b81472313a" + }, + { + "path": "src/alphalib/zodParseWithContext.ts", + "sizeBytes": 12282, + "sha256": "d5bf1ecfed63b2a910c20048fa89ca52a84e83c4848c4eb891369b6857e55459" + } + ] +} diff --git a/docs/fingerprint/transloadit-baseline.package.json b/docs/fingerprint/transloadit-baseline.package.json new file mode 100644 index 00000000..2ac9446a --- /dev/null +++ b/docs/fingerprint/transloadit-baseline.package.json @@ -0,0 +1,77 @@ +{ + "name": "transloadit", + "version": "4.1.2", + "description": "Node.js SDK for Transloadit", + "type": "module", + "keywords": ["transloadit", "encoding", "transcoding", "video", "audio", "mp3"], + "author": "Tim Koschuetzki ", + "packageManager": "yarn@4.12.0", + "engines": { + "node": ">= 20" + }, + "dependencies": { + "@aws-sdk/client-s3": "^3.891.0", + "@aws-sdk/s3-request-presigner": "^3.891.0", + "@transloadit/sev-logger": "^0.0.15", + "clipanion": "^4.0.0-rc.4", + "debug": "^4.4.3", + "dotenv": "^17.2.3", + "form-data": "^4.0.4", + "got": "14.4.9", + "into-stream": "^9.0.0", + "is-stream": "^4.0.1", + "node-watch": "^0.7.4", + "p-map": "^7.0.3", + "p-queue": "^9.0.1", + "recursive-readdir": "^2.2.3", + "tus-js-client": "^4.3.1", + "type-fest": "^4.41.0", + "zod": "3.25.76" + }, + "devDependencies": { + "@biomejs/biome": "^2.2.4", + "@types/debug": "^4.1.12", + "@types/recursive-readdir": "^2.2.4", + "@types/temp": "^0.9.4", + "@vitest/coverage-v8": "^3.2.4", + "badge-maker": "^5.0.2", + "execa": "9.6.0", + "image-size": "^2.0.2", + "nock": "^14.0.10", + "npm-run-all": "^4.1.5", + "p-retry": "^7.0.0", + "rimraf": "^6.1.2", + "temp": "^0.9.4", + "tsx": "4.20.5", + "typescript": "5.9.2", + "vitest": "^3.2.4" + }, + "repository": { + "type": "git", + "url": "git://github.com/transloadit/node-sdk.git" + }, + "directories": { + "src": "./src" + }, + "scripts": { + "check": "yarn lint:ts && yarn fix && yarn test:unit", + "fix:js": "biome check --write .", + "lint:ts": "tsc --build", + "fix:js:unsafe": "biome check --write . --unsafe", + "lint:js": "biome check .", + "lint": "npm-run-all --parallel 'lint:js'", + "fix": "npm-run-all --serial 'fix:js'", + "prepack": "rm -f tsconfig.tsbuildinfo tsconfig.build.tsbuildinfo && tsc --build tsconfig.build.json", + "test:unit": "vitest run --coverage ./test/unit", + "test:e2e": "vitest run ./test/e2e", + "test": "vitest run --coverage" + }, + "license": "MIT", + "main": "./dist/Transloadit.js", + "exports": { + ".": "./dist/Transloadit.js", + "./package.json": "./package.json" + }, + "files": ["dist", "src"], + "bin": "./dist/cli.js" +} diff --git a/docs/monorepo-architecture.md b/docs/monorepo-architecture.md new file mode 100644 index 00000000..bb47f840 --- /dev/null +++ b/docs/monorepo-architecture.md @@ -0,0 +1,110 @@ +# Monorepo architecture + +## Overview + +This repository is a Yarn 4 workspace that publishes a small set of cohesive packages: + +- `@transloadit/node` — canonical Node SDK runtime. +- `transloadit` — legacy wrapper package that stays byte-for-byte compatible with the current npm artifact. +- `@transloadit/types` — generated `.d.ts` contract (assemblies, robots, templates, responses), no runtime deps. +- `@transloadit/zod` — Zod schemas, with versioned subpaths (`/v3`, `/v4`). + +The goal is stable backwards compatibility, a single source of truth for types, and a clean path to multi‑platform SDKs. + +## Repository layout + +``` +node-sdk/ + packages/ + node/ # @transloadit/node runtime + transloadit/ # legacy wrapper package + types/ # @transloadit/types (d.ts only) + zod/ # @transloadit/zod (v3 + v4 schemas) + docs/ + scripts/ +``` + +## Source of truth: alphalib + +`packages/node/src/alphalib/types` is the synced source of truth for the public contract. We do not hand‑edit schema types in other packages; everything is derived from alphalib. + +## Packages + +### @transloadit/node +- Canonical runtime implementation. +- Used as the source for the legacy `transloadit` wrapper. + +### transloadit +- Publishes the legacy package name. +- Built from the same runtime artifacts as `@transloadit/node`. +- Compatibility is verified via tarball fingerprinting. +- Allowed drift is limited to `package.json` metadata and is reported explicitly. + +### @transloadit/types +- Pure type package; no Zod runtime dependency. +- Types are generated from Zod v3 schemas into `.d.ts` only. +- Consumers get fast type‑checking without pulling in Node or Zod. + +### @transloadit/zod +- Publishes Zod schemas for runtime validation. +- Versioned exports: + - `@transloadit/zod/v3/*` + - `@transloadit/zod/v4/*` + +## Zod sync & generation pipeline + +### v3 sync (`packages/zod/scripts/sync-v3.ts`) +- Copies alphalib types into `packages/zod/src/v3`. +- Rewrites `zod` imports to `zod/v3`. +- Writes the v3 `index.ts` barrel. + +### v4 sync (`packages/zod/scripts/sync-v4.ts`) +- Transforms `src/v3` into `src/v4`. +- Rewrites imports to `zod/v4` and applies compatibility patches: + - `z.record(...)` gets explicit string key types for v4. + - `.passthrough()` is rewritten to `.catchall(z.unknown())` to preserve output types. + - Interpolation helpers handle v4 `pipe` (used by transforms and preprocess) and avoid discriminated‑union expansion. + - Known ai‑chat schema differences are patched (JSON value output + tool‑result optionality). + +### Generated sources +- `packages/zod/src/v3` and `packages/zod/src/v4` are generated and git‑ignored. +- Build output is emitted to `packages/zod/dist`. + +## Validation gates + +1) **Type equality** + - `packages/zod/test/type-equality-v3.ts` + - `packages/zod/test/type-equality-v4.ts` + - These assert `z.infer` output matches `@transloadit/types` exactly (non‑distributive mutual assignability). + +2) **Runtime parity** + - `packages/zod/test/runtime-parity.test.ts` + - Uses fixtures from `packages/zod/test/fixtures/assembly-instructions.ts` and checks v3/v4 success parity. + +The `@transloadit/zod` `check` script runs `sync`, `tsc`, and runtime parity. + +## Node & TypeScript execution + +All internal scripts are TypeScript and rely on Node’s built-in type stripping. Tooling expects Node 22.18+ (or newer) so scripts can run directly via `node script.ts` without flags. + +## Publishing strategy + +- `@transloadit/node` is canonical. +- `transloadit` is generated from the same artifacts and fingerprinted. +- `@transloadit/types` and `@transloadit/zod` are versioned in lock‑step (changesets). + +### Parity verification + +The `transloadit` tarball is compared against a recorded baseline: + +- `scripts/fingerprint-pack.ts` creates a tarball fingerprint. +- `scripts/verify-fingerprint.ts` compares fingerprints and reports drift. +- `docs/fingerprint/transloadit-baseline.json` is the baseline fingerprint. +- `docs/fingerprint/transloadit-baseline.package.json` is used to diff `package.json`. + +Only `package.json` metadata drift is currently allowed; any other file difference fails the check. + +## Future extensions + +- Add JSON Schema export for v4 (`@transloadit/jsonschema` or subpath) once v4 tooling is stable. +- Consider promoting alphalib into its own workspace package if/when all consuming repos are v4‑ready. diff --git a/docs/todo.md b/docs/todo.md new file mode 100644 index 00000000..1092ee7c --- /dev/null +++ b/docs/todo.md @@ -0,0 +1,69 @@ +# TODO + +## Compatibility verification (byte-for-byte) +- [x] Baseline: run `npm pack` or `yarn pack` from current `transloadit` +- [x] Record tarball SHA256 +- [x] Record file list + sizes + per-file SHA256 inside tarball +- [x] Record `package.json` fields that affect install (name, version, main, types, exports, files) +- [x] After refactor: run `yarn workspace transloadit pack` +- [x] Compute same fingerprint +- [x] Assert byte-for-byte identity + +## Fingerprint script +- [x] Add `scripts/fingerprint-pack.ts` +- [x] Use `npm pack --json` to get tarball name +- [x] Hash the tarball SHA256 +- [x] Hash each file via `tar -tf` + `tar -xOf` +- [x] Output JSON artifact for comparison +- [x] Support `node scripts/fingerprint-pack.ts .` +- [x] Support `node scripts/fingerprint-pack.ts packages/transloadit` + +## Versioning and releases +- [x] Add Changesets at workspace root +- [x] Use `yarn changeset` for changes +- [x] Use `yarn changeset version` to bump versions +- [ ] Use `yarn changeset publish` to publish packages +- [x] Keep `transloadit` and `@transloadit/node` versions synchronized +- [x] Decide whether `@transloadit/types` tracks same version or diverges + +## Implementation phases +### Phase 1: monorepo scaffolding +- [x] Add root workspace config +- [x] Add Changesets config +- [x] Add base tsconfig +- [x] Move current package to `packages/node` +- [x] Ensure existing build/test scripts still pass + +### Phase 2: @transloadit/types (re-export alphalib) +- [x] Keep alphalib as synced source of truth +- [x] Re-export from `src/alphalib/types` via TS path mapping or barrel files +- [x] Build `.d.ts` only, no runtime JS + +### Phase 3: @transloadit/zod +- [x] Generate Zod schemas in `packages/zod` from alphalib types +- [x] Depend on `zod` + +### Phase 4: transloadit wrapper +- [x] Publish identical output to `@transloadit/node` +- [x] Copy dist + transform `package.json` +- [ ] Confirm publish via Changesets + +### Phase 5: compatibility validation +- [x] Record baseline fingerprint from current `transloadit` +- [x] Validate refactor output matches baseline (except package name if applicable) + +## Cross-repo validation +- [x] Trial the updated robot schemas in alphalib within `~/code/content` and `~/code/api2`, then run `yarn check` in both repos + +## Refactors +- [x] Unify pack/build orchestration into a single script used by CI + local pack +- [x] Align `@transloadit/types` export map with the generated layout (keep subpath imports stable) +- [x] Centralize Zod sync export list/extension to avoid drift +- [x] Document inline heavy-inference casts (helper wrappers trigger TS7056) +- [x] Keep legacy `transloadit` metadata synced from `@transloadit/node` with one source of truth + +## Zod v4 parity hardening +- [x] Add runtime parity fixtures by copying proven Assembly Instructions from `~/code/content` (stepParsing fixtures) +- [x] Add a sync-v4 regression fixture to verify `.passthrough()` → `.catchall(z.unknown())` and `z.record(...)` key injection +- [x] Add runtime parity coverage for `assemblyStatus` (ok/error/busy) once stable samples are selected +- [x] Add a CI guard that `@transloadit/zod` exports list stays in sync with `packages/node/src/alphalib/types` diff --git a/knip.ts b/knip.ts index 63cecad6..c51cbfd5 100644 --- a/knip.ts +++ b/knip.ts @@ -1,42 +1,100 @@ import type { KnipConfig } from 'knip' -// Note: `yarn check` runs knip with --fix --allow-remove-files. This is safe because -// lint:ts and tests run immediately after - they'll fail if knip removes something needed. +const sharedIgnore = ['dist/**', 'coverage/**', 'static-build/**', 'node_modules/**'] +const alphalibIgnore = 'src/alphalib/**' + const config: KnipConfig = { - entry: ['src/Transloadit.ts', 'src/cli.ts', 'test/**/*.{ts,tsx,js,jsx}', 'vitest.config.ts'], - project: ['{src,test}/**/*.{ts,tsx,js,jsx}'], - ignore: [ - 'dist/**', - 'coverage/**', - 'static-build/**', - 'node_modules/**', - // alphalib is a shared utility library. Exclude it so knip does not remove - // files that may only be used in other repos. - 'src/alphalib/**', - ], - ignoreDependencies: [ - // Used in src/alphalib/** which is excluded from knip - '@aws-sdk/client-s3', - '@aws-sdk/s3-request-presigner', - '@transloadit/sev-logger', - 'type-fest', - 'zod', - // Repo-specific ignores - '@types/minimist', - 'minimatch', - 'tsx', - ], - ignoreExportsUsedInFile: { - type: true, - interface: true, - }, rules: { + // Binary resolution is unreliable with Yarn PnP; avoid false positives. + binaries: 'off', exports: 'warn', types: 'warn', nsExports: 'warn', nsTypes: 'warn', duplicates: 'warn', }, + ignoreWorkspaces: ['.'], + ignoreBinaries: ['biome', 'knip', 'npm-run-all', 'tsc', 'vitest'], + ignoreExportsUsedInFile: { + type: true, + interface: true, + }, + workspaces: { + 'packages/node': { + entry: ['src/Transloadit.ts', 'src/cli.ts', 'test/**/*.{ts,tsx,js,jsx}', 'vitest.config.ts'], + project: ['{src,test}/**/*.{ts,tsx,js,jsx}'], + ignore: [...sharedIgnore, alphalibIgnore], + ignoreDependencies: [ + // Used in src/alphalib/** which is excluded from knip + '@aws-sdk/client-s3', + '@aws-sdk/s3-request-presigner', + '@transloadit/sev-logger', + 'type-fest', + 'zod', + // Repo-specific ignores + '@types/minimist', + 'minimatch', + // Tooling lives at the repo root in this monorepo. + 'vitest', + 'vitest/config', + ], + }, + 'packages/transloadit': { + entry: [ + 'src/Transloadit.ts', + 'src/cli.ts', + 'src/cli/commands/**/*.ts', + 'src/cli/types.ts', + 'src/tus.ts', + ], + project: ['src/**/*.{ts,tsx,js,jsx}'], + ignore: [...sharedIgnore, alphalibIgnore], + ignoreDependencies: [ + // Used in src/alphalib/** which is excluded from knip + '@aws-sdk/client-s3', + '@aws-sdk/s3-request-presigner', + '@transloadit/sev-logger', + 'clipanion', + 'debug', + 'dotenv', + 'form-data', + 'got', + 'into-stream', + 'is-stream', + 'node-watch', + 'p-map', + 'p-queue', + 'recursive-readdir', + 'tus-js-client', + 'typanion', + 'type-fest', + 'zod', + // Repo-specific ignores + '@types/debug', + '@types/minimist', + '@types/recursive-readdir', + 'minimatch', + ], + }, + 'packages/types': { + entry: ['src/index.ts', 'scripts/emit-types.ts', 'scripts/emit-types.test.ts'], + project: ['{src,scripts}/**/*.ts'], + ignore: ['dist/**', 'node_modules/**'], + ignoreDependencies: [ + // Zod is required for type inspection but not imported directly. + 'zod', + ], + }, + 'packages/zod': { + entry: ['src/**/*.{ts,tsx,js,jsx}', 'scripts/**/*.ts', 'test/**/*.ts'], + project: ['{src,scripts,test}/**/*.ts'], + ignore: ['dist/**', 'node_modules/**'], + ignoreDependencies: [ + // Generated code uses this after sync, but sources don't import it directly. + 'type-fest', + ], + }, + }, } export default config diff --git a/package.json b/package.json index 263c7949..43f244a8 100644 --- a/package.json +++ b/package.json @@ -1,95 +1,43 @@ { - "name": "transloadit", - "version": "4.1.2", - "description": "Node.js SDK for Transloadit", + "name": "transloadit-node-sdk", + "private": true, "type": "module", - "keywords": [ - "transloadit", - "encoding", - "transcoding", - "video", - "audio", - "mp3" - ], - "author": "Tim Koschuetzki ", "packageManager": "yarn@4.12.0", - "engines": { - "node": ">= 20" - }, - "dependencies": { - "@aws-sdk/client-s3": "^3.891.0", - "@aws-sdk/s3-request-presigner": "^3.891.0", - "@transloadit/sev-logger": "^0.0.15", - "clipanion": "^4.0.0-rc.4", - "debug": "^4.4.3", - "dotenv": "^17.2.3", - "form-data": "^4.0.4", - "got": "14.4.9", - "into-stream": "^9.0.0", - "is-stream": "^4.0.1", - "node-watch": "^0.7.4", - "p-map": "^7.0.3", - "p-queue": "^9.0.1", - "recursive-readdir": "^2.2.3", - "tus-js-client": "^4.3.1", - "typanion": "^3.14.0", - "type-fest": "^4.41.0", - "zod": "3.25.76" + "workspaces": [ + "packages/*" + ], + "scripts": { + "check": "yarn fix:deps && yarn fix:js && yarn lint:ts && yarn test:unit", + "verify": "yarn lint:deps && yarn lint:js && yarn lint:ts && yarn test:unit", + "verify:full": "yarn verify && yarn knip && yarn parity:transloadit && yarn test:types", + "lint:js": "biome check .", + "lint:ts": "yarn tsc:node && yarn tsc:types && yarn tsc:zod", + "lint": "yarn lint:js", + "fix": "yarn fix:js", + "fix:js": "biome check --write .", + "fix:js:unsafe": "biome check --write . --unsafe", + "lint:deps": "yarn run --binaries-only knip --include dependencies,unlisted,unresolved,catalog --no-progress --no-config-hints", + "fix:deps": "yarn run --binaries-only knip --include dependencies,unlisted,unresolved,catalog --no-progress --fix --no-config-hints", + "knip": "yarn run --binaries-only knip --exclude binaries --no-config-hints --no-progress", + "pack": "node scripts/pack-transloadit.ts", + "parity:transloadit": "node scripts/prepare-transloadit.ts && node scripts/fingerprint-pack.ts packages/transloadit --ignore-scripts --out /tmp/transloadit-after.json && node scripts/verify-fingerprint.ts --current /tmp/transloadit-after.json --baseline docs/fingerprint/transloadit-baseline.json --allow package.json --baseline-package-json docs/fingerprint/transloadit-baseline.package.json --current-package-json packages/transloadit/package.json", + "test:unit": "yarn workspace @transloadit/node test:unit && yarn workspace @transloadit/types test:unit && yarn workspace @transloadit/zod test:unit", + "test:types": "yarn workspace @transloadit/zod test:types", + "test:e2e": "yarn workspace @transloadit/node test:e2e", + "test": "yarn workspace @transloadit/node test", + "tsc:node": "node ./node_modules/typescript/bin/tsc -b packages/node/tsconfig.build.json", + "tsc:types": "yarn workspace @transloadit/types generate && node ./node_modules/typescript/bin/tsc -b packages/types/tsconfig.build.json", + "tsc:zod": "yarn workspace @transloadit/zod sync && node ./node_modules/typescript/bin/tsc -b packages/zod/tsconfig.build.json" }, "devDependencies": { - "@biomejs/biome": "^2.2.4", - "@types/debug": "^4.1.12", - "@types/minimist": "^1.2.5", + "@biomejs/biome": "^2.3.11", + "@changesets/cli": "^2.29.7", "@types/node": "^24.10.3", - "@types/recursive-readdir": "^2.2.4", - "@types/temp": "^0.9.4", "@vitest/coverage-v8": "^3.2.4", - "badge-maker": "^5.0.2", - "execa": "9.6.0", - "image-size": "^2.0.2", "knip": "^5.73.3", - "minimatch": "^10.1.1", - "nock": "^14.0.10", "npm-run-all": "^4.1.5", - "p-retry": "^7.0.0", - "rimraf": "^6.1.2", - "temp": "^0.9.4", "tsx": "4.21.0", "typescript": "5.9.3", "vitest": "^3.2.4" - }, - "repository": { - "type": "git", - "url": "git://github.com/transloadit/node-sdk.git" - }, - "directories": { - "src": "./src" - }, - "scripts": { - "check": "yarn exec knip --fix --allow-remove-files --no-config-hints && yarn lint:ts && yarn fix && yarn test:unit", - "fix:js": "biome check --write .", - "lint:ts": "tsc --build", - "fix:js:unsafe": "biome check --write . --unsafe", - "lint:js": "biome check .", - "lint": "npm-run-all --parallel 'lint:js'", - "fix": "npm-run-all --serial 'fix:js'", - "lint:deps": "knip --dependencies --no-progress", - "fix:deps": "knip --dependencies --no-progress --fix", - "knip": "knip --no-config-hints --no-progress", - "prepack": "rm -f tsconfig.tsbuildinfo tsconfig.build.tsbuildinfo && tsc --build tsconfig.build.json", - "test:unit": "vitest run --coverage ./test/unit", - "test:e2e": "vitest run ./test/e2e", - "test": "vitest run --coverage" - }, - "license": "MIT", - "main": "./dist/Transloadit.js", - "exports": { - ".": "./dist/Transloadit.js", - "./package.json": "./package.json" - }, - "files": [ - "dist", - "src" - ], - "bin": "./dist/cli.js" + } } diff --git a/packages/node/CHANGELOG.md b/packages/node/CHANGELOG.md new file mode 100644 index 00000000..1f1a1eb2 --- /dev/null +++ b/packages/node/CHANGELOG.md @@ -0,0 +1,13 @@ +# @transloadit/node + +## 4.1.3 + +### Patch Changes + +- Publish initial patch releases for the split packages and legacy wrapper. + +## 4.1.3 + +### Patch Changes + +- f989dc1: chore: align workspace packages for upcoming monorepo releases diff --git a/packages/node/LICENSE b/packages/node/LICENSE new file mode 100644 index 00000000..6a259963 --- /dev/null +++ b/packages/node/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014 Tim Koschuetzki + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/packages/node/README.md b/packages/node/README.md new file mode 100644 index 00000000..8a4d41be --- /dev/null +++ b/packages/node/README.md @@ -0,0 +1,701 @@ +[![Build Status](https://github.com/transloadit/node-sdk/actions/workflows/ci.yml/badge.svg)](https://github.com/transloadit/node-sdk/actions/workflows/ci.yml) +[![Coverage](https://codecov.io/gh/transloadit/node-sdk/branch/main/graph/badge.svg)](https://codecov.io/gh/transloadit/node-sdk) + +> **Stability: Experimental.** This scoped package is new and may change without notice. +> For the stable SDK, use the unscoped `transloadit` package. + + + + + + Transloadit Logo + + + +This is the official **Node.js** SDK for [Transloadit](https://transloadit.com)'s file uploading and encoding service. + +## Intro + +[Transloadit](https://transloadit.com) is a service that helps you handle file +uploads, resize, crop and watermark your images, make GIFs, transcode your +videos, extract thumbnails, generate audio waveforms, [and so much more](https://transloadit.com/demos/). In +short, [Transloadit](https://transloadit.com) is the Swiss Army Knife for your +files. + +This is a **Node.js** SDK to make it easy to talk to the +[Transloadit](https://transloadit.com) REST API. + +## Requirements + +- [Node.js](https://nodejs.org/en/) version 20 or newer +- [A Transloadit account](https://transloadit.com/signup/) ([free signup](https://transloadit.com/pricing/)) +- [Your API credentials](https://transloadit.com/c/template-credentials) (`authKey`, `authSecret`) + +## Install + +Inside your project, type: + +```bash +yarn add transloadit +``` + +or + +```bash +npm install --save transloadit +``` + +## Command Line Interface (CLI) + +This package includes a full-featured CLI for interacting with Transloadit from your terminal. + +### Quick Start + +```bash +# Set your credentials +export TRANSLOADIT_KEY="YOUR_TRANSLOADIT_KEY" +export TRANSLOADIT_SECRET="YOUR_TRANSLOADIT_SECRET" + +# See all available commands +npx transloadit --help +``` + +### Processing Media + +Create Assemblies to process files using Assembly Instructions (steps) or Templates: + +```bash +# Process a file using a steps file +npx transloadit assemblies create --steps steps.json --input image.jpg --output result.jpg + +# Process using a Template +npx transloadit assemblies create --template YOUR_TEMPLATE_ID --input image.jpg --output result.jpg + +# Process with custom fields +npx transloadit assemblies create --template YOUR_TEMPLATE_ID --field size=100 --input image.jpg --output thumb.jpg + +# Process a directory of files +npx transloadit assemblies create --template YOUR_TEMPLATE_ID --input images/ --output thumbs/ + +# Process recursively with file watching +npx transloadit assemblies create --template YOUR_TEMPLATE_ID --input images/ --output thumbs/ --recursive --watch + +# Process multiple files in a single assembly +npx transloadit assemblies create --template YOUR_TEMPLATE_ID --input file1.jpg --input file2.jpg --output results/ --single-assembly + +# Limit concurrent processing (default: 5) +npx transloadit assemblies create --template YOUR_TEMPLATE_ID --input images/ --output thumbs/ --concurrency 2 +``` + +### Managing Assemblies + +```bash +# List recent assemblies +npx transloadit assemblies list + +# List assemblies with filters +npx transloadit assemblies list --after 2024-01-01 --before 2024-12-31 + +# Get assembly status +npx transloadit assemblies get ASSEMBLY_ID + +# Cancel an assembly +npx transloadit assemblies delete ASSEMBLY_ID + +# Replay an assembly (re-run with original instructions) +npx transloadit assemblies replay ASSEMBLY_ID + +# Replay with different steps +npx transloadit assemblies replay --steps new-steps.json ASSEMBLY_ID + +# Replay using latest template version +npx transloadit assemblies replay --reparse-template ASSEMBLY_ID +``` + +### Managing Templates + +```bash +# List all templates +npx transloadit templates list + +# Get template content +npx transloadit templates get TEMPLATE_ID + +# Create a template from a JSON file +npx transloadit templates create my-template template.json + +# Modify a template +npx transloadit templates modify TEMPLATE_ID template.json + +# Rename a template +npx transloadit templates modify TEMPLATE_ID --name new-name + +# Delete a template +npx transloadit templates delete TEMPLATE_ID + +# Sync local template files with Transloadit (bidirectional) +npx transloadit templates sync templates/*.json +npx transloadit templates sync --recursive templates/ +``` + +### Billing + +```bash +# Get bill for a month +npx transloadit bills get 2024-01 + +# Get detailed bill as JSON +npx transloadit bills get 2024-01 --json +``` + +### Assembly Notifications + +```bash +# Replay a notification +npx transloadit assembly-notifications replay ASSEMBLY_ID + +# Replay to a different URL +npx transloadit assembly-notifications replay --notify-url https://example.com/hook ASSEMBLY_ID +``` + +### Signature Generation + +```bash +# Generate a signature for assembly params +echo '{"steps":{}}' | npx transloadit auth signature + +# Generate with specific algorithm +echo '{"steps":{}}' | npx transloadit auth signature --algorithm sha256 + +# Generate a signed Smart CDN URL +echo '{"workspace":"my-workspace","template":"my-template","input":"image.jpg"}' | npx transloadit auth smart-cdn +``` + +### CLI Options + +All commands support these common options: + +- `--json, -j` - Output results as JSON (useful for scripting) +- `--log-level, -l` - Set log verbosity level by name or number (default: notice) +- `--endpoint` - Custom API endpoint URL (or set `TRANSLOADIT_ENDPOINT` env var) +- `--help, -h` - Show help for a command + +The `assemblies create` command additionally supports: + +- `--single-assembly` - Pass all input files to a single assembly instead of one assembly per file + +#### Log Levels + +The CLI uses [syslog severity levels](https://en.wikipedia.org/wiki/Syslog#Severity_level). Lower = more severe, higher = more verbose: + +| Level | Value | Description | +| -------- | ----- | ------------------------------------- | +| `err` | 3 | Error conditions | +| `warn` | 4 | Warning conditions | +| `notice` | 5 | Normal but significant **(default)** | +| `info` | 6 | Informational messages | +| `debug` | 7 | Debug-level messages | +| `trace` | 8 | Most verbose/detailed | + +You can use either the level name or its numeric value: + +```bash +# Show only errors and warnings +npx transloadit assemblies list -l warn +npx transloadit assemblies list -l 4 + +# Show debug output +npx transloadit assemblies list -l debug +npx transloadit assemblies list -l 7 +``` + +## SDK Usage + +The following code will upload an image and resize it to a thumbnail: + +```javascript +import { Transloadit } from 'transloadit' + +const transloadit = new Transloadit({ + authKey: 'YOUR_TRANSLOADIT_KEY', + authSecret: 'YOUR_TRANSLOADIT_SECRET', +}) + +try { + const options = { + files: { + file1: '/PATH/TO/FILE.jpg', + }, + params: { + steps: { + // You can have many Steps. In this case we will just resize any inputs (:original) + resize: { + use: ':original', + robot: '/image/resize', + result: true, + width: 75, + height: 75, + }, + }, + // OR if you already created a template, you can use it instead of "steps": + // template_id: 'YOUR_TEMPLATE_ID', + }, + waitForCompletion: true, // Wait for the Assembly (job) to finish executing before returning + } + + const status = await transloadit.createAssembly(options) + + if (status.results.resize) { + console.log('āœ… Success - Your resized image:', status.results.resize[0].ssl_url) + } else { + console.log("āŒ The Assembly didn't produce any output. Make sure you used a valid image file") + } +} catch (err) { + console.error('āŒ Unable to process Assembly.', err) + if (err instanceof ApiError && err.assemblyId) { + console.error(`šŸ’” More info: https://transloadit.com/assemblies/${err.assemblyId}`) + } +} +``` + +You can find [details about your executed Assemblies here](https://transloadit.com/assemblies). + +## Examples + +- [Upload and resize image](https://github.com/transloadit/node-sdk/blob/main/examples/resize_an_image.ts) +- [Upload image and convert to WebP](https://github.com/transloadit/node-sdk/blob/main/examples/convert_to_webp.ts) +- [Rasterize SVG to PNG](https://github.com/transloadit/node-sdk/blob/main/examples/rasterize_svg_to_png.ts) +- [Crop a face out of an image and download the result](https://github.com/transloadit/node-sdk/blob/main/examples/face_detect_download.ts) +- [Retry example](https://github.com/transloadit/node-sdk/blob/main/examples/retry.ts) +- [Calculate total costs (GB usage)](https://github.com/transloadit/node-sdk/blob/main/examples/fetch_costs_of_all_assemblies_in_timeframe.ts) +- [Templates CRUD](https://github.com/transloadit/node-sdk/blob/main/examples/template_api.ts) +- [Template Credentials CRUD](https://github.com/transloadit/node-sdk/blob/main/examples/credentials.ts) + +For more fully working examples take a look at [`examples/`](https://github.com/transloadit/node-sdk/blob/main/examples/). + +For more example use cases and information about the available robots and their parameters, check out the [Transloadit website](https://transloadit.com/). + +## API + +These are the public methods on the `Transloadit` object and their descriptions. The methods are based on the [Transloadit API](https://transloadit.com/docs/api/). + +Table of contents: + +- [Main](#main) +- [Assemblies](#assemblies) +- [Assembly notifications](#assembly-notifications) +- [Templates](#templates) +- [Template Credentials](#template-credentials) +- [Errors](#errors) +- [Rate limiting & auto retry](#rate-limiting--auto-retry) + +### Main + +#### constructor(options) + +Returns a new instance of the client. + +The `options` object can contain the following keys: + +- `authKey` **(required)** - see [requirements](#requirements) +- `authSecret` **(required)** - see [requirements](#requirements) +- `endpoint` (default `'https://api2.transloadit.com'`) +- `maxRetries` (default `5`) - see [Rate limiting & auto retry](#rate-limiting--auto-retry) +- `gotRetry` (default `0`) - see [Rate limiting & auto retry](#rate-limiting--auto-retry) +- `timeout` (default `60000`: 1 minute) - the timeout (in milliseconds) for all requests (except `createAssembly`) +- `validateResponses` (default `false`) + +### Assemblies + +#### async createAssembly(options) + +Creates a new Assembly on Transloadit and optionally upload the specified `files` and `uploads`. + +You can provide the following keys inside the `options` object: + +- `params` **(required)** - An object containing keys defining the Assembly's behavior with the following keys: (See also [API doc](https://transloadit.com/docs/api/assemblies-post/) and [examples](#examples)) + - `steps` - Assembly instructions - See [Transloadit docs](https://transloadit.com/docs/topics/assembly-instructions/) and [demos](https://transloadit.com/demos/) for inspiration. + - `template_id` - The ID of the Template that contains your Assembly Instructions. **One of either `steps` or `template_id` is required.** If you specify both, then [any Steps will overrule the template](https://transloadit.com/docs/topics/templates/#overruling-templates-at-runtime). + - `fields` - An object of form fields to add to the request, to make use of in the Assembly instructions via [Assembly variables](https://transloadit.com/docs#assembly-variables). + - `notify_url` - Transloadit can send a Pingback to your server when the Assembly is completed. We'll send the Assembly Status in JSON encoded string inside a transloadit field in a multipart POST request to the URL supplied here. +- `files` - An object (key-value pairs) containing one or more file paths to upload and use in your Assembly. The _key_ is the _field name_ and the _value_ is the path to the file to be uploaded. The _field name_ and the file's name may be used in the ([Assembly instructions](https://transloadit.com/docs/topics/assembly-instructions/)) (`params`.`steps`) to refer to the particular file. See example below. + - `'fieldName': '/path/to/file'` + - more files... +- `uploads` - An object (key-value pairs) containing one or more files to upload and use in your Assembly. The _key_ is the _file name_ and the _value_ is the _content_ of the file to be uploaded. _Value_ can be one of many types: + - `'fieldName': (Readable | Buffer | TypedArray | ArrayBuffer | string | Iterable | AsyncIterable | Promise)`. + - more uploads... +- `waitForCompletion` - A boolean (default is `false`) to indicate whether you want to wait for the Assembly to finish with all encoding results present before the promise is fulfilled. If `waitForCompletion` is `true`, this SDK will poll for status updates and fulfill the promise when all encoding work is done. +- `timeout` - Number of milliseconds to wait before aborting (default `86400000`: 24 hours). +- `onUploadProgress` - An optional function that will be periodically called with the file upload progress, which is an with an object containing: + - `uploadedBytes` - Number of bytes uploaded so far. + - `totalBytes` - Total number of bytes to upload or `undefined` if unknown (Streams). +- `onAssemblyProgress` - Once the Assembly has started processing this will be periodically called with the _Assembly Execution Status_ (result of `getAssembly`) **only if `waitForCompletion` is `true`**. +- `chunkSize` - (for uploads) a number indicating the maximum size of a tus `PATCH` request body in bytes. Default to `Infinity` for file uploads and 50MB for streams of unknown length. See [tus-js-client](https://github.com/tus/tus-js-client/blob/master/docs/api.md#chunksize). +- `uploadConcurrency` - Maximum number of concurrent tus file uploads to occur at any given time (default 10.) + +**NOTE**: Make sure the key in `files` and `uploads` is not one of `signature`, `params` or `max_size`. + +Example code showing all options: + +```js +await transloadit.createAssembly({ + files: { + file1: '/path/to/file.jpg' + // ... + }, + uploads: { + 'file2.bin': Buffer.from([0, 0, 7]), // A buffer + 'file3.txt': 'file contents', // A string + 'file4.jpg': process.stdin // A stream + // ... + }, + params: { + steps: { ... }, + template_id: 'MY_TEMPLATE_ID', + fields: { + field1: 'Field value', + // ... + }, + notify_url: 'https://example.com/notify-url', + }, + waitForCompletion: true, + timeout: 60000, + onUploadProgress, + onAssemblyProgress, +}) +``` + +Example `onUploadProgress` and `onAssemblyProgress` handlers: + +```javascript +function onUploadProgress({ uploadedBytes, totalBytes }) { + // NOTE: totalBytes may be undefined + console.log(`ā™»ļø Upload progress polled: ${uploadedBytes} of ${totalBytes} bytes uploaded.`) +} +function onAssemblyProgress(assembly) { + console.log( + `ā™»ļø Assembly progress polled: ${assembly.error ? assembly.error : assembly.ok} ${ + assembly.assembly_id + } ... ` + ) +} +``` + +**Tip:** `createAssembly` returns a `Promise` with an extra property `assemblyId`. This can be used to retrieve the Assembly ID before the Assembly has even been created. Useful for debugging by logging this ID when the request starts, for example: + +```js +const promise = transloadit.createAssembly(options) +console.log('Creating', promise.assemblyId) +const status = await promise +``` + +See also: + +- [API documentation](https://transloadit.com/docs/api/assemblies-post/) +- Error codes and retry logic below + +#### async listAssemblies(params) + +Retrieve Assemblies according to the given `params`. + +Valid params can be `page`, `pagesize`, `type`, `fromdate`, `todate` and `keywords`. Please consult the [API documentation](https://transloadit.com/docs/api/assemblies-get/) for details. + +The method returns an object containing these properties: + +- `items`: An `Array` of up to `pagesize` Assemblies +- `count`: Total number of Assemblies + +#### streamAssemblies(params) + +Creates an `objectMode` `Readable` stream that automates handling of `listAssemblies` pagination. It accepts the same `params` as `listAssemblies`. + +This can be used to iterate through Assemblies: + +```javascript +const assemblyStream = transloadit.streamAssemblies({ fromdate: '2016-08-19 01:15:00 UTC' }) + +assemblyStream.on('readable', function () { + const assembly = assemblyStream.read() + if (assembly == null) console.log('end of stream') + + console.log(assembly.id) +}) +``` + +Results can also be piped. Here's an example using +[through2](https://github.com/rvagg/through2): + +```javascript +const assemblyStream = transloadit.streamAssemblies({ fromdate: '2016-08-19 01:15:00 UTC' }) + +assemblyStream + .pipe( + through.obj(function (chunk, enc, callback) { + this.push(chunk.id + '\n') + callback() + }) + ) + .pipe(fs.createWriteStream('assemblies.txt')) +``` + +#### async getAssembly(assemblyId) + +Retrieves the JSON status of the Assembly identified by the given `assemblyId`. See [API documentation](https://transloadit.com/docs/api/assemblies-assembly-id-get/). + +#### async cancelAssembly(assemblyId) + +Removes the Assembly identified by the given `assemblyId` from the memory of the Transloadit machines, ultimately cancelling it. This does not delete the Assembly from the database - you can still access it on `https://transloadit.com/assemblies/{assembly_id}` in your Transloadit account. This also does not delete any files associated with the Assembly from the Transloadit servers. See [API documentation](https://transloadit.com/docs/api/assemblies-assembly-id-delete/). + +#### async replayAssembly(assemblyId, params) + +Replays the Assembly identified by the given `assemblyId` (required argument). Optionally you can also provide a `notify_url` key inside `params` if you want to change the notification target. See [API documentation](https://transloadit.com/docs/api/assemblies-assembly-id-replay-post/) for more info about `params`. + +The response from the `replayAssembly` is minimal and does not contain much information about the replayed assembly. Please call `getAssembly` or `awaitAssemblyCompletion` after replay to get more information: + +```js +const replayAssemblyResponse = await transloadit.replayAssembly(failedAssemblyId) + +const assembly = await transloadit.getAssembly(replayAssemblyResponse.assembly_id) +// Or +const completedAssembly = await transloadit.awaitAssemblyCompletion( + replayAssemblyResponse.assembly_id +) +``` + +#### async awaitAssemblyCompletion(assemblyId, opts) + +This function will continously poll the specified Assembly `assemblyId` and resolve when it is done uploading and executing (until `result.ok` is no longer `ASSEMBLY_UPLOADING`, `ASSEMBLY_EXECUTING` or `ASSEMBLY_REPLAYING`). It resolves with the same value as `getAssembly`. + +`opts` is an object with the keys: + +- `onAssemblyProgress` - A progress function called on each poll. See `createAssembly` +- `timeout` - How many milliseconds until polling times out (default: no timeout) +- `interval` - Poll interval in milliseconds (default `1000`) +- `signal` - An `AbortSignal` to cancel polling. When aborted, the promise rejects with an `AbortError`. +- `onPoll` - A callback invoked at the start of each poll iteration. Return `false` to stop polling early and resolve with the last known status. Useful for implementing custom cancellation logic (e.g., superseding assemblies in watch mode). + +#### getLastUsedAssemblyUrl() + +Returns the internal url that was used for the last call to `createAssembly`. This is meant to be used for debugging purposes. + +### Assembly notifications + +#### async replayAssemblyNotification(assemblyId, params) + +Replays the notification for the Assembly identified by the given `assemblyId` (required argument). Optionally you can also provide a `notify_url` key inside `params` if you want to change the notification target. See [API documentation](https://transloadit.com/docs/api/assembly-notifications-assembly-id-replay-post/) for more info about `params`. + +### Templates + +Templates are Steps that can be reused. [See example template code](examples/template_api.ts). + +#### async createTemplate(params) + +Creates a template the provided params. The required `params` keys are: + +- `name` - The template name +- `template` - The template JSON object containing its `steps` + +See also [API documentation](https://transloadit.com/docs/api/templates-post/). + +```js +const template = { + steps: { + encode: { + use: ':original', + robot: '/video/encode', + preset: 'ipad-high', + }, + thumbnail: { + use: 'encode', + robot: '/video/thumbnails', + }, + }, +} + +const result = await transloadit.createTemplate({ name: 'my-template-name', template }) +console.log('āœ… Template created with template_id', result.id) +``` + +#### async editTemplate(templateId, params) + +Updates the template represented by the given `templateId` with the new value. The `params` works just like the one from the `createTemplate` call. See [API documentation](https://transloadit.com/docs/api/templates-template-id-put/). + +#### async getTemplate(templateId) + +Retrieves the name and the template JSON for the template represented by the given `templateId`. See [API documentation](https://transloadit.com/docs/api/templates-template-id-get/). + +#### async deleteTemplate(templateId) + +Deletes the template represented by the given `templateId`. See [API documentation](https://transloadit.com/docs/api/templates-template-id-delete/). + +#### async listTemplates(params) + +Retrieve all your templates. See [API documentation](https://transloadit.com/docs/api/templates-template-id-get/) for more info about `params`. + +The method returns an object containing these properties: + +- `items`: An `Array` of up to `pagesize` templates +- `count`: Total number of templates + +#### streamTemplates(params) + +Creates an `objectMode` `Readable` stream that automates handling of `listTemplates` pagination. Similar to `streamAssemblies`. + +### Template Credentials + +Template Credentials allow you to store third-party credentials (e.g., AWS S3, Google Cloud Storage, FTP) securely on Transloadit for use in your Assembly Instructions. + +#### async createTemplateCredential(params) + +Creates a new Template Credential. The `params` object should contain the credential configuration. See [API documentation](https://transloadit.com/docs/api/template-credentials-post/). + +#### async editTemplateCredential(credentialId, params) + +Updates an existing Template Credential identified by `credentialId`. See [API documentation](https://transloadit.com/docs/api/template-credentials-credential-id-put/). + +#### async deleteTemplateCredential(credentialId) + +Deletes the Template Credential identified by `credentialId`. See [API documentation](https://transloadit.com/docs/api/template-credentials-credential-id-delete/). + +#### async getTemplateCredential(credentialId) + +Retrieves the Template Credential identified by `credentialId`. See [API documentation](https://transloadit.com/docs/api/template-credentials-credential-id-get/). + +#### async listTemplateCredentials(params) + +Lists all Template Credentials. See [API documentation](https://transloadit.com/docs/api/template-credentials-get/). + +#### streamTemplateCredentials(params) + +Creates an `objectMode` `Readable` stream that automates handling of `listTemplateCredentials` pagination. Similar to `streamAssemblies`. + +### Other + +#### setDefaultTimeout(timeout) + +Same as `constructor` `timeout` option: Set the default timeout (in milliseconds) for all requests (except `createAssembly`) + +#### async getBill(date) + +Retrieves the billing data for a given `date` string with format `YYYY-MM`. See [API documentation](https://transloadit.com/docs/api/bill-date-get/). + +#### calcSignature(params) + +Calculates a signature for the given `params` JSON object. If the `params` object does not include an `authKey` or `expires` keys (and their values) in the `auth` sub-key, then they are set automatically. + +This function returns an object with the key `signature` (containing the calculated signature string) and a key `params`, which contains the stringified version of the passed `params` object (including the set expires and authKey keys). + +See [Signature Generation](#signature-generation) in the CLI section for command-line usage. + +#### getSignedSmartCDNUrl(params) + +Constructs a signed Smart CDN URL, as defined in the [API documentation](https://transloadit.com/docs/topics/signature-authentication/#smart-cdn). `params` must be an object with the following properties: + +- `workspace` - Workspace slug (required) +- `template` - Template slug or template ID (required) +- `input` - Input value that is provided as `${fields.input}` in the template (required) +- `urlParams` - Object with additional parameters for the URL query string (optional) +- `expiresAt` - Expiration timestamp of the signature in milliseconds since UNIX epoch. Defaults to 1 hour from now. (optional) + +Example: + +```js +const client = new Transloadit({ authKey: 'foo_key', authSecret: 'foo_secret' }) +const url = client.getSignedSmartCDNUrl({ + workspace: 'foo_workspace', + template: 'foo_template', + input: 'foo_input', + urlParams: { + foo: 'bar', + }, +}) + +// url is: +// https://foo_workspace.tlcdn.com/foo_template/foo_input?auth_key=foo_key&exp=1714525200000&foo=bar&sig=sha256:9548915ec70a5f0d05de9497289e792201ceec19a526fe315f4f4fd2e7e377ac +``` + +### Errors + +Any errors originating from Node.js will be passed on and we use [GOT](https://github.com/sindresorhus/got) v11 for HTTP requests. [Errors from `got`](https://github.com/sindresorhus/got/tree/v11.8.6?tab=readme-ov-file#errors) will also be passed on, _except_ the `got.HTTPError` which will be replaced with a `transloadit.ApiError`, which will have its `cause` property set to the instance of the original `got.HTTPError`. `transloadit.ApiError` has these properties: + +- `code` (`string`) - [The Transloadit API error code](https://transloadit.com/docs/api/response-codes/#error-codes). +- `rawMessage` (`string`) - A textual representation of the Transloadit API error. +- `reason` (`string`) - Additional information about the Transloadit API error. +- `assemblyId`: (`string`) - If the request is related to an assembly, this will be the ID of the assembly. +- `assemblySslUrl` (`string`) - If the request is related to an assembly, this will be the SSL URL to the assembly . + +To identify errors you can either check its props or use `instanceof`, e.g.: + +```js +try { + await transloadit.createAssembly(options) +} catch (err) { + if (err instanceof got.TimeoutError) { + return console.error('The request timed out', err) + } + if (err.code === 'ENOENT') { + return console.error('Cannot open file', err) + } + if (err instanceof ApiError && err.code === 'ASSEMBLY_INVALID_STEPS') { + return console.error('Invalid Assembly Steps', err) + } +} +``` + +**Note:** Assemblies that have an error status (`assembly.error`) will only result in an error being thrown from `createAssembly` and `replayAssembly`. For other Assembly methods, no errors will be thrown, but any error can be found in the response's `error` property (also `ApiError.code`). + +- [More information on Transloadit errors (`ApiError.code`)](https://transloadit.com/docs/api/response-codes/#error-codes) +- [More information on request errors](https://github.com/sindresorhus/got#errors) + +### Rate limiting & auto retry + +There are three kinds of retries: + +#### Retry on rate limiting (`maxRetries`, default `5`) + +All functions of the client automatically obey all rate limiting imposed by Transloadit (e.g. `RATE_LIMIT_REACHED`), so there is no need to write your own wrapper scripts to handle rate limits. The SDK will by default retry requests **5 times** with auto back-off (See `maxRetries` constructor option). + +#### GOT HTTP retries (`gotRetry`, default `{ limit: 0 }`) + +Because we use [got](https://github.com/sindresorhus/got) under the hood, you can pass a `gotRetry` constructor option which is passed on to `got`. This offers great flexibility for handling retries on network errors and HTTP status codes with auto back-off. See [`got` `retry` object documentation](https://github.com/sindresorhus/got/blob/main/documentation/7-retry.md). + +**Note that the above `maxRetries` option does not affect the `gotRetry` logic.** + +#### Validate API responses (`validateResponses`, default `false`) + +As we have ported the JavaScript SDK to TypeScript in v4, we are now also validating API responses using `zod` schemas. Having schema validation enabled (`true`), guarantees that the data returned by the SDK adheres to the TypeScript types of this SDK. However we are still working on improving the schemas and they are not yet 100% complete. This means that if you hit a bug in the schemas, a `zod` schema validation error will be thrown. If you encounter such an error, please report it and we will fix it as soon as possible. If you set this option to `false`, schema validation will be disabled, and you won't get any such errors, however the TypeScript types will not protect you should such a bug be encountered. + +#### Custom retry logic + +If you want to retry on other errors, please see the [retry example code](examples/retry.ts). + +- https://transloadit.com/docs/api/rate-limiting/ +- https://transloadit.com/blog/2012/04/introducing-rate-limiting/ + +## Debugging + +This project uses [debug](https://github.com/visionmedia/debug) so you can run node with the `DEBUG=transloadit` evironment variable to enable verbose logging. Example: + +```bash +DEBUG=transloadit* npx tsx examples/template_api.ts +``` + +## Maintainers + +- [Mikael Finstad](https://github.com/mifi) + +### Changelog + +See [Releases](https://github.com/transloadit/node-sdk/releases) + +## Attribution + +Thanks to [Ian Hansen](https://github.com/supershabam) for donating the `transloadit` npm name. You can still access his code under [`v0.0.0`](https://www.npmjs.com/package/transloadit/v/0.0.0). + +## License + +[MIT](LICENSE) Ā© [Transloadit](https://transloadit.com) + +## Development + +See [CONTRIBUTING](./CONTRIBUTING.md). diff --git a/examples/convert_to_webp.ts b/packages/node/examples/convert_to_webp.ts similarity index 100% rename from examples/convert_to_webp.ts rename to packages/node/examples/convert_to_webp.ts diff --git a/examples/credentials.ts b/packages/node/examples/credentials.ts similarity index 100% rename from examples/credentials.ts rename to packages/node/examples/credentials.ts diff --git a/examples/face_detect_download.ts b/packages/node/examples/face_detect_download.ts similarity index 100% rename from examples/face_detect_download.ts rename to packages/node/examples/face_detect_download.ts diff --git a/examples/fetch_costs_of_all_assemblies_in_timeframe.ts b/packages/node/examples/fetch_costs_of_all_assemblies_in_timeframe.ts similarity index 100% rename from examples/fetch_costs_of_all_assemblies_in_timeframe.ts rename to packages/node/examples/fetch_costs_of_all_assemblies_in_timeframe.ts diff --git a/examples/fixtures/berkley.jpg b/packages/node/examples/fixtures/berkley.jpg similarity index 100% rename from examples/fixtures/berkley.jpg rename to packages/node/examples/fixtures/berkley.jpg diff --git a/examples/fixtures/circle.svg b/packages/node/examples/fixtures/circle.svg similarity index 100% rename from examples/fixtures/circle.svg rename to packages/node/examples/fixtures/circle.svg diff --git a/examples/rasterize_svg_to_png.ts b/packages/node/examples/rasterize_svg_to_png.ts similarity index 100% rename from examples/rasterize_svg_to_png.ts rename to packages/node/examples/rasterize_svg_to_png.ts diff --git a/examples/resize_an_image.ts b/packages/node/examples/resize_an_image.ts similarity index 100% rename from examples/resize_an_image.ts rename to packages/node/examples/resize_an_image.ts diff --git a/examples/retry.ts b/packages/node/examples/retry.ts similarity index 100% rename from examples/retry.ts rename to packages/node/examples/retry.ts diff --git a/examples/template_api.ts b/packages/node/examples/template_api.ts similarity index 100% rename from examples/template_api.ts rename to packages/node/examples/template_api.ts diff --git a/packages/node/package.json b/packages/node/package.json new file mode 100644 index 00000000..aa82979a --- /dev/null +++ b/packages/node/package.json @@ -0,0 +1,92 @@ +{ + "name": "@transloadit/node", + "version": "4.1.3", + "description": "Node.js SDK for Transloadit", + "type": "module", + "keywords": [ + "transloadit", + "encoding", + "transcoding", + "video", + "audio", + "mp3" + ], + "author": "Tim Koschuetzki ", + "packageManager": "yarn@4.12.0", + "engines": { + "node": ">= 20" + }, + "dependencies": { + "@aws-sdk/client-s3": "^3.891.0", + "@aws-sdk/s3-request-presigner": "^3.891.0", + "@transloadit/sev-logger": "^0.0.15", + "clipanion": "^4.0.0-rc.4", + "debug": "^4.4.3", + "dotenv": "^17.2.3", + "form-data": "^4.0.4", + "got": "14.4.9", + "into-stream": "^9.0.0", + "is-stream": "^4.0.1", + "node-watch": "^0.7.4", + "p-map": "^7.0.3", + "p-queue": "^9.0.1", + "recursive-readdir": "^2.2.3", + "tus-js-client": "^4.3.1", + "typanion": "^3.14.0", + "type-fest": "^4.41.0", + "zod": "3.25.76" + }, + "publishConfig": { + "tag": "experimental" + }, + "devDependencies": { + "@types/debug": "^4.1.12", + "@types/minimist": "^1.2.5", + "@types/node": "^24.10.3", + "@types/recursive-readdir": "^2.2.4", + "@types/temp": "^0.9.4", + "badge-maker": "^5.0.2", + "execa": "9.6.0", + "image-size": "^2.0.2", + "minimatch": "^10.1.1", + "nock": "^14.0.10", + "p-retry": "^7.0.0", + "rimraf": "^6.1.2", + "temp": "^0.9.4" + }, + "repository": { + "type": "git", + "url": "git://github.com/transloadit/node-sdk.git" + }, + "directories": { + "src": "./src" + }, + "scripts": { + "check": "yarn lint:ts && yarn fix && yarn test:unit", + "fix:js": "biome check --write .", + "lint:ts": "yarn --cwd ../.. tsc:node", + "fix:js:unsafe": "biome check --write . --unsafe", + "lint:js": "biome check .", + "lint": "npm-run-all --parallel 'lint:js'", + "fix": "npm-run-all --serial 'fix:js'", + "lint:deps": "knip --dependencies --no-progress", + "fix:deps": "knip --dependencies --no-progress --fix", + "prepack": "rm -f tsconfig.tsbuildinfo tsconfig.build.tsbuildinfo && yarn --cwd ../.. tsc:node", + "test:unit": "../../node_modules/.bin/vitest run --coverage ./test/unit", + "test:e2e": "../../node_modules/.bin/vitest run ./test/e2e", + "test": "../../node_modules/.bin/vitest run --coverage" + }, + "license": "MIT", + "main": "./dist/Transloadit.js", + "exports": { + ".": "./dist/Transloadit.js", + "./package.json": "./package.json" + }, + "files": [ + "dist", + "src" + ], + "bin": { + "transloadit": "./dist/cli.js" + } +} diff --git a/src/ApiError.ts b/packages/node/src/ApiError.ts similarity index 100% rename from src/ApiError.ts rename to packages/node/src/ApiError.ts diff --git a/src/InconsistentResponseError.ts b/packages/node/src/InconsistentResponseError.ts similarity index 100% rename from src/InconsistentResponseError.ts rename to packages/node/src/InconsistentResponseError.ts diff --git a/src/PaginationStream.ts b/packages/node/src/PaginationStream.ts similarity index 100% rename from src/PaginationStream.ts rename to packages/node/src/PaginationStream.ts diff --git a/src/PollingTimeoutError.ts b/packages/node/src/PollingTimeoutError.ts similarity index 100% rename from src/PollingTimeoutError.ts rename to packages/node/src/PollingTimeoutError.ts diff --git a/src/Transloadit.ts b/packages/node/src/Transloadit.ts similarity index 100% rename from src/Transloadit.ts rename to packages/node/src/Transloadit.ts diff --git a/src/alphalib/lib/nativeGlobby.ts b/packages/node/src/alphalib/lib/nativeGlobby.ts similarity index 100% rename from src/alphalib/lib/nativeGlobby.ts rename to packages/node/src/alphalib/lib/nativeGlobby.ts diff --git a/src/alphalib/mcache.ts b/packages/node/src/alphalib/mcache.ts similarity index 100% rename from src/alphalib/mcache.ts rename to packages/node/src/alphalib/mcache.ts diff --git a/src/alphalib/tryCatch.ts b/packages/node/src/alphalib/tryCatch.ts similarity index 100% rename from src/alphalib/tryCatch.ts rename to packages/node/src/alphalib/tryCatch.ts diff --git a/src/alphalib/types/assembliesGet.ts b/packages/node/src/alphalib/types/assembliesGet.ts similarity index 100% rename from src/alphalib/types/assembliesGet.ts rename to packages/node/src/alphalib/types/assembliesGet.ts diff --git a/src/alphalib/types/assemblyReplay.ts b/packages/node/src/alphalib/types/assemblyReplay.ts similarity index 100% rename from src/alphalib/types/assemblyReplay.ts rename to packages/node/src/alphalib/types/assemblyReplay.ts diff --git a/src/alphalib/types/assemblyReplayNotification.ts b/packages/node/src/alphalib/types/assemblyReplayNotification.ts similarity index 100% rename from src/alphalib/types/assemblyReplayNotification.ts rename to packages/node/src/alphalib/types/assemblyReplayNotification.ts diff --git a/src/alphalib/types/assemblyStatus.ts b/packages/node/src/alphalib/types/assemblyStatus.ts similarity index 100% rename from src/alphalib/types/assemblyStatus.ts rename to packages/node/src/alphalib/types/assemblyStatus.ts diff --git a/src/alphalib/types/bill.ts b/packages/node/src/alphalib/types/bill.ts similarity index 100% rename from src/alphalib/types/bill.ts rename to packages/node/src/alphalib/types/bill.ts diff --git a/src/alphalib/types/robots/_index.ts b/packages/node/src/alphalib/types/robots/_index.ts similarity index 100% rename from src/alphalib/types/robots/_index.ts rename to packages/node/src/alphalib/types/robots/_index.ts diff --git a/src/alphalib/types/robots/_instructions-primitives.ts b/packages/node/src/alphalib/types/robots/_instructions-primitives.ts similarity index 100% rename from src/alphalib/types/robots/_instructions-primitives.ts rename to packages/node/src/alphalib/types/robots/_instructions-primitives.ts diff --git a/src/alphalib/types/robots/ai-chat.ts b/packages/node/src/alphalib/types/robots/ai-chat.ts similarity index 100% rename from src/alphalib/types/robots/ai-chat.ts rename to packages/node/src/alphalib/types/robots/ai-chat.ts diff --git a/src/alphalib/types/robots/assembly-savejson.ts b/packages/node/src/alphalib/types/robots/assembly-savejson.ts similarity index 100% rename from src/alphalib/types/robots/assembly-savejson.ts rename to packages/node/src/alphalib/types/robots/assembly-savejson.ts diff --git a/src/alphalib/types/robots/audio-artwork.ts b/packages/node/src/alphalib/types/robots/audio-artwork.ts similarity index 100% rename from src/alphalib/types/robots/audio-artwork.ts rename to packages/node/src/alphalib/types/robots/audio-artwork.ts diff --git a/src/alphalib/types/robots/audio-concat.ts b/packages/node/src/alphalib/types/robots/audio-concat.ts similarity index 100% rename from src/alphalib/types/robots/audio-concat.ts rename to packages/node/src/alphalib/types/robots/audio-concat.ts diff --git a/src/alphalib/types/robots/audio-encode.ts b/packages/node/src/alphalib/types/robots/audio-encode.ts similarity index 100% rename from src/alphalib/types/robots/audio-encode.ts rename to packages/node/src/alphalib/types/robots/audio-encode.ts diff --git a/src/alphalib/types/robots/audio-loop.ts b/packages/node/src/alphalib/types/robots/audio-loop.ts similarity index 100% rename from src/alphalib/types/robots/audio-loop.ts rename to packages/node/src/alphalib/types/robots/audio-loop.ts diff --git a/src/alphalib/types/robots/audio-merge.ts b/packages/node/src/alphalib/types/robots/audio-merge.ts similarity index 100% rename from src/alphalib/types/robots/audio-merge.ts rename to packages/node/src/alphalib/types/robots/audio-merge.ts diff --git a/src/alphalib/types/robots/audio-waveform.ts b/packages/node/src/alphalib/types/robots/audio-waveform.ts similarity index 100% rename from src/alphalib/types/robots/audio-waveform.ts rename to packages/node/src/alphalib/types/robots/audio-waveform.ts diff --git a/src/alphalib/types/robots/azure-import.ts b/packages/node/src/alphalib/types/robots/azure-import.ts similarity index 100% rename from src/alphalib/types/robots/azure-import.ts rename to packages/node/src/alphalib/types/robots/azure-import.ts diff --git a/src/alphalib/types/robots/azure-store.ts b/packages/node/src/alphalib/types/robots/azure-store.ts similarity index 100% rename from src/alphalib/types/robots/azure-store.ts rename to packages/node/src/alphalib/types/robots/azure-store.ts diff --git a/src/alphalib/types/robots/backblaze-import.ts b/packages/node/src/alphalib/types/robots/backblaze-import.ts similarity index 100% rename from src/alphalib/types/robots/backblaze-import.ts rename to packages/node/src/alphalib/types/robots/backblaze-import.ts diff --git a/src/alphalib/types/robots/backblaze-store.ts b/packages/node/src/alphalib/types/robots/backblaze-store.ts similarity index 100% rename from src/alphalib/types/robots/backblaze-store.ts rename to packages/node/src/alphalib/types/robots/backblaze-store.ts diff --git a/src/alphalib/types/robots/cloudfiles-import.ts b/packages/node/src/alphalib/types/robots/cloudfiles-import.ts similarity index 100% rename from src/alphalib/types/robots/cloudfiles-import.ts rename to packages/node/src/alphalib/types/robots/cloudfiles-import.ts diff --git a/src/alphalib/types/robots/cloudfiles-store.ts b/packages/node/src/alphalib/types/robots/cloudfiles-store.ts similarity index 100% rename from src/alphalib/types/robots/cloudfiles-store.ts rename to packages/node/src/alphalib/types/robots/cloudfiles-store.ts diff --git a/src/alphalib/types/robots/cloudflare-import.ts b/packages/node/src/alphalib/types/robots/cloudflare-import.ts similarity index 100% rename from src/alphalib/types/robots/cloudflare-import.ts rename to packages/node/src/alphalib/types/robots/cloudflare-import.ts diff --git a/src/alphalib/types/robots/cloudflare-store.ts b/packages/node/src/alphalib/types/robots/cloudflare-store.ts similarity index 100% rename from src/alphalib/types/robots/cloudflare-store.ts rename to packages/node/src/alphalib/types/robots/cloudflare-store.ts diff --git a/src/alphalib/types/robots/digitalocean-import.ts b/packages/node/src/alphalib/types/robots/digitalocean-import.ts similarity index 100% rename from src/alphalib/types/robots/digitalocean-import.ts rename to packages/node/src/alphalib/types/robots/digitalocean-import.ts diff --git a/src/alphalib/types/robots/digitalocean-store.ts b/packages/node/src/alphalib/types/robots/digitalocean-store.ts similarity index 100% rename from src/alphalib/types/robots/digitalocean-store.ts rename to packages/node/src/alphalib/types/robots/digitalocean-store.ts diff --git a/src/alphalib/types/robots/document-autorotate.ts b/packages/node/src/alphalib/types/robots/document-autorotate.ts similarity index 100% rename from src/alphalib/types/robots/document-autorotate.ts rename to packages/node/src/alphalib/types/robots/document-autorotate.ts diff --git a/src/alphalib/types/robots/document-convert.ts b/packages/node/src/alphalib/types/robots/document-convert.ts similarity index 100% rename from src/alphalib/types/robots/document-convert.ts rename to packages/node/src/alphalib/types/robots/document-convert.ts diff --git a/src/alphalib/types/robots/document-merge.ts b/packages/node/src/alphalib/types/robots/document-merge.ts similarity index 100% rename from src/alphalib/types/robots/document-merge.ts rename to packages/node/src/alphalib/types/robots/document-merge.ts diff --git a/src/alphalib/types/robots/document-ocr.ts b/packages/node/src/alphalib/types/robots/document-ocr.ts similarity index 100% rename from src/alphalib/types/robots/document-ocr.ts rename to packages/node/src/alphalib/types/robots/document-ocr.ts diff --git a/src/alphalib/types/robots/document-split.ts b/packages/node/src/alphalib/types/robots/document-split.ts similarity index 100% rename from src/alphalib/types/robots/document-split.ts rename to packages/node/src/alphalib/types/robots/document-split.ts diff --git a/src/alphalib/types/robots/document-thumbs.ts b/packages/node/src/alphalib/types/robots/document-thumbs.ts similarity index 100% rename from src/alphalib/types/robots/document-thumbs.ts rename to packages/node/src/alphalib/types/robots/document-thumbs.ts diff --git a/src/alphalib/types/robots/dropbox-import.ts b/packages/node/src/alphalib/types/robots/dropbox-import.ts similarity index 100% rename from src/alphalib/types/robots/dropbox-import.ts rename to packages/node/src/alphalib/types/robots/dropbox-import.ts diff --git a/src/alphalib/types/robots/dropbox-store.ts b/packages/node/src/alphalib/types/robots/dropbox-store.ts similarity index 100% rename from src/alphalib/types/robots/dropbox-store.ts rename to packages/node/src/alphalib/types/robots/dropbox-store.ts diff --git a/src/alphalib/types/robots/edgly-deliver.ts b/packages/node/src/alphalib/types/robots/edgly-deliver.ts similarity index 100% rename from src/alphalib/types/robots/edgly-deliver.ts rename to packages/node/src/alphalib/types/robots/edgly-deliver.ts diff --git a/src/alphalib/types/robots/file-compress.ts b/packages/node/src/alphalib/types/robots/file-compress.ts similarity index 100% rename from src/alphalib/types/robots/file-compress.ts rename to packages/node/src/alphalib/types/robots/file-compress.ts diff --git a/src/alphalib/types/robots/file-decompress.ts b/packages/node/src/alphalib/types/robots/file-decompress.ts similarity index 100% rename from src/alphalib/types/robots/file-decompress.ts rename to packages/node/src/alphalib/types/robots/file-decompress.ts diff --git a/src/alphalib/types/robots/file-filter.ts b/packages/node/src/alphalib/types/robots/file-filter.ts similarity index 100% rename from src/alphalib/types/robots/file-filter.ts rename to packages/node/src/alphalib/types/robots/file-filter.ts diff --git a/src/alphalib/types/robots/file-hash.ts b/packages/node/src/alphalib/types/robots/file-hash.ts similarity index 100% rename from src/alphalib/types/robots/file-hash.ts rename to packages/node/src/alphalib/types/robots/file-hash.ts diff --git a/src/alphalib/types/robots/file-preview.ts b/packages/node/src/alphalib/types/robots/file-preview.ts similarity index 100% rename from src/alphalib/types/robots/file-preview.ts rename to packages/node/src/alphalib/types/robots/file-preview.ts diff --git a/src/alphalib/types/robots/file-read.ts b/packages/node/src/alphalib/types/robots/file-read.ts similarity index 100% rename from src/alphalib/types/robots/file-read.ts rename to packages/node/src/alphalib/types/robots/file-read.ts diff --git a/src/alphalib/types/robots/file-serve.ts b/packages/node/src/alphalib/types/robots/file-serve.ts similarity index 100% rename from src/alphalib/types/robots/file-serve.ts rename to packages/node/src/alphalib/types/robots/file-serve.ts diff --git a/src/alphalib/types/robots/file-verify.ts b/packages/node/src/alphalib/types/robots/file-verify.ts similarity index 100% rename from src/alphalib/types/robots/file-verify.ts rename to packages/node/src/alphalib/types/robots/file-verify.ts diff --git a/src/alphalib/types/robots/file-virusscan.ts b/packages/node/src/alphalib/types/robots/file-virusscan.ts similarity index 100% rename from src/alphalib/types/robots/file-virusscan.ts rename to packages/node/src/alphalib/types/robots/file-virusscan.ts diff --git a/src/alphalib/types/robots/file-watermark.ts b/packages/node/src/alphalib/types/robots/file-watermark.ts similarity index 100% rename from src/alphalib/types/robots/file-watermark.ts rename to packages/node/src/alphalib/types/robots/file-watermark.ts diff --git a/src/alphalib/types/robots/ftp-import.ts b/packages/node/src/alphalib/types/robots/ftp-import.ts similarity index 100% rename from src/alphalib/types/robots/ftp-import.ts rename to packages/node/src/alphalib/types/robots/ftp-import.ts diff --git a/src/alphalib/types/robots/ftp-store.ts b/packages/node/src/alphalib/types/robots/ftp-store.ts similarity index 100% rename from src/alphalib/types/robots/ftp-store.ts rename to packages/node/src/alphalib/types/robots/ftp-store.ts diff --git a/src/alphalib/types/robots/google-import.ts b/packages/node/src/alphalib/types/robots/google-import.ts similarity index 100% rename from src/alphalib/types/robots/google-import.ts rename to packages/node/src/alphalib/types/robots/google-import.ts diff --git a/src/alphalib/types/robots/google-store.ts b/packages/node/src/alphalib/types/robots/google-store.ts similarity index 100% rename from src/alphalib/types/robots/google-store.ts rename to packages/node/src/alphalib/types/robots/google-store.ts diff --git a/src/alphalib/types/robots/html-convert.ts b/packages/node/src/alphalib/types/robots/html-convert.ts similarity index 100% rename from src/alphalib/types/robots/html-convert.ts rename to packages/node/src/alphalib/types/robots/html-convert.ts diff --git a/src/alphalib/types/robots/http-import.ts b/packages/node/src/alphalib/types/robots/http-import.ts similarity index 100% rename from src/alphalib/types/robots/http-import.ts rename to packages/node/src/alphalib/types/robots/http-import.ts diff --git a/src/alphalib/types/robots/image-bgremove.ts b/packages/node/src/alphalib/types/robots/image-bgremove.ts similarity index 100% rename from src/alphalib/types/robots/image-bgremove.ts rename to packages/node/src/alphalib/types/robots/image-bgremove.ts diff --git a/src/alphalib/types/robots/image-describe.ts b/packages/node/src/alphalib/types/robots/image-describe.ts similarity index 100% rename from src/alphalib/types/robots/image-describe.ts rename to packages/node/src/alphalib/types/robots/image-describe.ts diff --git a/src/alphalib/types/robots/image-facedetect.ts b/packages/node/src/alphalib/types/robots/image-facedetect.ts similarity index 100% rename from src/alphalib/types/robots/image-facedetect.ts rename to packages/node/src/alphalib/types/robots/image-facedetect.ts diff --git a/src/alphalib/types/robots/image-generate.ts b/packages/node/src/alphalib/types/robots/image-generate.ts similarity index 100% rename from src/alphalib/types/robots/image-generate.ts rename to packages/node/src/alphalib/types/robots/image-generate.ts diff --git a/src/alphalib/types/robots/image-merge.ts b/packages/node/src/alphalib/types/robots/image-merge.ts similarity index 100% rename from src/alphalib/types/robots/image-merge.ts rename to packages/node/src/alphalib/types/robots/image-merge.ts diff --git a/src/alphalib/types/robots/image-ocr.ts b/packages/node/src/alphalib/types/robots/image-ocr.ts similarity index 100% rename from src/alphalib/types/robots/image-ocr.ts rename to packages/node/src/alphalib/types/robots/image-ocr.ts diff --git a/src/alphalib/types/robots/image-optimize.ts b/packages/node/src/alphalib/types/robots/image-optimize.ts similarity index 100% rename from src/alphalib/types/robots/image-optimize.ts rename to packages/node/src/alphalib/types/robots/image-optimize.ts diff --git a/src/alphalib/types/robots/image-resize.ts b/packages/node/src/alphalib/types/robots/image-resize.ts similarity index 100% rename from src/alphalib/types/robots/image-resize.ts rename to packages/node/src/alphalib/types/robots/image-resize.ts diff --git a/src/alphalib/types/robots/meta-read.ts b/packages/node/src/alphalib/types/robots/meta-read.ts similarity index 100% rename from src/alphalib/types/robots/meta-read.ts rename to packages/node/src/alphalib/types/robots/meta-read.ts diff --git a/src/alphalib/types/robots/meta-write.ts b/packages/node/src/alphalib/types/robots/meta-write.ts similarity index 98% rename from src/alphalib/types/robots/meta-write.ts rename to packages/node/src/alphalib/types/robots/meta-write.ts index eca0cfc4..46852e8d 100644 --- a/src/alphalib/types/robots/meta-write.ts +++ b/packages/node/src/alphalib/types/robots/meta-write.ts @@ -53,8 +53,7 @@ export const robotMetaWriteInstructionsSchema = robotBase **Note:** This Robot currently accepts images, videos and audio files. `), data_to_write: z - .object({}) - .passthrough() + .record(z.unknown()) .default({}) .describe(` A key/value map defining the metadata to write into the file. diff --git a/src/alphalib/types/robots/minio-import.ts b/packages/node/src/alphalib/types/robots/minio-import.ts similarity index 100% rename from src/alphalib/types/robots/minio-import.ts rename to packages/node/src/alphalib/types/robots/minio-import.ts diff --git a/src/alphalib/types/robots/minio-store.ts b/packages/node/src/alphalib/types/robots/minio-store.ts similarity index 100% rename from src/alphalib/types/robots/minio-store.ts rename to packages/node/src/alphalib/types/robots/minio-store.ts diff --git a/src/alphalib/types/robots/progress-simulate.ts b/packages/node/src/alphalib/types/robots/progress-simulate.ts similarity index 100% rename from src/alphalib/types/robots/progress-simulate.ts rename to packages/node/src/alphalib/types/robots/progress-simulate.ts diff --git a/src/alphalib/types/robots/s3-import.ts b/packages/node/src/alphalib/types/robots/s3-import.ts similarity index 100% rename from src/alphalib/types/robots/s3-import.ts rename to packages/node/src/alphalib/types/robots/s3-import.ts diff --git a/src/alphalib/types/robots/s3-store.ts b/packages/node/src/alphalib/types/robots/s3-store.ts similarity index 100% rename from src/alphalib/types/robots/s3-store.ts rename to packages/node/src/alphalib/types/robots/s3-store.ts diff --git a/src/alphalib/types/robots/script-run.ts b/packages/node/src/alphalib/types/robots/script-run.ts similarity index 100% rename from src/alphalib/types/robots/script-run.ts rename to packages/node/src/alphalib/types/robots/script-run.ts diff --git a/src/alphalib/types/robots/sftp-import.ts b/packages/node/src/alphalib/types/robots/sftp-import.ts similarity index 100% rename from src/alphalib/types/robots/sftp-import.ts rename to packages/node/src/alphalib/types/robots/sftp-import.ts diff --git a/src/alphalib/types/robots/sftp-store.ts b/packages/node/src/alphalib/types/robots/sftp-store.ts similarity index 100% rename from src/alphalib/types/robots/sftp-store.ts rename to packages/node/src/alphalib/types/robots/sftp-store.ts diff --git a/src/alphalib/types/robots/speech-transcribe.ts b/packages/node/src/alphalib/types/robots/speech-transcribe.ts similarity index 100% rename from src/alphalib/types/robots/speech-transcribe.ts rename to packages/node/src/alphalib/types/robots/speech-transcribe.ts diff --git a/src/alphalib/types/robots/supabase-import.ts b/packages/node/src/alphalib/types/robots/supabase-import.ts similarity index 100% rename from src/alphalib/types/robots/supabase-import.ts rename to packages/node/src/alphalib/types/robots/supabase-import.ts diff --git a/src/alphalib/types/robots/supabase-store.ts b/packages/node/src/alphalib/types/robots/supabase-store.ts similarity index 100% rename from src/alphalib/types/robots/supabase-store.ts rename to packages/node/src/alphalib/types/robots/supabase-store.ts diff --git a/src/alphalib/types/robots/swift-import.ts b/packages/node/src/alphalib/types/robots/swift-import.ts similarity index 100% rename from src/alphalib/types/robots/swift-import.ts rename to packages/node/src/alphalib/types/robots/swift-import.ts diff --git a/src/alphalib/types/robots/swift-store.ts b/packages/node/src/alphalib/types/robots/swift-store.ts similarity index 100% rename from src/alphalib/types/robots/swift-store.ts rename to packages/node/src/alphalib/types/robots/swift-store.ts diff --git a/src/alphalib/types/robots/text-speak.ts b/packages/node/src/alphalib/types/robots/text-speak.ts similarity index 100% rename from src/alphalib/types/robots/text-speak.ts rename to packages/node/src/alphalib/types/robots/text-speak.ts diff --git a/src/alphalib/types/robots/text-translate.ts b/packages/node/src/alphalib/types/robots/text-translate.ts similarity index 100% rename from src/alphalib/types/robots/text-translate.ts rename to packages/node/src/alphalib/types/robots/text-translate.ts diff --git a/src/alphalib/types/robots/tigris-import.ts b/packages/node/src/alphalib/types/robots/tigris-import.ts similarity index 100% rename from src/alphalib/types/robots/tigris-import.ts rename to packages/node/src/alphalib/types/robots/tigris-import.ts diff --git a/src/alphalib/types/robots/tigris-store.ts b/packages/node/src/alphalib/types/robots/tigris-store.ts similarity index 100% rename from src/alphalib/types/robots/tigris-store.ts rename to packages/node/src/alphalib/types/robots/tigris-store.ts diff --git a/src/alphalib/types/robots/tlcdn-deliver.ts b/packages/node/src/alphalib/types/robots/tlcdn-deliver.ts similarity index 100% rename from src/alphalib/types/robots/tlcdn-deliver.ts rename to packages/node/src/alphalib/types/robots/tlcdn-deliver.ts diff --git a/src/alphalib/types/robots/tus-store.ts b/packages/node/src/alphalib/types/robots/tus-store.ts similarity index 100% rename from src/alphalib/types/robots/tus-store.ts rename to packages/node/src/alphalib/types/robots/tus-store.ts diff --git a/src/alphalib/types/robots/upload-handle.ts b/packages/node/src/alphalib/types/robots/upload-handle.ts similarity index 100% rename from src/alphalib/types/robots/upload-handle.ts rename to packages/node/src/alphalib/types/robots/upload-handle.ts diff --git a/src/alphalib/types/robots/video-adaptive.ts b/packages/node/src/alphalib/types/robots/video-adaptive.ts similarity index 100% rename from src/alphalib/types/robots/video-adaptive.ts rename to packages/node/src/alphalib/types/robots/video-adaptive.ts diff --git a/src/alphalib/types/robots/video-concat.ts b/packages/node/src/alphalib/types/robots/video-concat.ts similarity index 100% rename from src/alphalib/types/robots/video-concat.ts rename to packages/node/src/alphalib/types/robots/video-concat.ts diff --git a/src/alphalib/types/robots/video-encode.ts b/packages/node/src/alphalib/types/robots/video-encode.ts similarity index 100% rename from src/alphalib/types/robots/video-encode.ts rename to packages/node/src/alphalib/types/robots/video-encode.ts diff --git a/src/alphalib/types/robots/video-merge.ts b/packages/node/src/alphalib/types/robots/video-merge.ts similarity index 100% rename from src/alphalib/types/robots/video-merge.ts rename to packages/node/src/alphalib/types/robots/video-merge.ts diff --git a/src/alphalib/types/robots/video-ondemand.ts b/packages/node/src/alphalib/types/robots/video-ondemand.ts similarity index 100% rename from src/alphalib/types/robots/video-ondemand.ts rename to packages/node/src/alphalib/types/robots/video-ondemand.ts diff --git a/src/alphalib/types/robots/video-subtitle.ts b/packages/node/src/alphalib/types/robots/video-subtitle.ts similarity index 100% rename from src/alphalib/types/robots/video-subtitle.ts rename to packages/node/src/alphalib/types/robots/video-subtitle.ts diff --git a/src/alphalib/types/robots/video-thumbs.ts b/packages/node/src/alphalib/types/robots/video-thumbs.ts similarity index 100% rename from src/alphalib/types/robots/video-thumbs.ts rename to packages/node/src/alphalib/types/robots/video-thumbs.ts diff --git a/src/alphalib/types/robots/vimeo-import.ts b/packages/node/src/alphalib/types/robots/vimeo-import.ts similarity index 100% rename from src/alphalib/types/robots/vimeo-import.ts rename to packages/node/src/alphalib/types/robots/vimeo-import.ts diff --git a/src/alphalib/types/robots/vimeo-store.ts b/packages/node/src/alphalib/types/robots/vimeo-store.ts similarity index 100% rename from src/alphalib/types/robots/vimeo-store.ts rename to packages/node/src/alphalib/types/robots/vimeo-store.ts diff --git a/src/alphalib/types/robots/wasabi-import.ts b/packages/node/src/alphalib/types/robots/wasabi-import.ts similarity index 100% rename from src/alphalib/types/robots/wasabi-import.ts rename to packages/node/src/alphalib/types/robots/wasabi-import.ts diff --git a/src/alphalib/types/robots/wasabi-store.ts b/packages/node/src/alphalib/types/robots/wasabi-store.ts similarity index 100% rename from src/alphalib/types/robots/wasabi-store.ts rename to packages/node/src/alphalib/types/robots/wasabi-store.ts diff --git a/src/alphalib/types/robots/youtube-store.ts b/packages/node/src/alphalib/types/robots/youtube-store.ts similarity index 100% rename from src/alphalib/types/robots/youtube-store.ts rename to packages/node/src/alphalib/types/robots/youtube-store.ts diff --git a/src/alphalib/types/stackVersions.ts b/packages/node/src/alphalib/types/stackVersions.ts similarity index 100% rename from src/alphalib/types/stackVersions.ts rename to packages/node/src/alphalib/types/stackVersions.ts diff --git a/src/alphalib/types/template.ts b/packages/node/src/alphalib/types/template.ts similarity index 100% rename from src/alphalib/types/template.ts rename to packages/node/src/alphalib/types/template.ts diff --git a/src/alphalib/types/templateCredential.ts b/packages/node/src/alphalib/types/templateCredential.ts similarity index 100% rename from src/alphalib/types/templateCredential.ts rename to packages/node/src/alphalib/types/templateCredential.ts diff --git a/src/alphalib/zodParseWithContext.ts b/packages/node/src/alphalib/zodParseWithContext.ts similarity index 100% rename from src/alphalib/zodParseWithContext.ts rename to packages/node/src/alphalib/zodParseWithContext.ts diff --git a/src/apiTypes.ts b/packages/node/src/apiTypes.ts similarity index 100% rename from src/apiTypes.ts rename to packages/node/src/apiTypes.ts diff --git a/src/cli.ts b/packages/node/src/cli.ts similarity index 100% rename from src/cli.ts rename to packages/node/src/cli.ts diff --git a/src/cli/OutputCtl.ts b/packages/node/src/cli/OutputCtl.ts similarity index 100% rename from src/cli/OutputCtl.ts rename to packages/node/src/cli/OutputCtl.ts diff --git a/src/cli/commands/BaseCommand.ts b/packages/node/src/cli/commands/BaseCommand.ts similarity index 100% rename from src/cli/commands/BaseCommand.ts rename to packages/node/src/cli/commands/BaseCommand.ts diff --git a/src/cli/commands/assemblies.ts b/packages/node/src/cli/commands/assemblies.ts similarity index 100% rename from src/cli/commands/assemblies.ts rename to packages/node/src/cli/commands/assemblies.ts diff --git a/src/cli/commands/auth.ts b/packages/node/src/cli/commands/auth.ts similarity index 100% rename from src/cli/commands/auth.ts rename to packages/node/src/cli/commands/auth.ts diff --git a/src/cli/commands/bills.ts b/packages/node/src/cli/commands/bills.ts similarity index 100% rename from src/cli/commands/bills.ts rename to packages/node/src/cli/commands/bills.ts diff --git a/src/cli/commands/index.ts b/packages/node/src/cli/commands/index.ts similarity index 100% rename from src/cli/commands/index.ts rename to packages/node/src/cli/commands/index.ts diff --git a/src/cli/commands/notifications.ts b/packages/node/src/cli/commands/notifications.ts similarity index 100% rename from src/cli/commands/notifications.ts rename to packages/node/src/cli/commands/notifications.ts diff --git a/src/cli/commands/templates.ts b/packages/node/src/cli/commands/templates.ts similarity index 100% rename from src/cli/commands/templates.ts rename to packages/node/src/cli/commands/templates.ts diff --git a/src/cli/helpers.ts b/packages/node/src/cli/helpers.ts similarity index 100% rename from src/cli/helpers.ts rename to packages/node/src/cli/helpers.ts diff --git a/src/cli/template-last-modified.ts b/packages/node/src/cli/template-last-modified.ts similarity index 100% rename from src/cli/template-last-modified.ts rename to packages/node/src/cli/template-last-modified.ts diff --git a/src/cli/types.ts b/packages/node/src/cli/types.ts similarity index 100% rename from src/cli/types.ts rename to packages/node/src/cli/types.ts diff --git a/src/tus.ts b/packages/node/src/tus.ts similarity index 100% rename from src/tus.ts rename to packages/node/src/tus.ts diff --git a/test/e2e/cli/OutputCtl.ts b/packages/node/test/e2e/cli/OutputCtl.ts similarity index 100% rename from test/e2e/cli/OutputCtl.ts rename to packages/node/test/e2e/cli/OutputCtl.ts diff --git a/test/e2e/cli/assemblies-create.test.ts b/packages/node/test/e2e/cli/assemblies-create.test.ts similarity index 100% rename from test/e2e/cli/assemblies-create.test.ts rename to packages/node/test/e2e/cli/assemblies-create.test.ts diff --git a/test/e2e/cli/assemblies-list.test.ts b/packages/node/test/e2e/cli/assemblies-list.test.ts similarity index 100% rename from test/e2e/cli/assemblies-list.test.ts rename to packages/node/test/e2e/cli/assemblies-list.test.ts diff --git a/test/e2e/cli/assemblies.test.ts b/packages/node/test/e2e/cli/assemblies.test.ts similarity index 100% rename from test/e2e/cli/assemblies.test.ts rename to packages/node/test/e2e/cli/assemblies.test.ts diff --git a/test/e2e/cli/bills.test.ts b/packages/node/test/e2e/cli/bills.test.ts similarity index 100% rename from test/e2e/cli/bills.test.ts rename to packages/node/test/e2e/cli/bills.test.ts diff --git a/test/e2e/cli/cli.test.ts b/packages/node/test/e2e/cli/cli.test.ts similarity index 100% rename from test/e2e/cli/cli.test.ts rename to packages/node/test/e2e/cli/cli.test.ts diff --git a/test/e2e/cli/templates.test.ts b/packages/node/test/e2e/cli/templates.test.ts similarity index 100% rename from test/e2e/cli/templates.test.ts rename to packages/node/test/e2e/cli/templates.test.ts diff --git a/test/e2e/cli/test-utils.ts b/packages/node/test/e2e/cli/test-utils.ts similarity index 96% rename from test/e2e/cli/test-utils.ts rename to packages/node/test/e2e/cli/test-utils.ts index 799cd2e5..a8a69f19 100644 --- a/test/e2e/cli/test-utils.ts +++ b/packages/node/test/e2e/cli/test-utils.ts @@ -60,7 +60,7 @@ export function runCli( args: string, env: Record = {}, ): Promise<{ stdout: string; stderr: string }> { - return execAsync(`npx tsx ${cliPath} ${args}`, { + return execAsync(`${process.execPath} ${cliPath} ${args}`, { env: { ...process.env, ...env }, }) } diff --git a/test/e2e/fixtures/zerobytes.jpg b/packages/node/test/e2e/fixtures/zerobytes.jpg similarity index 100% rename from test/e2e/fixtures/zerobytes.jpg rename to packages/node/test/e2e/fixtures/zerobytes.jpg diff --git a/test/e2e/live-api.test.ts b/packages/node/test/e2e/live-api.test.ts similarity index 100% rename from test/e2e/live-api.test.ts rename to packages/node/test/e2e/live-api.test.ts diff --git a/test/generate-coverage-badge.ts b/packages/node/test/generate-coverage-badge.ts similarity index 100% rename from test/generate-coverage-badge.ts rename to packages/node/test/generate-coverage-badge.ts diff --git a/test/testserver.ts b/packages/node/test/testserver.ts similarity index 100% rename from test/testserver.ts rename to packages/node/test/testserver.ts diff --git a/test/tunnel.ts b/packages/node/test/tunnel.ts similarity index 100% rename from test/tunnel.ts rename to packages/node/test/tunnel.ts diff --git a/test/unit/cli/test-cli.test.ts b/packages/node/test/unit/cli/test-cli.test.ts similarity index 100% rename from test/unit/cli/test-cli.test.ts rename to packages/node/test/unit/cli/test-cli.test.ts diff --git a/test/unit/mock-http.test.ts b/packages/node/test/unit/mock-http.test.ts similarity index 100% rename from test/unit/mock-http.test.ts rename to packages/node/test/unit/mock-http.test.ts diff --git a/test/unit/test-pagination-stream.test.ts b/packages/node/test/unit/test-pagination-stream.test.ts similarity index 100% rename from test/unit/test-pagination-stream.test.ts rename to packages/node/test/unit/test-pagination-stream.test.ts diff --git a/test/unit/test-transloadit-client.test.ts b/packages/node/test/unit/test-transloadit-client.test.ts similarity index 100% rename from test/unit/test-transloadit-client.test.ts rename to packages/node/test/unit/test-transloadit-client.test.ts diff --git a/test/unit/transloadit-advanced.test.ts b/packages/node/test/unit/transloadit-advanced.test.ts similarity index 100% rename from test/unit/transloadit-advanced.test.ts rename to packages/node/test/unit/transloadit-advanced.test.ts diff --git a/test/unit/tus.test.ts b/packages/node/test/unit/tus.test.ts similarity index 100% rename from test/unit/tus.test.ts rename to packages/node/test/unit/tus.test.ts diff --git a/test/util.ts b/packages/node/test/util.ts similarity index 100% rename from test/util.ts rename to packages/node/test/util.ts diff --git a/tsconfig.build.json b/packages/node/tsconfig.build.json similarity index 100% rename from tsconfig.build.json rename to packages/node/tsconfig.build.json diff --git a/packages/node/tsconfig.json b/packages/node/tsconfig.json new file mode 100644 index 00000000..0520d979 --- /dev/null +++ b/packages/node/tsconfig.json @@ -0,0 +1,16 @@ +{ + "exclude": ["dist", "src", "coverage", "examples"], + "references": [{ "path": "./tsconfig.build.json" }], + "compilerOptions": { + "checkJs": true, + "erasableSyntaxOnly": true, + "isolatedModules": true, + "module": "NodeNext", + "allowImportingTsExtensions": true, + "noImplicitOverride": true, + "noEmit": true, + "resolveJsonModule": true, + "strict": true, + "types": ["vitest/globals"] + } +} diff --git a/vitest.config.ts b/packages/node/vitest.config.ts similarity index 100% rename from vitest.config.ts rename to packages/node/vitest.config.ts diff --git a/packages/transloadit/package.json b/packages/transloadit/package.json new file mode 100644 index 00000000..0dfb43d7 --- /dev/null +++ b/packages/transloadit/package.json @@ -0,0 +1,81 @@ +{ + "name": "transloadit", + "version": "4.1.3", + "description": "Node.js SDK for Transloadit", + "type": "module", + "keywords": [ + "transloadit", + "encoding", + "transcoding", + "video", + "audio", + "mp3" + ], + "author": "Tim Koschuetzki ", + "packageManager": "yarn@4.12.0", + "engines": { + "node": ">= 20" + }, + "dependencies": { + "@aws-sdk/client-s3": "^3.891.0", + "@aws-sdk/s3-request-presigner": "^3.891.0", + "@transloadit/sev-logger": "^0.0.15", + "clipanion": "^4.0.0-rc.4", + "debug": "^4.4.3", + "dotenv": "^17.2.3", + "form-data": "^4.0.4", + "got": "14.4.9", + "into-stream": "^9.0.0", + "is-stream": "^4.0.1", + "node-watch": "^0.7.4", + "p-map": "^7.0.3", + "p-queue": "^9.0.1", + "recursive-readdir": "^2.2.3", + "tus-js-client": "^4.3.1", + "typanion": "^3.14.0", + "type-fest": "^4.41.0", + "zod": "3.25.76" + }, + "devDependencies": { + "@types/debug": "^4.1.12", + "@types/minimist": "^1.2.5", + "@types/node": "^24.10.3", + "@types/recursive-readdir": "^2.2.4", + "minimatch": "^10.1.1" + }, + "repository": { + "type": "git", + "url": "git://github.com/transloadit/node-sdk.git" + }, + "directories": { + "src": "./src" + }, + "scripts": { + "check": "yarn lint:ts && yarn fix && yarn test:unit", + "fix:js": "biome check --write .", + "lint:ts": "yarn --cwd ../.. tsc:node", + "fix:js:unsafe": "biome check --write . --unsafe", + "lint:js": "biome check .", + "lint": "npm-run-all --parallel 'lint:js'", + "fix": "npm-run-all --serial 'fix:js'", + "lint:deps": "knip --dependencies --no-progress", + "fix:deps": "knip --dependencies --no-progress --fix", + "prepack": "node ../../scripts/prepare-transloadit.ts", + "test:unit": "../../node_modules/.bin/vitest run --coverage ./test/unit", + "test:e2e": "../../node_modules/.bin/vitest run ./test/e2e", + "test": "../../node_modules/.bin/vitest run --coverage" + }, + "license": "MIT", + "main": "./dist/Transloadit.js", + "exports": { + ".": "./dist/Transloadit.js", + "./package.json": "./package.json" + }, + "files": [ + "dist", + "src" + ], + "bin": { + "transloadit": "./dist/cli.js" + } +} diff --git a/packages/types/CHANGELOG.md b/packages/types/CHANGELOG.md new file mode 100644 index 00000000..81eb724b --- /dev/null +++ b/packages/types/CHANGELOG.md @@ -0,0 +1,13 @@ +# @transloadit/types + +## 4.1.3 + +### Patch Changes + +- Publish initial patch releases for the split packages and legacy wrapper. + +## 4.1.3 + +### Patch Changes + +- f989dc1: chore: align workspace packages for upcoming monorepo releases diff --git a/packages/types/README.md b/packages/types/README.md new file mode 100644 index 00000000..40262ef4 --- /dev/null +++ b/packages/types/README.md @@ -0,0 +1,7 @@ +# @transloadit/types (experimental) + +**Stability: Experimental.** This package is new and may change without notice. + +This package provides type-only exports generated from Transloadit schemas. + +For the stable SDK, use the unscoped `transloadit` package. diff --git a/packages/types/package.json b/packages/types/package.json new file mode 100644 index 00000000..406b0d47 --- /dev/null +++ b/packages/types/package.json @@ -0,0 +1,42 @@ +{ + "name": "@transloadit/types", + "version": "4.1.3", + "description": "Transloadit type definitions", + "type": "module", + "license": "MIT", + "files": [ + "dist", + "README.md" + ], + "types": "./dist/index.d.ts", + "exports": { + ".": { + "types": "./dist/index.d.ts" + }, + "./robots": { + "types": "./dist/generated/robots/_index.d.ts" + }, + "./robots/*": { + "types": "./dist/generated/robots/*.d.ts" + }, + "./generated/*": { + "types": "./dist/generated/*.d.ts" + }, + "./*": { + "types": "./dist/generated/*.d.ts" + } + }, + "scripts": { + "generate": "node scripts/emit-types.ts", + "lint:ts": "yarn generate && ../../node_modules/.bin/tsc --build tsconfig.build.json", + "test:unit": "node scripts/emit-types.test.ts", + "build": "yarn generate && ../../node_modules/.bin/tsc --build tsconfig.build.json", + "check": "yarn generate && yarn test:unit && ../../node_modules/.bin/tsc --build tsconfig.build.json" + }, + "devDependencies": { + "zod": "3.25.76" + }, + "publishConfig": { + "tag": "experimental" + } +} diff --git a/packages/types/scripts/emit-types.test.ts b/packages/types/scripts/emit-types.test.ts new file mode 100644 index 00000000..0d439afe --- /dev/null +++ b/packages/types/scripts/emit-types.test.ts @@ -0,0 +1,49 @@ +import assert from 'node:assert/strict' + +import { escapeStringLiteral, normalizeExportPath } from './emit-types.ts' + +const cases = [ + { + input: 'line1\nline2', + expected: 'line1\\nline2', + }, + { + input: 'line1\rline2', + expected: 'line1\\rline2', + }, + { + input: 'col1\tcol2', + expected: 'col1\\tcol2', + }, + { + input: 'path\\name', + expected: 'path\\\\name', + }, + { + input: "it's fine", + expected: "it\\'s fine", + }, +] + +for (const { input, expected } of cases) { + assert.equal(escapeStringLiteral(input), expected) +} + +console.log('emit-types escapeStringLiteral: ok') + +const exportCases = [ + { + input: 'robots\\image-resize.ts', + expected: 'robots/image-resize', + }, + { + input: 'template.ts', + expected: 'template', + }, +] + +for (const { input, expected } of exportCases) { + assert.equal(normalizeExportPath(input), expected) +} + +console.log('emit-types normalizeExportPath: ok') diff --git a/packages/types/scripts/emit-types.ts b/packages/types/scripts/emit-types.ts new file mode 100644 index 00000000..1d719baf --- /dev/null +++ b/packages/types/scripts/emit-types.ts @@ -0,0 +1,432 @@ +import { mkdir, readdir, rm, stat, writeFile } from 'node:fs/promises' +import { dirname, join, relative, resolve, sep } from 'node:path' +import { fileURLToPath } from 'node:url' +import ts from 'typescript' + +const filePath = fileURLToPath(import.meta.url) +const typesRoot = resolve(dirname(filePath), '..') +const schemaRoot = resolve(typesRoot, '../node/src/alphalib/types') +const outputRoot = resolve(typesRoot, 'src/generated') + +const compilerOptions: ts.CompilerOptions = { + module: ts.ModuleKind.NodeNext, + target: ts.ScriptTarget.ES2022, + moduleResolution: ts.ModuleResolutionKind.NodeNext, + allowImportingTsExtensions: true, + strict: true, + noEmit: true, +} + +const typeFormatFlags = + ts.TypeFormatFlags.NoTruncation | + ts.TypeFormatFlags.UseAliasDefinedOutsideCurrentScope | + ts.TypeFormatFlags.UseSingleQuotesForStringLiteralType + +const zodTypeOperators = new Set(['infer', 'input', 'output', 'TypeOf']) +const zodPathToken = `${sep}node_modules${sep}zod${sep}` +const libPathToken = `${sep}node_modules${sep}typescript${sep}lib${sep}` + +const isExported = (node: ts.Node): boolean => { + const flags = ts.getCombinedModifierFlags(node) + return (flags & ts.ModifierFlags.Export) !== 0 +} + +const collectFiles = async (dir: string, acc: string[] = []): Promise => { + const entries = await readdir(dir, { withFileTypes: true }) + for (const entry of entries) { + const full = join(dir, entry.name) + if (entry.isDirectory()) { + await collectFiles(full, acc) + continue + } + if (entry.isFile() && entry.name.endsWith('.ts')) { + acc.push(full) + } + } + return acc +} + +const ensureDir = async (dir: string) => { + await mkdir(dir, { recursive: true }) +} + +const isZodTypeNode = (node: ts.TypeNode): boolean => { + let found = false + const visit = (current: ts.Node) => { + if (found) return + if (ts.isTypeReferenceNode(current)) { + const typeName = current.typeName + if ( + ts.isQualifiedName(typeName) && + ts.isIdentifier(typeName.left) && + typeName.left.text === 'z' && + zodTypeOperators.has(typeName.right.text) + ) { + found = true + return + } + } + current.forEachChild(visit) + } + visit(node) + return found +} + +const isSymbolFromPath = (symbol: ts.Symbol | undefined, token: string): boolean => { + if (!symbol?.declarations?.length) return false + return symbol.declarations.some((decl) => decl.getSourceFile().fileName.includes(token)) +} + +const isZodSymbol = (symbol: ts.Symbol | undefined): boolean => + isSymbolFromPath(symbol, zodPathToken) +const isLibSymbol = (symbol: ts.Symbol | undefined): boolean => + isSymbolFromPath(symbol, libPathToken) + +const isZodText = (value: string): boolean => + value.includes('Zod') || value.includes('objectOutputType') || value.includes('objectInputType') + +const shouldUseTypeToString = (type: ts.Type, checker: ts.TypeChecker): boolean => { + if (hasZodType(type, checker, new Set())) { + return false + } + const text = checker.typeToString(type, undefined, typeFormatFlags) + return !isZodText(text) +} + +const hasZodType = (type: ts.Type, checker: ts.TypeChecker, seen: Set): boolean => { + if (seen.has(type)) return false + seen.add(type) + + const symbol = type.aliasSymbol ?? type.symbol + if (isZodSymbol(symbol)) return true + + if (type.isUnion()) { + return type.types.some((entry) => hasZodType(entry, checker, seen)) + } + + if (type.isIntersection()) { + return type.types.some((entry) => hasZodType(entry, checker, seen)) + } + + if (checker.isTupleType(type)) { + const tupleType = type as ts.TupleTypeReference + return checker.getTypeArguments(tupleType).some((entry) => hasZodType(entry, checker, seen)) + } + + if (checker.isArrayType(type)) { + const elementType = checker.getElementTypeOfArrayType(type) + return elementType ? hasZodType(elementType, checker, seen) : false + } + + if (type.aliasTypeArguments?.length) { + return type.aliasTypeArguments.some((entry) => hasZodType(entry, checker, seen)) + } + + const apparent = checker.getApparentType(type) + const properties = checker.getPropertiesOfType(apparent) + for (const prop of properties) { + const propDecl = prop.valueDeclaration ?? prop.declarations?.[0] + if (!propDecl) { + continue + } + const propType = checker.getTypeOfSymbolAtLocation(prop, propDecl) + if (propType && hasZodType(propType, checker, seen)) { + return true + } + } + + const stringIndex = checker.getIndexTypeOfType(apparent, ts.IndexKind.String) + if (stringIndex && hasZodType(stringIndex, checker, seen)) { + return true + } + const numberIndex = checker.getIndexTypeOfType(apparent, ts.IndexKind.Number) + if (numberIndex && hasZodType(numberIndex, checker, seen)) { + return true + } + + return false +} + +export const escapeStringLiteral = (value: string): string => + value + .replace(/\\/g, '\\\\') + .replace(/'/g, "\\'") + .replace(/\r/g, '\\r') + .replace(/\n/g, '\\n') + .replace(/\t/g, '\\t') + +const formatPropertyName = (name: string): string => { + if (ts.isIdentifierText(name, ts.ScriptTarget.ES2022)) { + return name + } + return `'${escapeStringLiteral(name)}'` +} + +const compareByPropertyOrder = (a: ts.Symbol, b: ts.Symbol): number => { + const aDecl = a.valueDeclaration ?? a.declarations?.[0] + const bDecl = b.valueDeclaration ?? b.declarations?.[0] + const aFile = aDecl?.getSourceFile().fileName ?? '' + const bFile = bDecl?.getSourceFile().fileName ?? '' + if (aFile !== bFile) { + return aFile < bFile ? -1 : 1 + } + const aPos = aDecl?.pos ?? Number.MAX_SAFE_INTEGER + const bPos = bDecl?.pos ?? Number.MAX_SAFE_INTEGER + if (aPos !== bPos) { + return aPos - bPos + } + const aName = a.getName() + const bName = b.getName() + if (aName === bName) return 0 + return aName < bName ? -1 : 1 +} + +const TypePrecedence = { + Union: 1, + Intersection: 2, + Primary: 3, +} as const + +type TypePrecedence = (typeof TypePrecedence)[keyof typeof TypePrecedence] + +const wrap = (value: string, precedence: TypePrecedence, parent: TypePrecedence): string => + precedence < parent ? `(${value})` : value + +const renderType = ( + type: ts.Type, + checker: ts.TypeChecker, + fallbackNode: ts.Node, + inProgress: Set, +): { text: string; precedence: TypePrecedence } => { + if (inProgress.has(type)) { + return { + text: checker.typeToString(type, undefined, typeFormatFlags), + precedence: TypePrecedence.Primary, + } + } + + if (type.isUnion()) { + const parts = type.types.map((subType) => { + const rendered = renderType(subType, checker, fallbackNode, inProgress) + return wrap(rendered.text, rendered.precedence, TypePrecedence.Union) + }) + return { text: parts.join(' | '), precedence: TypePrecedence.Union } + } + + if (type.isIntersection()) { + const parts = type.types.map((subType) => { + const rendered = renderType(subType, checker, fallbackNode, inProgress) + return wrap(rendered.text, rendered.precedence, TypePrecedence.Intersection) + }) + return { text: parts.join(' & '), precedence: TypePrecedence.Intersection } + } + + if (type.isLiteral()) { + if (typeof type.value === 'string') { + return { text: `'${escapeStringLiteral(type.value)}'`, precedence: TypePrecedence.Primary } + } + return { text: String(type.value), precedence: TypePrecedence.Primary } + } + if (type.flags & ts.TypeFlags.BooleanLiteral) { + return { text: type.intrinsicName, precedence: TypePrecedence.Primary } + } + + if (type.flags & ts.TypeFlags.String) { + return { text: 'string', precedence: TypePrecedence.Primary } + } + if (type.flags & ts.TypeFlags.Number) { + return { text: 'number', precedence: TypePrecedence.Primary } + } + if (type.flags & ts.TypeFlags.Boolean) { + return { text: 'boolean', precedence: TypePrecedence.Primary } + } + if (type.flags & ts.TypeFlags.BigInt) { + return { text: 'bigint', precedence: TypePrecedence.Primary } + } + if (type.flags & ts.TypeFlags.Null) { + return { text: 'null', precedence: TypePrecedence.Primary } + } + if (type.flags & ts.TypeFlags.Undefined) { + return { text: 'undefined', precedence: TypePrecedence.Primary } + } + if (type.flags & ts.TypeFlags.Void) { + return { text: 'void', precedence: TypePrecedence.Primary } + } + if (type.flags & ts.TypeFlags.Any) { + return { text: 'any', precedence: TypePrecedence.Primary } + } + if (type.flags & ts.TypeFlags.Unknown) { + return { text: 'unknown', precedence: TypePrecedence.Primary } + } + if (type.flags & ts.TypeFlags.Never) { + return { text: 'never', precedence: TypePrecedence.Primary } + } + + if (checker.isTupleType(type)) { + const tupleType = type as ts.TupleTypeReference + const elements = checker.getTypeArguments(tupleType) + const rendered = elements.map((entry) => renderType(entry, checker, fallbackNode, inProgress)) + const text = `[${rendered.map((entry) => entry.text).join(', ')}]` + return { text, precedence: TypePrecedence.Primary } + } + + if (checker.isArrayType(type)) { + const elementType = checker.getElementTypeOfArrayType(type) + if (elementType) { + const rendered = renderType(elementType, checker, fallbackNode, inProgress) + return { text: `Array<${rendered.text}>`, precedence: TypePrecedence.Primary } + } + } + + const callSignatures = type.getCallSignatures() + if (callSignatures.length > 0) { + const signatureText = checker.signatureToString( + callSignatures[0], + undefined, + typeFormatFlags, + ts.SignatureKind.Call, + ) + return { text: signatureText, precedence: TypePrecedence.Primary } + } + + const aliasSymbol = type.aliasSymbol + const symbol = type.symbol ?? type.aliasSymbol + if (aliasSymbol && !isZodSymbol(aliasSymbol) && shouldUseTypeToString(type, checker)) { + return { + text: checker.typeToString(type, undefined, typeFormatFlags), + precedence: TypePrecedence.Primary, + } + } + + if (symbol && isLibSymbol(symbol) && shouldUseTypeToString(type, checker)) { + return { + text: checker.typeToString(type, undefined, typeFormatFlags), + precedence: TypePrecedence.Primary, + } + } + + const apparent = checker.getApparentType(type) + const properties = checker.getPropertiesOfType(apparent).sort(compareByPropertyOrder) + const stringIndex = checker.getIndexTypeOfType(apparent, ts.IndexKind.String) + const numberIndex = checker.getIndexTypeOfType(apparent, ts.IndexKind.Number) + + if (properties.length > 0 || stringIndex || numberIndex) { + const entries: string[] = [] + if (stringIndex) { + const rendered = renderType(stringIndex, checker, fallbackNode, inProgress) + entries.push(`[key: string]: ${rendered.text}`) + } + if (numberIndex) { + const rendered = renderType(numberIndex, checker, fallbackNode, inProgress) + entries.push(`[key: number]: ${rendered.text}`) + } + inProgress.add(type) + try { + for (const prop of properties) { + const propDecl = prop.valueDeclaration ?? prop.declarations?.[0] + const propType = checker.getTypeOfSymbolAtLocation(prop, propDecl ?? fallbackNode) + const rendered = renderType(propType, checker, fallbackNode, inProgress) + const optional = prop.flags & ts.SymbolFlags.Optional ? '?' : '' + entries.push(`${formatPropertyName(prop.getName())}${optional}: ${rendered.text}`) + } + const text = `{ ${entries.join('; ')} }` + return { text, precedence: TypePrecedence.Primary } + } finally { + inProgress.delete(type) + } + } + + return { + text: checker.typeToString(type, undefined, typeFormatFlags), + precedence: TypePrecedence.Primary, + } +} + +const generateFile = (sourceFile: ts.SourceFile, checker: ts.TypeChecker): string => { + const printer = ts.createPrinter({ newLine: ts.NewLineKind.LineFeed }) + const lines: string[] = ['// This file is generated. Do not edit.'] + + for (const statement of sourceFile.statements) { + if (!ts.isImportDeclaration(statement)) continue + if (!statement.importClause?.isTypeOnly) continue + lines.push(printer.printNode(ts.EmitHint.Unspecified, statement, sourceFile)) + } + + if (lines.length > 1) { + lines.push('') + } + + for (const statement of sourceFile.statements) { + if (ts.isTypeAliasDeclaration(statement) && isExported(statement)) { + if (isZodTypeNode(statement.type)) { + const type = checker.getTypeFromTypeNode(statement.type) + const rendered = renderType(type, checker, sourceFile, new Set()) + lines.push(`export type ${statement.name.text} = ${rendered.text}`) + } else { + lines.push(printer.printNode(ts.EmitHint.Unspecified, statement, sourceFile)) + } + continue + } + + if (ts.isInterfaceDeclaration(statement) && isExported(statement)) { + lines.push(printer.printNode(ts.EmitHint.Unspecified, statement, sourceFile)) + continue + } + + if (ts.isEnumDeclaration(statement) && isExported(statement)) { + lines.push(printer.printNode(ts.EmitHint.Unspecified, statement, sourceFile)) + continue + } + + if (ts.isExportDeclaration(statement) && statement.isTypeOnly) { + lines.push(printer.printNode(ts.EmitHint.Unspecified, statement, sourceFile)) + } + } + + return `${lines.join('\n')}\n` +} + +export const normalizeExportPath = (relPath: string): string => { + const trimmed = relPath.endsWith('.ts') ? relPath.slice(0, -3) : relPath + return trimmed.replace(/\\/g, '/') +} + +const main = async () => { + const schemaStats = await stat(schemaRoot).catch(() => null) + if (!schemaStats?.isDirectory()) { + throw new Error(`Missing Zod schemas at ${schemaRoot}.`) + } + + const schemaFiles = await collectFiles(schemaRoot) + if (schemaFiles.length === 0) { + throw new Error(`No schema files found under ${schemaRoot}`) + } + + await rm(outputRoot, { recursive: true, force: true }) + await ensureDir(outputRoot) + + const program = ts.createProgram(schemaFiles, compilerOptions) + const checker = program.getTypeChecker() + + const indexExports: string[] = ['// This file is generated. Do not edit.'] + + for (const file of schemaFiles) { + const sourceFile = program.getSourceFile(file) + if (!sourceFile) continue + const rel = relative(schemaRoot, file) + const outFile = join(outputRoot, rel) + await ensureDir(dirname(outFile)) + const content = generateFile(sourceFile, checker) + await writeFile(outFile, content, 'utf8') + + const exportPath = normalizeExportPath(rel) + if (exportPath.endsWith('/index')) { + continue + } + indexExports.push(`export * from './${exportPath}.js'`) + } + + await writeFile(join(outputRoot, 'index.ts'), `${indexExports.join('\n')}\n`, 'utf8') +} + +await main() diff --git a/packages/types/src/index.ts b/packages/types/src/index.ts new file mode 100644 index 00000000..cf8dc18a --- /dev/null +++ b/packages/types/src/index.ts @@ -0,0 +1 @@ +export * from './generated/index.js' diff --git a/packages/types/tsconfig.build.json b/packages/types/tsconfig.build.json new file mode 100644 index 00000000..80e62408 --- /dev/null +++ b/packages/types/tsconfig.build.json @@ -0,0 +1,21 @@ +{ + "include": ["src"], + "exclude": ["dist"], + "compilerOptions": { + "composite": true, + "declaration": true, + "declarationMap": true, + "emitDeclarationOnly": true, + "erasableSyntaxOnly": true, + "isolatedModules": true, + "module": "NodeNext", + "allowImportingTsExtensions": true, + "target": "ES2022", + "noImplicitOverride": true, + "rewriteRelativeImportExtensions": true, + "outDir": "dist", + "rootDir": "src", + "resolveJsonModule": true, + "strict": true + } +} diff --git a/packages/types/tsconfig.json b/packages/types/tsconfig.json new file mode 100644 index 00000000..455c333e --- /dev/null +++ b/packages/types/tsconfig.json @@ -0,0 +1,15 @@ +{ + "files": [], + "references": [{ "path": "./tsconfig.build.json" }], + "compilerOptions": { + "checkJs": true, + "erasableSyntaxOnly": true, + "isolatedModules": true, + "module": "NodeNext", + "allowImportingTsExtensions": true, + "noImplicitOverride": true, + "noEmit": true, + "resolveJsonModule": true, + "strict": true + } +} diff --git a/packages/zod/CHANGELOG.md b/packages/zod/CHANGELOG.md new file mode 100644 index 00000000..2c6f53a9 --- /dev/null +++ b/packages/zod/CHANGELOG.md @@ -0,0 +1,13 @@ +# @transloadit/zod + +## 4.1.3 + +### Patch Changes + +- Publish initial patch releases for the split packages and legacy wrapper. + +## 4.1.3 + +### Patch Changes + +- f989dc1: chore: align workspace packages for upcoming monorepo releases diff --git a/packages/zod/README.md b/packages/zod/README.md new file mode 100644 index 00000000..be540e46 --- /dev/null +++ b/packages/zod/README.md @@ -0,0 +1,7 @@ +# @transloadit/zod (experimental) + +**Stability: Experimental.** This package is new and may change without notice. + +Exports Zod schemas derived from Transloadit types. + +For the stable SDK, use the unscoped `transloadit` package. diff --git a/packages/zod/package.json b/packages/zod/package.json new file mode 100644 index 00000000..555e3321 --- /dev/null +++ b/packages/zod/package.json @@ -0,0 +1,53 @@ +{ + "name": "@transloadit/zod", + "version": "4.1.3", + "description": "Transloadit Zod schemas", + "type": "module", + "license": "MIT", + "files": [ + "dist", + "README.md" + ], + "exports": { + ".": { + "types": "./dist/v3/index.d.ts", + "default": "./dist/v3/index.js" + }, + "./v3": { + "types": "./dist/v3/index.d.ts", + "default": "./dist/v3/index.js" + }, + "./v3/*": { + "types": "./dist/v3/*.d.ts", + "default": "./dist/v3/*.js" + }, + "./v4": { + "types": "./dist/v4/index.d.ts", + "default": "./dist/v4/index.js" + }, + "./v4/*": { + "types": "./dist/v4/*.d.ts", + "default": "./dist/v4/*.js" + } + }, + "scripts": { + "sync:v3": "node scripts/sync-v3.ts", + "sync:v4": "node scripts/sync-v4.ts", + "sync": "yarn sync:v3 && yarn sync:v4", + "lint:ts": "yarn sync && ../../node_modules/.bin/tsc --build tsconfig.build.json", + "test:types": "yarn sync && ../../node_modules/.bin/tsc --noEmit --project tsconfig.test.json", + "test:unit": "yarn sync && node test/scripts-config.test.ts && node test/patch-ai-chat-schema.test.ts && node test/exports-sync.test.ts && node test/runtime-parity.test.ts", + "build": "yarn sync && ../../node_modules/.bin/tsc --build tsconfig.build.json", + "check": "yarn sync && ../../node_modules/.bin/tsc --build tsconfig.build.json && ../../node_modules/.bin/tsc --noEmit --project tsconfig.test.json && yarn test:unit" + }, + "dependencies": { + "type-fest": "^4.41.0", + "zod": "^4.0.0" + }, + "devDependencies": { + "@transloadit/types": "workspace:*" + }, + "publishConfig": { + "tag": "experimental" + } +} diff --git a/packages/zod/scripts/sync-v3.ts b/packages/zod/scripts/sync-v3.ts new file mode 100644 index 00000000..f0a862b8 --- /dev/null +++ b/packages/zod/scripts/sync-v3.ts @@ -0,0 +1,61 @@ +import { cp, mkdir, readdir, readFile, rm, writeFile } from 'node:fs/promises' +import { dirname, resolve } from 'node:path' +import { fileURLToPath } from 'node:url' + +const filePath = fileURLToPath(import.meta.url) +const zodRoot = resolve(dirname(filePath), '..') +const sourceRoot = resolve(zodRoot, '../node/src/alphalib/types') +const destRoot = resolve(zodRoot, 'src/v3') + +const reexportExtension = 'ts' +const indexModules = [ + 'assembliesGet', + 'assemblyReplay', + 'assemblyReplayNotification', + 'assemblyStatus', + 'bill', + 'stackVersions', + 'template', + 'templateCredential', + 'robots/_index', +] +const indexContents = [ + ...indexModules.map((module) => `export * from './${module}.${reexportExtension}'`), + '', +].join('\n') + +const collectFiles = async (dir: string, acc: string[] = []): Promise => { + const entries = await readdir(dir, { withFileTypes: true }) + for (const entry of entries) { + const full = resolve(dir, entry.name) + if (entry.isDirectory()) { + await collectFiles(full, acc) + continue + } + if (entry.isFile() && entry.name.endsWith('.ts')) { + acc.push(full) + } + } + return acc +} + +const rewriteZodImports = async () => { + const files = await collectFiles(destRoot) + for (const file of files) { + const contents = await readFile(file, 'utf8') + const next = contents.replace(/from ['"]zod['"]/g, "from 'zod/v3'") + if (next !== contents) { + await writeFile(file, next, 'utf8') + } + } +} + +const main = async () => { + await rm(destRoot, { recursive: true, force: true }) + await mkdir(destRoot, { recursive: true }) + await cp(sourceRoot, destRoot, { recursive: true }) + await writeFile(resolve(destRoot, 'index.ts'), indexContents, 'utf8') + await rewriteZodImports() +} + +await main() diff --git a/packages/zod/scripts/sync-v4.ts b/packages/zod/scripts/sync-v4.ts new file mode 100644 index 00000000..d85e9955 --- /dev/null +++ b/packages/zod/scripts/sync-v4.ts @@ -0,0 +1,401 @@ +import { realpathSync } from 'node:fs' +import { cp, mkdir, readdir, readFile, rm, writeFile } from 'node:fs/promises' +import { dirname, resolve, sep } from 'node:path' +import { fileURLToPath } from 'node:url' + +const filePath = fileURLToPath(import.meta.url) +const zodRoot = resolve(dirname(filePath), '..') +const sourceRoot = resolve(zodRoot, 'src/v3') +const destRoot = resolve(zodRoot, 'src/v4') + +const collectFiles = async (dir: string, acc: string[] = []): Promise => { + const entries = await readdir(dir, { withFileTypes: true }) + for (const entry of entries) { + const full = resolve(dir, entry.name) + if (entry.isDirectory()) { + await collectFiles(full, acc) + continue + } + if (entry.isFile() && entry.name.endsWith('.ts')) { + acc.push(full) + } + } + return acc +} + +const rewriteZodImports = (contents: string): string => + contents.replace(/from ['"]zod\/v3['"]/g, "from 'zod/v4'") + +const rewritePassthroughCalls = (contents: string): string => + contents.replace(/\.passthrough\(\)/g, '.catchall(z.unknown())') + +const rewriteRecordCalls = (contents: string): string => { + const marker = 'z.record(' + const normalized = contents.replace(/\bz\s*\.record\(/g, marker) + + const hasTopLevelComma = (source: string): boolean => { + let depth = 0 + let inString: '"' | "'" | null = null + let escaped = false + + for (let i = 0; i < source.length; i += 1) { + const char = source[i] + if (inString) { + if (!escaped && char === inString) { + inString = null + } + escaped = char === '\\' && !escaped + continue + } + if (char === '"' || char === "'") { + inString = char + continue + } + if (char === '(') depth += 1 + if (char === ')') depth -= 1 + if (char === ',' && depth === 0) return true + } + return false + } + + const transform = (source: string): string => { + let output = '' + let index = 0 + + while (index < source.length) { + if (!source.startsWith(marker, index)) { + output += source[index] + index += 1 + continue + } + + const argsStart = index + marker.length + let depth = 1 + let position = argsStart + let inString: '"' | "'" | null = null + let escaped = false + + while (position < source.length) { + const char = source[position] + if (inString) { + if (!escaped && char === inString) { + inString = null + } + escaped = char === '\\' && !escaped + position += 1 + continue + } + if (char === '"' || char === "'") { + inString = char + position += 1 + continue + } + if (char === '(') depth += 1 + if (char === ')') depth -= 1 + if (depth === 0) break + position += 1 + } + + const argsEnd = position + const rawArgs = source.slice(argsStart, argsEnd) + const rewrittenArgs = transform(rawArgs) + const nextArgs = hasTopLevelComma(rewrittenArgs) + ? rewrittenArgs + : `z.string(), ${rewrittenArgs.trim()}` + output += `${marker}${nextArgs})` + index = argsEnd + 1 + } + + return output + } + + return transform(normalized) +} + +const patchInterpolatableHelpers = (contents: string): string => { + const start = contents.indexOf('type InterpolatableTuple') + const marker = '/**\n * The robot keys specified in this array can’t be interpolated.' + const end = contents.indexOf(marker) + if (start === -1 || end === -1) { + return contents + } + + const replacement = + 'type InterpolatableTuple = Schemas extends readonly [\n' + + ' infer Head extends z.core.SomeType,\n' + + ' ...infer Rest extends z.core.SomeType[],\n' + + ']\n' + + ' ? [InterpolatableSchema, ...InterpolatableTuple]\n' + + ' : Schemas\n\n' + + 'type InterpolatableSchema = Schema extends z.ZodString\n' + + ' ? Schema\n' + + ' : Schema extends\n' + + ' | z.ZodBoolean\n' + + ' | z.ZodEnum\n' + + ' | z.ZodLiteral\n' + + ' | z.ZodNumber\n' + + ' | z.ZodPipe\n' + + ' ? z.ZodUnion<[z.ZodString, Schema]>\n' + + ' : Schema extends z.ZodArray\n' + + ' ? z.ZodUnion<[z.ZodString, z.ZodArray>]>\n' + + ' : Schema extends z.ZodDefault\n' + + ' ? z.ZodDefault>\n' + + ' : Schema extends z.ZodNullable\n' + + ' ? z.ZodNullable>\n' + + ' : Schema extends z.ZodOptional\n' + + ' ? z.ZodOptional>\n' + + ' : Schema extends z.ZodRecord\n' + + ' ? z.ZodRecord>\n' + + ' : Schema extends z.ZodTuple\n' + + ' ? z.ZodUnion<[\n' + + ' z.ZodString,\n' + + ' z.ZodTuple<\n' + + ' InterpolatableTuple,\n' + + ' Rest extends z.core.SomeType ? InterpolatableSchema : null\n' + + ' >,\n' + + ' ]>\n' + + ' : Schema extends z.ZodObject\n' + + ' ? z.ZodUnion<[\n' + + ' z.ZodString,\n' + + ' z.ZodObject<{ [Key in keyof T]: InterpolatableSchema }, Config>,\n' + + ' ]>\n' + + ' : Schema extends z.ZodDiscriminatedUnion\n' + + ' ? Schema\n' + + ' : Schema extends z.ZodUnion\n' + + ' ? z.ZodUnion<[z.ZodString, ...InterpolatableTuple]>\n' + + ' : Schema\n\n' + + 'const applyArrayChecks = (schema: z.ZodArray, checks: unknown): z.ZodArray => {\n' + + ' if (!Array.isArray(checks)) return schema\n' + + ' let next = schema\n' + + ' for (const check of checks) {\n' + + ' const def = (check as { _zod?: { def?: { check?: string; minimum?: number; maximum?: number; length?: number } } })?._zod?.def\n' + + ' if (!def) continue\n' + + ` if (def.check === 'min_length' && typeof def.minimum === 'number') {\n` + + ' next = next.min(def.minimum)\n' + + ' }\n' + + ` if (def.check === 'max_length' && typeof def.maximum === 'number') {\n` + + ' next = next.max(def.maximum)\n' + + ' }\n' + + ` if (def.check === 'length_equals' && typeof def.length === 'number') {\n` + + ' next = next.length(def.length)\n' + + ' }\n' + + ' }\n' + + ' return next\n' + + '}\n\n' + + 'export function interpolateRecursive(\n' + + ' schema: Schema,\n' + + '): InterpolatableSchema {\n' + + ' const def = (schema as z.core.SomeType)._zod.def as unknown\n\n' + + ' switch ((def as { type?: string }).type) {\n' + + ` case 'boolean':\n` + + ' return z.union([\n' + + ' interpolationSchemaFull,\n' + + ' z\n' + + ' .union([schema, booleanStringSchema])\n' + + ' .transform((value) => value === true || value === false),\n' + + ' ]) as unknown as InterpolatableSchema\n' + + ` case 'array': {\n` + + ' const arrayDef = def as { element: z.ZodTypeAny; checks?: unknown }\n' + + ' let replacement = z.array(interpolateRecursive(arrayDef.element))\n' + + ' replacement = applyArrayChecks(replacement, arrayDef.checks)\n' + + ' return z.union([interpolationSchemaFull, replacement]) as unknown as InterpolatableSchema\n' + + ' }\n' + + ` case 'default': {\n` + + ' const defaultDef = def as { innerType: z.ZodTypeAny; defaultValue: unknown }\n' + + ' const replacement = interpolateRecursive(defaultDef.innerType).default(defaultDef.defaultValue as never)\n' + + ' const description = (schema as { description?: string }).description\n' + + ' return (description ? replacement.describe(description) : replacement) as unknown as InterpolatableSchema\n' + + ' }\n' + + ` case 'enum':\n` + + ` case 'literal':\n` + + ' return z.union([interpolationSchemaFull, schema]) as unknown as InterpolatableSchema\n' + + ` case 'number':\n` + + ' return z.union([\n' + + ' z\n' + + ' .string()\n' + + ' .regex(/^\\d+(\\.\\d+)?$/)\n' + + ' .transform((value) => Number(value)),\n' + + ' interpolationSchemaFull,\n' + + ' schema,\n' + + ' ]) as unknown as InterpolatableSchema\n' + + ` case 'nullable': {\n` + + ' const nullableDef = def as { innerType: z.ZodTypeAny }\n' + + ' const replacement = interpolateRecursive(nullableDef.innerType).nullable()\n' + + ' const description = (schema as { description?: string }).description\n' + + ' return (description ? replacement.describe(description) : replacement) as unknown as InterpolatableSchema\n' + + ' }\n' + + ` case 'object': {\n` + + ' const objectDef = def as { shape: Record | (() => Record); catchall?: z.ZodTypeAny }\n' + + ` const shape = typeof objectDef.shape === 'function' ? objectDef.shape() : objectDef.shape\n` + + ' let replacement = z.object(\n' + + ' Object.fromEntries(\n' + + ' Object.entries(shape).map(([key, nested]) => [\n' + + ' key,\n' + + ' interpolateRecursive(nested as z.ZodTypeAny),\n' + + ' ]),\n' + + ' ),\n' + + ' )\n' + + ' if (objectDef.catchall) {\n' + + ' const catchallType = objectDef.catchall._zod.def.type\n' + + ` if (catchallType === 'never') {\n` + + ' replacement = replacement.strict()\n' + + ' } else {\n' + + ' replacement = replacement.catchall(objectDef.catchall)\n' + + ' }\n' + + ' }\n' + + ' return z.union([interpolationSchemaFull, replacement]) as unknown as InterpolatableSchema\n' + + ' }\n' + + ` case 'optional': {\n` + + ' const optionalDef = def as { innerType: z.ZodTypeAny }\n' + + ' return interpolateRecursive(optionalDef.innerType).optional() as unknown as InterpolatableSchema\n' + + ' }\n' + + ` case 'record': {\n` + + ' const recordDef = def as { keyType?: z.ZodTypeAny; valueType: z.ZodTypeAny }\n' + + ' const keyType = (recordDef.keyType ?? z.string()) as z.core.$ZodRecordKey\n' + + ' return z.record(keyType, interpolateRecursive(recordDef.valueType)) as unknown as InterpolatableSchema\n' + + ' }\n' + + ` case 'string':\n` + + ' return z.union([interpolationSchemaPartial, schema]) as unknown as InterpolatableSchema\n' + + ` case 'tuple': {\n` + + ' const tupleDef = def as { items: z.ZodTypeAny[]; rest?: z.ZodTypeAny }\n' + + ' const items = tupleDef.items.map(interpolateRecursive)\n' + + ' const tuple = items.length === 0 ? z.tuple([]) : z.tuple(items as [z.ZodTypeAny, ...z.ZodTypeAny[]])\n' + + ' return z.union([\n' + + ' interpolationSchemaFull,\n' + + ' tupleDef.rest ? tuple.rest(tupleDef.rest) : tuple,\n' + + ' ]) as unknown as InterpolatableSchema\n' + + ' }\n' + + ` case 'union': {\n` + + ' const unionDef = def as { options: z.ZodTypeAny[]; discriminator?: string }\n' + + ' if (unionDef.discriminator) {\n' + + ' return schema as unknown as InterpolatableSchema\n' + + ' }\n' + + ' return z.union([interpolationSchemaFull, ...unionDef.options.map(interpolateRecursive)]) as unknown as InterpolatableSchema\n' + + ' }\n' + + ` case 'pipe':\n` + + ' return z.union([interpolationSchemaFull, schema]) as unknown as InterpolatableSchema\n' + + ' default:\n' + + ' return schema as unknown as InterpolatableSchema\n' + + ' }\n' + + '}\n\n' + + return `${contents.slice(0, start)}${replacement}${contents.slice(end)}` +} + +const patchInterpolatableRobot = (contents: string): string => { + const start = contents.indexOf('type InterpolatableRobot') + const marker = '/**\n * Fields that are shared by all Transloadit robots.' + const end = contents.indexOf(marker) + if (start === -1 || end === -1) { + return contents + } + + const replacement = + 'type InterpolatableRobot =\n' + + ' Schema extends z.ZodObject\n' + + ' ? z.ZodObject<\n' + + ' {\n' + + ' [Key in keyof T]: Key extends (typeof uninterpolatableKeys)[number]\n' + + ' ? T[Key]\n' + + ' : InterpolatableSchema\n' + + ' },\n' + + ' Config\n' + + ' >\n' + + ' : never\n\n' + + 'export function interpolateRobot(\n' + + ' schema: Schema,\n' + + '): InterpolatableRobot {\n' + + ' const def = (schema as z.core.SomeType)._zod.def as unknown\n' + + ` const shape = typeof (def as { shape: Record | (() => Record) }).shape === 'function'\n` + + ' ? (def as { shape: () => Record }).shape()\n' + + ' : (def as { shape: Record }).shape\n' + + ' return z\n' + + ' .object(\n' + + ' Object.fromEntries(\n' + + ' Object.entries(shape).map(([key, nested]) => [\n' + + ' key,\n' + + ' (uninterpolatableKeys as readonly string[]).includes(key)\n' + + ' ? nested\n' + + ' : interpolateRecursive(nested as z.ZodTypeAny),\n' + + ' ]),\n' + + ' ),\n' + + ' )\n' + + ' .strict() as InterpolatableRobot\n' + + '}\n\n' + + return `${contents.slice(0, start)}${replacement}${contents.slice(end)}` +} + +export const patchAiChatSchema = (contents: string): string => { + const jsonValueToken = 'const jsonValueSchema: z.ZodType =' + const jsonValuePatched = 'const jsonValueSchema: z.ZodType =' + const resultToken = 'result: z.unknown(),' + const resultPatched = 'result: z.unknown().optional(),' + + let next = contents + if (next.includes(jsonValueToken)) { + next = next.replace(jsonValueToken, jsonValuePatched) + } + if (next.includes(resultToken)) { + next = next.replace(resultToken, resultPatched) + } + + const hasJsonValue = next.includes(jsonValuePatched) + const hasResult = next.includes(resultPatched) + if (!hasJsonValue || !hasResult) { + const missing = [ + !hasJsonValue ? 'jsonValueSchema' : null, + !hasResult ? 'result optional' : null, + ] + .filter(Boolean) + .join(', ') + throw new Error(`ai-chat schema patch failed (${missing})`) + } + + return next +} + +const patchFile = (filePath: string, contents: string): string => { + let next = contents + if (filePath.endsWith(`${sep}robots${sep}_instructions-primitives.ts`)) { + next = patchInterpolatableHelpers(next) + next = patchInterpolatableRobot(next) + } + if (filePath.endsWith(`${sep}robots${sep}ai-chat.ts`)) { + next = patchAiChatSchema(next) + } + return next +} + +const main = async () => { + await rm(destRoot, { recursive: true, force: true }) + await mkdir(destRoot, { recursive: true }) + await cp(sourceRoot, destRoot, { recursive: true }) + + const files = await collectFiles(destRoot) + for (const file of files) { + const contents = await readFile(file, 'utf8') + const patched = patchFile( + file, + rewritePassthroughCalls(rewriteRecordCalls(rewriteZodImports(contents))), + ) + if (patched !== contents) { + await writeFile(file, patched, 'utf8') + } + } +} + +const shouldRun = (): boolean => { + if (!process.argv[1]) return false + try { + const current = realpathSync(fileURLToPath(import.meta.url)) + const invoked = realpathSync(process.argv[1]) + return current === invoked + } catch { + return false + } +} + +if (shouldRun()) { + await main() +} diff --git a/packages/zod/test/exports-sync.test.ts b/packages/zod/test/exports-sync.test.ts new file mode 100644 index 00000000..44b08c5c --- /dev/null +++ b/packages/zod/test/exports-sync.test.ts @@ -0,0 +1,46 @@ +import assert from 'node:assert/strict' +import { readdir, readFile } from 'node:fs/promises' +import { dirname, resolve } from 'node:path' +import { fileURLToPath } from 'node:url' + +const filePath = fileURLToPath(import.meta.url) +const zodRoot = resolve(dirname(filePath), '..') +const typesRoot = resolve(zodRoot, '../node/src/alphalib/types') + +const normalize = (items: string[]): string[] => [...new Set(items)].sort() + +const listTypeModules = async (): Promise => { + const entries = await readdir(typesRoot, { withFileTypes: true }) + const modules = entries + .filter((entry) => entry.isFile() && entry.name.endsWith('.ts')) + .map((entry) => entry.name.replace(/\.ts$/, '')) + modules.push('robots/_index') + return normalize(modules) +} + +const readIndexModules = async (indexPath: string): Promise => { + const contents = await readFile(indexPath, 'utf8') + const modules = contents + .split('\n') + .map((line) => line.match(/export \* from ['"]\.\/(.+?)\.(?:ts|js)['"]/)) + .filter((match): match is RegExpMatchArray => Boolean(match)) + .map((match) => match[1]) + return normalize(modules) +} + +const expected = await listTypeModules() +const v3Index = await readIndexModules(resolve(zodRoot, 'src/v3/index.ts')) +const v4Index = await readIndexModules(resolve(zodRoot, 'src/v4/index.ts')) + +assert.deepEqual( + v3Index, + expected, + 'zod v3 index exports must match packages/node/src/alphalib/types', +) +assert.deepEqual( + v4Index, + expected, + 'zod v4 index exports must match packages/node/src/alphalib/types', +) + +console.log('zod exports: ok') diff --git a/packages/zod/test/fixtures/assembly-instructions.ts b/packages/zod/test/fixtures/assembly-instructions.ts new file mode 100644 index 00000000..ecc50606 --- /dev/null +++ b/packages/zod/test/fixtures/assembly-instructions.ts @@ -0,0 +1,153 @@ +import type { AssemblyInstructionsInput } from '@transloadit/types/template' + +type AssemblyInstructionFixture = + | { name: string; value: AssemblyInstructionsInput; valid: true } + | { name: string; value: unknown; valid: false } + +const ffmpegTemplate: AssemblyInstructionsInput = { + steps: { + ':original': { + robot: '/upload/handle', + }, + 'webm-normal': { + use: ':original', + robot: '/video/encode', + ffmpeg_stack: 'v6.0.0', + preset: 'webm', + width: 1024, + height: 576, + resize_strategy: 'pad', + ffmpeg: { + b: '2000K', + }, + }, + 'webm-no-b': { + use: ':original', + robot: '/video/encode', + ffmpeg_stack: 'v6.0.0', + preset: 'webm', + width: 1024, + height: 576, + resize_strategy: 'pad', + }, + 'webm-realtime': { + use: ':original', + robot: '/video/encode', + ffmpeg_stack: 'v6.0.0', + preset: 'webm', + width: 1024, + height: 576, + resize_strategy: 'pad', + ffmpeg: { + b: '2000K', + deadline: 'realtime', + }, + }, + 'webm-good': { + use: ':original', + robot: '/video/encode', + ffmpeg_stack: 'v6.0.0', + preset: 'webm', + width: 1024, + height: 576, + resize_strategy: 'pad', + ffmpeg: { + b: '2000K', + deadline: 'good', + 'cpu-used': '2', + }, + }, + }, +} + +const invalidRotateTemplate = { + steps: { + import_video: { + robot: '/http/import', + url: 'https://tmp-eu-west-1.transloadit.net/example.mp4', + }, + encode: { + robot: '/video/encode', + use: 'import_video', + ffmpeg_stack: 'v6.0.0', + preset: 'web/mp4/4k', + rotate: 355, + }, + }, +} satisfies Record + +const basicImageResizeTemplate: AssemblyInstructionsInput = { + steps: { + ':original': { + robot: '/upload/handle', + }, + resized: { + robot: '/image/resize', + use: ':original', + width: 1024, + height: 768, + resize_strategy: 'fit', + }, + }, +} + +const importResizeStoreTemplate: AssemblyInstructionsInput = { + steps: { + imported: { + robot: '/http/import', + url: 'https://demos.transloadit.com/${fields.input}', + }, + resized: { + use: 'imported', + robot: '/image/resize', + width: 300, + height: 200, + }, + stored: { + robot: '/s3/store', + use: ['resized'], + credentials: 'YOUR_S3_CREDENTIALS', + }, + }, +} + +const importServeTemplate: AssemblyInstructionsInput = { + steps: { + imported: { + robot: '/http/import', + url: 'https://demos.transloadit.com/${fields.input}', + }, + served: { + robot: '/file/serve', + use: 'imported', + }, + }, +} + +export const assemblyInstructionFixtures: AssemblyInstructionFixture[] = [ + { + name: 'ffmpeg-template', + value: ffmpegTemplate, + valid: true, + }, + { + name: 'rotate-invalid', + value: invalidRotateTemplate, + valid: false, + }, + { + name: 'basic-image-resize', + value: basicImageResizeTemplate, + valid: true, + }, + { + name: 'import-resize-store', + value: importResizeStoreTemplate, + valid: true, + }, + { + name: 'import-serve', + value: importServeTemplate, + valid: true, + }, +] diff --git a/packages/zod/test/fixtures/assembly-status.ts b/packages/zod/test/fixtures/assembly-status.ts new file mode 100644 index 00000000..b527da40 --- /dev/null +++ b/packages/zod/test/fixtures/assembly-status.ts @@ -0,0 +1,256 @@ +type AssemblyStatusFixture = + | { name: string; value: unknown; valid: true } + | { name: string; value: unknown; valid: false } + +const assemblyStatusOk = { + ok: 'ASSEMBLY_COMPLETED', + http_code: 200, + message: 'The Assembly was successfully completed.', + assembly_id: '4723718834074932b22a59b209220018', + parent_id: null, + account_id: '4ce4fb3d9d1842b6ba5d6f3ccee4b066', + account_name: 'examples-section-prod', + account_slug: 'examples-section-prod', + template_id: null, + template_name: null, + instance: 'spenge.transloadit.com', + assembly_url: 'http://api2.spenge.transloadit.com/assemblies/4723718834074932b22a59b209220018', + assembly_ssl_url: + 'https://api2-spenge.transloadit.com/assemblies/4723718834074932b22a59b209220018', + uppyserver_url: 'https://api2-spenge.transloadit.com/companion/', + companion_url: 'https://api2-spenge.transloadit.com/companion/', + websocket_url: 'https://api2-spenge.transloadit.com/ws20008', + update_stream_url: + 'https://api2-spenge.transloadit.com/ws20008?assembly=4723718834074932b22a59b209220018', + tus_url: 'https://api2-spenge.transloadit.com/resumable/files/', + bytes_received: 1113, + bytes_expected: 1113, + upload_duration: 0.325, + client_agent: null, + client_ip: null, + client_referer: null, + transloadit_client: 'node-sdk:3.0.2', + start_date: '2023/12/20 16:36:27 GMT', + upload_meta_data_extracted: true, + warnings: [], + is_infinite: false, + has_dupe_jobs: false, + execution_start: '2023/12/20 16:36:27 GMT', + execution_duration: 1.399, + queue_duration: 0.421, + jobs_queue_duration: 0.04, + notify_start: null, + notify_url: null, + notify_response_code: null, + notify_response_data: null, + notify_duration: null, + last_job_completed: '2023/12/20 16:36:28 GMT', + fields: {}, + running_jobs: [], + bytes_usage: 1048639, + executing_jobs: [], + started_jobs: [ + ':original:::original', + 'converted:::original', + 'exported:::original', + 'exported::converted', + ], + parent_assembly_status: null, + params: + '{"steps":{":original":{"robot":"/upload/handle"},"converted":{"use":":original","robot":"/document/convert","result":true,"format":"vtt"},"exported":{"use":["converted",":original"],"robot":"/s3/store","credentials":"demo_s3_credentials","url_prefix":"https://demos.transloadit.com/"}}, "auth":{"key":"****","expires":"2023-12-21T16:36:26.972Z"}}', + template: null, + merged_params: + '{"steps":{":original":{"robot":"/upload/handle"},"converted":{"use":":original","robot":"/document/convert","result":true,"format":"vtt"},"exported":{"use":["converted",":original"],"robot":"/s3/store","credentials":"demo_s3_credentials","url_prefix":"https://demos.transloadit.com/"}}, "auth":{"key":"****","expires":"2023-12-21T16:36:26.972Z"}}', + expected_tus_uploads: 1, + started_tus_uploads: 1, + finished_tus_uploads: 1, + tus_uploads: [ + { + filename: 'subtitle.srt', + fieldname: 'file', + size: 302, + offset: 302, + finished: true, + upload_url: + 'https://api2-buchen.transloadit.com/resumable/files/ab9753a6f59d0ef51b881a56004d9f14', + }, + ], + uploads: [ + { + id: '7e5ce0bb323044e7a9deeb7d6f6e312f', + name: 'subtitle.srt', + basename: 'subtitle', + ext: 'srt', + size: 302, + mime: 'application/x-subrip', + type: null, + field: 'file', + md5hash: '23664a1e4a8cad08d4ca6294d3d9bee3', + original_id: '7e5ce0bb323044e7a9deeb7d6f6e312f', + original_basename: 'subtitle', + original_name: 'subtitle.srt', + original_path: '/', + original_md5hash: '23664a1e4a8cad08d4ca6294d3d9bee3', + from_batch_import: false, + is_tus_file: true, + tus_upload_url: + 'https://api2-buchen.transloadit.com/resumable/files/ab9753a6f59d0ef51b881a56004d9f14', + url: 'https://demos.transloadit.com/7e/5ce0bb323044e7a9deeb7d6f6e312f/subtitle.srt', + ssl_url: 'https://demos.transloadit.com/7e/5ce0bb323044e7a9deeb7d6f6e312f/subtitle.srt', + meta: {}, + is_temp_url: false, + }, + ], + results: { + ':original': [ + { + id: '7e5ce0bb323044e7a9deeb7d6f6e312f', + name: 'subtitle.srt', + basename: 'subtitle', + ext: 'srt', + size: 302, + mime: 'application/x-subrip', + type: null, + field: 'file', + md5hash: '23664a1e4a8cad08d4ca6294d3d9bee3', + original_id: '7e5ce0bb323044e7a9deeb7d6f6e312f', + original_basename: 'subtitle', + original_name: 'subtitle.srt', + original_path: '/', + original_md5hash: '23664a1e4a8cad08d4ca6294d3d9bee3', + from_batch_import: false, + is_tus_file: false, + tus_upload_url: null, + url: 'https://demos.transloadit.com/7e/5ce0bb323044e7a9deeb7d6f6e312f/subtitle.srt', + ssl_url: 'https://demos.transloadit.com/7e/5ce0bb323044e7a9deeb7d6f6e312f/subtitle.srt', + meta: {}, + is_temp_url: false, + queue: 'live', + queue_time: 0.02, + exec_time: 0.43, + cost: 61, + }, + ], + converted: [ + { + id: '5a6d14421bb9494b8b01edb4f674d767', + name: 'subtitle.vtt', + basename: 'subtitle', + ext: 'vtt', + size: 328, + mime: 'text/vtt', + type: null, + field: 'file', + md5hash: '30aabe4875747e49e1bc1be0ed2d7acb', + original_id: '7e5ce0bb323044e7a9deeb7d6f6e312f', + original_basename: 'subtitle', + original_name: 'subtitle.srt', + original_path: '/', + original_md5hash: '23664a1e4a8cad08d4ca6294d3d9bee3', + from_batch_import: false, + is_tus_file: false, + tus_upload_url: null, + url: 'https://demos.transloadit.com/5a/6d14421bb9494b8b01edb4f674d767/subtitle.vtt', + ssl_url: 'https://demos.transloadit.com/5a/6d14421bb9494b8b01edb4f674d767/subtitle.vtt', + meta: {}, + is_temp_url: false, + queue: 'live', + queue_time: 0.02, + exec_time: 0.47, + cost: 1048576, + }, + ], + }, + build_id: '7261900535', +} + +const assemblyStatusUploading = { + ok: 'ASSEMBLY_UPLOADING', + assembly_id: 'b841ea401e1a11e7b37d7bda1b503cdd', + assembly_ssl_url: + 'https://api2-freja.transloadit.com/assemblies/b841ea401e1a11e7b37d7bda1b503cdd', + websocket_url: 'https://api2-freja.transloadit.com/ws20277', + tus_url: 'https://api2-freja.transloadit.com/resumable/files/', + expected_tus_uploads: 2, + started_tus_uploads: 0, + finished_tus_uploads: 0, +} + +const assemblyStatusExpired = { + error: 'ASSEMBLY_EXPIRED', + http_code: 200, + message: 'The Assembly expired.', + ok: null, + assembly_id: '8b9dd2803eee11f0810ddf94e3864ef6', + parent_id: null, + account_id: '47c2abfc5ae1437ca330bc628dddd557', + account_name: null, + account_slug: null, + api_auth_key_id: '5db01f1876a84a998b583f82b24eddf6', + template_id: null, + template_name: null, + instance: 'u535up.transloadit.com', + region: 'us-east-1', + assembly_url: 'http://api2-u535up.transloadit.com/assemblies/8b9dd2803eee11f0810ddf94e3864ef6', + assembly_ssl_url: + 'https://api2-u535up.transloadit.com/assemblies/8b9dd2803eee11f0810ddf94e3864ef6', + uppyserver_url: 'https://api2-u535up.transloadit.com/companion/', + companion_url: 'https://api2-u535up.transloadit.com/companion/', + websocket_url: 'https://api2-u535up.transloadit.com/ws20011', + update_stream_url: + 'https://api2-u535up.transloadit.com/ws20011?assembly=8b9dd2803eee11f0810ddf94e3864ef6', + tus_url: 'https://api2-u535up.transloadit.com/resumable/files/', + bytes_received: 0, + bytes_expected: 0, + upload_duration: 0.132, + client_agent: null, + client_ip: null, + client_referer: null, + start_date: '2025/06/01 13:44:31 GMT', + upload_meta_data_extracted: false, + warnings: [], + is_infinite: false, + has_dupe_jobs: false, + execution_start: '2025-06-01T13:44:31.000Z', + execution_duration: 28805.262, + queue_duration: 0, + jobs_queue_duration: 0, + notify_start: null, + notify_url: null, + notify_response_code: null, + notify_response_data: null, + notify_duration: null, + last_job_completed: null, + fields: {}, + running_jobs: [], + bytes_usage: 3024, + usage_tags: '', + executing_jobs: [], + started_jobs: [], + parent_assembly_status: null, + params: null, + template: null, + merged_params: null, + num_input_files: 0, + uploads: [], + results: {}, + build_id: '15302315784', +} + +export const assemblyStatusFixtures: AssemblyStatusFixture[] = [ + { + name: 'demo-ok', + value: assemblyStatusOk, + valid: true, + }, + { + name: 'busy-uploading', + value: assemblyStatusUploading, + valid: true, + }, + { + name: 'expired-error', + value: assemblyStatusExpired, + valid: true, + }, +] diff --git a/packages/zod/test/patch-ai-chat-schema.test.ts b/packages/zod/test/patch-ai-chat-schema.test.ts new file mode 100644 index 00000000..ceb2b7e7 --- /dev/null +++ b/packages/zod/test/patch-ai-chat-schema.test.ts @@ -0,0 +1,37 @@ +import assert from 'node:assert/strict' +import { patchAiChatSchema } from '../scripts/sync-v4.ts' + +const source = ` +const jsonValueSchema: z.ZodType = + z.union([z.string()]) + +const responseSchema = z.object({ + result: z.unknown(), +}) +` + +const patched = patchAiChatSchema(source) +assert.ok( + patched.includes('const jsonValueSchema: z.ZodType ='), + 'should widen jsonValueSchema to ZodType', +) +assert.ok(patched.includes('result: z.unknown().optional(),'), 'should make result optional') + +const alreadyPatched = ` +const jsonValueSchema: z.ZodType = + z.union([z.string()]) + +const responseSchema = z.object({ + result: z.unknown().optional(), +}) +` + +assert.equal( + patchAiChatSchema(alreadyPatched), + alreadyPatched, + 'should be a no-op when already patched', +) + +assert.throws(() => patchAiChatSchema('const jsonValueSchema: z.ZodType = z.string()'), /ai-chat/i) + +console.log('ai-chat schema patching: ok') diff --git a/packages/zod/test/runtime-parity.test.ts b/packages/zod/test/runtime-parity.test.ts new file mode 100644 index 00000000..fdf3ea25 --- /dev/null +++ b/packages/zod/test/runtime-parity.test.ts @@ -0,0 +1,86 @@ +import assert from 'node:assert/strict' + +import { assemblyStatusSchema as v3AssemblyStatus } from '../src/v3/assemblyStatus.ts' +import { + robotBase as v3RobotBase, + robotFFmpeg as v3RobotFFmpeg, +} from '../src/v3/robots/_instructions-primitives.ts' +import { assemblyInstructionsSchema as v3AssemblyInstructions } from '../src/v3/template.ts' +import { assemblyStatusSchema as v4AssemblyStatus } from '../src/v4/assemblyStatus.ts' +import { + robotBase as v4RobotBase, + robotFFmpeg as v4RobotFFmpeg, +} from '../src/v4/robots/_instructions-primitives.ts' +import { assemblyInstructionsSchema as v4AssemblyInstructions } from '../src/v4/template.ts' +import { assemblyInstructionFixtures } from './fixtures/assembly-instructions.ts' +import { assemblyStatusFixtures } from './fixtures/assembly-status.ts' + +const schemas = [ + { + name: 'assemblyStatus', + v3: v3AssemblyStatus, + v4: v4AssemblyStatus, + fixtures: assemblyStatusFixtures, + }, + { + name: 'assemblyInstructions', + v3: v3AssemblyInstructions, + v4: v4AssemblyInstructions, + fixtures: assemblyInstructionFixtures, + }, +] + +for (const schema of schemas) { + for (const fixture of schema.fixtures) { + const v3Result = schema.v3.safeParse(fixture.value) + const v4Result = schema.v4.safeParse(fixture.value) + + assert.equal( + v3Result.success, + v4Result.success, + `${schema.name}:${fixture.name} v3/v4 mismatch`, + ) + assert.equal( + v3Result.success, + fixture.valid, + `${schema.name}:${fixture.name} expected valid=${fixture.valid}`, + ) + } +} + +const passthroughFixture = { + ffmpeg: { + unexpected_option: 'keep-me', + }, +} +const v3Passthrough = v3RobotFFmpeg.safeParse(passthroughFixture) +const v4Passthrough = v4RobotFFmpeg.safeParse(passthroughFixture) +assert.equal(v3Passthrough.success, true, 'robotFFmpeg v3 passthrough should parse') +assert.equal(v4Passthrough.success, true, 'robotFFmpeg v4 passthrough should parse') +if (v3Passthrough.success) { + assert.equal( + (v3Passthrough.data.ffmpeg as Record).unexpected_option, + 'keep-me', + 'robotFFmpeg v3 should preserve passthrough keys', + ) +} +if (v4Passthrough.success) { + assert.equal( + (v4Passthrough.data.ffmpeg as Record).unexpected_option, + 'keep-me', + 'robotFFmpeg v4 should preserve passthrough keys', + ) +} + +const outputMetaValid = { output_meta: { has_transparency: true } } +const outputMetaInvalid = { output_meta: { has_transparency: 1 } } +const v3OutputMetaValid = v3RobotBase.safeParse(outputMetaValid) +const v4OutputMetaValid = v4RobotBase.safeParse(outputMetaValid) +const v3OutputMetaInvalid = v3RobotBase.safeParse(outputMetaInvalid) +const v4OutputMetaInvalid = v4RobotBase.safeParse(outputMetaInvalid) +assert.equal(v3OutputMetaValid.success, true, 'robotBase v3 output_meta valid should parse') +assert.equal(v4OutputMetaValid.success, true, 'robotBase v4 output_meta valid should parse') +assert.equal(v3OutputMetaInvalid.success, false, 'robotBase v3 output_meta invalid should fail') +assert.equal(v4OutputMetaInvalid.success, false, 'robotBase v4 output_meta invalid should fail') + +console.log('zod runtime parity: ok') diff --git a/packages/zod/test/scripts-config.test.ts b/packages/zod/test/scripts-config.test.ts new file mode 100644 index 00000000..97e19d12 --- /dev/null +++ b/packages/zod/test/scripts-config.test.ts @@ -0,0 +1,29 @@ +import assert from 'node:assert/strict' +import { readFile } from 'node:fs/promises' +import { dirname, resolve } from 'node:path' +import { fileURLToPath } from 'node:url' + +const filePath = fileURLToPath(import.meta.url) +const zodRoot = resolve(dirname(filePath), '..') +const packageJsonPath = resolve(zodRoot, 'package.json') +const packageJson = JSON.parse(await readFile(packageJsonPath, 'utf8')) as { + scripts?: Record +} + +const scripts = packageJson.scripts ?? {} +const requiredScripts = ['sync:v3', 'sync:v4', 'test:unit'] + +for (const scriptName of requiredScripts) { + const script = scripts[scriptName] + assert.ok(script, `Missing ${scriptName} script in package.json`) + assert.ok( + script.includes('node '), + `${scriptName} should invoke node directly for TypeScript scripts`, + ) + assert.ok( + !script.includes('--experimental-strip-types'), + `${scriptName} should not use --experimental-strip-types (Node 22.18+ runs .ts directly)`, + ) +} + +console.log('zod scripts config: ok') diff --git a/packages/zod/test/type-equality-v3.ts b/packages/zod/test/type-equality-v3.ts new file mode 100644 index 00000000..ea041099 --- /dev/null +++ b/packages/zod/test/type-equality-v3.ts @@ -0,0 +1,17 @@ +import type { AssemblyStatus } from '@transloadit/types/assemblyStatus' +import type { AssemblyInstructions } from '@transloadit/types/template' +import type { z } from 'zod/v3' +import type { assemblyStatusSchema } from '../src/v3/assemblyStatus.js' +import type { assemblyInstructionsSchema } from '../src/v3/template.js' + +type Equal = + (() => T extends A ? 1 : 2) extends () => T extends B ? 1 : 2 ? true : false + +type Assert = T + +export type _AssemblyStatusCheck = Assert< + Equal> +> +export type _AssemblyInstructionsCheck = Assert< + Equal> +> diff --git a/packages/zod/test/type-equality-v4.ts b/packages/zod/test/type-equality-v4.ts new file mode 100644 index 00000000..d6c6e5f5 --- /dev/null +++ b/packages/zod/test/type-equality-v4.ts @@ -0,0 +1,16 @@ +import type { AssemblyStatus } from '@transloadit/types/assemblyStatus' +import type { AssemblyInstructions } from '@transloadit/types/template' +import type { z } from 'zod/v4' +import type { assemblyStatusSchema } from '../src/v4/assemblyStatus.js' +import type { assemblyInstructionsSchema } from '../src/v4/template.js' + +type Equal = [A] extends [B] ? ([B] extends [A] ? true : false) : false + +type Assert = T + +export type _AssemblyStatusCheck = Assert< + Equal> +> +export type _AssemblyInstructionsCheck = Assert< + Equal> +> diff --git a/packages/zod/tsconfig.build.json b/packages/zod/tsconfig.build.json new file mode 100644 index 00000000..4d8b7c4b --- /dev/null +++ b/packages/zod/tsconfig.build.json @@ -0,0 +1,20 @@ +{ + "include": ["src"], + "exclude": ["dist", "test"], + "compilerOptions": { + "composite": true, + "declaration": true, + "declarationMap": true, + "erasableSyntaxOnly": true, + "isolatedModules": true, + "module": "NodeNext", + "allowImportingTsExtensions": true, + "target": "ES2022", + "noImplicitOverride": true, + "rewriteRelativeImportExtensions": true, + "outDir": "dist", + "rootDir": "src", + "resolveJsonModule": true, + "strict": true + } +} diff --git a/packages/zod/tsconfig.json b/packages/zod/tsconfig.json new file mode 100644 index 00000000..455c333e --- /dev/null +++ b/packages/zod/tsconfig.json @@ -0,0 +1,15 @@ +{ + "files": [], + "references": [{ "path": "./tsconfig.build.json" }], + "compilerOptions": { + "checkJs": true, + "erasableSyntaxOnly": true, + "isolatedModules": true, + "module": "NodeNext", + "allowImportingTsExtensions": true, + "noImplicitOverride": true, + "noEmit": true, + "resolveJsonModule": true, + "strict": true + } +} diff --git a/packages/zod/tsconfig.test.json b/packages/zod/tsconfig.test.json new file mode 100644 index 00000000..cd96fcb3 --- /dev/null +++ b/packages/zod/tsconfig.test.json @@ -0,0 +1,12 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "moduleResolution": "NodeNext", + "paths": { + "@transloadit/types": ["../types/src/index.ts"], + "@transloadit/types/*": ["../types/src/generated/*.ts"] + } + }, + "include": ["test/type-equality-v3.ts", "test/type-equality-v4.ts", "test/runtime-parity.test.ts"] +} diff --git a/scripts/fingerprint-pack.ts b/scripts/fingerprint-pack.ts new file mode 100644 index 00000000..06278ded --- /dev/null +++ b/scripts/fingerprint-pack.ts @@ -0,0 +1,175 @@ +import { execFile, spawn } from 'node:child_process' +import { createHash } from 'node:crypto' +import { createReadStream } from 'node:fs' +import { mkdir, rm, stat, writeFile } from 'node:fs/promises' +import { resolve } from 'node:path' +import { promisify } from 'node:util' + +const execFileAsync = promisify(execFile) + +const usage = (): void => { + console.log(`Usage: node scripts/fingerprint-pack.ts [path] [options] + +Options: + -o, --out Write JSON output to a file + --ignore-scripts Pass --ignore-scripts to npm pack + --keep Keep the generated tarball + -h, --help Show help +`) +} + +interface ParsedArgs { + target: string + out: string | null + keep: boolean + ignoreScripts: boolean +} + +const parseArgs = (): ParsedArgs => { + const args = process.argv.slice(2) + let target = '.' + let out = null + let keep = false + let ignoreScripts = false + + for (let i = 0; i < args.length; i += 1) { + const arg = args[i] + if (arg === '-h' || arg === '--help') { + usage() + process.exit(0) + } + if (arg === '-o' || arg === '--out') { + out = args[i + 1] + i += 1 + continue + } + if (arg === '--keep') { + keep = true + continue + } + if (arg === '--ignore-scripts') { + ignoreScripts = true + continue + } + if (arg.startsWith('-')) { + throw new Error(`Unknown option: ${arg}`) + } + target = arg + } + + return { target, out, keep, ignoreScripts } +} + +const hashFile = async (filePath: string): Promise => + new Promise((resolvePromise, reject) => { + const hash = createHash('sha256') + const stream = createReadStream(filePath) + stream.on('error', reject) + stream.on('data', (chunk) => hash.update(chunk)) + stream.on('end', () => resolvePromise(hash.digest('hex'))) + }) + +const hashTarEntry = async ( + tarballPath: string, + entry: string, +): Promise<{ sha256: string; sizeBytes: number }> => + new Promise((resolvePromise, reject) => { + const hash = createHash('sha256') + let sizeBytes = 0 + const child = spawn('tar', ['-xOf', tarballPath, entry], { + stdio: ['ignore', 'pipe', 'pipe'], + }) + child.stdout.on('data', (chunk) => { + sizeBytes += chunk.length + hash.update(chunk) + }) + let stderr = '' + child.stderr.on('data', (chunk) => { + stderr += chunk.toString() + }) + child.on('error', reject) + child.on('close', (code) => { + if (code !== 0) { + reject(new Error(`tar failed for ${entry}: ${stderr.trim()}`)) + return + } + resolvePromise({ sha256: hash.digest('hex'), sizeBytes }) + }) + }) + +const readTarEntry = async (tarballPath: string, entry: string): Promise => { + const { stdout } = await execFileAsync('tar', ['-xOf', tarballPath, entry], { + encoding: 'utf8', + }) + return stdout +} + +const main = async (): Promise => { + const { target, out, keep, ignoreScripts } = parseArgs() + const cwd = resolve(process.cwd(), target) + + const packArgs = ['pack', '--json'] + if (ignoreScripts) { + packArgs.push('--ignore-scripts') + } + const { stdout } = await execFileAsync('npm', packArgs, { cwd, encoding: 'utf8' }) + const packed = JSON.parse(stdout.trim()) + const info = Array.isArray(packed) ? packed[0] : packed + if (!info?.filename) { + throw new Error('npm pack did not return a tarball filename') + } + + const tarballPath = resolve(cwd, info.filename) + const tarballStat = await stat(tarballPath) + const tarballSha = await hashFile(tarballPath) + + const { stdout: listStdout } = await execFileAsync('tar', ['-tf', tarballPath]) + const entries = listStdout + .split(/\r?\n/) + .map((line) => line.trim()) + .filter((line) => line.length > 0) + .filter((line) => !line.endsWith('/')) + + const files = [] + for (const entry of entries) { + const { sha256, sizeBytes } = await hashTarEntry(tarballPath, entry) + const normalized = entry.startsWith('package/') ? entry.slice('package/'.length) : entry + files.push({ path: normalized, sizeBytes, sha256 }) + } + + const packageJsonRaw = await readTarEntry(tarballPath, 'package/package.json') + const packageJson = JSON.parse(packageJsonRaw) + + const summary = { + packageDir: cwd, + tarball: { + filename: info.filename, + sizeBytes: tarballStat.size, + sha256: tarballSha, + }, + packageJson: { + name: packageJson.name, + version: packageJson.version, + main: packageJson.main, + types: packageJson.types, + exports: packageJson.exports, + files: packageJson.files, + }, + files, + } + + const json = `${JSON.stringify(summary, null, 2)}\n` + if (out) { + const outPath = resolve(process.cwd(), out) + await mkdir(resolve(outPath, '..'), { recursive: true }) + await writeFile(outPath, json) + } + + process.stdout.write(json) + + if (!keep) { + await rm(tarballPath, { force: true }) + } +} + +await main() diff --git a/scripts/pack-transloadit.ts b/scripts/pack-transloadit.ts new file mode 100644 index 00000000..9b46cba9 --- /dev/null +++ b/scripts/pack-transloadit.ts @@ -0,0 +1,39 @@ +import { execFile } from 'node:child_process' +import { readdir, rename, rm } from 'node:fs/promises' +import { dirname, resolve } from 'node:path' +import { fileURLToPath } from 'node:url' +import { promisify } from 'node:util' + +const execFileAsync = promisify(execFile) + +const filePath = fileURLToPath(import.meta.url) +const repoRoot = resolve(dirname(filePath), '..') +const legacyPackage = resolve(repoRoot, 'packages/transloadit') + +const runPack = async () => { + await execFileAsync('node', [resolve(repoRoot, 'scripts/prepare-transloadit.ts')], { + cwd: repoRoot, + }) + + await execFileAsync('npm', ['pack', '--ignore-scripts'], { + cwd: legacyPackage, + }) + + const entries = await readdir(legacyPackage) + const tarballs = entries.filter((entry) => entry.endsWith('.tgz')) + if (tarballs.length === 0) { + throw new Error('No tarball produced by npm pack') + } + + for (const tarball of tarballs) { + const from = resolve(legacyPackage, tarball) + const to = resolve(repoRoot, tarball) + await rm(to, { force: true }) + await rename(from, to) + } +} + +runPack().catch((error) => { + console.error(error) + process.exit(1) +}) diff --git a/scripts/prepare-transloadit.ts b/scripts/prepare-transloadit.ts new file mode 100644 index 00000000..ad1b916d --- /dev/null +++ b/scripts/prepare-transloadit.ts @@ -0,0 +1,71 @@ +import { execFile } from 'node:child_process' +import { cp, mkdir, readFile, rm, writeFile } from 'node:fs/promises' +import { dirname, resolve } from 'node:path' +import { fileURLToPath } from 'node:url' +import { promisify } from 'node:util' + +const execFileAsync = promisify(execFile) + +const filePath = fileURLToPath(import.meta.url) +const repoRoot = resolve(dirname(filePath), '..') +const nodePackage = resolve(repoRoot, 'packages/node') +const legacyPackage = resolve(repoRoot, 'packages/transloadit') + +const copyDir = async (from: string, to: string): Promise => { + await rm(to, { recursive: true, force: true }) + await mkdir(to, { recursive: true }) + await cp(from, to, { recursive: true }) +} + +const readJson = async (filePath: string): Promise => { + const raw = await readFile(filePath, 'utf8') + return JSON.parse(raw) +} + +const formatPackageJson = (data: Record): string => { + return `${JSON.stringify(data, null, 2)}\n` +} + +type PackageJson = Record & { scripts?: Record } + +const writeLegacyPackageJson = async (): Promise => { + const nodePackageJson = await readJson(resolve(nodePackage, 'package.json')) + const legacyExisting = await readJson(resolve(legacyPackage, 'package.json')).catch( + () => null, + ) + const scripts = { ...(nodePackageJson.scripts ?? {}) } + scripts.prepack = 'node ../../scripts/prepare-transloadit.ts' + const legacyPackageJson: PackageJson = { + ...nodePackageJson, + name: 'transloadit', + scripts, + devDependencies: legacyExisting?.devDependencies ?? nodePackageJson.devDependencies, + } + if ('publishConfig' in legacyPackageJson) { + delete legacyPackageJson.publishConfig + } + + const formatted = formatPackageJson(legacyPackageJson) + await writeFile(resolve(legacyPackage, 'package.json'), formatted) +} + +const writeLegacyChangelog = async (): Promise => { + const changelog = await readFile(resolve(nodePackage, 'CHANGELOG.md'), 'utf8') + const updated = changelog.replace(/^# .+$/m, '# transloadit') + await writeFile(resolve(legacyPackage, 'CHANGELOG.md'), updated) +} + +const main = async (): Promise => { + await execFileAsync('yarn', ['workspace', '@transloadit/node', 'prepack'], { + cwd: repoRoot, + }) + + await copyDir(resolve(nodePackage, 'dist'), resolve(legacyPackage, 'dist')) + await copyDir(resolve(nodePackage, 'src'), resolve(legacyPackage, 'src')) + await cp(resolve(repoRoot, 'README.md'), resolve(legacyPackage, 'README.md')) + await cp(resolve(repoRoot, 'LICENSE'), resolve(legacyPackage, 'LICENSE')) + await writeLegacyPackageJson() + await writeLegacyChangelog() +} + +await main() diff --git a/scripts/verify-fingerprint.ts b/scripts/verify-fingerprint.ts new file mode 100644 index 00000000..7c51dd5e --- /dev/null +++ b/scripts/verify-fingerprint.ts @@ -0,0 +1,204 @@ +import { spawnSync } from 'node:child_process' +import { readFile } from 'node:fs/promises' +import { resolve } from 'node:path' + +interface FingerprintEntry { + path: string + sizeBytes: number + sha256: string +} + +interface Fingerprint { + files: FingerprintEntry[] +} + +interface ParsedArgs { + baseline: string + current: string + allow: Set + baselinePackageJson: string | null + currentPackageJson: string | null +} + +const usage = (): void => { + console.log(`Usage: node scripts/verify-fingerprint.ts [options] + +Options: + --baseline Baseline fingerprint JSON (default: docs/fingerprint/transloadit-baseline.json) + --current Current fingerprint JSON (required) + --allow Allow drift for this file path (repeatable) + --baseline-package-json Baseline package.json (for diff output) + --current-package-json Current package.json (for diff output) + -h, --help Show help +`) +} + +const parseArgs = (): ParsedArgs => { + const args = process.argv.slice(2) + let baseline = 'docs/fingerprint/transloadit-baseline.json' + let current = '' + const allow = new Set() + let baselinePackageJson: string | null = null + let currentPackageJson: string | null = null + + for (let i = 0; i < args.length; i += 1) { + const arg = args[i] + if (arg === '-h' || arg === '--help') { + usage() + process.exit(0) + } + if (arg === '--baseline') { + baseline = args[i + 1] + i += 1 + continue + } + if (arg === '--current') { + current = args[i + 1] + i += 1 + continue + } + if (arg === '--allow') { + allow.add(args[i + 1]) + i += 1 + continue + } + if (arg === '--baseline-package-json') { + baselinePackageJson = args[i + 1] + i += 1 + continue + } + if (arg === '--current-package-json') { + currentPackageJson = args[i + 1] + i += 1 + continue + } + if (arg.startsWith('-')) { + throw new Error(`Unknown option: ${arg}`) + } + throw new Error(`Unexpected argument: ${arg}`) + } + + if (!current) { + usage() + throw new Error('Missing required --current') + } + + return { baseline, current, allow, baselinePackageJson, currentPackageJson } +} + +const readFingerprint = async (filePath: string): Promise => { + const raw = await readFile(resolve(filePath), 'utf8') + return JSON.parse(raw) as Fingerprint +} + +const indexByPath = (entries: FingerprintEntry[]): Map => { + const map = new Map() + for (const entry of entries) { + map.set(entry.path, entry) + } + return map +} + +const printDiff = (baselinePath: string, currentPath: string): void => { + const result = spawnSync('diff', ['-u', baselinePath, currentPath], { encoding: 'utf8' }) + if (result.error) { + console.log(` (diff unavailable: ${result.error.message})`) + return + } + if (result.status === 0) { + console.log(' (no content diff)') + return + } + if (result.status !== 1) { + console.log(` (diff failed with status ${result.status ?? 'unknown'})`) + return + } + const output = result.stdout.trimEnd() + if (!output) { + console.log(' (no diff output)') + return + } + const lines = output.split('\n') + const limit = 200 + const truncated = lines.length > limit + const slice = truncated ? lines.slice(0, limit) : lines + for (const line of slice) { + console.log(` ${line}`) + } + if (truncated) { + console.log(` ...diff truncated (${lines.length - limit} more lines)`) + } +} + +const main = async (): Promise => { + const { baseline, current, allow, baselinePackageJson, currentPackageJson } = parseArgs() + const baselineData = await readFingerprint(baseline) + const currentData = await readFingerprint(current) + const baselineMap = indexByPath(baselineData.files) + const currentMap = indexByPath(currentData.files) + + const missing = Array.from(baselineMap.keys()).filter((key) => !currentMap.has(key)) + const extra = Array.from(currentMap.keys()).filter((key) => !baselineMap.has(key)) + + const changed: string[] = [] + for (const [path, entry] of baselineMap.entries()) { + const currentEntry = currentMap.get(path) + if (!currentEntry) { + continue + } + if (entry.sha256 !== currentEntry.sha256 || entry.sizeBytes !== currentEntry.sizeBytes) { + changed.push(path) + } + } + + const errors: string[] = [] + const notices: string[] = [] + + if (missing.length > 0) { + errors.push(`Missing files (${missing.length}): ${missing.join(', ')}`) + } + if (extra.length > 0) { + errors.push(`Extra files (${extra.length}): ${extra.join(', ')}`) + } + + for (const path of changed) { + const baselineEntry = baselineMap.get(path) + const currentEntry = currentMap.get(path) + if (!baselineEntry || !currentEntry) { + continue + } + const details = `${path} (${baselineEntry.sha256.slice(0, 12)}:${baselineEntry.sizeBytes} -> ${currentEntry.sha256.slice(0, 12)}:${currentEntry.sizeBytes})` + if (allow.has(path)) { + notices.push(details) + continue + } + errors.push(`Unexpected drift: ${details}`) + } + + if (notices.length > 0) { + console.log(`NOTICE: allowed drift in ${notices.length} file(s)`) + for (const item of notices) { + console.log(`- ${item}`) + if ( + item.startsWith('package.json') && + baselinePackageJson && + currentPackageJson && + allow.has('package.json') + ) { + printDiff(resolve(baselinePackageJson), resolve(currentPackageJson)) + } + } + } + + if (errors.length > 0) { + console.error(`ERROR: parity check failed with ${errors.length} issue(s)`) + for (const item of errors) { + console.error(`- ${item}`) + } + process.exit(1) + } + + console.log('OK: parity check passed') +} + +await main() diff --git a/tsconfig.json b/tsconfig.json index 59824675..f242767a 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,16 +1,8 @@ { - "exclude": ["dist", "src", "coverage"], - "references": [{ "path": "./tsconfig.build.json" }], - "compilerOptions": { - "checkJs": true, - "erasableSyntaxOnly": true, - "isolatedModules": true, - "module": "NodeNext", - "allowImportingTsExtensions": true, - "noImplicitOverride": true, - "noEmit": true, - "resolveJsonModule": true, - "strict": true, - "types": ["vitest/globals"] - } + "files": [], + "references": [ + { "path": "./packages/node" }, + { "path": "./packages/types" }, + { "path": "./packages/zod" } + ] } diff --git a/yarn.lock b/yarn.lock index 1bec426a..e3edcb0d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -722,6 +722,13 @@ __metadata: languageName: node linkType: hard +"@babel/runtime@npm:^7.5.5": + version: 7.28.6 + resolution: "@babel/runtime@npm:7.28.6" + checksum: 10c0/358cf2429992ac1c466df1a21c1601d595c46930a13c1d4662fde908d44ee78ec3c183aaff513ecb01ef8c55c3624afe0309eeeb34715672dbfadb7feedb2c0d + languageName: node + linkType: hard + "@babel/types@npm:^7.25.4, @babel/types@npm:^7.27.3": version: 7.27.3 resolution: "@babel/types@npm:7.27.3" @@ -739,18 +746,18 @@ __metadata: languageName: node linkType: hard -"@biomejs/biome@npm:^2.2.4": - version: 2.2.4 - resolution: "@biomejs/biome@npm:2.2.4" - dependencies: - "@biomejs/cli-darwin-arm64": "npm:2.2.4" - "@biomejs/cli-darwin-x64": "npm:2.2.4" - "@biomejs/cli-linux-arm64": "npm:2.2.4" - "@biomejs/cli-linux-arm64-musl": "npm:2.2.4" - "@biomejs/cli-linux-x64": "npm:2.2.4" - "@biomejs/cli-linux-x64-musl": "npm:2.2.4" - "@biomejs/cli-win32-arm64": "npm:2.2.4" - "@biomejs/cli-win32-x64": "npm:2.2.4" +"@biomejs/biome@npm:^2.3.11": + version: 2.3.11 + resolution: "@biomejs/biome@npm:2.3.11" + dependencies: + "@biomejs/cli-darwin-arm64": "npm:2.3.11" + "@biomejs/cli-darwin-x64": "npm:2.3.11" + "@biomejs/cli-linux-arm64": "npm:2.3.11" + "@biomejs/cli-linux-arm64-musl": "npm:2.3.11" + "@biomejs/cli-linux-x64": "npm:2.3.11" + "@biomejs/cli-linux-x64-musl": "npm:2.3.11" + "@biomejs/cli-win32-arm64": "npm:2.3.11" + "@biomejs/cli-win32-x64": "npm:2.3.11" dependenciesMeta: "@biomejs/cli-darwin-arm64": optional: true @@ -770,66 +777,300 @@ __metadata: optional: true bin: biome: bin/biome - checksum: 10c0/7229fcc743db48f3cfd7417fb3f33d1cd9e7dfe42a12ed3c1046cd3110718237bb71ea3fe5c8b0de9bd3df2b918d0be58027602aa3720b64904b63d9cedf53e3 + checksum: 10c0/b9764070c3d1583466a8861d37dc480c18103f7bb52115db0f265a38e6343d69792c9beea094e0b3db0905cb365b9a82ad2a0f3f05b7f04873a8f9b444263140 languageName: node linkType: hard -"@biomejs/cli-darwin-arm64@npm:2.2.4": - version: 2.2.4 - resolution: "@biomejs/cli-darwin-arm64@npm:2.2.4" +"@biomejs/cli-darwin-arm64@npm:2.3.11": + version: 2.3.11 + resolution: "@biomejs/cli-darwin-arm64@npm:2.3.11" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@biomejs/cli-darwin-x64@npm:2.2.4": - version: 2.2.4 - resolution: "@biomejs/cli-darwin-x64@npm:2.2.4" +"@biomejs/cli-darwin-x64@npm:2.3.11": + version: 2.3.11 + resolution: "@biomejs/cli-darwin-x64@npm:2.3.11" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@biomejs/cli-linux-arm64-musl@npm:2.2.4": - version: 2.2.4 - resolution: "@biomejs/cli-linux-arm64-musl@npm:2.2.4" +"@biomejs/cli-linux-arm64-musl@npm:2.3.11": + version: 2.3.11 + resolution: "@biomejs/cli-linux-arm64-musl@npm:2.3.11" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@biomejs/cli-linux-arm64@npm:2.2.4": - version: 2.2.4 - resolution: "@biomejs/cli-linux-arm64@npm:2.2.4" +"@biomejs/cli-linux-arm64@npm:2.3.11": + version: 2.3.11 + resolution: "@biomejs/cli-linux-arm64@npm:2.3.11" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@biomejs/cli-linux-x64-musl@npm:2.2.4": - version: 2.2.4 - resolution: "@biomejs/cli-linux-x64-musl@npm:2.2.4" +"@biomejs/cli-linux-x64-musl@npm:2.3.11": + version: 2.3.11 + resolution: "@biomejs/cli-linux-x64-musl@npm:2.3.11" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@biomejs/cli-linux-x64@npm:2.2.4": - version: 2.2.4 - resolution: "@biomejs/cli-linux-x64@npm:2.2.4" +"@biomejs/cli-linux-x64@npm:2.3.11": + version: 2.3.11 + resolution: "@biomejs/cli-linux-x64@npm:2.3.11" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@biomejs/cli-win32-arm64@npm:2.2.4": - version: 2.2.4 - resolution: "@biomejs/cli-win32-arm64@npm:2.2.4" +"@biomejs/cli-win32-arm64@npm:2.3.11": + version: 2.3.11 + resolution: "@biomejs/cli-win32-arm64@npm:2.3.11" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@biomejs/cli-win32-x64@npm:2.2.4": - version: 2.2.4 - resolution: "@biomejs/cli-win32-x64@npm:2.2.4" +"@biomejs/cli-win32-x64@npm:2.3.11": + version: 2.3.11 + resolution: "@biomejs/cli-win32-x64@npm:2.3.11" conditions: os=win32 & cpu=x64 languageName: node linkType: hard +"@changesets/apply-release-plan@npm:^7.0.14": + version: 7.0.14 + resolution: "@changesets/apply-release-plan@npm:7.0.14" + dependencies: + "@changesets/config": "npm:^3.1.2" + "@changesets/get-version-range-type": "npm:^0.4.0" + "@changesets/git": "npm:^3.0.4" + "@changesets/should-skip-package": "npm:^0.1.2" + "@changesets/types": "npm:^6.1.0" + "@manypkg/get-packages": "npm:^1.1.3" + detect-indent: "npm:^6.0.0" + fs-extra: "npm:^7.0.1" + lodash.startcase: "npm:^4.4.0" + outdent: "npm:^0.5.0" + prettier: "npm:^2.7.1" + resolve-from: "npm:^5.0.0" + semver: "npm:^7.5.3" + checksum: 10c0/097c7ebcec758966b6728696498d59cfac23271aba2a56824ee307be1eefb2d0c6974aef1be4841e20b3458546ffacfd108c1afbf3acc512d6c3a4e30fa28622 + languageName: node + linkType: hard + +"@changesets/assemble-release-plan@npm:^6.0.9": + version: 6.0.9 + resolution: "@changesets/assemble-release-plan@npm:6.0.9" + dependencies: + "@changesets/errors": "npm:^0.2.0" + "@changesets/get-dependents-graph": "npm:^2.1.3" + "@changesets/should-skip-package": "npm:^0.1.2" + "@changesets/types": "npm:^6.1.0" + "@manypkg/get-packages": "npm:^1.1.3" + semver: "npm:^7.5.3" + checksum: 10c0/128f87975f65d9ceb2c997df186a5deae8637fd3868098bb4fb9772f35fdd3b47883ccbdc2761d0468e60a83ef4e2c1561a8e58f8052bfe2daf1ea046803fe1a + languageName: node + linkType: hard + +"@changesets/changelog-git@npm:^0.2.1": + version: 0.2.1 + resolution: "@changesets/changelog-git@npm:0.2.1" + dependencies: + "@changesets/types": "npm:^6.1.0" + checksum: 10c0/6a6fb315ffb2266fcb8f32ae9a60ccdb5436e52350a2f53beacf9822d3355f9052aba5001a718e12af472b4a8fabd69b408d0b11c02ac909ba7a183d27a9f7fd + languageName: node + linkType: hard + +"@changesets/cli@npm:^2.29.7": + version: 2.29.8 + resolution: "@changesets/cli@npm:2.29.8" + dependencies: + "@changesets/apply-release-plan": "npm:^7.0.14" + "@changesets/assemble-release-plan": "npm:^6.0.9" + "@changesets/changelog-git": "npm:^0.2.1" + "@changesets/config": "npm:^3.1.2" + "@changesets/errors": "npm:^0.2.0" + "@changesets/get-dependents-graph": "npm:^2.1.3" + "@changesets/get-release-plan": "npm:^4.0.14" + "@changesets/git": "npm:^3.0.4" + "@changesets/logger": "npm:^0.1.1" + "@changesets/pre": "npm:^2.0.2" + "@changesets/read": "npm:^0.6.6" + "@changesets/should-skip-package": "npm:^0.1.2" + "@changesets/types": "npm:^6.1.0" + "@changesets/write": "npm:^0.4.0" + "@inquirer/external-editor": "npm:^1.0.2" + "@manypkg/get-packages": "npm:^1.1.3" + ansi-colors: "npm:^4.1.3" + ci-info: "npm:^3.7.0" + enquirer: "npm:^2.4.1" + fs-extra: "npm:^7.0.1" + mri: "npm:^1.2.0" + p-limit: "npm:^2.2.0" + package-manager-detector: "npm:^0.2.0" + picocolors: "npm:^1.1.0" + resolve-from: "npm:^5.0.0" + semver: "npm:^7.5.3" + spawndamnit: "npm:^3.0.1" + term-size: "npm:^2.1.0" + bin: + changeset: bin.js + checksum: 10c0/85c32814698403f1634b649d96b8b32f04fa7f2065e455df672c0b39e9a2dc3a05538b82496536ac00aabf7810dfa68ff8049fa4f618e50ed00a29ceb302a7b5 + languageName: node + linkType: hard + +"@changesets/config@npm:^3.1.2": + version: 3.1.2 + resolution: "@changesets/config@npm:3.1.2" + dependencies: + "@changesets/errors": "npm:^0.2.0" + "@changesets/get-dependents-graph": "npm:^2.1.3" + "@changesets/logger": "npm:^0.1.1" + "@changesets/types": "npm:^6.1.0" + "@manypkg/get-packages": "npm:^1.1.3" + fs-extra: "npm:^7.0.1" + micromatch: "npm:^4.0.8" + checksum: 10c0/76065383cd5b7595f95ad7dc4aacfa74dd4ebb2ef956c30ea97e6f09b87b2e73b870676e7b294290b6cf9b1777983526bc8d3bb58dedd37dfa8a5ddbb02ebe1a + languageName: node + linkType: hard + +"@changesets/errors@npm:^0.2.0": + version: 0.2.0 + resolution: "@changesets/errors@npm:0.2.0" + dependencies: + extendable-error: "npm:^0.1.5" + checksum: 10c0/f2757c752ab04e9733b0dfd7903f1caf873f9e603794c4d9ea2294af4f937c73d07273c24be864ad0c30b6a98424360d5b96a6eab14f97f3cf2cbfd3763b95c1 + languageName: node + linkType: hard + +"@changesets/get-dependents-graph@npm:^2.1.3": + version: 2.1.3 + resolution: "@changesets/get-dependents-graph@npm:2.1.3" + dependencies: + "@changesets/types": "npm:^6.1.0" + "@manypkg/get-packages": "npm:^1.1.3" + picocolors: "npm:^1.1.0" + semver: "npm:^7.5.3" + checksum: 10c0/b9d9992440b7e09dcaf22f57d28f1d8e0e31996e1bc44dbbfa1801e44f93fa49ebba6f9356c60f6ff0bd85cd0f0d0b8602f7e0f2addc5be647b686e6f8985f70 + languageName: node + linkType: hard + +"@changesets/get-release-plan@npm:^4.0.14": + version: 4.0.14 + resolution: "@changesets/get-release-plan@npm:4.0.14" + dependencies: + "@changesets/assemble-release-plan": "npm:^6.0.9" + "@changesets/config": "npm:^3.1.2" + "@changesets/pre": "npm:^2.0.2" + "@changesets/read": "npm:^0.6.6" + "@changesets/types": "npm:^6.1.0" + "@manypkg/get-packages": "npm:^1.1.3" + checksum: 10c0/24a15056955fc3967e023f058fa6c1e7550f3aad5c299264307a09b6d312868715684595bdb45a79c3f25fc809a70582be39861f3ae958d392b89a234f65b670 + languageName: node + linkType: hard + +"@changesets/get-version-range-type@npm:^0.4.0": + version: 0.4.0 + resolution: "@changesets/get-version-range-type@npm:0.4.0" + checksum: 10c0/e466208c8383489a383f37958d8b5b9aed38539f9287b47fe155a2e8855973f6960fb1724a1ee33b11580d65e1011059045ee654e8ef51e4783017d8989c9d3f + languageName: node + linkType: hard + +"@changesets/git@npm:^3.0.4": + version: 3.0.4 + resolution: "@changesets/git@npm:3.0.4" + dependencies: + "@changesets/errors": "npm:^0.2.0" + "@manypkg/get-packages": "npm:^1.1.3" + is-subdir: "npm:^1.1.1" + micromatch: "npm:^4.0.8" + spawndamnit: "npm:^3.0.1" + checksum: 10c0/4abbdc1dec6ddc50b6ad927d9eba4f23acd775fdff615415813099befb0cecd1b0f56ceea5e18a5a3cbbb919d68179366074b02a954fbf4016501e5fd125d2b5 + languageName: node + linkType: hard + +"@changesets/logger@npm:^0.1.1": + version: 0.1.1 + resolution: "@changesets/logger@npm:0.1.1" + dependencies: + picocolors: "npm:^1.1.0" + checksum: 10c0/a0933b5bd4d99e10730b22612dc1bdfd25b8804c5b48f8cada050bf5c7a89b2ae9a61687f846a5e9e5d379a95b59fef795c8d5d91e49a251f8da2be76133f83f + languageName: node + linkType: hard + +"@changesets/parse@npm:^0.4.2": + version: 0.4.2 + resolution: "@changesets/parse@npm:0.4.2" + dependencies: + "@changesets/types": "npm:^6.1.0" + js-yaml: "npm:^4.1.1" + checksum: 10c0/fdc1c99e01257e194a5ff59213993158deae9f84a66f5444a636645ff2655f67b6031589bab796a8c3ed653220d3c55fd62a6af2504a7c54bb541ac573119c5d + languageName: node + linkType: hard + +"@changesets/pre@npm:^2.0.2": + version: 2.0.2 + resolution: "@changesets/pre@npm:2.0.2" + dependencies: + "@changesets/errors": "npm:^0.2.0" + "@changesets/types": "npm:^6.1.0" + "@manypkg/get-packages": "npm:^1.1.3" + fs-extra: "npm:^7.0.1" + checksum: 10c0/0af9396d84c47a88d79b757e9db4e3579b6620260f92c243b8349e7fcefca3c2652583f6d215c13115bed5d5cdc30c975f307fd6acbb89d205b1ba2ae403b918 + languageName: node + linkType: hard + +"@changesets/read@npm:^0.6.6": + version: 0.6.6 + resolution: "@changesets/read@npm:0.6.6" + dependencies: + "@changesets/git": "npm:^3.0.4" + "@changesets/logger": "npm:^0.1.1" + "@changesets/parse": "npm:^0.4.2" + "@changesets/types": "npm:^6.1.0" + fs-extra: "npm:^7.0.1" + p-filter: "npm:^2.1.0" + picocolors: "npm:^1.1.0" + checksum: 10c0/a0a503061764bb391e00a37df1251c90356cf46519663dd517e58bc170c290f591abc1cff44569c88c87083360a36e2d756afcf7537b8725f4decfd915f838d3 + languageName: node + linkType: hard + +"@changesets/should-skip-package@npm:^0.1.2": + version: 0.1.2 + resolution: "@changesets/should-skip-package@npm:0.1.2" + dependencies: + "@changesets/types": "npm:^6.1.0" + "@manypkg/get-packages": "npm:^1.1.3" + checksum: 10c0/484e339e7d6e6950e12bff4eda6e8eccb077c0fbb1f09dd95d2ae948b715226a838c71eaf50cd2d7e0e631ce3bfb1ca93ac752436e6feae5b87aece2e917b440 + languageName: node + linkType: hard + +"@changesets/types@npm:^4.0.1": + version: 4.1.0 + resolution: "@changesets/types@npm:4.1.0" + checksum: 10c0/a372ad21f6a1e0d4ce6c19573c1ca269eef1ad53c26751ad9515a24f003e7c49dcd859dbb1fedb6badaf7be956c1559e8798304039e0ec0da2d9a68583f13464 + languageName: node + linkType: hard + +"@changesets/types@npm:^6.1.0": + version: 6.1.0 + resolution: "@changesets/types@npm:6.1.0" + checksum: 10c0/b4cea3a4465d1eaf0bbd7be1e404aca5a055a61d4cc72aadcb73bbbda1670b4022736b8d3052616cbf1f451afa0637545d077697f4b923236539af9cd5abce6c + languageName: node + linkType: hard + +"@changesets/write@npm:^0.4.0": + version: 0.4.0 + resolution: "@changesets/write@npm:0.4.0" + dependencies: + "@changesets/types": "npm:^6.1.0" + fs-extra: "npm:^7.0.1" + human-id: "npm:^4.1.1" + prettier: "npm:^2.7.1" + checksum: 10c0/311f4d0e536d1b5f2d3f9053537d62b2d4cdbd51e1d2767807ac9d1e0f380367f915d2ad370e5c73902d5a54bffd282d53fff5418c8ad31df51751d652bea826 + languageName: node + linkType: hard + "@emnapi/core@npm:^1.7.1": version: 1.7.1 resolution: "@emnapi/core@npm:1.7.1" @@ -1222,6 +1463,21 @@ __metadata: languageName: node linkType: hard +"@inquirer/external-editor@npm:^1.0.2": + version: 1.0.3 + resolution: "@inquirer/external-editor@npm:1.0.3" + dependencies: + chardet: "npm:^2.1.1" + iconv-lite: "npm:^0.7.0" + peerDependencies: + "@types/node": ">=18" + peerDependenciesMeta: + "@types/node": + optional: true + checksum: 10c0/82951cb7f3762dd78cca2ea291396841e3f4adfe26004b5badfed1cec4b6a04bb567dff94d0e41b35c61bdd7957317c64c22f58074d14b238d44e44d9e420019 + languageName: node + linkType: hard + "@isaacs/balanced-match@npm:^4.0.1": version: 4.0.1 resolution: "@isaacs/balanced-match@npm:4.0.1" @@ -1310,6 +1566,32 @@ __metadata: languageName: node linkType: hard +"@manypkg/find-root@npm:^1.1.0": + version: 1.1.0 + resolution: "@manypkg/find-root@npm:1.1.0" + dependencies: + "@babel/runtime": "npm:^7.5.5" + "@types/node": "npm:^12.7.1" + find-up: "npm:^4.1.0" + fs-extra: "npm:^8.1.0" + checksum: 10c0/0ee907698e6c73d6f1821ff630f3fec6dcf38260817c8752fec8991ac38b95ba431ab11c2773ddf9beb33d0e057f1122b00e8ffc9b8411b3fd24151413626fa6 + languageName: node + linkType: hard + +"@manypkg/get-packages@npm:^1.1.3": + version: 1.1.3 + resolution: "@manypkg/get-packages@npm:1.1.3" + dependencies: + "@babel/runtime": "npm:^7.5.5" + "@changesets/types": "npm:^4.0.1" + "@manypkg/find-root": "npm:^1.1.0" + fs-extra: "npm:^8.1.0" + globby: "npm:^11.0.0" + read-yaml-file: "npm:^1.1.0" + checksum: 10c0/f05907d1174ae28861eaa06d0efdc144f773d9a4b8b65e1e7cdc01eb93361d335351b4a336e05c6aac02661be39e8809a3f7ad28bc67b6b338071434ab442130 + languageName: node + linkType: hard + "@mswjs/interceptors@npm:^0.39.5": version: 0.39.6 resolution: "@mswjs/interceptors@npm:0.39.6" @@ -2335,6 +2617,46 @@ __metadata: languageName: node linkType: hard +"@transloadit/node@workspace:packages/node": + version: 0.0.0-use.local + resolution: "@transloadit/node@workspace:packages/node" + dependencies: + "@aws-sdk/client-s3": "npm:^3.891.0" + "@aws-sdk/s3-request-presigner": "npm:^3.891.0" + "@transloadit/sev-logger": "npm:^0.0.15" + "@types/debug": "npm:^4.1.12" + "@types/minimist": "npm:^1.2.5" + "@types/node": "npm:^24.10.3" + "@types/recursive-readdir": "npm:^2.2.4" + "@types/temp": "npm:^0.9.4" + badge-maker: "npm:^5.0.2" + clipanion: "npm:^4.0.0-rc.4" + debug: "npm:^4.4.3" + dotenv: "npm:^17.2.3" + execa: "npm:9.6.0" + form-data: "npm:^4.0.4" + got: "npm:14.4.9" + image-size: "npm:^2.0.2" + into-stream: "npm:^9.0.0" + is-stream: "npm:^4.0.1" + minimatch: "npm:^10.1.1" + nock: "npm:^14.0.10" + node-watch: "npm:^0.7.4" + p-map: "npm:^7.0.3" + p-queue: "npm:^9.0.1" + p-retry: "npm:^7.0.0" + recursive-readdir: "npm:^2.2.3" + rimraf: "npm:^6.1.2" + temp: "npm:^0.9.4" + tus-js-client: "npm:^4.3.1" + typanion: "npm:^3.14.0" + type-fest: "npm:^4.41.0" + zod: "npm:3.25.76" + bin: + transloadit: ./dist/cli.js + languageName: unknown + linkType: soft + "@transloadit/sev-logger@npm:^0.0.15": version: 0.0.15 resolution: "@transloadit/sev-logger@npm:0.0.15" @@ -2342,6 +2664,24 @@ __metadata: languageName: node linkType: hard +"@transloadit/types@workspace:*, @transloadit/types@workspace:packages/types": + version: 0.0.0-use.local + resolution: "@transloadit/types@workspace:packages/types" + dependencies: + zod: "npm:3.25.76" + languageName: unknown + linkType: soft + +"@transloadit/zod@workspace:packages/zod": + version: 0.0.0-use.local + resolution: "@transloadit/zod@workspace:packages/zod" + dependencies: + "@transloadit/types": "workspace:*" + type-fest: "npm:^4.41.0" + zod: "npm:^4.0.0" + languageName: unknown + linkType: soft + "@tybys/wasm-util@npm:^0.10.1": version: 0.10.1 resolution: "@tybys/wasm-util@npm:0.10.1" @@ -2413,6 +2753,13 @@ __metadata: languageName: node linkType: hard +"@types/node@npm:^12.7.1": + version: 12.20.55 + resolution: "@types/node@npm:12.20.55" + checksum: 10c0/3b190bb0410047d489c49bbaab592d2e6630de6a50f00ba3d7d513d59401d279972a8f5a598b5bb8ddc1702f8a2f4ec57a65d93852f9c329639738e7053637d1 + languageName: node + linkType: hard + "@types/node@npm:^24.10.3": version: 24.10.4 resolution: "@types/node@npm:24.10.4" @@ -2580,6 +2927,13 @@ __metadata: languageName: node linkType: hard +"ansi-colors@npm:^4.1.1, ansi-colors@npm:^4.1.3": + version: 4.1.3 + resolution: "ansi-colors@npm:4.1.3" + checksum: 10c0/ec87a2f59902f74e61eada7f6e6fe20094a628dab765cfdbd03c3477599368768cffccdb5d3bb19a1b6c99126783a143b1fee31aab729b31ffe5836c7e5e28b9 + languageName: node + linkType: hard + "ansi-regex@npm:^5.0.1": version: 5.0.1 resolution: "ansi-regex@npm:5.0.1" @@ -2619,6 +2973,15 @@ __metadata: languageName: node linkType: hard +"argparse@npm:^1.0.7": + version: 1.0.10 + resolution: "argparse@npm:1.0.10" + dependencies: + sprintf-js: "npm:~1.0.2" + checksum: 10c0/b2972c5c23c63df66bca144dbc65d180efa74f25f8fd9b7d9a0a6c88ae839db32df3d54770dcb6460cf840d232b60695d1a6b1053f599d84e73f7437087712de + languageName: node + linkType: hard + "argparse@npm:^2.0.1": version: 2.0.1 resolution: "argparse@npm:2.0.1" @@ -2636,6 +2999,13 @@ __metadata: languageName: node linkType: hard +"array-union@npm:^2.1.0": + version: 2.1.0 + resolution: "array-union@npm:2.1.0" + checksum: 10c0/429897e68110374f39b771ec47a7161fc6a8fc33e196857c0a396dc75df0b5f65e4d046674db764330b6bb66b39ef48dd7c53b6a2ee75cfb0681e0c1a7033962 + languageName: node + linkType: hard + "arraybuffer.prototype.slice@npm:^1.0.4": version: 1.0.4 resolution: "arraybuffer.prototype.slice@npm:1.0.4" @@ -2711,6 +3081,15 @@ __metadata: languageName: node linkType: hard +"better-path-resolve@npm:1.0.0": + version: 1.0.0 + resolution: "better-path-resolve@npm:1.0.0" + dependencies: + is-windows: "npm:^1.0.0" + checksum: 10c0/7335130729d59a14b8e4753fea180ca84e287cccc20cb5f2438a95667abc5810327c414eee7b3c79ed1b5a348a40284ea872958f50caba69432c40405eb0acce + languageName: node + linkType: hard + "binary-search@npm:^1.3.5": version: 1.3.6 resolution: "binary-search@npm:1.3.6" @@ -2874,6 +3253,13 @@ __metadata: languageName: node linkType: hard +"chardet@npm:^2.1.1": + version: 2.1.1 + resolution: "chardet@npm:2.1.1" + checksum: 10c0/d8391dd412338442b3de0d3a488aa9327f8bcf74b62b8723d6bd0b85c4084d50b731320e0a7c710edb1d44de75969995d2784b80e4c13b004a6c7a0db4c6e793 + languageName: node + linkType: hard + "check-error@npm:^2.1.1": version: 2.1.1 resolution: "check-error@npm:2.1.1" @@ -2888,6 +3274,13 @@ __metadata: languageName: node linkType: hard +"ci-info@npm:^3.7.0": + version: 3.9.0 + resolution: "ci-info@npm:3.9.0" + checksum: 10c0/6f0109e36e111684291d46123d491bc4e7b7a1934c3a20dea28cba89f1d4a03acd892f5f6a81ed3855c38647e285a150e3c9ba062e38943bef57fee6c1554c3a + languageName: node + linkType: hard + "clipanion@npm:^4.0.0-rc.4": version: 4.0.0-rc.4 resolution: "clipanion@npm:4.0.0-rc.4" @@ -2977,7 +3370,7 @@ __metadata: languageName: node linkType: hard -"cross-spawn@npm:^7.0.6": +"cross-spawn@npm:^7.0.5, cross-spawn@npm:^7.0.6": version: 7.0.6 resolution: "cross-spawn@npm:7.0.6" dependencies: @@ -3110,6 +3503,22 @@ __metadata: languageName: node linkType: hard +"detect-indent@npm:^6.0.0": + version: 6.1.0 + resolution: "detect-indent@npm:6.1.0" + checksum: 10c0/dd83cdeda9af219cf77f5e9a0dc31d828c045337386cfb55ce04fad94ba872ee7957336834154f7647b89b899c3c7acc977c57a79b7c776b506240993f97acc7 + languageName: node + linkType: hard + +"dir-glob@npm:^3.0.1": + version: 3.0.1 + resolution: "dir-glob@npm:3.0.1" + dependencies: + path-type: "npm:^4.0.0" + checksum: 10c0/dcac00920a4d503e38bb64001acb19df4efc14536ada475725e12f52c16777afdee4db827f55f13a908ee7efc0cb282e2e3dbaeeb98c0993dd93d1802d3bf00c + languageName: node + linkType: hard + "dotenv@npm:^17.2.3": version: 17.2.3 resolution: "dotenv@npm:17.2.3" @@ -3158,6 +3567,16 @@ __metadata: languageName: node linkType: hard +"enquirer@npm:^2.4.1": + version: 2.4.1 + resolution: "enquirer@npm:2.4.1" + dependencies: + ansi-colors: "npm:^4.1.1" + strip-ansi: "npm:^6.0.1" + checksum: 10c0/43850479d7a51d36a9c924b518dcdc6373b5a8ae3401097d336b7b7e258324749d0ad37a1fcaa5706f04799baa05585cd7af19ebdf7667673e7694435fcea918 + languageName: node + linkType: hard + "env-paths@npm:^2.2.0": version: 2.2.1 resolution: "env-paths@npm:2.2.1" @@ -3478,6 +3897,16 @@ __metadata: languageName: node linkType: hard +"esprima@npm:^4.0.0": + version: 4.0.1 + resolution: "esprima@npm:4.0.1" + bin: + esparse: ./bin/esparse.js + esvalidate: ./bin/esvalidate.js + checksum: 10c0/ad4bab9ead0808cf56501750fd9d3fb276f6b105f987707d059005d57e182d18a7c9ec7f3a01794ebddcca676773e42ca48a32d67a250c9d35e009ca613caba3 + languageName: node + linkType: hard + "estree-walker@npm:^3.0.3": version: 3.0.3 resolution: "estree-walker@npm:3.0.3" @@ -3528,7 +3957,14 @@ __metadata: languageName: node linkType: hard -"fast-glob@npm:^3.3.3": +"extendable-error@npm:^0.1.5": + version: 0.1.7 + resolution: "extendable-error@npm:0.1.7" + checksum: 10c0/c46648b7682448428f81b157cbfe480170fd96359c55db477a839ddeaa34905a18cba0b989bafe5e83f93c2491a3fcc7cc536063ea326ba9d72e9c6e2fe736a7 + languageName: node + linkType: hard + +"fast-glob@npm:^3.2.9, fast-glob@npm:^3.3.3": version: 3.3.3 resolution: "fast-glob@npm:3.3.3" dependencies: @@ -3600,6 +4036,16 @@ __metadata: languageName: node linkType: hard +"find-up@npm:^4.1.0": + version: 4.1.0 + resolution: "find-up@npm:4.1.0" + dependencies: + locate-path: "npm:^5.0.0" + path-exists: "npm:^4.0.0" + checksum: 10c0/0406ee89ebeefa2d507feb07ec366bebd8a6167ae74aa4e34fb4c4abd06cf782a3ce26ae4194d70706f72182841733f00551c209fe575cb00bd92104056e78c1 + languageName: node + linkType: hard + "for-each@npm:^0.3.3, for-each@npm:^0.3.5": version: 0.3.5 resolution: "for-each@npm:0.3.5" @@ -3650,6 +4096,28 @@ __metadata: languageName: node linkType: hard +"fs-extra@npm:^7.0.1": + version: 7.0.1 + resolution: "fs-extra@npm:7.0.1" + dependencies: + graceful-fs: "npm:^4.1.2" + jsonfile: "npm:^4.0.0" + universalify: "npm:^0.1.0" + checksum: 10c0/1943bb2150007e3739921b8d13d4109abdc3cc481e53b97b7ea7f77eda1c3c642e27ae49eac3af074e3496ea02fde30f411ef410c760c70a38b92e656e5da784 + languageName: node + linkType: hard + +"fs-extra@npm:^8.1.0": + version: 8.1.0 + resolution: "fs-extra@npm:8.1.0" + dependencies: + graceful-fs: "npm:^4.2.0" + jsonfile: "npm:^4.0.0" + universalify: "npm:^0.1.0" + checksum: 10c0/259f7b814d9e50d686899550c4f9ded85c46c643f7fe19be69504888e007fcbc08f306fae8ec495b8b998635e997c9e3e175ff2eeed230524ef1c1684cc96423 + languageName: node + linkType: hard + "fs-minipass@npm:^3.0.0": version: 3.0.3 resolution: "fs-minipass@npm:3.0.3" @@ -3831,6 +4299,20 @@ __metadata: languageName: node linkType: hard +"globby@npm:^11.0.0": + version: 11.1.0 + resolution: "globby@npm:11.1.0" + dependencies: + array-union: "npm:^2.1.0" + dir-glob: "npm:^3.0.1" + fast-glob: "npm:^3.2.9" + ignore: "npm:^5.2.0" + merge2: "npm:^1.4.1" + slash: "npm:^3.0.0" + checksum: 10c0/b39511b4afe4bd8a7aead3a27c4ade2b9968649abab0a6c28b1a90141b96ca68ca5db1302f7c7bd29eab66bf51e13916b8e0a3d0ac08f75e1e84a39b35691189 + languageName: node + linkType: hard + "gopd@npm:^1.0.1, gopd@npm:^1.2.0": version: 1.2.0 resolution: "gopd@npm:1.2.0" @@ -3857,7 +4339,7 @@ __metadata: languageName: node linkType: hard -"graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6": +"graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.5, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6": version: 4.2.11 resolution: "graceful-fs@npm:4.2.11" checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 @@ -3979,6 +4461,15 @@ __metadata: languageName: node linkType: hard +"human-id@npm:^4.1.1": + version: 4.1.3 + resolution: "human-id@npm:4.1.3" + bin: + human-id: dist/cli.js + checksum: 10c0/c0e6aacfa71adff6e9783fc209493a7f8de92da041bea32deb3a9cd1244a4d2b89f32d5e90130e8e22da4e6fe15b61cf4e533f114927384de1418460c92b5a7a + languageName: node + linkType: hard + "human-signals@npm:^8.0.1": version: 8.0.1 resolution: "human-signals@npm:8.0.1" @@ -3995,6 +4486,22 @@ __metadata: languageName: node linkType: hard +"iconv-lite@npm:^0.7.0": + version: 0.7.2 + resolution: "iconv-lite@npm:0.7.2" + dependencies: + safer-buffer: "npm:>= 2.1.2 < 3.0.0" + checksum: 10c0/3c228920f3bd307f56bf8363706a776f4a060eb042f131cd23855ceca962951b264d0997ab38a1ad340e1c5df8499ed26e1f4f0db6b2a2ad9befaff22f14b722 + languageName: node + linkType: hard + +"ignore@npm:^5.2.0": + version: 5.3.2 + resolution: "ignore@npm:5.3.2" + checksum: 10c0/f9f652c957983634ded1e7f02da3b559a0d4cc210fca3792cb67f1b153623c9c42efdc1c4121af171e295444459fc4a9201101fb041b1104a3c000bccb188337 + languageName: node + linkType: hard + "image-size@npm:^2.0.2": version: 2.0.2 resolution: "image-size@npm:2.0.2" @@ -4284,6 +4791,15 @@ __metadata: languageName: node linkType: hard +"is-subdir@npm:^1.1.1": + version: 1.2.0 + resolution: "is-subdir@npm:1.2.0" + dependencies: + better-path-resolve: "npm:1.0.0" + checksum: 10c0/03a03ee2ee6578ce589b1cfaf00e65c86b20fd1b82c1660625557c535439a7477cda77e20c62cda6d4c99e7fd908b4619355ae2d989f4a524a35350a44353032 + languageName: node + linkType: hard + "is-symbol@npm:^1.0.4, is-symbol@npm:^1.1.1": version: 1.1.1 resolution: "is-symbol@npm:1.1.1" @@ -4337,6 +4853,13 @@ __metadata: languageName: node linkType: hard +"is-windows@npm:^1.0.0": + version: 1.0.2 + resolution: "is-windows@npm:1.0.2" + checksum: 10c0/b32f418ab3385604a66f1b7a3ce39d25e8881dee0bd30816dc8344ef6ff9df473a732bcc1ec4e84fe99b2f229ae474f7133e8e93f9241686cfcf7eebe53ba7a5 + languageName: node + linkType: hard + "isarray@npm:^2.0.5": version: 2.0.5 resolution: "isarray@npm:2.0.5" @@ -4433,6 +4956,18 @@ __metadata: languageName: node linkType: hard +"js-yaml@npm:^3.6.1": + version: 3.14.2 + resolution: "js-yaml@npm:3.14.2" + dependencies: + argparse: "npm:^1.0.7" + esprima: "npm:^4.0.0" + bin: + js-yaml: bin/js-yaml.js + checksum: 10c0/3261f25912f5dd76605e5993d0a126c2b6c346311885d3c483706cd722efe34f697ea0331f654ce27c00a42b426e524518ec89d65ed02ea47df8ad26dcc8ce69 + languageName: node + linkType: hard + "js-yaml@npm:^4.1.1": version: 4.1.1 resolution: "js-yaml@npm:4.1.1" @@ -4472,6 +5007,18 @@ __metadata: languageName: node linkType: hard +"jsonfile@npm:^4.0.0": + version: 4.0.0 + resolution: "jsonfile@npm:4.0.0" + dependencies: + graceful-fs: "npm:^4.1.6" + dependenciesMeta: + graceful-fs: + optional: true + checksum: 10c0/7dc94b628d57a66b71fb1b79510d460d662eb975b5f876d723f81549c2e9cd316d58a2ddf742b2b93a4fa6b17b2accaf1a738a0e2ea114bdfb13a32e5377e480 + languageName: node + linkType: hard + "keyv@npm:^4.5.4": version: 4.5.4 resolution: "keyv@npm:4.5.4" @@ -4519,6 +5066,15 @@ __metadata: languageName: node linkType: hard +"locate-path@npm:^5.0.0": + version: 5.0.0 + resolution: "locate-path@npm:5.0.0" + dependencies: + p-locate: "npm:^4.1.0" + checksum: 10c0/33a1c5247e87e022f9713e6213a744557a3e9ec32c5d0b5efb10aa3a38177615bf90221a5592674857039c1a0fd2063b82f285702d37b792d973e9e72ace6c59 + languageName: node + linkType: hard + "lodash._baseiteratee@npm:~4.7.0": version: 4.7.0 resolution: "lodash._baseiteratee@npm:4.7.0" @@ -4568,6 +5124,13 @@ __metadata: languageName: node linkType: hard +"lodash.startcase@npm:^4.4.0": + version: 4.4.0 + resolution: "lodash.startcase@npm:4.4.0" + checksum: 10c0/bd82aa87a45de8080e1c5ee61128c7aee77bf7f1d86f4ff94f4a6d7438fc9e15e5f03374b947be577a93804c8ad6241f0251beaf1452bf716064eeb657b3a9f0 + languageName: node + linkType: hard + "lodash.throttle@npm:^4.1.1": version: 4.1.1 resolution: "lodash.throttle@npm:4.1.1" @@ -4675,7 +5238,7 @@ __metadata: languageName: node linkType: hard -"merge2@npm:^1.3.0": +"merge2@npm:^1.3.0, merge2@npm:^1.4.1": version: 1.4.1 resolution: "merge2@npm:1.4.1" checksum: 10c0/254a8a4605b58f450308fc474c82ac9a094848081bf4c06778200207820e5193726dc563a0d2c16468810516a5c97d9d3ea0ca6585d23c58ccfff2403e8dbbeb @@ -4852,6 +5415,13 @@ __metadata: languageName: node linkType: hard +"mri@npm:^1.2.0": + version: 1.2.0 + resolution: "mri@npm:1.2.0" + checksum: 10c0/a3d32379c2554cf7351db6237ddc18dc9e54e4214953f3da105b97dc3babe0deb3ffe99cf409b38ea47cc29f9430561ba6b53b24ab8f9ce97a4b50409e4a50e7 + languageName: node + linkType: hard + "ms@npm:^2.1.3": version: 2.1.3 resolution: "ms@npm:2.1.3" @@ -5018,6 +5588,13 @@ __metadata: languageName: node linkType: hard +"outdent@npm:^0.5.0": + version: 0.5.0 + resolution: "outdent@npm:0.5.0" + checksum: 10c0/e216a4498889ba1babae06af84cdc4091f7cac86da49d22d0163b3be202a5f52efcd2bcd3dfca60a361eb3a27b4299f185c5655061b6b402552d7fcd1d040cff + languageName: node + linkType: hard + "outvariant@npm:^1.4.0, outvariant@npm:^1.4.3": version: 1.4.3 resolution: "outvariant@npm:1.4.3" @@ -5112,6 +5689,40 @@ __metadata: languageName: node linkType: hard +"p-filter@npm:^2.1.0": + version: 2.1.0 + resolution: "p-filter@npm:2.1.0" + dependencies: + p-map: "npm:^2.0.0" + checksum: 10c0/5ac34b74b3b691c04212d5dd2319ed484f591c557a850a3ffc93a08cb38c4f5540be059c6b10a185773c479ca583a91ea00c7d6c9958c815e6b74d052f356645 + languageName: node + linkType: hard + +"p-limit@npm:^2.2.0": + version: 2.3.0 + resolution: "p-limit@npm:2.3.0" + dependencies: + p-try: "npm:^2.0.0" + checksum: 10c0/8da01ac53efe6a627080fafc127c873da40c18d87b3f5d5492d465bb85ec7207e153948df6b9cbaeb130be70152f874229b8242ee2be84c0794082510af97f12 + languageName: node + linkType: hard + +"p-locate@npm:^4.1.0": + version: 4.1.0 + resolution: "p-locate@npm:4.1.0" + dependencies: + p-limit: "npm:^2.2.0" + checksum: 10c0/1b476ad69ad7f6059744f343b26d51ce091508935c1dbb80c4e0a2f397ffce0ca3a1f9f5cd3c7ce19d7929a09719d5c65fe70d8ee289c3f267cd36f2881813e9 + languageName: node + linkType: hard + +"p-map@npm:^2.0.0": + version: 2.1.0 + resolution: "p-map@npm:2.1.0" + checksum: 10c0/735dae87badd4737a2dd582b6d8f93e49a1b79eabbc9815a4d63a528d5e3523e978e127a21d784cccb637010e32103a40d2aaa3ab23ae60250b1a820ca752043 + languageName: node + linkType: hard + "p-map@npm:^7.0.2, p-map@npm:^7.0.3": version: 7.0.3 resolution: "p-map@npm:7.0.3" @@ -5145,6 +5756,13 @@ __metadata: languageName: node linkType: hard +"p-try@npm:^2.0.0": + version: 2.2.0 + resolution: "p-try@npm:2.2.0" + checksum: 10c0/c36c19907734c904b16994e6535b02c36c2224d433e01a2f1ab777237f4d86e6289fd5fd464850491e940379d4606ed850c03e0f9ab600b0ebddb511312e177f + languageName: node + linkType: hard + "package-json-from-dist@npm:^1.0.0, package-json-from-dist@npm:^1.0.1": version: 1.0.1 resolution: "package-json-from-dist@npm:1.0.1" @@ -5152,6 +5770,15 @@ __metadata: languageName: node linkType: hard +"package-manager-detector@npm:^0.2.0": + version: 0.2.11 + resolution: "package-manager-detector@npm:0.2.11" + dependencies: + quansync: "npm:^0.2.7" + checksum: 10c0/247991de461b9e731f3463b7dae9ce187e53095b7b94d7d96eec039abf418b61ccf74464bec1d0c11d97311f33472e77baccd4c5898f77358da4b5b33395e0b1 + languageName: node + linkType: hard + "parse-json@npm:^4.0.0": version: 4.0.0 resolution: "parse-json@npm:4.0.0" @@ -5169,6 +5796,13 @@ __metadata: languageName: node linkType: hard +"path-exists@npm:^4.0.0": + version: 4.0.0 + resolution: "path-exists@npm:4.0.0" + checksum: 10c0/8c0bd3f5238188197dc78dced15207a4716c51cc4e3624c44fc97acf69558f5ebb9a2afff486fe1b4ee148e0c133e96c5e11a9aa5c48a3006e3467da070e5e1b + languageName: node + linkType: hard + "path-is-absolute@npm:^1.0.0": version: 1.0.1 resolution: "path-is-absolute@npm:1.0.1" @@ -5233,6 +5867,13 @@ __metadata: languageName: node linkType: hard +"path-type@npm:^4.0.0": + version: 4.0.0 + resolution: "path-type@npm:4.0.0" + checksum: 10c0/666f6973f332f27581371efaf303fd6c272cc43c2057b37aa99e3643158c7e4b2626549555d88626e99ea9e046f82f32e41bbde5f1508547e9a11b149b52387c + languageName: node + linkType: hard + "pathe@npm:^2.0.3": version: 2.0.3 resolution: "pathe@npm:2.0.3" @@ -5247,7 +5888,7 @@ __metadata: languageName: node linkType: hard -"picocolors@npm:^1.1.1": +"picocolors@npm:^1.1.0, picocolors@npm:^1.1.1": version: 1.1.1 resolution: "picocolors@npm:1.1.1" checksum: 10c0/e2e3e8170ab9d7c7421969adaa7e1b31434f789afb9b3f115f6b96d91945041ac3ceb02e9ec6fe6510ff036bcc0bf91e69a1772edc0b707e12b19c0f2d6bcf58 @@ -5284,6 +5925,13 @@ __metadata: languageName: node linkType: hard +"pify@npm:^4.0.1": + version: 4.0.1 + resolution: "pify@npm:4.0.1" + checksum: 10c0/6f9d404b0d47a965437403c9b90eca8bb2536407f03de165940e62e72c8c8b75adda5516c6b9b23675a5877cc0bcac6bdfb0ef0e39414cd2476d5495da40e7cf + languageName: node + linkType: hard + "possible-typed-array-names@npm:^1.0.0": version: 1.1.0 resolution: "possible-typed-array-names@npm:1.1.0" @@ -5302,6 +5950,15 @@ __metadata: languageName: node linkType: hard +"prettier@npm:^2.7.1": + version: 2.8.8 + resolution: "prettier@npm:2.8.8" + bin: + prettier: bin-prettier.js + checksum: 10c0/463ea8f9a0946cd5b828d8cf27bd8b567345cf02f56562d5ecde198b91f47a76b7ac9eae0facd247ace70e927143af6135e8cf411986b8cb8478784a4d6d724a + languageName: node + linkType: hard + "pretty-ms@npm:^9.2.0": version: 9.3.0 resolution: "pretty-ms@npm:9.3.0" @@ -5346,6 +6003,13 @@ __metadata: languageName: node linkType: hard +"quansync@npm:^0.2.7": + version: 0.2.11 + resolution: "quansync@npm:0.2.11" + checksum: 10c0/cb9a1f8ebce074069f2f6a78578873ffedd9de9f6aa212039b44c0870955c04a71c3b1311b5d97f8ac2f2ec476de202d0a5c01160cb12bc0a11b7ef36d22ef56 + languageName: node + linkType: hard + "querystringify@npm:^2.1.1": version: 2.2.0 resolution: "querystringify@npm:2.2.0" @@ -5378,6 +6042,18 @@ __metadata: languageName: node linkType: hard +"read-yaml-file@npm:^1.1.0": + version: 1.1.0 + resolution: "read-yaml-file@npm:1.1.0" + dependencies: + graceful-fs: "npm:^4.1.5" + js-yaml: "npm:^3.6.1" + pify: "npm:^4.0.1" + strip-bom: "npm:^3.0.0" + checksum: 10c0/85a9ba08bb93f3c91089bab4f1603995ec7156ee595f8ce40ae9f49d841cbb586511508bd47b7cf78c97f678c679b2c6e2c0092e63f124214af41b6f8a25ca31 + languageName: node + linkType: hard + "recursive-readdir@npm:^2.2.3": version: 2.2.3 resolution: "recursive-readdir@npm:2.2.3" @@ -5431,6 +6107,13 @@ __metadata: languageName: node linkType: hard +"resolve-from@npm:^5.0.0": + version: 5.0.0 + resolution: "resolve-from@npm:5.0.0" + checksum: 10c0/b21cb7f1fb746de8107b9febab60095187781137fd803e6a59a76d421444b1531b641bba5857f5dc011974d8a5c635d61cec49e6bd3b7fc20e01f0fafc4efbf2 + languageName: node + linkType: hard + "resolve-pkg-maps@npm:^1.0.0": version: 1.0.0 resolution: "resolve-pkg-maps@npm:1.0.0" @@ -5801,6 +6484,13 @@ __metadata: languageName: node linkType: hard +"slash@npm:^3.0.0": + version: 3.0.0 + resolution: "slash@npm:3.0.0" + checksum: 10c0/e18488c6a42bdfd4ac5be85b2ced3ccd0224773baae6ad42cfbb9ec74fc07f9fa8396bd35ee638084ead7a2a0818eb5e7151111544d4731ce843019dab4be47b + languageName: node + linkType: hard + "smart-buffer@npm:^4.2.0": version: 4.2.0 resolution: "smart-buffer@npm:4.2.0" @@ -5843,6 +6533,16 @@ __metadata: languageName: node linkType: hard +"spawndamnit@npm:^3.0.1": + version: 3.0.1 + resolution: "spawndamnit@npm:3.0.1" + dependencies: + cross-spawn: "npm:^7.0.5" + signal-exit: "npm:^4.0.1" + checksum: 10c0/a9821a59bc78a665bd44718dea8f4f4010bb1a374972b0a6a1633b9186cda6d6fd93f22d1e49d9944d6bb175ba23ce29036a4bd624884fb157d981842c3682f3 + languageName: node + linkType: hard + "spdx-correct@npm:^3.0.0": version: 3.2.0 resolution: "spdx-correct@npm:3.2.0" @@ -5884,6 +6584,13 @@ __metadata: languageName: node linkType: hard +"sprintf-js@npm:~1.0.2": + version: 1.0.3 + resolution: "sprintf-js@npm:1.0.3" + checksum: 10c0/ecadcfe4c771890140da5023d43e190b7566d9cf8b2d238600f31bec0fc653f328da4450eb04bd59a431771a8e9cc0e118f0aa3974b683a4981b4e07abc2a5bb + languageName: node + linkType: hard + "ssri@npm:^12.0.0": version: 12.0.0 resolution: "ssri@npm:12.0.0" @@ -6090,6 +6797,13 @@ __metadata: languageName: node linkType: hard +"term-size@npm:^2.1.0": + version: 2.2.1 + resolution: "term-size@npm:2.2.1" + checksum: 10c0/89f6bba1d05d425156c0910982f9344d9e4aebf12d64bfa1f460d93c24baa7bc4c4a21d355fbd7153c316433df0538f64d0ae6e336cc4a69fdda4f85d62bc79d + languageName: node + linkType: hard + "test-exclude@npm:^7.0.1": version: 7.0.1 resolution: "test-exclude@npm:7.0.1" @@ -6155,47 +6869,48 @@ __metadata: languageName: node linkType: hard -"transloadit@workspace:.": +"transloadit-node-sdk@workspace:.": + version: 0.0.0-use.local + resolution: "transloadit-node-sdk@workspace:." + dependencies: + "@biomejs/biome": "npm:^2.3.11" + "@changesets/cli": "npm:^2.29.7" + "@types/node": "npm:^24.10.3" + "@vitest/coverage-v8": "npm:^3.2.4" + knip: "npm:^5.73.3" + npm-run-all: "npm:^4.1.5" + tsx: "npm:4.21.0" + typescript: "npm:5.9.3" + vitest: "npm:^3.2.4" + languageName: unknown + linkType: soft + +"transloadit@workspace:packages/transloadit": version: 0.0.0-use.local - resolution: "transloadit@workspace:." + resolution: "transloadit@workspace:packages/transloadit" dependencies: "@aws-sdk/client-s3": "npm:^3.891.0" "@aws-sdk/s3-request-presigner": "npm:^3.891.0" - "@biomejs/biome": "npm:^2.2.4" "@transloadit/sev-logger": "npm:^0.0.15" "@types/debug": "npm:^4.1.12" "@types/minimist": "npm:^1.2.5" "@types/node": "npm:^24.10.3" "@types/recursive-readdir": "npm:^2.2.4" - "@types/temp": "npm:^0.9.4" - "@vitest/coverage-v8": "npm:^3.2.4" - badge-maker: "npm:^5.0.2" clipanion: "npm:^4.0.0-rc.4" debug: "npm:^4.4.3" dotenv: "npm:^17.2.3" - execa: "npm:9.6.0" form-data: "npm:^4.0.4" got: "npm:14.4.9" - image-size: "npm:^2.0.2" into-stream: "npm:^9.0.0" is-stream: "npm:^4.0.1" - knip: "npm:^5.73.3" minimatch: "npm:^10.1.1" - nock: "npm:^14.0.10" node-watch: "npm:^0.7.4" - npm-run-all: "npm:^4.1.5" p-map: "npm:^7.0.3" p-queue: "npm:^9.0.1" - p-retry: "npm:^7.0.0" recursive-readdir: "npm:^2.2.3" - rimraf: "npm:^6.1.2" - temp: "npm:^0.9.4" - tsx: "npm:4.21.0" tus-js-client: "npm:^4.3.1" typanion: "npm:^3.14.0" type-fest: "npm:^4.41.0" - typescript: "npm:5.9.3" - vitest: "npm:^3.2.4" zod: "npm:3.25.76" bin: transloadit: ./dist/cli.js @@ -6378,6 +7093,13 @@ __metadata: languageName: node linkType: hard +"universalify@npm:^0.1.0": + version: 0.1.2 + resolution: "universalify@npm:0.1.2" + checksum: 10c0/e70e0339f6b36f34c9816f6bf9662372bd241714dc77508d231d08386d94f2c4aa1ba1318614f92015f40d45aae1b9075cd30bd490efbe39387b60a76ca3f045 + languageName: node + linkType: hard + "url-parse@npm:^1.5.7": version: 1.5.10 resolution: "url-parse@npm:1.5.10" @@ -6703,6 +7425,13 @@ __metadata: languageName: node linkType: hard +"zod@npm:^4.0.0": + version: 4.3.5 + resolution: "zod@npm:4.3.5" + checksum: 10c0/5a2db7e59177a3d7e202543f5136cb87b97b047b77c8a3d824098d3fa8b80d3aa40a0a5f296965c3b82dfdccdd05dbbfacce91347f16a39c675680fd7b1ab109 + languageName: node + linkType: hard + "zod@npm:^4.1.11": version: 4.2.1 resolution: "zod@npm:4.2.1"