@science-corporation/synapse 2.2.6 → 2.2.7
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/device.d.ts +4 -0
- package/dist/device.d.ts.map +1 -1
- package/dist/device.js +91 -1
- package/dist/device.js.map +1 -1
- package/package.json +1 -1
- package/src/device.ts +82 -1
package/dist/device.d.ts
CHANGED
|
@@ -50,6 +50,10 @@ declare class Device {
|
|
|
50
50
|
sendChunk: (fileChunk: Uint8Array) => void;
|
|
51
51
|
end: () => void;
|
|
52
52
|
};
|
|
53
|
+
deploy(debPackagePath: string, callbacks?: {
|
|
54
|
+
onProgress?: (bytesTransferred: number, totalBytes: number) => void;
|
|
55
|
+
onStatus?: (message: string) => void;
|
|
56
|
+
}): Promise<Status>;
|
|
53
57
|
_handleStatusResponse(status: synapse.IStatus): Status;
|
|
54
58
|
}
|
|
55
59
|
export default Device;
|
package/dist/device.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"device.d.ts","sourceRoot":"","sources":["../src/device.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAA6B,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"device.d.ts","sourceRoot":"","sources":["../src/device.ts"],"names":[],"mappings":"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"}
|
package/dist/device.js
CHANGED
|
@@ -1,4 +1,27 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
2
25
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
26
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
27
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -13,10 +36,29 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
13
36
|
};
|
|
14
37
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
38
|
const grpc_js_1 = require("@grpc/grpc-js");
|
|
39
|
+
const fs = __importStar(require("fs"));
|
|
40
|
+
const crypto = __importStar(require("crypto"));
|
|
41
|
+
const path = __importStar(require("path"));
|
|
42
|
+
const long_1 = __importDefault(require("long"));
|
|
16
43
|
const proto_json_1 = __importDefault(require("./api/proto.json"));
|
|
17
44
|
const api_1 = require("./api/api");
|
|
18
45
|
const client_1 = require("./utils/client");
|
|
19
46
|
const status_1 = require("./utils/status");
|
|
47
|
+
const FILE_CHUNK_SIZE = 1024 * 1024; // 1MB chunks
|
|
48
|
+
function calculateSha256(filePath) {
|
|
49
|
+
return new Promise((resolve, reject) => {
|
|
50
|
+
const hash = crypto.createHash("sha256");
|
|
51
|
+
const stream = fs.createReadStream(filePath);
|
|
52
|
+
stream.on("data", (data) => hash.update(data));
|
|
53
|
+
stream.on("end", () => resolve(hash.digest("hex")));
|
|
54
|
+
stream.on("error", reject);
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
function extractVersion(packageName) {
|
|
58
|
+
// Format: package-name_version_architecture.deb
|
|
59
|
+
const parts = packageName.split("_");
|
|
60
|
+
return parts.length >= 2 ? parts[1] : "";
|
|
61
|
+
}
|
|
20
62
|
const kSynapseService = "synapse.SynapseDevice";
|
|
21
63
|
class Device {
|
|
22
64
|
constructor(uri) {
|
|
@@ -205,7 +247,7 @@ class Device {
|
|
|
205
247
|
}
|
|
206
248
|
deployApp(options = {}, callbacks) {
|
|
207
249
|
const { onData, onEnd, onError, onStatus } = callbacks;
|
|
208
|
-
const call = this.rpc.deployApp(options);
|
|
250
|
+
const call = this.rpc.deployApp({}, options);
|
|
209
251
|
call.on("data", (data) => {
|
|
210
252
|
onData(data);
|
|
211
253
|
});
|
|
@@ -235,6 +277,54 @@ class Device {
|
|
|
235
277
|
},
|
|
236
278
|
};
|
|
237
279
|
}
|
|
280
|
+
deploy(debPackagePath, callbacks) {
|
|
281
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
282
|
+
const fileName = path.basename(debPackagePath);
|
|
283
|
+
const fileSize = fs.statSync(debPackagePath).size;
|
|
284
|
+
const sha256Sum = yield calculateSha256(debPackagePath);
|
|
285
|
+
const version = extractVersion(fileName);
|
|
286
|
+
const metadata = {
|
|
287
|
+
name: fileName,
|
|
288
|
+
version,
|
|
289
|
+
size: long_1.default.fromNumber(fileSize),
|
|
290
|
+
sha256Sum,
|
|
291
|
+
};
|
|
292
|
+
return new Promise((resolve, reject) => {
|
|
293
|
+
let bytesTransferred = 0;
|
|
294
|
+
const { sendMetadata, sendChunk, end } = this.deployApp({}, {
|
|
295
|
+
onData: (response) => {
|
|
296
|
+
var _a;
|
|
297
|
+
(_a = callbacks === null || callbacks === void 0 ? void 0 : callbacks.onStatus) === null || _a === void 0 ? void 0 : _a.call(callbacks, response.message || "");
|
|
298
|
+
if (response.status !== api_1.synapse.StatusCode.kOk) {
|
|
299
|
+
reject(new Error(response.message || "Deployment failed"));
|
|
300
|
+
}
|
|
301
|
+
},
|
|
302
|
+
onEnd: () => {
|
|
303
|
+
resolve(new status_1.Status());
|
|
304
|
+
},
|
|
305
|
+
onError: (err) => {
|
|
306
|
+
reject(err);
|
|
307
|
+
},
|
|
308
|
+
});
|
|
309
|
+
sendMetadata(metadata);
|
|
310
|
+
const stream = fs.createReadStream(debPackagePath, {
|
|
311
|
+
highWaterMark: FILE_CHUNK_SIZE,
|
|
312
|
+
});
|
|
313
|
+
stream.on("data", (chunk) => {
|
|
314
|
+
var _a;
|
|
315
|
+
sendChunk(chunk);
|
|
316
|
+
bytesTransferred += chunk.length;
|
|
317
|
+
(_a = callbacks === null || callbacks === void 0 ? void 0 : callbacks.onProgress) === null || _a === void 0 ? void 0 : _a.call(callbacks, bytesTransferred, fileSize);
|
|
318
|
+
});
|
|
319
|
+
stream.on("end", () => {
|
|
320
|
+
end();
|
|
321
|
+
});
|
|
322
|
+
stream.on("error", (err) => {
|
|
323
|
+
reject(err);
|
|
324
|
+
});
|
|
325
|
+
});
|
|
326
|
+
});
|
|
327
|
+
}
|
|
238
328
|
_handleStatusResponse(status) {
|
|
239
329
|
const { code, message } = status;
|
|
240
330
|
if (code !== api_1.synapse.StatusCode.kOk) {
|
package/dist/device.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"device.js","sourceRoot":"","sources":["../src/device.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"device.js","sourceRoot":"","sources":["../src/device.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,2CAAmE;AACnE,uCAAyB;AACzB,+CAAiC;AACjC,2CAA6B;AAC7B,gDAAwB;AAExB,kEAAsC;AACtC,mCAAoC;AAEpC,2CAAqD;AACrD,2CAA0D;AAE1D,MAAM,eAAe,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,aAAa;AAElD,SAAS,eAAe,CAAC,QAAgB;IACvC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QACzC,MAAM,MAAM,GAAG,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAC7C,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/C,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACpD,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,cAAc,CAAC,WAAmB;IACzC,gDAAgD;IAChD,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACrC,OAAO,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAC3C,CAAC;AAED,MAAM,eAAe,GAAG,uBAAuB,CAAC;AAEhD,MAAM,MAAM;IAIV,YAAmB,GAAW;QAAX,QAAG,GAAH,GAAG,CAAQ;QAH9B,QAAG,GAAe,IAAI,CAAC;QACvB,YAAO,GAAmB,IAAI,CAAC;QAG7B,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,IAAA,eAAM,EAAC,oBAAM,EAAE,eAAe,CAAC,CAAC,GAAG,EAAE,qBAAW,CAAC,cAAc,EAAE,CAAC,CAAC;QAC9F,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,+BAA+B,GAAG,KAAK,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QAC3E,CAAC;QACD,IAAI,CAAC,GAAG,GAAG,MAA+B,CAAC;IAC7C,CAAC;IAEK,SAAS;6DAAC,MAAc,EAAE,UAAuB,EAAE;YACvD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACrC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBACvB,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;gBAC/B,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,GAAiB,EAAE,GAAG,EAAE,EAAE;oBAC5D,IAAI,GAAG,EAAE,CAAC;wBACR,MAAM,CAAC,GAAG,CAAC,CAAC;oBACd,CAAC;yBAAM,CAAC;wBACN,MAAM,MAAM,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAI,CAAC,CAAC;wBAChD,IAAI,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC;4BAChB,OAAO,CAAC,MAAM,CAAC,CAAC;wBAClB,CAAC;6BAAM,CAAC;4BACN,MAAM,CAAC,IAAI,eAAM,CAAC,MAAM,CAAC,IAAI,EAAE,+BAA+B,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;wBACnF,CAAC;oBACH,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC;KAAA;IAEK,IAAI;6DAAC,UAAuB,EAAE;YAClC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACrC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,GAAiB,EAAE,GAAuB,EAAE,EAAE;oBACxE,IAAI,GAAG,EAAE,CAAC;wBACR,MAAM,CAAC,GAAG,CAAC,CAAC;oBACd,CAAC;yBAAM,IAAI,CAAC,GAAG,EAAE,CAAC;wBAChB,MAAM,CAAC,IAAI,eAAM,CAAC,GAAG,CAAC,IAAI,EAAE,6BAA6B,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;oBAC5E,CAAC;yBAAM,CAAC;wBACN,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,eAAM,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;oBACnD,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC;KAAA;IAEK,KAAK;6DAAC,UAAuB,EAAE;YACnC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACrC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,GAAiB,EAAE,GAAoB,EAAE,EAAE;oBACtE,IAAI,GAAG,EAAE,CAAC;wBACR,MAAM,CAAC,GAAG,CAAC,CAAC;oBACd,CAAC;yBAAM,CAAC;wBACN,MAAM,MAAM,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAI,CAAC,CAAC;wBAChD,IAAI,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC;4BAChB,OAAO,CAAC,MAAM,CAAC,CAAC;wBAClB,CAAC;6BAAM,CAAC;4BACN,MAAM,CAAC,IAAI,eAAM,CAAC,MAAM,CAAC,IAAI,EAAE,2BAA2B,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;wBAC/E,CAAC;oBACH,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC;KAAA;IAEK,IAAI;6DAAC,UAAuB,EAAE;YAClC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACrC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,GAAiB,EAAE,GAAoB,EAAE,EAAE;oBACrE,IAAI,GAAG,EAAE,CAAC;wBACR,MAAM,CAAC,GAAG,CAAC,CAAC;oBACd,CAAC;yBAAM,CAAC;wBACN,MAAM,MAAM,GAAG,IAAI,CAAC,qBAAqB,CAAC,GAAI,CAAC,CAAC;wBAChD,IAAI,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC;4BAChB,OAAO,CAAC,MAAM,CAAC,CAAC;wBAClB,CAAC;6BAAM,CAAC;4BACN,MAAM,CAAC,IAAI,eAAM,CAAC,MAAM,CAAC,IAAI,EAAE,0BAA0B,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;wBAC9E,CAAC;oBACH,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC;KAAA;IAEK,WAAW;6DACf,KAAkC,EAClC,UAAuB,EAAE,EACzB,SAKC;YAED,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAC;YACvD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YAClD,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAiC,EAAE,EAAE;gBACpD,MAAM,CAAC,IAAI,CAAC,CAAC;YACf,CAAC,CAAC,CAAC;YACH,IAAI,KAAK,EAAE,CAAC;gBACV,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;oBAClB,KAAK,EAAE,CAAC;gBACV,CAAC,CAAC,CAAC;YACL,CAAC;YACD,IAAI,OAAO,EAAE,CAAC;gBACZ,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAiB,EAAE,EAAE;oBACrC,OAAO,CAAC,GAAG,CAAC,CAAC;gBACf,CAAC,CAAC,CAAC;YACL,CAAC;YACD,IAAI,QAAQ,EAAE,CAAC;gBACb,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,UAAU,EAAE,EAAE;oBAC/B,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAG,IAAI,eAAM,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;gBAC9D,CAAC,CAAC,CAAC;YACL,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;KAAA;IAED,iDAAiD;IAE3C,KAAK;6DACT,OAA8B,EAC9B,UAAuB,EAAE;YAEzB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACrC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,GAAiB,EAAE,GAA0B,EAAE,EAAE;oBACjF,IAAI,GAAG,EAAE,CAAC;wBACR,MAAM,CAAC,GAAG,CAAC,CAAC;oBACd,CAAC;yBAAM,IAAI,CAAC,GAAG,EAAE,CAAC;wBAChB,MAAM,CAAC,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC,CAAC;oBAC9C,CAAC;yBAAM,CAAC;wBACN,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,eAAM,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;oBACnD,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC;KAAA;IAED,OAAO;IAED,OAAO;6DACX,KAA+B,EAC/B,UAAuB,EAAE;YAEzB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACrC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,GAAiB,EAAE,GAA6B,EAAE,EAAE;oBACpF,IAAI,GAAG,EAAE,CAAC;wBACR,MAAM,CAAC,GAAG,CAAC,CAAC;oBACd,CAAC;yBAAM,CAAC;wBACN,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,eAAM,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;oBACnD,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC;KAAA;IAEK,QAAQ;6DACZ,KAA+B,EAC/B,UAAuB,EAAE,EACzB,SAKC;YAED,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAC;YACvD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;YAC/C,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YACxB,IAAI,KAAK,EAAE,CAAC;gBACV,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACxB,CAAC;YACD,IAAI,OAAO,EAAE,CAAC;gBACZ,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC5B,CAAC;YACD,IAAI,QAAQ,EAAE,CAAC;gBACb,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,UAAU,EAAE,EAAE;oBAC/B,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAG,IAAI,eAAM,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;gBAC9D,CAAC,CAAC,CAAC;YACL,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;KAAA;IAED,OAAO;IAED,QAAQ;6DAAC,UAAuB,EAAE;YACtC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACrC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,GAAiB,EAAE,GAA6B,EAAE,EAAE;oBAClF,IAAI,GAAG,EAAE,CAAC;wBACR,MAAM,CAAC,GAAG,CAAC,CAAC;oBACd,CAAC;yBAAM,IAAI,CAAC,GAAG,EAAE,CAAC;wBAChB,MAAM,CAAC,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC,CAAC;oBACjD,CAAC;yBAAM,CAAC;wBACN,OAAO,CAAC,EAAE,MAAM,EAAE,IAAI,eAAM,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAC;oBACnD,CAAC;gBACH,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC;KAAA;IAED,SAAS,CACP,UAAuB,EAAE,EACzB,SAKC;QAED,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAC;QACvD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAE7C,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAA+B,EAAE,EAAE;YAClD,MAAM,CAAC,IAAI,CAAC,CAAC;QACf,CAAC,CAAC,CAAC;QACH,IAAI,KAAK,EAAE,CAAC;YACV,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACxB,CAAC;QACD,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAiB,EAAE,EAAE;gBACrC,OAAO,CAAC,GAAG,CAAC,CAAC;YACf,CAAC,CAAC,CAAC;QACL,CAAC;QACD,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,UAAU,EAAE,EAAE;gBAC/B,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAG,IAAI,eAAM,CAAC,UAAU,CAAC,IAAI,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;YAC9D,CAAC,CAAC,CAAC;QACL,CAAC;QAED,OAAO;YACL,IAAI;YACJ,YAAY,EAAE,CAAC,QAAkC,EAAE,EAAE;gBACnD,IAAI,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC3B,CAAC;YACD,SAAS,EAAE,CAAC,SAAqB,EAAE,EAAE;gBACnC,IAAI,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;YAC5B,CAAC;YACD,GAAG,EAAE,GAAG,EAAE;gBACR,IAAI,CAAC,GAAG,EAAE,CAAC;YACb,CAAC;SACF,CAAC;IACJ,CAAC;IAEK,MAAM,CACV,cAAsB,EACtB,SAGC;;YAED,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;YAC/C,MAAM,QAAQ,GAAG,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,IAAI,CAAC;YAClD,MAAM,SAAS,GAAG,MAAM,eAAe,CAAC,cAAc,CAAC,CAAC;YACxD,MAAM,OAAO,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;YAEzC,MAAM,QAAQ,GAA6B;gBACzC,IAAI,EAAE,QAAQ;gBACd,OAAO;gBACP,IAAI,EAAE,cAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;gBAC/B,SAAS;aACV,CAAC;YAEF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACrC,IAAI,gBAAgB,GAAG,CAAC,CAAC;gBAEzB,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE;oBAC1D,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE;;wBACnB,MAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,QAAQ,0DAAG,QAAQ,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC;wBAC9C,IAAI,QAAQ,CAAC,MAAM,KAAK,aAAO,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;4BAC/C,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,IAAI,mBAAmB,CAAC,CAAC,CAAC;wBAC7D,CAAC;oBACH,CAAC;oBACD,KAAK,EAAE,GAAG,EAAE;wBACV,OAAO,CAAC,IAAI,eAAM,EAAE,CAAC,CAAC;oBACxB,CAAC;oBACD,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;wBACf,MAAM,CAAC,GAAG,CAAC,CAAC;oBACd,CAAC;iBACF,CAAC,CAAC;gBAEH,YAAY,CAAC,QAAQ,CAAC,CAAC;gBAEvB,MAAM,MAAM,GAAG,EAAE,CAAC,gBAAgB,CAAC,cAAc,EAAE;oBACjD,aAAa,EAAE,eAAe;iBAC/B,CAAC,CAAC;gBAEH,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;;oBAClC,SAAS,CAAC,KAAK,CAAC,CAAC;oBACjB,gBAAgB,IAAI,KAAK,CAAC,MAAM,CAAC;oBACjC,MAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,UAAU,0DAAG,gBAAgB,EAAE,QAAQ,CAAC,CAAC;gBACtD,CAAC,CAAC,CAAC;gBAEH,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;oBACpB,GAAG,EAAE,CAAC;gBACR,CAAC,CAAC,CAAC;gBAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;oBACzB,MAAM,CAAC,GAAG,CAAC,CAAC;gBACd,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC;KAAA;IAED,qBAAqB,CAAC,MAAuB;QAC3C,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC;QACjC,IAAI,IAAI,KAAK,aAAO,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;YACpC,OAAO,IAAA,yBAAgB,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;QAC7C,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,eAAM,EAAE,CAAC;QACtB,CAAC;IACH,CAAC;CACF;AAED,kBAAe,MAAM,CAAC"}
|
package/package.json
CHANGED
package/src/device.ts
CHANGED
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
import { Channel, credentials, ServiceError } from "@grpc/grpc-js";
|
|
2
|
+
import * as fs from "fs";
|
|
3
|
+
import * as crypto from "crypto";
|
|
4
|
+
import * as path from "path";
|
|
5
|
+
import Long from "long";
|
|
2
6
|
|
|
3
7
|
import protos from "./api/proto.json";
|
|
4
8
|
import { synapse } from "./api/api";
|
|
@@ -6,6 +10,24 @@ import Config from "./config";
|
|
|
6
10
|
import { CallOptions, create } from "./utils/client";
|
|
7
11
|
import { fromDeviceStatus, Status } from "./utils/status";
|
|
8
12
|
|
|
13
|
+
const FILE_CHUNK_SIZE = 1024 * 1024; // 1MB chunks
|
|
14
|
+
|
|
15
|
+
function calculateSha256(filePath: string): Promise<string> {
|
|
16
|
+
return new Promise((resolve, reject) => {
|
|
17
|
+
const hash = crypto.createHash("sha256");
|
|
18
|
+
const stream = fs.createReadStream(filePath);
|
|
19
|
+
stream.on("data", (data) => hash.update(data));
|
|
20
|
+
stream.on("end", () => resolve(hash.digest("hex")));
|
|
21
|
+
stream.on("error", reject);
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
function extractVersion(packageName: string): string {
|
|
26
|
+
// Format: package-name_version_architecture.deb
|
|
27
|
+
const parts = packageName.split("_");
|
|
28
|
+
return parts.length >= 2 ? parts[1] : "";
|
|
29
|
+
}
|
|
30
|
+
|
|
9
31
|
const kSynapseService = "synapse.SynapseDevice";
|
|
10
32
|
|
|
11
33
|
class Device {
|
|
@@ -209,7 +231,7 @@ class Device {
|
|
|
209
231
|
}
|
|
210
232
|
) {
|
|
211
233
|
const { onData, onEnd, onError, onStatus } = callbacks;
|
|
212
|
-
const call = this.rpc.deployApp(options);
|
|
234
|
+
const call = this.rpc.deployApp({}, options);
|
|
213
235
|
|
|
214
236
|
call.on("data", (data: synapse.AppDeployResponse) => {
|
|
215
237
|
onData(data);
|
|
@@ -242,6 +264,65 @@ class Device {
|
|
|
242
264
|
};
|
|
243
265
|
}
|
|
244
266
|
|
|
267
|
+
async deploy(
|
|
268
|
+
debPackagePath: string,
|
|
269
|
+
callbacks?: {
|
|
270
|
+
onProgress?: (bytesTransferred: number, totalBytes: number) => void;
|
|
271
|
+
onStatus?: (message: string) => void;
|
|
272
|
+
}
|
|
273
|
+
): Promise<Status> {
|
|
274
|
+
const fileName = path.basename(debPackagePath);
|
|
275
|
+
const fileSize = fs.statSync(debPackagePath).size;
|
|
276
|
+
const sha256Sum = await calculateSha256(debPackagePath);
|
|
277
|
+
const version = extractVersion(fileName);
|
|
278
|
+
|
|
279
|
+
const metadata: synapse.IPackageMetadata = {
|
|
280
|
+
name: fileName,
|
|
281
|
+
version,
|
|
282
|
+
size: Long.fromNumber(fileSize),
|
|
283
|
+
sha256Sum,
|
|
284
|
+
};
|
|
285
|
+
|
|
286
|
+
return new Promise((resolve, reject) => {
|
|
287
|
+
let bytesTransferred = 0;
|
|
288
|
+
|
|
289
|
+
const { sendMetadata, sendChunk, end } = this.deployApp({}, {
|
|
290
|
+
onData: (response) => {
|
|
291
|
+
callbacks?.onStatus?.(response.message || "");
|
|
292
|
+
if (response.status !== synapse.StatusCode.kOk) {
|
|
293
|
+
reject(new Error(response.message || "Deployment failed"));
|
|
294
|
+
}
|
|
295
|
+
},
|
|
296
|
+
onEnd: () => {
|
|
297
|
+
resolve(new Status());
|
|
298
|
+
},
|
|
299
|
+
onError: (err) => {
|
|
300
|
+
reject(err);
|
|
301
|
+
},
|
|
302
|
+
});
|
|
303
|
+
|
|
304
|
+
sendMetadata(metadata);
|
|
305
|
+
|
|
306
|
+
const stream = fs.createReadStream(debPackagePath, {
|
|
307
|
+
highWaterMark: FILE_CHUNK_SIZE,
|
|
308
|
+
});
|
|
309
|
+
|
|
310
|
+
stream.on("data", (chunk: Buffer) => {
|
|
311
|
+
sendChunk(chunk);
|
|
312
|
+
bytesTransferred += chunk.length;
|
|
313
|
+
callbacks?.onProgress?.(bytesTransferred, fileSize);
|
|
314
|
+
});
|
|
315
|
+
|
|
316
|
+
stream.on("end", () => {
|
|
317
|
+
end();
|
|
318
|
+
});
|
|
319
|
+
|
|
320
|
+
stream.on("error", (err) => {
|
|
321
|
+
reject(err);
|
|
322
|
+
});
|
|
323
|
+
});
|
|
324
|
+
}
|
|
325
|
+
|
|
245
326
|
_handleStatusResponse(status: synapse.IStatus): Status {
|
|
246
327
|
const { code, message } = status;
|
|
247
328
|
if (code !== synapse.StatusCode.kOk) {
|