swarm-deploy 0.0.0 → 0.2.0
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/CHANGELOG.md +76 -0
- package/LICENSE.md +201 -0
- package/NOTICE.md +13 -0
- package/README.md +1283 -0
- package/RELEASING.md +71 -0
- package/SECURITY.md +40 -0
- package/dist/abort.d.ts +16 -0
- package/dist/abort.js +52 -0
- package/dist/abort.js.map +1 -0
- package/dist/allowlist.d.ts +2 -0
- package/dist/allowlist.js +21 -0
- package/dist/allowlist.js.map +1 -0
- package/dist/bin/swarm-deploy.d.ts +2 -0
- package/dist/bin/swarm-deploy.js +41 -0
- package/dist/bin/swarm-deploy.js.map +1 -0
- package/dist/cli.d.ts +27 -0
- package/dist/cli.js +751 -0
- package/dist/cli.js.map +1 -0
- package/dist/client.d.ts +111 -0
- package/dist/client.js +276 -0
- package/dist/client.js.map +1 -0
- package/dist/direct-dht.d.ts +81 -0
- package/dist/direct-dht.js +254 -0
- package/dist/direct-dht.js.map +1 -0
- package/dist/error-code.d.ts +15 -0
- package/dist/error-code.js +30 -0
- package/dist/error-code.js.map +1 -0
- package/dist/errors.d.ts +31 -0
- package/dist/errors.js +37 -0
- package/dist/errors.js.map +1 -0
- package/dist/events-node.d.ts +2 -0
- package/dist/events-node.js +7 -0
- package/dist/events-node.js.map +1 -0
- package/dist/files.d.ts +32 -0
- package/dist/files.js +85 -0
- package/dist/files.js.map +1 -0
- package/dist/fs-node.d.ts +2 -0
- package/dist/fs-node.js +7 -0
- package/dist/fs-node.js.map +1 -0
- package/dist/hooks-module.d.ts +9 -0
- package/dist/hooks-module.js +118 -0
- package/dist/hooks-module.js.map +1 -0
- package/dist/hooks.d.ts +69 -0
- package/dist/hooks.js +88 -0
- package/dist/hooks.js.map +1 -0
- package/dist/identity.d.ts +7 -0
- package/dist/identity.js +50 -0
- package/dist/identity.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/os-node.d.ts +2 -0
- package/dist/os-node.js +7 -0
- package/dist/os-node.js.map +1 -0
- package/dist/path-node.d.ts +2 -0
- package/dist/path-node.js +7 -0
- package/dist/path-node.js.map +1 -0
- package/dist/process-node.d.ts +2 -0
- package/dist/process-node.js +7 -0
- package/dist/process-node.js.map +1 -0
- package/dist/release.d.ts +26 -0
- package/dist/release.js +419 -0
- package/dist/release.js.map +1 -0
- package/dist/server.d.ts +239 -0
- package/dist/server.js +928 -0
- package/dist/server.js.map +1 -0
- package/dist/storage/atomic-file.d.ts +15 -0
- package/dist/storage/atomic-file.js +172 -0
- package/dist/storage/atomic-file.js.map +1 -0
- package/dist/storage/commit-journal.d.ts +120 -0
- package/dist/storage/commit-journal.js +417 -0
- package/dist/storage/commit-journal.js.map +1 -0
- package/dist/storage/commit-store.d.ts +307 -0
- package/dist/storage/commit-store.js +1691 -0
- package/dist/storage/commit-store.js.map +1 -0
- package/dist/storage/layout.d.ts +16 -0
- package/dist/storage/layout.js +409 -0
- package/dist/storage/layout.js.map +1 -0
- package/dist/storage/link-store.d.ts +70 -0
- package/dist/storage/link-store.js +363 -0
- package/dist/storage/link-store.js.map +1 -0
- package/dist/storage/recovery.d.ts +100 -0
- package/dist/storage/recovery.js +260 -0
- package/dist/storage/recovery.js.map +1 -0
- package/dist/storage/retention.d.ts +183 -0
- package/dist/storage/retention.js +619 -0
- package/dist/storage/retention.js.map +1 -0
- package/dist/storage/root-coordinator.d.ts +7 -0
- package/dist/storage/root-coordinator.js +27 -0
- package/dist/storage/root-coordinator.js.map +1 -0
- package/dist/storage/session-store.d.ts +2 -0
- package/dist/storage/session-store.js +7 -0
- package/dist/storage/session-store.js.map +1 -0
- package/dist/storage/tar-session-store.d.ts +147 -0
- package/dist/storage/tar-session-store.js +1044 -0
- package/dist/storage/tar-session-store.js.map +1 -0
- package/dist/storage/tree-fs.d.ts +44 -0
- package/dist/storage/tree-fs.js +580 -0
- package/dist/storage/tree-fs.js.map +1 -0
- package/dist/storage/tree-staging.d.ts +9 -0
- package/dist/storage/tree-staging.js +64 -0
- package/dist/storage/tree-staging.js.map +1 -0
- package/dist/storage/types.d.ts +77 -0
- package/dist/storage/types.js +3 -0
- package/dist/storage/types.js.map +1 -0
- package/dist/symlinks.d.ts +36 -0
- package/dist/symlinks.js +128 -0
- package/dist/symlinks.js.map +1 -0
- package/dist/tar-protocol/controls.d.ts +73 -0
- package/dist/tar-protocol/controls.js +291 -0
- package/dist/tar-protocol/controls.js.map +1 -0
- package/dist/tar-protocol/direct-wire.d.ts +43 -0
- package/dist/tar-protocol/direct-wire.js +194 -0
- package/dist/tar-protocol/direct-wire.js.map +1 -0
- package/dist/tar-protocol/extract.d.ts +18 -0
- package/dist/tar-protocol/extract.js +124 -0
- package/dist/tar-protocol/extract.js.map +1 -0
- package/dist/tar-protocol/hash.d.ts +10 -0
- package/dist/tar-protocol/hash.js +44 -0
- package/dist/tar-protocol/hash.js.map +1 -0
- package/dist/tar-protocol/lifecycle.d.ts +13 -0
- package/dist/tar-protocol/lifecycle.js +90 -0
- package/dist/tar-protocol/lifecycle.js.map +1 -0
- package/dist/tar-protocol/manifest.d.ts +58 -0
- package/dist/tar-protocol/manifest.js +312 -0
- package/dist/tar-protocol/manifest.js.map +1 -0
- package/dist/tar-protocol/tree-extract.d.ts +37 -0
- package/dist/tar-protocol/tree-extract.js +240 -0
- package/dist/tar-protocol/tree-extract.js.map +1 -0
- package/dist/tar-protocol/tree-manifest.d.ts +45 -0
- package/dist/tar-protocol/tree-manifest.js +277 -0
- package/dist/tar-protocol/tree-manifest.js.map +1 -0
- package/dist/tar-protocol/tree-path.d.ts +15 -0
- package/dist/tar-protocol/tree-path.js +68 -0
- package/dist/tar-protocol/tree-path.js.map +1 -0
- package/dist/tar-protocol/tree.d.ts +68 -0
- package/dist/tar-protocol/tree.js +269 -0
- package/dist/tar-protocol/tree.js.map +1 -0
- package/dist/tar-protocol/ustar.d.ts +36 -0
- package/dist/tar-protocol/ustar.js +167 -0
- package/dist/tar-protocol/ustar.js.map +1 -0
- package/dist/types.d.ts +61 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/validation.d.ts +4 -0
- package/dist/validation.js +26 -0
- package/dist/validation.js.map +1 -0
- package/package.json +103 -1
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.DirectDhtClient = exports.DirectDhtServer = void 0;
|
|
7
|
+
const hyperdht_1 = __importDefault(require("hyperdht"));
|
|
8
|
+
const b4a_1 = __importDefault(require("b4a"));
|
|
9
|
+
const sodium_native_1 = __importDefault(require("sodium-native"));
|
|
10
|
+
const abort_js_1 = require("./abort.js");
|
|
11
|
+
const errors_js_1 = require("./errors.js");
|
|
12
|
+
const DEFAULT_CONNECT_TIMEOUT = 10_000;
|
|
13
|
+
const MAX_CONNECT_TIMEOUT = 5 * 60_000;
|
|
14
|
+
function copyBytes(value, length, label) {
|
|
15
|
+
if (!b4a_1.default.isBuffer(value) || value.byteLength !== length) {
|
|
16
|
+
throw new errors_js_1.SwarmDeployError(errors_js_1.ERRORS.PROTOCOL_INVALID, `Expected ${length}-byte ${label}`);
|
|
17
|
+
}
|
|
18
|
+
return b4a_1.default.from(value);
|
|
19
|
+
}
|
|
20
|
+
function copyKeyPair(keyPair) {
|
|
21
|
+
if (!keyPair || typeof keyPair !== 'object') {
|
|
22
|
+
throw new errors_js_1.SwarmDeployError(errors_js_1.ERRORS.PROTOCOL_INVALID, 'Expected seeded key pair');
|
|
23
|
+
}
|
|
24
|
+
return {
|
|
25
|
+
publicKey: copyBytes(keyPair.publicKey, 32, 'public key'),
|
|
26
|
+
secretKey: copyBytes(keyPair.secretKey, 64, 'secret key')
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
function assertTimeout(timeout) {
|
|
30
|
+
if (!Number.isFinite(timeout) || !Number.isInteger(timeout) || timeout <= 0) {
|
|
31
|
+
throw new errors_js_1.SwarmDeployError(errors_js_1.ERRORS.PROTOCOL_INVALID, 'Connect timeout must be positive');
|
|
32
|
+
}
|
|
33
|
+
if (timeout > MAX_CONNECT_TIMEOUT) {
|
|
34
|
+
throw new errors_js_1.SwarmDeployError(errors_js_1.ERRORS.PROTOCOL_INVALID, 'Connect timeout exceeds maximum');
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
function createNode(options) {
|
|
38
|
+
if (options.dht !== undefined && options.dhtFactory !== undefined) {
|
|
39
|
+
throw new errors_js_1.SwarmDeployError(errors_js_1.ERRORS.PROTOCOL_INVALID, 'Specify either an injected DHT or a DHT factory');
|
|
40
|
+
}
|
|
41
|
+
if (options.dht !== undefined)
|
|
42
|
+
return { dht: options.dht, owned: false };
|
|
43
|
+
return {
|
|
44
|
+
dht: options.dhtFactory ? options.dhtFactory() : new hyperdht_1.default(),
|
|
45
|
+
owned: true
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
function safeDestroy(socket, error) {
|
|
49
|
+
try {
|
|
50
|
+
socket.destroy(error);
|
|
51
|
+
}
|
|
52
|
+
catch { }
|
|
53
|
+
}
|
|
54
|
+
function transportError(code, message, cause = null) {
|
|
55
|
+
const error = new errors_js_1.SwarmDeployError(code, message, cause);
|
|
56
|
+
error.transport = true;
|
|
57
|
+
return error;
|
|
58
|
+
}
|
|
59
|
+
class DirectDhtServer {
|
|
60
|
+
publicKey;
|
|
61
|
+
keyPair;
|
|
62
|
+
dht;
|
|
63
|
+
ownedDht;
|
|
64
|
+
server;
|
|
65
|
+
allowedClientPublicKeys;
|
|
66
|
+
onConnection;
|
|
67
|
+
sockets = new Set();
|
|
68
|
+
listenPromise = null;
|
|
69
|
+
closePromise = null;
|
|
70
|
+
closed = false;
|
|
71
|
+
constructor(options) {
|
|
72
|
+
if (!options || typeof options !== 'object') {
|
|
73
|
+
throw new errors_js_1.SwarmDeployError(errors_js_1.ERRORS.PROTOCOL_INVALID, 'Invalid direct DHT server options');
|
|
74
|
+
}
|
|
75
|
+
this.keyPair = copyKeyPair(options.keyPair);
|
|
76
|
+
this.publicKey = b4a_1.default.from(this.keyPair.publicKey);
|
|
77
|
+
if (!Array.isArray(options.allowedClientPublicKeys)) {
|
|
78
|
+
throw new errors_js_1.SwarmDeployError(errors_js_1.ERRORS.PROTOCOL_INVALID, 'Expected client public key allowlist');
|
|
79
|
+
}
|
|
80
|
+
this.allowedClientPublicKeys = options.allowedClientPublicKeys.map((key) => copyBytes(key, 32, 'allowed client public key'));
|
|
81
|
+
if (options.onConnection !== undefined && typeof options.onConnection !== 'function') {
|
|
82
|
+
throw new errors_js_1.SwarmDeployError(errors_js_1.ERRORS.PROTOCOL_INVALID, 'Invalid connection callback');
|
|
83
|
+
}
|
|
84
|
+
this.onConnection = options.onConnection;
|
|
85
|
+
const created = createNode(options);
|
|
86
|
+
this.dht = created.dht;
|
|
87
|
+
this.ownedDht = created.owned;
|
|
88
|
+
this.dht.on('error', () => { });
|
|
89
|
+
this.server = this.dht.createServer({
|
|
90
|
+
firewall: (remotePublicKey) => this.firewall(remotePublicKey)
|
|
91
|
+
}, (socket) => this.accept(socket));
|
|
92
|
+
this.server.on('error', () => { });
|
|
93
|
+
}
|
|
94
|
+
firewall(remotePublicKey) {
|
|
95
|
+
return !this.isAllowed(remotePublicKey);
|
|
96
|
+
}
|
|
97
|
+
isAllowed(remotePublicKey) {
|
|
98
|
+
if (!b4a_1.default.isBuffer(remotePublicKey) || remotePublicKey.byteLength !== 32)
|
|
99
|
+
return false;
|
|
100
|
+
let accepted = false;
|
|
101
|
+
for (const allowed of this.allowedClientPublicKeys) {
|
|
102
|
+
accepted = sodium_native_1.default.sodium_memcmp(remotePublicKey, allowed) || accepted;
|
|
103
|
+
}
|
|
104
|
+
return accepted;
|
|
105
|
+
}
|
|
106
|
+
accept(socket) {
|
|
107
|
+
if (this.closed || !this.isAllowed(socket.remotePublicKey)) {
|
|
108
|
+
safeDestroy(socket);
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
socket.on('error', () => { });
|
|
112
|
+
this.sockets.add(socket);
|
|
113
|
+
socket.once('close', () => this.sockets.delete(socket));
|
|
114
|
+
if (!this.onConnection)
|
|
115
|
+
return;
|
|
116
|
+
try {
|
|
117
|
+
this.onConnection(socket);
|
|
118
|
+
}
|
|
119
|
+
catch (error) {
|
|
120
|
+
safeDestroy(socket, error);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
listen() {
|
|
124
|
+
if (this.closed) {
|
|
125
|
+
return Promise.reject(new errors_js_1.SwarmDeployError(errors_js_1.ERRORS.PROTOCOL_INVALID, 'Direct DHT server is closed'));
|
|
126
|
+
}
|
|
127
|
+
if (!this.listenPromise) {
|
|
128
|
+
this.listenPromise = this.server.listen(this.keyPair).then(() => this);
|
|
129
|
+
}
|
|
130
|
+
return this.listenPromise;
|
|
131
|
+
}
|
|
132
|
+
close() {
|
|
133
|
+
if (!this.closePromise)
|
|
134
|
+
this.closePromise = this.closeAll();
|
|
135
|
+
return this.closePromise;
|
|
136
|
+
}
|
|
137
|
+
async closeAll() {
|
|
138
|
+
this.closed = true;
|
|
139
|
+
for (const socket of this.sockets)
|
|
140
|
+
safeDestroy(socket);
|
|
141
|
+
this.sockets.clear();
|
|
142
|
+
let failure = null;
|
|
143
|
+
try {
|
|
144
|
+
await this.server.close();
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
failure = error;
|
|
148
|
+
}
|
|
149
|
+
if (this.ownedDht) {
|
|
150
|
+
try {
|
|
151
|
+
await this.dht.destroy();
|
|
152
|
+
}
|
|
153
|
+
catch (error) {
|
|
154
|
+
if (failure === null)
|
|
155
|
+
failure = error;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
if (failure !== null)
|
|
159
|
+
throw failure;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
exports.DirectDhtServer = DirectDhtServer;
|
|
163
|
+
class DirectDhtClient {
|
|
164
|
+
publicKey;
|
|
165
|
+
keyPair;
|
|
166
|
+
dht;
|
|
167
|
+
ownedDht;
|
|
168
|
+
connectTimeout;
|
|
169
|
+
sockets = new Set();
|
|
170
|
+
closePromise = null;
|
|
171
|
+
closed = false;
|
|
172
|
+
constructor(options) {
|
|
173
|
+
if (!options || typeof options !== 'object') {
|
|
174
|
+
throw new errors_js_1.SwarmDeployError(errors_js_1.ERRORS.PROTOCOL_INVALID, 'Invalid direct DHT client options');
|
|
175
|
+
}
|
|
176
|
+
this.keyPair = copyKeyPair(options.keyPair);
|
|
177
|
+
this.publicKey = b4a_1.default.from(this.keyPair.publicKey);
|
|
178
|
+
this.connectTimeout = options.connectTimeout ?? DEFAULT_CONNECT_TIMEOUT;
|
|
179
|
+
assertTimeout(this.connectTimeout);
|
|
180
|
+
const created = createNode(options);
|
|
181
|
+
this.dht = created.dht;
|
|
182
|
+
this.ownedDht = created.owned;
|
|
183
|
+
this.dht.on('error', () => { });
|
|
184
|
+
}
|
|
185
|
+
async connect(serverPublicKey, options = {}) {
|
|
186
|
+
if (this.closed) {
|
|
187
|
+
throw new errors_js_1.SwarmDeployError(errors_js_1.ERRORS.PROTOCOL_INVALID, 'Direct DHT client is closed');
|
|
188
|
+
}
|
|
189
|
+
(0, abort_js_1.throwIfAborted)(options.signal);
|
|
190
|
+
const expectedServerPublicKey = copyBytes(serverPublicKey, 32, 'server public key');
|
|
191
|
+
const timeout = options.timeout ?? this.connectTimeout;
|
|
192
|
+
assertTimeout(timeout);
|
|
193
|
+
const socket = this.dht.connect(expectedServerPublicKey, { keyPair: this.keyPair });
|
|
194
|
+
let socketError = null;
|
|
195
|
+
socket.on('error', (error) => {
|
|
196
|
+
if (socketError === null)
|
|
197
|
+
socketError = error;
|
|
198
|
+
});
|
|
199
|
+
this.sockets.add(socket);
|
|
200
|
+
socket.once('close', () => this.sockets.delete(socket));
|
|
201
|
+
try {
|
|
202
|
+
const opened = await this.awaitOpened(socket.opened, timeout, options.signal);
|
|
203
|
+
if (opened !== true) {
|
|
204
|
+
throw (socketError ||
|
|
205
|
+
transportError(errors_js_1.ERRORS.SERVER_KEY_MISMATCH, 'Unable to authenticate expected direct DHT server'));
|
|
206
|
+
}
|
|
207
|
+
const remotePublicKey = socket.remotePublicKey;
|
|
208
|
+
if (!b4a_1.default.isBuffer(remotePublicKey) ||
|
|
209
|
+
remotePublicKey.byteLength !== 32 ||
|
|
210
|
+
!sodium_native_1.default.sodium_memcmp(remotePublicKey, expectedServerPublicKey)) {
|
|
211
|
+
throw transportError(errors_js_1.ERRORS.SERVER_KEY_MISMATCH, 'Connected direct DHT server key did not match commitment');
|
|
212
|
+
}
|
|
213
|
+
return socket;
|
|
214
|
+
}
|
|
215
|
+
catch (error) {
|
|
216
|
+
safeDestroy(socket, error);
|
|
217
|
+
throw error;
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
awaitOpened(opened, timeout, signal) {
|
|
221
|
+
return new Promise((resolve, reject) => {
|
|
222
|
+
let settled = false;
|
|
223
|
+
let removeAbort = () => { };
|
|
224
|
+
const timer = setTimeout(() => {
|
|
225
|
+
finish(reject, transportError(errors_js_1.ERRORS.CONNECT_TIMEOUT, 'Direct DHT connection timed out'));
|
|
226
|
+
}, timeout);
|
|
227
|
+
const finish = (callback, value) => {
|
|
228
|
+
if (settled)
|
|
229
|
+
return;
|
|
230
|
+
settled = true;
|
|
231
|
+
clearTimeout(timer);
|
|
232
|
+
removeAbort();
|
|
233
|
+
callback(value);
|
|
234
|
+
};
|
|
235
|
+
removeAbort = (0, abort_js_1.onAbort)(signal, () => finish(reject, (0, abort_js_1.abortError)()));
|
|
236
|
+
Promise.resolve(opened).then((value) => finish(resolve, value), (error) => finish(reject, error));
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
close() {
|
|
240
|
+
if (!this.closePromise)
|
|
241
|
+
this.closePromise = this.closeAll();
|
|
242
|
+
return this.closePromise;
|
|
243
|
+
}
|
|
244
|
+
async closeAll() {
|
|
245
|
+
this.closed = true;
|
|
246
|
+
for (const socket of this.sockets)
|
|
247
|
+
safeDestroy(socket);
|
|
248
|
+
this.sockets.clear();
|
|
249
|
+
if (this.ownedDht)
|
|
250
|
+
await this.dht.destroy();
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
exports.DirectDhtClient = DirectDhtClient;
|
|
254
|
+
//# sourceMappingURL=direct-dht.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"direct-dht.js","sourceRoot":"","sources":["../src/direct-dht.ts"],"names":[],"mappings":";;;;;;AAAA,wDAA0B;AAC1B,8CAAqB;AACrB,kEAAkC;AAClC,yCAAsF;AACtF,2CAAsD;AAGtD,MAAM,uBAAuB,GAAG,MAAM,CAAA;AACtC,MAAM,mBAAmB,GAAG,CAAC,GAAG,MAAM,CAAA;AAoDtC,SAAS,SAAS,CAAC,KAAiB,EAAE,MAAc,EAAE,KAAa;IACjE,IAAI,CAAC,aAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,UAAU,KAAK,MAAM,EAAE,CAAC;QACxD,MAAM,IAAI,4BAAgB,CAAC,kBAAM,CAAC,gBAAgB,EAAE,YAAY,MAAM,SAAS,KAAK,EAAE,CAAC,CAAA;IACzF,CAAC;IACD,OAAO,aAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AACxB,CAAC;AAED,SAAS,WAAW,CAAC,OAAgB;IACnC,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC5C,MAAM,IAAI,4BAAgB,CAAC,kBAAM,CAAC,gBAAgB,EAAE,0BAA0B,CAAC,CAAA;IACjF,CAAC;IACD,OAAO;QACL,SAAS,EAAE,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,EAAE,YAAY,CAAC;QACzD,SAAS,EAAE,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,EAAE,YAAY,CAAC;KAC1D,CAAA;AACH,CAAC;AAED,SAAS,aAAa,CAAC,OAAe;IACpC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;QAC5E,MAAM,IAAI,4BAAgB,CAAC,kBAAM,CAAC,gBAAgB,EAAE,kCAAkC,CAAC,CAAA;IACzF,CAAC;IACD,IAAI,OAAO,GAAG,mBAAmB,EAAE,CAAC;QAClC,MAAM,IAAI,4BAAgB,CAAC,kBAAM,CAAC,gBAAgB,EAAE,iCAAiC,CAAC,CAAA;IACxF,CAAC;AACH,CAAC;AAED,SAAS,UAAU,CAAC,OAA+D;IAIjF,IAAI,OAAO,CAAC,GAAG,KAAK,SAAS,IAAI,OAAO,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;QAClE,MAAM,IAAI,4BAAgB,CACxB,kBAAM,CAAC,gBAAgB,EACvB,iDAAiD,CAClD,CAAA;IACH,CAAC;IACD,IAAI,OAAO,CAAC,GAAG,KAAK,SAAS;QAAE,OAAO,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,CAAA;IACxE,OAAO;QACL,GAAG,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI,kBAAG,EAAE;QAC1D,KAAK,EAAE,IAAI;KACZ,CAAA;AACH,CAAC;AAED,SAAS,WAAW,CAAC,MAAuB,EAAE,KAAe;IAC3D,IAAI,CAAC;QACH,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IACvB,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;AACZ,CAAC;AAED,SAAS,cAAc,CAAC,IAAY,EAAE,OAAe,EAAE,KAAK,GAAY,IAAI;IAC1E,MAAM,KAAK,GAAG,IAAI,4BAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAA;IACxD,KAAK,CAAC,SAAS,GAAG,IAAI,CAAA;IACtB,OAAO,KAAK,CAAA;AACd,CAAC;AAED;IACW,SAAS,CAAW;IACZ,OAAO,CAAS;IAChB,GAAG,CAAe;IAClB,QAAQ,CAAS;IACjB,MAAM,CAAuB;IAC7B,uBAAuB,CAAmB;IAC1C,YAAY,CAAiD;IAC7D,OAAO,GAAG,IAAI,GAAG,EAAmB,CAAA;IAC7C,aAAa,GAAyB,IAAI,CAAA;IAC1C,YAAY,GAAyB,IAAI,CAAA;IACzC,MAAM,GAAG,KAAK,CAAA;IAEtB,YAAY,OAA+B;QACzC,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC5C,MAAM,IAAI,4BAAgB,CAAC,kBAAM,CAAC,gBAAgB,EAAE,mCAAmC,CAAC,CAAA;QAC1F,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QAC3C,IAAI,CAAC,SAAS,GAAG,aAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;QACjD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,uBAAuB,CAAC,EAAE,CAAC;YACpD,MAAM,IAAI,4BAAgB,CAAC,kBAAM,CAAC,gBAAgB,EAAE,sCAAsC,CAAC,CAAA;QAC7F,CAAC;QACD,IAAI,CAAC,uBAAuB,GAAG,OAAO,CAAC,uBAAuB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CACzE,SAAS,CAAC,GAAG,EAAE,EAAE,EAAE,2BAA2B,CAAC,CAChD,CAAA;QACD,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS,IAAI,OAAO,OAAO,CAAC,YAAY,KAAK,UAAU,EAAE,CAAC;YACrF,MAAM,IAAI,4BAAgB,CAAC,kBAAM,CAAC,gBAAgB,EAAE,6BAA6B,CAAC,CAAA;QACpF,CAAC;QACD,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAA;QACxC,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAA;QACnC,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAA;QACtB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAA;QAC7B,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;QAC9B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CACjC;YACE,QAAQ,EAAE,CAAC,eAAe,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC;SAC9D,EACD,CAAC,MAAM,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAChC,CAAA;QACD,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;IACnC,CAAC;IAEO,QAAQ,CAAC,eAAuB;QACtC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,CAAA;IACzC,CAAC;IAEO,SAAS,CAAC,eAA8B;QAC9C,IAAI,CAAC,aAAG,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,eAAe,CAAC,UAAU,KAAK,EAAE;YAAE,OAAO,KAAK,CAAA;QACrF,IAAI,QAAQ,GAAG,KAAK,CAAA;QACpB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,uBAAuB,EAAE,CAAC;YACnD,QAAQ,GAAG,uBAAM,CAAC,aAAa,CAAC,eAAe,EAAE,OAAO,CAAC,IAAI,QAAQ,CAAA;QACvE,CAAC;QACD,OAAO,QAAQ,CAAA;IACjB,CAAC;IAEO,MAAM,CAAC,MAAuB;QACpC,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC;YAC3D,WAAW,CAAC,MAAM,CAAC,CAAA;YACnB,OAAM;QACR,CAAC;QACD,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;QAC5B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QACxB,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAA;QACvD,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE,OAAM;QAC9B,IAAI,CAAC;YACH,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA;QAC3B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;QAC5B,CAAC;IACH,CAAC;IAED,MAAM;QACJ,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,OAAO,OAAO,CAAC,MAAM,CACnB,IAAI,4BAAgB,CAAC,kBAAM,CAAC,gBAAgB,EAAE,6BAA6B,CAAC,CAC7E,CAAA;QACH,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACxB,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAA;QACxE,CAAC;QACD,OAAO,IAAI,CAAC,aAAa,CAAA;IAC3B,CAAC;IAED,KAAK;QACH,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAA;QAC3D,OAAO,IAAI,CAAC,YAAY,CAAA;IAC1B,CAAC;IAEO,KAAK,CAAC,QAAQ;QACpB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;QAClB,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO;YAAE,WAAW,CAAC,MAAM,CAAC,CAAA;QACtD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;QACpB,IAAI,OAAO,GAAY,IAAI,CAAA;QAC3B,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAA;QAC3B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,GAAG,KAAK,CAAA;QACjB,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAA;YAC1B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAI,OAAO,KAAK,IAAI;oBAAE,OAAO,GAAG,KAAK,CAAA;YACvC,CAAC;QACH,CAAC;QACD,IAAI,OAAO,KAAK,IAAI;YAAE,MAAM,OAAO,CAAA;IACrC,CAAC;CACF;;AAED;IACW,SAAS,CAAW;IACZ,OAAO,CAAS;IAChB,GAAG,CAAe;IAClB,QAAQ,CAAS;IACjB,cAAc,CAAQ;IACtB,OAAO,GAAG,IAAI,GAAG,EAAmB,CAAA;IAC7C,YAAY,GAAyB,IAAI,CAAA;IACzC,MAAM,GAAG,KAAK,CAAA;IAEtB,YAAY,OAA+B;QACzC,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC5C,MAAM,IAAI,4BAAgB,CAAC,kBAAM,CAAC,gBAAgB,EAAE,mCAAmC,CAAC,CAAA;QAC1F,CAAC;QACD,IAAI,CAAC,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;QAC3C,IAAI,CAAC,SAAS,GAAG,aAAG,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAA;QACjD,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,uBAAuB,CAAA;QACvE,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;QAClC,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAA;QACnC,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAA;QACtB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAA;QAC7B,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;IAChC,CAAC;IAED,KAAK,CAAC,OAAO,CACX,eAA+B,EAC/B,OAAO,GAA4B,EAAE;QAErC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,IAAI,4BAAgB,CAAC,kBAAM,CAAC,gBAAgB,EAAE,6BAA6B,CAAC,CAAA;QACpF,CAAC;QACD,IAAA,yBAAc,EAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QAC9B,MAAM,uBAAuB,GAAG,SAAS,CAAC,eAAe,EAAE,EAAE,EAAE,mBAAmB,CAAC,CAAA;QACnF,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,cAAc,CAAA;QACtD,aAAa,CAAC,OAAO,CAAC,CAAA;QACtB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,uBAAuB,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA;QACnF,IAAI,WAAW,GAAiB,IAAI,CAAA;QACpC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;YAC3B,IAAI,WAAW,KAAK,IAAI;gBAAE,WAAW,GAAG,KAAK,CAAA;QAC/C,CAAC,CAAC,CAAA;QACF,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QACxB,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAA;QAEvD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;YAC7E,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;gBACpB,MAAM,CACJ,WAAW;oBACX,cAAc,CACZ,kBAAM,CAAC,mBAAmB,EAC1B,mDAAmD,CACpD,CACF,CAAA;YACH,CAAC;YACD,MAAM,eAAe,GAAG,MAAM,CAAC,eAAe,CAAA;YAC9C,IACE,CAAC,aAAG,CAAC,QAAQ,CAAC,eAAe,CAAC;gBAC9B,eAAe,CAAC,UAAU,KAAK,EAAE;gBACjC,CAAC,uBAAM,CAAC,aAAa,CAAC,eAAe,EAAE,uBAAuB,CAAC,EAC/D,CAAC;gBACD,MAAM,cAAc,CAClB,kBAAM,CAAC,mBAAmB,EAC1B,0DAA0D,CAC3D,CAAA;YACH,CAAC;YACD,OAAO,MAAM,CAAA;QACf,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;YAC1B,MAAM,KAAK,CAAA;QACb,CAAC;IACH,CAAC;IAEO,WAAW,CACjB,MAA4B,EAC5B,OAAe,EACf,MAA0C;QAE1C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,OAAO,GAAG,KAAK,CAAA;YACnB,IAAI,WAAW,GAAG,GAAG,EAAE,GAAE,CAAC,CAAA;YAC1B,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC5B,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,kBAAM,CAAC,eAAe,EAAE,iCAAiC,CAAC,CAAC,CAAA;YAC3F,CAAC,EAAE,OAAO,CAAC,CAAA;YACX,MAAM,MAAM,GAAG,CAAI,QAA4B,EAAE,KAAQ,EAAQ,EAAE;gBACjE,IAAI,OAAO;oBAAE,OAAM;gBACnB,OAAO,GAAG,IAAI,CAAA;gBACd,YAAY,CAAC,KAAK,CAAC,CAAA;gBACnB,WAAW,EAAE,CAAA;gBACb,QAAQ,CAAC,KAAK,CAAC,CAAA;YACjB,CAAC,CAAA;YACD,WAAW,GAAG,IAAA,kBAAO,EAAC,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,IAAA,qBAAU,GAAE,CAAC,CAAC,CAAA;YACjE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAC1B,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,EACjC,CAAC,KAAc,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAC1C,CAAA;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,KAAK;QACH,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAA;QAC3D,OAAO,IAAI,CAAC,YAAY,CAAA;IAC1B,CAAC;IAEO,KAAK,CAAC,QAAQ;QACpB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;QAClB,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO;YAAE,WAAW,CAAC,MAAM,CAAC,CAAA;QACtD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;QACpB,IAAI,IAAI,CAAC,QAAQ;YAAE,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAA;IAC7C,CAAC;CACF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Single source for reading the `code` of an unknown thrown value.
|
|
3
|
+
*
|
|
4
|
+
* Every caller previously kept a private copy of these helpers. The one module
|
|
5
|
+
* that hand-inlined the cast instead dereferenced a null `cause`, so the shared
|
|
6
|
+
* implementation is deliberately null-safe at every step.
|
|
7
|
+
*/
|
|
8
|
+
export declare function errorCode(error: unknown): string | null;
|
|
9
|
+
/**
|
|
10
|
+
* True when `error`, or the cause it wraps, reports ENOENT.
|
|
11
|
+
*
|
|
12
|
+
* `SwarmDeployError` always defines an own `cause` property, so it is present
|
|
13
|
+
* even when null; `errorCode` absorbs that case rather than dereferencing it.
|
|
14
|
+
*/
|
|
15
|
+
export declare function isMissing(error: unknown): boolean;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.errorCode = errorCode;
|
|
4
|
+
exports.isMissing = isMissing;
|
|
5
|
+
/**
|
|
6
|
+
* Single source for reading the `code` of an unknown thrown value.
|
|
7
|
+
*
|
|
8
|
+
* Every caller previously kept a private copy of these helpers. The one module
|
|
9
|
+
* that hand-inlined the cast instead dereferenced a null `cause`, so the shared
|
|
10
|
+
* implementation is deliberately null-safe at every step.
|
|
11
|
+
*/
|
|
12
|
+
function errorCode(error) {
|
|
13
|
+
if (typeof error !== 'object' || error === null || !('code' in error))
|
|
14
|
+
return null;
|
|
15
|
+
return typeof error.code === 'string' ? error.code : null;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* True when `error`, or the cause it wraps, reports ENOENT.
|
|
19
|
+
*
|
|
20
|
+
* `SwarmDeployError` always defines an own `cause` property, so it is present
|
|
21
|
+
* even when null; `errorCode` absorbs that case rather than dereferencing it.
|
|
22
|
+
*/
|
|
23
|
+
function isMissing(error) {
|
|
24
|
+
if (errorCode(error) === 'ENOENT')
|
|
25
|
+
return true;
|
|
26
|
+
if (typeof error !== 'object' || error === null || !('cause' in error))
|
|
27
|
+
return false;
|
|
28
|
+
return errorCode(error.cause) === 'ENOENT';
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=error-code.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"error-code.js","sourceRoot":"","sources":["../src/error-code.ts"],"names":[],"mappings":";;;;AAAA;;;;;;GAMG;AACH,mBAA0B,KAAc;IACtC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IAClF,OAAO,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAA;AAC3D,CAAC;AAED;;;;;GAKG;AACH,mBAA0B,KAAc;IACtC,IAAI,SAAS,CAAC,KAAK,CAAC,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAA;IAC9C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,CAAC,OAAO,IAAI,KAAK,CAAC;QAAE,OAAO,KAAK,CAAA;IACpF,OAAO,SAAS,CAAE,KAA4B,CAAC,KAAK,CAAC,KAAK,QAAQ,CAAA;AACpE,CAAC"}
|
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export declare const ERRORS: {
|
|
2
|
+
readonly AUTH_REJECTED: 'AUTH_REJECTED';
|
|
3
|
+
readonly SERVER_KEY_MISMATCH: 'SERVER_KEY_MISMATCH';
|
|
4
|
+
readonly PROTOCOL_INVALID: 'PROTOCOL_INVALID';
|
|
5
|
+
readonly INVALID_FILENAME: 'INVALID_FILENAME';
|
|
6
|
+
readonly INVALID_SEED: 'INVALID_SEED';
|
|
7
|
+
readonly INVALID_PUBLIC_KEY: 'INVALID_PUBLIC_KEY';
|
|
8
|
+
readonly FILE_TOO_LARGE: 'FILE_TOO_LARGE';
|
|
9
|
+
readonly STAGING_LIMIT: 'STAGING_LIMIT';
|
|
10
|
+
readonly ACTIVE_UPLOAD_LIMIT: 'ACTIVE_UPLOAD_LIMIT';
|
|
11
|
+
readonly DISK_RESERVE: 'DISK_RESERVE';
|
|
12
|
+
readonly FILE_EXISTS: 'FILE_EXISTS';
|
|
13
|
+
readonly FILE_BUSY: 'FILE_BUSY';
|
|
14
|
+
readonly CHECKSUM_MISMATCH: 'CHECKSUM_MISMATCH';
|
|
15
|
+
readonly CONNECT_TIMEOUT: 'CONNECT_TIMEOUT';
|
|
16
|
+
readonly UPLOAD_IDLE_TIMEOUT: 'UPLOAD_IDLE_TIMEOUT';
|
|
17
|
+
readonly ABORTED: 'ABORTED';
|
|
18
|
+
readonly COMMIT_FAILED: 'COMMIT_FAILED';
|
|
19
|
+
readonly LINK_CONFLICT: 'LINK_CONFLICT';
|
|
20
|
+
readonly LINK_FAILED: 'LINK_FAILED';
|
|
21
|
+
readonly UNSUPPORTED_STORAGE: 'UNSUPPORTED_STORAGE';
|
|
22
|
+
readonly HOOK_FAILED: 'HOOK_FAILED';
|
|
23
|
+
readonly CLEANUP_FAILED: 'CLEANUP_FAILED';
|
|
24
|
+
};
|
|
25
|
+
export type ErrorCode = (typeof ERRORS)[keyof typeof ERRORS];
|
|
26
|
+
export declare class SwarmDeployError extends Error {
|
|
27
|
+
code: ErrorCode | string;
|
|
28
|
+
cause: unknown | null;
|
|
29
|
+
transport?: boolean;
|
|
30
|
+
constructor(code: ErrorCode | string, message: string, cause?: unknown | null);
|
|
31
|
+
}
|
package/dist/errors.js
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SwarmDeployError = exports.ERRORS = void 0;
|
|
4
|
+
exports.ERRORS = {
|
|
5
|
+
AUTH_REJECTED: 'AUTH_REJECTED',
|
|
6
|
+
SERVER_KEY_MISMATCH: 'SERVER_KEY_MISMATCH',
|
|
7
|
+
PROTOCOL_INVALID: 'PROTOCOL_INVALID',
|
|
8
|
+
INVALID_FILENAME: 'INVALID_FILENAME',
|
|
9
|
+
INVALID_SEED: 'INVALID_SEED',
|
|
10
|
+
INVALID_PUBLIC_KEY: 'INVALID_PUBLIC_KEY',
|
|
11
|
+
FILE_TOO_LARGE: 'FILE_TOO_LARGE',
|
|
12
|
+
STAGING_LIMIT: 'STAGING_LIMIT',
|
|
13
|
+
ACTIVE_UPLOAD_LIMIT: 'ACTIVE_UPLOAD_LIMIT',
|
|
14
|
+
DISK_RESERVE: 'DISK_RESERVE',
|
|
15
|
+
FILE_EXISTS: 'FILE_EXISTS',
|
|
16
|
+
FILE_BUSY: 'FILE_BUSY',
|
|
17
|
+
CHECKSUM_MISMATCH: 'CHECKSUM_MISMATCH',
|
|
18
|
+
CONNECT_TIMEOUT: 'CONNECT_TIMEOUT',
|
|
19
|
+
UPLOAD_IDLE_TIMEOUT: 'UPLOAD_IDLE_TIMEOUT',
|
|
20
|
+
ABORTED: 'ABORTED',
|
|
21
|
+
COMMIT_FAILED: 'COMMIT_FAILED',
|
|
22
|
+
LINK_CONFLICT: 'LINK_CONFLICT',
|
|
23
|
+
LINK_FAILED: 'LINK_FAILED',
|
|
24
|
+
UNSUPPORTED_STORAGE: 'UNSUPPORTED_STORAGE',
|
|
25
|
+
HOOK_FAILED: 'HOOK_FAILED',
|
|
26
|
+
CLEANUP_FAILED: 'CLEANUP_FAILED'
|
|
27
|
+
};
|
|
28
|
+
class SwarmDeployError extends Error {
|
|
29
|
+
constructor(code, message, cause = null) {
|
|
30
|
+
super(message);
|
|
31
|
+
this.name = 'SwarmDeployError';
|
|
32
|
+
this.code = code;
|
|
33
|
+
this.cause = cause;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
exports.SwarmDeployError = SwarmDeployError;
|
|
37
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":";;;AAAa,QAAA,MAAM,GAAG;IACpB,aAAa,EAAE,eAAe;IAC9B,mBAAmB,EAAE,qBAAqB;IAC1C,gBAAgB,EAAE,kBAAkB;IACpC,gBAAgB,EAAE,kBAAkB;IACpC,YAAY,EAAE,cAAc;IAC5B,kBAAkB,EAAE,oBAAoB;IACxC,cAAc,EAAE,gBAAgB;IAChC,aAAa,EAAE,eAAe;IAC9B,mBAAmB,EAAE,qBAAqB;IAC1C,YAAY,EAAE,cAAc;IAC5B,WAAW,EAAE,aAAa;IAC1B,SAAS,EAAE,WAAW;IACtB,iBAAiB,EAAE,mBAAmB;IACtC,eAAe,EAAE,iBAAiB;IAClC,mBAAmB,EAAE,qBAAqB;IAC1C,OAAO,EAAE,SAAS;IAClB,aAAa,EAAE,eAAe;IAC9B,aAAa,EAAE,eAAe;IAC9B,WAAW,EAAE,aAAa;IAC1B,mBAAmB,EAAE,qBAAqB;IAC1C,WAAW,EAAE,aAAa;IAC1B,cAAc,EAAE,gBAAgB;CACxB,CAAA;AAIV,sBAA8B,SAAQ,KAAK;IAOzC,YAAY,IAAwB,EAAE,OAAe,EAAE,KAAK,GAAmB,IAAI;QACjF,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAA;QAC9B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAA;IACpB,CAAC;CACF"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
const node_events_1 = __importDefault(require("node:events"));
|
|
6
|
+
module.exports = node_events_1.default;
|
|
7
|
+
//# sourceMappingURL=events-node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"events-node.js","sourceRoot":"","sources":["../src/events-node.ts"],"names":[],"mappings":";;;;AAAA,8DAAgC;AAEhC,iBAAS,qBAAM,CAAA"}
|
package/dist/files.d.ts
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { ArtifactKind } from './types.js';
|
|
2
|
+
/** Reserved top-level namespace for server-managed historical artifacts. */
|
|
3
|
+
export declare const HISTORY_NAME_PREFIX = "history-";
|
|
4
|
+
export interface SelectUploadTargetOptions {
|
|
5
|
+
signal?: {
|
|
6
|
+
readonly aborted: boolean;
|
|
7
|
+
addEventListener(event: 'abort', callback: () => void, options?: {
|
|
8
|
+
once?: boolean;
|
|
9
|
+
}): void;
|
|
10
|
+
removeEventListener(event: 'abort', callback: () => void): void;
|
|
11
|
+
} | null;
|
|
12
|
+
}
|
|
13
|
+
export interface UploadTarget {
|
|
14
|
+
kind: ArtifactKind;
|
|
15
|
+
/** The managed artifact basename. */
|
|
16
|
+
name: string;
|
|
17
|
+
path: string;
|
|
18
|
+
}
|
|
19
|
+
export declare function validateBasename(name: string): string;
|
|
20
|
+
export declare function isReservedHistoryName(name: unknown): boolean;
|
|
21
|
+
/** The unique top-level path preserving the inode a replacement superseded. */
|
|
22
|
+
export declare function historyName(oldTransferId: string): string;
|
|
23
|
+
/**
|
|
24
|
+
* Canonicalizes the opt-in mutable-name policy. Values are exact upload names;
|
|
25
|
+
* the reserved history namespace and duplicate entries are always rejected.
|
|
26
|
+
*/
|
|
27
|
+
export declare function validateReplaceNames(values?: Iterable<string>): Set<string>;
|
|
28
|
+
/**
|
|
29
|
+
* Classifies one upload input. A directory becomes exactly one recursive
|
|
30
|
+
* directory artifact; children are never uploaded independently.
|
|
31
|
+
*/
|
|
32
|
+
export declare function selectUploadTarget(inputPath: string, { signal }?: SelectUploadTargetOptions): Promise<UploadTarget>;
|
package/dist/files.js
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.HISTORY_NAME_PREFIX = void 0;
|
|
7
|
+
exports.validateBasename = validateBasename;
|
|
8
|
+
exports.isReservedHistoryName = isReservedHistoryName;
|
|
9
|
+
exports.historyName = historyName;
|
|
10
|
+
exports.validateReplaceNames = validateReplaceNames;
|
|
11
|
+
exports.selectUploadTarget = selectUploadTarget;
|
|
12
|
+
const b4a_1 = __importDefault(require("b4a"));
|
|
13
|
+
const _fs_1 = __importDefault(require("#fs"));
|
|
14
|
+
const _path_1 = __importDefault(require("#path"));
|
|
15
|
+
const abort_js_1 = require("./abort.js");
|
|
16
|
+
const errors_js_1 = require("./errors.js");
|
|
17
|
+
const SAFE_NAME = /^[A-Za-z0-9][A-Za-z0-9._-]{0,199}$/;
|
|
18
|
+
const TRANSFER_ID_HEX = /^[0-9a-f]{64}$/;
|
|
19
|
+
/** Reserved top-level namespace for server-managed historical artifacts. */
|
|
20
|
+
exports.HISTORY_NAME_PREFIX = 'history-';
|
|
21
|
+
function validateBasename(name) {
|
|
22
|
+
if (typeof name !== 'string' || !SAFE_NAME.test(name) || b4a_1.default.from(name).byteLength > 100) {
|
|
23
|
+
throw new errors_js_1.SwarmDeployError(errors_js_1.ERRORS.INVALID_FILENAME, 'Invalid filename');
|
|
24
|
+
}
|
|
25
|
+
return name;
|
|
26
|
+
}
|
|
27
|
+
function isReservedHistoryName(name) {
|
|
28
|
+
return typeof name === 'string' && name.startsWith(exports.HISTORY_NAME_PREFIX);
|
|
29
|
+
}
|
|
30
|
+
/** The unique top-level path preserving the inode a replacement superseded. */
|
|
31
|
+
function historyName(oldTransferId) {
|
|
32
|
+
if (typeof oldTransferId !== 'string' || !TRANSFER_ID_HEX.test(oldTransferId)) {
|
|
33
|
+
throw new errors_js_1.SwarmDeployError(errors_js_1.ERRORS.PROTOCOL_INVALID, 'Invalid history transfer ID');
|
|
34
|
+
}
|
|
35
|
+
return `${exports.HISTORY_NAME_PREFIX}${oldTransferId}`;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Canonicalizes the opt-in mutable-name policy. Values are exact upload names;
|
|
39
|
+
* the reserved history namespace and duplicate entries are always rejected.
|
|
40
|
+
*/
|
|
41
|
+
function validateReplaceNames(values) {
|
|
42
|
+
if (values === undefined || values === null)
|
|
43
|
+
return new Set();
|
|
44
|
+
if (typeof values === 'string' ||
|
|
45
|
+
typeof values !== 'object' ||
|
|
46
|
+
typeof values[Symbol.iterator] !== 'function') {
|
|
47
|
+
throw new errors_js_1.SwarmDeployError(errors_js_1.ERRORS.PROTOCOL_INVALID, 'Invalid replacement names');
|
|
48
|
+
}
|
|
49
|
+
const names = new Set();
|
|
50
|
+
for (const value of values) {
|
|
51
|
+
if (typeof value !== 'string') {
|
|
52
|
+
throw new errors_js_1.SwarmDeployError(errors_js_1.ERRORS.INVALID_FILENAME, 'Invalid filename');
|
|
53
|
+
}
|
|
54
|
+
validateBasename(value);
|
|
55
|
+
if (isReservedHistoryName(value)) {
|
|
56
|
+
throw new errors_js_1.SwarmDeployError(errors_js_1.ERRORS.INVALID_FILENAME, 'Reserved replacement name');
|
|
57
|
+
}
|
|
58
|
+
if (names.has(value)) {
|
|
59
|
+
throw new errors_js_1.SwarmDeployError(errors_js_1.ERRORS.PROTOCOL_INVALID, 'Duplicate replacement name');
|
|
60
|
+
}
|
|
61
|
+
names.add(value);
|
|
62
|
+
}
|
|
63
|
+
return names;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Classifies one upload input. A directory becomes exactly one recursive
|
|
67
|
+
* directory artifact; children are never uploaded independently.
|
|
68
|
+
*/
|
|
69
|
+
async function selectUploadTarget(inputPath, { signal = null } = {}) {
|
|
70
|
+
(0, abort_js_1.throwIfAborted)(signal);
|
|
71
|
+
const stat = await _fs_1.default.promises.lstat(inputPath);
|
|
72
|
+
(0, abort_js_1.throwIfAborted)(signal);
|
|
73
|
+
if (stat.isSymbolicLink()) {
|
|
74
|
+
throw new errors_js_1.SwarmDeployError(errors_js_1.ERRORS.INVALID_FILENAME, 'Symlinks are not supported');
|
|
75
|
+
}
|
|
76
|
+
if (!stat.isFile() && !stat.isDirectory()) {
|
|
77
|
+
throw new errors_js_1.SwarmDeployError(errors_js_1.ERRORS.INVALID_FILENAME, 'Path must be a regular file or directory');
|
|
78
|
+
}
|
|
79
|
+
const name = validateBasename(_path_1.default.basename(_path_1.default.resolve(inputPath)));
|
|
80
|
+
if (isReservedHistoryName(name)) {
|
|
81
|
+
throw new errors_js_1.SwarmDeployError(errors_js_1.ERRORS.INVALID_FILENAME, 'Reserved artifact name');
|
|
82
|
+
}
|
|
83
|
+
return { kind: stat.isDirectory() ? 'directory' : 'file', name, path: inputPath };
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"files.js","sourceRoot":"","sources":["../src/files.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,8CAAqB;AACrB,8CAAoB;AACpB,kDAAwB;AACxB,yCAA2C;AAC3C,2CAAsD;AAGtD,MAAM,SAAS,GAAG,oCAAoC,CAAA;AACtD,MAAM,eAAe,GAAG,gBAAgB,CAAA;AAExC,4EAA4E;AAC/D,QAAA,mBAAmB,GAAG,UAAU,CAAA;AAiB7C,0BAAiC,IAAY;IAC3C,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,aAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,UAAU,GAAG,GAAG,EAAE,CAAC;QACzF,MAAM,IAAI,4BAAgB,CAAC,kBAAM,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,CAAA;IACzE,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,+BAAsC,IAAa;IACjD,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,QAAA,mBAAmB,CAAC,CAAA;AACzE,CAAC;AAED,+EAA+E;AAC/E,qBAA4B,aAAqB;IAC/C,IAAI,OAAO,aAAa,KAAK,QAAQ,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;QAC9E,MAAM,IAAI,4BAAgB,CAAC,kBAAM,CAAC,gBAAgB,EAAE,6BAA6B,CAAC,CAAA;IACpF,CAAC;IACD,OAAO,GAAG,QAAA,mBAAmB,GAAG,aAAa,EAAE,CAAA;AACjD,CAAC;AAED;;;GAGG;AACH,8BAAqC,MAAyB;IAC5D,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,IAAI,GAAG,EAAE,CAAA;IAC7D,IACE,OAAO,MAAM,KAAK,QAAQ;QAC1B,OAAO,MAAM,KAAK,QAAQ;QAC1B,OAAQ,MAA2B,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,UAAU,EACnE,CAAC;QACD,MAAM,IAAI,4BAAgB,CAAC,kBAAM,CAAC,gBAAgB,EAAE,2BAA2B,CAAC,CAAA;IAClF,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAA;IAC/B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,IAAI,4BAAgB,CAAC,kBAAM,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,CAAA;QACzE,CAAC;QACD,gBAAgB,CAAC,KAAK,CAAC,CAAA;QACvB,IAAI,qBAAqB,CAAC,KAAK,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,4BAAgB,CAAC,kBAAM,CAAC,gBAAgB,EAAE,2BAA2B,CAAC,CAAA;QAClF,CAAC;QACD,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACrB,MAAM,IAAI,4BAAgB,CAAC,kBAAM,CAAC,gBAAgB,EAAE,4BAA4B,CAAC,CAAA;QACnF,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;IAClB,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;;GAGG;AACI,KAAK,6BACV,SAAiB,EACjB,EAAE,MAAM,GAAG,IAAI,EAAE,GAA8B,EAAE;IAEjD,IAAA,yBAAc,EAAC,MAAM,CAAC,CAAA;IACtB,MAAM,IAAI,GAAG,MAAM,aAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;IAC/C,IAAA,yBAAc,EAAC,MAAM,CAAC,CAAA;IACtB,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;QAC1B,MAAM,IAAI,4BAAgB,CAAC,kBAAM,CAAC,gBAAgB,EAAE,4BAA4B,CAAC,CAAA;IACnF,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QAC1C,MAAM,IAAI,4BAAgB,CAAC,kBAAM,CAAC,gBAAgB,EAAE,0CAA0C,CAAC,CAAA;IACjG,CAAC;IACD,MAAM,IAAI,GAAG,gBAAgB,CAAC,eAAI,CAAC,QAAQ,CAAC,eAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAA;IACrE,IAAI,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,4BAAgB,CAAC,kBAAM,CAAC,gBAAgB,EAAE,wBAAwB,CAAC,CAAA;IAC/E,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,CAAA;AACnF,CAAC"}
|
package/dist/fs-node.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
const node_fs_1 = __importDefault(require("node:fs"));
|
|
6
|
+
module.exports = node_fs_1.default;
|
|
7
|
+
//# sourceMappingURL=fs-node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs-node.js","sourceRoot":"","sources":["../src/fs-node.ts"],"names":[],"mappings":";;;;AAAA,sDAAwB;AAExB,iBAAS,iBAAE,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type ServerHooks } from './hooks.js';
|
|
2
|
+
/**
|
|
3
|
+
* Loads a JavaScript hooks module (`.js`, `.mjs` or `.cjs`) and returns the
|
|
4
|
+
* validated, frozen hook snapshot. Only `beforeCommit`, `afterCommit` and
|
|
5
|
+
* `onFailure` are picked, by own property name; other exports are ignored.
|
|
6
|
+
* Defined named exports take precedence over the default export's callbacks. Every failure is a fixed-message configuration
|
|
7
|
+
* error that never includes module content.
|
|
8
|
+
*/
|
|
9
|
+
export declare function loadHooksModule(modulePath: string, cwd: string): Promise<ServerHooks>;
|