@helia/ipns 9.2.0 → 9.2.1-1361bfa5

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 (69) hide show
  1. package/README.md +21 -57
  2. package/dist/index.min.js +9 -23
  3. package/dist/index.min.js.map +4 -4
  4. package/dist/src/errors.d.ts +33 -5
  5. package/dist/src/errors.d.ts.map +1 -1
  6. package/dist/src/errors.js +33 -20
  7. package/dist/src/errors.js.map +1 -1
  8. package/dist/src/index.d.ts +62 -99
  9. package/dist/src/index.d.ts.map +1 -1
  10. package/dist/src/index.js +21 -60
  11. package/dist/src/index.js.map +1 -1
  12. package/dist/src/ipns/publisher.d.ts +5 -9
  13. package/dist/src/ipns/publisher.d.ts.map +1 -1
  14. package/dist/src/ipns/publisher.js +30 -22
  15. package/dist/src/ipns/publisher.js.map +1 -1
  16. package/dist/src/ipns/republisher.d.ts +3 -5
  17. package/dist/src/ipns/republisher.d.ts.map +1 -1
  18. package/dist/src/ipns/republisher.js +18 -9
  19. package/dist/src/ipns/republisher.js.map +1 -1
  20. package/dist/src/ipns/resolver.d.ts +6 -5
  21. package/dist/src/ipns/resolver.d.ts.map +1 -1
  22. package/dist/src/ipns/resolver.js +32 -78
  23. package/dist/src/ipns/resolver.js.map +1 -1
  24. package/dist/src/ipns.d.ts +6 -4
  25. package/dist/src/ipns.d.ts.map +1 -1
  26. package/dist/src/ipns.js +33 -4
  27. package/dist/src/ipns.js.map +1 -1
  28. package/dist/src/pb/ipns.d.ts +62 -0
  29. package/dist/src/pb/ipns.d.ts.map +1 -0
  30. package/dist/src/pb/ipns.js +203 -0
  31. package/dist/src/pb/ipns.js.map +1 -0
  32. package/dist/src/pb/metadata.d.ts +1 -1
  33. package/dist/src/pb/metadata.d.ts.map +1 -1
  34. package/dist/src/records.d.ts +155 -0
  35. package/dist/src/records.d.ts.map +1 -0
  36. package/dist/src/records.js +88 -0
  37. package/dist/src/records.js.map +1 -0
  38. package/dist/src/routing/pubsub.d.ts +3 -0
  39. package/dist/src/routing/pubsub.d.ts.map +1 -1
  40. package/dist/src/routing/pubsub.js +15 -10
  41. package/dist/src/routing/pubsub.js.map +1 -1
  42. package/dist/src/selector.d.ts +14 -0
  43. package/dist/src/selector.d.ts.map +1 -0
  44. package/dist/src/selector.js +47 -0
  45. package/dist/src/selector.js.map +1 -0
  46. package/dist/src/utils.d.ts +29 -2
  47. package/dist/src/utils.d.ts.map +1 -1
  48. package/dist/src/utils.js +308 -0
  49. package/dist/src/utils.js.map +1 -1
  50. package/dist/src/validator.d.ts +18 -0
  51. package/dist/src/validator.d.ts.map +1 -0
  52. package/dist/src/validator.js +58 -0
  53. package/dist/src/validator.js.map +1 -0
  54. package/package.json +32 -28
  55. package/src/errors.ts +40 -25
  56. package/src/index.ts +63 -100
  57. package/src/ipns/publisher.ts +34 -29
  58. package/src/ipns/republisher.ts +24 -13
  59. package/src/ipns/resolver.ts +40 -88
  60. package/src/ipns.ts +44 -7
  61. package/src/pb/ipns.proto +39 -0
  62. package/src/pb/ipns.ts +280 -0
  63. package/src/pb/metadata.ts +1 -1
  64. package/src/records.ts +273 -0
  65. package/src/routing/pubsub.ts +17 -10
  66. package/src/selector.ts +55 -0
  67. package/src/utils.ts +371 -2
  68. package/src/validator.ts +67 -0
  69. package/dist/typedoc-urls.json +0 -51
@@ -1,25 +1,53 @@
1
1
  export declare class RecordsFailedValidationError extends Error {
2
2
  static name: string;
3
- constructor(message?: string);
3
+ name: string;
4
4
  }
5
5
  export declare class UnsupportedMultibasePrefixError extends Error {
6
6
  static name: string;
7
- constructor(message?: string);
7
+ name: string;
8
8
  }
9
9
  export declare class UnsupportedMultihashCodecError extends Error {
10
10
  static name: string;
11
- constructor(message?: string);
11
+ name: string;
12
12
  }
13
13
  export declare class InvalidValueError extends Error {
14
14
  static name: string;
15
- constructor(message?: string);
15
+ name: string;
16
16
  }
17
17
  export declare class InvalidTopicError extends Error {
18
18
  static name: string;
19
- constructor(message?: string);
19
+ name: string;
20
20
  }
21
21
  export declare class RecordNotFoundError extends Error {
22
22
  static name: string;
23
23
  name: string;
24
24
  }
