@open-wa/wa-automate 4.71.15 → 4.72.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.
@@ -191,6 +191,7 @@ export interface ProxyServerCredentials {
191
191
  }
192
192
  export interface ConfigObject {
193
193
  /**
194
+ * @deprecated
194
195
  * The authentication object (as a JSON object or a base64 encoded string) that is required to migrate a session from one instance to another or to just restart an existing instance.
195
196
  * This sessionData is provided in a generated JSON file (it's a json file but contains the JSON data as a base64 encoded string) upon QR scan or an event.
196
197
  *
@@ -223,6 +224,15 @@ export interface ConfigObject {
223
224
  * Setting the sessionData in the environmental variable will override the sessionData object in the config.
224
225
  */
225
226
  sessionData?: SessionData | Base64;
227
+ /**
228
+ * There is a new way to login to your host account by entering a link code after a confirmation step from the host account device. In order to use this feature you MUST set the host account number as a string or number beforehand as a property of the config object.
229
+ *
230
+ * e.g
231
+ * ```
232
+ * linkCode: '1234567890'
233
+ * ```
234
+ */
235
+ linkCode?: string;
226
236
  /**
227
237
  * ALPHA EXPERIMENTAL FEATURE! DO NOT USE IN PRODUCTION, REQUIRES TESTING.
228
238
  *
@@ -187,8 +187,8 @@ const postmanRequestGeneratorGenerator = setup => method => {
187
187
  }
188
188
  },
189
189
  url,
190
- "documentationUrl": `https://docs.openwa.dev/classes/api_Client.Client.html#${method.name}`,
191
- "description": `${method.text}\n[External Documentation](https://docs.openwa.dev/classes/api_Client.Client.html#${method.name})`
190
+ "documentationUrl": `https://docs.openwa.dev/docs/reference/api/Client/classes/Client#${(method.name || "").toLowerCase()}`,
191
+ "description": `${method.text}\n[External Documentation](https://docs.openwa.dev/docs/reference/api/Client/classes/Client#${(method.name || "").toLowerCase()})`
192
192
  };
193
193
  if (!(setup === null || setup === void 0 ? void 0 : setup.key))
194
194
  delete request.auth;
@@ -56,7 +56,7 @@ const generateCollections = (config, spinner) => __awaiter(void 0, void 0, void
56
56
  "description": "All methods from the Client",
57
57
  "externalDocs": {
58
58
  "description": "Find out more",
59
- "url": "https://docs.openwa.dev/classes/api_Client.Client.html"
59
+ "url": "https://docs.openwa.dev/docs/reference/api/Client/classes/Client"
60
60
  }
61
61
  },
62
62
  {
package/dist/cli/setup.js CHANGED
@@ -116,7 +116,7 @@ exports.helptext = (0, command_line_usage_1.default)([{
116
116
  ]
117
117
  },
118
118
  {
119
- content: `Please check here for more information on some of the above mentioned parameters: {underline https://docs.openwa.dev/interfaces/api_model_config.configobject}`
119
+ content: `Please check here for more information on some of the above mentioned parameters: {underline https://docs.openwa.dev/docs/reference/api/model/config/interfaces/ConfigObject}`
120
120
  },
121
121
  {
122
122
  content: 'Project home: {underline https://github.com/open-wa/wa-automate-nodejs}'
@@ -25,6 +25,7 @@ export declare class QRManager {
25
25
  setConfig(config: any): void;
26
26
  qrEvF(config?: ConfigObject): any;
27
27
  grabAndEmit(qrData: any, waPage: Page, config: ConfigObject, spinner: Spin): Promise<void>;
28
+ linkCode(waPage: Page, config?: ConfigObject, spinner?: Spin): Promise<boolean | void | string>;
28
29
  smartQr(waPage: Page, config?: ConfigObject, spinner?: Spin): Promise<boolean | void | string>;
29
30
  emitFirst(waPage: Page, config?: ConfigObject, spinner?: Spin): Promise<void>;
30
31
  /**
@@ -145,6 +145,7 @@ class QRManager {
145
145
  }
146
146
  grabAndEmit(qrData, waPage, config, spinner) {
147
147
  return __awaiter(this, void 0, void 0, function* () {
148
+ const isLinkCode = qrData.length === 9;
148
149
  this.qrNum++;
149
150
  if (config.qrMax && this.qrNum > config.qrMax) {
150
151
  spinner.info('QR Code limit reached, exiting...');
@@ -156,9 +157,14 @@ class QRManager {
156
157
  if (qrData) {
157
158
  qrEv.emit(qrData, `qrData`);
158
159
  if (!config.qrLogSkip) {
159
- qrcode.generate(qrData, { small: true }, terminalQrCode => {
160
- console.log((0, boxen_1.default)(terminalQrCode, { title: config.sessionId, padding: 1, titleAlignment: 'center' }));
161
- });
160
+ if (isLinkCode) {
161
+ console.log((0, boxen_1.default)(qrData, { title: `ENTER THIS CODE ON THE HOST ACCOUNT DEVICE: ${config.sessionId}`, padding: 1, titleAlignment: 'center' }));
162
+ }
163
+ else {
164
+ qrcode.generate(qrData, { small: true }, terminalQrCode => {
165
+ console.log((0, boxen_1.default)(terminalQrCode, { title: config.sessionId, padding: 1, titleAlignment: 'center' }));
166
+ });
167
+ }
162
168
  }
163
169
  else {
164
170
  console.log(`New QR Code generated. Not printing in console because qrLogSkip is set to true`);
@@ -172,7 +178,7 @@ class QRManager {
172
178
  this._internalQrPngLoaded = true;
173
179
  }
174
180
  try {
175
- const qrPng = yield waPage.evaluate(`window.getQrPng()`);
181
+ const qrPng = isLinkCode ? qrData : yield waPage.evaluate(`window.getQrPng()`);
176
182
  if (qrPng) {
177
183
  qrEv.emit(qrPng);
178
184
  (0, tools_1.processSend)('ready');
@@ -208,6 +214,30 @@ class QRManager {
208
214
  }
209
215
  });
210
216
  }
217
+ linkCode(waPage, config, spinner) {
218
+ return __awaiter(this, void 0, void 0, function* () {
219
+ const evalResult = yield waPage.evaluate("window.Store && window.Store.State");
220
+ if (evalResult === false) {
221
+ console.log('Seems as though you have been TOS_BLOCKed, unable to refresh QR Code. Please see https://github.com/open-wa/wa-automate-nodejs#best-practice for information on how to prevent this from happeing. You will most likely not get a QR Code');
222
+ logging_1.log.warn('Seems as though you have been TOS_BLOCKed, unable to refresh QR Code. Please see https://github.com/open-wa/wa-automate-nodejs#best-practice for information on how to prevent this from happeing. You will most likely not get a QR Code');
223
+ if (config.throwErrorOnTosBlock)
224
+ throw new Error('TOSBLOCK');
225
+ }
226
+ const isAuthed = yield (0, exports.isAuthenticated)(waPage);
227
+ if (isAuthed)
228
+ return true;
229
+ const _hasDefaultStateYet = yield waPage.evaluate("!!(window.Store && window.Store.State && window.Store.State.Socket)");
230
+ if (!_hasDefaultStateYet) {
231
+ //expecting issue, take a screenshot then wait a few seconds before continuing
232
+ yield (0, tools_1.timeout)(2000);
233
+ }
234
+ spinner.info('Link Code requested, please use the link code to login from your host account device');
235
+ const linkCode = yield waPage.evaluate((number) => window['linkCode'](number), config === null || config === void 0 ? void 0 : config.linkCode);
236
+ spinner === null || spinner === void 0 ? void 0 : spinner.succeed(`Link Code please use this to login from your host account device: ${linkCode}`);
237
+ yield this.grabAndEmit(linkCode, waPage, config, spinner);
238
+ return yield isInsideChat(waPage).toPromise();
239
+ });
240
+ }
211
241
  smartQr(waPage, config, spinner) {
212
242
  return __awaiter(this, void 0, void 0, function* () {
213
243
  const evalResult = yield waPage.evaluate("window.Store && window.Store.State");
@@ -272,6 +302,9 @@ class QRManager {
272
302
  */
273
303
  waitFirstQr(waPage, config, spinner) {
274
304
  return __awaiter(this, void 0, void 0, function* () {
305
+ /**
306
+ * Check if session is authed already
307
+ */
275
308
  const fqr = yield waPage.waitForFunction(`!!(${this.qrCheck})`, {
276
309
  polling: 500,
277
310
  timeout: 10000
@@ -298,7 +298,11 @@ function create(config = {}) {
298
298
  else {
299
299
  spinner.info('Authenticate to continue');
300
300
  const race = [];
301
- race.push(qrManager.smartQr(waPage, config, spinner));
301
+ if (config === null || config === void 0 ? void 0 : config.linkCode) {
302
+ race.push(qrManager.linkCode(waPage, config, spinner));
303
+ }
304
+ else
305
+ race.push(qrManager.smartQr(waPage, config, spinner));
302
306
  if ((config === null || config === void 0 ? void 0 : config.qrTimeout) !== 0) {
303
307
  let to = ((config === null || config === void 0 ? void 0 : config.qrTimeout) || 60) * 1000;
304
308
  if (config === null || config === void 0 ? void 0 : config.multiDevice)