{"_id":"@dozyio/libp2p-blind-rendezvous","name":"@dozyio/libp2p-blind-rendezvous","dist-tags":{"latest":"1.0.1"},"versions":{"1.0.1":{"name":"@dozyio/libp2p-blind-rendezvous","version":"1.0.1","description":"Epoch-based blind rendezvous helper for js-libp2p","license":"Apache-2.0 OR MIT","homepage":"https://github.com/dozyio/js-libp2p-blind-rendezvous#readme","repository":{"type":"git","url":"git+https://github.com/dozyio/js-libp2p-blind-rendezvous.git"},"bugs":{"url":"https://github.com/dozyio/js-libp2p-blind-rendezvous/issues"},"publishConfig":{"access":"public","provenance":true},"keywords":["libp2p","rendezvous","dht","blind-rendezvous","privacy"],"type":"module","types":"./dist/src/index.d.ts","exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/src/index.js"}},"release":{"branches":["main"],"plugins":[["@semantic-release/commit-analyzer",{"preset":"conventionalcommits","releaseRules":[{"breaking":true,"release":"major"},{"revert":true,"release":"patch"},{"type":"feat","release":"minor"},{"type":"fix","release":"patch"},{"type":"docs","release":"patch"},{"type":"chore","release":"patch"},{"type":"test","release":"patch"},{"type":"deps","release":"patch"},{"scope":"no-release","release":false}]}],["@semantic-release/release-notes-generator",{"preset":"conventionalcommits","presetConfig":{"types":[{"type":"feat","section":"Features"},{"type":"fix","section":"Bug Fixes"},{"type":"chore","section":"Trivial Changes"},{"type":"docs","section":"Documentation"},{"type":"deps","section":"Dependencies"},{"type":"test","section":"Tests"}]}}],"@semantic-release/changelog","@semantic-release/npm","@semantic-release/github",["@semantic-release/git",{"assets":["CHANGELOG.md","package.json"]}]]},"scripts":{"clean":"aegir clean","lint":"aegir lint","dep-check":"aegir dep-check","doc-check":"aegir doc-check","build":"aegir build --no-bundle","prepack":"npm run build","docs":"aegir docs","release":"aegir release","test":"aegir test -t node","test:node":"aegir test -t node"},"dependencies":{"@libp2p/interface":"^3.1.0","main-event":"^1.0.1","multiformats":"^13.4.1"},"devDependencies":{"@libp2p/crypto":"^5.1.13","@libp2p/logger":"^6.2.2","@libp2p/peer-id":"^6.0.4","aegir":"^47.0.22","sinon-ts":"^2.0.0"},"sideEffects":false,"gitHead":"7d9baa0b24da0cc3171ce5316167eaa8bf005764","_id":"@dozyio/libp2p-blind-rendezvous@1.0.1","_nodeVersion":"24.14.1","_npmVersion":"11.12.1","dist":{"integrity":"sha512-wLUF61S+KMZMrlLufG8FDe0eCp1UR04Mn0IMTCuim+MblGlI2LZ0wldq9v4KvJDhWQ5lkLHL51qVS8IQcs3n4w==","shasum":"8200326c88e5c7d4f3634802905802e40ac35857","tarball":"https://registry.npmjs.org/@dozyio/libp2p-blind-rendezvous/-/libp2p-blind-rendezvous-1.0.1.tgz","fileCount":13,"unpackedSize":74253,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dozyio%2flibp2p-blind-rendezvous@1.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIDWpRmQYlMQZh8xS7401dOFjzp1aZikzhgZbgC0oLSVHAiEAnCtQGLR2xevC584IJ4SV4UjGaUng+5JdoRvHQ6S62tY="}]},"_npmUser":{"name":"dozyio","email":"npm@dozy.io"},"directories":{},"maintainers":[{"name":"dozyio","email":"npm@dozy.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/libp2p-blind-rendezvous_1.0.1_1776596382561_0.12207422416879443"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-19T10:59:42.484Z","1.0.1":"2026-04-19T10:59:42.696Z","modified":"2026-04-19T10:59:43.385Z"},"maintainers":[{"name":"dozyio","email":"npm@dozy.io"}],"description":"Epoch-based blind rendezvous helper for js-libp2p","homepage":"https://github.com/dozyio/js-libp2p-blind-rendezvous#readme","keywords":["libp2p","rendezvous","dht","blind-rendezvous","privacy"],"repository":{"type":"git","url":"git+https://github.com/dozyio/js-libp2p-blind-rendezvous.git"},"bugs":{"url":"https://github.com/dozyio/js-libp2p-blind-rendezvous/issues"},"license":"Apache-2.0 OR MIT","readme":"# @dozyio/libp2p-blind-rendezvous\n\nEpoch-based blind rendezvous for js-libp2p.\n\nThis package derives blinded rendezvous CIDs from:\n\n- shared `secret`\n- `namespace`\n- epoch index\n\nIt then publishes provider records for active epochs via content routing.\n\n## Install\n\n```console\nnpm i @dozyio/libp2p-blind-rendezvous\n```\n\n## Usage\n\n```ts\nimport { createLibp2p } from 'libp2p'\nimport { kadDHT } from '@libp2p/kad-dht'\nimport { blindRendezvous } from '@dozyio/libp2p-blind-rendezvous'\nimport type { BlindRendezvousPointInit } from '@dozyio/libp2p-blind-rendezvous'\n\nasync function loadPairedPointConfig (): Promise<BlindRendezvousPointInit> {\n  // Out of scope for this package (pairing/secret exchange)\n  return {\n    secret: crypto.getRandomValues(new Uint8Array(32)),\n    namespace: 'dozyio/prod/chat'\n  }\n}\n\nconst pairedPoint = await loadPairedPointConfig()\n\nconst node = await createLibp2p({\n  services: {\n    dht: kadDHT(),\n    blindRendezvous: blindRendezvous({\n      addressChangeDebounceMs: 30 * 1000\n    })\n  }\n})\n\nawait node.start()\n\nawait node.services.blindRendezvous.upsertPoint('paired-device', pairedPoint, {\n  publish: true\n})\n\nfor await (const candidate of node.services.blindRendezvous.findPointProviders('paired-device')) {\n  console.log('found blind rendezvous candidate', candidate)\n}\n```\n\n## Defaults\n\n- `epochLengthMs`: `15m`\n- `clockSkewMs`: `3m`\n- `derivationDomain`: `libp2p-blind-rendezvous/v1`\n- `publishIntervalMs`: equal to `epochLengthMs`\n- `pollIntervalMs`: `30s`\n- `publishJitterMs`: `30s..90s`\n- `logPrefix`: `libp2p:blind-rendezvous`\n- `startingEpochMs`: `0` (Unix epoch timestamp)\n\n## Notes\n\n- On start, the service publishes provider records for configured points.\n- A single service instance can manage multiple rendezvous points via `upsertPoint/removePoint`.\n- It republishes periodically and also debounced on `self:peer:update`.\n- Use `startingEpochMs` when you want epochs anchored to pairing time (or another custom timestamp).\n- Provider discovery results are only rendezvous candidates; authentication/authorization of discovered peers is required and intentionally out of scope for this package.\n","readmeFilename":"README.md","_rev":"1-587f8fa7c1fe8b4f1daab2ff20fed02e"}