@dxos/hypercore 0.1.41 → 0.1.45-next.45667d4
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.
- package/dist/lib/browser/index.mjs.map +1 -1
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node/index.cjs.map +1 -1
- package/dist/lib/node/meta.json +1 -1
- package/dist/types/src/testing.d.ts +2 -2
- package/dist/types/src/testing.d.ts.map +1 -1
- package/package.json +10 -10
- package/src/crypto.ts +2 -2
- package/src/defaults.ts +4 -4
- package/src/hypercore-factory.test.ts +1 -1
- package/src/hypercore-protocol.test.ts +9 -9
- package/src/hypercore.test.ts +2 -2
- package/src/multiplexer.test.ts +2 -2
- package/src/multiplexer.ts +5 -5
- package/src/replicate.test.ts +2 -2
- package/src/streams.test.ts +2 -2
- package/src/testing.ts +2 -2
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/crypto.ts", "../../../src/defaults.ts", "../../../src/hypercore-factory.ts", "../../../src/util.ts", "../../../src/iterator.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2022 DXOS.org\n//\n\nimport { AbstractValueEncoding, Crypto } from 'hypercore';\nimport assert from 'node:assert';\nimport { callbackify } from 'node:util';\n\nimport { Codec, EncodingOptions } from '@dxos/codec-protobuf';\nimport { Signer, verifySignature } from '@dxos/crypto';\nimport { PublicKey } from '@dxos/keys';\n\n/**\n * Create encoding (e.g., from protobuf codec).\n */\nexport const createCodecEncoding = <T>(codec: Codec<T>, opts?: EncodingOptions): AbstractValueEncoding<T> => ({\n encode: (obj: T) => Buffer.from(codec.encode(obj, opts)),\n decode: (buffer: Buffer) => codec.decode(buffer, opts)
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2022 DXOS.org\n//\n\nimport { AbstractValueEncoding, Crypto } from 'hypercore';\nimport assert from 'node:assert';\nimport { callbackify } from 'node:util';\n\nimport { Codec, EncodingOptions } from '@dxos/codec-protobuf';\nimport { Signer, verifySignature } from '@dxos/crypto';\nimport { PublicKey } from '@dxos/keys';\n\n/**\n * Create encoding (e.g., from protobuf codec).\n */\nexport const createCodecEncoding = <T>(codec: Codec<T>, opts?: EncodingOptions): AbstractValueEncoding<T> => ({\n encode: (obj: T) => Buffer.from(codec.encode(obj, opts)),\n decode: (buffer: Buffer) => codec.decode(buffer, opts),\n});\n\n/**\n * Create a custom hypercore crypto signer.\n */\n// TODO(burdon): Create test without adding deps.\nexport const createCrypto = (signer: Signer, publicKey: PublicKey): Crypto => {\n assert(signer);\n assert(publicKey);\n\n return {\n sign: (message, secretKey, cb) => {\n callbackify(signer.sign.bind(signer!))(publicKey, message, (err, result) => {\n if (err) {\n cb(err, null);\n return;\n }\n\n cb(null, Buffer.from(result));\n });\n },\n\n verify: async (message, signature, key, cb) => {\n // NOTE: Uses the public key passed into function.\n callbackify(verifySignature)(publicKey, message, signature, cb);\n },\n };\n};\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport type { HypercoreOptions, ReadStreamOptions, ReplicationOptions, WriteStreamOptions } from 'hypercore';\n\n/**\n * https://github.com/hypercore-protocol/hypercore/tree/v9.12.0#var-feed--hypercorestorage-key-options\n */\nexport const defaultFeedOptions: HypercoreOptions = {\n createIfMissing: true,\n valueEncoding: 'binary',\n};\n\n/**\n * https://github.com/hypercore-protocol/hypercore/tree/v9.12.0#var-stream--feedcreatereadstreamoptions\n */\nexport const defaultReadStreamOptions: ReadStreamOptions = {\n start: 0,\n end: Infinity,\n snapshot: true,\n tail: false,\n live: false,\n timeout: 0,\n wait: true,\n batch: 1,\n};\n\n/**\n * https://github.com/hypercore-protocol/hypercore/tree/v9.12.0#var-stream--feedcreatewritestreamopts\n */\nexport const defaultWriteStreamOptions: WriteStreamOptions = {\n maxBlockSize: Infinity,\n};\n\n/**\n * https://github.com/hypercore-protocol/hypercore/tree/v9.12.0#var-stream--feedreplicateisinitiator-options\n */\nexport const defaultReplicateOptions: ReplicationOptions = {\n live: false,\n ack: false,\n download: true,\n upload: true,\n encrypted: true,\n noise: true,\n};\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport hypercore from 'hypercore';\nimport type { Hypercore, HypercoreOptions } from 'hypercore';\nimport assert from 'node:assert';\n\nimport { createStorage, Directory, StorageType } from '@dxos/random-access-storage';\n\nimport { py } from './util';\n\n/**\n * Creates feeds with default properties.\n */\nexport class HypercoreFactory<T> {\n // prettier-ignore\n constructor(\n private readonly _root: Directory = createStorage({ type: StorageType.RAM }).createDirectory(),\n private readonly _options?: HypercoreOptions\n ) {\n assert(this._root);\n }\n\n /**\n * Creates a feed using a storage factory prefixed with the feed's key.\n * NOTE: We have to use our `random-access-storage` implementation since the native ones\n * do not behave uniformly across platforms.\n */\n createFeed(publicKey: Buffer, options?: HypercoreOptions): Hypercore<T> {\n const directory = this._root.createDirectory(publicKey.toString());\n const storage = (filename: string) => directory.getOrCreateFile(filename).native;\n return hypercore(storage, publicKey, Object.assign({}, this._options, options));\n }\n\n /**\n * Creates and opens a feed.\n */\n async openFeed(publicKey: Buffer, options?: HypercoreOptions): Promise<Hypercore<T>> {\n const feed = this.createFeed(publicKey, options);\n await py(feed, feed.open)(); // TODO(burdon): Sometimes strange bug if done inside function.\n return feed;\n }\n}\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport util from 'node:util';\n\nexport const py = (obj: any, fn: Function) => util.promisify(fn.bind(obj));\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { Readable } from 'readable-stream';\nimport { Readable as StreamXReadable } from 'streamx';\n\n/**\n * Wraps streamx.Readable (hypercore.createReadStream) to a standard Readable stream.\n *\n * The read-stream package is mirror of the streams implementations in Node.js 18.9.0.\n * This function is here to standardize the cast in case there are incompatibilities\n * across different platforms.\n *\n * Hypercore createReadStream returns a `streamx` Readable, which does not close properly on destroy.\n *\n * https://github.com/nodejs/readable-stream\n * https://nodejs.org/api/stream.html#readable-streams\n * https://nodejs.org/dist/v18.9.0/docs/api/stream.html#readablewrapstream\n */\nexport const createReadable = (stream: StreamXReadable): Readable => {\n return new Readable({ objectMode: true }).wrap(stream as any);\n};\n\n/**\n * Converts streamx.Readable (hypercore.createReadStream) to an async iterator.\n *\n * https://github.com/tc39/proposal-async-iteration\n * https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-3.html#async-iteration\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Iterators_and_Generators\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols\n */\nexport const createAsyncIterator = (stream: Readable): AsyncIterator<any> => {\n return stream[Symbol.asyncIterator]();\n};\n"],
|
|
5
5
|
"mappings": ";;;AAKA,OAAOA,YAAY;AACnB,SAASC,mBAAmB;AAG5B,SAAiBC,uBAAuB;AAMjC,IAAMC,sBAAsB,CAAIC,OAAiBC,UAAsD;EAC5GC,QAAQ,CAACC,QAAWC,OAAOC,KAAKL,MAAME,OAAOC,KAAKF,IAAAA,CAAAA;EAClDK,QAAQ,CAACC,WAAmBP,MAAMM,OAAOC,QAAQN,IAAAA;AACnD;AAMO,IAAMO,eAAe,CAACC,QAAgBC,cAAiC;AAC5Ed,SAAOa,MAAAA;AACPb,SAAOc,SAAAA;AAEP,SAAO;IACLC,MAAM,CAACC,SAASC,WAAWC,OAAO;AAChCjB,kBAAYY,OAAOE,KAAKI,KAAKN,MAAAA,CAAAA,EAAUC,WAAWE,SAAS,CAACI,KAAKC,WAAW;AAC1E,YAAID,KAAK;AACPF,aAAGE,KAAK,IAAI;AACZ;QACF;AAEAF,WAAG,MAAMV,OAAOC,KAAKY,MAAAA,CAAAA;MACvB,CAAA;IACF;IAEAC,QAAQ,OAAON,SAASO,WAAWC,KAAKN,OAAO;AAE7CjB,kBAAYC,eAAAA,EAAiBY,WAAWE,SAASO,WAAWL,EAAAA;IAC9D;EACF;AACF;;;ACpCO,IAAMO,qBAAuC;EAClDC,iBAAiB;EACjBC,eAAe;AACjB;AAKO,IAAMC,2BAA8C;EACzDC,OAAO;EACPC,KAAKC;EACLC,UAAU;EACVC,MAAM;EACNC,MAAM;EACNC,SAAS;EACTC,MAAM;EACNC,OAAO;AACT;AAKO,IAAMC,4BAAgD;EAC3DC,cAAcR;AAChB;AAKO,IAAMS,0BAA8C;EACzDN,MAAM;EACNO,KAAK;EACLC,UAAU;EACVC,QAAQ;EACRC,WAAW;EACXC,OAAO;AACT;;;ACzCA,OAAOC,eAAe;AAEtB,OAAOC,aAAY;AAEnB,SAASC,eAA0BC,mBAAmB;;;ACJtD,OAAOC,UAAU;AAEV,IAAMC,KAAK,CAACC,KAAUC,OAAiBH,KAAKI,UAAUD,GAAGE,KAAKH,GAAAA,CAAAA;;;ADS9D,IAAMI,mBAAN,MAAMA;;EAEXC,YACmBC,QAAmBC,cAAc;IAAEC,MAAMC,YAAYC;EAAI,CAAA,EAAGC,gBAAe,GAC3EC,UACjB;iBAFiBN;oBACAM;AAEjBC,IAAAA,QAAO,KAAKP,KAAK;EACnB;;;;;;EAOAQ,WAAWC,WAAmBC,SAA0C;AACtE,UAAMC,YAAY,KAAKX,MAAMK,gBAAgBI,UAAUG,SAAQ,CAAA;AAC/D,UAAMC,UAAU,CAACC,aAAqBH,UAAUI,gBAAgBD,QAAAA,EAAUE;AAC1E,WAAOC,UAAUJ,SAASJ,WAAWS,OAAOC,OAAO,CAAC,GAAG,KAAKb,UAAUI,OAAAA,CAAAA;EACxE;;;;EAKA,MAAMU,SAASX,WAAmBC,SAAmD;AACnF,UAAMW,OAAO,KAAKb,WAAWC,WAAWC,OAAAA;AACxC,UAAMY,GAAGD,MAAMA,KAAKE,IAAI,EAAA;AACxB,WAAOF;EACT;AACF;;;AEvCA,SAASG,gBAAgB;AAgBlB,IAAMC,iBAAiB,CAACC,WAAsC;AACnE,SAAO,IAAIF,SAAS;IAAEG,YAAY;EAAK,CAAA,EAAGC,KAAKF,MAAAA;AACjD;AAUO,IAAMG,sBAAsB,CAACH,WAAyC;AAC3E,SAAOA,OAAOI,OAAOC,aAAa,EAAC;AACrC;",
|
|
6
6
|
"names": ["assert", "callbackify", "verifySignature", "createCodecEncoding", "codec", "opts", "encode", "obj", "Buffer", "from", "decode", "buffer", "createCrypto", "signer", "publicKey", "sign", "message", "secretKey", "cb", "bind", "err", "result", "verify", "signature", "key", "defaultFeedOptions", "createIfMissing", "valueEncoding", "defaultReadStreamOptions", "start", "end", "Infinity", "snapshot", "tail", "live", "timeout", "wait", "batch", "defaultWriteStreamOptions", "maxBlockSize", "defaultReplicateOptions", "ack", "download", "upload", "encrypted", "noise", "hypercore", "assert", "createStorage", "StorageType", "util", "py", "obj", "fn", "promisify", "bind", "HypercoreFactory", "constructor", "_root", "createStorage", "type", "StorageType", "RAM", "createDirectory", "_options", "assert", "createFeed", "publicKey", "options", "directory", "toString", "storage", "filename", "getOrCreateFile", "native", "hypercore", "Object", "assign", "openFeed", "feed", "py", "open", "Readable", "createReadable", "stream", "objectMode", "wrap", "createAsyncIterator", "Symbol", "asyncIterator"]
|
|
7
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"inputs":{"packages/common/hypercore/src/crypto.ts":{"bytes":
|
|
1
|
+
{"inputs":{"packages/common/hypercore/src/crypto.ts":{"bytes":4381,"imports":[{"path":"@dxos/node-std/assert","kind":"import-statement","external":true},{"path":"@dxos/node-std/util","kind":"import-statement","external":true},{"path":"@dxos/crypto","kind":"import-statement","external":true}]},"packages/common/hypercore/src/defaults.ts":{"bytes":3706,"imports":[]},"packages/common/hypercore/src/util.ts":{"bytes":713,"imports":[{"path":"@dxos/node-std/util","kind":"import-statement","external":true}]},"packages/common/hypercore/src/hypercore-factory.ts":{"bytes":4820,"imports":[{"path":"hypercore","kind":"import-statement","external":true},{"path":"@dxos/node-std/assert","kind":"import-statement","external":true},{"path":"@dxos/random-access-storage","kind":"import-statement","external":true},{"path":"packages/common/hypercore/src/util.ts","kind":"import-statement","original":"./util"}]},"packages/common/hypercore/src/iterator.ts":{"bytes":3893,"imports":[{"path":"readable-stream","kind":"import-statement","external":true}]},"packages/common/hypercore/src/index.ts":{"bytes":659,"imports":[{"path":"packages/common/hypercore/src/crypto.ts","kind":"import-statement","original":"./crypto"},{"path":"packages/common/hypercore/src/defaults.ts","kind":"import-statement","original":"./defaults"},{"path":"packages/common/hypercore/src/hypercore-factory.ts","kind":"import-statement","original":"./hypercore-factory"},{"path":"packages/common/hypercore/src/iterator.ts","kind":"import-statement","original":"./iterator"}]}},"outputs":{"packages/common/hypercore/dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":8719},"packages/common/hypercore/dist/lib/browser/index.mjs":{"imports":[{"path":"@dxos/node-std/assert","kind":"import-statement","external":true},{"path":"@dxos/node-std/util","kind":"import-statement","external":true},{"path":"@dxos/crypto","kind":"import-statement","external":true},{"path":"hypercore","kind":"import-statement","external":true},{"path":"@dxos/node-std/assert","kind":"import-statement","external":true},{"path":"@dxos/random-access-storage","kind":"import-statement","external":true},{"path":"@dxos/node-std/util","kind":"import-statement","external":true},{"path":"readable-stream","kind":"import-statement","external":true}],"exports":["HypercoreFactory","createAsyncIterator","createCodecEncoding","createCrypto","createReadable","defaultFeedOptions","defaultReadStreamOptions","defaultReplicateOptions","defaultWriteStreamOptions"],"entryPoint":"packages/common/hypercore/src/index.ts","inputs":{"packages/common/hypercore/src/crypto.ts":{"bytesInOutput":782},"packages/common/hypercore/src/index.ts":{"bytesInOutput":0},"packages/common/hypercore/src/defaults.ts":{"bytesInOutput":426},"packages/common/hypercore/src/hypercore-factory.ts":{"bytesInOutput":1074},"packages/common/hypercore/src/util.ts":{"bytesInOutput":92},"packages/common/hypercore/src/iterator.ts":{"bytesInOutput":230}},"bytes":3176}}}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/index.ts", "../../../src/crypto.ts", "../../../src/defaults.ts", "../../../src/hypercore-factory.ts", "../../../src/util.ts", "../../../src/iterator.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2021 DXOS.org\n//\n\nexport * from './crypto';\nexport * from './defaults';\nexport * from './hypercore-factory';\nexport * from './iterator';\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { AbstractValueEncoding, Crypto } from 'hypercore';\nimport assert from 'node:assert';\nimport { callbackify } from 'node:util';\n\nimport { Codec, EncodingOptions } from '@dxos/codec-protobuf';\nimport { Signer, verifySignature } from '@dxos/crypto';\nimport { PublicKey } from '@dxos/keys';\n\n/**\n * Create encoding (e.g., from protobuf codec).\n */\nexport const createCodecEncoding = <T>(codec: Codec<T>, opts?: EncodingOptions): AbstractValueEncoding<T> => ({\n encode: (obj: T) => Buffer.from(codec.encode(obj, opts)),\n decode: (buffer: Buffer) => codec.decode(buffer, opts)
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2021 DXOS.org\n//\n\nexport * from './crypto';\nexport * from './defaults';\nexport * from './hypercore-factory';\nexport * from './iterator';\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { AbstractValueEncoding, Crypto } from 'hypercore';\nimport assert from 'node:assert';\nimport { callbackify } from 'node:util';\n\nimport { Codec, EncodingOptions } from '@dxos/codec-protobuf';\nimport { Signer, verifySignature } from '@dxos/crypto';\nimport { PublicKey } from '@dxos/keys';\n\n/**\n * Create encoding (e.g., from protobuf codec).\n */\nexport const createCodecEncoding = <T>(codec: Codec<T>, opts?: EncodingOptions): AbstractValueEncoding<T> => ({\n encode: (obj: T) => Buffer.from(codec.encode(obj, opts)),\n decode: (buffer: Buffer) => codec.decode(buffer, opts),\n});\n\n/**\n * Create a custom hypercore crypto signer.\n */\n// TODO(burdon): Create test without adding deps.\nexport const createCrypto = (signer: Signer, publicKey: PublicKey): Crypto => {\n assert(signer);\n assert(publicKey);\n\n return {\n sign: (message, secretKey, cb) => {\n callbackify(signer.sign.bind(signer!))(publicKey, message, (err, result) => {\n if (err) {\n cb(err, null);\n return;\n }\n\n cb(null, Buffer.from(result));\n });\n },\n\n verify: async (message, signature, key, cb) => {\n // NOTE: Uses the public key passed into function.\n callbackify(verifySignature)(publicKey, message, signature, cb);\n },\n };\n};\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport type { HypercoreOptions, ReadStreamOptions, ReplicationOptions, WriteStreamOptions } from 'hypercore';\n\n/**\n * https://github.com/hypercore-protocol/hypercore/tree/v9.12.0#var-feed--hypercorestorage-key-options\n */\nexport const defaultFeedOptions: HypercoreOptions = {\n createIfMissing: true,\n valueEncoding: 'binary',\n};\n\n/**\n * https://github.com/hypercore-protocol/hypercore/tree/v9.12.0#var-stream--feedcreatereadstreamoptions\n */\nexport const defaultReadStreamOptions: ReadStreamOptions = {\n start: 0,\n end: Infinity,\n snapshot: true,\n tail: false,\n live: false,\n timeout: 0,\n wait: true,\n batch: 1,\n};\n\n/**\n * https://github.com/hypercore-protocol/hypercore/tree/v9.12.0#var-stream--feedcreatewritestreamopts\n */\nexport const defaultWriteStreamOptions: WriteStreamOptions = {\n maxBlockSize: Infinity,\n};\n\n/**\n * https://github.com/hypercore-protocol/hypercore/tree/v9.12.0#var-stream--feedreplicateisinitiator-options\n */\nexport const defaultReplicateOptions: ReplicationOptions = {\n live: false,\n ack: false,\n download: true,\n upload: true,\n encrypted: true,\n noise: true,\n};\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport hypercore from 'hypercore';\nimport type { Hypercore, HypercoreOptions } from 'hypercore';\nimport assert from 'node:assert';\n\nimport { createStorage, Directory, StorageType } from '@dxos/random-access-storage';\n\nimport { py } from './util';\n\n/**\n * Creates feeds with default properties.\n */\nexport class HypercoreFactory<T> {\n // prettier-ignore\n constructor(\n private readonly _root: Directory = createStorage({ type: StorageType.RAM }).createDirectory(),\n private readonly _options?: HypercoreOptions\n ) {\n assert(this._root);\n }\n\n /**\n * Creates a feed using a storage factory prefixed with the feed's key.\n * NOTE: We have to use our `random-access-storage` implementation since the native ones\n * do not behave uniformly across platforms.\n */\n createFeed(publicKey: Buffer, options?: HypercoreOptions): Hypercore<T> {\n const directory = this._root.createDirectory(publicKey.toString());\n const storage = (filename: string) => directory.getOrCreateFile(filename).native;\n return hypercore(storage, publicKey, Object.assign({}, this._options, options));\n }\n\n /**\n * Creates and opens a feed.\n */\n async openFeed(publicKey: Buffer, options?: HypercoreOptions): Promise<Hypercore<T>> {\n const feed = this.createFeed(publicKey, options);\n await py(feed, feed.open)(); // TODO(burdon): Sometimes strange bug if done inside function.\n return feed;\n }\n}\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport util from 'node:util';\n\nexport const py = (obj: any, fn: Function) => util.promisify(fn.bind(obj));\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { Readable } from 'readable-stream';\nimport { Readable as StreamXReadable } from 'streamx';\n\n/**\n * Wraps streamx.Readable (hypercore.createReadStream) to a standard Readable stream.\n *\n * The read-stream package is mirror of the streams implementations in Node.js 18.9.0.\n * This function is here to standardize the cast in case there are incompatibilities\n * across different platforms.\n *\n * Hypercore createReadStream returns a `streamx` Readable, which does not close properly on destroy.\n *\n * https://github.com/nodejs/readable-stream\n * https://nodejs.org/api/stream.html#readable-streams\n * https://nodejs.org/dist/v18.9.0/docs/api/stream.html#readablewrapstream\n */\nexport const createReadable = (stream: StreamXReadable): Readable => {\n return new Readable({ objectMode: true }).wrap(stream as any);\n};\n\n/**\n * Converts streamx.Readable (hypercore.createReadStream) to an async iterator.\n *\n * https://github.com/tc39/proposal-async-iteration\n * https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-3.html#async-iteration\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Iterators_and_Generators\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Iteration_protocols\n */\nexport const createAsyncIterator = (stream: Readable): AsyncIterator<any> => {\n return stream[Symbol.asyncIterator]();\n};\n"],
|
|
5
5
|
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;;;;;ACKA,yBAAmB;AACnB,uBAA4B;AAG5B,oBAAwC;AAMjC,IAAMA,sBAAsB,CAAIC,OAAiBC,UAAsD;EAC5GC,QAAQ,CAACC,QAAWC,OAAOC,KAAKL,MAAME,OAAOC,KAAKF,IAAAA,CAAAA;EAClDK,QAAQ,CAACC,WAAmBP,MAAMM,OAAOC,QAAQN,IAAAA;AACnD;AAMO,IAAMO,eAAe,CAACC,QAAgBC,cAAiC;AAC5EC,yBAAAA,SAAOF,MAAAA;AACPE,yBAAAA,SAAOD,SAAAA;AAEP,SAAO;IACLE,MAAM,CAACC,SAASC,WAAWC,OAAO;AAChCC,wCAAYP,OAAOG,KAAKK,KAAKR,MAAAA,CAAAA,EAAUC,WAAWG,SAAS,CAACK,KAAKC,WAAW;AAC1E,YAAID,KAAK;AACPH,aAAGG,KAAK,IAAI;AACZ;QACF;AAEAH,WAAG,MAAMX,OAAOC,KAAKc,MAAAA,CAAAA;MACvB,CAAA;IACF;IAEAC,QAAQ,OAAOP,SAASQ,WAAWC,KAAKP,OAAO;AAE7CC,wCAAYO,6BAAAA,EAAiBb,WAAWG,SAASQ,WAAWN,EAAAA;IAC9D;EACF;AACF;;;ACpCO,IAAMS,qBAAuC;EAClDC,iBAAiB;EACjBC,eAAe;AACjB;AAKO,IAAMC,2BAA8C;EACzDC,OAAO;EACPC,KAAKC;EACLC,UAAU;EACVC,MAAM;EACNC,MAAM;EACNC,SAAS;EACTC,MAAM;EACNC,OAAO;AACT;AAKO,IAAMC,4BAAgD;EAC3DC,cAAcR;AAChB;AAKO,IAAMS,0BAA8C;EACzDN,MAAM;EACNO,KAAK;EACLC,UAAU;EACVC,QAAQ;EACRC,WAAW;EACXC,OAAO;AACT;;;ACzCA,uBAAsB;AAEtB,IAAAC,sBAAmB;AAEnB,mCAAsD;;;ACJtD,IAAAC,oBAAiB;AAEV,IAAMC,KAAK,CAACC,KAAUC,OAAiBC,kBAAAA,QAAKC,UAAUF,GAAGG,KAAKJ,GAAAA,CAAAA;;;ADS9D,IAAMK,mBAAN,MAAMA;;EAEXC,YACmBC,YAAmBC,4CAAc;IAAEC,MAAMC,yCAAYC;EAAI,CAAA,EAAGC,gBAAe,GAC3EC,UACjB;iBAFiBN;oBACAM;AAEjBC,4BAAAA,SAAO,KAAKP,KAAK;EACnB;;;;;;EAOAQ,WAAWC,WAAmBC,SAA0C;AACtE,UAAMC,YAAY,KAAKX,MAAMK,gBAAgBI,UAAUG,SAAQ,CAAA;AAC/D,UAAMC,UAAU,CAACC,aAAqBH,UAAUI,gBAAgBD,QAAAA,EAAUE;AAC1E,eAAOC,iBAAAA,SAAUJ,SAASJ,WAAWS,OAAOC,OAAO,CAAC,GAAG,KAAKb,UAAUI,OAAAA,CAAAA;EACxE;;;;EAKA,MAAMU,SAASX,WAAmBC,SAAmD;AACnF,UAAMW,OAAO,KAAKb,WAAWC,WAAWC,OAAAA;AACxC,UAAMY,GAAGD,MAAMA,KAAKE,IAAI,EAAA;AACxB,WAAOF;EACT;AACF;;;AEvCA,6BAAyB;AAgBlB,IAAMG,iBAAiB,CAACC,WAAsC;AACnE,SAAO,IAAIC,gCAAS;IAAEC,YAAY;EAAK,CAAA,EAAGC,KAAKH,MAAAA;AACjD;AAUO,IAAMI,sBAAsB,CAACJ,WAAyC;AAC3E,SAAOA,OAAOK,OAAOC,aAAa,EAAC;AACrC;",
|
|
6
6
|
"names": ["createCodecEncoding", "codec", "opts", "encode", "obj", "Buffer", "from", "decode", "buffer", "createCrypto", "signer", "publicKey", "assert", "sign", "message", "secretKey", "cb", "callbackify", "bind", "err", "result", "verify", "signature", "key", "verifySignature", "defaultFeedOptions", "createIfMissing", "valueEncoding", "defaultReadStreamOptions", "start", "end", "Infinity", "snapshot", "tail", "live", "timeout", "wait", "batch", "defaultWriteStreamOptions", "maxBlockSize", "defaultReplicateOptions", "ack", "download", "upload", "encrypted", "noise", "import_node_assert", "import_node_util", "py", "obj", "fn", "util", "promisify", "bind", "HypercoreFactory", "constructor", "_root", "createStorage", "type", "StorageType", "RAM", "createDirectory", "_options", "assert", "createFeed", "publicKey", "options", "directory", "toString", "storage", "filename", "getOrCreateFile", "native", "hypercore", "Object", "assign", "openFeed", "feed", "py", "open", "createReadable", "stream", "Readable", "objectMode", "wrap", "createAsyncIterator", "Symbol", "asyncIterator"]
|
|
7
7
|
}
|
package/dist/lib/node/meta.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"inputs":{"packages/common/hypercore/src/crypto.ts":{"bytes":
|
|
1
|
+
{"inputs":{"packages/common/hypercore/src/crypto.ts":{"bytes":4381,"imports":[{"path":"node:assert","kind":"import-statement","external":true},{"path":"node:util","kind":"import-statement","external":true},{"path":"@dxos/crypto","kind":"import-statement","external":true}]},"packages/common/hypercore/src/defaults.ts":{"bytes":3706,"imports":[]},"packages/common/hypercore/src/util.ts":{"bytes":713,"imports":[{"path":"node:util","kind":"import-statement","external":true}]},"packages/common/hypercore/src/hypercore-factory.ts":{"bytes":4820,"imports":[{"path":"hypercore","kind":"import-statement","external":true},{"path":"node:assert","kind":"import-statement","external":true},{"path":"@dxos/random-access-storage","kind":"import-statement","external":true},{"path":"packages/common/hypercore/src/util.ts","kind":"import-statement","original":"./util"}]},"packages/common/hypercore/src/iterator.ts":{"bytes":3893,"imports":[{"path":"readable-stream","kind":"import-statement","external":true}]},"packages/common/hypercore/src/index.ts":{"bytes":659,"imports":[{"path":"packages/common/hypercore/src/crypto.ts","kind":"import-statement","original":"./crypto"},{"path":"packages/common/hypercore/src/defaults.ts","kind":"import-statement","original":"./defaults"},{"path":"packages/common/hypercore/src/hypercore-factory.ts","kind":"import-statement","original":"./hypercore-factory"},{"path":"packages/common/hypercore/src/iterator.ts","kind":"import-statement","original":"./iterator"}]}},"outputs":{"packages/common/hypercore/dist/lib/node/index.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":8937},"packages/common/hypercore/dist/lib/node/index.cjs":{"imports":[{"path":"node:assert","kind":"require-call","external":true},{"path":"node:util","kind":"require-call","external":true},{"path":"@dxos/crypto","kind":"require-call","external":true},{"path":"hypercore","kind":"require-call","external":true},{"path":"node:assert","kind":"require-call","external":true},{"path":"@dxos/random-access-storage","kind":"require-call","external":true},{"path":"node:util","kind":"require-call","external":true},{"path":"readable-stream","kind":"require-call","external":true}],"exports":[],"entryPoint":"packages/common/hypercore/src/index.ts","inputs":{"packages/common/hypercore/src/index.ts":{"bytesInOutput":541},"packages/common/hypercore/src/crypto.ts":{"bytesInOutput":895},"packages/common/hypercore/src/defaults.ts":{"bytesInOutput":426},"packages/common/hypercore/src/hypercore-factory.ts":{"bytesInOutput":1216},"packages/common/hypercore/src/util.ts":{"bytesInOutput":128},"packages/common/hypercore/src/iterator.ts":{"bytesInOutput":266}},"bytes":5530}}}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
export declare const noop: () => void;
|
|
2
|
-
export
|
|
2
|
+
export type TestDataItem = {
|
|
3
3
|
id: number;
|
|
4
4
|
text: string;
|
|
5
5
|
};
|
|
6
6
|
export declare const createDataItem: (n: number) => TestDataItem;
|
|
7
|
-
|
|
7
|
+
type BatchCallback = (next: (num: number) => void, index: number, remaining: number) => void;
|
|
8
8
|
export declare const batch: (cb: BatchCallback, total: number) => void;
|
|
9
9
|
export {};
|
|
10
10
|
//# sourceMappingURL=testing.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../../../src/testing.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,IAAI,YAAW,CAAC;AAG7B,
|
|
1
|
+
{"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../../../src/testing.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,IAAI,YAAW,CAAC;AAG7B,MAAM,MAAM,YAAY,GAAG;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAExD,eAAO,MAAM,cAAc,MAAO,MAAM,KAAG,YAGzC,CAAC;AAEH,KAAK,aAAa,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;AAG7F,eAAO,MAAM,KAAK,OAAQ,aAAa,SAAS,MAAM,SAiBrD,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dxos/hypercore",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.45-next.45667d4",
|
|
4
4
|
"description": "Hypercore wrapper and utils.",
|
|
5
5
|
"homepage": "https://dxos.org",
|
|
6
6
|
"bugs": "https://github.com/dxos/dxos/issues",
|
|
@@ -20,13 +20,13 @@
|
|
|
20
20
|
"hypercore-protocol": "^8.0.7",
|
|
21
21
|
"readable-stream": "^3.6.0",
|
|
22
22
|
"streamx": "^2.12.5",
|
|
23
|
-
"@dxos/async": "0.1.
|
|
24
|
-
"@dxos/codec-protobuf": "0.1.
|
|
25
|
-
"@dxos/crypto": "0.1.
|
|
26
|
-
"@dxos/debug": "0.1.
|
|
27
|
-
"@dxos/keys": "0.1.
|
|
28
|
-
"@dxos/node-std": "0.1.
|
|
29
|
-
"@dxos/random-access-storage": "0.1.
|
|
23
|
+
"@dxos/async": "0.1.45-next.45667d4",
|
|
24
|
+
"@dxos/codec-protobuf": "0.1.45-next.45667d4",
|
|
25
|
+
"@dxos/crypto": "0.1.45-next.45667d4",
|
|
26
|
+
"@dxos/debug": "0.1.45-next.45667d4",
|
|
27
|
+
"@dxos/keys": "0.1.45-next.45667d4",
|
|
28
|
+
"@dxos/node-std": "0.1.45-next.45667d4",
|
|
29
|
+
"@dxos/random-access-storage": "0.1.45-next.45667d4"
|
|
30
30
|
},
|
|
31
31
|
"devDependencies": {
|
|
32
32
|
"@types/debug": "^4.1.7",
|
|
@@ -36,8 +36,8 @@
|
|
|
36
36
|
"debug": "^4.3.3",
|
|
37
37
|
"faker": "^5.5.3",
|
|
38
38
|
"random-access-memory": "^4.1.0",
|
|
39
|
-
"@dxos/log": "0.1.
|
|
40
|
-
"@dxos/util": "0.1.
|
|
39
|
+
"@dxos/log": "0.1.45-next.45667d4",
|
|
40
|
+
"@dxos/util": "0.1.45-next.45667d4"
|
|
41
41
|
},
|
|
42
42
|
"publishConfig": {
|
|
43
43
|
"access": "public"
|
package/src/crypto.ts
CHANGED
|
@@ -15,7 +15,7 @@ import { PublicKey } from '@dxos/keys';
|
|
|
15
15
|
*/
|
|
16
16
|
export const createCodecEncoding = <T>(codec: Codec<T>, opts?: EncodingOptions): AbstractValueEncoding<T> => ({
|
|
17
17
|
encode: (obj: T) => Buffer.from(codec.encode(obj, opts)),
|
|
18
|
-
decode: (buffer: Buffer) => codec.decode(buffer, opts)
|
|
18
|
+
decode: (buffer: Buffer) => codec.decode(buffer, opts),
|
|
19
19
|
});
|
|
20
20
|
|
|
21
21
|
/**
|
|
@@ -41,6 +41,6 @@ export const createCrypto = (signer: Signer, publicKey: PublicKey): Crypto => {
|
|
|
41
41
|
verify: async (message, signature, key, cb) => {
|
|
42
42
|
// NOTE: Uses the public key passed into function.
|
|
43
43
|
callbackify(verifySignature)(publicKey, message, signature, cb);
|
|
44
|
-
}
|
|
44
|
+
},
|
|
45
45
|
};
|
|
46
46
|
};
|
package/src/defaults.ts
CHANGED
|
@@ -9,7 +9,7 @@ import type { HypercoreOptions, ReadStreamOptions, ReplicationOptions, WriteStre
|
|
|
9
9
|
*/
|
|
10
10
|
export const defaultFeedOptions: HypercoreOptions = {
|
|
11
11
|
createIfMissing: true,
|
|
12
|
-
valueEncoding: 'binary'
|
|
12
|
+
valueEncoding: 'binary',
|
|
13
13
|
};
|
|
14
14
|
|
|
15
15
|
/**
|
|
@@ -23,14 +23,14 @@ export const defaultReadStreamOptions: ReadStreamOptions = {
|
|
|
23
23
|
live: false,
|
|
24
24
|
timeout: 0,
|
|
25
25
|
wait: true,
|
|
26
|
-
batch: 1
|
|
26
|
+
batch: 1,
|
|
27
27
|
};
|
|
28
28
|
|
|
29
29
|
/**
|
|
30
30
|
* https://github.com/hypercore-protocol/hypercore/tree/v9.12.0#var-stream--feedcreatewritestreamopts
|
|
31
31
|
*/
|
|
32
32
|
export const defaultWriteStreamOptions: WriteStreamOptions = {
|
|
33
|
-
maxBlockSize: Infinity
|
|
33
|
+
maxBlockSize: Infinity,
|
|
34
34
|
};
|
|
35
35
|
|
|
36
36
|
/**
|
|
@@ -42,5 +42,5 @@ export const defaultReplicateOptions: ReplicationOptions = {
|
|
|
42
42
|
download: true,
|
|
43
43
|
upload: true,
|
|
44
44
|
encrypted: true,
|
|
45
|
-
noise: true
|
|
45
|
+
noise: true,
|
|
46
46
|
};
|
|
@@ -25,14 +25,14 @@ describe('ProtocolStream', () => {
|
|
|
25
25
|
onhandshake: () => {
|
|
26
26
|
log('onhandshake', { key: PublicKey.from(stream1.publicKey) });
|
|
27
27
|
setHandshake();
|
|
28
|
-
}
|
|
28
|
+
},
|
|
29
29
|
});
|
|
30
30
|
|
|
31
31
|
const stream2 = new ProtocolStream(false, {
|
|
32
32
|
onhandshake: () => {
|
|
33
33
|
log('onhandshake', { key: PublicKey.from(stream2.publicKey) });
|
|
34
34
|
setHandshake();
|
|
35
|
-
}
|
|
35
|
+
},
|
|
36
36
|
});
|
|
37
37
|
|
|
38
38
|
const [closed, setClosed] = latch({ count: 2 });
|
|
@@ -54,14 +54,14 @@ describe('ProtocolStream', () => {
|
|
|
54
54
|
onhandshake: () => {
|
|
55
55
|
log('onhandshake', { key: PublicKey.from(stream1.publicKey) });
|
|
56
56
|
setHandshake();
|
|
57
|
-
}
|
|
57
|
+
},
|
|
58
58
|
});
|
|
59
59
|
|
|
60
60
|
const stream2 = new ProtocolStream(false, {
|
|
61
61
|
onhandshake: () => {
|
|
62
62
|
log('onhandshake', { key: PublicKey.from(stream2.publicKey) });
|
|
63
63
|
setHandshake();
|
|
64
|
-
}
|
|
64
|
+
},
|
|
65
65
|
});
|
|
66
66
|
|
|
67
67
|
const [streamClosed, setStreamClosed] = latch({ count: 2 });
|
|
@@ -95,20 +95,20 @@ describe('ProtocolStream', () => {
|
|
|
95
95
|
onmessage: (msg: any) => {
|
|
96
96
|
log('onmessage', {
|
|
97
97
|
key: PublicKey.from(stream1.publicKey),
|
|
98
|
-
msg: msg.toString()
|
|
98
|
+
msg: msg.toString(),
|
|
99
99
|
});
|
|
100
100
|
incMessage();
|
|
101
|
-
}
|
|
101
|
+
},
|
|
102
102
|
});
|
|
103
103
|
|
|
104
104
|
const extension2 = stream2.registerExtension('stream-extension', {
|
|
105
105
|
onmessage: (msg: any) => {
|
|
106
106
|
log('onmessage', {
|
|
107
107
|
key: PublicKey.from(stream2.publicKey),
|
|
108
|
-
msg: msg.toString()
|
|
108
|
+
msg: msg.toString(),
|
|
109
109
|
});
|
|
110
110
|
incMessage();
|
|
111
|
-
}
|
|
111
|
+
},
|
|
112
112
|
});
|
|
113
113
|
|
|
114
114
|
extension1.send(Buffer.from('message-1'));
|
|
@@ -129,7 +129,7 @@ describe('ProtocolStream', () => {
|
|
|
129
129
|
|
|
130
130
|
core2.on('sync', () => {
|
|
131
131
|
log('sync', {
|
|
132
|
-
core: { key: PublicKey.from(core2.key), length: core2.length }
|
|
132
|
+
core: { key: PublicKey.from(core2.key), length: core2.length },
|
|
133
133
|
});
|
|
134
134
|
expect(core2.length).to.eq(numBlocks);
|
|
135
135
|
setSynced();
|
package/src/hypercore.test.ts
CHANGED
|
@@ -20,7 +20,7 @@ type TestItem = {
|
|
|
20
20
|
|
|
21
21
|
const codec: Codec<TestItem> = {
|
|
22
22
|
encode: (obj: TestItem) => Buffer.from(JSON.stringify(obj)),
|
|
23
|
-
decode: (buffer: Uint8Array) => JSON.parse(buffer.toString())
|
|
23
|
+
decode: (buffer: Uint8Array) => JSON.parse(buffer.toString()),
|
|
24
24
|
};
|
|
25
25
|
|
|
26
26
|
const valueEncoding: AbstractValueEncoding<TestItem> = createCodecEncoding(codec);
|
|
@@ -73,7 +73,7 @@ describe('Hypercore', () => {
|
|
|
73
73
|
expect(core.length).to.eq(0);
|
|
74
74
|
const seq = await append({
|
|
75
75
|
key: 'test-1',
|
|
76
|
-
value: 'test'
|
|
76
|
+
value: 'test',
|
|
77
77
|
});
|
|
78
78
|
|
|
79
79
|
expect(core.length).to.eq(1);
|
package/src/multiplexer.test.ts
CHANGED
|
@@ -39,7 +39,7 @@ describe('Multiplexing', () => {
|
|
|
39
39
|
plex1.addFeed(core1, true);
|
|
40
40
|
plex2.addFeed(core2);
|
|
41
41
|
return [core1, core2];
|
|
42
|
-
})
|
|
42
|
+
}),
|
|
43
43
|
);
|
|
44
44
|
|
|
45
45
|
feeds.forEach(([core1, core2]) => {
|
|
@@ -105,7 +105,7 @@ describe('Multiplexing', () => {
|
|
|
105
105
|
transform: (data: Buffer, next: (err: Error | null, data: Buffer) => void) => {
|
|
106
106
|
log(label, { length: data.length });
|
|
107
107
|
next(null, data);
|
|
108
|
-
}
|
|
108
|
+
},
|
|
109
109
|
});
|
|
110
110
|
|
|
111
111
|
const [pipelineClosed, onStreamClose] = latch({ count: 2 });
|
package/src/multiplexer.ts
CHANGED
|
@@ -54,10 +54,10 @@ export class Multiplexer {
|
|
|
54
54
|
log('send', { id: this._id, feedKey: PublicKey.from(feedKey), payload: data.length });
|
|
55
55
|
next(null, {
|
|
56
56
|
feedKey: core.key,
|
|
57
|
-
payload: data
|
|
57
|
+
payload: data,
|
|
58
58
|
});
|
|
59
|
-
}
|
|
60
|
-
})
|
|
59
|
+
},
|
|
60
|
+
}),
|
|
61
61
|
)
|
|
62
62
|
.pipe(this.output, () => {
|
|
63
63
|
log('pipeline closed', { id: this._id });
|
|
@@ -82,8 +82,8 @@ export class Multiplexer {
|
|
|
82
82
|
log('recv', { id: this._id, feedKey: PublicKey.from(feedKey), payload: (payload as Buffer).length });
|
|
83
83
|
feedStream.write(payload);
|
|
84
84
|
next();
|
|
85
|
-
}
|
|
86
|
-
})
|
|
85
|
+
},
|
|
86
|
+
}),
|
|
87
87
|
);
|
|
88
88
|
|
|
89
89
|
log('opened');
|
package/src/replicate.test.ts
CHANGED
|
@@ -134,7 +134,7 @@ describe('Replication', () => {
|
|
|
134
134
|
batch((next, i, remaining) => {
|
|
135
135
|
const size = faker.datatype.number({
|
|
136
136
|
min: 1,
|
|
137
|
-
max: Math.min(10, remaining)
|
|
137
|
+
max: Math.min(10, remaining),
|
|
138
138
|
});
|
|
139
139
|
for (let j = 0; j < size; j++) {
|
|
140
140
|
core1.append(JSON.stringify(createDataItem(i + j)), noop);
|
|
@@ -213,7 +213,7 @@ describe('Replication', () => {
|
|
|
213
213
|
setTimeout(async () => {
|
|
214
214
|
for (const _ of Array.from(Array(numBlocks))) {
|
|
215
215
|
const block = {
|
|
216
|
-
text: faker.lorem.sentence()
|
|
216
|
+
text: faker.lorem.sentence(),
|
|
217
217
|
};
|
|
218
218
|
|
|
219
219
|
core1.append(JSON.stringify(block), noop);
|
package/src/streams.test.ts
CHANGED
package/src/testing.ts
CHANGED
|
@@ -11,7 +11,7 @@ export type TestDataItem = { id: number; text: string };
|
|
|
11
11
|
|
|
12
12
|
export const createDataItem = (n: number): TestDataItem => ({
|
|
13
13
|
id: n,
|
|
14
|
-
text: faker.lorem.sentence()
|
|
14
|
+
text: faker.lorem.sentence(),
|
|
15
15
|
});
|
|
16
16
|
|
|
17
17
|
type BatchCallback = (next: (num: number) => void, index: number, remaining: number) => void;
|
|
@@ -29,7 +29,7 @@ export const batch = (cb: BatchCallback, total: number) => {
|
|
|
29
29
|
}
|
|
30
30
|
},
|
|
31
31
|
i,
|
|
32
|
-
remaining
|
|
32
|
+
remaining,
|
|
33
33
|
);
|
|
34
34
|
};
|
|
35
35
|
|