piece-signal-cli-rest-api 0.2.0 → 0.2.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/package.json +26 -4
- package/src/index.d.ts +8 -0
- package/src/index.js +89 -0
- package/src/index.js.map +1 -0
- package/src/lib/actions/add-admins-to-group.d.ts +12 -0
- package/src/lib/actions/add-admins-to-group.js +45 -0
- package/src/lib/actions/add-admins-to-group.js.map +1 -0
- package/src/lib/actions/add-device.d.ts +11 -0
- package/src/lib/actions/add-device.js +40 -0
- package/src/lib/actions/add-device.js.map +1 -0
- package/src/lib/actions/add-members-to-group.d.ts +12 -0
- package/src/lib/actions/add-members-to-group.js +45 -0
- package/src/lib/actions/add-members-to-group.js.map +1 -0
- package/src/lib/actions/block-group.d.ts +11 -0
- package/src/lib/actions/block-group.js +37 -0
- package/src/lib/actions/block-group.js.map +1 -0
- package/src/lib/actions/create-group.d.ts +18 -0
- package/src/lib/actions/create-group.js +117 -0
- package/src/lib/actions/create-group.js.map +1 -0
- package/src/lib/actions/delete-group.d.ts +11 -0
- package/src/lib/actions/delete-group.js +37 -0
- package/src/lib/actions/delete-group.js.map +1 -0
- package/src/lib/actions/get-contact.d.ts +11 -0
- package/src/lib/actions/get-contact.js +37 -0
- package/src/lib/actions/get-contact.js.map +1 -0
- package/src/lib/actions/get-group.d.ts +11 -0
- package/src/lib/actions/get-group.js +37 -0
- package/src/lib/actions/get-group.js.map +1 -0
- package/src/lib/actions/get-qr-code-link.d.ts +11 -0
- package/src/lib/actions/get-qr-code-link.js +60 -0
- package/src/lib/actions/get-qr-code-link.js.map +1 -0
- package/src/lib/actions/join-group.d.ts +11 -0
- package/src/lib/actions/join-group.js +37 -0
- package/src/lib/actions/join-group.js.map +1 -0
- package/src/lib/actions/list-accounts.d.ts +8 -0
- package/src/lib/actions/list-accounts.js +23 -0
- package/src/lib/actions/list-accounts.js.map +1 -0
- package/src/lib/actions/list-attachments.d.ts +8 -0
- package/src/lib/actions/list-attachments.js +23 -0
- package/src/lib/actions/list-attachments.js.map +1 -0
- package/src/lib/actions/list-contacts.d.ts +10 -0
- package/src/lib/actions/list-contacts.js +32 -0
- package/src/lib/actions/list-contacts.js.map +1 -0
- package/src/lib/actions/list-devices.d.ts +10 -0
- package/src/lib/actions/list-devices.js +32 -0
- package/src/lib/actions/list-devices.js.map +1 -0
- package/src/lib/actions/list-groups.d.ts +10 -0
- package/src/lib/actions/list-groups.js +32 -0
- package/src/lib/actions/list-groups.js.map +1 -0
- package/src/lib/actions/list-identities.d.ts +10 -0
- package/src/lib/actions/list-identities.js +32 -0
- package/src/lib/actions/list-identities.js.map +1 -0
- package/src/lib/actions/quit-group.d.ts +11 -0
- package/src/lib/actions/quit-group.js +37 -0
- package/src/lib/actions/quit-group.js.map +1 -0
- package/src/lib/actions/receive-messages.d.ts +15 -0
- package/src/lib/actions/receive-messages.js +100 -0
- package/src/lib/actions/receive-messages.js.map +1 -0
- package/src/lib/actions/remote-delete-message.d.ts +12 -0
- package/src/lib/actions/remote-delete-message.js +46 -0
- package/src/lib/actions/remote-delete-message.js.map +1 -0
- package/src/lib/actions/remove-admins-from-group.d.ts +12 -0
- package/src/lib/actions/remove-admins-from-group.js +45 -0
- package/src/lib/actions/remove-admins-from-group.js.map +1 -0
- package/src/lib/actions/remove-device.d.ts +11 -0
- package/src/lib/actions/remove-device.js +37 -0
- package/src/lib/actions/remove-device.js.map +1 -0
- package/src/lib/actions/remove-members-from-group.d.ts +12 -0
- package/src/lib/actions/remove-members-from-group.js +45 -0
- package/src/lib/actions/remove-members-from-group.js.map +1 -0
- package/src/lib/actions/remove-reaction.d.ts +13 -0
- package/src/lib/actions/remove-reaction.js +52 -0
- package/src/lib/actions/remove-reaction.js.map +1 -0
- package/src/lib/actions/request-approval-message.d.ts +15 -0
- package/src/lib/actions/request-approval-message.js +184 -0
- package/src/lib/actions/request-approval-message.js.map +1 -0
- package/src/lib/actions/resume-approval-flow.d.ts +11 -0
- package/src/lib/actions/resume-approval-flow.js +181 -0
- package/src/lib/actions/resume-approval-flow.js.map +1 -0
- package/src/lib/actions/search-numbers.d.ts +11 -0
- package/src/lib/actions/search-numbers.js +42 -0
- package/src/lib/actions/search-numbers.js.map +1 -0
- package/src/lib/actions/send-message.d.ts +27 -0
- package/src/lib/actions/send-message.js +176 -0
- package/src/lib/actions/send-message.js.map +1 -0
- package/src/lib/actions/send-reaction.d.ts +14 -0
- package/src/lib/actions/send-reaction.js +58 -0
- package/src/lib/actions/send-reaction.js.map +1 -0
- package/src/lib/actions/send-receipt.d.ts +13 -0
- package/src/lib/actions/send-receipt.js +58 -0
- package/src/lib/actions/send-receipt.js.map +1 -0
- package/src/lib/actions/start-typing.d.ts +11 -0
- package/src/lib/actions/start-typing.js +40 -0
- package/src/lib/actions/start-typing.js.map +1 -0
- package/src/lib/actions/stop-typing.d.ts +11 -0
- package/src/lib/actions/stop-typing.js +40 -0
- package/src/lib/actions/stop-typing.js.map +1 -0
- package/src/lib/actions/sync-contacts.d.ts +10 -0
- package/src/lib/actions/sync-contacts.js +32 -0
- package/src/lib/actions/sync-contacts.js.map +1 -0
- package/src/lib/actions/update-account-settings.d.ts +12 -0
- package/src/lib/actions/update-account-settings.js +49 -0
- package/src/lib/actions/update-account-settings.js.map +1 -0
- package/src/lib/actions/update-contact.d.ts +13 -0
- package/src/lib/actions/update-contact.js +56 -0
- package/src/lib/actions/update-contact.js.map +1 -0
- package/src/lib/actions/update-group.d.ts +19 -0
- package/src/lib/actions/update-group.js +125 -0
- package/src/lib/actions/update-group.js.map +1 -0
- package/src/lib/actions/update-profile.d.ts +13 -0
- package/src/lib/actions/update-profile.js +56 -0
- package/src/lib/actions/update-profile.js.map +1 -0
- package/src/lib/common/api-client.d.ts +24 -0
- package/src/lib/common/api-client.js +103 -0
- package/src/lib/common/api-client.js.map +1 -0
- package/src/lib/common/auth.d.ts +8 -0
- package/src/lib/common/auth.js +68 -0
- package/src/lib/common/auth.js.map +1 -0
- package/src/lib/common/message-utils.d.ts +81 -0
- package/src/lib/common/message-utils.js +327 -0
- package/src/lib/common/message-utils.js.map +1 -0
- package/src/lib/common/types.d.ts +65 -0
- package/src/lib/common/types.js +3 -0
- package/src/lib/common/types.js.map +1 -0
- package/src/lib/common/utils.d.ts +23 -0
- package/src/lib/common/utils.js +105 -0
- package/src/lib/common/utils.js.map +1 -0
- package/src/lib/triggers/new-group-member.d.ts +50 -0
- package/src/lib/triggers/new-group-member.js +155 -0
- package/src/lib/triggers/new-group-member.js.map +1 -0
- package/src/lib/triggers/new-message-received.d.ts +58 -0
- package/src/lib/triggers/new-message-received.js +469 -0
- package/src/lib/triggers/new-message-received.js.map +1 -0
- package/project.json +0 -58
- package/src/index.ts +0 -87
- package/src/lib/actions/add-admins-to-group.ts +0 -50
- package/src/lib/actions/add-device.ts +0 -45
- package/src/lib/actions/add-members-to-group.ts +0 -50
- package/src/lib/actions/block-group.ts +0 -36
- package/src/lib/actions/create-group.ts +0 -139
- package/src/lib/actions/delete-group.ts +0 -36
- package/src/lib/actions/get-contact.ts +0 -42
- package/src/lib/actions/get-group.ts +0 -37
- package/src/lib/actions/get-qr-code-link.ts +0 -62
- package/src/lib/actions/join-group.ts +0 -36
- package/src/lib/actions/list-accounts.ts +0 -20
- package/src/lib/actions/list-attachments.ts +0 -20
- package/src/lib/actions/list-contacts.ts +0 -37
- package/src/lib/actions/list-devices.ts +0 -38
- package/src/lib/actions/list-groups.ts +0 -32
- package/src/lib/actions/list-identities.ts +0 -32
- package/src/lib/actions/quit-group.ts +0 -36
- package/src/lib/actions/receive-messages.ts +0 -108
- package/src/lib/actions/remote-delete-message.ts +0 -56
- package/src/lib/actions/remove-admins-from-group.ts +0 -50
- package/src/lib/actions/remove-device.ts +0 -36
- package/src/lib/actions/remove-members-from-group.ts +0 -50
- package/src/lib/actions/remove-reaction.ts +0 -59
- package/src/lib/actions/request-approval-message.ts +0 -215
- package/src/lib/actions/search-numbers.ts +0 -47
- package/src/lib/actions/send-message.ts +0 -189
- package/src/lib/actions/send-reaction.ts +0 -66
- package/src/lib/actions/send-receipt.ts +0 -65
- package/src/lib/actions/start-typing.ts +0 -45
- package/src/lib/actions/stop-typing.ts +0 -45
- package/src/lib/actions/sync-contacts.ts +0 -31
- package/src/lib/actions/update-account-settings.ts +0 -57
- package/src/lib/actions/update-contact.ts +0 -65
- package/src/lib/actions/update-group.ts +0 -145
- package/src/lib/actions/update-profile.ts +0 -65
- package/src/lib/common/api-client.ts +0 -150
- package/src/lib/common/auth.ts +0 -66
- package/src/lib/common/message-utils.ts +0 -449
- package/src/lib/common/types.ts +0 -73
- package/src/lib/common/utils.ts +0 -106
- package/src/lib/triggers/new-group-member.ts +0 -176
- package/src/lib/triggers/new-message-received.ts +0 -618
- package/tsconfig.json +0 -19
- package/tsconfig.lib.json +0 -11
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SignalCliApiClient = exports.SignalCliApiError = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const pieces_common_1 = require("@activepieces/pieces-common");
|
|
6
|
+
class SignalCliApiError extends Error {
|
|
7
|
+
constructor(message, statusCode, challengeTokens, account) {
|
|
8
|
+
super(message);
|
|
9
|
+
this.statusCode = statusCode;
|
|
10
|
+
this.challengeTokens = challengeTokens;
|
|
11
|
+
this.account = account;
|
|
12
|
+
this.name = 'SignalCliApiError';
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
exports.SignalCliApiError = SignalCliApiError;
|
|
16
|
+
class SignalCliApiClient {
|
|
17
|
+
constructor(auth) {
|
|
18
|
+
// Remove trailing slash
|
|
19
|
+
this.baseUrl = auth.baseUrl.replace(/\/$/, '');
|
|
20
|
+
// Setup Basic Auth if enabled
|
|
21
|
+
if (auth.useBasicAuth && auth.basicAuthUsername && auth.basicAuthPassword) {
|
|
22
|
+
const credentials = Buffer.from(`${auth.basicAuthUsername}:${auth.basicAuthPassword}`).toString('base64');
|
|
23
|
+
this.basicAuthHeader = `Basic ${credentials}`;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
sendRequest(request) {
|
|
27
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
28
|
+
try {
|
|
29
|
+
const headers = Object.assign({}, request.headers);
|
|
30
|
+
// Add Basic Auth header if configured
|
|
31
|
+
if (this.basicAuthHeader) {
|
|
32
|
+
headers['Authorization'] = this.basicAuthHeader;
|
|
33
|
+
}
|
|
34
|
+
const response = yield pieces_common_1.httpClient.sendRequest(Object.assign(Object.assign({}, request), { url: `${this.baseUrl}${request.url}`, headers }));
|
|
35
|
+
// Check for error response
|
|
36
|
+
if (response.status === 429) {
|
|
37
|
+
// Rate limit error
|
|
38
|
+
const error = response.body;
|
|
39
|
+
throw new SignalCliApiError(error.error || 'Rate limit exceeded', 429, error.challenge_tokens, error.account);
|
|
40
|
+
}
|
|
41
|
+
if (response.status >= 400) {
|
|
42
|
+
const error = response.body;
|
|
43
|
+
throw new SignalCliApiError(error.error || `HTTP ${response.status}`, response.status);
|
|
44
|
+
}
|
|
45
|
+
if ('error' in (response.body || {})) {
|
|
46
|
+
const error = response.body;
|
|
47
|
+
throw new SignalCliApiError(error.error || 'Unknown error occurred');
|
|
48
|
+
}
|
|
49
|
+
return response.body;
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
if (error instanceof SignalCliApiError) {
|
|
53
|
+
throw error;
|
|
54
|
+
}
|
|
55
|
+
if (error instanceof Error) {
|
|
56
|
+
throw new SignalCliApiError(error.message);
|
|
57
|
+
}
|
|
58
|
+
throw new SignalCliApiError('Unknown error occurred');
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
get(url, headers) {
|
|
63
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
64
|
+
return this.sendRequest({
|
|
65
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
66
|
+
url,
|
|
67
|
+
headers,
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
post(url, body, headers) {
|
|
72
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
73
|
+
return this.sendRequest({
|
|
74
|
+
method: pieces_common_1.HttpMethod.POST,
|
|
75
|
+
url,
|
|
76
|
+
body,
|
|
77
|
+
headers: Object.assign({ 'Content-Type': 'application/json' }, headers),
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
put(url, body, headers) {
|
|
82
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
83
|
+
return this.sendRequest({
|
|
84
|
+
method: pieces_common_1.HttpMethod.PUT,
|
|
85
|
+
url,
|
|
86
|
+
body,
|
|
87
|
+
headers: Object.assign({ 'Content-Type': 'application/json' }, headers),
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
delete(url, body, headers) {
|
|
92
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
93
|
+
return this.sendRequest({
|
|
94
|
+
method: pieces_common_1.HttpMethod.DELETE,
|
|
95
|
+
url,
|
|
96
|
+
body,
|
|
97
|
+
headers: Object.assign({ 'Content-Type': 'application/json' }, headers),
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
exports.SignalCliApiClient = SignalCliApiClient;
|
|
103
|
+
//# sourceMappingURL=api-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../../../../../../../packages/pieces/community/signal-cli-rest-api/src/lib/common/api-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare const signalCliRestApiAuth: import("@activepieces/pieces-framework").CustomAuthProperty<{
|
|
2
|
+
baseUrl: import("@activepieces/pieces-framework").ShortTextProperty<true>;
|
|
3
|
+
useBasicAuth: import("@activepieces/pieces-framework").CheckboxProperty<false>;
|
|
4
|
+
basicAuthUsername: import("@activepieces/pieces-framework").ShortTextProperty<false>;
|
|
5
|
+
basicAuthPassword: import("@activepieces/pieces-framework").SecretTextProperty<false>;
|
|
6
|
+
defaultNumber: import("@activepieces/pieces-framework").ShortTextProperty<false>;
|
|
7
|
+
mode: import("@activepieces/pieces-framework").StaticDropdownProperty<string, true>;
|
|
8
|
+
}>;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.signalCliRestApiAuth = void 0;
|
|
4
|
+
const pieces_framework_1 = require("@activepieces/pieces-framework");
|
|
5
|
+
const markdown = `
|
|
6
|
+
To use the Signal CLI REST API, you need to provide the base URL of your signal-cli-rest-api instance.
|
|
7
|
+
|
|
8
|
+
1. Make sure you have signal-cli-rest-api running (e.g., via Docker)
|
|
9
|
+
2. The default URL is usually http://localhost:8080
|
|
10
|
+
3. If your API is behind a reverse proxy or on a different host, adjust the URL accordingly
|
|
11
|
+
4. If your API is behind a reverse proxy with HTTP Basic Auth, provide the credentials below
|
|
12
|
+
`;
|
|
13
|
+
exports.signalCliRestApiAuth = pieces_framework_1.PieceAuth.CustomAuth({
|
|
14
|
+
required: true,
|
|
15
|
+
description: markdown,
|
|
16
|
+
props: {
|
|
17
|
+
baseUrl: pieces_framework_1.Property.ShortText({
|
|
18
|
+
displayName: 'API Base URL',
|
|
19
|
+
description: 'Base URL of your signal-cli-rest-api instance (e.g., http://localhost:8080)',
|
|
20
|
+
required: true,
|
|
21
|
+
defaultValue: 'http://localhost:8080',
|
|
22
|
+
}),
|
|
23
|
+
useBasicAuth: pieces_framework_1.Property.Checkbox({
|
|
24
|
+
displayName: 'Use HTTP Basic Auth',
|
|
25
|
+
description: 'Enable if your API is behind a reverse proxy with HTTP Basic Auth',
|
|
26
|
+
required: false,
|
|
27
|
+
defaultValue: false,
|
|
28
|
+
}),
|
|
29
|
+
basicAuthUsername: pieces_framework_1.Property.ShortText({
|
|
30
|
+
displayName: 'Basic Auth Username',
|
|
31
|
+
description: 'Username for HTTP Basic Auth (required if Basic Auth is enabled)',
|
|
32
|
+
required: false,
|
|
33
|
+
}),
|
|
34
|
+
basicAuthPassword: pieces_framework_1.PieceAuth.SecretText({
|
|
35
|
+
displayName: 'Basic Auth Password',
|
|
36
|
+
description: 'Password for HTTP Basic Auth (required if Basic Auth is enabled)',
|
|
37
|
+
required: false,
|
|
38
|
+
}),
|
|
39
|
+
defaultNumber: pieces_framework_1.Property.ShortText({
|
|
40
|
+
displayName: 'Default Phone Number (Optional)',
|
|
41
|
+
description: 'Default Signal phone number for this connection (can be overridden in actions)',
|
|
42
|
+
required: false,
|
|
43
|
+
}),
|
|
44
|
+
mode: pieces_framework_1.Property.StaticDropdown({
|
|
45
|
+
displayName: 'Execution Mode',
|
|
46
|
+
description: 'The execution mode of your signal-cli-rest-api instance. json-rpc requires WebSocket, normal/native use HTTP GET.',
|
|
47
|
+
required: true,
|
|
48
|
+
defaultValue: 'normal',
|
|
49
|
+
options: {
|
|
50
|
+
options: [
|
|
51
|
+
{
|
|
52
|
+
label: 'Normal (HTTP GET)',
|
|
53
|
+
value: 'normal',
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
label: 'Native (HTTP GET)',
|
|
57
|
+
value: 'native',
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
label: 'JSON-RPC (WebSocket)',
|
|
61
|
+
value: 'json-rpc',
|
|
62
|
+
},
|
|
63
|
+
],
|
|
64
|
+
},
|
|
65
|
+
}),
|
|
66
|
+
},
|
|
67
|
+
});
|
|
68
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../../../../../../packages/pieces/community/signal-cli-rest-api/src/lib/common/auth.ts"],"names":[],"mappings":";;;AAAA,qEAAqE;AAErE,MAAM,QAAQ,GAAG;;;;;;;CAOhB,CAAC;AAEW,QAAA,oBAAoB,GAAG,4BAAS,CAAC,UAAU,CAAC;IACxD,QAAQ,EAAE,IAAI;IACd,WAAW,EAAE,QAAQ;IACrB,KAAK,EAAE;QACN,OAAO,EAAE,2BAAQ,CAAC,SAAS,CAAC;YAC3B,WAAW,EAAE,cAAc;YAC3B,WAAW,EAAE,6EAA6E;YAC1F,QAAQ,EAAE,IAAI;YACd,YAAY,EAAE,uBAAuB;SACrC,CAAC;QACF,YAAY,EAAE,2BAAQ,CAAC,QAAQ,CAAC;YAC/B,WAAW,EAAE,qBAAqB;YAClC,WAAW,EAAE,mEAAmE;YAChF,QAAQ,EAAE,KAAK;YACf,YAAY,EAAE,KAAK;SACnB,CAAC;QACF,iBAAiB,EAAE,2BAAQ,CAAC,SAAS,CAAC;YACrC,WAAW,EAAE,qBAAqB;YAClC,WAAW,EAAE,kEAAkE;YAC/E,QAAQ,EAAE,KAAK;SACf,CAAC;QACF,iBAAiB,EAAE,4BAAS,CAAC,UAAU,CAAC;YACvC,WAAW,EAAE,qBAAqB;YAClC,WAAW,EAAE,kEAAkE;YAC/E,QAAQ,EAAE,KAAK;SACf,CAAC;QACF,aAAa,EAAE,2BAAQ,CAAC,SAAS,CAAC;YACjC,WAAW,EAAE,iCAAiC;YAC9C,WAAW,EAAE,gFAAgF;YAC7F,QAAQ,EAAE,KAAK;SACf,CAAC;QACF,IAAI,EAAE,2BAAQ,CAAC,cAAc,CAAC;YAC7B,WAAW,EAAE,gBAAgB;YAC7B,WAAW,EAAE,mHAAmH;YAChI,QAAQ,EAAE,IAAI;YACd,YAAY,EAAE,QAAQ;YACtB,OAAO,EAAE;gBACR,OAAO,EAAE;oBACR;wBACC,KAAK,EAAE,mBAAmB;wBAC1B,KAAK,EAAE,QAAQ;qBACf;oBACD;wBACC,KAAK,EAAE,mBAAmB;wBAC1B,KAAK,EAAE,QAAQ;qBACf;oBACD;wBACC,KAAK,EAAE,sBAAsB;wBAC7B,KAAK,EAAE,UAAU;qBACjB;iBACD;aACD;SACD,CAAC;KACF;CACD,CAAC,CAAC"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
export interface SignalMessage {
|
|
2
|
+
envelope: {
|
|
3
|
+
source: string;
|
|
4
|
+
sourceNumber?: string;
|
|
5
|
+
sourceUuid?: string;
|
|
6
|
+
sourceName?: string;
|
|
7
|
+
sourceDevice: number;
|
|
8
|
+
timestamp: number;
|
|
9
|
+
timestampISO?: string;
|
|
10
|
+
dataMessage?: {
|
|
11
|
+
message?: string;
|
|
12
|
+
timestamp: number;
|
|
13
|
+
expiresInSeconds?: number;
|
|
14
|
+
attachments?: Array<{
|
|
15
|
+
id: string;
|
|
16
|
+
contentType: string;
|
|
17
|
+
size: number;
|
|
18
|
+
fileName?: string;
|
|
19
|
+
width?: number;
|
|
20
|
+
height?: number;
|
|
21
|
+
voiceNote?: boolean;
|
|
22
|
+
caption?: string;
|
|
23
|
+
}>;
|
|
24
|
+
mentions?: Array<{
|
|
25
|
+
start: number;
|
|
26
|
+
length: number;
|
|
27
|
+
recipient: string;
|
|
28
|
+
}>;
|
|
29
|
+
groupInfo?: {
|
|
30
|
+
groupId: string;
|
|
31
|
+
type: string;
|
|
32
|
+
members?: string[];
|
|
33
|
+
name?: string;
|
|
34
|
+
avatarId?: number;
|
|
35
|
+
};
|
|
36
|
+
quote?: {
|
|
37
|
+
id: number;
|
|
38
|
+
author: string;
|
|
39
|
+
text?: string;
|
|
40
|
+
};
|
|
41
|
+
preview?: Array<{
|
|
42
|
+
url: string;
|
|
43
|
+
title: string;
|
|
44
|
+
description?: string;
|
|
45
|
+
}>;
|
|
46
|
+
sticker?: {
|
|
47
|
+
packId: string;
|
|
48
|
+
stickerId: number;
|
|
49
|
+
};
|
|
50
|
+
reaction?: {
|
|
51
|
+
emoji: string;
|
|
52
|
+
targetAuthor: string;
|
|
53
|
+
targetTimestamp: number;
|
|
54
|
+
};
|
|
55
|
+
viewOnce?: boolean;
|
|
56
|
+
};
|
|
57
|
+
syncMessage?: {
|
|
58
|
+
sentMessage?: {
|
|
59
|
+
destination: string;
|
|
60
|
+
timestamp: number;
|
|
61
|
+
message?: string;
|
|
62
|
+
};
|
|
63
|
+
};
|
|
64
|
+
receipt?: {
|
|
65
|
+
type: number;
|
|
66
|
+
timestamp: number;
|
|
67
|
+
timestamps: number[];
|
|
68
|
+
};
|
|
69
|
+
typing?: {
|
|
70
|
+
action: number;
|
|
71
|
+
timestamp: number;
|
|
72
|
+
};
|
|
73
|
+
};
|
|
74
|
+
account: string;
|
|
75
|
+
}
|
|
76
|
+
export declare function tryResumeApprovalFlow(message: SignalMessage, store: any, apiUrl: string): Promise<{
|
|
77
|
+
resumed: boolean;
|
|
78
|
+
action?: string;
|
|
79
|
+
}>;
|
|
80
|
+
export declare function tryWebSocketReceive(httpUrl: string, headers: Record<string, string>, timeout: number, max_messages?: number): Promise<SignalMessage[]>;
|
|
81
|
+
export declare function tryHttpReceive(httpUrl: string, headers: Record<string, string>): Promise<SignalMessage[]>;
|
|
@@ -0,0 +1,327 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.tryResumeApprovalFlow = tryResumeApprovalFlow;
|
|
4
|
+
exports.tryWebSocketReceive = tryWebSocketReceive;
|
|
5
|
+
exports.tryHttpReceive = tryHttpReceive;
|
|
6
|
+
const tslib_1 = require("tslib");
|
|
7
|
+
const pieces_framework_1 = require("@activepieces/pieces-framework");
|
|
8
|
+
const pieces_common_1 = require("@activepieces/pieces-common");
|
|
9
|
+
const ws_1 = tslib_1.__importDefault(require("ws"));
|
|
10
|
+
// Function to automatically resume approval flows
|
|
11
|
+
function tryResumeApprovalFlow(message, store, apiUrl) {
|
|
12
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
13
|
+
var _a, _b, _c, _d;
|
|
14
|
+
console.log('[ReceiveMessages] DEBUG - Processing message:', {
|
|
15
|
+
hasReaction: !!((_b = (_a = message.envelope) === null || _a === void 0 ? void 0 : _a.dataMessage) === null || _b === void 0 ? void 0 : _b.reaction),
|
|
16
|
+
});
|
|
17
|
+
// Check if it's a reaction
|
|
18
|
+
if (!((_d = (_c = message.envelope) === null || _c === void 0 ? void 0 : _c.dataMessage) === null || _d === void 0 ? void 0 : _d.reaction)) {
|
|
19
|
+
return { resumed: false };
|
|
20
|
+
}
|
|
21
|
+
console.log('[ReceiveMessages] DEBUG - Reaction detected');
|
|
22
|
+
const reaction = message.envelope.dataMessage.reaction;
|
|
23
|
+
// Convert targetTimestamp from milliseconds to seconds (Unix timestamp)
|
|
24
|
+
// Note: targetTimestamp in SignalMessage interface might be targetSentTimestamp in actual data
|
|
25
|
+
const targetTimestampMs = reaction.targetSentTimestamp || reaction.targetTimestamp;
|
|
26
|
+
const targetTimestamp = Math.floor(targetTimestampMs / 1000);
|
|
27
|
+
const targetAuthor = reaction.targetAuthor;
|
|
28
|
+
const reactionEmoji = reaction.emoji;
|
|
29
|
+
console.log('[ReceiveMessages] DEBUG - Reaction data:', {
|
|
30
|
+
targetSentTimestampOriginal: targetTimestampMs,
|
|
31
|
+
targetTimestamp,
|
|
32
|
+
targetAuthor,
|
|
33
|
+
reactionEmoji,
|
|
34
|
+
});
|
|
35
|
+
// Cleanup expired approvals
|
|
36
|
+
const keysListKey = 'approval:keys';
|
|
37
|
+
const existingKeys = (yield store.get(keysListKey, pieces_framework_1.StoreScope.PROJECT)) || [];
|
|
38
|
+
const currentTimestamp = Math.floor(Date.now() / 1000);
|
|
39
|
+
const validKeys = [];
|
|
40
|
+
const keysToDelete = [];
|
|
41
|
+
console.log('[ReceiveMessages] DEBUG - Store info:', {
|
|
42
|
+
existingKeysCount: existingKeys.length,
|
|
43
|
+
existingKeys: existingKeys,
|
|
44
|
+
currentTimestamp,
|
|
45
|
+
});
|
|
46
|
+
for (const key of existingKeys) {
|
|
47
|
+
const mapping = (yield store.get(key, pieces_framework_1.StoreScope.PROJECT));
|
|
48
|
+
if (mapping) {
|
|
49
|
+
// Check if expired
|
|
50
|
+
if (currentTimestamp - mapping.createdAt > mapping.timeoutSeconds) {
|
|
51
|
+
// Expired - delete it and flowRunId mapping
|
|
52
|
+
yield store.delete(key, pieces_framework_1.StoreScope.PROJECT);
|
|
53
|
+
const flowRunMappingKey = `approval:flowRun:${mapping.flowRunId}`;
|
|
54
|
+
yield store.delete(flowRunMappingKey, pieces_framework_1.StoreScope.PROJECT);
|
|
55
|
+
keysToDelete.push(key);
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
validKeys.push(key);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
// Mapping not found - remove from list
|
|
63
|
+
keysToDelete.push(key);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
// Update keys list if any were deleted
|
|
67
|
+
if (keysToDelete.length > 0) {
|
|
68
|
+
yield store.put(keysListKey, validKeys, pieces_framework_1.StoreScope.PROJECT);
|
|
69
|
+
}
|
|
70
|
+
console.log('[ReceiveMessages] DEBUG - Cleanup result:', {
|
|
71
|
+
keysDeleted: keysToDelete.length,
|
|
72
|
+
validKeysCount: validKeys.length,
|
|
73
|
+
});
|
|
74
|
+
// Look up the specific approval mapping
|
|
75
|
+
const storeKey = `approval:${targetTimestamp}:${targetAuthor}`;
|
|
76
|
+
console.log('[ReceiveMessages] DEBUG - Store lookup:', {
|
|
77
|
+
storeKey,
|
|
78
|
+
existingKeysCount: existingKeys.length,
|
|
79
|
+
});
|
|
80
|
+
const mapping = (yield store.get(storeKey, pieces_framework_1.StoreScope.PROJECT));
|
|
81
|
+
if (!mapping) {
|
|
82
|
+
// Not an approval message
|
|
83
|
+
console.log('[ReceiveMessages] DEBUG - No mapping found:', {
|
|
84
|
+
reason: 'not_an_approval_message',
|
|
85
|
+
searchedKey: storeKey,
|
|
86
|
+
});
|
|
87
|
+
return { resumed: false };
|
|
88
|
+
}
|
|
89
|
+
console.log('[ReceiveMessages] DEBUG - Mapping found:', {
|
|
90
|
+
flowRunId: mapping.flowRunId,
|
|
91
|
+
requestId: mapping.requestId,
|
|
92
|
+
approveEmoji: mapping.approveEmoji,
|
|
93
|
+
disapproveEmoji: mapping.disapproveEmoji,
|
|
94
|
+
messageTimestamp: mapping.messageTimestamp,
|
|
95
|
+
createdAt: mapping.createdAt,
|
|
96
|
+
timeoutSeconds: mapping.timeoutSeconds,
|
|
97
|
+
});
|
|
98
|
+
// Check if expired
|
|
99
|
+
const ageInSeconds = currentTimestamp - mapping.createdAt;
|
|
100
|
+
const isExpired = ageInSeconds > mapping.timeoutSeconds;
|
|
101
|
+
console.log('[ReceiveMessages] DEBUG - Expiration check:', {
|
|
102
|
+
currentTimestamp,
|
|
103
|
+
createdAt: mapping.createdAt,
|
|
104
|
+
ageInSeconds,
|
|
105
|
+
timeoutSeconds: mapping.timeoutSeconds,
|
|
106
|
+
isExpired,
|
|
107
|
+
});
|
|
108
|
+
if (isExpired) {
|
|
109
|
+
// Expired - delete and return
|
|
110
|
+
yield store.delete(storeKey, pieces_framework_1.StoreScope.PROJECT);
|
|
111
|
+
const flowRunMappingKey = `approval:flowRun:${mapping.flowRunId}`;
|
|
112
|
+
yield store.delete(flowRunMappingKey, pieces_framework_1.StoreScope.PROJECT);
|
|
113
|
+
const updatedKeys = validKeys.filter(key => key !== storeKey);
|
|
114
|
+
yield store.put(keysListKey, updatedKeys, pieces_framework_1.StoreScope.PROJECT);
|
|
115
|
+
console.log('[ReceiveMessages] DEBUG - Approval expired');
|
|
116
|
+
return { resumed: false };
|
|
117
|
+
}
|
|
118
|
+
// Check emoji and determine action
|
|
119
|
+
let action;
|
|
120
|
+
console.log('[ReceiveMessages] DEBUG - Emoji check:', {
|
|
121
|
+
receivedEmoji: reactionEmoji,
|
|
122
|
+
expectedApproveEmoji: mapping.approveEmoji,
|
|
123
|
+
expectedDisapproveEmoji: mapping.disapproveEmoji,
|
|
124
|
+
});
|
|
125
|
+
if (reactionEmoji === mapping.approveEmoji) {
|
|
126
|
+
action = 'approve';
|
|
127
|
+
console.log('[ReceiveMessages] DEBUG - Emoji matched: approve');
|
|
128
|
+
}
|
|
129
|
+
else if (reactionEmoji === mapping.disapproveEmoji) {
|
|
130
|
+
action = 'disapprove';
|
|
131
|
+
console.log('[ReceiveMessages] DEBUG - Emoji matched: disapprove');
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
// Invalid emoji - not an approval reaction
|
|
135
|
+
console.log('[ReceiveMessages] DEBUG - Invalid emoji:', {
|
|
136
|
+
reason: 'invalid_emoji',
|
|
137
|
+
receivedEmoji: reactionEmoji,
|
|
138
|
+
});
|
|
139
|
+
return { resumed: false };
|
|
140
|
+
}
|
|
141
|
+
// Make HTTP request to resume the flow
|
|
142
|
+
const resumeUrl = `${apiUrl}v1/flow-runs/${mapping.flowRunId}/requests/${mapping.requestId}?action=${action}`;
|
|
143
|
+
console.log('[ReceiveMessages] DEBUG - Attempting resume:', {
|
|
144
|
+
resumeUrl,
|
|
145
|
+
apiUrl,
|
|
146
|
+
flowRunId: mapping.flowRunId,
|
|
147
|
+
requestId: mapping.requestId,
|
|
148
|
+
action,
|
|
149
|
+
});
|
|
150
|
+
try {
|
|
151
|
+
const response = yield pieces_common_1.httpClient.sendRequest({
|
|
152
|
+
method: pieces_common_1.HttpMethod.POST,
|
|
153
|
+
url: resumeUrl,
|
|
154
|
+
headers: {
|
|
155
|
+
'Content-Type': 'application/json',
|
|
156
|
+
},
|
|
157
|
+
});
|
|
158
|
+
console.log('[ReceiveMessages] DEBUG - Resume successful:', {
|
|
159
|
+
flowRunId: mapping.flowRunId,
|
|
160
|
+
action,
|
|
161
|
+
responseStatus: response.status,
|
|
162
|
+
responseBody: response.body,
|
|
163
|
+
});
|
|
164
|
+
// Delete mapping from Store (cleanup)
|
|
165
|
+
yield store.delete(storeKey, pieces_framework_1.StoreScope.PROJECT);
|
|
166
|
+
// Delete flowRunId mapping
|
|
167
|
+
const flowRunMappingKey = `approval:flowRun:${mapping.flowRunId}`;
|
|
168
|
+
yield store.delete(flowRunMappingKey, pieces_framework_1.StoreScope.PROJECT);
|
|
169
|
+
// Remove key from approval keys list
|
|
170
|
+
const finalKeys = validKeys.filter(key => key !== storeKey);
|
|
171
|
+
yield store.put(keysListKey, finalKeys, pieces_framework_1.StoreScope.PROJECT);
|
|
172
|
+
console.log('[ReceiveMessages] DEBUG - Cleanup completed');
|
|
173
|
+
return { resumed: true, action };
|
|
174
|
+
}
|
|
175
|
+
catch (error) {
|
|
176
|
+
// If resume fails, log but don't throw - message will still be returned
|
|
177
|
+
console.error('[ReceiveMessages] DEBUG - Resume failed:', {
|
|
178
|
+
error: error instanceof Error ? error.message : String(error),
|
|
179
|
+
errorStack: error instanceof Error ? error.stack : undefined,
|
|
180
|
+
resumeUrl,
|
|
181
|
+
flowRunId: mapping.flowRunId,
|
|
182
|
+
reason: 'resume_failed',
|
|
183
|
+
});
|
|
184
|
+
return { resumed: false };
|
|
185
|
+
}
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
// WebSocket receive function (for json-rpc mode)
|
|
189
|
+
function tryWebSocketReceive(httpUrl, headers, timeout, max_messages) {
|
|
190
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
191
|
+
const wsUrl = httpUrl.replace(/^http:/, 'ws:').replace(/^https:/, 'wss:');
|
|
192
|
+
const wsHeaders = Object.assign(Object.assign({}, headers), { 'Connection': 'Upgrade', 'Upgrade': 'websocket' });
|
|
193
|
+
return new Promise((resolve, reject) => {
|
|
194
|
+
const messages = [];
|
|
195
|
+
let messageCount = 0;
|
|
196
|
+
const maxMessagesToCollect = max_messages || Infinity;
|
|
197
|
+
const timeoutMs = timeout * 1000;
|
|
198
|
+
let resolved = false;
|
|
199
|
+
const resolveOnce = (result) => {
|
|
200
|
+
if (!resolved) {
|
|
201
|
+
resolved = true;
|
|
202
|
+
resolve(result);
|
|
203
|
+
}
|
|
204
|
+
};
|
|
205
|
+
const rejectOnce = (error) => {
|
|
206
|
+
if (!resolved) {
|
|
207
|
+
resolved = true;
|
|
208
|
+
reject(error);
|
|
209
|
+
}
|
|
210
|
+
};
|
|
211
|
+
const processMessages = () => {
|
|
212
|
+
// Filter messages that have dataMessage (actual message content)
|
|
213
|
+
return messages.filter((msg) => { var _a; return (_a = msg.envelope) === null || _a === void 0 ? void 0 : _a.dataMessage; });
|
|
214
|
+
};
|
|
215
|
+
const ws = new ws_1.default(wsUrl, {
|
|
216
|
+
headers: wsHeaders,
|
|
217
|
+
});
|
|
218
|
+
const timeoutId = setTimeout(() => {
|
|
219
|
+
if (!resolved) {
|
|
220
|
+
ws.close();
|
|
221
|
+
resolveOnce(processMessages());
|
|
222
|
+
}
|
|
223
|
+
}, timeoutMs);
|
|
224
|
+
ws.on('open', () => {
|
|
225
|
+
// WebSocket connection opened successfully
|
|
226
|
+
// The server will send messages as they arrive
|
|
227
|
+
});
|
|
228
|
+
ws.on('message', (data) => {
|
|
229
|
+
try {
|
|
230
|
+
const messageText = data.toString();
|
|
231
|
+
// Check if it's an error message
|
|
232
|
+
if (messageText.includes('"error"') || messageText.includes('"Msg"')) {
|
|
233
|
+
try {
|
|
234
|
+
const errorObj = JSON.parse(messageText);
|
|
235
|
+
if (errorObj.error || errorObj.Msg) {
|
|
236
|
+
clearTimeout(timeoutId);
|
|
237
|
+
ws.close();
|
|
238
|
+
// If it's a "no messages" type error, return empty array
|
|
239
|
+
if (errorObj.Msg && errorObj.Msg.includes('No new messages')) {
|
|
240
|
+
resolveOnce([]);
|
|
241
|
+
}
|
|
242
|
+
else {
|
|
243
|
+
rejectOnce(new Error(errorObj.error || errorObj.Msg));
|
|
244
|
+
}
|
|
245
|
+
return;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
catch (_a) {
|
|
249
|
+
// Not a JSON error, continue processing
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
// Try to parse as JSON message
|
|
253
|
+
try {
|
|
254
|
+
const message = JSON.parse(messageText);
|
|
255
|
+
messages.push(message);
|
|
256
|
+
messageCount++;
|
|
257
|
+
// If we've reached max_messages, close the connection
|
|
258
|
+
if (messageCount >= maxMessagesToCollect) {
|
|
259
|
+
clearTimeout(timeoutId);
|
|
260
|
+
ws.close();
|
|
261
|
+
resolveOnce(processMessages());
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
catch (parseError) {
|
|
265
|
+
// If parsing fails, ignore this message
|
|
266
|
+
// The server might send non-JSON data
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
catch (error) {
|
|
270
|
+
// Ignore individual message errors
|
|
271
|
+
}
|
|
272
|
+
});
|
|
273
|
+
ws.on('error', (error) => {
|
|
274
|
+
clearTimeout(timeoutId);
|
|
275
|
+
ws.close();
|
|
276
|
+
// Reject to trigger fallback to HTTP GET
|
|
277
|
+
rejectOnce(error);
|
|
278
|
+
});
|
|
279
|
+
ws.on('close', () => {
|
|
280
|
+
clearTimeout(timeoutId);
|
|
281
|
+
// If we haven't resolved yet, resolve with collected messages
|
|
282
|
+
if (!resolved) {
|
|
283
|
+
resolveOnce(processMessages());
|
|
284
|
+
}
|
|
285
|
+
});
|
|
286
|
+
});
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
// HTTP GET receive function (for normal/native mode)
|
|
290
|
+
function tryHttpReceive(httpUrl, headers) {
|
|
291
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
292
|
+
try {
|
|
293
|
+
const response = yield pieces_common_1.httpClient.sendRequest({
|
|
294
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
295
|
+
url: httpUrl,
|
|
296
|
+
headers,
|
|
297
|
+
});
|
|
298
|
+
// The API returns either a JSON array of messages or a JSON string
|
|
299
|
+
let messages = [];
|
|
300
|
+
if (typeof response.body === 'string') {
|
|
301
|
+
try {
|
|
302
|
+
messages = JSON.parse(response.body);
|
|
303
|
+
}
|
|
304
|
+
catch (_a) {
|
|
305
|
+
// If parsing fails, try to parse as array
|
|
306
|
+
messages = [];
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
else if (Array.isArray(response.body)) {
|
|
310
|
+
messages = response.body;
|
|
311
|
+
}
|
|
312
|
+
else {
|
|
313
|
+
messages = [];
|
|
314
|
+
}
|
|
315
|
+
// Filter messages that have dataMessage (actual message content)
|
|
316
|
+
return messages.filter((msg) => { var _a; return (_a = msg.envelope) === null || _a === void 0 ? void 0 : _a.dataMessage; });
|
|
317
|
+
}
|
|
318
|
+
catch (error) {
|
|
319
|
+
// If no messages are available, return empty array
|
|
320
|
+
if (error instanceof Error && error.message.includes('No new messages')) {
|
|
321
|
+
return [];
|
|
322
|
+
}
|
|
323
|
+
throw error;
|
|
324
|
+
}
|
|
325
|
+
});
|
|
326
|
+
}
|
|
327
|
+
//# sourceMappingURL=message-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"message-utils.js","sourceRoot":"","sources":["../../../../../../../../packages/pieces/community/signal-cli-rest-api/src/lib/common/message-utils.ts"],"names":[],"mappings":"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"}
|