{"_id":"@databricks/zerobus-ingest-sdk","_rev":"25-69c1ff4719d97a84090e40c0c2acf913","name":"@databricks/zerobus-ingest-sdk","dist-tags":{"latest":"1.4.0"},"versions":{"0.0.1":{"name":"@databricks/zerobus-ingest-sdk","version":"0.0.1","author":"","license":"Apache-2.0","_id":"@databricks/zerobus-ingest-sdk@0.0.1","maintainers":[{"name":"mariocadenas","email":"mariocads@gmail.com"},{"name":"fjakobs","email":"fabian.jakobs@web.de"}],"dist":{"shasum":"e921c3d0493102219aa57789b37b28300da07d5c","tarball":"https://registry.npmjs.org/@databricks/zerobus-ingest-sdk/-/zerobus-ingest-sdk-0.0.1.tgz","fileCount":1,"integrity":"sha512-UkZqkfT+ocZjZY7IRp+T8tCCU4vSK3X/AREx3Eq9hHN90IDK6al16LmKJiJ3+JzLxcl0l7H8FqKoE7ZNVOs9IQ==","signatures":[{"sig":"MEQCIDWkMBHqQHogOsIvnkRmLGziQqLmk0AxNVCw2XbEoqKXAiBSBdUSOQloeZaEH5j83sd3FivAhCC7lrYYLhy2a/OOqA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":233},"main":"index.js","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"fjakobs","email":"fabian.jakobs@web.de"},"_npmVersion":"10.9.3","description":"","directories":{},"_nodeVersion":"22.19.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/zerobus-ingest-sdk_0.0.1_1766405151161_0.6803018431382699","host":"s3://npm-registry-packages-npm-production"}},"0.1.0":{"name":"@databricks/zerobus-ingest-sdk","version":"0.1.0","keywords":["databricks","delta","streaming","ingestion","zerobus","typescript","rust"],"license":"Databricks License","_id":"@databricks/zerobus-ingest-sdk@0.1.0","maintainers":[{"name":"teodordelibasic-db","email":"teodor.delibasic@databricks.com"},{"name":"stevenxu-db","email":"steven.xu@databricks.com"},{"name":"fjakobs","email":"fabian.jakobs@web.de"}],"homepage":"https://github.com/databricks/zerobus-sdk-ts#readme","bugs":{"url":"https://github.com/databricks/zerobus-sdk-ts/issues"},"dist":{"shasum":"53321c613af41d06e2655c53eaa4fb5d7b07e7b1","tarball":"https://registry.npmjs.org/@databricks/zerobus-ingest-sdk/-/zerobus-ingest-sdk-0.1.0.tgz","fileCount":14,"integrity":"sha512-076eKRH5SEsLZF5zrRDBeLxvm6Xqd7DcXjjVlVSzcYV/hTAqf63c5xXqmaHVvE7C0tAX821w30lOCrQjxMUA3A==","signatures":[{"sig":"MEYCIQCpVWM0qomkzwbWXfdi9fc4797DlhaFfwN9uD9UtwrlWAIhAOInckzCG6Errbopils4KHJ5WodShV29sYDftiYYmPON","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5125272},"main":"index.js","napi":{"name":"zerobus-sdk-ts","triples":{"defaults":true,"additional":["x86_64-unknown-linux-musl","aarch64-unknown-linux-gnu","aarch64-apple-darwin","aarch64-unknown-linux-musl"]}},"types":"index.d.ts","engines":{"node":">= 16"},"gitHead":"f917ce4ce81b85a71112675d7781b5f6e2d5f9ed","scripts":{"test":"tsx --test test/unit.test.ts test/integration.test.ts","build":"napi build --platform --release","version":"napi version","artifacts":"napi artifacts","test:unit":"tsx --test test/unit.test.ts","universal":"napi universal","build:debug":"napi build --platform","build:proto":"mkdir -p examples/generated && pbjs -t static-module -w commonjs -o examples/generated/air_quality.js schemas/air_quality.proto && pbts -o examples/generated/air_quality.d.ts examples/generated/air_quality.js && protoc --descriptor_set_out=schemas/air_quality_descriptor.pb --include_imports schemas/air_quality.proto","example:json":"tsx examples/json.ts","example:proto":"tsx examples/proto.ts","prepublishOnly":"napi prepublish -t npm","example:parallel":"tsx examples/parallel_streams.ts","test:integration":"tsx --test test/integration.test.ts"},"_npmUser":{"name":"teodordelibasic-db","email":"teodor.delibasic@databricks.com"},"overrides":{"glob":"^10.0.0"},"repository":{"url":"git+https://github.com/databricks/zerobus-sdk-ts.git","type":"git"},"_npmVersion":"10.7.0","description":"TypeScript/Node.js SDK for streaming data ingestion into Databricks Delta tables using Zerobus","directories":{},"_nodeVersion":"20.15.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","dotenv":"^17.2.3","protobufjs":"^7.5.4","typescript":"^5.3.0","@types/node":"^20.0.0","@napi-rs/cli":"^2.18.0","protobufjs-cli":"^2.0.0"},"peerDependencies":{"protobufjs":"^7.0.0"},"optionalDependencies":{"@databricks/zerobus-ingest-sdk-darwin-x64":"0.1.0","@databricks/zerobus-ingest-sdk-darwin-arm64":"0.1.0","@databricks/zerobus-ingest-sdk-linux-x64-gnu":"0.1.0","@databricks/zerobus-ingest-sdk-linux-x64-musl":"0.1.0","@databricks/zerobus-ingest-sdk-win32-x64-msvc":"0.1.0","@databricks/zerobus-ingest-sdk-linux-arm64-gnu":"0.1.0","@databricks/zerobus-ingest-sdk-linux-arm64-musl":"0.1.0"},"peerDependenciesMeta":{"protobufjs":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/zerobus-ingest-sdk_0.1.0_1766590246947_0.7906343230838453","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@databricks/zerobus-ingest-sdk","version":"0.1.1","keywords":["databricks","delta","streaming","ingestion","zerobus","typescript","rust"],"license":"Databricks License","_id":"@databricks/zerobus-ingest-sdk@0.1.1","maintainers":[{"name":"teodordelibasic-db","email":"teodor.delibasic@databricks.com"},{"name":"stevenxu-db","email":"steven.xu@databricks.com"},{"name":"fjakobs","email":"fabian.jakobs@web.de"}],"homepage":"https://github.com/databricks/zerobus-sdk-ts#readme","bugs":{"url":"https://github.com/databricks/zerobus-sdk-ts/issues"},"dist":{"shasum":"5d393f8d21fa6f7122ad5a713de939bc19e2ff0c","tarball":"https://registry.npmjs.org/@databricks/zerobus-ingest-sdk/-/zerobus-ingest-sdk-0.1.1.tgz","fileCount":10,"integrity":"sha512-Lha8Ww3CKZVKrH9CmlPF+NMbzKnxGnmeiVukQNlFs6MhXFa+E3bYI9miYBaNxAMEPd/CCkhfp3lmB4yxmyInig==","signatures":[{"sig":"MEYCIQCdrpC++DFKpyO5kAsU7xx13/1/mEFbE465j+wPVwgyxwIhAJGbtsJF30iG+aEy2sxODIY3m+3JdeeHz5+mRfFG7Fhl","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":141370},"main":"index.js","napi":{"name":"zerobus-ingest-sdk","triples":{"defaults":true,"additional":["x86_64-unknown-linux-musl","aarch64-unknown-linux-gnu","aarch64-apple-darwin","aarch64-unknown-linux-musl"]}},"types":"index.d.ts","engines":{"node":">= 16"},"gitHead":"6b998dbd11bfb08ee034ad09760e920138eb07d5","scripts":{"test":"tsx --test test/unit.test.ts test/integration.test.ts","build":"napi build --platform --release","version":"napi version","artifacts":"napi artifacts","test:unit":"tsx --test test/unit.test.ts","universal":"napi universal","build:debug":"napi build --platform","build:proto":"mkdir -p examples/generated && pbjs -t static-module -w commonjs -o examples/generated/air_quality.js schemas/air_quality.proto && pbts -o examples/generated/air_quality.d.ts examples/generated/air_quality.js && protoc --descriptor_set_out=schemas/air_quality_descriptor.pb --include_imports schemas/air_quality.proto","example:json":"tsx examples/json.ts","example:proto":"tsx examples/proto.ts","prepublishOnly":"napi prepublish -t npm","example:parallel":"tsx examples/parallel_streams.ts","test:integration":"tsx --test test/integration.test.ts"},"_npmUser":{"name":"teodordelibasic-db","email":"teodor.delibasic@databricks.com"},"overrides":{"glob":"^10.0.0"},"repository":{"url":"git+https://github.com/databricks/zerobus-sdk-ts.git","type":"git"},"_npmVersion":"10.7.0","description":"TypeScript/Node.js SDK for streaming data ingestion into Databricks Delta tables using Zerobus","directories":{},"_nodeVersion":"20.15.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","dotenv":"^17.2.3","protobufjs":"^7.5.4","typescript":"^5.3.0","@types/node":"^20.0.0","@napi-rs/cli":"^2.18.0","protobufjs-cli":"^2.0.0"},"peerDependencies":{"protobufjs":"^7.0.0"},"optionalDependencies":{"@databricks/zerobus-ingest-sdk-darwin-x64":"0.1.1","@databricks/zerobus-ingest-sdk-darwin-arm64":"0.1.1","@databricks/zerobus-ingest-sdk-linux-x64-gnu":"0.1.1","@databricks/zerobus-ingest-sdk-linux-x64-musl":"0.1.1","@databricks/zerobus-ingest-sdk-win32-x64-msvc":"0.1.1","@databricks/zerobus-ingest-sdk-linux-arm64-gnu":"0.1.1","@databricks/zerobus-ingest-sdk-linux-arm64-musl":"0.1.1"},"peerDependenciesMeta":{"protobufjs":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/zerobus-ingest-sdk_0.1.1_1766593996761_0.7895169625843144","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@databricks/zerobus-ingest-sdk","version":"0.2.0","keywords":["databricks","delta","streaming","ingestion","zerobus","typescript","rust"],"license":"Databricks License","_id":"@databricks/zerobus-ingest-sdk@0.2.0","maintainers":[{"name":"teodordelibasic-db","email":"teodor.delibasic@databricks.com"},{"name":"stevenxu-db","email":"steven.xu@databricks.com"},{"name":"fjakobs","email":"fabian.jakobs@web.de"}],"homepage":"https://github.com/databricks/zerobus-sdk-ts#readme","bugs":{"url":"https://github.com/databricks/zerobus-sdk-ts/issues"},"dist":{"shasum":"a32431ae5bfefc23e40005e2bcf5d5c873d870c7","tarball":"https://registry.npmjs.org/@databricks/zerobus-ingest-sdk/-/zerobus-ingest-sdk-0.2.0.tgz","fileCount":17,"integrity":"sha512-bOdgoTDR0lVd6J8JNYR55sDMO0Me4O1hNSd0trGr1YIEwHVZwenBNHS0kMzfvNt4KSpWXjeBl0LRdccBZCSPTQ==","signatures":[{"sig":"MEUCIQC2UGlLQvEmCzpM7xL5DrNpiZ54QHHg0EZmOmR1qzx4xgIgSO4Qnppl44mz+OBIG10GUliVMMNokWB/y33+ETPJI1o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":15696194},"main":"index.js","napi":{"name":"zerobus-ingest-sdk","triples":{"defaults":true,"additional":["x86_64-unknown-linux-musl","aarch64-unknown-linux-gnu","aarch64-apple-darwin","aarch64-unknown-linux-musl"]}},"types":"index.d.ts","engines":{"node":">= 16"},"gitHead":"17f619686f9b03ede2edd0e414e614b1813b5c58","scripts":{"test":"tsx --test test/unit.test.ts test/integration.test.ts","build":"napi build --platform --release","version":"napi version","artifacts":"napi artifacts","test:unit":"tsx --test test/unit.test.ts","universal":"napi universal","build:arrow":"napi build --platform --release --features arrow-flight","build:debug":"napi build --platform","build:proto":"mkdir -p examples/generated && pbjs -t static-module -w commonjs -o examples/generated/air_quality.js schemas/air_quality.proto && pbts -o examples/generated/air_quality.d.ts examples/generated/air_quality.js && protoc --descriptor_set_out=schemas/air_quality_descriptor.pb --include_imports schemas/air_quality.proto","prepublishOnly":"napi prepublish -t npm","test:integration":"tsx --test test/integration.test.ts","build:debug:arrow":"napi build --platform --features arrow-flight","example:json:batch":"tsx examples/json/batch.ts","example:arrow:batch":"tsx examples/arrow/batch.ts","example:json:single":"tsx examples/json/single.ts","example:proto:batch":"tsx examples/proto/batch.ts","example:arrow:single":"tsx examples/arrow/single.ts","example:proto:single":"tsx examples/proto/single.ts"},"_npmUser":{"name":"teodordelibasic-db","email":"teodor.delibasic@databricks.com"},"overrides":{"glob":"^10.0.0"},"repository":{"url":"git+https://github.com/databricks/zerobus-sdk-ts.git","type":"git"},"_npmVersion":"10.7.0","description":"TypeScript/Node.js SDK for streaming data ingestion into Databricks Delta tables using Zerobus","directories":{},"_nodeVersion":"20.15.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","dotenv":"^17.2.3","protobufjs":"^7.5.4","typescript":"^5.3.0","@types/node":"^20.0.0","@napi-rs/cli":"^2.18.0","apache-arrow":"^18.1.0","protobufjs-cli":"^2.0.0"},"peerDependencies":{"protobufjs":"^7.0.0","apache-arrow":"^56.0.0"},"optionalDependencies":{"@databricks/zerobus-ingest-sdk-darwin-x64":"0.2.0","@databricks/zerobus-ingest-sdk-darwin-arm64":"0.2.0","@databricks/zerobus-ingest-sdk-linux-x64-gnu":"0.2.0","@databricks/zerobus-ingest-sdk-linux-x64-musl":"0.2.0","@databricks/zerobus-ingest-sdk-win32-x64-msvc":"0.2.0","@databricks/zerobus-ingest-sdk-linux-arm64-gnu":"0.2.0","@databricks/zerobus-ingest-sdk-linux-arm64-musl":"0.2.0"},"peerDependenciesMeta":{"protobufjs":{"optional":true},"apache-arrow":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/zerobus-ingest-sdk_0.2.0_1769644061792_0.08848194982388247","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@databricks/zerobus-ingest-sdk","version":"0.3.0","keywords":["databricks","delta","streaming","ingestion","zerobus","typescript","rust"],"license":"Databricks License","_id":"@databricks/zerobus-ingest-sdk@0.3.0","maintainers":[{"name":"teodordelibasic-db","email":"teodor.delibasic@databricks.com"},{"name":"stevenxu-db","email":"steven.xu@databricks.com"},{"name":"fjakobs","email":"fabian.jakobs@web.de"}],"homepage":"https://github.com/databricks/zerobus-sdk#readme","bugs":{"url":"https://github.com/databricks/zerobus-sdk/issues"},"dist":{"shasum":"d4569a1e95146cfcdb8341b5c353bc85a64c105d","tarball":"https://registry.npmjs.org/@databricks/zerobus-ingest-sdk/-/zerobus-ingest-sdk-0.3.0.tgz","fileCount":11,"integrity":"sha512-Vcqpf8tXvGc8oXZLKC+zssMtDCVjlYjKuxNqCpv10mpj90e34U9fHNWk7IIHf6WEYAiwN+t7vYKNbk8WkpVvgw==","signatures":[{"sig":"MEQCIFy+a7IAZpyKsmn2sqvPCuz2CH1shmwmdM3AKbu25YJnAiBsLFo38CPDmHmJTzjRyOtVUOlPcJxagkV3TB2Hefwrmw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@databricks%2fzerobus-ingest-sdk@0.3.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":15600016},"main":"index.js","napi":{"name":"zerobus-ingest-sdk","triples":{"defaults":false,"additional":["x86_64-unknown-linux-gnu","aarch64-unknown-linux-gnu","x86_64-pc-windows-msvc","x86_64-apple-darwin","aarch64-apple-darwin"]}},"types":"index.d.ts","engines":{"node":">= 16"},"gitHead":"6c80ce418d801def214aa1c3993e71d695a0be97","scripts":{"test":"tsx --test test/unit.test.ts test/integration.test.ts","build":"napi build --platform --release","version":"napi version","artifacts":"napi artifacts","test:unit":"tsx --test test/unit.test.ts","universal":"napi universal","build:arrow":"napi build --platform --release --features arrow-flight","build:debug":"napi build --platform","build:proto":"mkdir -p examples/generated && pbjs -t static-module -w commonjs -o examples/generated/air_quality.js schemas/air_quality.proto && pbts -o examples/generated/air_quality.d.ts examples/generated/air_quality.js && protoc --descriptor_set_out=schemas/air_quality_descriptor.pb --include_imports schemas/air_quality.proto","prepublishOnly":"napi prepublish -t npm","test:integration":"tsx --test test/integration.test.ts","build:debug:arrow":"napi build --platform --features arrow-flight","example:json:batch":"tsx examples/json/batch.ts","example:arrow:batch":"tsx examples/arrow/batch.ts","example:json:single":"tsx examples/json/single.ts","example:proto:batch":"tsx examples/proto/batch.ts","example:arrow:single":"tsx examples/arrow/single.ts","example:proto:single":"tsx examples/proto/single.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8896347d-3d9b-451d-ae5f-a063c15002aa"}},"overrides":{"glob":"^10.0.0"},"repository":{"url":"git+https://github.com/databricks/zerobus-sdk.git","type":"git"},"_npmVersion":"11.11.0","description":"TypeScript/Node.js SDK for streaming data ingestion into Databricks Delta tables using Zerobus","directories":{},"_nodeVersion":"24.13.1","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","dotenv":"^17.2.3","protobufjs":"^7.5.4","typescript":"^5.3.0","@types/node":"^20.0.0","@napi-rs/cli":"^2.18.0","apache-arrow":"^18.1.0","protobufjs-cli":"^2.0.0"},"peerDependencies":{"protobufjs":"^7.0.0","apache-arrow":"^56.0.0"},"optionalDependencies":{"@databricks/zerobus-ingest-sdk-darwin-x64":"0.3.0","@databricks/zerobus-ingest-sdk-darwin-arm64":"0.3.0","@databricks/zerobus-ingest-sdk-linux-x64-gnu":"0.3.0","@databricks/zerobus-ingest-sdk-win32-x64-msvc":"0.3.0","@databricks/zerobus-ingest-sdk-linux-arm64-gnu":"0.3.0"},"peerDependenciesMeta":{"protobufjs":{"optional":true},"apache-arrow":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/zerobus-ingest-sdk_0.3.0_1772641780679_0.9231616882401836","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@databricks/zerobus-ingest-sdk","version":"1.0.0","keywords":["databricks","delta","streaming","ingestion","zerobus","typescript","rust"],"license":"Databricks License","_id":"@databricks/zerobus-ingest-sdk@1.0.0","maintainers":[{"name":"teodordelibasic-db","email":"teodor.delibasic@databricks.com"},{"name":"stevenxu-db","email":"steven.xu@databricks.com"},{"name":"fjakobs","email":"fabian.jakobs@web.de"}],"homepage":"https://github.com/databricks/zerobus-sdk#readme","bugs":{"url":"https://github.com/databricks/zerobus-sdk/issues"},"dist":{"shasum":"800016b06ece9c73b0ce1a13629162beff5aedf9","tarball":"https://registry.npmjs.org/@databricks/zerobus-ingest-sdk/-/zerobus-ingest-sdk-1.0.0.tgz","fileCount":13,"integrity":"sha512-JnXkTbqlgzYSrEfBYLdD/XwPnJSuXYgzNbYAsWHrrz+/IXp8aG5SnrzvX5A0qlstSRcR9pA/iRv7WnQMIwXTmg==","signatures":[{"sig":"MEQCIB8PBQxrCPtMmHPLCkd16pqdrB+tFnXuceaWg36rIS52AiAT4aGD2Gh0IWlZygAYn7n8wDL6Q5LXeib9LumTDoC8Zw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@databricks%2fzerobus-ingest-sdk@1.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":25834108},"main":"index.js","napi":{"name":"zerobus-ingest-sdk","triples":{"defaults":false,"additional":["x86_64-unknown-linux-gnu","aarch64-unknown-linux-gnu","x86_64-pc-windows-msvc","x86_64-apple-darwin","aarch64-apple-darwin"]}},"types":"index.d.ts","engines":{"node":">= 16"},"gitHead":"01e78a98ae0f8bdf7a84e470ebddbce6f01854b3","scripts":{"test":"tsx --test test/unit.test.ts test/integration.test.ts","build":"napi build --platform --release","version":"napi version","artifacts":"napi artifacts","test:unit":"tsx --test test/unit.test.ts","universal":"napi universal","build:arrow":"napi build --platform --release --features arrow-flight","build:debug":"napi build --platform","build:proto":"mkdir -p examples/generated && pbjs -t static-module -w commonjs -o examples/generated/air_quality.js schemas/air_quality.proto && pbts -o examples/generated/air_quality.d.ts examples/generated/air_quality.js && protoc --descriptor_set_out=schemas/air_quality_descriptor.pb --include_imports schemas/air_quality.proto","prepublishOnly":"napi prepublish -t npm","test:integration":"tsx --test test/integration.test.ts","build:debug:arrow":"napi build --platform --features arrow-flight","example:json:batch":"tsx examples/json/batch.ts","example:arrow:batch":"tsx examples/arrow/batch.ts","example:json:single":"tsx examples/json/single.ts","example:proto:batch":"tsx examples/proto/batch.ts","example:arrow:single":"tsx examples/arrow/single.ts","example:proto:single":"tsx examples/proto/single.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:8896347d-3d9b-451d-ae5f-a063c15002aa"}},"overrides":{"glob":"^10.0.0"},"repository":{"url":"git+https://github.com/databricks/zerobus-sdk.git","type":"git"},"_npmVersion":"11.11.0","description":"TypeScript/Node.js SDK for streaming data ingestion into Databricks Delta tables using Zerobus","directories":{},"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","dotenv":"^17.2.3","protobufjs":"^7.5.4","typescript":"^5.3.0","@types/node":"^20.0.0","@napi-rs/cli":"^2.18.0","apache-arrow":"^18.1.0","protobufjs-cli":"^2.0.0"},"peerDependencies":{"protobufjs":"^7.0.0","apache-arrow":"^56.0.0"},"optionalDependencies":{"@databricks/zerobus-ingest-sdk-darwin-x64":"1.0.0","@databricks/zerobus-ingest-sdk-darwin-arm64":"1.0.0","@databricks/zerobus-ingest-sdk-linux-x64-gnu":"1.0.0","@databricks/zerobus-ingest-sdk-win32-x64-msvc":"1.0.0","@databricks/zerobus-ingest-sdk-linux-arm64-gnu":"1.0.0"},"peerDependenciesMeta":{"protobufjs":{"optional":true},"apache-arrow":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/zerobus-ingest-sdk_1.0.0_1772805428213_0.7272608693877913","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@databricks/zerobus-ingest-sdk","version":"1.0.1","keywords":["databricks","delta","streaming","ingestion","zerobus","typescript","rust"],"license":"Apache-2.0","_id":"@databricks/zerobus-ingest-sdk@1.0.1","maintainers":[{"name":"teodordelibasic-db","email":"teodor.delibasic@databricks.com"}],"homepage":"https://github.com/databricks/zerobus-sdk#readme","bugs":{"url":"https://github.com/databricks/zerobus-sdk/issues"},"dist":{"shasum":"bd926bb2f9982e0345f0588df8fdfc6204804250","tarball":"https://registry.npmjs.org/@databricks/zerobus-ingest-sdk/-/zerobus-ingest-sdk-1.0.1.tgz","fileCount":14,"integrity":"sha512-Y7368Q/oaoNnFOhdep2zjSrmi5KCvAyxAds0hypbHsypNWjz2iv2wPo8yDbgUIHBNcswB/baLWwZekU4A5u+ag==","signatures":[{"sig":"MEYCIQDQ42EYPq7WZkDBGym6dtETduJE26WO4nICV/hvFge97QIhAN6LgNlN7nUVXxXrflW+qagL17IxLOhd3nGez+IryNzw","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":16805309},"main":"index.js","napi":{"name":"zerobus-ingest-sdk","triples":{"defaults":false,"additional":["x86_64-unknown-linux-gnu","aarch64-unknown-linux-gnu","x86_64-pc-windows-msvc","x86_64-apple-darwin","aarch64-apple-darwin"]}},"_from":"file:dist/databricks-zerobus-ingest-sdk-1.0.1.tgz","types":"index.d.ts","engines":{"node":">= 16"},"scripts":{"test":"tsx --test test/unit.test.ts test/integration.test.ts","build":"napi build --platform --release","version":"napi version","artifacts":"napi artifacts","test:unit":"tsx --test test/unit.test.ts","universal":"napi universal","build:arrow":"napi build --platform --release --features arrow-flight","build:debug":"napi build --platform","build:proto":"mkdir -p examples/generated && pbjs -t static-module -w commonjs -o examples/generated/air_quality.js schemas/air_quality.proto && pbts -o examples/generated/air_quality.d.ts examples/generated/air_quality.js && protoc --descriptor_set_out=schemas/air_quality_descriptor.pb --include_imports schemas/air_quality.proto","test:integration":"tsx --test test/integration.test.ts","build:debug:arrow":"napi build --platform --features arrow-flight","example:json:batch":"tsx examples/json/batch.ts","example:arrow:batch":"tsx examples/arrow/batch.ts","example:json:single":"tsx examples/json/single.ts","example:proto:batch":"tsx examples/proto/batch.ts","example:arrow:single":"tsx examples/arrow/single.ts","example:proto:single":"tsx examples/proto/single.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e0185958-6c88-43a0-a9f8-0960e0fd31cf"}},"_resolved":"/home/runner/work/secure-public-registry-releases-eng/secure-public-registry-releases-eng/dist/databricks-zerobus-ingest-sdk-1.0.1.tgz","overrides":{"glob":"^10.0.0"},"_integrity":"sha512-Y7368Q/oaoNnFOhdep2zjSrmi5KCvAyxAds0hypbHsypNWjz2iv2wPo8yDbgUIHBNcswB/baLWwZekU4A5u+ag==","repository":{"url":"git+https://github.com/databricks/zerobus-sdk.git","type":"git"},"_npmVersion":"11.9.0","description":"TypeScript/Node.js SDK for streaming data ingestion into Databricks Delta tables using Zerobus","directories":{},"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","dotenv":"^17.2.3","protobufjs":"^7.5.4","typescript":"^5.3.0","@types/node":"^20.0.0","@napi-rs/cli":"^2.18.0","apache-arrow":"^18.1.0","protobufjs-cli":"^2.0.0"},"peerDependencies":{"protobufjs":"^7.0.0","apache-arrow":"^56.0.0"},"peerDependenciesMeta":{"protobufjs":{"optional":true},"apache-arrow":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/zerobus-ingest-sdk_1.0.1_1777021832877_0.4926265311161697","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@databricks/zerobus-ingest-sdk","version":"1.0.2","keywords":["databricks","delta","streaming","ingestion","zerobus","typescript","rust"],"license":"Apache-2.0","_id":"@databricks/zerobus-ingest-sdk@1.0.2","maintainers":[{"name":"teodordelibasic-db","email":"teodor.delibasic@databricks.com"}],"homepage":"https://github.com/databricks/zerobus-sdk#readme","bugs":{"url":"https://github.com/databricks/zerobus-sdk/issues"},"dist":{"shasum":"d75429638a9e8914d620c2659faed9fba6e4351c","tarball":"https://registry.npmjs.org/@databricks/zerobus-ingest-sdk/-/zerobus-ingest-sdk-1.0.2.tgz","fileCount":13,"integrity":"sha512-MhEh3DAwmEU6PAypIWbb29LW15Jh7CpfxocABWxdHMhXTpgDP/pedgJXka9asCvX0pi7x8fqUVHXE3Z0VkRYYg==","signatures":[{"sig":"MEUCIGkLsrXZisqXFgv4O+57L/GCCSgiIsKueBSENa/oQtOOAiEAxWvGDkXMp75Khhs6EkSwHQJnlplsZJoxehCHKq50b8o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":226029},"main":"index.js","napi":{"name":"zerobus-ingest-sdk","triples":{"defaults":false,"additional":["x86_64-unknown-linux-gnu","aarch64-unknown-linux-gnu","x86_64-pc-windows-msvc","x86_64-apple-darwin","aarch64-apple-darwin"]}},"_from":"file:dist/databricks-zerobus-ingest-sdk-1.0.2.tgz","types":"index.d.ts","engines":{"node":">= 16"},"scripts":{"test":"tsx --test test/unit.test.ts test/integration.test.ts","build":"napi build --platform --release","version":"napi version","artifacts":"napi artifacts","test:unit":"tsx --test test/unit.test.ts","universal":"napi universal","build:arrow":"napi build --platform --release --features arrow-flight","build:debug":"napi build --platform","build:proto":"mkdir -p examples/generated && pbjs -t static-module -w commonjs -o examples/generated/air_quality.js schemas/air_quality.proto && pbts -o examples/generated/air_quality.d.ts examples/generated/air_quality.js && protoc --descriptor_set_out=schemas/air_quality_descriptor.pb --include_imports schemas/air_quality.proto","test:integration":"tsx --test test/integration.test.ts","build:debug:arrow":"napi build --platform --features arrow-flight","example:json:batch":"tsx examples/json/batch.ts","example:arrow:batch":"tsx examples/arrow/batch.ts","example:json:single":"tsx examples/json/single.ts","example:proto:batch":"tsx examples/proto/batch.ts","example:arrow:single":"tsx examples/arrow/single.ts","example:proto:single":"tsx examples/proto/single.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e0185958-6c88-43a0-a9f8-0960e0fd31cf"}},"_resolved":"/home/runner/work/secure-public-registry-releases-eng/secure-public-registry-releases-eng/dist/databricks-zerobus-ingest-sdk-1.0.2.tgz","overrides":{"glob":"^10.0.0"},"_integrity":"sha512-MhEh3DAwmEU6PAypIWbb29LW15Jh7CpfxocABWxdHMhXTpgDP/pedgJXka9asCvX0pi7x8fqUVHXE3Z0VkRYYg==","repository":{"url":"git+https://github.com/databricks/zerobus-sdk.git","type":"git"},"_npmVersion":"11.9.0","description":"TypeScript/Node.js SDK for streaming data ingestion into Databricks Delta tables using Zerobus","directories":{},"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","dotenv":"^17.2.3","protobufjs":"^7.5.4","typescript":"^5.3.0","@types/node":"^20.0.0","@napi-rs/cli":"^2.18.0","apache-arrow":"^18.1.0","protobufjs-cli":"^2.0.0"},"peerDependencies":{"protobufjs":"^7.0.0","apache-arrow":"^56.0.0"},"optionalDependencies":{"@databricks/zerobus-ingest-sdk-linux-x64-gnu":"1.0.2","@databricks/zerobus-ingest-sdk-win32-x64-msvc":"1.0.2","@databricks/zerobus-ingest-sdk-linux-arm64-gnu":"1.0.2"},"peerDependenciesMeta":{"protobufjs":{"optional":true},"apache-arrow":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/zerobus-ingest-sdk_1.0.2_1777045020822_0.6435496939931351","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@databricks/zerobus-ingest-sdk","version":"1.1.0","keywords":["databricks","delta","streaming","ingestion","zerobus","typescript","rust"],"license":"Apache-2.0","_id":"@databricks/zerobus-ingest-sdk@1.1.0","maintainers":[{"name":"teodordelibasic-db","email":"teodor.delibasic@databricks.com"},{"name":"mdavids","email":"michael.davidson@databricks.com"},{"name":"stevenxu-db","email":"steven.xu@databricks.com"},{"name":"fjakobs","email":"fabian.jakobs@web.de"}],"homepage":"https://github.com/databricks/zerobus-sdk#readme","bugs":{"url":"https://github.com/databricks/zerobus-sdk/issues"},"dist":{"shasum":"ff52b38df7cdd0058328a386abe75f4da7669a14","tarball":"https://registry.npmjs.org/@databricks/zerobus-ingest-sdk/-/zerobus-ingest-sdk-1.1.0.tgz","fileCount":13,"integrity":"sha512-j0PG4MDUZvxPMnRp+3/YtF937VXtCcxYcPG6xVMJOPUNjw7nCHjCfiAMkc2Im9jjXG5UNwvmGsyYt5riM/Bpwg==","signatures":[{"sig":"MEQCIHwUM655b7xWWISnkFwYoiOFcpjg/FcWLBOhlEWFVLUEAiBa+gRoMDOxTqIWC3+UMIGQjvHbHm7ZRUYUy0oM/y8Iqg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":230102},"main":"index.js","napi":{"name":"zerobus-ingest-sdk","triples":{"defaults":false,"additional":["x86_64-unknown-linux-gnu","aarch64-unknown-linux-gnu","x86_64-pc-windows-msvc","x86_64-apple-darwin","aarch64-apple-darwin"]}},"_from":"file:dist/databricks-zerobus-ingest-sdk-1.1.0.tgz","types":"index.d.ts","engines":{"node":">= 16"},"scripts":{"test":"tsx --test test/unit.test.ts test/integration.test.ts","build":"napi build --platform --release","version":"napi version","artifacts":"napi artifacts","test:unit":"tsx --test test/unit.test.ts","universal":"napi universal","build:arrow":"napi build --platform --release --features arrow-flight","build:debug":"napi build --platform","build:proto":"mkdir -p examples/generated && pbjs -t static-module -w commonjs -o examples/generated/air_quality.js schemas/air_quality.proto && pbts -o examples/generated/air_quality.d.ts examples/generated/air_quality.js && protoc --descriptor_set_out=schemas/air_quality_descriptor.pb --include_imports schemas/air_quality.proto","example:arrow":"tsx examples/arrow/batch.ts","test:integration":"tsx --test test/integration.test.ts","build:debug:arrow":"napi build --platform --features arrow-flight","example:json:batch":"tsx examples/json/batch.ts","example:json:single":"tsx examples/json/single.ts","example:proto:batch":"tsx examples/proto/batch.ts","example:proto:single":"tsx examples/proto/single.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e0185958-6c88-43a0-a9f8-0960e0fd31cf"}},"_resolved":"/home/runner/work/secure-public-registry-releases-eng/secure-public-registry-releases-eng/dist/databricks-zerobus-ingest-sdk-1.1.0.tgz","overrides":{"glob":"^10.0.0"},"_integrity":"sha512-j0PG4MDUZvxPMnRp+3/YtF937VXtCcxYcPG6xVMJOPUNjw7nCHjCfiAMkc2Im9jjXG5UNwvmGsyYt5riM/Bpwg==","repository":{"url":"git+https://github.com/databricks/zerobus-sdk.git","type":"git"},"_npmVersion":"11.9.0","description":"TypeScript/Node.js SDK for streaming data ingestion into Databricks Delta tables using Zerobus","directories":{},"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","dotenv":"^17.2.3","protobufjs":"^7.5.4","typescript":"^5.3.0","@types/node":"^20.0.0","@napi-rs/cli":"^2.18.0","apache-arrow":"^18.1.0","protobufjs-cli":"^2.0.0"},"peerDependencies":{"protobufjs":"^7.0.0","apache-arrow":"^18.0.0"},"optionalDependencies":{"@databricks/zerobus-ingest-sdk-darwin-x64":"1.1.0","@databricks/zerobus-ingest-sdk-darwin-arm64":"1.1.0","@databricks/zerobus-ingest-sdk-linux-x64-gnu":"1.1.0","@databricks/zerobus-ingest-sdk-win32-x64-msvc":"1.1.0","@databricks/zerobus-ingest-sdk-linux-arm64-gnu":"1.1.0"},"peerDependenciesMeta":{"protobufjs":{"optional":true},"apache-arrow":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/zerobus-ingest-sdk_1.1.0_1779953470920_0.3491393495657198","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@databricks/zerobus-ingest-sdk","version":"1.2.0","keywords":["databricks","delta","streaming","ingestion","zerobus","typescript","rust"],"license":"Apache-2.0","_id":"@databricks/zerobus-ingest-sdk@1.2.0","maintainers":[],"homepage":"https://github.com/databricks/zerobus-sdk#readme","bugs":{"url":"https://github.com/databricks/zerobus-sdk/issues"},"dist":{"shasum":"fe5a8bd7cfec46ea7bf7ad063b429913b99181e6","tarball":"https://registry.npmjs.org/@databricks/zerobus-ingest-sdk/-/zerobus-ingest-sdk-1.2.0.tgz","fileCount":15,"integrity":"sha512-fNjNgO+/uT1if+TqIxcF22w2VyJYD4xIMDxwbuHx+gS5fmILW5LtwikOmo8CpTvFeQlKcE4St1T/p4CeO2KTlQ==","signatures":[{"sig":"MEQCIENnE4DYcOgvQTjObld/3EKfQxHLc8w2ahIe/RltCzMkAiAfK0isWXhFvPr+/CVB37Y/NbOR85IydrWrFxT0gbA/YQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":239814},"main":"index.js","napi":{"name":"zerobus-ingest-sdk","triples":{"defaults":false,"additional":["x86_64-unknown-linux-gnu","aarch64-unknown-linux-gnu","x86_64-pc-windows-msvc","x86_64-apple-darwin","aarch64-apple-darwin"]}},"_from":"file:dist/databricks-zerobus-ingest-sdk-1.2.0.tgz","types":"index.d.ts","engines":{"node":">= 16"},"scripts":{"test":"tsx --test test/unit.test.ts test/integration.test.ts","build":"napi build --platform --release","version":"napi version","artifacts":"napi artifacts","test:unit":"tsx --test test/unit.test.ts","universal":"napi universal","build:arrow":"napi build --platform --release --features arrow-flight","build:debug":"napi build --platform","build:proto":"mkdir -p examples/generated && pbjs -t static-module -w commonjs -o examples/generated/air_quality.js schemas/air_quality.proto && pbts -o examples/generated/air_quality.d.ts examples/generated/air_quality.js && protoc --descriptor_set_out=schemas/air_quality_descriptor.pb --include_imports schemas/air_quality.proto","example:arrow":"tsx examples/arrow/batch.ts","test:integration":"tsx --test test/integration.test.ts","build:debug:arrow":"napi build --platform --features arrow-flight","example:json:batch":"tsx examples/json/batch.ts","example:json:single":"tsx examples/json/single.ts","example:proto:batch":"tsx examples/proto/batch.ts","example:proto:single":"tsx examples/proto/single.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e0185958-6c88-43a0-a9f8-0960e0fd31cf"}},"_resolved":"/home/runner/work/secure-public-registry-releases-eng/secure-public-registry-releases-eng/dist/databricks-zerobus-ingest-sdk-1.2.0.tgz","overrides":{"tmp":"^0.2.6","glob":"^10.0.0","lodash":"^4.18.0","minimatch":"^9.0.7","underscore":"^1.13.8","markdown-it":"^14.2.0","brace-expansion":"^2.1.2","@protobufjs/utf8":"^1.1.1"},"_integrity":"sha512-fNjNgO+/uT1if+TqIxcF22w2VyJYD4xIMDxwbuHx+gS5fmILW5LtwikOmo8CpTvFeQlKcE4St1T/p4CeO2KTlQ==","repository":{"url":"git+https://github.com/databricks/zerobus-sdk.git","type":"git"},"_npmVersion":"11.17.0","description":"TypeScript/Node.js SDK for streaming data ingestion into Databricks Delta tables using Zerobus","directories":{},"_nodeVersion":"24.19.0","dependencies":{"protobufjs":"^8.7.1"},"typesVersions":{"*":{"utils/descriptor":["utils/descriptor.d.ts"],"utils/descriptor.js":["utils/descriptor.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","dotenv":"^17.2.3","typescript":"^5.3.0","@types/node":"^20.0.0","@napi-rs/cli":"^2.18.0","apache-arrow":"^18.1.0","protobufjs-cli":"^2.6.1"},"peerDependencies":{"apache-arrow":"^18.0.0"},"optionalDependencies":{"@databricks/zerobus-ingest-sdk-darwin-x64":"1.2.0","@databricks/zerobus-ingest-sdk-darwin-arm64":"1.2.0","@databricks/zerobus-ingest-sdk-linux-x64-gnu":"1.2.0","@databricks/zerobus-ingest-sdk-win32-x64-msvc":"1.2.0","@databricks/zerobus-ingest-sdk-linux-arm64-gnu":"1.2.0"},"peerDependenciesMeta":{"apache-arrow":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/zerobus-ingest-sdk_1.2.0_1787766964841_0.47116234073606855","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@databricks/zerobus-ingest-sdk","version":"1.3.0","keywords":["databricks","delta","streaming","ingestion","zerobus","typescript","rust"],"license":"Apache-2.0","_id":"@databricks/zerobus-ingest-sdk@1.3.0","maintainers":[],"homepage":"https://github.com/databricks/zerobus-sdk#readme","bugs":{"url":"https://github.com/databricks/zerobus-sdk/issues"},"dist":{"shasum":"217b7d7b9ad0264959776a070ebd141403d38e85","tarball":"https://registry.npmjs.org/@databricks/zerobus-ingest-sdk/-/zerobus-ingest-sdk-1.3.0.tgz","fileCount":15,"integrity":"sha512-xPMsJt89chliBEHakbXZH1arKmhxrD4Reb0QLDEotMZWSiooZscktucWgsWMuEBSM2HJpf8QXVnYoUXcSDFx4w==","signatures":[{"sig":"MEQCIBbqeXcVjK+LjG3j81FYvPq6MAKMOf7gCBLZHjZ4rwpjAiB1DKy64Civi+SLiXOn1DvQSzcpGBaVYu4UC7KsbHkBZA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":247325},"main":"index.js","napi":{"name":"zerobus-ingest-sdk","triples":{"defaults":false,"additional":["x86_64-unknown-linux-gnu","aarch64-unknown-linux-gnu","x86_64-pc-windows-msvc","x86_64-apple-darwin","aarch64-apple-darwin"]}},"_from":"file:/home/runner/work/secure-public-registry-releases-eng/secure-public-registry-releases-eng/dist/databricks-zerobus-ingest-sdk-1.3.0.tgz","types":"index.d.ts","engines":{"node":">= 16"},"scripts":{"test":"tsx --test test/unit.test.ts test/integration.test.ts","build":"napi build --platform --release","version":"napi version","artifacts":"napi artifacts","test:unit":"tsx --test test/unit.test.ts","universal":"napi universal","build:arrow":"napi build --platform --release --features arrow-flight","build:debug":"napi build --platform","build:proto":"mkdir -p examples/generated && pbjs -t static-module -w commonjs -o examples/generated/air_quality.js schemas/air_quality.proto && pbts -o examples/generated/air_quality.d.ts examples/generated/air_quality.js && protoc --descriptor_set_out=schemas/air_quality_descriptor.pb --include_imports schemas/air_quality.proto","example:arrow":"tsx examples/arrow/batch.ts","test:integration":"tsx --test test/integration.test.ts","build:debug:arrow":"napi build --platform --features arrow-flight","example:json:batch":"tsx examples/json/batch.ts","example:json:single":"tsx examples/json/single.ts","example:proto:batch":"tsx examples/proto/batch.ts","example:proto:single":"tsx examples/proto/single.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e0185958-6c88-43a0-a9f8-0960e0fd31cf"}},"_resolved":"/home/runner/work/secure-public-registry-releases-eng/secure-public-registry-releases-eng/dist/databricks-zerobus-ingest-sdk-1.3.0.tgz","overrides":{"tmp":"^0.2.6","glob":"^10.0.0","lodash":"^4.18.0","minimatch":"^9.0.7","underscore":"^1.13.8","markdown-it":"^14.2.0","brace-expansion":"^2.1.2","@protobufjs/utf8":"^1.1.1"},"_integrity":"sha512-xPMsJt89chliBEHakbXZH1arKmhxrD4Reb0QLDEotMZWSiooZscktucWgsWMuEBSM2HJpf8QXVnYoUXcSDFx4w==","repository":{"url":"git+https://github.com/databricks/zerobus-sdk.git","type":"git"},"_npmVersion":"11.17.0","description":"TypeScript/Node.js SDK for streaming data ingestion into Databricks Delta tables using Zerobus","directories":{},"_nodeVersion":"24.19.0","dependencies":{"protobufjs":"^8.7.1"},"typesVersions":{"*":{"utils/descriptor":["utils/descriptor.d.ts"],"utils/descriptor.js":["utils/descriptor.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","dotenv":"^17.2.3","typescript":"^5.3.0","@types/node":"^20.0.0","@napi-rs/cli":"^2.18.0","apache-arrow":"^18.1.0","protobufjs-cli":"^2.6.1"},"peerDependencies":{"apache-arrow":"^18.0.0"},"optionalDependencies":{"@databricks/zerobus-ingest-sdk-darwin-x64":"1.3.0","@databricks/zerobus-ingest-sdk-darwin-arm64":"1.3.0","@databricks/zerobus-ingest-sdk-linux-x64-gnu":"1.3.0","@databricks/zerobus-ingest-sdk-win32-x64-msvc":"1.3.0","@databricks/zerobus-ingest-sdk-linux-arm64-gnu":"1.3.0"},"peerDependenciesMeta":{"apache-arrow":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/zerobus-ingest-sdk_1.3.0_1788301430807_0.5785904551610566","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"_id":"@databricks/zerobus-ingest-sdk@1.4.0","bugs":{"url":"https://github.com/databricks/zerobus-sdk/issues"},"dist":{"shasum":"d5be76726d9fbee731138a2e92ed738b5613361b","tarball":"https://registry.npmjs.org/@databricks/zerobus-ingest-sdk/-/zerobus-ingest-sdk-1.4.0.tgz","fileCount":15,"integrity":"sha512-zgLBvt/5Huq1hGXC6LnlWVIQ+0xhb/aPBnEkCwN9ocYdAwLpaxdV7WqNtx6v/3zivYSfoQ0SMnvPmyYflQN/LA==","signatures":[{"sig":"MEUCIQDAjkFOzCM7QM4RG3qtT1P1pyW6sRU2EArLK4BQUO6uPwIgIbrOoQcLvBEsRFe3tOM6BjqhE24WyJQKHTO1dr1d2mI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDLn6JBicMIhwT1P3Bu8LiTymncvxqiDUE+k4JgIR0W1AIhAONZb0vkFTq1YpFDkGX56kA0iwkhiiitdsNkBdhwIyH8"}],"unpackedSize":249004},"main":"index.js","name":"@databricks/zerobus-ingest-sdk","napi":{"name":"zerobus-ingest-sdk","triples":{"defaults":false,"additional":["x86_64-unknown-linux-gnu","aarch64-unknown-linux-gnu","x86_64-pc-windows-msvc","x86_64-apple-darwin","aarch64-apple-darwin"]}},"_from":"file:/home/runner/work/secure-public-registry-releases-eng/secure-public-registry-releases-eng/dist/databricks-zerobus-ingest-sdk-1.4.0.tgz","types":"index.d.ts","engines":{"node":">= 16"},"license":"Apache-2.0","scripts":{"test":"tsx --test test/unit.test.ts test/integration.test.ts","build":"napi build --platform --release","version":"napi version","artifacts":"napi artifacts","test:unit":"tsx --test test/unit.test.ts","universal":"napi universal","build:arrow":"napi build --platform --release --features arrow-flight","build:debug":"napi build --platform","build:proto":"mkdir -p examples/generated && pbjs -t static-module -w commonjs -o examples/generated/air_quality.js schemas/air_quality.proto && pbts -o examples/generated/air_quality.d.ts examples/generated/air_quality.js && protoc --descriptor_set_out=schemas/air_quality_descriptor.pb --include_imports schemas/air_quality.proto","example:arrow":"tsx examples/arrow/batch.ts","test:integration":"tsx --test test/integration.test.ts","build:debug:arrow":"napi build --platform --features arrow-flight","example:json:batch":"tsx examples/json/batch.ts","example:json:single":"tsx examples/json/single.ts","example:proto:batch":"tsx examples/proto/batch.ts","example:proto:single":"tsx examples/proto/single.ts"},"version":"1.4.0","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:e0185958-6c88-43a0-a9f8-0960e0fd31cf"}},"homepage":"https://github.com/databricks/zerobus-sdk#readme","keywords":["databricks","delta","streaming","ingestion","zerobus","typescript","rust"],"_resolved":"/home/runner/work/secure-public-registry-releases-eng/secure-public-registry-releases-eng/dist/databricks-zerobus-ingest-sdk-1.4.0.tgz","overrides":{"tmp":"^0.2.6","glob":"^10.0.0","lodash":"^4.18.0","minimatch":"^9.0.7","underscore":"^1.13.8","markdown-it":"^14.2.0","brace-expansion":"^2.1.2","@protobufjs/utf8":"^1.1.1"},"_integrity":"sha512-zgLBvt/5Huq1hGXC6LnlWVIQ+0xhb/aPBnEkCwN9ocYdAwLpaxdV7WqNtx6v/3zivYSfoQ0SMnvPmyYflQN/LA==","repository":{"url":"git+https://github.com/databricks/zerobus-sdk.git","type":"git"},"_npmVersion":"11.19.0","description":"TypeScript/Node.js SDK for streaming data ingestion into Databricks Delta tables using Zerobus","directories":{},"maintainers":[],"_nodeVersion":"24.20.0","dependencies":{"protobufjs":"^8.7.1"},"typesVersions":{"*":{"utils/descriptor":["utils/descriptor.d.ts"],"utils/descriptor.js":["utils/descriptor.d.ts"]}},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","dotenv":"^17.2.3","typescript":"^5.3.0","@types/node":"^20.0.0","@napi-rs/cli":"^2.18.0","apache-arrow":"^18.1.0","protobufjs-cli":"^2.6.1"},"peerDependencies":{"apache-arrow":"^18.0.0"},"optionalDependencies":{"@databricks/zerobus-ingest-sdk-darwin-x64":"1.4.0","@databricks/zerobus-ingest-sdk-darwin-arm64":"1.4.0","@databricks/zerobus-ingest-sdk-linux-x64-gnu":"1.4.0","@databricks/zerobus-ingest-sdk-win32-x64-msvc":"1.4.0","@databricks/zerobus-ingest-sdk-linux-arm64-gnu":"1.4.0"},"peerDependenciesMeta":{"apache-arrow":{"optional":true}},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/zerobus-ingest-sdk_1.4.0_1790241269974_0.6508474233943367"}}},"time":{"created":"2025-12-22T12:05:51.029Z","modified":"2026-09-24T09:14:30.229Z","0.0.1":"2025-12-22T12:05:51.287Z","0.1.0":"2025-12-24T15:30:47.189Z","0.1.1":"2025-12-24T16:33:16.903Z","0.2.0":"2026-01-28T23:47:42.210Z","0.3.0":"2026-03-04T16:29:41.092Z","1.0.0":"2026-03-06T13:57:08.746Z","1.0.1":"2026-04-24T09:10:33.239Z","1.0.2":"2026-04-24T15:37:00.982Z","1.1.0":"2026-05-28T07:31:11.145Z","1.2.0":"2026-08-26T17:56:04.995Z","1.3.0":"2026-09-01T22:23:50.934Z","1.4.0":"2026-09-24T09:14:30.069Z"},"bugs":{"url":"https://github.com/databricks/zerobus-sdk/issues"},"license":"Apache-2.0","homepage":"https://github.com/databricks/zerobus-sdk#readme","keywords":["databricks","delta","streaming","ingestion","zerobus","typescript","rust"],"repository":{"url":"git+https://github.com/databricks/zerobus-sdk.git","type":"git"},"description":"TypeScript/Node.js SDK for streaming data ingestion into Databricks Delta tables using Zerobus","maintainers":[],"readme":"# Databricks Zerobus Ingest SDK for TypeScript\n\nThe Databricks Zerobus Ingest SDK for TypeScript provides a high-performance client for ingesting data directly into Databricks Delta tables using the Zerobus streaming protocol. This SDK wraps the high-performance [Rust SDK](https://github.com/databricks/zerobus-sdk/tree/main/rust) using native bindings for optimal performance.\n\n## Table of Contents\n\n- [Features](#features)\n- [Requirements](#requirements)\n- [Quick Start User Guide](#quick-start-user-guide)\n  - [Installation](#installation)\n  - [Choose Your Serialization Format](#choose-your-serialization-format)\n  - [Option 1: Using JSON (Quick Start)](#option-1-using-json-quick-start)\n  - [Option 2: Using Protocol Buffers (Default, Recommended)](#option-2-using-protocol-buffers-default-recommended)\n- [Usage Examples](#usage-examples)\n- [Authentication](#authentication)\n- [Configuration](#configuration)\n- [Descriptor Utilities](#descriptor-utilities)\n- [Error Handling](#error-handling)\n- [API Reference](#api-reference)\n- [Best Practices](#best-practices)\n- [Platform Support](#platform-support)\n- [Architecture](#architecture)\n- [Community and Contributing](#community-and-contributing)\n- [License](#license)\n\n## Features\n\n- **High-throughput ingestion**: Optimized for high-volume data ingestion with native Rust implementation\n- **Automatic recovery**: Built-in retry and recovery mechanisms for transient failures\n- **Flexible configuration**: Customizable stream behavior and timeouts\n- **Multiple serialization formats**: Support for JSON, Protocol Buffers, and Arrow Flight ingestion with optional LZ4 / ZSTD compression\n- **Type widening**: Accept high-level types (plain objects, protobuf messages) or low-level types (strings, buffers) - automatically handles serialization\n- **Batch ingestion**: Ingest multiple records with a single acknowledgment for higher throughput\n- **OAuth 2.0 authentication**: Secure authentication with client credentials\n- **TypeScript support**: Full type definitions for excellent IDE support\n- **Cross-platform**: Supports Linux, macOS, and Windows\n\n## Requirements\n\n### Runtime Requirements\n\n- **Node.js**: >= 16\n- **Databricks workspace** with Zerobus access enabled\n\n### Source Build Requirements\n\n- **Rust toolchain**: 1.70 or higher - [Install Rust](https://rustup.rs/)\n- **Cargo**: Included with Rust\n- Platform C/C++ build tools\n\nYou only need these source-build tools when npm cannot use a pre-built native\npackage for your platform, or when developing the SDK from this repository.\n\n## Quick Start User Guide\n\n### Prerequisites\n\nBefore using the SDK, you need a Databricks workspace URL, a Delta table, and a service principal. See the [monorepo prerequisites](https://github.com/databricks/zerobus-sdk/blob/main/README.md#prerequisites) for detailed setup instructions.\n\n### Installation\n\n```bash\nnpm install @databricks/zerobus-ingest-sdk\n```\n\nOn supported platforms, npm installs the TypeScript package and the matching\npre-built native binary package automatically.\n\n#### Local Development From Source\n\nClone and build from source only when modifying this SDK or when your platform\ndoes not have a pre-built native binary:\n\n```bash\ngit clone https://github.com/databricks/zerobus-sdk.git\ncd zerobus-sdk/typescript\nnpm install\nnpm run build\n```\n\n**Troubleshooting:**\n\n- **Unsupported platform or source build requested**: Install Rust 1.70+,\n  Cargo, and your platform C/C++ build tools, clone this repository, and run\n  `npm install` followed by `npm run build` from `zerobus-sdk/typescript`\n- **\"rustc: command not found\"**: Restart your terminal after installing Rust\n- **Build fails on Windows**: Ensure Visual Studio Build Tools are installed with C++ support\n- **Build fails on Linux**: Install build-essential or equivalent package\n- **Permission errors**: Don't use `sudo` with npm/cargo commands\n\n### Choose Your Serialization Format\n\nThe SDK supports three ingestion formats. Protocol Buffers is the default record format and recommended for production row-oriented workloads:\n\n- **Protocol Buffers (Default)** - Strongly-typed schemas, efficient binary encoding, better performance. This is the default format.\n- **JSON** - Simple, no schema compilation needed. Good for getting started quickly or when schema flexibility is needed.\n- Arrow Flight - High-performance columnar ingestion for applications that already produce Arrow data. See the [Arrow example](examples/arrow/README.md).\n\n> **Note:** If you don't specify `recordType`, the SDK will use Protocol Buffers by default. To use JSON, explicitly set `recordType: RecordType.Json`.\n\n### Acknowledgments and throughput\n\nIngestion is asynchronous. `ingestRecordOffset()` (and `ingestRecordsOffset()`) resolves as soon as the record is queued; the SDK sends it and tracks its acknowledgment in the background. To confirm records are durably committed, call `flush()` — it resolves once everything queued so far is acknowledged. The idiomatic flow is **ingest in a loop, then `flush()`** (once for a bounded batch, or periodically for a long-running stream). Each ingest also returns the record's offset, and `waitForOffset(offset)` resolves when that offset is acknowledged — handy when a specific record must be confirmed before continuing (acks are ordered, so waiting on the last offset confirms the whole run). Just avoid calling `waitForOffset()` after every record in a tight loop, since that limits throughput to one record per round-trip. The examples below follow this pattern.\n\n### Option 1: Using JSON (Quick Start)\n\nJSON mode is the simplest way to get started. You don't need to define or compile protobuf schemas, but you must explicitly specify `RecordType.Json`.\n\n```typescript\nimport { ZerobusSdk, RecordType } from '@databricks/zerobus-ingest-sdk';\n\nasync function main(): Promise<void> {\n// Configuration\n// For AWS:\nconst zerobusEndpoint = 'https://<workspace-id>.zerobus.<region>.cloud.databricks.com';\nconst workspaceUrl = 'https://<workspace-name>.cloud.databricks.com';\n// For Azure:\n// const zerobusEndpoint = 'https://<workspace-id>.zerobus.<region>.azuredatabricks.net';\n// const workspaceUrl = 'https://<workspace-name>.azuredatabricks.net';\n\nconst tableName = 'main.default.air_quality';\nconst clientId = process.env.DATABRICKS_CLIENT_ID!;\nconst clientSecret = process.env.DATABRICKS_CLIENT_SECRET!;\n\n// Initialize SDK\nconst sdk = new ZerobusSdk(zerobusEndpoint, workspaceUrl);\n\n// Configure table properties (no descriptor needed for JSON)\nconst tableProperties = { tableName };\n\n// Configure stream with JSON record type\nconst options = {\n    recordType: RecordType.Json,  // JSON encoding\n    maxInflightRequests: 1000,\n    recovery: true\n};\n\n// Create stream\nconst stream = await sdk.createStream(\n    tableProperties,\n    clientId,\n    clientSecret,\n    options\n);\n\ntry {\n    // Send all records\n    for (let i = 0; i < 100; i++) {\n        const record = {\n            device_name: `sensor-${i % 10}`,\n            temp: 20 + (i % 15),\n            humidity: 50 + (i % 40)\n        };\n\n        // Queue the record; do not wait for its acknowledgement here\n        await stream.ingestRecordOffset(record);\n    }\n\n    // Wait for all records to be acknowledged\n    await stream.flush();\n    console.log('Successfully ingested 100 records!');\n} finally {\n    await stream.close();\n}\n\n}\n\nmain().catch((error) => {\n  console.error('Fatal error:', error);\n  process.exitCode = 1;\n});\n```\n\n### Option 2: Using Protocol Buffers (Default, Recommended)\n\nProtocol Buffers is the default serialization format and provides efficient binary encoding with schema validation. This is recommended for production use. This section covers the complete setup process.\n\n#### Prerequisites\n\nBefore starting, ensure you have:\n\n1. **Protocol Buffer Compiler (`protoc`)** - Required for generating descriptor files\n2. **protobufjs** - Required at runtime by your generated Protocol Buffer code\n3. **protobufjs-cli** - Required during development to generate JavaScript and type declarations\n\nInstall the JavaScript runtime and code-generation tools in your application:\n\n```bash\nnpm install protobufjs\nnpm install --save-dev protobufjs-cli\n```\n\n#### Step 1: Install Protocol Buffer Compiler\n\n**Linux:**\n\n```bash\n# Ubuntu/Debian\nsudo apt-get update && sudo apt-get install -y protobuf-compiler\n\n# CentOS/RHEL\nsudo yum install -y protobuf-compiler\n\n# Alpine\napk add protobuf\n```\n\n**macOS:**\n\n```bash\nbrew install protobuf\n```\n\n**Windows:**\n\n```powershell\n# Using Chocolatey\nchoco install protoc\n\n# Or download from: https://github.com/protocolbuffers/protobuf/releases\n```\n\n**Verify Installation:**\n\n```bash\nprotoc --version\n# Should show: libprotoc 3.x.x or higher\n```\n\n#### Step 2: Define Your Protocol Buffer Schema\n\nCreate `schemas/air_quality.proto` in your application with the following\nexample schema. Also create an `examples/generated` directory for the generated\nJavaScript and type declarations:\n\n```protobuf\nsyntax = \"proto2\";\n\npackage examples;\n\n// Example message representing air quality sensor data\nmessage AirQuality {\n    optional string device_name = 1;\n    optional int32 temp = 2;\n    optional int64 humidity = 3;\n}\n```\n\n#### Step 3: Generate TypeScript Code\n\nGenerate TypeScript code from your proto schema:\n\n```bash\nnpx pbjs -t static-module -w commonjs -o examples/generated/air_quality.js schemas/air_quality.proto\nnpx pbts -o examples/generated/air_quality.d.ts examples/generated/air_quality.js\n```\n\n**Output:**\n- `examples/generated/air_quality.js` - JavaScript protobuf code\n- `examples/generated/air_quality.d.ts` - TypeScript type definitions\n\n#### Step 4: Generate Descriptor File for Databricks\n\nDatabricks requires descriptor metadata about your protobuf schema.\n\n**Generate Binary Descriptor:**\n\n```bash\nprotoc --descriptor_set_out=schemas/air_quality_descriptor.pb \\\n       --include_imports \\\n       schemas/air_quality.proto\n```\n\n**Important flags:**\n- `--descriptor_set_out` - Output path for the binary descriptor\n- `--include_imports` - Include all imported proto files (required)\n\nThat's it! The SDK will automatically extract the message descriptor from this file.\n\n#### Step 5: Use in Your Code\n\n```typescript\nimport { ZerobusSdk, RecordType } from '@databricks/zerobus-ingest-sdk';\nimport * as airQuality from './examples/generated/air_quality';\nimport { loadDescriptorProto } from '@databricks/zerobus-ingest-sdk/utils/descriptor.js';\n\nasync function main(): Promise<void> {\n// Configuration\nconst zerobusEndpoint = 'https://<workspace-id>.zerobus.<region>.cloud.databricks.com';\nconst workspaceUrl = 'https://<workspace-name>.cloud.databricks.com';\nconst tableName = 'main.default.air_quality';\nconst clientId = process.env.DATABRICKS_CLIENT_ID!;\nconst clientSecret = process.env.DATABRICKS_CLIENT_SECRET!;\n\n// Load and extract the descriptor for your specific message\nconst descriptorBase64 = loadDescriptorProto({\n    descriptorPath: 'schemas/air_quality_descriptor.pb',\n    protoFileName: 'air_quality.proto',\n    messageName: 'AirQuality'\n});\n\n// Initialize SDK\nconst sdk = new ZerobusSdk(zerobusEndpoint, workspaceUrl);\n\n// Configure table properties with protobuf descriptor\nconst tableProperties = {\n    tableName,\n    descriptorProto: descriptorBase64  // Required for Protocol Buffers\n};\n\n// Configure stream with Protocol Buffers record type\nconst options = {\n    recordType: RecordType.Proto,  // Protocol Buffers encoding\n    maxInflightRequests: 1000,\n    recovery: true\n};\n\n// Create stream\nconst stream = await sdk.createStream(tableProperties, clientId, clientSecret, options);\n\ntry {\n    const AirQuality = airQuality.examples.AirQuality;\n\n    // Send all records\n    for (let i = 0; i < 100; i++) {\n        const record = AirQuality.create({\n            deviceName: `sensor-${i}`,\n            temp: 20 + i,\n            humidity: 50 + i\n        });\n\n        // Queue the record; do not wait for its acknowledgement here\n        await stream.ingestRecordOffset(record);\n    }\n\n    // Wait for all records to be acknowledged\n    await stream.flush();\n    console.log('Successfully ingested 100 records!');\n} finally {\n    await stream.close();\n}\n\n}\n\nmain().catch((error) => {\n  console.error('Fatal error:', error);\n  process.exitCode = 1;\n});\n```\n\n#### Type Mapping: Delta ↔ Protocol Buffers\n\nWhen creating your proto schema, use these type mappings:\n\n| Delta Type | Proto2 Type | Notes |\n|-----------|-------------|-------|\n| STRING, VARCHAR | string | |\n| INT, SMALLINT, SHORT | int32 | |\n| BIGINT, LONG | int64 | |\n| FLOAT | float | |\n| DOUBLE | double | |\n| BOOLEAN | bool | |\n| BINARY | bytes | |\n| DATE | int32 | Days since epoch |\n| TIMESTAMP | int64 | Microseconds since epoch |\n| ARRAY\\<type\\> | repeated type | Use repeated field |\n| MAP\\<key, value\\> | map\\<key, value\\> | Use map field |\n| STRUCT\\<fields\\> | message | Define nested message |\n\n**Example: Complex Schema**\n\n```protobuf\nsyntax = \"proto2\";\n\npackage examples;\n\nmessage ComplexRecord {\n    optional string id = 1;\n    optional int64 timestamp = 2;\n    repeated string tags = 3;                    // ARRAY<STRING>\n    map<string, int32> metrics = 4;              // MAP<STRING, INT>\n    optional NestedData nested = 5;              // STRUCT\n}\n\nmessage NestedData {\n    optional string field1 = 1;\n    optional double field2 = 2;\n}\n```\n\n#### Using Your Own Schema\n\n1. **Create your proto file:**\n   ```bash\n   cat > schemas/my_schema.proto << 'EOF'\n   syntax = \"proto2\";\n\n   package my_schema;\n\n   message MyMessage {\n       optional string field1 = 1;\n       optional int32 field2 = 2;\n   }\n   EOF\n   ```\n\n2. **Generate code and descriptor:**\n   ```bash\n   npx pbjs -t static-module -w commonjs -o examples/generated/my_schema.js schemas/my_schema.proto\n   npx pbts -o examples/generated/my_schema.d.ts examples/generated/my_schema.js\n   protoc --descriptor_set_out=schemas/my_schema_descriptor.pb --include_imports schemas/my_schema.proto\n   ```\n\n3. **Load descriptor in your code:**\n   ```typescript\n   import { loadDescriptorProto } from '@databricks/zerobus-ingest-sdk/utils/descriptor.js';\n   const descriptorBase64 = loadDescriptorProto({\n       descriptorPath: 'schemas/my_schema_descriptor.pb',\n       protoFileName: 'my_schema.proto',\n       messageName: 'MyMessage'\n   });\n   ```\n\n#### Troubleshooting Protocol Buffers\n\n**\"protoc: command not found\"**\n- Install `protoc` (see Step 1 above)\n\n**\"Cannot find module './generated/air_quality'\"**\n- Run the `npx pbjs` and `npx pbts` commands from Step 3\n\n**\"Descriptor file not found\"**\n- Generate the descriptor file using the commands in Step 4\n\n**\"Invalid descriptor\"**\n- Ensure you used `--include_imports` flag when generating the descriptor\n- Verify the `.pb` file was created: `ls -lh schemas/*.pb`\n- Check that `protoFileName` and `messageName` match your proto file\n- Make sure you're using `loadDescriptorProto()` from the utils\n\n**Build fails on proto generation**\n- Ensure the runtime and CLI are installed: `npm install protobufjs` and\n  `npm install --save-dev protobufjs-cli`\n\n#### Quick Reference\n\nAfter creating `schemas/air_quality.proto` and the `examples/generated`\ndirectory as described above:\n```bash\n# Install the SDK and protobuf codegen tools\nnpm install @databricks/zerobus-ingest-sdk protobufjs\nnpm install --save-dev protobufjs-cli\n\n# Generate protobuf code and descriptor\nnpx pbjs -t static-module -w commonjs -o examples/generated/air_quality.js schemas/air_quality.proto\nnpx pbts -o examples/generated/air_quality.d.ts examples/generated/air_quality.js\nprotoc --descriptor_set_out=schemas/air_quality_descriptor.pb --include_imports schemas/air_quality.proto\n```\n\n#### Why Two Steps (TypeScript + Descriptor)?\n\n1. **TypeScript Code Generation** (`npx pbjs` and `npx pbts`):\n   - Creates JavaScript/TypeScript code for your application\n   - Provides type-safe message creation and encoding\n   - Used in your application code\n\n2. **Descriptor File Generation** (`protoc --descriptor_set_out`):\n   - Creates metadata about your schema for Databricks\n   - Required by Zerobus service for schema validation\n   - Uploaded as base64 string when creating a stream\n\nBoth are necessary for Protocol Buffers ingestion!\n\n## Usage Examples\n\nThe source repository contains complete, runnable examples in `examples/`.\nClone and build the repository using the [local development](#local-development-from-source)\ninstructions, then see [examples/README.md](examples/README.md) for details.\n\n### Running Examples\n\nRun these commands from the cloned repository's `typescript` directory:\n\n```bash\n# Set environment variables\nexport ZEROBUS_SERVER_ENDPOINT=\"https://<workspace-id>.zerobus.<region>.cloud.databricks.com\"\nexport DATABRICKS_WORKSPACE_URL=\"https://<workspace-name>.cloud.databricks.com\"\nexport DATABRICKS_CLIENT_ID=\"your-client-id\"\nexport DATABRICKS_CLIENT_SECRET=\"your-client-secret\"\nexport ZEROBUS_TABLE_NAME=\"main.default.air_quality\"\n\n# Run JSON examples\nnpm run example:json:single\nnpm run example:json:batch\n\n# For Protocol Buffers, generate TypeScript code and descriptor\nnpm run build:proto\nprotoc --descriptor_set_out=schemas/air_quality_descriptor.pb --include_imports schemas/air_quality.proto\n\n# Run Protocol Buffers examples\nnpm run example:proto:single\nnpm run example:proto:batch\n```\n\n### Batch Ingestion\n\nFor higher throughput, use batch ingestion to send multiple records with a single acknowledgment:\n\n#### Protocol Buffers\n\n```typescript\nconst records = Array.from({ length: 1000 }, (_, i) =>\n  AirQuality.create({ deviceName: `sensor-${i}`, temp: 20 + i, humidity: 50 + i })\n);\n\n// Protobuf Type 1: Message objects (high-level) - SDK auto-serializes\nconst offsetId = await stream.ingestRecordsOffset(records);\n\n// Protobuf Type 2: Buffers (low-level) - pre-serialized bytes\n// const buffers = records.map(r => Buffer.from(AirQuality.encode(r).finish()));\n// const offsetId = await stream.ingestRecordsOffset(buffers);\n\nif (offsetId !== null) {\n  await stream.waitForOffset(offsetId);\n  console.log(`Batch acknowledged at offset ${offsetId}`);\n}\n```\n\n#### JSON\n\n```typescript\nconst records = Array.from({ length: 1000 }, (_, i) => ({\n  device_name: `sensor-${i}`,\n  temp: 20 + i,\n  humidity: 50 + i\n}));\n\n// JSON Type 1: objects (high-level) - SDK auto-stringifies\nconst offsetId = await stream.ingestRecordsOffset(records);\n\n// JSON Type 2: strings (low-level) - pre-serialized JSON\n// const jsonRecords = records.map(r => JSON.stringify(r));\n// const offsetId = await stream.ingestRecordsOffset(jsonRecords);\n\nif (offsetId !== null) {\n  await stream.waitForOffset(offsetId);\n}\n```\n\n**Type Widening Support:**\n- JSON mode: Accept `object[]` (auto-stringify) or `string[]` (pre-stringified)\n- Proto mode: Accept protobuf messages with `.encode()` method (auto-serialize) or `Buffer[]` (pre-serialized)\n- Mixed types are supported in the same batch\n\n**Best Practices**:\n- Batch size: 100-1,000 records for optimal throughput/latency balance\n- Empty batches return `null` (no error, no offset)\n- Use `recreateStream()` for recovery - it automatically handles unacknowledged batches\n\n**Examples:**\nSee `examples/json/batch.ts` and `examples/proto/batch.ts` for batch ingestion examples.\n\n## Authentication\n\nThe SDK uses OAuth 2.0 Client Credentials for authentication:\n\n```typescript\nimport { ZerobusSdk } from '@databricks/zerobus-ingest-sdk';\n\nconst sdk = new ZerobusSdk(zerobusEndpoint, workspaceUrl);\n\n// Create stream with OAuth authentication\nconst stream = await sdk.createStream(\n    tableProperties,\n    clientId,\n    clientSecret,\n    options\n);\n```\n\nThe SDK automatically fetches access tokens and includes these headers:\n- `\"authorization\": \"Bearer <oauth_token>\"` - Obtained via OAuth 2.0 Client Credentials flow\n- `\"x-databricks-zerobus-table-name\": \"<table_name>\"` - The fully qualified table name\n\n### Custom Authentication\n\nBeyond OAuth, you can use custom headers for Personal Access Tokens (PAT) or other auth methods:\n\n```typescript\nconst stream = await sdk.createStream(\n  tableProperties,\n  '', // client_id (ignored when headers_provider is provided)\n  '', // client_secret (ignored when headers_provider is provided)\n  options,\n  {\n    getHeadersCallback: () => [\n      [\"authorization\", `Bearer ${myToken}`],\n      [\"x-databricks-zerobus-table-name\", tableName]\n    ]\n  }\n);\n```\n\n**Required headers:**\n- `authorization` - Bearer token or other auth header\n- `x-databricks-zerobus-table-name` - The fully qualified table name\n\n**Note:** The SDK automatically adds the `user-agent` header if not provided.\n\n## Configuration\n\n### Stream Configuration Options\n\n| Option | Default | Description |\n|--------|---------|-------------|\n| `recordType` | `RecordType.Proto` | Serialization format: `RecordType.Json` or `RecordType.Proto` |\n| `maxInflightRequests` | 1,000,000 | Maximum number of unacknowledged requests |\n| `recovery` | true | Enable automatic stream recovery |\n| `recoveryTimeoutMs` | 15,000 | Timeout for recovery operations (ms) |\n| `recoveryBackoffMs` | 2,000 | Delay between recovery attempts (ms) |\n| `recoveryRetries` | 4 | Maximum number of recovery attempts |\n| `flushTimeoutMs` | 300,000 | Timeout for flush operations (ms) |\n| `serverLackOfAckTimeoutMs` | 60,000 | Server acknowledgment timeout (ms) |\n| `streamPausedMaxWaitTimeMs` | undefined | Max wait time during graceful stream close (ms) |\n\n### Example Configuration\n\n```typescript\nimport { StreamConfigurationOptions, RecordType } from '@databricks/zerobus-ingest-sdk';\n\nconst options: StreamConfigurationOptions = {\n    recordType: RecordType.Json,  // JSON encoding\n    maxInflightRequests: 10000,\n    recovery: true,\n    recoveryTimeoutMs: 20000,\n    recoveryBackoffMs: 2000,\n    recoveryRetries: 4\n};\n\nconst stream = await sdk.createStream(\n    tableProperties,\n    clientId,\n    clientSecret,\n    options\n);\n```\n\n## Descriptor Utilities\n\nThe SDK provides a helper function to extract Protocol Buffer descriptors from FileDescriptorSets.\nUse the `.js` subpath shown below for compatibility with CommonJS and native\nNode.js ESM imports.\n\n### loadDescriptorProto()\n\nExtracts a specific message descriptor from a FileDescriptorSet:\n\n```typescript\nimport { loadDescriptorProto } from '@databricks/zerobus-ingest-sdk/utils/descriptor.js';\n\nconst descriptorBase64 = loadDescriptorProto({\n    descriptorPath: 'schemas/my_schema_descriptor.pb',\n    protoFileName: 'my_schema.proto',  // Name of your .proto file\n    messageName: 'MyMessage'            // The specific message to use\n});\n```\n\n**Parameters:**\n- `descriptorPath`: Path to the `.pb` file generated by `protoc --descriptor_set_out`\n- `protoFileName`: Name of the proto file (e.g., `\"air_quality.proto\"`)\n- `messageName`: Name of the message type to extract (e.g., `\"AirQuality\"`)\n\n**Why use this utility?**\n- Extracts the specific message descriptor you need\n- No manual base64 conversion required\n- Clear error messages if the file or message isn't found\n- Flexible for complex schemas with multiple messages or imports\n\n**Example with multiple messages:**\n```typescript\n// Your proto file has: Order, OrderItem, Customer\n// You want to ingest Orders:\nconst descriptorBase64 = loadDescriptorProto({\n    descriptorPath: 'schemas/orders_descriptor.pb',\n    protoFileName: 'orders.proto',\n    messageName: 'Order'  // Explicitly choose Order\n});\n```\n\n## Error Handling\n\nThe SDK includes automatic recovery for transient failures (enabled by default with `recovery: true`). `getUnackedBatches()` and `recreateStream()` succeed only after a terminal native-stream failure, which already closes the stream. An enqueue failure leaves the wrapper active, so those calls reject; rethrow the original error. Do not call `stream.close()` before `recreateStream()`, because close releases the native handle.\n\n```typescript\nlet replacement;\ntry {\n    const offset = await stream.ingestRecordOffset(record);\n    await stream.flush();\n    console.log(`Success: offset ${offset}`);\n} catch (error) {\n    console.error('Ingestion failed:', error);\n    try {\n        const unackedBatches = await stream.getUnackedBatches();\n        console.log(`Batches to recover: ${unackedBatches.length}`);\n        replacement = await sdk.recreateStream(stream);\n        await replacement.flush();\n    } catch (recoveryError) {\n        console.error('Stream was not terminal or recovery failed:', recoveryError);\n        throw new AggregateError(\n            [error, recoveryError],\n            'ingestion and recovery both failed',\n        );\n    } finally {\n        if (replacement) {\n            await replacement.close();\n        }\n    }\n} finally {\n    try {\n        await stream.close();\n    } catch (closeError) {\n        console.error('Failed stream released:', closeError);\n    }\n}\n```\n\n**Best Practices:**\n- **Rely on automatic recovery** (default): The SDK will automatically retry transient failures\n- **Use `recreateStream()` for permanent failures**: Automatically recovers all unacknowledged batches\n- **Use `getUnackedRecords()` for inspection only**: Primarily for debugging or understanding failed records\n- Always close streams in a `finally` block to ensure proper cleanup\n\n## API Reference\n\n### ZerobusSdk\n\nMain entry point for the SDK.\n\n**Constructor:**\n\n```typescript\nnew ZerobusSdk(zerobusEndpoint: string, unityCatalogUrl: string, options?: ZerobusSdkOptions)\n```\n\n**Parameters:**\n- `zerobusEndpoint` (string) - The Zerobus gRPC endpoint (e.g., `https://<workspace-id>.zerobus.<region>.cloud.databricks.com` for AWS, or `https://<workspace-id>.zerobus.<region>.azuredatabricks.net` for Azure)\n- `unityCatalogUrl` (string) - The Unity Catalog endpoint (your workspace URL)\n- `options` (ZerobusSdkOptions, optional) - Additional SDK configuration:\n  - `applicationName` (string, optional) - Application identifier appended to the HTTP `user-agent` header, conventionally `\"<product>/<version>\"` (e.g. `\"my-app/1.0\"`). The header becomes `zerobus-sdk-ts/<version> <applicationName>`, enabling server-side attribution.\n  - `connectionPerStream` (boolean, optional) - Gives each JSON/protobuf stream\n    a dedicated gRPC connection. Defaults to `true`; set `false` to share one\n    HTTP/2 connection. Arrow Flight streams are unaffected.\n\nHTTP/2 multiplexes logical streams over one TCP connection. On high-throughput\nworkloads over the public internet, packet loss and TCP retransmissions can\ncause head-of-line blocking across every stream on that connection, reducing\naggregate throughput. Dedicated connections isolate that loss. For many\nsmaller, low-throughput streams, set `connectionPerStream: false`; shared\nmultiplexing is recommended there to reduce connection overhead.\n\n**Methods:**\n\n```typescript\nasync createStream(\n    tableProperties: TableProperties,\n    clientId: string,\n    clientSecret: string,\n    options?: StreamConfigurationOptions\n): Promise<ZerobusStream>\n```\n\nCreates a new ingestion stream using OAuth 2.0 Client Credentials authentication.\n\nAutomatically includes these headers:\n- `\"authorization\": \"Bearer <oauth_token>\"` (fetched via OAuth 2.0 Client Credentials flow)\n- `\"x-databricks-zerobus-table-name\": \"<table_name>\"`\n\nReturns a `ZerobusStream` instance.\n\n---\n\n```typescript\nasync recreateStream(stream: ZerobusStream): Promise<ZerobusStream>\n```\n\nRecreates a stream with the same configuration and automatically re-ingests all unacknowledged batches.\n\nThis method is the **recommended approach** for recovering from stream failures. It:\n1. Retrieves all unacknowledged batches from the failed stream\n2. Creates a new stream with identical configuration (same table, auth, options)\n3. Re-ingests all unacknowledged batches in their original order\n4. Returns the new stream ready for continued ingestion\n\n**Parameters:**\n- `stream` - The terminally failed stream to recreate. Do not call `stream.close()`\n  first because the TypeScript wrapper releases its native handle on close.\n\n**Returns:** Promise resolving to a new `ZerobusStream` with all unacknowledged batches re-ingested\n\n**Example:**\n```typescript\ntry {\n  await stream.ingestRecordsOffset(batch);\n  await stream.flush();\n} catch (error) {\n  // recreateStream() rejects unless the native stream already failed closed.\n  const newStream = await sdk.recreateStream(stream);\n  try {\n    await newStream.flush();\n  } finally {\n    await newStream.close();\n  }\n}\n```\n\n**Note:** This method preserves batch structure and re-ingests batches atomically. For\ndebugging, inspect `getUnackedBatches()` after a terminal failure and before closing the wrapper.\n\n---\n\n### ZerobusStream\n\nRepresents an active ingestion stream.\n\n**Methods:**\n\n```typescript\nasync ingestRecordOffset(payload: Buffer | string | object): Promise<bigint>\n```\n\n**(Recommended)** Ingests a single record. The Promise resolves immediately after the record is queued (before server acknowledgment); the round-trip happens in the background. The idiomatic flow is to ingest in a loop and then `flush()` once to confirm everything queued so far. The returned offset, together with `waitForOffset()`, lets you confirm a specific record when needed — prefer that for bulk over waiting after each record, since per-record waiting limits throughput to one round-trip per record.\n\n```typescript\n// Idiomatic flow: ingest in a loop, then flush once\nlet lastOffset: bigint | null = null;\nfor (const record of records) {\n  lastOffset = await stream.ingestRecordOffset(record);  // Resolves immediately\n}\nawait stream.flush();  // Resolves once everything queued so far is acknowledged\n// (Or, to confirm a specific record: if (lastOffset !== null) await stream.waitForOffset(lastOffset))\n```\n\n---\n\n```typescript\nasync ingestRecordsOffset(payloads: Array<Buffer | string | object>): Promise<bigint | null>\n```\n\n**(Recommended)** Ingests multiple records as a batch. The Promise resolves immediately after the batch is queued (before server acknowledgment); the round-trip happens in the background. Returns `null` for empty batches. As with `ingestRecordOffset()`, the idiomatic flow is to ingest in a loop and `flush()` once to confirm; reach for `waitForOffset()` when a specific batch must be confirmed before continuing.\n\n---\n\n```typescript\nasync waitForOffset(offsetId: bigint): Promise<void>\n```\n\nWaits for the server to acknowledge all records up to and including the specified offset ID. Acks are ordered, so waiting on the **last** offset confirms every prior record too. Use this when a specific record must be confirmed before continuing; for confirming a bulk run, `flush()` is usually simpler. Avoid calling it after every record in a tight loop, since that limits throughput to one record per round-trip.\n\n---\n\n```typescript\nasync ingestRecord(payload: Buffer | string | object): Promise<bigint>\n```\n\n**@deprecated** Use `ingestRecordOffset()` instead.\n\nIngests a single record. Unlike `ingestRecordOffset()`, the Promise only resolves **after the server acknowledges** the record. This is slower for high-throughput scenarios.\n\n**Parameters:**\n- `payload` - Record data. The SDK supports 4 input types for flexibility:\n  - **JSON Mode** (`RecordType.Json`):\n    - **Type 1 - object** (high-level): Plain JavaScript object - SDK auto-stringifies with `JSON.stringify()`\n    - **Type 2 - string** (low-level): Pre-serialized JSON string\n  - **Protocol Buffers Mode** (`RecordType.Proto`):\n    - **Type 3 - Message** (high-level): Protobuf message object - SDK calls `.encode().finish()` automatically\n    - **Type 4 - Buffer** (low-level): Pre-serialized protobuf bytes\n\n**All 4 Type Examples:**\n```typescript\n// JSON Type 1: object (high-level) - SDK auto-stringifies\nawait stream.ingestRecord({ device: 'sensor-1', temp: 25 });\n\n// JSON Type 2: string (low-level) - pre-serialized\nawait stream.ingestRecord(JSON.stringify({ device: 'sensor-1', temp: 25 }));\n\n// Protobuf Type 3: Message object (high-level) - SDK auto-serializes\nconst message = MyMessage.create({ device: 'sensor-1', temp: 25 });\nawait stream.ingestRecord(message);\n\n// Protobuf Type 4: Buffer (low-level) - pre-serialized bytes\nconst buffer = Buffer.from(MyMessage.encode(message).finish());\nawait stream.ingestRecord(buffer);\n```\n\n**Note:** The SDK automatically detects protobufjs message objects by checking if the constructor has a static `.encode()` method. This works seamlessly with messages created via `MyMessage.create()` or `new MyMessage()`.\n\n**Returns:** Promise resolving to the offset ID when the server acknowledges the record\n\n---\n\n```typescript\nasync ingestRecords(payloads: Array<Buffer | string | object>): Promise<bigint | null>\n```\n\n**@deprecated** Use `ingestRecordsOffset()` instead.\n\nIngests multiple records as a batch. Unlike `ingestRecordsOffset()`, the Promise only resolves **after the server acknowledges** the batch. This is slower for high-throughput scenarios.\n\n**Parameters:**\n- `payloads` - Array of record data. Supports the same 4 types as `ingestRecord()`:\n  - **JSON Mode**: Array of **objects** (Type 1) or **strings** (Type 2)\n  - **Proto Mode**: Array of **Message objects** (Type 3) or **Buffers** (Type 4)\n  - Mixed types within the same array are supported\n\n**All 4 Type Examples:**\n```typescript\n// JSON Type 1: objects (high-level) - SDK auto-stringifies\nawait stream.ingestRecords([\n  { device: 'sensor-1', temp: 25 },\n  { device: 'sensor-2', temp: 26 }\n]);\n\n// JSON Type 2: strings (low-level) - pre-serialized\nawait stream.ingestRecords([\n  JSON.stringify({ device: 'sensor-1', temp: 25 }),\n  JSON.stringify({ device: 'sensor-2', temp: 26 })\n]);\n\n// Protobuf Type 3: Message objects (high-level) - SDK auto-serializes\nawait stream.ingestRecords([\n  MyMessage.create({ device: 'sensor-1', temp: 25 }),\n  MyMessage.create({ device: 'sensor-2', temp: 26 })\n]);\n\n// Protobuf Type 4: Buffers (low-level) - pre-serialized bytes\nconst buffers = [\n  Buffer.from(MyMessage.encode(msg1).finish()),\n  Buffer.from(MyMessage.encode(msg2).finish())\n];\nawait stream.ingestRecords(buffers);\n```\n\n**Returns:** Promise resolving to:\n- `bigint` - Offset ID when the server acknowledges the entire batch\n- `null` - If the batch was empty (no records sent)\n\n**Best Practices:**\n- Batch size: 100-1,000 records for optimal throughput/latency balance\n- Empty batches are allowed and return `null`\n\n---\n\n```typescript\nasync flush(): Promise<void>\n```\n\nFlushes all pending records and waits for acknowledgments. This is the recommended way to confirm a batch of `ingestRecordOffset()` / `ingestRecordsOffset()` calls: ingest in a loop without waiting, then `flush()` once at the end instead of calling `waitForOffset()` after every record.\n\n```typescript\nasync close(): Promise<void>\n```\n\nCloses the stream gracefully, flushing all pending data. **Always call this in a finally block!**\n\n```typescript\nasync getUnackedRecords(): Promise<Buffer[]>\n```\n\nReturns unacknowledged record payloads as a flat array for inspection purposes.\n\n**Important:** This can only be called after a terminal stream failure. Do not call\n`stream.close()` first: the TypeScript wrapper releases the underlying stream handle on close.\n\n**Returns:** Array of Buffer containing the raw record payloads\n\n**Use case:** For inspecting unacknowledged individual records when using `ingestRecord()`. **Note:** This method is primarily for debugging and inspection. For recovery, use `recreateStream()` (recommended) or automatic recovery (default).\n\n---\n\n```typescript\nasync getUnackedBatches(): Promise<Buffer[][]>\n```\n\nReturns unacknowledged records grouped by their original batches for inspection purposes.\n\n**Important:** This can only be called after a terminal stream failure. Do not call\n`stream.close()` first: the TypeScript wrapper releases the underlying stream handle on close.\n\n**Returns:** Array of arrays, where each inner array represents a batch of records as Buffers\n\n**Use case:** For inspecting unacknowledged batches when using `ingestRecords()`. Preserves the original batch structure. **Note:** This method is primarily for debugging and inspection. For recovery, use `recreateStream()` (recommended) or automatic recovery (default).\n\n**Example:**\n```typescript\ntry {\n  await stream.ingestRecords(batch1);\n  await stream.ingestRecords(batch2);\n  // ... error occurs\n} catch (error) {\n  const unackedBatches = await stream.getUnackedBatches();\n  // unackedBatches[0] contains records from batch1 (if not acked)\n  // unackedBatches[1] contains records from batch2 (if not acked)\n\n  console.log(`Batches available for recovery: ${unackedBatches.length}`);\n}\n```\n\n---\n\n### TableProperties\n\nConfiguration for the target table.\n\n**Interface:**\n\n```typescript\ninterface TableProperties {\n    tableName: string;              // Fully qualified table name (e.g., \"catalog.schema.table\")\n    descriptorProto?: string;       // Base64-encoded protobuf descriptor (required for Protocol Buffers)\n}\n```\n\n**Examples:**\n\n```typescript\n// JSON mode\nconst jsonTableProperties = { tableName: 'main.default.air_quality' };\n\n// Protocol Buffers mode\nconst protoTableProperties = {\n    tableName: 'main.default.air_quality',\n    descriptorProto: descriptorBase64  // Required for protobuf\n};\n```\n\n---\n\n### StreamConfigurationOptions\n\nConfiguration options for stream behavior.\n\n**Interface:**\n\n```typescript\ninterface StreamConfigurationOptions {\n    recordType?: RecordType;              // RecordType.Json or RecordType.Proto. Default: RecordType.Proto\n    maxInflightRequests?: number;         // Default: 1,000,000\n    recovery?: boolean;                   // Default: true\n    recoveryTimeoutMs?: number;           // Default: 15,000\n    recoveryBackoffMs?: number;           // Default: 2,000\n    recoveryRetries?: number;             // Default: 4\n    flushTimeoutMs?: number;              // Default: 300,000\n    serverLackOfAckTimeoutMs?: number;    // Default: 60,000\n    streamPausedMaxWaitTimeMs?: number;   // Default: undefined (wait for full server duration)\n}\n\nenum RecordType {\n    Json = 0,   // JSON encoding\n    Proto = 1   // Protocol Buffers encoding\n}\n```\n\n## Best Practices\n\n1. **Reuse SDK instances**: Create one `ZerobusSdk` instance per application\n2. **Stream lifecycle**: Always close streams in a `finally` block to ensure all records are flushed\n3. **Batch size**: Adjust `maxInflightRequests` based on your throughput requirements (default: 1,000,000)\n4. **Error handling**: The stream handles errors internally with automatic retry. Only use `recreateStream()` for persistent failures after internal retries are exhausted.\n5. **Use Protocol Buffers for production**: Protocol Buffers (the default) provides better performance and schema validation. Use JSON only when you need schema flexibility or for quick prototyping.\n6. **Store credentials securely**: Use environment variables, never hardcode credentials\n7. **Use batch ingestion**: For high-throughput scenarios, use `ingestRecordsOffset()` instead of individual `ingestRecordOffset()` calls\n8. **Ingest in a loop, then `flush()`**: See [Acknowledgments and throughput](#acknowledgments-and-throughput) above for the full explanation.\n\n## Platform Support\n\nThe SDK supports all platforms where Node.js and Rust are available.\n\n### Pre-built Binaries\n\nPre-built native binaries are available for:\n\n- **Linux**: x64, ARM64\n- **macOS**: x64, ARM64\n- **Windows**: x64\n\n### Build from Source\n\nOther platforms (e.g. Linux musl, FreeBSD) need to build from source during `npm install`, which requires:\n\n- **Rust toolchain** (1.70+): Install via `curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh`\n- Platform C/C++ build tools (Xcode CLT on macOS, build-essential on Debian/Ubuntu, etc.)\n\nThe build process happens automatically during installation and typically takes 2-3 minutes.\n\n## Architecture\n\nThis SDK wraps the high-performance [Rust Zerobus SDK](https://github.com/databricks/zerobus-sdk/tree/main/rust) using [NAPI-RS](https://napi.rs):\n\n```\n┌─────────────────────────────┐\n│   TypeScript Application    │\n└─────────────┬───────────────┘\n              │ (NAPI-RS bindings)\n┌─────────────▼───────────────┐\n│   Rust Zerobus SDK          │\n│   - gRPC communication      │\n│   - OAuth authentication    │\n│   - Stream management       │\n└─────────────┬───────────────┘\n              │ (gRPC/TLS)\n┌─────────────▼───────────────┐\n│   Databricks Zerobus Service│\n└─────────────────────────────┘\n```\n\n**Benefits:**\n- **Native performance** - Rust implementation for high-throughput ingestion\n- **Native async/await support** - Rust futures become JavaScript Promises\n- **Automatic memory management** for native objects. You still must `await stream.close()` to flush and release the stream.\n- **Type safety** - Compile-time checks on both sides\n\n## Community and Contributing\n\nThis is an open source project. We welcome contributions, feedback, and bug reports.\n\n- **[Contributing Guide](https://github.com/databricks/zerobus-sdk/blob/main/typescript/CONTRIBUTING.md)**: TypeScript-specific development setup and workflow.\n- **[General Contributing Guide](https://github.com/databricks/zerobus-sdk/blob/main/CONTRIBUTING.md)**: Pull request process, commit requirements, and policies.\n- **[Changelog](https://github.com/databricks/zerobus-sdk/blob/main/typescript/CHANGELOG.md)**: See the history of changes in the SDK.\n- **[Security Policy](https://github.com/databricks/zerobus-sdk/blob/main/SECURITY.md)**: Read about our security process and how to report vulnerabilities.\n- **[Developer Certificate of Origin (DCO)](https://github.com/databricks/zerobus-sdk/blob/main/DCO)**: Understand the agreement for contributions.\n\n## License\n\nThis SDK is licensed under the Apache License 2.0. See [LICENSE](LICENSE) for the full text.\n","readmeFilename":"README.md"}