25
+ export declare class SignatureCreationError extends Error {
26
+ static name: string;
27
+ name: string;
28
+ }
29
+ export declare class SignatureVerificationError extends Error {
30
+ static name: string;
31
+ name: string;
32
+ }
33
+ export declare class RecordExpiredError extends Error {
34
+ static name: string;
35
+ name: string;
36
+ }
37
+ export declare class UnsupportedValidityError extends Error {
38
+ static name: string;
39
+ name: string;
40
+ }
41
+ export declare class RecordTooLargeError extends Error {
42
+ static name: string;
43
+ name: string;
44
+ }
45
+ export declare class InvalidRecordDataError extends Error {
46
+ static name: string;
47
+ name: string;
48
+ }
49
+ export declare class InvalidEmbeddedPublicKeyError extends Error {
50
+ static name: string;
51
+ name: string;
52
+ }
25
53
  //# sourceMappingURL=errors.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,4BAA6B,SAAQ,KAAK;IACrD,MAAM,CAAC,IAAI,SAAiC;gBAE/B,OAAO,SAA8B;CAInD;AAED,qBAAa,+BAAgC,SAAQ,KAAK;IACxD,MAAM,CAAC,IAAI,SAAoC;gBAElC,OAAO,SAAiC;CAItD;AAED,qBAAa,8BAA+B,SAAQ,KAAK;IACvD,MAAM,CAAC,IAAI,SAAmC;gBAEjC,OAAO,SAAgC;CAIrD;AAED,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,MAAM,CAAC,IAAI,SAAsB;gBAEpB,OAAO,SAAkB;CAIvC;AAED,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,MAAM,CAAC,IAAI,SAAsB;gBAEpB,OAAO,SAAkB;CAIvC;AAED,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,MAAM,CAAC,IAAI,SAAwB;IACnC,IAAI,SAAwB;CAC7B"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"AAAA,qBAAa,4BAA6B,SAAQ,KAAK;IACrD,MAAM,CAAC,IAAI,SAAiC;IAC5C,IAAI,SAAiC;CACtC;AAED,qBAAa,+BAAgC,SAAQ,KAAK;IACxD,MAAM,CAAC,IAAI,SAAoC;IAC/C,IAAI,SAAoC;CACzC;AAED,qBAAa,8BAA+B,SAAQ,KAAK;IACvD,MAAM,CAAC,IAAI,SAAmC;IAC9C,IAAI,SAAmC;CACxC;AAED,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,MAAM,CAAC,IAAI,SAAsB;IACjC,IAAI,SAAsB;CAC3B;AAED,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,MAAM,CAAC,IAAI,SAAsB;IACjC,IAAI,SAAsB;CAC3B;AAED,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,MAAM,CAAC,IAAI,SAAwB;IACnC,IAAI,SAAwB;CAC7B;AAED,qBAAa,sBAAuB,SAAQ,KAAK;IAC/C,MAAM,CAAC,IAAI,SAA2B;IACtC,IAAI,SAA2B;CAChC;AAED,qBAAa,0BAA2B,SAAQ,KAAK;IACnD,MAAM,CAAC,IAAI,SAA+B;IAC1C,IAAI,SAA+B;CACpC;AAED,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,MAAM,CAAC,IAAI,SAAuB;IAClC,IAAI,SAAuB;CAC5B;AAED,qBAAa,wBAAyB,SAAQ,KAAK;IACjD,MAAM,CAAC,IAAI,SAA6B;IACxC,IAAI,SAA6B;CAClC;AAED,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,MAAM,CAAC,IAAI,SAAwB;IACnC,IAAI,SAAwB;CAC7B;AAED,qBAAa,sBAAuB,SAAQ,KAAK;IAC/C,MAAM,CAAC,IAAI,SAA2B;IACtC,IAAI,SAA2B;CAChC;AAED,qBAAa,6BAA8B,SAAQ,KAAK;IACtD,MAAM,CAAC,IAAI,SAAkC;IAC7C,IAAI,SAAkC;CACvC"}
@@ -1,40 +1,53 @@
1
1
  export class RecordsFailedValidationError extends Error {
2
2
  static name = 'RecordsFailedValidationError';
3
- constructor(message = 'Records failed validation') {
4
- super(message);
5
- this.name = 'RecordsFailedValidationError';
6
- }
3
+ name = 'RecordsFailedValidationError';
7
4
  }
8
5
  export class UnsupportedMultibasePrefixError extends Error {
9
6
  static name = 'UnsupportedMultibasePrefixError';
10
- constructor(message = 'Unsupported multibase prefix') {
11
- super(message);
12
- this.name = 'UnsupportedMultibasePrefixError';
13
- }
7
+ name = 'UnsupportedMultibasePrefixError';
14
8
  }
15
9
  export class UnsupportedMultihashCodecError extends Error {
16
10
  static name = 'UnsupportedMultihashCodecError';
17
- constructor(message = 'Unsupported multihash codec') {
18
- super(message);
19
- this.name = 'UnsupportedMultihashCodecError';
20
- }
11
+ name = 'UnsupportedMultihashCodecError';
21
12
  }
22
13
  export class InvalidValueError extends Error {
23
14
  static name = 'InvalidValueError';
24
- constructor(message = 'Invalid value') {
25
- super(message);
26
- this.name = 'InvalidValueError';
27
- }
15
+ name = 'InvalidValueError';
28
16
  }
29
17
  export class InvalidTopicError extends Error {
30
18
  static name = 'InvalidTopicError';
31
- constructor(message = 'Invalid topic') {
32
- super(message);
33
- this.name = 'InvalidTopicError';
34
- }
19
+ name = 'InvalidTopicError';
35
20
  }
36
21
  export class RecordNotFoundError extends Error {
37
22
  static name = 'RecordNotFoundError';
38
23
  name = 'RecordNotFoundError';
39
24
  }
