signal-sdk 0.1.2 → 0.1.3
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 +18 -8
- package/dist/MultiAccountManager.js +11 -19
- package/dist/SignalBot.js +40 -36
- package/dist/SignalCli.d.ts +23 -319
- package/dist/SignalCli.js +224 -998
- package/dist/__tests__/DeviceManager.test.d.ts +1 -0
- package/dist/__tests__/DeviceManager.test.js +135 -0
- package/dist/__tests__/MultiAccountManager.coverage.test.d.ts +1 -0
- package/dist/__tests__/MultiAccountManager.coverage.test.js +33 -0
- package/dist/__tests__/MultiAccountManager.test.js +3 -3
- package/dist/__tests__/SignalBot.additional.test.js +40 -37
- package/dist/__tests__/SignalBot.coverage.test.d.ts +1 -0
- package/dist/__tests__/SignalBot.coverage.test.js +385 -0
- package/dist/__tests__/SignalBot.test.js +8 -8
- package/dist/__tests__/SignalCli.advanced.test.js +47 -58
- package/dist/__tests__/SignalCli.connections.test.d.ts +1 -0
- package/dist/__tests__/SignalCli.connections.test.js +110 -0
- package/dist/__tests__/SignalCli.e2e.test.js +28 -32
- package/dist/__tests__/SignalCli.events.test.d.ts +1 -0
- package/dist/__tests__/SignalCli.events.test.js +113 -0
- package/dist/__tests__/SignalCli.integration.test.js +6 -5
- package/dist/__tests__/SignalCli.methods.test.js +77 -77
- package/dist/__tests__/SignalCli.parsing.test.js +4 -13
- package/dist/__tests__/SignalCli.simple.test.d.ts +1 -0
- package/dist/__tests__/SignalCli.simple.test.js +77 -0
- package/dist/__tests__/SignalCli.test.js +96 -82
- package/dist/__tests__/config.test.js +19 -29
- package/dist/__tests__/errors.test.js +2 -2
- package/dist/__tests__/retry.test.js +10 -8
- package/dist/__tests__/robustness.test.d.ts +1 -0
- package/dist/__tests__/robustness.test.js +59 -0
- package/dist/__tests__/security.test.d.ts +1 -0
- package/dist/__tests__/security.test.js +50 -0
- package/dist/config.js +3 -3
- package/dist/interfaces.d.ts +18 -0
- package/dist/managers/AccountManager.d.ts +27 -0
- package/dist/managers/AccountManager.js +147 -0
- package/dist/managers/BaseManager.d.ts +9 -0
- package/dist/managers/BaseManager.js +17 -0
- package/dist/managers/ContactManager.d.ts +15 -0
- package/dist/managers/ContactManager.js +123 -0
- package/dist/managers/DeviceManager.d.ts +11 -0
- package/dist/managers/DeviceManager.js +139 -0
- package/dist/managers/GroupManager.d.ts +12 -0
- package/dist/managers/GroupManager.js +78 -0
- package/dist/managers/MessageManager.d.ts +18 -0
- package/dist/managers/MessageManager.js +301 -0
- package/dist/managers/StickerManager.d.ts +8 -0
- package/dist/managers/StickerManager.js +39 -0
- package/dist/retry.js +3 -3
- package/dist/validators.d.ts +9 -0
- package/dist/validators.js +20 -0
- package/package.json +11 -4
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const SignalCli_1 = require("../SignalCli");
|
|
4
|
+
// Mock dependencies
|
|
5
|
+
jest.mock('child_process');
|
|
6
|
+
jest.mock('../config', () => ({
|
|
7
|
+
Logger: jest.fn().mockImplementation(() => ({
|
|
8
|
+
debug: jest.fn(),
|
|
9
|
+
info: jest.fn(),
|
|
10
|
+
warn: jest.fn(),
|
|
11
|
+
error: jest.fn(),
|
|
12
|
+
})),
|
|
13
|
+
validateConfig: jest.fn().mockReturnValue({
|
|
14
|
+
verbose: false,
|
|
15
|
+
}),
|
|
16
|
+
}));
|
|
17
|
+
describe('SignalCli - Advanced Events', () => {
|
|
18
|
+
let signalCli;
|
|
19
|
+
const mockAccount = '+1234567890';
|
|
20
|
+
beforeEach(() => {
|
|
21
|
+
jest.clearAllMocks();
|
|
22
|
+
signalCli = new SignalCli_1.SignalCli(mockAccount);
|
|
23
|
+
});
|
|
24
|
+
it('should emit "reaction" event when receiving a reaction', (done) => {
|
|
25
|
+
const reactionPayload = {
|
|
26
|
+
jsonrpc: '2.0',
|
|
27
|
+
method: 'receive',
|
|
28
|
+
params: {
|
|
29
|
+
envelope: {
|
|
30
|
+
source: '+1111111111',
|
|
31
|
+
timestamp: 1600000000000,
|
|
32
|
+
dataMessage: {
|
|
33
|
+
reaction: {
|
|
34
|
+
emoji: '👍',
|
|
35
|
+
targetAuthor: '+1234567890',
|
|
36
|
+
targetSentTimestamp: 1599999999999,
|
|
37
|
+
isRemove: false,
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
signalCli.on('reaction', (event) => {
|
|
44
|
+
try {
|
|
45
|
+
expect(event.emoji).toBe('👍');
|
|
46
|
+
expect(event.sender).toBe('+1111111111');
|
|
47
|
+
expect(event.targetTimestamp).toBe(1599999999999);
|
|
48
|
+
done();
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
done(error);
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
// Simulate incoming data
|
|
55
|
+
signalCli.handleRpcResponse(JSON.stringify(reactionPayload));
|
|
56
|
+
});
|
|
57
|
+
it('should emit "receipt" event when receiving a receipt', (done) => {
|
|
58
|
+
const receiptPayload = {
|
|
59
|
+
jsonrpc: '2.0',
|
|
60
|
+
method: 'receive',
|
|
61
|
+
params: {
|
|
62
|
+
envelope: {
|
|
63
|
+
source: '+2222222222',
|
|
64
|
+
timestamp: 1600000000000,
|
|
65
|
+
receiptMessage: {
|
|
66
|
+
type: 'READ',
|
|
67
|
+
timestamps: [1599999999999],
|
|
68
|
+
when: 1600000000000,
|
|
69
|
+
},
|
|
70
|
+
},
|
|
71
|
+
},
|
|
72
|
+
};
|
|
73
|
+
signalCli.on('receipt', (event) => {
|
|
74
|
+
try {
|
|
75
|
+
expect(event.type).toBe('READ');
|
|
76
|
+
expect(event.sender).toBe('+2222222222');
|
|
77
|
+
expect(event.timestamps).toContain(1599999999999);
|
|
78
|
+
done();
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
done(error);
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
signalCli.handleRpcResponse(JSON.stringify(receiptPayload));
|
|
85
|
+
});
|
|
86
|
+
it('should emit "typing" event when receiving typing indicator', (done) => {
|
|
87
|
+
const typingPayload = {
|
|
88
|
+
jsonrpc: '2.0',
|
|
89
|
+
method: 'receive',
|
|
90
|
+
params: {
|
|
91
|
+
envelope: {
|
|
92
|
+
source: '+3333333333',
|
|
93
|
+
timestamp: 1600000000000,
|
|
94
|
+
typingMessage: {
|
|
95
|
+
action: 'STARTED',
|
|
96
|
+
groupId: null,
|
|
97
|
+
},
|
|
98
|
+
},
|
|
99
|
+
},
|
|
100
|
+
};
|
|
101
|
+
signalCli.on('typing', (event) => {
|
|
102
|
+
try {
|
|
103
|
+
expect(event.action).toBe('STARTED');
|
|
104
|
+
expect(event.sender).toBe('+3333333333');
|
|
105
|
+
done();
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
done(error);
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
signalCli.handleRpcResponse(JSON.stringify(typingPayload));
|
|
112
|
+
});
|
|
113
|
+
});
|
|
@@ -121,7 +121,7 @@ describe('SignalCli Integration Tests', () => {
|
|
|
121
121
|
signalCli.on('error', errorHandler);
|
|
122
122
|
handleRpcResponse('not valid json');
|
|
123
123
|
expect(errorHandler).toHaveBeenCalledWith(expect.objectContaining({
|
|
124
|
-
message: expect.stringContaining('Failed to parse JSON-RPC response')
|
|
124
|
+
message: expect.stringContaining('Failed to parse JSON-RPC response'),
|
|
125
125
|
}));
|
|
126
126
|
});
|
|
127
127
|
it('should emit notifications correctly', () => {
|
|
@@ -191,15 +191,16 @@ describe('SignalCli Integration Tests', () => {
|
|
|
191
191
|
jest.spyOn(signalCli, 'sendJsonRpcRequest').mockResolvedValue({});
|
|
192
192
|
});
|
|
193
193
|
it('should handle group message with options', async () => {
|
|
194
|
-
const sendJsonRpcRequestSpy = jest
|
|
194
|
+
const sendJsonRpcRequestSpy = jest
|
|
195
|
+
.spyOn(signalCli, 'sendJsonRpcRequest')
|
|
195
196
|
.mockResolvedValue({ results: [{ type: 'SUCCESS' }], timestamp: 123456 });
|
|
196
197
|
await signalCli.sendMessage('groupId==', 'Group message', {
|
|
197
|
-
mentions: [{ start: 0, length: 4, number: '+1111111111' }]
|
|
198
|
+
mentions: [{ start: 0, length: 4, number: '+1111111111' }],
|
|
198
199
|
});
|
|
199
200
|
expect(sendJsonRpcRequestSpy).toHaveBeenCalled();
|
|
200
201
|
expect(sendJsonRpcRequestSpy).toHaveBeenCalledWith('send', expect.objectContaining({
|
|
201
202
|
message: 'Group message',
|
|
202
|
-
groupId: 'groupId=='
|
|
203
|
+
groupId: 'groupId==',
|
|
203
204
|
}));
|
|
204
205
|
});
|
|
205
206
|
});
|
|
@@ -218,7 +219,7 @@ describe('SignalCli Integration Tests', () => {
|
|
|
218
219
|
const errorResponse = '{"jsonrpc":"2.0","id":"error-id","error":{"code":-32600,"message":"Invalid Request"}}';
|
|
219
220
|
handleRpcResponse(errorResponse);
|
|
220
221
|
expect(mockPromise.reject).toHaveBeenCalledWith(expect.objectContaining({
|
|
221
|
-
message: expect.stringContaining('Invalid Request')
|
|
222
|
+
message: expect.stringContaining('Invalid Request'),
|
|
222
223
|
}));
|
|
223
224
|
});
|
|
224
225
|
});
|