UNPKG

testplane

Version:

Tests framework based on mocha and wdio

58 lines 2.91 kB
"use strict"; 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