@sasadevofc/baileys 1.0.0-beta.1
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/.github/workflows/publish.yml +21 -0
- package/README.md +1 -0
- package/dist/auth/pairing.d.ts +7 -0
- package/dist/auth/pairing.d.ts.map +1 -0
- package/dist/auth/pairing.js +13 -0
- package/dist/auth/pairing.js.map +1 -0
- package/dist/auth/state.d.ts +14 -0
- package/dist/auth/state.d.ts.map +1 -0
- package/dist/auth/state.js +61 -0
- package/dist/auth/state.js.map +1 -0
- package/dist/auth/store.d.ts +16 -0
- package/dist/auth/store.d.ts.map +1 -0
- package/dist/auth/store.js +22 -0
- package/dist/auth/store.js.map +1 -0
- package/dist/client.d.ts +41 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +92 -0
- package/dist/client.js.map +1 -0
- package/dist/config.d.ts +3 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +12 -0
- package/dist/config.js.map +1 -0
- package/dist/connection/handshake.d.ts +8 -0
- package/dist/connection/handshake.d.ts.map +1 -0
- package/dist/connection/handshake.js +12 -0
- package/dist/connection/handshake.js.map +1 -0
- package/dist/connection/socket.d.ts +19 -0
- package/dist/connection/socket.d.ts.map +1 -0
- package/dist/connection/socket.js +99 -0
- package/dist/connection/socket.js.map +1 -0
- package/dist/connection/transport.d.ts +8 -0
- package/dist/connection/transport.d.ts.map +1 -0
- package/dist/connection/transport.js +21 -0
- package/dist/connection/transport.js.map +1 -0
- package/dist/message/decoder.d.ts +7 -0
- package/dist/message/decoder.d.ts.map +1 -0
- package/dist/message/decoder.js +19 -0
- package/dist/message/decoder.js.map +1 -0
- package/dist/message/encoder.d.ts +7 -0
- package/dist/message/encoder.d.ts.map +1 -0
- package/dist/message/encoder.js +14 -0
- package/dist/message/encoder.js.map +1 -0
- package/dist/message/handler.d.ts +18 -0
- package/dist/message/handler.d.ts.map +1 -0
- package/dist/message/handler.js +87 -0
- package/dist/message/handler.js.map +1 -0
- package/dist/plugins/command.d.ts +10 -0
- package/dist/plugins/command.d.ts.map +1 -0
- package/dist/plugins/command.js +36 -0
- package/dist/plugins/command.js.map +1 -0
- package/dist/plugins/plugin-base.d.ts +11 -0
- package/dist/plugins/plugin-base.d.ts.map +1 -0
- package/dist/plugins/plugin-base.js +35 -0
- package/dist/plugins/plugin-base.js.map +1 -0
- package/dist/types/auth.d.ts +29 -0
- package/dist/types/auth.d.ts.map +1 -0
- package/dist/types/auth.js +3 -0
- package/dist/types/auth.js.map +1 -0
- package/dist/types/events.d.ts +54 -0
- package/dist/types/events.d.ts.map +1 -0
- package/dist/types/events.js +3 -0
- package/dist/types/events.js.map +1 -0
- package/dist/types/messages.d.ts +30 -0
- package/dist/types/messages.d.ts.map +1 -0
- package/dist/types/messages.js +3 -0
- package/dist/types/messages.js.map +1 -0
- package/dist/types/plugin.d.ts +16 -0
- package/dist/types/plugin.d.ts.map +1 -0
- package/dist/types/plugin.js +3 -0
- package/dist/types/plugin.js.map +1 -0
- package/dist/types/socket.d.ts +16 -0
- package/dist/types/socket.d.ts.map +1 -0
- package/dist/types/socket.js +3 -0
- package/dist/types/socket.js.map +1 -0
- package/dist/utils/logger.d.ts +11 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +14 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/retry.d.ts +2 -0
- package/dist/utils/retry.d.ts.map +1 -0
- package/dist/utils/retry.js +18 -0
- package/dist/utils/retry.js.map +1 -0
- package/dist/utils/throttle.d.ts +2 -0
- package/dist/utils/throttle.d.ts.map +1 -0
- package/dist/utils/throttle.js +14 -0
- package/dist/utils/throttle.js.map +1 -0
- package/examples/basic-bot.ts +29 -0
- package/examples/command-bot.ts +19 -0
- package/package.json +58 -0
- package/src/auth/pairing.ts +11 -0
- package/src/auth/state.ts +66 -0
- package/src/auth/store.ts +26 -0
- package/src/client.ts +119 -0
- package/src/config.ts +10 -0
- package/src/connection/handshake.ts +10 -0
- package/src/connection/socket.ts +109 -0
- package/src/connection/transport.ts +20 -0
- package/src/message/decoder.ts +13 -0
- package/src/message/encoder.ts +9 -0
- package/src/message/handler.ts +91 -0
- package/src/plugins/command.ts +40 -0
- package/src/plugins/plugin-base.ts +36 -0
- package/src/types/auth.ts +30 -0
- package/src/types/events.ts +60 -0
- package/src/types/messages.ts +34 -0
- package/src/types/plugin.ts +20 -0
- package/src/types/socket.ts +16 -0
- package/src/utils/logger.ts +10 -0
- package/src/utils/retry.ts +12 -0
- package/src/utils/throttle.ts +9 -0
- package/tsconfig.json +19 -0
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
name: Publish to npm
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches: [main]
|
|
6
|
+
|
|
7
|
+
jobs:
|
|
8
|
+
publish:
|
|
9
|
+
runs-on: ubuntu-latest
|
|
10
|
+
steps:
|
|
11
|
+
- uses: actions/checkout@v4
|
|
12
|
+
- uses: actions/setup-node@v4
|
|
13
|
+
with:
|
|
14
|
+
node-version: 18
|
|
15
|
+
registry-url: 'https://registry.npmjs.org'
|
|
16
|
+
scope: '@sasadevofc'
|
|
17
|
+
- run: npm install
|
|
18
|
+
- run: npm run build
|
|
19
|
+
- run: npm publish --access public
|
|
20
|
+
env:
|
|
21
|
+
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
package/README.md
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# sasa-dev-baileys
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pairing.d.ts","sourceRoot":"","sources":["../../src/auth/pairing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAgB;gBAClB,MAAM,EAAE,aAAa;IAE3B,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAKxD"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PairingHelper = void 0;
|
|
4
|
+
class PairingHelper {
|
|
5
|
+
constructor(client) { this.client = client; }
|
|
6
|
+
async requestCode(phoneNumber) {
|
|
7
|
+
// Placeholder: would call WhatsApp pairing API
|
|
8
|
+
const code = '12345';
|
|
9
|
+
return code;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
exports.PairingHelper = PairingHelper;
|
|
13
|
+
//# sourceMappingURL=pairing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pairing.js","sourceRoot":"","sources":["../../src/auth/pairing.ts"],"names":[],"mappings":";;;AACA,MAAa,aAAa;IAExB,YAAY,MAAqB,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC;IAE5D,KAAK,CAAC,WAAW,CAAC,WAAmB;QACnC,+CAA+C;QAC/C,MAAM,IAAI,GAAG,OAAO,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AATD,sCASC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { BaileysClient } from '../client';
|
|
2
|
+
import { AuthState, Credentials } from '../types/auth';
|
|
3
|
+
export declare class AuthManager {
|
|
4
|
+
private client;
|
|
5
|
+
private store;
|
|
6
|
+
private state;
|
|
7
|
+
constructor(client: BaileysClient);
|
|
8
|
+
loadSession(sessionId?: string): Promise<AuthState | null>;
|
|
9
|
+
createSession(): Promise<AuthState>;
|
|
10
|
+
saveSession(sessionId?: string): Promise<void>;
|
|
11
|
+
getCredentials(): Credentials | undefined;
|
|
12
|
+
startPairing(phoneNumber: string): Promise<string>;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=state.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/auth/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAKvD,qBAAa,WAAW;IACtB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,KAAK,CAAY;IACzB,OAAO,CAAC,KAAK,CAA0B;gBAE3B,MAAM,EAAE,aAAa;IAK3B,WAAW,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAU1D,aAAa,IAAI,OAAO,CAAC,SAAS,CAAC;IA0BnC,WAAW,CAAC,SAAS,CAAC,EAAE,MAAM;IAKpC,cAAc,IAAI,WAAW,GAAG,SAAS;IAKnC,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAGzD"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AuthManager = void 0;
|
|
4
|
+
const store_1 = require("./store");
|
|
5
|
+
const uuid_1 = require("uuid");
|
|
6
|
+
const pairing_1 = require("./pairing");
|
|
7
|
+
class AuthManager {
|
|
8
|
+
constructor(client) {
|
|
9
|
+
this.state = null;
|
|
10
|
+
this.client = client;
|
|
11
|
+
this.store = new store_1.AuthStore(); // can be replaced with custom store
|
|
12
|
+
}
|
|
13
|
+
async loadSession(sessionId) {
|
|
14
|
+
const id = sessionId || 'default';
|
|
15
|
+
const data = await this.store.load(id);
|
|
16
|
+
if (data) {
|
|
17
|
+
this.state = data;
|
|
18
|
+
return data;
|
|
19
|
+
}
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
async createSession() {
|
|
23
|
+
// Generate new keys (simplified)
|
|
24
|
+
const state = {
|
|
25
|
+
creds: {
|
|
26
|
+
clientId: (0, uuid_1.v4)(),
|
|
27
|
+
serverToken: '',
|
|
28
|
+
clientToken: '',
|
|
29
|
+
encKey: Buffer.alloc(32),
|
|
30
|
+
macKey: Buffer.alloc(32),
|
|
31
|
+
},
|
|
32
|
+
keys: {
|
|
33
|
+
registrationId: Math.floor(Math.random() * 16384),
|
|
34
|
+
identityKey: new Uint8Array(32),
|
|
35
|
+
signedPreKey: {
|
|
36
|
+
keyId: 1,
|
|
37
|
+
keyPair: { public: new Uint8Array(32), private: new Uint8Array(32) },
|
|
38
|
+
signature: new Uint8Array(64),
|
|
39
|
+
},
|
|
40
|
+
preKeys: [],
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
this.state = state;
|
|
44
|
+
await this.store.save('default', state);
|
|
45
|
+
return state;
|
|
46
|
+
}
|
|
47
|
+
async saveSession(sessionId) {
|
|
48
|
+
if (!this.state)
|
|
49
|
+
return;
|
|
50
|
+
await this.store.save(sessionId || 'default', this.state);
|
|
51
|
+
}
|
|
52
|
+
getCredentials() {
|
|
53
|
+
return this.state?.creds;
|
|
54
|
+
}
|
|
55
|
+
// Pairing code helper
|
|
56
|
+
async startPairing(phoneNumber) {
|
|
57
|
+
return new pairing_1.PairingHelper(this.client).requestCode(phoneNumber);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
exports.AuthManager = AuthManager;
|
|
61
|
+
//# sourceMappingURL=state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/auth/state.ts"],"names":[],"mappings":";;;AAEA,mCAAoC;AACpC,+BAAoC;AACpC,uCAA0C;AAE1C,MAAa,WAAW;IAKtB,YAAY,MAAqB;QAFzB,UAAK,GAAqB,IAAI,CAAC;QAGrC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,IAAI,iBAAS,EAAE,CAAC,CAAC,oCAAoC;IACpE,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,SAAkB;QAClC,MAAM,EAAE,GAAG,SAAS,IAAI,SAAS,CAAC;QAClC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACvC,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAClB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,iCAAiC;QACjC,MAAM,KAAK,GAAc;YACvB,KAAK,EAAE;gBACL,QAAQ,EAAE,IAAA,SAAM,GAAE;gBAClB,WAAW,EAAE,EAAE;gBACf,WAAW,EAAE,EAAE;gBACf,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;gBACxB,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;aACzB;YACD,IAAI,EAAE;gBACJ,cAAc,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC;gBACjD,WAAW,EAAE,IAAI,UAAU,CAAC,EAAE,CAAC;gBAC/B,YAAY,EAAE;oBACZ,KAAK,EAAE,CAAC;oBACR,OAAO,EAAE,EAAE,MAAM,EAAE,IAAI,UAAU,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,UAAU,CAAC,EAAE,CAAC,EAAE;oBACpE,SAAS,EAAE,IAAI,UAAU,CAAC,EAAE,CAAC;iBAC9B;gBACD,OAAO,EAAE,EAAE;aACZ;SACF,CAAC;QACF,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QACxC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,SAAkB;QAClC,IAAI,CAAC,IAAI,CAAC,KAAK;YAAE,OAAO;QACxB,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,IAAI,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5D,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC;IAC3B,CAAC;IAED,sBAAsB;IACtB,KAAK,CAAC,YAAY,CAAC,WAAmB;QACpC,OAAO,IAAI,uBAAa,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IACjE,CAAC;CACF;AA3DD,kCA2DC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { AuthState } from '../types/auth';
|
|
2
|
+
export interface IAuthStore {
|
|
3
|
+
load(sessionId: string): Promise<AuthState | null>;
|
|
4
|
+
save(sessionId: string, state: AuthState): Promise<void>;
|
|
5
|
+
delete(sessionId: string): Promise<void>;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Default in‑memory store. For production use a persistent store (JSON file, DB, etc.)
|
|
9
|
+
*/
|
|
10
|
+
export declare class AuthStore implements IAuthStore {
|
|
11
|
+
private cache;
|
|
12
|
+
load(sessionId: string): Promise<AuthState | null>;
|
|
13
|
+
save(sessionId: string, state: AuthState): Promise<void>;
|
|
14
|
+
delete(sessionId: string): Promise<void>;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/auth/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC;IACnD,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzD,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1C;AAED;;GAEG;AACH,qBAAa,SAAU,YAAW,UAAU;IAC1C,OAAO,CAAC,KAAK,CAAgC;IAEvC,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IAIlD,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxD,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAG/C"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AuthStore = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Default in‑memory store. For production use a persistent store (JSON file, DB, etc.)
|
|
6
|
+
*/
|
|
7
|
+
class AuthStore {
|
|
8
|
+
constructor() {
|
|
9
|
+
this.cache = new Map();
|
|
10
|
+
}
|
|
11
|
+
async load(sessionId) {
|
|
12
|
+
return this.cache.get(sessionId) || null;
|
|
13
|
+
}
|
|
14
|
+
async save(sessionId, state) {
|
|
15
|
+
this.cache.set(sessionId, state);
|
|
16
|
+
}
|
|
17
|
+
async delete(sessionId) {
|
|
18
|
+
this.cache.delete(sessionId);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
exports.AuthStore = AuthStore;
|
|
22
|
+
//# sourceMappingURL=store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/auth/store.ts"],"names":[],"mappings":";;;AAQA;;GAEG;AACH,MAAa,SAAS;IAAtB;QACU,UAAK,GAAG,IAAI,GAAG,EAAqB,CAAC;IAa/C,CAAC;IAXC,KAAK,CAAC,IAAI,CAAC,SAAiB;QAC1B,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,SAAiB,EAAE,KAAgB;QAC5C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,SAAiB;QAC5B,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC/B,CAAC;CACF;AAdD,8BAcC"}
|
package/dist/client.d.ts
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { EventEmitter } from 'events';
|
|
2
|
+
import { BaileysEventMap } from './types/events';
|
|
3
|
+
import { SocketConfig } from './types/socket';
|
|
4
|
+
import { AuthManager } from './auth/state';
|
|
5
|
+
import { ConnectionManager } from './connection/socket';
|
|
6
|
+
import { MessageHandler } from './message/handler';
|
|
7
|
+
import { PluginManager } from './plugins/plugin-base';
|
|
8
|
+
import { Logger } from './utils/logger';
|
|
9
|
+
export declare class BaileysClient extends EventEmitter {
|
|
10
|
+
auth: AuthManager;
|
|
11
|
+
connection: ConnectionManager;
|
|
12
|
+
messages: MessageHandler;
|
|
13
|
+
plugins: PluginManager;
|
|
14
|
+
logger: Logger;
|
|
15
|
+
private config;
|
|
16
|
+
constructor(config?: Partial<SocketConfig>);
|
|
17
|
+
/** Start the connection process */
|
|
18
|
+
connect(): Promise<void>;
|
|
19
|
+
/** Disconnect gracefully */
|
|
20
|
+
disconnect(): Promise<void>;
|
|
21
|
+
/** Request QR code for login (if loginMethod = 'qr') */
|
|
22
|
+
requestQR(): Promise<string>;
|
|
23
|
+
/** Request pairing code (if loginMethod = 'pairing_code') */
|
|
24
|
+
requestPairingCode(phoneNumber: string): Promise<string>;
|
|
25
|
+
/** Send a text message */
|
|
26
|
+
sendMessage(jid: string, content: string, options?: {
|
|
27
|
+
mentions?: string[];
|
|
28
|
+
quotedId?: string;
|
|
29
|
+
}): Promise<import("./types/messages").TextMessage>;
|
|
30
|
+
/** Send media (buffer or URL) */
|
|
31
|
+
sendMedia(jid: string, type: 'image' | 'video' | 'audio' | 'document', media: Buffer | string, options?: any): Promise<import("./types/messages").MediaMessage>;
|
|
32
|
+
/** ... other convenient methods delegate to feature modules */
|
|
33
|
+
deleteMessage(jid: string, messageId: string): Promise<void>;
|
|
34
|
+
editMessage(jid: string, messageId: string, newContent: string): Promise<void>;
|
|
35
|
+
reactToMessage(jid: string, messageId: string, reaction: string): Promise<void>;
|
|
36
|
+
downloadMedia(message: any): Promise<Buffer>;
|
|
37
|
+
on<K extends keyof BaileysEventMap>(event: K, listener: BaileysEventMap[K]): this;
|
|
38
|
+
emit<K extends keyof BaileysEventMap>(event: K, ...args: Parameters<BaileysEventMap[K]>): boolean;
|
|
39
|
+
once<K extends keyof BaileysEventMap>(event: K, listener: BaileysEventMap[K]): this;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,eAAe,EAAoB,MAAM,gBAAgB,CAAC;AAEnE,OAAO,EAAE,YAAY,EAAiB,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAKxC,qBAAa,aAAc,SAAQ,YAAY;IACtC,IAAI,EAAE,WAAW,CAAC;IAClB,UAAU,EAAE,iBAAiB,CAAC;IAC9B,QAAQ,EAAE,cAAc,CAAC;IACzB,OAAO,EAAE,aAAa,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,MAAM,CAAe;gBAEjB,MAAM,GAAE,OAAO,CAAC,YAAY,CAAM;IA6B9C,mCAAmC;IAC7B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAS9B,4BAA4B;IACtB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAIjC,wDAAwD;IAClD,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;IAIlC,6DAA6D;IACvD,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAI9D,0BAA0B;IACpB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE;IAKpG,iCAAiC;IAC3B,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAC,OAAO,GAAC,OAAO,GAAC,UAAU,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG;IAI5G,+DAA+D;IACzD,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAI5C,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;IAI9D,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IAI/D,aAAa,CAAC,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC;IAKlD,EAAE,CAAC,CAAC,SAAS,MAAM,eAAe,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,IAAI;IAKjF,IAAI,CAAC,CAAC,SAAS,MAAM,eAAe,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO;IAKjG,IAAI,CAAC,CAAC,SAAS,MAAM,eAAe,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC,CAAC,GAAG,IAAI;CAIpF"}
|
package/dist/client.js
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BaileysClient = void 0;
|
|
4
|
+
const events_1 = require("events");
|
|
5
|
+
const state_1 = require("./auth/state");
|
|
6
|
+
const socket_1 = require("./connection/socket");
|
|
7
|
+
const handler_1 = require("./message/handler");
|
|
8
|
+
const plugin_base_1 = require("./plugins/plugin-base");
|
|
9
|
+
const logger_1 = require("./utils/logger");
|
|
10
|
+
const config_1 = require("./config");
|
|
11
|
+
class BaileysClient extends events_1.EventEmitter {
|
|
12
|
+
constructor(config = {}) {
|
|
13
|
+
super();
|
|
14
|
+
this.config = { ...config_1.defaultConfig, ...config };
|
|
15
|
+
this.logger = new logger_1.Logger({ level: 'info' });
|
|
16
|
+
this.auth = new state_1.AuthManager(this);
|
|
17
|
+
this.connection = new socket_1.ConnectionManager(this);
|
|
18
|
+
this.messages = new handler_1.MessageHandler(this);
|
|
19
|
+
this.plugins = new plugin_base_1.PluginManager(this);
|
|
20
|
+
// Wire up internal events
|
|
21
|
+
this.connection.on('update', (update) => {
|
|
22
|
+
this.emit('connection.update', update);
|
|
23
|
+
});
|
|
24
|
+
this.messages.on('message', (msg) => {
|
|
25
|
+
// Run middleware pipeline then emit
|
|
26
|
+
this.plugins.runMiddleware(msg, () => {
|
|
27
|
+
this.emit('message.new', msg);
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
this.messages.on('update', (update) => this.emit('message.update', update));
|
|
31
|
+
this.messages.on('receipt', (receipt) => this.emit('message.receipt', receipt));
|
|
32
|
+
this.messages.on('group.participants.update', (upd) => this.emit('group.participants.update', upd));
|
|
33
|
+
this.messages.on('presence', (upd) => this.emit('presence.update', upd));
|
|
34
|
+
this.messages.on('contacts', (contacts) => this.emit('contacts.update', contacts));
|
|
35
|
+
this.messages.on('reaction', (reaction) => this.emit('reaction', reaction));
|
|
36
|
+
}
|
|
37
|
+
/** Start the connection process */
|
|
38
|
+
async connect() {
|
|
39
|
+
try {
|
|
40
|
+
await this.connection.connect();
|
|
41
|
+
}
|
|
42
|
+
catch (err) {
|
|
43
|
+
this.logger.error('Failed to connect:', err);
|
|
44
|
+
this.emit('error', err);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
/** Disconnect gracefully */
|
|
48
|
+
async disconnect() {
|
|
49
|
+
await this.connection.disconnect();
|
|
50
|
+
}
|
|
51
|
+
/** Request QR code for login (if loginMethod = 'qr') */
|
|
52
|
+
async requestQR() {
|
|
53
|
+
return this.connection.requestQR();
|
|
54
|
+
}
|
|
55
|
+
/** Request pairing code (if loginMethod = 'pairing_code') */
|
|
56
|
+
async requestPairingCode(phoneNumber) {
|
|
57
|
+
return this.connection.requestPairingCode(phoneNumber);
|
|
58
|
+
}
|
|
59
|
+
/** Send a text message */
|
|
60
|
+
async sendMessage(jid, content, options) {
|
|
61
|
+
const msg = await this.messages.sendText(jid, content, options);
|
|
62
|
+
return msg;
|
|
63
|
+
}
|
|
64
|
+
/** Send media (buffer or URL) */
|
|
65
|
+
async sendMedia(jid, type, media, options) {
|
|
66
|
+
return this.messages.sendMedia(jid, type, media, options);
|
|
67
|
+
}
|
|
68
|
+
/** ... other convenient methods delegate to feature modules */
|
|
69
|
+
async deleteMessage(jid, messageId) {
|
|
70
|
+
return this.messages.deleteMessage(jid, messageId);
|
|
71
|
+
}
|
|
72
|
+
async editMessage(jid, messageId, newContent) {
|
|
73
|
+
return this.messages.editMessage(jid, messageId, newContent);
|
|
74
|
+
}
|
|
75
|
+
async reactToMessage(jid, messageId, reaction) {
|
|
76
|
+
return this.messages.react(jid, messageId, reaction);
|
|
77
|
+
}
|
|
78
|
+
async downloadMedia(message) {
|
|
79
|
+
return this.messages.downloadMedia(message);
|
|
80
|
+
}
|
|
81
|
+
on(event, listener) {
|
|
82
|
+
return super.on(event, listener);
|
|
83
|
+
}
|
|
84
|
+
emit(event, ...args) {
|
|
85
|
+
return super.emit(event, ...args);
|
|
86
|
+
}
|
|
87
|
+
once(event, listener) {
|
|
88
|
+
return super.once(event, listener);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
exports.BaileysClient = BaileysClient;
|
|
92
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,eAAO,MAAM,aAAa,EAAE,YAO3B,CAAC"}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.defaultConfig = void 0;
|
|
4
|
+
exports.defaultConfig = {
|
|
5
|
+
wsUrl: 'wss://web.whatsapp.com/ws/md',
|
|
6
|
+
autoReconnect: true,
|
|
7
|
+
maxReconnectAttempts: -1,
|
|
8
|
+
reconnectDelay: 3000,
|
|
9
|
+
keepAliveInterval: 10000,
|
|
10
|
+
loginMethod: 'qr',
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;AAEa,QAAA,aAAa,GAAiB;IACzC,KAAK,EAAE,8BAA8B;IACrC,aAAa,EAAE,IAAI;IACnB,oBAAoB,EAAE,CAAC,CAAC;IACxB,cAAc,EAAE,IAAI;IACpB,iBAAiB,EAAE,KAAK;IACxB,WAAW,EAAE,IAAI;CAClB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handshake.d.ts","sourceRoot":"","sources":["../../src/connection/handshake.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,SAAS,MAAM,IAAI,CAAC;AAC3B,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAgB;gBAClB,MAAM,EAAE,aAAa;IAC3B,OAAO,CAAC,EAAE,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;CAI5C"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Handshake = void 0;
|
|
4
|
+
class Handshake {
|
|
5
|
+
constructor(client) { this.client = client; }
|
|
6
|
+
async perform(ws) {
|
|
7
|
+
// Noise handshake placeholder; would exchange keys, etc.
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
exports.Handshake = Handshake;
|
|
12
|
+
//# sourceMappingURL=handshake.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handshake.js","sourceRoot":"","sources":["../../src/connection/handshake.ts"],"names":[],"mappings":";;;AAEA,MAAa,SAAS;IAEpB,YAAY,MAAqB,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC;IAC5D,KAAK,CAAC,OAAO,CAAC,EAAa;QACzB,yDAAyD;QACzD,OAAO;IACT,CAAC;CACF;AAPD,8BAOC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { EventEmitter } from 'events';
|
|
2
|
+
import { BaileysClient } from '../client';
|
|
3
|
+
export declare class ConnectionManager extends EventEmitter {
|
|
4
|
+
private client;
|
|
5
|
+
private ws;
|
|
6
|
+
private transport;
|
|
7
|
+
private handshake;
|
|
8
|
+
private reconnectAttempts;
|
|
9
|
+
private keepAliveTimer?;
|
|
10
|
+
constructor(client: BaileysClient);
|
|
11
|
+
connect(): Promise<void>;
|
|
12
|
+
disconnect(): Promise<void>;
|
|
13
|
+
requestQR(): Promise<string>;
|
|
14
|
+
requestPairingCode(phoneNumber: string): Promise<string>;
|
|
15
|
+
private startKeepAlive;
|
|
16
|
+
private stopKeepAlive;
|
|
17
|
+
sendRaw(data: Uint8Array): void;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=socket.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"socket.d.ts","sourceRoot":"","sources":["../../src/connection/socket.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAK1C,qBAAa,iBAAkB,SAAQ,YAAY;IACjD,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,EAAE,CAA0B;IACpC,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,iBAAiB,CAAK;IAC9B,OAAO,CAAC,cAAc,CAAC,CAAiB;gBAE5B,MAAM,EAAE,aAAa;IAO3B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA+CxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ3B,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;IAO5B,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAM9D,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,IAAI,EAAE,UAAU;CAOnB"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.ConnectionManager = void 0;
|
|
7
|
+
const ws_1 = __importDefault(require("ws"));
|
|
8
|
+
const events_1 = require("events");
|
|
9
|
+
const transport_1 = require("./transport");
|
|
10
|
+
const handshake_1 = require("./handshake");
|
|
11
|
+
class ConnectionManager extends events_1.EventEmitter {
|
|
12
|
+
constructor(client) {
|
|
13
|
+
super();
|
|
14
|
+
this.ws = null;
|
|
15
|
+
this.reconnectAttempts = 0;
|
|
16
|
+
this.client = client;
|
|
17
|
+
this.transport = new transport_1.Transport(client);
|
|
18
|
+
this.handshake = new handshake_1.Handshake(client);
|
|
19
|
+
}
|
|
20
|
+
async connect() {
|
|
21
|
+
if (this.ws?.readyState === ws_1.default.OPEN)
|
|
22
|
+
return;
|
|
23
|
+
const { wsUrl, autoReconnect, reconnectDelay } = this.client['config'];
|
|
24
|
+
const doConnect = async () => {
|
|
25
|
+
this.emit('update', { status: 'connecting' });
|
|
26
|
+
const ws = new ws_1.default(wsUrl);
|
|
27
|
+
this.ws = ws;
|
|
28
|
+
ws.binaryType = 'arraybuffer';
|
|
29
|
+
return new Promise((resolve, reject) => {
|
|
30
|
+
ws.on('open', async () => {
|
|
31
|
+
this.emit('update', { status: 'open' });
|
|
32
|
+
this.reconnectAttempts = 0;
|
|
33
|
+
this.startKeepAlive();
|
|
34
|
+
// Perform noise handshake (stub)
|
|
35
|
+
await this.handshake.perform(ws);
|
|
36
|
+
resolve();
|
|
37
|
+
});
|
|
38
|
+
ws.on('message', (data) => {
|
|
39
|
+
const decoded = this.transport.decode(data);
|
|
40
|
+
// route to MessageHandler
|
|
41
|
+
this.client.messages.processIncoming(decoded);
|
|
42
|
+
});
|
|
43
|
+
ws.on('close', (code) => {
|
|
44
|
+
this.stopKeepAlive();
|
|
45
|
+
this.emit('update', { status: 'close', error: new Error(`Closed with code ${code}`) });
|
|
46
|
+
if (autoReconnect && (!this.client['config'].maxReconnectAttempts || this.reconnectAttempts < this.client['config'].maxReconnectAttempts)) {
|
|
47
|
+
setTimeout(() => {
|
|
48
|
+
this.reconnectAttempts++;
|
|
49
|
+
this.connect().catch(() => { });
|
|
50
|
+
}, reconnectDelay * Math.min(this.reconnectAttempts, 10));
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
ws.on('error', (err) => {
|
|
54
|
+
reject(err);
|
|
55
|
+
this.emit('update', { status: 'error', error: err });
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
};
|
|
59
|
+
return doConnect();
|
|
60
|
+
}
|
|
61
|
+
async disconnect() {
|
|
62
|
+
this.stopKeepAlive();
|
|
63
|
+
if (this.ws) {
|
|
64
|
+
this.ws.close();
|
|
65
|
+
this.ws = null;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
async requestQR() {
|
|
69
|
+
// Simulated QR generation (real implementation would ask WhatsApp servers)
|
|
70
|
+
const qr = 'data:image/png;base64,iVBORw0KGgo...'; // placeholder
|
|
71
|
+
this.emit('update', { status: 'qr', qr });
|
|
72
|
+
return qr;
|
|
73
|
+
}
|
|
74
|
+
async requestPairingCode(phoneNumber) {
|
|
75
|
+
const code = '12345'; // placeholder
|
|
76
|
+
this.emit('update', { status: 'pairing', pairingCode: code });
|
|
77
|
+
return code;
|
|
78
|
+
}
|
|
79
|
+
startKeepAlive() {
|
|
80
|
+
this.keepAliveTimer = setInterval(() => {
|
|
81
|
+
this.ws?.ping();
|
|
82
|
+
}, this.client['config'].keepAliveInterval);
|
|
83
|
+
}
|
|
84
|
+
stopKeepAlive() {
|
|
85
|
+
if (this.keepAliveTimer)
|
|
86
|
+
clearInterval(this.keepAliveTimer);
|
|
87
|
+
}
|
|
88
|
+
// Outgoing message send raw
|
|
89
|
+
sendRaw(data) {
|
|
90
|
+
if (this.ws?.readyState === ws_1.default.OPEN) {
|
|
91
|
+
this.ws.send(data);
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
throw new Error('WebSocket not connected');
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
exports.ConnectionManager = ConnectionManager;
|
|
99
|
+
//# sourceMappingURL=socket.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"socket.js","sourceRoot":"","sources":["../../src/connection/socket.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../../src/connection/transport.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAG1C,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAAgB;gBAClB,MAAM,EAAE,aAAa;IAIjC,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG,GAAG;IAMhC,MAAM,CAAC,OAAO,EAAE,GAAG,GAAG,UAAU;CAIjC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Transport = void 0;
|
|
4
|
+
// Simplified protobuf encode/decode using protobufjs/minimal
|
|
5
|
+
// Real implementation would use fully defined .proto files.
|
|
6
|
+
class Transport {
|
|
7
|
+
constructor(client) {
|
|
8
|
+
this.client = client;
|
|
9
|
+
}
|
|
10
|
+
decode(buffer) {
|
|
11
|
+
// Placeholder: parse binary into WAMessage format
|
|
12
|
+
// In a real lib this would use protobuf definitions
|
|
13
|
+
return JSON.parse(Buffer.from(buffer).toString('utf8'));
|
|
14
|
+
}
|
|
15
|
+
encode(message) {
|
|
16
|
+
// Placeholder
|
|
17
|
+
return Buffer.from(JSON.stringify(message));
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
exports.Transport = Transport;
|
|
21
|
+
//# sourceMappingURL=transport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../../src/connection/transport.ts"],"names":[],"mappings":";;;AACA,6DAA6D;AAC7D,4DAA4D;AAC5D,MAAa,SAAS;IAEpB,YAAY,MAAqB;QAC/B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED,MAAM,CAAC,MAAmB;QACxB,kDAAkD;QAClD,oDAAoD;QACpD,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1D,CAAC;IAED,MAAM,CAAC,OAAY;QACjB,cAAc;QACd,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9C,CAAC;CACF;AAhBD,8BAgBC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decoder.d.ts","sourceRoot":"","sources":["../../src/message/decoder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,qBAAa,OAAO;IACN,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,aAAa;IACzC,MAAM,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG;CAQtB"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Decoder = void 0;
|
|
4
|
+
class Decoder {
|
|
5
|
+
constructor(client) {
|
|
6
|
+
this.client = client;
|
|
7
|
+
}
|
|
8
|
+
decode(raw) {
|
|
9
|
+
// Placeholder – real implementation would deserialize protobuf
|
|
10
|
+
try {
|
|
11
|
+
return JSON.parse(Buffer.from(raw).toString('utf8'));
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
return {};
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
exports.Decoder = Decoder;
|
|
19
|
+
//# sourceMappingURL=decoder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decoder.js","sourceRoot":"","sources":["../../src/message/decoder.ts"],"names":[],"mappings":";;;AAEA,MAAa,OAAO;IAClB,YAAoB,MAAqB;QAArB,WAAM,GAAN,MAAM,CAAe;IAAG,CAAC;IAC7C,MAAM,CAAC,GAAQ;QACb,+DAA+D;QAC/D,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QACvD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;CACF;AAVD,0BAUC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encoder.d.ts","sourceRoot":"","sources":["../../src/message/encoder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,qBAAa,OAAO;IACN,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,aAAa;IACzC,MAAM,CAAC,OAAO,EAAE,GAAG,GAAG,UAAU;CAIjC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Encoder = void 0;
|
|
4
|
+
class Encoder {
|
|
5
|
+
constructor(client) {
|
|
6
|
+
this.client = client;
|
|
7
|
+
}
|
|
8
|
+
encode(message) {
|
|
9
|
+
// Placeholder – real implementation would serialize to protobuf
|
|
10
|
+
return Buffer.from(JSON.stringify(message));
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
exports.Encoder = Encoder;
|
|
14
|
+
//# sourceMappingURL=encoder.js.map
|