testplane
Version:
Tests framework based on mocha and wdio
58 lines • 2.91 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.constructWsDriverRequest = void 0;
/* eslint-disable no-bitwise */
const types_1 = require("./types");
const constants_1 = require("./constants");
const compression_1 = require("./compression");
const WSDRIVER_VERSION = 1;
// version, header, requestId, requestMethod, command null-terminator
const OUTGOING_MESSAGE_AUXILIARY_BYTES = 1 + 1 + 4 + 2 + 1;
const constructHeaderByte = (compressionType, isJson) => {
let headerByte = 0;
headerByte |= types_1.WsDriverMessage.Request << 4;
headerByte |= compressionType << 2;
headerByte |= +isJson << 1;
return headerByte;
};
const getRequestMethod = (method) => {
if (!method) {
return types_1.WsDriverMethod.get;
}
const methodLowerCase = method.toLowerCase();
const encodedMethodType = types_1.WsDriverMethod[methodLowerCase];
if (typeof encodedMethodType !== "undefined") {
return encodedMethodType;
}
throw new Error(`Unsupported method: "${method}"`);
};
const constructWsDriverRequest = async (url, requestOptions, connectionOptions) => {
const commandStartIdx = url.pathname.indexOf(connectionOptions.sessionPrefix);
if (commandStartIdx === -1) {
throw new Error("Not session-related request");
}
const command = decodeURIComponent(url.pathname.slice(commandStartIdx + connectionOptions.sessionPrefix.length));
const bodyPayload = requestOptions.json ? Buffer.from(JSON.stringify(requestOptions.json)) : Buffer.alloc(0);
const shouldCompress = connectionOptions.compressionType !== types_1.WsDriverCompression.None &&
Buffer.byteLength(bodyPayload) >= constants_1.WSD_COMPRESSION_THRESHOLD_BYTES;
const compressedPayload = shouldCompress
? await (0, compression_1.getCompressed)(bodyPayload, connectionOptions.compressionType)
: bodyPayload;
const headerByte = constructHeaderByte(shouldCompress ? connectionOptions.compressionType : types_1.WsDriverCompression.None, true);
const requestMethod = getRequestMethod(requestOptions.method);
const resultMessage = Buffer.alloc(OUTGOING_MESSAGE_AUXILIARY_BYTES + Buffer.byteLength(command) + Buffer.byteLength(compressedPayload));
let ptr = 0;
ptr = resultMessage.writeUInt8(WSDRIVER_VERSION);
ptr = resultMessage.writeUint8(headerByte, ptr);
ptr = resultMessage.writeUint32BE(connectionOptions.requestId, ptr);
ptr = resultMessage.writeUint16BE(requestMethod, ptr);
ptr += resultMessage.write(command, ptr, "utf8");
ptr = resultMessage.writeUint8(0, ptr);
ptr += compressedPayload.copy(resultMessage, ptr);
if (ptr !== resultMessage.byteLength) {
throw new Error("WSDriver request message construction failed");
}
return resultMessage;
};
exports.constructWsDriverRequest = constructWsDriverRequest;
//# sourceMappingURL=request.js.map