owpenwork 0.1.9 → 0.1.11

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/dist/cli.js CHANGED
@@ -9,7 +9,7 @@ import { BridgeStore } from "./db.js";
9
9
  import { createLogger } from "./logger.js";
10
10
  import { createClient } from "./opencode.js";
11
11
  import { loginWhatsApp, unpairWhatsApp } from "./whatsapp.js";
12
- const VERSION = "0.1.9";
12
+ const VERSION = "0.1.11";
13
13
  const STEP_OPTIONS = [
14
14
  {
15
15
  value: "config",
package/dist/whatsapp.js CHANGED
@@ -120,55 +120,74 @@ export async function loginWhatsApp(config, logger) {
120
120
  const log = logger.child({ channel: "whatsapp" });
121
121
  const { state, saveCreds } = await useMultiFileAuthState(authDir);
122
122
  const { version } = await fetchLatestBaileysVersion();
123
- await new Promise((resolve) => {
124
- let finished = false;
125
- const sock = makeWASocket({
126
- auth: {
127
- creds: state.creds,
128
- keys: makeCacheableSignalKeyStore(state.keys, log),
129
- },
130
- version,
131
- logger: log,
132
- printQRInTerminal: false,
133
- syncFullHistory: false,
134
- markOnlineOnConnect: false,
135
- browser: ["owpenbot", "cli", "0.1.0"],
136
- });
137
- const finish = (reason) => {
138
- if (finished)
139
- return;
140
- finished = true;
141
- log.info({ reason }, "whatsapp login finished");
142
- sock.end(undefined);
143
- resolve();
144
- };
145
- sock.ev.on("creds.update", async () => {
146
- await saveCreds();
147
- if (state.creds?.registered) {
148
- finish("creds.registered");
149
- }
150
- });
151
- sock.ev.on("connection.update", (update) => {
152
- if (update.qr) {
153
- qrcode.generate(update.qr, { small: true });
154
- log.info("scan the QR code to connect WhatsApp");
155
- }
156
- if (update.connection === "open") {
157
- finish("connection.open");
158
- }
159
- if (update.connection === "close") {
160
- const lastDisconnect = update.lastDisconnect;
161
- const statusCode = lastDisconnect?.error?.output?.statusCode;
162
- if (statusCode === 515 && state.creds?.registered) {
163
- finish("connection.close.registered");
123
+ const credsPath = path.join(authDir, "creds.json");
124
+ const maxAttempts = 2;
125
+ for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {
126
+ const result = await new Promise((resolve) => {
127
+ let finished = false;
128
+ const sock = makeWASocket({
129
+ auth: {
130
+ creds: state.creds,
131
+ keys: makeCacheableSignalKeyStore(state.keys, log),
132
+ },
133
+ version,
134
+ logger: log,
135
+ printQRInTerminal: false,
136
+ syncFullHistory: false,
137
+ markOnlineOnConnect: false,
138
+ browser: ["owpenbot", "cli", "0.1.0"],
139
+ });
140
+ const finish = (reason, status) => {
141
+ if (finished)
164
142
  return;
165
- }
143
+ finished = true;
144
+ log.info({ reason }, "whatsapp login finished");
145
+ sock.end(undefined);
146
+ resolve(status);
147
+ };
148
+ sock.ev.on("creds.update", async () => {
149
+ await saveCreds();
166
150
  if (state.creds?.registered) {
167
- finish("connection.close.registered");
151
+ finish("creds.registered", "linked");
168
152
  }
169
- }
153
+ });
154
+ sock.ev.on("connection.update", (update) => {
155
+ if (update.qr) {
156
+ qrcode.generate(update.qr, { small: true });
157
+ log.info("scan the QR code to connect WhatsApp");
158
+ }
159
+ if (update.connection === "open") {
160
+ finish("connection.open", "linked");
161
+ }
162
+ if (update.connection === "close") {
163
+ const lastDisconnect = update.lastDisconnect;
164
+ const statusCode = lastDisconnect?.error?.output?.statusCode;
165
+ if (statusCode === 515) {
166
+ if (state.creds?.registered || fs.existsSync(credsPath)) {
167
+ log.info("whatsapp login requires reconnect; completing login");
168
+ finish("connection.restart.required", "linked");
169
+ }
170
+ else {
171
+ log.warn("whatsapp restart requested before creds registered");
172
+ finish("connection.restart.required", "restart");
173
+ }
174
+ return;
175
+ }
176
+ if (state.creds?.registered) {
177
+ finish("connection.close.registered", "linked");
178
+ }
179
+ }
180
+ });
170
181
  });
171
- });
182
+ if (result === "linked") {
183
+ return;
184
+ }
185
+ if (attempt < maxAttempts) {
186
+ log.warn("retrying whatsapp login after restart");
187
+ await new Promise((resolve) => setTimeout(resolve, 1500));
188
+ }
189
+ }
190
+ throw new Error("WhatsApp login failed after restart");
172
191
  }
173
192
  export function unpairWhatsApp(config, logger) {
174
193
  const authDir = path.resolve(config.whatsappAuthDir);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "owpenwork",
3
- "version": "0.1.9",
3
+ "version": "0.1.11",
4
4
  "description": "WhatsApp bridge for a running OpenCode server",
5
5
  "private": false,
6
6
  "type": "module",