@helia/ipns 8.2.4 → 9.0.0-9c67dbd4

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.
Files changed (60) hide show
  1. package/README.md +31 -135
  2. package/dist/index.min.js +10 -11
  3. package/dist/index.min.js.map +4 -4
  4. package/dist/src/constants.d.ts +17 -0
  5. package/dist/src/constants.d.ts.map +1 -0
  6. package/dist/src/constants.js +19 -0
  7. package/dist/src/constants.js.map +1 -0
  8. package/dist/src/errors.d.ts +0 -4
  9. package/dist/src/errors.d.ts.map +1 -1
  10. package/dist/src/errors.js +0 -7
  11. package/dist/src/errors.js.map +1 -1
  12. package/dist/src/index.d.ts +109 -201
  13. package/dist/src/index.d.ts.map +1 -1
  14. package/dist/src/index.js +34 -417
  15. package/dist/src/index.js.map +1 -1
  16. package/dist/src/ipns.d.ts +22 -0
  17. package/dist/src/ipns.d.ts.map +1 -0
  18. package/dist/src/ipns.js +339 -0
  19. package/dist/src/ipns.js.map +1 -0
  20. package/dist/src/local-store.d.ts +42 -0
  21. package/dist/src/local-store.d.ts.map +1 -0
  22. package/dist/src/local-store.js +119 -0
  23. package/dist/src/local-store.js.map +1 -0
  24. package/dist/src/pb/metadata.d.ts +12 -0
  25. package/dist/src/pb/metadata.d.ts.map +1 -0
  26. package/dist/src/pb/metadata.js +57 -0
  27. package/dist/src/pb/metadata.js.map +1 -0
  28. package/dist/src/routing/index.d.ts +4 -2
  29. package/dist/src/routing/index.d.ts.map +1 -1
  30. package/dist/src/routing/index.js.map +1 -1
  31. package/dist/src/routing/local-store.d.ts +4 -19
  32. package/dist/src/routing/local-store.d.ts.map +1 -1
  33. package/dist/src/routing/local-store.js +7 -62
  34. package/dist/src/routing/local-store.js.map +1 -1
  35. package/dist/src/routing/pubsub.d.ts +21 -1
  36. package/dist/src/routing/pubsub.d.ts.map +1 -1
  37. package/dist/src/routing/pubsub.js +2 -2
  38. package/dist/src/routing/pubsub.js.map +1 -1
  39. package/dist/src/utils.d.ts +24 -0
  40. package/dist/src/utils.d.ts.map +1 -1
  41. package/dist/src/utils.js +56 -0
  42. package/dist/src/utils.js.map +1 -1
  43. package/package.json +21 -23
  44. package/src/constants.ts +24 -0
  45. package/src/errors.ts +0 -9
  46. package/src/index.ts +116 -545
  47. package/src/ipns.ts +400 -0
  48. package/src/local-store.ts +162 -0
  49. package/src/pb/metadata.proto +9 -0
  50. package/src/pb/metadata.ts +74 -0
  51. package/src/routing/index.ts +4 -3
  52. package/src/routing/local-store.ts +9 -87
  53. package/src/routing/pubsub.ts +28 -4
  54. package/src/utils.ts +70 -0
  55. package/dist/src/dnslink.d.ts +0 -9
  56. package/dist/src/dnslink.d.ts.map +0 -1
  57. package/dist/src/dnslink.js +0 -138
  58. package/dist/src/dnslink.js.map +0 -1
  59. package/dist/typedoc-urls.json +0 -48
  60. package/src/dnslink.ts +0 -163
