@ibm-aspera/sdk 0.2.7 → 0.2.9
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/.whitesource +3 -0
- package/README.md +1 -1
- package/dist/commonjs/app/core.d.ts +7 -21
- package/dist/commonjs/app/core.js +115 -47
- package/dist/commonjs/constants/constants.d.ts +1 -1
- package/dist/commonjs/constants/messages.d.ts +6 -0
- package/dist/commonjs/constants/messages.js +6 -0
- package/dist/commonjs/helpers/client/http-client.js +1 -1
- package/dist/commonjs/helpers/client/safari-client.js +1 -1
- package/dist/commonjs/helpers/helpers.d.ts +20 -2
- package/dist/commonjs/helpers/helpers.js +40 -2
- package/dist/commonjs/helpers/ws.js +2 -8
- package/dist/commonjs/http-gateway/core.d.ts +76 -0
- package/dist/commonjs/http-gateway/core.js +254 -0
- package/dist/commonjs/http-gateway/download.d.ts +14 -0
- package/dist/commonjs/http-gateway/download.js +186 -0
- package/dist/commonjs/http-gateway/index.d.ts +11 -0
- package/dist/commonjs/http-gateway/index.js +11 -0
- package/dist/commonjs/http-gateway/models.d.ts +16 -0
- package/dist/commonjs/http-gateway/models.js +2 -0
- package/dist/commonjs/http-gateway/upload.d.ts +14 -0
- package/dist/commonjs/http-gateway/upload.js +124 -0
- package/dist/commonjs/index.d.ts +2 -2
- package/dist/commonjs/index.js +36 -5
- package/dist/commonjs/models/aspera-sdk.model.d.ts +39 -27
- package/dist/commonjs/models/aspera-sdk.model.js +62 -58
- package/dist/commonjs/models/models.d.ts +49 -3
- package/dist/js/aspera-sdk.js +1 -1
- package/dist/js/aspera-sdk.js.LICENSE.txt +9 -1
- package/dist/js/aspera-sdk.js.map +1 -1
- package/package.json +21 -19
- package/.editorconfig +0 -13
- package/.eslintrc.js +0 -131
- package/.github/CODE_OF_CONDUCT.md +0 -128
- package/.github/CONTRIBUTING.md +0 -147
- package/.github/workflows/ci.yml +0 -36
- package/.github/workflows/documentation.yml +0 -43
- package/.github/workflows/npm_upload.yml +0 -30
- package/.husky/pre-commit +0 -4
- package/CHANGELOG.md +0 -165
- package/docs/DEVELOPMENT.md +0 -38
- package/example/README.md +0 -7
- package/example/index.html +0 -14
- package/example/package-lock.json +0 -2847
- package/example/package.json +0 -29
- package/example/public/404.html +0 -5
- package/example/public/sdk-code.js +0 -334
- package/example/src/App/App.scss +0 -40
- package/example/src/App/index.tsx +0 -174
- package/example/src/Views/AllTogether.tsx +0 -26
- package/example/src/Views/DragDrop.tsx +0 -23
- package/example/src/Views/Home.tsx +0 -10
- package/example/src/Views/Initialize.tsx +0 -21
- package/example/src/Views/Installer.tsx +0 -119
- package/example/src/Views/MonitorTransfers.tsx +0 -88
- package/example/src/Views/Other.tsx +0 -25
- package/example/src/Views/SelectItems.tsx +0 -46
- package/example/src/Views/StartTransfer.tsx +0 -32
- package/example/src/Views/Test.tsx +0 -20
- package/example/src/Views/Views.scss +0 -111
- package/example/src/helpers/index.ts +0 -19
- package/example/src/index.scss +0 -47
- package/example/src/main.tsx +0 -17
- package/example/src/vite-env.d.ts +0 -2
- package/example/tsconfig.json +0 -30
- package/example/vite.config.ts +0 -22
- package/jest.config.js +0 -15
- package/jest.setup.js +0 -0
- package/src/app/core.ts +0 -611
- package/src/app/installer.ts +0 -53
- package/src/constants/constants.ts +0 -19
- package/src/constants/messages.ts +0 -29
- package/src/helpers/client/client.ts +0 -11
- package/src/helpers/client/http-client.ts +0 -92
- package/src/helpers/client/safari-client.ts +0 -334
- package/src/helpers/helpers.ts +0 -214
- package/src/helpers/http.ts +0 -39
- package/src/helpers/ws.ts +0 -215
- package/src/index.ts +0 -78
- package/src/models/aspera-sdk.model.ts +0 -399
- package/src/models/models.ts +0 -676
- package/tests/client.spec.ts +0 -52
- package/tests/core.spec.ts +0 -13
- package/tests/helpers.spec.ts +0 -124
- package/tests/http.spec.ts +0 -14
- package/tests/installer.spec.ts +0 -135
- package/tests/mocks.ts +0 -11
- package/tsconfig.json +0 -13
- package/tsconfig.module.json +0 -16
- package/typedoc.js +0 -17
- package/webpack.config.js +0 -35
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aspera-sdk.js","mappings":"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","sources":["webpack://@ibm-aspera/sdk/./node_modules/json-rpc-2.0/dist/client.js","webpack://@ibm-aspera/sdk/./node_modules/json-rpc-2.0/dist/index.js","webpack://@ibm-aspera/sdk/./node_modules/json-rpc-2.0/dist/interfaces.js","webpack://@ibm-aspera/sdk/./node_modules/json-rpc-2.0/dist/internal.js","webpack://@ibm-aspera/sdk/./node_modules/json-rpc-2.0/dist/models.js","webpack://@ibm-aspera/sdk/./node_modules/json-rpc-2.0/dist/server-and-client.js","webpack://@ibm-aspera/sdk/./node_modules/json-rpc-2.0/dist/server.js","webpack://@ibm-aspera/sdk/webpack/bootstrap","webpack://@ibm-aspera/sdk/webpack/runtime/define property getters","webpack://@ibm-aspera/sdk/webpack/runtime/hasOwnProperty shorthand","webpack://@ibm-aspera/sdk/./src/constants/constants.ts","webpack://@ibm-aspera/sdk/./src/helpers/client/safari-client.ts","webpack://@ibm-aspera/sdk/./src/constants/messages.ts","webpack://@ibm-aspera/sdk/./src/helpers/helpers.ts","webpack://@ibm-aspera/sdk/./src/helpers/ws.ts","webpack://@ibm-aspera/sdk/./src/models/aspera-sdk.model.ts","webpack://@ibm-aspera/sdk/./src/helpers/client/http-client.ts","webpack://@ibm-aspera/sdk/./src/helpers/client/client.ts","webpack://@ibm-aspera/sdk/./src/app/core.ts","webpack://@ibm-aspera/sdk/./src/index.ts","webpack://@ibm-aspera/sdk/./src/app/installer.ts","webpack://@ibm-aspera/sdk/./src/helpers/http.ts"],"sourcesContent":["\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.JSONRPCClient = void 0;\nvar models_1 = require(\"./models\");\nvar internal_1 = require(\"./internal\");\nvar JSONRPCClient = /** @class */ (function () {\n function JSONRPCClient(_send, createID) {\n this._send = _send;\n this.createID = createID;\n this.idToResolveMap = new Map();\n this.id = 0;\n }\n JSONRPCClient.prototype._createID = function () {\n if (this.createID) {\n return this.createID();\n }\n else {\n return ++this.id;\n }\n };\n JSONRPCClient.prototype.timeout = function (delay, overrideCreateJSONRPCErrorResponse) {\n var _this = this;\n if (overrideCreateJSONRPCErrorResponse === void 0) { overrideCreateJSONRPCErrorResponse = function (id) {\n return (0, models_1.createJSONRPCErrorResponse)(id, internal_1.DefaultErrorCode, \"Request timeout\");\n }; }\n var timeoutRequest = function (ids, request) {\n var timeoutID = setTimeout(function () {\n ids.forEach(function (id) {\n var resolve = _this.idToResolveMap.get(id);\n if (resolve) {\n _this.idToResolveMap.delete(id);\n resolve(overrideCreateJSONRPCErrorResponse(id));\n }\n });\n }, delay);\n return request().then(function (result) {\n clearTimeout(timeoutID);\n return result;\n }, function (error) {\n clearTimeout(timeoutID);\n return Promise.reject(error);\n });\n };\n var requestAdvanced = function (request, clientParams) {\n var ids = (!Array.isArray(request) ? [request] : request)\n .map(function (request) { return request.id; })\n .filter(isDefinedAndNonNull);\n return timeoutRequest(ids, function () {\n return _this.requestAdvanced(request, clientParams);\n });\n };\n return {\n request: function (method, params, clientParams) {\n var id = _this._createID();\n return timeoutRequest([id], function () {\n return _this.requestWithID(method, params, clientParams, id);\n });\n },\n requestAdvanced: function (request, clientParams) { return requestAdvanced(request, clientParams); },\n };\n };\n JSONRPCClient.prototype.request = function (method, params, clientParams) {\n return this.requestWithID(method, params, clientParams, this._createID());\n };\n JSONRPCClient.prototype.requestWithID = function (method, params, clientParams, id) {\n return __awaiter(this, void 0, void 0, function () {\n var request, response;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n request = (0, models_1.createJSONRPCRequest)(id, method, params);\n return [4 /*yield*/, this.requestAdvanced(request, clientParams)];\n case 1:\n response = _a.sent();\n if (response.result !== undefined && !response.error) {\n return [2 /*return*/, response.result];\n }\n else if (response.result === undefined && response.error) {\n return [2 /*return*/, Promise.reject(new models_1.JSONRPCErrorException(response.error.message, response.error.code, response.error.data))];\n }\n else {\n return [2 /*return*/, Promise.reject(new Error(\"An unexpected error occurred\"))];\n }\n return [2 /*return*/];\n }\n });\n });\n };\n JSONRPCClient.prototype.requestAdvanced = function (requests, clientParams) {\n var _this = this;\n var areRequestsOriginallyArray = Array.isArray(requests);\n if (!Array.isArray(requests)) {\n requests = [requests];\n }\n var requestsWithID = requests.filter(function (request) {\n return isDefinedAndNonNull(request.id);\n });\n var promises = requestsWithID.map(function (request) {\n return new Promise(function (resolve) { return _this.idToResolveMap.set(request.id, resolve); });\n });\n var promise = Promise.all(promises).then(function (responses) {\n if (areRequestsOriginallyArray || !responses.length) {\n return responses;\n }\n else {\n return responses[0];\n }\n });\n return this.send(areRequestsOriginallyArray ? requests : requests[0], clientParams).then(function () { return promise; }, function (error) {\n requestsWithID.forEach(function (request) {\n _this.receive((0, models_1.createJSONRPCErrorResponse)(request.id, internal_1.DefaultErrorCode, (error && error.message) || \"Failed to send a request\"));\n });\n return promise;\n });\n };\n JSONRPCClient.prototype.notify = function (method, params, clientParams) {\n var request = (0, models_1.createJSONRPCNotification)(method, params);\n this.send(request, clientParams).then(undefined, function () { return undefined; });\n };\n JSONRPCClient.prototype.send = function (payload, clientParams) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, this._send(payload, clientParams)];\n });\n });\n };\n JSONRPCClient.prototype.rejectAllPendingRequests = function (message) {\n this.idToResolveMap.forEach(function (resolve, id) {\n return resolve((0, models_1.createJSONRPCErrorResponse)(id, internal_1.DefaultErrorCode, message));\n });\n this.idToResolveMap.clear();\n };\n JSONRPCClient.prototype.receive = function (responses) {\n var _this = this;\n if (!Array.isArray(responses)) {\n responses = [responses];\n }\n responses.forEach(function (response) {\n var resolve = _this.idToResolveMap.get(response.id);\n if (resolve) {\n _this.idToResolveMap.delete(response.id);\n resolve(response);\n }\n });\n };\n return JSONRPCClient;\n}());\nexports.JSONRPCClient = JSONRPCClient;\nvar isDefinedAndNonNull = function (value) {\n return value !== undefined && value !== null;\n};\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./client\"), exports);\n__exportStar(require(\"./interfaces\"), exports);\n__exportStar(require(\"./models\"), exports);\n__exportStar(require(\"./server\"), exports);\n__exportStar(require(\"./server-and-client\"), exports);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DefaultErrorCode = void 0;\nexports.DefaultErrorCode = 0;\n","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createJSONRPCNotification = exports.createJSONRPCRequest = exports.createJSONRPCSuccessResponse = exports.createJSONRPCErrorResponse = exports.JSONRPCErrorCode = exports.JSONRPCErrorException = exports.isJSONRPCResponses = exports.isJSONRPCResponse = exports.isJSONRPCRequests = exports.isJSONRPCRequest = exports.isJSONRPCID = exports.JSONRPC = void 0;\nexports.JSONRPC = \"2.0\";\nvar isJSONRPCID = function (id) {\n return typeof id === \"string\" || typeof id === \"number\" || id === null;\n};\nexports.isJSONRPCID = isJSONRPCID;\nvar isJSONRPCRequest = function (payload) {\n return (payload.jsonrpc === exports.JSONRPC &&\n payload.method !== undefined &&\n payload.result === undefined &&\n payload.error === undefined);\n};\nexports.isJSONRPCRequest = isJSONRPCRequest;\nvar isJSONRPCRequests = function (payload) {\n return Array.isArray(payload) && payload.every(exports.isJSONRPCRequest);\n};\nexports.isJSONRPCRequests = isJSONRPCRequests;\nvar isJSONRPCResponse = function (payload) {\n return (payload.jsonrpc === exports.JSONRPC &&\n payload.id !== undefined &&\n (payload.result !== undefined || payload.error !== undefined));\n};\nexports.isJSONRPCResponse = isJSONRPCResponse;\nvar isJSONRPCResponses = function (payload) {\n return Array.isArray(payload) && payload.every(exports.isJSONRPCResponse);\n};\nexports.isJSONRPCResponses = isJSONRPCResponses;\nvar createJSONRPCError = function (code, message, data) {\n var error = { code: code, message: message };\n if (data != null) {\n error.data = data;\n }\n return error;\n};\nvar JSONRPCErrorException = /** @class */ (function (_super) {\n __extends(JSONRPCErrorException, _super);\n function JSONRPCErrorException(message, code, data) {\n var _this = _super.call(this, message) || this;\n // Manually set the prototype to fix TypeScript issue:\n // https://github.com/Microsoft/TypeScript-wiki/blob/main/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\n Object.setPrototypeOf(_this, JSONRPCErrorException.prototype);\n _this.code = code;\n _this.data = data;\n return _this;\n }\n JSONRPCErrorException.prototype.toObject = function () {\n return createJSONRPCError(this.code, this.message, this.data);\n };\n return JSONRPCErrorException;\n}(Error));\nexports.JSONRPCErrorException = JSONRPCErrorException;\nvar JSONRPCErrorCode;\n(function (JSONRPCErrorCode) {\n JSONRPCErrorCode[JSONRPCErrorCode[\"ParseError\"] = -32700] = \"ParseError\";\n JSONRPCErrorCode[JSONRPCErrorCode[\"InvalidRequest\"] = -32600] = \"InvalidRequest\";\n JSONRPCErrorCode[JSONRPCErrorCode[\"MethodNotFound\"] = -32601] = \"MethodNotFound\";\n JSONRPCErrorCode[JSONRPCErrorCode[\"InvalidParams\"] = -32602] = \"InvalidParams\";\n JSONRPCErrorCode[JSONRPCErrorCode[\"InternalError\"] = -32603] = \"InternalError\";\n})(JSONRPCErrorCode = exports.JSONRPCErrorCode || (exports.JSONRPCErrorCode = {}));\nvar createJSONRPCErrorResponse = function (id, code, message, data) {\n return {\n jsonrpc: exports.JSONRPC,\n id: id,\n error: createJSONRPCError(code, message, data),\n };\n};\nexports.createJSONRPCErrorResponse = createJSONRPCErrorResponse;\nvar createJSONRPCSuccessResponse = function (id, result) {\n return {\n jsonrpc: exports.JSONRPC,\n id: id,\n result: result !== null && result !== void 0 ? result : null,\n };\n};\nexports.createJSONRPCSuccessResponse = createJSONRPCSuccessResponse;\nvar createJSONRPCRequest = function (id, method, params) {\n return {\n jsonrpc: exports.JSONRPC,\n id: id,\n method: method,\n params: params,\n };\n};\nexports.createJSONRPCRequest = createJSONRPCRequest;\nvar createJSONRPCNotification = function (method, params) {\n return {\n jsonrpc: exports.JSONRPC,\n method: method,\n params: params,\n };\n};\nexports.createJSONRPCNotification = createJSONRPCNotification;\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.JSONRPCServerAndClient = void 0;\nvar models_1 = require(\"./models\");\nvar JSONRPCServerAndClient = /** @class */ (function () {\n function JSONRPCServerAndClient(server, client, options) {\n if (options === void 0) { options = {}; }\n var _a;\n this.server = server;\n this.client = client;\n this.errorListener = (_a = options.errorListener) !== null && _a !== void 0 ? _a : console.warn;\n }\n JSONRPCServerAndClient.prototype.applyServerMiddleware = function () {\n var _a;\n var middlewares = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n middlewares[_i] = arguments[_i];\n }\n (_a = this.server).applyMiddleware.apply(_a, middlewares);\n };\n JSONRPCServerAndClient.prototype.hasMethod = function (name) {\n return this.server.hasMethod(name);\n };\n JSONRPCServerAndClient.prototype.addMethod = function (name, method) {\n this.server.addMethod(name, method);\n };\n JSONRPCServerAndClient.prototype.addMethodAdvanced = function (name, method) {\n this.server.addMethodAdvanced(name, method);\n };\n JSONRPCServerAndClient.prototype.timeout = function (delay) {\n return this.client.timeout(delay);\n };\n JSONRPCServerAndClient.prototype.request = function (method, params, clientParams) {\n return this.client.request(method, params, clientParams);\n };\n JSONRPCServerAndClient.prototype.requestAdvanced = function (jsonRPCRequest, clientParams) {\n return this.client.requestAdvanced(jsonRPCRequest, clientParams);\n };\n JSONRPCServerAndClient.prototype.notify = function (method, params, clientParams) {\n this.client.notify(method, params, clientParams);\n };\n JSONRPCServerAndClient.prototype.rejectAllPendingRequests = function (message) {\n this.client.rejectAllPendingRequests(message);\n };\n JSONRPCServerAndClient.prototype.receiveAndSend = function (payload, serverParams, clientParams) {\n return __awaiter(this, void 0, void 0, function () {\n var response, message;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!((0, models_1.isJSONRPCResponse)(payload) || (0, models_1.isJSONRPCResponses)(payload))) return [3 /*break*/, 1];\n this.client.receive(payload);\n return [3 /*break*/, 4];\n case 1:\n if (!((0, models_1.isJSONRPCRequest)(payload) || (0, models_1.isJSONRPCRequests)(payload))) return [3 /*break*/, 3];\n return [4 /*yield*/, this.server.receive(payload, serverParams)];\n case 2:\n response = _a.sent();\n if (response) {\n return [2 /*return*/, this.client.send(response, clientParams)];\n }\n return [3 /*break*/, 4];\n case 3:\n message = \"Received an invalid JSON-RPC message\";\n this.errorListener(message, payload);\n return [2 /*return*/, Promise.reject(new Error(message))];\n case 4: return [2 /*return*/];\n }\n });\n });\n };\n return JSONRPCServerAndClient;\n}());\nexports.JSONRPCServerAndClient = JSONRPCServerAndClient;\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.JSONRPCServer = void 0;\nvar models_1 = require(\"./models\");\nvar internal_1 = require(\"./internal\");\nvar createParseErrorResponse = function () {\n return (0, models_1.createJSONRPCErrorResponse)(null, models_1.JSONRPCErrorCode.ParseError, \"Parse error\");\n};\nvar createInvalidRequestResponse = function (request) {\n return (0, models_1.createJSONRPCErrorResponse)((0, models_1.isJSONRPCID)(request.id) ? request.id : null, models_1.JSONRPCErrorCode.InvalidRequest, \"Invalid Request\");\n};\nvar createMethodNotFoundResponse = function (id) {\n return (0, models_1.createJSONRPCErrorResponse)(id, models_1.JSONRPCErrorCode.MethodNotFound, \"Method not found\");\n};\nvar JSONRPCServer = /** @class */ (function () {\n function JSONRPCServer(options) {\n if (options === void 0) { options = {}; }\n var _a;\n this.mapErrorToJSONRPCErrorResponse = defaultMapErrorToJSONRPCErrorResponse;\n this.nameToMethodDictionary = {};\n this.middleware = null;\n this.errorListener = (_a = options.errorListener) !== null && _a !== void 0 ? _a : console.warn;\n }\n JSONRPCServer.prototype.hasMethod = function (name) {\n return !!this.nameToMethodDictionary[name];\n };\n JSONRPCServer.prototype.addMethod = function (name, method) {\n this.addMethodAdvanced(name, this.toJSONRPCMethod(method));\n };\n JSONRPCServer.prototype.toJSONRPCMethod = function (method) {\n return function (request, serverParams) {\n var response = method(request.params, serverParams);\n return Promise.resolve(response).then(function (result) {\n return mapResultToJSONRPCResponse(request.id, result);\n });\n };\n };\n JSONRPCServer.prototype.addMethodAdvanced = function (name, method) {\n var _a;\n this.nameToMethodDictionary = __assign(__assign({}, this.nameToMethodDictionary), (_a = {}, _a[name] = method, _a));\n };\n JSONRPCServer.prototype.receiveJSON = function (json, serverParams) {\n var request = this.tryParseRequestJSON(json);\n if (request) {\n return this.receive(request, serverParams);\n }\n else {\n return Promise.resolve(createParseErrorResponse());\n }\n };\n JSONRPCServer.prototype.tryParseRequestJSON = function (json) {\n try {\n return JSON.parse(json);\n }\n catch (_a) {\n return null;\n }\n };\n JSONRPCServer.prototype.receive = function (request, serverParams) {\n if (Array.isArray(request)) {\n return this.receiveMultiple(request, serverParams);\n }\n else {\n return this.receiveSingle(request, serverParams);\n }\n };\n JSONRPCServer.prototype.receiveMultiple = function (requests, serverParams) {\n return __awaiter(this, void 0, void 0, function () {\n var responses;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, Promise.all(requests.map(function (request) { return _this.receiveSingle(request, serverParams); }))];\n case 1:\n responses = (_a.sent()).filter(isNonNull);\n if (responses.length === 1) {\n return [2 /*return*/, responses[0]];\n }\n else if (responses.length) {\n return [2 /*return*/, responses];\n }\n else {\n return [2 /*return*/, null];\n }\n return [2 /*return*/];\n }\n });\n });\n };\n JSONRPCServer.prototype.receiveSingle = function (request, serverParams) {\n return __awaiter(this, void 0, void 0, function () {\n var method, response;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n method = this.nameToMethodDictionary[request.method];\n if (!!(0, models_1.isJSONRPCRequest)(request)) return [3 /*break*/, 1];\n return [2 /*return*/, createInvalidRequestResponse(request)];\n case 1: return [4 /*yield*/, this.callMethod(method, request, serverParams)];\n case 2:\n response = _a.sent();\n return [2 /*return*/, mapResponse(request, response)];\n }\n });\n });\n };\n JSONRPCServer.prototype.applyMiddleware = function () {\n var middlewares = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n middlewares[_i] = arguments[_i];\n }\n if (this.middleware) {\n this.middleware = this.combineMiddlewares(__spreadArray([\n this.middleware\n ], middlewares, true));\n }\n else {\n this.middleware = this.combineMiddlewares(middlewares);\n }\n };\n JSONRPCServer.prototype.combineMiddlewares = function (middlewares) {\n if (!middlewares.length) {\n return null;\n }\n else {\n return middlewares.reduce(this.middlewareReducer);\n }\n };\n JSONRPCServer.prototype.middlewareReducer = function (prevMiddleware, nextMiddleware) {\n return function (next, request, serverParams) {\n return prevMiddleware(function (request, serverParams) { return nextMiddleware(next, request, serverParams); }, request, serverParams);\n };\n };\n JSONRPCServer.prototype.callMethod = function (method, request, serverParams) {\n var _this = this;\n var callMethod = function (request, serverParams) {\n if (method) {\n return method(request, serverParams);\n }\n else if (request.id !== undefined) {\n return Promise.resolve(createMethodNotFoundResponse(request.id));\n }\n else {\n return Promise.resolve(null);\n }\n };\n var onError = function (error) {\n _this.errorListener(\"An unexpected error occurred while executing \\\"\".concat(request.method, \"\\\" JSON-RPC method:\"), error);\n return Promise.resolve(_this.mapErrorToJSONRPCErrorResponseIfNecessary(request.id, error));\n };\n try {\n return (this.middleware || noopMiddleware)(callMethod, request, serverParams).then(undefined, onError);\n }\n catch (error) {\n return onError(error);\n }\n };\n JSONRPCServer.prototype.mapErrorToJSONRPCErrorResponseIfNecessary = function (id, error) {\n if (id !== undefined) {\n return this.mapErrorToJSONRPCErrorResponse(id, error);\n }\n else {\n return null;\n }\n };\n return JSONRPCServer;\n}());\nexports.JSONRPCServer = JSONRPCServer;\nvar isNonNull = function (value) { return value !== null; };\nvar noopMiddleware = function (next, request, serverParams) { return next(request, serverParams); };\nvar mapResultToJSONRPCResponse = function (id, result) {\n if (id !== undefined) {\n return (0, models_1.createJSONRPCSuccessResponse)(id, result);\n }\n else {\n return null;\n }\n};\nvar defaultMapErrorToJSONRPCErrorResponse = function (id, error) {\n var _a;\n var message = (_a = error === null || error === void 0 ? void 0 : error.message) !== null && _a !== void 0 ? _a : \"An unexpected error occurred\";\n var code = internal_1.DefaultErrorCode;\n var data;\n if (error instanceof models_1.JSONRPCErrorException) {\n code = error.code;\n data = error.data;\n }\n return (0, models_1.createJSONRPCErrorResponse)(id, code, message, data);\n};\nvar mapResponse = function (request, response) {\n if (response) {\n return response;\n }\n else if (request.id !== undefined) {\n return (0, models_1.createJSONRPCErrorResponse)(request.id, models_1.JSONRPCErrorCode.InternalError, \"Internal error\");\n }\n else {\n return null;\n }\n};\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","/** @ignore */\nexport var hiddenStyleList = \"\\n display: none !important;\\n width: 1px !important;\\n height: 1px !important;\\n position: fixed !important;\\n z-index: -99 !important;\\n bottom: 0px !important;\\n right: 0px !important;\\n\";\n/** @ignore */\nexport var protocol = 'aspera://';\n/** @ignore */\nexport var baseInstallerUrl = 'https://downloads.ibmaspera.com/downloads/desktop';\n/** @ignore */\nexport var installerUrl = \"\".concat(baseInstallerUrl, \"/latest/stable\");\n","import { randomUUID } from '../helpers';\nimport { asperaSdk } from '../../index';\n/**\n * Enum defining different types of Safari extension events.\n */\nvar SafariExtensionEventType;\n(function (SafariExtensionEventType) {\n SafariExtensionEventType[\"Monitor\"] = \"Monitor\";\n SafariExtensionEventType[\"Ping\"] = \"Ping\";\n SafariExtensionEventType[\"Request\"] = \"Request\";\n})(SafariExtensionEventType || (SafariExtensionEventType = {}));\n/**\n * Global keep alive timeout to prevent recursion.\n */\nvar keepAliveTimeout;\n/**\n * Handles communication with the Safari extension using JSON-RPC over custom events.\n */\nvar SafariClient = /** @class */ (function () {\n /**\n * Initializes the SafariExtensionHandler instance.\n * Sets up the promise executor map and starts listening to extension events.\n */\n function SafariClient() {\n var _this = this;\n this.keepAliveInterval = 1000;\n this.lastPing = null;\n this.lastPong = null;\n this.safariExtensionEnabled = false;\n this.subscribedTransferActivity = false;\n /**\n * Sends a JSON-RPC request to the Safari extension.\n * @param method The method name to invoke on the extension.\n * @param payload Optional payload for the request.\n * @returns A Promise that resolves with the response from the extension.\n */\n this.request = function (method, payload) {\n if (payload === void 0) { payload = {}; }\n return _this.dispatchPromiseEvent(SafariExtensionEventType.Request, method, payload);\n };\n this.promiseExecutors = new Map();\n this.listenResponseEvents();\n this.listenTransferActivityEvents();\n this.listenStatusEvents();\n this.listenClientStatusEvents();\n this.listenPongEvents();\n if (keepAliveTimeout) {\n clearTimeout(keepAliveTimeout);\n }\n this.keepAlive();\n }\n /**\n * Monitors transfer activity.\n * @returns A Promise that resolves with the response from the extension.\n */\n SafariClient.prototype.monitorTransferActivity = function () {\n var _this = this;\n var dispatchMonitorEvent = function () {\n var promise = _this.dispatchPromiseEvent(SafariExtensionEventType.Monitor, 'subscribe_transfer_activity', [asperaSdk.globals.appId]);\n return promise.then(function () {\n _this.subscribedTransferActivity = true;\n });\n };\n if (this.safariExtensionEnabled) {\n return dispatchMonitorEvent();\n }\n return new Promise(function (resolve, reject) {\n var extensionInterval = setInterval(function () {\n if (!_this.safariExtensionEnabled) {\n return;\n }\n dispatchMonitorEvent()\n .then(resolve)\n .catch(reject);\n clearInterval(extensionInterval);\n }, 1000);\n });\n };\n /**\n * Builds a JSON-RPC request object with a unique identifier.\n * @param method The method name to invoke on the extension.\n * @param payload Optional parameters for the method.\n * @returns The constructed JSON-RPC request object.\n */\n SafariClient.prototype.buildRPCRequest = function (method, payload) {\n return {\n jsonrpc: '2.0',\n method: method,\n params: payload,\n id: randomUUID()\n };\n };\n /**\n * Dispatches a custom event to the document to communicate with the Safari extension.\n * @param type The type of Safari extension event to dispatch.\n * @param request Optional JSON-RPC request payload to send with the event.\n */\n SafariClient.prototype.dispatchEvent = function (type, request) {\n var payload = {\n detail: request !== null && request !== void 0 ? request : {}\n };\n document.dispatchEvent(new CustomEvent(\"AsperaDesktop.\".concat(type), payload));\n };\n /**\n * Dispatches a custom event to the document to communicate with the Safari extension.\n * @param type The type of Safari extension event to dispatch.\n * @param method The method name to invoke on the extension.\n * @param payload Optional parameters for the method.\n */\n SafariClient.prototype.dispatchPromiseEvent = function (type, method, payload) {\n var _this = this;\n var request = this.buildRPCRequest(method, payload);\n return new Promise(function (resolve, reject) {\n if (_this.safariExtensionEnabled) {\n _this.promiseExecutors.set(request.id, { resolve: resolve, reject: reject });\n _this.dispatchEvent(type, request);\n }\n else {\n console.warn('The Safari extension is disabled or unresponsive (dispatch event)');\n console.warn(\"Failed event: \".concat(JSON.stringify(request)));\n reject('The Safari extension is disabled or unresponsive (dispatch event)');\n }\n });\n };\n /**\n * Handles incoming JSON-RPC responses from the Safari extension.\n * Resolves or rejects promises based on the response.\n * @param response The JSON-RPC response object received from the extension.\n */\n SafariClient.prototype.handleResponse = function (response) {\n var requestId = response.id;\n var executor = this.promiseExecutors.get(requestId);\n if (!executor) {\n console.warn(\"Unable to find a promise executor for \".concat(requestId));\n console.warn(\"Response: \".concat(response));\n return;\n }\n this.promiseExecutors.delete(requestId);\n if (response.error) {\n executor.reject(response.error);\n return;\n }\n executor.resolve(response.result);\n };\n /**\n * Listens for 'AsperaDesktop.Response' events.\n */\n SafariClient.prototype.listenResponseEvents = function () {\n var _this = this;\n document.addEventListener('AsperaDesktop.Response', function (event) {\n if (!event.detail) {\n return;\n }\n _this.handleResponse(event.detail);\n });\n };\n /**\n * Listens for 'AsperaDesktop.TransferActivity' events.\n */\n SafariClient.prototype.listenTransferActivityEvents = function () {\n document.addEventListener('AsperaDesktop.TransferActivity', function (event) {\n if (!event.detail) {\n return;\n }\n asperaSdk.activityTracking.handleTransferActivity(event.detail);\n });\n };\n /**\n * Listens for 'AsperaDesktop.Status' events.\n */\n SafariClient.prototype.listenStatusEvents = function () {\n document.addEventListener('AsperaDesktop.Status', function (event) {\n if (!event.detail) {\n return;\n }\n asperaSdk.activityTracking.handleWebSocketEvents(event.detail);\n });\n };\n /**\n * Listens for 'isAppAlive' events. This was introduced in version 1.0.9.\n */\n SafariClient.prototype.listenClientStatusEvents = function () {\n document.addEventListener('isAppAlive', function (event) {\n var _a;\n if (!((_a = event.detail) === null || _a === void 0 ? void 0 : _a.running)) {\n return;\n }\n asperaSdk.activityTracking.handleClientEvents(event.detail.running);\n });\n };\n /**\n * Listens for 'AsperaDesktop.Pong' events.\n */\n SafariClient.prototype.listenPongEvents = function () {\n var _this = this;\n document.addEventListener('AsperaDesktop.Pong', function () {\n _this.lastPong = Date.now();\n _this.safariExtensionStatusChanged(true);\n });\n };\n /**\n * Sends a keep alive ping according to the defined interval.\n */\n SafariClient.prototype.keepAlive = function () {\n var _this = this;\n this.lastPing = Date.now();\n this.dispatchEvent(SafariExtensionEventType.Ping);\n keepAliveTimeout = setTimeout(function () {\n _this.keepAlive();\n }, this.keepAliveInterval);\n };\n /**\n * Listens for Safari extension status changes.\n * If the extension was disabled and enabled again after initializing the SDK, it\n * will call 'monitorTransferActivity' to resume transfer activities.\n */\n SafariClient.prototype.safariExtensionStatusChanged = function (isEnabled) {\n var _this = this;\n if (isEnabled === this.safariExtensionEnabled) {\n return;\n }\n this.safariExtensionEnabled = isEnabled;\n if (isEnabled) {\n if (this.subscribedTransferActivity) {\n var resumeTransferActivity_1 = function () {\n _this.monitorTransferActivity()\n .catch(function () {\n console.error('Failed to resume transfer activity, will try again in 1s');\n setTimeout(function () {\n resumeTransferActivity_1();\n }, 1000);\n });\n };\n resumeTransferActivity_1();\n }\n }\n else {\n asperaSdk.activityTracking.handleWebSocketEvents('CLOSED');\n this.promiseExecutors.forEach(function (promiseExecutor) {\n promiseExecutor.reject('The Safari extension is disabled or unresponsive (extension status)');\n });\n this.promiseExecutors.clear();\n }\n asperaSdk.activityTracking.handleSafariExtensionEvents(this.safariExtensionEnabled ? 'ENABLED' : 'DISABLED');\n };\n /**\n * Checks if the last pong received was longer than the max interval.\n */\n SafariClient.prototype.checkSafariExtensionStatus = function () {\n var pingPongDiff = this.lastPong - this.lastPing;\n if (this.lastPong == null || pingPongDiff < 0 || pingPongDiff > 500) {\n this.safariExtensionStatusChanged(false);\n }\n };\n return SafariClient;\n}());\nexport { SafariClient };\nexport var safariClient = new SafariClient();\nexport default {\n safariClient: safariClient\n};\n","/** @ignore */\nexport var messages = {\n callbackIsNotFunction: 'The provided callback is not a function',\n dragDropInitFailed: 'Unable to initialize drag-drop',\n failedToGenerateIframe: 'Unable to generate IFRAME for download. Using new window',\n getInstallerError: 'Unable to get latest installers',\n getAllTransfersFailed: 'Unable to get all transfers',\n getTransferFailed: 'Unable to get transfer',\n invalidEndpoint: 'The specified endpoint is not a valid URL',\n loadingProtocol: 'Launching IBM Aspera for Desktop',\n modifyTransferFailed: 'Unable to modify transfer',\n notValidTransferSpec: 'The supplied transferSpec is not valid',\n removeTransferFailed: 'Unable to remove transfer',\n resumeTransferFailed: 'Unable to resume transfer',\n serverError: 'Unable to connect to IBM Aspera for Desktop server',\n serverNotVerified: 'IBM Aspera SDK has not been verified. Run test or init first',\n setBrandingFailed: 'Unable to set custom branding',\n showDirectoryFailed: 'Unable to show transfer directory',\n showSelectFileDialogFailed: 'Unable to show select file dialog',\n showSelectFolderDialogFailed: 'Unable to show select folder dialog',\n showPreferencesFailed: 'Unable to show preferences',\n stopTransferFailed: 'Unable to stop transfer',\n transferFailed: 'The transfer failed to initiate',\n unableToFindElementOnPage: 'Unable to find the element on the current page',\n unableToReadDropped: 'The dropped item could not be parsed. Please try selecting via the select file/folder option',\n websocketClosedError: 'The websocket was closed due to an error',\n websocketClosedUnexpect: 'The websocket was closed unexpectedly',\n websocketNotReady: 'The websocket is not ready. Run init first',\n};\n","import { baseInstallerUrl, installerUrl } from '../constants/constants';\n/**\n * Generates promise object that can be resolved or rejected via functions\n *\n * @returns an object containing the promise, the resolver and rejecter\n */\nexport var generatePromiseObjects = function () {\n var resolver;\n var rejecter;\n var promise = new Promise(function (resolve, reject) {\n resolver = resolve;\n rejecter = reject;\n });\n return {\n promise: promise,\n resolver: resolver,\n rejecter: rejecter\n };\n};\n/**\n * Log errors from Aspera SDK\n *\n * @param message the message indicating the error encountered\n * @param debugData the data with useful debugging information\n */\nexport var errorLog = function (message, debugData) {\n if (debugData && debugData.code && debugData.message) {\n debugData = {\n code: debugData.code,\n message: debugData.message,\n data: debugData.data\n };\n }\n if (typeof window === 'object') {\n if (!Array.isArray(window.asperaSdkLogs)) {\n window.asperaSdkLogs = [];\n }\n window.asperaSdkLogs.push({ message: message, debugData: debugData });\n }\n console.warn(\"Aspera SDK: \".concat(message), debugData);\n};\n/**\n * Generate error object for rejecter responses\n *\n * @param message the message indicating the error encountered\n * @param debugData the data with useful debugging information\n *\n * @returns object containing standardized error response\n */\nexport var generateErrorBody = function (message, debugData) {\n var errorResponse = {\n error: true,\n message: message\n };\n if (debugData && debugData.code && debugData.message) {\n errorResponse.debugData = {\n code: debugData.code,\n message: debugData.message,\n data: debugData.data\n };\n }\n return errorResponse;\n};\n/**\n * Validate if transferSpec is valid for server communication\n *\n * @param transferSpec the transferSpec to test\n *\n * @returns boolean indicating whether supplied transferSpec is valid\n */\nexport var isValidTransferSpec = function (transferSpec) {\n if (transferSpec &&\n typeof transferSpec === 'object' &&\n typeof transferSpec.direction === 'string' &&\n typeof transferSpec.remote_host === 'string' &&\n Array.isArray(transferSpec.paths)) {\n return true;\n }\n return false;\n};\n/**\n * Returns a string indicating the websocket URL to use for talking to the server\n *\n * @returns a string of the full Websocket URL\n */\nexport var getWebsocketUrl = function (serverUrl) {\n var wsProtocol;\n if (serverUrl.indexOf('http:') === 0) {\n wsProtocol = 'ws';\n }\n else if (serverUrl.indexOf('https:') === 0) {\n wsProtocol = 'wss';\n }\n var url = serverUrl.replace('http://', '//').replace('https://', '//');\n return \"\".concat(wsProtocol, \":\").concat(url);\n};\n/**\n * Simple function to get the current platform.\n *\n * @returns a string indicating the current platform\n */\nexport var getCurrentPlatform = function () {\n var ua = navigator.userAgent;\n if (/Mac/.test(ua)) {\n return 'macos';\n }\n else if (/Win/.test(ua)) {\n return 'windows';\n }\n else if (/Linux/.test(ua)) {\n return 'linux';\n }\n else {\n return 'unknown';\n }\n};\n/**\n * Function used to create a random UUID\n *\n * @returns string\n */\nexport var randomUUID = function () {\n var _a;\n var fallback = function () {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n var r = Number(((new Date().getTime() + 16) * Math.random()).toFixed()) % 16;\n if (c !== 'x') {\n // eslint-disable-next-line no-bitwise\n r = r & 0x3 | 0x8;\n }\n return r.toString(16);\n });\n };\n return ((_a = window.crypto) === null || _a === void 0 ? void 0 : _a.randomUUID) ? window.crypto.randomUUID() : fallback();\n};\n/**\n * Return a rejected promise\n *\n * @param message the message indicating the error encountered\n * @param debugData the data with useful debugging information\n *\n * @returns a rejected promise\n */\nexport var throwError = function (message, debugData) {\n errorLog(message, debugData);\n return new Promise(function (resolve, reject) {\n reject(generateErrorBody(message, debugData));\n });\n};\n/**\n * Check if the given string is a valid URL\n *\n * @param url string to check if valid URL\n *\n * @returns boolean\n */\nexport var isValidURL = function (url) {\n try {\n new URL(url);\n return true;\n }\n catch (error) {\n return false;\n }\n};\n/**\n * Checks if the current browser is Safari.\n * @returns {boolean} Whether the browser is Safari.\n */\nexport var isSafari = function () {\n // eslint-disable-next-line\n return /^((?!chrome|android).)*safari/i.test(navigator.userAgent) && !window.MSStream;\n};\n/**\n * Get the URLs for installer management.\n *\n * @returns Info on URLs where installers live\n */\nexport var getInstallerUrls = function () {\n return {\n base: baseInstallerUrl,\n latest: installerUrl,\n };\n};\nexport default {\n errorLog: errorLog,\n generateErrorBody: generateErrorBody,\n generatePromiseObjects: generatePromiseObjects,\n getCurrentPlatform: getCurrentPlatform,\n getWebsocketUrl: getWebsocketUrl,\n isSafari: isSafari,\n isValidURL: isValidURL,\n isValidTransferSpec: isValidTransferSpec,\n randomUUID: randomUUID,\n throwError: throwError,\n getInstallerUrls: getInstallerUrls,\n};\n","import { errorLog, generatePromiseObjects, getWebsocketUrl } from './helpers';\nimport { messages } from '../constants/messages';\nimport { asperaSdk } from '../index';\nvar WebsocketService = /** @class */ (function () {\n function WebsocketService() {\n var _this = this;\n /** A map of requested subscription names and the callback for them */\n this.sockets = new Map();\n /** Indicator if the websocket is already connected */\n this.isConnected = false;\n /** Global promise object that resolves when init completes */\n this.initPromise = generatePromiseObjects();\n /**\n * This function handles when a connection is opened\n */\n this.handleOpen = function () {\n if (_this.isConnected || !_this.joinChannel()) {\n return;\n }\n _this.isConnected = true;\n _this.updateRpcPort();\n _this.notifyEvent('RECONNECT');\n };\n /**\n * This function handles completed subscription\n */\n this.handleClose = function () {\n if (_this.isConnected) {\n _this.isConnected = false;\n _this.notifyEvent('CLOSED');\n }\n if (!_this.globalSocket) {\n _this.handleNotReady();\n return;\n }\n _this.reconnect();\n };\n /**\n * This function handles errors received from the websocket\n */\n this.handleError = function () {\n errorLog(messages.websocketClosedError);\n };\n /**\n * This function handles messages received from the websocket\n */\n this.handleMessage = function (message) {\n var data;\n try {\n data = JSON.parse(message.data);\n }\n catch (error) {\n errorLog('Unable to parse Websocket message', { error: error, message: message });\n }\n // Message we get on subscription\n if (data && data.id === 1) {\n _this.initPromise.resolver(data);\n return;\n }\n var socket = _this.sockets.get(data.method);\n if (socket && data.params) {\n socket(data.params);\n }\n };\n }\n /** Log call for not being ready */\n WebsocketService.prototype.handleNotReady = function () {\n errorLog(messages.websocketNotReady);\n };\n /**\n * This function joins the channel to be able to subscribe to events\n */\n WebsocketService.prototype.joinChannel = function () {\n if (!this.globalSocket) {\n this.handleNotReady();\n return false;\n }\n this.globalSocket.send(JSON.stringify({ jsonrpc: '2.0', method: 'subscribe_transfer_activity', params: [asperaSdk.globals.appId], id: 1 }));\n return true;\n };\n /**\n * This function registers clients to listen to a certain message name. Returns any to allow functions to declare proper type\n *\n * @param messageName - the name of messages to listen to (one message name per subscription)\n * @param callback - the callback function\n */\n WebsocketService.prototype.registerMessage = function (messageName, callback) {\n if (!this.sockets.get(messageName)) {\n this.sockets.set(messageName, function (data) {\n callback(data.result);\n });\n }\n };\n /**\n *\n * @param callback This function registers clients to a certain WebSocket event.\n *\n * @param callback - the callback function to call with the event name.\n */\n WebsocketService.prototype.registerEvent = function (callback) {\n this.eventListener = callback;\n this.eventListener(this.isConnected ? 'RECONNECT' : 'CLOSED');\n };\n /**\n * This function starts the websocket subscription with the websocket provider\n *\n * @returns a promise that resolves when the websocket connection is established\n */\n WebsocketService.prototype.init = function () {\n this.connect();\n return this.initPromise.promise;\n };\n WebsocketService.prototype.connect = function () {\n var _this = this;\n this.getWebSocketConnection(33024, asperaSdk.globals.supportMultipleUsers ? 33029 : 33024)\n .then(function (webSocket) {\n _this.globalSocket = webSocket;\n _this.globalSocket.onerror = _this.handleError;\n _this.globalSocket.onclose = _this.handleClose;\n _this.globalSocket.onopen = _this.handleOpen;\n _this.globalSocket.onmessage = _this.handleMessage;\n _this.handleOpen();\n }).catch(function () {\n _this.reconnect();\n });\n };\n WebsocketService.prototype.reconnect = function () {\n var _this = this;\n if (this.globalSocket) {\n this.globalSocket.close();\n }\n setTimeout(function () {\n _this.connect();\n }, 1000);\n };\n WebsocketService.prototype.getWebSocketConnection = function (startPort, endPort) {\n var webSocketUrl = getWebsocketUrl(asperaSdk.globals.asperaAppUrl);\n var checkPort = function (port) {\n return new Promise(function (resolve, reject) {\n var webSocket = new WebSocket(\"\".concat(webSocketUrl, \":\").concat(port));\n webSocket.onopen = function () {\n resolve(webSocket);\n };\n webSocket.onerror = function () {\n reject(\"Connection failed on port \".concat(port));\n };\n });\n };\n return new Promise(function (resolve, reject) {\n var connectPort = function (port) {\n if (port > endPort) {\n return reject('No available WebSocket connection found');\n }\n checkPort(port)\n .then(function (ws) { return resolve(ws); })\n .catch(function (error) {\n connectPort(port + 1);\n });\n };\n connectPort(startPort);\n });\n };\n WebsocketService.prototype.notifyEvent = function (event) {\n if (typeof this.eventListener === 'function') {\n this.eventListener(event);\n }\n };\n WebsocketService.prototype.updateRpcPort = function () {\n if (!this.globalSocket) {\n return;\n }\n var url = new URL(this.globalSocket.url);\n asperaSdk.globals.rpcPort = Number(url.port);\n };\n return WebsocketService;\n}());\nexport { WebsocketService };\nexport var websocketService = new WebsocketService();\nexport default WebsocketService;\n","import { hiddenStyleList, installerUrl, protocol } from '../constants/constants';\nimport { messages } from '../constants/messages';\nimport { safariClient } from '../helpers/client/safari-client';\nimport { errorLog, isSafari } from '../helpers/helpers';\nimport { websocketService } from '../helpers/ws';\nimport { asperaSdk } from '../index';\nvar AsperaSdkGlobals = /** @class */ (function () {\n function AsperaSdkGlobals() {\n /** The URL of the IBM Aspera HTTP server to use with the SDK */\n this.asperaAppUrl = 'http://127.0.0.1';\n /** The URL of the IBM Aspera Desktop HTTP server to use with the SDK */\n this.rpcPort = 33024;\n /** The default URL to check for latest Aspera installers */\n this.installerUrl = installerUrl;\n /** Indication that the server has been verified as working */\n this.asperaAppVerified = false;\n /** Indicate if multiple session is supported */\n this.supportMultipleUsers = false;\n /** Map of drop zones created by querySelector */\n this.dropZonesCreated = new Map();\n }\n AsperaSdkGlobals.prototype.backupLaunchMethod = function (url) {\n window.alert(messages.loadingProtocol);\n window.location.href = url;\n };\n /**\n * Launch the IBM Aspera App via protocol url. By default, a hidden IFRAME attempts to\n * open the app but if that fails a fallback of opening a new window happens.\n */\n AsperaSdkGlobals.prototype.launch = function () {\n var _this = this;\n try {\n var element = document.createElement('iframe');\n element.src = protocol;\n element.onerror = function (error) {\n errorLog(messages.failedToGenerateIframe, error);\n _this.backupLaunchMethod(protocol);\n };\n element.setAttribute('style', hiddenStyleList);\n document.body.appendChild(element);\n }\n catch (error) {\n errorLog(messages.failedToGenerateIframe, error);\n this.backupLaunchMethod(protocol);\n }\n };\n return AsperaSdkGlobals;\n}());\nvar AsperaSdkInfo = /** @class */ (function () {\n function AsperaSdkInfo() {\n }\n return AsperaSdkInfo;\n}());\nexport { AsperaSdkInfo };\nvar TransferResponse = /** @class */ (function () {\n function TransferResponse() {\n }\n return TransferResponse;\n}());\nexport { TransferResponse };\nvar ActivityMessage = /** @class */ (function () {\n function ActivityMessage() {\n }\n return ActivityMessage;\n}());\nexport { ActivityMessage };\nvar ActivityTracking = /** @class */ (function () {\n function ActivityTracking() {\n /** Map of callbacks that receive transfer update events */\n this.activity_callbacks = new Map();\n /** Map of callbacks that received removed transfer events */\n this.removed_callbacks = new Map();\n /** Map of callbacks that receive connection events */\n this.event_callbacks = new Map();\n /** Map of callbacks that receive Safari extension events */\n this.safari_extension_callbacks = new Map();\n /** Keep track of the last WebSocket event **/\n this.lastWebSocketEvent = 'CLOSED';\n /** Keep track of the last notified WebSocket event **/\n this.lastNotifiedWebSocketEvent = undefined;\n /** Keep track of the last Safari extension event **/\n this.lastSafariExtensionEvent = 'DISABLED';\n }\n /**\n * Notify all consumers when a message is received from the websocket\n *\n * @param message the message received from the websocket\n */\n ActivityTracking.prototype.handleTransferActivity = function (message) {\n if (message.type === 'transferUpdated') {\n this.activity_callbacks.forEach(function (callback) {\n if (typeof callback === 'function') {\n callback(message.data);\n }\n });\n }\n if (message.type === 'transferRemoved') {\n this.removed_callbacks.forEach(function (callback) {\n if (typeof callback === 'function') {\n callback(message.data);\n }\n });\n }\n };\n /**\n * Handle and notify if needed when a connection webSocketEvent occurs. For example, when the SDK\n * websocket connection to IBM Aspera App is closed or reconnected.\n *\n * @param webSocketEvent the event type.\n */\n ActivityTracking.prototype.handleWebSocketEvents = function (webSocketEvent) {\n if (this.lastWebSocketEvent === webSocketEvent) {\n return;\n }\n this.lastWebSocketEvent = webSocketEvent;\n this.notifyWebSocketEvent(webSocketEvent);\n };\n /**\n * Notify all consumers when a connection webSocketEvent occurs.\n *\n * @param webSocketEvent the event type.\n */\n ActivityTracking.prototype.notifyWebSocketEvent = function (webSocketEvent) {\n if (this.lastNotifiedWebSocketEvent === webSocketEvent) {\n return;\n }\n this.lastNotifiedWebSocketEvent = webSocketEvent;\n this.event_callbacks.forEach(function (callback) {\n if (typeof callback === 'function') {\n callback(webSocketEvent);\n }\n });\n };\n /**\n * Notify all consumers when the client changes status. For example, when\n * IBM Aspera App is launched or closed.\n *\n * @param running whether the client is running or not.\n */\n ActivityTracking.prototype.handleClientEvents = function (running) {\n var webSocketEvent;\n if (!running) {\n webSocketEvent = 'CLOSED';\n }\n else {\n webSocketEvent = this.lastWebSocketEvent;\n }\n this.notifyWebSocketEvent(webSocketEvent);\n };\n /**\n * Notify all consumers when a Safari extension safariExtensionEvent occurs (enabled/disabled).\n *\n * @param safariExtensionEvent the event type.\n */\n ActivityTracking.prototype.handleSafariExtensionEvents = function (safariExtensionEvent) {\n if (this.lastSafariExtensionEvent === safariExtensionEvent) {\n return;\n }\n this.safari_extension_callbacks.forEach(function (callback) {\n if (typeof callback === 'function') {\n callback(safariExtensionEvent);\n }\n });\n this.lastSafariExtensionEvent = safariExtensionEvent;\n };\n /**\n * Set up the activity tracking with IBM Aspera.\n *\n * @returns a promise that resolves when the websocket connection is established.\n * Currently, this promise does not reject.\n */\n ActivityTracking.prototype.setup = function () {\n var _this = this;\n if (asperaSdk.globals.sessionId) {\n this.registerDesktopAppSession();\n }\n if (isSafari()) {\n return safariClient.monitorTransferActivity();\n }\n return websocketService.init()\n .then(function () {\n websocketService.registerMessage('transfer_activity', function (data) { return _this.handleTransferActivity(data); });\n websocketService.registerEvent(function (status) { return _this.handleWebSocketEvents(status); });\n });\n };\n /**\n * Register a callback for getting transfers back to the consumer\n *\n * @param callback the function to call with the array of transfers\n *\n * @returns the ID of the callback index\n */\n ActivityTracking.prototype.setCallback = function (callback) {\n if (typeof callback !== 'function') {\n errorLog(messages.callbackIsNotFunction);\n return;\n }\n var id = \"callback-\".concat(this.activity_callbacks.size + 1);\n this.activity_callbacks.set(id, callback);\n return id;\n };\n /**\n * Remove the callback (deregister) from the list of callbacks\n *\n * @param id the string of the callback to remove\n */\n ActivityTracking.prototype.removeCallback = function (id) {\n this.activity_callbacks.delete(id);\n };\n /**\n * Register a callback for getting transfers back to the consumer\n *\n * @param callback the function to call with the array of transfers\n *\n * @returns the ID of the callback index\n */\n ActivityTracking.prototype.setRemovedCallback = function (callback) {\n if (typeof callback !== 'function') {\n errorLog(messages.callbackIsNotFunction);\n return;\n }\n var id = \"callback-\".concat(this.removed_callbacks.size + 1);\n this.removed_callbacks.set(id, callback);\n return id;\n };\n /**\n * Remove the callback (deregister) from the list of callbacks\n *\n * @param id the string of the callback to remove\n */\n ActivityTracking.prototype.removeRemovedCallback = function (id) {\n this.removed_callbacks.delete(id);\n };\n /**\n * Register a callback for getting websocket events back to the consumer\n *\n * @param callback the function to call with the websocket event\n *\n * @returns the ID of the callback index\n */\n ActivityTracking.prototype.setWebSocketEventCallback = function (callback) {\n if (typeof callback !== 'function') {\n errorLog(messages.callbackIsNotFunction);\n return;\n }\n var id = \"callback-\".concat(this.event_callbacks.size + 1);\n this.event_callbacks.set(id, callback);\n callback(this.lastWebSocketEvent);\n return id;\n };\n /**\n * Remove the callback (deregister) from the list of callbacks\n *\n * @param id the string of the callback to remove\n */\n ActivityTracking.prototype.removeWebSocketEventCallback = function (id) {\n this.event_callbacks.delete(id);\n };\n /**\n * Register a callback for getting Safari extension events back to the consumer\n *\n * @param callback the function to call with the websocket event\n *\n * @returns the ID of the callback index\n */\n ActivityTracking.prototype.setSafariExtensionEventCallback = function (callback) {\n if (typeof callback !== 'function') {\n errorLog(messages.callbackIsNotFunction);\n return;\n }\n var id = \"callback-\".concat(this.safari_extension_callbacks.size + 1);\n this.safari_extension_callbacks.set(id, callback);\n callback(this.lastSafariExtensionEvent);\n return id;\n };\n /**\n * Remove the callback (deregister) from the list of callbacks\n *\n * @param id the string of the callback to remove\n */\n ActivityTracking.prototype.removeSafariExtensionEventCallback = function (id) {\n this.safari_extension_callbacks.delete(id);\n };\n ActivityTracking.prototype.registerDesktopAppSession = function () {\n var iframe = document.createElement('iframe');\n iframe.style.display = 'none';\n iframe.src = \"aspera://initialize?app_id=\".concat(asperaSdk.globals.appId, \"&session_id=\").concat(asperaSdk.globals.sessionId);\n document.body.appendChild(iframe);\n setTimeout(function () {\n document.body.removeChild(iframe);\n }, 1000);\n };\n return ActivityTracking;\n}());\nexport { ActivityTracking };\nvar AsperaSdk = /** @class */ (function () {\n function AsperaSdk() {\n /** Global information about IBM Aspera */\n this.globals = new AsperaSdkGlobals();\n /** Activity tracking for watching transfers */\n this.activityTracking = new ActivityTracking();\n }\n Object.defineProperty(AsperaSdk.prototype, \"isReady\", {\n /**\n * Check if IBM Aspera is ready to be used and has been verified.\n *\n * @returns a boolean indicating if SDK can be used for requests\n */\n get: function () {\n return this.globals.asperaAppVerified && this.globals.appId !== '';\n },\n enumerable: false,\n configurable: true\n });\n return AsperaSdk;\n}());\nexport { AsperaSdk };\n","import { JSONRPCClient } from 'json-rpc-2.0';\nimport { generatePromiseObjects } from '../helpers';\nimport { asperaSdk } from '../../index';\nexport var getRpcServerUrl = function () {\n return \"\".concat(asperaSdk.globals.asperaAppUrl, \":\").concat(asperaSdk.globals.rpcPort);\n};\n/**\n * Wraps a promise like object and returns a promise that supports catch.\n *\n * @param promise the HTTP promise like to wrap\n *\n * @returns promise for the HTTP connection with catch supporting error\n */\nexport var handlePromiseLikeErrors = function (promise) {\n var promiseInfo = generatePromiseObjects();\n promise.then(function (response) {\n promiseInfo.resolver(response);\n }, function (error) {\n promiseInfo.rejecter(error);\n });\n return promiseInfo.promise;\n};\n/**\n * JSON RPC client using HTTP (fetch) as transport.\n */\nvar JSONRPCHttpClient = /** @class */ (function () {\n function JSONRPCHttpClient() {\n var _this = this;\n /**\n * Request handler for the JSON-RPC client. This function is called by the JSON-RPC library\n * after forming the RPC request.\n *\n * @param request JSON-RPC request to send to the server\n */\n this.handleRequest = function (request) {\n var options = {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n },\n body: JSON.stringify(request),\n };\n var rpcServerURL = getRpcServerUrl();\n return fetch(rpcServerURL, options).then(function (response) {\n if (response.ok) {\n return response.json().then(function (rpcResponse) { return _this.client.receive(rpcResponse); });\n }\n else if (request.id !== undefined) {\n throw Promise.reject(response.statusText);\n }\n });\n };\n this.request = function (method, data) {\n return _this.client.request(method, data);\n };\n this.client = new JSONRPCClient(this.handleRequest);\n }\n return JSONRPCHttpClient;\n}());\n/**\n * Client used for making requests to Aspera.\n */\nvar HttpClient = /** @class */ (function () {\n function HttpClient() {\n var _this = this;\n this.request = function (method, payload) {\n if (payload === void 0) { payload = {}; }\n return handlePromiseLikeErrors(_this.httpClient.request(method, payload));\n };\n this.httpClient = new JSONRPCHttpClient();\n }\n ;\n return HttpClient;\n}());\nexport var httpClient = new HttpClient();\nexport default {\n httpClient: httpClient,\n handlePromiseLikeErrors: handlePromiseLikeErrors,\n};\n","import { httpClient } from './http-client';\nimport { safariClient } from './safari-client';\nimport { isSafari } from '../helpers';\nexport var client = isSafari() ? safariClient : httpClient;\n","import { messages } from '../constants/messages';\nimport { client } from '../helpers/client/client';\nimport { errorLog, generateErrorBody, generatePromiseObjects, isValidTransferSpec, randomUUID, throwError } from '../helpers/helpers';\nimport { asperaSdk } from '../index';\n/**\n * Check if IBM Aspera for Desktop connection works. This function is called by init\n * when initializing the SDK. This function can be used at any point for checking.\n *\n * @returns a promise that resolves if server can connect or rejects if not\n */\nexport var testConnection = function () {\n return client.request('get_info')\n .then(function (data) {\n asperaSdk.globals.AsperaSdkInfo = data;\n asperaSdk.globals.asperaAppVerified = true;\n return data;\n });\n};\n/**\n * Initialize drag and drop.\n *\n * @returns a promise that resolves if the initialization was successful or not\n */\nexport var initDragDrop = function () {\n if (!asperaSdk.isReady) {\n return throwError(messages.serverNotVerified);\n }\n var promiseInfo = generatePromiseObjects();\n client.request('init_drag_drop')\n .then(function (data) { return promiseInfo.resolver(data); })\n .catch(function (error) {\n errorLog(messages.dragDropInitFailed, error);\n promiseInfo.rejecter(generateErrorBody(messages.dragDropInitFailed, error));\n });\n return promiseInfo.promise;\n};\n/**\n * Initialize IBM Aspera client. If client cannot (reject/catch), then\n * client should attempt fixing server URL or trying again. If still fails disable UI elements.\n *\n * @param options initialization options:\n *\n * - `appId` the unique ID for the website. Transfers initiated during this session\n * will be associated with this ID. It is recommended to use a unique ID to keep transfer\n * information private from other websites.\n *\n * - `supportMultipleUsers` when enabled (defaults to false), the SDK will iterate over a port\n * range and generate a session id to determine the running instance of the desktop app for the\n * current user. This is needed when multiple users may be logged into the same machine\n * simultaneously, for example on a Windows Server.\n *\n * @returns a promise that resolves if IBM Aspera Desktop is running properly or\n * rejects if unable to connect\n */\nexport var init = function (options) {\n var _a, _b;\n var appId = (_a = options === null || options === void 0 ? void 0 : options.appId) !== null && _a !== void 0 ? _a : randomUUID();\n var supportMultipleUsers = (_b = options === null || options === void 0 ? void 0 : options.supportMultipleUsers) !== null && _b !== void 0 ? _b : false;\n asperaSdk.globals.appId = appId;\n if (supportMultipleUsers) {\n asperaSdk.globals.supportMultipleUsers = true;\n asperaSdk.globals.sessionId = randomUUID();\n }\n return asperaSdk.activityTracking.setup()\n .then(function () { return testConnection(); })\n .then(function () { return initDragDrop(); })\n .catch(function (error) {\n errorLog(messages.serverError, error);\n asperaSdk.globals.asperaAppVerified = false;\n throw generateErrorBody(messages.serverError, error);\n });\n};\n/**\n * Start a transfer\n *\n * @param transferSpec standard transferSpec for transfer\n * @param asperaSdkSpec IBM Aspera settings when starting a transfer\n *\n * @returns a promise that resolves if transfer initiation is successful and rejects if transfer cannot be started\n */\nexport var startTransfer = function (transferSpec, asperaSdkSpec) {\n if (!asperaSdk.isReady) {\n return throwError(messages.serverNotVerified);\n }\n if (!isValidTransferSpec(transferSpec)) {\n return throwError(messages.notValidTransferSpec, { transferSpec: transferSpec });\n }\n var promiseInfo = generatePromiseObjects();\n var payload = {\n transfer_spec: transferSpec,\n desktop_spec: asperaSdkSpec,\n app_id: asperaSdk.globals.appId,\n };\n client.request('start_transfer', payload)\n .then(function (data) { return promiseInfo.resolver(data); })\n .catch(function (error) {\n errorLog(messages.transferFailed, error);\n promiseInfo.rejecter(generateErrorBody(messages.transferFailed, error));\n });\n return promiseInfo.promise;\n};\n/**\n * Register a callback event for getting transfer updates\n *\n * @param callback callback function to receive transfers\n *\n * @returns ID representing the callback for deregistration purposes\n */\nexport var registerActivityCallback = function (callback) {\n return asperaSdk.activityTracking.setCallback(callback);\n};\n/**\n * Remove a callback from the transfer callback\n *\n * @param id the ID returned by `registerActivityCallback`\n */\nexport var deregisterActivityCallback = function (id) {\n asperaSdk.activityTracking.removeCallback(id);\n};\n/**\n * Register a callback event for when a user removes or cancels a transfer\n * directly from IBM Aspera. This may also be called if IBM Aspera\n * is configured to automatically remove completed transfers.\n *\n * @param callback callback function to receive transfers\n *\n * @returns ID representing the callback for deregistration purposes\n */\nexport var registerRemovedCallback = function (callback) {\n return asperaSdk.activityTracking.setRemovedCallback(callback);\n};\n/**\n * Remove a callback from the removed transfer callback\n *\n * @param id the ID returned by `registerRemovedCallback`\n */\nexport var deregisterRemovedCallback = function (id) {\n asperaSdk.activityTracking.removeRemovedCallback(id);\n};\n/**\n * Register a callback for getting updates about the connection status of IBM Aspera SDK.\n *\n * For example, to be notified of when the SDK loses connection with the application or connection\n * is re-established. This can be useful if you want to handle the case where the user quits IBM Aspera\n * after `init` has already been called, and want to prompt the user to relaunch the application.\n *\n * @param callback callback function to receive events\n *\n * @returns ID representing the callback for deregistration purposes\n */\nexport var registerStatusCallback = function (callback) {\n return asperaSdk.activityTracking.setWebSocketEventCallback(callback);\n};\n/**\n * Remove a callback from getting connection status events.\n *\n * @param id the ID returned by `registerStatusCallback`\n */\nexport var deregisterStatusCallback = function (id) {\n asperaSdk.activityTracking.removeWebSocketEventCallback(id);\n};\n/**\n * Register a callback for getting updates about the Safari extension status.\n *\n * This can be useful if you want to handle the case where the user enable or disable the Safari extension.\n *\n * @param callback callback function to receive events\n *\n * @returns ID representing the callback for deregistration purposes\n */\nexport var registerSafariExtensionStatusCallback = function (callback) {\n return asperaSdk.activityTracking.setSafariExtensionEventCallback(callback);\n};\n/**\n * Remove a callback from getting Safari extension status events.\n *\n * @param id the ID returned by `registerStatusCallback`\n */\nexport var deregisterSafariExtensionStatusCallback = function (id) {\n asperaSdk.activityTracking.removeSafariExtensionEventCallback(id);\n};\n/**\n * Remove a transfer. This will stop the transfer if it is in progress.\n *\n * @param id transfer uuid\n *\n * @returns a promise that resolves if transfer is removed and rejects if transfer cannot be removed\n */\nexport var removeTransfer = function (id) {\n if (!asperaSdk.isReady) {\n return throwError(messages.serverNotVerified);\n }\n var promiseInfo = generatePromiseObjects();\n var payload = {\n transfer_id: id,\n };\n client.request('remove_transfer', payload)\n .then(function (data) { return promiseInfo.resolver(data); })\n .catch(function (error) {\n errorLog(messages.removeTransferFailed, error);\n promiseInfo.rejecter(generateErrorBody(messages.removeTransferFailed, error));\n });\n return promiseInfo.promise;\n};\n/**\n * Stop a transfer.\n *\n * @param id transfer uuid\n *\n * @returns a promise that resolves if transfer is stopped and rejects if transfer cannot be stopped\n */\nexport var stopTransfer = function (id) {\n if (!asperaSdk.isReady) {\n return throwError(messages.serverNotVerified);\n }\n var promiseInfo = generatePromiseObjects();\n var payload = {\n transfer_id: id,\n };\n client.request('stop_transfer', payload)\n .then(function (data) { return promiseInfo.resolver(data); })\n .catch(function (error) {\n errorLog(messages.stopTransferFailed, error);\n promiseInfo.rejecter(generateErrorBody(messages.stopTransferFailed, error));\n });\n return promiseInfo.promise;\n};\n/**\n * Resume a paused or failed transfer.\n *\n * @param id transfer uuid\n * @param options resume transfer options\n *\n * @returns a promise that resolves with the new transfer object if transfer is resumed\n */\nexport var resumeTransfer = function (id, options) {\n if (!asperaSdk.isReady) {\n return throwError(messages.serverNotVerified);\n }\n var promiseInfo = generatePromiseObjects();\n var payload = {\n transfer_id: id,\n transfer_spec: options,\n };\n client.request('resume_transfer', payload)\n .then(function (data) { return promiseInfo.resolver(data); })\n .catch(function (error) {\n errorLog(messages.resumeTransferFailed, error);\n promiseInfo.rejecter(generateErrorBody(messages.resumeTransferFailed, error));\n });\n return promiseInfo.promise;\n};\n/**\n * Displays a file browser dialog for the user to select files.\n *\n * @param options file dialog options\n *\n * @returns a promise that resolves with the selected file(s) and rejects if user cancels dialog\n */\nexport var showSelectFileDialog = function (options) {\n if (!asperaSdk.isReady) {\n return throwError(messages.serverNotVerified);\n }\n var promiseInfo = generatePromiseObjects();\n var payload = {\n options: options || {},\n app_id: asperaSdk.globals.appId,\n };\n client.request('show_file_dialog', payload)\n .then(function (data) { return promiseInfo.resolver(data); })\n .catch(function (error) {\n errorLog(messages.showSelectFileDialogFailed, error);\n promiseInfo.rejecter(generateErrorBody(messages.showSelectFileDialogFailed, error));\n });\n return promiseInfo.promise;\n};\n/**\n * Displays a folder browser dialog for the user to select folders.\n *\n * @param options folder dialog options\n *\n * @returns a promise that resolves with the selected folder(s) and rejects if user cancels dialog\n */\nexport var showSelectFolderDialog = function (options) {\n if (!asperaSdk.isReady) {\n return throwError(messages.serverNotVerified);\n }\n var promiseInfo = generatePromiseObjects();\n var payload = {\n options: options || {},\n app_id: asperaSdk.globals.appId,\n };\n client.request('show_folder_dialog', payload)\n .then(function (data) { return promiseInfo.resolver(data); })\n .catch(function (error) {\n errorLog(messages.showSelectFolderDialogFailed, error);\n promiseInfo.rejecter(generateErrorBody(messages.showSelectFolderDialogFailed, error));\n });\n return promiseInfo.promise;\n};\n/**\n * Opens the IBM Aspera preferences page.\n *\n * @returns a promise that resolves when the preferences page is opened.\n */\nexport var showPreferences = function () {\n if (!asperaSdk.isReady) {\n return throwError(messages.serverNotVerified);\n }\n var promiseInfo = generatePromiseObjects();\n client.request('open_preferences')\n .then(function (data) { return promiseInfo.resolver(data); })\n .catch(function (error) {\n errorLog(messages.showPreferencesFailed, error);\n promiseInfo.rejecter(generateErrorBody(messages.showPreferencesFailed, error));\n });\n return promiseInfo.promise;\n};\n/**\n * Get all transfers associated with the current application.\n *\n * @returns a promise that resolves with an array of transfers.\n */\nexport var getAllTransfers = function () {\n if (!asperaSdk.isReady) {\n return throwError(messages.serverNotVerified);\n }\n var promiseInfo = generatePromiseObjects();\n var payload = {\n app_id: asperaSdk.globals.appId,\n };\n client.request('get_all_transfers', payload)\n .then(function (data) { return promiseInfo.resolver(data); })\n .catch(function (error) {\n errorLog(messages.getAllTransfersFailed, error);\n promiseInfo.rejecter(generateErrorBody(messages.getAllTransfersFailed, error));\n });\n return promiseInfo.promise;\n};\n/**\n * Get a specific transfer by ID.\n *\n * @param id transfer uuid\n *\n * @returns a promise that resolves with the transfer.\n */\nexport var getTransfer = function (id) {\n if (!asperaSdk.isReady) {\n return throwError(messages.serverNotVerified);\n }\n var promiseInfo = generatePromiseObjects();\n var payload = {\n transfer_id: id,\n };\n client.request('get_transfer', payload)\n .then(function (data) { return promiseInfo.resolver(data); })\n .catch(function (error) {\n errorLog(messages.getTransferFailed, error);\n promiseInfo.rejecter(generateErrorBody(messages.getTransferFailed, error));\n });\n return promiseInfo.promise;\n};\n/**\n * Opens and highlights the downloaded file in Finder or Windows Explorer. If multiple files,\n * then only the first file will be selected.\n *\n * @param id transfer uuid\n *\n * @returns a promise that resolves if the file can be shown and rejects if not\n */\nexport var showDirectory = function (id) {\n if (!asperaSdk.isReady) {\n return throwError(messages.serverNotVerified);\n }\n var promiseInfo = generatePromiseObjects();\n var payload = {\n transfer_id: id,\n };\n client.request('show_directory', payload)\n .then(function (data) { return promiseInfo.resolver(data); })\n .catch(function (error) {\n errorLog(messages.showDirectoryFailed, error);\n promiseInfo.rejecter(generateErrorBody(messages.showDirectoryFailed, error));\n });\n return promiseInfo.promise;\n};\n/**\n * Modify the speed of a running transfer.\n *\n * @param id transfer uuid\n * @param options transfer rate options\n *\n * @returns a promise that resolves if the transfer rate can be modified and rejects if not\n */\nexport var modifyTransfer = function (id, options) {\n if (!asperaSdk.isReady) {\n return throwError(messages.serverNotVerified);\n }\n var promiseInfo = generatePromiseObjects();\n var payload = {\n transfer_id: id,\n transfer_spec: options,\n };\n client.request('modify_transfer', payload)\n .then(function (data) { return promiseInfo.resolver(data); })\n .catch(function (error) {\n errorLog(messages.modifyTransferFailed, error);\n promiseInfo.rejecter(generateErrorBody(messages.modifyTransferFailed, error));\n });\n return promiseInfo.promise;\n};\n/**\n * Set the custom branding template to be used by IBM Aspera. If the app is already\n * configured to use a different branding, then the branding template you specify will be\n * stored by the app, allowing the end user to switch at any point.\n *\n * @param id custom branding template id. This should be consistent across page loads.\n * @param options custom branding options\n *\n * @returns a promise that resolves if the branding was properly set.\n */\nexport var setBranding = function (id, options) {\n if (!asperaSdk.isReady) {\n return throwError(messages.serverNotVerified);\n }\n var promiseInfo = generatePromiseObjects();\n var branding = {\n id: id,\n name: options.name,\n theme: options.theme,\n };\n var payload = {\n branding: branding,\n };\n client.request('update_branding', payload)\n .then(function (data) { return promiseInfo.resolver(data); })\n .catch(function (error) {\n errorLog(messages.setBrandingFailed, error);\n promiseInfo.rejecter(generateErrorBody(messages.setBrandingFailed, error));\n });\n return promiseInfo.promise;\n};\n/**\n * Create a dropzone for the given element selector.\n *\n * @param callback the function to call once the files are dropped\n * @param elementSelector the selector of the element on the page that should watch for drop events\n */\nexport var createDropzone = function (callback, elementSelector) {\n var elements = document.querySelectorAll(elementSelector);\n if (!elements || !elements.length) {\n errorLog(messages.unableToFindElementOnPage);\n return;\n }\n var dragEvent = function (event) {\n event.preventDefault();\n };\n var dropEvent = function (event) {\n event.preventDefault();\n var files = [];\n if (event.dataTransfer && event.dataTransfer.files && event.dataTransfer.files.length && event.dataTransfer.files[0]) {\n for (var i = 0; i < event.dataTransfer.files.length; i++) {\n var file = event.dataTransfer.files[i];\n files.push({\n lastModified: file.lastModified,\n name: file.name,\n size: file.size,\n type: file.type\n });\n }\n var payload = {\n files: files,\n app_id: asperaSdk.globals.appId,\n };\n client.request('dropped_files', payload)\n .then(function (data) { return callback({ event: event, files: data }); })\n .catch(function (error) {\n errorLog(messages.unableToReadDropped, error);\n });\n }\n };\n elements.forEach(function (element) {\n element.addEventListener('dragover', dragEvent);\n element.addEventListener('drop', dropEvent);\n asperaSdk.globals.dropZonesCreated.set(elementSelector, [{ event: 'dragover', callback: dragEvent }, { event: 'drop', callback: dropEvent }]);\n });\n};\n/**\n * Remove dropzone.\n *\n * @param elementSelector the selector of the element on the page that should remove\n */\nexport var removeDropzone = function (elementSelector) {\n var foundDropzone = asperaSdk.globals.dropZonesCreated.get(elementSelector);\n if (foundDropzone) {\n foundDropzone.forEach(function (data) {\n var elements = document.querySelectorAll(elementSelector);\n if (elements && elements.length) {\n elements.forEach(function (element) {\n element.removeEventListener(data.event, data.callback);\n });\n }\n });\n }\n};\n/**\n * Get metadata about the IBM Aspera installation.\n *\n * @returns a promise that returns information about the user's IBM Aspera installation.\n */\nexport var getInfo = function () {\n if (!asperaSdk.isReady) {\n return throwError(messages.serverNotVerified);\n }\n return new Promise(function (resolve, _) {\n resolve(asperaSdk.globals.AsperaSdkInfo);\n });\n};\n","import { AsperaSdk } from './models/aspera-sdk.model';\nimport { createDropzone, deregisterActivityCallback, deregisterRemovedCallback, deregisterSafariExtensionStatusCallback, deregisterStatusCallback, getAllTransfers, getInfo, getTransfer, init, initDragDrop, modifyTransfer, registerActivityCallback, registerRemovedCallback, registerSafariExtensionStatusCallback, registerStatusCallback, removeDropzone, removeTransfer, resumeTransfer, setBranding, showDirectory, showPreferences, showSelectFileDialog, showSelectFolderDialog, startTransfer, stopTransfer, testConnection, } from './app/core';\nimport { getInstallerInfo } from './app/installer';\nimport { getInstallerUrls, isSafari } from './helpers/helpers';\nexport var asperaSdk = new AsperaSdk();\nasperaSdk.init = init;\nasperaSdk.testConnection = testConnection;\nasperaSdk.startTransfer = startTransfer;\nasperaSdk.registerActivityCallback = registerActivityCallback;\nasperaSdk.deregisterActivityCallback = deregisterActivityCallback;\nasperaSdk.removeTransfer = removeTransfer;\nasperaSdk.showDirectory = showDirectory;\nasperaSdk.stopTransfer = stopTransfer;\nasperaSdk.resumeTransfer = resumeTransfer;\nasperaSdk.getAllTransfers = getAllTransfers;\nasperaSdk.getTransfer = getTransfer;\nasperaSdk.registerRemovedCallback = registerRemovedCallback;\nasperaSdk.deregisterRemovedCallback = deregisterRemovedCallback;\nasperaSdk.showSelectFileDialog = showSelectFileDialog;\nasperaSdk.showSelectFolderDialog = showSelectFolderDialog;\nasperaSdk.showPreferences = showPreferences;\nasperaSdk.modifyTransfer = modifyTransfer;\nasperaSdk.createDropzone = createDropzone;\nasperaSdk.removeDropzone = removeDropzone;\nasperaSdk.getInstallerInfo = getInstallerInfo;\nasperaSdk.registerStatusCallback = registerStatusCallback;\nasperaSdk.deregisterStatusCallback = deregisterStatusCallback;\nasperaSdk.registerSafariExtensionStatusCallback = registerSafariExtensionStatusCallback;\nasperaSdk.deregisterSafariExtensionStatusCallback = deregisterSafariExtensionStatusCallback;\nasperaSdk.initDragDrop = initDragDrop;\nasperaSdk.setBranding = setBranding;\nasperaSdk.getInfo = getInfo;\nasperaSdk.isSafari = isSafari;\nasperaSdk.getInstallerUrls = getInstallerUrls;\nvar launch = asperaSdk.globals.launch;\nasperaSdk.launch = launch;\nif (typeof window === 'object') {\n window.asperaSdk = asperaSdk;\n}\nexport { isSafari, init, testConnection, startTransfer, launch, registerActivityCallback, deregisterActivityCallback, removeTransfer, showDirectory, stopTransfer, resumeTransfer, getAllTransfers, getTransfer, registerRemovedCallback, deregisterRemovedCallback, showSelectFileDialog, showSelectFolderDialog, showPreferences, modifyTransfer, createDropzone, removeDropzone, initDragDrop, getInstallerInfo, registerStatusCallback, deregisterStatusCallback, registerSafariExtensionStatusCallback, deregisterSafariExtensionStatusCallback, setBranding, getInfo, getInstallerUrls, };\nexport default asperaSdk;\n","import { asperaSdk } from '../index';\nimport { errorLog, generateErrorBody, generatePromiseObjects, getCurrentPlatform, isValidURL, throwError } from '../helpers/helpers';\nimport { apiGet } from '../helpers/http';\nimport { messages } from '../constants/messages';\n/**\n * Get the latest Aspera SDK installer information such as download URL and version.\n *\n * @param options Installer info options\n *\n * @returns a promise that resolves with the installer info and rejects if there is an error\n */\nexport var getInstallerInfo = function (options) {\n if (options === void 0) { options = {}; }\n var url = options.endpoint || asperaSdk.globals.installerUrl;\n if (url.endsWith('/latest.json')) {\n url = url.replace('/latest.json', '');\n }\n if (!isValidURL(url)) {\n return throwError(messages.invalidEndpoint, { url: url });\n }\n var promiseInfo = generatePromiseObjects();\n apiGet(\"\".concat(url, \"/latest.json\")).then(function (response) {\n response.json().then(function (data) {\n if (options.endpoint) {\n for (var _i = 0, _a = data.entries; _i < _a.length; _i++) {\n var entry = _a[_i];\n if (!isValidURL(entry.url)) {\n entry.url = \"\".concat(options.endpoint, \"/\").concat(entry.url);\n }\n }\n }\n if (options.all) {\n promiseInfo.resolver(data);\n }\n else {\n var platform_1 = getCurrentPlatform();\n data.entries = data.entries.filter(function (entry) { return entry.platform === platform_1; });\n promiseInfo.resolver(data);\n }\n });\n }).catch(function (error) {\n errorLog(messages.getInstallerError, error);\n promiseInfo.rejecter(generateErrorBody(messages.getInstallerError, error));\n });\n return promiseInfo.promise;\n};\n","import { generatePromiseObjects } from './helpers';\n/**\n * Check HTTP promise response for server error response (non 2XX status) and reject promise is error\n *\n * @param promise the HTTP promise to check for HTTP status code of 2XX for success\n *\n * @returns promise for the HTTP connection with catch supporting error\n */\nexport var handlePromiseErrors = function (promise) {\n var promiseInfo = generatePromiseObjects();\n promise.then(function (response) {\n if (response.ok) {\n promiseInfo.resolver(response);\n }\n else {\n promiseInfo.rejecter(response);\n }\n return response;\n }).catch(function (error) {\n promiseInfo.rejecter(error);\n });\n return promiseInfo.promise;\n};\n/**\n * Make a GET for retrieving data from a server\n *\n * @param url the url string of the resource on the server\n *\n * @returns a promise that will resolve with the response from the server or reject if network/server error\n */\nexport var apiGet = function (url) {\n return handlePromiseErrors(fetch(url, {\n headers: {\n 'Content-Type': 'application/json',\n },\n }));\n};\n"],"names":["__awaiter","this","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","__generator","body","f","y","t","g","_","label","sent","trys","ops","verb","Symbol","iterator","n","v","op","TypeError","call","pop","length","push","Object","defineProperty","exports","JSONRPCClient","models_1","internal_1","_send","createID","idToResolveMap","Map","id","prototype","_createID","timeout","delay","overrideCreateJSONRPCErrorResponse","_this","createJSONRPCErrorResponse","DefaultErrorCode","timeoutRequest","ids","request","timeoutID","setTimeout","forEach","get","delete","clearTimeout","error","method","params","clientParams","requestWithID","requestAdvanced","Array","isArray","map","filter","isDefinedAndNonNull","response","_a","createJSONRPCRequest","undefined","JSONRPCErrorException","message","code","data","Error","requests","areRequestsOriginallyArray","requestsWithID","promises","set","promise","all","responses","send","receive","notify","createJSONRPCNotification","payload","rejectAllPendingRequests","clear","__createBinding","create","o","m","k","k2","desc","getOwnPropertyDescriptor","__esModule","writable","configurable","enumerable","__exportStar","p","hasOwnProperty","extendStatics","__extends","d","b","setPrototypeOf","__proto__","String","__","constructor","createJSONRPCSuccessResponse","JSONRPCErrorCode","isJSONRPCResponses","isJSONRPCResponse","isJSONRPCRequests","isJSONRPCRequest","isJSONRPCID","JSONRPC","jsonrpc","every","createJSONRPCError","_super","toObject","JSONRPCServerAndClient","server","client","options","errorListener","console","warn","applyServerMiddleware","middlewares","_i","arguments","applyMiddleware","hasMethod","name","addMethod","addMethodAdvanced","jsonRPCRequest","receiveAndSend","serverParams","__assign","assign","s","i","__spreadArray","to","from","pack","ar","l","slice","concat","JSONRPCServer","createInvalidRequestResponse","InvalidRequest","mapErrorToJSONRPCErrorResponse","defaultMapErrorToJSONRPCErrorResponse","nameToMethodDictionary","middleware","toJSONRPCMethod","mapResultToJSONRPCResponse","receiveJSON","json","tryParseRequestJSON","ParseError","JSON","parse","receiveMultiple","receiveSingle","isNonNull","callMethod","mapResponse","combineMiddlewares","reduce","middlewareReducer","prevMiddleware","nextMiddleware","onError","mapErrorToJSONRPCErrorResponseIfNecessary","noopMiddleware","MethodNotFound","InternalError","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","module","__webpack_modules__","definition","key","obj","prop","SafariExtensionEventType","keepAliveTimeout","protocol","baseInstallerUrl","installerUrl","messages","generatePromiseObjects","resolver","rejecter","errorLog","debugData","window","asperaSdkLogs","generateErrorBody","errorResponse","randomUUID","crypto","replace","c","r","Number","Date","getTime","Math","random","toFixed","toString","throwError","isValidURL","url","URL","isSafari","test","navigator","userAgent","MSStream","safariClient","SafariClient","keepAliveInterval","lastPing","lastPong","safariExtensionEnabled","subscribedTransferActivity","dispatchPromiseEvent","Request","promiseExecutors","listenResponseEvents","listenTransferActivityEvents","listenStatusEvents","listenClientStatusEvents","listenPongEvents","keepAlive","monitorTransferActivity","dispatchMonitorEvent","Monitor","asperaSdk","globals","appId","extensionInterval","setInterval","catch","clearInterval","buildRPCRequest","dispatchEvent","type","detail","document","CustomEvent","stringify","handleResponse","requestId","executor","addEventListener","event","activityTracking","handleTransferActivity","handleWebSocketEvents","running","handleClientEvents","now","safariExtensionStatusChanged","Ping","isEnabled","resumeTransferActivity_1","promiseExecutor","handleSafariExtensionEvents","checkSafariExtensionStatus","pingPongDiff","websocketService","WebsocketService","sockets","isConnected","initPromise","handleOpen","joinChannel","updateRpcPort","notifyEvent","handleClose","globalSocket","reconnect","handleNotReady","handleError","handleMessage","socket","registerMessage","messageName","callback","registerEvent","eventListener","init","connect","getWebSocketConnection","supportMultipleUsers","webSocket","onerror","onclose","onopen","onmessage","close","startPort","endPort","webSocketUrl","serverUrl","wsProtocol","indexOf","getWebsocketUrl","asperaAppUrl","connectPort","port","WebSocket","checkPort","ws","rpcPort","AsperaSdkGlobals","asperaAppVerified","dropZonesCreated","backupLaunchMethod","alert","location","href","launch","element","createElement","src","setAttribute","appendChild","ActivityTracking","activity_callbacks","removed_callbacks","event_callbacks","safari_extension_callbacks","lastWebSocketEvent","lastNotifiedWebSocketEvent","lastSafariExtensionEvent","webSocketEvent","notifyWebSocketEvent","safariExtensionEvent","setup","sessionId","registerDesktopAppSession","status","setCallback","size","removeCallback","setRemovedCallback","removeRemovedCallback","setWebSocketEventCallback","removeWebSocketEventCallback","setSafariExtensionEventCallback","removeSafariExtensionEventCallback","iframe","style","display","removeChild","AsperaSdk","JSONRPCHttpClient","handleRequest","headers","rpcServerURL","fetch","ok","rpcResponse","statusText","httpClient","promiseInfo","testConnection","AsperaSdkInfo","initDragDrop","isReady","_b","startTransfer","transferSpec","asperaSdkSpec","direction","remote_host","paths","isValidTransferSpec","transfer_spec","desktop_spec","app_id","registerActivityCallback","deregisterActivityCallback","removeTransfer","transfer_id","showDirectory","stopTransfer","resumeTransfer","getAllTransfers","getTransfer","registerRemovedCallback","deregisterRemovedCallback","showSelectFileDialog","showSelectFolderDialog","showPreferences","modifyTransfer","createDropzone","elementSelector","elements","querySelectorAll","dragEvent","preventDefault","dropEvent","files","dataTransfer","file","lastModified","removeDropzone","foundDropzone","removeEventListener","getInstallerInfo","endpoint","endsWith","apiGet","entries","entry","platform_1","ua","platform","registerStatusCallback","deregisterStatusCallback","registerSafariExtensionStatusCallback","deregisterSafariExtensionStatusCallback","setBranding","branding","theme","getInfo","getInstallerUrls","base","latest"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"aspera-sdk.js","mappings":"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","sources":["webpack://@ibm-aspera/sdk/./node_modules/@ibm-aspera/http-gateway-sdk-js/commonjs/app/download.js","webpack://@ibm-aspera/sdk/./node_modules/json-rpc-2.0/dist/client.js","webpack://@ibm-aspera/sdk/./src/helpers/client/safari-client.ts","webpack://@ibm-aspera/sdk/./node_modules/@ibm-aspera/http-gateway-sdk-js/commonjs/constants/constants.js","webpack://@ibm-aspera/sdk/./src/index.ts","webpack://@ibm-aspera/sdk/./node_modules/@ibm-aspera/http-gateway-sdk-js/commonjs/index.js","webpack://@ibm-aspera/sdk/./node_modules/@ibm-aspera/http-gateway-sdk-js/commonjs/helpers/helpers.js","webpack://@ibm-aspera/sdk/./node_modules/json-rpc-2.0/dist/models.js","webpack://@ibm-aspera/sdk/./src/helpers/http.ts","webpack://@ibm-aspera/sdk/./src/app/core.ts","webpack://@ibm-aspera/sdk/./node_modules/@ibm-aspera/http-gateway-sdk-js/commonjs/helpers/http.js","webpack://@ibm-aspera/sdk/./src/http-gateway/upload.ts","webpack://@ibm-aspera/sdk/./src/http-gateway/index.ts","webpack://@ibm-aspera/sdk/./node_modules/json-rpc-2.0/dist/server.js","webpack://@ibm-aspera/sdk/./node_modules/@ibm-aspera/http-gateway-sdk-js/commonjs/app/core.js","webpack://@ibm-aspera/sdk/./src/constants/messages.ts","webpack://@ibm-aspera/sdk/./node_modules/json-rpc-2.0/dist/server-and-client.js","webpack://@ibm-aspera/sdk/./src/constants/constants.ts","webpack://@ibm-aspera/sdk/./src/helpers/client/client.ts","webpack://@ibm-aspera/sdk/./src/helpers/client/http-client.ts","webpack://@ibm-aspera/sdk/./node_modules/json-rpc-2.0/dist/internal.js","webpack://@ibm-aspera/sdk/./src/app/installer.ts","webpack://@ibm-aspera/sdk/./node_modules/@ibm-aspera/http-gateway-sdk-js/commonjs/app/streaming.js","webpack://@ibm-aspera/sdk/./src/http-gateway/download.ts","webpack://@ibm-aspera/sdk/./src/http-gateway/core.ts","webpack://@ibm-aspera/sdk/./node_modules/@ibm-aspera/http-gateway-sdk-js/commonjs/app/upload.js","webpack://@ibm-aspera/sdk/./node_modules/json-rpc-2.0/dist/index.js","webpack://@ibm-aspera/sdk/./src/helpers/ws.ts","webpack://@ibm-aspera/sdk/./src/helpers/helpers.ts","webpack://@ibm-aspera/sdk/./node_modules/@ibm-aspera/http-gateway-sdk-js/commonjs/models/models.js","webpack://@ibm-aspera/sdk/./node_modules/@ibm-aspera/http-gateway-sdk-js/commonjs/models/http-gateway-global.model.js","webpack://@ibm-aspera/sdk/./node_modules/@ibm-aspera/http-gateway-sdk-js/commonjs/constants/messages.js","webpack://@ibm-aspera/sdk/./src/models/aspera-sdk.model.ts","webpack://@ibm-aspera/sdk/./node_modules/es6-promise/dist/es6-promise.js","webpack://@ibm-aspera/sdk/./node_modules/json-rpc-2.0/dist/interfaces.js","webpack://@ibm-aspera/sdk/webpack/bootstrap","webpack://@ibm-aspera/sdk/webpack/runtime/global","webpack://@ibm-aspera/sdk/webpack/startup"],"sourcesContent":["\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.download = void 0;\nvar http_1 = require(\"../helpers/http\");\nvar index_1 = require(\"../index\");\nvar helpers_1 = require(\"../helpers/helpers\");\nvar messages_1 = require(\"../constants/messages\");\nvar core_1 = require(\"./core\");\n/**\n * Start a HTTP Gateway download. Progress is not provided on downloads, browser handles download directly\n * When in software mode the promise will return transfer_spec_id and the URL. The URL has not been used\n * therefore a client can open it and start the download using software specific methods (like file reader).\n *\n * @param transferSpec standard Connect transferSpec for downloading\n *\n * @returns a promise that resolves if download is started successfully or rejects if error occurs\n */\nvar download = function (transferSpec, options) {\n if (options === void 0) { options = {}; }\n if (!index_1.asperaHttpGateway.isReady) {\n (0, helpers_1.errorLog)(messages_1.messages.serverNotVerified);\n return new Promise(function (resolve, reject) {\n reject((0, helpers_1.generateErrorBody)(messages_1.messages.serverNotVerified));\n });\n }\n if (!(0, helpers_1.isValidTransferSpec)(transferSpec)) {\n (0, helpers_1.errorLog)(messages_1.messages.notValidTransferSpec);\n return new Promise(function (resolve, reject) {\n reject((0, helpers_1.generateErrorBody)(messages_1.messages.notValidTransferSpec, { transferSpec: transferSpec }));\n });\n }\n var promiseInfo = (0, helpers_1.generatePromiseObjects)();\n if (typeof options.zipRequire === 'boolean') {\n transferSpec.zip_required = options.zipRequire;\n }\n var payload = {\n transfer_spec: transferSpec\n };\n var finalServerUrl = options.serverUrlOverride ? (0, core_1.cleanupServerUrl)(options.serverUrlOverride) : index_1.asperaHttpGateway.globals.serverUrl;\n (0, http_1.apiPost)(\"\".concat(finalServerUrl, \"/v1/download\"), payload).then(function (response) {\n response.json().then(function (data) {\n if (data.transfer_spec_id) {\n var downloadUrl = \"\".concat(finalServerUrl, \"/v1/download/\").concat(data.transfer_spec_id);\n if (index_1.asperaHttpGateway.globals.softwareMode || (options === null || options === void 0 ? void 0 : options.disableAutoDownload)) {\n promiseInfo.resolver({\n transfer_spec_id: data.transfer_spec_id,\n url: downloadUrl,\n });\n return;\n }\n index_1.asperaHttpGateway.globals.triggerDownloadFromUrl(downloadUrl);\n promiseInfo.resolver();\n }\n else {\n (0, helpers_1.errorLog)(messages_1.messages.failedToGetDownloadUrl, { response: data });\n promiseInfo.rejecter((0, helpers_1.generateErrorBody)(messages_1.messages.failedToGetDownloadUrl, { response: data }));\n }\n });\n }).catch(function (error) {\n (0, helpers_1.errorLog)(messages_1.messages.downloadFailed, error);\n promiseInfo.rejecter((0, helpers_1.generateErrorBody)(messages_1.messages.downloadFailed, error));\n });\n return promiseInfo.promise;\n};\nexports.download = download;\nexports.default = {\n download: exports.download\n};\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.JSONRPCClient = void 0;\nvar models_1 = require(\"./models\");\nvar internal_1 = require(\"./internal\");\nvar JSONRPCClient = /** @class */ (function () {\n function JSONRPCClient(_send, createID) {\n this._send = _send;\n this.createID = createID;\n this.idToResolveMap = new Map();\n this.id = 0;\n }\n JSONRPCClient.prototype._createID = function () {\n if (this.createID) {\n return this.createID();\n }\n else {\n return ++this.id;\n }\n };\n JSONRPCClient.prototype.timeout = function (delay, overrideCreateJSONRPCErrorResponse) {\n var _this = this;\n if (overrideCreateJSONRPCErrorResponse === void 0) { overrideCreateJSONRPCErrorResponse = function (id) {\n return (0, models_1.createJSONRPCErrorResponse)(id, internal_1.DefaultErrorCode, \"Request timeout\");\n }; }\n var timeoutRequest = function (ids, request) {\n var timeoutID = setTimeout(function () {\n ids.forEach(function (id) {\n var resolve = _this.idToResolveMap.get(id);\n if (resolve) {\n _this.idToResolveMap.delete(id);\n resolve(overrideCreateJSONRPCErrorResponse(id));\n }\n });\n }, delay);\n return request().then(function (result) {\n clearTimeout(timeoutID);\n return result;\n }, function (error) {\n clearTimeout(timeoutID);\n return Promise.reject(error);\n });\n };\n var requestAdvanced = function (request, clientParams) {\n var ids = (!Array.isArray(request) ? [request] : request)\n .map(function (request) { return request.id; })\n .filter(isDefinedAndNonNull);\n return timeoutRequest(ids, function () {\n return _this.requestAdvanced(request, clientParams);\n });\n };\n return {\n request: function (method, params, clientParams) {\n var id = _this._createID();\n return timeoutRequest([id], function () {\n return _this.requestWithID(method, params, clientParams, id);\n });\n },\n requestAdvanced: function (request, clientParams) { return requestAdvanced(request, clientParams); },\n };\n };\n JSONRPCClient.prototype.request = function (method, params, clientParams) {\n return this.requestWithID(method, params, clientParams, this._createID());\n };\n JSONRPCClient.prototype.requestWithID = function (method, params, clientParams, id) {\n return __awaiter(this, void 0, void 0, function () {\n var request, response;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n request = (0, models_1.createJSONRPCRequest)(id, method, params);\n return [4 /*yield*/, this.requestAdvanced(request, clientParams)];\n case 1:\n response = _a.sent();\n if (response.result !== undefined && !response.error) {\n return [2 /*return*/, response.result];\n }\n else if (response.result === undefined && response.error) {\n return [2 /*return*/, Promise.reject(new models_1.JSONRPCErrorException(response.error.message, response.error.code, response.error.data))];\n }\n else {\n return [2 /*return*/, Promise.reject(new Error(\"An unexpected error occurred\"))];\n }\n return [2 /*return*/];\n }\n });\n });\n };\n JSONRPCClient.prototype.requestAdvanced = function (requests, clientParams) {\n var _this = this;\n var areRequestsOriginallyArray = Array.isArray(requests);\n if (!Array.isArray(requests)) {\n requests = [requests];\n }\n var requestsWithID = requests.filter(function (request) {\n return isDefinedAndNonNull(request.id);\n });\n var promises = requestsWithID.map(function (request) {\n return new Promise(function (resolve) { return _this.idToResolveMap.set(request.id, resolve); });\n });\n var promise = Promise.all(promises).then(function (responses) {\n if (areRequestsOriginallyArray || !responses.length) {\n return responses;\n }\n else {\n return responses[0];\n }\n });\n return this.send(areRequestsOriginallyArray ? requests : requests[0], clientParams).then(function () { return promise; }, function (error) {\n requestsWithID.forEach(function (request) {\n _this.receive((0, models_1.createJSONRPCErrorResponse)(request.id, internal_1.DefaultErrorCode, (error && error.message) || \"Failed to send a request\"));\n });\n return promise;\n });\n };\n JSONRPCClient.prototype.notify = function (method, params, clientParams) {\n var request = (0, models_1.createJSONRPCNotification)(method, params);\n this.send(request, clientParams).then(undefined, function () { return undefined; });\n };\n JSONRPCClient.prototype.send = function (payload, clientParams) {\n return __awaiter(this, void 0, void 0, function () {\n return __generator(this, function (_a) {\n return [2 /*return*/, this._send(payload, clientParams)];\n });\n });\n };\n JSONRPCClient.prototype.rejectAllPendingRequests = function (message) {\n this.idToResolveMap.forEach(function (resolve, id) {\n return resolve((0, models_1.createJSONRPCErrorResponse)(id, internal_1.DefaultErrorCode, message));\n });\n this.idToResolveMap.clear();\n };\n JSONRPCClient.prototype.receive = function (responses) {\n var _this = this;\n if (!Array.isArray(responses)) {\n responses = [responses];\n }\n responses.forEach(function (response) {\n var resolve = _this.idToResolveMap.get(response.id);\n if (resolve) {\n _this.idToResolveMap.delete(response.id);\n resolve(response);\n }\n });\n };\n return JSONRPCClient;\n}());\nexports.JSONRPCClient = JSONRPCClient;\nvar isDefinedAndNonNull = function (value) {\n return value !== undefined && value !== null;\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.safariClient = exports.SafariClient = void 0;\nvar helpers_1 = require(\"../helpers\");\nvar index_1 = require(\"../../index\");\n/**\n * Enum defining different types of Safari extension events.\n */\nvar SafariExtensionEventType;\n(function (SafariExtensionEventType) {\n SafariExtensionEventType[\"Monitor\"] = \"Monitor\";\n SafariExtensionEventType[\"Ping\"] = \"Ping\";\n SafariExtensionEventType[\"Request\"] = \"Request\";\n})(SafariExtensionEventType || (SafariExtensionEventType = {}));\n/**\n * Global keep alive timeout to prevent recursion.\n */\nvar keepAliveTimeout;\n/**\n * Handles communication with the Safari extension using JSON-RPC over custom events.\n */\nvar SafariClient = /** @class */ (function () {\n /**\n * Initializes the SafariExtensionHandler instance.\n * Sets up the promise executor map and starts listening to extension events.\n */\n function SafariClient() {\n var _this = this;\n this.keepAliveInterval = 1000;\n this.lastPing = null;\n this.lastPong = null;\n this.safariExtensionEnabled = false;\n this.subscribedTransferActivity = false;\n /**\n * Sends a JSON-RPC request to the Safari extension.\n * @param method The method name to invoke on the extension.\n * @param payload Optional payload for the request.\n * @returns A Promise that resolves with the response from the extension.\n */\n this.request = function (method, payload) {\n if (payload === void 0) { payload = {}; }\n return _this.dispatchPromiseEvent(SafariExtensionEventType.Request, method, payload);\n };\n this.promiseExecutors = new Map();\n this.listenResponseEvents();\n this.listenTransferActivityEvents();\n this.listenStatusEvents();\n this.listenClientStatusEvents();\n this.listenPongEvents();\n if (keepAliveTimeout) {\n clearTimeout(keepAliveTimeout);\n }\n this.keepAlive();\n }\n /**\n * Monitors transfer activity.\n * @returns A Promise that resolves with the response from the extension.\n */\n SafariClient.prototype.monitorTransferActivity = function () {\n var _this = this;\n var dispatchMonitorEvent = function () {\n var promise = _this.dispatchPromiseEvent(SafariExtensionEventType.Monitor, 'subscribe_transfer_activity', [index_1.asperaSdk.globals.appId]);\n return promise.then(function () {\n _this.subscribedTransferActivity = true;\n });\n };\n if (this.safariExtensionEnabled) {\n return dispatchMonitorEvent();\n }\n return new Promise(function (resolve, reject) {\n var extensionInterval = setInterval(function () {\n if (!_this.safariExtensionEnabled) {\n return;\n }\n dispatchMonitorEvent()\n .then(resolve)\n .catch(reject);\n clearInterval(extensionInterval);\n }, 1000);\n });\n };\n /**\n * Builds a JSON-RPC request object with a unique identifier.\n * @param method The method name to invoke on the extension.\n * @param payload Optional parameters for the method.\n * @returns The constructed JSON-RPC request object.\n */\n SafariClient.prototype.buildRPCRequest = function (method, payload) {\n return {\n jsonrpc: '2.0',\n method: method,\n params: payload,\n id: (0, helpers_1.randomUUID)()\n };\n };\n /**\n * Dispatches a custom event to the document to communicate with the Safari extension.\n * @param type The type of Safari extension event to dispatch.\n * @param request Optional JSON-RPC request payload to send with the event.\n */\n SafariClient.prototype.dispatchEvent = function (type, request) {\n var payload = {\n detail: request !== null && request !== void 0 ? request : {}\n };\n document.dispatchEvent(new CustomEvent(\"AsperaDesktop.\".concat(type), payload));\n };\n /**\n * Dispatches a custom event to the document to communicate with the Safari extension.\n * @param type The type of Safari extension event to dispatch.\n * @param method The method name to invoke on the extension.\n * @param payload Optional parameters for the method.\n */\n SafariClient.prototype.dispatchPromiseEvent = function (type, method, payload) {\n var _this = this;\n var request = this.buildRPCRequest(method, payload);\n return new Promise(function (resolve, reject) {\n if (_this.safariExtensionEnabled) {\n _this.promiseExecutors.set(request.id, { resolve: resolve, reject: reject });\n _this.dispatchEvent(type, request);\n }\n else {\n console.warn('The Safari extension is disabled or unresponsive (dispatch event)');\n console.warn(\"Failed event: \".concat((0, helpers_1.safeJsonString)(request)));\n reject('The Safari extension is disabled or unresponsive (dispatch event)');\n }\n });\n };\n /**\n * Handles incoming JSON-RPC responses from the Safari extension.\n * Resolves or rejects promises based on the response.\n * @param response The JSON-RPC response object received from the extension.\n */\n SafariClient.prototype.handleResponse = function (response) {\n var requestId = response.id;\n var executor = this.promiseExecutors.get(requestId);\n if (!executor) {\n console.warn(\"Unable to find a promise executor for \".concat(requestId));\n console.warn(\"Response: \".concat(response));\n return;\n }\n this.promiseExecutors.delete(requestId);\n if (response.error) {\n executor.reject(response.error);\n return;\n }\n executor.resolve(response.result);\n };\n /**\n * Listens for 'AsperaDesktop.Response' events.\n */\n SafariClient.prototype.listenResponseEvents = function () {\n var _this = this;\n document.addEventListener('AsperaDesktop.Response', function (event) {\n if (!event.detail) {\n return;\n }\n _this.handleResponse(event.detail);\n });\n };\n /**\n * Listens for 'AsperaDesktop.TransferActivity' events.\n */\n SafariClient.prototype.listenTransferActivityEvents = function () {\n document.addEventListener('AsperaDesktop.TransferActivity', function (event) {\n if (!event.detail) {\n return;\n }\n index_1.asperaSdk.activityTracking.handleTransferActivity(event.detail);\n });\n };\n /**\n * Listens for 'AsperaDesktop.Status' events.\n */\n SafariClient.prototype.listenStatusEvents = function () {\n document.addEventListener('AsperaDesktop.Status', function (event) {\n if (!event.detail) {\n return;\n }\n index_1.asperaSdk.activityTracking.handleWebSocketEvents(event.detail);\n });\n };\n /**\n * Listens for 'isAppAlive' events. This was introduced in version 1.0.9.\n */\n SafariClient.prototype.listenClientStatusEvents = function () {\n document.addEventListener('isAppAlive', function (event) {\n var _a;\n if (!((_a = event.detail) === null || _a === void 0 ? void 0 : _a.running)) {\n return;\n }\n index_1.asperaSdk.activityTracking.handleClientEvents(event.detail.running);\n });\n };\n /**\n * Listens for 'AsperaDesktop.Pong' events.\n */\n SafariClient.prototype.listenPongEvents = function () {\n var _this = this;\n document.addEventListener('AsperaDesktop.Pong', function () {\n _this.lastPong = Date.now();\n _this.safariExtensionStatusChanged(true);\n });\n };\n /**\n * Sends a keep alive ping according to the defined interval.\n */\n SafariClient.prototype.keepAlive = function () {\n var _this = this;\n this.lastPing = Date.now();\n this.dispatchEvent(SafariExtensionEventType.Ping);\n keepAliveTimeout = setTimeout(function () {\n _this.keepAlive();\n }, this.keepAliveInterval);\n };\n /**\n * Listens for Safari extension status changes.\n * If the extension was disabled and enabled again after initializing the SDK, it\n * will call 'monitorTransferActivity' to resume transfer activities.\n */\n SafariClient.prototype.safariExtensionStatusChanged = function (isEnabled) {\n var _this = this;\n if (isEnabled === this.safariExtensionEnabled) {\n return;\n }\n this.safariExtensionEnabled = isEnabled;\n if (isEnabled) {\n if (this.subscribedTransferActivity) {\n var resumeTransferActivity_1 = function () {\n _this.monitorTransferActivity()\n .catch(function () {\n console.error('Failed to resume transfer activity, will try again in 1s');\n setTimeout(function () {\n resumeTransferActivity_1();\n }, 1000);\n });\n };\n resumeTransferActivity_1();\n }\n }\n else {\n index_1.asperaSdk.activityTracking.handleWebSocketEvents('CLOSED');\n this.promiseExecutors.forEach(function (promiseExecutor) {\n promiseExecutor.reject('The Safari extension is disabled or unresponsive (extension status)');\n });\n this.promiseExecutors.clear();\n }\n index_1.asperaSdk.activityTracking.handleSafariExtensionEvents(this.safariExtensionEnabled ? 'ENABLED' : 'DISABLED');\n };\n /**\n * Checks if the last pong received was longer than the max interval.\n */\n SafariClient.prototype.checkSafariExtensionStatus = function () {\n var pingPongDiff = this.lastPong - this.lastPing;\n if (this.lastPong == null || pingPongDiff < 0 || pingPongDiff > 500) {\n this.safariExtensionStatusChanged(false);\n }\n };\n return SafariClient;\n}());\nexports.SafariClient = SafariClient;\nexports.safariClient = new SafariClient();\nexports.default = {\n safariClient: exports.safariClient\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.dropContainerName = exports.keySplit = exports.hiddenStyleList = void 0;\n/** @ignore */\nexports.hiddenStyleList = \"\\n display: none !important;\\n width: 1px !important;\\n height: 1px !important;\\n position: fixed !important;\\n z-index: -99 !important;\\n bottom: 0px !important;\\n right: 0px !important;\\n\";\n/** @ignore */\nexports.keySplit = '-*ASPGTW*-';\n/** @ignore */\nexports.dropContainerName = 'http-dropzone-container';\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || (function () {\n var ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n };\n return function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getInstallerUrls = exports.getInfo = exports.setBranding = exports.deregisterStatusCallback = exports.registerStatusCallback = exports.getInstallerInfo = exports.initDragDrop = exports.removeDropzone = exports.createDropzone = exports.modifyTransfer = exports.showPreferences = exports.showSelectFolderDialog = exports.showSelectFileDialog = exports.deregisterRemovedCallback = exports.registerRemovedCallback = exports.getTransfer = exports.getAllTransfers = exports.resumeTransfer = exports.stopTransfer = exports.showDirectory = exports.removeTransfer = exports.deregisterActivityCallback = exports.registerActivityCallback = exports.launch = exports.startTransfer = exports.testConnection = exports.init = exports.isSafari = exports.asperaSdk = void 0;\nvar aspera_sdk_model_1 = require(\"./models/aspera-sdk.model\");\nvar core_1 = require(\"./app/core\");\nObject.defineProperty(exports, \"createDropzone\", { enumerable: true, get: function () { return core_1.createDropzone; } });\nObject.defineProperty(exports, \"deregisterActivityCallback\", { enumerable: true, get: function () { return core_1.deregisterActivityCallback; } });\nObject.defineProperty(exports, \"deregisterRemovedCallback\", { enumerable: true, get: function () { return core_1.deregisterRemovedCallback; } });\nObject.defineProperty(exports, \"deregisterStatusCallback\", { enumerable: true, get: function () { return core_1.deregisterStatusCallback; } });\nObject.defineProperty(exports, \"getAllTransfers\", { enumerable: true, get: function () { return core_1.getAllTransfers; } });\nObject.defineProperty(exports, \"getInfo\", { enumerable: true, get: function () { return core_1.getInfo; } });\nObject.defineProperty(exports, \"getTransfer\", { enumerable: true, get: function () { return core_1.getTransfer; } });\nObject.defineProperty(exports, \"init\", { enumerable: true, get: function () { return core_1.init; } });\nObject.defineProperty(exports, \"initDragDrop\", { enumerable: true, get: function () { return core_1.initDragDrop; } });\nObject.defineProperty(exports, \"modifyTransfer\", { enumerable: true, get: function () { return core_1.modifyTransfer; } });\nObject.defineProperty(exports, \"registerActivityCallback\", { enumerable: true, get: function () { return core_1.registerActivityCallback; } });\nObject.defineProperty(exports, \"registerRemovedCallback\", { enumerable: true, get: function () { return core_1.registerRemovedCallback; } });\nObject.defineProperty(exports, \"registerStatusCallback\", { enumerable: true, get: function () { return core_1.registerStatusCallback; } });\nObject.defineProperty(exports, \"removeDropzone\", { enumerable: true, get: function () { return core_1.removeDropzone; } });\nObject.defineProperty(exports, \"removeTransfer\", { enumerable: true, get: function () { return core_1.removeTransfer; } });\nObject.defineProperty(exports, \"resumeTransfer\", { enumerable: true, get: function () { return core_1.resumeTransfer; } });\nObject.defineProperty(exports, \"setBranding\", { enumerable: true, get: function () { return core_1.setBranding; } });\nObject.defineProperty(exports, \"showDirectory\", { enumerable: true, get: function () { return core_1.showDirectory; } });\nObject.defineProperty(exports, \"showPreferences\", { enumerable: true, get: function () { return core_1.showPreferences; } });\nObject.defineProperty(exports, \"showSelectFileDialog\", { enumerable: true, get: function () { return core_1.showSelectFileDialog; } });\nObject.defineProperty(exports, \"showSelectFolderDialog\", { enumerable: true, get: function () { return core_1.showSelectFolderDialog; } });\nObject.defineProperty(exports, \"startTransfer\", { enumerable: true, get: function () { return core_1.startTransfer; } });\nObject.defineProperty(exports, \"stopTransfer\", { enumerable: true, get: function () { return core_1.stopTransfer; } });\nObject.defineProperty(exports, \"testConnection\", { enumerable: true, get: function () { return core_1.testConnection; } });\nvar installer_1 = require(\"./app/installer\");\nObject.defineProperty(exports, \"getInstallerInfo\", { enumerable: true, get: function () { return installer_1.getInstallerInfo; } });\nvar helpers_1 = require(\"./helpers/helpers\");\nObject.defineProperty(exports, \"getInstallerUrls\", { enumerable: true, get: function () { return helpers_1.getInstallerUrls; } });\nObject.defineProperty(exports, \"isSafari\", { enumerable: true, get: function () { return helpers_1.isSafari; } });\nvar httpGatewayCalls = __importStar(require(\"./http-gateway\"));\nexports.asperaSdk = new aspera_sdk_model_1.AsperaSdk();\nexports.asperaSdk.init = core_1.init;\nexports.asperaSdk.testConnection = core_1.testConnection;\nexports.asperaSdk.startTransfer = core_1.startTransfer;\nexports.asperaSdk.registerActivityCallback = core_1.registerActivityCallback;\nexports.asperaSdk.deregisterActivityCallback = core_1.deregisterActivityCallback;\nexports.asperaSdk.removeTransfer = core_1.removeTransfer;\nexports.asperaSdk.showDirectory = core_1.showDirectory;\nexports.asperaSdk.stopTransfer = core_1.stopTransfer;\nexports.asperaSdk.resumeTransfer = core_1.resumeTransfer;\nexports.asperaSdk.getAllTransfers = core_1.getAllTransfers;\nexports.asperaSdk.getTransfer = core_1.getTransfer;\nexports.asperaSdk.registerRemovedCallback = core_1.registerRemovedCallback;\nexports.asperaSdk.deregisterRemovedCallback = core_1.deregisterRemovedCallback;\nexports.asperaSdk.showSelectFileDialog = core_1.showSelectFileDialog;\nexports.asperaSdk.showSelectFolderDialog = core_1.showSelectFolderDialog;\nexports.asperaSdk.showPreferences = core_1.showPreferences;\nexports.asperaSdk.modifyTransfer = core_1.modifyTransfer;\nexports.asperaSdk.createDropzone = core_1.createDropzone;\nexports.asperaSdk.removeDropzone = core_1.removeDropzone;\nexports.asperaSdk.getInstallerInfo = installer_1.getInstallerInfo;\nexports.asperaSdk.registerStatusCallback = core_1.registerStatusCallback;\nexports.asperaSdk.deregisterStatusCallback = core_1.deregisterStatusCallback;\nexports.asperaSdk.initDragDrop = core_1.initDragDrop;\nexports.asperaSdk.setBranding = core_1.setBranding;\nexports.asperaSdk.getInfo = core_1.getInfo;\nexports.asperaSdk.isSafari = helpers_1.isSafari;\nexports.asperaSdk.getInstallerUrls = helpers_1.getInstallerUrls;\nexports.asperaSdk.httpGatewayCalls = httpGatewayCalls;\nvar launch = exports.asperaSdk.globals.launch;\nexports.launch = launch;\nexports.asperaSdk.launch = launch;\nif (typeof window === 'object') {\n window.asperaSdk = exports.asperaSdk;\n}\nexports.default = exports.asperaSdk;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.startStream = exports.injectStreamToDom = exports.removeDropzone = exports.createDropzone = exports.getFoldersForUploadPromise = exports.getFoldersForUpload = exports.getFilesForUploadPromise = exports.getFilesForUpload = exports.upload = exports.download = exports.removeTransfer = exports.cancelTransfer = exports.clearNonActiveTransfers = exports.getAllTransfers = exports.getTransferById = exports.deregisterActivityCallback = exports.registerActivityCallback = exports.testHttpGatewayConnection = exports.initHttpGateway = exports.asperaHttpGateway = void 0;\nrequire('es6-promise').polyfill();\nvar http_gateway_global_model_1 = require(\"./models/http-gateway-global.model\");\nvar core_1 = require(\"./app/core\");\nvar download_1 = require(\"./app/download\");\nvar upload_1 = require(\"./app/upload\");\nvar streaming_1 = require(\"./app/streaming\");\nexports.asperaHttpGateway = new http_gateway_global_model_1.HttpGateway();\nexports.asperaHttpGateway.initHttpGateway = core_1.initHttpGateway;\nexports.asperaHttpGateway.testHttpGatewayConnection = core_1.testHttpGatewayConnection;\nexports.asperaHttpGateway.download = download_1.download;\nexports.asperaHttpGateway.upload = upload_1.upload;\nexports.asperaHttpGateway.getFilesForUpload = upload_1.getFilesForUpload;\nexports.asperaHttpGateway.getFilesForUploadPromise = upload_1.getFilesForUploadPromise;\nexports.asperaHttpGateway.getFoldersForUpload = upload_1.getFoldersForUpload;\nexports.asperaHttpGateway.getFoldersForUploadPromise = upload_1.getFoldersForUploadPromise;\nexports.asperaHttpGateway.createDropzone = upload_1.createDropzone;\nexports.asperaHttpGateway.removeDropzone = upload_1.removeDropzone;\nexports.asperaHttpGateway.registerActivityCallback = core_1.registerActivityCallback;\nexports.asperaHttpGateway.deregisterActivityCallback = core_1.deregisterActivityCallback;\nexports.asperaHttpGateway.getTransferById = core_1.getTransferById;\nexports.asperaHttpGateway.getAllTransfers = core_1.getAllTransfers;\nexports.asperaHttpGateway.clearNonActiveTransfers = core_1.clearNonActiveTransfers;\nexports.asperaHttpGateway.removeTransfer = core_1.removeTransfer;\nexports.asperaHttpGateway.cancelTransfer = core_1.cancelTransfer;\nexports.asperaHttpGateway.startStream = streaming_1.startStream;\nexports.asperaHttpGateway.injectStreamToDom = streaming_1.injectStreamToDom;\nif (typeof window === 'object') {\n window.onbeforeunload = exports.asperaHttpGateway.checkForPageLeave;\n window.addEventListener('beforeunload', exports.asperaHttpGateway.checkForPageLeave);\n window.asperaHttpGateway = exports.asperaHttpGateway;\n}\nvar core_2 = require(\"./app/core\");\nObject.defineProperty(exports, \"initHttpGateway\", { enumerable: true, get: function () { return core_2.initHttpGateway; } });\nObject.defineProperty(exports, \"testHttpGatewayConnection\", { enumerable: true, get: function () { return core_2.testHttpGatewayConnection; } });\nObject.defineProperty(exports, \"registerActivityCallback\", { enumerable: true, get: function () { return core_2.registerActivityCallback; } });\nObject.defineProperty(exports, \"deregisterActivityCallback\", { enumerable: true, get: function () { return core_2.deregisterActivityCallback; } });\nObject.defineProperty(exports, \"getTransferById\", { enumerable: true, get: function () { return core_2.getTransferById; } });\nObject.defineProperty(exports, \"getAllTransfers\", { enumerable: true, get: function () { return core_2.getAllTransfers; } });\nObject.defineProperty(exports, \"clearNonActiveTransfers\", { enumerable: true, get: function () { return core_2.clearNonActiveTransfers; } });\nObject.defineProperty(exports, \"cancelTransfer\", { enumerable: true, get: function () { return core_2.cancelTransfer; } });\nObject.defineProperty(exports, \"removeTransfer\", { enumerable: true, get: function () { return core_2.removeTransfer; } });\nvar download_2 = require(\"./app/download\");\nObject.defineProperty(exports, \"download\", { enumerable: true, get: function () { return download_2.download; } });\nvar upload_2 = require(\"./app/upload\");\nObject.defineProperty(exports, \"upload\", { enumerable: true, get: function () { return upload_2.upload; } });\nObject.defineProperty(exports, \"getFilesForUpload\", { enumerable: true, get: function () { return upload_2.getFilesForUpload; } });\nObject.defineProperty(exports, \"getFilesForUploadPromise\", { enumerable: true, get: function () { return upload_2.getFilesForUploadPromise; } });\nObject.defineProperty(exports, \"getFoldersForUpload\", { enumerable: true, get: function () { return upload_2.getFoldersForUpload; } });\nObject.defineProperty(exports, \"getFoldersForUploadPromise\", { enumerable: true, get: function () { return upload_2.getFoldersForUploadPromise; } });\nObject.defineProperty(exports, \"createDropzone\", { enumerable: true, get: function () { return upload_2.createDropzone; } });\nObject.defineProperty(exports, \"removeDropzone\", { enumerable: true, get: function () { return upload_2.removeDropzone; } });\nvar streaming_2 = require(\"./app/streaming\");\nObject.defineProperty(exports, \"injectStreamToDom\", { enumerable: true, get: function () { return streaming_2.injectStreamToDom; } });\nObject.defineProperty(exports, \"startStream\", { enumerable: true, get: function () { return streaming_2.startStream; } });\nexports.default = {\n asperaHttpGateway: exports.asperaHttpGateway,\n initHttpGateway: core_1.initHttpGateway,\n testHttpGatewayConnection: core_1.testHttpGatewayConnection,\n download: download_1.download,\n upload: upload_1.upload,\n getFilesForUpload: upload_1.getFilesForUpload,\n getFilesForUploadPromise: upload_1.getFilesForUploadPromise,\n getFoldersForUpload: upload_1.getFoldersForUpload,\n getFoldersForUploadPromise: upload_1.getFoldersForUploadPromise,\n createDropzone: upload_1.createDropzone,\n removeDropzone: upload_1.removeDropzone,\n registerActivityCallback: core_1.registerActivityCallback,\n deregisterActivityCallback: core_1.deregisterActivityCallback,\n getTransferById: core_1.getTransferById,\n getAllTransfers: core_1.getAllTransfers,\n clearNonActiveTransfers: core_1.clearNonActiveTransfers,\n removeTransfer: core_1.removeTransfer,\n cancelTransfer: core_1.cancelTransfer,\n startStream: streaming_1.startStream,\n injectStreamToDom: streaming_1.injectStreamToDom\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getWebsocketUrl = exports.getFeatureFlag = exports.iterableToArray = exports.getFilesForTransfer = exports.folderTransferSpecExplode = exports.parseFilesFromSpec = exports.isValidForm = exports.checkChildrenForFiles = exports.isValidTransferSpec = exports.isValidUrl = exports.generateErrorBody = exports.errorLog = exports.generatePromiseObjects = void 0;\nvar index_1 = require(\"../index\");\nvar constants_1 = require(\"../constants/constants\");\nvar messages_1 = require(\"../constants/messages\");\n/**\n * Generates promise object that can be resolved or rejected via functions\n *\n * @returns an object containing the promise, the resolver and rejecter\n */\nvar generatePromiseObjects = function () {\n var resolver;\n var rejecter;\n var promise = new Promise(function (resolve, reject) {\n resolver = resolve;\n rejecter = reject;\n });\n return {\n promise: promise,\n resolver: resolver,\n rejecter: rejecter\n };\n};\nexports.generatePromiseObjects = generatePromiseObjects;\n/**\n * Log errors from HTTP Gateway SDK\n *\n * @param message the message indicating the error encountered\n * @param debugData the data with useful debugging information\n */\nvar errorLog = function (message, debugData) {\n if (typeof window === 'object') {\n if (!Array.isArray(window.httpGatewayLogs)) {\n window.httpGatewayLogs = [];\n }\n window.httpGatewayLogs.push({ message: message, debugData: debugData });\n }\n console.warn(\"Aspera HTTP Gateway SDK: \".concat(message), debugData);\n};\nexports.errorLog = errorLog;\n/**\n * Generate error object for rejecter responses\n *\n * @param message the message indicating the error encountered\n * @param debugData the data with useful debugging information\n *\n * @returns object containing standardized error response\n */\nvar generateErrorBody = function (message, debugData) {\n var errorResponse = {\n error: true,\n message: message\n };\n if (debugData) {\n errorResponse.debugData = debugData;\n }\n return errorResponse;\n};\nexports.generateErrorBody = generateErrorBody;\n/**\n * Validate if URL is valid URL\n *\n * @param serverUrl the url to test\n *\n * @returns boolean indicating whether supplied url is valid\n */\nvar isValidUrl = function (url) {\n if (url &&\n typeof url === 'string' &&\n url.indexOf('//') > -1) {\n return true;\n }\n return false;\n};\nexports.isValidUrl = isValidUrl;\n/**\n * Validate if transferSpec is valid for server communication\n *\n * @param transferSpec the transferSpec to test\n *\n * @returns boolean indicating whether supplied transferSpec is valid\n */\nvar isValidTransferSpec = function (transferSpec) {\n if (transferSpec &&\n typeof transferSpec === 'object' &&\n typeof transferSpec.direction === 'string' &&\n typeof transferSpec.remote_host === 'string' &&\n Array.isArray(transferSpec.paths)) {\n return true;\n }\n return false;\n};\nexports.isValidTransferSpec = isValidTransferSpec;\n/**\n * Get files from a form\n *\n * @param children form children list\n *\n * @returns an array of Files pulled from an HTML form\n */\nvar checkChildrenForFiles = function (children) {\n var filesFromForm = [];\n children.forEach(function (child) {\n if (child.files) {\n for (var i = 0; i < child.files.length; i++) {\n filesFromForm.push(child.files[i]);\n }\n }\n });\n return filesFromForm;\n};\nexports.checkChildrenForFiles = checkChildrenForFiles;\n/**\n * Validate if form has required items\n *\n * @param form HTML form element\n */\nvar isValidForm = function (form) {\n if (form &&\n typeof form === 'object' &&\n form.nodeType &&\n form.tagName === 'FORM') {\n return true;\n }\n return false;\n};\nexports.isValidForm = isValidForm;\n/**\n * Take a list of files and match them to a provided transferSpec to find only files to use\n *\n * @param files list of files in JavaScript memory\n * @param transferSpec the transferSpec to compare to for what files to use\n */\nvar parseFilesFromSpec = function (files, transferSpec) {\n var transferSpecFilesMap = new Map();\n var filesAddedList = new Map();\n transferSpec.paths.forEach(function (path) {\n transferSpecFilesMap.set(path.source, path);\n });\n return files.filter(function (file) {\n if (filesAddedList.get(file.name)) {\n return false;\n }\n var specPath = transferSpecFilesMap.get(file.name);\n if (specPath) {\n specPath.file_size = file.size;\n filesAddedList.set(file.name, true);\n }\n return !!specPath;\n });\n};\nexports.parseFilesFromSpec = parseFilesFromSpec;\n/**\n * Take a transferSpec and find folders being used in the form and explode for uploading and explode transferSpec to know all files in folder\n *\n * @param formId the form item to use for parsing\n * @param transferSpec he transfer spec to test with for file list\n *\n * @returns object with files to add to upload and a new transferSpec Path array to use with exploded files\n */\nvar folderTransferSpecExplode = function (formId, transferSpec) {\n var _a;\n var folderList = index_1.asperaHttpGateway.globals.getOrCreateFolderDataList(formId);\n var folderDropList = index_1.asperaHttpGateway.globals.getOrCreateFolderDataList(constants_1.dropContainerName);\n var newPaths = [];\n var foundFiles = [];\n var handleFolderData = function (file, path) {\n foundFiles.push(file);\n newPaths.push({\n source: file.asperaDropPath || file.webkitRelativePath || file.name,\n destination: path.destination,\n });\n };\n (_a = transferSpec.paths) === null || _a === void 0 ? void 0 : _a.forEach(function (path) {\n if (folderList.get(path.source)) {\n folderList.get(path.source).files.forEach(function (file) {\n handleFolderData(file, path);\n });\n }\n else if (folderDropList.get(path.source)) {\n folderDropList.get(path.source).files.forEach(function (file) {\n handleFolderData(file, path);\n });\n }\n else {\n newPaths.push(path);\n }\n });\n return {\n files: foundFiles,\n newPath: newPaths,\n };\n};\nexports.folderTransferSpecExplode = folderTransferSpecExplode;\n/**\n * Return array of File items to use for transfer\n *\n * @param formId the form item to use for parsing\n * @param transferSpec the transfer spec to test with for file list\n *\n * @returns the array of Files to use\n */\nvar getFilesForTransfer = function (formId, transferSpec) {\n var form = index_1.asperaHttpGateway.globals.createOrUseForm(formId);\n if (!(0, exports.isValidForm)(form)) {\n return [];\n }\n var filesFromForm = (0, exports.checkChildrenForFiles)(form.childNodes);\n var dropFiles = index_1.asperaHttpGateway.globals.getOrCreateFormFileListFromDrop(constants_1.dropContainerName);\n dropFiles.forEach(function (file) {\n filesFromForm.push(file);\n });\n return (0, exports.parseFilesFromSpec)(filesFromForm, transferSpec);\n};\nexports.getFilesForTransfer = getFilesForTransfer;\n/**\n * Convert an irritable into an array. This is useful for taking Maps and making Arrays (Map.values() Map.keys())\n *\n * @param iterable - an iterable to take and convert to an array\n *\n * @returns an array containing the iterable values\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nvar iterableToArray = function (iterable) {\n var newArray = [];\n (function addItem() {\n var value = iterable.next();\n if (!value.done) {\n newArray.push(value.value);\n addItem();\n }\n }());\n return newArray;\n};\nexports.iterableToArray = iterableToArray;\n/**\n * Figure out which feature to use based on current version of system.\n *\n * @param featureFlag - name of the feature flag to test\n *\n * @returns indicator if feature should be used\n */\nvar getFeatureFlag = function (featureFlag) {\n var _a;\n if (!((_a = index_1.asperaHttpGateway.globals.serverInfo) === null || _a === void 0 ? void 0 : _a.version)) {\n (0, exports.errorLog)(messages_1.messages.serverNotVerified);\n return false;\n }\n var versionData = index_1.asperaHttpGateway.globals.serverInfo.version.split('.');\n var major = versionData[0] ? Number(versionData[0]) : 0;\n var minor = versionData[1] ? Number(versionData[1]) : 0;\n var patch = versionData[2] ? Number(versionData[2]) : 0;\n var numberBased = (major * 10000000000) + (minor * 100000) + patch;\n switch (featureFlag) {\n case 'noBase64Encoding':\n return numberBased >= 20000300000;\n }\n};\nexports.getFeatureFlag = getFeatureFlag;\n/**\n * Returns a string indicating the websocket URL to use for talking to the server\n *\n * @returns a string of the full Websocket URL\n */\nvar getWebsocketUrl = function (serverUrl, protocol) {\n var wsProtocol;\n if (serverUrl.indexOf('http:') === 0) {\n wsProtocol = 'ws';\n }\n else if (serverUrl.indexOf('https:') === 0) {\n wsProtocol = 'wss';\n }\n else {\n wsProtocol = protocol === 'https:' ? 'wss' : 'ws';\n }\n var url = serverUrl.replace('http://', '//').replace('https://', '//');\n return \"\".concat(wsProtocol, \":\").concat(url, \"/\").concat((0, exports.getFeatureFlag)('noBase64Encoding') ? 'v2' : 'v1', \"/upload\");\n};\nexports.getWebsocketUrl = getWebsocketUrl;\nexports.default = {\n generatePromiseObjects: exports.generatePromiseObjects,\n errorLog: exports.errorLog,\n generateErrorBody: exports.generateErrorBody,\n isValidUrl: exports.isValidUrl,\n isValidTransferSpec: exports.isValidTransferSpec,\n checkChildrenForFiles: exports.checkChildrenForFiles,\n isValidForm: exports.isValidForm,\n getFilesForTransfer: exports.getFilesForTransfer,\n folderTransferSpecExplode: exports.folderTransferSpecExplode,\n parseFilesFromSpec: exports.parseFilesFromSpec,\n iterableToArray: exports.iterableToArray,\n getFeatureFlag: exports.getFeatureFlag,\n};\n","\"use strict\";\nvar __extends = (this && this.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createJSONRPCNotification = exports.createJSONRPCRequest = exports.createJSONRPCSuccessResponse = exports.createJSONRPCErrorResponse = exports.JSONRPCErrorCode = exports.JSONRPCErrorException = exports.isJSONRPCResponses = exports.isJSONRPCResponse = exports.isJSONRPCRequests = exports.isJSONRPCRequest = exports.isJSONRPCID = exports.JSONRPC = void 0;\nexports.JSONRPC = \"2.0\";\nvar isJSONRPCID = function (id) {\n return typeof id === \"string\" || typeof id === \"number\" || id === null;\n};\nexports.isJSONRPCID = isJSONRPCID;\nvar isJSONRPCRequest = function (payload) {\n return (payload.jsonrpc === exports.JSONRPC &&\n payload.method !== undefined &&\n payload.result === undefined &&\n payload.error === undefined);\n};\nexports.isJSONRPCRequest = isJSONRPCRequest;\nvar isJSONRPCRequests = function (payload) {\n return Array.isArray(payload) && payload.every(exports.isJSONRPCRequest);\n};\nexports.isJSONRPCRequests = isJSONRPCRequests;\nvar isJSONRPCResponse = function (payload) {\n return (payload.jsonrpc === exports.JSONRPC &&\n payload.id !== undefined &&\n (payload.result !== undefined || payload.error !== undefined));\n};\nexports.isJSONRPCResponse = isJSONRPCResponse;\nvar isJSONRPCResponses = function (payload) {\n return Array.isArray(payload) && payload.every(exports.isJSONRPCResponse);\n};\nexports.isJSONRPCResponses = isJSONRPCResponses;\nvar createJSONRPCError = function (code, message, data) {\n var error = { code: code, message: message };\n if (data != null) {\n error.data = data;\n }\n return error;\n};\nvar JSONRPCErrorException = /** @class */ (function (_super) {\n __extends(JSONRPCErrorException, _super);\n function JSONRPCErrorException(message, code, data) {\n var _this = _super.call(this, message) || this;\n // Manually set the prototype to fix TypeScript issue:\n // https://github.com/Microsoft/TypeScript-wiki/blob/main/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work\n Object.setPrototypeOf(_this, JSONRPCErrorException.prototype);\n _this.code = code;\n _this.data = data;\n return _this;\n }\n JSONRPCErrorException.prototype.toObject = function () {\n return createJSONRPCError(this.code, this.message, this.data);\n };\n return JSONRPCErrorException;\n}(Error));\nexports.JSONRPCErrorException = JSONRPCErrorException;\nvar JSONRPCErrorCode;\n(function (JSONRPCErrorCode) {\n JSONRPCErrorCode[JSONRPCErrorCode[\"ParseError\"] = -32700] = \"ParseError\";\n JSONRPCErrorCode[JSONRPCErrorCode[\"InvalidRequest\"] = -32600] = \"InvalidRequest\";\n JSONRPCErrorCode[JSONRPCErrorCode[\"MethodNotFound\"] = -32601] = \"MethodNotFound\";\n JSONRPCErrorCode[JSONRPCErrorCode[\"InvalidParams\"] = -32602] = \"InvalidParams\";\n JSONRPCErrorCode[JSONRPCErrorCode[\"InternalError\"] = -32603] = \"InternalError\";\n})(JSONRPCErrorCode = exports.JSONRPCErrorCode || (exports.JSONRPCErrorCode = {}));\nvar createJSONRPCErrorResponse = function (id, code, message, data) {\n return {\n jsonrpc: exports.JSONRPC,\n id: id,\n error: createJSONRPCError(code, message, data),\n };\n};\nexports.createJSONRPCErrorResponse = createJSONRPCErrorResponse;\nvar createJSONRPCSuccessResponse = function (id, result) {\n return {\n jsonrpc: exports.JSONRPC,\n id: id,\n result: result !== null && result !== void 0 ? result : null,\n };\n};\nexports.createJSONRPCSuccessResponse = createJSONRPCSuccessResponse;\nvar createJSONRPCRequest = function (id, method, params) {\n return {\n jsonrpc: exports.JSONRPC,\n id: id,\n method: method,\n params: params,\n };\n};\nexports.createJSONRPCRequest = createJSONRPCRequest;\nvar createJSONRPCNotification = function (method, params) {\n return {\n jsonrpc: exports.JSONRPC,\n method: method,\n params: params,\n };\n};\nexports.createJSONRPCNotification = createJSONRPCNotification;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.apiGet = exports.handlePromiseErrors = void 0;\nvar helpers_1 = require(\"./helpers\");\n/**\n * Check HTTP promise response for server error response (non 2XX status) and reject promise is error\n *\n * @param promise the HTTP promise to check for HTTP status code of 2XX for success\n *\n * @returns promise for the HTTP connection with catch supporting error\n */\nvar handlePromiseErrors = function (promise) {\n var promiseInfo = (0, helpers_1.generatePromiseObjects)();\n promise.then(function (response) {\n if (response.ok) {\n promiseInfo.resolver(response);\n }\n else {\n promiseInfo.rejecter(response);\n }\n return response;\n }).catch(function (error) {\n promiseInfo.rejecter(error);\n });\n return promiseInfo.promise;\n};\nexports.handlePromiseErrors = handlePromiseErrors;\n/**\n * Make a GET for retrieving data from a server\n *\n * @param url the url string of the resource on the server\n *\n * @returns a promise that will resolve with the response from the server or reject if network/server error\n */\nvar apiGet = function (url) {\n return (0, exports.handlePromiseErrors)(fetch(url, {\n headers: {\n 'Content-Type': 'application/json',\n },\n }));\n};\nexports.apiGet = apiGet;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getInfo = exports.removeDropzone = exports.createDropzone = exports.setBranding = exports.modifyTransfer = exports.showDirectory = exports.getTransfer = exports.getAllTransfers = exports.showPreferences = exports.showSelectFolderDialog = exports.showSelectFileDialog = exports.resumeTransfer = exports.stopTransfer = exports.removeTransfer = exports.deregisterStatusCallback = exports.registerStatusCallback = exports.deregisterRemovedCallback = exports.registerRemovedCallback = exports.deregisterActivityCallback = exports.registerActivityCallback = exports.startTransfer = exports.init = exports.initDragDrop = exports.testConnection = void 0;\nvar messages_1 = require(\"../constants/messages\");\nvar client_1 = require(\"../helpers/client/client\");\nvar helpers_1 = require(\"../helpers/helpers\");\nvar http_gateway_1 = require(\"../http-gateway\");\nvar core_1 = require(\"../http-gateway/core\");\nvar index_1 = require(\"../index\");\nvar http_gateway_sdk_js_1 = require(\"@ibm-aspera/http-gateway-sdk-js\");\n/**\n * Check if IBM Aspera for Desktop connection works. This function is called by init\n * when initializing the SDK. This function can be used at any point for checking.\n *\n * @returns a promise that resolves if server can connect or rejects if not\n */\nvar testConnection = function () {\n return client_1.client.request('get_info')\n .then(function (data) {\n index_1.asperaSdk.globals.asperaSdkInfo = data;\n index_1.asperaSdk.globals.asperaAppVerified = true;\n return index_1.asperaSdk.globals.sdkResponseData;\n });\n};\nexports.testConnection = testConnection;\n/**\n * Initialize drag and drop. HTTP Gateway does not need to init.\n * Ignore if only HTTP Gateway\n * @param initCall - Indicate if called via init flow and should not reject\n *\n * @returns a promise that resolves if the initialization was successful or not\n */\nvar initDragDrop = function (initCall) {\n if (index_1.asperaSdk.useHttpGateway) {\n return Promise.resolve(true);\n }\n else if (!index_1.asperaSdk.isReady) {\n return (0, helpers_1.throwError)(messages_1.messages.serverNotVerified);\n }\n var promiseInfo = (0, helpers_1.generatePromiseObjects)();\n client_1.client.request('init_drag_drop')\n .then(function (data) { return promiseInfo.resolver(data); })\n .catch(function (error) {\n (0, helpers_1.errorLog)(messages_1.messages.dragDropInitFailed, error);\n if (initCall) {\n promiseInfo.resolver(false);\n (0, helpers_1.errorLog)(messages_1.messages.dragDropInitFailedInit, error);\n }\n else {\n promiseInfo.rejecter((0, helpers_1.generateErrorBody)(messages_1.messages.dragDropInitFailed, error));\n }\n });\n return promiseInfo.promise;\n};\nexports.initDragDrop = initDragDrop;\n/**\n * Initialize IBM Aspera client. If client cannot (reject/catch), then\n * client should attempt fixing server URL or trying again. If still fails disable UI elements.\n *\n * @param options initialization options:\n *\n * - `appId` the unique ID for the website. Transfers initiated during this session\n * will be associated with this ID. It is recommended to use a unique ID to keep transfer\n * information private from other websites.\n *\n * - `supportMultipleUsers` when enabled (defaults to false), the SDK will iterate over a port\n * range and generate a session id to determine the running instance of the desktop app for the\n * current user. This is needed when multiple users may be logged into the same machine\n * simultaneously, for example on a Windows Server.\n *\n * @returns a promise that resolves if IBM Aspera Desktop is running properly or\n * rejects if unable to connect\n */\nvar init = function (options) {\n var _a, _b;\n var appId = (_a = options === null || options === void 0 ? void 0 : options.appId) !== null && _a !== void 0 ? _a : (0, helpers_1.randomUUID)();\n var supportMultipleUsers = (_b = options === null || options === void 0 ? void 0 : options.supportMultipleUsers) !== null && _b !== void 0 ? _b : false;\n index_1.asperaSdk.globals.appId = appId;\n // Watch for old HTTP Gateway transfers in case used.\n (0, http_gateway_sdk_js_1.registerActivityCallback)(function (oldHttpTransfers) {\n oldHttpTransfers.transfers.forEach(function (oldHttpTransfer) {\n (0, core_1.sendTransferUpdate)(oldHttpTransfer);\n });\n });\n if (supportMultipleUsers) {\n index_1.asperaSdk.globals.supportMultipleUsers = true;\n index_1.asperaSdk.globals.sessionId = (0, helpers_1.randomUUID)();\n }\n var handleErrors = function (error) {\n (0, helpers_1.errorLog)(messages_1.messages.serverError, error);\n index_1.asperaSdk.globals.asperaAppVerified = false;\n throw (0, helpers_1.generateErrorBody)(messages_1.messages.serverError, error);\n };\n var getDesktopStartCalls = function () {\n return index_1.asperaSdk.activityTracking.setup()\n .then(function () { return (0, exports.testConnection)(); })\n .then(function () { return (0, exports.initDragDrop)(true); })\n .then(function () { return index_1.asperaSdk.globals.sdkResponseData; })\n .catch(handleErrors);\n };\n if (options.httpGatewayUrl && !index_1.asperaSdk.globals.httpGatewayVerified) {\n var finalHttpGatewayUrl = options.httpGatewayUrl.trim();\n if (finalHttpGatewayUrl.indexOf('http') !== 0) {\n finalHttpGatewayUrl = \"https://\".concat(finalHttpGatewayUrl);\n }\n if (finalHttpGatewayUrl.endsWith('/')) {\n finalHttpGatewayUrl = finalHttpGatewayUrl.slice(0, -1);\n }\n index_1.asperaSdk.globals.httpGatewayUrl = finalHttpGatewayUrl;\n return fetch(\"\".concat(index_1.asperaSdk.globals.httpGatewayUrl, \"/info\"), { method: 'GET' }).then(function (response) {\n return response.json().then(function (responseData) {\n if (response.status >= 400) {\n throw Error(responseData);\n }\n return responseData;\n });\n }).then(function (response) {\n index_1.asperaSdk.globals.httpGatewayInfo = response;\n index_1.asperaSdk.globals.httpGatewayVerified = true;\n var iframeContainer = document.createElement('div');\n iframeContainer.id = 'aspera-http-gateway-iframes';\n iframeContainer.style = 'display: none;';\n document.body.appendChild(iframeContainer);\n index_1.asperaSdk.globals.httpGatewayIframeContainer = iframeContainer;\n if (options.forceHttpGateway) {\n return Promise.resolve(index_1.asperaSdk.globals.sdkResponseData);\n }\n else {\n return getDesktopStartCalls();\n }\n }).catch(function (error) {\n // If HTTP Gateway fails log and move on to desktop\n (0, helpers_1.errorLog)(messages_1.messages.httpInitFail, error);\n return getDesktopStartCalls();\n });\n }\n return getDesktopStartCalls();\n};\nexports.init = init;\n/**\n * Start a transfer\n *\n * @param transferSpec standard transferSpec for transfer\n * @param asperaSdkSpec IBM Aspera settings when starting a transfer.\n *\n * @returns a promise that resolves if transfer initiation is successful and rejects if transfer cannot be started\n */\nvar startTransfer = function (transferSpec, asperaSdkSpec) {\n if (!(0, helpers_1.isValidTransferSpec)(transferSpec)) {\n return (0, helpers_1.throwError)(messages_1.messages.notValidTransferSpec, { transferSpec: transferSpec });\n }\n if (index_1.asperaSdk.useHttpGateway) {\n return transferSpec.direction === 'receive' ? (0, http_gateway_1.httpDownload)(transferSpec, asperaSdkSpec) : (0, http_gateway_1.httpUpload)(transferSpec, asperaSdkSpec);\n }\n else if (!index_1.asperaSdk.isReady) {\n return (0, helpers_1.throwError)(messages_1.messages.serverNotVerified);\n }\n var promiseInfo = (0, helpers_1.generatePromiseObjects)();\n var payload = {\n transfer_spec: transferSpec,\n desktop_spec: asperaSdkSpec,\n app_id: index_1.asperaSdk.globals.appId,\n };\n client_1.client.request('start_transfer', payload)\n .then(function (data) { return promiseInfo.resolver(data); })\n .catch(function (error) {\n (0, helpers_1.errorLog)(messages_1.messages.transferFailed, error);\n promiseInfo.rejecter((0, helpers_1.generateErrorBody)(messages_1.messages.transferFailed, error));\n });\n return promiseInfo.promise;\n};\nexports.startTransfer = startTransfer;\n/**\n * Register a callback event for getting transfer updates\n *\n * @param callback callback function to receive transfers\n *\n * @returns ID representing the callback for deregistration purposes\n */\nvar registerActivityCallback = function (callback) {\n return index_1.asperaSdk.activityTracking.setCallback(callback);\n};\nexports.registerActivityCallback = registerActivityCallback;\n/**\n * Remove a callback from the transfer callback\n *\n * @param id the ID returned by `registerActivityCallback`\n */\nvar deregisterActivityCallback = function (id) {\n index_1.asperaSdk.activityTracking.removeCallback(id);\n};\nexports.deregisterActivityCallback = deregisterActivityCallback;\n/**\n * Register a callback event for when a user removes or cancels a transfer\n * directly from IBM Aspera. This may also be called if IBM Aspera\n * is configured to automatically remove completed transfers.\n *\n * @param callback callback function to receive transfers\n *\n * @returns ID representing the callback for deregistration purposes\n */\nvar registerRemovedCallback = function (callback) {\n return index_1.asperaSdk.activityTracking.setRemovedCallback(callback);\n};\nexports.registerRemovedCallback = registerRemovedCallback;\n/**\n * Remove a callback from the removed transfer callback\n *\n * @param id the ID returned by `registerRemovedCallback`\n */\nvar deregisterRemovedCallback = function (id) {\n index_1.asperaSdk.activityTracking.removeRemovedCallback(id);\n};\nexports.deregisterRemovedCallback = deregisterRemovedCallback;\n/**\n * Register a callback for getting updates about the connection status of IBM Aspera SDK.\n *\n * For example, to be notified of when the SDK loses connection with the application or connection\n * is re-established. This can be useful if you want to handle the case where the user quits IBM Aspera\n * after `init` has already been called, and want to prompt the user to relaunch the application.\n *\n * @param callback callback function to receive events\n *\n * @returns ID representing the callback for deregistration purposes\n */\nvar registerStatusCallback = function (callback) {\n return index_1.asperaSdk.activityTracking.setWebSocketEventCallback(callback);\n};\nexports.registerStatusCallback = registerStatusCallback;\n/**\n * Remove a callback from getting connection status events.\n *\n * @param id the ID returned by `registerStatusCallback`\n */\nvar deregisterStatusCallback = function (id) {\n index_1.asperaSdk.activityTracking.removeWebSocketEventCallback(id);\n};\nexports.deregisterStatusCallback = deregisterStatusCallback;\n/**\n * Remove a transfer. This will stop the transfer if it is in progress.\n *\n * @param id transfer uuid\n *\n * @returns a promise that resolves if transfer is removed and rejects if transfer cannot be removed\n */\nvar removeTransfer = function (id) {\n if (index_1.asperaSdk.useHttpGateway) {\n return (0, core_1.httpRemoveTransfer)(id);\n }\n if (!index_1.asperaSdk.isReady) {\n return (0, helpers_1.throwError)(messages_1.messages.serverNotVerified);\n }\n var promiseInfo = (0, helpers_1.generatePromiseObjects)();\n var payload = {\n transfer_id: id,\n };\n client_1.client.request('remove_transfer', payload)\n .then(function (data) { return promiseInfo.resolver(data); })\n .catch(function (error) {\n (0, helpers_1.errorLog)(messages_1.messages.removeTransferFailed, error);\n promiseInfo.rejecter((0, helpers_1.generateErrorBody)(messages_1.messages.removeTransferFailed, error));\n });\n return promiseInfo.promise;\n};\nexports.removeTransfer = removeTransfer;\n/**\n * Stop a transfer.\n *\n * @param id transfer uuid\n *\n * @returns a promise that resolves if transfer is stopped and rejects if transfer cannot be stopped\n */\nvar stopTransfer = function (id) {\n if (!index_1.asperaSdk.isReady) {\n return (0, helpers_1.throwError)(messages_1.messages.serverNotVerified);\n }\n var promiseInfo = (0, helpers_1.generatePromiseObjects)();\n var payload = {\n transfer_id: id,\n };\n client_1.client.request('stop_transfer', payload)\n .then(function (data) { return promiseInfo.resolver(data); })\n .catch(function (error) {\n (0, helpers_1.errorLog)(messages_1.messages.stopTransferFailed, error);\n promiseInfo.rejecter((0, helpers_1.generateErrorBody)(messages_1.messages.stopTransferFailed, error));\n });\n return promiseInfo.promise;\n};\nexports.stopTransfer = stopTransfer;\n/**\n * Resume a paused or failed transfer.\n *\n * @param id transfer uuid\n * @param options resume transfer options\n *\n * @returns a promise that resolves with the new transfer object if transfer is resumed\n */\nvar resumeTransfer = function (id, options) {\n if (!index_1.asperaSdk.isReady) {\n return (0, helpers_1.throwError)(messages_1.messages.serverNotVerified);\n }\n var promiseInfo = (0, helpers_1.generatePromiseObjects)();\n var payload = {\n transfer_id: id,\n transfer_spec: options,\n };\n client_1.client.request('resume_transfer', payload)\n .then(function (data) { return promiseInfo.resolver(data); })\n .catch(function (error) {\n (0, helpers_1.errorLog)(messages_1.messages.resumeTransferFailed, error);\n promiseInfo.rejecter((0, helpers_1.generateErrorBody)(messages_1.messages.resumeTransferFailed, error));\n });\n return promiseInfo.promise;\n};\nexports.resumeTransfer = resumeTransfer;\n/**\n * Displays a file browser dialog for the user to select files.\n *\n * @param options file dialog options\n *\n * @returns a promise that resolves with the selected file(s) and rejects if user cancels dialog\n */\nvar showSelectFileDialog = function (options) {\n if (index_1.asperaSdk.useHttpGateway) {\n return (0, core_1.httpGatewaySelectFileFolderDialog)(options, false);\n }\n else if (!index_1.asperaSdk.isReady) {\n return (0, helpers_1.throwError)(messages_1.messages.serverNotVerified);\n }\n var promiseInfo = (0, helpers_1.generatePromiseObjects)();\n var payload = {\n options: options || {},\n app_id: index_1.asperaSdk.globals.appId,\n };\n client_1.client.request('show_file_dialog', payload)\n .then(function (data) { return promiseInfo.resolver(data); })\n .catch(function (error) {\n (0, helpers_1.errorLog)(messages_1.messages.showSelectFileDialogFailed, error);\n promiseInfo.rejecter((0, helpers_1.generateErrorBody)(messages_1.messages.showSelectFileDialogFailed, error));\n });\n return promiseInfo.promise;\n};\nexports.showSelectFileDialog = showSelectFileDialog;\n/**\n * Displays a folder browser dialog for the user to select folders.\n *\n * @param options folder dialog options\n *\n * @returns a promise that resolves with the selected folder(s) and rejects if user cancels dialog\n */\nvar showSelectFolderDialog = function (options) {\n if (index_1.asperaSdk.useHttpGateway) {\n return (0, core_1.httpGatewaySelectFileFolderDialog)(options, true);\n }\n else if (!index_1.asperaSdk.isReady) {\n return (0, helpers_1.throwError)(messages_1.messages.serverNotVerified);\n }\n var promiseInfo = (0, helpers_1.generatePromiseObjects)();\n var payload = {\n options: options || {},\n app_id: index_1.asperaSdk.globals.appId,\n };\n client_1.client.request('show_folder_dialog', payload)\n .then(function (data) { return promiseInfo.resolver(data); })\n .catch(function (error) {\n (0, helpers_1.errorLog)(messages_1.messages.showSelectFolderDialogFailed, error);\n promiseInfo.rejecter((0, helpers_1.generateErrorBody)(messages_1.messages.showSelectFolderDialogFailed, error));\n });\n return promiseInfo.promise;\n};\nexports.showSelectFolderDialog = showSelectFolderDialog;\n/**\n * Opens the IBM Aspera preferences page.\n *\n * @returns a promise that resolves when the preferences page is opened.\n */\nvar showPreferences = function () {\n if (!index_1.asperaSdk.isReady) {\n return (0, helpers_1.throwError)(messages_1.messages.serverNotVerified);\n }\n var promiseInfo = (0, helpers_1.generatePromiseObjects)();\n client_1.client.request('open_preferences')\n .then(function (data) { return promiseInfo.resolver(data); })\n .catch(function (error) {\n (0, helpers_1.errorLog)(messages_1.messages.showPreferencesFailed, error);\n promiseInfo.rejecter((0, helpers_1.generateErrorBody)(messages_1.messages.showPreferencesFailed, error));\n });\n return promiseInfo.promise;\n};\nexports.showPreferences = showPreferences;\n/**\n * Get all transfers associated with the current application.\n *\n * @returns a promise that resolves with an array of transfers.\n */\nvar getAllTransfers = function () {\n if (index_1.asperaSdk.useHttpGateway) {\n return Promise.resolve((0, core_1.httpGetAllTransfers)());\n }\n if (!index_1.asperaSdk.isReady) {\n return (0, helpers_1.throwError)(messages_1.messages.serverNotVerified);\n }\n var promiseInfo = (0, helpers_1.generatePromiseObjects)();\n var payload = {\n app_id: index_1.asperaSdk.globals.appId,\n };\n client_1.client.request('get_all_transfers', payload)\n .then(function (data) { return promiseInfo.resolver(data); })\n .catch(function (error) {\n (0, helpers_1.errorLog)(messages_1.messages.getAllTransfersFailed, error);\n promiseInfo.rejecter((0, helpers_1.generateErrorBody)(messages_1.messages.getAllTransfersFailed, error));\n });\n return promiseInfo.promise;\n};\nexports.getAllTransfers = getAllTransfers;\n/**\n * Get a specific transfer by ID.\n *\n * @param id transfer uuid\n *\n * @returns a promise that resolves with the transfer.\n */\nvar getTransfer = function (id) {\n if (index_1.asperaSdk.useHttpGateway) {\n var transfer = (0, core_1.httpGetTransfer)(id);\n if (transfer) {\n return Promise.resolve(transfer);\n }\n else {\n return Promise.reject((0, helpers_1.generateErrorBody)(messages_1.messages.getTransferFailed, { reason: 'Not found' }));\n }\n }\n if (!index_1.asperaSdk.isReady) {\n return (0, helpers_1.throwError)(messages_1.messages.serverNotVerified);\n }\n var promiseInfo = (0, helpers_1.generatePromiseObjects)();\n var payload = {\n transfer_id: id,\n };\n client_1.client.request('get_transfer', payload)\n .then(function (data) { return promiseInfo.resolver(data); })\n .catch(function (error) {\n (0, helpers_1.errorLog)(messages_1.messages.getTransferFailed, error);\n promiseInfo.rejecter((0, helpers_1.generateErrorBody)(messages_1.messages.getTransferFailed, error));\n });\n return promiseInfo.promise;\n};\nexports.getTransfer = getTransfer;\n/**\n * Opens and highlights the downloaded file in Finder or Windows Explorer. If multiple files,\n * then only the first file will be selected.\n *\n * @param id transfer uuid\n *\n * @returns a promise that resolves if the file can be shown and rejects if not\n */\nvar showDirectory = function (id) {\n if (!index_1.asperaSdk.isReady) {\n return (0, helpers_1.throwError)(messages_1.messages.serverNotVerified);\n }\n var promiseInfo = (0, helpers_1.generatePromiseObjects)();\n var payload = {\n transfer_id: id,\n };\n client_1.client.request('show_directory', payload)\n .then(function (data) { return promiseInfo.resolver(data); })\n .catch(function (error) {\n (0, helpers_1.errorLog)(messages_1.messages.showDirectoryFailed, error);\n promiseInfo.rejecter((0, helpers_1.generateErrorBody)(messages_1.messages.showDirectoryFailed, error));\n });\n return promiseInfo.promise;\n};\nexports.showDirectory = showDirectory;\n/**\n * Modify the speed of a running transfer.\n *\n * @param id transfer uuid\n * @param options transfer rate options\n *\n * @returns a promise that resolves if the transfer rate can be modified and rejects if not\n */\nvar modifyTransfer = function (id, options) {\n if (!index_1.asperaSdk.isReady) {\n return (0, helpers_1.throwError)(messages_1.messages.serverNotVerified);\n }\n var promiseInfo = (0, helpers_1.generatePromiseObjects)();\n var payload = {\n transfer_id: id,\n transfer_spec: options,\n };\n client_1.client.request('modify_transfer', payload)\n .then(function (data) { return promiseInfo.resolver(data); })\n .catch(function (error) {\n (0, helpers_1.errorLog)(messages_1.messages.modifyTransferFailed, error);\n promiseInfo.rejecter((0, helpers_1.generateErrorBody)(messages_1.messages.modifyTransferFailed, error));\n });\n return promiseInfo.promise;\n};\nexports.modifyTransfer = modifyTransfer;\n/**\n * Set the custom branding template to be used by IBM Aspera. If the app is already\n * configured to use a different branding, then the branding template you specify will be\n * stored by the app, allowing the end user to switch at any point.\n *\n * @param id custom branding template id. This should be consistent across page loads.\n * @param options custom branding options\n *\n * @returns a promise that resolves if the branding was properly set.\n */\nvar setBranding = function (id, options) {\n if (!index_1.asperaSdk.isReady) {\n return (0, helpers_1.throwError)(messages_1.messages.serverNotVerified);\n }\n var promiseInfo = (0, helpers_1.generatePromiseObjects)();\n var branding = {\n id: id,\n name: options.name,\n theme: options.theme,\n };\n var payload = {\n branding: branding,\n };\n client_1.client.request('update_branding', payload)\n .then(function (data) { return promiseInfo.resolver(data); })\n .catch(function (error) {\n (0, helpers_1.errorLog)(messages_1.messages.setBrandingFailed, error);\n promiseInfo.rejecter((0, helpers_1.generateErrorBody)(messages_1.messages.setBrandingFailed, error));\n });\n return promiseInfo.promise;\n};\nexports.setBranding = setBranding;\n/**\n * Create a dropzone for the given element selector.\n *\n * @param callback the function to call once the files are dropped\n * @param elementSelector the selector of the element on the page that should watch for drop events\n */\nvar createDropzone = function (callback, elementSelector) {\n var elements = document.querySelectorAll(elementSelector);\n if (!elements || !elements.length) {\n (0, helpers_1.errorLog)(messages_1.messages.unableToFindElementOnPage);\n return;\n }\n var dragEvent = function (event) {\n event.preventDefault();\n };\n var dropEvent = function (event) {\n event.preventDefault();\n if (event.dataTransfer && event.dataTransfer.files && event.dataTransfer.files.length && event.dataTransfer.files[0]) {\n var files = [];\n for (var i = 0; i < event.dataTransfer.files.length; i++) {\n var file = event.dataTransfer.files[i];\n files.push({\n lastModified: file.lastModified,\n name: file.name,\n size: file.size,\n type: file.type\n });\n }\n var payload = {\n files: files,\n app_id: index_1.asperaSdk.globals.appId,\n };\n if (index_1.asperaSdk.isReady) {\n client_1.client.request('dropped_files', payload)\n .then(function (data) { return callback({ event: event, files: data }); })\n .catch(function (error) {\n (0, helpers_1.errorLog)(messages_1.messages.unableToReadDropped, error);\n });\n }\n else if (index_1.asperaSdk.httpGatewayIsReady) {\n (0, core_1.handleHttpGatewayDrop)(event.dataTransfer.items, callback, event);\n }\n }\n };\n elements.forEach(function (element) {\n element.addEventListener('dragover', dragEvent);\n element.addEventListener('drop', dropEvent);\n index_1.asperaSdk.globals.dropZonesCreated.set(elementSelector, [{ event: 'dragover', callback: dragEvent }, { event: 'drop', callback: dropEvent }]);\n });\n};\nexports.createDropzone = createDropzone;\n/**\n * Remove dropzone.\n *\n * @param elementSelector the selector of the element on the page that should remove\n */\nvar removeDropzone = function (elementSelector) {\n var foundDropzone = index_1.asperaSdk.globals.dropZonesCreated.get(elementSelector);\n if (foundDropzone) {\n foundDropzone.forEach(function (data) {\n var elements = document.querySelectorAll(elementSelector);\n if (elements && elements.length) {\n elements.forEach(function (element) {\n element.removeEventListener(data.event, data.callback);\n });\n }\n });\n }\n};\nexports.removeDropzone = removeDropzone;\n/**\n * Get metadata about the IBM Aspera installation.\n *\n * @returns a promise that returns information about the user's IBM Aspera installation.\n */\nvar getInfo = function () {\n if (!index_1.asperaSdk.isReady) {\n return (0, helpers_1.throwError)(messages_1.messages.serverNotVerified);\n }\n return new Promise(function (resolve, _) {\n resolve(index_1.asperaSdk.globals.sdkResponseData);\n });\n};\nexports.getInfo = getInfo;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.apiDelete = exports.apiPut = exports.apiPost = exports.apiGet = exports.getHeaders = exports.getUrlWithQueryParams = exports.getQueryString = exports.handlePromiseErrors = void 0;\nvar helpers_1 = require(\"./helpers\");\n/**\n * Check HTTP promise response for server error response (non 2XX status) and reject promise is error\n *\n * @param promise the HTTP promise to check for HTTP status code of 2XX for success\n *\n * @returns promise for the HTTP connection with catch supporting error\n */\nvar handlePromiseErrors = function (promise) {\n var promiseInfo = (0, helpers_1.generatePromiseObjects)();\n promise.then(function (response) {\n if (response.ok) {\n promiseInfo.resolver(response);\n }\n else {\n promiseInfo.rejecter(response);\n }\n return response;\n }).catch(function (error) {\n promiseInfo.rejecter(error);\n });\n return promiseInfo.promise;\n};\nexports.handlePromiseErrors = handlePromiseErrors;\n/**\n * Make params into string for query params\n *\n * @param params object of key:value pairs\n *\n * @returns a string of query params that is URL safe\n */\nvar getQueryString = function (params) {\n var queryString = '';\n Object.keys(params || {}).forEach(function (key) {\n var value = params[key];\n queryString += \"\".concat(key, \"=\").concat(encodeURIComponent(value), \"&\");\n });\n return queryString.slice(0, -1);\n};\nexports.getQueryString = getQueryString;\n/**\n * Create URL with query params if params are set\n *\n * @param url the url string\n * @param params object of key:value pairs\n *\n * @returns a string of url and query params together\n */\nvar getUrlWithQueryParams = function (url, params) {\n if (params) {\n var queryString = (0, exports.getQueryString)(params);\n url = url + (queryString ? \"?\".concat(queryString) : '');\n }\n return url;\n};\nexports.getUrlWithQueryParams = getUrlWithQueryParams;\n/**\n * Add required headers and additional headers together for network requests\n *\n * @param additionalHeaders object of key:value of extra header items\n *\n * @returns an object of key:value of all headers (additional and required)\n */\nvar getHeaders = function (additionalHeaders) {\n var requiredHeaders = {\n 'Content-Type': 'application/json'\n };\n Object.keys(additionalHeaders || {}).forEach(function (key) {\n requiredHeaders[key] = additionalHeaders[key];\n });\n return requiredHeaders;\n};\nexports.getHeaders = getHeaders;\n/**\n * Make a GET for retrieving data from a server\n *\n * @param url the url string of the resource on the server\n * @param queryParams an object of key:value to be used for the query params\n * @param additionalHeaders an object of key:value to be used for additional headers\n *\n * @returns a promise that will resolve with the response from the server or reject if network/server error\n */\nvar apiGet = function (url, queryParams, additionalHeaders) {\n return (0, exports.handlePromiseErrors)(fetch((0, exports.getUrlWithQueryParams)(url, queryParams), {\n headers: (0, exports.getHeaders)(additionalHeaders)\n }));\n};\nexports.apiGet = apiGet;\n/**\n * Make a POST for creating data on the server\n *\n * @param url the url string of the resource on the server\n * @param data the data (JSON) to send to the server\n * @param queryParams an object of key:value to be used for the query params\n * @param additionalHeaders an object of key:value to be used for additional headers\n *\n * @returns a promise that will resolve with the response from the server or reject if network/server error\n */\nvar apiPost = function (url, data, queryParams, additionalHeaders) {\n return (0, exports.handlePromiseErrors)(fetch((0, exports.getUrlWithQueryParams)(url, queryParams), {\n method: 'POST',\n body: JSON.stringify(data),\n headers: (0, exports.getHeaders)(additionalHeaders)\n }));\n};\nexports.apiPost = apiPost;\n/**\n * Make a PUT for creating data on the server\n *\n * @param url the url string of the resource on the server\n * @param data the data (JSON) to send to the server\n * @param queryParams an object of key:value to be used for the query params\n * @param additionalHeaders an object of key:value to be used for additional headers\n *\n * @returns a promise that will resolve with the response from the server or reject if network/server error\n */\nvar apiPut = function (url, data, queryParams, additionalHeaders) {\n return (0, exports.handlePromiseErrors)(fetch((0, exports.getUrlWithQueryParams)(url, queryParams), {\n method: 'PUT',\n body: JSON.stringify(data),\n headers: (0, exports.getHeaders)(additionalHeaders)\n }));\n};\nexports.apiPut = apiPut;\n/**\n * Make a DELETE on a resource on the server\n *\n * @param url the url string of the resource on the server\n * @param queryParams an object of key:value to be used for the query params\n * @param additionalHeaders an object of key:value to be used for additional headers\n *\n * @returns a promise that will resolve with the response from the server or reject if network/server error\n */\nvar apiDelete = function (url, queryParams, additionalHeaders) {\n return (0, exports.handlePromiseErrors)(fetch((0, exports.getUrlWithQueryParams)(url, queryParams), {\n method: 'DELETE',\n headers: (0, exports.getHeaders)(additionalHeaders)\n }));\n};\nexports.apiDelete = apiDelete;\nexports.default = {\n apiGet: exports.apiGet,\n apiPost: exports.apiPost,\n apiPut: exports.apiPut,\n apiDelete: exports.apiDelete,\n getHeaders: exports.getHeaders,\n getUrlWithQueryParams: exports.getUrlWithQueryParams,\n getQueryString: exports.getQueryString,\n handlePromiseErrors: exports.handlePromiseErrors\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.httpUpload = void 0;\nvar index_1 = require(\"../index\");\nvar helpers_1 = require(\"../helpers/helpers\");\nvar messages_1 = require(\"../constants/messages\");\nvar core_1 = require(\"./core\");\nvar http_gateway_sdk_js_1 = require(\"@ibm-aspera/http-gateway-sdk-js\");\n/**\n * HTTP Gateway Upload Logic\n *\n * @param transferSpec - TransferSpec for the upload\n * @param asperaSdkSpec IBM Aspera settings when starting a transfer.\n *\n * @returns Promise that resolves on success invoke or rejects if unable to start\n *\n * @remarks\n * Most logic is called directly by Desktop SDK functions\n * You may not need to import anything from this file.\n */\nvar httpUpload = function (transferSpec, asperaSdkSpec) {\n if (!index_1.asperaSdk.httpGatewayIsReady) {\n return (0, helpers_1.throwError)(messages_1.messages.serverNotVerified, { type: 'upload' });\n }\n if (index_1.asperaSdk.useOldHttpGateway) {\n return (0, http_gateway_sdk_js_1.upload)(transferSpec, (asperaSdkSpec === null || asperaSdkSpec === void 0 ? void 0 : asperaSdkSpec.http_gateway_v2_transfer_id) || '');\n }\n var promiseInfo = (0, helpers_1.generatePromiseObjects)();\n var request = new XMLHttpRequest();\n var body = new FormData();\n body.append('x-aspera-spec', (0, helpers_1.safeJsonString)(transferSpec));\n var hasBadFile = [];\n transferSpec.paths.forEach(function (path) {\n var foundFile = index_1.asperaSdk.httpGatewaySelectedFiles.get(path.source);\n if (foundFile) {\n body.append('Content-Length', String(foundFile.size));\n body.append('file', foundFile);\n }\n else {\n hasBadFile.push(path.source);\n }\n });\n if (hasBadFile.length) {\n return (0, helpers_1.throwError)(messages_1.messages.fileNotAllowed, { type: 'upload', invalidFiles: hasBadFile, transferSpec: transferSpec });\n }\n var transferObject = (0, core_1.getSdkTransfer)(transferSpec);\n if (asperaSdkSpec === null || asperaSdkSpec === void 0 ? void 0 : asperaSdkSpec.http_gateway_authentication) {\n request.setRequestHeader('Authorization', \"Bearer \".concat(asperaSdkSpec.http_gateway_authentication.token));\n request.setRequestHeader('X-Aspera-AccessKey', asperaSdkSpec.http_gateway_authentication.access_key);\n }\n request.open('POST', \"\".concat((asperaSdkSpec === null || asperaSdkSpec === void 0 ? void 0 : asperaSdkSpec.http_gateway_override_server_url) || index_1.asperaSdk.globals.httpGatewayUrl, \"/upload\"), true);\n var triggerUpdate = function () {\n (0, core_1.sendTransferUpdate)(transferObject);\n };\n var triggerFailed = function () {\n var errorData = (0, core_1.getMessageFromError)(request.response);\n transferObject.httpRequestId = request.getResponseHeader('X-Request-Id');\n transferObject.status = 'failed';\n transferObject.error_code = errorData.code;\n transferObject.error_desc = errorData.message;\n triggerUpdate();\n };\n request.upload.addEventListener('progress', function (event) {\n if (transferObject.status === 'failed') {\n return;\n }\n transferObject.status = 'running';\n transferObject.elapsed_usec = (new Date().getTime() - new Date(transferObject.add_time).getTime()) * 1000;\n if (event.lengthComputable) {\n transferObject.bytes_expected = event.total;\n transferObject.bytes_written = event.loaded;\n transferObject.percentage = (event.loaded / event.total);\n }\n triggerUpdate();\n });\n request.addEventListener('load', function () {\n transferObject.httpRequestId = request.getResponseHeader('X-Request-Id');\n });\n request.upload.addEventListener('load', function (event) {\n if (transferObject.status === 'failed') {\n return;\n }\n transferObject.status = 'completed';\n transferObject.elapsed_usec = (new Date().getTime() - new Date(transferObject.add_time).getTime()) * 1000;\n if (event.lengthComputable) {\n transferObject.bytes_expected = event.total;\n transferObject.bytes_written = event.loaded;\n transferObject.percentage = (event.loaded / event.total);\n }\n triggerUpdate();\n });\n request.upload.addEventListener('loadstart', function () {\n if (transferObject.status === 'failed') {\n return;\n }\n transferObject.status = 'running';\n promiseInfo.resolver(transferObject);\n triggerUpdate();\n });\n request.addEventListener('readystatechange', function () {\n if (request.status >= 400) {\n triggerFailed();\n }\n });\n request.upload.addEventListener('error', function (event) {\n triggerFailed();\n promiseInfo.rejecter(event);\n });\n request.upload.addEventListener('abort', function (event) {\n triggerFailed();\n promiseInfo.rejecter(event);\n });\n request.addEventListener('error', function (event) {\n triggerFailed();\n promiseInfo.rejecter(event);\n });\n request.addEventListener('abort', function (event) {\n triggerFailed();\n promiseInfo.rejecter(event);\n });\n request.send(body);\n return promiseInfo.promise;\n};\nexports.httpUpload = httpUpload;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createHtmlInputElement = exports.httpGatewaySelectFileFolderDialog = exports.handleHttpGatewayDrop = exports.httpDownload = exports.httpUpload = void 0;\nvar download_1 = require(\"./download\");\nObject.defineProperty(exports, \"httpDownload\", { enumerable: true, get: function () { return download_1.httpDownload; } });\nvar upload_1 = require(\"./upload\");\nObject.defineProperty(exports, \"httpUpload\", { enumerable: true, get: function () { return upload_1.httpUpload; } });\nvar core_1 = require(\"./core\");\nObject.defineProperty(exports, \"handleHttpGatewayDrop\", { enumerable: true, get: function () { return core_1.handleHttpGatewayDrop; } });\nObject.defineProperty(exports, \"httpGatewaySelectFileFolderDialog\", { enumerable: true, get: function () { return core_1.httpGatewaySelectFileFolderDialog; } });\nObject.defineProperty(exports, \"createHtmlInputElement\", { enumerable: true, get: function () { return core_1.createHtmlInputElement; } });\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nvar __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.JSONRPCServer = void 0;\nvar models_1 = require(\"./models\");\nvar internal_1 = require(\"./internal\");\nvar createParseErrorResponse = function () {\n return (0, models_1.createJSONRPCErrorResponse)(null, models_1.JSONRPCErrorCode.ParseError, \"Parse error\");\n};\nvar createInvalidRequestResponse = function (request) {\n return (0, models_1.createJSONRPCErrorResponse)((0, models_1.isJSONRPCID)(request.id) ? request.id : null, models_1.JSONRPCErrorCode.InvalidRequest, \"Invalid Request\");\n};\nvar createMethodNotFoundResponse = function (id) {\n return (0, models_1.createJSONRPCErrorResponse)(id, models_1.JSONRPCErrorCode.MethodNotFound, \"Method not found\");\n};\nvar JSONRPCServer = /** @class */ (function () {\n function JSONRPCServer(options) {\n if (options === void 0) { options = {}; }\n var _a;\n this.mapErrorToJSONRPCErrorResponse = defaultMapErrorToJSONRPCErrorResponse;\n this.nameToMethodDictionary = {};\n this.middleware = null;\n this.errorListener = (_a = options.errorListener) !== null && _a !== void 0 ? _a : console.warn;\n }\n JSONRPCServer.prototype.hasMethod = function (name) {\n return !!this.nameToMethodDictionary[name];\n };\n JSONRPCServer.prototype.addMethod = function (name, method) {\n this.addMethodAdvanced(name, this.toJSONRPCMethod(method));\n };\n JSONRPCServer.prototype.removeMethod = function (name) {\n delete this.nameToMethodDictionary[name];\n };\n JSONRPCServer.prototype.toJSONRPCMethod = function (method) {\n return function (request, serverParams) {\n var response = method(request.params, serverParams);\n return Promise.resolve(response).then(function (result) {\n return mapResultToJSONRPCResponse(request.id, result);\n });\n };\n };\n JSONRPCServer.prototype.addMethodAdvanced = function (name, method) {\n var _a;\n this.nameToMethodDictionary = __assign(__assign({}, this.nameToMethodDictionary), (_a = {}, _a[name] = method, _a));\n };\n JSONRPCServer.prototype.receiveJSON = function (json, serverParams) {\n var request = this.tryParseRequestJSON(json);\n if (request) {\n return this.receive(request, serverParams);\n }\n else {\n return Promise.resolve(createParseErrorResponse());\n }\n };\n JSONRPCServer.prototype.tryParseRequestJSON = function (json) {\n try {\n return JSON.parse(json);\n }\n catch (_a) {\n return null;\n }\n };\n JSONRPCServer.prototype.receive = function (request, serverParams) {\n if (Array.isArray(request)) {\n return this.receiveMultiple(request, serverParams);\n }\n else {\n return this.receiveSingle(request, serverParams);\n }\n };\n JSONRPCServer.prototype.receiveMultiple = function (requests, serverParams) {\n return __awaiter(this, void 0, void 0, function () {\n var responses;\n var _this = this;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0: return [4 /*yield*/, Promise.all(requests.map(function (request) { return _this.receiveSingle(request, serverParams); }))];\n case 1:\n responses = (_a.sent()).filter(isNonNull);\n if (responses.length === 1) {\n return [2 /*return*/, responses[0]];\n }\n else if (responses.length) {\n return [2 /*return*/, responses];\n }\n else {\n return [2 /*return*/, null];\n }\n return [2 /*return*/];\n }\n });\n });\n };\n JSONRPCServer.prototype.receiveSingle = function (request, serverParams) {\n return __awaiter(this, void 0, void 0, function () {\n var method, response;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n method = this.nameToMethodDictionary[request.method];\n if (!!(0, models_1.isJSONRPCRequest)(request)) return [3 /*break*/, 1];\n return [2 /*return*/, createInvalidRequestResponse(request)];\n case 1: return [4 /*yield*/, this.callMethod(method, request, serverParams)];\n case 2:\n response = _a.sent();\n return [2 /*return*/, mapResponse(request, response)];\n }\n });\n });\n };\n JSONRPCServer.prototype.applyMiddleware = function () {\n var middlewares = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n middlewares[_i] = arguments[_i];\n }\n if (this.middleware) {\n this.middleware = this.combineMiddlewares(__spreadArray([\n this.middleware\n ], middlewares, true));\n }\n else {\n this.middleware = this.combineMiddlewares(middlewares);\n }\n };\n JSONRPCServer.prototype.combineMiddlewares = function (middlewares) {\n if (!middlewares.length) {\n return null;\n }\n else {\n return middlewares.reduce(this.middlewareReducer);\n }\n };\n JSONRPCServer.prototype.middlewareReducer = function (prevMiddleware, nextMiddleware) {\n return function (next, request, serverParams) {\n return prevMiddleware(function (request, serverParams) { return nextMiddleware(next, request, serverParams); }, request, serverParams);\n };\n };\n JSONRPCServer.prototype.callMethod = function (method, request, serverParams) {\n var _this = this;\n var callMethod = function (request, serverParams) {\n if (method) {\n return method(request, serverParams);\n }\n else if (request.id !== undefined) {\n return Promise.resolve(createMethodNotFoundResponse(request.id));\n }\n else {\n return Promise.resolve(null);\n }\n };\n var onError = function (error) {\n _this.errorListener(\"An unexpected error occurred while executing \\\"\".concat(request.method, \"\\\" JSON-RPC method:\"), error);\n return Promise.resolve(_this.mapErrorToJSONRPCErrorResponseIfNecessary(request.id, error));\n };\n try {\n return (this.middleware || noopMiddleware)(callMethod, request, serverParams).then(undefined, onError);\n }\n catch (error) {\n return onError(error);\n }\n };\n JSONRPCServer.prototype.mapErrorToJSONRPCErrorResponseIfNecessary = function (id, error) {\n if (id !== undefined) {\n return this.mapErrorToJSONRPCErrorResponse(id, error);\n }\n else {\n return null;\n }\n };\n return JSONRPCServer;\n}());\nexports.JSONRPCServer = JSONRPCServer;\nvar isNonNull = function (value) { return value !== null; };\nvar noopMiddleware = function (next, request, serverParams) { return next(request, serverParams); };\nvar mapResultToJSONRPCResponse = function (id, result) {\n if (id !== undefined) {\n return (0, models_1.createJSONRPCSuccessResponse)(id, result);\n }\n else {\n return null;\n }\n};\nvar defaultMapErrorToJSONRPCErrorResponse = function (id, error) {\n var _a;\n var message = (_a = error === null || error === void 0 ? void 0 : error.message) !== null && _a !== void 0 ? _a : \"An unexpected error occurred\";\n var code = internal_1.DefaultErrorCode;\n var data;\n if (error instanceof models_1.JSONRPCErrorException) {\n code = error.code;\n data = error.data;\n }\n return (0, models_1.createJSONRPCErrorResponse)(id, code, message, data);\n};\nvar mapResponse = function (request, response) {\n if (response) {\n return response;\n }\n else if (request.id !== undefined) {\n return (0, models_1.createJSONRPCErrorResponse)(request.id, models_1.JSONRPCErrorCode.InternalError, \"Internal error\");\n }\n else {\n return null;\n }\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.cancelTransfer = exports.removeTransfer = exports.clearNonActiveTransfers = exports.getAllTransfers = exports.getTransferById = exports.deregisterActivityCallback = exports.registerActivityCallback = exports.initHttpGateway = exports.cleanupServerUrl = exports.testHttpGatewayConnection = void 0;\nvar index_1 = require(\"../index\");\nvar helpers_1 = require(\"../helpers/helpers\");\nvar messages_1 = require(\"../constants/messages\");\nvar http_1 = require(\"../helpers/http\");\n/**\n * Check if HTTP Gateway server connection works. This function is called by init\n * when initializing the SDK. This function can be used at any point for sanity checking.\n *\n * @returns promise that resolves if server can connect or rejects if server unable to connect\n */\nvar testHttpGatewayConnection = function () {\n if (!index_1.asperaHttpGateway.globals.serverUrl && !index_1.asperaHttpGateway.globals.supportMultipleServers) {\n (0, helpers_1.errorLog)(messages_1.messages.serverUrlNotSet);\n return new Promise(function (resolve, reject) {\n reject((0, helpers_1.generateErrorBody)(messages_1.messages.serverUrlNotSet));\n });\n }\n var promiseInfo = (0, helpers_1.generatePromiseObjects)();\n var backupServerData = {\n endpoints: [\n '/aspera/http-gwy/v1/info',\n '/aspera/http-gwy/v1/upload',\n '/aspera/http-gwy/v2/upload',\n '/aspera/http-gwy/v1/download'\n ],\n name: 'IBM Aspera HTTP Gateway',\n version: '2.3.0',\n sdkVerificationFailed: true,\n };\n (0, http_1.apiGet)(\"\".concat(index_1.asperaHttpGateway.globals.serverUrl || '', \"/v1/info\")).then(function (response) {\n response.json().then(function (data) {\n index_1.asperaHttpGateway.globals.serverInfo = data;\n index_1.asperaHttpGateway.globals.serverVerified = true;\n promiseInfo.resolver(data);\n });\n }).catch(function (error) {\n (0, helpers_1.errorLog)(messages_1.messages.serverError, error);\n if (index_1.asperaHttpGateway.globals.supportMultipleServers) {\n index_1.asperaHttpGateway.globals.serverInfo = backupServerData;\n index_1.asperaHttpGateway.globals.serverVerified = true;\n promiseInfo.resolver(backupServerData);\n }\n else {\n index_1.asperaHttpGateway.globals.serverVerified = false;\n promiseInfo.rejecter((0, helpers_1.generateErrorBody)(messages_1.messages.serverError, error));\n }\n });\n return promiseInfo.promise;\n};\nexports.testHttpGatewayConnection = testHttpGatewayConnection;\nvar cleanupServerUrl = function (serverUrl) {\n if (typeof serverUrl !== 'string') {\n return '';\n }\n if (serverUrl[serverUrl.length - 1] === '/') {\n serverUrl = serverUrl.slice(0, -1);\n }\n return serverUrl.replace('/v1', '/').replace(/\\/$/, '').replace(/\\/$/, '');\n};\nexports.cleanupServerUrl = cleanupServerUrl;\n/**\n * Initialize HTTP gateway client. If client cannot (reject/catch)\n * client should attempt fixing server URL or trying again. If still fails disable UI elements.\n * If supportMultipleServers is used the failure of the first test will not lock out the SDK.\n *\n * @param serverUrl URL indicating location of the HTTP server\n * @param softwareMode indicate if the SDK should run in software mode instead of DOM mode\n * @param supportMultipleServers indicates if the SDK should support multiple servers (not restricting to setup server)\n *\n * @returns a promise that resolves if HTTP Gateway is running properly or rejects if unable to load\n */\nvar initHttpGateway = function (serverUrl, softwareMode, supportMultipleServers) {\n if (!(0, helpers_1.isValidUrl)(serverUrl)) {\n return new Promise(function (resolve, reject) {\n reject((0, helpers_1.generateErrorBody)(messages_1.messages.invalidServerUrl));\n });\n }\n index_1.asperaHttpGateway.globals.setUpServer((0, exports.cleanupServerUrl)(serverUrl), softwareMode, supportMultipleServers);\n return (0, exports.testHttpGatewayConnection)();\n};\nexports.initHttpGateway = initHttpGateway;\n/**\n * Register a callback event for getting transfer data\n *\n * @param callback callback function to receive transfers\n *\n * @returns ID representing the callback for deregistration purposes\n */\nvar registerActivityCallback = function (callback) {\n return index_1.asperaHttpGateway.activityTracking.setCallback(callback);\n};\nexports.registerActivityCallback = registerActivityCallback;\n/**\n * Remove a callback from the transfer callback\n * @param id the ID returned by `registerActivityCallback`\n */\nvar deregisterActivityCallback = function (id) {\n index_1.asperaHttpGateway.activityTracking.removeCallback(id);\n};\nexports.deregisterActivityCallback = deregisterActivityCallback;\n/**\n * Returns the transfer requested based on the uuid of the transfer.\n * NOTE: transferId from Node is not accepted as an ID. It must be the ID used by the HTTP Gateway.\n *\n * @param id gateway based ID of the HTTP part of the transfer\n *\n * @returns an object containing the transfer (or undefined if not found) located at key `transfer_info`\n */\nvar getTransferById = function (id) {\n return { transfer_info: index_1.asperaHttpGateway.activityTracking.getTransferById(id) };\n};\nexports.getTransferById = getTransferById;\n/**\n * Get transfer response object including all transfers\n *\n * @returns transfer data object with transfers array\n */\nvar getAllTransfers = function () {\n return index_1.asperaHttpGateway.activityTracking.getAllTransfersResponse();\n};\nexports.getAllTransfers = getAllTransfers;\n/**\n * Remove all transfers that are not active\n */\nvar clearNonActiveTransfers = function () {\n index_1.asperaHttpGateway.activityTracking.clearNonActiveTransfers();\n};\nexports.clearNonActiveTransfers = clearNonActiveTransfers;\n/**\n * Removes a transfer from the transfers list in HTTP Gateway\n * If an active transfer is removed it will continue to be uploaded/downloaded but progress will not be tracked\n *\n * @param id HTTP Gateway transfer uuid\n */\nvar removeTransfer = function (id) {\n index_1.asperaHttpGateway.activityTracking.removeTransfer(id);\n};\nexports.removeTransfer = removeTransfer;\n/**\n * Cancel a transfer from the transfers list in HTTP Gateway\n *\n * @param id HTTP Gateway transfer uuid\n */\nvar cancelTransfer = function (id) {\n var transfer = index_1.asperaHttpGateway.activityTracking.getTransferById(id);\n if (transfer) {\n transfer.status = 'canceled';\n }\n};\nexports.cancelTransfer = cancelTransfer;\nexports.default = {\n initHttpGateway: exports.initHttpGateway,\n testHttpGatewayConnection: exports.testHttpGatewayConnection,\n registerActivityCallback: exports.registerActivityCallback,\n cleanupServerUrl: exports.cleanupServerUrl,\n deregisterActivityCallback: exports.deregisterActivityCallback,\n getTransferById: exports.getTransferById,\n getAllTransfers: exports.getAllTransfers,\n clearNonActiveTransfers: exports.clearNonActiveTransfers,\n removeTransfer: exports.removeTransfer,\n cancelTransfer: exports.cancelTransfer\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.messages = void 0;\n/** @ignore */\nexports.messages = {\n callbackIsNotFunction: 'The provided callback is not a function',\n dragDropInitFailed: 'Unable to initialize drag-drop',\n dragDropInitFailedInit: 'Unable to initialize drag-drop as part of init flow',\n failedToGenerateIframe: 'Unable to generate IFRAME for download. Using new window',\n getInstallerError: 'Unable to get latest installers',\n getAllTransfersFailed: 'Unable to get all transfers',\n getTransferFailed: 'Unable to get transfer',\n invalidEndpoint: 'The specified endpoint is not a valid URL',\n loadingProtocol: 'Launching IBM Aspera for Desktop',\n modifyTransferFailed: 'Unable to modify transfer',\n notValidTransferSpec: 'The supplied transferSpec is not valid',\n removeTransferFailed: 'Unable to remove transfer',\n resumeTransferFailed: 'Unable to resume transfer',\n serverError: 'Unable to connect to IBM Aspera for Desktop server',\n serverNotVerified: 'IBM Aspera SDK has not been verified. Run test or init first',\n setBrandingFailed: 'Unable to set custom branding',\n showDirectoryFailed: 'Unable to show transfer directory',\n showSelectFileDialogFailed: 'Unable to show select file dialog',\n showSelectFolderDialogFailed: 'Unable to show select folder dialog',\n showPreferencesFailed: 'Unable to show preferences',\n stopTransferFailed: 'Unable to stop transfer',\n transferFailed: 'The transfer failed to initiate',\n unableToFindElementOnPage: 'Unable to find the element on the current page',\n unableToReadDropped: 'The dropped item could not be parsed. Please try selecting via the select file/folder option',\n websocketClosedError: 'The websocket was closed due to an error',\n websocketClosedUnexpect: 'The websocket was closed unexpectedly',\n websocketNotReady: 'The websocket is not ready. Run init first',\n httpNotAvailable: 'IBM Aspera HTTP Gateway is not available',\n httpInitFail: 'IBM Aspera HTTP Gateway could not be started',\n filePickerCancel: 'User canceled the select file or folder dialog.',\n fileNotAllowed: 'TransferSpec contained file not selected by user.',\n httpNetworkFail: 'HTTP network encountered unknown error.',\n};\n","\"use strict\";\nvar __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n};\nvar __generator = (this && this.__generator) || function (thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.JSONRPCServerAndClient = void 0;\nvar models_1 = require(\"./models\");\nvar JSONRPCServerAndClient = /** @class */ (function () {\n function JSONRPCServerAndClient(server, client, options) {\n if (options === void 0) { options = {}; }\n var _a;\n this.server = server;\n this.client = client;\n this.errorListener = (_a = options.errorListener) !== null && _a !== void 0 ? _a : console.warn;\n }\n JSONRPCServerAndClient.prototype.applyServerMiddleware = function () {\n var _a;\n var middlewares = [];\n for (var _i = 0; _i < arguments.length; _i++) {\n middlewares[_i] = arguments[_i];\n }\n (_a = this.server).applyMiddleware.apply(_a, middlewares);\n };\n JSONRPCServerAndClient.prototype.hasMethod = function (name) {\n return this.server.hasMethod(name);\n };\n JSONRPCServerAndClient.prototype.addMethod = function (name, method) {\n this.server.addMethod(name, method);\n };\n JSONRPCServerAndClient.prototype.addMethodAdvanced = function (name, method) {\n this.server.addMethodAdvanced(name, method);\n };\n JSONRPCServerAndClient.prototype.removeMethod = function (name) {\n this.server.removeMethod(name);\n };\n JSONRPCServerAndClient.prototype.timeout = function (delay) {\n return this.client.timeout(delay);\n };\n JSONRPCServerAndClient.prototype.request = function (method, params, clientParams) {\n return this.client.request(method, params, clientParams);\n };\n JSONRPCServerAndClient.prototype.requestAdvanced = function (jsonRPCRequest, clientParams) {\n return this.client.requestAdvanced(jsonRPCRequest, clientParams);\n };\n JSONRPCServerAndClient.prototype.notify = function (method, params, clientParams) {\n this.client.notify(method, params, clientParams);\n };\n JSONRPCServerAndClient.prototype.rejectAllPendingRequests = function (message) {\n this.client.rejectAllPendingRequests(message);\n };\n JSONRPCServerAndClient.prototype.receiveAndSend = function (payload, serverParams, clientParams) {\n return __awaiter(this, void 0, void 0, function () {\n var response, message;\n return __generator(this, function (_a) {\n switch (_a.label) {\n case 0:\n if (!((0, models_1.isJSONRPCResponse)(payload) || (0, models_1.isJSONRPCResponses)(payload))) return [3 /*break*/, 1];\n this.client.receive(payload);\n return [3 /*break*/, 4];\n case 1:\n if (!((0, models_1.isJSONRPCRequest)(payload) || (0, models_1.isJSONRPCRequests)(payload))) return [3 /*break*/, 3];\n return [4 /*yield*/, this.server.receive(payload, serverParams)];\n case 2:\n response = _a.sent();\n if (response) {\n return [2 /*return*/, this.client.send(response, clientParams)];\n }\n return [3 /*break*/, 4];\n case 3:\n message = \"Received an invalid JSON-RPC message\";\n this.errorListener(message, payload);\n return [2 /*return*/, Promise.reject(new Error(message))];\n case 4: return [2 /*return*/];\n }\n });\n });\n };\n return JSONRPCServerAndClient;\n}());\nexports.JSONRPCServerAndClient = JSONRPCServerAndClient;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.installerUrl = exports.baseInstallerUrl = exports.protocol = exports.hiddenStyleList = void 0;\n/** @ignore */\nexports.hiddenStyleList = \"\\n display: none !important;\\n width: 1px !important;\\n height: 1px !important;\\n position: fixed !important;\\n z-index: -99 !important;\\n bottom: 0px !important;\\n right: 0px !important;\\n\";\n/** @ignore */\nexports.protocol = 'aspera://';\n/** @ignore */\nexports.baseInstallerUrl = 'https://downloads.ibmaspera.com/downloads/desktop';\n/** @ignore */\nexports.installerUrl = \"\".concat(exports.baseInstallerUrl, \"/latest/stable\");\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.client = void 0;\nvar http_client_1 = require(\"./http-client\");\nvar safari_client_1 = require(\"./safari-client\");\nvar helpers_1 = require(\"../helpers\");\nexports.client = (0, helpers_1.isSafari)() ? safari_client_1.safariClient : http_client_1.httpClient;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.httpClient = exports.handlePromiseLikeErrors = exports.getRpcServerUrl = void 0;\nvar json_rpc_2_0_1 = require(\"json-rpc-2.0\");\nvar helpers_1 = require(\"../helpers\");\nvar index_1 = require(\"../../index\");\nvar getRpcServerUrl = function () {\n return \"\".concat(index_1.asperaSdk.globals.asperaAppUrl, \":\").concat(index_1.asperaSdk.globals.rpcPort);\n};\nexports.getRpcServerUrl = getRpcServerUrl;\n/**\n * Wraps a promise like object and returns a promise that supports catch.\n *\n * @param promise the HTTP promise like to wrap\n *\n * @returns promise for the HTTP connection with catch supporting error\n */\nvar handlePromiseLikeErrors = function (promise) {\n var promiseInfo = (0, helpers_1.generatePromiseObjects)();\n promise.then(function (response) {\n promiseInfo.resolver(response);\n }, function (error) {\n promiseInfo.rejecter(error);\n });\n return promiseInfo.promise;\n};\nexports.handlePromiseLikeErrors = handlePromiseLikeErrors;\n/**\n * JSON RPC client using HTTP (fetch) as transport.\n */\nvar JSONRPCHttpClient = /** @class */ (function () {\n function JSONRPCHttpClient() {\n var _this = this;\n /**\n * Request handler for the JSON-RPC client. This function is called by the JSON-RPC library\n * after forming the RPC request.\n *\n * @param request JSON-RPC request to send to the server\n */\n this.handleRequest = function (request) {\n var options = {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n },\n body: (0, helpers_1.safeJsonString)(request),\n };\n var rpcServerURL = (0, exports.getRpcServerUrl)();\n return fetch(rpcServerURL, options).then(function (response) {\n if (response.ok) {\n return response.json().then(function (rpcResponse) { return _this.client.receive(rpcResponse); });\n }\n else if (request.id !== undefined) {\n throw Promise.reject(response.statusText);\n }\n });\n };\n this.request = function (method, data) {\n return _this.client.request(method, data);\n };\n this.client = new json_rpc_2_0_1.JSONRPCClient(this.handleRequest);\n }\n return JSONRPCHttpClient;\n}());\n/**\n * Client used for making requests to Aspera.\n */\nvar HttpClient = /** @class */ (function () {\n function HttpClient() {\n var _this = this;\n this.request = function (method, payload) {\n if (payload === void 0) { payload = {}; }\n return (0, exports.handlePromiseLikeErrors)(_this.httpClient.request(method, payload));\n };\n this.httpClient = new JSONRPCHttpClient();\n }\n ;\n return HttpClient;\n}());\nexports.httpClient = new HttpClient();\nexports.default = {\n httpClient: exports.httpClient,\n handlePromiseLikeErrors: exports.handlePromiseLikeErrors,\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DefaultErrorCode = void 0;\nexports.DefaultErrorCode = 0;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getInstallerInfo = void 0;\nvar index_1 = require(\"../index\");\nvar helpers_1 = require(\"../helpers/helpers\");\nvar http_1 = require(\"../helpers/http\");\nvar messages_1 = require(\"../constants/messages\");\n/**\n * Get the latest Aspera SDK installer information such as download URL and version.\n *\n * @param options Installer info options\n *\n * @returns a promise that resolves with the installer info and rejects if there is an error\n */\nvar getInstallerInfo = function (options) {\n if (options === void 0) { options = {}; }\n var url = options.endpoint || index_1.asperaSdk.globals.installerUrl;\n if (url.endsWith('/latest.json')) {\n url = url.replace('/latest.json', '');\n }\n if (!(0, helpers_1.isValidURL)(url)) {\n return (0, helpers_1.throwError)(messages_1.messages.invalidEndpoint, { url: url });\n }\n var promiseInfo = (0, helpers_1.generatePromiseObjects)();\n (0, http_1.apiGet)(\"\".concat(url, \"/latest.json\")).then(function (response) {\n response.json().then(function (data) {\n if (options.endpoint) {\n for (var _i = 0, _a = data.entries; _i < _a.length; _i++) {\n var entry = _a[_i];\n if (!(0, helpers_1.isValidURL)(entry.url)) {\n entry.url = \"\".concat(options.endpoint, \"/\").concat(entry.url);\n }\n }\n }\n if (options.all) {\n promiseInfo.resolver(data);\n }\n else {\n var platform_1 = (0, helpers_1.getCurrentPlatform)();\n data.entries = data.entries.filter(function (entry) { return entry.platform === platform_1; });\n promiseInfo.resolver(data);\n }\n });\n }).catch(function (error) {\n (0, helpers_1.errorLog)(messages_1.messages.getInstallerError, error);\n promiseInfo.rejecter((0, helpers_1.generateErrorBody)(messages_1.messages.getInstallerError, error));\n });\n return promiseInfo.promise;\n};\nexports.getInstallerInfo = getInstallerInfo;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.startStream = exports.injectStreamToDom = void 0;\nvar http_1 = require(\"../helpers/http\");\nvar index_1 = require(\"../index\");\nvar helpers_1 = require(\"../helpers/helpers\");\nvar messages_1 = require(\"../constants/messages\");\nvar core_1 = require(\"./core\");\n/**\n * Inject the video into the DOM\n *\n * @param url URL of the stream returned from HTTP Gateway Server\n * @param videoDomQuery an injection point for the video. Should be a `div`. If found the content will be removed before loading. If not set will do nothing and let client handle video playback.\n */\nvar injectStreamToDom = function (url, videoDomQuery, videoOptions) {\n if (videoOptions === void 0) { videoOptions = {}; }\n var injectPoint = document.querySelector(videoDomQuery);\n if (!injectPoint) {\n (0, helpers_1.errorLog)(messages_1.messages.streamInjectDomInvalid, { query: videoDomQuery });\n return;\n }\n // Empty DOM inject point\n while (injectPoint.firstChild) {\n injectPoint.removeChild(injectPoint.firstChild);\n }\n var video = document.createElement('video');\n video.classList.add('aspera-http-gateway-video');\n video.controls = true;\n if (videoOptions.controls !== undefined) {\n video.controls = videoOptions.controls;\n }\n if (videoOptions.autoplay !== undefined) {\n video.autoplay = videoOptions.autoplay;\n }\n if (videoOptions.loop !== undefined) {\n video.loop = videoOptions.loop;\n }\n if (videoOptions.muted !== undefined) {\n video.muted = videoOptions.muted;\n }\n if (videoOptions.poster !== undefined) {\n video.poster = videoOptions.poster;\n }\n if (videoOptions.height !== undefined) {\n video.height = videoOptions.height;\n }\n if (videoOptions.width !== undefined) {\n video.width = videoOptions.width;\n }\n else {\n video.setAttribute('style', 'width: 100%;');\n }\n injectPoint.appendChild(video);\n if (video.canPlayType('application/vnd.apple.mpegurl')) {\n video.src = url;\n video.addEventListener('loadedmetadata', function () {\n video.play();\n });\n }\n else if (window.Hls.isSupported()) {\n var hls = new window.Hls();\n hls.loadSource(url);\n hls.attachMedia(video);\n hls.on(window.Hls.Events.MANIFEST_PARSED, function () {\n video.play();\n });\n }\n};\nexports.injectStreamToDom = injectStreamToDom;\n/**\n * Start a HTTP Gateway video. stream. transferSpec is ONLY accepted if contains ONE file.\n *\n * It is recommended to add this https://cdn.jsdelivr.net/npm/hls.js to your project\n *\n * @param transferSpec standard Connect transferSpec for downloading\n * @param videoDomQuery an injection point for the video. Should be a `div`. If found the content will be removed before loading. If not set will do nothing and let client handle video playback.\n *\n * @returns a promise that resolves if stream is started successfully or rejects if error occurs\n */\nvar startStream = function (transferSpec, videoDomQuery, videoOptions) {\n if (videoOptions === void 0) { videoOptions = {}; }\n if (!index_1.asperaHttpGateway.isReady) {\n (0, helpers_1.errorLog)(messages_1.messages.serverNotVerified);\n return new Promise(function (resolve, reject) {\n reject((0, helpers_1.generateErrorBody)(messages_1.messages.serverNotVerified));\n });\n }\n if (!(0, helpers_1.isValidTransferSpec)(transferSpec)) {\n (0, helpers_1.errorLog)(messages_1.messages.notValidTransferSpec);\n return new Promise(function (resolve, reject) {\n reject((0, helpers_1.generateErrorBody)(messages_1.messages.notValidTransferSpec, { transferSpec: transferSpec }));\n });\n }\n if (transferSpec.paths.length !== 1) {\n (0, helpers_1.errorLog)(messages_1.messages.streamingTooManyFiles);\n return new Promise(function (resolve, reject) {\n reject((0, helpers_1.generateErrorBody)(messages_1.messages.streamingTooManyFiles, { transferSpec: transferSpec }));\n });\n }\n var promiseInfo = (0, helpers_1.generatePromiseObjects)();\n var payload = {\n transfer_spec: transferSpec\n };\n var finalServerUrl = videoOptions.serverUrlOverride ? (0, core_1.cleanupServerUrl)(videoOptions.serverUrlOverride) : index_1.asperaHttpGateway.globals.serverUrl;\n // TODO: what is the URL made of. Assuming same as download but with /stream endpoint. Simpler if just get back direct URL.\n (0, http_1.apiPost)(\"\".concat(finalServerUrl, \"/v1/start-stream\"), payload).then(function (response) {\n response.json().then(function (data) {\n if (data.transfer_spec_id) {\n var streamUrl = \"\".concat(finalServerUrl, \"/v1/stream/\").concat(data.transfer_spec_id, \"/\").concat(data.transfer_spec_id, \".m3u8\");\n if (index_1.asperaHttpGateway.globals.softwareMode) {\n promiseInfo.resolver({\n transfer_spec_id: data.transfer_spec_id,\n url: streamUrl,\n });\n return;\n }\n if (videoDomQuery) {\n (0, exports.injectStreamToDom)(streamUrl, videoDomQuery, videoOptions);\n }\n promiseInfo.resolver();\n }\n else {\n (0, helpers_1.errorLog)(messages_1.messages.failedToGetStreamUrl, { response: data });\n promiseInfo.rejecter((0, helpers_1.generateErrorBody)(messages_1.messages.failedToGetStreamUrl, { response: data }));\n }\n });\n }).catch(function (error) {\n (0, helpers_1.errorLog)(messages_1.messages.streamFailed, error);\n promiseInfo.rejecter((0, helpers_1.generateErrorBody)(messages_1.messages.streamFailed, error));\n });\n return promiseInfo.promise;\n};\nexports.startStream = startStream;\nexports.default = {\n startStream: exports.startStream,\n injectStreamToDom: exports.injectStreamToDom\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.httpDownload = void 0;\nvar index_1 = require(\"../index\");\nvar helpers_1 = require(\"../helpers/helpers\");\nvar messages_1 = require(\"../constants/messages\");\nvar core_1 = require(\"./core\");\nvar http_gateway_sdk_js_1 = require(\"@ibm-aspera/http-gateway-sdk-js\");\n/**\n * HTTP Gateway Download Logic for presigned flow\n * Presigned flow is when used files are too large or unknown file size\n *\n * @param transferSpec - TransferSpec for the download\n * @param asperaSdkSpec IBM Aspera settings when starting a transfer.\n *\n * @returns Promise that resolves on success invoke or rejects if unable to start\n *\n * @remarks\n * This function is used internally and not exported.\n */\nvar httpDownloadPresigned = function (transferSpec, asperaSdkSpec) {\n // create a transfer sdk object\n var transferObject = (0, core_1.getSdkTransfer)(transferSpec);\n transferObject.httpDownloadExternalHandle = true;\n (0, core_1.sendTransferUpdate)(transferObject);\n var triggerFailed = function (error) {\n var errorData = (0, core_1.getMessageFromError)(error.response || error);\n transferObject.status = 'failed';\n transferObject.error_code = errorData.code;\n transferObject.error_desc = errorData.message;\n (0, core_1.sendTransferUpdate)(transferObject);\n };\n var url = new URL((asperaSdkSpec === null || asperaSdkSpec === void 0 ? void 0 : asperaSdkSpec.http_gateway_override_server_url) || index_1.asperaSdk.globals.httpGatewayUrl);\n var headers = {\n 'Content-Type': 'application/json',\n accept: 'application/json',\n };\n if (asperaSdkSpec === null || asperaSdkSpec === void 0 ? void 0 : asperaSdkSpec.http_gateway_authentication) {\n headers['Authorization'] = \"Bearer \".concat(asperaSdkSpec.http_gateway_authentication.token);\n headers['X-Aspera-AccessKey'] = asperaSdkSpec.http_gateway_authentication.access_key;\n }\n return fetch(\"\".concat(url.toString(), \"/presign\"), {\n method: 'POST',\n headers: headers,\n body: (0, helpers_1.safeJsonString)({\n transfer_spec: transferSpec,\n method: 'GET',\n protocol: 'http',\n headers: {\n host: url.host,\n },\n }),\n }).then(function (response) {\n return response.json().then(function (data) {\n return {\n headers: response.headers,\n body: data,\n status: response.status,\n };\n });\n }).then(function (response) {\n if (response.status >= 400) {\n triggerFailed(response.body);\n return transferObject;\n }\n transferObject.httpRequestId = response.headers.get('X-Request-Id');\n transferObject.status = 'running';\n (0, core_1.sendTransferUpdate)(transferObject);\n var iframe = document.createElement('iframe');\n iframe.src = response.body.signed_url;\n iframe.width = '1px';\n iframe.height = '1px';\n index_1.asperaSdk.globals.httpGatewayIframeContainer.appendChild(iframe);\n return transferObject;\n }).catch(function (error) {\n triggerFailed(error);\n return transferObject;\n });\n};\n/**\n * HTTP Gateway Download Logic for in browser download with progress\n * This is used when the transfer size is known and under the threshold\n *\n * @param transferSpec - TransferSpec for the download\n * @param asperaSdkSpec IBM Aspera settings when starting a transfer.\n *\n * @returns Promise that resolves on success invoke or rejects if unable to start\n *\n * @remarks\n * This function is used internally and not exported.\n */\nvar httpDownloadInBrowser = function (transferSpec, asperaSdkSpec) {\n // create a transfer sdk object\n var transferObject = (0, core_1.getSdkTransfer)(transferSpec);\n var triggerFailed = function (error) {\n var errorData = (0, core_1.getMessageFromError)(error.response || error);\n transferObject.status = 'failed';\n transferObject.error_code = errorData.code;\n transferObject.error_desc = errorData.message;\n (0, core_1.sendTransferUpdate)(transferObject);\n };\n (0, core_1.sendTransferUpdate)(transferObject);\n var headers = {\n 'X-Aspera-Spec': (0, core_1.base64Encoding)((0, helpers_1.safeJsonString)(transferSpec)),\n };\n if (asperaSdkSpec === null || asperaSdkSpec === void 0 ? void 0 : asperaSdkSpec.http_gateway_authentication) {\n headers['Authorization'] = \"Bearer \".concat(asperaSdkSpec.http_gateway_authentication.token);\n headers['X-Aspera-AccessKey'] = asperaSdkSpec.http_gateway_authentication.access_key;\n }\n fetch(\"\".concat((asperaSdkSpec === null || asperaSdkSpec === void 0 ? void 0 : asperaSdkSpec.http_gateway_override_server_url) || index_1.asperaSdk.globals.httpGatewayUrl, \"/download\"), { method: 'GET', headers: headers }).then(function (data) {\n var responseHeaders = data.headers;\n transferObject.httpRequestId = responseHeaders.get('X-Request-Id');\n var chunks = [];\n var reader = data.body.getReader();\n transferObject.status = 'running';\n (0, core_1.sendTransferUpdate)(transferObject);\n transferObject.bytes_expected = Number(responseHeaders.get('Content-Length') || 0);\n var readBytes = function () {\n reader.read().then(function (content) {\n var _a;\n if (content.done) {\n if (data.status >= 400 || !transferObject.bytes_written) {\n triggerFailed(data.body);\n return;\n }\n transferObject.status = 'completed';\n (0, core_1.sendTransferUpdate)(transferObject);\n var blobData = new Blob(chunks, { type: responseHeaders.get('Content-Type') });\n var objectURL = URL.createObjectURL(blobData);\n var a = document.createElement('a');\n a.href = objectURL;\n a.setAttribute('style', 'display: none;');\n a.download = (responseHeaders.get('Content-Disposition') || 'download').replace('attachment; filename=\"', '').replace('\"', '');\n document.body.appendChild(a);\n a.click();\n document.body.removeChild(a);\n URL.revokeObjectURL(objectURL);\n }\n else {\n chunks.push(content.value);\n transferObject.status = 'running';\n transferObject.bytes_written += ((_a = content.value) === null || _a === void 0 ? void 0 : _a.length) || 0;\n transferObject.percentage = (transferObject.bytes_written / transferObject.bytes_expected);\n (0, core_1.sendTransferUpdate)(transferObject);\n readBytes();\n }\n }).catch(function (error) {\n triggerFailed(error);\n });\n };\n readBytes();\n }).catch(function (error) {\n triggerFailed(error);\n });\n return Promise.resolve(transferObject);\n};\n/**\n * HTTP Gateway Download Logic\n *\n * @param transferSpec - TransferSpec for the download\n * @param asperaSdkSpec IBM Aspera settings when starting a transfer.\n *\n * @returns Promise that resolves on success invoke or rejects if unable to start\n *\n * @remarks\n * Most logic is called directly by Desktop SDK functions\n * You may not need to import anything from this file.\n */\nvar httpDownload = function (transferSpec, asperaSdkSpec) {\n if (!index_1.asperaSdk.httpGatewayIsReady) {\n return (0, helpers_1.throwError)(messages_1.messages.serverNotVerified, { type: 'download' });\n }\n if (index_1.asperaSdk.useOldHttpGateway) {\n return (0, http_gateway_sdk_js_1.download)(transferSpec);\n }\n if (transferSpec.tags &&\n transferSpec.tags.aspera &&\n transferSpec.tags.aspera['http-gateway'] &&\n transferSpec.tags.aspera['http-gateway'].expected_size <= index_1.asperaSdk.httpGatewayInBrowserDownloadThreshold) {\n return httpDownloadInBrowser(transferSpec, asperaSdkSpec);\n }\n else {\n return httpDownloadPresigned(transferSpec, asperaSdkSpec);\n }\n};\nexports.httpDownload = httpDownload;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.base64Encoding = exports.getMessageFromError = exports.sendTransferUpdate = exports.getSdkTransfer = exports.httpGatewaySelectFileFolderDialog = exports.handleHttpGatewayDrop = exports.createHtmlInputElement = exports.httpGetTransfer = exports.httpGetAllTransfers = exports.httpRemoveTransfer = void 0;\nvar messages_1 = require(\"../constants/messages\");\nvar helpers_1 = require(\"../helpers/helpers\");\nvar index_1 = require(\"../index\");\nvar http_gateway_sdk_js_1 = require(\"@ibm-aspera/http-gateway-sdk-js\");\n/**\n * HTTP Gateway Core Logic\n * - File/Folder picking\n * - Starting and testing\n *\n * @remarks\n * Most logic is called directly by Desktop SDK functions\n * You may not need to import anything from this file.\n */\n/**\n * Remove a transfer from HTTP Gateway systems\n * @param id - ID of the transfer\n *\n * @returns Promise indicating success\n */\nvar httpRemoveTransfer = function (id) {\n if (index_1.asperaSdk.useOldHttpGateway) {\n (0, http_gateway_sdk_js_1.removeTransfer)(id);\n return Promise.resolve({ removed: true });\n }\n var transfer = index_1.asperaSdk.httpGatewayTransferStore.get(id);\n if (transfer) {\n index_1.asperaSdk.httpGatewayTransferStore.delete(id);\n return Promise.resolve({ removed: true });\n }\n else {\n return Promise.reject((0, helpers_1.generateErrorBody)(messages_1.messages.removeTransferFailed, { reason: 'Not found' }));\n }\n};\nexports.httpRemoveTransfer = httpRemoveTransfer;\n/**\n * Get the list of http gateway transfers\n *\n * @returns list of HTTP Gateway\n */\nvar httpGetAllTransfers = function () {\n if (index_1.asperaSdk.useOldHttpGateway) {\n return (0, http_gateway_sdk_js_1.getAllTransfers)().transfers;\n }\n return Array.from(index_1.asperaSdk.httpGatewayTransferStore.values());\n};\nexports.httpGetAllTransfers = httpGetAllTransfers;\n/**\n * Get a HTTP Gateway transfer by ID\n *\n * @returns a transfer or null\n */\nvar httpGetTransfer = function (id) {\n if (index_1.asperaSdk.useOldHttpGateway) {\n return (0, http_gateway_sdk_js_1.getTransferById)(id);\n }\n return index_1.asperaSdk.httpGatewayTransferStore.get(id);\n};\nexports.httpGetTransfer = httpGetTransfer;\n/**\n * Create HTML input element for file picking\n */\nvar createHtmlInputElement = function () {\n var element = window.document.createElement('input');\n element.type = 'file';\n element.style = 'display: none;';\n window.document.body.appendChild(element);\n return element;\n};\nexports.createHtmlInputElement = createHtmlInputElement;\n/**\n * Handle drop events and store files for HTTP Gateway\n * This works on top of desktop.\n */\nvar handleHttpGatewayDrop = function (items, callback, event) {\n var files = [];\n var callbackCount = 0;\n var callbackFinishCount = 0;\n var finalCallback = function () {\n if (callbackFinishCount >= callbackCount) {\n var finalFiles = files.map(function (file) {\n index_1.asperaSdk.httpGatewaySelectedFiles.set(file.name, file);\n return {\n lastModified: file.lastModified,\n name: file.name,\n size: file.size,\n type: file.type\n };\n });\n callback({ event: event, files: { dataTransfer: { files: finalFiles } } });\n }\n };\n var traverse = function (item) {\n if (item.isFile) {\n item.file(function (file) {\n files.push(file);\n callbackFinishCount++;\n finalCallback();\n });\n }\n else if (item.isDirectory) {\n var dirReader = item.createReader();\n dirReader.readEntries(function (entries) {\n for (var k = 0; k < entries.length; k++) {\n callbackCount++;\n traverse(entries[k]);\n }\n });\n callbackFinishCount++;\n }\n else {\n callbackFinishCount++;\n finalCallback();\n }\n };\n for (var i = 0; i < items.length; i++) {\n var item = items[i].webkitGetAsEntry();\n if (item) {\n callbackCount++;\n traverse(item);\n }\n }\n};\nexports.handleHttpGatewayDrop = handleHttpGatewayDrop;\n/**\n * Open native browser file or folder picker for files\n *\n * @param options - File picker options\n * @param folder - Indicate if choosing folders\n *\n * @returns Promise that resolves with info about the files picked\n */\nvar httpGatewaySelectFileFolderDialog = function (options, folder) {\n if (index_1.asperaSdk.useOldHttpGateway) {\n return (folder ? (0, http_gateway_sdk_js_1.getFoldersForUploadPromise)((options === null || options === void 0 ? void 0 : options.http_gateway_v2_transfer_id) || '') : (0, http_gateway_sdk_js_1.getFilesForUploadPromise)((options === null || options === void 0 ? void 0 : options.http_gateway_v2_transfer_id) || ''));\n }\n var _a = (0, helpers_1.generatePromiseObjects)(), promise = _a.promise, rejecter = _a.rejecter, resolver = _a.resolver;\n var element = (0, exports.createHtmlInputElement)();\n element.multiple = !!(options === null || options === void 0 ? void 0 : options.multiple);\n if (folder) {\n element.webkitdirectory = true;\n }\n element.oncancel = function () {\n rejecter({ debugData: { code: -32002, message: messages_1.messages.filePickerCancel } });\n };\n element.onchange = function () {\n var returnFiles = [];\n for (var i = 0; i < element.files.length; i++) {\n var file = element.files[i];\n returnFiles.push(file);\n index_1.asperaSdk.httpGatewaySelectedFiles.set(file.name, file);\n }\n resolver({\n dataTransfer: {\n files: returnFiles.map(function (file) {\n return {\n size: file.size,\n lastModified: file.lastModified,\n name: file.webkitRelativePath || file.name,\n type: file.type,\n };\n })\n }\n });\n };\n element.click();\n return promise;\n};\nexports.httpGatewaySelectFileFolderDialog = httpGatewaySelectFileFolderDialog;\n/**\n * Get a generic transfer object for HTTP Gateway transfers.\n *\n * @param transferSpec - TransferSpec being provided for the HTTP Gateway transfer\n *\n * @returns a transfer object to track status and send to consumers\n */\nvar getSdkTransfer = function (transferSpec) {\n return {\n uuid: (0, helpers_1.randomUUID)(),\n transfer_spec: transferSpec,\n current_file: '',\n add_time: new Date().toISOString(),\n file_counts: {\n attempted: 0,\n completed: 0,\n failed: 0,\n skipped: 0,\n },\n end_time: '',\n explorer_path: '',\n status: 'queued',\n bytes_written: 0,\n bytes_expected: 0,\n calculated_rate_kbps: 0,\n elapsed_usec: 0,\n percentage: 0,\n title: '',\n remaining_usec: 0,\n httpGatewayTransfer: true,\n httpDownloadExternalHandle: false,\n };\n};\nexports.getSdkTransfer = getSdkTransfer;\n/**\n * Send a transfer update through the SDK\n *\n * @param transfer - Transsfer object to send to consumers\n */\nvar sendTransferUpdate = function (transfer) {\n index_1.asperaSdk.httpGatewayTransferStore.set(transfer.uuid, transfer);\n index_1.asperaSdk.activityTracking.handleTransferActivity({\n type: 'transferUpdated',\n data: { transfers: [transfer] },\n });\n};\nexports.sendTransferUpdate = sendTransferUpdate;\n/**\n * Try to parse and get a useful string from API calls for HTTP Gateway\n *\n * @param error - Error from API call for Gateway\n *\n * @returns a string to use for errors\n */\nvar getMessageFromError = function (error) {\n var data = (0, helpers_1.safeJsonParse)(error);\n var message = messages_1.messages.httpNetworkFail;\n var code = 500;\n if (data && typeof data === 'object') {\n message = data.message || data.description || messages_1.messages.httpNetworkFail;\n code = data.code || 500;\n }\n else if (error && typeof error === 'object') {\n message = error.message || error.description || messages_1.messages.httpNetworkFail;\n code = error.code || 500;\n }\n else if (typeof error === 'string') {\n message = error;\n }\n return {\n message: message,\n code: code,\n };\n};\nexports.getMessageFromError = getMessageFromError;\nvar base64Encoding = function (jsonString) {\n var bytes = new TextEncoder().encode(jsonString);\n var binString = Array.from(bytes, function (byte) {\n return String.fromCodePoint(byte);\n }).join('');\n return btoa(binString);\n};\nexports.base64Encoding = base64Encoding;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.removeDropzone = exports.createDropzone = exports.upload = exports.startWebSocketTransfer = exports.getFoldersForUploadPromise = exports.getFoldersForUpload = exports.getFilesForUploadPromise = exports.getFilesForUpload = exports.addFolderPickerToForm = exports.addFilePickerToForm = exports.startSendingData = exports.handleSoftwareModeSlicing = exports.handleBlobSlicing = exports.updateTransferActivity = void 0;\nvar index_1 = require(\"../index\");\nvar helpers_1 = require(\"../helpers/helpers\");\nvar messages_1 = require(\"../constants/messages\");\nvar models_1 = require(\"../models/models\");\nvar constants_1 = require(\"../constants/constants\");\nvar core_1 = require(\"./core\");\n/**\n * Used to update the transfer in the activity monitor for a specific transfer. If transfer not found it is ignored\n *\n * @param id the id of the transfer to update\n * @param status the status of the transfer\n * @param total the total bytes of the transfer\n * @param current the amount of bytes transferred thus far\n * @param error error body\n * @param currentFile the current file being transferred\n */\nvar updateTransferActivity = function (id, status, total, current, error, currentFile) {\n var transfer = index_1.asperaHttpGateway.activityTracking.getTransferById(id);\n if (!transfer || transfer.status === 'canceled' || transfer.status === 'completed') {\n return;\n }\n transfer.status = status;\n transfer.bytes_expected = total ? total : transfer.bytes_expected;\n transfer.bytes_written = current ? current : transfer.bytes_written;\n if (currentFile) {\n transfer.current_file = currentFile.name;\n }\n if (status === 'completed' || status === 'failed') {\n if (index_1.asperaHttpGateway.activityTracking.queuedUploads.length) {\n var transferToStart = index_1.asperaHttpGateway.activityTracking.queuedUploads.shift();\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n (0, exports.startWebSocketTransfer)(transferToStart.id, transferToStart.transferSpec, transferToStart.files, undefined, { serverUrlOverride: transfer.serverUrlOverride || undefined });\n }\n }\n if (status === 'completed') {\n transfer.setEndTime();\n index_1.asperaHttpGateway.globals.deleteFormFromContainer(id.split(constants_1.keySplit)[0]);\n }\n else if (status === 'failed') {\n transfer.error_desc = error.reason;\n transfer.error_code = error.code;\n index_1.asperaHttpGateway.globals.deleteFormFromContainer(id.split(constants_1.keySplit)[0]);\n }\n index_1.asperaHttpGateway.activityTracking.triggerActivityCallbacks();\n};\nexports.updateTransferActivity = updateTransferActivity;\n/**\n * Slice a file and read it in with FileReader. This uses the callback to send the read event.\n * This function supports falling back to vendor prefix versions\n * of the slice function for older Firefox and Webkit browsers.\n *\n * @param file the file to slice\n * @param filePosition the start position of the file to slice\n * @param chunksize the end position of the file to slice\n * @param callback the callback to use for FileReader\n * @param fileReader the FileReader to use for reading in data\n */\nvar handleBlobSlicing = function (file, filePosition, chunksize, callback, fileReader) {\n var chunk;\n if (typeof file.slice === 'function') {\n chunk = file.slice(filePosition, filePosition + chunksize);\n }\n else if (typeof file.mozSlice === 'function') {\n chunk = file.mozSlice(filePosition, filePosition + chunksize);\n }\n else if (typeof file.webkitSlice === 'function') {\n chunk = file.webkitSlice(filePosition, filePosition + chunksize);\n }\n fileReader.onload = callback;\n fileReader[(0, helpers_1.getFeatureFlag)('noBase64Encoding') ? 'readAsArrayBuffer' : 'readAsDataURL'](chunk);\n};\nexports.handleBlobSlicing = handleBlobSlicing;\n/**\n * Software mode version of `handleBlobSlicing` for dealing with Buffer instead of File API\n *\n * @param file the file to slice (data string is a FileSystem readFile in binary format)\n * @param filePosition the start position of the file to slice\n * @param chunksize the end position of the file to slice\n * @param callback the callback to use for triggering event on slice\n *\n * @example\n * ```javascript\n * const fileInfo = fs.statSync(filePointer);\n * const file = {\n * data: fs.readFileSync(filePointer, {encoding: 'binary'}),\n * size: fileInfo.size,\n * type: 'file',\n * lastModified: fileInfo.mtime.toISOString(),\n * name: filePointer,\n * }\n * ```\n */\nvar handleSoftwareModeSlicing = function (file, filePosition, chunksize, callback) {\n var chunk = file.data.slice(filePosition, filePosition + chunksize);\n callback({\n total: chunk.length,\n target: {\n result: (0, helpers_1.getFeatureFlag)('noBase64Encoding') ? chunk : Buffer.from(chunk).toString('base64'),\n }\n });\n};\nexports.handleSoftwareModeSlicing = handleSoftwareModeSlicing;\n/**\n * Start sending chunked data through the opened websocket\n *\n * @param socket the WebSocket to use for data transfer\n * @param transferSpec the transferSpec to send for the upload\n * @param id the ID of the transfer for monitoring\n * @param queue the array of functions to call for sending data\n * @param fileReaderToUse the file reader to use for this transfer\n */\nvar startSendingData = function (socket, transferSpec, files, id, queue, fileReaderToUse) {\n var totalFileSize = 0;\n var totalSentSize = 0;\n files.forEach(function (file) {\n totalFileSize += file.size;\n });\n (0, exports.updateTransferActivity)(id, 'running', totalFileSize);\n files.forEach(function (file, index) {\n var filePiece = 0;\n var totalSlices = Math.ceil(file.size / index_1.asperaHttpGateway.globals.chunkSize);\n var _loop_1 = function (filePosition) {\n queue.push(function () {\n var sendChunkCallback = function (event) {\n var transfer = index_1.asperaHttpGateway.activityTracking.getTransferById(id);\n if (transfer && transfer.status === 'failed') {\n return;\n }\n if (transfer && transfer.status === 'canceled') {\n socket.close();\n return;\n }\n var binaryString = event.target.result;\n try {\n if ((0, helpers_1.getFeatureFlag)('noBase64Encoding')) {\n if (filePiece === 0) {\n socket.send(JSON.stringify({\n slice_upload: {\n name: file.asperaDropPath || file.webkitRelativePath || file.name,\n type: file.type,\n size: file.size,\n slice: filePiece,\n total_slices: totalSlices,\n fileIndex: index\n }\n }));\n }\n socket.send(binaryString);\n if (filePiece === totalSlices - 1) {\n socket.send(JSON.stringify({\n slice_upload: {\n name: file.asperaDropPath || file.webkitRelativePath || file.name,\n type: file.type,\n size: file.size,\n slice: filePiece,\n total_slices: totalSlices,\n fileIndex: index\n }\n }));\n }\n }\n else {\n if (typeof event.target.result === 'string' && event.target.result.indexOf('base64,') > -1) {\n binaryString = event.target.result.split('base64,')[1];\n }\n socket.send(JSON.stringify({\n slice_upload: {\n name: file.asperaDropPath || file.webkitRelativePath || file.name,\n type: file.type,\n size: file.size,\n data: binaryString,\n slice: filePiece,\n total_slices: totalSlices,\n fileIndex: index\n }\n }));\n }\n }\n catch (error) {\n (0, exports.updateTransferActivity)(id, 'failed');\n (0, helpers_1.errorLog)(messages_1.messages.unableToParseDataForUpload, error);\n throw Error();\n }\n filePiece++;\n if (event.total) {\n totalSentSize += event.total;\n }\n var foundTransfer = index_1.asperaHttpGateway.activityTracking.getTransferById(id);\n if (foundTransfer) {\n foundTransfer.recentPacketTransfer(event.total);\n }\n (0, exports.updateTransferActivity)(id, 'running', undefined, totalSentSize, undefined, file);\n queue.shift();\n };\n if (index_1.asperaHttpGateway.globals.softwareMode) {\n (0, exports.handleSoftwareModeSlicing)(file, filePosition, index_1.asperaHttpGateway.globals.chunkSize, sendChunkCallback);\n }\n else {\n (0, exports.handleBlobSlicing)(file, filePosition, index_1.asperaHttpGateway.globals.chunkSize, sendChunkCallback, fileReaderToUse);\n }\n });\n };\n for (var filePosition = 0; filePosition < file.size; filePosition += index_1.asperaHttpGateway.globals.chunkSize) {\n _loop_1(filePosition);\n }\n });\n try {\n socket.send(JSON.stringify({\n transfer_spec: transferSpec\n }));\n }\n catch (error) {\n (0, exports.updateTransferActivity)(id, 'failed');\n (0, helpers_1.errorLog)(messages_1.messages.unableToParseDataForUpload, error);\n throw Error();\n }\n};\nexports.startSendingData = startSendingData;\n/**\n * Add file input to a form for getting files from the local computer\n *\n * @param form form to add new file input to\n */\nvar addFilePickerToForm = function (form) {\n var element = document.createElement('input');\n element.type = 'file';\n element.multiple = true;\n element.name = 'file-' + form.children.length;\n form.appendChild(element);\n return element;\n};\nexports.addFilePickerToForm = addFilePickerToForm;\n/**\n * Add file input to a form with folder support for getting folders from the local computer\n *\n * NOTE: this cannot stop files from being picked.\n *\n * @param form form to add new file input to\n */\nvar addFolderPickerToForm = function (form) {\n var element = document.createElement('input');\n element.type = 'file';\n element.multiple = true;\n element.webkitdirectory = true;\n element.mozdirectory = true;\n element.msdirectory = true;\n element.odirectory = true;\n element.directory = true;\n element.name = 'file-' + form.children.length;\n form.appendChild(element);\n return element;\n};\nexports.addFolderPickerToForm = addFolderPickerToForm;\n/**\n * Request file picker for choosing files\n *\n * @param id the ID of the form to use (must be unique to each transfer grouping)\n * @param callback the function to call once the files are added\n */\nvar getFilesForUpload = function (callback, id) {\n if (!index_1.asperaHttpGateway.isReady) {\n (0, helpers_1.errorLog)(messages_1.messages.serverNotVerified);\n return;\n }\n var formToUse = index_1.asperaHttpGateway.globals.createOrUseForm(id);\n var inputFile = (0, exports.addFilePickerToForm)(formToUse);\n inputFile.onchange = function () {\n var files = [];\n if (!inputFile.files) {\n callback({ dataTransfer: { files: files } });\n return;\n }\n for (var i = 0; i < inputFile.files.length; i++) {\n files.push(new models_1.FileSelected(inputFile.files[i]));\n }\n callback({ dataTransfer: { files: files } });\n };\n inputFile.click();\n};\nexports.getFilesForUpload = getFilesForUpload;\n/**\n * Request file picker for choosing files and use promise.\n * Uses `getFilesForUpload` logic wrapped in a Promise\n *\n * @param id the ID of the form to use (must be unique to each transfer grouping)\n *\n * @returns promise that resolves with the files (error state is never used)\n */\nvar getFilesForUploadPromise = function (id) {\n var promiseToUse = (0, helpers_1.generatePromiseObjects)();\n var promiseCallback = function (data) {\n promiseToUse.resolver(data);\n };\n (0, exports.getFilesForUpload)(promiseCallback, id);\n return promiseToUse.promise;\n};\nexports.getFilesForUploadPromise = getFilesForUploadPromise;\n/**\n * Request folder picker for choosing folders\n * @remarks Feature not supported. Will be introduced in future release.\n *\n * @param id the ID of the form to use (must be unique to each transfer grouping)\n * @param callback the function to call once the folders are added\n */\nvar getFoldersForUpload = function (callback, id) {\n if (!index_1.asperaHttpGateway.isReady) {\n (0, helpers_1.errorLog)(messages_1.messages.serverNotVerified);\n return;\n }\n var formToUse = index_1.asperaHttpGateway.globals.createOrUseForm(id);\n var inputFile = (0, exports.addFolderPickerToForm)(formToUse);\n inputFile.onchange = function () {\n var files = [];\n var folders = new Map();\n if (!inputFile.files) {\n callback({ dataTransfer: { files: files } });\n return;\n }\n for (var i = 0; i < inputFile.files.length; i++) {\n var file = inputFile.files[i];\n if (file.webkitRelativePath) {\n // TODO: Does Windows return using forward slash?\n var rootFolder = file.webkitRelativePath.split('/')[0];\n if (!folders.get(rootFolder)) {\n folders.set(rootFolder, { path: rootFolder, files: [] });\n }\n folders.get(rootFolder).files.push(file);\n }\n else {\n files.push(new models_1.FileSelected(inputFile.files[i]));\n }\n }\n var formFolderData = index_1.asperaHttpGateway.globals.getOrCreateFolderDataList(id);\n (0, helpers_1.iterableToArray)(folders.values()).forEach(function (folder) {\n formFolderData.set(folder.path, folder);\n files.push(new models_1.FileSelected({ name: folder.path, size: 0, type: 'inode/directory' }));\n });\n callback({ dataTransfer: { files: files } });\n };\n inputFile.click();\n};\nexports.getFoldersForUpload = getFoldersForUpload;\n/**\n * Request folder picker for choosing folders and use promise.\n * Uses `getFoldersForUpload` logic wrapped in a Promise\n * @remarks Feature not supported. Will be introduced in future release.\n *\n * @param id the ID of the form to use (must be unique to each transfer grouping)\n *\n * @returns promise that resolves with the folders/file list (error state is never used)\n */\nvar getFoldersForUploadPromise = function (id) {\n var promiseToUse = (0, helpers_1.generatePromiseObjects)();\n var promiseCallback = function (data) {\n promiseToUse.resolver(data);\n };\n (0, exports.getFoldersForUpload)(promiseCallback, id);\n return promiseToUse.promise;\n};\nexports.getFoldersForUploadPromise = getFoldersForUploadPromise;\n/**\n * Start the Websockets and transfer\n *\n * @param id the ID to use for the transfer\n * @param transferSpec the transferSpec of the transfer\n * @param files the files to transfer\n * @param promiseInfo the promise data to resolve for the transfer if needed\n */\nvar startWebSocketTransfer = function (id, transferSpec, files, promiseInfo, options) {\n if (options === void 0) { options = {}; }\n var queue = [];\n var fileReaderToUse = typeof FileReader === 'function' ? new FileReader() : null;\n var finalServerUrl = options.serverUrlOverride ? (0, core_1.cleanupServerUrl)(options.serverUrlOverride) : index_1.asperaHttpGateway.globals.serverUrl;\n var socket = new WebSocket((0, helpers_1.getWebsocketUrl)(finalServerUrl, location.protocol));\n socket.onopen = function (data) {\n if (promiseInfo) {\n promiseInfo.resolver(data);\n }\n index_1.asperaHttpGateway.activityTracking.setTransfer(id, new models_1.HttpTransfer(id, transferSpec, files, undefined, { serverUrlOverride: options.serverUrlOverride }));\n (0, exports.startSendingData)(socket, transferSpec, files, id, queue, fileReaderToUse);\n };\n socket.onclose = function (data) {\n var transfer = index_1.asperaHttpGateway.activityTracking.getTransferById(id);\n if (transfer && transfer.status !== 'completed') {\n (0, exports.updateTransferActivity)(id, 'failed', undefined, undefined, data);\n (0, helpers_1.errorLog)(messages_1.messages.websocketClosedUnexpect, { error: data });\n }\n };\n socket.onmessage = function (data) {\n if (data.data === 'end upload') {\n // TODO: check if fileReader is available due to dupe `end upload` events\n if (queue.length) {\n queue[0]();\n }\n else {\n setTimeout(function () {\n socket.close(1000);\n }, 5000);\n (0, exports.updateTransferActivity)(id, 'completed');\n }\n }\n };\n socket.onerror = function (error) {\n (0, helpers_1.errorLog)(messages_1.messages.websocketClosedUnexpect, error);\n (0, exports.updateTransferActivity)(id, 'failed', undefined, undefined, error);\n if (promiseInfo) {\n promiseInfo.rejecter(error);\n }\n };\n};\nexports.startWebSocketTransfer = startWebSocketTransfer;\n/**\n * Start a HTTP Gateway upload.\n *\n * @param transferSpec standard Connect transferSpec for uploading\n * @param id the ID of the form group to use for files\n * @param memoryFilesToLoad array of files from memory to use. These will be used all the time and if transferSpec does not contain them an error will raise.\n * @param options options for customizing the upload\n *\n * @returns a promise that resolves if upload is successful and rejects if upload cannot be started\n */\nvar upload = function (transferSpec, id, memoryFilesToLoad, options) {\n if (options === void 0) { options = {}; }\n if (!index_1.asperaHttpGateway.isReady) {\n (0, helpers_1.errorLog)(messages_1.messages.serverNotVerified);\n return new Promise(function (resolve, reject) {\n reject((0, helpers_1.generateErrorBody)(messages_1.messages.serverNotVerified));\n });\n }\n if (!(0, helpers_1.isValidTransferSpec)(transferSpec)) {\n (0, helpers_1.errorLog)(messages_1.messages.notValidTransferSpec);\n return new Promise(function (resolve, reject) {\n reject((0, helpers_1.generateErrorBody)(messages_1.messages.notValidTransferSpec, { transferSpec: transferSpec }));\n });\n }\n var files = (0, helpers_1.getFilesForTransfer)(id, transferSpec);\n if (memoryFilesToLoad) {\n memoryFilesToLoad.forEach(function (file) {\n files.push(file);\n });\n }\n var folderExplodeData = (0, helpers_1.folderTransferSpecExplode)(id, transferSpec);\n if (folderExplodeData.files.length) {\n folderExplodeData.files.forEach(function (file) {\n files.push(file);\n });\n transferSpec.paths = folderExplodeData.newPath;\n }\n if (!files.length) {\n (0, helpers_1.errorLog)(messages_1.messages.unableToGetFilesForUpload);\n return new Promise(function (resolve, reject) {\n reject((0, helpers_1.generateErrorBody)(messages_1.messages.unableToGetFilesForUpload, { transferSpec: transferSpec, files: files }));\n });\n }\n else if (files.length !== transferSpec.paths.length) {\n (0, helpers_1.errorLog)(messages_1.messages.unauthorizedFilesForUpload);\n return new Promise(function (resolve, reject) {\n reject((0, helpers_1.generateErrorBody)(messages_1.messages.unauthorizedFilesForUpload, { transferSpec: transferSpec, files: files }));\n });\n }\n var promiseInfo = (0, helpers_1.generatePromiseObjects)();\n id = \"\".concat(id).concat(constants_1.keySplit).concat((Math.random() * 10000000).toFixed());\n var currentRunningTransfers = index_1.asperaHttpGateway.activityTracking.getActiveTransfers();\n if (currentRunningTransfers.length >= index_1.asperaHttpGateway.globals.concurrentUploads) {\n index_1.asperaHttpGateway.activityTracking.queuedUploads.push({ id: id, transferSpec: transferSpec, files: files });\n index_1.asperaHttpGateway.activityTracking.setTransfer(id, new models_1.HttpTransfer(id, transferSpec, files, 'queued', { serverUrlOverride: options.serverUrlOverride }));\n setTimeout(function () {\n promiseInfo.resolver({});\n }, 100);\n }\n else {\n (0, exports.startWebSocketTransfer)(id, transferSpec, files, promiseInfo, options);\n }\n return promiseInfo.promise;\n};\nexports.upload = upload;\n/**\n * Create a dropzone linked to a form grouping.\n * All drops are stored in same place to allow body drops.\n *\n * @param callback the function to call once the files are dropped\n * @param elementSelector the selector of the element on the page that should watch for drop events\n */\nvar createDropzone = function (callback, elementSelector) {\n var elements = document.querySelectorAll(elementSelector);\n if (!elements || !elements.length) {\n (0, helpers_1.errorLog)(messages_1.messages.unableToFindElementOnPage);\n return;\n }\n index_1.asperaHttpGateway.globals.createOrUseForm(constants_1.dropContainerName);\n var currentFiles = index_1.asperaHttpGateway.globals.getOrCreateFormFileListFromDrop(constants_1.dropContainerName);\n var formFolderData = index_1.asperaHttpGateway.globals.getOrCreateFolderDataList(constants_1.dropContainerName);\n var dragEvent = function (event) {\n event.preventDefault();\n };\n var dropEvent = function (event) {\n event.preventDefault();\n var files = [];\n if (event.dataTransfer && event.dataTransfer.items && event.dataTransfer.items.length && event.dataTransfer.items[0] && event.dataTransfer.items[0].kind !== 'string') {\n try {\n var _loop_2 = function (i) {\n var fileEntry = event.dataTransfer.items[i].webkitGetAsEntry();\n if (fileEntry.isFile) {\n var file = event.dataTransfer.items[i].getAsFile();\n currentFiles.push(file);\n files.push({\n lastModified: file.lastModified,\n name: file.name,\n size: file.size,\n type: file.type\n });\n }\n else if (fileEntry.isDirectory) {\n var folder_1 = {\n path: fileEntry.name,\n files: [],\n };\n files.push({\n lastModified: 0,\n name: fileEntry.name,\n size: 0,\n type: 'inode/directory'\n });\n var recursiveReader_1 = function (entry) {\n var reader = entry.createReader();\n reader.readEntries(function (entries) {\n entries.forEach(function (entryItem) {\n if (entryItem.isFile) {\n entryItem.file(function (file) {\n file.asperaDropPath = entryItem.fullPath;\n folder_1.files.push(file);\n });\n }\n else if (entryItem.isDirectory) {\n recursiveReader_1(entryItem);\n }\n });\n formFolderData.set(folder_1.path, folder_1);\n });\n };\n recursiveReader_1(fileEntry);\n }\n };\n for (var i = 0; i < event.dataTransfer.items.length; i++) {\n _loop_2(i);\n }\n }\n catch (error) {\n (0, helpers_1.errorLog)(messages_1.messages.unableToReadFolder, { event: event, error: error });\n alert(messages_1.messages.unableToReadFolder);\n }\n }\n else if (event.dataTransfer.files) {\n for (var i = 0; i < event.dataTransfer.files.length; i++) {\n currentFiles.push(event.dataTransfer.files[i]);\n files.push(event.dataTransfer.files[i]);\n }\n }\n callback({ event: event, files: { dataTransfer: { files: files } } });\n };\n elements.forEach(function (element) {\n element.addEventListener('dragover', dragEvent);\n element.addEventListener('drop', dropEvent);\n index_1.asperaHttpGateway.globals.dropzonesCreated.set(elementSelector, [{ event: 'dragover', callback: dragEvent }, { event: 'drop', callback: dropEvent }]);\n });\n};\nexports.createDropzone = createDropzone;\n/**\n * Remove dropzone added by gateway.\n *\n * @param elementSelector the selector of the element on the page that should remove\n */\nvar removeDropzone = function (elementSelector) {\n var foundDropzone = index_1.asperaHttpGateway.globals.dropzonesCreated.get(elementSelector);\n if (foundDropzone) {\n foundDropzone.forEach(function (data) {\n var elements = document.querySelectorAll(elementSelector);\n if (elements && elements.length) {\n elements.forEach(function (element) {\n element.removeEventListener(data.event, data.callback);\n });\n }\n });\n }\n};\nexports.removeDropzone = removeDropzone;\nexports.default = {\n upload: exports.upload,\n updateTransferActivity: exports.updateTransferActivity,\n startSendingData: exports.startSendingData,\n addFilePickerToForm: exports.addFilePickerToForm,\n createDropzone: exports.createDropzone,\n removeDropzone: exports.removeDropzone,\n getFilesForUploadPromise: exports.getFilesForUploadPromise,\n getFilesForUpload: exports.getFilesForUpload,\n getFoldersForUploadPromise: exports.getFoldersForUploadPromise,\n getFoldersForUpload: exports.getFoldersForUpload,\n};\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./client\"), exports);\n__exportStar(require(\"./interfaces\"), exports);\n__exportStar(require(\"./models\"), exports);\n__exportStar(require(\"./server\"), exports);\n__exportStar(require(\"./server-and-client\"), exports);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.websocketService = exports.WebsocketService = void 0;\nvar helpers_1 = require(\"./helpers\");\nvar messages_1 = require(\"../constants/messages\");\nvar index_1 = require(\"../index\");\nvar WebsocketService = /** @class */ (function () {\n function WebsocketService() {\n var _this = this;\n /** A map of requested subscription names and the callback for them */\n this.sockets = new Map();\n /** Indicator if the websocket is already connected */\n this.isConnected = false;\n /** Global promise object that resolves when init completes */\n this.initPromise = (0, helpers_1.generatePromiseObjects)();\n /**\n * This function handles when a connection is opened\n */\n this.handleOpen = function () {\n if (_this.isConnected || !_this.joinChannel()) {\n return;\n }\n _this.isConnected = true;\n _this.updateRpcPort();\n _this.notifyEvent('RECONNECT');\n };\n /**\n * This function handles completed subscription\n */\n this.handleClose = function () {\n if (_this.isConnected) {\n _this.isConnected = false;\n _this.notifyEvent('CLOSED');\n }\n if (!_this.globalSocket) {\n _this.handleNotReady();\n return;\n }\n _this.reconnect();\n };\n /**\n * This function handles errors received from the websocket\n */\n this.handleError = function () {\n (0, helpers_1.errorLog)(messages_1.messages.websocketClosedError);\n };\n /**\n * This function handles messages received from the websocket\n */\n this.handleMessage = function (message) {\n var data = (0, helpers_1.safeJsonParse)(message.data);\n // Message we get on subscription\n if (data && data.id === 1) {\n _this.initPromise.resolver(data);\n return;\n }\n var socket = _this.sockets.get(data.method);\n if (socket && data.params) {\n socket(data.params);\n }\n };\n }\n /** Log call for not being ready */\n WebsocketService.prototype.handleNotReady = function () {\n (0, helpers_1.errorLog)(messages_1.messages.websocketNotReady);\n };\n /**\n * This function joins the channel to be able to subscribe to events\n */\n WebsocketService.prototype.joinChannel = function () {\n if (!this.globalSocket) {\n this.handleNotReady();\n return false;\n }\n this.globalSocket.send((0, helpers_1.safeJsonString)({ jsonrpc: '2.0', method: 'subscribe_transfer_activity', params: [index_1.asperaSdk.globals.appId], id: 1 }));\n return true;\n };\n /**\n * This function registers clients to listen to a certain message name. Returns any to allow functions to declare proper type\n *\n * @param messageName - the name of messages to listen to (one message name per subscription)\n * @param callback - the callback function\n */\n WebsocketService.prototype.registerMessage = function (messageName, callback) {\n if (!this.sockets.get(messageName)) {\n this.sockets.set(messageName, function (data) {\n callback(data.result);\n });\n }\n };\n /**\n *\n * @param callback This function registers clients to a certain WebSocket event.\n *\n * @param callback - the callback function to call with the event name.\n */\n WebsocketService.prototype.registerEvent = function (callback) {\n this.eventListener = callback;\n this.eventListener(this.isConnected ? 'RECONNECT' : 'CLOSED');\n };\n /**\n * This function starts the websocket subscription with the websocket provider\n *\n * @returns a promise that resolves when the websocket connection is established\n */\n WebsocketService.prototype.init = function () {\n this.connect();\n return this.initPromise.promise;\n };\n WebsocketService.prototype.connect = function () {\n var _this = this;\n this.getWebSocketConnection(33024, index_1.asperaSdk.globals.supportMultipleUsers ? 33029 : 33024)\n .then(function (webSocket) {\n _this.globalSocket = webSocket;\n _this.globalSocket.onerror = _this.handleError;\n _this.globalSocket.onclose = _this.handleClose;\n _this.globalSocket.onopen = _this.handleOpen;\n _this.globalSocket.onmessage = _this.handleMessage;\n _this.handleOpen();\n }).catch(function () {\n _this.reconnect();\n });\n };\n WebsocketService.prototype.reconnect = function () {\n var _this = this;\n if (this.globalSocket) {\n this.globalSocket.close();\n }\n setTimeout(function () {\n _this.connect();\n }, 1000);\n };\n WebsocketService.prototype.getWebSocketConnection = function (startPort, endPort) {\n var webSocketUrl = (0, helpers_1.getWebsocketUrl)(index_1.asperaSdk.globals.asperaAppUrl);\n var checkPort = function (port) {\n return new Promise(function (resolve, reject) {\n var webSocket = new WebSocket(\"\".concat(webSocketUrl, \":\").concat(port));\n webSocket.onopen = function () {\n resolve(webSocket);\n };\n webSocket.onerror = function () {\n reject(\"Connection failed on port \".concat(port));\n };\n });\n };\n return new Promise(function (resolve, reject) {\n var connectPort = function (port) {\n if (port > endPort) {\n return reject('No available WebSocket connection found');\n }\n checkPort(port)\n .then(function (ws) { return resolve(ws); })\n .catch(function (error) {\n connectPort(port + 1);\n });\n };\n connectPort(startPort);\n });\n };\n WebsocketService.prototype.notifyEvent = function (event) {\n if (typeof this.eventListener === 'function') {\n this.eventListener(event);\n }\n };\n WebsocketService.prototype.updateRpcPort = function () {\n if (!this.globalSocket) {\n return;\n }\n var url = new URL(this.globalSocket.url);\n index_1.asperaSdk.globals.rpcPort = Number(url.port);\n };\n return WebsocketService;\n}());\nexports.WebsocketService = WebsocketService;\nexports.websocketService = new WebsocketService();\nexports.default = WebsocketService;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.safeJsonParse = exports.safeJsonString = exports.getInstallerUrls = exports.isSafari = exports.isValidURL = exports.throwError = exports.randomUUID = exports.getCurrentPlatform = exports.getWebsocketUrl = exports.isValidTransferSpec = exports.generateErrorBody = exports.errorLog = exports.generatePromiseObjects = void 0;\nvar constants_1 = require(\"../constants/constants\");\n/**\n * Generates promise object that can be resolved or rejected via functions\n *\n * @returns an object containing the promise, the resolver and rejecter\n */\nvar generatePromiseObjects = function () {\n var resolver;\n var rejecter;\n var promise = new Promise(function (resolve, reject) {\n resolver = resolve;\n rejecter = reject;\n });\n return {\n promise: promise,\n resolver: resolver,\n rejecter: rejecter\n };\n};\nexports.generatePromiseObjects = generatePromiseObjects;\n/**\n * Log errors from Aspera SDK\n *\n * @param message the message indicating the error encountered\n * @param debugData the data with useful debugging information\n */\nvar errorLog = function (message, debugData) {\n if (debugData && debugData.code && debugData.message) {\n debugData = {\n code: debugData.code,\n message: debugData.message,\n data: debugData.data\n };\n }\n if (typeof window === 'object') {\n if (!Array.isArray(window.asperaSdkLogs)) {\n window.asperaSdkLogs = [];\n }\n window.asperaSdkLogs.push({ message: message, debugData: debugData });\n }\n console.warn(\"Aspera SDK: \".concat(message), debugData);\n};\nexports.errorLog = errorLog;\n/**\n * Generate error object for rejecter responses\n *\n * @param message the message indicating the error encountered\n * @param debugData the data with useful debugging information\n *\n * @returns object containing standardized error response\n */\nvar generateErrorBody = function (message, debugData) {\n var errorResponse = {\n error: true,\n message: message\n };\n if (debugData && debugData.code && debugData.message) {\n errorResponse.debugData = {\n code: debugData.code,\n message: debugData.message,\n data: debugData.data\n };\n }\n return errorResponse;\n};\nexports.generateErrorBody = generateErrorBody;\n/**\n * Validate if transferSpec is valid for server communication\n *\n * @param transferSpec the transferSpec to test\n *\n * @returns boolean indicating whether supplied transferSpec is valid\n */\nvar isValidTransferSpec = function (transferSpec) {\n if (transferSpec &&\n typeof transferSpec === 'object' &&\n typeof transferSpec.direction === 'string' &&\n typeof transferSpec.remote_host === 'string' &&\n Array.isArray(transferSpec.paths)) {\n return true;\n }\n return false;\n};\nexports.isValidTransferSpec = isValidTransferSpec;\n/**\n * Returns a string indicating the websocket URL to use for talking to the server\n *\n * @returns a string of the full Websocket URL\n */\nvar getWebsocketUrl = function (serverUrl) {\n var wsProtocol;\n if (serverUrl.indexOf('http:') === 0) {\n wsProtocol = 'ws';\n }\n else if (serverUrl.indexOf('https:') === 0) {\n wsProtocol = 'wss';\n }\n var url = serverUrl.replace('http://', '//').replace('https://', '//');\n return \"\".concat(wsProtocol, \":\").concat(url);\n};\nexports.getWebsocketUrl = getWebsocketUrl;\n/**\n * Simple function to get the current platform.\n *\n * @returns a string indicating the current platform\n */\nvar getCurrentPlatform = function () {\n var ua = navigator.userAgent;\n if (/Mac/.test(ua)) {\n return 'macos';\n }\n else if (/Win/.test(ua)) {\n return 'windows';\n }\n else if (/Linux/.test(ua)) {\n return 'linux';\n }\n else {\n return 'unknown';\n }\n};\nexports.getCurrentPlatform = getCurrentPlatform;\n/**\n * Function used to create a random UUID\n *\n * @returns string\n */\nvar randomUUID = function () {\n var _a;\n var fallback = function () {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {\n var r = Number(((new Date().getTime() + 16) * Math.random()).toFixed()) % 16;\n if (c !== 'x') {\n // eslint-disable-next-line no-bitwise\n r = r & 0x3 | 0x8;\n }\n return r.toString(16);\n });\n };\n return ((_a = window.crypto) === null || _a === void 0 ? void 0 : _a.randomUUID) ? window.crypto.randomUUID() : fallback();\n};\nexports.randomUUID = randomUUID;\n/**\n * Return a rejected promise\n *\n * @param message the message indicating the error encountered\n * @param debugData the data with useful debugging information\n *\n * @returns a rejected promise\n */\nvar throwError = function (message, debugData) {\n (0, exports.errorLog)(message, debugData);\n return new Promise(function (resolve, reject) {\n reject((0, exports.generateErrorBody)(message, debugData));\n });\n};\nexports.throwError = throwError;\n/**\n * Check if the given string is a valid URL\n *\n * @param url string to check if valid URL\n *\n * @returns boolean\n */\nvar isValidURL = function (url) {\n try {\n new URL(url);\n return true;\n }\n catch (error) {\n return false;\n }\n};\nexports.isValidURL = isValidURL;\n/**\n * Checks if the current browser is Safari.\n * @returns {boolean} Whether the browser is Safari.\n */\nvar isSafari = function () {\n return /^((?!chrome|android).)*safari/i.test(navigator.userAgent) && !window.MSStream;\n};\nexports.isSafari = isSafari;\n/**\n * Get the URLs for installer management.\n *\n * @returns Info on URLs where installers live\n */\nvar getInstallerUrls = function () {\n return {\n base: constants_1.baseInstallerUrl,\n latest: constants_1.installerUrl,\n };\n};\nexports.getInstallerUrls = getInstallerUrls;\n/**\n * Try to stringify a JSON string and log failures\n *\n * @param json - Object to make into a string\n *\n * @returns string representing JSON or empty string on error\n */\nvar safeJsonString = function (json) {\n try {\n return JSON.stringify(json);\n }\n catch (error) {\n (0, exports.errorLog)('safeJsonString: unable to stringify JSON', { error: error, json: json });\n return '';\n }\n};\nexports.safeJsonString = safeJsonString;\n/**\n * Try to parse a JSON string and log failures\n *\n * @param json - String to make into an object\n *\n * @returns object or array from the JSON string. Or undefined\n */\nvar safeJsonParse = function (json) {\n if (json && typeof json === 'object') {\n return json;\n }\n try {\n return JSON.parse(json);\n }\n catch (error) {\n (0, exports.errorLog)('safeJsonParse: unable to parse JSON', { error: error, json: json });\n return undefined;\n }\n};\nexports.safeJsonParse = safeJsonParse;\nexports.default = {\n errorLog: exports.errorLog,\n generateErrorBody: exports.generateErrorBody,\n generatePromiseObjects: exports.generatePromiseObjects,\n getCurrentPlatform: exports.getCurrentPlatform,\n getWebsocketUrl: exports.getWebsocketUrl,\n isSafari: exports.isSafari,\n isValidURL: exports.isValidURL,\n isValidTransferSpec: exports.isValidTransferSpec,\n randomUUID: exports.randomUUID,\n throwError: exports.throwError,\n getInstallerUrls: exports.getInstallerUrls,\n safeJsonString: exports.safeJsonString,\n safeJsonParse: exports.safeJsonParse,\n};\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.FileSelected = exports.HttpTransfer = void 0;\nvar HttpTransfer = /** @class */ (function () {\n function HttpTransfer(id, spec, files, status, options) {\n this.httpGatewayTransfer = true;\n this.recentPackets = [];\n this.uuid = id;\n this.status = status || 'initiating';\n this.add_time = new Date().toISOString();\n this.transfer_spec = spec;\n this.transport = 'http_gateway';\n if (options && typeof options === 'object' && options.serverUrlOverride) {\n this.serverUrlOverride = options.serverUrlOverride;\n }\n this.files = files.map(function (file) {\n return {\n lastModified: file.lastModified,\n name: file.name,\n size: file.size,\n type: file.type\n };\n });\n this.current_file = this.files[0] ? this.files[0].name : '';\n }\n HttpTransfer.prototype.setEndTime = function () {\n this.end_time = new Date().toISOString();\n };\n Object.defineProperty(HttpTransfer.prototype, \"calculated_rate_kbps\", {\n get: function () {\n if (this.recentPackets.length) {\n var timeBetweenLastPackets = this.recentPackets[this.recentPackets.length - 1].timeStamp - this.recentPackets[0].timeStamp;\n var bytesWrittenInLastPackets_1 = 0;\n this.recentPackets.forEach(function (packet) {\n bytesWrittenInLastPackets_1 += packet.bytes;\n });\n if (timeBetweenLastPackets && bytesWrittenInLastPackets_1) {\n return (((bytesWrittenInLastPackets_1 * 8) / (timeBetweenLastPackets / 1000000)) / 1000);\n }\n }\n return 0;\n },\n enumerable: false,\n configurable: true\n });\n HttpTransfer.prototype.recentPacketTransfer = function (bytes) {\n if (this.recentPackets.length >= 5) {\n this.recentPackets.shift();\n }\n this.recentPackets.push({\n timeStamp: new Date().getTime() * 1000,\n bytes: bytes\n });\n };\n Object.defineProperty(HttpTransfer.prototype, \"elapsed_usec\", {\n get: function () {\n var endTime = this.end_time ? new Date(this.end_time).getTime() : new Date().getTime();\n return (endTime - new Date(this.add_time).getTime()) * 1000;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(HttpTransfer.prototype, \"percentage\", {\n get: function () {\n if (this.bytes_written > 0 && this.bytes_written <= this.bytes_expected) {\n return ((this.bytes_written / this.bytes_expected));\n }\n else if (this.bytes_written > this.bytes_expected) {\n return 1;\n }\n return 0;\n },\n enumerable: false,\n configurable: true\n });\n return HttpTransfer;\n}());\nexports.HttpTransfer = HttpTransfer;\nvar FileSelected = /** @class */ (function () {\n function FileSelected(file) {\n this.name = file.name;\n this.size = file.size;\n this.type = file.type;\n }\n return FileSelected;\n}());\nexports.FileSelected = FileSelected;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.HttpGateway = exports.ActivityTracking = exports.TransferResponse = exports.ServerInfo = void 0;\nvar constants_1 = require(\"../constants/constants\");\nvar messages_1 = require(\"../constants/messages\");\nvar helpers_1 = require(\"../helpers/helpers\");\nvar HttpGatewayGlobals = /** @class */ (function () {\n function HttpGatewayGlobals() {\n /** Chunk size to use for uploads in bytes */\n this.chunkSize = 64000;\n /** The ID to use for HTTP Gateway needed DOM items */\n this.mainContainerId = 'aspera-httpgateway';\n /** The ID to use for the form container for forms */\n this.formContainerId = 'aspera-httpgateway-form-container';\n /** The ID to use for the download container */\n this.downloadsContainerId = 'aspera-httpgateway-downloads-container';\n /** Map of all forms currently in the container */\n this.formsAvailable = new Map();\n /** Map of form with files from drop events */\n this.formsFilesFromDrop = new Map();\n /** Map of folders with files from drop events */\n this.folderFiles = new Map();\n /** Indicates if running in software mode (no DOM) */\n this.softwareMode = false;\n /** Indicates if multiple server support should be used (will not lock out if gateway server is not working) */\n this.supportMultipleServers = false;\n /** Number of concurrent uploads to support */\n this.concurrentUploads = 3;\n /** Map of dropzones created by querySelector */\n this.dropzonesCreated = new Map();\n }\n /**\n * Add a form item to the form container for transferring if form already exists the existing one is returned\n *\n * @param id ID to use for the form reference\n */\n HttpGatewayGlobals.prototype.createOrUseForm = function (id) {\n if (this.formsAvailable.get(id)) {\n return this.formsAvailable.get(id);\n }\n var form = document.createElement('form');\n form.id = id;\n this.formsAvailable.set(id, form);\n this.formContainer.appendChild(form);\n return this.formsAvailable.get(id);\n };\n /**\n * Delete a form from the container by the ID\n *\n * @param id the form to delete\n */\n HttpGatewayGlobals.prototype.deleteFormFromContainer = function (id) {\n var foundForm = this.formsAvailable.get(id);\n this.formsFilesFromDrop.delete(id);\n if (foundForm) {\n this.formContainer.removeChild(foundForm);\n this.formsAvailable.delete(id);\n }\n };\n /**\n * Removes all forms from the Parent container\n */\n HttpGatewayGlobals.prototype.removeAllFormsFromContainer = function () {\n while (this.formContainer.firstChild) {\n this.formContainer.removeChild(this.formContainer.firstChild);\n }\n };\n /**\n * Get or create an array of Files to store drop events in\n *\n * @param id the form to associate the files with\n */\n HttpGatewayGlobals.prototype.getOrCreateFormFileListFromDrop = function (id) {\n if (!this.formsFilesFromDrop.get(id)) {\n this.formsFilesFromDrop.set(id, []);\n }\n return this.formsFilesFromDrop.get(id);\n };\n /**\n * Get or create an array of Folder data to store folder entries\n *\n * @param id the form to associate the folders with\n */\n HttpGatewayGlobals.prototype.getOrCreateFolderDataList = function (id) {\n if (!this.folderFiles.get(id)) {\n this.folderFiles.set(id, new Map());\n }\n return this.folderFiles.get(id);\n };\n /**\n * Setup HTTP Gateway SDK server and formContainer\n *\n * @param serverUrl URL to use for the server\n * @param softwareMode indicate if software mode is in use\n * @param supportMultipleServers indicate if multiple servers are supported\n */\n HttpGatewayGlobals.prototype.setUpServer = function (serverUrl, softwareMode, supportMultipleServers) {\n if (typeof serverUrl === 'string') {\n this.serverUrl = serverUrl;\n }\n this.softwareMode = !!softwareMode;\n this.supportMultipleServers = !!supportMultipleServers;\n if (!this.softwareMode) {\n if (!this.mainContainer) {\n this.mainContainer = document.createElement('div');\n this.mainContainer.id = this.mainContainerId;\n this.mainContainer.setAttribute('style', constants_1.hiddenStyleList);\n document.querySelector('body').appendChild(this.mainContainer);\n }\n if (!this.formContainer) {\n this.formsAvailable.clear();\n this.formContainer = document.createElement('div');\n this.formContainer.id = this.formContainerId;\n document.querySelector(\"#\".concat(this.mainContainerId)).appendChild(this.formContainer);\n }\n if (!this.downloadsContainer) {\n this.downloadsContainer = document.createElement('div');\n this.downloadsContainer.id = this.downloadsContainerId;\n document.querySelector(\"#\".concat(this.mainContainerId)).appendChild(this.downloadsContainer);\n }\n }\n };\n HttpGatewayGlobals.prototype.backupDownloadMethod = function (url) {\n window.alert(messages_1.messages.loadingDownload);\n window.location.href = url;\n };\n /**\n * Download a file based on a URL. By default a hidden IFRAME attempts to download\n * the file but if that fails a fallback of opening a new window happens.\n *\n * @param url the URL of the file to download\n */\n HttpGatewayGlobals.prototype.triggerDownloadFromUrl = function (url) {\n var _this = this;\n try {\n var element = document.createElement('iframe');\n element.src = url;\n element.onerror = function (error) {\n (0, helpers_1.errorLog)(messages_1.messages.failedToGenerateIframe, error);\n _this.backupDownloadMethod(url);\n };\n document.querySelector(\"#\".concat(this.downloadsContainerId)).appendChild(element);\n }\n catch (error) {\n (0, helpers_1.errorLog)(messages_1.messages.failedToGenerateIframe, error);\n this.backupDownloadMethod(url);\n }\n };\n return HttpGatewayGlobals;\n}());\nvar ServerInfo = /** @class */ (function () {\n function ServerInfo() {\n }\n return ServerInfo;\n}());\nexports.ServerInfo = ServerInfo;\nvar TransferResponse = /** @class */ (function () {\n function TransferResponse() {\n }\n return TransferResponse;\n}());\nexports.TransferResponse = TransferResponse;\nvar ActivityTracking = /** @class */ (function () {\n function ActivityTracking() {\n /** Map of transfers by ID */\n this.transfers = new Map();\n /** Map of callbacks that receive transfers */\n this.callbacks = new Map();\n /** Indicate if a callback should happen */\n this.needCallback = false;\n /** Queued uploads */\n this.queuedUploads = [];\n this.pollCallbacks();\n }\n /**\n * Get transfer response object including all transfers\n *\n * @returns transfer data object with transfers array\n */\n ActivityTracking.prototype.getAllTransfersResponse = function () {\n var transfers = this.getAllTransfers();\n return {\n iteration_token: '',\n result_count: transfers.length,\n transfers: transfers\n };\n };\n /**\n * Remove all transfers that are not active\n */\n ActivityTracking.prototype.clearNonActiveTransfers = function () {\n var _this = this;\n var transferIdsToRemove = this.getAllTransfers().filter(function (transfer) {\n return transfer.status === 'completed' || transfer.status === 'failed';\n }).map(function (transfer) { return transfer.uuid; });\n transferIdsToRemove.forEach(function (id) {\n _this.removeTransfer(id);\n });\n };\n /**\n * Poll transfer callbacks\n */\n ActivityTracking.prototype.pollCallbacks = function () {\n var _this = this;\n setTimeout(function () {\n if (_this.needCallback) {\n _this.callbacks.forEach(function (value) {\n if (typeof value === 'function') {\n value(_this.getAllTransfersResponse());\n }\n });\n }\n _this.needCallback = false;\n _this.pollCallbacks();\n }, 2000);\n };\n /**\n * Trigger activity callback on activity events\n */\n ActivityTracking.prototype.triggerActivityCallbacks = function () {\n this.needCallback = true;\n };\n /**\n * Register a callback for getting transfers back to the consumer\n *\n * @param callback the function to call with the array of transfers\n *\n * @returns the ID of the callback index\n */\n ActivityTracking.prototype.setCallback = function (callback) {\n if (typeof callback !== 'function') {\n (0, helpers_1.errorLog)(messages_1.messages.callbackIsNotFunction);\n return;\n }\n var id = \"callback-\".concat(this.callbacks.size + 1);\n this.callbacks.set(id, callback);\n return id;\n };\n /**\n * Remove the callback (deregister) from the list of callbacks\n *\n * @param id the string of the callback to remove\n */\n ActivityTracking.prototype.removeCallback = function (id) {\n this.callbacks.delete(id);\n };\n /**\n * Set the transfer in the transfers map\n *\n * @param id transfer id for tracking transfers\n * @param transfer transfer object\n */\n ActivityTracking.prototype.setTransfer = function (id, transfer) {\n this.transfers.set(id, transfer);\n this.triggerActivityCallbacks();\n };\n /**\n * Get the status of a specific transfer by ID (only returns for items during the session)\n *\n * @param id the ID of the transfer to retrieve that has been started during the session\n *\n * @returns an HttpTransfer object that includes the transfer info and status\n */\n ActivityTracking.prototype.getTransferById = function (id) {\n return this.transfers.get(id);\n };\n /**\n * Get all active transfers (transfers that are not completed or failed)\n */\n ActivityTracking.prototype.getActiveTransfers = function () {\n return (0, helpers_1.iterableToArray)(this.transfers.values()).filter(function (transfer) {\n return transfer.status !== 'completed' && transfer.status !== 'failed';\n });\n };\n /**\n * Remove a transfer from the transfer list\n *\n * @param id the ID of the transfer to remove\n */\n ActivityTracking.prototype.removeTransfer = function (id) {\n this.transfers.delete(id);\n this.triggerActivityCallbacks();\n };\n /**\n * Get the list of transfers started during the session for checking status\n *\n * @param returnMap boolean to indicate if the raw Map should be returned instead of an array\n *\n * @returns an Array of transfers or a Map of transfers (with the ID as key). Array is default\n */\n ActivityTracking.prototype.getAllTransfers = function (returnMap) {\n var transferList = [];\n var transferMap = new Map();\n this.transfers.forEach(function (value, key) {\n transferList.push(value);\n transferMap.set(key, value);\n });\n return returnMap ? transferMap : transferList;\n };\n return ActivityTracking;\n}());\nexports.ActivityTracking = ActivityTracking;\nvar HttpGateway = /** @class */ (function () {\n function HttpGateway() {\n var _this = this;\n /** Global information about the HTTP Gateway */\n this.globals = new HttpGatewayGlobals();\n /** Activity tracking for watching transfers */\n this.activityTracking = new ActivityTracking();\n /**\n * If the user attempts to leave the page warn that by leaving they will have their transfer abort\n * NOTE: Only IE will show custom text. No way to indicate why they are being blocked.\n */\n this.checkForPageLeave = function (event) {\n if (_this.activityTracking.getActiveTransfers().length) {\n event.preventDefault();\n event.returnValue = messages_1.messages.leavingWhileUploading;\n return messages_1.messages.leavingWhileUploading;\n }\n else {\n delete event['returnValue'];\n }\n };\n }\n Object.defineProperty(HttpGateway.prototype, \"isReady\", {\n /**\n * Check if the HTTP Server is ready to be used and has been verified\n *\n * @returns a boolean indicating if SDK can be used for transfers\n */\n get: function () {\n return this.globals.serverVerified || this.globals.supportMultipleServers;\n },\n enumerable: false,\n configurable: true\n });\n /**\n * Overwrite default chunk size for chunking transfer data.\n * This is an optional function, a default recommended size is set on start.\n *\n * @param size the size to use\n */\n HttpGateway.prototype.overwriteDefaultChunkSize = function (size) {\n if (size && size > 0) {\n this.globals.chunkSize = size;\n }\n else {\n (0, helpers_1.errorLog)(messages_1.messages.invalidChunkSize, { requestedSize: size });\n }\n };\n /**\n * Overwrite default concurrent transfer number for parallel transfers\n * This is an optional function, a default recommended number is set on start.\n *\n * @param transfers the number of concurrent uploads to use\n */\n HttpGateway.prototype.overwriteDefaultConcurrentUploads = function (transfers) {\n if (transfers && transfers > 0) {\n this.globals.concurrentUploads = transfers;\n }\n else {\n (0, helpers_1.errorLog)(messages_1.messages.invalidConcurrentUploads, { requestedSize: transfers });\n }\n };\n return HttpGateway;\n}());\nexports.HttpGateway = HttpGateway;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.messages = void 0;\n/** @ignore */\nexports.messages = {\n serverUrlNotSet: 'Server URL not set. Call init function',\n serverError: 'Unable to communicate with HTTP Gateway server',\n serverNotVerified: 'The HTTP Gateway server has not been verified. Run test or init first',\n downloadFailed: 'The download failed to initiate',\n streamFailed: 'The stream failed to initiate',\n notValidTransferSpec: 'The supplied transferSpec is not valid',\n invalidServerUrl: 'The supplied server URL is invalid',\n unableToGetFilesForUpload: 'Unable to get files for upload based on transferSpec',\n unableToUpload: 'Unable to upload. Server encountered an error',\n failedToGetDownloadUrl: 'Unable to retrieve HTTP download URL',\n failedToGetStreamUrl: 'Unable to retrieve HTTP stream URL',\n streamInjectDomInvalid: 'Unable to find injection point for video player',\n failedToGenerateIframe: 'Unable to generate IFRAME for download. Using new window',\n callbackIsNotFunction: 'The provided callback is not a function',\n websocketClosedUnexpect: 'The websocket was closed unexpectedly',\n invalidChunkSize: 'The provided chunk size for uploads is invalid',\n invalidConcurrentUploads: 'The provided number for concurrent uploads is invalid',\n unableToParseDataForUpload: 'Unable to parse data for uploading',\n unableToDeepCopyObject: 'Unable to deep copy object or array',\n unableToFindElementOnPage: 'Unable to find the element on the current page',\n unauthorizedFilesForUpload: 'Unauthorized files included in the transferSpec. All files for upload must be picked via getFilesForUpload',\n startDownload: 'Start HTTP download?',\n dropFoldersNotAllowed: 'Dropping folders is not currently allowed',\n yes: 'Yes',\n no: 'No',\n close: 'Close',\n leavingWhileUploading: 'An upload is in progress. If you leave the upload will be canceled.',\n unableToReadFolder: 'The dropped item could not be parsed. Please try selecting via the select file/folder option',\n streamingTooManyFiles: 'Too many files requested for a stream. Only one video file is allowed in the transferSpec',\n loadingDownload: 'The download will now open in this window.',\n};\n","\"use strict\";\nvar __assign = (this && this.__assign) || function () {\n __assign = Object.assign || function(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))\n t[p] = s[p];\n }\n return t;\n };\n return __assign.apply(this, arguments);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AsperaSdk = exports.ActivityTracking = void 0;\nvar constants_1 = require(\"../constants/constants\");\nvar messages_1 = require(\"../constants/messages\");\nvar safari_client_1 = require(\"../helpers/client/safari-client\");\nvar helpers_1 = require(\"../helpers/helpers\");\nvar ws_1 = require(\"../helpers/ws\");\nvar index_1 = require(\"../index\");\nvar AsperaSdkGlobals = /** @class */ (function () {\n function AsperaSdkGlobals() {\n /** The URL of the IBM Aspera HTTP server to use with the SDK */\n this.asperaAppUrl = 'http://127.0.0.1';\n /** The URL of the IBM Aspera Desktop HTTP server to use with the SDK */\n this.rpcPort = 33024;\n /** The default URL to check for latest Aspera installers */\n this.installerUrl = constants_1.installerUrl;\n /** Indicate that the server has been verified as working */\n this.asperaAppVerified = false;\n /** Indicate if multiple session is supported */\n this.supportMultipleUsers = false;\n /** Map of drop zones created by querySelector */\n this.dropZonesCreated = new Map();\n /** Indicate that the HTTP Gateway has been verified as working */\n this.httpGatewayVerified = false;\n }\n AsperaSdkGlobals.prototype.backupLaunchMethod = function (url) {\n window.alert(messages_1.messages.loadingProtocol);\n window.location.href = url;\n };\n /**\n * Launch the IBM Aspera App via protocol url. By default, a hidden IFRAME attempts to\n * open the app but if that fails a fallback of opening a new window happens.\n */\n AsperaSdkGlobals.prototype.launch = function () {\n var _this = this;\n try {\n var element = document.createElement('iframe');\n element.src = constants_1.protocol;\n element.onerror = function (error) {\n (0, helpers_1.errorLog)(messages_1.messages.failedToGenerateIframe, error);\n _this.backupLaunchMethod(constants_1.protocol);\n };\n element.setAttribute('style', constants_1.hiddenStyleList);\n document.body.appendChild(element);\n }\n catch (error) {\n (0, helpers_1.errorLog)(messages_1.messages.failedToGenerateIframe, error);\n this.backupLaunchMethod(constants_1.protocol);\n }\n };\n Object.defineProperty(AsperaSdkGlobals.prototype, \"sdkResponseData\", {\n get: function () {\n return __assign(__assign({ verified: this.asperaAppVerified }, this.asperaSdkInfo), { httpGateway: {\n verified: this.httpGatewayVerified,\n url: this.httpGatewayUrl,\n info: this.httpGatewayInfo,\n } });\n },\n enumerable: false,\n configurable: true\n });\n return AsperaSdkGlobals;\n}());\nvar ActivityTracking = /** @class */ (function () {\n function ActivityTracking() {\n /** Map of callbacks that receive transfer update events */\n this.activity_callbacks = new Map();\n /** Map of callbacks that received removed transfer events */\n this.removed_callbacks = new Map();\n /** Map of callbacks that receive connection events */\n this.event_callbacks = new Map();\n /** Keep track of the last WebSocket event **/\n this.lastWebSocketEvent = 'CLOSED';\n /** Keep track of the last notified WebSocket event **/\n this.lastNotifiedWebSocketEvent = undefined;\n }\n /**\n * Notify all consumers when a message is received from the websocket\n *\n * @param message the message received from the websocket\n */\n ActivityTracking.prototype.handleTransferActivity = function (message) {\n if (message.type === 'transferUpdated') {\n this.activity_callbacks.forEach(function (callback) {\n if (typeof callback === 'function') {\n callback(message.data);\n }\n });\n }\n if (message.type === 'transferRemoved') {\n this.removed_callbacks.forEach(function (callback) {\n if (typeof callback === 'function') {\n callback(message.data);\n }\n });\n }\n };\n /**\n * Handle and notify if needed when a connection webSocketEvent occurs. For example, when the SDK\n * websocket connection to IBM Aspera App is closed or reconnected.\n *\n * @param webSocketEvent the event type.\n */\n ActivityTracking.prototype.handleWebSocketEvents = function (webSocketEvent) {\n if (this.lastWebSocketEvent === webSocketEvent) {\n return;\n }\n this.lastWebSocketEvent = webSocketEvent;\n this.notifyWebSocketEvent(webSocketEvent);\n };\n /**\n * Notify all consumers when a connection webSocketEvent occurs.\n *\n * @param webSocketEvent the event type.\n */\n ActivityTracking.prototype.notifyWebSocketEvent = function (webSocketEvent) {\n if (this.lastNotifiedWebSocketEvent === webSocketEvent) {\n return;\n }\n this.lastNotifiedWebSocketEvent = webSocketEvent;\n this.event_callbacks.forEach(function (callback) {\n if (typeof callback === 'function') {\n callback(webSocketEvent);\n }\n });\n };\n /**\n * Notify all consumers when the client changes status. For example, when\n * IBM Aspera App is launched or closed.\n *\n * @param running whether the client is running or not.\n */\n ActivityTracking.prototype.handleClientEvents = function (running) {\n var webSocketEvent;\n if (!running) {\n webSocketEvent = 'CLOSED';\n }\n else {\n webSocketEvent = this.lastWebSocketEvent;\n }\n this.notifyWebSocketEvent(webSocketEvent);\n };\n /**\n * Notify all consumers when a Safari extension safariExtensionEvent occurs (enabled/disabled).\n *\n * @param safariExtensionEvent the event type.\n */\n ActivityTracking.prototype.handleSafariExtensionEvents = function (safariExtensionEvent) {\n index_1.asperaSdk.SAFARI_EXTENSION_STATUS = safariExtensionEvent;\n };\n /**\n * Set up the activity tracking with IBM Aspera.\n *\n * @returns a promise that resolves when the websocket connection is established.\n * Currently, this promise does not reject.\n */\n ActivityTracking.prototype.setup = function () {\n var _this = this;\n if (index_1.asperaSdk.globals.sessionId) {\n this.registerDesktopAppSession();\n }\n if ((0, helpers_1.isSafari)()) {\n return safari_client_1.safariClient.monitorTransferActivity();\n }\n return ws_1.websocketService.init()\n .then(function () {\n ws_1.websocketService.registerMessage('transfer_activity', function (data) { return _this.handleTransferActivity(data); });\n ws_1.websocketService.registerEvent(function (status) { return _this.handleWebSocketEvents(status); });\n });\n };\n /**\n * Register a callback for getting transfers back to the consumer\n *\n * @param callback the function to call with the array of transfers\n *\n * @returns the ID of the callback index\n */\n ActivityTracking.prototype.setCallback = function (callback) {\n if (typeof callback !== 'function') {\n (0, helpers_1.errorLog)(messages_1.messages.callbackIsNotFunction);\n return;\n }\n var id = \"callback-\".concat(this.activity_callbacks.size + 1);\n this.activity_callbacks.set(id, callback);\n return id;\n };\n /**\n * Remove the callback (deregister) from the list of callbacks\n *\n * @param id the string of the callback to remove\n */\n ActivityTracking.prototype.removeCallback = function (id) {\n this.activity_callbacks.delete(id);\n };\n /**\n * Register a callback for getting transfers back to the consumer\n *\n * @param callback the function to call with the array of transfers\n *\n * @returns the ID of the callback index\n */\n ActivityTracking.prototype.setRemovedCallback = function (callback) {\n if (typeof callback !== 'function') {\n (0, helpers_1.errorLog)(messages_1.messages.callbackIsNotFunction);\n return;\n }\n var id = \"callback-\".concat(this.removed_callbacks.size + 1);\n this.removed_callbacks.set(id, callback);\n return id;\n };\n /**\n * Remove the callback (deregister) from the list of callbacks\n *\n * @param id the string of the callback to remove\n */\n ActivityTracking.prototype.removeRemovedCallback = function (id) {\n this.removed_callbacks.delete(id);\n };\n /**\n * Register a callback for getting websocket events back to the consumer\n *\n * @param callback the function to call with the websocket event\n *\n * @returns the ID of the callback index\n */\n ActivityTracking.prototype.setWebSocketEventCallback = function (callback) {\n if (typeof callback !== 'function') {\n (0, helpers_1.errorLog)(messages_1.messages.callbackIsNotFunction);\n return;\n }\n var id = \"callback-\".concat(this.event_callbacks.size + 1);\n this.event_callbacks.set(id, callback);\n callback(this.lastWebSocketEvent);\n return id;\n };\n /**\n * Remove the callback (deregister) from the list of callbacks\n *\n * @param id the string of the callback to remove\n */\n ActivityTracking.prototype.removeWebSocketEventCallback = function (id) {\n this.event_callbacks.delete(id);\n };\n ActivityTracking.prototype.registerDesktopAppSession = function () {\n var iframe = document.createElement('iframe');\n iframe.style.display = 'none';\n iframe.src = \"aspera://initialize?app_id=\".concat(index_1.asperaSdk.globals.appId, \"&session_id=\").concat(index_1.asperaSdk.globals.sessionId);\n document.body.appendChild(iframe);\n setTimeout(function () {\n document.body.removeChild(iframe);\n }, 1000);\n };\n return ActivityTracking;\n}());\nexports.ActivityTracking = ActivityTracking;\nvar AsperaSdk = /** @class */ (function () {\n function AsperaSdk() {\n /** Global information about IBM Aspera */\n this.globals = new AsperaSdkGlobals();\n /** Activity tracking for watching transfers */\n this.activityTracking = new ActivityTracking();\n /** HTTP Gateway file store. Key is the file name. */\n this.httpGatewaySelectedFiles = new Map();\n /** Indicate if Safari Extension is enabled. If the extension is disabled during the lifecycle this will not update to disabled. */\n this.SAFARI_EXTENSION_STATUS = 'DISABLED';\n /** Store of HTTP Gateway transfers */\n this.httpGatewayTransferStore = new Map();\n /** HTTP Gateway in app threshold limit. This can be changed globally for the app. */\n this.httpGatewayInBrowserDownloadThreshold = 1000000000;\n }\n Object.defineProperty(AsperaSdk.prototype, \"isReady\", {\n /**\n * Check if IBM Aspera is ready to be used and has been verified.\n *\n * @returns a boolean indicating if SDK can be used for requests\n */\n get: function () {\n return this.globals.asperaAppVerified && this.globals.appId !== '';\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(AsperaSdk.prototype, \"httpGatewayIsReady\", {\n /** Indicate that HTTP Gateway is available. */\n get: function () {\n return !!this.globals.httpGatewayVerified;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(AsperaSdk.prototype, \"useHttpGateway\", {\n /** Indicates if internal calls should use Gateway */\n get: function () {\n return this.httpGatewayIsReady && !this.isReady;\n },\n enumerable: false,\n configurable: true\n });\n Object.defineProperty(AsperaSdk.prototype, \"useOldHttpGateway\", {\n /** Indicates if old HTTP Gateway SDK should be used (v2 and lower) */\n get: function () {\n if (!this.useHttpGateway) {\n return false;\n }\n return Number(this.globals.httpGatewayInfo.version.split('.')[0] || 3) <= 2;\n },\n enumerable: false,\n configurable: true\n });\n return AsperaSdk;\n}());\nexports.AsperaSdk = AsperaSdk;\n","/*!\n * @overview es6-promise - a tiny implementation of Promises/A+.\n * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)\n * @license Licensed under MIT license\n * See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE\n * @version v4.2.8+1e68dce6\n */\n\n(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.ES6Promise = factory());\n}(this, (function () { 'use strict';\n\nfunction objectOrFunction(x) {\n var type = typeof x;\n return x !== null && (type === 'object' || type === 'function');\n}\n\nfunction isFunction(x) {\n return typeof x === 'function';\n}\n\n\n\nvar _isArray = void 0;\nif (Array.isArray) {\n _isArray = Array.isArray;\n} else {\n _isArray = function (x) {\n return Object.prototype.toString.call(x) === '[object Array]';\n };\n}\n\nvar isArray = _isArray;\n\nvar len = 0;\nvar vertxNext = void 0;\nvar customSchedulerFn = void 0;\n\nvar asap = function asap(callback, arg) {\n queue[len] = callback;\n queue[len + 1] = arg;\n len += 2;\n if (len === 2) {\n // If len is 2, that means that we need to schedule an async flush.\n // If additional callbacks are queued before the queue is flushed, they\n // will be processed by this flush that we are scheduling.\n if (customSchedulerFn) {\n customSchedulerFn(flush);\n } else {\n scheduleFlush();\n }\n }\n};\n\nfunction setScheduler(scheduleFn) {\n customSchedulerFn = scheduleFn;\n}\n\nfunction setAsap(asapFn) {\n asap = asapFn;\n}\n\nvar browserWindow = typeof window !== 'undefined' ? window : undefined;\nvar browserGlobal = browserWindow || {};\nvar BrowserMutationObserver = browserGlobal.MutationObserver || browserGlobal.WebKitMutationObserver;\nvar isNode = typeof self === 'undefined' && typeof process !== 'undefined' && {}.toString.call(process) === '[object process]';\n\n// test for web worker but not in IE10\nvar isWorker = typeof Uint8ClampedArray !== 'undefined' && typeof importScripts !== 'undefined' && typeof MessageChannel !== 'undefined';\n\n// node\nfunction useNextTick() {\n // node version 0.10.x displays a deprecation warning when nextTick is used recursively\n // see https://github.com/cujojs/when/issues/410 for details\n return function () {\n return process.nextTick(flush);\n };\n}\n\n// vertx\nfunction useVertxTimer() {\n if (typeof vertxNext !== 'undefined') {\n return function () {\n vertxNext(flush);\n };\n }\n\n return useSetTimeout();\n}\n\nfunction useMutationObserver() {\n var iterations = 0;\n var observer = new BrowserMutationObserver(flush);\n var node = document.createTextNode('');\n observer.observe(node, { characterData: true });\n\n return function () {\n node.data = iterations = ++iterations % 2;\n };\n}\n\n// web worker\nfunction useMessageChannel() {\n var channel = new MessageChannel();\n channel.port1.onmessage = flush;\n return function () {\n return channel.port2.postMessage(0);\n };\n}\n\nfunction useSetTimeout() {\n // Store setTimeout reference so es6-promise will be unaffected by\n // other code modifying setTimeout (like sinon.useFakeTimers())\n var globalSetTimeout = setTimeout;\n return function () {\n return globalSetTimeout(flush, 1);\n };\n}\n\nvar queue = new Array(1000);\nfunction flush() {\n for (var i = 0; i < len; i += 2) {\n var callback = queue[i];\n var arg = queue[i + 1];\n\n callback(arg);\n\n queue[i] = undefined;\n queue[i + 1] = undefined;\n }\n\n len = 0;\n}\n\nfunction attemptVertx() {\n try {\n var vertx = Function('return this')().require('vertx');\n vertxNext = vertx.runOnLoop || vertx.runOnContext;\n return useVertxTimer();\n } catch (e) {\n return useSetTimeout();\n }\n}\n\nvar scheduleFlush = void 0;\n// Decide what async method to use to triggering processing of queued callbacks:\nif (isNode) {\n scheduleFlush = useNextTick();\n} else if (BrowserMutationObserver) {\n scheduleFlush = useMutationObserver();\n} else if (isWorker) {\n scheduleFlush = useMessageChannel();\n} else if (browserWindow === undefined && typeof require === 'function') {\n scheduleFlush = attemptVertx();\n} else {\n scheduleFlush = useSetTimeout();\n}\n\nfunction then(onFulfillment, onRejection) {\n var parent = this;\n\n var child = new this.constructor(noop);\n\n if (child[PROMISE_ID] === undefined) {\n makePromise(child);\n }\n\n var _state = parent._state;\n\n\n if (_state) {\n var callback = arguments[_state - 1];\n asap(function () {\n return invokeCallback(_state, child, callback, parent._result);\n });\n } else {\n subscribe(parent, child, onFulfillment, onRejection);\n }\n\n return child;\n}\n\n/**\n `Promise.resolve` returns a promise that will become resolved with the\n passed `value`. It is shorthand for the following:\n\n ```javascript\n let promise = new Promise(function(resolve, reject){\n resolve(1);\n });\n\n promise.then(function(value){\n // value === 1\n });\n ```\n\n Instead of writing the above, your code now simply becomes the following:\n\n ```javascript\n let promise = Promise.resolve(1);\n\n promise.then(function(value){\n // value === 1\n });\n ```\n\n @method resolve\n @static\n @param {Any} value value that the returned promise will be resolved with\n Useful for tooling.\n @return {Promise} a promise that will become fulfilled with the given\n `value`\n*/\nfunction resolve$1(object) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (object && typeof object === 'object' && object.constructor === Constructor) {\n return object;\n }\n\n var promise = new Constructor(noop);\n resolve(promise, object);\n return promise;\n}\n\nvar PROMISE_ID = Math.random().toString(36).substring(2);\n\nfunction noop() {}\n\nvar PENDING = void 0;\nvar FULFILLED = 1;\nvar REJECTED = 2;\n\nfunction selfFulfillment() {\n return new TypeError(\"You cannot resolve a promise with itself\");\n}\n\nfunction cannotReturnOwn() {\n return new TypeError('A promises callback cannot return that same promise.');\n}\n\nfunction tryThen(then$$1, value, fulfillmentHandler, rejectionHandler) {\n try {\n then$$1.call(value, fulfillmentHandler, rejectionHandler);\n } catch (e) {\n return e;\n }\n}\n\nfunction handleForeignThenable(promise, thenable, then$$1) {\n asap(function (promise) {\n var sealed = false;\n var error = tryThen(then$$1, thenable, function (value) {\n if (sealed) {\n return;\n }\n sealed = true;\n if (thenable !== value) {\n resolve(promise, value);\n } else {\n fulfill(promise, value);\n }\n }, function (reason) {\n if (sealed) {\n return;\n }\n sealed = true;\n\n reject(promise, reason);\n }, 'Settle: ' + (promise._label || ' unknown promise'));\n\n if (!sealed && error) {\n sealed = true;\n reject(promise, error);\n }\n }, promise);\n}\n\nfunction handleOwnThenable(promise, thenable) {\n if (thenable._state === FULFILLED) {\n fulfill(promise, thenable._result);\n } else if (thenable._state === REJECTED) {\n reject(promise, thenable._result);\n } else {\n subscribe(thenable, undefined, function (value) {\n return resolve(promise, value);\n }, function (reason) {\n return reject(promise, reason);\n });\n }\n}\n\nfunction handleMaybeThenable(promise, maybeThenable, then$$1) {\n if (maybeThenable.constructor === promise.constructor && then$$1 === then && maybeThenable.constructor.resolve === resolve$1) {\n handleOwnThenable(promise, maybeThenable);\n } else {\n if (then$$1 === undefined) {\n fulfill(promise, maybeThenable);\n } else if (isFunction(then$$1)) {\n handleForeignThenable(promise, maybeThenable, then$$1);\n } else {\n fulfill(promise, maybeThenable);\n }\n }\n}\n\nfunction resolve(promise, value) {\n if (promise === value) {\n reject(promise, selfFulfillment());\n } else if (objectOrFunction(value)) {\n var then$$1 = void 0;\n try {\n then$$1 = value.then;\n } catch (error) {\n reject(promise, error);\n return;\n }\n handleMaybeThenable(promise, value, then$$1);\n } else {\n fulfill(promise, value);\n }\n}\n\nfunction publishRejection(promise) {\n if (promise._onerror) {\n promise._onerror(promise._result);\n }\n\n publish(promise);\n}\n\nfunction fulfill(promise, value) {\n if (promise._state !== PENDING) {\n return;\n }\n\n promise._result = value;\n promise._state = FULFILLED;\n\n if (promise._subscribers.length !== 0) {\n asap(publish, promise);\n }\n}\n\nfunction reject(promise, reason) {\n if (promise._state !== PENDING) {\n return;\n }\n promise._state = REJECTED;\n promise._result = reason;\n\n asap(publishRejection, promise);\n}\n\nfunction subscribe(parent, child, onFulfillment, onRejection) {\n var _subscribers = parent._subscribers;\n var length = _subscribers.length;\n\n\n parent._onerror = null;\n\n _subscribers[length] = child;\n _subscribers[length + FULFILLED] = onFulfillment;\n _subscribers[length + REJECTED] = onRejection;\n\n if (length === 0 && parent._state) {\n asap(publish, parent);\n }\n}\n\nfunction publish(promise) {\n var subscribers = promise._subscribers;\n var settled = promise._state;\n\n if (subscribers.length === 0) {\n return;\n }\n\n var child = void 0,\n callback = void 0,\n detail = promise._result;\n\n for (var i = 0; i < subscribers.length; i += 3) {\n child = subscribers[i];\n callback = subscribers[i + settled];\n\n if (child) {\n invokeCallback(settled, child, callback, detail);\n } else {\n callback(detail);\n }\n }\n\n promise._subscribers.length = 0;\n}\n\nfunction invokeCallback(settled, promise, callback, detail) {\n var hasCallback = isFunction(callback),\n value = void 0,\n error = void 0,\n succeeded = true;\n\n if (hasCallback) {\n try {\n value = callback(detail);\n } catch (e) {\n succeeded = false;\n error = e;\n }\n\n if (promise === value) {\n reject(promise, cannotReturnOwn());\n return;\n }\n } else {\n value = detail;\n }\n\n if (promise._state !== PENDING) {\n // noop\n } else if (hasCallback && succeeded) {\n resolve(promise, value);\n } else if (succeeded === false) {\n reject(promise, error);\n } else if (settled === FULFILLED) {\n fulfill(promise, value);\n } else if (settled === REJECTED) {\n reject(promise, value);\n }\n}\n\nfunction initializePromise(promise, resolver) {\n try {\n resolver(function resolvePromise(value) {\n resolve(promise, value);\n }, function rejectPromise(reason) {\n reject(promise, reason);\n });\n } catch (e) {\n reject(promise, e);\n }\n}\n\nvar id = 0;\nfunction nextId() {\n return id++;\n}\n\nfunction makePromise(promise) {\n promise[PROMISE_ID] = id++;\n promise._state = undefined;\n promise._result = undefined;\n promise._subscribers = [];\n}\n\nfunction validationError() {\n return new Error('Array Methods must be provided an Array');\n}\n\nvar Enumerator = function () {\n function Enumerator(Constructor, input) {\n this._instanceConstructor = Constructor;\n this.promise = new Constructor(noop);\n\n if (!this.promise[PROMISE_ID]) {\n makePromise(this.promise);\n }\n\n if (isArray(input)) {\n this.length = input.length;\n this._remaining = input.length;\n\n this._result = new Array(this.length);\n\n if (this.length === 0) {\n fulfill(this.promise, this._result);\n } else {\n this.length = this.length || 0;\n this._enumerate(input);\n if (this._remaining === 0) {\n fulfill(this.promise, this._result);\n }\n }\n } else {\n reject(this.promise, validationError());\n }\n }\n\n Enumerator.prototype._enumerate = function _enumerate(input) {\n for (var i = 0; this._state === PENDING && i < input.length; i++) {\n this._eachEntry(input[i], i);\n }\n };\n\n Enumerator.prototype._eachEntry = function _eachEntry(entry, i) {\n var c = this._instanceConstructor;\n var resolve$$1 = c.resolve;\n\n\n if (resolve$$1 === resolve$1) {\n var _then = void 0;\n var error = void 0;\n var didError = false;\n try {\n _then = entry.then;\n } catch (e) {\n didError = true;\n error = e;\n }\n\n if (_then === then && entry._state !== PENDING) {\n this._settledAt(entry._state, i, entry._result);\n } else if (typeof _then !== 'function') {\n this._remaining--;\n this._result[i] = entry;\n } else if (c === Promise$1) {\n var promise = new c(noop);\n if (didError) {\n reject(promise, error);\n } else {\n handleMaybeThenable(promise, entry, _then);\n }\n this._willSettleAt(promise, i);\n } else {\n this._willSettleAt(new c(function (resolve$$1) {\n return resolve$$1(entry);\n }), i);\n }\n } else {\n this._willSettleAt(resolve$$1(entry), i);\n }\n };\n\n Enumerator.prototype._settledAt = function _settledAt(state, i, value) {\n var promise = this.promise;\n\n\n if (promise._state === PENDING) {\n this._remaining--;\n\n if (state === REJECTED) {\n reject(promise, value);\n } else {\n this._result[i] = value;\n }\n }\n\n if (this._remaining === 0) {\n fulfill(promise, this._result);\n }\n };\n\n Enumerator.prototype._willSettleAt = function _willSettleAt(promise, i) {\n var enumerator = this;\n\n subscribe(promise, undefined, function (value) {\n return enumerator._settledAt(FULFILLED, i, value);\n }, function (reason) {\n return enumerator._settledAt(REJECTED, i, reason);\n });\n };\n\n return Enumerator;\n}();\n\n/**\n `Promise.all` accepts an array of promises, and returns a new promise which\n is fulfilled with an array of fulfillment values for the passed promises, or\n rejected with the reason of the first passed promise to be rejected. It casts all\n elements of the passed iterable to promises as it runs this algorithm.\n\n Example:\n\n ```javascript\n let promise1 = resolve(1);\n let promise2 = resolve(2);\n let promise3 = resolve(3);\n let promises = [ promise1, promise2, promise3 ];\n\n Promise.all(promises).then(function(array){\n // The array here would be [ 1, 2, 3 ];\n });\n ```\n\n If any of the `promises` given to `all` are rejected, the first promise\n that is rejected will be given as an argument to the returned promises's\n rejection handler. For example:\n\n Example:\n\n ```javascript\n let promise1 = resolve(1);\n let promise2 = reject(new Error(\"2\"));\n let promise3 = reject(new Error(\"3\"));\n let promises = [ promise1, promise2, promise3 ];\n\n Promise.all(promises).then(function(array){\n // Code here never runs because there are rejected promises!\n }, function(error) {\n // error.message === \"2\"\n });\n ```\n\n @method all\n @static\n @param {Array} entries array of promises\n @param {String} label optional string for labeling the promise.\n Useful for tooling.\n @return {Promise} promise that is fulfilled when all `promises` have been\n fulfilled, or rejected if any of them become rejected.\n @static\n*/\nfunction all(entries) {\n return new Enumerator(this, entries).promise;\n}\n\n/**\n `Promise.race` returns a new promise which is settled in the same way as the\n first passed promise to settle.\n\n Example:\n\n ```javascript\n let promise1 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 1');\n }, 200);\n });\n\n let promise2 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 2');\n }, 100);\n });\n\n Promise.race([promise1, promise2]).then(function(result){\n // result === 'promise 2' because it was resolved before promise1\n // was resolved.\n });\n ```\n\n `Promise.race` is deterministic in that only the state of the first\n settled promise matters. For example, even if other promises given to the\n `promises` array argument are resolved, but the first settled promise has\n become rejected before the other promises became fulfilled, the returned\n promise will become rejected:\n\n ```javascript\n let promise1 = new Promise(function(resolve, reject){\n setTimeout(function(){\n resolve('promise 1');\n }, 200);\n });\n\n let promise2 = new Promise(function(resolve, reject){\n setTimeout(function(){\n reject(new Error('promise 2'));\n }, 100);\n });\n\n Promise.race([promise1, promise2]).then(function(result){\n // Code here never runs\n }, function(reason){\n // reason.message === 'promise 2' because promise 2 became rejected before\n // promise 1 became fulfilled\n });\n ```\n\n An example real-world use case is implementing timeouts:\n\n ```javascript\n Promise.race([ajax('foo.json'), timeout(5000)])\n ```\n\n @method race\n @static\n @param {Array} promises array of promises to observe\n Useful for tooling.\n @return {Promise} a promise which settles in the same way as the first passed\n promise to settle.\n*/\nfunction race(entries) {\n /*jshint validthis:true */\n var Constructor = this;\n\n if (!isArray(entries)) {\n return new Constructor(function (_, reject) {\n return reject(new TypeError('You must pass an array to race.'));\n });\n } else {\n return new Constructor(function (resolve, reject) {\n var length = entries.length;\n for (var i = 0; i < length; i++) {\n Constructor.resolve(entries[i]).then(resolve, reject);\n }\n });\n }\n}\n\n/**\n `Promise.reject` returns a promise rejected with the passed `reason`.\n It is shorthand for the following:\n\n ```javascript\n let promise = new Promise(function(resolve, reject){\n reject(new Error('WHOOPS'));\n });\n\n promise.then(function(value){\n // Code here doesn't run because the promise is rejected!\n }, function(reason){\n // reason.message === 'WHOOPS'\n });\n ```\n\n Instead of writing the above, your code now simply becomes the following:\n\n ```javascript\n let promise = Promise.reject(new Error('WHOOPS'));\n\n promise.then(function(value){\n // Code here doesn't run because the promise is rejected!\n }, function(reason){\n // reason.message === 'WHOOPS'\n });\n ```\n\n @method reject\n @static\n @param {Any} reason value that the returned promise will be rejected with.\n Useful for tooling.\n @return {Promise} a promise rejected with the given `reason`.\n*/\nfunction reject$1(reason) {\n /*jshint validthis:true */\n var Constructor = this;\n var promise = new Constructor(noop);\n reject(promise, reason);\n return promise;\n}\n\nfunction needsResolver() {\n throw new TypeError('You must pass a resolver function as the first argument to the promise constructor');\n}\n\nfunction needsNew() {\n throw new TypeError(\"Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.\");\n}\n\n/**\n Promise objects represent the eventual result of an asynchronous operation. The\n primary way of interacting with a promise is through its `then` method, which\n registers callbacks to receive either a promise's eventual value or the reason\n why the promise cannot be fulfilled.\n\n Terminology\n -----------\n\n - `promise` is an object or function with a `then` method whose behavior conforms to this specification.\n - `thenable` is an object or function that defines a `then` method.\n - `value` is any legal JavaScript value (including undefined, a thenable, or a promise).\n - `exception` is a value that is thrown using the throw statement.\n - `reason` is a value that indicates why a promise was rejected.\n - `settled` the final resting state of a promise, fulfilled or rejected.\n\n A promise can be in one of three states: pending, fulfilled, or rejected.\n\n Promises that are fulfilled have a fulfillment value and are in the fulfilled\n state. Promises that are rejected have a rejection reason and are in the\n rejected state. A fulfillment value is never a thenable.\n\n Promises can also be said to *resolve* a value. If this value is also a\n promise, then the original promise's settled state will match the value's\n settled state. So a promise that *resolves* a promise that rejects will\n itself reject, and a promise that *resolves* a promise that fulfills will\n itself fulfill.\n\n\n Basic Usage:\n ------------\n\n ```js\n let promise = new Promise(function(resolve, reject) {\n // on success\n resolve(value);\n\n // on failure\n reject(reason);\n });\n\n promise.then(function(value) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Advanced Usage:\n ---------------\n\n Promises shine when abstracting away asynchronous interactions such as\n `XMLHttpRequest`s.\n\n ```js\n function getJSON(url) {\n return new Promise(function(resolve, reject){\n let xhr = new XMLHttpRequest();\n\n xhr.open('GET', url);\n xhr.onreadystatechange = handler;\n xhr.responseType = 'json';\n xhr.setRequestHeader('Accept', 'application/json');\n xhr.send();\n\n function handler() {\n if (this.readyState === this.DONE) {\n if (this.status === 200) {\n resolve(this.response);\n } else {\n reject(new Error('getJSON: `' + url + '` failed with status: [' + this.status + ']'));\n }\n }\n };\n });\n }\n\n getJSON('/posts.json').then(function(json) {\n // on fulfillment\n }, function(reason) {\n // on rejection\n });\n ```\n\n Unlike callbacks, promises are great composable primitives.\n\n ```js\n Promise.all([\n getJSON('/posts'),\n getJSON('/comments')\n ]).then(function(values){\n values[0] // => postsJSON\n values[1] // => commentsJSON\n\n return values;\n });\n ```\n\n @class Promise\n @param {Function} resolver\n Useful for tooling.\n @constructor\n*/\n\nvar Promise$1 = function () {\n function Promise(resolver) {\n this[PROMISE_ID] = nextId();\n this._result = this._state = undefined;\n this._subscribers = [];\n\n if (noop !== resolver) {\n typeof resolver !== 'function' && needsResolver();\n this instanceof Promise ? initializePromise(this, resolver) : needsNew();\n }\n }\n\n /**\n The primary way of interacting with a promise is through its `then` method,\n which registers callbacks to receive either a promise's eventual value or the\n reason why the promise cannot be fulfilled.\n ```js\n findUser().then(function(user){\n // user is available\n }, function(reason){\n // user is unavailable, and you are given the reason why\n });\n ```\n Chaining\n --------\n The return value of `then` is itself a promise. This second, 'downstream'\n promise is resolved with the return value of the first promise's fulfillment\n or rejection handler, or rejected if the handler throws an exception.\n ```js\n findUser().then(function (user) {\n return user.name;\n }, function (reason) {\n return 'default name';\n }).then(function (userName) {\n // If `findUser` fulfilled, `userName` will be the user's name, otherwise it\n // will be `'default name'`\n });\n findUser().then(function (user) {\n throw new Error('Found user, but still unhappy');\n }, function (reason) {\n throw new Error('`findUser` rejected and we're unhappy');\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // if `findUser` fulfilled, `reason` will be 'Found user, but still unhappy'.\n // If `findUser` rejected, `reason` will be '`findUser` rejected and we're unhappy'.\n });\n ```\n If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream.\n ```js\n findUser().then(function (user) {\n throw new PedagogicalException('Upstream error');\n }).then(function (value) {\n // never reached\n }).then(function (value) {\n // never reached\n }, function (reason) {\n // The `PedgagocialException` is propagated all the way down to here\n });\n ```\n Assimilation\n ------------\n Sometimes the value you want to propagate to a downstream promise can only be\n retrieved asynchronously. This can be achieved by returning a promise in the\n fulfillment or rejection handler. The downstream promise will then be pending\n until the returned promise is settled. This is called *assimilation*.\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // The user's comments are now available\n });\n ```\n If the assimliated promise rejects, then the downstream promise will also reject.\n ```js\n findUser().then(function (user) {\n return findCommentsByAuthor(user);\n }).then(function (comments) {\n // If `findCommentsByAuthor` fulfills, we'll have the value here\n }, function (reason) {\n // If `findCommentsByAuthor` rejects, we'll have the reason here\n });\n ```\n Simple Example\n --------------\n Synchronous Example\n ```javascript\n let result;\n try {\n result = findResult();\n // success\n } catch(reason) {\n // failure\n }\n ```\n Errback Example\n ```js\n findResult(function(result, err){\n if (err) {\n // failure\n } else {\n // success\n }\n });\n ```\n Promise Example;\n ```javascript\n findResult().then(function(result){\n // success\n }, function(reason){\n // failure\n });\n ```\n Advanced Example\n --------------\n Synchronous Example\n ```javascript\n let author, books;\n try {\n author = findAuthor();\n books = findBooksByAuthor(author);\n // success\n } catch(reason) {\n // failure\n }\n ```\n Errback Example\n ```js\n function foundBooks(books) {\n }\n function failure(reason) {\n }\n findAuthor(function(author, err){\n if (err) {\n failure(err);\n // failure\n } else {\n try {\n findBoooksByAuthor(author, function(books, err) {\n if (err) {\n failure(err);\n } else {\n try {\n foundBooks(books);\n } catch(reason) {\n failure(reason);\n }\n }\n });\n } catch(error) {\n failure(err);\n }\n // success\n }\n });\n ```\n Promise Example;\n ```javascript\n findAuthor().\n then(findBooksByAuthor).\n then(function(books){\n // found books\n }).catch(function(reason){\n // something went wrong\n });\n ```\n @method then\n @param {Function} onFulfilled\n @param {Function} onRejected\n Useful for tooling.\n @return {Promise}\n */\n\n /**\n `catch` is simply sugar for `then(undefined, onRejection)` which makes it the same\n as the catch block of a try/catch statement.\n ```js\n function findAuthor(){\n throw new Error('couldn't find that author');\n }\n // synchronous\n try {\n findAuthor();\n } catch(reason) {\n // something went wrong\n }\n // async with promises\n findAuthor().catch(function(reason){\n // something went wrong\n });\n ```\n @method catch\n @param {Function} onRejection\n Useful for tooling.\n @return {Promise}\n */\n\n\n Promise.prototype.catch = function _catch(onRejection) {\n return this.then(null, onRejection);\n };\n\n /**\n `finally` will be invoked regardless of the promise's fate just as native\n try/catch/finally behaves\n \n Synchronous example:\n \n ```js\n findAuthor() {\n if (Math.random() > 0.5) {\n throw new Error();\n }\n return new Author();\n }\n \n try {\n return findAuthor(); // succeed or fail\n } catch(error) {\n return findOtherAuther();\n } finally {\n // always runs\n // doesn't affect the return value\n }\n ```\n \n Asynchronous example:\n \n ```js\n findAuthor().catch(function(reason){\n return findOtherAuther();\n }).finally(function(){\n // author was either found, or not\n });\n ```\n \n @method finally\n @param {Function} callback\n @return {Promise}\n */\n\n\n Promise.prototype.finally = function _finally(callback) {\n var promise = this;\n var constructor = promise.constructor;\n\n if (isFunction(callback)) {\n return promise.then(function (value) {\n return constructor.resolve(callback()).then(function () {\n return value;\n });\n }, function (reason) {\n return constructor.resolve(callback()).then(function () {\n throw reason;\n });\n });\n }\n\n return promise.then(callback, callback);\n };\n\n return Promise;\n}();\n\nPromise$1.prototype.then = then;\nPromise$1.all = all;\nPromise$1.race = race;\nPromise$1.resolve = resolve$1;\nPromise$1.reject = reject$1;\nPromise$1._setScheduler = setScheduler;\nPromise$1._setAsap = setAsap;\nPromise$1._asap = asap;\n\n/*global self*/\nfunction polyfill() {\n var local = void 0;\n\n if (typeof global !== 'undefined') {\n local = global;\n } else if (typeof self !== 'undefined') {\n local = self;\n } else {\n try {\n local = Function('return this')();\n } catch (e) {\n throw new Error('polyfill failed because global object is unavailable in this environment');\n }\n }\n\n var P = local.Promise;\n\n if (P) {\n var promiseToString = null;\n try {\n promiseToString = Object.prototype.toString.call(P.resolve());\n } catch (e) {\n // silently ignored\n }\n\n if (promiseToString === '[object Promise]' && !P.cast) {\n return;\n }\n }\n\n local.Promise = Promise$1;\n}\n\n// Strange compat..\nPromise$1.polyfill = polyfill;\nPromise$1.Promise = Promise$1;\n\nreturn Promise$1;\n\n})));\n\n\n\n//# sourceMappingURL=es6-promise.map\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(156);\n"],"names":["Object","defineProperty","exports","value","download","http_1","index_1","helpers_1","messages_1","core_1","transferSpec","options","asperaHttpGateway","isReady","errorLog","messages","serverNotVerified","Promise","resolve","reject","generateErrorBody","isValidTransferSpec","notValidTransferSpec","promiseInfo","generatePromiseObjects","zipRequire","zip_required","payload","transfer_spec","finalServerUrl","serverUrlOverride","cleanupServerUrl","globals","serverUrl","apiPost","concat","then","response","json","data","transfer_spec_id","downloadUrl","softwareMode","disableAutoDownload","resolver","url","triggerDownloadFromUrl","failedToGetDownloadUrl","rejecter","catch","error","downloadFailed","promise","__awaiter","this","thisArg","_arguments","P","generator","fulfilled","step","next","e","rejected","result","done","apply","__generator","body","f","y","t","g","_","label","sent","trys","ops","verb","Symbol","iterator","n","v","op","TypeError","call","pop","length","push","JSONRPCClient","models_1","internal_1","_send","createID","idToResolveMap","Map","id","prototype","_createID","timeout","delay","overrideCreateJSONRPCErrorResponse","_this","createJSONRPCErrorResponse","DefaultErrorCode","timeoutRequest","ids","request","timeoutID","setTimeout","forEach","get","delete","clearTimeout","method","params","clientParams","requestWithID","requestAdvanced","Array","isArray","map","filter","isDefinedAndNonNull","_a","createJSONRPCRequest","undefined","JSONRPCErrorException","message","code","Error","requests","areRequestsOriginallyArray","requestsWithID","promises","set","all","responses","send","receive","notify","createJSONRPCNotification","rejectAllPendingRequests","clear","safariClient","SafariClient","SafariExtensionEventType","keepAliveTimeout","keepAliveInterval","lastPing","lastPong","safariExtensionEnabled","subscribedTransferActivity","dispatchPromiseEvent","Request","promiseExecutors","listenResponseEvents","listenTransferActivityEvents","listenStatusEvents","listenClientStatusEvents","listenPongEvents","keepAlive","monitorTransferActivity","dispatchMonitorEvent","Monitor","asperaSdk","appId","extensionInterval","setInterval","clearInterval","buildRPCRequest","jsonrpc","randomUUID","dispatchEvent","type","detail","document","CustomEvent","console","warn","safeJsonString","handleResponse","requestId","executor","addEventListener","event","activityTracking","handleTransferActivity","handleWebSocketEvents","running","handleClientEvents","Date","now","safariExtensionStatusChanged","Ping","isEnabled","resumeTransferActivity_1","promiseExecutor","handleSafariExtensionEvents","checkSafariExtensionStatus","pingPongDiff","dropContainerName","keySplit","hiddenStyleList","ownKeys","__createBinding","create","o","m","k","k2","desc","getOwnPropertyDescriptor","__esModule","writable","configurable","enumerable","__setModuleDefault","__importStar","getOwnPropertyNames","ar","hasOwnProperty","mod","i","getInstallerUrls","getInfo","setBranding","deregisterStatusCallback","registerStatusCallback","getInstallerInfo","initDragDrop","removeDropzone","createDropzone","modifyTransfer","showPreferences","showSelectFolderDialog","showSelectFileDialog","deregisterRemovedCallback","registerRemovedCallback","getTransfer","getAllTransfers","resumeTransfer","stopTransfer","showDirectory","removeTransfer","deregisterActivityCallback","registerActivityCallback","launch","startTransfer","testConnection","init","isSafari","aspera_sdk_model_1","installer_1","httpGatewayCalls","AsperaSdk","window","startStream","injectStreamToDom","getFoldersForUploadPromise","getFoldersForUpload","getFilesForUploadPromise","getFilesForUpload","upload","cancelTransfer","clearNonActiveTransfers","getTransferById","testHttpGatewayConnection","initHttpGateway","http_gateway_global_model_1","download_1","upload_1","streaming_1","HttpGateway","onbeforeunload","checkForPageLeave","core_2","download_2","upload_2","streaming_2","getWebsocketUrl","getFeatureFlag","iterableToArray","getFilesForTransfer","folderTransferSpecExplode","parseFilesFromSpec","isValidForm","checkChildrenForFiles","isValidUrl","constants_1","debugData","httpGatewayLogs","errorResponse","indexOf","direction","remote_host","paths","children","filesFromForm","child","files","form","nodeType","tagName","transferSpecFilesMap","filesAddedList","path","source","file","name","specPath","file_size","size","formId","folderList","getOrCreateFolderDataList","folderDropList","newPaths","foundFiles","handleFolderData","asperaDropPath","webkitRelativePath","destination","newPath","createOrUseForm","childNodes","getOrCreateFormFileListFromDrop","iterable","newArray","addItem","featureFlag","serverInfo","version","versionData","split","major","Number","minor","patch","protocol","wsProtocol","replace","extendStatics","__extends","d","b","setPrototypeOf","__proto__","p","String","__","constructor","createJSONRPCSuccessResponse","JSONRPCErrorCode","isJSONRPCResponses","isJSONRPCResponse","isJSONRPCRequests","isJSONRPCRequest","isJSONRPCID","JSONRPC","every","createJSONRPCError","_super","toObject","apiGet","handlePromiseErrors","ok","fetch","headers","client_1","http_gateway_1","http_gateway_sdk_js_1","client","asperaSdkInfo","asperaAppVerified","sdkResponseData","initCall","useHttpGateway","throwError","dragDropInitFailed","dragDropInitFailedInit","_b","supportMultipleUsers","oldHttpTransfers","transfers","oldHttpTransfer","sendTransferUpdate","sessionId","handleErrors","serverError","getDesktopStartCalls","setup","httpGatewayUrl","httpGatewayVerified","finalHttpGatewayUrl","trim","endsWith","slice","responseData","status","httpGatewayInfo","iframeContainer","createElement","style","appendChild","httpGatewayIframeContainer","forceHttpGateway","httpInitFail","asperaSdkSpec","httpDownload","httpUpload","desktop_spec","app_id","transferFailed","callback","setCallback","removeCallback","setRemovedCallback","removeRemovedCallback","setWebSocketEventCallback","removeWebSocketEventCallback","httpRemoveTransfer","transfer_id","removeTransferFailed","stopTransferFailed","resumeTransferFailed","httpGatewaySelectFileFolderDialog","showSelectFileDialogFailed","showSelectFolderDialogFailed","showPreferencesFailed","httpGetAllTransfers","getAllTransfersFailed","transfer","httpGetTransfer","getTransferFailed","reason","showDirectoryFailed","modifyTransferFailed","branding","theme","setBrandingFailed","elementSelector","elements","querySelectorAll","dragEvent","preventDefault","dropEvent","dataTransfer","lastModified","unableToReadDropped","httpGatewayIsReady","handleHttpGatewayDrop","items","element","dropZonesCreated","unableToFindElementOnPage","foundDropzone","removeEventListener","apiDelete","apiPut","getHeaders","getUrlWithQueryParams","getQueryString","queryString","keys","key","encodeURIComponent","additionalHeaders","requiredHeaders","queryParams","JSON","stringify","useOldHttpGateway","http_gateway_v2_transfer_id","XMLHttpRequest","FormData","append","hasBadFile","foundFile","httpGatewaySelectedFiles","fileNotAllowed","invalidFiles","transferObject","getSdkTransfer","http_gateway_authentication","setRequestHeader","token","access_key","open","http_gateway_override_server_url","triggerUpdate","triggerFailed","errorData","getMessageFromError","httpRequestId","getResponseHeader","error_code","error_desc","elapsed_usec","getTime","add_time","lengthComputable","bytes_expected","total","bytes_written","loaded","percentage","createHtmlInputElement","__assign","assign","s","arguments","__spreadArray","to","from","pack","l","JSONRPCServer","createInvalidRequestResponse","InvalidRequest","mapErrorToJSONRPCErrorResponse","defaultMapErrorToJSONRPCErrorResponse","nameToMethodDictionary","middleware","errorListener","hasMethod","addMethod","addMethodAdvanced","toJSONRPCMethod","removeMethod","serverParams","mapResultToJSONRPCResponse","receiveJSON","tryParseRequestJSON","ParseError","parse","receiveMultiple","receiveSingle","isNonNull","callMethod","mapResponse","applyMiddleware","middlewares","_i","combineMiddlewares","reduce","middlewareReducer","prevMiddleware","nextMiddleware","onError","mapErrorToJSONRPCErrorResponseIfNecessary","noopMiddleware","MethodNotFound","InternalError","supportMultipleServers","serverUrlNotSet","backupServerData","endpoints","sdkVerificationFailed","serverVerified","setUpServer","invalidServerUrl","transfer_info","getAllTransfersResponse","callbackIsNotFunction","failedToGenerateIframe","getInstallerError","invalidEndpoint","loadingProtocol","websocketClosedError","websocketClosedUnexpect","websocketNotReady","httpNotAvailable","filePickerCancel","httpNetworkFail","JSONRPCServerAndClient","server","applyServerMiddleware","jsonRPCRequest","receiveAndSend","installerUrl","baseInstallerUrl","http_client_1","safari_client_1","httpClient","handlePromiseLikeErrors","getRpcServerUrl","json_rpc_2_0_1","asperaAppUrl","rpcPort","JSONRPCHttpClient","handleRequest","rpcServerURL","rpcResponse","statusText","endpoint","isValidURL","entries","entry","platform_1","getCurrentPlatform","platform","videoDomQuery","videoOptions","injectPoint","querySelector","firstChild","removeChild","video","classList","add","controls","autoplay","loop","muted","poster","height","width","setAttribute","canPlayType","src","play","Hls","isSupported","hls","loadSource","attachMedia","on","Events","MANIFEST_PARSED","streamInjectDomInvalid","query","streamingTooManyFiles","streamUrl","failedToGetStreamUrl","streamFailed","tags","aspera","expected_size","httpGatewayInBrowserDownloadThreshold","base64Encoding","responseHeaders","chunks","reader","getReader","readBytes","read","content","blobData","Blob","objectURL","URL","createObjectURL","a","href","click","revokeObjectURL","httpDownloadInBrowser","httpDownloadExternalHandle","accept","toString","host","iframe","signed_url","httpDownloadPresigned","removed","httpGatewayTransferStore","values","callbackCount","callbackFinishCount","finalCallback","finalFiles","traverse","item","isFile","isDirectory","createReader","readEntries","webkitGetAsEntry","folder","multiple","webkitdirectory","oncancel","onchange","returnFiles","uuid","current_file","toISOString","file_counts","attempted","completed","failed","skipped","end_time","explorer_path","calculated_rate_kbps","title","remaining_usec","httpGatewayTransfer","safeJsonParse","description","jsonString","bytes","TextEncoder","encode","binString","byte","fromCodePoint","join","btoa","startWebSocketTransfer","addFolderPickerToForm","addFilePickerToForm","startSendingData","handleSoftwareModeSlicing","handleBlobSlicing","updateTransferActivity","current","currentFile","queuedUploads","transferToStart","shift","setEndTime","deleteFormFromContainer","triggerActivityCallbacks","filePosition","chunksize","fileReader","chunk","mozSlice","webkitSlice","onload","target","Buffer","socket","queue","fileReaderToUse","totalFileSize","totalSentSize","index","filePiece","totalSlices","Math","ceil","chunkSize","_loop_1","sendChunkCallback","close","binaryString","slice_upload","total_slices","fileIndex","unableToParseDataForUpload","foundTransfer","recentPacketTransfer","mozdirectory","msdirectory","odirectory","directory","formToUse","inputFile","FileSelected","promiseToUse","folders","rootFolder","formFolderData","FileReader","WebSocket","location","onopen","setTransfer","HttpTransfer","onclose","onmessage","onerror","memoryFilesToLoad","folderExplodeData","unableToGetFilesForUpload","unauthorizedFilesForUpload","random","toFixed","getActiveTransfers","concurrentUploads","currentFiles","kind","_loop_2","fileEntry","getAsFile","folder_1","recursiveReader_1","entryItem","fullPath","unableToReadFolder","alert","dropzonesCreated","__exportStar","websocketService","WebsocketService","sockets","isConnected","initPromise","handleOpen","joinChannel","updateRpcPort","notifyEvent","handleClose","globalSocket","reconnect","handleNotReady","handleError","handleMessage","registerMessage","messageName","registerEvent","eventListener","connect","getWebSocketConnection","webSocket","startPort","endPort","webSocketUrl","connectPort","port","checkPort","ws","asperaSdkLogs","ua","navigator","userAgent","test","crypto","c","r","MSStream","base","latest","spec","recentPackets","transport","timeBetweenLastPackets","timeStamp","bytesWrittenInLastPackets_1","packet","ActivityTracking","TransferResponse","ServerInfo","HttpGatewayGlobals","mainContainerId","formContainerId","downloadsContainerId","formsAvailable","formsFilesFromDrop","folderFiles","formContainer","foundForm","removeAllFormsFromContainer","mainContainer","downloadsContainer","backupDownloadMethod","loadingDownload","callbacks","needCallback","pollCallbacks","iteration_token","result_count","returnMap","transferList","transferMap","returnValue","leavingWhileUploading","overwriteDefaultChunkSize","invalidChunkSize","requestedSize","overwriteDefaultConcurrentUploads","invalidConcurrentUploads","unableToUpload","unableToDeepCopyObject","startDownload","dropFoldersNotAllowed","yes","no","ws_1","AsperaSdkGlobals","backupLaunchMethod","verified","httpGateway","info","activity_callbacks","removed_callbacks","event_callbacks","lastWebSocketEvent","lastNotifiedWebSocketEvent","webSocketEvent","notifyWebSocketEvent","safariExtensionEvent","SAFARI_EXTENSION_STATUS","registerDesktopAppSession","display","module","isFunction","x","len","vertxNext","customSchedulerFn","asap","arg","flush","scheduleFlush","browserWindow","browserGlobal","BrowserMutationObserver","MutationObserver","WebKitMutationObserver","isNode","self","process","isWorker","Uint8ClampedArray","importScripts","MessageChannel","useSetTimeout","globalSetTimeout","channel","iterations","observer","node","onFulfillment","onRejection","parent","noop","PROMISE_ID","makePromise","_state","invokeCallback","_result","subscribe","resolve$1","object","nextTick","createTextNode","observe","characterData","port1","port2","postMessage","vertx","Function","require","runOnLoop","runOnContext","attemptVertx","substring","PENDING","FULFILLED","REJECTED","handleMaybeThenable","maybeThenable","then$$1","thenable","fulfill","handleOwnThenable","sealed","fulfillmentHandler","rejectionHandler","tryThen","_label","handleForeignThenable","publishRejection","_onerror","publish","_subscribers","subscribers","settled","hasCallback","succeeded","Enumerator","Constructor","input","_instanceConstructor","_remaining","_enumerate","_eachEntry","resolve$$1","_then","didError","_settledAt","Promise$1","_willSettleAt","state","enumerator","needsResolver","initializePromise","needsNew","finally","race","_setScheduler","scheduleFn","_setAsap","asapFn","_asap","polyfill","local","promiseToString","cast","factory","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","globalThis"],"sourceRoot":""}
|