25
+ export class SignatureCreationError extends Error {
26
+ static name = 'SignatureCreationError';
27
+ name = 'SignatureCreationError';
28
+ }
29
+ export class SignatureVerificationError extends Error {
30
+ static name = 'SignatureVerificationError';
31
+ name = 'SignatureVerificationError';
32
+ }
33
+ export class RecordExpiredError extends Error {
34
+ static name = 'RecordExpiredError';
35
+ name = 'RecordExpiredError';
36
+ }
37
+ export class UnsupportedValidityError extends Error {
38
+ static name = 'UnsupportedValidityError';
39
+ name = 'UnsupportedValidityError';
40
+ }
41
+ export class RecordTooLargeError extends Error {
42
+ static name = 'RecordTooLargeError';
43
+ name = 'RecordTooLargeError';
44
+ }
45
+ export class InvalidRecordDataError extends Error {
46
+ static name = 'InvalidRecordDataError';
47
+ name = 'InvalidRecordDataError';
48
+ }
49
+ export class InvalidEmbeddedPublicKeyError extends Error {
50
+ static name = 'InvalidEmbeddedPublicKeyError';
51
+ name = 'InvalidEmbeddedPublicKeyError';
52
+ }
40
53
  //# sourceMappingURL=errors.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,4BAA6B,SAAQ,KAAK;IACrD,MAAM,CAAC,IAAI,GAAG,8BAA8B,CAAA;IAE5C,YAAa,OAAO,GAAG,2BAA2B;QAChD,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,8BAA8B,CAAA;IAC5C,CAAC;;AAGH,MAAM,OAAO,+BAAgC,SAAQ,KAAK;IACxD,MAAM,CAAC,IAAI,GAAG,iCAAiC,CAAA;IAE/C,YAAa,OAAO,GAAG,8BAA8B;QACnD,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,iCAAiC,CAAA;IAC/C,CAAC;;AAGH,MAAM,OAAO,8BAA+B,SAAQ,KAAK;IACvD,MAAM,CAAC,IAAI,GAAG,gCAAgC,CAAA;IAE9C,YAAa,OAAO,GAAG,6BAA6B;QAClD,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,gCAAgC,CAAA;IAC9C,CAAC;;AAGH,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAC1C,MAAM,CAAC,IAAI,GAAG,mBAAmB,CAAA;IAEjC,YAAa,OAAO,GAAG,eAAe;QACpC,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAA;IACjC,CAAC;;AAGH,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAC1C,MAAM,CAAC,IAAI,GAAG,mBAAmB,CAAA;IAEjC,YAAa,OAAO,GAAG,eAAe;QACpC,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAA;IACjC,CAAC;;AAGH,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAC5C,MAAM,CAAC,IAAI,GAAG,qBAAqB,CAAA;IACnC,IAAI,GAAG,qBAAqB,CAAA"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,4BAA6B,SAAQ,KAAK;IACrD,MAAM,CAAC,IAAI,GAAG,8BAA8B,CAAA;IAC5C,IAAI,GAAG,8BAA8B,CAAA;;AAGvC,MAAM,OAAO,+BAAgC,SAAQ,KAAK;IACxD,MAAM,CAAC,IAAI,GAAG,iCAAiC,CAAA;IAC/C,IAAI,GAAG,iCAAiC,CAAA;;AAG1C,MAAM,OAAO,8BAA+B,SAAQ,KAAK;IACvD,MAAM,CAAC,IAAI,GAAG,gCAAgC,CAAA;IAC9C,IAAI,GAAG,gCAAgC,CAAA;;AAGzC,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAC1C,MAAM,CAAC,IAAI,GAAG,mBAAmB,CAAA;IACjC,IAAI,GAAG,mBAAmB,CAAA;;AAG5B,MAAM,OAAO,iBAAkB,SAAQ,KAAK;IAC1C,MAAM,CAAC,IAAI,GAAG,mBAAmB,CAAA;IACjC,IAAI,GAAG,mBAAmB,CAAA;;AAG5B,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAC5C,MAAM,CAAC,IAAI,GAAG,qBAAqB,CAAA;IACnC,IAAI,GAAG,qBAAqB,CAAA;;AAG9B,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IAC/C,MAAM,CAAC,IAAI,GAAG,wBAAwB,CAAA;IACtC,IAAI,GAAG,wBAAwB,CAAA;;AAGjC,MAAM,OAAO,0BAA2B,SAAQ,KAAK;IACnD,MAAM,CAAC,IAAI,GAAG,4BAA4B,CAAA;IAC1C,IAAI,GAAG,4BAA4B,CAAA;;AAGrC,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAC3C,MAAM,CAAC,IAAI,GAAG,oBAAoB,CAAA;IAClC,IAAI,GAAG,oBAAoB,CAAA;;AAG7B,MAAM,OAAO,wBAAyB,SAAQ,KAAK;IACjD,MAAM,CAAC,IAAI,GAAG,0BAA0B,CAAA;IACxC,IAAI,GAAG,0BAA0B,CAAA;;AAGnC,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAC5C,MAAM,CAAC,IAAI,GAAG,qBAAqB,CAAA;IACnC,IAAI,GAAG,qBAAqB,CAAA;;AAG9B,MAAM,OAAO,sBAAuB,SAAQ,KAAK;IAC/C,MAAM,CAAC,IAAI,GAAG,wBAAwB,CAAA;IACtC,IAAI,GAAG,wBAAwB,CAAA;;AAGjC,MAAM,OAAO,6BAA8B,SAAQ,KAAK;IACtD,MAAM,CAAC,IAAI,GAAG,+BAA+B,CAAA;IAC7C,IAAI,GAAG,+BAA+B,CAAA"}
