@skillful-ai/piece-skai-adapters 0.0.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/README.md +325 -0
- package/package.json +36 -0
- package/skillful-ai-piece-skai-adapters-0.0.1.tgz +0 -0
- package/src/index.d.ts +1 -0
- package/src/index.js +25 -0
- package/src/index.js.map +1 -0
- package/src/lib/actions/skai-to-telegram.d.ts +3 -0
- package/src/lib/actions/skai-to-telegram.js +192 -0
- package/src/lib/actions/skai-to-telegram.js.map +1 -0
- package/src/lib/actions/skai-to-whatsapp.d.ts +3 -0
- package/src/lib/actions/skai-to-whatsapp.js +179 -0
- package/src/lib/actions/skai-to-whatsapp.js.map +1 -0
- package/src/lib/actions/telegram-to-skai.d.ts +6 -0
- package/src/lib/actions/telegram-to-skai.js +93 -0
- package/src/lib/actions/telegram-to-skai.js.map +1 -0
- package/src/lib/actions/whatsapp-to-skai.d.ts +6 -0
- package/src/lib/actions/whatsapp-to-skai.js +93 -0
- package/src/lib/actions/whatsapp-to-skai.js.map +1 -0
- package/src/lib/auth/skai.auth.d.ts +3 -0
- package/src/lib/auth/skai.auth.js +32 -0
- package/src/lib/auth/skai.auth.js.map +1 -0
- package/src/lib/common/dropdowns.d.ts +5 -0
- package/src/lib/common/dropdowns.js +61 -0
- package/src/lib/common/dropdowns.js.map +1 -0
- package/src/lib/common/skai-client.d.ts +65 -0
- package/src/lib/common/skai-client.js +173 -0
- package/src/lib/common/skai-client.js.map +1 -0
- package/src/lib/common/types/generic-message.d.ts +44 -0
- package/src/lib/common/types/generic-message.js +27 -0
- package/src/lib/common/types/generic-message.js.map +1 -0
- package/src/lib/transformers/telegram.transformer.d.ts +78 -0
- package/src/lib/transformers/telegram.transformer.js +72 -0
- package/src/lib/transformers/telegram.transformer.js.map +1 -0
- package/src/lib/transformers/whatsapp.transformer.d.ts +73 -0
- package/src/lib/transformers/whatsapp.transformer.js +136 -0
- package/src/lib/transformers/whatsapp.transformer.js.map +1 -0
- package/src/lib/triggers/skai-response-webhook.d.ts +20 -0
- package/src/lib/triggers/skai-response-webhook.js +144 -0
- package/src/lib/triggers/skai-response-webhook.js.map +1 -0
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.skaiClient = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const pieces_common_1 = require("@activepieces/pieces-common");
|
|
6
|
+
const skai_sdk_1 = require("@skillful-ai/skai-sdk");
|
|
7
|
+
/**
|
|
8
|
+
* SKAI Agents API client
|
|
9
|
+
* Uses server context (publicUrl + token) to get user's SKAI API key and configuration
|
|
10
|
+
*/
|
|
11
|
+
exports.skaiClient = {
|
|
12
|
+
/**
|
|
13
|
+
* Get the piece user with their credentials from the server
|
|
14
|
+
*/
|
|
15
|
+
getPieceUser(params) {
|
|
16
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
17
|
+
console.log('Fetching piece user credentials from:', `${params.serverUrl}v1/users/piece-user`);
|
|
18
|
+
const response = yield pieces_common_1.httpClient.sendRequest({
|
|
19
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
20
|
+
url: `${params.serverUrl}v1/users/piece-user`,
|
|
21
|
+
authentication: {
|
|
22
|
+
type: pieces_common_1.AuthenticationType.BEARER_TOKEN,
|
|
23
|
+
token: params.token,
|
|
24
|
+
},
|
|
25
|
+
});
|
|
26
|
+
const user = response.body;
|
|
27
|
+
console.log('Retrieved user:', {
|
|
28
|
+
id: user.id,
|
|
29
|
+
externalId: user.externalId,
|
|
30
|
+
hasSkaiApiKey: !!user.skaiApiKey,
|
|
31
|
+
skaiApiKeyPrefix: user.skaiApiKey
|
|
32
|
+
? user.skaiApiKey.substring(0, 10) + '...'
|
|
33
|
+
: 'none',
|
|
34
|
+
});
|
|
35
|
+
return user;
|
|
36
|
+
});
|
|
37
|
+
},
|
|
38
|
+
/**
|
|
39
|
+
* Get SKAI API URL from server configuration
|
|
40
|
+
*/
|
|
41
|
+
getSkaiApiUrl(params) {
|
|
42
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
43
|
+
const response = yield pieces_common_1.httpClient.sendRequest({
|
|
44
|
+
method: pieces_common_1.HttpMethod.GET,
|
|
45
|
+
url: `${params.serverUrl}v1/skai-agents/config`,
|
|
46
|
+
authentication: {
|
|
47
|
+
type: pieces_common_1.AuthenticationType.BEARER_TOKEN,
|
|
48
|
+
token: params.token,
|
|
49
|
+
},
|
|
50
|
+
});
|
|
51
|
+
return response.body.agentsApiUrl;
|
|
52
|
+
});
|
|
53
|
+
},
|
|
54
|
+
/**
|
|
55
|
+
* Create a SKAI API client instance with proper configuration
|
|
56
|
+
*/
|
|
57
|
+
createSkaiClient(params) {
|
|
58
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
59
|
+
const baseUrl = yield this.getSkaiApiUrl(params);
|
|
60
|
+
console.log('Creating SKAI client with:', {
|
|
61
|
+
baseUrl,
|
|
62
|
+
hasUserApiKey: !!params.userApiKey,
|
|
63
|
+
userApiKeyPrefix: params.userApiKey ? params.userApiKey.substring(0, 10) + '...' : 'none',
|
|
64
|
+
});
|
|
65
|
+
const config = {
|
|
66
|
+
baseUrl,
|
|
67
|
+
userApiKey: params.userApiKey,
|
|
68
|
+
};
|
|
69
|
+
return new skai_sdk_1.SkaiAgentsClient(skai_sdk_1.consoleLogger, config);
|
|
70
|
+
});
|
|
71
|
+
},
|
|
72
|
+
/**
|
|
73
|
+
* Process a message with a SKAI agent
|
|
74
|
+
* Uses HTTP call for async webhook-based processing (not available in SDK)
|
|
75
|
+
*/
|
|
76
|
+
processMessage(params) {
|
|
77
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
78
|
+
var _a;
|
|
79
|
+
const { serverUrl, token, agentId, payload } = params;
|
|
80
|
+
// Get user credentials
|
|
81
|
+
const user = yield this.getPieceUser({ serverUrl, token });
|
|
82
|
+
if (!user.skaiApiKey) {
|
|
83
|
+
throw new Error('SKAI API key not configured');
|
|
84
|
+
}
|
|
85
|
+
// Get API URL using SDK client creation pattern for consistency
|
|
86
|
+
const baseUrl = yield this.getSkaiApiUrl({ serverUrl, token });
|
|
87
|
+
console.log('📤 Calling SKAI Agents API', {
|
|
88
|
+
baseUrl,
|
|
89
|
+
agentId,
|
|
90
|
+
platform: payload.platform,
|
|
91
|
+
});
|
|
92
|
+
try {
|
|
93
|
+
const url = `${baseUrl}/api/agents/${agentId}/process`;
|
|
94
|
+
const response = yield pieces_common_1.httpClient.sendRequest({
|
|
95
|
+
method: pieces_common_1.HttpMethod.POST,
|
|
96
|
+
url,
|
|
97
|
+
// authentication: {
|
|
98
|
+
// type: AuthenticationType.BEARER_TOKEN,
|
|
99
|
+
// token: token,
|
|
100
|
+
// },
|
|
101
|
+
headers: {
|
|
102
|
+
'Content-Type': 'application/json',
|
|
103
|
+
'Authorization': user.skaiApiKey,
|
|
104
|
+
'User-Agent': 'Activepieces-SKAI-SDK/1.0',
|
|
105
|
+
},
|
|
106
|
+
body: payload,
|
|
107
|
+
});
|
|
108
|
+
if (response.status !== 200) {
|
|
109
|
+
throw new Error(`Failed to queue message for async processing: ${response.body}`);
|
|
110
|
+
}
|
|
111
|
+
console.log('✅ Message queued for async processing');
|
|
112
|
+
return response.body;
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
console.error('❌ SKAI API error:', error);
|
|
116
|
+
if (error.response) {
|
|
117
|
+
const status = error.response.status;
|
|
118
|
+
const errorMessage = ((_a = error.response.body) === null || _a === void 0 ? void 0 : _a.message) || error.message;
|
|
119
|
+
throw new Error(`SKAI API error (${status}): ${errorMessage}`);
|
|
120
|
+
}
|
|
121
|
+
throw new Error(`Failed to call SKAI API: ${error.message || error}`);
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
},
|
|
125
|
+
/**
|
|
126
|
+
* List available agents for dropdown
|
|
127
|
+
* Uses SKAI SDK for consistency with other pieces
|
|
128
|
+
*/
|
|
129
|
+
listAgents(params) {
|
|
130
|
+
return tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
131
|
+
var _a;
|
|
132
|
+
const { serverUrl, token } = params;
|
|
133
|
+
// Get user credentials first
|
|
134
|
+
const user = yield this.getPieceUser({ serverUrl, token });
|
|
135
|
+
if (!user.skaiApiKey) {
|
|
136
|
+
throw new Error('SKAI API key not configured');
|
|
137
|
+
}
|
|
138
|
+
try {
|
|
139
|
+
// Use SKAI SDK with proper configuration
|
|
140
|
+
const skaiClient = yield this.createSkaiClient({
|
|
141
|
+
serverUrl,
|
|
142
|
+
token,
|
|
143
|
+
userApiKey: user.skaiApiKey,
|
|
144
|
+
});
|
|
145
|
+
const agents = yield skaiClient.listAgents();
|
|
146
|
+
console.log(`✅ Found ${agents.length} SKAI agent(s)`);
|
|
147
|
+
// Map SDK agent format to our AgentInfo interface
|
|
148
|
+
return agents.map((agent) => {
|
|
149
|
+
var _a, _b;
|
|
150
|
+
return ({
|
|
151
|
+
id: agent.id,
|
|
152
|
+
name: agent.name,
|
|
153
|
+
description: agent.description,
|
|
154
|
+
logoUrl: agent.logoUrl,
|
|
155
|
+
type: agent.type,
|
|
156
|
+
isDraft: (_a = agent.isDraft) !== null && _a !== void 0 ? _a : false,
|
|
157
|
+
isMinted: (_b = agent.isMinted) !== null && _b !== void 0 ? _b : false,
|
|
158
|
+
});
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
catch (error) {
|
|
162
|
+
console.error('❌ Failed to list agents:', error);
|
|
163
|
+
if (error.response) {
|
|
164
|
+
const status = error.response.status;
|
|
165
|
+
const errorMessage = ((_a = error.response.body) === null || _a === void 0 ? void 0 : _a.message) || error.message;
|
|
166
|
+
throw new Error(`Failed to fetch agents (${status}): ${errorMessage}`);
|
|
167
|
+
}
|
|
168
|
+
throw new Error(`Failed to fetch agents: ${error.message || error}`);
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
},
|
|
172
|
+
};
|
|
173
|
+
//# sourceMappingURL=skai-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skai-client.js","sourceRoot":"","sources":["../../../../../../../../packages/pieces/custom/skai-adapters/src/lib/common/skai-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Platform-agnostic message format for SKAI Agents
|
|
3
|
+
* All platform-specific payloads are transformed to this structure
|
|
4
|
+
*/
|
|
5
|
+
export interface GenericMessage {
|
|
6
|
+
external_id: string;
|
|
7
|
+
platform: Platform;
|
|
8
|
+
message: string;
|
|
9
|
+
reference_id?: string;
|
|
10
|
+
unique_handle?: string;
|
|
11
|
+
media_urls?: string[];
|
|
12
|
+
media_types?: MediaType[];
|
|
13
|
+
sender_name?: string;
|
|
14
|
+
metadata?: Record<string, any>;
|
|
15
|
+
timestamp?: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Supported messaging platforms
|
|
19
|
+
*/
|
|
20
|
+
export declare enum Platform {
|
|
21
|
+
WHATSAPP = "whatsapp",
|
|
22
|
+
TELEGRAM = "telegram",
|
|
23
|
+
DISCORD = "discord",
|
|
24
|
+
SMS = "sms",
|
|
25
|
+
SLACK = "slack"
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Supported media types across platforms
|
|
29
|
+
*/
|
|
30
|
+
export declare enum MediaType {
|
|
31
|
+
IMAGE = "image",
|
|
32
|
+
VIDEO = "video",
|
|
33
|
+
AUDIO = "audio",
|
|
34
|
+
DOCUMENT = "document",
|
|
35
|
+
VOICE = "voice",
|
|
36
|
+
STICKER = "sticker"
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* SKAI Agents API response format
|
|
40
|
+
*/
|
|
41
|
+
export interface SkaiAgentResponse {
|
|
42
|
+
chat_history_id: string;
|
|
43
|
+
mode: string;
|
|
44
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MediaType = exports.Platform = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Supported messaging platforms
|
|
6
|
+
*/
|
|
7
|
+
var Platform;
|
|
8
|
+
(function (Platform) {
|
|
9
|
+
Platform["WHATSAPP"] = "whatsapp";
|
|
10
|
+
Platform["TELEGRAM"] = "telegram";
|
|
11
|
+
Platform["DISCORD"] = "discord";
|
|
12
|
+
Platform["SMS"] = "sms";
|
|
13
|
+
Platform["SLACK"] = "slack";
|
|
14
|
+
})(Platform || (exports.Platform = Platform = {}));
|
|
15
|
+
/**
|
|
16
|
+
* Supported media types across platforms
|
|
17
|
+
*/
|
|
18
|
+
var MediaType;
|
|
19
|
+
(function (MediaType) {
|
|
20
|
+
MediaType["IMAGE"] = "image";
|
|
21
|
+
MediaType["VIDEO"] = "video";
|
|
22
|
+
MediaType["AUDIO"] = "audio";
|
|
23
|
+
MediaType["DOCUMENT"] = "document";
|
|
24
|
+
MediaType["VOICE"] = "voice";
|
|
25
|
+
MediaType["STICKER"] = "sticker";
|
|
26
|
+
})(MediaType || (exports.MediaType = MediaType = {}));
|
|
27
|
+
//# sourceMappingURL=generic-message.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generic-message.js","sourceRoot":"","sources":["../../../../../../../../../packages/pieces/custom/skai-adapters/src/lib/common/types/generic-message.ts"],"names":[],"mappings":";;;AAoBA;;GAEG;AACH,IAAY,QAMX;AAND,WAAY,QAAQ;IACnB,iCAAqB,CAAA;IACrB,iCAAqB,CAAA;IACrB,+BAAmB,CAAA;IACnB,uBAAW,CAAA;IACX,2BAAe,CAAA;AAChB,CAAC,EANW,QAAQ,wBAAR,QAAQ,QAMnB;AAED;;GAEG;AACH,IAAY,SAOX;AAPD,WAAY,SAAS;IACpB,4BAAe,CAAA;IACf,4BAAe,CAAA;IACf,4BAAe,CAAA;IACf,kCAAqB,CAAA;IACrB,4BAAe,CAAA;IACf,gCAAmB,CAAA;AACpB,CAAC,EAPW,SAAS,yBAAT,SAAS,QAOpB"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { GenericMessage } from '../common/types/generic-message';
|
|
2
|
+
/**
|
|
3
|
+
* Telegram message format (from skai-telegram trigger output)
|
|
4
|
+
*/
|
|
5
|
+
export interface TelegramMessage {
|
|
6
|
+
chatId: number;
|
|
7
|
+
messageId: number;
|
|
8
|
+
text?: string;
|
|
9
|
+
from?: {
|
|
10
|
+
id: number;
|
|
11
|
+
first_name: string;
|
|
12
|
+
last_name?: string;
|
|
13
|
+
username?: string;
|
|
14
|
+
language_code?: string;
|
|
15
|
+
};
|
|
16
|
+
chat: {
|
|
17
|
+
id: number;
|
|
18
|
+
type: string;
|
|
19
|
+
title?: string;
|
|
20
|
+
username?: string;
|
|
21
|
+
};
|
|
22
|
+
date: number;
|
|
23
|
+
botUsername?: string;
|
|
24
|
+
botId?: number;
|
|
25
|
+
botName?: string;
|
|
26
|
+
media_urls?: string[];
|
|
27
|
+
media_types?: string[];
|
|
28
|
+
caption?: string;
|
|
29
|
+
photo?: Array<{
|
|
30
|
+
fileId: string;
|
|
31
|
+
fileUniqueId: string;
|
|
32
|
+
width: number;
|
|
33
|
+
height: number;
|
|
34
|
+
fileSize?: number;
|
|
35
|
+
}>;
|
|
36
|
+
video?: {
|
|
37
|
+
fileId: string;
|
|
38
|
+
fileUniqueId: string;
|
|
39
|
+
width: number;
|
|
40
|
+
height: number;
|
|
41
|
+
duration: number;
|
|
42
|
+
mimeType?: string;
|
|
43
|
+
fileSize?: number;
|
|
44
|
+
};
|
|
45
|
+
audio?: {
|
|
46
|
+
fileId: string;
|
|
47
|
+
fileUniqueId: string;
|
|
48
|
+
duration: number;
|
|
49
|
+
performer?: string;
|
|
50
|
+
title?: string;
|
|
51
|
+
mimeType?: string;
|
|
52
|
+
fileSize?: number;
|
|
53
|
+
};
|
|
54
|
+
document?: {
|
|
55
|
+
fileId: string;
|
|
56
|
+
fileUniqueId: string;
|
|
57
|
+
fileName?: string;
|
|
58
|
+
mimeType?: string;
|
|
59
|
+
fileSize?: number;
|
|
60
|
+
};
|
|
61
|
+
voice?: {
|
|
62
|
+
fileId: string;
|
|
63
|
+
fileUniqueId: string;
|
|
64
|
+
duration: number;
|
|
65
|
+
mimeType?: string;
|
|
66
|
+
fileSize?: number;
|
|
67
|
+
};
|
|
68
|
+
rawPayload?: any;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Transform Telegram message to generic format for SKAI processing
|
|
72
|
+
*/
|
|
73
|
+
export declare class TelegramTransformer {
|
|
74
|
+
/**
|
|
75
|
+
* Transform Telegram message to GenericMessage
|
|
76
|
+
*/
|
|
77
|
+
transform(telegramMessage: TelegramMessage): GenericMessage;
|
|
78
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.TelegramTransformer = void 0;
|
|
4
|
+
const generic_message_1 = require("../common/types/generic-message");
|
|
5
|
+
/**
|
|
6
|
+
* Transform Telegram message to generic format for SKAI processing
|
|
7
|
+
*/
|
|
8
|
+
class TelegramTransformer {
|
|
9
|
+
/**
|
|
10
|
+
* Transform Telegram message to GenericMessage
|
|
11
|
+
*/
|
|
12
|
+
transform(telegramMessage) {
|
|
13
|
+
const genericMessage = {
|
|
14
|
+
external_id: telegramMessage.chatId.toString(),
|
|
15
|
+
reference_id: telegramMessage.messageId.toString(),
|
|
16
|
+
platform: generic_message_1.Platform.TELEGRAM,
|
|
17
|
+
message: telegramMessage.text || '',
|
|
18
|
+
timestamp: new Date(telegramMessage.date * 1000).toISOString(),
|
|
19
|
+
unique_handle: telegramMessage.botUsername,
|
|
20
|
+
metadata: {},
|
|
21
|
+
};
|
|
22
|
+
// Add sender information
|
|
23
|
+
if (telegramMessage.from) {
|
|
24
|
+
const fullName = [
|
|
25
|
+
telegramMessage.from.first_name,
|
|
26
|
+
telegramMessage.from.last_name,
|
|
27
|
+
]
|
|
28
|
+
.filter(Boolean)
|
|
29
|
+
.join(' ');
|
|
30
|
+
genericMessage.sender_name = fullName || 'Unknown';
|
|
31
|
+
}
|
|
32
|
+
// Add media URLs and types if present
|
|
33
|
+
if (telegramMessage.media_urls && telegramMessage.media_urls.length > 0) {
|
|
34
|
+
genericMessage.media_urls = telegramMessage.media_urls;
|
|
35
|
+
// Map media types
|
|
36
|
+
if (telegramMessage.media_types && telegramMessage.media_types.length > 0) {
|
|
37
|
+
genericMessage.media_types = telegramMessage.media_types.map((type) => {
|
|
38
|
+
switch (type.toLowerCase()) {
|
|
39
|
+
case 'image':
|
|
40
|
+
return generic_message_1.MediaType.IMAGE;
|
|
41
|
+
case 'video':
|
|
42
|
+
return generic_message_1.MediaType.VIDEO;
|
|
43
|
+
case 'audio':
|
|
44
|
+
case 'voice':
|
|
45
|
+
return generic_message_1.MediaType.AUDIO;
|
|
46
|
+
case 'document':
|
|
47
|
+
return generic_message_1.MediaType.DOCUMENT;
|
|
48
|
+
default:
|
|
49
|
+
return generic_message_1.MediaType.DOCUMENT;
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
// Store metadata
|
|
55
|
+
if (genericMessage.metadata) {
|
|
56
|
+
genericMessage.metadata['chat'] = telegramMessage.chat;
|
|
57
|
+
if (telegramMessage.caption) {
|
|
58
|
+
genericMessage.metadata['caption'] = telegramMessage.caption;
|
|
59
|
+
}
|
|
60
|
+
// Add additional bot details to metadata
|
|
61
|
+
if (telegramMessage.botId) {
|
|
62
|
+
genericMessage.metadata['bot_id'] = telegramMessage.botId;
|
|
63
|
+
}
|
|
64
|
+
if (telegramMessage.botName) {
|
|
65
|
+
genericMessage.metadata['bot_name'] = telegramMessage.botName;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return genericMessage;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
exports.TelegramTransformer = TelegramTransformer;
|
|
72
|
+
//# sourceMappingURL=telegram.transformer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telegram.transformer.js","sourceRoot":"","sources":["../../../../../../../../packages/pieces/custom/skai-adapters/src/lib/transformers/telegram.transformer.ts"],"names":[],"mappings":";;;AAAA,qEAAsF;AAuEtF;;GAEG;AACH,MAAa,mBAAmB;IAC/B;;OAEG;IACH,SAAS,CAAC,eAAgC;QACzC,MAAM,cAAc,GAAmB;YACtC,WAAW,EAAE,eAAe,CAAC,MAAM,CAAC,QAAQ,EAAE;YAC9C,YAAY,EAAE,eAAe,CAAC,SAAS,CAAC,QAAQ,EAAE;YAClD,QAAQ,EAAE,0BAAQ,CAAC,QAAQ;YAC3B,OAAO,EAAE,eAAe,CAAC,IAAI,IAAI,EAAE;YACnC,SAAS,EAAE,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE;YAC9D,aAAa,EAAE,eAAe,CAAC,WAAW;YAC1C,QAAQ,EAAE,EAAE;SACZ,CAAC;QAEF,yBAAyB;QACzB,IAAI,eAAe,CAAC,IAAI,EAAE,CAAC;YAC1B,MAAM,QAAQ,GAAG;gBAChB,eAAe,CAAC,IAAI,CAAC,UAAU;gBAC/B,eAAe,CAAC,IAAI,CAAC,SAAS;aAC9B;iBACC,MAAM,CAAC,OAAO,CAAC;iBACf,IAAI,CAAC,GAAG,CAAC,CAAC;YACZ,cAAc,CAAC,WAAW,GAAG,QAAQ,IAAI,SAAS,CAAC;QACpD,CAAC;QAED,sCAAsC;QACtC,IAAI,eAAe,CAAC,UAAU,IAAI,eAAe,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzE,cAAc,CAAC,UAAU,GAAG,eAAe,CAAC,UAAU,CAAC;YAEvD,kBAAkB;YAClB,IAAI,eAAe,CAAC,WAAW,IAAI,eAAe,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC3E,cAAc,CAAC,WAAW,GAAG,eAAe,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAY,EAAE,EAAE;oBAC7E,QAAQ,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;wBAC5B,KAAK,OAAO;4BACX,OAAO,2BAAS,CAAC,KAAK,CAAC;wBACxB,KAAK,OAAO;4BACX,OAAO,2BAAS,CAAC,KAAK,CAAC;wBACxB,KAAK,OAAO,CAAC;wBACb,KAAK,OAAO;4BACX,OAAO,2BAAS,CAAC,KAAK,CAAC;wBACxB,KAAK,UAAU;4BACd,OAAO,2BAAS,CAAC,QAAQ,CAAC;wBAC3B;4BACC,OAAO,2BAAS,CAAC,QAAQ,CAAC;oBAC5B,CAAC;gBACF,CAAC,CAAC,CAAC;YACJ,CAAC;QACF,CAAC;QAED,iBAAiB;QACjB,IAAI,cAAc,CAAC,QAAQ,EAAE,CAAC;YAC7B,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,eAAe,CAAC,IAAI,CAAC;YACvD,IAAI,eAAe,CAAC,OAAO,EAAE,CAAC;gBAC7B,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,eAAe,CAAC,OAAO,CAAC;YAC9D,CAAC;YACD,yCAAyC;YACzC,IAAI,eAAe,CAAC,KAAK,EAAE,CAAC;gBAC3B,cAAc,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC;YAC3D,CAAC;YACD,IAAI,eAAe,CAAC,OAAO,EAAE,CAAC;gBAC7B,cAAc,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,eAAe,CAAC,OAAO,CAAC;YAC/D,CAAC;QACF,CAAC;QAED,OAAO,cAAc,CAAC;IACvB,CAAC;CAED;AApED,kDAoEC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { GenericMessage } from '../common/types/generic-message';
|
|
2
|
+
/**
|
|
3
|
+
* WhatsApp message structure (output from WhatsApp piece trigger)
|
|
4
|
+
*/
|
|
5
|
+
export interface WhatsAppMessage {
|
|
6
|
+
from: string;
|
|
7
|
+
messageId: string;
|
|
8
|
+
timestamp: string;
|
|
9
|
+
type: string;
|
|
10
|
+
text?: string;
|
|
11
|
+
senderName?: string;
|
|
12
|
+
accountPhoneNumber?: string;
|
|
13
|
+
phoneNumberId?: string;
|
|
14
|
+
image?: {
|
|
15
|
+
id: string;
|
|
16
|
+
url?: string;
|
|
17
|
+
mimeType?: string;
|
|
18
|
+
sha256?: string;
|
|
19
|
+
caption?: string;
|
|
20
|
+
fileSize?: number;
|
|
21
|
+
};
|
|
22
|
+
video?: {
|
|
23
|
+
id: string;
|
|
24
|
+
url?: string;
|
|
25
|
+
mimeType?: string;
|
|
26
|
+
sha256?: string;
|
|
27
|
+
caption?: string;
|
|
28
|
+
fileSize?: number;
|
|
29
|
+
};
|
|
30
|
+
audio?: {
|
|
31
|
+
id: string;
|
|
32
|
+
url?: string;
|
|
33
|
+
mimeType?: string;
|
|
34
|
+
sha256?: string;
|
|
35
|
+
fileSize?: number;
|
|
36
|
+
};
|
|
37
|
+
document?: {
|
|
38
|
+
id: string;
|
|
39
|
+
url?: string;
|
|
40
|
+
mimeType?: string;
|
|
41
|
+
sha256?: string;
|
|
42
|
+
filename?: string;
|
|
43
|
+
caption?: string;
|
|
44
|
+
fileSize?: number;
|
|
45
|
+
};
|
|
46
|
+
voice?: {
|
|
47
|
+
id: string;
|
|
48
|
+
url?: string;
|
|
49
|
+
mimeType?: string;
|
|
50
|
+
sha256?: string;
|
|
51
|
+
fileSize?: number;
|
|
52
|
+
};
|
|
53
|
+
rawPayload?: any;
|
|
54
|
+
}
|
|
55
|
+
export declare class WhatsAppTransformer {
|
|
56
|
+
/**
|
|
57
|
+
* Transform WhatsApp message to GenericMessage format
|
|
58
|
+
*/
|
|
59
|
+
transform(whatsappMessage: WhatsAppMessage): GenericMessage;
|
|
60
|
+
/**
|
|
61
|
+
* Extract text message from WhatsApp message
|
|
62
|
+
*/
|
|
63
|
+
private extractMessage;
|
|
64
|
+
/**
|
|
65
|
+
* Extract media information from WhatsApp message
|
|
66
|
+
* Uses downloadable URLs fetched from WhatsApp API
|
|
67
|
+
*/
|
|
68
|
+
private extractMedia;
|
|
69
|
+
/**
|
|
70
|
+
* Convert Unix timestamp to ISO 8601 format
|
|
71
|
+
*/
|
|
72
|
+
private convertTimestamp;
|
|
73
|
+
}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.WhatsAppTransformer = void 0;
|
|
4
|
+
const generic_message_1 = require("../common/types/generic-message");
|
|
5
|
+
class WhatsAppTransformer {
|
|
6
|
+
/**
|
|
7
|
+
* Transform WhatsApp message to GenericMessage format
|
|
8
|
+
*/
|
|
9
|
+
transform(whatsappMessage) {
|
|
10
|
+
if (!(whatsappMessage === null || whatsappMessage === void 0 ? void 0 : whatsappMessage.from) || !(whatsappMessage === null || whatsappMessage === void 0 ? void 0 : whatsappMessage.messageId)) {
|
|
11
|
+
throw new Error('Invalid WhatsApp message: missing required fields (from, messageId)');
|
|
12
|
+
}
|
|
13
|
+
const genericMessage = {
|
|
14
|
+
external_id: whatsappMessage.from,
|
|
15
|
+
reference_id: whatsappMessage.messageId,
|
|
16
|
+
platform: generic_message_1.Platform.WHATSAPP,
|
|
17
|
+
message: this.extractMessage(whatsappMessage),
|
|
18
|
+
timestamp: this.convertTimestamp(whatsappMessage.timestamp),
|
|
19
|
+
sender_name: whatsappMessage.senderName,
|
|
20
|
+
unique_handle: whatsappMessage.phoneNumberId,
|
|
21
|
+
metadata: Object.assign({ type: whatsappMessage.type, timestamp: whatsappMessage.timestamp }, (whatsappMessage.accountPhoneNumber && {
|
|
22
|
+
account_phone_number: whatsappMessage.accountPhoneNumber,
|
|
23
|
+
})),
|
|
24
|
+
};
|
|
25
|
+
// Handle media attachments
|
|
26
|
+
const media = this.extractMedia(whatsappMessage);
|
|
27
|
+
if (media) {
|
|
28
|
+
genericMessage.media_urls = media.urls;
|
|
29
|
+
genericMessage.media_types = media.types;
|
|
30
|
+
// Ensure metadata exists before adding media info
|
|
31
|
+
if (!genericMessage.metadata) {
|
|
32
|
+
genericMessage.metadata = {};
|
|
33
|
+
}
|
|
34
|
+
// Add media metadata using index signature access
|
|
35
|
+
if (whatsappMessage.image) {
|
|
36
|
+
genericMessage.metadata['image'] = whatsappMessage.image;
|
|
37
|
+
}
|
|
38
|
+
if (whatsappMessage.video) {
|
|
39
|
+
genericMessage.metadata['video'] = whatsappMessage.video;
|
|
40
|
+
}
|
|
41
|
+
if (whatsappMessage.audio) {
|
|
42
|
+
genericMessage.metadata['audio'] = whatsappMessage.audio;
|
|
43
|
+
}
|
|
44
|
+
if (whatsappMessage.document) {
|
|
45
|
+
genericMessage.metadata['document'] = whatsappMessage.document;
|
|
46
|
+
}
|
|
47
|
+
if (whatsappMessage.voice) {
|
|
48
|
+
genericMessage.metadata['voice'] = whatsappMessage.voice;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return genericMessage;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Extract text message from WhatsApp message
|
|
55
|
+
*/
|
|
56
|
+
extractMessage(message) {
|
|
57
|
+
var _a, _b, _c, _d;
|
|
58
|
+
// Priority: explicit text field, then captions, then type description
|
|
59
|
+
if (message.text) {
|
|
60
|
+
return message.text;
|
|
61
|
+
}
|
|
62
|
+
switch (message.type) {
|
|
63
|
+
case 'text':
|
|
64
|
+
return message.text || '';
|
|
65
|
+
case 'image':
|
|
66
|
+
return ((_a = message.image) === null || _a === void 0 ? void 0 : _a.caption) || '[Image]';
|
|
67
|
+
case 'video':
|
|
68
|
+
return ((_b = message.video) === null || _b === void 0 ? void 0 : _b.caption) || '[Video]';
|
|
69
|
+
case 'audio':
|
|
70
|
+
return '[Audio Message]';
|
|
71
|
+
case 'document':
|
|
72
|
+
return ((_c = message.document) === null || _c === void 0 ? void 0 : _c.caption) || `[Document${((_d = message.document) === null || _d === void 0 ? void 0 : _d.filename) ? ': ' + message.document.filename : ''}]`;
|
|
73
|
+
case 'voice':
|
|
74
|
+
return '[Voice Message]';
|
|
75
|
+
default:
|
|
76
|
+
return `[Unsupported Message Type: ${message.type}]`;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Extract media information from WhatsApp message
|
|
81
|
+
* Uses downloadable URLs fetched from WhatsApp API
|
|
82
|
+
*/
|
|
83
|
+
extractMedia(message) {
|
|
84
|
+
const media = {
|
|
85
|
+
urls: [],
|
|
86
|
+
types: [],
|
|
87
|
+
};
|
|
88
|
+
// Use downloadable URL if available, fallback to media ID
|
|
89
|
+
if (message.image) {
|
|
90
|
+
const url = message.image.url || message.image.id;
|
|
91
|
+
if (url) {
|
|
92
|
+
media.urls.push(url);
|
|
93
|
+
media.types.push(generic_message_1.MediaType.IMAGE);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
if (message.video) {
|
|
97
|
+
const url = message.video.url || message.video.id;
|
|
98
|
+
if (url) {
|
|
99
|
+
media.urls.push(url);
|
|
100
|
+
media.types.push(generic_message_1.MediaType.VIDEO);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
if (message.audio) {
|
|
104
|
+
const url = message.audio.url || message.audio.id;
|
|
105
|
+
if (url) {
|
|
106
|
+
media.urls.push(url);
|
|
107
|
+
media.types.push(generic_message_1.MediaType.AUDIO);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
if (message.document) {
|
|
111
|
+
const url = message.document.url || message.document.id;
|
|
112
|
+
if (url) {
|
|
113
|
+
media.urls.push(url);
|
|
114
|
+
media.types.push(generic_message_1.MediaType.DOCUMENT);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
if (message.voice) {
|
|
118
|
+
const url = message.voice.url || message.voice.id;
|
|
119
|
+
if (url) {
|
|
120
|
+
media.urls.push(url);
|
|
121
|
+
media.types.push(generic_message_1.MediaType.VOICE);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return media.urls.length > 0 ? media : null;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Convert Unix timestamp to ISO 8601 format
|
|
128
|
+
*/
|
|
129
|
+
convertTimestamp(unixTimestamp) {
|
|
130
|
+
const timestampMs = parseInt(unixTimestamp) * 1000;
|
|
131
|
+
const date = new Date(timestampMs);
|
|
132
|
+
return date.toISOString();
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
exports.WhatsAppTransformer = WhatsAppTransformer;
|
|
136
|
+
//# sourceMappingURL=whatsapp.transformer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"whatsapp.transformer.js","sourceRoot":"","sources":["../../../../../../../../packages/pieces/custom/skai-adapters/src/lib/transformers/whatsapp.transformer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { TriggerStrategy } from '@activepieces/pieces-framework';
|
|
2
|
+
/**
|
|
3
|
+
* SKAI Response Webhook Payload
|
|
4
|
+
* This is what the backend sends when processing is complete
|
|
5
|
+
*/
|
|
6
|
+
export interface SkaiWebhookPayload {
|
|
7
|
+
external_id: string;
|
|
8
|
+
platform: string;
|
|
9
|
+
message: string;
|
|
10
|
+
media_urls?: string[];
|
|
11
|
+
media_types?: string[];
|
|
12
|
+
reference_id?: string;
|
|
13
|
+
}
|
|
14
|
+
export declare const skaiResponseWebhook: import("@activepieces/pieces-framework").ITrigger<TriggerStrategy.WEBHOOK, import("@activepieces/pieces-framework").PieceAuthProperty, {
|
|
15
|
+
webhookUrl: import("dist/packages/pieces/community/framework/src/lib/property/input/markdown-property").MarkDownProperty;
|
|
16
|
+
}> | import("@activepieces/pieces-framework").ITrigger<TriggerStrategy.POLLING, import("@activepieces/pieces-framework").PieceAuthProperty, {
|
|
17
|
+
webhookUrl: import("dist/packages/pieces/community/framework/src/lib/property/input/markdown-property").MarkDownProperty;
|
|
18
|
+
}> | import("@activepieces/pieces-framework").ITrigger<TriggerStrategy.APP_WEBHOOK, import("@activepieces/pieces-framework").PieceAuthProperty, {
|
|
19
|
+
webhookUrl: import("dist/packages/pieces/community/framework/src/lib/property/input/markdown-property").MarkDownProperty;
|
|
20
|
+
}>;
|