@helia/ipns 1.0.1 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -77,19 +77,29 @@ export type RepublishProgressEvents = ProgressEvent<'ipns:republish:start', unkn
77
77
  }>;
78
78
  export interface PublishOptions extends AbortOptions, ProgressOptions<PublishProgressEvents | IPNSRoutingEvents> {
79
79
  /**
80
- * Time duration of the record in ms
80
+ * Time duration of the record in ms (default: 24hrs)
81
81
  */
82
82
  lifetime?: number;
83
+ /**
84
+ * Only publish to a local datastore (default: false)
85
+ */
86
+ offline?: boolean;
83
87
  }
84
88
  export interface ResolveOptions extends AbortOptions, ProgressOptions<ResolveProgressEvents | IPNSRoutingEvents> {
85
89
  /**
86
- * do not use cached entries
90
+ * Do not query the network for the IPNS record (default: false)
91
+ */
92
+ offline?: boolean;
93
+ }
94
+ export interface ResolveDNSOptions extends ResolveOptions {
95
+ /**
96
+ * Do not use cached DNS entries (default: false)
87
97
  */
88
98
  nocache?: boolean;
89
99
  }
90
100
  export interface RepublishOptions extends AbortOptions, ProgressOptions<RepublishProgressEvents | IPNSRoutingEvents> {
91
101
  /**
92
- * The republish interval in ms (default: 24hrs)
102
+ * The republish interval in ms (default: 23hrs)
93
103
  */
94
104
  interval?: number;
95
105
  }