@@ -23,9 +23,9 @@
23
23
  * const { publicKey } = await name.publish('key-1', cid)
24
24
  *
25
25
  * // resolve the name
26
- * const result = await name.resolve(publicKey)
27
- *
28
- * console.info(result.cid, result.path)
26
+ * for await (const result of name.resolve(publicKey)) {
27
+ * console.info(result.record.value) // /ipfs/QmFoo
28
+ * }
29
29
  * ```
30
30
  *
31
31
  * @example Publishing a recursive record
@@ -53,8 +53,9 @@
53
53
  * const { publicKey: recursivePublicKey } = await name.publish('key-2', publicKey)
54
54
  *
55
55
  * // resolve the name recursively - it resolves until a CID is found
56
- * const result = await name.resolve(recursivePublicKey)
57
- * console.info(result.cid.toString() === cid.toString()) // true
56
+ * for await (const result of name.resolve(recursivePublicKey)) {
57
+ * console.info(result.record.value) // /ipfs/QmFoo../foo.txt
58
+ * }
58
59
  * ```
59
60
  *
60
61
  * @example Publishing a record with a path
@@ -82,9 +83,9 @@
82
83
  * const { publicKey } = await name.publish('key-1', `/ipfs/${finalDirCid}/foo.txt`)
83
84
  *
84
85
  * // resolve the name
85
- * const result = await name.resolve(publicKey)
86
- *
87
- * console.info(result.cid, result.path) // QmFoo.. 'foo.txt'
86
+ * for await (const result of name.resolve(publicKey)) {
87
+ * console.info(result.record.value) // /ipfs/QmFoo../foo.txt
88
+ * }
88
89
  * ```
89
90
  *
90
91
  * @example Using custom PubSub router
@@ -104,29 +105,30 @@
104
105
  * may fail to be published with "Insufficient peers" errors.
105
106
  *
106
107
  * ```TypeScript
107
- * import { createHelia, libp2pDefaults } from 'helia'
108
108
  * import { ipns } from '@helia/ipns'
109
109
  * import { pubsub } from '@helia/ipns/routing'
110
+ * import { withLibp2p, libp2pDefaults } from '@helia/libp2p'
110
111
  * import { unixfs } from '@helia/unixfs'
111
- * import { floodsub } from '@libp2p/floodsub'
112
112
  * import { generateKeyPair } from '@libp2p/crypto/keys'
113
+ * import { floodsub } from '@libp2p/floodsub'
114
+ * import { createHelia } from 'helia'
115
+ * import type { Helia } from '@helia/interface'
113
116
  * import type { PubSub } from '@helia/ipns/routing'
117
+ * import type { DefaultLibp2pServices } from '@helia/libp2p'
118
+ * import type { FloodSub } from '@libp2p/floodsub'
114
119
  * import type { Libp2p } from '@libp2p/interface'
115
- * import type { DefaultLibp2pServices } from 'helia'
116
120
  *
117
- * const libp2pOptions = libp2pDefaults()
121
+ * const libp2pOptions = libp2pDefaults() as any
118
122
  * libp2pOptions.services.pubsub = floodsub()
119
123
  *
120
- * const helia = await createHelia<Libp2p<DefaultLibp2pServices & { pubsub: PubSub }>>({
121
- * libp2p: libp2pOptions
122
- * })
124
+ * const helia = await withLibp2p<Helia, { pubsub: FloodSub }>(createHelia(), libp2pOptions).start()
125
+ *
123
126
  * const name = ipns(helia, {
124
127
  * routers: [
125
128
  * pubsub(helia)
126
129
  * ]
127
130
  * })
128
131
  *
129
- *
130
132
  * // store some data to publish
131
133
  * const fs = unixfs(helia)
132
134
  * const cid = await fs.addBytes(Uint8Array.from([0, 1, 2, 3, 4]))
@@ -135,58 +137,19 @@
135
137
  * const { publicKey } = await name.publish('key-1', cid)
136
138
  *
137
139
  * // resolve the name
