oxygen-cli 1.22.0 → 1.99.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +0 -50
- package/build/core/OxygenCore.js +56 -145
- package/build/errors/OxygenError.js +5 -15
- package/build/errors/helper.js +45 -49
- package/build/index.js +14 -6
- package/build/lib/cli-util.js +19 -19
- package/build/lib/cli.js +4 -2
- package/build/lib/parallel-launcher.js +333 -0
- package/build/lib/param-manager.js +66 -47
- package/build/lib/util.js +38 -9
- package/build/ox_modules/index.js +1 -97
- package/build/ox_modules/module-assert.js +19 -9
- package/build/ox_modules/module-dns.js +220 -0
- package/build/ox_modules/module-http.js +39 -51
- package/build/ox_modules/module-shell.js +19 -75
- package/build/ox_modules/module-utils.js +1 -108
- package/build/ox_modules/utils.js +1 -357
- package/build/reporter/FileReporterBase.js +5 -5
- package/build/reporter/ReportAggregator.js +127 -4
- package/build/runners/WorkerProcess.js +15 -28
- package/build/runners/index.js +2 -6
- package/build/runners/oxygen/OxygenWorker.js +8 -8
- package/build/runners/oxygen/index.js +17 -18
- package/build/runners/oxygen/worker.js +10 -8
- package/package.json +12 -46
- package/build/lib/img-merge.js +0 -163
- package/build/ox_modules/module-db.js +0 -146
- package/build/ox_modules/module-email.js +0 -212
- package/build/ox_modules/module-eyes.js +0 -189
- package/build/ox_modules/module-mailinator.js +0 -207
- package/build/ox_modules/module-mob/commands/alertAccept.js +0 -35
- package/build/ox_modules/module-mob/commands/alertDismiss.js +0 -35
- package/build/ox_modules/module-mob/commands/assertAlert.js +0 -56
- package/build/ox_modules/module-mob/commands/assertText.js +0 -45
- package/build/ox_modules/module-mob/commands/assertTitle.js +0 -43
- package/build/ox_modules/module-mob/commands/assertValue.js +0 -66
- package/build/ox_modules/module-mob/commands/back.js +0 -27
- package/build/ox_modules/module-mob/commands/clear.js +0 -40
- package/build/ox_modules/module-mob/commands/click.js +0 -35
- package/build/ox_modules/module-mob/commands/clickHidden.js +0 -52
- package/build/ox_modules/module-mob/commands/clickLong.js +0 -34
- package/build/ox_modules/module-mob/commands/clickMultipleTimes.js +0 -37
- package/build/ox_modules/module-mob/commands/closeApp.js +0 -27
- package/build/ox_modules/module-mob/commands/debug.js +0 -26
- package/build/ox_modules/module-mob/commands/dragAndDrop.js +0 -38
- package/build/ox_modules/module-mob/commands/enableNetwork.js +0 -75
- package/build/ox_modules/module-mob/commands/execute.js +0 -32
- package/build/ox_modules/module-mob/commands/findElement.js +0 -36
- package/build/ox_modules/module-mob/commands/findElements.js +0 -39
- package/build/ox_modules/module-mob/commands/getAlertText.js +0 -31
- package/build/ox_modules/module-mob/commands/getAppiumLogs.js +0 -26
- package/build/ox_modules/module-mob/commands/getBrowserLogs.js +0 -66
- package/build/ox_modules/module-mob/commands/getCurrentActivity.js +0 -26
- package/build/ox_modules/module-mob/commands/getCurrentPackage.js +0 -26
- package/build/ox_modules/module-mob/commands/getDeviceLogs.js +0 -57
- package/build/ox_modules/module-mob/commands/getDeviceTime.js +0 -27
- package/build/ox_modules/module-mob/commands/getLocation.js +0 -32
- package/build/ox_modules/module-mob/commands/getSource.js +0 -26
- package/build/ox_modules/module-mob/commands/getText.js +0 -36
- package/build/ox_modules/module-mob/commands/getTitle.js +0 -24
- package/build/ox_modules/module-mob/commands/getUrl.js +0 -28
- package/build/ox_modules/module-mob/commands/getValue.js +0 -50
- package/build/ox_modules/module-mob/commands/getWindowHandles.js +0 -27
- package/build/ox_modules/module-mob/commands/hideKeyboard.js +0 -33
- package/build/ox_modules/module-mob/commands/index.js +0 -594
- package/build/ox_modules/module-mob/commands/installApp.js +0 -28
- package/build/ox_modules/module-mob/commands/isAppInstalled.js +0 -28
- package/build/ox_modules/module-mob/commands/isCheckable.js +0 -31
- package/build/ox_modules/module-mob/commands/isChecked.js +0 -31
- package/build/ox_modules/module-mob/commands/isClickable.js +0 -31
- package/build/ox_modules/module-mob/commands/isExist.js +0 -36
- package/build/ox_modules/module-mob/commands/isSelected.js +0 -36
- package/build/ox_modules/module-mob/commands/isVisible.js +0 -36
- package/build/ox_modules/module-mob/commands/isWebViewContext.js +0 -27
- package/build/ox_modules/module-mob/commands/launchApp.js +0 -26
- package/build/ox_modules/module-mob/commands/longPressKeyCode.js +0 -30
- package/build/ox_modules/module-mob/commands/open.js +0 -43
- package/build/ox_modules/module-mob/commands/pause.js +0 -27
- package/build/ox_modules/module-mob/commands/removeApp.js +0 -28
- package/build/ox_modules/module-mob/commands/resetApp.js +0 -26
- package/build/ox_modules/module-mob/commands/scrollIntoElement.js +0 -86
- package/build/ox_modules/module-mob/commands/scrollIntoView.js +0 -40
- package/build/ox_modules/module-mob/commands/select.js +0 -54
- package/build/ox_modules/module-mob/commands/selectFrame.js +0 -53
- package/build/ox_modules/module-mob/commands/selectWindow.js +0 -149
- package/build/ox_modules/module-mob/commands/sendKeys.js +0 -84
- package/build/ox_modules/module-mob/commands/setContext.js +0 -28
- package/build/ox_modules/module-mob/commands/setNativeContext.js +0 -26
- package/build/ox_modules/module-mob/commands/setTimeout.js +0 -33
- package/build/ox_modules/module-mob/commands/setWebViewContext.js +0 -39
- package/build/ox_modules/module-mob/commands/shake.js +0 -27
- package/build/ox_modules/module-mob/commands/smsClickLink.js +0 -32
- package/build/ox_modules/module-mob/commands/smsGetText.js +0 -45
- package/build/ox_modules/module-mob/commands/swipe.js +0 -58
- package/build/ox_modules/module-mob/commands/swipeElement.js +0 -58
- package/build/ox_modules/module-mob/commands/swipeScreen.js +0 -56
- package/build/ox_modules/module-mob/commands/takeScreenshot.js +0 -27
- package/build/ox_modules/module-mob/commands/tap.js +0 -34
- package/build/ox_modules/module-mob/commands/type.js +0 -67
- package/build/ox_modules/module-mob/commands/unlockPattern.js +0 -92
- package/build/ox_modules/module-mob/commands/waitForExist.js +0 -29
- package/build/ox_modules/module-mob/commands/waitForInteractable.js +0 -42
- package/build/ox_modules/module-mob/commands/waitForVisible.js +0 -28
- package/build/ox_modules/module-mob.js +0 -699
- package/build/ox_modules/module-pdf.js +0 -328
- package/build/ox_modules/module-proxy.js +0 -324
- package/build/ox_modules/module-serial.js +0 -187
- package/build/ox_modules/module-soap.js +0 -260
- package/build/ox_modules/module-twilio.js +0 -192
- package/build/ox_modules/module-web/commands/alertAccept.js +0 -35
- package/build/ox_modules/module-web/commands/alertDismiss.js +0 -35
- package/build/ox_modules/module-web/commands/assertAlert.js +0 -55
- package/build/ox_modules/module-web/commands/assertExist.js +0 -28
- package/build/ox_modules/module-web/commands/assertSelectedLabel.js +0 -51
- package/build/ox_modules/module-web/commands/assertSelectedValue.js +0 -45
- package/build/ox_modules/module-web/commands/assertText.js +0 -45
- package/build/ox_modules/module-web/commands/assertTextNotPresent.js +0 -56
- package/build/ox_modules/module-web/commands/assertTextPresent.js +0 -52
- package/build/ox_modules/module-web/commands/assertTitle.js +0 -42
- package/build/ox_modules/module-web/commands/assertValue.js +0 -44
- package/build/ox_modules/module-web/commands/back.js +0 -27
- package/build/ox_modules/module-web/commands/clear.js +0 -41
- package/build/ox_modules/module-web/commands/click.js +0 -112
- package/build/ox_modules/module-web/commands/clickHidden.js +0 -79
- package/build/ox_modules/module-web/commands/closeWindow.js +0 -25
- package/build/ox_modules/module-web/commands/debug.js +0 -25
- package/build/ox_modules/module-web/commands/deleteCookies.js +0 -22
- package/build/ox_modules/module-web/commands/deselect.js +0 -34
- package/build/ox_modules/module-web/commands/doubleClick.js +0 -65
- package/build/ox_modules/module-web/commands/dragAndDrop.js +0 -36
- package/build/ox_modules/module-web/commands/execute.js +0 -36
- package/build/ox_modules/module-web/commands/fileBrowse.js +0 -72
- package/build/ox_modules/module-web/commands/findElement.js +0 -35
- package/build/ox_modules/module-web/commands/findElements.js +0 -38
- package/build/ox_modules/module-web/commands/fullscreenWindow.js +0 -24
- package/build/ox_modules/module-web/commands/getAlertText.js +0 -30
- package/build/ox_modules/module-web/commands/getAttribute.js +0 -38
- package/build/ox_modules/module-web/commands/getBrowserLogs.js +0 -34
- package/build/ox_modules/module-web/commands/getCookies.js +0 -23
- package/build/ox_modules/module-web/commands/getCssValue.js +0 -38
- package/build/ox_modules/module-web/commands/getElementCount.js +0 -29
- package/build/ox_modules/module-web/commands/getHTML.js +0 -30
- package/build/ox_modules/module-web/commands/getSource.js +0 -26
- package/build/ox_modules/module-web/commands/getText.js +0 -36
- package/build/ox_modules/module-web/commands/getTitle.js +0 -22
- package/build/ox_modules/module-web/commands/getUrl.js +0 -26
- package/build/ox_modules/module-web/commands/getValue.js +0 -43
- package/build/ox_modules/module-web/commands/getWindowHandles.js +0 -26
- package/build/ox_modules/module-web/commands/getWindowSize.js +0 -26
- package/build/ox_modules/module-web/commands/getXMLPageSource.js +0 -51
- package/build/ox_modules/module-web/commands/index.js +0 -634
- package/build/ox_modules/module-web/commands/isAlertPresent.js +0 -31
- package/build/ox_modules/module-web/commands/isChecked.js +0 -30
- package/build/ox_modules/module-web/commands/isExist.js +0 -36
- package/build/ox_modules/module-web/commands/isSelected.js +0 -35
- package/build/ox_modules/module-web/commands/isVisible.js +0 -36
- package/build/ox_modules/module-web/commands/makeVisible.js +0 -74
- package/build/ox_modules/module-web/commands/maximizeWindow.js +0 -24
- package/build/ox_modules/module-web/commands/minimizeWindow.js +0 -24
- package/build/ox_modules/module-web/commands/newWindow.js +0 -27
- package/build/ox_modules/module-web/commands/open.js +0 -42
- package/build/ox_modules/module-web/commands/pause.js +0 -26
- package/build/ox_modules/module-web/commands/point.js +0 -37
- package/build/ox_modules/module-web/commands/pointJS.js +0 -56
- package/build/ox_modules/module-web/commands/refresh.js +0 -26
- package/build/ox_modules/module-web/commands/rightClick.js +0 -61
- package/build/ox_modules/module-web/commands/rightClickActions.js +0 -57
- package/build/ox_modules/module-web/commands/scrollToElement.js +0 -33
- package/build/ox_modules/module-web/commands/select.js +0 -55
- package/build/ox_modules/module-web/commands/selectFrame.js +0 -52
- package/build/ox_modules/module-web/commands/selectWindow.js +0 -148
- package/build/ox_modules/module-web/commands/sendKeys.js +0 -56
- package/build/ox_modules/module-web/commands/setAutoWaitForAngular.js +0 -33
- package/build/ox_modules/module-web/commands/setTimeout.js +0 -33
- package/build/ox_modules/module-web/commands/setWindowSize.js +0 -29
- package/build/ox_modules/module-web/commands/takeScreenshot.js +0 -37
- package/build/ox_modules/module-web/commands/type.js +0 -52
- package/build/ox_modules/module-web/commands/waitForAngular.js +0 -83
- package/build/ox_modules/module-web/commands/waitForExist.js +0 -28
- package/build/ox_modules/module-web/commands/waitForInteractable.js +0 -31
- package/build/ox_modules/module-web/commands/waitForNotExist.js +0 -57
- package/build/ox_modules/module-web/commands/waitForNotText.js +0 -45
- package/build/ox_modules/module-web/commands/waitForNotValue.js +0 -45
- package/build/ox_modules/module-web/commands/waitForText.js +0 -45
- package/build/ox_modules/module-web/commands/waitForValue.js +0 -45
- package/build/ox_modules/module-web/commands/waitForVisible.js +0 -28
- package/build/ox_modules/module-web/commands/waitForWindow.js +0 -118
- package/build/ox_modules/module-web.js +0 -909
- package/build/ox_modules/module-win/commands/assertText.js +0 -41
- package/build/ox_modules/module-win/commands/assertTitle.js +0 -38
- package/build/ox_modules/module-win/commands/assertValue.js +0 -62
- package/build/ox_modules/module-win/commands/back.js +0 -21
- package/build/ox_modules/module-win/commands/clear.js +0 -34
- package/build/ox_modules/module-win/commands/click.js +0 -25
- package/build/ox_modules/module-win/commands/clickLong.js +0 -30
- package/build/ox_modules/module-win/commands/clickMultipleTimes.js +0 -33
- package/build/ox_modules/module-win/commands/findElement.js +0 -31
- package/build/ox_modules/module-win/commands/findElements.js +0 -31
- package/build/ox_modules/module-win/commands/getAppiumLogs.js +0 -22
- package/build/ox_modules/module-win/commands/getCurrentWindowHandle.js +0 -25
- package/build/ox_modules/module-win/commands/getLocation.js +0 -26
- package/build/ox_modules/module-win/commands/getSource.js +0 -22
- package/build/ox_modules/module-win/commands/getText.js +0 -32
- package/build/ox_modules/module-win/commands/getValue.js +0 -46
- package/build/ox_modules/module-win/commands/getWindowHandles.js +0 -25
- package/build/ox_modules/module-win/commands/index.js +0 -298
- package/build/ox_modules/module-win/commands/isCheckable.js +0 -26
- package/build/ox_modules/module-win/commands/isChecked.js +0 -26
- package/build/ox_modules/module-win/commands/isClickable.js +0 -26
- package/build/ox_modules/module-win/commands/isExist.js +0 -32
- package/build/ox_modules/module-win/commands/isSelected.js +0 -26
- package/build/ox_modules/module-win/commands/isVisible.js +0 -32
- package/build/ox_modules/module-win/commands/open.js +0 -24
- package/build/ox_modules/module-win/commands/pause.js +0 -23
- package/build/ox_modules/module-win/commands/rightClick.js +0 -30
- package/build/ox_modules/module-win/commands/selectWindow.js +0 -97
- package/build/ox_modules/module-win/commands/sendKeys.js +0 -50
- package/build/ox_modules/module-win/commands/setTimeout.js +0 -29
- package/build/ox_modules/module-win/commands/takeScreenshot.js +0 -26
- package/build/ox_modules/module-win/commands/tap.js +0 -29
- package/build/ox_modules/module-win/commands/type.js +0 -38
- package/build/ox_modules/module-win/commands/waitForExist.js +0 -25
- package/build/ox_modules/module-win/commands/waitForInteractable.js +0 -43
- package/build/ox_modules/module-win/commands/waitForVisible.js +0 -24
- package/build/ox_modules/module-win.js +0 -367
- package/build/ox_services/service-devtools/submodule-network.js +0 -338
- package/build/ox_services/service-devtools.js +0 -83
- package/build/runners/cucumber/CucumberEventListener.js +0 -181
- package/build/runners/cucumber/CucumberReporter.js +0 -277
- package/build/runners/cucumber/CucumberWorker.js +0 -337
- package/build/runners/cucumber/index.js +0 -159
- package/build/runners/cucumber/worker.js +0 -184
|
@@ -1,260 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
require("source-map-support/register");
|
|
4
|
-
|
|
5
|
-
var _OxygenError = _interopRequireDefault(require("../errors/OxygenError"));
|
|
6
|
-
|
|
7
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
8
|
-
|
|
9
|
-
/*
|
|
10
|
-
* Copyright (C) 2015-present CloudBeat Limited
|
|
11
|
-
*
|
|
12
|
-
* This program is free software: you can redistribute it and/or modify
|
|
13
|
-
* it under the terms of the GNU General Public License as published by
|
|
14
|
-
* the Free Software Foundation, either version 3 of the License, or
|
|
15
|
-
* (at your option) any later version.
|
|
16
|
-
*/
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* @name soap
|
|
20
|
-
* @description Provides methods for working with SOAP based Web Services.
|
|
21
|
-
*/
|
|
22
|
-
var errHelper = require('../errors/helper');
|
|
23
|
-
|
|
24
|
-
module.exports = function () {
|
|
25
|
-
var soap = require('soap');
|
|
26
|
-
|
|
27
|
-
var auth = null;
|
|
28
|
-
var proxyOptions = {};
|
|
29
|
-
var options = {
|
|
30
|
-
rejectUnauthorized: false
|
|
31
|
-
};
|
|
32
|
-
var lastResponseHeaders = null;
|
|
33
|
-
|
|
34
|
-
module.isInitialized = function () {
|
|
35
|
-
return true;
|
|
36
|
-
};
|
|
37
|
-
/**
|
|
38
|
-
* @summary Sets proxy url to be used for connections with the service.
|
|
39
|
-
* @function setProxy
|
|
40
|
-
* @param {String} url - Proxy url. Invocation without arguments will remove any previously set url.
|
|
41
|
-
*/
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
module.setProxy = function (url) {
|
|
45
|
-
if (url) {
|
|
46
|
-
proxyOptions = {
|
|
47
|
-
proxy: url
|
|
48
|
-
};
|
|
49
|
-
} else {
|
|
50
|
-
proxyOptions = {};
|
|
51
|
-
}
|
|
52
|
-
};
|
|
53
|
-
/**
|
|
54
|
-
* @summary Sets Basic Authentication details to be used for connections with the service.
|
|
55
|
-
* @function authBasic
|
|
56
|
-
* @param {String} user - Username.
|
|
57
|
-
* @param {String} pass - Password.
|
|
58
|
-
*/
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
module.authBasic = function (user, pass) {
|
|
62
|
-
auth = new soap.BasicAuthSecurity(user, pass);
|
|
63
|
-
};
|
|
64
|
-
/**
|
|
65
|
-
* @summary Sets Bearer Token Authentication details to be used for connections with the service.
|
|
66
|
-
* @function authBearer
|
|
67
|
-
* @param {String} token - Token.
|
|
68
|
-
*/
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
module.authBearer = function (token) {
|
|
72
|
-
auth = new soap.BearerSecurity(token);
|
|
73
|
-
};
|
|
74
|
-
/**
|
|
75
|
-
* @summary Sets NTLM Authentication details to be used for connections with the service.
|
|
76
|
-
* @function authNTLM
|
|
77
|
-
* @param {String} user - Username.
|
|
78
|
-
* @param {String} pass - Password.
|
|
79
|
-
* @param {String} domain - Domain.
|
|
80
|
-
* @param {String} workstation - Workstation.
|
|
81
|
-
*/
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
module.authNTLM = function (user, pass, domain, workstation) {
|
|
85
|
-
auth = new soap.NTLMSecurity(user, pass, domain, workstation);
|
|
86
|
-
};
|
|
87
|
-
/**
|
|
88
|
-
* @summary Initiates a SOAP request and returns the response.
|
|
89
|
-
* @function get
|
|
90
|
-
* @param {String} wsdlUrl - URL pointing to the WSDL XML.
|
|
91
|
-
* @param {String} method - Method name (case sensitive).
|
|
92
|
-
* @param {Object=} args - Object containing the arguments.
|
|
93
|
-
* @param {Object=} wsdlHeaders - custom HTTP headers to be sent on WSDL requests.
|
|
94
|
-
* @return {Object} The response object.
|
|
95
|
-
* @example <caption>[javascript] Usage example</caption>
|
|
96
|
-
* // get SOAP service description, so we can understand what methods it provides,
|
|
97
|
-
* // what input parameters it expects, and what is the output structure.
|
|
98
|
-
* var serviceUrl = 'http://www.dataaccess.com/webservicesserver/numberconversion.wso?WSDL';
|
|
99
|
-
* var serviceDescription = soap.describe(serviceUrl);
|
|
100
|
-
* log.info(serviceDescription);
|
|
101
|
-
*
|
|
102
|
-
* // NumberToWords method in this service converts number to words.
|
|
103
|
-
* var result = soap.get(serviceUrl, 'NumberToWords', { 'ubiNum': 2019 });
|
|
104
|
-
* log.info(result.NumberToWordsResult);
|
|
105
|
-
*/
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
module.get = async function (wsdlUrl, method, args, wsdlHeaders = {}) {
|
|
109
|
-
var resultClient = null;
|
|
110
|
-
var result = null;
|
|
111
|
-
await (() => {
|
|
112
|
-
return new Promise((resolve, reject) => {
|
|
113
|
-
soap.createClient(wsdlUrl, {
|
|
114
|
-
wsdl_options: { ...options,
|
|
115
|
-
...proxyOptions
|
|
116
|
-
},
|
|
117
|
-
wsdl_headers: wsdlHeaders
|
|
118
|
-
}, (err, client) => {
|
|
119
|
-
if (client === undefined) {
|
|
120
|
-
var msg = 'Error creating client';
|
|
121
|
-
|
|
122
|
-
if (err.message) {
|
|
123
|
-
var soapMsg = err.message;
|
|
124
|
-
var firstBreakIndex = soapMsg.indexOf('\n');
|
|
125
|
-
|
|
126
|
-
if (firstBreakIndex > 0) {
|
|
127
|
-
soapMsg = err.message.substring(0, firstBreakIndex);
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
msg += ': ' + soapMsg;
|
|
131
|
-
} else if (err && (typeof err === 'string' || err instanceof String)) {
|
|
132
|
-
msg += ': ' + err;
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
resultClient = new _OxygenError.default(errHelper.errorCode.SOAP_ERROR, msg);
|
|
136
|
-
resolve();
|
|
137
|
-
return;
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
resultClient = client;
|
|
141
|
-
|
|
142
|
-
if (typeof client[method] !== 'function') {
|
|
143
|
-
resultClient = new _OxygenError.default(errHelper.errorCode.SOAP_ERROR, 'No method named ' + method + ' was found.');
|
|
144
|
-
resolve();
|
|
145
|
-
return;
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
if (auth) {
|
|
149
|
-
client.setSecurity(auth);
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
if (wsdlHeaders) {
|
|
153
|
-
for (const header in wsdlHeaders) {
|
|
154
|
-
client.addHttpHeader(header, wsdlHeaders[header]);
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
client[method](args, (err, res) => {
|
|
159
|
-
lastResponseHeaders = client.lastResponseHeaders;
|
|
160
|
-
|
|
161
|
-
if (err !== null && err.root && err.root.Envelope && err.root.Envelope.Body && err.root.Envelope.Body.Fault) {
|
|
162
|
-
result = new _OxygenError.default(errHelper.errorCode.SOAP_ERROR, JSON.stringify(err.root.Envelope.Body.Fault.faultstring));
|
|
163
|
-
} else if (err !== null) {
|
|
164
|
-
result = new _OxygenError.default(errHelper.errorCode.SOAP_ERROR, require('util').inspect(err, {
|
|
165
|
-
depth: 4
|
|
166
|
-
}));
|
|
167
|
-
} else {
|
|
168
|
-
result = res;
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
resolve();
|
|
172
|
-
return;
|
|
173
|
-
}, { ...options,
|
|
174
|
-
...proxyOptions
|
|
175
|
-
});
|
|
176
|
-
});
|
|
177
|
-
});
|
|
178
|
-
})();
|
|
179
|
-
|
|
180
|
-
if (resultClient.type === errHelper.errorCode.SOAP_ERROR) {
|
|
181
|
-
throw resultClient;
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
if (result.type === errHelper.errorCode.SOAP_ERROR) {
|
|
185
|
-
throw result;
|
|
186
|
-
}
|
|
187
|
-
|
|
188
|
-
return result;
|
|
189
|
-
};
|
|
190
|
-
/**
|
|
191
|
-
* @summary Returns last response headers.
|
|
192
|
-
* @function getLastResponseHeaders
|
|
193
|
-
* @return {Object} IncomingHttpHeaders (https://microsoft.github.io/PowerBI-JavaScript/interfaces/_node_modules__types_node_http2_d_._http2_.incominghttpheaders.html).
|
|
194
|
-
*/
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
module.getLastResponseHeaders = function () {
|
|
198
|
-
return lastResponseHeaders;
|
|
199
|
-
};
|
|
200
|
-
/**
|
|
201
|
-
* @summary Returns SOAP service description.
|
|
202
|
-
* @function describe
|
|
203
|
-
* @param {String} wsdlUrl - URL pointing to the WSDL XML.
|
|
204
|
-
* @param {Object=} wsdlHeaders - custom HTTP headers to be sent on WSDL requests.
|
|
205
|
-
* @return {Object} Service description.
|
|
206
|
-
*/
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
module.describe = async function (wsdlUrl, wsdlHeaders = {}) {
|
|
210
|
-
var resultClient = null;
|
|
211
|
-
await (() => {
|
|
212
|
-
return new Promise((resolve, reject) => {
|
|
213
|
-
soap.createClient(wsdlUrl, {
|
|
214
|
-
wsdl_options: { ...options,
|
|
215
|
-
...proxyOptions
|
|
216
|
-
},
|
|
217
|
-
wsdl_headers: wsdlHeaders
|
|
218
|
-
}, (err, client) => {
|
|
219
|
-
if (client === undefined) {
|
|
220
|
-
var msg = 'Error creating client';
|
|
221
|
-
|
|
222
|
-
if (err.message) {
|
|
223
|
-
var soapMsg = err.message;
|
|
224
|
-
var firstBreakIndex = soapMsg.indexOf('\n');
|
|
225
|
-
|
|
226
|
-
if (firstBreakIndex > 0) {
|
|
227
|
-
soapMsg = err.message.substring(0, firstBreakIndex);
|
|
228
|
-
}
|
|
229
|
-
|
|
230
|
-
msg += ': ' + soapMsg;
|
|
231
|
-
} else if (err && (typeof err === 'string' || err instanceof String)) {
|
|
232
|
-
msg += ': ' + err;
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
resultClient = new _OxygenError.default(errHelper.errorCode.SOAP_ERROR, msg);
|
|
236
|
-
resolve();
|
|
237
|
-
return;
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
if (auth) {
|
|
241
|
-
client.setSecurity(auth);
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
resultClient = client.describe();
|
|
245
|
-
resolve();
|
|
246
|
-
return;
|
|
247
|
-
});
|
|
248
|
-
});
|
|
249
|
-
})();
|
|
250
|
-
|
|
251
|
-
if (resultClient.type === errHelper.errorCode.SOAP_ERROR) {
|
|
252
|
-
throw resultClient;
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
return resultClient;
|
|
256
|
-
};
|
|
257
|
-
|
|
258
|
-
return module;
|
|
259
|
-
};
|
|
260
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS1zb2FwLmpzIl0sIm5hbWVzIjpbImVyckhlbHBlciIsInJlcXVpcmUiLCJtb2R1bGUiLCJleHBvcnRzIiwic29hcCIsImF1dGgiLCJwcm94eU9wdGlvbnMiLCJvcHRpb25zIiwicmVqZWN0VW5hdXRob3JpemVkIiwibGFzdFJlc3BvbnNlSGVhZGVycyIsImlzSW5pdGlhbGl6ZWQiLCJzZXRQcm94eSIsInVybCIsInByb3h5IiwiYXV0aEJhc2ljIiwidXNlciIsInBhc3MiLCJCYXNpY0F1dGhTZWN1cml0eSIsImF1dGhCZWFyZXIiLCJ0b2tlbiIsIkJlYXJlclNlY3VyaXR5IiwiYXV0aE5UTE0iLCJkb21haW4iLCJ3b3Jrc3RhdGlvbiIsIk5UTE1TZWN1cml0eSIsImdldCIsIndzZGxVcmwiLCJtZXRob2QiLCJhcmdzIiwid3NkbEhlYWRlcnMiLCJyZXN1bHRDbGllbnQiLCJyZXN1bHQiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImNyZWF0ZUNsaWVudCIsIndzZGxfb3B0aW9ucyIsIndzZGxfaGVhZGVycyIsImVyciIsImNsaWVudCIsInVuZGVmaW5lZCIsIm1zZyIsIm1lc3NhZ2UiLCJzb2FwTXNnIiwiZmlyc3RCcmVha0luZGV4IiwiaW5kZXhPZiIsInN1YnN0cmluZyIsIlN0cmluZyIsIk94RXJyb3IiLCJlcnJvckNvZGUiLCJTT0FQX0VSUk9SIiwic2V0U2VjdXJpdHkiLCJoZWFkZXIiLCJhZGRIdHRwSGVhZGVyIiwicmVzIiwicm9vdCIsIkVudmVsb3BlIiwiQm9keSIsIkZhdWx0IiwiSlNPTiIsInN0cmluZ2lmeSIsImZhdWx0c3RyaW5nIiwiaW5zcGVjdCIsImRlcHRoIiwidHlwZSIsImdldExhc3RSZXNwb25zZUhlYWRlcnMiLCJkZXNjcmliZSJdLCJtYXBwaW5ncyI6Ijs7OztBQWNBOzs7O0FBZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FB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dEI7O0FBQ0Esa0JBQUlELGVBQWUsR0FBRyxDQUF0QixFQUF5QjtBQUNyQkQsZ0JBQUFBLE9BQU8sR0FBR0wsR0FBRyxDQUFDSSxPQUFKLENBQVlJLFNBQVosQ0FBc0IsQ0FBdEIsRUFBeUJGLGVBQXpCLENBQVY7QUFDSDs7QUFDREgsY0FBQUEsR0FBRyxJQUFJLE9BQU9FLE9BQWQ7QUFDSCxhQVBELE1BT08sSUFBSUwsR0FBRyxLQUFLLE9BQU9BLEdBQVAsS0FBZSxRQUFmLElBQTJCQSxHQUFHLFlBQVlTLE1BQS9DLENBQVAsRUFBK0Q7QUFDbEVOLGNBQUFBLEdBQUcsSUFBSSxPQUFPSCxHQUFkO0FBQ0g7O0FBQ0RSLFlBQUFBLFlBQVksR0FBRyxJQUFJa0Isb0JBQUosQ0FBWWhELFNBQVMsQ0FBQ2lELFNBQVYsQ0FBb0JDLFVBQWhDLEVBQTRDVCxHQUE1QyxDQUFmO0FBQ0FSLFlBQUFBLE9BQU87QUFDUDtBQUNIOztBQUVELGNBQUk1QixJQUFKLEVBQVU7QUFDTmtDLFlBQUFBLE1BQU0sQ0FBQ1ksV0FBUCxDQUFtQjlDLElBQW5CO0FBQ0g7O0FBRUR5QixVQUFBQSxZQUFZLEdBQUdTLE1BQU0sQ0FBQzJCLFFBQVAsRUFBZjtBQUNBakMsVUFBQUEsT0FBTztBQUNQO0FBQ0gsU0F6QkQ7QUEwQkgsT0EzQk0sQ0FBUDtBQTRCSCxLQTdCSyxHQUFOOztBQStCQSxRQUFJSCxZQUFZLENBQUNrQyxJQUFiLEtBQXNCaEUsU0FBUyxDQUFDaUQsU0FBVixDQUFvQkMsVUFBOUMsRUFBMEQ7QUFDdEQsWUFBTXBCLFlBQU47QUFDSDs7QUFFRCxXQUFPQSxZQUFQO0FBQ0gsR0F2Q0Q7O0FBeUNBLFNBQU81QixNQUFQO0FBQ0gsQ0EzTUQiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAbmFtZSBzb2FwXHJcbiAqIEBkZXNjcmlwdGlvbiBQcm92aWRlcyBtZXRob2RzIGZvciB3b3JraW5nIHdpdGggU09BUCBiYXNlZCBXZWIgU2VydmljZXMuXHJcbiAqL1xyXG5cclxuaW1wb3J0IE94RXJyb3IgZnJvbSAnLi4vZXJyb3JzL094eWdlbkVycm9yJztcclxudmFyIGVyckhlbHBlciA9IHJlcXVpcmUoJy4uL2Vycm9ycy9oZWxwZXInKTtcclxuXHJcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKSB7XHJcbiAgICB2YXIgc29hcCA9IHJlcXVpcmUoJ3NvYXAnKTtcclxuICAgIHZhciBhdXRoID0gbnVsbDtcclxuICAgIHZhciBwcm94eU9wdGlvbnMgPSB7fTtcclxuICAgIHZhciBvcHRpb25zID0ge1xyXG4gICAgICAgIHJlamVjdFVuYXV0aG9yaXplZDogZmFsc2VcclxuICAgIH07XHJcbiAgICB2YXIgbGFzdFJlc3BvbnNlSGVhZGVycyA9IG51bGw7XHJcblxyXG4gICAgbW9kdWxlLmlzSW5pdGlhbGl6ZWQgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH07XHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFNldHMgcHJveHkgdXJsIHRvIGJlIHVzZWQgZm9yIGNvbm5lY3Rpb25zIHdpdGggdGhlIHNlcnZpY2UuXHJcbiAgICAgKiBAZnVuY3Rpb24gc2V0UHJveHlcclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSB1cmwgLSBQcm94eSB1cmwuIEludm9jYXRpb24gd2l0aG91dCBhcmd1bWVudHMgd2lsbCByZW1vdmUgYW55IHByZXZpb3VzbHkgc2V0IHVybC5cclxuICAgICAqL1xyXG4gICAgbW9kdWxlLnNldFByb3h5ID0gZnVuY3Rpb24odXJsKSB7XHJcbiAgICAgICAgaWYgKHVybCkge1xyXG4gICAgICAgICAgICBwcm94eU9wdGlvbnMgPSAgeyBwcm94eTogdXJsIH07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgcHJveHlPcHRpb25zID0ge307XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFNldHMgQmFzaWMgQXV0aGVudGljYXRpb24gZGV0YWlscyB0byBiZSB1c2VkIGZvciBjb25uZWN0aW9ucyB3aXRoIHRoZSBzZXJ2aWNlLlxyXG4gICAgICogQGZ1bmN0aW9uIGF1dGhCYXNpY1xyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHVzZXIgLSBVc2VybmFtZS5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBwYXNzIC0gUGFzc3dvcmQuXHJcbiAgICAgKi9cclxuICAgIG1vZHVsZS5hdXRoQmFzaWMgPSBmdW5jdGlvbih1c2VyLCBwYXNzKSB7XHJcbiAgICAgICAgYXV0aCA9IG5ldyBzb2FwLkJhc2ljQXV0aFNlY3VyaXR5KHVzZXIsIHBhc3MpO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFNldHMgQmVhcmVyIFRva2VuIEF1dGhlbnRpY2F0aW9uIGRldGFpbHMgdG8gYmUgdXNlZCBmb3IgY29ubmVjdGlvbnMgd2l0aCB0aGUgc2VydmljZS5cclxuICAgICAqIEBmdW5jdGlvbiBhdXRoQmVhcmVyXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gdG9rZW4gLSBUb2tlbi5cclxuICAgICAqL1xyXG4gICAgbW9kdWxlLmF1dGhCZWFyZXIgPSBmdW5jdGlvbih0b2tlbikge1xyXG4gICAgICAgIGF1dGggPSBuZXcgc29hcC5CZWFyZXJTZWN1cml0eSh0b2tlbik7XHJcbiAgICB9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHN1bW1hcnkgU2V0cyBOVExNIEF1dGhlbnRpY2F0aW9uIGRldGFpbHMgdG8gYmUgdXNlZCBmb3IgY29ubmVjdGlvbnMgd2l0aCB0aGUgc2VydmljZS5cclxuICAgICAqIEBmdW5jdGlvbiBhdXRoTlRMTVxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHVzZXIgLSBVc2VybmFtZS5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBwYXNzIC0gUGFzc3dvcmQuXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gZG9tYWluIC0gRG9tYWluLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHdvcmtzdGF0aW9uIC0gV29ya3N0YXRpb24uXHJcbiAgICAgKi9cclxuICAgIG1vZHVsZS5hdXRoTlRMTSA9IGZ1bmN0aW9uKHVzZXIsIHBhc3MsIGRvbWFpbiwgd29ya3N0YXRpb24pIHtcclxuICAgICAgICBhdXRoID0gbmV3IHNvYXAuTlRMTVNlY3VyaXR5KHVzZXIsIHBhc3MsIGRvbWFpbiwgd29ya3N0YXRpb24pO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IEluaXRpYXRlcyBhIFNPQVAgcmVxdWVzdCBhbmQgcmV0dXJucyB0aGUgcmVzcG9uc2UuXHJcbiAgICAgKiBAZnVuY3Rpb24gZ2V0XHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gd3NkbFVybCAtIFVSTCBwb2ludGluZyB0byB0aGUgV1NETCBYTUwuXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gbWV0aG9kIC0gTWV0aG9kIG5hbWUgKGNhc2Ugc2Vuc2l0aXZlKS5cclxuICAgICAqIEBwYXJhbSB7T2JqZWN0PX0gYXJncyAtIE9iamVjdCBjb250YWluaW5nIHRoZSBhcmd1bWVudHMuXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdD19IHdzZGxIZWFkZXJzIC0gY3VzdG9tIEhUVFAgaGVhZGVycyB0byBiZSBzZW50IG9uIFdTREwgcmVxdWVzdHMuXHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IFRoZSByZXNwb25zZSBvYmplY3QuXHJcbiAgICAgKiBAZXhhbXBsZSA8Y2FwdGlvbj5bamF2YXNjcmlwdF0gVXNhZ2UgZXhhbXBsZTwvY2FwdGlvbj5cclxuICAgICAqIC8vIGdldCBTT0FQIHNlcnZpY2UgZGVzY3JpcHRpb24sIHNvIHdlIGNhbiB1bmRlcnN0YW5kIHdoYXQgbWV0aG9kcyBpdCBwcm92aWRlcyxcclxuICAgICAqIC8vIHdoYXQgaW5wdXQgcGFyYW1ldGVycyBpdCBleHBlY3RzLCBhbmQgd2hhdCBpcyB0aGUgb3V0cHV0IHN0cnVjdHVyZS5cclxuICAgICAqIHZhciBzZXJ2aWNlVXJsID0gJ2h0dHA6Ly93d3cuZGF0YWFjY2Vzcy5jb20vd2Vic2VydmljZXNzZXJ2ZXIvbnVtYmVyY29udmVyc2lvbi53c28/V1NETCc7XHJcbiAgICAgKiB2YXIgc2VydmljZURlc2NyaXB0aW9uID0gc29hcC5kZXNjcmliZShzZXJ2aWNlVXJsKTtcclxuICAgICAqIGxvZy5pbmZvKHNlcnZpY2VEZXNjcmlwdGlvbik7XHJcbiAgICAgKiBcclxuICAgICAqIC8vIE51bWJlclRvV29yZHMgbWV0aG9kIGluIHRoaXMgc2VydmljZSBjb252ZXJ0cyBudW1iZXIgdG8gd29yZHMuXHJcbiAgICAgKiB2YXIgcmVzdWx0ID0gc29hcC5nZXQoc2VydmljZVVybCwgJ051bWJlclRvV29yZHMnLCB7ICd1YmlOdW0nOiAyMDE5IH0pO1xyXG4gICAgICogbG9nLmluZm8ocmVzdWx0Lk51bWJlclRvV29yZHNSZXN1bHQpO1xyXG4gICAgICovXHJcbiAgICBtb2R1bGUuZ2V0ID0gYXN5bmMgZnVuY3Rpb24od3NkbFVybCwgbWV0aG9kLCBhcmdzLCB3c2RsSGVhZGVycyA9IHt9KSB7XHJcbiAgICAgICAgdmFyIHJlc3VsdENsaWVudCA9IG51bGw7XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9IG51bGw7XHJcblxyXG4gICAgICAgIGF3YWl0ICgoKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBzb2FwLmNyZWF0ZUNsaWVudCh3c2RsVXJsLCB7IHdzZGxfb3B0aW9uczogeyAuLi5vcHRpb25zLCAuLi5wcm94eU9wdGlvbnMgfSwgd3NkbF9oZWFkZXJzOiB3c2RsSGVhZGVyc30sIChlcnIsIGNsaWVudCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjbGllbnQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbXNnID0gICdFcnJvciBjcmVhdGluZyBjbGllbnQnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXJyLm1lc3NhZ2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzb2FwTXNnID0gZXJyLm1lc3NhZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZmlyc3RCcmVha0luZGV4ID0gc29hcE1zZy5pbmRleE9mKCdcXG4nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaXJzdEJyZWFrSW5kZXggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc29hcE1zZyA9IGVyci5tZXNzYWdlLnN1YnN0cmluZygwLCBmaXJzdEJyZWFrSW5kZXgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnICs9ICc6ICcgKyBzb2FwTXNnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVyciAmJiAodHlwZW9mIGVyciA9PT0gJ3N0cmluZycgfHwgZXJyIGluc3RhbmNlb2YgU3RyaW5nKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnICs9ICc6ICcgKyBlcnI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Q2xpZW50ID0gbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5TT0FQX0VSUk9SLCBtc2cpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdENsaWVudCA9IGNsaWVudDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjbGllbnRbbWV0aG9kXSAhPT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRDbGllbnQgPSBuZXcgT3hFcnJvcihlcnJIZWxwZXIuZXJyb3JDb2RlLlNPQVBfRVJST1IsICdObyBtZXRob2QgbmFtZWQgJyArIG1ldGhvZCArICcgd2FzIGZvdW5kLicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhdXRoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudC5zZXRTZWN1cml0eShhdXRoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh3c2RsSGVhZGVycykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGhlYWRlciBpbiB3c2RsSGVhZGVycykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50LmFkZEh0dHBIZWFkZXIoaGVhZGVyLCB3c2RsSGVhZGVyc1toZWFkZXJdKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgY2xpZW50W21ldGhvZF0oYXJncywgKGVyciwgcmVzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RSZXNwb25zZUhlYWRlcnMgPSBjbGllbnQubGFzdFJlc3BvbnNlSGVhZGVycztcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVyciAhPT0gbnVsbCAmJiBlcnIucm9vdCAmJiBlcnIucm9vdC5FbnZlbG9wZSAmJiBlcnIucm9vdC5FbnZlbG9wZS5Cb2R5ICYmIGVyci5yb290LkVudmVsb3BlLkJvZHkuRmF1bHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuU09BUF9FUlJPUiwgSlNPTi5zdHJpbmdpZnkoZXJyLnJvb3QuRW52ZWxvcGUuQm9keS5GYXVsdC5mYXVsdHN0cmluZykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGVyciAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbmV3IE94RXJyb3IoZXJySGVscGVyLmVycm9yQ29kZS5TT0FQX0VSUk9SLCByZXF1aXJlKCd1dGlsJykuaW5zcGVjdChlcnIsIHsgZGVwdGg6IDQgfSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9LCB7IC4uLm9wdGlvbnMsIC4uLnByb3h5T3B0aW9ucyB9KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KSgpO1xyXG5cclxuICAgICAgICBpZiAocmVzdWx0Q2xpZW50LnR5cGUgPT09IGVyckhlbHBlci5lcnJvckNvZGUuU09BUF9FUlJPUikge1xyXG4gICAgICAgICAgICB0aHJvdyByZXN1bHRDbGllbnQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocmVzdWx0LnR5cGUgPT09IGVyckhlbHBlci5lcnJvckNvZGUuU09BUF9FUlJPUikge1xyXG4gICAgICAgICAgICB0aHJvdyByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFJldHVybnMgbGFzdCByZXNwb25zZSBoZWFkZXJzLlxyXG4gICAgICogQGZ1bmN0aW9uIGdldExhc3RSZXNwb25zZUhlYWRlcnNcclxuICAgICAqIEByZXR1cm4ge09iamVjdH0gSW5jb21pbmdIdHRwSGVhZGVycyAoaHR0cHM6Ly9taWNyb3NvZnQuZ2l0aHViLmlvL1Bvd2VyQkktSmF2YVNjcmlwdC9pbnRlcmZhY2VzL19ub2RlX21vZHVsZXNfX3R5cGVzX25vZGVfaHR0cDJfZF8uX2h0dHAyXy5pbmNvbWluZ2h0dHBoZWFkZXJzLmh0bWwpLlxyXG4gICAgICovXHJcbiAgICBtb2R1bGUuZ2V0TGFzdFJlc3BvbnNlSGVhZGVycyA9IGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIHJldHVybiBsYXN0UmVzcG9uc2VIZWFkZXJzO1xyXG4gICAgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEBzdW1tYXJ5IFJldHVybnMgU09BUCBzZXJ2aWNlIGRlc2NyaXB0aW9uLlxyXG4gICAgICogQGZ1bmN0aW9uIGRlc2NyaWJlXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gd3NkbFVybCAtIFVSTCBwb2ludGluZyB0byB0aGUgV1NETCBYTUwuXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdD19IHdzZGxIZWFkZXJzIC0gY3VzdG9tIEhUVFAgaGVhZGVycyB0byBiZSBzZW50IG9uIFdTREwgcmVxdWVzdHMuXHJcbiAgICAgKiBAcmV0dXJuIHtPYmplY3R9IFNlcnZpY2UgZGVzY3JpcHRpb24uXHJcbiAgICAgKi9cclxuICAgIG1vZHVsZS5kZXNjcmliZSA9IGFzeW5jIGZ1bmN0aW9uKHdzZGxVcmwsIHdzZGxIZWFkZXJzID0ge30pIHtcclxuICAgICAgICB2YXIgcmVzdWx0Q2xpZW50ID0gbnVsbDtcclxuXHJcbiAgICAgICAgYXdhaXQgKCgpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgICAgIHNvYXAuY3JlYXRlQ2xpZW50KHdzZGxVcmwseyB3c2RsX29wdGlvbnM6IHsgLi4ub3B0aW9ucywgLi4ucHJveHlPcHRpb25zIH0sIHdzZGxfaGVhZGVyczogd3NkbEhlYWRlcnN9LCAoZXJyLCBjbGllbnQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY2xpZW50ID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1zZyA9ICAnRXJyb3IgY3JlYXRpbmcgY2xpZW50JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVyci5tZXNzYWdlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc29hcE1zZyA9IGVyci5tZXNzYWdlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpcnN0QnJlYWtJbmRleCA9IHNvYXBNc2cuaW5kZXhPZignXFxuJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3RCcmVha0luZGV4ID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvYXBNc2cgPSBlcnIubWVzc2FnZS5zdWJzdHJpbmcoMCwgZmlyc3RCcmVha0luZGV4KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyArPSAnOiAnICsgc29hcE1zZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlcnIgJiYgKHR5cGVvZiBlcnIgPT09ICdzdHJpbmcnIHx8IGVyciBpbnN0YW5jZW9mIFN0cmluZykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZyArPSAnOiAnICsgZXJyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdENsaWVudCA9IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuU09BUF9FUlJPUiwgbXNnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoYXV0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGllbnQuc2V0U2VjdXJpdHkoYXV0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICByZXN1bHRDbGllbnQgPSBjbGllbnQuZGVzY3JpYmUoKTtcclxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pKCk7XHJcblxyXG4gICAgICAgIGlmIChyZXN1bHRDbGllbnQudHlwZSA9PT0gZXJySGVscGVyLmVycm9yQ29kZS5TT0FQX0VSUk9SKSB7XHJcbiAgICAgICAgICAgIHRocm93IHJlc3VsdENsaWVudDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByZXN1bHRDbGllbnQ7XHJcbiAgICB9O1xyXG5cclxuICAgIHJldHVybiBtb2R1bGU7XHJcbn07XHJcbiJdfQ==
|
|
@@ -1,192 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
require("source-map-support/register");
|
|
4
|
-
|
|
5
|
-
var _OxygenError = _interopRequireDefault(require("../errors/OxygenError"));
|
|
6
|
-
|
|
7
|
-
var _util = _interopRequireDefault(require("../lib/util"));
|
|
8
|
-
|
|
9
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
10
|
-
|
|
11
|
-
/*
|
|
12
|
-
* Copyright (C) 2015-present CloudBeat Limited
|
|
13
|
-
*
|
|
14
|
-
* This program is free software: you can redistribute it and/or modify
|
|
15
|
-
* it under the terms of the GNU General Public License as published by
|
|
16
|
-
* the Free Software Foundation, either version 3 of the License, or
|
|
17
|
-
* (at your option) any later version.
|
|
18
|
-
*/
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* @name twilio
|
|
22
|
-
* @description Provides methods for working with Twilio service.
|
|
23
|
-
*/
|
|
24
|
-
module.exports = function () {
|
|
25
|
-
const utils = require('./utils');
|
|
26
|
-
|
|
27
|
-
const OxError = this.OxError = _OxygenError.default;
|
|
28
|
-
|
|
29
|
-
const errHelper = this.errHelper = require('../errors/helper');
|
|
30
|
-
|
|
31
|
-
const helpers = this.helpers = {};
|
|
32
|
-
|
|
33
|
-
var _client;
|
|
34
|
-
|
|
35
|
-
module.isInitialized = function () {
|
|
36
|
-
return _client !== undefined;
|
|
37
|
-
};
|
|
38
|
-
/**
|
|
39
|
-
* @summary Set Twilio authentication details.
|
|
40
|
-
* @function init
|
|
41
|
-
* @param {String} accountSid - Account SID.
|
|
42
|
-
* @param {String} authToken - Authentication token.
|
|
43
|
-
*/
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
module.init = function (accountSid, authToken) {
|
|
47
|
-
_client = require('twilio')(accountSid, authToken);
|
|
48
|
-
};
|
|
49
|
-
/**
|
|
50
|
-
* @summary Retrieves last SMS message.
|
|
51
|
-
* @function getLastSms
|
|
52
|
-
* @param {Boolean} removeOnRead - Specifies whether to delete the message after reading it.
|
|
53
|
-
* @param {Number} timeout - Timeout in milliseconds for waiting for the message to arrive.
|
|
54
|
-
* @param {Number=} notOlderThan - Retrieve message only if it arrived not before the given time (in ms). Default is 4 minutes.
|
|
55
|
-
* @param {String=} fromNumber - From number to filter message
|
|
56
|
-
* @return {String} SMS text.
|
|
57
|
-
*/
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
module.getLastSms = async function (removeOnRead, timeout, notOlderThan, fromNumber) {
|
|
61
|
-
helpers.assertArgumentBool(removeOnRead, 'removeOnRead');
|
|
62
|
-
helpers.assertArgumentNumberNonNegative(timeout, 'timeout');
|
|
63
|
-
|
|
64
|
-
if (fromNumber) {
|
|
65
|
-
helpers.assertArgumentString(fromNumber, 'fromNumber');
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
if (!notOlderThan) {
|
|
69
|
-
notOlderThan = 4 * 60 * 1000;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
var msg;
|
|
73
|
-
var now = Date.now();
|
|
74
|
-
var earliestMessageDate = new Date(now - notOlderThan);
|
|
75
|
-
|
|
76
|
-
while (!msg && Date.now() - now < timeout) {
|
|
77
|
-
await (() => {
|
|
78
|
-
return new Promise((resolve, reject) => {
|
|
79
|
-
_client.messages.list({
|
|
80
|
-
dateSentAfter: earliestMessageDate
|
|
81
|
-
}, function (err, messages) {
|
|
82
|
-
var _msg;
|
|
83
|
-
|
|
84
|
-
if (messages && typeof messages[Symbol.iterator] === 'function') {
|
|
85
|
-
for (_msg of messages) {
|
|
86
|
-
if (_msg.direction == 'inbound') {
|
|
87
|
-
if (fromNumber && _msg.from !== fromNumber) {// ignore
|
|
88
|
-
} else {
|
|
89
|
-
var _msgDate = Date.parse(_msg.dateCreated); // if message is newer than the previous one - save it
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
if (msg && Date.parse(msg.dateCreated) < _msgDate) {
|
|
93
|
-
msg = _msg;
|
|
94
|
-
} else if (!msg) {
|
|
95
|
-
msg = _msg;
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
resolve();
|
|
103
|
-
});
|
|
104
|
-
});
|
|
105
|
-
})();
|
|
106
|
-
await _util.default.sleep(800);
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
if (!msg) {
|
|
110
|
-
throw new OxError(errHelper.errorCode.TWILIO_ERROR, "Couldn't get the SMS within " + timeout + 'ms.');
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
if (removeOnRead) {
|
|
114
|
-
await (() => {
|
|
115
|
-
return new Promise((resolve, reject) => {
|
|
116
|
-
_client.messages(msg.sid).remove().then(() => {
|
|
117
|
-
resolve();
|
|
118
|
-
});
|
|
119
|
-
});
|
|
120
|
-
})();
|
|
121
|
-
}
|
|
122
|
-
|
|
123
|
-
return msg.body;
|
|
124
|
-
};
|
|
125
|
-
/**
|
|
126
|
-
* @summary Send an SMS.
|
|
127
|
-
* @function sendSms
|
|
128
|
-
* @param {String} from - Phone number to send from.
|
|
129
|
-
* @param {String} to - Phone number to send to.
|
|
130
|
-
* @param {String} message - Message to send.
|
|
131
|
-
* @return {String} Message SID.
|
|
132
|
-
* @example <caption>[javascript] Usage example</caption>
|
|
133
|
-
* twilio.init('Account Sid', 'Account Token');
|
|
134
|
-
* twilio.sendSms('+1xxxxxxxxxx', '+972xxxxxxxxx', 'Hello World!');
|
|
135
|
-
*/
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
module.sendSms = async function (from, to, message) {
|
|
139
|
-
helpers.assertArgumentNonEmptyString(from, 'from');
|
|
140
|
-
helpers.assertArgumentNonEmptyString(to, 'to');
|
|
141
|
-
helpers.assertArgumentNonEmptyString(message, 'message');
|
|
142
|
-
var response = null;
|
|
143
|
-
await (() => {
|
|
144
|
-
return new Promise((resolve, reject) => {
|
|
145
|
-
_client.messages.create({
|
|
146
|
-
body: message,
|
|
147
|
-
from: from,
|
|
148
|
-
to: to
|
|
149
|
-
}).then(message => {
|
|
150
|
-
response = message.sid;
|
|
151
|
-
resolve();
|
|
152
|
-
}).catch(err => {
|
|
153
|
-
response = err;
|
|
154
|
-
resolve();
|
|
155
|
-
});
|
|
156
|
-
});
|
|
157
|
-
})();
|
|
158
|
-
|
|
159
|
-
if (response.message) {
|
|
160
|
-
var msg = response.message;
|
|
161
|
-
|
|
162
|
-
if (response.moreInfo) {
|
|
163
|
-
msg += ' For more info: ' + response.moreInfo;
|
|
164
|
-
} else if (response.code) {
|
|
165
|
-
msg = 'Unable to connect to Twilio: ' + msg;
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
throw new OxError(errHelper.errorCode.TWILIO_ERROR, msg);
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
return response;
|
|
172
|
-
};
|
|
173
|
-
|
|
174
|
-
helpers.assertArgument = (val, name) => utils.assertArgument.call(this, val, name);
|
|
175
|
-
|
|
176
|
-
helpers.assertArgumentNonEmptyString = (val, name) => utils.assertArgumentNonEmptyString.call(this, val, name);
|
|
177
|
-
|
|
178
|
-
helpers.assertArgumentString = (val, name) => utils.assertArgumentString.call(this, val, name);
|
|
179
|
-
|
|
180
|
-
helpers.assertArgumentNumber = (val, name) => utils.assertArgumentNumber.call(this, val, name);
|
|
181
|
-
|
|
182
|
-
helpers.assertArgumentNumberNonNegative = (val, name) => utils.assertArgumentNumberNonNegative.call(this, val, name);
|
|
183
|
-
|
|
184
|
-
helpers.assertArgumentBool = (val, name) => utils.assertArgumentBool.call(this, val, name);
|
|
185
|
-
|
|
186
|
-
helpers.assertArgumentBoolOptional = (val, name) => utils.assertArgumentBoolOptional.call(this, val, name);
|
|
187
|
-
|
|
188
|
-
helpers.assertArgumentTimeout = (val, name) => utils.assertArgumentTimeout.call(this, val, name);
|
|
189
|
-
|
|
190
|
-
return module;
|
|
191
|
-
};
|
|
192
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS10d2lsaW8uanMiXSwibmFtZXMiOlsibW9kdWxlIiwiZXhwb3J0cyIsInV0aWxzIiwicmVxdWlyZSIsIk94RXJyb3IiLCJPeEVycm9yQ29udHNydWN0b3IiLCJlcnJIZWxwZXIiLCJoZWxwZXJzIiwiX2NsaWVudCIsImlzSW5pdGlhbGl6ZWQiLCJ1bmRlZmluZWQiLCJpbml0IiwiYWNjb3VudFNpZCIsImF1dGhUb2tlbiIsImdldExhc3RTbXMiLCJyZW1vdmVPblJlYWQiLCJ0aW1lb3V0Iiwibm90T2xkZXJUaGFuIiwiZnJvbU51bWJlciIsImFzc2VydEFyZ3VtZW50Qm9vbCIsImFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUiLCJhc3NlcnRBcmd1bWVudFN0cmluZyIsIm1zZyIsIm5vdyIsIkRhdGUiLCJlYXJsaWVzdE1lc3NhZ2VEYXRlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJtZXNzYWdlcyIsImxpc3QiLCJkYXRlU2VudEFmdGVyIiwiZXJyIiwiX21zZyIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiZGlyZWN0aW9uIiwiZnJvbSIsIl9tc2dEYXRlIiwicGFyc2UiLCJkYXRlQ3JlYXRlZCIsImxpYlV0aWxzIiwic2xlZXAiLCJlcnJvckNvZGUiLCJUV0lMSU9fRVJST1IiLCJzaWQiLCJyZW1vdmUiLCJ0aGVuIiwiYm9keSIsInNlbmRTbXMiLCJ0byIsIm1lc3NhZ2UiLCJhc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nIiwicmVzcG9uc2UiLCJjcmVhdGUiLCJjYXRjaCIsIm1vcmVJbmZvIiwiY29kZSIsImFzc2VydEFyZ3VtZW50IiwidmFsIiwibmFtZSIsImNhbGwiLCJhc3NlcnRBcmd1bWVudE51bWJlciIsImFzc2VydEFyZ3VtZW50Qm9vbE9wdGlvbmFsIiwiYXNzZXJ0QXJndW1lbnRUaW1lb3V0Il0sIm1hcHBpbmdzIjoiOzs7O0FBYUE7O0FBQ0E7Ozs7QUFkQTtBQUNBO0FB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Q0FBc0MsSUFBdEMsRUFBNENGLEdBQTVDLEVBQWlEQyxJQUFqRCxDQUFwRDs7QUFDQXJELEVBQUFBLE9BQU8sQ0FBQ3lELHFCQUFSLEdBQWdDLENBQUNMLEdBQUQsRUFBTUMsSUFBTixLQUFlMUQsS0FBSyxDQUFDOEQscUJBQU4sQ0FBNEJILElBQTVCLENBQWlDLElBQWpDLEVBQXVDRixHQUF2QyxFQUE0Q0MsSUFBNUMsQ0FBL0M7O0FBRUEsU0FBTzVELE1BQVA7QUFDSCxDQWpKRCIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBuYW1lIHR3aWxpb1xyXG4gKiBAZGVzY3JpcHRpb24gUHJvdmlkZXMgbWV0aG9kcyBmb3Igd29ya2luZyB3aXRoIFR3aWxpbyBzZXJ2aWNlLlxyXG4gKi9cclxuaW1wb3J0IE94RXJyb3JDb250c3J1Y3RvciBmcm9tICcuLi9lcnJvcnMvT3h5Z2VuRXJyb3InO1xyXG5pbXBvcnQgbGliVXRpbHMgZnJvbSAnLi4vbGliL3V0aWwnO1xyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcclxuICAgIGNvbnN0IHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xyXG4gICAgY29uc3QgT3hFcnJvciA9IHRoaXMuT3hFcnJvciA9IE94RXJyb3JDb250c3J1Y3RvcjtcclxuICAgIGNvbnN0IGVyckhlbHBlciA9IHRoaXMuZXJySGVscGVyID0gcmVxdWlyZSgnLi4vZXJyb3JzL2hlbHBlcicpO1xyXG4gICAgY29uc3QgaGVscGVycyA9IHRoaXMuaGVscGVycyA9IHt9O1xyXG5cclxuICAgIHZhciBfY2xpZW50O1xyXG5cclxuICAgIG1vZHVsZS5pc0luaXRpYWxpemVkID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgcmV0dXJuIF9jbGllbnQgIT09IHVuZGVmaW5lZDtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBTZXQgVHdpbGlvIGF1dGhlbnRpY2F0aW9uIGRldGFpbHMuXHJcbiAgICAgKiBAZnVuY3Rpb24gaW5pdFxyXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGFjY291bnRTaWQgLSBBY2NvdW50IFNJRC5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBhdXRoVG9rZW4gLSBBdXRoZW50aWNhdGlvbiB0b2tlbi5cclxuICAgICAqL1xyXG4gICAgbW9kdWxlLmluaXQgPSBmdW5jdGlvbihhY2NvdW50U2lkLCBhdXRoVG9rZW4pIHtcclxuICAgICAgICBfY2xpZW50ID0gcmVxdWlyZSgndHdpbGlvJykoYWNjb3VudFNpZCwgYXV0aFRva2VuKTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBSZXRyaWV2ZXMgbGFzdCBTTVMgbWVzc2FnZS5cclxuICAgICAqIEBmdW5jdGlvbiBnZXRMYXN0U21zXHJcbiAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IHJlbW92ZU9uUmVhZCAtIFNwZWNpZmllcyB3aGV0aGVyIHRvIGRlbGV0ZSB0aGUgbWVzc2FnZSBhZnRlciByZWFkaW5nIGl0LlxyXG4gICAgICogQHBhcmFtIHtOdW1iZXJ9IHRpbWVvdXQgLSBUaW1lb3V0IGluIG1pbGxpc2Vjb25kcyBmb3Igd2FpdGluZyBmb3IgdGhlIG1lc3NhZ2UgdG8gYXJyaXZlLlxyXG4gICAgICogQHBhcmFtIHtOdW1iZXI9fSBub3RPbGRlclRoYW4gLSBSZXRyaWV2ZSBtZXNzYWdlIG9ubHkgaWYgaXQgYXJyaXZlZCBub3QgYmVmb3JlIHRoZSBnaXZlbiB0aW1lIChpbiBtcykuIERlZmF1bHQgaXMgNCBtaW51dGVzLlxyXG4gICAgICogQHBhcmFtIHtTdHJpbmc9fSBmcm9tTnVtYmVyIC0gRnJvbSBudW1iZXIgdG8gZmlsdGVyIG1lc3NhZ2VcclxuICAgICAqIEByZXR1cm4ge1N0cmluZ30gU01TIHRleHQuXHJcbiAgICAgKi9cclxuICAgIG1vZHVsZS5nZXRMYXN0U21zID0gYXN5bmMgZnVuY3Rpb24ocmVtb3ZlT25SZWFkLCB0aW1lb3V0LCBub3RPbGRlclRoYW4sIGZyb21OdW1iZXIpIHtcclxuICAgICAgICBoZWxwZXJzLmFzc2VydEFyZ3VtZW50Qm9vbChyZW1vdmVPblJlYWQsICdyZW1vdmVPblJlYWQnKTtcclxuICAgICAgICBoZWxwZXJzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUodGltZW91dCwgJ3RpbWVvdXQnKTtcclxuICAgICAgICBpZiAoZnJvbU51bWJlcikge1xyXG4gICAgICAgICAgICBoZWxwZXJzLmFzc2VydEFyZ3VtZW50U3RyaW5nKGZyb21OdW1iZXIsICdmcm9tTnVtYmVyJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIW5vdE9sZGVyVGhhbikge1xyXG4gICAgICAgICAgICBub3RPbGRlclRoYW4gPSA0KjYwKjEwMDA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHZhciBtc2c7XHJcbiAgICAgICAgdmFyIG5vdyA9IERhdGUubm93KCk7XHJcbiAgICAgICAgdmFyIGVhcmxpZXN0TWVzc2FnZURhdGUgPSBuZXcgRGF0ZShub3cgLSBub3RPbGRlclRoYW4pO1xyXG4gICAgICAgIHdoaWxlICghbXNnICYmIChEYXRlLm5vdygpIC0gbm93KSA8IHRpbWVvdXQpIHtcclxuICAgICAgICAgICAgYXdhaXQgKCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgX2NsaWVudC5tZXNzYWdlcy5saXN0KHsgZGF0ZVNlbnRBZnRlcjogZWFybGllc3RNZXNzYWdlRGF0ZSB9LCBmdW5jdGlvbihlcnIsIG1lc3NhZ2VzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfbXNnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWVzc2FnZXMgJiYgdHlwZW9mIG1lc3NhZ2VzW1N5bWJvbC5pdGVyYXRvcl0gPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoX21zZyBvZiBtZXNzYWdlcykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfbXNnLmRpcmVjdGlvbiA9PSAnaW5ib3VuZCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZyb21OdW1iZXIgJiYgX21zZy5mcm9tICE9PSBmcm9tTnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZ25vcmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfbXNnRGF0ZSA9IERhdGUucGFyc2UoX21zZy5kYXRlQ3JlYXRlZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBtZXNzYWdlIGlzIG5ld2VyIHRoYW4gdGhlIHByZXZpb3VzIG9uZSAtIHNhdmUgaXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtc2cgJiYgRGF0ZS5wYXJzZShtc2cuZGF0ZUNyZWF0ZWQpIDwgX21zZ0RhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2cgPSBfbXNnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICghbXNnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnID0gX21zZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSkoKTtcclxuICAgICAgICAgICAgYXdhaXQgbGliVXRpbHMuc2xlZXAoODAwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghbXNnKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuVFdJTElPX0VSUk9SLCBcIkNvdWxkbid0IGdldCB0aGUgU01TIHdpdGhpbiBcIiArIHRpbWVvdXQgKyAnbXMuJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAocmVtb3ZlT25SZWFkKSB7XHJcbiAgICAgICAgICAgIGF3YWl0ICgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIF9jbGllbnQubWVzc2FnZXMobXNnLnNpZCkucmVtb3ZlKCkudGhlbigoKSA9PiB7IHJlc29sdmUoKTsgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSkoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBtc2cuYm9keTtcclxuICAgIH07XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAc3VtbWFyeSBTZW5kIGFuIFNNUy5cclxuICAgICAqIEBmdW5jdGlvbiBzZW5kU21zXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gZnJvbSAtIFBob25lIG51bWJlciB0byBzZW5kIGZyb20uXHJcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gdG8gLSBQaG9uZSBudW1iZXIgdG8gc2VuZCB0by5cclxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBtZXNzYWdlIC0gTWVzc2FnZSB0byBzZW5kLlxyXG4gICAgICogQHJldHVybiB7U3RyaW5nfSBNZXNzYWdlIFNJRC5cclxuICAgICAqIEBleGFtcGxlIDxjYXB0aW9uPltqYXZhc2NyaXB0XSBVc2FnZSBleGFtcGxlPC9jYXB0aW9uPlxyXG4gICAgICogdHdpbGlvLmluaXQoJ0FjY291bnQgU2lkJywgJ0FjY291bnQgVG9rZW4nKTtcclxuICAgICAqIHR3aWxpby5zZW5kU21zKCcrMXh4eHh4eHh4eHgnLCAnKzk3Mnh4eHh4eHh4eCcsICdIZWxsbyBXb3JsZCEnKTtcclxuICAgICAqL1xyXG4gICAgbW9kdWxlLnNlbmRTbXMgPSBhc3luYyBmdW5jdGlvbihmcm9tLCB0bywgbWVzc2FnZSkge1xyXG4gICAgICAgIGhlbHBlcnMuYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyhmcm9tLCAnZnJvbScpO1xyXG4gICAgICAgIGhlbHBlcnMuYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZyh0bywgJ3RvJyk7XHJcbiAgICAgICAgaGVscGVycy5hc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nKG1lc3NhZ2UsICdtZXNzYWdlJyk7XHJcblxyXG4gICAgICAgIHZhciByZXNwb25zZSA9IG51bGw7XHJcblxyXG4gICAgICAgIGF3YWl0ICgoKSA9PiB7XHJcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBfY2xpZW50Lm1lc3NhZ2VzLmNyZWF0ZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgYm9keTogbWVzc2FnZSxcclxuICAgICAgICAgICAgICAgICAgICBmcm9tOiBmcm9tLFxyXG4gICAgICAgICAgICAgICAgICAgIHRvOiB0b1xyXG4gICAgICAgICAgICAgICAgfSkudGhlbihtZXNzYWdlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXNwb25zZSA9IG1lc3NhZ2Uuc2lkO1xyXG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgIH0pLmNhdGNoKGVyciA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBlcnI7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pKCk7XHJcblxyXG4gICAgICAgIGlmIChyZXNwb25zZS5tZXNzYWdlKSB7XHJcbiAgICAgICAgICAgIHZhciBtc2cgPSByZXNwb25zZS5tZXNzYWdlO1xyXG4gICAgICAgICAgICBpZiAocmVzcG9uc2UubW9yZUluZm8pIHtcclxuICAgICAgICAgICAgICAgIG1zZyArPSAnIEZvciBtb3JlIGluZm86ICcgKyByZXNwb25zZS5tb3JlSW5mbztcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNwb25zZS5jb2RlKSB7XHJcbiAgICAgICAgICAgICAgICBtc2cgPSAnVW5hYmxlIHRvIGNvbm5lY3QgdG8gVHdpbGlvOiAnICsgbXNnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBPeEVycm9yKGVyckhlbHBlci5lcnJvckNvZGUuVFdJTElPX0VSUk9SLCBtc2cpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgfTtcclxuXHJcbiAgICBoZWxwZXJzLmFzc2VydEFyZ3VtZW50ID0gKHZhbCwgbmFtZSkgPT4gdXRpbHMuYXNzZXJ0QXJndW1lbnQuY2FsbCh0aGlzLCB2YWwsIG5hbWUpO1xyXG4gICAgaGVscGVycy5hc3NlcnRBcmd1bWVudE5vbkVtcHR5U3RyaW5nID0gKHZhbCwgbmFtZSkgPT4gdXRpbHMuYXNzZXJ0QXJndW1lbnROb25FbXB0eVN0cmluZy5jYWxsKHRoaXMsIHZhbCwgbmFtZSk7XHJcbiAgICBoZWxwZXJzLmFzc2VydEFyZ3VtZW50U3RyaW5nID0gKHZhbCwgbmFtZSkgPT4gdXRpbHMuYXNzZXJ0QXJndW1lbnRTdHJpbmcuY2FsbCh0aGlzLCB2YWwsIG5hbWUpO1xyXG4gICAgaGVscGVycy5hc3NlcnRBcmd1bWVudE51bWJlciA9ICh2YWwsIG5hbWUpID0+IHV0aWxzLmFzc2VydEFyZ3VtZW50TnVtYmVyLmNhbGwodGhpcywgdmFsLCBuYW1lKTtcclxuICAgIGhlbHBlcnMuYXNzZXJ0QXJndW1lbnROdW1iZXJOb25OZWdhdGl2ZSA9ICh2YWwsIG5hbWUpID0+IHV0aWxzLmFzc2VydEFyZ3VtZW50TnVtYmVyTm9uTmVnYXRpdmUuY2FsbCh0aGlzLCB2YWwsIG5hbWUpO1xyXG4gICAgaGVscGVycy5hc3NlcnRBcmd1bWVudEJvb2wgPSAodmFsLCBuYW1lKSA9PiB1dGlscy5hc3NlcnRBcmd1bWVudEJvb2wuY2FsbCh0aGlzLCB2YWwsIG5hbWUpO1xyXG4gICAgaGVscGVycy5hc3NlcnRBcmd1bWVudEJvb2xPcHRpb25hbCA9ICh2YWwsIG5hbWUpID0+IHV0aWxzLmFzc2VydEFyZ3VtZW50Qm9vbE9wdGlvbmFsLmNhbGwodGhpcywgdmFsLCBuYW1lKTtcclxuICAgIGhlbHBlcnMuYXNzZXJ0QXJndW1lbnRUaW1lb3V0ID0gKHZhbCwgbmFtZSkgPT4gdXRpbHMuYXNzZXJ0QXJndW1lbnRUaW1lb3V0LmNhbGwodGhpcywgdmFsLCBuYW1lKTtcclxuXHJcbiAgICByZXR1cm4gbW9kdWxlO1xyXG59O1xyXG4iXX0=
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
require("source-map-support/register");
|
|
4
|
-
|
|
5
|
-
/*
|
|
6
|
-
* Copyright (C) 2015-present CloudBeat Limited
|
|
7
|
-
*
|
|
8
|
-
* This program is free software: you can redistribute it and/or modify
|
|
9
|
-
* it under the terms of the GNU General Public License as published by
|
|
10
|
-
* the Free Software Foundation, either version 3 of the License, or
|
|
11
|
-
* (at your option) any later version.
|
|
12
|
-
*/
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* @summary Accepts an alert or a confirmation dialog.
|
|
16
|
-
* @description In case of an alert box this command is identical to `alertDismiss`.
|
|
17
|
-
* @function alertAccept
|
|
18
|
-
* @example <caption>[javascript] Usage example</caption>
|
|
19
|
-
* web.init();//Opens browser session
|
|
20
|
-
* web.open("www.yourwebsite.com");// Opens a website.
|
|
21
|
-
* web.click("id=SaveButton");//Clicks on save – an alert would pop up
|
|
22
|
-
* web.alertAccept();//Clicks on "OK" in the alert dialog.
|
|
23
|
-
*/
|
|
24
|
-
module.exports = async function () {
|
|
25
|
-
try {
|
|
26
|
-
await this.driver.acceptAlert();
|
|
27
|
-
} catch (e) {
|
|
28
|
-
if (e.name === 'no such alert' || e.type === 'NO_ALERT_OPEN_ERROR') {
|
|
29
|
-
throw new this.OxError(this.errHelper.errorCode.NO_ALERT_OPEN_ERROR, 'No alert present');
|
|
30
|
-
} else {
|
|
31
|
-
throw e;
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
};
|
|
35
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS13ZWIvY29tbWFuZHMvYWxlcnRBY2NlcHQuanMiXSwibmFtZXMiOlsibW9kdWxlIiwiZXhwb3J0cyIsImRyaXZlciIsImFjY2VwdEFsZXJ0IiwiZSIsIm5hbWUiLCJ0eXBlIiwiT3hFcnJvciIsImVyckhlbHBlciIsImVycm9yQ29kZSIsIk5PX0FMRVJUX09QRU5fRVJST1IiXSwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0FBLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQixrQkFBaUI7QUFDOUIsTUFBSTtBQUNBLFVBQU0sS0FBS0MsTUFBTCxDQUFZQyxXQUFaLEVBQU47QUFDSCxHQUZELENBRUUsT0FBT0MsQ0FBUCxFQUFVO0FBQ1IsUUFBSUEsQ0FBQyxDQUFDQyxJQUFGLEtBQVcsZUFBWCxJQUE4QkQsQ0FBQyxDQUFDRSxJQUFGLEtBQVcscUJBQTdDLEVBQW9FO0FBQ2hFLFlBQU0sSUFBSSxLQUFLQyxPQUFULENBQWlCLEtBQUtDLFNBQUwsQ0FBZUMsU0FBZixDQUF5QkMsbUJBQTFDLEVBQStELGtCQUEvRCxDQUFOO0FBQ0gsS0FGRCxNQUVPO0FBQ0gsWUFBTU4sQ0FBTjtBQUNIO0FBQ0o7QUFDSixDQVZEIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogQ29weXJpZ2h0IChDKSAyMDE1LXByZXNlbnQgQ2xvdWRCZWF0IExpbWl0ZWRcclxuICpcclxuICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnlcclxuICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnlcclxuICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3JcclxuICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi5cclxuICovXHJcblxyXG4vKipcclxuICogQHN1bW1hcnkgQWNjZXB0cyBhbiBhbGVydCBvciBhIGNvbmZpcm1hdGlvbiBkaWFsb2cuXHJcbiAqIEBkZXNjcmlwdGlvbiBJbiBjYXNlIG9mIGFuIGFsZXJ0IGJveCB0aGlzIGNvbW1hbmQgaXMgaWRlbnRpY2FsIHRvIGBhbGVydERpc21pc3NgLlxyXG4gKiBAZnVuY3Rpb24gYWxlcnRBY2NlcHRcclxuICogQGV4YW1wbGUgPGNhcHRpb24+W2phdmFzY3JpcHRdIFVzYWdlIGV4YW1wbGU8L2NhcHRpb24+XHJcbiAqIHdlYi5pbml0KCk7Ly9PcGVucyBicm93c2VyIHNlc3Npb25cclxuICogd2ViLm9wZW4oXCJ3d3cueW91cndlYnNpdGUuY29tXCIpOy8vIE9wZW5zIGEgd2Vic2l0ZS5cclxuICogd2ViLmNsaWNrKFwiaWQ9U2F2ZUJ1dHRvblwiKTsvL0NsaWNrcyBvbiBzYXZlIOKAkyBhbiBhbGVydCB3b3VsZCBwb3AgdXBcclxuICogd2ViLmFsZXJ0QWNjZXB0KCk7Ly9DbGlja3Mgb24gXCJPS1wiIGluIHRoZSBhbGVydCBkaWFsb2cuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9IGFzeW5jIGZ1bmN0aW9uKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgICBhd2FpdCB0aGlzLmRyaXZlci5hY2NlcHRBbGVydCgpO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIGlmIChlLm5hbWUgPT09ICdubyBzdWNoIGFsZXJ0JyB8fCBlLnR5cGUgPT09ICdOT19BTEVSVF9PUEVOX0VSUk9SJykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgdGhpcy5PeEVycm9yKHRoaXMuZXJySGVscGVyLmVycm9yQ29kZS5OT19BTEVSVF9PUEVOX0VSUk9SLCAnTm8gYWxlcnQgcHJlc2VudCcpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG4iXX0=
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
require("source-map-support/register");
|
|
4
|
-
|
|
5
|
-
/*
|
|
6
|
-
* Copyright (C) 2015-present CloudBeat Limited
|
|
7
|
-
*
|
|
8
|
-
* This program is free software: you can redistribute it and/or modify
|
|
9
|
-
* it under the terms of the GNU General Public License as published by
|
|
10
|
-
* the Free Software Foundation, either version 3 of the License, or
|
|
11
|
-
* (at your option) any later version.
|
|
12
|
-
*/
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* @summary Dismisses an alert or a confirmation dialog.
|
|
16
|
-
* @description In case of an alert box this command is identical to `alertAccept`.
|
|
17
|
-
* @function alertDismiss
|
|
18
|
-
* @example <caption>[javascript] Usage example</caption>
|
|
19
|
-
* web.init();//Opens browser session
|
|
20
|
-
* web.open("www.yourwebsite.com");// Opens a website.
|
|
21
|
-
* web.click("id=SaveButton");//Clicks on save – an alert would pop up
|
|
22
|
-
* web.alertDismiss();//Clicks on Cancel in the alert dialog.
|
|
23
|
-
*/
|
|
24
|
-
module.exports = async function () {
|
|
25
|
-
try {
|
|
26
|
-
await this.driver.dismissAlert();
|
|
27
|
-
} catch (e) {
|
|
28
|
-
if (e.name === 'no such alert' || e.type === 'NO_ALERT_OPEN_ERROR') {
|
|
29
|
-
throw new this.OxError(this.errHelper.errorCode.NO_ALERT_OPEN_ERROR, 'No alert present');
|
|
30
|
-
} else {
|
|
31
|
-
throw e;
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
};
|
|
35
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS13ZWIvY29tbWFuZHMvYWxlcnREaXNtaXNzLmpzIl0sIm5hbWVzIjpbIm1vZHVsZSIsImV4cG9ydHMiLCJkcml2ZXIiLCJkaXNtaXNzQWxlcnQiLCJlIiwibmFtZSIsInR5cGUiLCJPeEVycm9yIiwiZXJySGVscGVyIiwiZXJyb3JDb2RlIiwiTk9fQUxFUlRfT1BFTl9FUlJPUiJdLCJtYXBwaW5ncyI6Ijs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQUEsTUFBTSxDQUFDQyxPQUFQLEdBQWlCLGtCQUFpQjtBQUM5QixNQUFJO0FBQ0EsVUFBTSxLQUFLQyxNQUFMLENBQVlDLFlBQVosRUFBTjtBQUNILEdBRkQsQ0FFRSxPQUFPQyxDQUFQLEVBQVU7QUFDUixRQUFJQSxDQUFDLENBQUNDLElBQUYsS0FBVyxlQUFYLElBQThCRCxDQUFDLENBQUNFLElBQUYsS0FBVyxxQkFBN0MsRUFBb0U7QUFDaEUsWUFBTSxJQUFJLEtBQUtDLE9BQVQsQ0FBaUIsS0FBS0MsU0FBTCxDQUFlQyxTQUFmLENBQXlCQyxtQkFBMUMsRUFBK0Qsa0JBQS9ELENBQU47QUFDSCxLQUZELE1BRU87QUFDSCxZQUFNTixDQUFOO0FBQ0g7QUFDSjtBQUNKLENBVkQiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBDb3B5cmlnaHQgKEMpIDIwMTUtcHJlc2VudCBDbG91ZEJlYXQgTGltaXRlZFxyXG4gKlxyXG4gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeVxyXG4gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieVxyXG4gKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvclxyXG4gKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxyXG4gKi9cclxuXHJcbi8qKlxyXG4gKiBAc3VtbWFyeSBEaXNtaXNzZXMgYW4gYWxlcnQgb3IgYSBjb25maXJtYXRpb24gZGlhbG9nLlxyXG4gKiBAZGVzY3JpcHRpb24gSW4gY2FzZSBvZiBhbiBhbGVydCBib3ggdGhpcyBjb21tYW5kIGlzIGlkZW50aWNhbCB0byBgYWxlcnRBY2NlcHRgLlxyXG4gKiBAZnVuY3Rpb24gYWxlcnREaXNtaXNzXHJcbiAqIEBleGFtcGxlIDxjYXB0aW9uPltqYXZhc2NyaXB0XSBVc2FnZSBleGFtcGxlPC9jYXB0aW9uPlxyXG4gKiB3ZWIuaW5pdCgpOy8vT3BlbnMgYnJvd3NlciBzZXNzaW9uXHJcbiAqIHdlYi5vcGVuKFwid3d3LnlvdXJ3ZWJzaXRlLmNvbVwiKTsvLyBPcGVucyBhIHdlYnNpdGUuXHJcbiAqIHdlYi5jbGljayhcImlkPVNhdmVCdXR0b25cIik7Ly9DbGlja3Mgb24gc2F2ZSDigJMgYW4gYWxlcnQgd291bGQgcG9wIHVwXHJcbiAqIHdlYi5hbGVydERpc21pc3MoKTsvL0NsaWNrcyBvbiBDYW5jZWwgaW4gdGhlIGFsZXJ0IGRpYWxvZy5cclxuICovXHJcbm1vZHVsZS5leHBvcnRzID0gYXN5bmMgZnVuY3Rpb24oKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuZHJpdmVyLmRpc21pc3NBbGVydCgpO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIGlmIChlLm5hbWUgPT09ICdubyBzdWNoIGFsZXJ0JyB8fCBlLnR5cGUgPT09ICdOT19BTEVSVF9PUEVOX0VSUk9SJykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgdGhpcy5PeEVycm9yKHRoaXMuZXJySGVscGVyLmVycm9yQ29kZS5OT19BTEVSVF9PUEVOX0VSUk9SLCAnTm8gYWxlcnQgcHJlc2VudCcpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59O1xyXG4iXX0=
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
require("source-map-support/register");
|
|
4
|
-
|
|
5
|
-
/*
|
|
6
|
-
* Copyright (C) 2015-present CloudBeat Limited
|
|
7
|
-
*
|
|
8
|
-
* This program is free software: you can redistribute it and/or modify
|
|
9
|
-
* it under the terms of the GNU General Public License as published by
|
|
10
|
-
* the Free Software Foundation, either version 3 of the License, or
|
|
11
|
-
* (at your option) any later version.
|
|
12
|
-
*/
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* @summary Asserts whether alert matches the specified pattern and dismisses it.
|
|
16
|
-
* @description Text pattern can be any of the supported
|
|
17
|
-
* string matching patterns(on the top of page).
|
|
18
|
-
* @function assertAlert
|
|
19
|
-
* @param {String} pattern - Text pattern.
|
|
20
|
-
* @param {Number=} timeout - Timeout in milliseconds. Default is 60 seconds.
|
|
21
|
-
* @example <caption>[javascript] Usage example</caption>
|
|
22
|
-
* web.init();//Opens browser session
|
|
23
|
-
* web.open("www.yourwebsite.com");// Opens a website.
|
|
24
|
-
* web.click("id=SaveButton");//Clicks on save – an alert would pop up
|
|
25
|
-
* web.assertAlert("Your Alert's text");//Asserts the alert's text.
|
|
26
|
-
*/
|
|
27
|
-
module.exports = async function (pattern, timeout) {
|
|
28
|
-
let alertText = null;
|
|
29
|
-
|
|
30
|
-
try {
|
|
31
|
-
await this.driver.waitUntil(async () => {
|
|
32
|
-
try {
|
|
33
|
-
alertText = await this.driver.getAlertText();
|
|
34
|
-
|
|
35
|
-
if (alertText) {
|
|
36
|
-
return this.helpers.matchPattern(alertText, pattern);
|
|
37
|
-
}
|
|
38
|
-
} catch (e) {
|
|
39
|
-
return false;
|
|
40
|
-
}
|
|
41
|
-
}, {
|
|
42
|
-
timeout: timeout ? timeout : this.waitForTimeout
|
|
43
|
-
});
|
|
44
|
-
await this.alertDismiss();
|
|
45
|
-
} catch (e) {
|
|
46
|
-
await this.alertDismiss();
|
|
47
|
-
|
|
48
|
-
if (alertText && typeof alertText === 'string') {
|
|
49
|
-
throw this.errHelper.getAssertError(pattern, alertText);
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
throw new this.OxError(this.errHelper.errorCode.NO_ALERT_OPEN_ERROR, 'No alert present');
|
|
53
|
-
}
|
|
54
|
-
};
|
|
55
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9veF9tb2R1bGVzL21vZHVsZS13ZWIvY29tbWFuZHMvYXNzZXJ0QWxlcnQuanMiXSwibmFtZXMiOlsibW9kdWxlIiwiZXhwb3J0cyIsInBhdHRlcm4iLCJ0aW1lb3V0IiwiYWxlcnRUZXh0IiwiZHJpdmVyIiwid2FpdFVudGlsIiwiZ2V0QWxlcnRUZXh0IiwiaGVscGVycyIsIm1hdGNoUGF0dGVybiIsImUiLCJ3YWl0Rm9yVGltZW91dCIsImFsZXJ0RGlzbWlzcyIsImVyckhlbHBlciIsImdldEFzc2VydEVycm9yIiwiT3hFcnJvciIsImVycm9yQ29kZSIsIk5PX0FMRVJUX09QRU5fRVJST1IiXSwibWFwcGluZ3MiOiI7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0FBLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQixnQkFBZUMsT0FBZixFQUF3QkMsT0FBeEIsRUFBaUM7QUFDOUMsTUFBSUMsU0FBUyxHQUFHLElBQWhCOztBQUNBLE1BQUk7QUFDQSxVQUFNLEtBQUtDLE1BQUwsQ0FBWUMsU0FBWixDQUFzQixZQUFXO0FBQ25DLFVBQUk7QUFDQUYsUUFBQUEsU0FBUyxHQUFHLE1BQU0sS0FBS0MsTUFBTCxDQUFZRSxZQUFaLEVBQWxCOztBQUVBLFlBQUlILFNBQUosRUFBZTtBQUNYLGlCQUFPLEtBQUtJLE9BQUwsQ0FBYUMsWUFBYixDQUEwQkwsU0FBMUIsRUFBcUNGLE9BQXJDLENBQVA7QUFDSDtBQUNKLE9BTkQsQ0FNRSxPQUFPUSxDQUFQLEVBQVU7QUFDUixlQUFPLEtBQVA7QUFDSDtBQUNKLEtBVkssRUFXTjtBQUFFUCxNQUFBQSxPQUFPLEVBQUdBLE9BQU8sR0FBR0EsT0FBSCxHQUFhLEtBQUtRO0FBQXJDLEtBWE0sQ0FBTjtBQWFBLFVBQU0sS0FBS0MsWUFBTCxFQUFOO0FBQ0gsR0FmRCxDQWVFLE9BQU9GLENBQVAsRUFBVTtBQUNSLFVBQU0sS0FBS0UsWUFBTCxFQUFOOztBQUNBLFFBQUlSLFNBQVMsSUFBSSxPQUFPQSxTQUFQLEtBQXFCLFFBQXRDLEVBQWdEO0FBQzVDLFlBQU0sS0FBS1MsU0FBTCxDQUFlQyxjQUFmLENBQThCWixPQUE5QixFQUF1Q0UsU0FBdkMsQ0FBTjtBQUNIOztBQUNELFVBQU0sSUFBSSxLQUFLVyxPQUFULENBQWlCLEtBQUtGLFNBQUwsQ0FBZUcsU0FBZixDQUF5QkMsbUJBQTFDLEVBQStELGtCQUEvRCxDQUFOO0FBQ0g7QUFDSixDQXhCRCIsInNvdXJjZXNDb250ZW50IjpbIi8qXHJcbiAqIENvcHlyaWdodCAoQykgMjAxNS1wcmVzZW50IENsb3VkQmVhdCBMaW1pdGVkXHJcbiAqXHJcbiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5XHJcbiAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5XHJcbiAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yXHJcbiAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uXHJcbiAqL1xyXG5cclxuLyoqXHJcbiAqIEBzdW1tYXJ5IEFzc2VydHMgd2hldGhlciBhbGVydCBtYXRjaGVzIHRoZSBzcGVjaWZpZWQgcGF0dGVybiBhbmQgZGlzbWlzc2VzIGl0LlxyXG4gKiBAZGVzY3JpcHRpb24gVGV4dCBwYXR0ZXJuIGNhbiBiZSBhbnkgb2YgdGhlIHN1cHBvcnRlZFxyXG4gKiAgc3RyaW5nIG1hdGNoaW5nIHBhdHRlcm5zKG9uIHRoZSB0b3Agb2YgcGFnZSkuXHJcbiAqIEBmdW5jdGlvbiBhc3NlcnRBbGVydFxyXG4gKiBAcGFyYW0ge1N0cmluZ30gcGF0dGVybiAtIFRleHQgcGF0dGVybi5cclxuICogQHBhcmFtIHtOdW1iZXI9fSB0aW1lb3V0IC0gVGltZW91dCBpbiBtaWxsaXNlY29uZHMuIERlZmF1bHQgaXMgNjAgc2Vjb25kcy5cclxuICogQGV4YW1wbGUgPGNhcHRpb24+W2phdmFzY3JpcHRdIFVzYWdlIGV4YW1wbGU8L2NhcHRpb24+XHJcbiAqIHdlYi5pbml0KCk7Ly9PcGVucyBicm93c2VyIHNlc3Npb25cclxuICogd2ViLm9wZW4oXCJ3d3cueW91cndlYnNpdGUuY29tXCIpOy8vIE9wZW5zIGEgd2Vic2l0ZS5cclxuICogd2ViLmNsaWNrKFwiaWQ9U2F2ZUJ1dHRvblwiKTsvL0NsaWNrcyBvbiBzYXZlIOKAkyBhbiBhbGVydCB3b3VsZCBwb3AgdXBcclxuICogd2ViLmFzc2VydEFsZXJ0KFwiWW91ciBBbGVydCdzIHRleHRcIik7Ly9Bc3NlcnRzIHRoZSBhbGVydCdzIHRleHQuXHJcbiAqL1xyXG5tb2R1bGUuZXhwb3J0cyA9IGFzeW5jIGZ1bmN0aW9uKHBhdHRlcm4sIHRpbWVvdXQpIHtcclxuICAgIGxldCBhbGVydFRleHQgPSBudWxsO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICBhd2FpdCB0aGlzLmRyaXZlci53YWl0VW50aWwoYXN5bmMoKSA9PiB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBhbGVydFRleHQgPSBhd2FpdCB0aGlzLmRyaXZlci5nZXRBbGVydFRleHQoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoYWxlcnRUZXh0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGVscGVycy5tYXRjaFBhdHRlcm4oYWxlcnRUZXh0LCBwYXR0ZXJuKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICB7IHRpbWVvdXQ6ICh0aW1lb3V0ID8gdGltZW91dCA6IHRoaXMud2FpdEZvclRpbWVvdXQpIH0pO1xyXG5cclxuICAgICAgICBhd2FpdCB0aGlzLmFsZXJ0RGlzbWlzcygpO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuYWxlcnREaXNtaXNzKCk7XHJcbiAgICAgICAgaWYgKGFsZXJ0VGV4dCAmJiB0eXBlb2YgYWxlcnRUZXh0ID09PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICB0aHJvdyB0aGlzLmVyckhlbHBlci5nZXRBc3NlcnRFcnJvcihwYXR0ZXJuLCBhbGVydFRleHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aHJvdyBuZXcgdGhpcy5PeEVycm9yKHRoaXMuZXJySGVscGVyLmVycm9yQ29kZS5OT19BTEVSVF9PUEVOX0VSUk9SLCAnTm8gYWxlcnQgcHJlc2VudCcpO1xyXG4gICAgfVxyXG59O1xyXG4iXX0=
|