core-services-sdk 1.3.46 → 1.3.47
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 +1 -1
- package/src/instant-messages/message-type.js +26 -26
- package/src/instant-messages/message-unified-mapper.js +24 -28
- package/tests/instant-messages/message-type.unit.test.js +50 -58
- package/tests/instant-messages/message-unified-mapper-telegram.unit.test.js +3 -3
- package/tests/instant-messages/message-unified-mapper-united.unit.test.js +1 -1
- package/tests/instant-messages/message-unified-mapper-whatsapp.unit.test.js +3 -3
- package/types/ids/generators.d.ts +1 -0
- package/types/ids/prefixes.d.ts +2 -0
- package/types/instant-messages/message-type.d.ts +17 -21
- package/types/instant-messages/message-unified-mapper.d.ts +11 -35
package/package.json
CHANGED
|
@@ -5,12 +5,12 @@ import { MESSAGE_MEDIA_TYPE, MESSAGE_TYPE } from './message-types.js'
|
|
|
5
5
|
* inside the platform-original message object.
|
|
6
6
|
*
|
|
7
7
|
* @param {string} mediaType - One of MESSAGE_MEDIA_TYPE.*
|
|
8
|
-
* @returns {(params: {
|
|
8
|
+
* @returns {(params: { imMessage: any }) => boolean}
|
|
9
9
|
*/
|
|
10
10
|
export const isItMediaType =
|
|
11
11
|
(mediaType) =>
|
|
12
|
-
({
|
|
13
|
-
const message =
|
|
12
|
+
({ imMessage }) => {
|
|
13
|
+
const message = imMessage?.message
|
|
14
14
|
if (!message || typeof message !== 'object') {
|
|
15
15
|
return false
|
|
16
16
|
}
|
|
@@ -23,14 +23,14 @@ export const isItMediaType =
|
|
|
23
23
|
*
|
|
24
24
|
* @function isMessageTypeof
|
|
25
25
|
* @param {string} typeOfMessage - One of the MESSAGE_TYPE.* values.
|
|
26
|
-
* @returns {(params: {
|
|
27
|
-
* A function that accepts an object containing `
|
|
26
|
+
* @returns {(params: { imMessage: any }) => boolean}
|
|
27
|
+
* A function that accepts an object containing `imMessage`
|
|
28
28
|
* and returns true if its `type` matches the expected type.
|
|
29
29
|
*/
|
|
30
30
|
export const isMessageTypeof =
|
|
31
31
|
(typeOfMessage) =>
|
|
32
|
-
({
|
|
33
|
-
const type =
|
|
32
|
+
({ imMessage }) => {
|
|
33
|
+
const type = imMessage?.type
|
|
34
34
|
return type === typeOfMessage
|
|
35
35
|
}
|
|
36
36
|
|
|
@@ -41,11 +41,11 @@ export const isMessageTypeof =
|
|
|
41
41
|
*
|
|
42
42
|
* @function isCallbackQuery
|
|
43
43
|
* @param {Object} params
|
|
44
|
-
* @param {Object} params.
|
|
44
|
+
* @param {Object} params.imMessage - Raw Telegram update
|
|
45
45
|
* @returns {boolean}
|
|
46
46
|
*/
|
|
47
|
-
export const isCallbackQuery = ({
|
|
48
|
-
return 'callback_query' in
|
|
47
|
+
export const isCallbackQuery = ({ imMessage }) => {
|
|
48
|
+
return 'callback_query' in imMessage
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
// Media-type detectors for each supported message detail section.
|
|
@@ -77,7 +77,7 @@ export const isItButtonClick = isMessageTypeof(MESSAGE_TYPE.BUTTON_CLICK)
|
|
|
77
77
|
*
|
|
78
78
|
* @function getTelegramMessageType
|
|
79
79
|
* @param {Object} params
|
|
80
|
-
* @param {Object} params.
|
|
80
|
+
* @param {Object} params.imMessage - Raw update object from Telegram or WhatsApp.
|
|
81
81
|
* For Telegram:
|
|
82
82
|
* - May contain: message, callback_query, poll, etc.
|
|
83
83
|
* For WhatsApp:
|
|
@@ -89,60 +89,60 @@ export const isItButtonClick = isMessageTypeof(MESSAGE_TYPE.BUTTON_CLICK)
|
|
|
89
89
|
* - MESSAGE_TYPE.UNKNOWN_MESSAGE_TYPE
|
|
90
90
|
*
|
|
91
91
|
* @example
|
|
92
|
-
* getTelegramMessageType({
|
|
92
|
+
* getTelegramMessageType({ imMessage: telegramUpdate })
|
|
93
93
|
* // → "text"
|
|
94
94
|
*
|
|
95
95
|
* @example
|
|
96
|
-
* getTelegramMessageType({
|
|
96
|
+
* getTelegramMessageType({ imMessage: whatsappPayload })
|
|
97
97
|
* // → "image"
|
|
98
98
|
*/
|
|
99
|
-
export const getTelegramMessageType = ({
|
|
99
|
+
export const getTelegramMessageType = ({ imMessage }) => {
|
|
100
100
|
switch (true) {
|
|
101
|
-
case isCallbackQuery({
|
|
101
|
+
case isCallbackQuery({ imMessage }): {
|
|
102
102
|
return MESSAGE_TYPE.BUTTON_CLICK
|
|
103
103
|
}
|
|
104
104
|
|
|
105
|
-
case isItFreeText({
|
|
105
|
+
case isItFreeText({ imMessage }): {
|
|
106
106
|
return MESSAGE_MEDIA_TYPE.TEXT
|
|
107
107
|
}
|
|
108
108
|
|
|
109
|
-
case isItVideo({
|
|
109
|
+
case isItVideo({ imMessage }): {
|
|
110
110
|
return MESSAGE_MEDIA_TYPE.VIDEO
|
|
111
111
|
}
|
|
112
112
|
|
|
113
|
-
case isItPhoto({
|
|
113
|
+
case isItPhoto({ imMessage }): {
|
|
114
114
|
return MESSAGE_MEDIA_TYPE.PHOTO
|
|
115
115
|
}
|
|
116
116
|
|
|
117
|
-
case isItDocument({
|
|
117
|
+
case isItDocument({ imMessage }): {
|
|
118
118
|
return MESSAGE_MEDIA_TYPE.DOCUMENT
|
|
119
119
|
}
|
|
120
120
|
|
|
121
|
-
case isItLocation({
|
|
121
|
+
case isItLocation({ imMessage }): {
|
|
122
122
|
return MESSAGE_MEDIA_TYPE.LOCATION
|
|
123
123
|
}
|
|
124
124
|
|
|
125
|
-
case isItVoice({
|
|
125
|
+
case isItVoice({ imMessage }): {
|
|
126
126
|
return MESSAGE_MEDIA_TYPE.VOICE
|
|
127
127
|
}
|
|
128
128
|
|
|
129
|
-
case isItVideoNote({
|
|
129
|
+
case isItVideoNote({ imMessage }): {
|
|
130
130
|
return MESSAGE_MEDIA_TYPE.VIDEO_NOTE
|
|
131
131
|
}
|
|
132
132
|
|
|
133
|
-
case isItPoll({
|
|
133
|
+
case isItPoll({ imMessage }): {
|
|
134
134
|
return MESSAGE_MEDIA_TYPE.POLL
|
|
135
135
|
}
|
|
136
136
|
|
|
137
|
-
case isItSticker({
|
|
137
|
+
case isItSticker({ imMessage }): {
|
|
138
138
|
return MESSAGE_MEDIA_TYPE.STICKER
|
|
139
139
|
}
|
|
140
140
|
|
|
141
|
-
case isItMessage({
|
|
141
|
+
case isItMessage({ imMessage }): {
|
|
142
142
|
return MESSAGE_MEDIA_TYPE.MESSAGE
|
|
143
143
|
}
|
|
144
144
|
|
|
145
|
-
case isItContact({
|
|
145
|
+
case isItContact({ imMessage }): {
|
|
146
146
|
return MESSAGE_MEDIA_TYPE.CONTACT
|
|
147
147
|
}
|
|
148
148
|
|
|
@@ -17,25 +17,25 @@ const INTERACTIVE_MAPPER = {
|
|
|
17
17
|
* and delegates to the correct internal resolver.
|
|
18
18
|
*
|
|
19
19
|
* @param {Object} params
|
|
20
|
-
* @param {Object} params.
|
|
20
|
+
* @param {Object} params.imMessage - Raw message payload
|
|
21
21
|
* @returns {string} Unified message type
|
|
22
22
|
*/
|
|
23
|
-
export const getMessageType = ({
|
|
24
|
-
if (!
|
|
23
|
+
export const getMessageType = ({ imMessage }) => {
|
|
24
|
+
if (!imMessage || typeof imMessage !== 'object') {
|
|
25
25
|
return MESSAGE_TYPE.UNKNOWN_MESSAGE_TYPE
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
// Telegram format
|
|
29
29
|
if (
|
|
30
|
-
'update_id' in
|
|
31
|
-
'message' in
|
|
32
|
-
'callback_query' in
|
|
30
|
+
'update_id' in imMessage ||
|
|
31
|
+
'message' in imMessage ||
|
|
32
|
+
'callback_query' in imMessage
|
|
33
33
|
) {
|
|
34
|
-
return getTelegramMessageType({
|
|
34
|
+
return getTelegramMessageType({ imMessage })
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
// WhatsApp format
|
|
38
|
-
const entry =
|
|
38
|
+
const entry = imMessage?.entry?.[0]
|
|
39
39
|
const change = entry?.changes?.[0]
|
|
40
40
|
const message = change?.value?.messages?.[0]
|
|
41
41
|
|
|
@@ -46,11 +46,11 @@ export const getMessageType = ({ originalMessage }) => {
|
|
|
46
46
|
return MESSAGE_TYPE.UNKNOWN_MESSAGE_TYPE
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
-
export const mapMessageTelegramBase = ({
|
|
50
|
-
const { callback_query, message, update_id } =
|
|
49
|
+
export const mapMessageTelegramBase = ({ imMessage }) => {
|
|
50
|
+
const { callback_query, message, update_id } = imMessage
|
|
51
51
|
const messageData = callback_query?.message || message
|
|
52
52
|
const { chat, date, from, message_id } = messageData
|
|
53
|
-
const type = getTelegramMessageType({
|
|
53
|
+
const type = getTelegramMessageType({ imMessage })
|
|
54
54
|
const typeMapped = MESSAGE_MEDIA_TYPE_MAPPER[type] || type
|
|
55
55
|
const { forward_date, forward_from } = messageData
|
|
56
56
|
const itIsForward = !!(forward_date && forward_from)
|
|
@@ -115,14 +115,14 @@ export const mapMessageWhatsAppContent = ({ message, type }) => {
|
|
|
115
115
|
}
|
|
116
116
|
}
|
|
117
117
|
|
|
118
|
-
export const mapMessageTelegram = ({
|
|
118
|
+
export const mapMessageTelegram = ({ imMessage }) => {
|
|
119
119
|
const { messageBase, type, message } = mapMessageTelegramBase({
|
|
120
|
-
|
|
120
|
+
imMessage,
|
|
121
121
|
})
|
|
122
122
|
const messageContent = mapMessageTelegramContent({
|
|
123
123
|
type,
|
|
124
124
|
message,
|
|
125
|
-
|
|
125
|
+
imMessage,
|
|
126
126
|
})
|
|
127
127
|
const messageMapped = { ...messageBase, ...messageContent }
|
|
128
128
|
return messageMapped
|
|
@@ -140,8 +140,8 @@ export const getWhatsAppMessageType = ({ message }) => {
|
|
|
140
140
|
}
|
|
141
141
|
}
|
|
142
142
|
|
|
143
|
-
export const extractReply = ({
|
|
144
|
-
const { callback_query } =
|
|
143
|
+
export const extractReply = ({ imMessage }) => {
|
|
144
|
+
const { callback_query } = imMessage
|
|
145
145
|
const { data: id, message } = callback_query
|
|
146
146
|
const {
|
|
147
147
|
reply_markup: { inline_keyboard },
|
|
@@ -155,17 +155,17 @@ export const extractReply = ({ originalMessage }) => {
|
|
|
155
155
|
|
|
156
156
|
return { id, title }
|
|
157
157
|
}
|
|
158
|
-
export const whatsappBaseExtraction = ({
|
|
158
|
+
export const whatsappBaseExtraction = ({ imMessage }) => {
|
|
159
159
|
const {
|
|
160
160
|
entry: [{ changes, id }],
|
|
161
|
-
} =
|
|
161
|
+
} = imMessage
|
|
162
162
|
const [change] = changes
|
|
163
163
|
const { field, value } = change
|
|
164
164
|
return { field, value, wbaid: id }
|
|
165
165
|
}
|
|
166
166
|
|
|
167
|
-
export const mapMessageWhatsAppBase = ({
|
|
168
|
-
const { field, value, wbaid } = whatsappBaseExtraction({
|
|
167
|
+
export const mapMessageWhatsAppBase = ({ imMessage }) => {
|
|
168
|
+
const { field, value, wbaid } = whatsappBaseExtraction({ imMessage })
|
|
169
169
|
const { [field]: messages, contacts } = value
|
|
170
170
|
const [message] = messages
|
|
171
171
|
const [contact] = contacts
|
|
@@ -190,11 +190,7 @@ export const mapMessageWhatsAppBase = ({ originalMessage }) => {
|
|
|
190
190
|
return { messageBase, message, contact, context }
|
|
191
191
|
}
|
|
192
192
|
|
|
193
|
-
export const mapMessageTelegramContent = ({
|
|
194
|
-
type,
|
|
195
|
-
message,
|
|
196
|
-
originalMessage,
|
|
197
|
-
}) => {
|
|
193
|
+
export const mapMessageTelegramContent = ({ type, message, imMessage }) => {
|
|
198
194
|
switch (type) {
|
|
199
195
|
case MESSAGE_MEDIA_TYPE.TEXT:
|
|
200
196
|
return {
|
|
@@ -222,7 +218,7 @@ export const mapMessageTelegramContent = ({
|
|
|
222
218
|
...(animation ? { attachment: 'animation' } : null),
|
|
223
219
|
}
|
|
224
220
|
case MESSAGE_MEDIA_TYPE.BUTTON_CLICK:
|
|
225
|
-
const reply = extractReply({
|
|
221
|
+
const reply = extractReply({ imMessage })
|
|
226
222
|
return {
|
|
227
223
|
reply,
|
|
228
224
|
}
|
|
@@ -231,9 +227,9 @@ export const mapMessageTelegramContent = ({
|
|
|
231
227
|
}
|
|
232
228
|
}
|
|
233
229
|
|
|
234
|
-
export const mapMessageWhatsApp = ({
|
|
230
|
+
export const mapMessageWhatsApp = ({ imMessage }) => {
|
|
235
231
|
const { messageBase, message, context } = mapMessageWhatsAppBase({
|
|
236
|
-
|
|
232
|
+
imMessage,
|
|
237
233
|
})
|
|
238
234
|
const { type } = messageBase
|
|
239
235
|
const messageContent = mapMessageWhatsAppContent({
|
|
@@ -23,18 +23,18 @@ describe('message-type helpers', () => {
|
|
|
23
23
|
const isPhoto = isItMediaType(MESSAGE_MEDIA_TYPE.PHOTO)
|
|
24
24
|
|
|
25
25
|
it('returns true when media type exists inside message', () => {
|
|
26
|
-
const
|
|
27
|
-
expect(isPhoto({
|
|
26
|
+
const imMessage = { message: { photo: [{}] } }
|
|
27
|
+
expect(isPhoto({ imMessage })).toBe(true)
|
|
28
28
|
})
|
|
29
29
|
|
|
30
30
|
it('returns false when media type does not exist', () => {
|
|
31
|
-
const
|
|
32
|
-
expect(isPhoto({
|
|
31
|
+
const imMessage = { message: { text: 'hi' } }
|
|
32
|
+
expect(isPhoto({ imMessage })).toBe(false)
|
|
33
33
|
})
|
|
34
34
|
|
|
35
35
|
it('returns false when message is missing', () => {
|
|
36
|
-
expect(isPhoto({
|
|
37
|
-
expect(isPhoto({
|
|
36
|
+
expect(isPhoto({ imMessage: {} })).toBe(false)
|
|
37
|
+
expect(isPhoto({ imMessage: null })).toBe(false)
|
|
38
38
|
})
|
|
39
39
|
})
|
|
40
40
|
|
|
@@ -42,150 +42,142 @@ describe('message-type helpers', () => {
|
|
|
42
42
|
const isButtonClick = isMessageTypeof(MESSAGE_TYPE.BUTTON_CLICK)
|
|
43
43
|
|
|
44
44
|
it('returns true when type matches', () => {
|
|
45
|
-
const
|
|
46
|
-
expect(isButtonClick({
|
|
45
|
+
const imMessage = { type: MESSAGE_TYPE.BUTTON_CLICK }
|
|
46
|
+
expect(isButtonClick({ imMessage })).toBe(true)
|
|
47
47
|
})
|
|
48
48
|
|
|
49
49
|
it('returns false when type differs', () => {
|
|
50
|
-
const
|
|
51
|
-
expect(isButtonClick({
|
|
50
|
+
const imMessage = { type: MESSAGE_MEDIA_TYPE.TEXT }
|
|
51
|
+
expect(isButtonClick({ imMessage })).toBe(false)
|
|
52
52
|
})
|
|
53
53
|
|
|
54
54
|
it('returns false on missing type', () => {
|
|
55
|
-
const
|
|
56
|
-
expect(isButtonClick({
|
|
55
|
+
const imMessage = {}
|
|
56
|
+
expect(isButtonClick({ imMessage })).toBe(false)
|
|
57
57
|
})
|
|
58
58
|
})
|
|
59
59
|
|
|
60
60
|
describe('isCallbackQuery', () => {
|
|
61
61
|
it('returns true for Telegram callback_query', () => {
|
|
62
|
-
const
|
|
63
|
-
expect(isCallbackQuery({
|
|
62
|
+
const imMessage = { callback_query: { data: '1' } }
|
|
63
|
+
expect(isCallbackQuery({ imMessage })).toBe(true)
|
|
64
64
|
})
|
|
65
65
|
|
|
66
66
|
it('returns false otherwise', () => {
|
|
67
|
-
expect(isCallbackQuery({
|
|
67
|
+
expect(isCallbackQuery({ imMessage: {} })).toBe(false)
|
|
68
68
|
})
|
|
69
69
|
})
|
|
70
70
|
|
|
71
71
|
describe('media helpers', () => {
|
|
72
72
|
it('isItFreeText works', () => {
|
|
73
|
-
expect(
|
|
74
|
-
|
|
75
|
-
)
|
|
73
|
+
expect(isItFreeText({ imMessage: { message: { text: 'hi' } } })).toBe(
|
|
74
|
+
true,
|
|
75
|
+
)
|
|
76
76
|
})
|
|
77
77
|
|
|
78
78
|
it('isItPhoto works', () => {
|
|
79
|
-
expect(isItPhoto({
|
|
80
|
-
true,
|
|
81
|
-
)
|
|
79
|
+
expect(isItPhoto({ imMessage: { message: { photo: [{}] } } })).toBe(true)
|
|
82
80
|
})
|
|
83
81
|
|
|
84
82
|
it('isItVideo works', () => {
|
|
85
|
-
expect(isItVideo({
|
|
86
|
-
true,
|
|
87
|
-
)
|
|
83
|
+
expect(isItVideo({ imMessage: { message: { video: {} } } })).toBe(true)
|
|
88
84
|
})
|
|
89
85
|
|
|
90
86
|
it('isItVoice works', () => {
|
|
91
|
-
expect(isItVoice({
|
|
92
|
-
true,
|
|
93
|
-
)
|
|
87
|
+
expect(isItVoice({ imMessage: { message: { voice: {} } } })).toBe(true)
|
|
94
88
|
})
|
|
95
89
|
|
|
96
90
|
it('isItDocument works', () => {
|
|
97
|
-
expect(
|
|
98
|
-
|
|
99
|
-
)
|
|
91
|
+
expect(isItDocument({ imMessage: { message: { document: {} } } })).toBe(
|
|
92
|
+
true,
|
|
93
|
+
)
|
|
100
94
|
})
|
|
101
95
|
|
|
102
96
|
it('isItContact works', () => {
|
|
103
|
-
expect(
|
|
104
|
-
|
|
105
|
-
)
|
|
97
|
+
expect(isItContact({ imMessage: { message: { contact: {} } } })).toBe(
|
|
98
|
+
true,
|
|
99
|
+
)
|
|
106
100
|
})
|
|
107
101
|
|
|
108
102
|
it('isItPoll works', () => {
|
|
109
|
-
expect(isItPoll({
|
|
110
|
-
true,
|
|
111
|
-
)
|
|
103
|
+
expect(isItPoll({ imMessage: { message: { poll: {} } } })).toBe(true)
|
|
112
104
|
})
|
|
113
105
|
})
|
|
114
106
|
|
|
115
107
|
describe('getTelegramMessageType', () => {
|
|
116
108
|
it('detects callback_query → BUTTON_CLICK', () => {
|
|
117
|
-
const
|
|
118
|
-
expect(getTelegramMessageType({
|
|
109
|
+
const imMessage = { callback_query: {} }
|
|
110
|
+
expect(getTelegramMessageType({ imMessage })).toBe(
|
|
119
111
|
MESSAGE_TYPE.BUTTON_CLICK,
|
|
120
112
|
)
|
|
121
113
|
})
|
|
122
114
|
|
|
123
115
|
it('detects text', () => {
|
|
124
|
-
const
|
|
125
|
-
expect(getTelegramMessageType({
|
|
116
|
+
const imMessage = { message: { text: 'hello' } }
|
|
117
|
+
expect(getTelegramMessageType({ imMessage })).toBe(
|
|
126
118
|
MESSAGE_MEDIA_TYPE.TEXT,
|
|
127
119
|
)
|
|
128
120
|
})
|
|
129
121
|
|
|
130
122
|
it('detects photo', () => {
|
|
131
|
-
const
|
|
132
|
-
expect(getTelegramMessageType({
|
|
123
|
+
const imMessage = { message: { photo: [{}] } }
|
|
124
|
+
expect(getTelegramMessageType({ imMessage })).toBe(
|
|
133
125
|
MESSAGE_MEDIA_TYPE.PHOTO,
|
|
134
126
|
)
|
|
135
127
|
})
|
|
136
128
|
|
|
137
129
|
it('detects video', () => {
|
|
138
|
-
const
|
|
139
|
-
expect(getTelegramMessageType({
|
|
130
|
+
const imMessage = { message: { video: {} } }
|
|
131
|
+
expect(getTelegramMessageType({ imMessage })).toBe(
|
|
140
132
|
MESSAGE_MEDIA_TYPE.VIDEO,
|
|
141
133
|
)
|
|
142
134
|
})
|
|
143
135
|
|
|
144
136
|
it('detects document', () => {
|
|
145
|
-
const
|
|
146
|
-
expect(getTelegramMessageType({
|
|
137
|
+
const imMessage = { message: { document: {} } }
|
|
138
|
+
expect(getTelegramMessageType({ imMessage })).toBe(
|
|
147
139
|
MESSAGE_MEDIA_TYPE.DOCUMENT,
|
|
148
140
|
)
|
|
149
141
|
})
|
|
150
142
|
|
|
151
143
|
it('detects location', () => {
|
|
152
|
-
const
|
|
153
|
-
expect(getTelegramMessageType({
|
|
144
|
+
const imMessage = { message: { location: {} } }
|
|
145
|
+
expect(getTelegramMessageType({ imMessage })).toBe(
|
|
154
146
|
MESSAGE_MEDIA_TYPE.LOCATION,
|
|
155
147
|
)
|
|
156
148
|
})
|
|
157
149
|
|
|
158
150
|
it('detects voice', () => {
|
|
159
|
-
const
|
|
160
|
-
expect(getTelegramMessageType({
|
|
151
|
+
const imMessage = { message: { voice: {} } }
|
|
152
|
+
expect(getTelegramMessageType({ imMessage })).toBe(
|
|
161
153
|
MESSAGE_MEDIA_TYPE.VOICE,
|
|
162
154
|
)
|
|
163
155
|
})
|
|
164
156
|
|
|
165
157
|
it('detects poll', () => {
|
|
166
|
-
const
|
|
167
|
-
expect(getTelegramMessageType({
|
|
158
|
+
const imMessage = { message: { poll: {} } }
|
|
159
|
+
expect(getTelegramMessageType({ imMessage })).toBe(
|
|
168
160
|
MESSAGE_MEDIA_TYPE.POLL,
|
|
169
161
|
)
|
|
170
162
|
})
|
|
171
163
|
|
|
172
164
|
it('detects sticker', () => {
|
|
173
|
-
const
|
|
174
|
-
expect(getTelegramMessageType({
|
|
165
|
+
const imMessage = { message: { sticker: {} } }
|
|
166
|
+
expect(getTelegramMessageType({ imMessage })).toBe(
|
|
175
167
|
MESSAGE_MEDIA_TYPE.STICKER,
|
|
176
168
|
)
|
|
177
169
|
})
|
|
178
170
|
|
|
179
171
|
it('detects contact', () => {
|
|
180
|
-
const
|
|
181
|
-
expect(getTelegramMessageType({
|
|
172
|
+
const imMessage = { message: { contact: {} } }
|
|
173
|
+
expect(getTelegramMessageType({ imMessage })).toBe(
|
|
182
174
|
MESSAGE_MEDIA_TYPE.CONTACT,
|
|
183
175
|
)
|
|
184
176
|
})
|
|
185
177
|
|
|
186
178
|
it('falls back to UNKNOWN_MESSAGE_TYPE', () => {
|
|
187
|
-
const
|
|
188
|
-
expect(getTelegramMessageType({
|
|
179
|
+
const imMessage = { message: { something_else: 'x' } }
|
|
180
|
+
expect(getTelegramMessageType({ imMessage })).toBe(
|
|
189
181
|
MESSAGE_TYPE.UNKNOWN_MESSAGE_TYPE,
|
|
190
182
|
)
|
|
191
183
|
})
|
|
@@ -31,10 +31,10 @@ describe('Telegram unified message mapper – all mock samples', () => {
|
|
|
31
31
|
|
|
32
32
|
describe(`Message mock: ${file}`, () => {
|
|
33
33
|
it('should map type correctly', () => {
|
|
34
|
-
const unifiedType = getTelegramMessageType({
|
|
34
|
+
const unifiedType = getTelegramMessageType({ imMessage: raw })
|
|
35
35
|
|
|
36
36
|
const unifiedMessage = mapMessageTelegram({
|
|
37
|
-
|
|
37
|
+
imMessage: raw,
|
|
38
38
|
})
|
|
39
39
|
|
|
40
40
|
expect(unifiedMessage).toBeTypeOf('object')
|
|
@@ -48,7 +48,7 @@ describe('Telegram unified message mapper – all mock samples', () => {
|
|
|
48
48
|
})
|
|
49
49
|
|
|
50
50
|
it('should include mandatory unified fields', () => {
|
|
51
|
-
const unified = mapMessageTelegram({
|
|
51
|
+
const unified = mapMessageTelegram({ imMessage: raw })
|
|
52
52
|
|
|
53
53
|
expect(unified).toHaveProperty('id')
|
|
54
54
|
expect(unified).toHaveProperty('chatId')
|
|
@@ -66,7 +66,7 @@ describe('Unified message mapper – all platforms, all mock samples', () => {
|
|
|
66
66
|
const mapper = messageUnifiedMapper[application]
|
|
67
67
|
expect(mapper).toBeTypeOf('function')
|
|
68
68
|
|
|
69
|
-
const unified = mapper({
|
|
69
|
+
const unified = mapper({ imMessage: raw })
|
|
70
70
|
|
|
71
71
|
expect(unified).toBeTypeOf('object')
|
|
72
72
|
expect(unified).toHaveProperty('id')
|
|
@@ -30,10 +30,10 @@ describe('WhatsApp unified message mapper – all mock samples', () => {
|
|
|
30
30
|
describe(`Message mock: ${file}`, () => {
|
|
31
31
|
it('should map type correctly', () => {
|
|
32
32
|
console.log(file)
|
|
33
|
-
const unifiedType = getMessageType({
|
|
33
|
+
const unifiedType = getMessageType({ imMessage: raw })
|
|
34
34
|
|
|
35
35
|
const unifiedMessage = mapMessageWhatsApp({
|
|
36
|
-
|
|
36
|
+
imMessage: raw,
|
|
37
37
|
})
|
|
38
38
|
|
|
39
39
|
expect(unifiedMessage).toBeTypeOf('object')
|
|
@@ -47,7 +47,7 @@ describe('WhatsApp unified message mapper – all mock samples', () => {
|
|
|
47
47
|
})
|
|
48
48
|
|
|
49
49
|
it('should include mandatory unified fields', () => {
|
|
50
|
-
const unified = mapMessageWhatsApp({
|
|
50
|
+
const unified = mapMessageWhatsApp({ imMessage: raw })
|
|
51
51
|
|
|
52
52
|
expect(unified).toHaveProperty('id')
|
|
53
53
|
expect(unified).toHaveProperty('chatId')
|
package/types/ids/prefixes.d.ts
CHANGED
|
@@ -1,28 +1,24 @@
|
|
|
1
1
|
export function isItMediaType(
|
|
2
2
|
mediaType: string,
|
|
3
|
-
): (params: {
|
|
3
|
+
): (params: { imMessage: any }) => boolean
|
|
4
4
|
export function isMessageTypeof(
|
|
5
5
|
typeOfMessage: string,
|
|
6
|
-
): (params: {
|
|
7
|
-
export function isCallbackQuery({
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
})
|
|
12
|
-
export const
|
|
13
|
-
export const
|
|
14
|
-
export const
|
|
15
|
-
export const
|
|
16
|
-
export const
|
|
17
|
-
export const
|
|
18
|
-
export const
|
|
19
|
-
export const
|
|
20
|
-
export const isItLocation: (params: { originalMessage: any }) => boolean
|
|
21
|
-
export const isItDocument: (params: { originalMessage: any }) => boolean
|
|
22
|
-
export const isItVideoNote: (params: { originalMessage: any }) => boolean
|
|
23
|
-
export const isItButtonClick: (params: { originalMessage: any }) => boolean
|
|
6
|
+
): (params: { imMessage: any }) => boolean
|
|
7
|
+
export function isCallbackQuery({ imMessage }: { imMessage: any }): boolean
|
|
8
|
+
export const isItPoll: (params: { imMessage: any }) => boolean
|
|
9
|
+
export const isItMessage: (params: { imMessage: any }) => boolean
|
|
10
|
+
export const isItVoice: (params: { imMessage: any }) => boolean
|
|
11
|
+
export const isItVideo: (params: { imMessage: any }) => boolean
|
|
12
|
+
export const isItPhoto: (params: { imMessage: any }) => boolean
|
|
13
|
+
export const isItFreeText: (params: { imMessage: any }) => boolean
|
|
14
|
+
export const isItSticker: (params: { imMessage: any }) => boolean
|
|
15
|
+
export const isItContact: (params: { imMessage: any }) => boolean
|
|
16
|
+
export const isItLocation: (params: { imMessage: any }) => boolean
|
|
17
|
+
export const isItDocument: (params: { imMessage: any }) => boolean
|
|
18
|
+
export const isItVideoNote: (params: { imMessage: any }) => boolean
|
|
19
|
+
export const isItButtonClick: (params: { imMessage: any }) => boolean
|
|
24
20
|
export function getTelegramMessageType({
|
|
25
|
-
|
|
21
|
+
imMessage,
|
|
26
22
|
}: {
|
|
27
|
-
|
|
23
|
+
imMessage: any
|
|
28
24
|
}): string
|
|
@@ -1,13 +1,5 @@
|
|
|
1
|
-
export function getMessageType({
|
|
2
|
-
|
|
3
|
-
}: {
|
|
4
|
-
originalMessage: any
|
|
5
|
-
}): string
|
|
6
|
-
export function mapMessageTelegramBase({
|
|
7
|
-
originalMessage,
|
|
8
|
-
}: {
|
|
9
|
-
originalMessage: any
|
|
10
|
-
}): {
|
|
1
|
+
export function getMessageType({ imMessage }: { imMessage: any }): string
|
|
2
|
+
export function mapMessageTelegramBase({ imMessage }: { imMessage: any }): {
|
|
11
3
|
messageBase: {
|
|
12
4
|
timestamp: string
|
|
13
5
|
forwardInfo: {
|
|
@@ -46,11 +38,7 @@ export function mapMessageWhatsAppContent({
|
|
|
46
38
|
reply: any
|
|
47
39
|
text?: undefined
|
|
48
40
|
}
|
|
49
|
-
export function mapMessageTelegram({
|
|
50
|
-
originalMessage,
|
|
51
|
-
}: {
|
|
52
|
-
originalMessage: any
|
|
53
|
-
}):
|
|
41
|
+
export function mapMessageTelegram({ imMessage }: { imMessage: any }):
|
|
54
42
|
| {
|
|
55
43
|
text: any
|
|
56
44
|
reply?: undefined
|
|
@@ -125,24 +113,16 @@ export function mapMessageTelegram({
|
|
|
125
113
|
itIsForward: boolean
|
|
126
114
|
}
|
|
127
115
|
export function getWhatsAppMessageType({ message }: { message: any }): any
|
|
128
|
-
export function extractReply({
|
|
116
|
+
export function extractReply({ imMessage }: { imMessage: any }): {
|
|
129
117
|
id: any
|
|
130
118
|
title: any
|
|
131
119
|
}
|
|
132
|
-
export function whatsappBaseExtraction({
|
|
133
|
-
originalMessage,
|
|
134
|
-
}: {
|
|
135
|
-
originalMessage: any
|
|
136
|
-
}): {
|
|
120
|
+
export function whatsappBaseExtraction({ imMessage }: { imMessage: any }): {
|
|
137
121
|
field: any
|
|
138
122
|
value: any
|
|
139
123
|
wbaid: any
|
|
140
124
|
}
|
|
141
|
-
export function mapMessageWhatsAppBase({
|
|
142
|
-
originalMessage,
|
|
143
|
-
}: {
|
|
144
|
-
originalMessage: any
|
|
145
|
-
}): {
|
|
125
|
+
export function mapMessageWhatsAppBase({ imMessage }: { imMessage: any }): {
|
|
146
126
|
messageBase: {
|
|
147
127
|
id: any
|
|
148
128
|
chatId: any
|
|
@@ -165,11 +145,11 @@ export function mapMessageWhatsAppBase({
|
|
|
165
145
|
export function mapMessageTelegramContent({
|
|
166
146
|
type,
|
|
167
147
|
message,
|
|
168
|
-
|
|
148
|
+
imMessage,
|
|
169
149
|
}: {
|
|
170
150
|
type: any
|
|
171
151
|
message: any
|
|
172
|
-
|
|
152
|
+
imMessage: any
|
|
173
153
|
}):
|
|
174
154
|
| {
|
|
175
155
|
text: any
|
|
@@ -193,11 +173,7 @@ export function mapMessageTelegramContent({
|
|
|
193
173
|
}
|
|
194
174
|
text?: undefined
|
|
195
175
|
}
|
|
196
|
-
export function mapMessageWhatsApp({
|
|
197
|
-
originalMessage,
|
|
198
|
-
}: {
|
|
199
|
-
originalMessage: any
|
|
200
|
-
}):
|
|
176
|
+
export function mapMessageWhatsApp({ imMessage }: { imMessage: any }):
|
|
201
177
|
| {
|
|
202
178
|
text: any
|
|
203
179
|
reply?: undefined
|
|
@@ -250,7 +226,7 @@ export function mapMessageWhatsApp({
|
|
|
250
226
|
timestamp: any
|
|
251
227
|
}
|
|
252
228
|
export const messageUnifiedMapper: {
|
|
253
|
-
[IM_PLATFORM.TELEGRAM]: ({
|
|
229
|
+
[IM_PLATFORM.TELEGRAM]: ({ imMessage }: { imMessage: any }) =>
|
|
254
230
|
| {
|
|
255
231
|
text: any
|
|
256
232
|
reply?: undefined
|
|
@@ -324,7 +300,7 @@ export const messageUnifiedMapper: {
|
|
|
324
300
|
chatter: any
|
|
325
301
|
itIsForward: boolean
|
|
326
302
|
}
|
|
327
|
-
[IM_PLATFORM.WHATSAPP]: ({
|
|
303
|
+
[IM_PLATFORM.WHATSAPP]: ({ imMessage }: { imMessage: any }) =>
|
|
328
304
|
| {
|
|
329
305
|
text: any
|
|
330
306
|
reply?: undefined
|