@helia/ipns 10.0.1 → 10.0.2-ef258e7e

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 (81) hide show
  1. package/README.md +3 -7
  2. package/dist/index.min.js +16 -5
  3. package/dist/index.min.js.map +4 -4
  4. package/dist/src/errors.d.ts +0 -8
  5. package/dist/src/errors.d.ts.map +1 -1
  6. package/dist/src/errors.js +0 -8
  7. package/dist/src/errors.js.map +1 -1
  8. package/dist/src/index.d.ts +58 -20
  9. package/dist/src/index.d.ts.map +1 -1
  10. package/dist/src/index.js +11 -11
  11. package/dist/src/index.js.map +1 -1
  12. package/dist/src/ipns/publisher.d.ts.map +1 -1
  13. package/dist/src/ipns/publisher.js +27 -14
  14. package/dist/src/ipns/publisher.js.map +1 -1
  15. package/dist/src/ipns/republisher.d.ts.map +1 -1
  16. package/dist/src/ipns/republisher.js +22 -9
  17. package/dist/src/ipns/republisher.js.map +1 -1
  18. package/dist/src/ipns/resolver.d.ts.map +1 -1
  19. package/dist/src/ipns/resolver.js +39 -17
  20. package/dist/src/ipns/resolver.js.map +1 -1
  21. package/dist/src/ipns.d.ts.map +1 -1
  22. package/dist/src/ipns.js +8 -8
  23. package/dist/src/ipns.js.map +1 -1
  24. package/dist/src/local-store.d.ts +4 -4
  25. package/dist/src/local-store.d.ts.map +1 -1
  26. package/dist/src/local-store.js +2 -1
  27. package/dist/src/local-store.js.map +1 -1
  28. package/dist/src/pb/ipns.d.ts +29 -29
  29. package/dist/src/pb/ipns.d.ts.map +1 -1
  30. package/dist/src/pb/ipns.js +15 -15
  31. package/dist/src/records.d.ts +27 -142
  32. package/dist/src/records.d.ts.map +1 -1
  33. package/dist/src/records.js +39 -46
  34. package/dist/src/records.js.map +1 -1
  35. package/dist/src/routing/helia.d.ts +5 -5
  36. package/dist/src/routing/helia.d.ts.map +1 -1
  37. package/dist/src/routing/helia.js +3 -3
  38. package/dist/src/routing/helia.js.map +1 -1
  39. package/dist/src/routing/index.d.ts +7 -7
  40. package/dist/src/routing/index.d.ts.map +1 -1
  41. package/dist/src/routing/index.js +2 -2
  42. package/dist/src/routing/index.js.map +1 -1
  43. package/dist/src/routing/local-store.d.ts +1 -1
  44. package/dist/src/routing/local-store.d.ts.map +1 -1
  45. package/dist/src/routing/local-store.js +3 -3
  46. package/dist/src/routing/local-store.js.map +1 -1
  47. package/dist/src/routing/pubsub.d.ts +11 -11
  48. package/dist/src/routing/pubsub.d.ts.map +1 -1
  49. package/dist/src/routing/pubsub.js +11 -12
  50. package/dist/src/routing/pubsub.js.map +1 -1
  51. package/dist/src/selector.d.ts +2 -2
  52. package/dist/src/selector.d.ts.map +1 -1
  53. package/dist/src/selector.js +13 -9
  54. package/dist/src/selector.js.map +1 -1
  55. package/dist/src/utils.d.ts +9 -10
  56. package/dist/src/utils.d.ts.map +1 -1
  57. package/dist/src/utils.js +20 -128
  58. package/dist/src/utils.js.map +1 -1
  59. package/dist/src/validator.d.ts +9 -3
  60. package/dist/src/validator.d.ts.map +1 -1
  61. package/dist/src/validator.js +57 -14
  62. package/dist/src/validator.js.map +1 -1
  63. package/package.json +6 -31
  64. package/src/errors.ts +0 -10
  65. package/src/index.ts +75 -25
  66. package/src/ipns/publisher.ts +27 -14
  67. package/src/ipns/republisher.ts +31 -13
  68. package/src/ipns/resolver.ts +39 -21
  69. package/src/ipns.ts +8 -8
  70. package/src/local-store.ts +8 -7
  71. package/src/pb/ipns.proto +1 -1
  72. package/src/pb/ipns.ts +37 -37
  73. package/src/records.ts +57 -210
  74. package/src/routing/helia.ts +6 -6
  75. package/src/routing/index.ts +7 -7
  76. package/src/routing/local-store.ts +6 -6
  77. package/src/routing/pubsub.ts +24 -25
  78. package/src/selector.ts +14 -11
  79. package/src/utils.ts +25 -147
  80. package/src/validator.ts +73 -16
  81. package/dist/typedoc-urls.json +0 -50
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAA;AAGzC,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAQtC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACxC,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAC5E,OAAO,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAErD,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;AAQlC,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;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,CAAC,YAAY,EAAE,QAAQ,EAAE,UAAU,GAAG,UAAU,CAS7H;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAE,IAAI,EAAE,UAAU,GAAG,UAAU,CAIpE;AAED,wBAAgB,iBAAiB,CAAE,GAAG,EAAE,UAAU,GAAG,YAAY,GAAG,UAAU,CA4B7E;AAcD,wBAAsB,mBAAmB,CAAE,UAAU,EAAE,UAAU,EAAE,gBAAgB,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,UAAU,CAAC,CAoEhK;AAED,wBAAgB,yBAAyB,CAAE,MAAM,EAAE,eAAe,GAAG,UAAU,CAK9E;AAED,wBAAgB,2BAA2B,CAAE,GAAG,EAAE,UAAU,GAAG,eAAe,CAE7E;AAED,wBAAgB,cAAc,CAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,SAAS,CAAC,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,UAAU,CAkBpJ;AAED,wBAAgB,aAAa,CAAE,GAAG,EAAE,UAAU,GAAG,cAAc,CAoB9D;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAE,KAAK,CAAC,EAAE,SAAS,GAAG,GAAG,GAAG,eAAe,GAAG,MAAM,GAAG,MAAM,CAsC1F;AAMD,wBAAgB,YAAY,CAAE,GAAG,CAAC,EAAE,SAAS,GAAG,GAAG,GAAG,eAAe,GAAG,MAAM,GAAG;IAAE,MAAM,EAAE,eAAe,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CA4DzH"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAA;AAGzC,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAStC,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACxC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAEjD,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;AAGlC,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,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,GAAG,OAAO,CAerE;AAMD,wBAAgB,WAAW,CAAE,GAAG,CAAC,EAAE,GAAG,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,EAAE,CAAC,CAAC,CAcjF;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAE,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,CAAC,YAAY,EAAE,QAAQ,EAAE,UAAU,GAAG,UAAU,CAQjI;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAE,IAAI,EAAE,UAAU,GAAG,UAAU,CAIpE;AAED,wBAAgB,uBAAuB,CAAE,KAAK,EAAE,UAAU,GAAG,MAAM,CAUlE;AAED,wBAAgB,yBAAyB,CAAE,MAAM,EAAE,eAAe,GAAG,UAAU,CAK9E;AAED,wBAAgB,2BAA2B,CAAE,GAAG,EAAE,UAAU,GAAG,eAAe,CAE7E;AAED,wBAAgB,oBAAoB,CAAE,IAAI,CAAC,EAAE,cAAc,GAAG,UAAU,CAAC,WAAW,CAAC,CAEpF;AAED,wBAAgB,oBAAoB,CAAE,GAAG,CAAC,EAAE,UAAU,GAAG,cAAc,CA2BtE;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAE,KAAK,CAAC,EAAE,SAAS,GAAG,GAAG,GAAG,eAAe,GAAG,MAAM,GAAG,MAAM,CAsC1F;AAMD,wBAAgB,YAAY,CAAE,GAAG,CAAC,EAAE,SAAS,GAAG,GAAG,GAAG,eAAe,GAAG,MAAM,GAAG;IAAE,MAAM,EAAE,eAAe,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CA4DzH;AAED,wBAAgB,6BAA6B,CAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,cAAc,GAAG,IAAI,CAoB3F"}
package/dist/src/utils.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { isPublicKey } from '@helia/interface';
2
+ import * as dagCbor from '@ipld/dag-cbor';
2
3
  import { InvalidParametersError } from '@libp2p/interface';