@@ -1,22 +1,7 @@
1
- import type { GetOptions, PutOptions } from '../routing/index.js';
2
- import type { AbortOptions } from '@libp2p/interface';
3
- import type { Datastore } from 'interface-datastore';
4
- import type { ProgressEvent } from 'progress-events';
5
- export type DatastoreProgressEvents = ProgressEvent<'ipns:routing:datastore:put'> | ProgressEvent<'ipns:routing:datastore:get'> | ProgressEvent<'ipns:routing:datastore:error', Error>;
6
- export interface GetResult {
7
- record: Uint8Array;
8
- created: Date;
9
- }
10
- export interface LocalStore {
11
- put(routingKey: Uint8Array, marshaledRecord: Uint8Array, options?: PutOptions): Promise<void>;
12
- get(routingKey: Uint8Array, options?: GetOptions): Promise<GetResult>;
13
- has(routingKey: Uint8Array, options?: AbortOptions): Promise<boolean>;
14
- delete(routingKey: Uint8Array, options?: AbortOptions): Promise<void>;
15
- }
1
+ import type { LocalStore } from '../local-store.ts';
2
+ import type { IPNSRouting } from './index.ts';
16
3
  /**
17
- * Returns an IPNSRouting implementation that reads/writes IPNS records to the
18
- * datastore as DHT records. This lets us publish IPNS records offline then
19
- * serve them to the network later in response to DHT queries.
4
+ * Returns an IPNSRouting implementation that reads/writes to the local store
20
5
  */
21
- export declare function localStore(datastore: Datastore): LocalStore;
6
+ export declare function localStoreRouting(localStore: LocalStore): IPNSRouting;
22
7
  //# sourceMappingURL=local-store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"local-store.d.ts","sourceRoot":"","sources":["../../../src/routing/local-store.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AACjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAMpD,MAAM,MAAM,uBAAuB,GACjC,aAAa,CAAC,4BAA4B,CAAC,GAC3C,aAAa,CAAC,4BAA4B,CAAC,GAC3C,aAAa,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAA;AAEtD,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,UAAU,CAAA;IAClB,OAAO,EAAE,IAAI,CAAA;CACd;AAED,MAAM,WAAW,UAAU;IACzB,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,eAAe,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7F,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,CAAA;IACrE,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IACrE,MAAM,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACtE;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAE,SAAS,EAAE,SAAS,GAAG,UAAU,CA2D5D"}
