{"_id":"typed-bridge","_rev":"35-a9608d80ae87f67042eb9bfb26fff81d","name":"typed-bridge","dist-tags":{"latest":"4.4.0"},"versions":{"0.0.1":{"name":"typed-bridge","version":"0.0.1","author":"","license":"ISC","_id":"typed-bridge@0.0.1","maintainers":[{"name":"neilveil","email":"neilarya.in@gmail.com"}],"dist":{"shasum":"1c24d9be3cc3d6915cc1c84250c5bfa75b3fc969","tarball":"https://registry.npmjs.org/typed-bridge/-/typed-bridge-0.0.1.tgz","fileCount":2,"integrity":"sha512-sU78xNxzhG3NmT9CGJ1fL+HcOvZPiOiXV0G0twTn0jp0HneCcO1TPcsZ3cJcAcQMTsdj0Y87e6FZBzalUOFnnA==","signatures":[{"sig":"MEYCIQCBGhwkLOJQ5ULvToRT8/r0SgDQ5UDccEuOi3N+TCTQmQIhAPe2O48PHdjwMk6EGESViLv3BV9iaW9GRyLucG/FGaQl","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":185},"main":"index.js","type":"commonjs","gitHead":"b7f06bd463a1afbbfcb813475f86fb4a746682e6","scripts":{},"_npmUser":{"name":"neilveil","email":"neilarya.in@gmail.com"},"_npmVersion":"11.1.0","description":"","directories":{},"_nodeVersion":"22.14.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/typed-bridge_0.0.1_1744364917627_0.4718974756070251","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"typed-bridge","version":"1.0.0","keywords":["api","backend","development","framework","functions","grpc","server","trpc","typed","validation","zod"],"author":{"name":"neilveil"},"license":"MIT","_id":"typed-bridge@1.0.0","maintainers":[{"name":"neilveil","email":"neilarya.in@gmail.com"}],"homepage":"https://github.com/neilveil/typed-bridge#readme","bugs":{"url":"https://github.com/neilveil/typed-bridge/issues"},"bin":{"typed-bridge":"dist/scripts/cli.js"},"dist":{"shasum":"6e2b2d94c5fcbb1aabfe6a0e70fb6aea481db82f","tarball":"https://registry.npmjs.org/typed-bridge/-/typed-bridge-1.0.0.tgz","fileCount":30,"integrity":"sha512-FerNwCvqw01TxzeKEM31gifO2wd6yPFEsbLl8FS10qhq3mRpLZBa4fPR6PhGUdXtEsogIg97SXYtZq5RhSU+nQ==","signatures":[{"sig":"MEUCIF6OFgAMyxTmfrkZIhdVINuHNPldwsk36yZwDOjbmzthAiEAjWjyjNcFNjaIJAXiScj/Zbs+dDb50yZufLIBd7Rjyfc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":30592},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"a7390c09ee5989189667d73747ef0e65debf030e","scripts":{"dist":"rimraf dist && tsc","lint":"eslint","start":"ts-node src/index.ts","test:cli":"ts-node -r tsconfig-paths/register src/scripts/cli.ts gen-typed-bridge --src ./src/demo/bridge/index.ts --dest ./bridge.ts","test:server":"nodemon --watch src --ext ts --exec 'ts-node -r tsconfig-paths/register src/demo/index.ts'"},"_npmUser":{"name":"neilveil","email":"neilarya.in@gmail.com"},"repository":{"url":"git+https://github.com/neilveil/typed-bridge.git","type":"git"},"_npmVersion":"11.1.0","description":"Strictly typed server functions for typescript apps","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"^3.24.3","cors":"^2.8.5","chalk":"^5.4.1","dotenv":"^16.5.0","rollup":"^4.40.0","express":"^5.1.0","commander":"^13.1.0","typescript":"^5.8.3","compression":"^1.8.0","rollup-plugin-dts":"^6.2.1"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.25.0","rimraf":"^6.0.1","globals":"^16.0.0","nodemon":"^3.1.9","ts-node":"^10.9.2","prettier":"^3.5.3","@eslint/js":"^9.25.0","@types/cors":"^2.8.17","@types/node":"^22.14.1","@types/express":"^5.0.1","tsconfig-paths":"^4.2.0","typescript-eslint":"^8.30.1","@types/compression":"^1.7.5","eslint-plugin-node":"^11.1.0","@typescript-eslint/parser":"^8.30.1","@typescript-eslint/eslint-plugin":"^8.30.1"},"_npmOperationalInternal":{"tmp":"tmp/typed-bridge_1.0.0_1745167258843_0.7264345359454261","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"typed-bridge","version":"1.0.1","keywords":["api","backend","development","framework","functions","grpc","server","trpc","typed","validation","zod"],"author":{"name":"neilveil"},"license":"MIT","_id":"typed-bridge@1.0.1","maintainers":[{"name":"neilveil","email":"neilarya.in@gmail.com"}],"homepage":"https://github.com/neilveil/typed-bridge#readme","bugs":{"url":"https://github.com/neilveil/typed-bridge/issues"},"bin":{"typed-bridge":"dist/scripts/cli.js"},"dist":{"shasum":"d907e25eaf66dd0e9f81ea31af1354658579a086","tarball":"https://registry.npmjs.org/typed-bridge/-/typed-bridge-1.0.1.tgz","fileCount":30,"integrity":"sha512-a/ox2KFmZKo9AfcNppq9Ohm7pC8noBPqgKP89TlG7XRcx9GwNNErrI4j3d51DtLYXPTothhrxdO4j/y9wGE4sw==","signatures":[{"sig":"MEUCIG8uj873k+zYPlrwJMwmJ5pUurWQelQI/4H4Uahizd2mAiEAo6XZifiXazMnT+t2xeK8vCJg7fwXcliTvSvUDn6sDjo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":30725},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"1f646796258589f5c8f5734ad9dd1aae4e2b54d5","scripts":{"dist":"rimraf dist && tsc","lint":"eslint","start":"ts-node src/index.ts","test:cli":"ts-node -r tsconfig-paths/register src/scripts/cli.ts gen-typed-bridge --src ./src/demo/bridge/index.ts --dest ./bridge.ts","test:server":"nodemon --watch src --ext ts --exec 'ts-node -r tsconfig-paths/register src/demo/index.ts'"},"_npmUser":{"name":"neilveil","email":"neilarya.in@gmail.com"},"repository":{"url":"git+https://github.com/neilveil/typed-bridge.git","type":"git"},"_npmVersion":"11.1.0","description":"Strictly typed server functions for typescript apps","directories":{},"_nodeVersion":"22.14.0","dependencies":{"zod":"^3.24.3","cors":"^2.8.5","chalk":"^5.4.1","dotenv":"^16.5.0","rollup":"^4.40.0","express":"^5.1.0","commander":"^13.1.0","typescript":"^5.8.3","compression":"^1.8.0","rollup-plugin-dts":"^6.2.1"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.25.0","rimraf":"^6.0.1","globals":"^16.0.0","nodemon":"^3.1.9","ts-node":"^10.9.2","prettier":"^3.5.3","@eslint/js":"^9.25.0","@types/cors":"^2.8.17","@types/node":"^22.14.1","@types/express":"^5.0.1","tsconfig-paths":"^4.2.0","typescript-eslint":"^8.30.1","@types/compression":"^1.7.5","eslint-plugin-node":"^11.1.0","@typescript-eslint/parser":"^8.30.1","@typescript-eslint/eslint-plugin":"^8.30.1"},"_npmOperationalInternal":{"tmp":"tmp/typed-bridge_1.0.1_1746057921610_0.3884456379811909","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"typed-bridge","version":"2.0.0","keywords":["api","backend","development","framework","functions","grpc","server","trpc","typed","validation","zod"],"author":{"name":"neilveil"},"license":"MIT","_id":"typed-bridge@2.0.0","maintainers":[{"name":"neilveil","email":"neilarya.in@gmail.com"}],"homepage":"https://github.com/neilveil/typed-bridge#readme","bugs":{"url":"https://github.com/neilveil/typed-bridge/issues"},"bin":{"typed-bridge":"dist/scripts/cli.js"},"dist":{"shasum":"b98d948a3a843982d4aab04763ce29466dfad611","tarball":"https://registry.npmjs.org/typed-bridge/-/typed-bridge-2.0.0.tgz","fileCount":38,"integrity":"sha512-oleg1vrUYv8TuJoZkyo/Ev8oqHNaGnqDEepQrqQK2uIvGUFGEUOeVvMp8DrlV7JRnQa3O1rlZaOt/Icq0C0LgQ==","signatures":[{"sig":"MEUCICNi0JBrJ62yN7e//4v/vRsMgFTcnfc7XjDLm1q5GburAiEA92Q/JmX6iT1gxWNOflkQ27PC0ZpkX5km3zAwTdJDDgw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":50310},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"85a93618b45290e3800d8f6057df41df2a47fe36","scripts":{"dist":"rimraf dist && tsc","docs":"cat readme.md docs/* > docs.md","lint":"eslint","start":"ts-node src/index.ts","test:cli":"ts-node -r tsconfig-paths/register src/scripts/cli.ts gen-typed-bridge-client --src ./src/demo/bridge/index.ts --dest ./test/bridge.ts","test:bridge":"ts-node -r tsconfig-paths/register test/index.ts","test:server":"nodemon --watch src --ext ts --exec 'ts-node -r tsconfig-paths/register src/demo/index.ts'"},"_npmUser":{"name":"neilveil","email":"neilarya.in@gmail.com"},"repository":{"url":"git+https://github.com/neilveil/typed-bridge.git","type":"git"},"_npmVersion":"10.9.2","description":"Strictly typed server functions for typescript apps","directories":{},"_nodeVersion":"23.11.0","dependencies":{"zod":"^3.24.3","cors":"^2.8.5","chalk":"^5.4.1","dotenv":"^16.5.0","rollup":"^4.40.0","express":"^5.1.0","commander":"^13.1.0","typescript":"^5.8.3","compression":"^1.8.0","rollup-plugin-dts":"^6.2.1"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.25.0","rimraf":"^6.0.1","globals":"^16.0.0","nodemon":"^3.1.9","ts-node":"^10.9.2","prettier":"^3.5.3","@eslint/js":"^9.25.0","@types/cors":"^2.8.17","@types/node":"^22.14.1","@types/express":"^5.0.1","tsconfig-paths":"^4.2.0","typescript-eslint":"^8.30.1","@types/compression":"^1.7.5","eslint-plugin-node":"^11.1.0","@typescript-eslint/parser":"^8.30.1","@typescript-eslint/eslint-plugin":"^8.30.1"},"_npmOperationalInternal":{"tmp":"tmp/typed-bridge_2.0.0_1755238085255_0.6322499193653999","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"typed-bridge","version":"2.0.1","keywords":["api","backend","development","framework","functions","grpc","server","trpc","typed","validation","zod"],"author":{"name":"neilveil"},"license":"MIT","_id":"typed-bridge@2.0.1","maintainers":[{"name":"neilveil","email":"neilarya.in@gmail.com"}],"homepage":"https://github.com/neilveil/typed-bridge#readme","bugs":{"url":"https://github.com/neilveil/typed-bridge/issues"},"bin":{"typed-bridge":"dist/scripts/cli.js"},"dist":{"shasum":"a4c8663ea08bb4996c52a29e3f9761d7f29bc450","tarball":"https://registry.npmjs.org/typed-bridge/-/typed-bridge-2.0.1.tgz","fileCount":38,"integrity":"sha512-rsDP4IxjxEFQaQpHwMbRn66b2khNSfHVZcoJKBIVEbkJRZ70i+O1C6tgAkw75tBeVLgXdbtLP17PBD40GVVHEA==","signatures":[{"sig":"MEUCIAH6IYq9yPoioDHem5DBdWToIoTdZ6Bk0gGyyVHbgQxaAiEAsPgY9Gf+tZyGd9s4zLr2fMzjAgVEFXnhTD/pgQgq2tw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":50327},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"85a93618b45290e3800d8f6057df41df2a47fe36","scripts":{"dist":"rimraf dist && tsc","docs":"cat readme.md docs/* > docs.md","lint":"eslint","start":"ts-node src/index.ts","test:cli":"ts-node -r tsconfig-paths/register src/scripts/cli.ts gen-typed-bridge-client --src ./src/demo/bridge/index.ts --dest ./test/bridge.ts","test:bridge":"ts-node -r tsconfig-paths/register test/index.ts","test:server":"nodemon --watch src --ext ts --exec 'ts-node -r tsconfig-paths/register src/demo/index.ts'"},"_npmUser":{"name":"neilveil","email":"neilarya.in@gmail.com"},"repository":{"url":"git+https://github.com/neilveil/typed-bridge.git","type":"git"},"_npmVersion":"10.9.2","description":"Strictly typed server functions for typescript apps","directories":{},"_nodeVersion":"23.11.0","dependencies":{"zod":"^3.24.3","cors":"^2.8.5","chalk":"^5.4.1","dotenv":"^16.5.0","rollup":"^4.40.0","express":"^5.1.0","commander":"^13.1.0","typescript":"^5.8.3","compression":"^1.8.0","rollup-plugin-dts":"^6.2.1"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.25.0","rimraf":"^6.0.1","globals":"^16.0.0","nodemon":"^3.1.9","ts-node":"^10.9.2","prettier":"^3.5.3","@eslint/js":"^9.25.0","@types/cors":"^2.8.17","@types/node":"^22.14.1","@types/express":"^5.0.1","tsconfig-paths":"^4.2.0","typescript-eslint":"^8.30.1","@types/compression":"^1.7.5","eslint-plugin-node":"^11.1.0","@typescript-eslint/parser":"^8.30.1","@typescript-eslint/eslint-plugin":"^8.30.1"},"_npmOperationalInternal":{"tmp":"tmp/typed-bridge_2.0.1_1755255900451_0.9909370633396277","host":"s3://npm-registry-packages-npm-production"}},"2.0.2":{"name":"typed-bridge","version":"2.0.2","keywords":["api","backend","development","framework","functions","grpc","server","trpc","typed","validation","zod"],"author":{"name":"neilveil"},"license":"MIT","_id":"typed-bridge@2.0.2","maintainers":[{"name":"neilveil","email":"neilarya.in@gmail.com"}],"homepage":"https://github.com/neilveil/typed-bridge#readme","bugs":{"url":"https://github.com/neilveil/typed-bridge/issues"},"bin":{"typed-bridge":"dist/scripts/cli.js"},"dist":{"shasum":"072e686bde5201fb4958c1b0d20aed173198cb1f","tarball":"https://registry.npmjs.org/typed-bridge/-/typed-bridge-2.0.2.tgz","fileCount":38,"integrity":"sha512-L9rXBfWWSgVmdt9MRFYk8Sft50az6BQlTDACmw+a1ye5kclWV5V+5IE8aeP4b4FzNPb+V/tZgCLuNJybYGs68A==","signatures":[{"sig":"MEQCIE8A3gbUiMYpAnsYaUKah4YEiHiMPhggBFAmSmwpfxe9AiAJ96ptrJdTRq62jdrbwKVT7j4K8Y+hSkvlj6pniDEIYA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":50356},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"85a93618b45290e3800d8f6057df41df2a47fe36","scripts":{"dist":"rimraf dist && tsc","docs":"cat readme.md docs/* > docs.md","lint":"eslint","start":"ts-node src/index.ts","test:cli":"ts-node -r tsconfig-paths/register src/scripts/cli.ts gen-typed-bridge-client --src ./src/demo/bridge/index.ts --dest ./test/bridge.ts","test:bridge":"ts-node -r tsconfig-paths/register test/index.ts","test:server":"nodemon --watch src --ext ts --exec 'ts-node -r tsconfig-paths/register src/demo/index.ts'"},"_npmUser":{"name":"neilveil","email":"neilarya.in@gmail.com"},"repository":{"url":"git+https://github.com/neilveil/typed-bridge.git","type":"git"},"_npmVersion":"10.9.2","description":"Strictly typed server functions for typescript apps","directories":{},"_nodeVersion":"23.11.0","dependencies":{"zod":"^3.24.3","cors":"^2.8.5","chalk":"^5.4.1","dotenv":"^16.5.0","rollup":"^4.40.0","express":"^5.1.0","commander":"^13.1.0","typescript":"^5.8.3","compression":"^1.8.0","rollup-plugin-dts":"^6.2.1"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.25.0","rimraf":"^6.0.1","globals":"^16.0.0","nodemon":"^3.1.9","ts-node":"^10.9.2","prettier":"^3.5.3","@eslint/js":"^9.25.0","@types/cors":"^2.8.17","@types/node":"^22.14.1","@types/express":"^5.0.1","tsconfig-paths":"^4.2.0","typescript-eslint":"^8.30.1","@types/compression":"^1.7.5","eslint-plugin-node":"^11.1.0","@typescript-eslint/parser":"^8.30.1","@typescript-eslint/eslint-plugin":"^8.30.1"},"_npmOperationalInternal":{"tmp":"tmp/typed-bridge_2.0.2_1755256005592_0.5340402583197152","host":"s3://npm-registry-packages-npm-production"}},"2.0.3":{"name":"typed-bridge","version":"2.0.3","keywords":["api","backend","development","framework","functions","grpc","server","trpc","typed","validation","zod"],"author":{"name":"neilveil"},"license":"MIT","_id":"typed-bridge@2.0.3","maintainers":[{"name":"neilveil","email":"neilarya.in@gmail.com"}],"homepage":"https://github.com/neilveil/typed-bridge#readme","bugs":{"url":"https://github.com/neilveil/typed-bridge/issues"},"bin":{"typed-bridge":"dist/scripts/cli.js"},"dist":{"shasum":"23d78eb48138081f49a9b5592b8b54f786823c2e","tarball":"https://registry.npmjs.org/typed-bridge/-/typed-bridge-2.0.3.tgz","fileCount":38,"integrity":"sha512-kUNotAAIi6xoBs7RgRVqB9R/0xD0E9QtmZ8yfxdbStZkBDHunyQQFYOm7GEHAhfKdCbqzKWO2qzY63kX8oFgOw==","signatures":[{"sig":"MEUCIGNPks/kgSRxy4U0TfH1oyv2K77gOUD6lN7ATuLl+7/DAiEAwt69LJwtVd83EEOGn+5pi/0wU+/5v1EdrrrodBnc0CY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":50328},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"85a93618b45290e3800d8f6057df41df2a47fe36","scripts":{"dist":"rimraf dist && tsc","docs":"cat readme.md docs/* > docs.md","lint":"eslint","start":"ts-node src/index.ts","test:cli":"ts-node -r tsconfig-paths/register src/scripts/cli.ts gen-typed-bridge-client --src ./src/demo/bridge/index.ts --dest ./test/bridge.ts","test:bridge":"ts-node -r tsconfig-paths/register test/index.ts","test:server":"nodemon --watch src --ext ts --exec 'ts-node -r tsconfig-paths/register src/demo/index.ts'"},"_npmUser":{"name":"neilveil","email":"neilarya.in@gmail.com"},"repository":{"url":"git+https://github.com/neilveil/typed-bridge.git","type":"git"},"_npmVersion":"10.9.2","description":"Strictly typed server functions for typescript apps","directories":{},"_nodeVersion":"23.11.0","dependencies":{"zod":"^3.24.3","cors":"^2.8.5","chalk":"^5.4.1","dotenv":"^16.5.0","rollup":"^4.40.0","express":"^5.1.0","commander":"^13.1.0","typescript":"^5.8.3","compression":"^1.8.0","rollup-plugin-dts":"^6.2.1"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.25.0","rimraf":"^6.0.1","globals":"^16.0.0","nodemon":"^3.1.9","ts-node":"^10.9.2","prettier":"^3.5.3","@eslint/js":"^9.25.0","@types/cors":"^2.8.17","@types/node":"^22.14.1","@types/express":"^5.0.1","tsconfig-paths":"^4.2.0","typescript-eslint":"^8.30.1","@types/compression":"^1.7.5","eslint-plugin-node":"^11.1.0","@typescript-eslint/parser":"^8.30.1","@typescript-eslint/eslint-plugin":"^8.30.1"},"_npmOperationalInternal":{"tmp":"tmp/typed-bridge_2.0.3_1755256649428_0.7820938839892413","host":"s3://npm-registry-packages-npm-production"}},"2.0.4":{"name":"typed-bridge","version":"2.0.4","keywords":["api","backend","development","framework","functions","grpc","server","trpc","typed","validation","zod"],"author":{"name":"neilveil"},"license":"MIT","_id":"typed-bridge@2.0.4","maintainers":[{"name":"neilveil","email":"neilarya.in@gmail.com"}],"homepage":"https://github.com/neilveil/typed-bridge#readme","bugs":{"url":"https://github.com/neilveil/typed-bridge/issues"},"bin":{"typed-bridge":"dist/scripts/cli.js"},"dist":{"shasum":"35a92314e86ed4ef82cc4393bcc1945afe3771d3","tarball":"https://registry.npmjs.org/typed-bridge/-/typed-bridge-2.0.4.tgz","fileCount":38,"integrity":"sha512-RMLDDCevlvIt/P2x4PR6XWjKtTHdmzq7qRWqVnX+IyNhcrPcz65yftw2/jJvcW9K6YI0q1IbQMKzuTVY5kxHCw==","signatures":[{"sig":"MEUCIQC92nLdCmGxfy4yf5955htfnbrIc4yRe9wx1ZQRYYvBJQIgQFxxqUm6CHb8gebz2lEJbFLT9JhcYPzYgCbiivtPZ2w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":50784},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"85a93618b45290e3800d8f6057df41df2a47fe36","scripts":{"dist":"rimraf dist && tsc","docs":"cat readme.md docs/* > docs.md","lint":"eslint","start":"ts-node src/index.ts","test:cli":"ts-node -r tsconfig-paths/register src/scripts/cli.ts gen-typed-bridge-client --src ./src/demo/bridge/index.ts --dest ./test/bridge.ts","test:bridge":"ts-node -r tsconfig-paths/register test/index.ts","test:server":"nodemon --watch src --ext ts --exec 'ts-node -r tsconfig-paths/register src/demo/index.ts'"},"_npmUser":{"name":"neilveil","email":"neilarya.in@gmail.com"},"repository":{"url":"git+https://github.com/neilveil/typed-bridge.git","type":"git"},"_npmVersion":"10.9.2","description":"Strictly typed server functions for typescript apps","directories":{},"_nodeVersion":"23.11.0","dependencies":{"zod":"^3.24.3","cors":"^2.8.5","chalk":"^5.4.1","dotenv":"^16.5.0","rollup":"^4.40.0","express":"^5.1.0","commander":"^13.1.0","typescript":"^5.8.3","compression":"^1.8.0","rollup-plugin-dts":"^6.2.1"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.25.0","rimraf":"^6.0.1","globals":"^16.0.0","nodemon":"^3.1.9","ts-node":"^10.9.2","prettier":"^3.5.3","@eslint/js":"^9.25.0","@types/cors":"^2.8.17","@types/node":"^22.14.1","@types/express":"^5.0.1","tsconfig-paths":"^4.2.0","typescript-eslint":"^8.30.1","@types/compression":"^1.7.5","eslint-plugin-node":"^11.1.0","@typescript-eslint/parser":"^8.30.1","@typescript-eslint/eslint-plugin":"^8.30.1"},"_npmOperationalInternal":{"tmp":"tmp/typed-bridge_2.0.4_1755257012457_0.07995155719903524","host":"s3://npm-registry-packages-npm-production"}},"2.0.5":{"name":"typed-bridge","version":"2.0.5","keywords":["api","backend","development","framework","functions","grpc","server","trpc","typed","validation","zod"],"author":{"name":"neilveil"},"license":"MIT","_id":"typed-bridge@2.0.5","maintainers":[{"name":"neilveil","email":"neilarya.in@gmail.com"}],"homepage":"https://github.com/neilveil/typed-bridge#readme","bugs":{"url":"https://github.com/neilveil/typed-bridge/issues"},"bin":{"typed-bridge":"dist/scripts/cli.js"},"dist":{"shasum":"ca7ca9c9663e899263de890d98f8649085ebe0fd","tarball":"https://registry.npmjs.org/typed-bridge/-/typed-bridge-2.0.5.tgz","fileCount":38,"integrity":"sha512-qyPPXfKIe9j3L7oLGnA2n54NzqrAtxASqN84afqbalvSxhngs3Rp3yc6hqvce4B2yijvpuxuqyYHR9uet50+Aw==","signatures":[{"sig":"MEUCIEvOFmJHizG8lcLzsevwrXlkHvIFz98MUeInKZ/SxeXgAiEA4jmgpxlo3BtkDrtkvqQpG8limfWtomLhg7n0YGXELCs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":50777},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"5190f554a33a1e2db234e9670a4c778df8842ade","scripts":{"dist":"rimraf dist && tsc","docs":"cat readme.md docs/* > docs.md","lint":"eslint","start":"ts-node src/index.ts","test:cli":"ts-node -r tsconfig-paths/register src/scripts/cli.ts gen-typed-bridge-client --src ./src/demo/bridge/index.ts --dest ./test/bridge.ts","test:bridge":"ts-node -r tsconfig-paths/register test/index.ts","test:server":"nodemon --watch src --ext ts --exec 'ts-node -r tsconfig-paths/register src/demo/index.ts'"},"_npmUser":{"name":"neilveil","email":"neilarya.in@gmail.com"},"repository":{"url":"git+https://github.com/neilveil/typed-bridge.git","type":"git"},"_npmVersion":"10.9.2","description":"Strictly typed server functions for typescript apps","directories":{},"_nodeVersion":"23.11.0","dependencies":{"zod":"^3.24.3","cors":"^2.8.5","chalk":"^5.4.1","dotenv":"^16.5.0","rollup":"^4.40.0","express":"^5.1.0","commander":"^13.1.0","typescript":"^5.8.3","compression":"^1.8.0","rollup-plugin-dts":"^6.2.1"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.25.0","rimraf":"^6.0.1","globals":"^16.0.0","nodemon":"^3.1.9","ts-node":"^10.9.2","prettier":"^3.5.3","@eslint/js":"^9.25.0","@types/cors":"^2.8.17","@types/node":"^22.14.1","@types/express":"^5.0.1","tsconfig-paths":"^4.2.0","typescript-eslint":"^8.30.1","@types/compression":"^1.7.5","eslint-plugin-node":"^11.1.0","@typescript-eslint/parser":"^8.30.1","@typescript-eslint/eslint-plugin":"^8.30.1"},"_npmOperationalInternal":{"tmp":"tmp/typed-bridge_2.0.5_1755261639633_0.6584712678800584","host":"s3://npm-registry-packages-npm-production"}},"2.0.6":{"name":"typed-bridge","version":"2.0.6","keywords":["api","backend","development","framework","functions","grpc","server","trpc","typed","validation","zod"],"author":{"name":"neilveil"},"license":"MIT","_id":"typed-bridge@2.0.6","maintainers":[{"name":"neilveil","email":"neilarya.in@gmail.com"}],"homepage":"https://github.com/neilveil/typed-bridge#readme","bugs":{"url":"https://github.com/neilveil/typed-bridge/issues"},"bin":{"typed-bridge":"dist/scripts/cli.js"},"dist":{"shasum":"b9c53627e91b6ade0546d658dd296ccb42b01080","tarball":"https://registry.npmjs.org/typed-bridge/-/typed-bridge-2.0.6.tgz","fileCount":38,"integrity":"sha512-+Wb2gKwOPsTc3q/1sbdMJqwForMIaaUU925G3LnLh2inQKvsiSkOb+1KUfOt71g6L2aakt0mBm5noiLvsZ0xKA==","signatures":[{"sig":"MEUCIGS9wg5ER5Xvqo1SG2DTMetv2EqWBvYEv6YUf/bdHmMoAiEA+7E/76bWiF5f009yeH6tbKKtUO+XjWycaw65/eoWf/k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":52204},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"5190f554a33a1e2db234e9670a4c778df8842ade","scripts":{"dist":"rimraf dist && tsc","docs":"cat readme.md docs/* > docs.md","lint":"eslint","start":"ts-node src/index.ts","test:cli":"ts-node -r tsconfig-paths/register src/scripts/cli.ts gen-typed-bridge-client --src ./src/demo/bridge/index.ts --dest ./test/bridge.ts","test:bridge":"ts-node -r tsconfig-paths/register test/index.ts","test:server":"nodemon --watch src --ext ts --exec 'ts-node -r tsconfig-paths/register src/demo/index.ts'"},"_npmUser":{"name":"neilveil","email":"neilarya.in@gmail.com"},"repository":{"url":"git+https://github.com/neilveil/typed-bridge.git","type":"git"},"_npmVersion":"10.9.2","description":"Strictly typed server functions for typescript apps","directories":{},"_nodeVersion":"23.11.0","dependencies":{"zod":"^3.24.3","cors":"^2.8.5","chalk":"^5.4.1","dotenv":"^16.5.0","rollup":"^4.40.0","express":"^5.1.0","commander":"^13.1.0","typescript":"^5.8.3","compression":"^1.8.0","rollup-plugin-dts":"^6.2.1"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.25.0","rimraf":"^6.0.1","globals":"^16.0.0","nodemon":"^3.1.9","ts-node":"^10.9.2","prettier":"^3.5.3","@eslint/js":"^9.25.0","@types/cors":"^2.8.17","@types/node":"^22.14.1","@types/express":"^5.0.1","tsconfig-paths":"^4.2.0","typescript-eslint":"^8.30.1","@types/compression":"^1.7.5","eslint-plugin-node":"^11.1.0","@typescript-eslint/parser":"^8.30.1","@typescript-eslint/eslint-plugin":"^8.30.1"},"_npmOperationalInternal":{"tmp":"tmp/typed-bridge_2.0.6_1755265867465_0.4235344895083586","host":"s3://npm-registry-packages-npm-production"}},"2.0.7":{"name":"typed-bridge","version":"2.0.7","keywords":["api","backend","development","framework","functions","grpc","server","trpc","typed","validation","zod"],"author":{"name":"neilveil"},"license":"MIT","_id":"typed-bridge@2.0.7","maintainers":[{"name":"neilveil","email":"neilarya.in@gmail.com"}],"homepage":"https://github.com/neilveil/typed-bridge#readme","bugs":{"url":"https://github.com/neilveil/typed-bridge/issues"},"bin":{"typed-bridge":"dist/scripts/cli.js"},"dist":{"shasum":"4dd0c6e98df1588d4cb0ec6400443f3271e32b21","tarball":"https://registry.npmjs.org/typed-bridge/-/typed-bridge-2.0.7.tgz","fileCount":38,"integrity":"sha512-1maEZF9xwBlTyyi2tXROsmXSjQl3L0H3DP2EIP4uyRc0YHmSY0P2oI2mdwC8OH38zGkJNl42cV+t7D3MR+7ZLw==","signatures":[{"sig":"MEUCIDw48dv9+zxeEFxrTMq8rZVbCtAhIHcNV20Qw1tF2xFfAiEA7ok49c+DRoeGeT0o7t8D/MnDU1ikio84T0DCJdmp4ac=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":52175},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"5190f554a33a1e2db234e9670a4c778df8842ade","scripts":{"dist":"rimraf dist && tsc","docs":"cat readme.md docs/* > docs.md","lint":"eslint","start":"ts-node src/index.ts","test:cli":"ts-node -r tsconfig-paths/register src/scripts/cli.ts gen-typed-bridge-client --src ./src/demo/bridge/index.ts --dest ./test/bridge.ts","test:bridge":"ts-node -r tsconfig-paths/register test/index.ts","test:server":"nodemon --watch src --ext ts --exec 'ts-node -r tsconfig-paths/register src/demo/index.ts'"},"_npmUser":{"name":"neilveil","email":"neilarya.in@gmail.com"},"repository":{"url":"git+https://github.com/neilveil/typed-bridge.git","type":"git"},"_npmVersion":"10.9.2","description":"Strictly typed server functions for typescript apps","directories":{},"_nodeVersion":"23.11.0","dependencies":{"zod":"^3.24.3","cors":"^2.8.5","chalk":"^5.4.1","dotenv":"^16.5.0","rollup":"^4.40.0","express":"^5.1.0","commander":"^13.1.0","typescript":"^5.8.3","compression":"^1.8.0","rollup-plugin-dts":"^6.2.1"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.25.0","rimraf":"^6.0.1","globals":"^16.0.0","nodemon":"^3.1.9","ts-node":"^10.9.2","prettier":"^3.5.3","@eslint/js":"^9.25.0","@types/cors":"^2.8.17","@types/node":"^22.14.1","@types/express":"^5.0.1","tsconfig-paths":"^4.2.0","typescript-eslint":"^8.30.1","@types/compression":"^1.7.5","eslint-plugin-node":"^11.1.0","@typescript-eslint/parser":"^8.30.1","@typescript-eslint/eslint-plugin":"^8.30.1"},"_npmOperationalInternal":{"tmp":"tmp/typed-bridge_2.0.7_1755266510105_0.33810673352311627","host":"s3://npm-registry-packages-npm-production"}},"2.0.8":{"name":"typed-bridge","version":"2.0.8","keywords":["api","backend","development","framework","functions","grpc","server","trpc","typed","validation","zod"],"author":{"name":"neilveil"},"license":"MIT","_id":"typed-bridge@2.0.8","maintainers":[{"name":"neilveil","email":"neilarya.in@gmail.com"}],"homepage":"https://github.com/neilveil/typed-bridge#readme","bugs":{"url":"https://github.com/neilveil/typed-bridge/issues"},"bin":{"typed-bridge":"dist/scripts/cli.js"},"dist":{"shasum":"fbd2a9eb36c1fdf8c1465551656c5cc014ac7886","tarball":"https://registry.npmjs.org/typed-bridge/-/typed-bridge-2.0.8.tgz","fileCount":38,"integrity":"sha512-U8Oe+UpcZDFN54wmk7pOraEO2Gs7XYqX2L6PjEVkdzKgZmXOxxPRR8GhfoJt5Q1hKzMlgfWtczDNoc2pKbUp1A==","signatures":[{"sig":"MEUCIB6ofVaSiOVZjFWxH0IU3/L2ZUX5aHrgIXIYunkBxut/AiEAvUYT0Zmr7p+tMGmMboeNd2ohabGvLxlegWZgdmlha98=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":52672},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"5190f554a33a1e2db234e9670a4c778df8842ade","scripts":{"dist":"rimraf dist && tsc","docs":"cat readme.md docs/* > docs.md","lint":"eslint","start":"ts-node src/index.ts","test:cli":"ts-node -r tsconfig-paths/register src/scripts/cli.ts gen-typed-bridge-client --src ./src/demo/bridge/index.ts --dest ./test/bridge.ts","test:bridge":"ts-node -r tsconfig-paths/register test/index.ts","test:server":"nodemon --watch src --ext ts --exec 'ts-node -r tsconfig-paths/register src/demo/index.ts'"},"_npmUser":{"name":"neilveil","email":"neilarya.in@gmail.com"},"repository":{"url":"git+https://github.com/neilveil/typed-bridge.git","type":"git"},"_npmVersion":"10.9.2","description":"Strictly typed server functions for typescript apps","directories":{},"_nodeVersion":"23.11.0","dependencies":{"zod":"^3.24.3","cors":"^2.8.5","chalk":"^5.4.1","dotenv":"^16.5.0","rollup":"^4.40.0","express":"^5.1.0","commander":"^13.1.0","typescript":"^5.8.3","compression":"^1.8.0","rollup-plugin-dts":"^6.2.1"},"_hasShrinkwrap":false,"devDependencies":{"eslint":"^9.25.0","rimraf":"^6.0.1","globals":"^16.0.0","nodemon":"^3.1.9","ts-node":"^10.9.2","prettier":"^3.5.3","@eslint/js":"^9.25.0","@types/cors":"^2.8.17","@types/node":"^22.14.1","@types/express":"^5.0.1","tsconfig-paths":"^4.2.0","typescript-eslint":"^8.30.1","@types/compression":"^1.7.5","eslint-plugin-node":"^11.1.0","@typescript-eslint/parser":"^8.30.1","@typescript-eslint/eslint-plugin":"^8.30.1"},"_npmOperationalInternal":{"tmp":"tmp/typed-bridge_2.0.8_1755270729312_0.8468511285531439","host":"s3://npm-registry-packages-npm-production"}},"2.0.9":{"name":"typed-bridge","version":"2.0.9","keywords":["api","backend","development","framework","functions","grpc","server","trpc","typed","validation","zod"],"author":{"name":"neilveil"},"license":"MIT","_id":"typed-bridge@2.0.9","maintainers":[{"name":"neilveil","email":"neilarya.in@gmail.com"}],"homepage":"https://github.com/neilveil/typed-bridge#readme","bugs":{"url":"https://github.com/neilveil/typed-bridge/issues"},"bin":{"typed-bridge":"dist/scripts/cli.js"},"dist":{"shasum":"c7ef1c19f1392b15056d493f6ab14ef260e91d60","tarball":"https://registry.npmjs.org/typed-bridge/-/typed-bridge-2.0.9.tgz","fileCount":38,"integrity":"sha512-RMBSChc+kHtPvelo+sgjX7++Cvtc90/IvIY9IfxeefaLBsaCrmu0XRq5dwYrlsMlW3lEUFl2GC+Kb8/uqCxEAQ==","signatures":[{"sig":"MEUCIFQw9HJDxDCIRzs05GwUCcAyuAcx5lZ6W56FgH0v12UhAiEA6EbIMTCwpe695ntivQyUEB5WBwNYpGrXwRkrRGdA1Zk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":49596},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"5190f554a33a1e2db234e9670a4c778df8842ade","scripts":{"dist":"rimraf dist && tsc","docs":"cat readme.md docs/* > docs.md","lint":"eslint","start":"ts-node src/index.ts","test:cli":"ts-node -r tsconfig-paths/register src/scripts/cli.ts gen-typed-bridge-client --src ./src/demo/bridge/index.ts --dest ./test/bridge.ts","test:bridge":"ts-node -r tsconfig-paths/register test/index.ts","test:server":"nodemon --watch src --ext ts --exec 'ts-node -r tsconfig-paths/register src/demo/index.ts'"},"_npmUser":{"name":"neilveil","email":"neilarya.in@gmail.com"},"repository":{"url":"git+https://github.com/neilveil/typed-bridge.git","type":"git"},"_npmVersion":"10.9.2","description":"Strictly typed server functions for typescript apps","directories":{},"_nodeVersion":"23.11.0","dependencies":{"cors":"^2.8.5","chalk":"^5.4.1","dotenv":"^16.5.0","rollup":"^4.40.0","express":"^5.1.0","commander":"^13.1.0","typescript":"^5.8.3","compression":"^1.8.0","rollup-plugin-dts":"^6.2.1"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^3.24.3","eslint":"^9.25.0","rimraf":"^6.0.1","globals":"^16.0.0","nodemon":"^3.1.9","ts-node":"^10.9.2","prettier":"^3.5.3","@eslint/js":"^9.25.0","@types/cors":"^2.8.17","@types/node":"^22.14.1","@types/express":"^5.0.1","tsconfig-paths":"^4.2.0","typescript-eslint":"^8.30.1","@types/compression":"^1.7.5","eslint-plugin-node":"^11.1.0","@typescript-eslint/parser":"^8.30.1","@typescript-eslint/eslint-plugin":"^8.30.1"},"_npmOperationalInternal":{"tmp":"tmp/typed-bridge_2.0.9_1755271936843_0.8921223688550735","host":"s3://npm-registry-packages-npm-production"}},"2.0.10":{"name":"typed-bridge","version":"2.0.10","keywords":["api","backend","development","framework","functions","grpc","server","trpc","typed","validation","zod"],"author":{"name":"neilveil"},"license":"MIT","_id":"typed-bridge@2.0.10","maintainers":[{"name":"neilveil","email":"neilarya.in@gmail.com"}],"homepage":"https://github.com/neilveil/typed-bridge#readme","bugs":{"url":"https://github.com/neilveil/typed-bridge/issues"},"bin":{"typed-bridge":"dist/scripts/cli.js"},"dist":{"shasum":"a5287c2b29d9e85f5120275e7fd0e0a9e39fc3ef","tarball":"https://registry.npmjs.org/typed-bridge/-/typed-bridge-2.0.10.tgz","fileCount":38,"integrity":"sha512-gWy5Gnr2woMXdGoRCUF1vNun0SSr/3p32FEpVfrkR3B3ajfpcLQ87ZaQNQPrBhLSLYA0oRrglr4BM6P49V718Q==","signatures":[{"sig":"MEUCIQCYWdUxN1L+tBhSnAje/M5cIl9dq9GnJPq4pqbt4mulFwIgLfXRWu4H4Cr22mwRo86EEiJicXfH73hjbrLSG4943MI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":49597},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"b8a685422d3567be7d4a6af28513d428c0ea8e73","scripts":{"dist":"rimraf dist && tsc","docs":"cat readme.md docs/* > docs.md","lint":"eslint","start":"ts-node src/index.ts","test:cli":"ts-node -r tsconfig-paths/register src/scripts/cli.ts gen-typed-bridge-client --src ./src/demo/bridge/index.ts --dest ./test/bridge.ts","test:bridge":"ts-node -r tsconfig-paths/register test/index.ts","test:server":"nodemon --watch src --ext ts --exec 'ts-node -r tsconfig-paths/register src/demo/index.ts'"},"_npmUser":{"name":"neilveil","email":"neilarya.in@gmail.com"},"repository":{"url":"git+https://github.com/neilveil/typed-bridge.git","type":"git"},"_npmVersion":"10.9.2","description":"Strictly typed server functions for typescript apps","directories":{},"_nodeVersion":"23.11.0","dependencies":{"cors":"^2.8.5","chalk":"^5.4.1","dotenv":"^16.5.0","rollup":"^4.40.0","express":"^5.1.0","commander":"^13.1.0","typescript":"^5.8.3","compression":"^1.8.0","rollup-plugin-dts":"^6.2.1"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^3.24.3","eslint":"^9.25.0","rimraf":"^6.0.1","globals":"^16.0.0","nodemon":"^3.1.9","ts-node":"^10.9.2","prettier":"^3.5.3","@eslint/js":"^9.25.0","@types/cors":"^2.8.17","@types/node":"^22.14.1","@types/express":"^5.0.1","tsconfig-paths":"^4.2.0","typescript-eslint":"^8.30.1","@types/compression":"^1.7.5","eslint-plugin-node":"^11.1.0","@typescript-eslint/parser":"^8.30.1","@typescript-eslint/eslint-plugin":"^8.30.1"},"_npmOperationalInternal":{"tmp":"tmp/typed-bridge_2.0.10_1755272878181_0.16616894331495025","host":"s3://npm-registry-packages-npm-production"}},"2.0.11":{"name":"typed-bridge","version":"2.0.11","keywords":["api","backend","development","framework","functions","grpc","server","trpc","typed","validation","zod"],"author":{"name":"neilveil"},"license":"MIT","_id":"typed-bridge@2.0.11","maintainers":[{"name":"neilveil","email":"neilarya.in@gmail.com"}],"homepage":"https://github.com/neilveil/typed-bridge#readme","bugs":{"url":"https://github.com/neilveil/typed-bridge/issues"},"bin":{"typed-bridge":"dist/scripts/cli.js"},"dist":{"shasum":"1f7108a6b9191ad8b47c090e8f6a82d80352e51b","tarball":"https://registry.npmjs.org/typed-bridge/-/typed-bridge-2.0.11.tgz","fileCount":38,"integrity":"sha512-jZ482IleyrN9IaSXzF/cPQAQ4m4t4DiKoQm3eaidNfMaTPXh1yBSWd5VZSdAZ4mwA9BuDoQU23dZZLmlLi3o7w==","signatures":[{"sig":"MEQCIHbw3IgJz65cIutmwBGgJoiSLHJoRUZkRlou1JV6wCmrAiBBTEdjIqKdTuJUB0VXUV+med3Mj65xvM87oKWQLeP/PQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":49572},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"1db5379fb48a67866114ce69a720988f26ea7e8a","scripts":{"dist":"rimraf dist && tsc","docs":"cat readme.md docs/* > docs.md","lint":"eslint","start":"ts-node src/index.ts","test:cli":"ts-node -r tsconfig-paths/register src/scripts/cli.ts gen-typed-bridge-client --src ./src/demo/bridge/index.ts --dest ./test/bridge.ts","test:bridge":"ts-node -r tsconfig-paths/register test/index.ts","test:server":"nodemon --watch src --ext ts --exec 'ts-node -r tsconfig-paths/register src/demo/index.ts'"},"_npmUser":{"name":"neilveil","email":"neilarya.in@gmail.com"},"repository":{"url":"git+https://github.com/neilveil/typed-bridge.git","type":"git"},"_npmVersion":"10.9.2","description":"Strictly typed server functions for typescript apps","directories":{},"_nodeVersion":"23.11.0","dependencies":{"cors":"^2.8.5","chalk":"^5.4.1","dotenv":"^16.5.0","rollup":"^4.40.0","express":"^5.1.0","commander":"^13.1.0","typescript":"^5.8.3","compression":"^1.8.0","rollup-plugin-dts":"^6.2.1"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^3.24.3","eslint":"^9.25.0","rimraf":"^6.0.1","globals":"^16.0.0","nodemon":"^3.1.9","ts-node":"^10.9.2","prettier":"^3.5.3","@eslint/js":"^9.25.0","@types/cors":"^2.8.17","@types/node":"^22.14.1","@types/express":"^5.0.1","tsconfig-paths":"^4.2.0","typescript-eslint":"^8.30.1","@types/compression":"^1.7.5","eslint-plugin-node":"^11.1.0","@typescript-eslint/parser":"^8.30.1","@typescript-eslint/eslint-plugin":"^8.30.1"},"_npmOperationalInternal":{"tmp":"tmp/typed-bridge_2.0.11_1755288745526_0.7284021375598113","host":"s3://npm-registry-packages-npm-production"}},"2.0.12":{"name":"typed-bridge","version":"2.0.12","keywords":["api","backend","development","framework","functions","grpc","server","trpc","typed","validation","zod"],"author":{"name":"neilveil"},"license":"MIT","_id":"typed-bridge@2.0.12","maintainers":[{"name":"neilveil","email":"neilarya.in@gmail.com"}],"homepage":"https://github.com/neilveil/typed-bridge#readme","bugs":{"url":"https://github.com/neilveil/typed-bridge/issues"},"bin":{"typed-bridge":"dist/scripts/cli.js"},"dist":{"shasum":"d4948fa54d20c47d866bf9dedbf536109a36d0d3","tarball":"https://registry.npmjs.org/typed-bridge/-/typed-bridge-2.0.12.tgz","fileCount":38,"integrity":"sha512-1mmct6l5jN5oDz8Tyw0U3ALRS1Vkq/q9t41CYYY1c+GKCV69HgLmGHy5FMfN4b87FtLyQWJixhOBsvsPwuIF8Q==","signatures":[{"sig":"MEQCIEkWDIEuglbR/rILgjzwzvK2bOcaytw/cHSvVzURmqmSAiBd2be4HOyCCgPZHY+gDIYya5IwpbG6Rk+TeL0/MmqlIA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":50011},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"846a52d1e50aa55be5c1b398f50dcc6d99fee58c","scripts":{"dist":"rimraf dist && tsc","docs":"cat readme.md docs/* > docs.md","lint":"eslint","start":"ts-node src/index.ts","test:cli":"ts-node -r tsconfig-paths/register src/scripts/cli.ts gen-typed-bridge-client --src ./src/demo/bridge/index.ts --dest ./test/bridge.ts","test:bridge":"ts-node -r tsconfig-paths/register test/index.ts","test:server":"nodemon --watch src --ext ts --exec 'ts-node -r tsconfig-paths/register src/demo/index.ts'"},"_npmUser":{"name":"neilveil","email":"neilarya.in@gmail.com"},"repository":{"url":"git+https://github.com/neilveil/typed-bridge.git","type":"git"},"_npmVersion":"10.9.2","description":"Strictly typed server functions for typescript apps","directories":{},"_nodeVersion":"23.11.0","dependencies":{"cors":"^2.8.5","chalk":"^5.4.1","dotenv":"^16.5.0","rollup":"^4.40.0","express":"^5.1.0","commander":"^13.1.0","typescript":"^5.8.3","compression":"^1.8.0","rollup-plugin-dts":"^6.2.1"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^3.24.3","eslint":"^9.25.0","rimraf":"^6.0.1","globals":"^16.0.0","nodemon":"^3.1.9","ts-node":"^10.9.2","prettier":"^3.5.3","@eslint/js":"^9.25.0","@types/cors":"^2.8.17","@types/node":"^22.14.1","@types/express":"^5.0.1","tsconfig-paths":"^4.2.0","typescript-eslint":"^8.30.1","@types/compression":"^1.7.5","eslint-plugin-node":"^11.1.0","@typescript-eslint/parser":"^8.30.1","@typescript-eslint/eslint-plugin":"^8.30.1"},"_npmOperationalInternal":{"tmp":"tmp/typed-bridge_2.0.12_1755838024957_0.5544225949681612","host":"s3://npm-registry-packages-npm-production"}},"2.0.13":{"name":"typed-bridge","version":"2.0.13","keywords":["api","backend","development","framework","functions","grpc","server","trpc","typed","validation","zod"],"author":{"name":"neilveil"},"license":"MIT","_id":"typed-bridge@2.0.13","maintainers":[{"name":"neilveil","email":"neilarya.in@gmail.com"}],"homepage":"https://github.com/neilveil/typed-bridge#readme","bugs":{"url":"https://github.com/neilveil/typed-bridge/issues"},"bin":{"typed-bridge":"dist/scripts/cli.js"},"dist":{"shasum":"06849299efe29234a1b194526fbfc13df5145cf1","tarball":"https://registry.npmjs.org/typed-bridge/-/typed-bridge-2.0.13.tgz","fileCount":38,"integrity":"sha512-8qpiK60J3o/k2XXfTR5QfMPUJWvgrOE7GribnKKTIna4VD3ccletv5yIWwYB1xS3chIdS+d2Clg/StdJyb7r2A==","signatures":[{"sig":"MEQCIFBKJXBaRlmKvkM+Iq/DoxVcwkTR7NgsSeGW5qujCUifAiAucv/qpfu7AvmugOx+oTvxhtXvN/DMQH143YL4QcZYqA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":50030},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"7a8f3a8832fa11f18273bccc68164143cf866f9d","scripts":{"dist":"rimraf dist && tsc","docs":"cat readme.md docs/* > docs.md","lint":"eslint","start":"ts-node src/index.ts","test:cli":"ts-node -r tsconfig-paths/register src/scripts/cli.ts gen-typed-bridge-client --src ./src/demo/bridge/index.ts --dest ./test/bridge.ts","test:bridge":"ts-node -r tsconfig-paths/register test/index.ts","test:server":"nodemon --watch src --ext ts --exec 'ts-node -r tsconfig-paths/register src/demo/index.ts'"},"_npmUser":{"name":"neilveil","email":"neilarya.in@gmail.com"},"repository":{"url":"git+https://github.com/neilveil/typed-bridge.git","type":"git"},"_npmVersion":"10.9.2","description":"Strictly typed server functions for typescript apps","directories":{},"_nodeVersion":"23.11.0","dependencies":{"cors":"^2.8.5","chalk":"^5.4.1","dotenv":"^16.5.0","rollup":"^4.40.0","express":"^5.1.0","commander":"^13.1.0","typescript":"^5.8.3","compression":"^1.8.0","rollup-plugin-dts":"^6.2.1"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^3.24.3","eslint":"^9.25.0","rimraf":"^6.0.1","globals":"^16.0.0","nodemon":"^3.1.9","ts-node":"^10.9.2","prettier":"^3.5.3","@eslint/js":"^9.25.0","@types/cors":"^2.8.17","@types/node":"^22.14.1","@types/express":"^5.0.1","tsconfig-paths":"^4.2.0","typescript-eslint":"^8.30.1","@types/compression":"^1.7.5","eslint-plugin-node":"^11.1.0","@typescript-eslint/parser":"^8.30.1","@typescript-eslint/eslint-plugin":"^8.30.1"},"_npmOperationalInternal":{"tmp":"tmp/typed-bridge_2.0.13_1755839320985_0.7268349014673938","host":"s3://npm-registry-packages-npm-production"}},"2.0.14":{"name":"typed-bridge","version":"2.0.14","keywords":["api","backend","development","framework","functions","grpc","server","trpc","typed","validation","zod"],"author":{"name":"neilveil"},"license":"MIT","_id":"typed-bridge@2.0.14","maintainers":[{"name":"neilveil","email":"neilarya.in@gmail.com"}],"homepage":"https://github.com/neilveil/typed-bridge#readme","bugs":{"url":"https://github.com/neilveil/typed-bridge/issues"},"bin":{"typed-bridge":"dist/scripts/cli.js"},"dist":{"shasum":"53e7ffb2d3f3af99623faf7076d8308283bce5fa","tarball":"https://registry.npmjs.org/typed-bridge/-/typed-bridge-2.0.14.tgz","fileCount":38,"integrity":"sha512-Suwyc0QOHSZEK+zIZy4KRP96WxJRjYhA85eg0YcgnfE2/CONp3jOuJ43gIrly12H8S6Qv2TQx6LJT8lDsWrXDQ==","signatures":[{"sig":"MEQCIE30Wc0akXRlbWv+xyCSgeB5wkivl05lEyhg/bJtR5JOAiA/l0WoOmufWvqH6v++faPM3xAIwBF5pd0uGsykvZz1yw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":50483},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"803b5224cf8b0f50948f3b9d0ef6b76e64484195","scripts":{"dist":"rimraf dist && tsc","docs":"cat readme.md docs/* > docs.md","lint":"eslint","start":"ts-node src/index.ts","test:cli":"ts-node -r tsconfig-paths/register src/scripts/cli.ts gen-typed-bridge-client --src ./src/demo/bridge/index.ts --dest ./test/bridge.ts","test:bridge":"ts-node -r tsconfig-paths/register test/index.ts","test:server":"nodemon --watch src --ext ts --exec 'ts-node -r tsconfig-paths/register src/demo/index.ts'"},"_npmUser":{"name":"neilveil","email":"neilarya.in@gmail.com"},"repository":{"url":"git+https://github.com/neilveil/typed-bridge.git","type":"git"},"_npmVersion":"10.9.2","description":"Strictly typed server functions for typescript apps","directories":{},"_nodeVersion":"23.11.0","dependencies":{"cors":"^2.8.5","chalk":"^5.4.1","dotenv":"^16.5.0","rollup":"^4.40.0","express":"^5.1.0","commander":"^13.1.0","typescript":"^5.8.3","compression":"^1.8.0","rollup-plugin-dts":"^6.2.1"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^3.24.3","eslint":"^9.25.0","rimraf":"^6.0.1","globals":"^16.0.0","nodemon":"^3.1.9","ts-node":"^10.9.2","prettier":"^3.5.3","@eslint/js":"^9.25.0","@types/cors":"^2.8.17","@types/node":"^22.14.1","@types/express":"^5.0.1","tsconfig-paths":"^4.2.0","typescript-eslint":"^8.30.1","@types/compression":"^1.7.5","eslint-plugin-node":"^11.1.0","@typescript-eslint/parser":"^8.30.1","@typescript-eslint/eslint-plugin":"^8.30.1"},"_npmOperationalInternal":{"tmp":"tmp/typed-bridge_2.0.14_1762690144761_0.013648680720884654","host":"s3://npm-registry-packages-npm-production"}},"2.0.15":{"name":"typed-bridge","version":"2.0.15","keywords":["api","backend","development","framework","functions","grpc","server","trpc","typed","validation","zod"],"author":{"name":"neilveil"},"license":"MIT","_id":"typed-bridge@2.0.15","maintainers":[{"name":"neilveil","email":"neilarya.in@gmail.com"}],"homepage":"https://github.com/neilveil/typed-bridge#readme","bugs":{"url":"https://github.com/neilveil/typed-bridge/issues"},"bin":{"typed-bridge":"dist/scripts/cli.js"},"dist":{"shasum":"e4c21b3a73f9a5c169bc0581168acd7c91a48270","tarball":"https://registry.npmjs.org/typed-bridge/-/typed-bridge-2.0.15.tgz","fileCount":38,"integrity":"sha512-XFuf/y44vj0jdglpa30uaCtGpdGGeCgdNskH+IxhsYF7Jljeh4uzK6zAOolN561zN4n3l1nuMmyCRkDl4lDqAg==","signatures":[{"sig":"MEQCICrgYdoRE1i0I9SiRw6n4u8gpcsWPPlCQOkYjR5/aQTSAiBQeYts65piNb1sL7C92yIZsdZwqQMCefpztvZ9FdUDwA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":50491},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"ec1e9f7220920fd25f07adb55e4cf22de620f8eb","scripts":{"dist":"rimraf dist && tsc","docs":"cat readme.md docs/* > docs.md","lint":"eslint","start":"ts-node src/index.ts","test:cli":"ts-node -r tsconfig-paths/register src/scripts/cli.ts gen-typed-bridge-client --src ./src/demo/bridge/index.ts --dest ./test/bridge.ts","test:bridge":"ts-node -r tsconfig-paths/register test/index.ts","test:server":"nodemon --watch src --ext ts --exec 'ts-node -r tsconfig-paths/register src/demo/index.ts'"},"_npmUser":{"name":"neilveil","email":"neilarya.in@gmail.com"},"repository":{"url":"git+https://github.com/neilveil/typed-bridge.git","type":"git"},"_npmVersion":"10.9.2","description":"Strictly typed server functions for typescript apps","directories":{},"_nodeVersion":"23.11.0","dependencies":{"cors":"^2.8.5","chalk":"^5.4.1","dotenv":"^16.5.0","rollup":"^4.40.0","express":"^5.1.0","commander":"^13.1.0","typescript":"^5.8.3","compression":"^1.8.0","rollup-plugin-dts":"^6.2.1"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^3.24.3","eslint":"^9.25.0","rimraf":"^6.0.1","globals":"^16.0.0","nodemon":"^3.1.9","ts-node":"^10.9.2","prettier":"^3.5.3","@eslint/js":"^9.25.0","@types/cors":"^2.8.17","@types/node":"^22.14.1","@types/express":"^5.0.1","tsconfig-paths":"^4.2.0","typescript-eslint":"^8.30.1","@types/compression":"^1.7.5","eslint-plugin-node":"^11.1.0","@typescript-eslint/parser":"^8.30.1","@typescript-eslint/eslint-plugin":"^8.30.1"},"_npmOperationalInternal":{"tmp":"tmp/typed-bridge_2.0.15_1762690465421_0.6680029424347087","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"typed-bridge","version":"2.1.0","keywords":["api","backend","development","framework","functions","grpc","server","trpc","typed","validation","zod"],"author":{"name":"neilveil"},"license":"MIT","_id":"typed-bridge@2.1.0","maintainers":[{"name":"neilveil","email":"neilarya.in@gmail.com"}],"homepage":"https://github.com/neilveil/typed-bridge#readme","bugs":{"url":"https://github.com/neilveil/typed-bridge/issues"},"bin":{"typed-bridge":"dist/scripts/cli.js"},"dist":{"shasum":"503596b98a529633d8bac723b6bfb38dbaff1abf","tarball":"https://registry.npmjs.org/typed-bridge/-/typed-bridge-2.1.0.tgz","fileCount":40,"integrity":"sha512-Y+2guvg2gz6SGuIdorEEfqfhjqlzOYrN/8M3xzh8tfB2ACXfeDlujQiMUoQdhDhcgOI3WVZU9OxMa8ZITzOXMw==","signatures":[{"sig":"MEUCICGuHft2KNl3Ahj7Oy7MJbirCn5ynSPDrwXpVRCHZDmNAiEA16l4EhInyq8EhuNhhQwgoD+Vfv/Yj73W8qo4BEO6f3Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":94212},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"95e49c1efd66e786ad11733c830b3eed90060a87","scripts":{"dist":"rimraf dist && tsc","docs":"cat readme.md docs/* > docs.md","lint":"eslint","start":"tsx src/index.ts","test:cli":"tsx src/scripts/cli.ts gen-typed-bridge-client --src ./src/demo/bridge/index.ts --dest ./test/bridge.ts","test:bridge":"tsx test/index.ts","test:server":"tsx --watch src/demo/index.ts"},"_npmUser":{"name":"neilveil","email":"neilarya.in@gmail.com"},"repository":{"url":"git+https://github.com/neilveil/typed-bridge.git","type":"git"},"_npmVersion":"11.6.2","description":"Strictly typed server functions for typescript apps","directories":{},"_nodeVersion":"24.12.0","dependencies":{"zod":"^4.3.6","cors":"^2.8.5","chalk":"^5.4.1","express":"^5.1.0","commander":"^13.1.0","compression":"^1.8.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.25.0","rimraf":"^6.0.1","rollup":"^4.40.0","globals":"^16.0.0","nodemon":"^3.1.9","prettier":"^3.5.3","@eslint/js":"^9.25.0","typescript":"^5.8.3","@types/cors":"^2.8.17","@types/node":"^22.14.1","@types/express":"^5.0.1","tsconfig-paths":"^4.2.0","rollup-plugin-dts":"^6.2.1","typescript-eslint":"^8.30.1","@types/compression":"^1.7.5","eslint-plugin-node":"^11.1.0","@typescript-eslint/parser":"^8.30.1","@typescript-eslint/eslint-plugin":"^8.30.1"},"_npmOperationalInternal":{"tmp":"tmp/typed-bridge_2.1.0_1773507249641_0.755126881831579","host":"s3://npm-registry-packages-npm-production"}},"2.1.1":{"name":"typed-bridge","version":"2.1.1","keywords":["api","backend","development","framework","functions","grpc","server","trpc","typed","validation","zod"],"author":{"name":"neilveil"},"license":"MIT","_id":"typed-bridge@2.1.1","maintainers":[{"name":"neilveil","email":"neilarya.in@gmail.com"}],"homepage":"https://github.com/neilveil/typed-bridge#readme","bugs":{"url":"https://github.com/neilveil/typed-bridge/issues"},"bin":{"typed-bridge":"dist/scripts/cli.js"},"dist":{"shasum":"949d5dc6d6cd6e1504b8a96623e1e8a45c4c8315","tarball":"https://registry.npmjs.org/typed-bridge/-/typed-bridge-2.1.1.tgz","fileCount":40,"integrity":"sha512-VhR82RVKF750wDKVToSMIYxvxLQrrtDE9bY9oxQOo3pf1ppUuFiu31QpvsGlwJ5Mi4dE0wKLul2b8ITeLnvihA==","signatures":[{"sig":"MEUCIQCbKuyeWknZSH8rpPDpXB5HnIuzbFceVd1oQvX7oef4DgIgOhAyUfizluApYlk1+XwqvavZ8zwlFkWsTxHyjMd1DaE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":94212},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"a75fcf5af153265a51506bc3c53dc7b78b2c9d33","scripts":{"dist":"rimraf dist && tsc","docs":"cat readme.md docs/* > docs.md","lint":"eslint","start":"tsx src/index.ts","test:cli":"tsx src/scripts/cli.ts gen-typed-bridge-client --src ./src/demo/bridge/index.ts --dest ./test/bridge.ts","test:bridge":"tsx test/index.ts","test:server":"tsx --watch src/demo/index.ts"},"_npmUser":{"name":"neilveil","email":"neilarya.in@gmail.com"},"repository":{"url":"git+https://github.com/neilveil/typed-bridge.git","type":"git"},"_npmVersion":"11.6.2","description":"Strictly typed server functions for typescript apps","directories":{},"_nodeVersion":"24.12.0","dependencies":{"zod":"^4.3.6","cors":"^2.8.5","chalk":"^5.4.1","rollup":"^4.40.0","express":"^5.1.0","commander":"^13.1.0","typescript":"^5.8.3","compression":"^1.8.0","rollup-plugin-dts":"^6.2.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.25.0","rimraf":"^6.0.1","globals":"^16.0.0","nodemon":"^3.1.9","prettier":"^3.5.3","@eslint/js":"^9.25.0","@types/cors":"^2.8.17","@types/node":"^22.14.1","@types/express":"^5.0.1","tsconfig-paths":"^4.2.0","typescript-eslint":"^8.30.1","@types/compression":"^1.7.5","eslint-plugin-node":"^11.1.0","@typescript-eslint/parser":"^8.30.1","@typescript-eslint/eslint-plugin":"^8.30.1"},"_npmOperationalInternal":{"tmp":"tmp/typed-bridge_2.1.1_1773507502663_0.20156196984164798","host":"s3://npm-registry-packages-npm-production"}},"2.1.2":{"name":"typed-bridge","version":"2.1.2","keywords":["api","backend","development","framework","functions","grpc","server","trpc","typed","validation","zod"],"author":{"name":"neilveil"},"license":"MIT","_id":"typed-bridge@2.1.2","maintainers":[{"name":"neilveil","email":"neilarya.in@gmail.com"}],"homepage":"https://github.com/neilveil/typed-bridge#readme","bugs":{"url":"https://github.com/neilveil/typed-bridge/issues"},"bin":{"typed-bridge":"dist/scripts/cli.js"},"dist":{"shasum":"f0acd5f34b854c46dedb9fb44cd9745c6cfd7cb7","tarball":"https://registry.npmjs.org/typed-bridge/-/typed-bridge-2.1.2.tgz","fileCount":40,"integrity":"sha512-JRBVQ04zhbByfk0Q1kotlHK8OOlHvFYH7qtjesbbJfMFtTVO3LzFx7e5UUqRfljz2zAws7wCZ8RV6N0rgJ46eA==","signatures":[{"sig":"MEUCIQCTgBnWv+c5iNWrM1a1hOiapAAlXnKb5e8gyhVt2xlz3wIgDkxRrxAi15YqVJxf7iiH+clQDNtLxjw8qP+hpKSKVWE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":104309},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"b2d86b3320366f858f83ab8faf720cb51d44752b","scripts":{"dist":"rimraf dist && tsc","docs":"cat readme.md docs/* > docs.md","lint":"eslint","start":"tsx src/index.ts","test:cli":"tsx src/scripts/cli.ts gen-typed-bridge-client --src ./src/demo/bridge/index.ts --dest ./test/bridge.ts","test:bridge":"tsx test/index.ts","test:server":"tsx --watch src/demo/index.ts"},"_npmUser":{"name":"neilveil","email":"neilarya.in@gmail.com"},"repository":{"url":"git+https://github.com/neilveil/typed-bridge.git","type":"git"},"_npmVersion":"11.6.2","description":"Strictly typed server functions for typescript apps","directories":{},"_nodeVersion":"24.12.0","dependencies":{"zod":"^4.3.6","cors":"^2.8.5","chalk":"^5.4.1","rollup":"^4.40.0","express":"^5.1.0","commander":"^13.1.0","typescript":"^5.8.3","compression":"^1.8.0","rollup-plugin-dts":"^6.2.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.25.0","rimraf":"^6.0.1","globals":"^16.0.0","nodemon":"^3.1.9","prettier":"^3.5.3","@eslint/js":"^9.25.0","@types/cors":"^2.8.17","@types/node":"^22.14.1","@types/express":"^5.0.1","tsconfig-paths":"^4.2.0","typescript-eslint":"^8.30.1","@types/compression":"^1.7.5","eslint-plugin-node":"^11.1.0","@typescript-eslint/parser":"^8.30.1","@typescript-eslint/eslint-plugin":"^8.30.1"},"_npmOperationalInternal":{"tmp":"tmp/typed-bridge_2.1.2_1773508891483_0.04198450564706113","host":"s3://npm-registry-packages-npm-production"}},"2.1.3":{"name":"typed-bridge","version":"2.1.3","keywords":["api","backend","development","framework","functions","grpc","server","trpc","typed","validation","zod"],"author":{"name":"neilveil"},"license":"MIT","_id":"typed-bridge@2.1.3","maintainers":[{"name":"neilveil","email":"neilarya.in@gmail.com"}],"homepage":"https://github.com/neilveil/typed-bridge#readme","bugs":{"url":"https://github.com/neilveil/typed-bridge/issues"},"bin":{"typed-bridge":"dist/scripts/cli.js"},"dist":{"shasum":"d847d342f0710fb546a62a7a485ff1b4dbd7f80f","tarball":"https://registry.npmjs.org/typed-bridge/-/typed-bridge-2.1.3.tgz","fileCount":40,"integrity":"sha512-o8eTjdDgO4rPf/uUkUCAiGtdAHA/ka6gf5x1FPNDFd2ZrIVRvF1++VmNIOYOx55wsHhZGLapX1LnOenEAlc6/A==","signatures":[{"sig":"MEUCIQC7+jRcmCdjHidA/WbJDeOvjNLgna9SwN0g2z90CXy0WQIgIe5UUgMrnkx32q+OXT7iBDWU3jmuJeCWByE5d2Wpz+w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":104666},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"b85c68a9c6dee3258274a63f06497d8be2db09c1","scripts":{"dist":"rimraf dist && tsc","docs":"cat readme.md docs/* > docs.md","lint":"eslint","start":"tsx src/index.ts","test:cli":"tsx src/scripts/cli.ts gen-typed-bridge-client --src ./src/demo/bridge/index.ts --dest ./test/bridge.ts","test:bridge":"tsx test/index.ts","test:server":"tsx --watch src/demo/index.ts"},"_npmUser":{"name":"neilveil","email":"neilarya.in@gmail.com"},"repository":{"url":"git+https://github.com/neilveil/typed-bridge.git","type":"git"},"_npmVersion":"11.6.2","description":"Strictly typed server functions for typescript apps","directories":{},"_nodeVersion":"24.12.0","dependencies":{"zod":"^4.3.6","cors":"^2.8.5","chalk":"^5.4.1","rollup":"^4.40.0","express":"^5.1.0","commander":"^13.1.0","typescript":"^5.8.3","compression":"^1.8.0","rollup-plugin-dts":"^6.2.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.25.0","rimraf":"^6.0.1","globals":"^16.0.0","nodemon":"^3.1.9","prettier":"^3.5.3","@eslint/js":"^9.25.0","@types/cors":"^2.8.17","@types/node":"^22.14.1","@types/express":"^5.0.1","tsconfig-paths":"^4.2.0","typescript-eslint":"^8.30.1","@types/compression":"^1.7.5","eslint-plugin-node":"^11.1.0","@typescript-eslint/parser":"^8.30.1","@typescript-eslint/eslint-plugin":"^8.30.1"},"_npmOperationalInternal":{"tmp":"tmp/typed-bridge_2.1.3_1773509837721_0.9366859191489283","host":"s3://npm-registry-packages-npm-production"}},"2.1.4":{"name":"typed-bridge","version":"2.1.4","keywords":["api","backend","development","framework","functions","grpc","server","trpc","typed","validation","zod"],"author":{"name":"neilveil"},"license":"MIT","_id":"typed-bridge@2.1.4","maintainers":[{"name":"neilveil","email":"neilarya.in@gmail.com"}],"homepage":"https://github.com/neilveil/typed-bridge#readme","bugs":{"url":"https://github.com/neilveil/typed-bridge/issues"},"bin":{"typed-bridge":"dist/scripts/cli.js"},"dist":{"shasum":"148485650c32e10d482c507b6d4cf75123984fed","tarball":"https://registry.npmjs.org/typed-bridge/-/typed-bridge-2.1.4.tgz","fileCount":40,"integrity":"sha512-O0Aa5/oZ5wcoa2ZEYR0gqXNBsjDZ71jJmjlfhK1UoWl3WvW5iEYwD+p4YlwhtOEdpbNP/P88aFvxQ5nNKvNlPw==","signatures":[{"sig":"MEQCIBWTftw2wlS09eRQwaxkB1DpneNdUEQTUf8bhuhtd3H7AiAAyB04lAWTYJg+BVtP1H5QNXRqwAkFCwgg+ycLqZajtw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":105338},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"4f7a66b25a8835f16f014aff31b1a432357468dc","scripts":{"dist":"rimraf dist && tsc","docs":"cat readme.md docs/* > docs.md","lint":"eslint","start":"tsx src/index.ts","test:cli":"tsx src/scripts/cli.ts gen-typed-bridge-client --src ./src/demo/bridge/index.ts --dest ./test/bridge.ts","test:bridge":"tsx test/index.ts","test:server":"tsx --watch src/demo/index.ts"},"_npmUser":{"name":"neilveil","email":"neilarya.in@gmail.com"},"repository":{"url":"git+https://github.com/neilveil/typed-bridge.git","type":"git"},"_npmVersion":"11.6.2","description":"Strictly typed server functions for typescript apps","directories":{},"_nodeVersion":"24.12.0","dependencies":{"zod":"^4.3.6","cors":"^2.8.5","chalk":"^5.4.1","rollup":"^4.40.0","express":"^5.1.0","commander":"^13.1.0","typescript":"^5.8.3","compression":"^1.8.0","rollup-plugin-dts":"^6.2.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.25.0","rimraf":"^6.0.1","globals":"^16.0.0","nodemon":"^3.1.9","prettier":"^3.5.3","@eslint/js":"^9.25.0","@types/cors":"^2.8.17","@types/node":"^22.14.1","@types/express":"^5.0.1","tsconfig-paths":"^4.2.0","typescript-eslint":"^8.30.1","@types/compression":"^1.7.5","eslint-plugin-node":"^11.1.0","@typescript-eslint/parser":"^8.30.1","@typescript-eslint/eslint-plugin":"^8.30.1"},"_npmOperationalInternal":{"tmp":"tmp/typed-bridge_2.1.4_1773510385347_0.5024134675445122","host":"s3://npm-registry-packages-npm-production"}},"2.1.5":{"name":"typed-bridge","version":"2.1.5","keywords":["api","backend","development","framework","functions","grpc","server","trpc","typed","validation","zod"],"author":{"name":"neilveil"},"license":"MIT","_id":"typed-bridge@2.1.5","maintainers":[{"name":"neilveil","email":"neilarya.in@gmail.com"}],"homepage":"https://github.com/neilveil/typed-bridge#readme","bugs":{"url":"https://github.com/neilveil/typed-bridge/issues"},"bin":{"typed-bridge":"dist/scripts/cli.js"},"dist":{"shasum":"a34413c6de9ebace992b024853995d2e2fa500a9","tarball":"https://registry.npmjs.org/typed-bridge/-/typed-bridge-2.1.5.tgz","fileCount":39,"integrity":"sha512-XyYJLQqRO5K1jC10jCXCNezu6eIPIuTecjJyfUBSdBlF36gmAuZsg1SuOOVqBVGhyD8kBD1RlmYUkrgF3A6X9g==","signatures":[{"sig":"MEUCIQC8myuO3jwUsuqEKFlkEcmO/Z7Qf7lCcF4QgP6o5kJrlQIgb0z09hPNYXoYejISOwo2lpcOqGE6jUIxG+udZDorHiQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":104270},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"8a01d476e150388cd27206c819cbeba082f42b4a","scripts":{"dist":"rimraf dist && tsc","lint":"eslint","start":"tsx src/index.ts","test:cli":"tsx src/scripts/cli.ts gen-typed-bridge-client --src ./src/demo/bridge/index.ts --dest ./test/bridge.ts","test:bridge":"tsx test/index.ts","test:server":"tsx --watch src/demo/index.ts","prepublishOnly":"npm run dist"},"_npmUser":{"name":"neilveil","email":"neilarya.in@gmail.com"},"repository":{"url":"git+https://github.com/neilveil/typed-bridge.git","type":"git"},"_npmVersion":"11.6.2","description":"Strictly typed server functions for typescript apps","directories":{},"_nodeVersion":"24.12.0","dependencies":{"zod":"^4.3.6","cors":"^2.8.5","chalk":"^5.4.1","rollup":"^4.40.0","express":"^5.1.0","commander":"^13.1.0","typescript":"^5.8.3","compression":"^1.8.0","rollup-plugin-dts":"^6.2.1"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","eslint":"^9.25.0","rimraf":"^6.0.1","globals":"^16.0.0","nodemon":"^3.1.9","prettier":"^3.5.3","@eslint/js":"^9.25.0","@types/cors":"^2.8.17","@types/node":"^22.14.1","@types/express":"^5.0.1","tsconfig-paths":"^4.2.0","typescript-eslint":"^8.30.1","@types/compression":"^1.7.5","eslint-plugin-node":"^11.1.0","@typescript-eslint/parser":"^8.30.1","@typescript-eslint/eslint-plugin":"^8.30.1"},"_npmOperationalInternal":{"tmp":"tmp/typed-bridge_2.1.5_1773644114819_0.21718128246330726","host":"s3://npm-registry-packages-npm-production"}},"3.0.0":{"name":"typed-bridge","version":"3.0.0","keywords":["agents","ai","anthropic","api","backend","framework","functions","grpc","llm","mcp","model-context-protocol","openai","rpc","server","tool-calling","tools","trpc","type-safe","typed","typescript","validation","zod"],"author":{"name":"neilveil"},"license":"MIT","_id":"typed-bridge@3.0.0","maintainers":[{"name":"neilveil","email":"neilarya.in@gmail.com"}],"homepage":"https://github.com/neilveil/typed-bridge#readme","bugs":{"url":"https://github.com/neilveil/typed-bridge/issues"},"bin":{"typed-bridge":"dist/scripts/cli.js"},"dist":{"shasum":"6160d566b3fe620f78f259dfa473b48987b1fdff","tarball":"https://registry.npmjs.org/typed-bridge/-/typed-bridge-3.0.0.tgz","fileCount":22,"integrity":"sha512-jHFmkA1LoWy2mGdCVvLRz3w2jUk8ekKXjVO6ERt+E7dNvxM5ViPNJLvTPVx35aDMaLf0326Oh8Pn5owTFz8Cbw==","signatures":[{"sig":"MEUCIQCPu8ci5N90QSpFf1Q3KxThlXUBgAPE2bwktK0RmwJRGQIgNnUtnoy9KoG5bg2cLUhJ40gNF4PgZlpKQyskKXN+gYQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":76695},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"2b926777966385c39ca203d55db97f61d1ade86c","scripts":{"dist":"rimraf dist && tsc","lint":"eslint","start":"tsx src/index.ts","test:cli":"tsx src/scripts/cli.ts gen-typed-bridge-client --src ./src/demo/bridge/index.ts --dest ./test/bridge.ts","test:llm":"tsx test/llm.ts","test:bridge":"tsx test/index.ts","test:server":"tsx --watch src/demo/index.ts","prepublishOnly":"npm run dist"},"_npmUser":{"name":"neilveil","email":"neilarya.in@gmail.com"},"repository":{"url":"git+https://github.com/neilveil/typed-bridge.git","type":"git"},"_npmVersion":"11.6.2","description":"Type-safe server functions for TypeScript that also expose your backend as an MCP server and LLM tools for AI agents","directories":{},"_nodeVersion":"24.12.0","dependencies":{"zod":"^4.3.6","cors":"^2.8.5","chalk":"^5.4.1","rollup":"^4.40.0","express":"^5.1.0","commander":"^13.1.0","typescript":"^5.8.3","compression":"^1.8.0","rollup-plugin-dts":"^6.2.1","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","dotenv":"^17.4.2","eslint":"^9.25.0","openai":"^6.42.0","rimraf":"^6.0.1","globals":"^16.0.0","nodemon":"^3.1.9","prettier":"^3.5.3","@eslint/js":"^9.25.0","@types/cors":"^2.8.17","@types/node":"^22.14.1","@types/express":"^5.0.1","tsconfig-paths":"^4.2.0","typescript-eslint":"^8.30.1","@types/compression":"^1.7.5","eslint-plugin-node":"^11.1.0","@typescript-eslint/parser":"^8.30.1","@typescript-eslint/eslint-plugin":"^8.30.1"},"_npmOperationalInternal":{"tmp":"tmp/typed-bridge_3.0.0_1781448793427_0.7020885265790613","host":"s3://npm-registry-packages-npm-production"}},"3.0.1":{"name":"typed-bridge","version":"3.0.1","keywords":["agents","ai","anthropic","api","backend","framework","functions","grpc","llm","mcp","model-context-protocol","openai","rpc","server","tool-calling","tools","trpc","type-safe","typed","typescript","validation","zod"],"author":{"name":"neilveil"},"license":"MIT","_id":"typed-bridge@3.0.1","maintainers":[{"name":"neilveil","email":"neilarya.in@gmail.com"}],"homepage":"https://github.com/neilveil/typed-bridge#readme","bugs":{"url":"https://github.com/neilveil/typed-bridge/issues"},"bin":{"typed-bridge":"dist/scripts/cli.js"},"dist":{"shasum":"c8803c05229507ed82c6a16cbc14faf689b5f8f6","tarball":"https://registry.npmjs.org/typed-bridge/-/typed-bridge-3.0.1.tgz","fileCount":22,"integrity":"sha512-JLfbf5P3UIEA7PimxvNwlZuaarfcazJ+aIudAvmh+49sM227ZdhQ+/emvp6xW5w1Uapmnz2PHrZgZRPje3IjNQ==","signatures":[{"sig":"MEQCICd3j6IPvY/FJB5KiLqY2lypP5aa0J3IJI/x0jStIYEnAiAH8bgFAHYCWbld8CkdyKJHi7KpTQP9ZEwEgFV+BbiPpA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":78126},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"5bb76b70424613f62f0e575c8936d64329ccb9b2","scripts":{"dist":"rimraf dist && tsc","lint":"eslint","start":"tsx src/index.ts","test:cli":"tsx src/scripts/cli.ts gen-typed-bridge-client --src ./src/demo/bridge/index.ts --dest ./test/bridge.ts","test:llm":"tsx test/llm.ts","test:bridge":"tsx test/index.ts","test:server":"tsx --watch src/demo/index.ts","prepublishOnly":"npm run dist"},"_npmUser":{"name":"neilveil","email":"neilarya.in@gmail.com"},"repository":{"url":"git+https://github.com/neilveil/typed-bridge.git","type":"git"},"_npmVersion":"11.6.2","description":"Type-safe server functions for TypeScript that also expose your backend as an MCP server and LLM tools for AI agents","directories":{},"_nodeVersion":"24.12.0","dependencies":{"zod":"^4.3.6","cors":"^2.8.5","chalk":"^5.4.1","rollup":"^4.40.0","express":"^5.1.0","commander":"^13.1.0","typescript":"^5.8.3","compression":"^1.8.0","rollup-plugin-dts":"^6.2.1","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","dotenv":"^17.4.2","eslint":"^9.25.0","openai":"^6.42.0","rimraf":"^6.0.1","globals":"^16.0.0","nodemon":"^3.1.9","prettier":"^3.5.3","@eslint/js":"^9.25.0","@types/cors":"^2.8.17","@types/node":"^22.14.1","@types/express":"^5.0.1","tsconfig-paths":"^4.2.0","typescript-eslint":"^8.30.1","@types/compression":"^1.7.5","eslint-plugin-node":"^11.1.0","@typescript-eslint/parser":"^8.30.1","@typescript-eslint/eslint-plugin":"^8.30.1"},"_npmOperationalInternal":{"tmp":"tmp/typed-bridge_3.0.1_1781525684495_0.8444741997384828","host":"s3://npm-registry-packages-npm-production"}},"4.0.0":{"name":"typed-bridge","version":"4.0.0","keywords":["agents","ai","anthropic","api","backend","framework","functions","grpc","llm","mcp","model-context-protocol","openai","rpc","server","tool-calling","tools","trpc","type-safe","typed","typescript","validation","zod"],"author":{"name":"neilveil"},"license":"MIT","_id":"typed-bridge@4.0.0","maintainers":[{"name":"neilveil","email":"neilarya.in@gmail.com"}],"homepage":"https://github.com/neilveil/typed-bridge#readme","bugs":{"url":"https://github.com/neilveil/typed-bridge/issues"},"bin":{"typed-bridge":"dist/scripts/cli.js"},"dist":{"shasum":"098435bb94175449cd4ae8050192f676d734a58d","tarball":"https://registry.npmjs.org/typed-bridge/-/typed-bridge-4.0.0.tgz","fileCount":22,"integrity":"sha512-35vbkTso4dyjrlmBGzP7zb7FqN9eyGN5lm58qBdINKc8wu9VUqvNtN5bwwWN0Z00g/O828t10PEhNiZJTS73vg==","signatures":[{"sig":"MEUCIQC3NJY4+vwHaaKyUnbeLJphml/iIkI2Wb0uvEd5lzqLNgIgMiY970NupmJcOmdJDzh4wpMFBgSaBENcKa7qgAMMOzo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":95855},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"e4d27fac7e96977d033047446ab4b9488da5ebba","scripts":{"dist":"rimraf dist && tsc","lint":"eslint","start":"tsx src/index.ts","test:cli":"tsx src/scripts/cli.ts gen-typed-bridge-client --src ./src/demo/bridge/index.ts --dest ./test/bridge.ts","test:llm":"tsx test/llm.ts","test:mcp":"tsx test/mcp.ts","test:bridge":"tsx test/index.ts","test:server":"tsx --watch src/demo/index.ts","prepublishOnly":"npm run dist"},"_npmUser":{"name":"neilveil","email":"neilarya.in@gmail.com"},"repository":{"url":"git+https://github.com/neilveil/typed-bridge.git","type":"git"},"_npmVersion":"11.6.2","description":"Type-safe server functions for TypeScript that also expose your backend as an MCP server and LLM tools for AI agents","directories":{},"_nodeVersion":"24.12.0","dependencies":{"zod":"^4.3.6","cors":"^2.8.5","chalk":"^5.4.1","rollup":"^4.40.0","express":"^5.1.0","commander":"^13.1.0","typescript":"^5.8.3","compression":"^1.8.0","rollup-plugin-dts":"^6.2.1","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","dotenv":"^17.4.2","eslint":"^9.25.0","openai":"^6.42.0","rimraf":"^6.0.1","globals":"^16.0.0","nodemon":"^3.1.9","prettier":"^3.5.3","@eslint/js":"^9.25.0","@types/cors":"^2.8.17","@types/node":"^22.14.1","@types/express":"^5.0.1","tsconfig-paths":"^4.2.0","typescript-eslint":"^8.30.1","@types/compression":"^1.7.5","eslint-plugin-node":"^11.1.0","@typescript-eslint/parser":"^8.30.1","@typescript-eslint/eslint-plugin":"^8.30.1"},"_npmOperationalInternal":{"tmp":"tmp/typed-bridge_4.0.0_1782018003262_0.14268822910263101","host":"s3://npm-registry-packages-npm-production"}},"4.0.1":{"name":"typed-bridge","version":"4.0.1","keywords":["agents","ai","anthropic","api","backend","framework","functions","grpc","llm","mcp","model-context-protocol","openai","rpc","server","tool-calling","tools","trpc","type-safe","typed","typescript","validation","zod"],"author":{"name":"neilveil"},"license":"MIT","_id":"typed-bridge@4.0.1","maintainers":[{"name":"neilveil","email":"neilarya.in@gmail.com"}],"homepage":"https://github.com/neilveil/typed-bridge#readme","bugs":{"url":"https://github.com/neilveil/typed-bridge/issues"},"bin":{"typed-bridge":"dist/scripts/cli.js"},"dist":{"shasum":"9406f75fb5e149d2823afbe5e2d1a90dbc433dcc","tarball":"https://registry.npmjs.org/typed-bridge/-/typed-bridge-4.0.1.tgz","fileCount":22,"integrity":"sha512-5nWsscI/aFvGMSzHpck/6uafUudiQ917900EbIJy16EMObtF0cjd0WCi1eT53D5dEp6JoUpYzWaIeSfrHSVkcg==","signatures":[{"sig":"MEUCIBCdqmhee1dswYCCRLBgHmN9U8t030FFi8pJPtKfvNGmAiEA2ki7l5S2ZCUTBmAf5iUDPCw8XxYqb0eMsR5Yg5SdWRg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":96109},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"eacda72c40f12cabc1f4f2a81c6310611a5e34b0","scripts":{"dist":"rimraf dist && tsc","lint":"eslint","start":"tsx src/index.ts","test:cli":"tsx src/scripts/cli.ts gen-typed-bridge-client --src ./src/demo/bridge/index.ts --dest ./test/bridge.ts","test:llm":"tsx test/llm.ts","test:mcp":"tsx test/mcp.ts","test:bridge":"tsx test/index.ts","test:server":"tsx --watch src/demo/index.ts","prepublishOnly":"npm run dist"},"_npmUser":{"name":"neilveil","email":"neilarya.in@gmail.com"},"repository":{"url":"git+https://github.com/neilveil/typed-bridge.git","type":"git"},"_npmVersion":"11.6.2","description":"Type-safe server functions for TypeScript that also expose your backend as an MCP server and LLM tools for AI agents","directories":{},"_nodeVersion":"24.12.0","dependencies":{"zod":"^4.3.6","cors":"^2.8.5","chalk":"^5.4.1","rollup":"^4.40.0","express":"^5.1.0","commander":"^13.1.0","typescript":"^5.8.3","compression":"^1.8.0","rollup-plugin-dts":"^6.2.1","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","dotenv":"^17.4.2","eslint":"^9.25.0","openai":"^6.42.0","rimraf":"^6.0.1","globals":"^16.0.0","nodemon":"^3.1.9","prettier":"^3.5.3","@eslint/js":"^9.25.0","@types/cors":"^2.8.17","@types/node":"^22.14.1","@types/express":"^5.0.1","tsconfig-paths":"^4.2.0","typescript-eslint":"^8.30.1","@types/compression":"^1.7.5","eslint-plugin-node":"^11.1.0","@typescript-eslint/parser":"^8.30.1","@typescript-eslint/eslint-plugin":"^8.30.1"},"_npmOperationalInternal":{"tmp":"tmp/typed-bridge_4.0.1_1782034933934_0.9083792299253313","host":"s3://npm-registry-packages-npm-production"}},"4.0.3":{"name":"typed-bridge","version":"4.0.3","keywords":["agents","ai","anthropic","api","backend","framework","functions","grpc","llm","mcp","model-context-protocol","openai","rpc","server","tool-calling","tools","trpc","type-safe","typed","typescript","validation","zod"],"author":{"name":"neilveil"},"license":"MIT","_id":"typed-bridge@4.0.3","maintainers":[{"name":"neilveil","email":"neilarya.in@gmail.com"}],"homepage":"https://github.com/neilveil/typed-bridge#readme","bugs":{"url":"https://github.com/neilveil/typed-bridge/issues"},"bin":{"typed-bridge":"dist/scripts/cli.js"},"dist":{"shasum":"f2bea5e621d0fb323a664826dc7117a51613062d","tarball":"https://registry.npmjs.org/typed-bridge/-/typed-bridge-4.0.3.tgz","fileCount":26,"integrity":"sha512-Tu35bkuLIL6mrOkxOSh3Mn1cLD4+zyL5rqpmj3uwWo+WDr4d+wYzyyKN2VfFtOmC4cZ8/OuIs+PYYDkv0vCMkQ==","signatures":[{"sig":"MEQCIH7k19AT/O1dVKe41jm7J52bQUDEpG/3XG8884iPzO0AAiB7Y5+oNuzInes8F8CoSnO7HPeCSuyCyAMGYSfAvLGqag==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":103896},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"3c9f5bd7fa22453f021bfc3a13a5107e472d9704","scripts":{"dist":"rimraf dist && tsc","lint":"eslint","start":"tsx src/index.ts","test:cli":"tsx src/scripts/cli.ts gen-typed-bridge-client --src ./src/demo/bridge/index.ts --dest ./test/bridge.ts","test:llm":"tsx test/llm.ts","test:mcp":"tsx test/mcp.ts","test:bridge":"tsx test/index.ts","test:server":"tsx --watch src/demo/index.ts","prepublishOnly":"npm run dist"},"_npmUser":{"name":"neilveil","email":"neilarya.in@gmail.com"},"repository":{"url":"git+https://github.com/neilveil/typed-bridge.git","type":"git"},"_npmVersion":"11.6.2","description":"Type-safe server functions for TypeScript that also expose your backend as an MCP server and LLM tools for AI agents","directories":{},"_nodeVersion":"24.12.0","dependencies":{"zod":"^4.3.6","cors":"^2.8.5","chalk":"^5.4.1","rollup":"^4.40.0","express":"^5.1.0","commander":"^13.1.0","typescript":"^5.8.3","compression":"^1.8.0","rollup-plugin-dts":"^6.2.1","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","dotenv":"^17.4.2","eslint":"^9.25.0","openai":"^6.42.0","rimraf":"^6.0.1","globals":"^16.0.0","nodemon":"^3.1.9","prettier":"^3.5.3","@eslint/js":"^9.25.0","@types/cors":"^2.8.17","@types/node":"^22.14.1","@types/express":"^5.0.1","tsconfig-paths":"^4.2.0","typescript-eslint":"^8.30.1","@types/compression":"^1.7.5","eslint-plugin-node":"^11.1.0","@typescript-eslint/parser":"^8.30.1","@typescript-eslint/eslint-plugin":"^8.30.1"},"_npmOperationalInternal":{"tmp":"tmp/typed-bridge_4.0.3_1782061004406_0.07011879958665257","host":"s3://npm-registry-packages-npm-production"}},"4.0.4":{"name":"typed-bridge","version":"4.0.4","keywords":["agents","ai","anthropic","api","backend","framework","functions","grpc","llm","mcp","model-context-protocol","openai","rpc","server","tool-calling","tools","trpc","type-safe","typed","typescript","validation","zod"],"author":{"name":"neilveil"},"license":"MIT","_id":"typed-bridge@4.0.4","maintainers":[{"name":"neilveil","email":"neilarya.in@gmail.com"}],"homepage":"https://github.com/neilveil/typed-bridge#readme","bugs":{"url":"https://github.com/neilveil/typed-bridge/issues"},"bin":{"typed-bridge":"dist/scripts/cli.js"},"dist":{"shasum":"3b54b5036551646111983e9e9cb0861546b1bae4","tarball":"https://registry.npmjs.org/typed-bridge/-/typed-bridge-4.0.4.tgz","fileCount":24,"integrity":"sha512-52yLcHwchETnYEoVMVGpS8qpGWw9eF97VxEvOFlXuC5aYoWm9nSqaapyKPXEW4WitQKN5FKaQck041W7lgfjGg==","signatures":[{"sig":"MEQCIGPSEKUPJhNmgicOVkIsFulA0+q3/pfLt4GZlkityVSeAiA1wKYVMBih0/ed87X86Qp0tlMsnW4deW0GuSHl+uF5YQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":101982},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"e82bc69bc1763453fbad0fcc2923527eb5fa0a41","scripts":{"dist":"rimraf dist && tsc","lint":"eslint","start":"tsx src/index.ts","test:cli":"tsx src/scripts/cli.ts gen-typed-bridge-client --src ./src/demo/bridge/index.ts --dest ./test/bridge.ts","test:llm":"tsx test/llm.ts","test:mcp":"tsx test/mcp.ts","test:bridge":"tsx test/index.ts","test:server":"tsx --watch src/demo/index.ts","prepublishOnly":"npm run dist"},"_npmUser":{"name":"neilveil","email":"neilarya.in@gmail.com"},"repository":{"url":"git+https://github.com/neilveil/typed-bridge.git","type":"git"},"_npmVersion":"11.6.2","description":"Type-safe server functions for TypeScript that also expose your backend as an MCP server and LLM tools for AI agents","directories":{},"_nodeVersion":"24.12.0","dependencies":{"zod":"^4.3.6","cors":"^2.8.5","chalk":"^5.4.1","rollup":"^4.40.0","express":"^5.1.0","commander":"^13.1.0","typescript":"^5.8.3","compression":"^1.8.0","rollup-plugin-dts":"^6.2.1","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","dotenv":"^17.4.2","eslint":"^9.25.0","openai":"^6.42.0","rimraf":"^6.0.1","globals":"^16.0.0","nodemon":"^3.1.9","prettier":"^3.5.3","@eslint/js":"^9.25.0","@types/cors":"^2.8.17","@types/node":"^22.14.1","@types/express":"^5.0.1","tsconfig-paths":"^4.2.0","typescript-eslint":"^8.30.1","@types/compression":"^1.7.5","eslint-plugin-node":"^11.1.0","@typescript-eslint/parser":"^8.30.1","@typescript-eslint/eslint-plugin":"^8.30.1"},"_npmOperationalInternal":{"tmp":"tmp/typed-bridge_4.0.4_1782062999158_0.06766556626021925","host":"s3://npm-registry-packages-npm-production"}},"4.1.0":{"name":"typed-bridge","version":"4.1.0","keywords":["agents","ai","anthropic","api","backend","code-execution","framework","functions","grpc","llm","mcp","model-context-protocol","openai","rpc","sandbox","server","tool-calling","tools","trpc","type-safe","typed","typescript","validation","zod"],"author":{"name":"neilveil"},"license":"MIT","_id":"typed-bridge@4.1.0","maintainers":[{"name":"neilveil","email":"neilarya.in@gmail.com"}],"homepage":"https://github.com/neilveil/typed-bridge#readme","bugs":{"url":"https://github.com/neilveil/typed-bridge/issues"},"bin":{"typed-bridge":"dist/scripts/cli.js"},"dist":{"shasum":"effb54a4a945d06c6037dfeb2f67983ee15615e9","tarball":"https://registry.npmjs.org/typed-bridge/-/typed-bridge-4.1.0.tgz","fileCount":27,"integrity":"sha512-X2N2Gei703uP3mp9gogofbzZrCOb4fbSgWkTzv9ja921EeamoEjknIrXhT8+AsegdxIF8aS7ix02fhwQJWSonw==","signatures":[{"sig":"MEUCIQCNefv8PC7C2NCJDonmJpw5xnUh6AkjHUodcUg+/AqcMQIgQC1RhxklhkGrTDtvbEJXfSbr+xzbKdI53W+9GcggVjE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":116641},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"b58ea74753d749a06472d80d130d0df0ca7c20d2","scripts":{"dist":"rimraf dist && tsc","lint":"eslint","start":"tsx src/index.ts","test:cli":"tsx src/scripts/cli.ts gen-typed-bridge-client --src ./src/demo/bridge/index.ts --dest ./test/bridge.ts","test:llm":"tsx test/llm.ts","test:mcp":"tsx test/mcp.ts","test:bridge":"tsx test/index.ts","test:script":"tsx test/script.ts","test:server":"tsx --watch src/demo/index.ts","prepublishOnly":"npm run dist"},"_npmUser":{"name":"neilveil","email":"neilarya.in@gmail.com"},"repository":{"url":"git+https://github.com/neilveil/typed-bridge.git","type":"git"},"_npmVersion":"11.6.2","description":"Type-safe server functions for TypeScript that also expose your backend as an MCP server and LLM tools for AI agents","directories":{},"_nodeVersion":"24.12.0","dependencies":{"zod":"^4.3.6","cors":"^2.8.5","chalk":"^5.4.1","rollup":"^4.40.0","express":"^5.1.0","commander":"^13.1.0","typescript":"^5.8.3","compression":"^1.8.0","rollup-plugin-dts":"^6.2.1","quickjs-emscripten":"^0.32.0","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","dotenv":"^17.4.2","eslint":"^9.25.0","openai":"^6.42.0","rimraf":"^6.0.1","globals":"^16.0.0","nodemon":"^3.1.9","prettier":"^3.5.3","@eslint/js":"^9.25.0","@types/cors":"^2.8.17","@types/node":"^22.14.1","@types/express":"^5.0.1","tsconfig-paths":"^4.2.0","typescript-eslint":"^8.30.1","@types/compression":"^1.7.5","eslint-plugin-node":"^11.1.0","@typescript-eslint/parser":"^8.30.1","@typescript-eslint/eslint-plugin":"^8.30.1"},"_npmOperationalInternal":{"tmp":"tmp/typed-bridge_4.1.0_1783407181124_0.4559916081155835","host":"s3://npm-registry-packages-npm-production"}},"4.2.0":{"name":"typed-bridge","version":"4.2.0","keywords":["agents","ai","anthropic","api","backend","code-execution","framework","functions","grpc","llm","mcp","model-context-protocol","openai","rpc","sandbox","server","tool-calling","tools","trpc","type-safe","typed","typescript","validation","zod"],"author":{"name":"neilveil"},"license":"MIT","_id":"typed-bridge@4.2.0","maintainers":[{"name":"neilveil","email":"neilarya.in@gmail.com"}],"homepage":"https://github.com/neilveil/typed-bridge#readme","bugs":{"url":"https://github.com/neilveil/typed-bridge/issues"},"bin":{"typed-bridge":"dist/scripts/cli.js"},"dist":{"shasum":"1f06de0e78091720f7c76dda1c61659521c5aceb","tarball":"https://registry.npmjs.org/typed-bridge/-/typed-bridge-4.2.0.tgz","fileCount":25,"integrity":"sha512-gR0Qv4gKq+2lOYSMiXXnHhwVVcTgmgVoyt3zgSlYRyOY3b+HNBv7ekLdMw6f259pvHXwOymlrXp9jJ2A0ja+rg==","signatures":[{"sig":"MEUCIAUWiuNjXGJvNhcWIWB10ucgyKy2IpX4W8b9X4TQcdI9AiEA9dyAD3jyceMvwLKlLJBwAqcxT+9anh24/onrfEVOXTM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":116265},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"794857a79ddb3ff54a15c257c37f85f3e9ed4e07","scripts":{"dist":"rimraf dist && tsc","lint":"eslint","start":"tsx src/index.ts","test:cli":"tsx src/scripts/cli.ts gen-typed-bridge-client --src ./src/demo/bridge/index.ts --dest ./test/bridge.ts","test:llm":"tsx test/llm.ts","test:mcp":"tsx test/mcp.ts","test:bridge":"tsx test/index.ts","test:script":"tsx test/script.ts","test:server":"tsx --watch src/demo/index.ts","prepublishOnly":"npm run dist"},"_npmUser":{"name":"neilveil","email":"neilarya.in@gmail.com"},"repository":{"url":"git+https://github.com/neilveil/typed-bridge.git","type":"git"},"_npmVersion":"11.6.2","description":"Type-safe server functions for TypeScript that also expose your backend as an MCP server and LLM tools for AI agents","directories":{},"_nodeVersion":"24.12.0","dependencies":{"zod":"^4.3.6","cors":"^2.8.5","chalk":"^5.4.1","rollup":"^4.40.0","express":"^5.1.0","commander":"^13.1.0","typescript":"^5.8.3","compression":"^1.8.0","rollup-plugin-dts":"^6.2.1","quickjs-emscripten":"^0.32.0","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","dotenv":"^17.4.2","eslint":"^9.25.0","openai":"^6.42.0","rimraf":"^6.0.1","globals":"^16.0.0","nodemon":"^3.1.9","prettier":"^3.5.3","@eslint/js":"^9.25.0","@types/cors":"^2.8.17","@types/node":"^22.14.1","@types/express":"^5.0.1","tsconfig-paths":"^4.2.0","typescript-eslint":"^8.30.1","@types/compression":"^1.7.5","eslint-plugin-node":"^11.1.0","@typescript-eslint/parser":"^8.30.1","@typescript-eslint/eslint-plugin":"^8.30.1"},"_npmOperationalInternal":{"tmp":"tmp/typed-bridge_4.2.0_1787660674815_0.7608555529654695","host":"s3://npm-registry-packages-npm-production"}},"4.3.0":{"name":"typed-bridge","version":"4.3.0","keywords":["agents","ai","anthropic","api","backend","code-execution","framework","functions","grpc","llm","mcp","model-context-protocol","openai","rpc","sandbox","server","tool-calling","tools","trpc","type-safe","typed","typescript","validation","zod"],"author":{"name":"neilveil"},"license":"MIT","_id":"typed-bridge@4.3.0","maintainers":[{"name":"neilveil","email":"neilarya.in@gmail.com"}],"homepage":"https://github.com/neilveil/typed-bridge#readme","bugs":{"url":"https://github.com/neilveil/typed-bridge/issues"},"bin":{"typed-bridge":"dist/scripts/cli.js"},"dist":{"shasum":"5cdec1e4e9c8faf08a19d16800508741d3c198bf","tarball":"https://registry.npmjs.org/typed-bridge/-/typed-bridge-4.3.0.tgz","fileCount":27,"integrity":"sha512-od64cXbWrqQ8K1mhfCICoS1LKnCatOHonM3UHpaXWswZPQpRohpn0Gxrm4pvMHa0Wo4mx0MVWWbW2yZSpeWi5g==","signatures":[{"sig":"MEUCIF1vs7EL0tcIpr+Si1jp0l4l772QVSc7AwOloTwWupWLAiEA9z3e8Dp17AYQAXZXXNJ1bXWP2vco1uzwwr8ltcyKGkQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":119552},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"44c497b2850080395a723aa6acab680f2d188b44","scripts":{"dist":"rimraf dist && tsc","lint":"eslint","start":"tsx src/index.ts","test:cli":"tsx src/scripts/cli.ts gen-typed-bridge-client --src ./src/demo/bridge/index.ts --dest ./test/bridge.ts","test:llm":"tsx test/llm.ts","test:mcp":"tsx test/mcp.ts","test:bridge":"tsx test/index.ts","test:script":"tsx test/script.ts","test:server":"tsx --watch src/demo/index.ts","prepublishOnly":"npm run dist"},"_npmUser":{"name":"neilveil","email":"neilarya.in@gmail.com"},"repository":{"url":"git+https://github.com/neilveil/typed-bridge.git","type":"git"},"_npmVersion":"11.6.2","description":"Type-safe server functions for TypeScript that also expose your backend as an MCP server and LLM tools for AI agents","directories":{},"_nodeVersion":"24.12.0","dependencies":{"zod":"^4.3.6","cors":"^2.8.5","chalk":"^5.4.1","rollup":"^4.40.0","express":"^5.1.0","commander":"^13.1.0","typescript":"^5.8.3","compression":"^1.8.0","rollup-plugin-dts":"^6.2.1","quickjs-emscripten":"^0.32.0","@modelcontextprotocol/sdk":"^1.29.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","dotenv":"^17.4.2","eslint":"^9.25.0","openai":"^6.42.0","rimraf":"^6.0.1","globals":"^16.0.0","nodemon":"^3.1.9","prettier":"^3.5.3","@eslint/js":"^9.25.0","@types/cors":"^2.8.17","@types/node":"^22.14.1","@types/express":"^5.0.1","tsconfig-paths":"^4.2.0","typescript-eslint":"^8.30.1","@types/compression":"^1.7.5","eslint-plugin-node":"^11.1.0","@typescript-eslint/parser":"^8.30.1","@typescript-eslint/eslint-plugin":"^8.30.1"},"_npmOperationalInternal":{"tmp":"tmp/typed-bridge_4.3.0_1787688087366_0.3814703320224162","host":"s3://npm-registry-packages-npm-production"}},"4.4.0":{"name":"typed-bridge","description":"Type-safe server functions for TypeScript that also expose your backend as an MCP server and LLM tools for AI agents","version":"4.4.0","main":"dist/index.js","types":"dist/index.d.ts","author":{"name":"neilveil"},"repository":{"type":"git","url":"git+https://github.com/neilveil/typed-bridge.git"},"license":"MIT","scripts":{"start":"tsx src/index.ts","dist":"rimraf dist && tsc","test:server":"tsx --watch src/demo/index.ts","test:cli":"tsx src/scripts/cli.ts gen-typed-bridge-client --src ./src/demo/bridge/index.ts --dest ./test/bridge.ts","test:bridge":"tsx test/index.ts","test:mcp":"tsx test/mcp.ts","test:script":"tsx test/script.ts","test:llm":"tsx test/llm.ts","lint":"eslint","prepublishOnly":"npm run dist"},"bin":{"typed-bridge":"dist/scripts/cli.js"},"dependencies":{"@modelcontextprotocol/sdk":"^1.29.0","chalk":"^5.4.1","commander":"^13.1.0","compression":"^1.8.0","cors":"^2.8.5","express":"^5.1.0","quickjs-emscripten":"^0.32.0","rollup":"^4.40.0","rollup-plugin-dts":"^6.2.1","typescript":"^5.8.3","zod":"^4.3.6"},"devDependencies":{"@eslint/js":"^9.25.0","@types/compression":"^1.7.5","@types/cors":"^2.8.17","@types/express":"^5.0.1","@types/node":"^22.14.1","@typescript-eslint/eslint-plugin":"^8.30.1","@typescript-eslint/parser":"^8.30.1","dotenv":"^17.4.2","eslint":"^9.25.0","eslint-plugin-node":"^11.1.0","globals":"^16.0.0","nodemon":"^3.1.9","openai":"^6.42.0","prettier":"^3.5.3","rimraf":"^6.0.1","tsconfig-paths":"^4.2.0","tsx":"^4.21.0","typescript-eslint":"^8.30.1"},"keywords":["agents","ai","anthropic","api","backend","code-execution","framework","functions","grpc","llm","mcp","model-context-protocol","openai","rpc","sandbox","server","tool-calling","tools","trpc","type-safe","typed","typescript","validation","zod"],"gitHead":"3f763da62ce78359b90675f2bcda9ad701ff3145","_id":"typed-bridge@4.4.0","bugs":{"url":"https://github.com/neilveil/typed-bridge/issues"},"homepage":"https://github.com/neilveil/typed-bridge#readme","_nodeVersion":"24.12.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-66dG9BtsbNdqTB15XXtG/1swrey0xwRGG5TTS0rQf719WpHDqT6XCMFvgwHS76PRmNkSFDefdZCv2K8/jyz/wA==","shasum":"7d7bda3a980c7c86d6c47f885ff1d40fc2c75329","tarball":"https://registry.npmjs.org/typed-bridge/-/typed-bridge-4.4.0.tgz","fileCount":27,"unpackedSize":124913,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCtZiCqfgA4wxtMnK7WP6a+msGxlzBPuszVX09tFtynYwIhANq9amT+lT/zacmEyo5YOE3NmLR6dxWV7VqcxO1lpImM"}]},"_npmUser":{"name":"neilveil","email":"neilarya.in@gmail.com"},"directories":{},"maintainers":[{"name":"neilveil","email":"neilarya.in@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/typed-bridge_4.4.0_1788701499657_0.01180626516983807"},"_hasShrinkwrap":false}},"time":{"created":"2025-04-11T09:48:37.627Z","modified":"2026-09-06T13:31:39.966Z","0.0.1":"2025-04-11T09:48:37.838Z","1.0.0":"2025-04-20T16:40:59.046Z","1.0.1":"2025-05-01T00:05:21.835Z","2.0.0":"2025-08-15T06:08:05.427Z","2.0.1":"2025-08-15T11:05:00.623Z","2.0.2":"2025-08-15T11:06:45.776Z","2.0.3":"2025-08-15T11:17:29.732Z","2.0.4":"2025-08-15T11:23:32.634Z","2.0.5":"2025-08-15T12:40:39.826Z","2.0.6":"2025-08-15T13:51:07.656Z","2.0.7":"2025-08-15T14:01:50.273Z","2.0.8":"2025-08-15T15:12:09.537Z","2.0.9":"2025-08-15T15:32:17.037Z","2.0.10":"2025-08-15T15:47:58.380Z","2.0.11":"2025-08-15T20:12:25.739Z","2.0.12":"2025-08-22T04:47:05.169Z","2.0.13":"2025-08-22T05:08:41.191Z","2.0.14":"2025-11-09T12:09:04.968Z","2.0.15":"2025-11-09T12:14:25.605Z","2.1.0":"2026-03-14T16:54:09.782Z","2.1.1":"2026-03-14T16:58:22.818Z","2.1.2":"2026-03-14T17:21:31.632Z","2.1.3":"2026-03-14T17:37:17.891Z","2.1.4":"2026-03-14T17:46:25.495Z","2.1.5":"2026-03-16T06:55:14.981Z","3.0.0":"2026-06-14T14:53:13.633Z","3.0.1":"2026-06-15T12:14:44.654Z","4.0.0":"2026-06-21T05:00:03.408Z","4.0.1":"2026-06-21T09:42:14.077Z","4.0.3":"2026-06-21T16:56:44.545Z","4.0.4":"2026-06-21T17:29:59.288Z","4.1.0":"2026-07-07T06:53:01.269Z","4.2.0":"2026-08-25T12:24:34.953Z","4.3.0":"2026-08-25T20:01:27.565Z","4.4.0":"2026-09-06T13:31:39.821Z"},"bugs":{"url":"https://github.com/neilveil/typed-bridge/issues"},"author":{"name":"neilveil"},"license":"MIT","homepage":"https://github.com/neilveil/typed-bridge#readme","keywords":["agents","ai","anthropic","api","backend","code-execution","framework","functions","grpc","llm","mcp","model-context-protocol","openai","rpc","sandbox","server","tool-calling","tools","trpc","type-safe","typed","typescript","validation","zod"],"repository":{"type":"git","url":"git+https://github.com/neilveil/typed-bridge.git"},"description":"Type-safe server functions for TypeScript that also expose your backend as an MCP server and LLM tools for AI agents","maintainers":[{"name":"neilveil","email":"neilarya.in@gmail.com"}],"readme":"<div align=\"center\">\r\n\r\n<img src=\"assets/default.png\" alt=\"Typed Bridge\" width=\"380\" />\r\n\r\n# Typed Bridge\r\n\r\n### Let AI talk to your API. Natively.\r\n\r\n[![Downloads](https://img.shields.io/npm/dm/typed-bridge.svg)](https://www.npmjs.com/package/typed-bridge)\r\n[![Version](https://img.shields.io/npm/v/typed-bridge.svg)](https://www.npmjs.com/package/typed-bridge)\r\n[![License](https://img.shields.io/npm/l/typed-bridge.svg)](https://github.com/neilveil/typed-bridge/blob/main/license.txt)\r\n\r\n**Write one TypeScript function. Get a typed client, OpenAI & Anthropic tools, and an MCP server — from a single Zod schema.**\r\n\r\n</div>\r\n\r\n---\r\n\r\n## Stop maintaining two backends\r\n\r\nMost backends now ship twice. Once for your app — then again for AI: tool schemas, an MCP server, agent integrations, all kept in sync by hand for months.\r\n\r\nTyped Bridge kills the duplication. Write a TypeScript function once, describe it with Zod, and instantly get:\r\n\r\n- A **fully typed API client** for your frontend — React, Vue, Angular, React Native, anything.\r\n- **OpenAI & Anthropic tools** so your agents can call your backend.\r\n- An **MCP server** for Cursor, Claude, and Windsurf.\r\n\r\nAnd auth is not an afterthought: **agents inherit the exact same auth context and permissions as your users** — an agent can never reach something the signed-in user can't. One function. One schema. Every surface, secured the same way.\r\n\r\n> Your backend just became AI-native.\r\n\r\n---\r\n\r\n## One function, three superpowers\r\n\r\n```mermaid\r\nflowchart LR\r\n    A[Your TypeScript functions] --> B[defineBridge]\r\n    B --> C[Typed client for your frontend]\r\n    B --> D[MCP server for AI tools]\r\n    B --> E[LLM tool definitions]\r\n    C --> H[React, Vue, Angular, React Native]\r\n    D --> F[Cursor, Claude, Windsurf]\r\n    E --> G[OpenAI, Anthropic, your agents]\r\n```\r\n\r\nYou describe a function once with a Zod schema. Typed Bridge derives the client types, the MCP tool schema, and the LLM tool schema from that single source. They can never fall out of sync, because there is only one truth.\r\n\r\n### What that unlocks\r\n\r\nPoint Claude or Cursor at your backend and it works across your real functions, with your real auth:\r\n\r\n> **You:** \"Email the invoice for order #1234 to the customer.\"\r\n>\r\n> The agent searches your tools, finds `order.fetch`, `invoice.create`, and `email.send`, reads their schemas, and calls them in turn — running as the signed-in user, blocked from anything that user can't touch.\r\n\r\nNo glue code. No tool schemas written by hand. No second backend. Just your functions.\r\n\r\n---\r\n\r\n## Quick start\r\n\r\n### 1. Install\r\n\r\n```bash\r\nnpm i typed-bridge\r\n```\r\n\r\n### 2. Define your contexts (optional)\r\n\r\nName the shapes your middleware injects, so handlers can declare what they expect. `bridge/context.ts`:\r\n\r\n```ts\r\nexport type user = { id: number }\r\nexport type admin = { id: number; role: 'admin' }\r\nexport type guest = { requestedAt: number }\r\n```\r\n\r\n### 3. Define an entry\r\n\r\nOne self-contained object per handler — schema and logic together. `bridge/user/index.ts`:\r\n\r\n```ts\r\nimport { z, defineEntry } from 'typed-bridge'\r\nimport * as context from '../context'\r\n\r\nexport const fetch = defineEntry({\r\n    description: 'Fetch a user by ID',\r\n    args: z.object({\r\n        id: z.number().min(1).describe('Unique user identifier')\r\n    }),\r\n    res: z.object({\r\n        id: z.number().describe('User ID'),\r\n        name: z.string().describe('Full name'),\r\n        email: z.string().describe('Primary email address')\r\n    }),\r\n    handler: async (args, ctx: context.user) => {\r\n        return db.users.findById(args.id) // `args` is inferred as { id: number }\r\n    }\r\n})\r\n```\r\n\r\n`defineEntry` infers the handler's argument type from `args` and checks its return against `res` — no `z.infer<typeof ...>`, no manual `.parse()`, ever.\r\n\r\n`.describe()` your `res` fields too, not just `args`. In `on_demand` mode the model reads the response schema via `tool_describe` before it calls, so those descriptions help it use the output correctly.\r\n\r\n### 4. Register your entries\r\n\r\nMap each route name straight to its entry. `bridge/index.ts`:\r\n\r\n```ts\r\nimport { defineBridge } from 'typed-bridge'\r\nimport * as user from './user'\r\n\r\nexport const entries = {\r\n    'user.fetch': user.fetch\r\n}\r\n\r\nexport default defineBridge(entries)\r\n```\r\n\r\nA clean 1:1 mapping — `user.fetch` → `fetch`. No spreads, no schema copying. (Need to keep a handler off MCP or LLM? Add `mcp: false` / `llm: false` to its entry — covered in [Superpower 2](#choose-what-each-surface-can-touch).)\r\n\r\n### 5. Boot the server, AI included\r\n\r\n```ts\r\nimport { createBridge } from 'typed-bridge'\r\nimport bridge, { entries } from './bridge'\r\n\r\ncreateBridge(bridge, 8080, '/bridge', { entries, mcp: true })\r\n```\r\n\r\nThat is it. You now have a typed HTTP API and an MCP endpoint at `/bridge/mcp`. From one function.\r\n\r\n---\r\n\r\n## Superpower 1: The typed client\r\n\r\nGenerate a standalone client file for your frontend:\r\n\r\n```bash\r\ntyped-bridge gen-typed-bridge-client --src ./src/bridge/index.ts --dest ./bridge.ts\r\n```\r\n\r\nCall your backend like it lives in the same file:\r\n\r\n```ts\r\nimport bridge, { typedBridgeConfig } from './bridge'\r\n\r\ntypedBridgeConfig.host = 'http://localhost:8080/bridge'\r\n\r\nconst user = await bridge['user.fetch']({ id: 1 })\r\n```\r\n\r\n### Sending headers (auth and more)\r\n\r\nEvery request sends `typedBridgeConfig.headers`. Set them once after login, or update a single header any time — the change applies to all subsequent calls:\r\n\r\n```ts\r\n// Set the full header set (e.g. right after sign-in)\r\ntypedBridgeConfig.headers = {\r\n    'Content-Type': 'application/json',\r\n    Authorization: `Bearer ${token}`\r\n}\r\n\r\n// Or add / change one header on the fly\r\ntypedBridgeConfig.headers['X-Tenant'] = 'acme'\r\n\r\n// Clear it on logout\r\ndelete typedBridgeConfig.headers['Authorization']\r\n```\r\n\r\nThese headers are exactly what your `createMiddleware` chain reads on the server — and that same chain runs on HTTP, MCP, and LLM tool calls — so one token drives auth across every surface. You can also tap every response with `typedBridgeConfig.onResponse`:\r\n\r\n```ts\r\ntypedBridgeConfig.onResponse = res => {\r\n    if (res.status === 401) redirectToLogin()\r\n}\r\n```\r\n\r\nFull autocomplete, full type safety, from server to screen. Your frontend never imports Zod and never sees your backend code. It is one generated file you can drop into React, Vue, Angular, React Native, or anything else.\r\n\r\n---\r\n\r\n## Superpower 2: The MCP server (the headline act)\r\n\r\nFlip one flag and your backend becomes a [Model Context Protocol](https://modelcontextprotocol.io) server. AI tools connect to it and call your real functions, with your real validation.\r\n\r\n```ts\r\ncreateBridge(bridge, 8080, '/bridge', { entries, mcp: true })\r\n```\r\n\r\nPoint any MCP client at it:\r\n\r\n```json\r\n{\r\n    \"mcpServers\": {\r\n        \"my-backend\": {\r\n            \"url\": \"http://localhost:8080/bridge/mcp\",\r\n            \"headers\": { \"Authorization\": \"Bearer your-api-key\" }\r\n        }\r\n    }\r\n}\r\n```\r\n\r\nTyped Bridge is a **remote (HTTP) MCP server**, so the client just needs the `url` and any auth `headers` — those headers flow straight into your middleware chain. (The `env` block you may have seen elsewhere is only for **stdio** servers the client launches as a local process; there is no subprocess here, so it does nothing.)\r\n\r\nThe server is **stateless**: every tool call is a self-contained request with no session handshake, so it scales horizontally and holds no per-client memory. The trade-off is no server-initiated notifications (progress updates, pushed tool-list changes) — for request/response tool calling, nothing is lost.\r\n\r\n### Auth that actually works\r\n\r\nYour `createMiddleware` chain runs on MCP tool calls automatically — the client's forwarded headers are fed through the exact same pattern-matched middleware that guards HTTP. No separate config, no duplicated logic:\r\n\r\n```ts\r\ncreateMiddleware('user.*', async (req, res) => {\r\n    const user = await verifyToken(req.headers['authorization'])\r\n    if (!user) {\r\n        res.status(401).json({ error: 'Unauthorized' })\r\n        return { next: false }\r\n    }\r\n    return { context: { userId: user.id, role: user.role } }\r\n})\r\n\r\ncreateBridge(bridge, 8080, '/bridge', { entries, mcp: true })\r\n```\r\n\r\nThe resolved context lands in every handler as the second argument, identically for a browser request and an agent's tool call — one security model for humans and AI. When a middleware blocks a tool call, the model receives the **message as JSON** (e.g. `{ \"error\": \"Unauthorized\" }`) so it knows *why* it was denied. On tool surfaces a middleware sees the request **headers** and the matched entry name as **`req.path`** (so path-based key derivation like `req.path.split('/').pop()` works everywhere) — but no request **body**, since MCP can forward nothing else.\r\n\r\n### Control how many tools the client sees\r\n\r\nA `toolMode` option, set once on `createBridge`, decides how the server presents tools (defaults to `on_demand`):\r\n\r\n```ts\r\ncreateBridge(bridge, 8080, '/bridge', { entries, mcp: true, toolMode: 'attach_all' })\r\n```\r\n\r\nIn `on_demand` (the default) the server lists just `tool_search`, `tool_describe`, and `tool_use`, and the client discovers the rest as it needs them — ideal for a large API behind a single MCP connection. In `attach_all` it lists every exposed entry as its own tool. Same two modes power direct LLM tool calling too — see [Superpower 3](#superpower-3-llm-tool-calling).\r\n\r\n`toolMode` controls **what's listed**, not what's reachable. It's a discovery strategy, not a sandbox: any entry visible to a surface stays callable (via `tool_use` or by its own name), so the two modes always execute identically. The hard boundary is the `mcp` / `llm` visibility flags — a hidden entry is never listed, discoverable, or callable.\r\n\r\n[`tool_script`](#tool_script--run-code-across-tools-in-one-step) is listed in **both** modes. It isn't a discovery tool — it's the way past `maxToolOutputChars`, which applies in both modes alike. Its exposure is governed by `tbConfig.script`, never by `toolMode`.\r\n\r\n### Choose what each surface can touch\r\n\r\nMCP and LLM tools are independent surfaces. Every entry is exposed to both by default, and two flags — set right on the entry via `defineEntry` — hide a handler from either one while it stays fully callable over HTTP:\r\n\r\n- `mcp: false` keeps a handler off the MCP server.\r\n- `llm: false` keeps it out of `getTools` and tool search.\r\n\r\n```ts\r\n// Your LLM app can call it, external MCP clients cannot\r\nexport const remove = defineEntry({\r\n    description: 'Remove a user',\r\n    args: z.object({ id: z.number().min(1) }),\r\n    res: z.object({ ok: z.boolean() }),\r\n    mcp: false,\r\n    handler: async (args, ctx: context.admin) => { ... }\r\n})\r\n\r\n// HTTP and MCP only, never an LLM tool\r\nexport const sync = defineEntry({\r\n    description: 'Sync admin records',\r\n    args: z.object({}),\r\n    res: z.object({ synced: z.number() }),\r\n    llm: false,\r\n    handler: async (args, ctx: context.admin) => { ... }\r\n})\r\n```\r\n\r\nEach flag governs its surface in **both modes** — under `attach_all` and `on_demand` alike, a hidden entry is neither attached directly nor discoverable through `tool_search`, and it is rejected if called by name. A model cannot reach it even by guessing.\r\n\r\n---\r\n\r\n## Superpower 3: LLM tool calling\r\n\r\nSkip MCP and talk to models directly. Typed Bridge speaks OpenAI, Anthropic, and raw JSON Schema — and one option decides **how** your tools reach the model.\r\n\r\n### Two modes, set with `toolMode`\r\n\r\n- **`on_demand`** (default) — the model gets three discovery meta-tools and finds the rest as it needs them.\r\n- **`attach_all`** — every eligible entry is attached as its own tool.\r\n\r\n[`tool_script`](#tool_script--run-code-across-tools-in-one-step) is added to whichever list you build, unless `tbConfig.script` turns it off.\r\n\r\nYou choose per call, right where you build the tool list. No global state:\r\n\r\n```ts\r\nimport { getTools, handleToolCall } from 'typed-bridge'\r\n\r\n// Build the tool list (openai | anthropic | json-schema). Omit toolMode to use the default, on_demand.\r\nconst tools = getTools(entries, { toolMode: 'on_demand', format: 'openai' })\r\n\r\n// Execute whatever the model called — same call for both modes.\r\n// Forward the incoming request headers so your middleware chain (auth, context) runs here too.\r\nconst result = await handleToolCall(bridge, entries, toolCall, { headers: req.headers })\r\n```\r\n\r\nBecause you pass `toolMode` explicitly, a single process can run one assistant with `attach_all` and another with `on_demand`. `handleToolCall` needs no mode at all — it dispatches on the tool name (a meta-tool name runs the discovery flow, anything else runs that entry directly), so your loop is written once and never changes when you switch modes.\r\n\r\nYour `createMiddleware` chain runs on these tool calls just like it does on HTTP and MCP. Unlike MCP — where the server already holds the client's headers — an LLM loop is your own code, so you pass the request `headers` into `handleToolCall` to drive the chain. The middleware-derived context is merged on top of any `context` you also pass. If a needed header is missing, the matching middleware denies the call (the model receives a JSON `{ error }`), exactly as it would over HTTP.\r\n\r\n### `on_demand` — three tools, discovered as needed (default)\r\n\r\nMost APIs have more endpoints than a model should see at once, so this is the default. Do not flood the context window — give the model three tools instead of two hundred:\r\n\r\n```ts\r\nconst tools = getTools(entries, { toolMode: 'on_demand', format: 'openai' })\r\n// → tool_search, tool_describe, tool_use\r\n\r\n// The model discovers, inspects, then calls:\r\n// 1. tool_search({ query: \"user\" })       → [{ name: \"user.fetch\", description: \"...\" }, ...]\r\n// 2. tool_describe({ name: \"user.fetch\" }) → { name, description, args, response }\r\n// 3. tool_use({ name: \"user.fetch\", arguments: { id: 1 } }) → { id: 1, name: \"Alice\" }\r\n```\r\n\r\nThe model calls `tool_search` to discover what exists (names and descriptions only), `tool_describe` to get the full schema for the tool it needs, then `tool_use` to run it. Your token bill stays flat as your API grows.\r\n\r\n### `attach_all` — every tool, up front\r\n\r\n```ts\r\nconst tools = getTools(entries, { toolMode: 'attach_all', format: 'openai' })\r\n// → one tool per entry: user.fetch, product.create, ... plus tool_script\r\n// Pass `tools` straight into openai.chat.completions.create()\r\n```\r\n\r\nBest when you have a handful of endpoints and want the model to see them all immediately.\r\n\r\n> Two functions cover every case: `getTools` to build the tool list and `handleToolCall` to run whatever the model picks — in either mode.\r\n\r\n### `tool_script` — run code across tools in one step\r\n\r\nA meta-tool listed in **both modes** and **on by default**, letting the model write a small JavaScript snippet that runs server-side in a WASM sandbox and calls your tools via `await callTool(name, args)`:\r\n\r\n```ts\r\n// The model emits:\r\ntool_script({\r\n    code: `\r\n        const events = await callTool('analytics.events', {})\r\n        const purchases = events.filter(e => e.type === 'purchase')\r\n        return { total: events.length, purchases: purchases.length }\r\n    `\r\n})\r\n```\r\n\r\nWhy it matters: tool results fetched **inside** the script are not size-limited, so the model can pull a large dataset, reduce it in the sandbox, and return only the small projection it actually needs. Just the returned value counts against `maxToolOutputChars` — the raw data never enters the context window. This turns a query that would fail with _\"Result too large\"_ into a one-shot aggregate.\r\n\r\nIt stays inside the same boundaries as every other tool call: each `callTool` runs your middleware/auth chain and respects `mcp` / `llm` visibility, and the sandbox has no access to `fs`, `net`, `process`, or host globals — its only capability is `callTool`. Runaway scripts are stopped by a wall-clock timeout, a memory cap, and a per-run limit on how many tools one script may call.\r\n\r\nConfigure or disable it via `tbConfig.script`:\r\n\r\n```ts\r\ntbConfig.script.enabled = true               // on by default; set false to remove tool_script\r\ntbConfig.script.timeoutMs = 5000             // hard wall-clock cap per run\r\ntbConfig.script.memoryBytes = 64 * 1024 * 1024 // sandbox memory ceiling\r\ntbConfig.script.maxToolCalls = 50            // callTool invocations per run; 0 disables the limit\r\ntbConfig.script.surfaces = ['llm', 'mcp']    // which surfaces expose it\r\n```\r\n\r\n`maxToolCalls` bounds what a script does to your backend, since every `callTool` runs the full middleware chain. Crossing it rejects that one call rather than killing the run, so a script can catch the error and return what it already gathered.\r\n\r\n> Requires the `quickjs-emscripten` dependency (installed automatically). It's loaded lazily on the first script run, so it adds no startup cost.\r\n\r\n---\r\n\r\n## Why Typed Bridge\r\n\r\nYou could wire all of this by hand. Here is what you skip.\r\n\r\n### vs hand-rolled REST + Express\r\n\r\n|                     | **Typed Bridge**                          | **Hand-rolled REST**                          |\r\n| ------------------- | ----------------------------------------- | --------------------------------------------- |\r\n| Endpoints           | Plain functions, auto-routed              | Routes, controllers, and handlers wired by hand |\r\n| Request validation  | Built in with Zod, automatic              | Added and maintained per route                |\r\n| Client + types      | One generated file, always in sync        | Hand-written fetch calls and types, or none   |\r\n| AI tooling          | MCP and LLM tools included                 | Build the whole AI layer yourself             |\r\n\r\n### vs writing AI tools by hand\r\n\r\n|                          | **Typed Bridge**                          | **DIY tool calling**                         |\r\n| ------------------------ | ----------------------------------------- | -------------------------------------------- |\r\n| Tool schemas             | Derived from your Zod types               | Hand written and kept in sync manually       |\r\n| MCP server               | One flag                                  | A separate service to build and maintain     |\r\n| Validation               | Shared with your API                      | Re-implemented for the AI path               |\r\n| Drift between code and AI | Impossible, single source                | Constant, two sources                        |\r\n\r\n### vs tRPC\r\n\r\n|                        | **Typed Bridge**                              | **tRPC**                            |\r\n| ---------------------- | --------------------------------------------- | ----------------------------------- |\r\n| Setup                  | Plain functions, generate a client, done      | Routers, procedures, adapters       |\r\n| Monorepo required      | No, the client is a standalone file           | Practically yes for type inference  |\r\n| Frontend framework     | Any                                           | React first, adapters for others    |\r\n| AI tooling             | Built in (MCP and LLM)                         | Not included                        |\r\n\r\ntRPC has a deeper React/inference ecosystem and richer client features. Reach for Typed Bridge when you also want AI surfaces and a framework-agnostic, standalone client.\r\n\r\n### vs GraphQL\r\n\r\n|                    | **Typed Bridge**                          | **GraphQL**                                  |\r\n| ------------------ | ----------------------------------------- | -------------------------------------------- |\r\n| Setup              | Define functions, generate client         | Schema, resolvers, codegen                   |\r\n| Type safety        | Automatic from signatures                 | Requires a codegen toolchain                 |\r\n| Learning curve     | Minimal, plain TypeScript                 | SDL, resolvers, fragments, queries           |\r\n| AI tooling         | Built in                                  | Roll your own                                |\r\n\r\nGraphQL is unmatched when clients need to shape their own queries across a complex graph. Typed Bridge is the simpler choice when you want typed RPC plus native AI access, not a query language.\r\n\r\n---\r\n\r\n## Middleware when you need it\r\n\r\nPattern based middleware runs before handlers and can inject context. The **same chain runs on all three surfaces** — HTTP requests, MCP tool calls, and LLM tool calls — matched by entry name (e.g. `user.fetch` matches `user.*`). Over HTTP a middleware blocks by writing to `res`; on tool calls that same `res.status(code).send(msg)` is reported back to the model as JSON (`{ error }`) — the message reaches the model, the status code (irrelevant off HTTP) is dropped. On tool surfaces a middleware sees `req.headers` and `req.path` (the matched entry name) but **no `req.body`** and no real `res` for side effects (cookies, custom headers are no-ops), so write auth/context logic against `req.headers` / `req.path`:\r\n\r\n```ts\r\nimport { createMiddleware } from 'typed-bridge'\r\n\r\ncreateMiddleware('user.*', async (req, res) => {\r\n    if (!req.headers.authorization) {\r\n        res.status(401).send('Unauthorized')\r\n        return { next: false }\r\n    }\r\n    return { context: { id: 1 } } // shape matches `context.user` from bridge/context.ts\r\n})\r\n```\r\n\r\nA middleware returns one of:\r\n\r\n- `{ context }` — merge these values into the context and continue.\r\n- `{ next: false }` — stop here. You must have sent a response (`res.status(...).send(...)`); the handler never runs.\r\n- nothing — continue with no context change.\r\n\r\n### Middlewares stack, broad to specific\r\n\r\nEvery middleware whose pattern matches the route runs, ordered from least to most specific (a literal segment counts as more specific than `*`). Each one's context is merged on top of the previous, so the handler receives the combined result:\r\n\r\n```ts\r\ncreateMiddleware('*', async () => {\r\n    return { context: { requestedAt: Date.now() } } // runs first, for every route\r\n})\r\n\r\ncreateMiddleware('user.*', async (req, res) => {\r\n    const token = req.headers.authorization\r\n    if (!token?.startsWith('Bearer ')) {\r\n        res.status(401).send('Unauthorized')\r\n        return { next: false }\r\n    }\r\n    return { context: { userId: Number(token.split(' ')[1]) } }\r\n})\r\n\r\ncreateMiddleware('user.remove', async (req, res) => {\r\n    if (req.headers['x-admin'] !== 'true') {\r\n        res.status(403).send('Admin access required')\r\n        return { next: false }\r\n    }\r\n    return { context: { isAdmin: true } }\r\n})\r\n```\r\n\r\nA call to `user.remove` runs all three in order — `*` → `user.*` → `user.remove` — and the handler's `ctx` is the merged `{ requestedAt, userId, isAdmin }`. A call to `user.fetch` runs only the first two and gets `{ requestedAt, userId }`. If any middleware returns `{ next: false }`, the chain stops immediately and the rest never run.\r\n\r\n### Reusing logic across middlewares\r\n\r\nThe pattern stacking above is automatic. When you instead want one middleware to *build on* another's logic, extract a plain function and call it — full control over order and short-circuiting:\r\n\r\n```ts\r\nconst auth = async (req: Request, res: Response) => {\r\n    const user = verifyToken(req.headers['x-auth-token'] || '')\r\n    if (!user) {\r\n        res.status(401).send('Unauthorized')\r\n        return { next: false as const }\r\n    }\r\n    return { next: true as const, context: user }\r\n}\r\n\r\ncreateMiddleware('admin.*', async (req, res) => {\r\n    const authRes = await auth(req, res)\r\n    if (authRes.next === false) return authRes // 401 already sent\r\n\r\n    if (!authRes.context.role.includes('admin')) {\r\n        res.status(403).send('Forbidden')\r\n        return { next: false }\r\n    }\r\n\r\n    return authRes // passes the authenticated user through as context\r\n})\r\n```\r\n\r\n---\r\n\r\n## Configuration\r\n\r\n```ts\r\nimport { tbConfig } from 'typed-bridge'\r\n\r\ntbConfig.logs.request = true\r\ntbConfig.logs.response = true\r\ntbConfig.logs.error = true\r\ntbConfig.logs.argsOnError = true // Include handler args in error logs\r\ntbConfig.logs.contextOnError = true // Include resolved context in error logs\r\ntbConfig.responseDelay = 0 // Artificial delay in ms for testing loading states\r\ntbConfig.maxToolOutputChars = 100_000 // Cap MCP/LLM tool results (chars of JSON); default 100_000, set 0 to disable\r\ntbConfig.script.enabled = true // Expose the tool_script sandbox meta-tool (default true)\r\ntbConfig.script.timeoutMs = 5000 // Per-run wall-clock cap for tool_script\r\ntbConfig.script.memoryBytes = 64 * 1024 * 1024 // tool_script sandbox memory ceiling\r\ntbConfig.script.surfaces = ['llm', 'mcp'] // Surfaces that expose tool_script\r\n```\r\n\r\n> Tool exposure (`attach_all` vs `on_demand`) is **not** global — you pass `toolMode` explicitly to `getTools` for your own loop, and to `createBridge` for the MCP server.\r\n\r\n`createBridge` also returns the underlying Express `app` and `server`, so you can add routes, serve static files, or attach any Express middleware.\r\n\r\n### Guarding tool output size\r\n\r\nThe same function can serve a data-heavy response over HTTP and as an AI tool. A frontend handles a large payload fine, but feeding it to a model wastes tokens or overflows the context window. So by default Typed Bridge caps tool results at **100,000 characters** on the **MCP and LLM tool surfaces only** (HTTP is never limited). Oversized results are **rejected, not truncated** — the caller gets an error telling it to narrow the query, so the model never receives invalid JSON:\r\n\r\n```ts\r\ntbConfig.maxToolOutputChars = 250_000 // raise it\r\ntbConfig.maxToolOutputChars = 0       // or disable the cap entirely\r\n```\r\n\r\nThe error names the recourse that actually exists for that call, rather than assuming one:\r\n\r\n| Situation | What the model is told |\r\n| --- | --- |\r\n| `tool_script` is available on this surface | Retry with `tool_script` — fetch it in the sandbox, return only the reduced value |\r\n| No `tool_script`, entry declares `args` | Narrow the query with filters or pagination |\r\n| No `tool_script`, entry declares no `args` | This tool cannot be narrowed — ask the operator to raise the cap or enable `tool_script` |\r\n| The oversized value is a `tool_script` return | Reduce it further inside the script |\r\n\r\n[`tool_script`](#tool_script--run-code-across-tools-in-one-step) is the general way through: it fetches the data in the sandbox (uncapped), reduces it, and returns only the aggregate, so the cap protects the context window without blocking the work. It is listed in both tool modes, so the only thing that removes it is `tbConfig.script`.\r\n\r\nThat leaves one genuine dead end, by design: an entry with **no narrowing arguments**, on a surface where `tool_script` is disabled. Typed Bridge cannot invent a filter your handler never defined, so it says so plainly and points at the operator instead of sending the model round the loop again. If you disable `tool_script`, give your data-heavy entries a way to be narrowed.\r\n\r\n---\r\n\r\n## Adding a new route\r\n\r\n1. Define the entry with `defineEntry` in `bridge/<module>/index.ts` (description, args, res, handler, plus any `mcp`/`llm` flags).\r\n2. Register it in `bridge/index.ts` with a direct mapping: `export const entries = { 'module.action': module.action }` then `export default defineBridge(entries)`.\r\n3. Add middleware if needed and import it in your server entry.\r\n4. Regenerate the client.\r\n\r\n---\r\n\r\n## Upgrading from v3\r\n\r\nv4 unifies the LLM and MCP tool paths behind two functions and a single `toolMode` option. The MCP server itself is unchanged — `mcp: true` still mounts `/bridge/mcp` — but `toolMode` now defaults to `on_demand`.\r\n\r\n| v3                                                  | v4                                                            |\r\n| --------------------------------------------------- | ------------------------------------------------------------ |\r\n| `toolsFormat` option / `GET /bridge/tools` endpoint | Build the list in code: `getTools(entries, { toolMode, format })` |\r\n| `toLLMTools(entries, { format })`                   | `getTools(entries, { toolMode: 'attach_all', format })`      |\r\n| `getMetaTools({ format })`                          | `getTools(entries, { toolMode: 'on_demand', format })`       |\r\n| `handleMetaToolCall(...)` / direct `toolUse(...)`   | `handleToolCall(bridge, entries, toolCall, { context, surface })` |\r\n| `{ handler, ...types.fetch }` + separate `types.ts` | One `defineEntry({ ... })` object, mapped 1:1 in `entries`   |\r\n\r\n`handleToolCall` is mode-agnostic: it dispatches on the tool name, so the same loop runs whether you chose `attach_all` or `on_demand`.\r\n\r\n---\r\n\r\n## Developer\r\n\r\nBuilt and maintained by [neilveil](https://github.com/neilveil). If Typed Bridge saves you a codebase, drop a star.\r\n","readmeFilename":"readme.md"}