3
- import * as cborg from 'cborg';
4
4
  import { Key } from 'interface-datastore';
5
5
  import { base36 } from 'multiformats/bases/base36';
6
6
  import { base58btc } from 'multiformats/bases/base58';
@@ -10,16 +10,13 @@ import { concat as uint8ArrayConcat } from 'uint8arrays/concat';
10
10
  import { equals as uint8ArrayEquals } from 'uint8arrays/equals';
11
11
  import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string';
12
12
  import { toString as uint8ArrayToString } from 'uint8arrays/to-string';
13
+ import { withArrayBuffer } from 'uint8arrays/with-array-buffer';
13
14
  import { DHT_EXPIRY_MS, REPUBLISH_THRESHOLD } from "./constants.js";
14
- import { InvalidEmbeddedPublicKeyError, InvalidRecordDataError, InvalidValueError, RecordTooLargeError, SignatureVerificationError, UnsupportedValidityError } from "./errors.js";
15
- import { IpnsEntry } from "./pb/ipns.js";
15
+ import { InvalidRecordDataError, InvalidValueError, SignatureVerificationError, UnsupportedValidityError } from "./errors.js";
16
+ import { IPNSEntry } from "./pb/ipns.js";
16
17
  export const LIBP2P_KEY_CODEC = 0x72;