1
+ {"version":3,"file":"local-store.d.ts","sourceRoot":"","sources":["../../../src/routing/local-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,KAAK,EAAE,WAAW,EAA0B,MAAM,YAAY,CAAA;AAErE;;GAEG;AACH,wBAAgB,iBAAiB,CAAE,UAAU,EAAE,UAAU,GAAG,WAAW,CAWtE"}
@@ -1,69 +1,14 @@
1
- import { Record } from '@libp2p/kad-dht';
2
- import { Key } from 'interface-datastore';
3
- import { CustomProgressEvent } from 'progress-events';
4
- import { equals as uint8ArrayEquals } from 'uint8arrays/equals';
5
- import { toString as uint8ArrayToString } from 'uint8arrays/to-string';
6
- function dhtRoutingKey(key) {
7
- return new Key('/dht/record/' + uint8ArrayToString(key, 'base32'), false);
8
- }
9
1
  /**
10
- * Returns an IPNSRouting implementation that reads/writes IPNS records to the
11
- * datastore as DHT records. This lets us publish IPNS records offline then
12
- * serve them to the network later in response to DHT queries.
2
+ * Returns an IPNSRouting implementation that reads/writes to the local store
13
3
  */
14
- export function localStore(datastore) {
4
+ export function localStoreRouting(localStore) {
15
5
  return {
16
- async put(routingKey, marshalledRecord, options = {}) {
17
- try {
18
- const key = dhtRoutingKey(routingKey);
19
- // don't overwrite existing, identical records as this will affect the
20
- // TTL
21
- try {
22
- const existingBuf = await datastore.get(key);
23
- const existingRecord = Record.deserialize(existingBuf);
24
- if (uint8ArrayEquals(existingRecord.value, marshalledRecord)) {
25
- return;
26
- }
27
- }
28
- catch (err) {
29
- if (err.name !== 'NotFoundError') {
30
- throw err;
31
- }
32
- }
33
- // Marshal to libp2p record as the DHT does
34
- const record = new Record(routingKey, marshalledRecord, new Date());
35
- options.onProgress?.(new CustomProgressEvent('ipns:routing:datastore:put'));
36
- await datastore.put(key, record.serialize(), options);
37
- }
38
- catch (err) {
39
- options.onProgress?.(new CustomProgressEvent('ipns:routing:datastore:error', err));
40
- throw err;
41
- }
42
- },
43
- async get(routingKey, options = {}) {
44
- try {
45
- const key = dhtRoutingKey(routingKey);
46
- options.onProgress?.(new CustomProgressEvent('ipns:routing:datastore:get'));
47
- const buf = await datastore.get(key, options);
48
- // Unmarshal libp2p record as the DHT does
49
- const record = Record.deserialize(buf);
50
- return {
51
- record: record.value,
52
- created: record.timeReceived
53
- };
54
- }
55
- catch (err) {
56
- options.onProgress?.(new CustomProgressEvent('ipns:routing:datastore:error', err));
57
- throw err;
58
- }
59
- },
60
- async has(routingKey, options = {}) {
61
- const key = dhtRoutingKey(routingKey);
62
- return datastore.has(key, options);
6
+ async put(routingKey, marshaledRecord, options) {
7
+ await localStore.put(routingKey, marshaledRecord, options);
63
8
  },
64
- async delete(routingKey, options) {
65
- const key = dhtRoutingKey(routingKey);
66
- return datastore.delete(key, options);
9
+ async get(routingKey, options) {
10
+ const { record } = await localStore.get(routingKey, options);
11
+ return record;
67
12
  }
68
13
  };
69
14
  }
@@ -1 +1 @@
1
- {"version":3,"file":"local-store.js","sourceRoot":"","sources":["../../../src/routing/local-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AACxC,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAA;AACzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,EAAE,MAAM,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAC/D,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAMtE,SAAS,aAAa,CAAE,GAAe;IACrC,OAAO,IAAI,GAAG,CAAC,cAAc,GAAG,kBAAkB,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAA;AAC3E,CAAC;AAmBD;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAE,SAAoB;IAC9C,OAAO;QACL,KAAK,CAAC,GAAG,CAAE,UAAsB,EAAE,gBAA4B,EAAE,UAAsB,EAAE;YACvF,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,aAAa,CAAC,UAAU,CAAC,CAAA;gBAErC,sEAAsE;gBACtE,MAAM;gBACN,IAAI,CAAC;oBACH,MAAM,WAAW,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;oBAC5C,MAAM,cAAc,GAAG,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,CAAA;oBAEtD,IAAI,gBAAgB,CAAC,cAAc,CAAC,KAAK,EAAE,gBAAgB,CAAC,EAAE,CAAC;wBAC7D,OAAM;oBACR,CAAC;gBACH,CAAC;gBAAC,OAAO,GAAQ,EAAE,CAAC;oBAClB,IAAI,GAAG,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;wBACjC,MAAM,GAAG,CAAA;oBACX,CAAC;gBACH,CAAC;gBAED,2CAA2C;gBAC3C,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,UAAU,EAAE,gBAAgB,EAAE,IAAI,IAAI,EAAE,CAAC,CAAA;gBAEnE,OAAO,CAAC,UAAU,EAAE,CAAC,IAAI,mBAAmB,CAAC,4BAA4B,CAAC,CAAC,CAAA;gBAC3E,MAAM,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,SAAS,EAAE,EAAE,OAAO,CAAC,CAAA;YACvD,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,OAAO,CAAC,UAAU,EAAE,CAAC,IAAI,mBAAmB,CAAQ,8BAA8B,EAAE,GAAG,CAAC,CAAC,CAAA;gBACzF,MAAM,GAAG,CAAA;YACX,CAAC;QACH,CAAC;QACD,KAAK,CAAC,GAAG,CAAE,UAAsB,EAAE,UAAsB,EAAE;YACzD,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,aAAa,CAAC,UAAU,CAAC,CAAA;gBAErC,OAAO,CAAC,UAAU,EAAE,CAAC,IAAI,mBAAmB,CAAC,4BAA4B,CAAC,CAAC,CAAA;gBAC3E,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;gBAE7C,0CAA0C;gBAC1C,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;gBAEtC,OAAO;oBACL,MAAM,EAAE,MAAM,CAAC,KAAK;oBACpB,OAAO,EAAE,MAAM,CAAC,YAAY;iBAC7B,CAAA;YACH,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,OAAO,CAAC,UAAU,EAAE,CAAC,IAAI,mBAAmB,CAAQ,8BAA8B,EAAE,GAAG,CAAC,CAAC,CAAA;gBACzF,MAAM,GAAG,CAAA;YACX,CAAC;QACH,CAAC;QACD,KAAK,CAAC,GAAG,CAAE,UAAsB,EAAE,UAAwB,EAAE;YAC3D,MAAM,GAAG,GAAG,aAAa,CAAC,UAAU,CAAC,CAAA;YACrC,OAAO,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;QACpC,CAAC;QACD,KAAK,CAAC,MAAM,CAAE,UAAU,EAAE,OAAO;YAC/B,MAAM,GAAG,GAAG,aAAa,CAAC,UAAU,CAAC,CAAA;YACrC,OAAO,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;QACvC,CAAC;KACF,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"local-store.js","sourceRoot":"","sources":["../../../src/routing/local-store.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAE,UAAsB;IACvD,OAAO;QACL,KAAK,CAAC,GAAG,CAAE,UAAsB,EAAE,eAA2B,EAAE,OAAoB;YAClF,MAAM,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,eAAe,EAAE,OAAO,CAAC,CAAA;QAC5D,CAAC;QACD,KAAK,CAAC,GAAG,CAAE,UAAsB,EAAE,OAAoB;YACrD,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;YAE5D,OAAO,MAAM,CAAA;QACf,CAAC;KACF,CAAA;AACH,CAAC"}
@@ -1,9 +1,29 @@
1
1
  import type { IPNSRouting } from './index.js';
2
- import type { PeerId, PublishResult, PubSub } from '@libp2p/interface';
2
+ import type { PeerId, TypedEventTarget, ComponentLogger } from '@libp2p/interface';
3
3
  import type { Datastore } from 'interface-datastore';
4
4
  import type { ProgressEvent } from 'progress-events';
5
+ export interface Message {
6
+ type: 'signed' | 'unsigned';
7
+ from: PeerId;
8
+ topic: string;
9
+ data: Uint8Array;
10
+ }
11
+ export interface PubSubEvents {
12
+ message: CustomEvent<Message>;
13
+ }
14
+ export interface PublishResult {
15
+ recipients: PeerId[];
16
+ }
17
+ export interface PubSub extends TypedEventTarget<PubSubEvents> {
18
+ subscribe(topic: string): void;
19
+ unsubscribe(topic: string): void;
20
+ publish(topic: string, message: Uint8Array): Promise<PublishResult>;
21
+ getTopics(): string[];
22
+ getSubscribers(topic: string): PeerId[];
23
+ }
5
24
  export interface PubsubRoutingComponents {
6
25
  datastore: Datastore;
26
+ logger: ComponentLogger;
7
27
  libp2p: {
8
28
  peerId: PeerId;
9
29
  services: {
@@ -1 +1 @@
1
- {"version":3,"file":"pubsub.d.ts","sourceRoot":"","sources":["../../../src/routing/pubsub.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAc,WAAW,EAAc,MAAM,YAAY,CAAA;AAErE,OAAO,KAAK,EAAE,MAAM,EAAW,aAAa,EAAE,MAAM,EAAa,MAAM,mBAAmB,CAAA;AAC1F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAEpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAIpD,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,SAAS,CAAA;IACpB,MAAM,EAAE;QACN,MAAM,EAAE,MAAM,CAAA;QACd,QAAQ,EAAE;YACR,MAAM,EAAE,MAAM,CAAA;SACf,CAAA;KACF,CAAA;CACF;AAED,MAAM,MAAM,oBAAoB,GAC9B,aAAa,CAAC,qBAAqB,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,aAAa,CAAA;CAAE,CAAC,GAC9E,aAAa,CAAC,uBAAuB,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,GACzD,aAAa,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAA;AA+J3C;;;;;;;GAOG;AACH,wBAAgB,MAAM,CAAE,UAAU,EAAE,uBAAuB,GAAG,WAAW,CAExE"}
1
+ {"version":3,"file":"pubsub.d.ts","sourceRoot":"","sources":["../../../src/routing/pubsub.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAc,WAAW,EAAc,MAAM,YAAY,CAAA;AAErE,OAAO,KAAK,EAAE,MAAM,EAAa,gBAAgB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAC7F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAEpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAIpD,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,QAAQ,GAAG,UAAU,CAAA;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,UAAU,CAAA;CACjB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,WAAW,CAAC,OAAO,CAAC,CAAA;CAC9B;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,MAAM,EAAE,CAAA;CACrB;AAED,MAAM,WAAW,MAAO,SAAQ,gBAAgB,CAAC,YAAY,CAAC;IAC5D,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IAChC,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,CAAA;IACnE,SAAS,IAAI,MAAM,EAAE,CAAA;IACrB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;CACxC;AAED,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,SAAS,CAAA;IACpB,MAAM,EAAE,eAAe,CAAA;IACvB,MAAM,EAAE;QACN,MAAM,EAAE,MAAM,CAAA;QACd,QAAQ,EAAE;YACR,MAAM,EAAE,MAAM,CAAA;SACf,CAAA;KACF,CAAA;CACF;AAED,MAAM,MAAM,oBAAoB,GAC9B,aAAa,CAAC,qBAAqB,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,aAAa,CAAA;CAAE,CAAC,GAC9E,aAAa,CAAC,uBAAuB,EAAE;IAAE,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,GACzD,aAAa,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAA;AA+J3C;;;;;;;GAOG;AACH,wBAAgB,MAAM,CAAE,UAAU,EAAE,uBAAuB,GAAG,WAAW,CAExE"}
@@ -8,7 +8,7 @@ import { equals as uint8ArrayEquals } from 'uint8arrays/equals';
8
8
  import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string';
9
9
  import { toString as uint8ArrayToString } from 'uint8arrays/to-string';
10
10
  import { InvalidTopicError } from '../errors.js';
11
- import { localStore } from './local-store.js';
11
+ import { localStore } from '../local-store.js';
12
12
  const log = logger('helia:ipns:routing:pubsub');
13
13
  class PubSubRouting {
14
14
  subscriptions;
@@ -17,7 +17,7 @@ class PubSubRouting {
17
17
  pubsub;
18
18
  constructor(components) {
19
19
  this.subscriptions = [];
20
- this.localStore = localStore(components.datastore);
20
+ this.localStore = localStore(components.datastore, components.logger.forComponent('helia:ipns:local-store'));
21
21
  this.peerId = components.libp2p.peerId;
22
22
  this.pubsub = components.libp2p.services.pubsub;
23
23
  this.pubsub.addEventListener('message', (evt) => {
@@ -1 +1 @@
1
- {"version":3,"file":"pubsub.js","sourceRoot":"","sources":["../../../src/routing/pubsub.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pubsub.js","sourceRoot":"","sources":["../../../src/routing/pubsub.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,30 @@
1
+ import { Key } from 'interface-datastore';
2
+ import type { IPNSRecord } from 'ipns';
3
+ import type { CID } from 'multiformats/cid';
1
4
  import type { MultihashDigest } from 'multiformats/hashes/interface';
5
+ export declare const LIBP2P_KEY_CODEC = 114;
2
6
  export declare const IDENTITY_CODEC = 0;
3
7
  export declare const SHA2_256_CODEC = 18;
4
8
  export declare const IPNS_STRING_PREFIX = "/ipns/";
5
9
  export declare function isCodec<T extends number>(digest: MultihashDigest, codec: T): digest is MultihashDigest<T>;
10
+ export declare const DHT_RECORD_PREFIX = "/dht/record/";
11
+ export declare const IPNS_METADATA_PREFIX = "/ipns/metadata/";
12
+ export declare function dhtRoutingKey(key: Uint8Array): Key;
13
+ /**
14
+ * Calculate the datastore key for IPNS record metadata
15
+ *
16
+ * @param key - The DHT routing key for the IPNS record as defined in
17
+ * https://specs.ipfs.tech/ipns/ipns-record/#routing-record
18
+ *
19
+ * @example
20
+ *
21
+ * ```ts
22
+ * const key = multihashToIPNSRoutingKey(privKey.publicKey.toMultihash())
23
+ * const metadataKey = ipnsMetadataKey(key)
24
+ * ```
25
+ * @returns The local storage key for IPNS record metadata
26
+ */
27
+ export declare function ipnsMetadataKey(key: Uint8Array): Key;
28
+ export declare function shouldRepublish(ipnsRecord: IPNSRecord, created: Date): boolean;
29
+ export declare function isLibp2pCID(obj?: any): obj is CID<unknown, 0x72, 0x00 | 0x12, 1>;
6
30
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAEpE,eAAO,MAAM,cAAc,IAAM,CAAA;AACjC,eAAO,MAAM,cAAc,KAAO,CAAA;AAElC,eAAO,MAAM,kBAAkB,WAAW,CAAA;AAE1C,wBAAgB,OAAO,CAAE,CAAC,SAAS,MAAM,EAAG,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC,GAAG,MAAM,IAAI,eAAe,CAAC,CAAC,CAAC,CAE3G"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAA;AAGzC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,MAAM,CAAA;AACtC,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAEpE,eAAO,MAAM,gBAAgB,MAAO,CAAA;AACpC,eAAO,MAAM,cAAc,IAAM,CAAA;AACjC,eAAO,MAAM,cAAc,KAAO,CAAA;AAElC,eAAO,MAAM,kBAAkB,WAAW,CAAA;AAE1C,wBAAgB,OAAO,CAAE,CAAC,SAAS,MAAM,EAAG,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC,GAAG,MAAM,IAAI,eAAe,CAAC,CAAC,CAAC,CAE3G;AAED,eAAO,MAAM,iBAAiB,iBAAiB,CAAA;AAC/C,eAAO,MAAM,oBAAoB,oBAAoB,CAAA;AAErD,wBAAgB,aAAa,CAAE,GAAG,EAAE,UAAU,GAAG,GAAG,CAEnD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAAE,GAAG,EAAE,UAAU,GAAG,GAAG,CAErD;AAED,wBAAgB,eAAe,CAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,GAAG,OAAO,CAgB/E;AAMD,wBAAgB,WAAW,CAAE,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,CAAC,CAAC,CAcjF"}
package/dist/src/utils.js CHANGED
@@ -1,7 +1,63 @@
1
+ import { InvalidParametersError } from '@libp2p/interface';
2
+ import { Key } from 'interface-datastore';
3
+ import { toString as uint8ArrayToString } from 'uint8arrays/to-string';
4
+ import { DHT_EXPIRY_MS, REPUBLISH_THRESHOLD } from "./constants.js";
5
+ export const LIBP2P_KEY_CODEC = 0x72;
1
6
  export const IDENTITY_CODEC = 0x0;
2
7
  export const SHA2_256_CODEC = 0x12;
3
8
  export const IPNS_STRING_PREFIX = '/ipns/';
4
9
  export function isCodec(digest, codec) {
5
10
  return digest.code === codec;
6
11
  }
12
+ export const DHT_RECORD_PREFIX = '/dht/record/';
13
+ export const IPNS_METADATA_PREFIX = '/ipns/metadata/';
14
+ export function dhtRoutingKey(key) {
15
+ return new Key(DHT_RECORD_PREFIX + uint8ArrayToString(key, 'base32'), false);
16
+ }
17
+ /**
18
+ * Calculate the datastore key for IPNS record metadata
19
+ *
20
+ * @param key - The DHT routing key for the IPNS record as defined in
21
+ * https://specs.ipfs.tech/ipns/ipns-record/#routing-record
22
+ *
23
+ * @example
24
+ *
25
+ * ```ts
26
+ * const key = multihashToIPNSRoutingKey(privKey.publicKey.toMultihash())
27
+ * const metadataKey = ipnsMetadataKey(key)
28
+ * ```
29
+ * @returns The local storage key for IPNS record metadata
30
+ */
31
+ export function ipnsMetadataKey(key) {
32
+ return new Key(IPNS_METADATA_PREFIX + uint8ArrayToString(key, 'base32'), false);
33
+ }
34
+ export function shouldRepublish(ipnsRecord, created) {
35
+ const now = Date.now();
36
+ const dhtExpiry = created.getTime() + DHT_EXPIRY_MS;
37
+ const recordExpiry = new Date(ipnsRecord.validity).getTime();
38
+ // If the DHT expiry is within the threshold, republish it
39
+ if (dhtExpiry - now < REPUBLISH_THRESHOLD) {
40
+ return true;
41
+ }
42
+ // If the record expiry (based on validity/lifetime) is within the threshold, republish it
43
+ if (recordExpiry - now < REPUBLISH_THRESHOLD) {
44
+ return true;
45
+ }
46
+ return false;
47
+ }
48
+ function isCID(obj) {
49
+ return obj?.asCID === obj;
50
+ }
51
+ export function isLibp2pCID(obj) {
52
+ if (!isCID(obj)) {
53
+ return false;
54
+ }
55
+ if (obj.code !== LIBP2P_KEY_CODEC) {
56
+ throw new InvalidParametersError(`CID codec ${obj.code} was not libp2p-key`);
57
+ }
58
+ if (obj.multihash.code !== IDENTITY_CODEC && obj.multihash.code !== SHA2_256_CODEC) {
59
+ throw new InvalidParametersError(`Multihash algorithm codec ${obj.multihash.code} was not Identity or SHA256 hash`);
60
+ }
61
+ return true;
62
+ }
7
63
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,CAAA;AACjC,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAA;AAElC,MAAM,CAAC,MAAM,kBAAkB,GAAG,QAAQ,CAAA;AAE1C,MAAM,UAAU,OAAO,CAAqB,MAAuB,EAAE,KAAQ;IAC3E,OAAO,MAAM,CAAC,IAAI,KAAK,KAAK,CAAA;AAC9B,CAAC"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAA;AACzC,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AACtE,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AAKnE,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAA;AACpC,MAAM,CAAC,MAAM,cAAc,GAAG,GAAG,CAAA;AACjC,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAA;AAElC,MAAM,CAAC,MAAM,kBAAkB,GAAG,QAAQ,CAAA;AAE1C,MAAM,UAAU,OAAO,CAAqB,MAAuB,EAAE,KAAQ;IAC3E,OAAO,MAAM,CAAC,IAAI,KAAK,KAAK,CAAA;AAC9B,CAAC;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG,cAAc,CAAA;AAC/C,MAAM,CAAC,MAAM,oBAAoB,GAAG,iBAAiB,CAAA;AAErD,MAAM,UAAU,aAAa,CAAE,GAAe;IAC5C,OAAO,IAAI,GAAG,CAAC,iBAAiB,GAAG,kBAAkB,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAA;AAC9E,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,eAAe,CAAE,GAAe;IAC9C,OAAO,IAAI,GAAG,CAAC,oBAAoB,GAAG,kBAAkB,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAA;AACjF,CAAC;AAED,MAAM,UAAU,eAAe,CAAE,UAAsB,EAAE,OAAa;IACpE,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IACtB,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,EAAE,GAAG,aAAa,CAAA;IACnD,MAAM,YAAY,GAAG,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAA;IAE5D,0DAA0D;IAC1D,IAAI,SAAS,GAAG,GAAG,GAAG,mBAAmB,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAA;IACb,CAAC;IAED,0FAA0F;IAC1F,IAAI,YAAY,GAAG,GAAG,GAAG,mBAAmB,EAAE,CAAC;QAC7C,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO,KAAK,CAAA;AACd,CAAC;AAED,SAAS,KAAK,CAAE,GAAS;IACvB,OAAO,GAAG,EAAE,KAAK,KAAK,GAAG,CAAA;AAC3B,CAAC;AAED,MAAM,UAAU,WAAW,CAAE,GAAS;IACpC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QAChB,OAAO,KAAK,CAAA;IACd,CAAC;IAED,IAAI,GAAG,CAAC,IAAI,KAAK,gBAAgB,EAAE,CAAC;QAClC,MAAM,IAAI,sBAAsB,CAAC,aAAa,GAAG,CAAC,IAAI,qBAAqB,CAAC,CAAA;IAC9E,CAAC;IAED,IAAI,GAAG,CAAC,SAAS,CAAC,IAAI,KAAK,cAAc,IAAI,GAAG,CAAC,SAAS,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;QACnF,MAAM,IAAI,sBAAsB,CAAC,6BAA6B,GAAG,CAAC,SAAS,CAAC,IAAI,kCAAkC,CAAC,CAAA;IACrH,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@helia/ipns",
3
- "version": "8.2.4",
3
+ "version": "9.0.0-9c67dbd4",
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/tree/main/packages/ipns#readme",
@@ -56,13 +56,6 @@
56
56
  "import": "./dist/src/routing/index.js"
57
57
  }
58
58
  },
59
- "eslintConfig": {
60
- "extends": "ipfs",
61
- "parserOptions": {
62
- "project": true,
63
- "sourceType": "module"
64
- }
65
- },
66
59
  "scripts": {
67
60
  "clean": "aegir clean",
68
61
  "lint": "aegir lint",
@@ -70,6 +63,7 @@
70
63
  "doc-check": "aegir doc-check",
71
64
  "build": "aegir build",
72
65
  "docs": "aegir docs",
66
+ "generate": "protons ./src/pb/metadata.proto",
73
67
  "test": "aegir test",
74
68
  "test:chrome": "aegir test -t browser --cov",
75
69
  "test:chrome-webworker": "aegir test -t webworker",
@@ -79,25 +73,29 @@
79
73
  "test:electron-main": "aegir test -t electron-main"
80
74
  },
81
75
  "dependencies": {
82
- "@helia/interface": "^5.4.0",
83
- "@libp2p/interface": "^2.2.1",
84
- "@libp2p/kad-dht": "^15.0.2",
85
- "@libp2p/logger": "^5.1.4",
86
- "@libp2p/peer-id": "^5.1.0",
87
- "@multiformats/dns": "^1.0.6",
88
- "interface-datastore": "^8.3.1",
89
- "ipns": "^10.0.0",
90
- "multiformats": "^13.3.1",
76
+ "@helia/interface": "6.0.0-9c67dbd4",
77
+ "@libp2p/crypto": "^5.1.7",
78
+ "@libp2p/interface": "^3.0.2",
79
+ "@libp2p/kad-dht": "^16.0.5",
80
+ "@libp2p/keychain": "^6.0.5",
81
+ "@libp2p/logger": "^6.0.5",
82
+ "@libp2p/utils": "^7.0.5",
83
+ "interface-datastore": "^9.0.2",
84
+ "ipns": "^10.1.2",
85
+ "multiformats": "^13.4.1",
91
86
  "progress-events": "^1.0.1",
87
+ "protons-runtime": "^5.5.0",
88
+ "uint8arraylist": "^2.4.8",
92
89
  "uint8arrays": "^5.1.0"
93
90
  },
94
91
  "devDependencies": {
95
- "@libp2p/crypto": "^5.0.7",
96
- "@types/dns-packet": "^5.6.5",
97
- "aegir": "^47.0.7",
98
- "datastore-core": "^10.0.2",
99
- "it-drain": "^3.0.7",
100
- "sinon": "^20.0.0",
92
+ "@libp2p/crypto": "^5.1.12",
93
+ "@libp2p/peer-id": "^6.0.3",
94
+ "aegir": "^47.0.22",
95
+ "datastore-core": "^11.0.2",
96
+ "it-drain": "^3.0.10",
97
+ "protons": "^7.6.1",
98
+ "sinon": "^21.0.0",
101
99
  "sinon-ts": "^2.0.0"
102
100
  },
103
101
  "browser": {
@@ -0,0 +1,24 @@
1
+ const MINUTE = 60 * 1000
2
+ const HOUR = 60 * MINUTE
3
+
4
+ export const DEFAULT_LIFETIME_MS = 48 * HOUR
5
+
6
+ /**
7
+ * The default DHT record expiry
8
+ */
9
+ export const DHT_EXPIRY_MS = 48 * HOUR
10
+
11
+ /**
12
+ * How often to run the republish loop
13
+ */
14
+ export const DEFAULT_REPUBLISH_INTERVAL_MS = HOUR
15
+
16
+ /**
17
+ * Republish IPNS records when the expiry of our provider records is within this
18
+ * threshold
19
+ */
20
+ export const REPUBLISH_THRESHOLD = 24 * HOUR
21
+
22
+ export const DEFAULT_TTL_NS = BigInt(MINUTE) * 5_000_000n // 5 minutes
23
+
24
+ export const DEFAULT_REPUBLISH_CONCURRENCY = 5
package/src/errors.ts CHANGED
@@ -1,12 +1,3 @@
1
- export class DNSLinkNotFoundError extends Error {
2
- static name = 'DNSLinkNotFoundError'
3
-
4
- constructor (message = 'DNSLink not found') {
5
- super(message)
6
- this.name = 'DNSLinkNotFoundError'
7
- }
8
- }
9
-
10
1
  export class RecordsFailedValidationError extends Error {
11
2
  static name = 'RecordsFailedValidationError'
12
3