138
- * const result = await name.resolve(publicKey)
139
- * ```
140
- *
141
- * @example Republishing an existing IPNS record
142
- *
143
- * It is sometimes useful to be able to republish an existing IPNS record
144
- * without needing the private key. This allows you to extend the availability
145
- * of a record that was created elsewhere.
146
- *
147
- * ```TypeScript
148
- * import { createHelia } from 'helia'
149
- * import { ipns, ipnsValidator } from '@helia/ipns'
150
- * import { delegatedRoutingV1HttpApiClient } from '@helia/delegated-routing-v1-http-api-client'
151
- * import { CID } from 'multiformats/cid'
152
- * import { multihashToIPNSRoutingKey, marshalIPNSRecord } from 'ipns'
153
- * import { defaultLogger } from '@libp2p/logger'
154
- *
155
- * const helia = await createHelia()
156
- * const name = ipns(helia)
157
- *
158
- * const ipnsName = 'k51qzi5uqu5dktsyfv7xz8h631pri4ct7osmb43nibxiojpttxzoft6hdyyzg4'
159
- * const parsedCid: CID<unknown, 114, 0 | 18, 1> = CID.parse(ipnsName)
160
- * const delegatedClient = delegatedRoutingV1HttpApiClient({
161
- * url: 'https://delegated-ipfs.dev'
162
- * })({
163
- * logger: defaultLogger()
164
- * })
165
- * const record = await delegatedClient.getIPNS(parsedCid)
166
- *
167
- * const routingKey = multihashToIPNSRoutingKey(parsedCid.multihash)
168
- * const marshaledRecord = marshalIPNSRecord(record)
169
- *
170
- * // validate that they key corresponds to the record
171
- * await ipnsValidator(routingKey, marshaledRecord)
172
- *
173
- * // publish record to routing
174
- * await Promise.all(
175
- * name.routers.map(async r => {
176
- * await r.put(routingKey, marshaledRecord)
177
- * })
178
- * )
140
+ * for await (const result of name.resolve(publicKey)) {
141
+ * console.info(result.record.value)
142
+ * }
179
143
  * ```
180
144
  */
181
- import { ipnsValidator } from 'ipns/validator';
182
145
  import { CID } from 'multiformats/cid';
183
146
  import type { IPNSResolverComponents } from './ipns/resolver.ts';
147
+ import type { IPNSRecord } from './records.ts';
184
148
  import type { IPNSRouting, IPNSRoutingProgressEvents } from './routing/index.ts';
185
- import type { Routing, HeliaEvents } from '@helia/interface';
186
- import type { AbortOptions, ComponentLogger, Libp2p, PeerId, PublicKey, TypedEventEmitter } from '@libp2p/interface';
187
- import type { Keychain } from '@libp2p/keychain';
149
+ import type { Routing, HeliaEvents, Keychain, PublicKey } from '@helia/interface';
150
+ import type { ComponentLogger, TypedEventEmitter } from '@libp2p/interface';
151
+ import type { AbortOptions } from 'abort-error';
188
152
  import type { Datastore } from 'interface-datastore';
189
- import type { IPNSRecord } from 'ipns';
190
153
  import type { MultihashDigest } from 'multiformats/hashes/interface';
191
154
  import type { ProgressEvent, ProgressOptions } from 'progress-events';
192
155
  export type PublishProgressEvents = ProgressEvent<'ipns:publish:start'> | ProgressEvent<'ipns:publish:success', IPNSRecord> | ProgressEvent<'ipns:publish:error', Error>;
@@ -194,20 +157,28 @@ export type ResolveProgressEvents = ProgressEvent<'ipns:resolve:start', unknown>
194
157
  export type DatastoreProgressEvents = ProgressEvent<'ipns:routing:datastore:put'> | ProgressEvent<'ipns:routing:datastore:get'> | ProgressEvent<'ipns:routing:datastore:list'> | ProgressEvent<'ipns:routing:datastore:error', Error>;
195
158
  export interface PublishOptions extends AbortOptions, ProgressOptions<PublishProgressEvents | IPNSRoutingProgressEvents> {
196
159
  /**
197
- * Time duration of the signature validity in ms (default: 48hrs)
160
+ * Time duration of the signature validity in ms
161
+ *
162
+ * @default 172_800_000
198
163
  */
199
164
  lifetime?: number;
200
165
  /**
201
- * Only publish to a local datastore (default: false)
166
+ * Only publish to a local datastore
167
+ *
168
+ * @default false
202
169
  */
203
170
  offline?: boolean;
204
171
  /**
205
172
  * By default a IPNS V1 and a V2 signature is added to every record. Pass
206
- * false here to only add a V2 signature. (default: true)
173
+ * false here to only add a V2 signature.
174
+ *
175
+ * @default true
207
176
  */
208
177
  v1Compatible?: boolean;
209
178
  /**
210
- * The TTL of the record in ms (default: 5 minutes)
179
+ * The TTL of the record in ms
180
+ *
181
+ * @default 300_000
211
182
  */
212
183
  ttl?: number;
213
184
  }
@@ -230,28 +201,22 @@ export interface ResolveOptions extends AbortOptions, ProgressOptions<ResolvePro
230
201
  nocache?: boolean;
231
202
  }
232
203
  export interface ResolveResult {
233
- /**
234
- * The CID that was resolved
235
- */
236
- cid: CID;
237
- /**
238
- * Any path component that was part of the resolved record
239
- */
240
- path?: string;
241
- }
242
- export interface IPNSResolveResult extends ResolveResult {
243
204
  /**
244
205
  * The resolved record
245
206
  */
246
207
  record: IPNSRecord;
247
208
  }
248
- export interface IPNSPublishResult {
209
+ export interface PublishResult {
249
210
  /**
250
211
  * The published record
251
212
  */
252
213
  record: IPNSRecord;
253
214
  /**
254
- * The public key that was used to publish the record
215
+ * The IPNS name that can be used to resolve this record
216
+ */
217
+ name: string;
218
+ /**
219
+ * The public key that was used to sign and publish the record
255
220
  */
256
221
  publicKey: PublicKey;
257
222
  }
@@ -263,7 +228,7 @@ export interface IPNSResolver {
263
228
  * Ed25519, secp256k1 or RSA PeerId and recursively resolves the IPNS record
264
229
  * corresponding to that key until a value is found.
265
230
  */
266
- resolve(key: CID<unknown, 0x72, 0x00 | 0x12, 1> | PublicKey | MultihashDigest<0x00 | 0x12> | PeerId, options?: ResolveOptions): Promise<IPNSResolveResult>;
231
+ resolve(key: CID<unknown, 0x72> | MultihashDigest, options?: ResolveOptions): AsyncGenerator<ResolveResult>;
267
232
  }
268
233
  export interface IPNS {
269
234
  /**
@@ -274,12 +239,14 @@ export interface IPNS {
274
239
  * Creates and publishes an IPNS record that will resolve the passed value
275
240
  * signed by a key stored in the libp2p keychain under the passed key name.
276
241
  *
242
+ * If the key does not exist, a new Ed25519 key will be created. To use a
243
+ * different key types, ensure the key is created and stored in the keychain
244
+ * before invoking this method.
245
+ *
277
246
  * It is possible to create a recursive IPNS record by passing:
278
247
  *
279
- * - A PeerId,
280
- * - A PublicKey
281
- * - A CID with the libp2p-key codec and Identity or SHA256 hash algorithms
282
- * - A Multihash with the Identity or SHA256 hash algorithms
248
+ * - A CID with the libp2p-key codec
249
+ * - A Multihash
283
250
  * - A string IPNS key (e.g. `/ipns/Qmfoo`)
284
251
  *
285
252
  * @example
@@ -298,35 +265,32 @@ export interface IPNS {
298
265
  * console.info(result) // { answer: ... }
299
266
  * ```
