@leofcoin/peernet 1.2.28 → 1.2.30
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/README.md +44 -1
- package/exports/browser/{browser-CWeoyGUw.js → browser-D-r0O9Qn.js} +1 -1
- package/exports/browser/browser-_hiyXwPp.js +147 -0
- package/exports/browser/client-86Tnax66.js +2224 -0
- package/exports/browser/client-BFxJts6j.js +2224 -0
- package/exports/browser/{client-B-jyclOB.js → client-BVhUamQG.js} +4 -4
- package/exports/browser/client-BzvWzzLv.js +2224 -0
- package/exports/browser/client-C9GBz2Tf.js +2224 -0
- package/exports/browser/client-CQzuu6At.js +2224 -0
- package/exports/browser/client-CVkFejdx.js +2224 -0
- package/exports/browser/client-Cj_UUO8W.js +2224 -0
- package/exports/browser/client-CrGaeBjj.js +2224 -0
- package/exports/browser/client-DDC8C510.js +2224 -0
- package/exports/browser/client-ERocgKET.js +2224 -0
- package/exports/browser/client-a8rws3cu.js +2224 -0
- package/exports/browser/identity-ChyyZSve.js +8397 -0
- package/exports/browser/index-BD0Anx7_.js +37 -0
- package/exports/browser/messages-BFCmg6Vb.js +212 -0
- package/exports/browser/messages-BHIC2mQu.js +212 -0
- package/exports/browser/messages-CimzJ4wr.js +210 -0
- package/exports/browser/messages-Cjoa_LGO.js +210 -0
- package/exports/browser/messages-D7JxkkDW.js +212 -0
- package/exports/browser/{messages-FMRAS8QX.js → messages-DH0tgNM9.js} +1 -1
- package/exports/browser/messages-DVHcNvs_.js +212 -0
- package/exports/browser/messages-DqL_g2qw.js +210 -0
- package/exports/browser/messages-UKnuelZ7.js +207 -0
- package/exports/browser/messages-XgZZUMma.js +212 -0
- package/exports/browser/messages-kfFyctPL.js +210 -0
- package/exports/browser/messages-psROnfRi.js +212 -0
- package/exports/browser/peernet-B9VL4Xwe.js +9522 -0
- package/exports/browser/peernet-C-HNdrcd.js +9528 -0
- package/exports/browser/peernet-C4rOvyyU.js +9661 -0
- package/exports/browser/{peernet-CRbrmeU3.js → peernet-Ca1iM2tN.js} +2 -2
- package/exports/browser/peernet-CbI0-jFn.js +9651 -0
- package/exports/browser/peernet-CtHScDyh.js +9524 -0
- package/exports/browser/peernet-DfuxUK3u.js +9525 -0
- package/exports/browser/peernet-DiEcNDLD.js +9655 -0
- package/exports/browser/peernet-DtuRXOzP.js +9653 -0
- package/exports/browser/peernet-r_9IyzTe.js +9336 -0
- package/exports/browser/peernet-rcD5XL1y.js +9590 -0
- package/exports/browser/peernet-rw8HJGOz.js +9597 -0
- package/exports/browser/peernet.js +1 -1
- package/exports/messages-0uXHmQH7.js +209 -0
- package/exports/messages-DaUtFfBh.js +207 -0
- package/exports/peernet.js +358 -33
- package/exports/store.js +3 -0
- package/exports/types/file-transfer.d.ts +34 -0
- package/exports/types/peernet.d.ts +20 -4
- package/exports/types/proto/file.proto.d.ts +5 -0
- package/package.json +4 -3
- package/rollup.config.js +4 -8
- package/src/file-transfer.ts +194 -0
- package/src/peernet.ts +170 -28
- package/src/proto/file.proto.js +6 -1
- package/test/file-transfer.test.js +81 -0
- package/test/peernet.test.js +31 -2
- package/test-output.log +84 -0
package/README.md
CHANGED
|
@@ -103,6 +103,50 @@ const hash = await peernet.broadcast('/hello.txt', {
|
|
|
103
103
|
});
|
|
104
104
|
```
|
|
105
105
|
|
|
106
|
+
Files larger than 256 KiB are automatically split into independently hashed pieces. The returned hash identifies a manifest, so receivers can verify every piece and request only pieces they still need. Override the piece size with `chunkSize`:
|
|
107
|
+
|
|
108
|
+
```js
|
|
109
|
+
const hash = await peernet.broadcast('/video.mp4', {
|
|
110
|
+
content: videoBytes,
|
|
111
|
+
chunkSize: 1024 * 1024
|
|
112
|
+
})
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
For a pausable/resumable download, use the transfer controller:
|
|
116
|
+
|
|
117
|
+
```js
|
|
118
|
+
const transfer = peernet.download(hash, { pin: true })
|
|
119
|
+
const unsubscribe = transfer.onProgress(({ transferredBytes, totalBytes, state }) => {
|
|
120
|
+
console.log(state, transferredBytes, totalBytes)
|
|
121
|
+
})
|
|
122
|
+
|
|
123
|
+
transfer.pause()
|
|
124
|
+
transfer.resume() // already completed pieces are not fetched again
|
|
125
|
+
|
|
126
|
+
const bytes = await transfer.result
|
|
127
|
+
unsubscribe()
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
`peernet.cat(hash)` also reassembles chunked files transparently. `pin: true` caches verified pieces in the local data store, allowing a later transfer instance to reuse them.
|
|
131
|
+
|
|
132
|
+
Downloads pipeline four chunks by default. Known manifest providers are reused for all chunk hashes and chunk requests rotate across those peers, allowing different pieces to arrive concurrently from different providers. Configure the queue with `transferConcurrency`. Chunk size adapts to payload size (256 KiB normally, 1 MiB from 32 MiB, and 4 MiB from 256 MiB); an explicit `chunkSize` always overrides it.
|
|
133
|
+
|
|
134
|
+
### Large blocks
|
|
135
|
+
|
|
136
|
+
Blocks larger than 1 MiB are also chunked internally, without changing the public block API or the canonical block hash supplied by the chain:
|
|
137
|
+
|
|
138
|
+
```js
|
|
139
|
+
await peernet.block.put(blockHash, encodedBlock)
|
|
140
|
+
const encodedBlockAgain = await peernet.block.get(blockHash)
|
|
141
|
+
|
|
142
|
+
const transfer = peernet.block.download(blockHash)
|
|
143
|
+
transfer.pause()
|
|
144
|
+
transfer.resume()
|
|
145
|
+
const bytes = await transfer.result
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
The block manifest remains stored under the canonical block hash; individual chunks have their own transport hashes. Peernet verifies every chunk before reconstruction. The chain layer must still verify the reconstructed canonical block hash and perform normal consensus validation before loading it. Defaults can be configured with `blockChunkThreshold` and `blockChunkSize` in the Peernet constructor.
|
|
149
|
+
|
|
106
150
|
**Broadcast a folder:**
|
|
107
151
|
```js
|
|
108
152
|
const folderHash = await peernet.broadcast('/my-folder', {
|
|
@@ -263,4 +307,3 @@ npm i -g @vandeurenglenn/project
|
|
|
263
307
|
## License
|
|
264
308
|
|
|
265
309
|
MIT
|
|
266
|
-
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import { m as getDefaultExportFromCjs } from './identity-ChyyZSve.js';
|
|
2
|
+
|
|
3
|
+
function _mergeNamespaces(n, m) {
|
|
4
|
+
m.forEach(function (e) {
|
|
5
|
+
e && typeof e !== 'string' && !Array.isArray(e) && Object.keys(e).forEach(function (k) {
|
|
6
|
+
if (k !== 'default' && !(k in n)) {
|
|
7
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
8
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
9
|
+
enumerable: true,
|
|
10
|
+
get: function () { return e[k]; }
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
});
|
|
14
|
+
});
|
|
15
|
+
return Object.freeze(n);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
var global;
|
|
19
|
+
var hasRequiredGlobal;
|
|
20
|
+
|
|
21
|
+
function requireGlobal () {
|
|
22
|
+
if (hasRequiredGlobal) return global;
|
|
23
|
+
hasRequiredGlobal = 1;
|
|
24
|
+
var naiveFallback = function () {
|
|
25
|
+
if (typeof self === "object" && self) return self;
|
|
26
|
+
if (typeof window === "object" && window) return window;
|
|
27
|
+
throw new Error("Unable to resolve global `this`");
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
global = (function () {
|
|
31
|
+
if (this) return this;
|
|
32
|
+
|
|
33
|
+
// Unexpected strict mode (may happen if e.g. bundled into ESM module)
|
|
34
|
+
|
|
35
|
+
// Fallback to standard globalThis if available
|
|
36
|
+
if (typeof globalThis === "object" && globalThis) return globalThis;
|
|
37
|
+
|
|
38
|
+
// Thanks @mathiasbynens -> https://mathiasbynens.be/notes/globalthis
|
|
39
|
+
// In all ES5+ engines global object inherits from Object.prototype
|
|
40
|
+
// (if you approached one that doesn't please report)
|
|
41
|
+
try {
|
|
42
|
+
Object.defineProperty(Object.prototype, "__global__", {
|
|
43
|
+
get: function () { return this; },
|
|
44
|
+
configurable: true
|
|
45
|
+
});
|
|
46
|
+
} catch (error) {
|
|
47
|
+
// Unfortunate case of updates to Object.prototype being restricted
|
|
48
|
+
// via preventExtensions, seal or freeze
|
|
49
|
+
return naiveFallback();
|
|
50
|
+
}
|
|
51
|
+
try {
|
|
52
|
+
// Safari case (window.__global__ works, but __global__ does not)
|
|
53
|
+
if (!__global__) return naiveFallback();
|
|
54
|
+
return __global__;
|
|
55
|
+
} finally {
|
|
56
|
+
delete Object.prototype.__global__;
|
|
57
|
+
}
|
|
58
|
+
})();
|
|
59
|
+
return global;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
var version$1 = "1.0.35";
|
|
63
|
+
var require$$0 = {
|
|
64
|
+
version: version$1};
|
|
65
|
+
|
|
66
|
+
var version;
|
|
67
|
+
var hasRequiredVersion;
|
|
68
|
+
|
|
69
|
+
function requireVersion () {
|
|
70
|
+
if (hasRequiredVersion) return version;
|
|
71
|
+
hasRequiredVersion = 1;
|
|
72
|
+
version = require$$0.version;
|
|
73
|
+
return version;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
var browser$2;
|
|
77
|
+
var hasRequiredBrowser;
|
|
78
|
+
|
|
79
|
+
function requireBrowser () {
|
|
80
|
+
if (hasRequiredBrowser) return browser$2;
|
|
81
|
+
hasRequiredBrowser = 1;
|
|
82
|
+
var _globalThis;
|
|
83
|
+
if (typeof globalThis === 'object') {
|
|
84
|
+
_globalThis = globalThis;
|
|
85
|
+
} else {
|
|
86
|
+
try {
|
|
87
|
+
_globalThis = requireGlobal();
|
|
88
|
+
} catch (error) {
|
|
89
|
+
} finally {
|
|
90
|
+
if (!_globalThis && typeof window !== 'undefined') { _globalThis = window; }
|
|
91
|
+
if (!_globalThis) { throw new Error('Could not determine global this'); }
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
var NativeWebSocket = _globalThis.WebSocket || _globalThis.MozWebSocket;
|
|
96
|
+
var websocket_version = requireVersion();
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Expose a W3C WebSocket class with just one or two arguments.
|
|
101
|
+
*/
|
|
102
|
+
function W3CWebSocket(uri, protocols) {
|
|
103
|
+
var native_instance;
|
|
104
|
+
|
|
105
|
+
if (protocols) {
|
|
106
|
+
native_instance = new NativeWebSocket(uri, protocols);
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
native_instance = new NativeWebSocket(uri);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* 'native_instance' is an instance of nativeWebSocket (the browser's WebSocket
|
|
114
|
+
* class). Since it is an Object it will be returned as it is when creating an
|
|
115
|
+
* instance of W3CWebSocket via 'new W3CWebSocket()'.
|
|
116
|
+
*
|
|
117
|
+
* ECMAScript 5: http://bclary.com/2004/11/07/#a-13.2.2
|
|
118
|
+
*/
|
|
119
|
+
return native_instance;
|
|
120
|
+
}
|
|
121
|
+
if (NativeWebSocket) {
|
|
122
|
+
['CONNECTING', 'OPEN', 'CLOSING', 'CLOSED'].forEach(function(prop) {
|
|
123
|
+
Object.defineProperty(W3CWebSocket, prop, {
|
|
124
|
+
get: function() { return NativeWebSocket[prop]; }
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* Module exports.
|
|
131
|
+
*/
|
|
132
|
+
browser$2 = {
|
|
133
|
+
'w3cwebsocket' : NativeWebSocket ? W3CWebSocket : null,
|
|
134
|
+
'version' : websocket_version
|
|
135
|
+
};
|
|
136
|
+
return browser$2;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
var browserExports = requireBrowser();
|
|
140
|
+
var browser = /*@__PURE__*/getDefaultExportFromCjs(browserExports);
|
|
141
|
+
|
|
142
|
+
var browser$1 = /*#__PURE__*/_mergeNamespaces({
|
|
143
|
+
__proto__: null,
|
|
144
|
+
default: browser
|
|
145
|
+
}, [browserExports]);
|
|
146
|
+
|
|
147
|
+
export { browser$1 as b };
|