@homebridge-eufy-security/eufy-security-client 3.7.2-dev.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/.prettierignore/342/200/216 +8 -0
- package/.prettierrc +11 -0
- package/LICENSE +21 -0
- package/README.md +970 -0
- package/build/error.d.ts +138 -0
- package/build/error.js +190 -0
- package/build/error.js.map +1 -0
- package/build/eufysecurity.d.ts +180 -0
- package/build/eufysecurity.js +3148 -0
- package/build/eufysecurity.js.map +1 -0
- package/build/http/api.d.ts +119 -0
- package/build/http/api.js +1877 -0
- package/build/http/api.js.map +1 -0
- package/build/http/cache.d.ts +8 -0
- package/build/http/cache.js +34 -0
- package/build/http/cache.js.map +1 -0
- package/build/http/const.d.ts +8 -0
- package/build/http/const.js +3054 -0
- package/build/http/const.js.map +1 -0
- package/build/http/device.d.ts +490 -0
- package/build/http/device.js +5256 -0
- package/build/http/device.js.map +1 -0
- package/build/http/error.d.ts +73 -0
- package/build/http/error.js +101 -0
- package/build/http/error.js.map +1 -0
- package/build/http/index.d.ts +10 -0
- package/build/http/index.js +30 -0
- package/build/http/index.js.map +1 -0
- package/build/http/interfaces.d.ts +248 -0
- package/build/http/interfaces.js +3 -0
- package/build/http/interfaces.js.map +1 -0
- package/build/http/models.d.ts +608 -0
- package/build/http/models.js +3 -0
- package/build/http/models.js.map +1 -0
- package/build/http/parameter.d.ts +7 -0
- package/build/http/parameter.js +119 -0
- package/build/http/parameter.js.map +1 -0
- package/build/http/station.d.ts +382 -0
- package/build/http/station.js +15735 -0
- package/build/http/station.js.map +1 -0
- package/build/http/types.d.ts +1358 -0
- package/build/http/types.js +10333 -0
- package/build/http/types.js.map +1 -0
- package/build/http/utils.d.ts +89 -0
- package/build/http/utils.js +916 -0
- package/build/http/utils.js.map +1 -0
- package/build/index.d.ts +8 -0
- package/build/index.js +29 -0
- package/build/index.js.map +1 -0
- package/build/interfaces.d.ts +147 -0
- package/build/interfaces.js +7 -0
- package/build/interfaces.js.map +1 -0
- package/build/logging.d.ts +36 -0
- package/build/logging.js +119 -0
- package/build/logging.js.map +1 -0
- package/build/mqtt/interface.d.ts +6 -0
- package/build/mqtt/interface.js +3 -0
- package/build/mqtt/interface.js.map +1 -0
- package/build/mqtt/model.d.ts +24 -0
- package/build/mqtt/model.js +3 -0
- package/build/mqtt/model.js.map +1 -0
- package/build/mqtt/mqtt-eufy.crt +79 -0
- package/build/mqtt/proto/lock.proto +33 -0
- package/build/mqtt/service.d.ts +28 -0
- package/build/mqtt/service.js +196 -0
- package/build/mqtt/service.js.map +1 -0
- package/build/p2p/ble.d.ts +59 -0
- package/build/p2p/ble.js +281 -0
- package/build/p2p/ble.js.map +1 -0
- package/build/p2p/error.d.ts +49 -0
- package/build/p2p/error.js +69 -0
- package/build/p2p/error.js.map +1 -0
- package/build/p2p/index.d.ts +8 -0
- package/build/p2p/index.js +28 -0
- package/build/p2p/index.js.map +1 -0
- package/build/p2p/interfaces.d.ts +423 -0
- package/build/p2p/interfaces.js +3 -0
- package/build/p2p/interfaces.js.map +1 -0
- package/build/p2p/models.d.ts +295 -0
- package/build/p2p/models.js +3 -0
- package/build/p2p/models.js.map +1 -0
- package/build/p2p/session.d.ts +186 -0
- package/build/p2p/session.js +3737 -0
- package/build/p2p/session.js.map +1 -0
- package/build/p2p/talkback.d.ts +8 -0
- package/build/p2p/talkback.js +23 -0
- package/build/p2p/talkback.js.map +1 -0
- package/build/p2p/types.d.ts +1164 -0
- package/build/p2p/types.js +1219 -0
- package/build/p2p/types.js.map +1 -0
- package/build/p2p/utils.d.ts +72 -0
- package/build/p2p/utils.js +865 -0
- package/build/p2p/utils.js.map +1 -0
- package/build/push/client.d.ts +49 -0
- package/build/push/client.js +344 -0
- package/build/push/client.js.map +1 -0
- package/build/push/error.d.ts +73 -0
- package/build/push/error.js +101 -0
- package/build/push/error.js.map +1 -0
- package/build/push/index.d.ts +6 -0
- package/build/push/index.js +26 -0
- package/build/push/index.js.map +1 -0
- package/build/push/interfaces.d.ts +19 -0
- package/build/push/interfaces.js +3 -0
- package/build/push/interfaces.js.map +1 -0
- package/build/push/models.d.ts +328 -0
- package/build/push/models.js +38 -0
- package/build/push/models.js.map +1 -0
- package/build/push/parser.d.ts +25 -0
- package/build/push/parser.js +231 -0
- package/build/push/parser.js.map +1 -0
- package/build/push/proto/checkin.proto +266 -0
- package/build/push/proto/mcs.proto +328 -0
- package/build/push/service.d.ts +46 -0
- package/build/push/service.js +965 -0
- package/build/push/service.js.map +1 -0
- package/build/push/types.d.ts +220 -0
- package/build/push/types.js +244 -0
- package/build/push/types.js.map +1 -0
- package/build/push/utils.d.ts +7 -0
- package/build/push/utils.js +116 -0
- package/build/push/utils.js.map +1 -0
- package/build/utils.d.ts +115 -0
- package/build/utils.js +438 -0
- package/build/utils.js.map +1 -0
- package/eslint.config.mts +68 -0
- package/jest.config.js +14 -0
- package/package.json +85 -0
- package/scripts/cut_release.sh +31 -0
|
@@ -0,0 +1,116 @@
|
|
|
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 () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.sleep = exports.parseCheckinResponse = exports.buildCheckinRequest = exports.VALID_FID_PATTERN = void 0;
|
|
37
|
+
exports.generateFid = generateFid;
|
|
38
|
+
exports.convertTimestampMs = convertTimestampMs;
|
|
39
|
+
const crypto_1 = require("crypto");
|
|
40
|
+
const path = __importStar(require("path"));
|
|
41
|
+
const protobufjs_1 = require("protobufjs");
|
|
42
|
+
const error_1 = require("./error");
|
|
43
|
+
const logging_1 = require("../logging");
|
|
44
|
+
exports.VALID_FID_PATTERN = /^[cdef][\w-]{21}$/;
|
|
45
|
+
function generateFid() {
|
|
46
|
+
const fidByteArray = new Uint8Array(17);
|
|
47
|
+
fidByteArray.set((0, crypto_1.randomBytes)(fidByteArray.length));
|
|
48
|
+
// Replace the first 4 random bits with the constant FID header of 0b0111.
|
|
49
|
+
fidByteArray[0] = 0b01110000 + (fidByteArray[0] % 0b00010000);
|
|
50
|
+
const b64 = Buffer.from(fidByteArray).toString("base64");
|
|
51
|
+
const b64_safe = b64.replace(/\+/g, "-").replace(/\//g, "_");
|
|
52
|
+
const fid = b64_safe.substr(0, 22);
|
|
53
|
+
if (exports.VALID_FID_PATTERN.test(fid)) {
|
|
54
|
+
logging_1.rootPushLogger.info("generateFid", fid);
|
|
55
|
+
return fid;
|
|
56
|
+
}
|
|
57
|
+
throw new error_1.FidGenerationError("Generated invalid FID", { context: { fid: fid } });
|
|
58
|
+
}
|
|
59
|
+
const buildCheckinRequest = async () => {
|
|
60
|
+
const root = await (0, protobufjs_1.load)(path.join(__dirname, "./proto/checkin.proto"));
|
|
61
|
+
const CheckinRequestModel = root.lookupType("CheckinRequest");
|
|
62
|
+
const payload = {
|
|
63
|
+
imei: "109269993813709",
|
|
64
|
+
androidId: 0,
|
|
65
|
+
checkin: {
|
|
66
|
+
build: {
|
|
67
|
+
fingerprint: "google/razor/flo:5.0.1/LRX22C/1602158:user/release-keys",
|
|
68
|
+
hardware: "flo",
|
|
69
|
+
brand: "google",
|
|
70
|
+
radio: "FLO-04.04",
|
|
71
|
+
clientId: "android-google",
|
|
72
|
+
},
|
|
73
|
+
lastCheckinMs: 0,
|
|
74
|
+
},
|
|
75
|
+
locale: "en",
|
|
76
|
+
loggingId: 1234567890,
|
|
77
|
+
macAddress: ["A1B2C3D4E5F6"],
|
|
78
|
+
meid: "109269993813709",
|
|
79
|
+
accountCookie: [],
|
|
80
|
+
timeZone: "GMT",
|
|
81
|
+
version: 3,
|
|
82
|
+
otaCert: ["71Q6Rn2DDZl1zPDVaaeEHItd+Yg="],
|
|
83
|
+
esn: "ABCDEF01",
|
|
84
|
+
macAddressType: ["wifi"],
|
|
85
|
+
fragment: 0,
|
|
86
|
+
userSerialNumber: 0,
|
|
87
|
+
};
|
|
88
|
+
const message = CheckinRequestModel.create(payload);
|
|
89
|
+
return CheckinRequestModel.encode(message).finish();
|
|
90
|
+
};
|
|
91
|
+
exports.buildCheckinRequest = buildCheckinRequest;
|
|
92
|
+
const parseCheckinResponse = async (data) => {
|
|
93
|
+
const root = await (0, protobufjs_1.load)(path.join(__dirname, "./proto/checkin.proto"));
|
|
94
|
+
const CheckinResponseModel = root.lookupType("CheckinResponse");
|
|
95
|
+
const message = CheckinResponseModel.decode(data);
|
|
96
|
+
const object = CheckinResponseModel.toObject(message, {
|
|
97
|
+
longs: String,
|
|
98
|
+
enums: String,
|
|
99
|
+
bytes: String,
|
|
100
|
+
});
|
|
101
|
+
return object;
|
|
102
|
+
};
|
|
103
|
+
exports.parseCheckinResponse = parseCheckinResponse;
|
|
104
|
+
const sleep = async (ms) => {
|
|
105
|
+
return new Promise((resolve) => {
|
|
106
|
+
setTimeout(resolve, ms);
|
|
107
|
+
});
|
|
108
|
+
};
|
|
109
|
+
exports.sleep = sleep;
|
|
110
|
+
function convertTimestampMs(timestamp) {
|
|
111
|
+
if (timestamp.toString().length === 10) {
|
|
112
|
+
return timestamp * 1000;
|
|
113
|
+
}
|
|
114
|
+
return timestamp;
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/push/utils.ts"],"names":[],"mappings":"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"}
|
package/build/utils.d.ts
ADDED
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { Category } from "typescript-logging-category-style";
|
|
2
|
+
import EventEmitter from "events";
|
|
3
|
+
import { ErrorObject, EufySecurityPersistentData } from "./interfaces";
|
|
4
|
+
import { BaseError } from "./error";
|
|
5
|
+
import { PropertyMetadataAny } from "./http";
|
|
6
|
+
/**
|
|
7
|
+
* Get error structure from error object
|
|
8
|
+
* @param error
|
|
9
|
+
*/
|
|
10
|
+
export declare const getError: (error: BaseError) => ErrorObject;
|
|
11
|
+
/**
|
|
12
|
+
* Remove last character from the string given
|
|
13
|
+
*
|
|
14
|
+
* @param text
|
|
15
|
+
* @param char
|
|
16
|
+
*/
|
|
17
|
+
export declare const removeLastChar: (text: string, char: string) => string;
|
|
18
|
+
/**
|
|
19
|
+
* Generate a UDID
|
|
20
|
+
*/
|
|
21
|
+
export declare const generateUDID: () => string;
|
|
22
|
+
/**
|
|
23
|
+
* Generate a random serial number
|
|
24
|
+
* @param length
|
|
25
|
+
*/
|
|
26
|
+
export declare const generateSerialnumber: (length: number) => string;
|
|
27
|
+
/**
|
|
28
|
+
* Generate md5 from a given string
|
|
29
|
+
*
|
|
30
|
+
* @param contents
|
|
31
|
+
*/
|
|
32
|
+
export declare const md5: (contents: string) => string;
|
|
33
|
+
export declare const handleUpdate: (config: EufySecurityPersistentData, oldVersion: number) => EufySecurityPersistentData;
|
|
34
|
+
/**
|
|
35
|
+
* Checking if a string is empty
|
|
36
|
+
*
|
|
37
|
+
* TODO: shouldnt you do a trim to remove any spaces too?
|
|
38
|
+
*
|
|
39
|
+
* @param str
|
|
40
|
+
*/
|
|
41
|
+
export declare const isEmpty: (str: string | null | undefined) => boolean;
|
|
42
|
+
/**
|
|
43
|
+
* Try to parse the value as boolean otherwise raise and exception
|
|
44
|
+
*
|
|
45
|
+
* @param metadata
|
|
46
|
+
* @param value
|
|
47
|
+
*/
|
|
48
|
+
export declare const parseValueBoolean: (metadata: PropertyMetadataAny, value: unknown) => boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Try to parse the value as number otherwise raise and exception
|
|
51
|
+
*
|
|
52
|
+
* @param metadata
|
|
53
|
+
* @param value
|
|
54
|
+
*/
|
|
55
|
+
export declare const parseValueNumber: (metadata: PropertyMetadataAny, value: unknown) => Number;
|
|
56
|
+
/**
|
|
57
|
+
* Try to parse the value as string otherwise raise and exception
|
|
58
|
+
*
|
|
59
|
+
* @param metadata
|
|
60
|
+
* @param value
|
|
61
|
+
*/
|
|
62
|
+
export declare const parseValueString: (metadata: PropertyMetadataAny, value: unknown) => string;
|
|
63
|
+
/**
|
|
64
|
+
* Try to parse the value as object otherwise raise and exception
|
|
65
|
+
*
|
|
66
|
+
* @param metadata
|
|
67
|
+
* @param value
|
|
68
|
+
*/
|
|
69
|
+
export declare const parseValueObject: (metadata: PropertyMetadataAny, value: unknown) => any;
|
|
70
|
+
/**
|
|
71
|
+
* Parse the value given to match the metadata from the propperty
|
|
72
|
+
* @param metadata
|
|
73
|
+
* @param value
|
|
74
|
+
*/
|
|
75
|
+
export declare const parseValue: (metadata: PropertyMetadataAny, value: unknown) => unknown;
|
|
76
|
+
/**
|
|
77
|
+
* Parse data as json otherwise return undefined
|
|
78
|
+
*
|
|
79
|
+
* @param data
|
|
80
|
+
* @param log
|
|
81
|
+
*/
|
|
82
|
+
export declare const parseJSON: (data: string, log: Category) => any;
|
|
83
|
+
/**
|
|
84
|
+
* Validate the value based on the metadata property
|
|
85
|
+
*
|
|
86
|
+
* @param metadata
|
|
87
|
+
* @param value
|
|
88
|
+
*/
|
|
89
|
+
export declare const validValue: (metadata: PropertyMetadataAny, value: unknown) => void;
|
|
90
|
+
/**
|
|
91
|
+
*
|
|
92
|
+
* @param target
|
|
93
|
+
* @param source
|
|
94
|
+
*/
|
|
95
|
+
export declare const mergeDeep: (target: Record<string, any> | undefined, source: Record<string, any>) => Record<string, any>;
|
|
96
|
+
/**
|
|
97
|
+
*
|
|
98
|
+
* @param emitter
|
|
99
|
+
* @param event
|
|
100
|
+
*/
|
|
101
|
+
export declare function waitForEvent<T>(emitter: EventEmitter, event: string): Promise<T>;
|
|
102
|
+
/**
|
|
103
|
+
* Get short url from given url and ensure password is reeducated
|
|
104
|
+
*
|
|
105
|
+
* @param url
|
|
106
|
+
* @param prefixUrl
|
|
107
|
+
*/
|
|
108
|
+
export declare function getShortUrl(url: URL, prefixUrl?: string): string;
|
|
109
|
+
/**
|
|
110
|
+
* Check if it is a valid url
|
|
111
|
+
*
|
|
112
|
+
* @param value
|
|
113
|
+
* @param protocols
|
|
114
|
+
*/
|
|
115
|
+
export declare function isValidUrl(value: string, protocols?: Array<string>): boolean;
|
package/build/utils.js
ADDED
|
@@ -0,0 +1,438 @@
|
|
|
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 () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.mergeDeep = exports.validValue = exports.parseJSON = exports.parseValue = exports.parseValueObject = exports.parseValueString = exports.parseValueNumber = exports.parseValueBoolean = exports.isEmpty = exports.handleUpdate = exports.md5 = exports.generateSerialnumber = exports.generateUDID = exports.removeLastChar = exports.getError = void 0;
|
|
37
|
+
exports.waitForEvent = waitForEvent;
|
|
38
|
+
exports.getShortUrl = getShortUrl;
|
|
39
|
+
exports.isValidUrl = isValidUrl;
|
|
40
|
+
const crypto = __importStar(require("crypto"));
|
|
41
|
+
const error_1 = require("./error");
|
|
42
|
+
/**
|
|
43
|
+
* Get error structure from error object
|
|
44
|
+
* @param error
|
|
45
|
+
*/
|
|
46
|
+
const getError = function (error) {
|
|
47
|
+
return {
|
|
48
|
+
cause: error.cause,
|
|
49
|
+
message: `${error.name}: ${error.message}`,
|
|
50
|
+
context: error.context,
|
|
51
|
+
stacktrace: error.stack,
|
|
52
|
+
};
|
|
53
|
+
};
|
|
54
|
+
exports.getError = getError;
|
|
55
|
+
/**
|
|
56
|
+
* Remove last character from the string given
|
|
57
|
+
*
|
|
58
|
+
* @param text
|
|
59
|
+
* @param char
|
|
60
|
+
*/
|
|
61
|
+
const removeLastChar = function (text, char) {
|
|
62
|
+
const strArr = [...text];
|
|
63
|
+
strArr.splice(text.lastIndexOf(char), 1);
|
|
64
|
+
return strArr.join("");
|
|
65
|
+
};
|
|
66
|
+
exports.removeLastChar = removeLastChar;
|
|
67
|
+
/**
|
|
68
|
+
* Generate a UDID
|
|
69
|
+
*/
|
|
70
|
+
const generateUDID = function () {
|
|
71
|
+
return crypto.randomBytes(8).readBigUInt64BE().toString(16).padStart(16, "0");
|
|
72
|
+
};
|
|
73
|
+
exports.generateUDID = generateUDID;
|
|
74
|
+
/**
|
|
75
|
+
* Generate a random serial number
|
|
76
|
+
* @param length
|
|
77
|
+
*/
|
|
78
|
+
const generateSerialnumber = function (length) {
|
|
79
|
+
return crypto.randomBytes(length / 2).toString("hex");
|
|
80
|
+
};
|
|
81
|
+
exports.generateSerialnumber = generateSerialnumber;
|
|
82
|
+
/**
|
|
83
|
+
* Generate md5 from a given string
|
|
84
|
+
*
|
|
85
|
+
* @param contents
|
|
86
|
+
*/
|
|
87
|
+
const md5 = (contents) => crypto.createHash("md5").update(contents).digest("hex");
|
|
88
|
+
exports.md5 = md5;
|
|
89
|
+
const handleUpdate = function (config, oldVersion) {
|
|
90
|
+
if (oldVersion <= 1.24) {
|
|
91
|
+
config.cloud_token = "";
|
|
92
|
+
config.cloud_token_expiration = 0;
|
|
93
|
+
}
|
|
94
|
+
return config;
|
|
95
|
+
};
|
|
96
|
+
exports.handleUpdate = handleUpdate;
|
|
97
|
+
/**
|
|
98
|
+
* Checking if a string is empty
|
|
99
|
+
*
|
|
100
|
+
* TODO: shouldnt you do a trim to remove any spaces too?
|
|
101
|
+
*
|
|
102
|
+
* @param str
|
|
103
|
+
*/
|
|
104
|
+
const isEmpty = function (str) {
|
|
105
|
+
if (str) {
|
|
106
|
+
if (str.length > 0)
|
|
107
|
+
return false;
|
|
108
|
+
return true;
|
|
109
|
+
}
|
|
110
|
+
return true;
|
|
111
|
+
};
|
|
112
|
+
exports.isEmpty = isEmpty;
|
|
113
|
+
/**
|
|
114
|
+
* Try to parse the value as boolean otherwise raise and exception
|
|
115
|
+
*
|
|
116
|
+
* @param metadata
|
|
117
|
+
* @param value
|
|
118
|
+
*/
|
|
119
|
+
const parseValueBoolean = (metadata, value) => {
|
|
120
|
+
let successParsing = false;
|
|
121
|
+
let parsedValue = false;
|
|
122
|
+
switch (typeof value) {
|
|
123
|
+
case "boolean":
|
|
124
|
+
successParsing = true;
|
|
125
|
+
parsedValue = value;
|
|
126
|
+
break;
|
|
127
|
+
case "number":
|
|
128
|
+
if (value === 0 || value === 1) {
|
|
129
|
+
parsedValue = value === 1;
|
|
130
|
+
successParsing = true;
|
|
131
|
+
}
|
|
132
|
+
break;
|
|
133
|
+
case "string":
|
|
134
|
+
if (value.toLowerCase() === "true" || value.toLowerCase() === "false") {
|
|
135
|
+
parsedValue = value.toLowerCase() === "true";
|
|
136
|
+
successParsing = true;
|
|
137
|
+
}
|
|
138
|
+
break;
|
|
139
|
+
default:
|
|
140
|
+
break;
|
|
141
|
+
}
|
|
142
|
+
if (!successParsing) {
|
|
143
|
+
throw new error_1.InvalidPropertyValueError("Property expects a boolean value", {
|
|
144
|
+
context: {
|
|
145
|
+
propertyName: metadata.name,
|
|
146
|
+
propertyValue: value,
|
|
147
|
+
metadata: metadata,
|
|
148
|
+
},
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
return parsedValue;
|
|
152
|
+
};
|
|
153
|
+
exports.parseValueBoolean = parseValueBoolean;
|
|
154
|
+
/**
|
|
155
|
+
* Try to parse the value as number otherwise raise and exception
|
|
156
|
+
*
|
|
157
|
+
* @param metadata
|
|
158
|
+
* @param value
|
|
159
|
+
*/
|
|
160
|
+
const parseValueNumber = (metadata, value) => {
|
|
161
|
+
let successParsing = false;
|
|
162
|
+
let parsedValue = 0;
|
|
163
|
+
let causeError = undefined;
|
|
164
|
+
switch (typeof value) {
|
|
165
|
+
case "number":
|
|
166
|
+
successParsing = true;
|
|
167
|
+
parsedValue = value;
|
|
168
|
+
break;
|
|
169
|
+
case "string":
|
|
170
|
+
try {
|
|
171
|
+
parsedValue = Number.parseInt(value);
|
|
172
|
+
// Ensure the value is not an invalid number
|
|
173
|
+
if (!isNaN(parsedValue))
|
|
174
|
+
successParsing = true;
|
|
175
|
+
}
|
|
176
|
+
catch (err) {
|
|
177
|
+
causeError = (0, error_1.ensureError)(err);
|
|
178
|
+
}
|
|
179
|
+
break;
|
|
180
|
+
default:
|
|
181
|
+
break;
|
|
182
|
+
}
|
|
183
|
+
if (!successParsing) {
|
|
184
|
+
throw new error_1.InvalidPropertyValueError("Property expects a number value", {
|
|
185
|
+
cause: causeError,
|
|
186
|
+
context: {
|
|
187
|
+
propertyName: metadata.name,
|
|
188
|
+
propertyValue: value,
|
|
189
|
+
metadata: metadata,
|
|
190
|
+
},
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
return parsedValue;
|
|
194
|
+
};
|
|
195
|
+
exports.parseValueNumber = parseValueNumber;
|
|
196
|
+
/**
|
|
197
|
+
* Try to parse the value as string otherwise raise and exception
|
|
198
|
+
*
|
|
199
|
+
* @param metadata
|
|
200
|
+
* @param value
|
|
201
|
+
*/
|
|
202
|
+
const parseValueString = (metadata, value) => {
|
|
203
|
+
let successParsing = false;
|
|
204
|
+
let parsedValue = "";
|
|
205
|
+
switch (typeof value) {
|
|
206
|
+
case "number":
|
|
207
|
+
successParsing = true;
|
|
208
|
+
parsedValue = value.toString();
|
|
209
|
+
break;
|
|
210
|
+
case "string":
|
|
211
|
+
successParsing = true;
|
|
212
|
+
parsedValue = value;
|
|
213
|
+
break;
|
|
214
|
+
case "boolean":
|
|
215
|
+
successParsing = true;
|
|
216
|
+
parsedValue = value ? "true" : "false";
|
|
217
|
+
break;
|
|
218
|
+
default:
|
|
219
|
+
break;
|
|
220
|
+
}
|
|
221
|
+
if (!successParsing) {
|
|
222
|
+
throw new error_1.InvalidPropertyValueError("Property expects a string value", {
|
|
223
|
+
context: {
|
|
224
|
+
propertyName: metadata.name,
|
|
225
|
+
propertyValue: value,
|
|
226
|
+
metadata: metadata,
|
|
227
|
+
},
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
return parsedValue;
|
|
231
|
+
};
|
|
232
|
+
exports.parseValueString = parseValueString;
|
|
233
|
+
/**
|
|
234
|
+
* Try to parse the value as object otherwise raise and exception
|
|
235
|
+
*
|
|
236
|
+
* @param metadata
|
|
237
|
+
* @param value
|
|
238
|
+
*/
|
|
239
|
+
const parseValueObject = (metadata, value) => {
|
|
240
|
+
if (value === null) {
|
|
241
|
+
throw new error_1.InvalidPropertyValueError("Property expects an object value", {
|
|
242
|
+
context: {
|
|
243
|
+
propertyName: metadata.name,
|
|
244
|
+
propertyValue: value,
|
|
245
|
+
metadata: metadata,
|
|
246
|
+
},
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
return value;
|
|
250
|
+
};
|
|
251
|
+
exports.parseValueObject = parseValueObject;
|
|
252
|
+
/**
|
|
253
|
+
* Parse the value given to match the metadata from the propperty
|
|
254
|
+
* @param metadata
|
|
255
|
+
* @param value
|
|
256
|
+
*/
|
|
257
|
+
const parseValue = function (metadata, value) {
|
|
258
|
+
let parsedValue;
|
|
259
|
+
if (value === undefined) {
|
|
260
|
+
throw new error_1.InvalidPropertyValueError(`Property expects a ${metadata.type} value`, {
|
|
261
|
+
context: {
|
|
262
|
+
propertyName: metadata.name,
|
|
263
|
+
propertyValue: value,
|
|
264
|
+
metadata: metadata,
|
|
265
|
+
},
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
if (metadata.type === "boolean") {
|
|
269
|
+
parsedValue = (0, exports.parseValueBoolean)(metadata, value);
|
|
270
|
+
}
|
|
271
|
+
else if (metadata.type === "number") {
|
|
272
|
+
parsedValue = (0, exports.parseValueNumber)(metadata, value);
|
|
273
|
+
}
|
|
274
|
+
else if (metadata.type === "string") {
|
|
275
|
+
parsedValue = (0, exports.parseValueString)(metadata, value);
|
|
276
|
+
}
|
|
277
|
+
else if (metadata.type === "object") {
|
|
278
|
+
parsedValue = (0, exports.parseValueObject)(metadata, value);
|
|
279
|
+
}
|
|
280
|
+
else {
|
|
281
|
+
throw new error_1.InvalidPropertyValueError(`Property expects a ${metadata.type} value`, {
|
|
282
|
+
context: {
|
|
283
|
+
propertyName: metadata.name,
|
|
284
|
+
propertyValue: value,
|
|
285
|
+
metadata: metadata,
|
|
286
|
+
},
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
return parsedValue;
|
|
290
|
+
};
|
|
291
|
+
exports.parseValue = parseValue;
|
|
292
|
+
/**
|
|
293
|
+
* Parse data as json otherwise return undefined
|
|
294
|
+
*
|
|
295
|
+
* @param data
|
|
296
|
+
* @param log
|
|
297
|
+
*/
|
|
298
|
+
const parseJSON = function (data, log) {
|
|
299
|
+
try {
|
|
300
|
+
return JSON.parse(data.replace(/[\0]+$/g, ""));
|
|
301
|
+
}
|
|
302
|
+
catch (err) {
|
|
303
|
+
const error = (0, error_1.ensureError)(err);
|
|
304
|
+
log.debug("JSON parse error", { error: (0, exports.getError)(error), data: data });
|
|
305
|
+
}
|
|
306
|
+
return undefined;
|
|
307
|
+
};
|
|
308
|
+
exports.parseJSON = parseJSON;
|
|
309
|
+
/**
|
|
310
|
+
* Validate the value based on the metadata property
|
|
311
|
+
*
|
|
312
|
+
* @param metadata
|
|
313
|
+
* @param value
|
|
314
|
+
*/
|
|
315
|
+
const validValue = function (metadata, value) {
|
|
316
|
+
let isValidData = true;
|
|
317
|
+
if (metadata.type === "number") {
|
|
318
|
+
const numberMetadata = metadata;
|
|
319
|
+
const numericValue = Number(value);
|
|
320
|
+
if ((numberMetadata.min !== undefined && numberMetadata.min > numericValue) ||
|
|
321
|
+
(numberMetadata.max !== undefined && numberMetadata.max < numericValue) ||
|
|
322
|
+
(numberMetadata.states !== undefined && numberMetadata.states[numericValue] === undefined) ||
|
|
323
|
+
Number.isNaN(numericValue))
|
|
324
|
+
isValidData = false;
|
|
325
|
+
}
|
|
326
|
+
else if (metadata.type === "string") {
|
|
327
|
+
const stringMetadata = metadata;
|
|
328
|
+
const stringValue = String(value);
|
|
329
|
+
if ((stringMetadata.format !== undefined && stringValue.match(stringMetadata.format) === null) ||
|
|
330
|
+
(stringMetadata.minLength !== undefined && stringMetadata.minLength > stringValue.length) ||
|
|
331
|
+
(stringMetadata.maxLength !== undefined && stringMetadata.maxLength < stringValue.length))
|
|
332
|
+
isValidData = false;
|
|
333
|
+
}
|
|
334
|
+
else if (metadata.type === "boolean") {
|
|
335
|
+
const str = String(value).toLowerCase().trim();
|
|
336
|
+
if (str !== "true" && str !== "false" && str !== "1" && str !== "0")
|
|
337
|
+
isValidData = false;
|
|
338
|
+
}
|
|
339
|
+
else if (metadata.type === "object") {
|
|
340
|
+
const metadataObject = metadata;
|
|
341
|
+
if (value !== undefined && value !== null && metadataObject.isValidObject !== undefined)
|
|
342
|
+
isValidData = metadataObject.isValidObject(value);
|
|
343
|
+
}
|
|
344
|
+
else {
|
|
345
|
+
isValidData = false;
|
|
346
|
+
}
|
|
347
|
+
if (!isValidData) {
|
|
348
|
+
throw new error_1.InvalidPropertyValueError(`Invalid value for this property according to metadata type ${metadata.type}`, {
|
|
349
|
+
context: {
|
|
350
|
+
propertyName: metadata.name,
|
|
351
|
+
propertyValue: value,
|
|
352
|
+
metadata: metadata,
|
|
353
|
+
},
|
|
354
|
+
});
|
|
355
|
+
}
|
|
356
|
+
};
|
|
357
|
+
exports.validValue = validValue;
|
|
358
|
+
/**
|
|
359
|
+
*
|
|
360
|
+
* @param target
|
|
361
|
+
* @param source
|
|
362
|
+
*/
|
|
363
|
+
const mergeDeep = function (target, source) {
|
|
364
|
+
target = target || {};
|
|
365
|
+
for (const [key, value] of Object.entries(source)) {
|
|
366
|
+
if (!(key in target)) {
|
|
367
|
+
target[key] = value;
|
|
368
|
+
}
|
|
369
|
+
else {
|
|
370
|
+
if (typeof value === "object") {
|
|
371
|
+
// merge objects
|
|
372
|
+
target[key] = (0, exports.mergeDeep)(target[key], value);
|
|
373
|
+
}
|
|
374
|
+
else if (typeof target[key] === "undefined") {
|
|
375
|
+
// don't override single keys
|
|
376
|
+
target[key] = value;
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
return target;
|
|
381
|
+
};
|
|
382
|
+
exports.mergeDeep = mergeDeep;
|
|
383
|
+
/**
|
|
384
|
+
*
|
|
385
|
+
* @param emitter
|
|
386
|
+
* @param event
|
|
387
|
+
*/
|
|
388
|
+
function waitForEvent(emitter, event) {
|
|
389
|
+
return new Promise((resolve, reject) => {
|
|
390
|
+
const success = (val) => {
|
|
391
|
+
emitter.off("error", fail);
|
|
392
|
+
resolve(val);
|
|
393
|
+
};
|
|
394
|
+
const fail = (err) => {
|
|
395
|
+
emitter.off(event, success);
|
|
396
|
+
reject(err);
|
|
397
|
+
};
|
|
398
|
+
emitter.once(event, success);
|
|
399
|
+
emitter.once("error", fail);
|
|
400
|
+
});
|
|
401
|
+
}
|
|
402
|
+
/**
|
|
403
|
+
* Get short url from given url and ensure password is reeducated
|
|
404
|
+
*
|
|
405
|
+
* @param url
|
|
406
|
+
* @param prefixUrl
|
|
407
|
+
*/
|
|
408
|
+
function getShortUrl(url, prefixUrl) {
|
|
409
|
+
if (url.password) {
|
|
410
|
+
url = new URL(url.toString()); // prevent original url mutation
|
|
411
|
+
url.password = "[redacted]";
|
|
412
|
+
}
|
|
413
|
+
let shortUrl = url.toString();
|
|
414
|
+
if (prefixUrl && shortUrl.startsWith(prefixUrl)) {
|
|
415
|
+
shortUrl = shortUrl.slice(prefixUrl.length);
|
|
416
|
+
}
|
|
417
|
+
return shortUrl;
|
|
418
|
+
}
|
|
419
|
+
/**
|
|
420
|
+
* Check if it is a valid url
|
|
421
|
+
*
|
|
422
|
+
* @param value
|
|
423
|
+
* @param protocols
|
|
424
|
+
*/
|
|
425
|
+
function isValidUrl(value, protocols = ["http", "https"]) {
|
|
426
|
+
try {
|
|
427
|
+
const url = new URL(value);
|
|
428
|
+
return protocols
|
|
429
|
+
? url.protocol
|
|
430
|
+
? protocols.map((protocol) => `${protocol.toLowerCase()}:`).includes(url.protocol)
|
|
431
|
+
: false
|
|
432
|
+
: true;
|
|
433
|
+
}
|
|
434
|
+
catch (_) {
|
|
435
|
+
return false;
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|