300
267
  */
301
- publish(keyName: string, value: CID | PublicKey | MultihashDigest<0x00 | 0x12> | PeerId | string, options?: PublishOptions): Promise<IPNSPublishResult>;
268
+ publish(keyName: string, value: CID | PublicKey | MultihashDigest | string, options?: PublishOptions): Promise<PublishResult>;
302
269
  /**
303
- * Accepts a libp2p public key, a CID with the libp2p-key codec and either the
304
- * identity hash (for Ed25519 and secp256k1 public keys) or a SHA256 hash (for
305
- * RSA public keys), or the multihash of a libp2p-key encoded CID, or a
306
- * Ed25519, secp256k1 or RSA PeerId and recursively resolves the IPNS record
307
- * corresponding to that key until a value is found.
270
+ * Accepts a multihash of a public key, a libp2p-key CID containing the
271
+ * multihash of a public key, or an IPNS name in it's string representation
272
+ * and recursively resolves IPNS records until a non-recursive record is found
273
+ * (e.g. the value can be parsed as a string that does not start with
274
+ * `/ipns/`).
308
275
  */
309
- resolve(key: CID<unknown, 0x72, 0x00 | 0x12, 1> | PublicKey | MultihashDigest<0x00 | 0x12> | PeerId, options?: ResolveOptions): Promise<IPNSResolveResult>;
276
+ resolve(name: CID<unknown, 0x72> | PublicKey | MultihashDigest | string, options?: ResolveOptions): AsyncGenerator<ResolveResult>;
310
277
  /**
311
278
  * Stop republishing of an IPNS record
312
279
  *
313
- * This will delete the last signed IPNS record from the datastore, but the
314
- * key will remain in the keychain.
280
+ * This will delete the last signed IPNS record from the datastore.
315
281
  *
316
282
  * Note that the record may still be resolved by other peers until it expires
317
- * or is no longer valid.
283
+ * or is otherwise no longer valid.
318
284
  */
319
285
  unpublish(keyName: string, options?: AbortOptions): Promise<void>;
320
286
  }
321
287
  export type { IPNSRouting } from './routing/index.ts';
322
- export type { IPNSRecord } from 'ipns';
288
+ export type { IPNSRecord } from './records.ts';
323
289
  export interface IPNSComponents {
324
290
  datastore: Datastore;
325
291
  routing: Routing;
326
292
  logger: ComponentLogger;
327
- libp2p: Libp2p<{
328
- keychain: Keychain;
329
- }>;
293
+ keychain: Keychain;
330
294
  events: TypedEventEmitter<HeliaEvents>;
331
295
  }
