mirror of
https://github.com/skydiver/ewelink-api.git
synced 2025-12-21 21:33:11 +01:00
* updated dependencies * code linting * added new app id & app secret * cleanup requests payloads * remove unused function * update test cases * enabled firmware tests * refactor getDevice to use right api endpoint * error messages improvements * error messages improvements * error messages improvements * error messages improvements * error messages improvements * payload cleanup * refactor setDevicePowerState to use right api endpoint * update test exepectation * removed deprecated class * updated tests to reflect new error codes * error messages improvements * refactoring project structure: devices methods refactoring project sturcture * refactoring project structure: firmware methods * refactoring project structure: temperature/humidity * refactoring project structure: credentials methods * refactoring project structure: power usage methods * refactoring project structure: power state methods * refactoring project structure: websocket methods * removed deprecated login method from docs * refactoring project structure: power usage methods * refactoring project structure: zeroconf classes * refactoring project structure: websocket classes * refactoring project structure: zeroconf classes * refactor and cleanup * refactoring project structure: firmware methods * moved parsers to own directory * update tests with methods renames * export missing temperature/humidity methods * removed unused package * refactor and cleanup * fix test expectation * refactoring project structure: moved data files * refactoring project structure: moved data files * refactoring project structure: moved helpers files * refactoring project structure: moved helpers files * refactoring project structure: moved payload files * refactor and cleanup * refactor getDevicePowerState * setDevicePowerState returns channel * convert error 400 to 404 for clarity * updated test cases * remove console.log * cache path for zeroconf cache files * installed nock * using nock to simulate server requests during testing * moved credentials file to config folder * update request url when using nock * refactor nock helper file * move cooldown delay to setupTests file * updating testing instructions * restored delete code block * fix wrong error code * accept phone number to login to ewelink * added test cases for initialize main class * improvements on class initialization parameters * allow login using phone number * rename test file * updated test case * fixed regression bug * Release v3.0.0 - use node-fetch (#87) * replaced deprecated request library with node-fetch * refactor: moved makeRequest to own mixin file * refactor to use node-fetch * fixes * update config * created helper method * constant rename * ignore files from final package * version bump
62 lines
1.6 KiB
JavaScript
62 lines
1.6 KiB
JavaScript
const nock = require('nock');
|
|
const { writeFile } = require('fs');
|
|
|
|
exports.startNockRecording = () => {
|
|
nock.recorder.rec({
|
|
dont_print: true,
|
|
enable_reqheaders_recording: false,
|
|
output_objects: true,
|
|
});
|
|
};
|
|
|
|
exports.storeNockRecordings = pathToTape => {
|
|
const nockCallObjects = nock.recorder.play();
|
|
writeFile(pathToTape, JSON.stringify(nockCallObjects, null, 2), () => {});
|
|
};
|
|
|
|
exports.playbackNockTapes = pathToTape => {
|
|
const nocks = nock.load(pathToTape);
|
|
|
|
nocks.forEach(function(n) {
|
|
n.filteringPath(path => filteringPath(n, path));
|
|
n.filteringRequestBody((b, rb) => filteringRequestBody(b, rb));
|
|
});
|
|
|
|
nock.recorder.play();
|
|
};
|
|
|
|
/**
|
|
* Replace dynamic values on request body using recorded data
|
|
*/
|
|
const filteringRequestBody = (body, recordedBody) => {
|
|
if (typeof body !== 'string' || typeof recordedBody !== 'object') {
|
|
return body;
|
|
}
|
|
const jsonBody = JSON.parse(body);
|
|
jsonBody.ts = recordedBody.ts;
|
|
jsonBody.nonce = recordedBody.nonce;
|
|
return JSON.stringify(jsonBody);
|
|
};
|
|
|
|
/**
|
|
* Replace dynamic values on request URLs using recorded data
|
|
*/
|
|
const filteringPath = (n, path) => {
|
|
const regexTimestampInPath = /(?<=ts=)[^&]*/g;
|
|
const timestampInPath = path.match(regexTimestampInPath);
|
|
|
|
if (!timestampInPath) {
|
|
return path;
|
|
}
|
|
|
|
const regexTimestampInRecordedPath = /ts=[^&]*/g;
|
|
const recordedPath = n.interceptors[0].uri;
|
|
const timestampInRecordedPath = recordedPath.match(regexTimestampInPath);
|
|
const updatedPath = recordedPath.replace(
|
|
regexTimestampInRecordedPath,
|
|
`ts=${timestampInRecordedPath[0]}`
|
|
);
|
|
|
|
return updatedPath;
|
|
};
|