@@ -108,7 +118,7 @@ export interface IPNS {
108
118
  /**
109
119
  * Resolve a CID from a dns-link style IPNS record
110
120
  */
111
- resolveDns: (domain: string, options?: ResolveOptions) => Promise<CID>;
121
+ resolveDns: (domain: string, options?: ResolveDNSOptions) => Promise<CID>;
112
122
  /**
113
123
  * Periodically republish all IPNS records found in the datastore
114
124
  */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8DG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,EAAY,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAE5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,MAAM,CAAA;AACrC,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAItC,OAAO,KAAK,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAIrE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAWpD,MAAM,MAAM,qBAAqB,GAC/B,aAAa,CAAC,oBAAoB,CAAC,GACnC,aAAa,CAAC,sBAAsB,EAAE,SAAS,CAAC,GAChD,aAAa,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAA;AAE5C,MAAM,MAAM,qBAAqB,GAC/B,aAAa,CAAC,oBAAoB,EAAE,OAAO,CAAC,GAC5C,aAAa,CAAC,sBAAsB,EAAE,SAAS,CAAC,GAChD,aAAa,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAA;AAE5C,MAAM,MAAM,uBAAuB,GACjC,aAAa,CAAC,sBAAsB,EAAE,OAAO,CAAC,GAC9C,aAAa,CAAC,wBAAwB,EAAE,SAAS,CAAC,GAClD,aAAa,CAAC,sBAAsB,EAAE;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,GAAG,EAAE,KAAK,CAAA;CAAE,CAAC,CAAA;AAE1E,MAAM,WAAW,cAAe,SAAQ,YAAY,EAAE,eAAe,CAAC,qBAAqB,GAAG,iBAAiB,CAAC;IAC9G;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,cAAe,SAAQ,YAAY,EAAE,eAAe,CAAC,qBAAqB,GAAG,iBAAiB,CAAC;IAC9G;;OAEG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,gBAAiB,SAAQ,YAAY,EAAE,eAAe,CAAC,uBAAuB,GAAG,iBAAiB,CAAC;IAClH;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,IAAI;IACnB;;;;OAIG;IACH,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,KAAK,OAAO,CAAC,SAAS,CAAC,CAAA;IAE3F;;;OAGG;IACH,OAAO,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;IAEhE;;OAEG;IACH,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,KAAK,OAAO,CAAC,GAAG,CAAC,CAAA;IAEtE;;OAEG;IACH,SAAS,EAAE,CAAC,OAAO,CAAC,EAAE,gBAAgB,KAAK,IAAI,CAAA;CAChD;AAED,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAErD,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,SAAS,CAAA;CACrB;AAwID,wBAAgB,IAAI,CAAE,UAAU,EAAE,cAAc,EAAE,OAAO,GAAE,WAAW,EAAO,GAAG,IAAI,CAEnF;AAED,OAAO,EAAE,aAAa,EAAE,CAAA;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
package/dist/src/index.js CHANGED
@@ -111,8 +111,10 @@ class DefaultIPNS {
111
111
  const record = await create(key, bytes, sequenceNumber, options.lifetime ?? DEFAULT_LIFETIME_MS);
112
112
  const marshaledRecord = marshal(record);
113
113
  await this.localStore.put(routingKey, marshaledRecord, options);
114
- // publish record to routing
115
- await Promise.all(this.routers.map(async (r) => { await r.put(routingKey, marshaledRecord, options); }));
114
+ if (options.offline !== true) {
115
+ // publish record to routing
116
+ await Promise.all(this.routers.map(async (r) => { await r.put(routingKey, marshaledRecord, options); }));
117
+ }
116
118
  return record;
117
119
  }
118
120
  catch (err) {
@@ -124,11 +126,11 @@ class DefaultIPNS {
124
126
  const routingKey = peerIdToRoutingKey(key);
125
127
  const record = await __classPrivateFieldGet(this, _DefaultIPNS_instances, "m", _DefaultIPNS_findIpnsRecord).call(this, routingKey, options);
126
128
  const str = uint8ArrayToString(record.value);
127
- return await __classPrivateFieldGet(this, _DefaultIPNS_instances, "m", _DefaultIPNS_resolve).call(this, str);
129
+ return await __classPrivateFieldGet(this, _DefaultIPNS_instances, "m", _DefaultIPNS_resolve).call(this, str, options);
128
130
  }
129
131
  async resolveDns(domain, options = {}) {
130
132
  const dnslink = await resolveDnslink(domain, options);
131
- return await __classPrivateFieldGet(this, _DefaultIPNS_instances, "m", _DefaultIPNS_resolve).call(this, dnslink);
133
+ return await __classPrivateFieldGet(this, _DefaultIPNS_instances, "m", _DefaultIPNS_resolve).call(this, dnslink, options);
132
134
  }
133
135
  republish(options = {}) {
134
136
  if (this.timeout != null) {
@@ -159,12 +161,12 @@ class DefaultIPNS {
159
161
  }, options.interval ?? DEFAULT_REPUBLISH_INTERVAL_MS);
160
162
  }
161
163
  }
162
- _DefaultIPNS_instances = new WeakSet(), _DefaultIPNS_resolve = async function _DefaultIPNS_resolve(ipfsPath) {
164
+ _DefaultIPNS_instances = new WeakSet(), _DefaultIPNS_resolve = async function _DefaultIPNS_resolve(ipfsPath, options = {}) {
163
165
  const parts = ipfsPath.split('/');
164
166
  if (parts.length === 3) {
165
167
  const scheme = parts[1];
166
168
  if (scheme === 'ipns') {
167
- return await this.resolve(peerIdFromString(parts[2]));
169
+ return await this.resolve(peerIdFromString(parts[2]), options);
168
170
  }
169
171
  else if (scheme === 'ipfs') {
170
172
  return CID.parse(parts[2]);
@@ -172,11 +174,16 @@ _DefaultIPNS_instances = new WeakSet(), _DefaultIPNS_resolve = async function _D
172
174
  }
173
175
  log.error('invalid ipfs path %s', ipfsPath);
174
176
  throw new Error('Invalid value');
175
- }, _DefaultIPNS_findIpnsRecord = async function _DefaultIPNS_findIpnsRecord(routingKey, options) {
176
- const routers = [
177
+ }, _DefaultIPNS_findIpnsRecord = async function _DefaultIPNS_findIpnsRecord(routingKey, options = {}) {
178
+ let routers = [
177
179
  this.localStore,
178
180
  ...this.routers
179
181
  ];
182
+ if (options.offline === true) {
183
+ routers = [
184
+ this.localStore
185
+ ];
186
+ }
180
187
  const unmarshaledRecord = await Promise.any(routers.map(async (router) => {
181
188
  const unmarshaledRecord = await router.get(routingKey, options);
182
189
  await ipnsValidator(routingKey, unmarshaledRecord);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8DG;;;;;;;AAGH,OAAO,EAAE,QAAQ,EAAU,MAAM,2BAA2B,CAAA;AAC5D,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,MAAM,CAAA;AAGrE,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAElD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AACtE,OAAO,EAAE,UAAU,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAE5E,OAAO,EAAE,UAAU,EAAc,MAAM,0BAA0B,CAAA;AAEjE,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,CAAA;AAEhC,MAAM,MAAM,GAAG,EAAE,GAAG,IAAI,CAAA;AACxB,MAAM,IAAI,GAAG,EAAE,GAAG,MAAM,CAAA;AAExB,MAAM,mBAAmB,GAAG,EAAE,GAAG,IAAI,CAAA;AACrC,MAAM,6BAA6B,GAAG,EAAE,GAAG,IAAI,CAAA;AAiF/C,MAAM,WAAW;IAKf,YAAa,UAA0B,EAAE,UAAyB,EAAE;;QAClE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,CAAA;IACpD,CAAC;IAED,KAAK,CAAC,OAAO,CAAE,GAAW,EAAE,KAAmB,EAAE,UAA0B,EAAE;QAC3E,IAAI;YACF,IAAI,cAAc,GAAG,EAAE,CAAA;YACvB,MAAM,UAAU,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAA;YAE1C,IAAI,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,EAAE;gBAClD,4EAA4E;gBAC5E,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;gBAC1D,MAAM,cAAc,GAAG,SAAS,CAAC,GAAG,CAAC,CAAA;gBACrC,cAAc,GAAG,cAAc,CAAC,QAAQ,GAAG,EAAE,CAAA;aAC9C;YAED,IAAI,GAAG,CAAA;YAEP,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE;gBACnB,GAAG,GAAG,SAAS,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAA;aAClC;iBAAM;gBACL,GAAG,GAAG,SAAS,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAA;aAClC;YAED,MAAM,KAAK,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAA;YAEvC,gBAAgB;YAChB,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,GAAG,EAAE,KAAK,EAAE,cAAc,EAAE,OAAO,CAAC,QAAQ,IAAI,mBAAmB,CAAC,CAAA;YAChG,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;YAEvC,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,eAAe,EAAE,OAAO,CAAC,CAAA;YAE/D,IAAI,OAAO,CAAC,OAAO,KAAK,IAAI,EAAE;gBAC5B,4BAA4B;gBAC5B,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAC,CAAC,EAAC,EAAE,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,UAAU,EAAE,eAAe,EAAE,OAAO,CAAC,CAAA,CAAC,CAAC,CAAC,CAAC,CAAA;aACtG;YAED,OAAO,MAAM,CAAA;SACd;QAAC,OAAO,GAAQ,EAAE;YACjB,OAAO,CAAC,UAAU,EAAE,CAAC,IAAI,mBAAmB,CAAQ,oBAAoB,EAAE,GAAG,CAAC,CAAC,CAAA;YAC/E,MAAM,GAAG,CAAA;SACV;IACH,CAAC;IAED,KAAK,CAAC,OAAO,CAAE,GAAW,EAAE,UAA0B,EAAE;QACtD,MAAM,UAAU,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAA;QAC1C,MAAM,MAAM,GAAG,MAAM,uBAAA,IAAI,2DAAgB,MAApB,IAAI,EAAiB,UAAU,EAAE,OAAO,CAAC,CAAA;QAC9D,MAAM,GAAG,GAAG,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAE5C,OAAO,MAAM,uBAAA,IAAI,oDAAS,MAAb,IAAI,EAAU,GAAG,EAAE,OAAO,CAAC,CAAA;IAC1C,CAAC;IAED,KAAK,CAAC,UAAU,CAAE,MAAc,EAAE,UAA6B,EAAE;QAC/D,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;QAErD,OAAO,MAAM,uBAAA,IAAI,oDAAS,MAAb,IAAI,EAAU,OAAO,EAAE,OAAO,CAAC,CAAA;IAC9C,CAAC;IAED,SAAS,CAAE,UAA4B,EAAE;QACvC,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,EAAE;YACxB,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAA;SAChD;QAED,OAAO,CAAC,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;YAC7C,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QAC5B,CAAC,CAAC,CAAA;QAEF,KAAK,UAAU,SAAS;YACtB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;YAE5B,OAAO,CAAC,UAAU,EAAE,CAAC,IAAI,mBAAmB,CAAC,sBAAsB,CAAC,CAAC,CAAA;YAErE,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;YAC7B,MAAM,SAAS,GAAG,UAAU,GAAG,SAAS,CAAA;YACxC,IAAI,YAAY,GAAG,6BAA6B,GAAG,SAAS,CAAA;YAE5D,IAAI,YAAY,GAAG,CAAC,EAAE;gBACpB,YAAY,GAAG,OAAO,CAAC,QAAQ,IAAI,6BAA6B,CAAA;aACjE;YAED,UAAU,CAAC,GAAG,EAAE;gBACd,SAAS,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;oBACtB,GAAG,CAAC,KAAK,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAA;gBACtC,CAAC,CAAC,CAAA;YACJ,CAAC,EAAE,YAAY,CAAC,CAAA;QAClB,CAAC;QAED,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;YAC7B,SAAS,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;gBACtB,GAAG,CAAC,KAAK,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAA;YACtC,CAAC,CAAC,CAAA;QACJ,CAAC,EAAE,OAAO,CAAC,QAAQ,IAAI,6BAA6B,CAAC,CAAA;IACvD,CAAC;CA0CF;+DAxCC,KAAK,+BAAW,QAAgB,EAAE,UAA0B,EAAE;IAC5D,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;IAEjC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;QACtB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;QAEvB,IAAI,MAAM,KAAK,MAAM,EAAE;YACrB,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA;SAC/D;aAAM,IAAI,MAAM,KAAK,MAAM,EAAE;YAC5B,OAAO,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;SAC3B;KACF;IAED,GAAG,CAAC,KAAK,CAAC,sBAAsB,EAAE,QAAQ,CAAC,CAAA;IAC3C,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAA;AAClC,CAAC,gCAED,KAAK,sCAAkB,UAAsB,EAAE,UAA0B,EAAE;IACzE,IAAI,OAAO,GAAG;QACZ,IAAI,CAAC,UAAU;QACf,GAAG,IAAI,CAAC,OAAO;KAChB,CAAA;IAED,IAAI,OAAO,CAAC,OAAO,KAAK,IAAI,EAAE;QAC5B,OAAO,GAAG;YACR,IAAI,CAAC,UAAU;SAChB,CAAA;KACF;IAED,MAAM,iBAAiB,GAAG,MAAM,OAAO,CAAC,GAAG,CACzC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;QAC3B,MAAM,iBAAiB,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;QAC/D,MAAM,aAAa,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAA;QAElD,OAAO,iBAAiB,CAAA;IAC1B,CAAC,CAAC,CACH,CAAA;IAED,OAAO,SAAS,CAAC,iBAAiB,CAAC,CAAA;AACrC,CAAC;AAGH,MAAM,UAAU,IAAI,CAAE,UAA0B,EAAE,UAAyB,EAAE;IAC3E,OAAO,IAAI,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;AAC7C,CAAC;AAED,OAAO,EAAE,aAAa,EAAE,CAAA;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA"}
@@ -1,15 +1,15 @@
1
1
  import type { IPNSRouting } from '../index.js';
2
- import type { DHT, QueryEvent } from '@libp2p/interface-dht';
3
2
  import type { GetOptions, PutOptions } from './index.js';
4
3
  import { ProgressEvent } from 'progress-events';
4
+ import type { ContentRouting } from '@libp2p/interface-content-routing';
5
5
  export interface DHTRoutingComponents {
6
6
  libp2p: {
7
- dht: DHT;
7
+ contentRouting: ContentRouting;
8
8
  };
9
9
  }
10
- export type DHTProgressEvents = ProgressEvent<'ipns:routing:dht:query', QueryEvent> | ProgressEvent<'ipns:routing:dht:error', Error>;
10
+ export type DHTProgressEvents = ProgressEvent<'ipns:routing:dht:error', Error>;
11
11
  export declare class DHTRouting implements IPNSRouting {
12
- private readonly dht;
12
+ private readonly contentRouting;
13
13
  constructor(components: DHTRoutingComponents);
14
14
  put(routingKey: Uint8Array, marshaledRecord: Uint8Array, options?: PutOptions): Promise<void>;
15
15
  get(routingKey: Uint8Array, options?: GetOptions): Promise<Uint8Array>;
@@ -1 +1 @@
1
- {"version":3,"file":"dht.d.ts","sourceRoot":"","sources":["../../../src/routing/dht.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAC9C,OAAO,KAAK,EAAE,GAAG,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACxD,OAAO,EAAuB,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAIpE,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE;QACN,GAAG,EAAE,GAAG,CAAA;KACT,CAAA;CACF;AAED,MAAM,MAAM,iBAAiB,GAC3B,aAAa,CAAC,wBAAwB,EAAE,UAAU,CAAC,GACnD,aAAa,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAA;AAEhD,qBAAa,UAAW,YAAW,WAAW;IAC5C,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAK;gBAEZ,UAAU,EAAE,oBAAoB;IAIvC,GAAG,CAAE,UAAU,EAAE,UAAU,EAAE,eAAe,EAAE,UAAU,EAAE,OAAO,GAAE,UAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBlG,GAAG,CAAE,UAAU,EAAE,UAAU,EAAE,OAAO,GAAE,UAAe,GAAG,OAAO,CAAC,UAAU,CAAC;CAiBlF;AAkBD,wBAAgB,GAAG,CAAE,UAAU,EAAE,oBAAoB,GAAG,WAAW,CAElE"}
1
+ {"version":3,"file":"dht.d.ts","sourceRoot":"","sources":["../../../src/routing/dht.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAC9C,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACxD,OAAO,EAAuB,aAAa,EAAE,MAAM,iBAAiB,CAAA;AACpE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAA;AAEvE,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE;QACN,cAAc,EAAE,cAAc,CAAA;KAC/B,CAAA;CACF;AAED,MAAM,MAAM,iBAAiB,GAC3B,aAAa,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAA;AAEhD,qBAAa,UAAW,YAAW,WAAW;IAC5C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgB;gBAElC,UAAU,EAAE,oBAAoB;IAIvC,GAAG,CAAE,UAAU,EAAE,UAAU,EAAE,eAAe,EAAE,UAAU,EAAE,OAAO,GAAE,UAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAQlG,GAAG,CAAE,UAAU,EAAE,UAAU,EAAE,OAAO,GAAE,UAAe,GAAG,OAAO,CAAC,UAAU,CAAC;CASlF;AAED,wBAAgB,GAAG,CAAE,UAAU,EAAE,oBAAoB,GAAG,WAAW,CAElE"}
@@ -1,37 +1,19 @@
1
- import { logger } from '@libp2p/logger';
2
1
  import { CustomProgressEvent } from 'progress-events';
3
- const log = logger('helia:ipns:routing:dht');
4
2
  export class DHTRouting {
5
3
  constructor(components) {
6
- this.dht = components.libp2p.dht;
4
+ this.contentRouting = components.libp2p.contentRouting;
7
5
  }
8
6
  async put(routingKey, marshaledRecord, options = {}) {
9
- let putValue = false;
10
7
  try {
11
- for await (const event of this.dht.put(routingKey, marshaledRecord, options)) {
12
- logEvent('DHT put event', event);
13
- options.onProgress?.(new CustomProgressEvent('ipns:routing:dht:query', event));
14
- if (event.name === 'PEER_RESPONSE' && event.messageName === 'PUT_VALUE') {
15
- putValue = true;
16
- }
17
- }
8
+ await this.contentRouting.put(routingKey, marshaledRecord, options);
18
9
  }
19
10
  catch (err) {
20
11
  options.onProgress?.(new CustomProgressEvent('ipns:routing:dht:error', err));
21
12
  }
22
- if (!putValue) {
23
- throw new Error('Could not put value to DHT');
24
- }
25
13
  }
26
14
  async get(routingKey, options = {}) {
27
15
  try {
28
- for await (const event of this.dht.get(routingKey, options)) {
29
- logEvent('DHT get event', event);
30
- options.onProgress?.(new CustomProgressEvent('ipns:routing:dht:query', event));
31
- if (event.name === 'VALUE') {
32
- return event.value;
33
- }
34
- }
16
+ return await this.contentRouting.get(routingKey, options);
35
17
  }
36
18
  catch (err) {
37
19
  options.onProgress?.(new CustomProgressEvent('ipns:routing:dht:error', err));
@@ -39,26 +21,6 @@ export class DHTRouting {
39
21
  throw new Error('Not found');
40
22
  }
41
23
  }
42
- function logEvent(prefix, event) {
43
- if (event.name === 'SENDING_QUERY') {
44
- log(prefix, event.name, event.messageName, '->', event.to.toString());
45
- }
46
- else if (event.name === 'PEER_RESPONSE') {
47
- log(prefix, event.name, event.messageName, '<-', event.from.toString());
48
- }
49
- else if (event.name === 'FINAL_PEER') {
50
- log(prefix, event.name, event.peer.id.toString());
51
- }
52
- else if (event.name === 'QUERY_ERROR') {
53
- log(prefix, event.name, event.error.message);
54
- }
55
- else if (event.name === 'PROVIDER') {
56
- log(prefix, event.name, event.providers.map(p => p.id.toString()).join(', '));
57
- }
58
- else {
59
- log(prefix, event.name);
60
- }
61
- }
62
24
  export function dht(components) {
63
25
  return new DHTRouting(components);
64
26
  }
@@ -1 +1 @@
1
- {"version":3,"file":"dht.js","sourceRoot":"","sources":["../../../src/routing/dht.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"dht.js","sourceRoot":"","sources":["../../../src/routing/dht.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAiB,MAAM,iBAAiB,CAAA;AAYpE,MAAM,OAAO,UAAU;IAGrB,YAAa,UAAgC;QAC3C,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,MAAM,CAAC,cAAc,CAAA;IACxD,CAAC;IAED,KAAK,CAAC,GAAG,CAAE,UAAsB,EAAE,eAA2B,EAAE,UAAsB,EAAE;QACtF,IAAI;YACF,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,UAAU,EAAE,eAAe,EAAE,OAAO,CAAC,CAAA;SACpE;QAAC,OAAO,GAAQ,EAAE;YACjB,OAAO,CAAC,UAAU,EAAE,CAAC,IAAI,mBAAmB,CAAQ,wBAAwB,EAAE,GAAG,CAAC,CAAC,CAAA;SACpF;IACH,CAAC;IAED,KAAK,CAAC,GAAG,CAAE,UAAsB,EAAE,UAAsB,EAAE;QACzD,IAAI;YACF,OAAO,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;SAC1D;QAAC,OAAO,GAAQ,EAAE;YACjB,OAAO,CAAC,UAAU,EAAE,CAAC,IAAI,mBAAmB,CAAQ,wBAAwB,EAAE,GAAG,CAAC,CAAC,CAAA;SACpF;QAED,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,CAAA;IAC9B,CAAC;CACF;AAED,MAAM,UAAU,GAAG,CAAE,UAAgC;IACnD,OAAO,IAAI,UAAU,CAAC,UAAU,CAAC,CAAA;AACnC,CAAC"}
@@ -3,6 +3,7 @@
3
3
  "IPNSComponents": "https://ipfs.github.io/helia-ipns/interfaces/index.IPNSComponents.html",
4
4
  "PublishOptions": "https://ipfs.github.io/helia-ipns/interfaces/index.PublishOptions.html",
5
5
  "RepublishOptions": "https://ipfs.github.io/helia-ipns/interfaces/index.RepublishOptions.html",
6
+ "ResolveDNSOptions": "https://ipfs.github.io/helia-ipns/interfaces/index.ResolveDNSOptions.html",
6
7
  "ResolveOptions": "https://ipfs.github.io/helia-ipns/interfaces/index.ResolveOptions.html",
7
8
  "PublishProgressEvents": "https://ipfs.github.io/helia-ipns/types/index.PublishProgressEvents.html",
8
9
  "RepublishProgressEvents": "https://ipfs.github.io/helia-ipns/types/index.RepublishProgressEvents.html",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@helia/ipns",
3
- "version": "1.0.1",
3
+ "version": "1.1.1",
4
4
  "description": "An implementation of IPNS for Helia",
5
5
  "license": "Apache-2.0 OR MIT",
6
6
  "homepage": "https://github.com/ipfs/helia-ipns/tree/master/packages/ipns#readme",
@@ -159,6 +159,7 @@
159
159
  "release": "aegir release"
160
160
  },
161
161
  "dependencies": {
162
+ "@libp2p/interface-content-routing": "^2.1.0",
162
163
  "@libp2p/interface-dht": "^2.0.1",
163
164
  "@libp2p/interface-peer-id": "^2.0.1",
164
165
  "@libp2p/interface-pubsub": "^3.0.6",
@@ -179,7 +180,8 @@
179
180
  "@libp2p/peer-id-factory": "^2.0.1",
180
181
  "aegir": "^38.1.0",
181
182
  "datastore-core": "^9.0.3",
182
- "sinon": "^15.0.1"
183
+ "sinon": "^15.0.1",
184
+ "sinon-ts": "^1.0.0"
183
185
  },
184
186
  "browser": {
185
187
  "./dist/src/utils/resolve-dns-link.js": "./dist/src/utils/resolve-dns-link.browser.js"
package/src/index.ts CHANGED
@@ -104,21 +104,33 @@ export type RepublishProgressEvents =
104
104
 
105
105
  export interface PublishOptions extends AbortOptions, ProgressOptions<PublishProgressEvents | IPNSRoutingEvents> {
106
106
  /**
107
- * Time duration of the record in ms
107
+ * Time duration of the record in ms (default: 24hrs)
108
108
  */
109
109
  lifetime?: number
110
+
111
+ /**
112
+ * Only publish to a local datastore (default: false)
113
+ */
114
+ offline?: boolean
110
115
  }
111
116
 
112
117
  export interface ResolveOptions extends AbortOptions, ProgressOptions<ResolveProgressEvents | IPNSRoutingEvents> {
113
118
  /**
114
- * do not use cached entries
119
+ * Do not query the network for the IPNS record (default: false)
120
+ */
121
+ offline?: boolean
122
+ }
123
+
124
+ export interface ResolveDNSOptions extends ResolveOptions {
125
+ /**
126
+ * Do not use cached DNS entries (default: false)
115
127
  */
116
128
  nocache?: boolean
117
129
  }
118
130
 
119
131
  export interface RepublishOptions extends AbortOptions, ProgressOptions<RepublishProgressEvents | IPNSRoutingEvents> {
120
132
  /**
121
- * The republish interval in ms (default: 24hrs)
133
+ * The republish interval in ms (default: 23hrs)
122
134
  */
123
135
  interval?: number
124
136
  }
@@ -140,7 +152,7 @@ export interface IPNS {
140
152
  /**
141
153
  * Resolve a CID from a dns-link style IPNS record
142
154
  */
143
- resolveDns: (domain: string, options?: ResolveOptions) => Promise<CID>
155
+ resolveDns: (domain: string, options?: ResolveDNSOptions) => Promise<CID>
144
156
 
145
157
  /**
146
158
  * Periodically republish all IPNS records found in the datastore
@@ -192,8 +204,10 @@ class DefaultIPNS implements IPNS {
192
204
 
193
205
  await this.localStore.put(routingKey, marshaledRecord, options)
194
206
 
195
- // publish record to routing
196
- await Promise.all(this.routers.map(async r => { await r.put(routingKey, marshaledRecord, options) }))
207
+ if (options.offline !== true) {
208
+ // publish record to routing
209
+ await Promise.all(this.routers.map(async r => { await r.put(routingKey, marshaledRecord, options) }))
210
+ }
197
211
 
198
212
  return record
199
213
  } catch (err: any) {
@@ -207,13 +221,13 @@ class DefaultIPNS implements IPNS {
207
221
  const record = await this.#findIpnsRecord(routingKey, options)
208
222
  const str = uint8ArrayToString(record.value)
209
223
 
210
- return await this.#resolve(str)
224
+ return await this.#resolve(str, options)
211
225
  }
212
226
 
213
- async resolveDns (domain: string, options: ResolveOptions = {}): Promise<CID> {
227
+ async resolveDns (domain: string, options: ResolveDNSOptions = {}): Promise<CID> {
214
228
  const dnslink = await resolveDnslink(domain, options)
215
229
 
216
- return await this.#resolve(dnslink)
230
+ return await this.#resolve(dnslink, options)
217
231
  }
218
232
 
219
233
  republish (options: RepublishOptions = {}): void {
@@ -252,14 +266,14 @@ class DefaultIPNS implements IPNS {
252
266
  }, options.interval ?? DEFAULT_REPUBLISH_INTERVAL_MS)
253
267
  }
254
268
 
255
- async #resolve (ipfsPath: string): Promise<CID> {
269
+ async #resolve (ipfsPath: string, options: ResolveOptions = {}): Promise<CID> {
256
270
  const parts = ipfsPath.split('/')
257
271
 
258
272
  if (parts.length === 3) {
259
273
  const scheme = parts[1]
260
274
 
261
275
  if (scheme === 'ipns') {
262
- return await this.resolve(peerIdFromString(parts[2]))
276
+ return await this.resolve(peerIdFromString(parts[2]), options)
263
277
  } else if (scheme === 'ipfs') {
264
278
  return CID.parse(parts[2])
265
279
  }
@@ -269,12 +283,18 @@ class DefaultIPNS implements IPNS {
269
283
  throw new Error('Invalid value')
270
284
  }
271
285
 
272
- async #findIpnsRecord (routingKey: Uint8Array, options: AbortOptions): Promise<IPNSEntry> {
273
- const routers = [
286
+ async #findIpnsRecord (routingKey: Uint8Array, options: ResolveOptions = {}): Promise<IPNSEntry> {
287
+ let routers = [
274
288
  this.localStore,
275
289
  ...this.routers
276
290
  ]
277
291
 
292
+ if (options.offline === true) {
293
+ routers = [
294
+ this.localStore
295
+ ]
296
+ }
297
+
278
298
  const unmarshaledRecord = await Promise.any(
279
299
  routers.map(async (router) => {
280
300
  const unmarshaledRecord = await router.get(routingKey, options)
@@ -1,61 +1,35 @@
1
- import { logger } from '@libp2p/logger'
2
1
  import type { IPNSRouting } from '../index.js'
3
- import type { DHT, QueryEvent } from '@libp2p/interface-dht'
4
2
  import type { GetOptions, PutOptions } from './index.js'
5
3
  import { CustomProgressEvent, ProgressEvent } from 'progress-events'
6
-
7
- const log = logger('helia:ipns:routing:dht')
4
+ import type { ContentRouting } from '@libp2p/interface-content-routing'
8
5
 
9
6
  export interface DHTRoutingComponents {
10
7
  libp2p: {
11
- dht: DHT
8
+ contentRouting: ContentRouting
12
9
  }
13
10
  }
14
11
 
15
12
  export type DHTProgressEvents =
16
- ProgressEvent<'ipns:routing:dht:query', QueryEvent> |
17
13
  ProgressEvent<'ipns:routing:dht:error', Error>
18
14
 
19
15
  export class DHTRouting implements IPNSRouting {
20
- private readonly dht: DHT
16
+ private readonly contentRouting: ContentRouting
21
17
 
22
18
  constructor (components: DHTRoutingComponents) {
23
- this.dht = components.libp2p.dht
19
+ this.contentRouting = components.libp2p.contentRouting
24
20
  }
25
21
 
26
22
  async put (routingKey: Uint8Array, marshaledRecord: Uint8Array, options: PutOptions = {}): Promise<void> {
27
- let putValue = false
28
-
29
23
  try {
30
- for await (const event of this.dht.put(routingKey, marshaledRecord, options)) {
31
- logEvent('DHT put event', event)
32
-
33
- options.onProgress?.(new CustomProgressEvent<QueryEvent>('ipns:routing:dht:query', event))
34
-
35
- if (event.name === 'PEER_RESPONSE' && event.messageName === 'PUT_VALUE') {
36
- putValue = true
37
- }
38
- }
24
+ await this.contentRouting.put(routingKey, marshaledRecord, options)
39
25
  } catch (err: any) {
40
26
  options.onProgress?.(new CustomProgressEvent<Error>('ipns:routing:dht:error', err))
41
27
  }
42
-
43
- if (!putValue) {
44
- throw new Error('Could not put value to DHT')
45
- }
46
28
  }
47
29
 
48
30
  async get (routingKey: Uint8Array, options: GetOptions = {}): Promise<Uint8Array> {
49
31
  try {
50
- for await (const event of this.dht.get(routingKey, options)) {
51
- logEvent('DHT get event', event)
52
-
53
- options.onProgress?.(new CustomProgressEvent<QueryEvent>('ipns:routing:dht:query', event))
54
-
55
- if (event.name === 'VALUE') {
56
- return event.value
57
- }
58
- }
32
+ return await this.contentRouting.get(routingKey, options)
59
33
  } catch (err: any) {
60
34
  options.onProgress?.(new CustomProgressEvent<Error>('ipns:routing:dht:error', err))
61
35
  }
@@ -64,22 +38,6 @@ export class DHTRouting implements IPNSRouting {
64
38
  }
65
39
  }
66
40
 
67
- function logEvent (prefix: string, event: QueryEvent): void {
68
- if (event.name === 'SENDING_QUERY') {
69
- log(prefix, event.name, event.messageName, '->', event.to.toString())
70
- } else if (event.name === 'PEER_RESPONSE') {
71
- log(prefix, event.name, event.messageName, '<-', event.from.toString())
72
- } else if (event.name === 'FINAL_PEER') {
73
- log(prefix, event.name, event.peer.id.toString())
74
- } else if (event.name === 'QUERY_ERROR') {
75
- log(prefix, event.name, event.error.message)
76
- } else if (event.name === 'PROVIDER') {
77
- log(prefix, event.name, event.providers.map(p => p.id.toString()).join(', '))
78
- } else {
79
- log(prefix, event.name)
80
- }
81
- }
82
-
83
41
  export function dht (components: DHTRoutingComponents): IPNSRouting {
84
42
  return new DHTRouting(components)
85
43
  }