@iotize/tap
Version:
IoTize Device client for Javascript
124 lines • 10.3 kB
JavaScript
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
import '@iotize/tap/auth';
import '@iotize/tap/service/impl/single-packet';
import { retryWithDelay } from '@iotize/common/rxjs';
import { StepOperations } from '@iotize/common/task-manager';
import { ComProtocol } from '@iotize/tap/protocol/api';
import { SinglePacketStoreInfo, SinglePacketStoreLoader, } from '@iotize/tap/service/impl/single-packet';
import { defer } from 'rxjs';
import { map } from 'rxjs/operators';
export class TapNLinkUpdater extends StepOperations {
constructor(steps, options = {}) {
super(StepOperations.createSequentialContainers(steps));
this.options = options;
}
static create(tap, firmwareUpdateData, options = TapNLinkUpdater.DEFAULT_OPTIONS) {
if (!options.loader) {
options.loader = TapNLinkUpdater.DEFAULT_OPTIONS.loader;
}
const loadFirmwareUpdateOperations = SinglePacketStoreLoader.createOperationsFromBytes(firmwareUpdateData, tap.service.singlePacket, options.loader);
const expectedCRC = SinglePacketStoreLoader.computeCRC(firmwareUpdateData);
const operations = [
(observer, context) => __awaiter(this, void 0, void 0, function* () {
observer.next({
step: 'setup',
});
if (!tap.encryption.isStarted) {
yield tap.encryption.start();
}
}),
...loadFirmwareUpdateOperations,
// singlePacketStoreLoader
// .asObservable()
// .pipe(
// map<SinglePacketStoreLoader.Event, TapNLinkUpdater.Progress>(
// (progress: SinglePacketStoreLoader.Event, index: number) => {
// return {
// step: 'load',
// payload: progress
// };
// }
// )
// ),
(observer, context) => __awaiter(this, void 0, void 0, function* () {
var _a;
try {
observer.next({
step: 'apply',
});
(yield tap.service.singlePacket.executeSinglePacketInStore(expectedCRC)).successful();
observer.next({
step: 'finish',
executeRequestTimeout: false,
});
}
catch (err) {
// Fix for old firmware that do not respond to execute command
if (((_a = err === null || err === void 0 ? void 0 : err.cause) === null || _a === void 0 ? void 0 : _a.code) === ComProtocol.ErrorCode.TimeoutError) {
observer.next({
step: 'finish',
executeRequestTimeout: true,
});
return;
}
throw err;
}
}),
];
if (options.reconnectAfterUpdate) {
operations.push(TapNLinkUpdater.waitingForReconnection(tap, options));
}
return new TapNLinkUpdater(operations, options);
}
// public start(
// firmwareUpdateData: Uint8Array
// ): Observable<TapNLinkUpdater.Progress> {
// // const singlePacketStoreLoader = tap.service.singlePacket
// // .createStoreLoaderFromBytes(firmwareUpdateData);
// }
isFirmwareUpdateAvailable(tap) {
return __awaiter(this, void 0, void 0, function* () {
const info = (yield tap.service.singlePacket.getInfo()).body();
return info.state === SinglePacketStoreInfo.State.EMPTY;
});
}
static waitingForReconnection(tap, options) {
const maxRetry = (options === null || options === void 0 ? void 0 : options.reconnectRetryCount) === undefined
? TapNLinkUpdater.DEFAULT_OPTIONS.reconnectRetryCount
: options.reconnectRetryCount;
return retryWithDelay(defer(() => tap.connect()), {
delay: (options === null || options === void 0 ? void 0 : options.reconnectRetryDelay) === undefined
? TapNLinkUpdater.DEFAULT_OPTIONS.reconnectRetryDelay
: options.reconnectRetryDelay,
retryCount: maxRetry,
}).pipe(map((v, index) => {
return {
step: 'restart',
attempt: index + 1,
maxRetry,
message: `Tap reconnection attempt n°${index + 1}/${maxRetry + 1}`,
};
}));
}
}
(function (TapNLinkUpdater) {
TapNLinkUpdater.DEFAULT_OPTIONS = {
reconnectAfterUpdate: true,
reconnectRetryCount: 5,
reconnectRetryDelay: 5000,
loader: {
execute: false,
maxRetry: 10,
retryDelay: 1000,
},
};
})(TapNLinkUpdater || (TapNLinkUpdater = {}));
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlybXdhcmUtdXBkYXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vZmlybXdhcmUtdXBkYXRlL3NyYy9saWIvZmlybXdhcmUtdXBkYXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sa0JBQWtCLENBQUM7QUFDMUIsT0FBTyx3Q0FBd0MsQ0FBQztBQUVoRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDckQsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBRzdELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RCxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLHVCQUF1QixHQUN4QixNQUFNLHdDQUF3QyxDQUFDO0FBQ2hELE9BQU8sRUFBRSxLQUFLLEVBQWlDLE1BQU0sTUFBTSxDQUFDO0FBQzVELE9BQU8sRUFBRSxHQUFHLEVBQU8sTUFBTSxnQkFBZ0IsQ0FBQztBQUkxQyxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxjQUdwQztJQTJFQyxZQUNFLEtBQTRELEVBQzVDLFVBQW1DLEVBQUU7UUFFckQsS0FBSyxDQUFDLGNBQWMsQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBRnhDLFlBQU8sR0FBUCxPQUFPLENBQThCO0lBR3ZELENBQUM7SUEvRUQsTUFBTSxDQUFDLE1BQU0sQ0FDWCxHQUFRLEVBQ1Isa0JBQThCLEVBQzlCLFVBQW1DLGVBQWUsQ0FBQyxlQUFlO1FBRWxFLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFO1lBQ25CLE9BQU8sQ0FBQyxNQUFNLEdBQUcsZUFBZSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUM7U0FDekQ7UUFDRCxNQUFNLDRCQUE0QixHQUNoQyx1QkFBdUIsQ0FBQyx5QkFBeUIsQ0FDL0Msa0JBQWtCLEVBQ2xCLEdBQUcsQ0FBQyxPQUFPLENBQUMsWUFBWSxF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