17
18
  export const IDENTITY_CODEC = 0x0;
18
19
  export const SHA2_256_CODEC = 0x12;
19
- /**
20
- * Limit valid IPNS record sizes to 10kb
21
- */
22
- const MAX_RECORD_SIZE = 1024 * 10;
23
20
  const IPNS_PREFIX = uint8ArrayFromString('/ipns/');
24
21
  export const IPNS_STRING_PREFIX = '/ipns/';
25
22
  export function isCodec(digest, codec) {
@@ -47,16 +44,15 @@ export function dhtRoutingKey(key) {
47
44
  export function ipnsMetadataKey(key) {
48
45
  return new Key(IPNS_METADATA_PREFIX + uint8ArrayToString(key, 'base32'), false);
49
46
  }
50
- export function shouldRepublish(ipnsRecord, created) {
47
+ export function shouldRepublish(created, expiry) {
51
48
  const now = Date.now();
52
49
  const dhtExpiry = created.getTime() + DHT_EXPIRY_MS;
53
- const recordExpiry = new Date(ipnsRecord.validity).getTime();
54
50
  // If the DHT expiry is within the threshold, republish it
55
51
  if (dhtExpiry - now < REPUBLISH_THRESHOLD) {
56
52
  return true;
57
53
  }
58
54
  // If the record expiry (based on validity/lifetime) is within the threshold, republish it
59
- if (recordExpiry - now < REPUBLISH_THRESHOLD) {
55
+ if (expiry.getTime() - now < REPUBLISH_THRESHOLD) {
60
56
  return true;
61
57
  }
62
58
  return false;
@@ -81,12 +77,11 @@ export function isLibp2pCID(obj) {
81
77
  */
82
78
  export function ipnsRecordDataForV1Sig(value, validityType, validity) {
83
79
  const validityTypeBuffer = uint8ArrayFromString(validityType);
84
- const valueBytes = uint8ArrayFromString(value);
85
80
  return uint8ArrayConcat([
86
- valueBytes,
81
+ value,
87
82
  validity,
88
83
  validityTypeBuffer
89
- ], valueBytes.byteLength + validity.byteLength + validityTypeBuffer.byteLength);
84
+ ], value.byteLength + validity.byteLength + validityTypeBuffer.byteLength);
90
85
  }
91
86
  /**
92
87
  * Utility for creating the record data for being signed
@@ -95,35 +90,7 @@ export function ipnsRecordDataForV2Sig(data) {
95
90
  const entryData = uint8ArrayFromString('ipns-signature:');
96
91
  return uint8ArrayConcat([entryData, data]);
97
92
  }
98
- export function marshalIPNSRecord(obj) {
99
- let publicKey = obj.publicKey?.toProtobuf();
100
- // do not embed public keys whose multihash is an identity hash as these can
101
- // be derived from the routing key
102
- if (obj.publicKey?.toMultihash().code === 0x00) {
103
- publicKey = undefined;
104
- }
105
- if ('signatureV1' in obj) {
106
- return IpnsEntry.encode({
107
- value: uint8ArrayFromString(obj.value),
108
- signatureV1: obj.signatureV1,
109
- validityType: obj.validityType,
110
- validity: uint8ArrayFromString(obj.validity),
111
- sequence: obj.sequence,
112
- ttl: obj.ttl,
113
- publicKey,
114
- signatureV2: obj.signatureV2,
115
- data: obj.data
116
- });
117
- }
118
- else {
119
- return IpnsEntry.encode({
120
- publicKey,
121
- signatureV2: obj.signatureV2,
122
- data: obj.data
123
- });
124
- }
125
- }
126
- function valueToString(value) {
93
+ export function ipnsRecordValueToString(value) {
127
94
  // handle legacy case where record value is raw CID bytes
128
95
  try {
129
96
  const cid = CID.decode(value);
@@ -134,67 +101,6 @@ function valueToString(value) {
134
101
  }
135
102
  return uint8ArrayToString(value);
136
103
  }
137
- export async function unmarshalIPNSRecord(routingKey, marshalledRecord, keychain, options) {
138
- if (marshalledRecord.byteLength > MAX_RECORD_SIZE) {
139
- throw new RecordTooLargeError('The record is too large');
140
- }
141
- const message = IpnsEntry.decode(marshalledRecord);
142
- // Check if we have the data field. If we don't, we fail. We've been producing
143
- // V1+V2 records for quite a while and we don't support V1-only records during
144
- // validation any more
145
- if (message.signatureV2 == null || message.data == null) {
146
- throw new SignatureVerificationError('Missing data or signatureV2');
147
- }
148
- const data = parseCborData(message.data);
149
- const validity = uint8ArrayToString(data.Validity);
150
- let publicKey;
151
- // try to extract public key from routing key
152
- const routingMultihash = multihashFromIPNSRoutingKey(routingKey);
153
- // identity hash
154
- if (isCodec(routingMultihash, 0x0)) {
155
- publicKey = await keychain.loadPublicKeyFromProtobuf(routingMultihash.digest, options);
156
- }
157
- // otherwise try to load key from message
158
- if (publicKey == null && message.publicKey != null) {
159
- publicKey = await keychain.loadPublicKeyFromProtobuf(message.publicKey, options);
160
- }
161
- if (publicKey == null) {
162
- throw new InvalidEmbeddedPublicKeyError('Could not extract public key from IPNS record or routing key');
163
- }
164
- if (message.value != null && message.signatureV1 != null) {
165
- // V1+V2
166
- validateCborDataMatchesPbData(message);
167
- return {
168
- value: valueToString(data.Value),
169
- validityType: IpnsEntry.ValidityType.EOL,
170
- validity,
171
- sequence: data.Sequence,
172
- ttl: data.TTL,
173
- publicKey,
174
- signatureV1: message.signatureV1,
175
- signatureV2: message.signatureV2,
176
- data: message.data,
177
- bytes: marshalledRecord
178
- };
179
- }
180
- else if (message.signatureV2 != null) {
181
- // V2-only
182
- return {
183
- value: valueToString(data.Value),
184
- validityType: IpnsEntry.ValidityType.EOL,
185
- validity,
186
- sequence: data.Sequence,
187
- ttl: data.TTL,
188
- publicKey,
189
- signatureV2: message.signatureV2,
190
- data: message.data,
191
- bytes: marshalledRecord
192
- };
193
- }
194
- else {
195
- throw new Error('invalid record: does not include signatureV1 or signatureV2');
196
- }
197
- }
198
104
  export function multihashToIPNSRoutingKey(digest) {
199
105
  return uint8ArrayConcat([
200
106
  IPNS_PREFIX,
@@ -204,29 +110,19 @@ export function multihashToIPNSRoutingKey(digest) {
204
110
  export function multihashFromIPNSRoutingKey(key) {
205
111
  return Digest.decode(key.slice(IPNS_PREFIX.length));
206
112
  }
207
- export function createCborData(value, validityType, validity, sequence, ttl) {
208
- let ValidityType;
209
- if (validityType === IpnsEntry.ValidityType.EOL) {
210
- ValidityType = 0;
211
- }
212
- else {
213
- throw new UnsupportedValidityError('The validity type is unsupported');
214
- }
215
- const data = {
216
- Value: uint8ArrayFromString(value),
217
- Validity: validity,
218
- ValidityType,
219
- Sequence: sequence,
220
- TTL: ttl
221
- };
222
- return cborg.encode(data);
113
+ export function encodeExtensibleData(data) {
114
+ return withArrayBuffer(dagCbor.encode(data));
223
115
  }
224
- export function parseCborData(buf) {
225
- const data = cborg.decode(buf);
116
+ export function decodeExtensibleData(buf) {
117
+ if (buf == null) {
118
+ throw new InvalidRecordDataError('Record data is missing');
119
+ }
120
+ const data = dagCbor.decode(buf);
121
+ // @ts-expect-error TODO: remove typescript enums
226
122
  if (data.ValidityType === 0) {
227
- data.ValidityType = IpnsEntry.ValidityType.EOL;
123
+ data.ValidityType = IPNSEntry.ValidityType.EOL;
228
124
  }
229
- else {
125
+ if (data.ValidityType !== IPNSEntry.ValidityType.EOL) {
230
126
  throw new UnsupportedValidityError('The validity type is unsupported');
231
127
  }
232
128
  if (Number.isInteger(data.Sequence)) {
@@ -328,11 +224,7 @@ export function normalizeKey(key) {
328
224
  }
329
225
  throw new InvalidValueError('Value must be a valid IPNS path starting with /');
330
226
  }
331
- function validateCborDataMatchesPbData(entry) {
332
- if (entry.data == null) {
333
- throw new InvalidRecordDataError('Record data is missing');
334
- }
335
- const data = parseCborData(entry.data);
227
+ export function validateCborDataMatchesPbData(entry, data) {
336
228
  if (!uint8ArrayEquals(data.Value, entry.value ?? new Uint8Array(0))) {
337
229
  throw new SignatureVerificationError('Field "value" did not match between protobuf and CBOR');
338
230
  }
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,18 @@
1
- import type { IPNSRecord } from './index.ts';
1
+ import { IPNSEntry } from './pb/ipns.ts';
2
+ import type { Keychain } from '@ipshipyard/keychain';
2
3
  import type { AbortOptions } from '@libp2p/interface';
3
4
  /**
4
5
  * Validate the given IPNS record against the given routing key.
5
6
  *
7
+ * Ensure that
8
+ * - SignatureV2 and Data are present
9
+ * - ValidityType and Validity are of valid types and have a value
10
+ * - CBOR data matches protobuf if it's a V1+V2 record
11
+ *
6
12
  * @see https://specs.ipfs.tech/ipns/ipns-record/#routing-record for the binary
7
13
  * format of the routing key
8
14
  */
9
- export declare function ipnsValidator(record: IPNSRecord, options?: AbortOptions): Promise<void>;
15
+ export declare function ipnsValidator(routingKey: Uint8Array, marshalledRecord: Uint8Array, keychain: Keychain, options?: AbortOptions): Promise<IPNSEntry>;
10
16
  /**
11
17
  * Returns the number of milliseconds until the record expires.
12
18
  * If the record is already expired, returns 0.
@@ -14,5 +20,5 @@ export declare function ipnsValidator(record: IPNSRecord, options?: AbortOptions
14
20
  * @param record - The IPNS record to validate.
15
21
  * @returns The number of milliseconds until the record expires, or 0 if the record is already expired.
16
22
  */
17
- export declare function validFor(record: IPNSRecord): number;
23
+ export declare function validFor(record: IPNSEntry): number;
18
24
  //# sourceMappingURL=validator.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../src/validator.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAErD;;;;;GAKG;AACH,wBAAsB,aAAa,CAAE,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA2B9F;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAE,MAAM,EAAE,UAAU,GAAG,MAAM,CAiBpD"}
1
+ {"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../src/validator.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAGxC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAA;AACpD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAOrD;;;;;;;;;;GAUG;AACH,wBAAsB,aAAa,CAAE,UAAU,EAAE,UAAU,EAAE,gBAAgB,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,SAAS,CAAC,CAsEzJ;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAE,MAAM,EAAE,SAAS,GAAG,MAAM,CAmBnD"}
@@ -1,22 +1,59 @@
1
1
  import NanoDate from 'timestamp-nano';
2
- import { InvalidEmbeddedPublicKeyError, RecordExpiredError, SignatureVerificationError, UnsupportedValidityError } from "./errors.js";
3
- import { IpnsEntry } from "./pb/ipns.js";
4
- import { ipnsRecordDataForV2Sig } from "./utils.js";
2
+ import { toString as uint8ArrayToString } from 'uint8arrays/to-string';
3
+ import { InvalidEmbeddedPublicKeyError, RecordExpiredError, RecordTooLargeError, SignatureVerificationError, UnsupportedValidityError } from "./errors.js";
4
+ import { IPNSEntry } from "./pb/ipns.js";
5
+ import { decodeExtensibleData, ipnsRecordDataForV2Sig, isCodec, multihashFromIPNSRoutingKey, validateCborDataMatchesPbData } from "./utils.js";
6
+ /**
7
+ * Limit valid IPNS record sizes to 10kb
8
+ */
9
+ const MAX_RECORD_SIZE = 1024 * 10;
5
10
  /**
6
11
  * Validate the given IPNS record against the given routing key.
7
12
  *
13
+ * Ensure that
14
+ * - SignatureV2 and Data are present
15
+ * - ValidityType and Validity are of valid types and have a value
16
+ * - CBOR data matches protobuf if it's a V1+V2 record
17
+ *
8
18
  * @see https://specs.ipfs.tech/ipns/ipns-record/#routing-record for the binary
9
19
  * format of the routing key
10
20
  */
11
- export async function ipnsValidator(record, options) {
12
- if (record.publicKey == null) {
13
- throw new InvalidEmbeddedPublicKeyError('The record had no public key associated with it');
21
+ export async function ipnsValidator(routingKey, marshalledRecord, keychain, options) {
22
+ if (marshalledRecord.byteLength > MAX_RECORD_SIZE) {
23
+ throw new RecordTooLargeError('The record is too large');
24
+ }
25
+ const record = IPNSEntry.decode(marshalledRecord);
26
+ // Check if we have the data field. If we don't, we fail. We've been producing
27
+ // V1+V2 records for quite a while and we don't support V1-only records during
28
+ // validation any more
29
+ if (record.signatureV2 == null) {
30
+ throw new SignatureVerificationError('Missing signatureV2');
31
+ }
32
+ const data = decodeExtensibleData(record.data);
33
+ const validity = uint8ArrayToString(data.Validity);
34
+ let publicKey;
35
+ // try to extract public key from routing key
36
+ const routingMultihash = multihashFromIPNSRoutingKey(routingKey);
37
+ // identity hash
38
+ if (isCodec(routingMultihash, 0x0)) {
39
+ publicKey = await keychain.loadPublicKeyFromProtobuf(routingMultihash.digest, options);
40
+ }
41
+ // otherwise try to load key from message
42
+ if (publicKey == null && record.publicKey != null) {
43
+ publicKey = await keychain.loadPublicKeyFromProtobuf(record.publicKey, options);
44
+ }
45
+ if (publicKey == null) {
46
+ throw new InvalidEmbeddedPublicKeyError('Could not extract public key from IPNS record or routing key');
14
47
  }
15
48
  // Validate Signature V2
16
49
  let isValid;
17
50
  try {
51
+ if (record.data == null) {
52
+ // n.b. decodeExtensibleData would have thrown if record data was missing
53
+ throw new Error('Missing data');
54
+ }
18
55
  const dataForSignature = ipnsRecordDataForV2Sig(record.data);
19
- isValid = await record.publicKey.verify(dataForSignature, record.signatureV2, options);
56
+ isValid = await publicKey.verify(dataForSignature, record.signatureV2, options);
20
57
  }
21
58
  catch {
22
59
  isValid = false;
@@ -25,14 +62,19 @@ export async function ipnsValidator(record, options) {
25
62
  throw new SignatureVerificationError('Record signature verification failed');
26
63
  }
27
64
  // Validate according to the validity type
28
- if (record.validityType === IpnsEntry.ValidityType.EOL) {
29
- if (NanoDate.fromString(record.validity).toDate().getTime() < Date.now()) {
65
+ if (data.ValidityType === IPNSEntry.ValidityType.EOL) {
66
+ if (NanoDate.fromString(validity).toDate().getTime() < Date.now()) {
30
67
  throw new RecordExpiredError('record has expired');
31
68
  }
32
69
  }
33
- else if (record.validityType != null) {
34
- throw new UnsupportedValidityError('The validity type is unsupported');
70
+ else if (data.ValidityType != null) {
71
+ throw new UnsupportedValidityError(`The validity type ${data.ValidityType} is unsupported`);
72
+ }
73
+ if (record.value != null && record.signatureV1 != null) {
74
+ // V1+V2
75
+ validateCborDataMatchesPbData(record, data);
35
76
  }
77
+ return record;
36
78
  }
37
79
  /**
38
80
  * Returns the number of milliseconds until the record expires.
@@ -42,13 +84,14 @@ export async function ipnsValidator(record, options) {
42
84
  * @returns The number of milliseconds until the record expires, or 0 if the record is already expired.
43
85
  */
44
86
  export function validFor(record) {
45
- if (record.validityType !== IpnsEntry.ValidityType.EOL) {
87
+ const data = decodeExtensibleData(record.data);
88
+ if (data.ValidityType !== IPNSEntry.ValidityType.EOL) {
46
89
  throw new UnsupportedValidityError();
47
90
  }
48
- if (record.validity == null) {
91
+ if (data.Validity == null) {
49
92
  throw new UnsupportedValidityError();
50
93
  }
51
- const validUntil = NanoDate.fromString(record.validity).toDate().getTime();
94
+ const validUntil = NanoDate.fromString(uint8ArrayToString(data.Validity)).toDate().getTime();
52
95
  const now = Date.now();
53
96
  if (validUntil < now) {
54
97
  return 0;
@@ -1 +1 @@
1
- {"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/validator.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,gBAAgB,CAAA;AACrC,OAAO,EAAE,6BAA6B,EAAE,kBAAkB,EAAE,0BAA0B,EAAE,wBAAwB,EAAE,MAAM,aAAa,CAAA;AACrI,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AACxC,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAA;AAInD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAE,MAAkB,EAAE,OAAsB;IAC7E,IAAI,MAAM,CAAC,SAAS,IAAI,IAAI,EAAE,CAAC;QAC7B,MAAM,IAAI,6BAA6B,CAAC,iDAAiD,CAAC,CAAA;IAC5F,CAAC;IAED,wBAAwB;IACxB,IAAI,OAAO,CAAA;IAEX,IAAI,CAAC;QACH,MAAM,gBAAgB,GAAG,sBAAsB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAC5D,OAAO,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,CAAA;IACxF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,GAAG,KAAK,CAAA;IACjB,CAAC;IAED,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,0BAA0B,CAAC,sCAAsC,CAAC,CAAA;IAC9E,CAAC;IAED,0CAA0C;IAC1C,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC;QACvD,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;YACzE,MAAM,IAAI,kBAAkB,CAAC,oBAAoB,CAAC,CAAA;QACpD,CAAC;IACH,CAAC;SAAM,IAAI,MAAM,CAAC,YAAY,IAAI,IAAI,EAAE,CAAC;QACvC,MAAM,IAAI,wBAAwB,CAAC,kCAAkC,CAAC,CAAA;IACxE,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,QAAQ,CAAE,MAAkB;IAC1C,IAAI,MAAM,CAAC,YAAY,KAAK,SAAS,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC;QACvD,MAAM,IAAI,wBAAwB,EAAE,CAAA;IACtC,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,IAAI,IAAI,EAAE,CAAC;QAC5B,MAAM,IAAI,wBAAwB,EAAE,CAAA;IACtC,CAAC;IAED,MAAM,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,CAAA;IAC1E,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IAEtB,IAAI,UAAU,GAAG,GAAG,EAAE,CAAC;QACrB,OAAO,CAAC,CAAA;IACV,CAAC;IAED,OAAO,UAAU,GAAG,GAAG,CAAA;AACzB,CAAC"}
1
+ {"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/validator.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@helia/ipns",
3
- "version": "10.0.1",
3
+ "version": "10.0.2-ef258e7e",
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",
@@ -20,22 +20,6 @@
20
20
  ],
21
21
  "type": "module",
22
22
  "types": "./dist/src/index.d.ts",
23
- "typesVersions": {
24
- "*": {
25
- "*": [
26
- "*",
27
- "dist/*",
28
- "dist/src/*",
29
- "dist/src/*/index"
30
- ],
31
- "src/*": [
32
- "*",
33
- "dist/*",
34
- "dist/src/*",
35
- "dist/src/*/index"
36
- ]
37
- }
38
- },
39
23
  "files": [
40
24
  "src",
41
25
  "dist",
@@ -47,16 +31,6 @@
47
31
  "types": "./dist/src/index.d.ts",
48
32
  "import": "./dist/src/index.js",
49
33
  "module-sync": "./dist/src/index.js"
50
- },
51
- "./dns-resolvers": {
52
- "types": "./dist/src/dns-resolvers/index.d.ts",
53
- "import": "./dist/src/dns-resolvers/index.js",
54
- "module-sync": "./dist/src/dns-resolvers/index.js"
55
- },
56
- "./routing": {
57
- "types": "./dist/src/routing/index.d.ts",
58
- "import": "./dist/src/routing/index.js",
59
- "module-sync": "./dist/src/routing/index.js"
60
34
  }
61
35
  },
62
36
  "scripts": {
@@ -76,7 +50,10 @@
76
50
  "test:electron-main": "aegir test -t electron-main"
77
51
  },
78
52
  "dependencies": {
79
- "@helia/interface": "^7.0.0",
53
+ "@helia/interface": "7.0.1-ef258e7e",
54
+ "@ipld/dag-cbor": "^10.0.1",
55
+ "@ipshipyard/crypto": "^1.1.0",
56
+ "@ipshipyard/keychain": "^1.0.2",
80
57
  "@libp2p/fetch": "^4.1.6",
81
58
  "@libp2p/interface": "^3.2.3",
82
59
  "@libp2p/kad-dht": "^16.3.2",
@@ -85,7 +62,6 @@
85
62
  "@libp2p/utils": "^7.2.2",
86
63
  "abort-error": "^1.0.2",
87
64
  "any-signal": "^4.2.0",
88
- "cborg": "^5.1.1",
89
65
  "delay": "^7.0.0",
90
66
  "interface-datastore": "^10.0.1",
91
67
  "multiformats": "^14.0.0",
@@ -97,9 +73,8 @@
97
73
  "uint8arrays": "^6.1.1"
98
74
  },
99
75
  "devDependencies": {
100
- "@ipshipyard/crypto": "^1.1.0",
101
- "@ipshipyard/keychain": "^1.0.2",
102
76
  "aegir": "^48.0.11",
77
+ "cborg": "^5.1.5",
103
78
  "datastore-core": "^12.0.1",
104
79
  "it-drain": "^3.0.12",
105
80
  "it-last": "^3.0.11",
package/src/errors.ts CHANGED
@@ -3,16 +3,6 @@ export class RecordsFailedValidationError extends Error {
3
3
  name = 'RecordsFailedValidationError'
4
4
  }
5
5
 
6
- export class UnsupportedMultibasePrefixError extends Error {
7
- static name = 'UnsupportedMultibasePrefixError'
8
- name = 'UnsupportedMultibasePrefixError'
9
- }
10
-
11
- export class UnsupportedMultihashCodecError extends Error {
12
- static name = 'UnsupportedMultihashCodecError'
13
- name = 'UnsupportedMultihashCodecError'
14
- }
15
-
16
6
  export class InvalidValueError extends Error {
17
7
  static name = 'InvalidValueError'
18
8
  name = 'InvalidValueError'