{"_id":"@axlabs/neofs-sdk-ts-node","_rev":"7-0252a71fe63d3aadd8f4da1f653fe2c6","name":"@axlabs/neofs-sdk-ts-node","dist-tags":{"latest":"0.0.6"},"versions":{"0.0.1":{"name":"@axlabs/neofs-sdk-ts-node","version":"0.0.1","keywords":["neofs","blockchain","storage","typescript","sdk","nodejs"],"author":{"name":"AxLabs Team"},"license":"Apache-2.0","_id":"@axlabs/neofs-sdk-ts-node@0.0.1","maintainers":[{"name":"merl123","email":"mathias@axlabs.com"},{"name":"axlabs-bot","email":"tech@axlabs.com"},{"name":"mialbu","email":"bucher_michael@hotmail.com"},{"name":"gsperbmachado","email":"guil@axlabs.com"},{"name":"thedanielmark","email":"danielmark.uc@gmail.com"}],"homepage":"https://github.com/axlabs/neofs-sdk-ts-node#readme","bugs":{"url":"https://github.com/axlabs/neofs-sdk-ts-node/issues"},"dist":{"shasum":"33e1202767a487b0ffcfc7e94c592360e0c222de","tarball":"https://registry.npmjs.org/@axlabs/neofs-sdk-ts-node/-/neofs-sdk-ts-node-0.0.1.tgz","fileCount":127,"integrity":"sha512-uUygFbA4d8EyC/XzSyn0mnHCwWujlHWd/Hn8L6MseuSBEd+1aFIcJkErgJDWSswPT8feCZwJ/Tq8s/+bmOoq7Q==","signatures":[{"sig":"MEUCIDO7PQzF2bqPJtEY0HQaaUM2A7FKzK23fIGYxFltDlp3AiEA9tE2Zw7w79A72BvCehDkg0nzTo5JP9H3EaR3M2elwVg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1727833},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js","require":"./dist/client/index.js"}},"gitHead":"641b182f3e7049d07c9162da3f1977962bdcae63","scripts":{"lint":"eslint src/**/*.ts","test":"jest --passWithNoTests","build":"tsc && cp -r src/gen dist/ 2>/dev/null || true","clean":"rm -rf dist","format":"prettier --write src/**/*.ts","generate":"protoc --plugin=./bin/protoc-gen-grpc-ts --grpc-ts_out=target=nodejs:src/gen -I neofs-api neofs-api/accounting/service.proto neofs-api/accounting/types.proto neofs-api/acl/types.proto neofs-api/audit/types.proto neofs-api/container/service.proto neofs-api/container/types.proto neofs-api/link/types.proto neofs-api/lock/types.proto neofs-api/netmap/service.proto neofs-api/netmap/types.proto neofs-api/object/service.proto neofs-api/object/types.proto neofs-api/refs/types.proto neofs-api/reputation/service.proto neofs-api/reputation/types.proto neofs-api/session/service.proto neofs-api/session/types.proto neofs-api/status/types.proto neofs-api/storagegroup/types.proto neofs-api/subnet/types.proto neofs-api/tombstone/types.proto","prebuild":"npm run clean","test:watch":"jest --watch","generate:all":"sh scripts/ensure-protoc-gen-grpc-ts.sh && npm run generate:clean && npm run generate","generate:clean":"rm -rf src/gen/* && mkdir -p src/gen","prepublishOnly":"npm run build","publish:public":"npm publish --access public","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"merl123","email":"mathias@axlabs.com"},"repository":{"url":"git+https://github.com/axlabs/neofs-sdk-ts-node.git","type":"git"},"_npmVersion":"10.9.3","description":"TypeScript SDK for NeoFS - Node.js Edition","directories":{},"_nodeVersion":"22.20.0","dependencies":{"ripemd160":"^2.0.3","@grpc/grpc-js":"^1.14.0","@grpc/proto-loader":"^0.8.0","@axlabs/neofs-sdk-ts-core":"^0.0.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","eslint":"^8.57.0","ts-jest":"^29.1.2","prettier":"^3.2.5","typescript":"^5.3.3","@types/jest":"^29.5.12","@types/node":"^20.11.17","@types/elliptic":"^6.4.18","@types/ripemd160":"^2.0.3","@typescript-eslint/parser":"^7.1.1","@typescript-eslint/eslint-plugin":"^7.1.1"},"_npmOperationalInternal":{"tmp":"tmp/neofs-sdk-ts-node_0.0.1_1773262503019_0.4308197813952761","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"@axlabs/neofs-sdk-ts-node","version":"0.0.3","keywords":["neofs","blockchain","storage","typescript","sdk","nodejs"],"author":{"name":"AxLabs Team"},"license":"Apache-2.0","_id":"@axlabs/neofs-sdk-ts-node@0.0.3","maintainers":[{"name":"merl123","email":"mathias@axlabs.com"},{"name":"axlabs-bot","email":"tech@axlabs.com"},{"name":"mialbu","email":"bucher_michael@hotmail.com"},{"name":"gsperbmachado","email":"guil@axlabs.com"},{"name":"thedanielmark","email":"danielmark.uc@gmail.com"}],"homepage":"https://github.com/AxLabs/neofs-sdk-ts-node#readme","bugs":{"url":"https://github.com/AxLabs/neofs-sdk-ts-node/issues"},"dist":{"shasum":"6640c2b1bc75ad0d103cf41f0ca1e44d78e5f226","tarball":"https://registry.npmjs.org/@axlabs/neofs-sdk-ts-node/-/neofs-sdk-ts-node-0.0.3.tgz","fileCount":127,"integrity":"sha512-iHOdfvkLgbenFZSfbaXYeYLclGH++4tC2HGa5k8NVudKPsRQV4Cfnfd+K/49rLlMkVlQ+Yg2fEoWtcK1aQW50g==","signatures":[{"sig":"MEQCIAHIvjSdkFNKJwbD3MKLpS7xg7dfn1nSkP1EJpkuA9SaAiB9qp+hDuyCvuFBc9aPHjQ4xiWQ2XY9sJvKkD6PezV6SA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@axlabs%2fneofs-sdk-ts-node@0.0.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1730162},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js","require":"./dist/client/index.js"}},"gitHead":"41ddbbb5a3cc3efaf7555381c3447a9c346e2ae9","scripts":{"lint":"eslint src/**/*.ts","test":"jest --passWithNoTests","build":"tsc && cp -r src/gen dist/ 2>/dev/null || true","clean":"rm -rf dist","format":"prettier --write src/**/*.ts","generate":"protoc --plugin=./bin/protoc-gen-grpc-ts --grpc-ts_out=target=nodejs:src/gen -I neofs-api neofs-api/accounting/service.proto neofs-api/accounting/types.proto neofs-api/acl/types.proto neofs-api/audit/types.proto neofs-api/container/service.proto neofs-api/container/types.proto neofs-api/link/types.proto neofs-api/lock/types.proto neofs-api/netmap/service.proto neofs-api/netmap/types.proto neofs-api/object/service.proto neofs-api/object/types.proto neofs-api/refs/types.proto neofs-api/reputation/service.proto neofs-api/reputation/types.proto neofs-api/session/service.proto neofs-api/session/types.proto neofs-api/status/types.proto neofs-api/storagegroup/types.proto neofs-api/subnet/types.proto neofs-api/tombstone/types.proto","prebuild":"npm run clean","test:watch":"jest --watch","generate:all":"sh scripts/ensure-protoc-gen-grpc-ts.sh && npm run generate:clean && npm run generate","generate:clean":"rm -rf src/gen/* && mkdir -p src/gen","prepublishOnly":"npm run build","publish:public":"npm publish --access public","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f5be46d2-7b81-4521-92e6-e474efb5c61f"}},"repository":{"url":"git+https://github.com/AxLabs/neofs-sdk-ts-node.git","type":"git"},"_npmVersion":"11.11.1","description":"TypeScript SDK for NeoFS - Node.js Edition","directories":{},"_nodeVersion":"24.14.0","dependencies":{"ripemd160":"^2.0.3","@grpc/grpc-js":"^1.14.0","@grpc/proto-loader":"^0.8.0","@axlabs/neofs-sdk-ts-core":"^0.0.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","eslint":"^8.57.0","ts-jest":"^29.1.2","prettier":"^3.2.5","typescript":"^5.3.3","@types/jest":"^29.5.12","@types/node":"^20.11.17","@types/elliptic":"^6.4.18","@types/ripemd160":"^2.0.3","@typescript-eslint/parser":"^7.1.1","@typescript-eslint/eslint-plugin":"^7.1.1"},"_npmOperationalInternal":{"tmp":"tmp/neofs-sdk-ts-node_0.0.3_1773304019249_0.954366273599532","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"name":"@axlabs/neofs-sdk-ts-node","version":"0.0.4","keywords":["neofs","blockchain","storage","typescript","sdk","nodejs"],"author":{"name":"AxLabs Team"},"license":"Apache-2.0","_id":"@axlabs/neofs-sdk-ts-node@0.0.4","maintainers":[{"name":"merl123","email":"mathias@axlabs.com"},{"name":"axlabs-bot","email":"tech@axlabs.com"},{"name":"mialbu","email":"bucher_michael@hotmail.com"},{"name":"gsperbmachado","email":"guil@axlabs.com"},{"name":"thedanielmark","email":"danielmark.uc@gmail.com"}],"homepage":"https://github.com/AxLabs/neofs-sdk-ts-node#readme","bugs":{"url":"https://github.com/AxLabs/neofs-sdk-ts-node/issues"},"dist":{"shasum":"34df2fd2a827ade218fd0057421dffd3a884c119","tarball":"https://registry.npmjs.org/@axlabs/neofs-sdk-ts-node/-/neofs-sdk-ts-node-0.0.4.tgz","fileCount":127,"integrity":"sha512-pK3buLmU0Zk5tOImnFHgcLf++29+uVSbM2r1QFmheucbndswsQWnmQLq8nzCLuqW2l156DAw9Y5cMrB92S2ehQ==","signatures":[{"sig":"MEUCIQDJzzKz3mUHH3sBkUSLKk9V0xXHzLSB3NvDgVshqZ72QQIgNmgqrSJtjvuEAK902IOmKggtd6IZYAu0f5VarR5TneA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@axlabs%2fneofs-sdk-ts-node@0.0.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":1733019},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js","require":"./dist/client/index.js"}},"gitHead":"e907fdc9bcf2bc68b3cf603136c02c19b414a737","scripts":{"lint":"eslint src/**/*.ts","test":"jest --passWithNoTests","build":"tsc && cp -r src/gen dist/ 2>/dev/null || true","clean":"rm -rf dist","format":"prettier --write src/**/*.ts","generate":"sh scripts/ensure-protoc-gen-grpc-ts.sh && protoc --plugin=./bin/protoc-gen-grpc-ts --grpc-ts_out=target=nodejs:src/gen -I neofs-api neofs-api/accounting/service.proto neofs-api/accounting/types.proto neofs-api/acl/types.proto neofs-api/audit/types.proto neofs-api/container/service.proto neofs-api/container/types.proto neofs-api/link/types.proto neofs-api/lock/types.proto neofs-api/netmap/service.proto neofs-api/netmap/types.proto neofs-api/object/service.proto neofs-api/object/types.proto neofs-api/refs/types.proto neofs-api/reputation/service.proto neofs-api/reputation/types.proto neofs-api/session/service.proto neofs-api/session/types.proto neofs-api/status/types.proto neofs-api/storagegroup/types.proto neofs-api/subnet/types.proto neofs-api/tombstone/types.proto","prebuild":"npm run clean","test:watch":"jest --watch","generate:all":"sh scripts/ensure-protoc-gen-grpc-ts.sh && npm run generate:clean && npm run generate","generate:clean":"rm -rf src/gen/* && mkdir -p src/gen","prepublishOnly":"npm run build","publish:public":"npm publish --access public","publish:dry-run":"npm publish --dry-run"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:f5be46d2-7b81-4521-92e6-e474efb5c61f"}},"repository":{"url":"git+https://github.com/AxLabs/neofs-sdk-ts-node.git","type":"git"},"_npmVersion":"11.11.1","description":"TypeScript SDK for NeoFS - Node.js Edition","directories":{},"_nodeVersion":"24.14.0","dependencies":{"ripemd160":"^2.0.3","@grpc/grpc-js":"^1.14.0","@grpc/proto-loader":"^0.8.0","@axlabs/neofs-sdk-ts-core":"^0.0.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","eslint":"^8.57.0","ts-jest":"^29.1.2","prettier":"^3.2.5","typescript":"^5.3.3","@types/jest":"^29.5.12","@types/node":"^20.11.17","@types/elliptic":"^6.4.18","@types/ripemd160":"^2.0.3","@typescript-eslint/parser":"^7.1.1","@typescript-eslint/eslint-plugin":"^7.1.1"},"_npmOperationalInternal":{"tmp":"tmp/neofs-sdk-ts-node_0.0.4_1773306371015_0.7998239408225478","host":"s3://npm-registry-packages-npm-production"}},"0.0.5":{"name":"@axlabs/neofs-sdk-ts-node","version":"0.0.5","keywords":["neofs","blockchain","storage","typescript","sdk","nodejs"],"author":{"name":"AxLabs Team"},"license":"Apache-2.0","_id":"@axlabs/neofs-sdk-ts-node@0.0.5","maintainers":[{"name":"merl123","email":"mathias@axlabs.com"},{"name":"axlabs-bot","email":"tech@axlabs.com"},{"name":"mialbu","email":"bucher_michael@hotmail.com"},{"name":"gsperbmachado","email":"guil@axlabs.com"},{"name":"thedanielmark","email":"danielmark.uc@gmail.com"}],"homepage":"https://github.com/AxLabs/neofs-sdk-ts-node#readme","bugs":{"url":"https://github.com/AxLabs/neofs-sdk-ts-node/issues"},"dist":{"shasum":"02624450523ae43f2ab2116aab6241d34d2de9f3","tarball":"https://registry.npmjs.org/@axlabs/neofs-sdk-ts-node/-/neofs-sdk-ts-node-0.0.5.tgz","fileCount":127,"integrity":"sha512-GfcNlKYJsCMJOInG38iu0C8rKAO6BGX1ibp4zTg3PBj9aQod/RukGD5oHyZKlc9RgDSRWBRQ1Evct7/F132ljA==","signatures":[{"sig":"MEUCIFThFRbHN6GRdRNi3Ta2pbT2/A+2zRG1yVNZAJlANiwNAiEA/NxHH9LvJvb7/OJTXVC/mnHAgO5E0Dv+dY1JPOJ6dfQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1735940},"main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.js"},"./client":{"types":"./dist/client/index.d.ts","import":"./dist/client/index.js","require":"./dist/client/index.js"}},"gitHead":"cad9654d6c5081b3162205606174e0defdf867b0","scripts":{"lint":"eslint src/**/*.ts","test":"jest --passWithNoTests","build":"tsc && cp -r src/gen dist/ 2>/dev/null || true","clean":"rm -rf dist","format":"prettier --write src/**/*.ts","generate":"sh scripts/ensure-protoc-gen-grpc-ts.sh && protoc --plugin=./bin/protoc-gen-grpc-ts --grpc-ts_out=target=nodejs:src/gen -I neofs-api neofs-api/accounting/service.proto neofs-api/accounting/types.proto neofs-api/acl/types.proto neofs-api/audit/types.proto neofs-api/container/service.proto neofs-api/container/types.proto neofs-api/link/types.proto neofs-api/lock/types.proto neofs-api/netmap/service.proto neofs-api/netmap/types.proto neofs-api/object/service.proto neofs-api/object/types.proto neofs-api/refs/types.proto neofs-api/reputation/service.proto neofs-api/reputation/types.proto neofs-api/session/service.proto neofs-api/session/types.proto neofs-api/status/types.proto neofs-api/storagegroup/types.proto neofs-api/subnet/types.proto neofs-api/tombstone/types.proto","prebuild":"npm run clean","test:watch":"jest --watch","generate:all":"sh scripts/ensure-protoc-gen-grpc-ts.sh && npm run generate:clean && npm run generate","generate:clean":"rm -rf src/gen/* && mkdir -p src/gen","prepublishOnly":"npm run build","publish:public":"npm publish --access public","publish:dry-run":"npm publish --dry-run","test:integration":"jest -c jest.integration.config.js --runInBand"},"_npmUser":{"name":"merl123","email":"mathias@axlabs.com"},"repository":{"url":"git+https://github.com/AxLabs/neofs-sdk-ts-node.git","type":"git"},"_npmVersion":"10.9.3","description":"TypeScript SDK for NeoFS - Node.js Edition","directories":{},"_nodeVersion":"22.20.0","dependencies":{"ripemd160":"^2.0.3","@grpc/grpc-js":"^1.14.0","@grpc/proto-loader":"^0.8.0","@axlabs/neofs-sdk-ts-core":"^0.0.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","eslint":"^8.57.0","ts-jest":"^29.1.2","prettier":"^3.2.5","typescript":"^5.3.3","@types/jest":"^29.5.12","@types/node":"^20.11.17","@types/elliptic":"^6.4.18","@types/ripemd160":"^2.0.3","@typescript-eslint/parser":"^7.1.1","@typescript-eslint/eslint-plugin":"^7.1.1"},"_npmOperationalInternal":{"tmp":"tmp/neofs-sdk-ts-node_0.0.5_1775631306341_0.6390414893300855","host":"s3://npm-registry-packages-npm-production"}},"0.0.6":{"name":"@axlabs/neofs-sdk-ts-node","version":"0.0.6","description":"TypeScript SDK for NeoFS - Node.js Edition","main":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"require":"./dist/index.js","import":"./dist/index.js","types":"./dist/index.d.ts"},"./client":{"require":"./dist/client/index.js","import":"./dist/client/index.js","types":"./dist/client/index.d.ts"}},"scripts":{"build":"tsc && cp -r src/gen dist/ 2>/dev/null || true","generate":"sh scripts/ensure-protoc-gen-grpc-ts.sh && protoc --plugin=./bin/protoc-gen-grpc-ts --grpc-ts_out=target=nodejs:src/gen -I neofs-api neofs-api/accounting/service.proto neofs-api/accounting/types.proto neofs-api/acl/types.proto neofs-api/audit/types.proto neofs-api/container/service.proto neofs-api/container/types.proto neofs-api/link/types.proto neofs-api/lock/types.proto neofs-api/netmap/service.proto neofs-api/netmap/types.proto neofs-api/object/service.proto neofs-api/object/types.proto neofs-api/refs/types.proto neofs-api/reputation/service.proto neofs-api/reputation/types.proto neofs-api/session/service.proto neofs-api/session/types.proto neofs-api/status/types.proto neofs-api/storagegroup/types.proto neofs-api/subnet/types.proto neofs-api/tombstone/types.proto","generate:clean":"rm -rf src/gen/* && mkdir -p src/gen","generate:all":"sh scripts/ensure-protoc-gen-grpc-ts.sh && npm run generate:clean && npm run generate","test":"vitest run","test:unit":"vitest run","test:integration":"jest -c jest.integration.config.js --runInBand","test:watch":"vitest","lint":"eslint src/**/*.ts","format":"prettier --write src/**/*.ts","clean":"rm -rf dist","prebuild":"npm run clean","prepublishOnly":"npm run build","publish:dry-run":"npm publish --dry-run","publish:public":"npm publish --access public"},"repository":{"type":"git","url":"git+https://github.com/AxLabs/neofs-sdk-ts-node.git"},"bugs":{"url":"https://github.com/AxLabs/neofs-sdk-ts-node/issues"},"homepage":"https://github.com/AxLabs/neofs-sdk-ts-node#readme","keywords":["neofs","blockchain","storage","typescript","sdk","nodejs"],"author":{"name":"AxLabs Team"},"license":"Apache-2.0","devDependencies":{"@types/elliptic":"^6.4.18","@types/jest":"^29.5.12","@types/node":"^20.11.17","@types/ripemd160":"^2.0.3","@typescript-eslint/eslint-plugin":"^7.1.1","@typescript-eslint/parser":"^7.1.1","eslint":"^8.57.0","jest":"^29.7.0","prettier":"^3.2.5","ts-jest":"^29.1.2","typescript":"^5.3.3","vitest":"^4.1.5"},"dependencies":{"@axlabs/neofs-sdk-ts-core":"^0.0.2","@grpc/grpc-js":"^1.14.0","@grpc/proto-loader":"^0.8.0","ripemd160":"^2.0.3"},"_id":"@axlabs/neofs-sdk-ts-node@0.0.6","gitHead":"5f40a635e7d795f160cfcb095835e1df93f350da","_nodeVersion":"22.20.0","_npmVersion":"10.9.3","dist":{"integrity":"sha512-gZjonwHzV0t2LqZhoQPkDUmnMYXsHVCo4qM+8tDBbfeyVkVdMeqzkqJ+SfRLy7xaP9ClHjFYlDVQRluzKEK4sA==","shasum":"0d2d4e8d86e84fbb6d19442858dec836bde64c78","tarball":"https://registry.npmjs.org/@axlabs/neofs-sdk-ts-node/-/neofs-sdk-ts-node-0.0.6.tgz","fileCount":127,"unpackedSize":1749833,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQC3lRC9ITqNQeEzKJBt8HHPrPT/kWACmt2S1j91ONUYCQIhAJcVLArHWuGJsgMCJPldjW68hYtXH10MfLu8X9VdleK6"}]},"_npmUser":{"name":"merl123","email":"mathias@axlabs.com"},"directories":{},"maintainers":[{"name":"merl123","email":"mathias@axlabs.com"},{"name":"axlabs-bot","email":"tech@axlabs.com"},{"name":"mialbu","email":"bucher_michael@hotmail.com"},{"name":"gsperbmachado","email":"guil@axlabs.com"},{"name":"thedanielmark","email":"danielmark.uc@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/neofs-sdk-ts-node_0.0.6_1778567573343_0.8666203347663601"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-11T20:55:02.920Z","modified":"2026-05-12T06:32:53.811Z","0.0.1":"2026-03-11T20:55:03.180Z","0.0.2":"2026-03-12T08:05:23.293Z","0.0.3":"2026-03-12T08:26:59.469Z","0.0.4":"2026-03-12T09:06:11.213Z","0.0.5":"2026-04-08T06:55:06.561Z","0.0.6":"2026-05-12T06:32:53.633Z"},"bugs":{"url":"https://github.com/AxLabs/neofs-sdk-ts-node/issues"},"author":{"name":"AxLabs Team"},"license":"Apache-2.0","homepage":"https://github.com/AxLabs/neofs-sdk-ts-node#readme","keywords":["neofs","blockchain","storage","typescript","sdk","nodejs"],"repository":{"type":"git","url":"git+https://github.com/AxLabs/neofs-sdk-ts-node.git"},"description":"TypeScript SDK for NeoFS - Node.js Edition","maintainers":[{"name":"merl123","email":"mathias@axlabs.com"},{"name":"axlabs-bot","email":"tech@axlabs.com"},{"name":"mialbu","email":"bucher_michael@hotmail.com"},{"name":"gsperbmachado","email":"guil@axlabs.com"},{"name":"thedanielmark","email":"danielmark.uc@gmail.com"}],"readme":"# NeoFS TypeScript SDK for Node.js\n\nA Node.js TypeScript SDK for [NeoFS](https://fs.neo.org/) - a decentralized, distributed object storage network.\n\n## Features\n\n- **Native Node.js**: Uses `@grpc/grpc-js` for optimal performance\n- **Streaming Support**: Efficient streaming for large file uploads/downloads\n- **Full NeoFS API**: Containers, objects, sessions, EACL, bearer tokens\n- **Type Safety**: Complete TypeScript definitions\n- **Async/Await**: Modern Promise-based API\n\n## Installation\n\n```bash\nnpm install @axlabs/neofs-sdk-ts-node\n```\n\n## Quick Start\n\n```typescript\nimport { NeoFSClient, ECDSASigner } from '@axlabs/neofs-sdk-ts-node';\n\n// Create a signer from your private key\nconst signer = ECDSASigner.fromHex(privateKeyHex);\n\n// Initialize the client\nconst client = new NeoFSClient({\n  endpoint: 'st1.t5.fs.neo.org:8082',\n  signer,\n});\n\n// Create a container\nconst containerId = await client.container().put({\n  container: {\n    placementPolicy: { replicas: [{ count: 2 }] },\n    basicAcl: 0x1fbf8cff, // PUBLIC_READ\n  },\n});\n\nconsole.log('Container created:', containerId);\n\n// Upload an object\nconst objectId = await client.object().put({\n  header: { containerId },\n  payload: Buffer.from('Hello, NeoFS!'),\n  attributes: [\n    { key: 'FileName', value: 'hello.txt' },\n    { key: 'ContentType', value: 'text/plain' },\n  ],\n});\n\nconsole.log('Object uploaded:', objectId);\n\n// Download the object\nconst result = await client.object().get({\n  address: { containerId, objectId },\n});\n\nconsole.log('Content:', Buffer.from(result.payload).toString());\n```\n\n## API Overview\n\n### Client Initialization\n\n```typescript\nimport { NeoFSClient, ECDSASigner, ECDSASignerRFC6979 } from '@axlabs/neofs-sdk-ts-node';\n\n// From hex private key\nconst signer = ECDSASigner.fromHex('your-private-key-hex');\n\n// Or generate a new key pair\nconst signer = ECDSASigner.generate();\n\n// Or use RFC6979 deterministic signatures\nconst signer = ECDSASignerRFC6979.fromHex('your-private-key-hex');\n\nconst client = new NeoFSClient({\n  endpoint: 'grpcs://st1.t5.fs.neo.org:8082',\n  signer,\n  // Optional: TLS configuration\n  // credentials: grpc.credentials.createSsl(),\n});\n```\n\n### Container Operations\n\n```typescript\n// Create a container\nconst containerId = await client.container().put({\n  container: {\n    placementPolicy: { replicas: [{ count: 3 }] },\n    basicAcl: 0x1fbf8cff,\n    attributes: [\n      { key: 'Name', value: 'my-container' },\n    ],\n  },\n});\n\n// Get container info\nconst container = await client.container().get({ containerId });\nconsole.log('Owner:', container?.ownerId);\nconsole.log('Policy:', container?.placementPolicy);\n\n// List containers\nconst containers = await client.container().list({});\n\n// Delete a container\nawait client.container().delete({ containerId });\n```\n\n### Object Operations\n\n```typescript\n// Upload an object\nconst objectId = await client.object().put({\n  header: { containerId },\n  payload: Buffer.from('Hello, World!'),\n  attributes: [\n    { key: 'FileName', value: 'hello.txt' },\n    { key: 'ContentType', value: 'text/plain' },\n  ],\n});\n\n// Get object metadata (HEAD)\nconst header = await client.object().head({\n  address: { containerId, objectId },\n});\nconsole.log('Size:', header?.payloadLength);\n\n// Download an object\nconst result = await client.object().get({\n  address: { containerId, objectId },\n});\nconsole.log('Payload:', result.payload);\n\n// Search objects\nconst objectIds = await client.object().search({\n  containerId,\n  filters: [\n    { key: 'FileName', value: 'hello', matchType: 3 }, // COMMON_PREFIX\n  ],\n});\n\n// Delete an object\nawait client.object().delete({\n  address: { containerId, objectId },\n});\n```\n\n#### Search vs SearchV2\n\n- **Prefer `searchV2()`** for new code (pagination via cursor/limit, optional attribute return).\n- **`search()` is deprecated** at the NeoFS protocol level (`ObjectService/Search`). It is kept for compatibility.\n\n## Integration tests (against NeoFS testnet)\n\nIntegration tests are **opt-in** and run against a real NeoFS endpoint. They are skipped unless you provide config via env vars.\n\n```bash\nexport NEOFS_ENDPOINT=\"grpcs://st1.t5.fs.neo.org:8082\"\nexport NEOFS_WIF=\"<your testnet account WIF>\"\n\n# optional (defaults to 180000)\nexport NEOFS_TIMEOUT_MS=180000\n\nnpm run test:integration\n```\n\nRequired env vars:\n- **`NEOFS_ENDPOINT`**: NeoFS gRPC endpoint (e.g. `grpcs://...` or `grpc://...`)\n- **`NEOFS_WIF`**: account WIF used to sign requests (do not commit this)\n\n### Large File Streaming\n\nFor large files, use the streaming client:\n\n```typescript\nimport { StreamingObjectClient } from '@axlabs/neofs-sdk-ts-node';\n\n// The streaming client handles chunked uploads automatically\nconst objectId = await client.object().put({\n  header: { containerId },\n  payload: largeBuffer, // Can be any size\n  attributes: [{ key: 'FileName', value: 'large-file.zip' }],\n});\n```\n\n### Network Information\n\n```typescript\n// Get current epoch\nconst { networkInfo } = await client.netmap().networkInfo();\nconsole.log('Epoch:', networkInfo?.currentEpoch);\n\n// Get local node info\nconst localInfo = await client.netmap().localNodeInfo();\nconsole.log('Version:', localInfo?.version);\n\n// Get network snapshot\nconst snapshot = await client.netmap().netmapSnapshot();\nconsole.log('Nodes:', snapshot?.body?.netmap?.nodes?.length);\n```\n\n### Session Management\n\n```typescript\n// Create a session\nconst session = await client.session().create({\n  expiration: BigInt(currentEpoch + 100),\n});\nconsole.log('Session ID:', session.id);\n```\n\n### EACL (Extended Access Control)\n\n```typescript\nimport { Table, Target, Record, Operation, publicReadEACL } from '@axlabs/neofs-sdk-ts-node';\n\n// Use a preset\nconst eacl = publicReadEACL(containerId);\n\n// Or build custom rules\nconst customEacl = new Table(containerId)\n  .allowRead([Target.others()])\n  .denyWrite([Target.others()])\n  .allow(Operation.PUT, [Target.userId(friendId)]);\n\n// Set EACL on container\nawait client.container().setEACL({\n  containerId,\n  eaclTable: eacl.toProto(),\n});\n\n// Get EACL\nconst currentEacl = await client.container().getEACL({ containerId });\n```\n\n### Bearer Tokens\n\n```typescript\nimport { BearerToken, publicReadEACL } from '@axlabs/neofs-sdk-ts-node';\n\n// Create a bearer token for delegated access\nconst token = new BearerToken()\n  .setEACL(publicReadEACL(containerId))\n  .forUser(friendUserId)\n  .setIssuer(myUserId)\n  .setLifetime({\n    iat: currentEpoch,\n    nbf: currentEpoch,\n    exp: currentEpoch + 100n,\n  })\n  .sign(signer);\n\n// Serialize to share\nconst tokenBytes = token.serialize();\n```\n\n### Waiter (Async Confirmation)\n\n```typescript\nimport { Waiter } from '@axlabs/neofs-sdk-ts-node';\n\nconst waiter = new Waiter(client);\n\n// Create container and wait for confirmation\nconst containerId = await waiter.containerPut({\n  container: { /* ... */ },\n});\n// Container is guaranteed to exist at this point\n\n// Upload object and wait for confirmation\nconst objectId = await waiter.objectPut({\n  header: { containerId },\n  payload: data,\n});\n// Object is guaranteed to be readable\n```\n\n## Configuration\n\n```typescript\ninterface ClientConfig {\n  /** gRPC endpoint (host:port) */\n  endpoint: string;\n  \n  /** Signer for authentication */\n  signer: Signer;\n  \n  /** Optional gRPC credentials (for TLS) */\n  credentials?: grpc.ChannelCredentials;\n  \n  /** Optional gRPC channel options */\n  options?: grpc.ChannelOptions;\n}\n```\n\n### TLS Configuration\n\n```typescript\nimport * as grpc from '@grpc/grpc-js';\nimport * as fs from 'fs';\n\nconst client = new NeoFSClient({\n  endpoint: 'grpc.example.com:8082',\n  signer,\n  credentials: grpc.credentials.createSsl(\n    fs.readFileSync('ca.pem'),\n    fs.readFileSync('client-key.pem'),\n    fs.readFileSync('client-cert.pem'),\n  ),\n});\n```\n\n## Error Handling\n\n```typescript\ntry {\n  const result = await client.object().get({\n    address: { containerId, objectId },\n  });\n} catch (error) {\n  if (error.code === 2049) {\n    console.log('Object not found');\n  } else if (error.code === 3072) {\n    console.log('Container not found');\n  } else {\n    throw error;\n  }\n}\n```\n\n## Example Application\n\nSee the [example](./example) directory for a complete Express.js application demonstrating:\n\n- Container management\n- File upload/download\n- Object search\n- Web interface\n\n```bash\ncd example\nnpm install\nnpm start\n# Open http://localhost:3000\n```\n\n## Development\n\nThe `neofs-api/` directory is a git submodule tracking **[nspcc-dev/neofs-api v2.22.0](https://github.com/nspcc-dev/neofs-api/releases/tag/v2.22.0)** (see the [release notes](https://github.com/nspcc-dev/neofs-api/releases/tag/v2.22.0)). After updating the submodule, regenerate the TypeScript stubs:\n\n```bash\n# Build\nnpm run build\n\n# Run tests\nnpm test\n\n# Generate protobuf types\nnpm run generate:all\n\n# Lint\nnpm run lint\n\n# Format\nnpm run format\n```\n\n## License\n\nApache 2.0 - see [LICENSE](../LICENSE) for details.\n","readmeFilename":"README.md"}