@open-wa/wa-automate 4.76.0 → 5.0.0-alpha.2
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/README.md +14 -165
- package/dist/cli-runtime-B7_3MM0c.cjs +798 -0
- package/dist/cli-runtime-B7_3MM0c.cjs.map +1 -0
- package/dist/cli-runtime-CmpYxFCk.d.cts +31 -0
- package/dist/cli-runtime-CmpYxFCk.d.cts.map +1 -0
- package/dist/cli.cjs +17 -0
- package/dist/cli.cjs.map +1 -0
- package/dist/cli.d.cts +2 -0
- package/dist/index.cjs +224 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +81 -0
- package/dist/index.d.cts.map +1 -0
- package/package.json +34 -177
- package/CNAME +0 -1
- package/_tsconfig.docs.json +0 -140
- package/bin/config-schema.json +0 -1
- package/bin/oas-type-schemas.json +0 -1
- package/bin/server.js +0 -45
- package/build/build-config-json-for-bin.ts +0 -56
- package/build/generate-oas-types.ts +0 -31
- package/dist/api/Client.d.ts +0 -2255
- package/dist/api/Client.js +0 -4358
- package/dist/api/functions/exposed.enum.d.ts +0 -7
- package/dist/api/functions/exposed.enum.js +0 -11
- package/dist/api/model/aliases.d.ts +0 -110
- package/dist/api/model/aliases.js +0 -3
- package/dist/api/model/button.d.ts +0 -24
- package/dist/api/model/button.js +0 -2
- package/dist/api/model/call.d.ts +0 -51
- package/dist/api/model/call.js +0 -18
- package/dist/api/model/chat.d.ts +0 -221
- package/dist/api/model/chat.js +0 -52
- package/dist/api/model/config.d.ts +0 -836
- package/dist/api/model/config.js +0 -111
- package/dist/api/model/contact.d.ts +0 -143
- package/dist/api/model/contact.js +0 -2
- package/dist/api/model/errors.d.ts +0 -90
- package/dist/api/model/errors.js +0 -117
- package/dist/api/model/events.d.ts +0 -120
- package/dist/api/model/events.js +0 -127
- package/dist/api/model/group-metadata.d.ts +0 -124
- package/dist/api/model/group-metadata.js +0 -25
- package/dist/api/model/id.d.ts +0 -5
- package/dist/api/model/id.js +0 -2
- package/dist/api/model/index.d.ts +0 -110
- package/dist/api/model/index.js +0 -128
- package/dist/api/model/label.d.ts +0 -24
- package/dist/api/model/label.js +0 -2
- package/dist/api/model/media.d.ts +0 -93
- package/dist/api/model/media.js +0 -12
- package/dist/api/model/message.d.ts +0 -422
- package/dist/api/model/message.js +0 -40
- package/dist/api/model/product.d.ts +0 -141
- package/dist/api/model/product.js +0 -2
- package/dist/api/model/reactions.d.ts +0 -76
- package/dist/api/model/reactions.js +0 -2
- package/dist/api/model/sessionInfo.d.ts +0 -77
- package/dist/api/model/sessionInfo.js +0 -2
- package/dist/build/build-postman.d.ts +0 -1
- package/dist/build/build-postman.js +0 -262
- package/dist/cli/cli-options.d.ts +0 -9
- package/dist/cli/cli-options.js +0 -289
- package/dist/cli/collections.d.ts +0 -2
- package/dist/cli/collections.js +0 -251
- package/dist/cli/file-utils.d.ts +0 -1
- package/dist/cli/file-utils.js +0 -71
- package/dist/cli/index.d.ts +0 -1
- package/dist/cli/index.js +0 -231
- package/dist/cli/integrations/chatwoot.d.ts +0 -49
- package/dist/cli/integrations/chatwoot.js +0 -672
- package/dist/cli/integrations/cloudflare.d.ts +0 -6
- package/dist/cli/integrations/cloudflare.js +0 -76
- package/dist/cli/logo.d.ts +0 -1
- package/dist/cli/logo.js +0 -49
- package/dist/cli/server.d.ts +0 -24
- package/dist/cli/server.js +0 -540
- package/dist/cli/setup.d.ts +0 -30
- package/dist/cli/setup.js +0 -308
- package/dist/config/puppeteer.config.d.ts +0 -11
- package/dist/config/puppeteer.config.js +0 -65
- package/dist/controllers/auth.d.ts +0 -36
- package/dist/controllers/auth.js +0 -322
- package/dist/controllers/browser.d.ts +0 -17
- package/dist/controllers/browser.js +0 -603
- package/dist/controllers/events.d.ts +0 -82
- package/dist/controllers/events.js +0 -173
- package/dist/controllers/init_patch.d.ts +0 -13
- package/dist/controllers/init_patch.js +0 -42
- package/dist/controllers/initializer.d.ts +0 -22
- package/dist/controllers/initializer.js +0 -511
- package/dist/controllers/launch_checks.d.ts +0 -8
- package/dist/controllers/launch_checks.js +0 -130
- package/dist/controllers/patch_manager.d.ts +0 -37
- package/dist/controllers/patch_manager.js +0 -231
- package/dist/controllers/popup/index.d.ts +0 -3
- package/dist/controllers/popup/index.html +0 -168
- package/dist/controllers/popup/index.js +0 -148
- package/dist/controllers/script_preloader.d.ts +0 -17
- package/dist/controllers/script_preloader.js +0 -88
- package/dist/index.d.ts +0 -13
- package/dist/index.js +0 -36
- package/dist/lib/README.md +0 -5
- package/dist/lib/base64.js +0 -1
- package/dist/lib/hash.js +0 -1
- package/dist/lib/jsSha.min.js +0 -1
- package/dist/lib/launch.js +0 -1
- package/dist/lib/qr.min.js +0 -1
- package/dist/lib/wapi.js +0 -2163
- package/dist/logging/custom_transport.d.ts +0 -9
- package/dist/logging/custom_transport.js +0 -35
- package/dist/logging/logging.d.ts +0 -50
- package/dist/logging/logging.js +0 -196
- package/dist/structures/Collector.d.ts +0 -202
- package/dist/structures/Collector.js +0 -391
- package/dist/structures/Dialog.d.ts +0 -55
- package/dist/structures/Dialog.js +0 -21
- package/dist/structures/MessageCollector.d.ts +0 -78
- package/dist/structures/MessageCollector.js +0 -145
- package/dist/structures/preProcessors.d.ts +0 -58
- package/dist/structures/preProcessors.js +0 -181
- package/dist/utils/pid_utils.d.ts +0 -1
- package/dist/utils/pid_utils.js +0 -26
- package/dist/utils/tools.d.ts +0 -152
- package/dist/utils/tools.js +0 -494
- package/tos.md +0 -77
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import { ConfigObject } from '../api/model/index';
|
|
2
|
-
import { Spin } from './events';
|
|
3
|
-
import { SessionInfo } from '../api/model/sessionInfo';
|
|
4
|
-
import { Page } from 'puppeteer';
|
|
5
|
-
/**
|
|
6
|
-
* @private
|
|
7
|
-
*/
|
|
8
|
-
export declare function getPatch(config: ConfigObject, spinner?: Spin, sessionInfo?: SessionInfo): Promise<{
|
|
9
|
-
data: any;
|
|
10
|
-
tag: string;
|
|
11
|
-
}>;
|
|
12
|
-
/**
|
|
13
|
-
* @private
|
|
14
|
-
* @param page
|
|
15
|
-
* @param spinner
|
|
16
|
-
*/
|
|
17
|
-
export declare function injectLivePatch(page: Page, patch: {
|
|
18
|
-
data: any;
|
|
19
|
-
tag: string;
|
|
20
|
-
}, spinner?: Spin): Promise<string>;
|
|
21
|
-
/**
|
|
22
|
-
* @private
|
|
23
|
-
*/
|
|
24
|
-
export declare function getAndInjectLivePatch(page: Page, spinner?: Spin, preloadedPatch?: {
|
|
25
|
-
data: any;
|
|
26
|
-
tag: string;
|
|
27
|
-
}, config?: ConfigObject, sessionInfo?: SessionInfo): Promise<void>;
|
|
28
|
-
/**
|
|
29
|
-
* @private
|
|
30
|
-
*/
|
|
31
|
-
export declare function getLicense(config: ConfigObject, me: {
|
|
32
|
-
_serialized: string;
|
|
33
|
-
}, debugInfo: SessionInfo, spinner?: Spin): Promise<string | false>;
|
|
34
|
-
export declare function earlyInjectionCheck(page: Page): Promise<(page: Page) => boolean>;
|
|
35
|
-
export declare function getAndInjectLicense(page: Page, config: ConfigObject, me: {
|
|
36
|
-
_serialized: string;
|
|
37
|
-
}, debugInfo: SessionInfo, spinner?: Spin, preloadedLicense?: string | false): Promise<boolean>;
|
|
@@ -1,231 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
26
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
27
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
28
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
29
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
30
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
31
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
32
|
-
});
|
|
33
|
-
};
|
|
34
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
35
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
36
|
-
};
|
|
37
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
|
-
exports.getAndInjectLicense = exports.earlyInjectionCheck = exports.getLicense = exports.getAndInjectLivePatch = exports.injectLivePatch = exports.getPatch = void 0;
|
|
39
|
-
const crypto = __importStar(require("crypto"));
|
|
40
|
-
const events_1 = require("./events");
|
|
41
|
-
const initializer_1 = require("./initializer");
|
|
42
|
-
const axios_1 = __importDefault(require("axios"));
|
|
43
|
-
const fs_1 = require("fs");
|
|
44
|
-
const { default: PQueue } = require("p-queue");
|
|
45
|
-
const queue = new PQueue();
|
|
46
|
-
/**
|
|
47
|
-
* @private
|
|
48
|
-
*/
|
|
49
|
-
function getPatch(config, spinner, sessionInfo) {
|
|
50
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
51
|
-
var data = null;
|
|
52
|
-
var headers = {};
|
|
53
|
-
const ghUrl = `https://raw.githubusercontent.com/open-wa/wa-automate-nodejs/master/patches.json`;
|
|
54
|
-
const hasSpin = !!spinner;
|
|
55
|
-
const patchFilePath = `${process.cwd()}/patches.ignore.data.json`;
|
|
56
|
-
/**
|
|
57
|
-
* If cachedPatch is true then search for patch in current working directory.
|
|
58
|
-
*/
|
|
59
|
-
if (config === null || config === void 0 ? void 0 : config.cachedPatch) {
|
|
60
|
-
spinner.info('Searching for cached patch');
|
|
61
|
-
// open file called patches.json and read as string
|
|
62
|
-
if ((0, fs_1.existsSync)(patchFilePath)) {
|
|
63
|
-
spinner.info('Found cached patch');
|
|
64
|
-
const lastModifiedDate = (0, fs_1.statSync)(patchFilePath).mtimeMs;
|
|
65
|
-
/**
|
|
66
|
-
* Check if patchFilePath file is more than 1 day old
|
|
67
|
-
*/
|
|
68
|
-
if ((lastModifiedDate + 86400000) < Date.now()) {
|
|
69
|
-
//this patch is stale.
|
|
70
|
-
spinner.fail('Cached patch is stale.');
|
|
71
|
-
}
|
|
72
|
-
else {
|
|
73
|
-
const patch = (0, fs_1.readFileSync)(patchFilePath, 'utf8');
|
|
74
|
-
data = JSON.parse(patch);
|
|
75
|
-
spinner.info('Cached patch loaded');
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
else
|
|
79
|
-
spinner.fail('Cached patch not found');
|
|
80
|
-
}
|
|
81
|
-
const freshPatchFetchPromise = () => new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
|
|
82
|
-
const patchesBaseUrl = (config === null || config === void 0 ? void 0 : config.ghPatch) ? ghUrl : initializer_1.pkg.patches;
|
|
83
|
-
const patchesUrl = patchesBaseUrl + `?wv=${sessionInfo.WA_VERSION}&wav=${sessionInfo.WA_AUTOMATE_VERSION}`;
|
|
84
|
-
if (!spinner)
|
|
85
|
-
spinner = new events_1.Spin(config.sessionId, "FETCH_PATCH", config.disableSpins, true);
|
|
86
|
-
spinner === null || spinner === void 0 ? void 0 : spinner.start(`Downloading ${(config === null || config === void 0 ? void 0 : config.cachedPatch) ? 'cached ' : ''}patches from ${patchesBaseUrl}`, hasSpin ? undefined : 2);
|
|
87
|
-
const START = Date.now();
|
|
88
|
-
var { data, headers } = yield axios_1.default.get(patchesUrl).catch(() => {
|
|
89
|
-
spinner === null || spinner === void 0 ? void 0 : spinner.info('Downloading patches. Retrying.');
|
|
90
|
-
return axios_1.default.get(`${ghUrl}?v=${Date.now()}`);
|
|
91
|
-
});
|
|
92
|
-
const END = Date.now();
|
|
93
|
-
if (!headers['etag']) {
|
|
94
|
-
spinner === null || spinner === void 0 ? void 0 : spinner.info('Generating patch hash');
|
|
95
|
-
headers['etag'] = crypto.createHash('md5').update(typeof data === 'string' ? data : JSON.stringify(data)).digest("hex").slice(-5);
|
|
96
|
-
}
|
|
97
|
-
spinner === null || spinner === void 0 ? void 0 : spinner.succeed(`Downloaded patches in ${(END - START) / 1000}s`);
|
|
98
|
-
if (config === null || config === void 0 ? void 0 : config.cachedPatch) {
|
|
99
|
-
//save patches.json to current working directory
|
|
100
|
-
spinner === null || spinner === void 0 ? void 0 : spinner.info('Saving patches to current working directory');
|
|
101
|
-
(0, fs_1.writeFileSync)(patchFilePath, JSON.stringify(data, null, 2));
|
|
102
|
-
spinner === null || spinner === void 0 ? void 0 : spinner.succeed('Saved patches to current working directory');
|
|
103
|
-
}
|
|
104
|
-
return resolve({
|
|
105
|
-
data,
|
|
106
|
-
tag: `${(headers.etag || '').replace(/"/g, '').slice(-5)}`
|
|
107
|
-
});
|
|
108
|
-
}));
|
|
109
|
-
if ((config === null || config === void 0 ? void 0 : config.cachedPatch) && data) {
|
|
110
|
-
queue.add(freshPatchFetchPromise);
|
|
111
|
-
return { data, tag: `CACHED-${(crypto.createHash('md5').update(typeof data === 'string' ? data : JSON.stringify(data)).digest("hex").slice(-5)).replace(/"/g, '').slice(-5)}` };
|
|
112
|
-
}
|
|
113
|
-
else
|
|
114
|
-
return yield freshPatchFetchPromise();
|
|
115
|
-
});
|
|
116
|
-
}
|
|
117
|
-
exports.getPatch = getPatch;
|
|
118
|
-
/**
|
|
119
|
-
* @private
|
|
120
|
-
* @param page
|
|
121
|
-
* @param spinner
|
|
122
|
-
*/
|
|
123
|
-
function injectLivePatch(page, patch, spinner) {
|
|
124
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
125
|
-
const { data, tag } = patch;
|
|
126
|
-
spinner === null || spinner === void 0 ? void 0 : spinner.info('Installing patches');
|
|
127
|
-
yield Promise.all(data.map(patch => page.evaluate(`${patch}`)));
|
|
128
|
-
spinner === null || spinner === void 0 ? void 0 : spinner.succeed(`Patches Installed: ${tag}`);
|
|
129
|
-
return tag;
|
|
130
|
-
});
|
|
131
|
-
}
|
|
132
|
-
exports.injectLivePatch = injectLivePatch;
|
|
133
|
-
/**
|
|
134
|
-
* @private
|
|
135
|
-
*/
|
|
136
|
-
function getAndInjectLivePatch(page, spinner, preloadedPatch, config, sessionInfo) {
|
|
137
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
138
|
-
let patch = preloadedPatch;
|
|
139
|
-
if (!patch)
|
|
140
|
-
patch = yield getPatch(config, spinner, sessionInfo);
|
|
141
|
-
const patch_hash = yield injectLivePatch(page, patch, spinner);
|
|
142
|
-
sessionInfo.PATCH_HASH = patch_hash;
|
|
143
|
-
});
|
|
144
|
-
}
|
|
145
|
-
exports.getAndInjectLivePatch = getAndInjectLivePatch;
|
|
146
|
-
/**
|
|
147
|
-
* @private
|
|
148
|
-
*/
|
|
149
|
-
function getLicense(config, me, debugInfo, spinner) {
|
|
150
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
151
|
-
if (!(config === null || config === void 0 ? void 0 : config.licenseKey) || !(me === null || me === void 0 ? void 0 : me._serialized))
|
|
152
|
-
return false;
|
|
153
|
-
const hasSpin = !!spinner;
|
|
154
|
-
if (!spinner)
|
|
155
|
-
spinner = new events_1.Spin(config.sessionId || "session", "FETCH_LICENSE", config.disableSpins, true);
|
|
156
|
-
if (typeof config.licenseKey === "function") {
|
|
157
|
-
//run the funciton to get the key
|
|
158
|
-
config.licenseKey = yield config.licenseKey(config.sessionId, me._serialized);
|
|
159
|
-
}
|
|
160
|
-
if (config.licenseKey && typeof config.licenseKey === "object") {
|
|
161
|
-
//attempt to get the key from the object
|
|
162
|
-
//@ts-ignore
|
|
163
|
-
config.licenseKey = config.licenseKey[me._serialized] || config.licenseKey[config.sessionId];
|
|
164
|
-
}
|
|
165
|
-
//asume by now the key is a string
|
|
166
|
-
spinner === null || spinner === void 0 ? void 0 : spinner.start(`Fetching License: ${Array.isArray(config.licenseKey) ? config.licenseKey : typeof config.licenseKey === "string" ? config.licenseKey.indexOf("-") == -1 ? config.licenseKey.slice(-4) : config.licenseKey.split("-").slice(-1)[0] : config.licenseKey}`, hasSpin ? undefined : 2);
|
|
167
|
-
try {
|
|
168
|
-
const START = Date.now();
|
|
169
|
-
const { data } = yield axios_1.default.post(initializer_1.pkg.licenseCheckUrl, Object.assign({ key: config.licenseKey, number: me._serialized }, debugInfo));
|
|
170
|
-
const END = Date.now();
|
|
171
|
-
spinner === null || spinner === void 0 ? void 0 : spinner.succeed(`Downloaded License in ${(END - START) / 1000}s`);
|
|
172
|
-
return data;
|
|
173
|
-
}
|
|
174
|
-
catch (error) {
|
|
175
|
-
spinner === null || spinner === void 0 ? void 0 : spinner.fail(`License request failed: ${error.statusCode || error.status || error.code} ${error.message}`);
|
|
176
|
-
return false;
|
|
177
|
-
}
|
|
178
|
-
});
|
|
179
|
-
}
|
|
180
|
-
exports.getLicense = getLicense;
|
|
181
|
-
function earlyInjectionCheck(page) {
|
|
182
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
183
|
-
//@ts-ignore
|
|
184
|
-
yield page.waitForFunction(`require("__debug").modulesMap["WAWebCollections"] ? true : false`, { timeout: 10, polling: 500 }).catch(() => { });
|
|
185
|
-
//@ts-ignore
|
|
186
|
-
// return await page.evaluate(() => { if (window.webpackChunkwhatsapp_web_client) { window.webpackChunkbuild = window.webpackChunkwhatsapp_web_client; } else { (function () { const f = Object.entries(window).filter(([, o]) => o && o.push && (o.push != [].push)); if (f[0]) { window.webpackChunkbuild = window[f[0][0]]; } })(); } return (typeof window.webpackChunkbuild !== "undefined"); });
|
|
187
|
-
return true;
|
|
188
|
-
});
|
|
189
|
-
}
|
|
190
|
-
exports.earlyInjectionCheck = earlyInjectionCheck;
|
|
191
|
-
function getAndInjectLicense(page, config, me, debugInfo, spinner, preloadedLicense) {
|
|
192
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
193
|
-
if (!(config === null || config === void 0 ? void 0 : config.licenseKey) || !(me === null || me === void 0 ? void 0 : me._serialized))
|
|
194
|
-
return false;
|
|
195
|
-
let l_err;
|
|
196
|
-
let data = preloadedLicense;
|
|
197
|
-
spinner === null || spinner === void 0 ? void 0 : spinner.info('Checking License');
|
|
198
|
-
try {
|
|
199
|
-
if (!data) {
|
|
200
|
-
spinner === null || spinner === void 0 ? void 0 : spinner.info('Fethcing License...');
|
|
201
|
-
data = yield getLicense(config, me, debugInfo, spinner);
|
|
202
|
-
}
|
|
203
|
-
if (data) {
|
|
204
|
-
spinner === null || spinner === void 0 ? void 0 : spinner.info('Injecting License...');
|
|
205
|
-
const l_success = yield page.evaluate(data => eval(data), data);
|
|
206
|
-
if (!l_success) {
|
|
207
|
-
spinner === null || spinner === void 0 ? void 0 : spinner.info('License injection failed. Getting error..');
|
|
208
|
-
l_err = yield page.evaluate('window.launchError');
|
|
209
|
-
}
|
|
210
|
-
else {
|
|
211
|
-
spinner === null || spinner === void 0 ? void 0 : spinner.info('License injected successfully..');
|
|
212
|
-
const keyType = yield page.evaluate('window.KEYTYPE || false');
|
|
213
|
-
spinner === null || spinner === void 0 ? void 0 : spinner.succeed(`License Valid${keyType ? `: ${keyType}` : ''}`);
|
|
214
|
-
return true;
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
else
|
|
218
|
-
l_err = "The key is invalid";
|
|
219
|
-
if (l_err) {
|
|
220
|
-
spinner === null || spinner === void 0 ? void 0 : spinner.fail(`License issue${l_err ? `: ${l_err}` : ""}`);
|
|
221
|
-
}
|
|
222
|
-
return false;
|
|
223
|
-
}
|
|
224
|
-
catch (error) {
|
|
225
|
-
spinner === null || spinner === void 0 ? void 0 : spinner.fail(`License request failed: ${error.statusCode || error.status || error.code} ${error.message}`);
|
|
226
|
-
return false;
|
|
227
|
-
}
|
|
228
|
-
});
|
|
229
|
-
}
|
|
230
|
-
exports.getAndInjectLicense = getAndInjectLicense;
|
|
231
|
-
// export * from './init_patch';
|
|
@@ -1,168 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html>
|
|
3
|
-
|
|
4
|
-
<head>
|
|
5
|
-
<title>open-wa</title>
|
|
6
|
-
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
7
|
-
<script src="//code.jquery.com/jquery-2.1.4.min.js"></script>
|
|
8
|
-
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/4.2.0/socket.io.js"
|
|
9
|
-
integrity="sha512-WL6WGKMPBiM9PnHRYIn5YEtq0Z8XP4fkVb4qy7PP4vhmYQErJ/dySyXuFIMDf1eEYCXCrQrMJfkNwKc9gsjTjA=="
|
|
10
|
-
crossorigin="anonymous" referrerpolicy="no-referrer"></script>
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
<style>
|
|
14
|
-
body {
|
|
15
|
-
color: #1a2c37;
|
|
16
|
-
font-family: 'Helvetica', sans-serif;
|
|
17
|
-
font-size: 86%;
|
|
18
|
-
padding: 2em;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
.info {
|
|
22
|
-
font-size: 120%;
|
|
23
|
-
font-weight: bold;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
.log {
|
|
27
|
-
border: 1px solid #ccc;
|
|
28
|
-
height: 300px;
|
|
29
|
-
padding: 0.5em;
|
|
30
|
-
overflow: hidden;
|
|
31
|
-
position: relative;
|
|
32
|
-
overflow-y: scroll;
|
|
33
|
-
height: 400px;
|
|
34
|
-
min-width: 400px;
|
|
35
|
-
margin: auto;
|
|
36
|
-
margin-left: 16px;
|
|
37
|
-
max-width: 50%;
|
|
38
|
-
width: 50%;
|
|
39
|
-
white-space: pre-wrap; /* css-3 */
|
|
40
|
-
white-space: -moz-pre-wrap; /* Mozilla, since 1999 */
|
|
41
|
-
white-space: -pre-wrap; /* Opera 4-6 */
|
|
42
|
-
white-space: -o-pre-wrap; /* Opera 7 */
|
|
43
|
-
word-wrap: break-word; /* Internet Explorer 5.5+ */
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
.qr {
|
|
47
|
-
width: 400px;
|
|
48
|
-
height: 400px;
|
|
49
|
-
margin: auto;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
.eventwrap {
|
|
53
|
-
display: flex;
|
|
54
|
-
flex-direction: row;
|
|
55
|
-
}
|
|
56
|
-
</style>
|
|
57
|
-
|
|
58
|
-
</head>
|
|
59
|
-
|
|
60
|
-
<body>
|
|
61
|
-
<div id="wrap">
|
|
62
|
-
|
|
63
|
-
</div>
|
|
64
|
-
|
|
65
|
-
<script>
|
|
66
|
-
|
|
67
|
-
var Application = function () {
|
|
68
|
-
var sessions = [];
|
|
69
|
-
function c() {
|
|
70
|
-
var n = $('.c').attr('id');
|
|
71
|
-
var c = n;
|
|
72
|
-
$('.c').text(c);
|
|
73
|
-
setInterval(function () {
|
|
74
|
-
c--;
|
|
75
|
-
if (c >= 0) {
|
|
76
|
-
$('.c').text(c);
|
|
77
|
-
}
|
|
78
|
-
}, 1000);
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
function consume(message) {
|
|
82
|
-
console.log('Received message:', message);
|
|
83
|
-
if (!sessions.includes(message.sessionId)) {
|
|
84
|
-
$('#wrap').append(`
|
|
85
|
-
<div id=${message.sessionId}>
|
|
86
|
-
<h1 class="info"></h1>
|
|
87
|
-
<div class="eventwrap">
|
|
88
|
-
<pre class="log"></pre>
|
|
89
|
-
<img class="qr" />
|
|
90
|
-
<div>
|
|
91
|
-
</div>
|
|
92
|
-
`);
|
|
93
|
-
sessions.push(message.sessionId);
|
|
94
|
-
setInterval(() => {
|
|
95
|
-
var element = document.getElementById(message.sessionId).children[1];
|
|
96
|
-
element.scrollTop = element.scrollHeight;
|
|
97
|
-
}, 1000);
|
|
98
|
-
};
|
|
99
|
-
|
|
100
|
-
if (message.sessionId) {
|
|
101
|
-
$(`#${message.sessionId} .info`).html('Session: ' + message.sessionId);
|
|
102
|
-
};
|
|
103
|
-
if (message.namespace === "qr") {
|
|
104
|
-
$(`#${message.sessionId} .qr`)[0].src = message.data
|
|
105
|
-
}
|
|
106
|
-
if (message.namespace === "ready") {
|
|
107
|
-
const link = (message.data || location.href.substring(0, location.href.length - 1)) + "/api-docs/"
|
|
108
|
-
$(`#${message.sessionId} .log`).html(`${$(`#${message.sessionId} .log`).html()} API Explorer: <a href="${link}" target="_blank" >${link}</a>\n You may need to refresh the page. and wait <span class="c" id="5"></span> seconds. <br><br><br><br>`);
|
|
109
|
-
// Start
|
|
110
|
-
c();
|
|
111
|
-
}
|
|
112
|
-
if (message.data) {
|
|
113
|
-
if (message.namespace !== "sessionDataBase64") $(`#${message.sessionId} .log`).html(`${$(`#${message.sessionId} .log`).html()} ${message.namespace} ${typeof message.data === 'object' ? JSON.stringify(message.data, null, 4) : message.data} <br>`);
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
console.log("Application -> window.location.origin", window.location.origin, window.location.href)
|
|
117
|
-
|
|
118
|
-
const socketUrl = window.location.origin
|
|
119
|
-
const fallback = `${window.location.origin}${window.location.pathname.split('/').filter(x => !x.includes('.')).join('/')}`;
|
|
120
|
-
const isReverseProxied = window.location.pathname.split('/').includes('api')
|
|
121
|
-
let socket = io(socketUrl, {
|
|
122
|
-
path: isReverseProxied ? `${window.location.pathname.replace(/\/$/, '')}/socket.io` : `/socket.io`
|
|
123
|
-
});
|
|
124
|
-
|
|
125
|
-
socket.io.reconnectionAttempts(3)
|
|
126
|
-
|
|
127
|
-
socket.io.on("reconnect_attempt", () => {
|
|
128
|
-
console.log("reconnect_attempt");
|
|
129
|
-
});
|
|
130
|
-
|
|
131
|
-
socket.io.on("reconnect_failed", () => {
|
|
132
|
-
console.log("reconnect_failed");
|
|
133
|
-
console.log('trying different URL, transferring all event listeners')
|
|
134
|
-
const callbacks = [
|
|
135
|
-
...Object.entries(socket._callbacks)
|
|
136
|
-
]
|
|
137
|
-
socket = io(fallback, {
|
|
138
|
-
path: isReverseProxied ? `${window.location.pathname.replace(/\/$/, '')}/socket.io` : `/socket.io`
|
|
139
|
-
});
|
|
140
|
-
|
|
141
|
-
callbacks.map(([key, callbacks]) => callbacks.map(cb => socket.on(`${key.replace('$', '')}`, cb)))
|
|
142
|
-
});
|
|
143
|
-
|
|
144
|
-
socket.on('connect', function () {
|
|
145
|
-
console.log('Connected to:', socket);
|
|
146
|
-
});
|
|
147
|
-
|
|
148
|
-
socket.on('disconnect', (reason) => {
|
|
149
|
-
sessions.map(sessionId => consume({
|
|
150
|
-
sessionId,
|
|
151
|
-
data: `Connection to the launch logs socket is now closed. You can now close this window or go to the api docs ${window.location.href}/api-docs/`,
|
|
152
|
-
namespace: 'SOCKET'
|
|
153
|
-
}));
|
|
154
|
-
socket.close();
|
|
155
|
-
});
|
|
156
|
-
socket.on('message', consume);
|
|
157
|
-
return {
|
|
158
|
-
socket
|
|
159
|
-
};
|
|
160
|
-
};
|
|
161
|
-
|
|
162
|
-
$(function () { var app = Application(); });
|
|
163
|
-
|
|
164
|
-
</script>
|
|
165
|
-
|
|
166
|
-
</body>
|
|
167
|
-
|
|
168
|
-
</html>
|
|
@@ -1,148 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
-
if (mod && mod.__esModule) return mod;
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
-
__setModuleDefault(result, mod);
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
|
-
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
26
|
-
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
27
|
-
return new (P || (P = Promise))(function (resolve, reject) {
|
|
28
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
29
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
30
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
31
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
32
|
-
});
|
|
33
|
-
};
|
|
34
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
35
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
36
|
-
};
|
|
37
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
|
-
exports.closeHttp = exports.popup = void 0;
|
|
39
|
-
/** @internal */ /** */
|
|
40
|
-
const events_1 = require("../events");
|
|
41
|
-
const socket_io_1 = require("socket.io");
|
|
42
|
-
const os_name_1 = __importDefault(require("os-name"));
|
|
43
|
-
const open_1 = __importDefault(require("open"));
|
|
44
|
-
const get_port_1 = __importDefault(require("get-port"));
|
|
45
|
-
const command_exists_1 = __importDefault(require("command-exists"));
|
|
46
|
-
const http_1 = __importDefault(require("http"));
|
|
47
|
-
const tools_1 = require("../../utils/tools");
|
|
48
|
-
const logging_1 = require("../../logging/logging");
|
|
49
|
-
const placeholders = {
|
|
50
|
-
"authenticated": "data:image/png;base64,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",
|
|
51
|
-
"loading": "data:image/png;base64,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"
|
|
52
|
-
}, currentQrCodes = {
|
|
53
|
-
"latest": placeholders.loading
|
|
54
|
-
}, serverSockets = {};
|
|
55
|
-
let io, express, app, gClient, PORT, server;
|
|
56
|
-
const setUpApp = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
57
|
-
express = (yield Promise.resolve().then(() => __importStar(require('express')))).default;
|
|
58
|
-
app = express();
|
|
59
|
-
app.use(express.static(__dirname + '/node_modules'));
|
|
60
|
-
app.get('/', function (req, res) {
|
|
61
|
-
res.sendFile(__dirname + '/index.html');
|
|
62
|
-
});
|
|
63
|
-
app.get('/qr', function (req, res) {
|
|
64
|
-
const { sessionId } = req.query;
|
|
65
|
-
const qr = sessionId ? currentQrCodes[sessionId] || currentQrCodes.latest : currentQrCodes.latest;
|
|
66
|
-
res.writeHead(200, { 'Content-Type': 'image/png' });
|
|
67
|
-
res.write(Buffer.from(qr.replace('data:image/png;base64,', ''), 'base64'), 'utf8');
|
|
68
|
-
res.end();
|
|
69
|
-
});
|
|
70
|
-
});
|
|
71
|
-
function popup(config) {
|
|
72
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
73
|
-
yield setUpApp();
|
|
74
|
-
const _p = process.env.PORT || config.port;
|
|
75
|
-
const preferredPort = typeof config.popup === "boolean" && config.popup && _p ? Number(_p) : config.popup;
|
|
76
|
-
const popupListener = events_1.ev.on('**', (data, sessionId, namespace) => __awaiter(this, void 0, void 0, function* () {
|
|
77
|
-
if (namespace === null || namespace === void 0 ? void 0 : namespace.includes("sessionData"))
|
|
78
|
-
return;
|
|
79
|
-
if (gClient) {
|
|
80
|
-
yield gClient.send({ data, sessionId, namespace });
|
|
81
|
-
if ((data === null || data === void 0 ? void 0 : data.includes) && (data === null || data === void 0 ? void 0 : data.includes("ready for account"))) {
|
|
82
|
-
yield gClient.send({ data: config === null || config === void 0 ? void 0 : config.apiHost, sessionId, namespace: "ready" });
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
if (namespace === 'qr') {
|
|
86
|
-
currentQrCodes['latest'] = currentQrCodes[sessionId] = data;
|
|
87
|
-
}
|
|
88
|
-
if ((data === null || data === void 0 ? void 0 : data.includes) && (data === null || data === void 0 ? void 0 : data.includes("Authenticated"))) {
|
|
89
|
-
currentQrCodes['latest'] = currentQrCodes[sessionId] = placeholders.authenticated;
|
|
90
|
-
}
|
|
91
|
-
if ((data === null || data === void 0 ? void 0 : data.includes) && (data === null || data === void 0 ? void 0 : data.includes("ready for account"))) {
|
|
92
|
-
//@ts-ignore
|
|
93
|
-
popupListener.off();
|
|
94
|
-
yield (0, exports.closeHttp)();
|
|
95
|
-
}
|
|
96
|
-
}), { objectify: true });
|
|
97
|
-
/**
|
|
98
|
-
* There should only be one instance of this open. If the server is already running, respond with the address.
|
|
99
|
-
*/
|
|
100
|
-
if (server)
|
|
101
|
-
return `http://localhost:${PORT}`;
|
|
102
|
-
PORT = yield (0, get_port_1.default)({ host: 'localhost', port: typeof preferredPort == 'number' ? [preferredPort, 7000, 7001, 7002] : [7000, 7001, 7002] });
|
|
103
|
-
logging_1.log.info(`popup port set to ${PORT}`);
|
|
104
|
-
server = http_1.default.createServer(app);
|
|
105
|
-
if (!(config === null || config === void 0 ? void 0 : config.qrPopUpOnly)) {
|
|
106
|
-
io = new socket_io_1.Server(server);
|
|
107
|
-
io.on('connection', function (client) {
|
|
108
|
-
gClient = client;
|
|
109
|
-
gClient.send({ data: 'CONNECTED', sessionId: (config === null || config === void 0 ? void 0 : config.sessionId) || 'session', namespace: 'SOCKET' });
|
|
110
|
-
gClient.send({ data: (config === null || config === void 0 ? void 0 : config.sessionId) ? currentQrCodes[config === null || config === void 0 ? void 0 : config.sessionId] || currentQrCodes.latest : currentQrCodes.latest, sessionId: (config === null || config === void 0 ? void 0 : config.sessionId) || 'session', namespace: 'qr' });
|
|
111
|
-
});
|
|
112
|
-
}
|
|
113
|
-
server.on("connection", (conn) => {
|
|
114
|
-
const key = conn.remoteAddress + ':' + conn.remotePort;
|
|
115
|
-
serverSockets[key] = conn;
|
|
116
|
-
conn.on("close", () => {
|
|
117
|
-
delete serverSockets[key];
|
|
118
|
-
});
|
|
119
|
-
});
|
|
120
|
-
server.listen(PORT);
|
|
121
|
-
(0, tools_1.processSendData)({ port: PORT });
|
|
122
|
-
const os = (0, os_name_1.default)();
|
|
123
|
-
const appName = os.includes('macOS') ? 'google chrome' : os.includes('Windows') ? 'chrome' : 'google-chrome';
|
|
124
|
-
const hasChrome = yield (0, command_exists_1.default)(appName).then(() => true).catch(() => false);
|
|
125
|
-
if (hasChrome) {
|
|
126
|
-
if (!(config === null || config === void 0 ? void 0 : config.inDocker))
|
|
127
|
-
yield (0, open_1.default)(`http://localhost:${PORT}${(config === null || config === void 0 ? void 0 : config.qrPopUpOnly) ? `/qr` : ``}`, { app: {
|
|
128
|
-
name: (config === null || config === void 0 ? void 0 : config.executablePath) || appName,
|
|
129
|
-
arguments: ['--incognito']
|
|
130
|
-
}, allowNonzeroExitCode: true }).catch(() => { return; });
|
|
131
|
-
else
|
|
132
|
-
return `http://localhost:${PORT}`;
|
|
133
|
-
}
|
|
134
|
-
else
|
|
135
|
-
return `http://localhost:${PORT}${(config === null || config === void 0 ? void 0 : config.qrPopUpOnly) ? '/qr' : ''}`;
|
|
136
|
-
return `http://localhost:${PORT}${(config === null || config === void 0 ? void 0 : config.qrPopUpOnly) ? '/qr' : ''}`;
|
|
137
|
-
});
|
|
138
|
-
}
|
|
139
|
-
exports.popup = popup;
|
|
140
|
-
const closeHttp = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
141
|
-
if (!server)
|
|
142
|
-
return;
|
|
143
|
-
for (const key in serverSockets) {
|
|
144
|
-
serverSockets[key].destroy();
|
|
145
|
-
}
|
|
146
|
-
return yield new Promise(resolve => server.close(resolve));
|
|
147
|
-
});
|
|
148
|
-
exports.closeHttp = closeHttp;
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
export declare class ScriptLoader {
|
|
2
|
-
scripts: string[];
|
|
3
|
-
contentRegistry: {
|
|
4
|
-
[key: string]: string;
|
|
5
|
-
};
|
|
6
|
-
constructor();
|
|
7
|
-
loadScripts(): Promise<{
|
|
8
|
-
[key: string]: string;
|
|
9
|
-
}>;
|
|
10
|
-
getScript(scriptName: string): Promise<string>;
|
|
11
|
-
flush(): void;
|
|
12
|
-
getScripts(): {
|
|
13
|
-
[key: string]: string;
|
|
14
|
-
};
|
|
15
|
-
}
|
|
16
|
-
declare const scriptLoader: ScriptLoader;
|
|
17
|
-
export { scriptLoader };
|