332
296
  export interface IPNSOptions {
@@ -356,6 +320,5 @@ export interface IPNSResolverOptions {
356
320
  }
357
321
  export declare function ipns(components: IPNSComponents, options?: IPNSOptions): IPNS;
358
322
  export declare function ipnsResolver(components: IPNSResolverComponents, options?: IPNSResolverOptions): IPNSResolver;
359
- export { ipnsValidator, type IPNSRoutingProgressEvents };
360
- export { ipnsSelector } from 'ipns/selector';
323
+ export type { IPNSRoutingProgressEvents };
361
324
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
package/dist/src/index.js CHANGED
@@ -23,9 +23,9 @@
23
23
  * const { publicKey } = await name.publish('key-1', cid)
24
24
  *
25
25
  * // resolve the name
26
- * const result = await name.resolve(publicKey)
27
- *
28
- * console.info(result.cid, result.path)
26
+ * for await (const result of name.resolve(publicKey)) {
27
+ * console.info(result.record.value) // /ipfs/QmFoo
28
+ * }
29
29
  * ```
30
30
  *
31
31
  * @example Publishing a recursive record
@@ -53,8 +53,9 @@
53
53
  * const { publicKey: recursivePublicKey } = await name.publish('key-2', publicKey)
54
54
  *
55
55
  * // resolve the name recursively - it resolves until a CID is found
56
- * const result = await name.resolve(recursivePublicKey)
57
- * console.info(result.cid.toString() === cid.toString()) // true
56
+ * for await (const result of name.resolve(recursivePublicKey)) {
57
+ * console.info(result.record.value) // /ipfs/QmFoo../foo.txt
58
+ * }
58
59
  * ```
59
60
  *
60
61
  * @example Publishing a record with a path
@@ -82,9 +83,9 @@
82
83
  * const { publicKey } = await name.publish('key-1', `/ipfs/${finalDirCid}/foo.txt`)
83
84
  *
84
85
  * // resolve the name
85
- * const result = await name.resolve(publicKey)
86
- *
87
- * console.info(result.cid, result.path) // QmFoo.. 'foo.txt'
86
+ * for await (const result of name.resolve(publicKey)) {
87
+ * console.info(result.record.value) // /ipfs/QmFoo../foo.txt
88
+ * }
88
89
  * ```
89
90
  *
90
91
  * @example Using custom PubSub router
@@ -104,29 +105,30 @@
104
105
  * may fail to be published with "Insufficient peers" errors.
105
106
  *
106
107
  * ```TypeScript
107
- * import { createHelia, libp2pDefaults } from 'helia'
108
108
  * import { ipns } from '@helia/ipns'
109
109
  * import { pubsub } from '@helia/ipns/routing'
110
+ * import { withLibp2p, libp2pDefaults } from '@helia/libp2p'
110
111
  * import { unixfs } from '@helia/unixfs'
111
- * import { floodsub } from '@libp2p/floodsub'
112
112
  * import { generateKeyPair } from '@libp2p/crypto/keys'
113
+ * import { floodsub } from '@libp2p/floodsub'
114
+ * import { createHelia } from 'helia'
115
+ * import type { Helia } from '@helia/interface'
113
116
  * import type { PubSub } from '@helia/ipns/routing'
117
+ * import type { DefaultLibp2pServices } from '@helia/libp2p'
118
+ * import type { FloodSub } from '@libp2p/floodsub'
114
119
  * import type { Libp2p } from '@libp2p/interface'
115
- * import type { DefaultLibp2pServices } from 'helia'
116
120
  *
117
- * const libp2pOptions = libp2pDefaults()
121
+ * const libp2pOptions = libp2pDefaults() as any
118
122
  * libp2pOptions.services.pubsub = floodsub()
119
123
  *
120
- * const helia = await createHelia<Libp2p<DefaultLibp2pServices & { pubsub: PubSub }>>({
121
- * libp2p: libp2pOptions
122
- * })
124
+ * const helia = await withLibp2p<Helia, { pubsub: FloodSub }>(createHelia(), libp2pOptions).start()
125
+ *
123
126
  * const name = ipns(helia, {
124
127
  * routers: [
125
128
  * pubsub(helia)
126
129
  * ]
127
130
  * })
128
131
  *
129
- *
130
132
  * // store some data to publish
131
133
  * const fs = unixfs(helia)
132
134
  * const cid = await fs.addBytes(Uint8Array.from([0, 1, 2, 3, 4]))
@@ -135,50 +137,11 @@
135
137
  * const { publicKey } = await name.publish('key-1', cid)
136
138
  *
137
139
  * // resolve the name
138
- * const result = await name.resolve(publicKey)
139
- * ```
140
- *
141
- * @example Republishing an existing IPNS record
142
- *
143
- * It is sometimes useful to be able to republish an existing IPNS record
144
- * without needing the private key. This allows you to extend the availability
145
- * of a record that was created elsewhere.
146
- *
147
- * ```TypeScript
148
- * import { createHelia } from 'helia'
149
- * import { ipns, ipnsValidator } from '@helia/ipns'
150
- * import { delegatedRoutingV1HttpApiClient } from '@helia/delegated-routing-v1-http-api-client'
151
- * import { CID } from 'multiformats/cid'
152
- * import { multihashToIPNSRoutingKey, marshalIPNSRecord } from 'ipns'
153
- * import { defaultLogger } from '@libp2p/logger'
154
- *
155
- * const helia = await createHelia()
156
- * const name = ipns(helia)
157
- *
158
- * const ipnsName = 'k51qzi5uqu5dktsyfv7xz8h631pri4ct7osmb43nibxiojpttxzoft6hdyyzg4'
159
- * const parsedCid: CID<unknown, 114, 0 | 18, 1> = CID.parse(ipnsName)
160
- * const delegatedClient = delegatedRoutingV1HttpApiClient({
161
- * url: 'https://delegated-ipfs.dev'
162
- * })({
163
- * logger: defaultLogger()
164
- * })
165
- * const record = await delegatedClient.getIPNS(parsedCid)
166
- *
167
- * const routingKey = multihashToIPNSRoutingKey(parsedCid.multihash)
168
- * const marshaledRecord = marshalIPNSRecord(record)
169
- *
170
- * // validate that they key corresponds to the record
171
- * await ipnsValidator(routingKey, marshaledRecord)
172
- *
173
- * // publish record to routing
174
- * await Promise.all(
175
- * name.routers.map(async r => {
176
- * await r.put(routingKey, marshaledRecord)
177
- * })
178
- * )
140
+ * for await (const result of name.resolve(publicKey)) {
141
+ * console.info(result.record.value)
142
+ * }
179
143
  * ```
180
144
  */
181
- import { ipnsValidator } from 'ipns/validator';
182
145
  import { CID } from 'multiformats/cid';
183
146
  import { IPNSResolver as IPNSResolverClass } from "./ipns/resolver.js";
184
147
  import { IPNS as IPNSClass } from "./ipns.js";
@@ -200,6 +163,4 @@ export function ipnsResolver(components, options = {}) {
200
163
  localStore: store
201
164
  });
202
165
  }
203
- export { ipnsValidator };
204
- export { ipnsSelector } from 'ipns/selector';
205
166
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmLG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AACtC,OAAO,EAAE,YAAY,IAAI,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AACtE,OAAO,EAAE,IAAI,IAAI,SAAS,EAAE,MAAM,WAAW,CAAA;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAmN5D,MAAM,UAAU,IAAI,CAAE,UAA0B,EAAE,UAAuB,EAAE;IACzE,OAAO,IAAI,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;AAC3C,CAAC;AAED,MAAM,UAAU,YAAY,CAAE,UAAkC,EAAE,UAA+B,EAAE;IACjG,MAAM,KAAK,GAAG,UAAU,CAAC,UAAU,CAAC,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,wBAAwB,CAAC,CAAC,CAAA;IACxG,MAAM,OAAO,GAAG;QACd,iBAAiB,CAAC,KAAK,CAAC;QACxB,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC;QACzB,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;KAC3B,CAAA;IAED,OAAO,IAAI,iBAAiB,CAAC,UAAU,EAAE;QACvC,OAAO;QACP,UAAU,EAAE,KAAK;KAClB,CAAC,CAAA;AACJ,CAAC;AAED,OAAO,EAAE,aAAa,EAAkC,CAAA;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+IG;AAEH,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AACtC,OAAO,EAAE,YAAY,IAAI,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AACtE,OAAO,EAAE,IAAI,IAAI,SAAS,EAAE,MAAM,WAAW,CAAA;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AAoN5D,MAAM,UAAU,IAAI,CAAE,UAA0B,EAAE,UAAuB,EAAE;IACzE,OAAO,IAAI,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;AAC3C,CAAC;AAED,MAAM,UAAU,YAAY,CAAE,UAAkC,EAAE,UAA+B,EAAE;IACjG,MAAM,KAAK,GAAG,UAAU,CAAC,UAAU,CAAC,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,wBAAwB,CAAC,CAAC,CAAA;IACxG,MAAM,OAAO,GAAG;QACd,iBAAiB,CAAC,KAAK,CAAC;QACxB,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC;QACzB,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;KAC3B,CAAA;IAED,OAAO,IAAI,iBAAiB,CAAC,UAAU,EAAE;QACvC,OAAO;QACP,UAAU,EAAE,KAAK;KAClB,CAAC,CAAA;AACJ,CAAC"}
@@ -1,17 +1,13 @@
1
- import { CID } from 'multiformats/cid';
2
- import type { IPNSPublishResult, PublishOptions } from '../index.ts';
1
+ import type { PublishResult, PublishOptions } from '../index.ts';
3
2
  import type { LocalStore } from '../local-store.ts';
4
3
  import type { IPNSRouting } from '../routing/index.ts';
5
- import type { AbortOptions, ComponentLogger, Libp2p, PeerId, PublicKey } from '@libp2p/interface';
6
- import type { Keychain } from '@libp2p/keychain';
4
+ import type { Keychain } from '@helia/interface';
5
+ import type { AbortOptions, ComponentLogger } from '@libp2p/interface';
7
6
  import type { Datastore } from 'interface-datastore';
8
- import type { MultihashDigest } from 'multiformats/hashes/interface';
9
7
  export interface IPNSPublisherComponents {
10
8
  datastore: Datastore;
11
9
  logger: ComponentLogger;
12
- libp2p: Libp2p<{
13
- keychain: Keychain;
14
- }>;
10
+ keychain: Keychain;
15
11
  }
16
12
  export interface IPNSPublisherInit {
17
13
  localStore: LocalStore;
@@ -23,7 +19,7 @@ export declare class IPNSPublisher {
23
19
  private readonly localStore;
24
20
  private readonly keychain;
25
21
  constructor(components: IPNSPublisherComponents, init: IPNSPublisherInit);
26
- publish(keyName: string, value: CID | PublicKey | MultihashDigest<0x00 | 0x12> | PeerId | string, options?: PublishOptions): Promise<IPNSPublishResult>;
22
+ publish(keyName: string, value: string, options?: PublishOptions): Promise<PublishResult>;
27
23
  unpublish(keyName: string, options?: AbortOptions): Promise<void>;
28
24
  }
29
25
  //# sourceMappingURL=publisher.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"publisher.d.ts","sourceRoot":"","sources":["../../../src/ipns/publisher.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAGtC,OAAO,KAAK,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AACpE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,EAAc,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAC7G,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAEpE,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,SAAS,CAAA;IACpB,MAAM,EAAE,eAAe,CAAA;IACvB,MAAM,EAAE,MAAM,CAAC;QAAE,QAAQ,EAAE,QAAQ,CAAA;KAAE,CAAC,CAAA;CACvC;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,UAAU,CAAA;IACtB,OAAO,EAAE,WAAW,EAAE,CAAA;CACvB;AAED,qBAAa,aAAa;;IACxB,SAAgB,OAAO,EAAE,WAAW,EAAE,CAAA;IACtC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;IACvC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;gBAEtB,UAAU,EAAE,uBAAuB,EAAE,IAAI,EAAE,iBAAiB;IAMnE,OAAO,CAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,GAAG,SAAS,GAAG,eAAe,CAAC,IAAI,GAAG,IAAI,CAAC,GAAG,MAAM,GAAG,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAsD5J,SAAS,CAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;CAMzE"}
1
+ {"version":3,"file":"publisher.d.ts","sourceRoot":"","sources":["../../../src/ipns/publisher.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAChE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAc,MAAM,kBAAkB,CAAA;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACtE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAEpD,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,SAAS,CAAA;IACpB,MAAM,EAAE,eAAe,CAAA;IACvB,QAAQ,EAAE,QAAQ,CAAA;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,UAAU,CAAA;IACtB,OAAO,EAAE,WAAW,EAAE,CAAA;CACvB;AAED,qBAAa,aAAa;;IACxB,SAAgB,OAAO,EAAE,WAAW,EAAE,CAAA;IACtC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;IACvC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;gBAEtB,UAAU,EAAE,uBAAuB,EAAE,IAAI,EAAE,iBAAiB;IAMnE,OAAO,CAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,aAAa,CAAC;IA6D9F,SAAS,CAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;CAMzE"}