nodejs-insta-private-api-mqtt 1.0.0

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.
Files changed (210) hide show
  1. package/README.md +1650 -0
  2. package/dist/constants/constants.js +280 -0
  3. package/dist/constants/index.js +41 -0
  4. package/dist/core/client.js +243 -0
  5. package/dist/core/repository.js +7 -0
  6. package/dist/core/request.js +212 -0
  7. package/dist/core/state.js +1456 -0
  8. package/dist/core/utils.js +786 -0
  9. package/dist/downloadMedia.js +381 -0
  10. package/dist/errors/index.d.ts +16 -0
  11. package/dist/errors/index.js +30 -0
  12. package/dist/errors/index.js.map +1 -0
  13. package/dist/fbns/fbns.client.d.ts +32 -0
  14. package/dist/fbns/fbns.client.events.d.ts +41 -0
  15. package/dist/fbns/fbns.client.events.js +3 -0
  16. package/dist/fbns/fbns.client.events.js.map +1 -0
  17. package/dist/fbns/fbns.client.js +179 -0
  18. package/dist/fbns/fbns.client.js.map +1 -0
  19. package/dist/fbns/fbns.device-auth.d.ts +17 -0
  20. package/dist/fbns/fbns.device-auth.js +54 -0
  21. package/dist/fbns/fbns.device-auth.js.map +1 -0
  22. package/dist/fbns/fbns.types.d.ts +83 -0
  23. package/dist/fbns/fbns.types.js +3 -0
  24. package/dist/fbns/fbns.types.js.map +1 -0
  25. package/dist/fbns/fbns.utilities.d.ts +2 -0
  26. package/dist/fbns/fbns.utilities.js +79 -0
  27. package/dist/fbns/fbns.utilities.js.map +1 -0
  28. package/dist/fbns/index.d.ts +4 -0
  29. package/dist/fbns/index.js +21 -0
  30. package/dist/fbns/index.js.map +1 -0
  31. package/dist/index.js +39 -0
  32. package/dist/mqttot/index.d.ts +4 -0
  33. package/dist/mqttot/index.js +21 -0
  34. package/dist/mqttot/index.js.map +1 -0
  35. package/dist/mqttot/mqttot.client.d.ts +39 -0
  36. package/dist/mqttot/mqttot.client.js +120 -0
  37. package/dist/mqttot/mqttot.client.js.map +1 -0
  38. package/dist/mqttot/mqttot.connect.request.packet.d.ts +7 -0
  39. package/dist/mqttot/mqttot.connect.request.packet.js +9 -0
  40. package/dist/mqttot/mqttot.connect.request.packet.js.map +1 -0
  41. package/dist/mqttot/mqttot.connect.response.packet.d.ts +7 -0
  42. package/dist/mqttot/mqttot.connect.response.packet.js +24 -0
  43. package/dist/mqttot/mqttot.connect.response.packet.js.map +1 -0
  44. package/dist/mqttot/mqttot.connection.d.ts +57 -0
  45. package/dist/mqttot/mqttot.connection.js +56 -0
  46. package/dist/mqttot/mqttot.connection.js.map +1 -0
  47. package/dist/package.json +59 -0
  48. package/dist/realtime/commands/commands.d.ts +15 -0
  49. package/dist/realtime/commands/commands.js +21 -0
  50. package/dist/realtime/commands/commands.js.map +1 -0
  51. package/dist/realtime/commands/direct.commands.d.ts +75 -0
  52. package/dist/realtime/commands/direct.commands.js +186 -0
  53. package/dist/realtime/commands/direct.commands.js.map +1 -0
  54. package/dist/realtime/commands/enhanced.direct.commands.js +987 -0
  55. package/dist/realtime/commands/index.d.ts +2 -0
  56. package/dist/realtime/commands/index.js +19 -0
  57. package/dist/realtime/commands/index.js.map +1 -0
  58. package/dist/realtime/delta-sync.manager.js +293 -0
  59. package/dist/realtime/features/dm-sender.js +88 -0
  60. package/dist/realtime/features/error-handler.js +73 -0
  61. package/dist/realtime/features/gap-handler.js +61 -0
  62. package/dist/realtime/features/presence.manager.js +66 -0
  63. package/dist/realtime/index.js +30 -0
  64. package/dist/realtime/messages/app-presence.event.d.ts +9 -0
  65. package/dist/realtime/messages/app-presence.event.js +3 -0
  66. package/dist/realtime/messages/app-presence.event.js.map +1 -0
  67. package/dist/realtime/messages/index.d.ts +3 -0
  68. package/dist/realtime/messages/index.js +20 -0
  69. package/dist/realtime/messages/index.js.map +1 -0
  70. package/dist/realtime/messages/message-sync.message.d.ts +222 -0
  71. package/dist/realtime/messages/message-sync.message.js +43 -0
  72. package/dist/realtime/messages/message-sync.message.js.map +1 -0
  73. package/dist/realtime/messages/realtime-sub.direct.data.d.ts +11 -0
  74. package/dist/realtime/messages/realtime-sub.direct.data.js +3 -0
  75. package/dist/realtime/messages/realtime-sub.direct.data.js.map +1 -0
  76. package/dist/realtime/messages/thread-update.message.d.ts +68 -0
  77. package/dist/realtime/messages/thread-update.message.js +3 -0
  78. package/dist/realtime/messages/thread-update.message.js.map +1 -0
  79. package/dist/realtime/mixins/index.d.ts +3 -0
  80. package/dist/realtime/mixins/index.js +20 -0
  81. package/dist/realtime/mixins/index.js.map +1 -0
  82. package/dist/realtime/mixins/message-sync.mixin.d.ts +8 -0
  83. package/dist/realtime/mixins/message-sync.mixin.js +381 -0
  84. package/dist/realtime/mixins/message-sync.mixin.js.map +1 -0
  85. package/dist/realtime/mixins/mixin.d.ts +19 -0
  86. package/dist/realtime/mixins/mixin.js +41 -0
  87. package/dist/realtime/mixins/mixin.js.map +1 -0
  88. package/dist/realtime/mixins/presence-typing.mixin.js +33 -0
  89. package/dist/realtime/mixins/realtime-sub.mixin.d.ts +8 -0
  90. package/dist/realtime/mixins/realtime-sub.mixin.js +55 -0
  91. package/dist/realtime/mixins/realtime-sub.mixin.js.map +1 -0
  92. package/dist/realtime/parsers/graphql-parser.js +43 -0
  93. package/dist/realtime/parsers/graphql.parser.d.ts +15 -0
  94. package/dist/realtime/parsers/graphql.parser.js +22 -0
  95. package/dist/realtime/parsers/graphql.parser.js.map +1 -0
  96. package/dist/realtime/parsers/index.d.ts +6 -0
  97. package/dist/realtime/parsers/index.js +23 -0
  98. package/dist/realtime/parsers/index.js.map +1 -0
  99. package/dist/realtime/parsers/iris-parser.js +43 -0
  100. package/dist/realtime/parsers/iris.parser.d.ts +17 -0
  101. package/dist/realtime/parsers/iris.parser.js +10 -0
  102. package/dist/realtime/parsers/iris.parser.js.map +1 -0
  103. package/dist/realtime/parsers/json-parser.js +43 -0
  104. package/dist/realtime/parsers/json.parser.d.ts +6 -0
  105. package/dist/realtime/parsers/json.parser.js +10 -0
  106. package/dist/realtime/parsers/json.parser.js.map +1 -0
  107. package/dist/realtime/parsers/parser.d.ts +9 -0
  108. package/dist/realtime/parsers/parser.js +3 -0
  109. package/dist/realtime/parsers/parser.js.map +1 -0
  110. package/dist/realtime/parsers/region-hint-parser.js +43 -0
  111. package/dist/realtime/parsers/region-hint.parser.d.ts +12 -0
  112. package/dist/realtime/parsers/region-hint.parser.js +15 -0
  113. package/dist/realtime/parsers/region-hint.parser.js.map +1 -0
  114. package/dist/realtime/parsers/skywalker-parser.js +43 -0
  115. package/dist/realtime/parsers/skywalker.parser.d.ts +12 -0
  116. package/dist/realtime/parsers/skywalker.parser.js +15 -0
  117. package/dist/realtime/parsers/skywalker.parser.js.map +1 -0
  118. package/dist/realtime/parsers-advanced.js +158 -0
  119. package/dist/realtime/proto/common.proto +38 -0
  120. package/dist/realtime/proto/direct.proto +65 -0
  121. package/dist/realtime/proto/ig-messages.proto +83 -0
  122. package/dist/realtime/proto/iris.proto +188 -0
  123. package/dist/realtime/proto-parser.js +195 -0
  124. package/dist/realtime/protocols/iris.handshake.js +74 -0
  125. package/dist/realtime/protocols/proto-definitions.js +80 -0
  126. package/dist/realtime/protocols/skywalker.protocol.js +91 -0
  127. package/dist/realtime/realtime.client.events.js +3 -0
  128. package/dist/realtime/realtime.client.js +449 -0
  129. package/dist/realtime/realtime.service.js +462 -0
  130. package/dist/realtime/reconnect.manager.js +94 -0
  131. package/dist/realtime/session.manager.js +121 -0
  132. package/dist/realtime/subscriptions/graphql.subscription.d.ts +47 -0
  133. package/dist/realtime/subscriptions/graphql.subscription.js +99 -0
  134. package/dist/realtime/subscriptions/graphql.subscription.js.map +1 -0
  135. package/dist/realtime/subscriptions/index.d.ts +2 -0
  136. package/dist/realtime/subscriptions/index.js +19 -0
  137. package/dist/realtime/subscriptions/index.js.map +1 -0
  138. package/dist/realtime/subscriptions/skywalker.subscription.d.ts +4 -0
  139. package/dist/realtime/subscriptions/skywalker.subscription.js +13 -0
  140. package/dist/realtime/subscriptions/skywalker.subscription.js.map +1 -0
  141. package/dist/realtime/topic-map.js +71 -0
  142. package/dist/realtime/topic.js +80 -0
  143. package/dist/repositories/account.repository.js +261 -0
  144. package/dist/repositories/direct-thread.repository.js +247 -0
  145. package/dist/repositories/direct.repository.js +153 -0
  146. package/dist/repositories/feed.repository.js +233 -0
  147. package/dist/repositories/friendship.repository.js +190 -0
  148. package/dist/repositories/hashtag.repository.js +101 -0
  149. package/dist/repositories/highlights.repository.js +127 -0
  150. package/dist/repositories/location.repository.js +84 -0
  151. package/dist/repositories/media.repository.js +165 -0
  152. package/dist/repositories/story.repository.js +156 -0
  153. package/dist/repositories/upload.repository.js +167 -0
  154. package/dist/repositories/user.repository.js +94 -0
  155. package/dist/sendmedia/index.js +11 -0
  156. package/dist/sendmedia/sendFile.js +154 -0
  157. package/dist/sendmedia/sendPhoto.js +145 -0
  158. package/dist/sendmedia/uploadPhoto.js +175 -0
  159. package/dist/sendmedia/uploadfFile.js +264 -0
  160. package/dist/services/live.service.js +147 -0
  161. package/dist/services/search.service.js +116 -0
  162. package/dist/shared/index.js +35 -0
  163. package/dist/shared/shared.js +86 -0
  164. package/dist/thrift/index.d.ts +3 -0
  165. package/dist/thrift/index.js +20 -0
  166. package/dist/thrift/index.js.map +1 -0
  167. package/dist/thrift/thrift.d.ts +59 -0
  168. package/dist/thrift/thrift.js +101 -0
  169. package/dist/thrift/thrift.js.map +1 -0
  170. package/dist/thrift/thrift.reading.d.ts +41 -0
  171. package/dist/thrift/thrift.reading.js +327 -0
  172. package/dist/thrift/thrift.reading.js.map +1 -0
  173. package/dist/thrift/thrift.writing.d.ts +44 -0
  174. package/dist/thrift/thrift.writing.js +342 -0
  175. package/dist/thrift/thrift.writing.js.map +1 -0
  176. package/dist/types/index.js +285 -0
  177. package/dist/useMultiFileAuthState.js +437 -0
  178. package/dist/utils/helper-1.js +1 -0
  179. package/dist/utils/helper-10.js +1 -0
  180. package/dist/utils/helper-11.js +1 -0
  181. package/dist/utils/helper-12.js +1 -0
  182. package/dist/utils/helper-13.js +1 -0
  183. package/dist/utils/helper-14.js +1 -0
  184. package/dist/utils/helper-15.js +1 -0
  185. package/dist/utils/helper-16.js +1 -0
  186. package/dist/utils/helper-17.js +1 -0
  187. package/dist/utils/helper-18.js +1 -0
  188. package/dist/utils/helper-19.js +1 -0
  189. package/dist/utils/helper-2.js +1 -0
  190. package/dist/utils/helper-20.js +1 -0
  191. package/dist/utils/helper-21.js +1 -0
  192. package/dist/utils/helper-22.js +1 -0
  193. package/dist/utils/helper-23.js +1 -0
  194. package/dist/utils/helper-24.js +1 -0
  195. package/dist/utils/helper-25.js +1 -0
  196. package/dist/utils/helper-26.js +1 -0
  197. package/dist/utils/helper-27.js +1 -0
  198. package/dist/utils/helper-28.js +1 -0
  199. package/dist/utils/helper-29.js +1 -0
  200. package/dist/utils/helper-3.js +1 -0
  201. package/dist/utils/helper-30.js +1 -0
  202. package/dist/utils/helper-4.js +1 -0
  203. package/dist/utils/helper-5.js +1 -0
  204. package/dist/utils/helper-6.js +1 -0
  205. package/dist/utils/helper-7.js +1 -0
  206. package/dist/utils/helper-8.js +1 -0
  207. package/dist/utils/helper-9.js +1 -0
  208. package/dist/utils/index.js +280 -0
  209. package/examples/listen-to-messages.js +86 -0
  210. package/package.json +79 -0
@@ -0,0 +1,381 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MessageSyncMixin = void 0;
4
+ const mixin_1 = require("./mixin");
5
+ const constants_1 = require("../../constants");
6
+ const shared_1 = require("../../shared");
7
+ const mqtts_1 = require("mqtts");
8
+
9
+ class MessageSyncMixin extends mixin_1.Mixin {
10
+ constructor() {
11
+ super();
12
+ this.userCache = new Map();
13
+ this.pendingUserFetches = new Map();
14
+ }
15
+
16
+ apply(client) {
17
+ console.log(`\n[MESSAGE_SYNC MIXIN] Applying mixin...`);
18
+
19
+ (0, mixin_1.hook)(client, 'connect', {
20
+ post: async () => {
21
+ console.log(`[MESSAGE_SYNC] Post-connect hook called`);
22
+
23
+ let retries = 0;
24
+ while (!client.mqtt && retries < 50) {
25
+ await new Promise(r => setTimeout(r, 100));
26
+ retries++;
27
+ }
28
+ if (!client.mqtt) {
29
+ throw new mqtts_1.IllegalStateError('No mqtt client created after retries');
30
+ }
31
+
32
+ console.log(`[MESSAGE_SYNC] MQTT ready, registering listen() on topic 146 (MESSAGE_SYNC)`);
33
+
34
+ if (client.mqtt.listen) {
35
+ console.log(`[MESSAGE_SYNC] mqtt.listen() method found, registering callback...`);
36
+ client.mqtt.listen({
37
+ topic: constants_1.Topics.MESSAGE_SYNC.id,
38
+ transformer: async ({ payload }) => {
39
+ const parsed = constants_1.Topics.MESSAGE_SYNC.parser
40
+ .parseMessage(constants_1.Topics.MESSAGE_SYNC, await (0, shared_1.tryUnzipAsync)(payload))
41
+ .map(msg => msg.data);
42
+ return parsed;
43
+ },
44
+ }, data => {
45
+ this.handleMessageSync(client, data);
46
+ });
47
+ } else {
48
+ console.log(`[MESSAGE_SYNC] mqtt.listen() NOT FOUND - using fallback 'receive' event`);
49
+ client.on('receive', (topic, messages) => {
50
+ if (topic.id === constants_1.Topics.MESSAGE_SYNC.id) {
51
+ const data = messages.map(m => m.data);
52
+ this.handleMessageSync(client, data);
53
+ }
54
+ });
55
+ }
56
+ },
57
+ });
58
+ }
59
+
60
+ async getUsernameFromId(client, userId) {
61
+ if (!userId) return null;
62
+
63
+ const userIdStr = String(userId);
64
+
65
+ if (this.userCache.has(userIdStr)) {
66
+ return this.userCache.get(userIdStr);
67
+ }
68
+
69
+ if (this.pendingUserFetches.has(userIdStr)) {
70
+ return await this.pendingUserFetches.get(userIdStr);
71
+ }
72
+
73
+ const fetchPromise = (async () => {
74
+ try {
75
+ if (client.ig && client.ig.user && client.ig.user.info) {
76
+ const userInfo = await client.ig.user.info(userIdStr);
77
+ if (userInfo && userInfo.username) {
78
+ this.userCache.set(userIdStr, userInfo.username);
79
+ return userInfo.username;
80
+ }
81
+ }
82
+ } catch (err) {
83
+ // Silently fail - will use ID instead
84
+ }
85
+ return null;
86
+ })();
87
+
88
+ this.pendingUserFetches.set(userIdStr, fetchPromise);
89
+ const result = await fetchPromise;
90
+ this.pendingUserFetches.delete(userIdStr);
91
+
92
+ return result;
93
+ }
94
+
95
+ extractMessageContent(msgValue, itemType) {
96
+ let content = '';
97
+ let mediaInfo = '';
98
+
99
+ switch (itemType) {
100
+ case 'text':
101
+ content = msgValue.text || '';
102
+ break;
103
+
104
+ case 'media':
105
+ case 'raven_media':
106
+ content = '[PHOTO/VIDEO]';
107
+ if (msgValue.media) {
108
+ const media = msgValue.media;
109
+ if (media.image_versions2) {
110
+ content = '[PHOTO]';
111
+ mediaInfo = ` URL: ${media.image_versions2?.candidates?.[0]?.url || 'N/A'}`;
112
+ } else if (media.video_versions) {
113
+ content = '[VIDEO]';
114
+ mediaInfo = ` Duration: ${media.video_duration || 'N/A'}s`;
115
+ }
116
+ }
117
+ if (msgValue.visual_media) {
118
+ content = '[DISAPPEARING MEDIA]';
119
+ }
120
+ break;
121
+
122
+ case 'voice_media':
123
+ content = '[VOICE MESSAGE]';
124
+ if (msgValue.voice_media?.media?.audio) {
125
+ const duration = msgValue.voice_media.media.audio.duration || 0;
126
+ content = `[VOICE MESSAGE] Duration: ${duration}ms`;
127
+ }
128
+ break;
129
+
130
+ case 'animated_media':
131
+ content = '[GIF]';
132
+ if (msgValue.animated_media?.images?.fixed_height?.url) {
133
+ mediaInfo = ` URL: ${msgValue.animated_media.images.fixed_height.url}`;
134
+ }
135
+ break;
136
+
137
+ case 'media_share':
138
+ content = '[SHARED POST]';
139
+ if (msgValue.media_share) {
140
+ const share = msgValue.media_share;
141
+ content = `[SHARED POST] From: @${share.user?.username || 'unknown'}`;
142
+ if (share.caption?.text) {
143
+ content += ` Caption: "${share.caption.text.substring(0, 50)}..."`;
144
+ }
145
+ }
146
+ break;
147
+
148
+ case 'reel_share':
149
+ content = '[SHARED REEL]';
150
+ if (msgValue.reel_share) {
151
+ const reel = msgValue.reel_share;
152
+ content = `[SHARED REEL] From: @${reel.media?.user?.username || 'unknown'}`;
153
+ if (reel.text) {
154
+ content += ` Text: "${reel.text}"`;
155
+ }
156
+ }
157
+ break;
158
+
159
+ case 'story_share':
160
+ content = '[SHARED STORY]';
161
+ if (msgValue.story_share) {
162
+ const story = msgValue.story_share;
163
+ content = `[SHARED STORY] From: @${story.media?.user?.username || 'unknown'}`;
164
+ if (story.message) {
165
+ content += ` Message: "${story.message}"`;
166
+ }
167
+ }
168
+ break;
169
+
170
+ case 'felix_share':
171
+ content = '[SHARED IGTV/VIDEO]';
172
+ if (msgValue.felix_share?.video) {
173
+ content = `[SHARED IGTV] Title: "${msgValue.felix_share.video.title || 'N/A'}"`;
174
+ }
175
+ break;
176
+
177
+ case 'clip':
178
+ content = '[SHARED CLIP]';
179
+ if (msgValue.clip?.clip) {
180
+ content = `[SHARED CLIP] From: @${msgValue.clip.clip.user?.username || 'unknown'}`;
181
+ }
182
+ break;
183
+
184
+ case 'profile':
185
+ content = '[SHARED PROFILE]';
186
+ if (msgValue.profile) {
187
+ content = `[SHARED PROFILE] @${msgValue.profile.username || 'unknown'}`;
188
+ }
189
+ break;
190
+
191
+ case 'location':
192
+ content = '[LOCATION]';
193
+ if (msgValue.location) {
194
+ content = `[LOCATION] ${msgValue.location.name || msgValue.location.address || 'Unknown location'}`;
195
+ }
196
+ break;
197
+
198
+ case 'hashtag':
199
+ content = '[HASHTAG]';
200
+ if (msgValue.hashtag) {
201
+ content = `[HASHTAG] #${msgValue.hashtag.name || 'unknown'}`;
202
+ }
203
+ break;
204
+
205
+ case 'like':
206
+ content = '[LIKE]';
207
+ break;
208
+
209
+ case 'link':
210
+ content = '[LINK]';
211
+ if (msgValue.link) {
212
+ content = `[LINK] ${msgValue.link.text || msgValue.link.link_url || 'N/A'}`;
213
+ }
214
+ break;
215
+
216
+ case 'action_log':
217
+ content = '[ACTION]';
218
+ if (msgValue.action_log) {
219
+ content = `[ACTION] ${msgValue.action_log.description || 'N/A'}`;
220
+ }
221
+ break;
222
+
223
+ case 'placeholder':
224
+ content = '[PLACEHOLDER]';
225
+ if (msgValue.placeholder?.message) {
226
+ content = `[PLACEHOLDER] ${msgValue.placeholder.message}`;
227
+ }
228
+ break;
229
+
230
+ case 'xma':
231
+ case 'xma_media_share':
232
+ content = '[XMA SHARE]';
233
+ if (msgValue.xma_link_url) {
234
+ content = `[XMA SHARE] ${msgValue.xma_link_url}`;
235
+ }
236
+ break;
237
+
238
+ case 'video_call_event':
239
+ content = '[VIDEO CALL EVENT]';
240
+ if (msgValue.video_call_event) {
241
+ content = `[VIDEO CALL] ${msgValue.video_call_event.action || 'event'}`;
242
+ }
243
+ break;
244
+
245
+ default:
246
+ if (msgValue.text) {
247
+ content = msgValue.text;
248
+ } else {
249
+ content = `[${(itemType || 'UNKNOWN').toUpperCase()}]`;
250
+ }
251
+ }
252
+
253
+ return content + mediaInfo;
254
+ }
255
+
256
+ formatMessageForConsole(msgData) {
257
+ const separator = '----------------------------------------';
258
+ const lines = [
259
+ '',
260
+ separator,
261
+ '[NEW MESSAGE]',
262
+ separator,
263
+ `Username: ${msgData.username || 'unknown'}`,
264
+ `ID: ${msgData.userId || 'unknown'}`,
265
+ `Text: ${msgData.text || 'N/A'}`,
266
+ `Type: ${msgData.itemType || 'text'}`,
267
+ `Thread: ${msgData.threadId || 'unknown'}`,
268
+ `Message ID: ${msgData.messageId || 'unknown'}`,
269
+ `Timestamp: ${msgData.timestamp ? new Date(parseInt(msgData.timestamp) / 1000).toISOString() : 'N/A'}`,
270
+ `Status: ${msgData.status || 'good'}`,
271
+ separator,
272
+ ''
273
+ ];
274
+ return lines.join('\n');
275
+ }
276
+
277
+ async handleMessageSync(client, syncData) {
278
+ if (!syncData || !Array.isArray(syncData)) {
279
+ console.log(`[MESSAGE_SYNC] No sync data received`);
280
+ return;
281
+ }
282
+
283
+ for (const element of syncData) {
284
+ const data = element.data;
285
+
286
+ if (!data) {
287
+ client.emit('iris', element);
288
+ continue;
289
+ }
290
+
291
+ delete element.data;
292
+
293
+ for (const e of data) {
294
+ if (!e.path) {
295
+ client.emit('iris', { ...element, ...e });
296
+ continue;
297
+ }
298
+
299
+ if (e.path.startsWith('/direct_v2/threads') && e.value) {
300
+ try {
301
+ const msgValue = JSON.parse(e.value);
302
+ const threadId = MessageSyncMixin.getThreadIdFromPath(e.path);
303
+
304
+ const userId = msgValue.user_id || msgValue.from_user_id || msgValue.sender_id;
305
+ const itemType = msgValue.item_type || 'text';
306
+
307
+ let username = msgValue.username || null;
308
+ if (!username && userId) {
309
+ username = await this.getUsernameFromId(client, userId);
310
+ }
311
+ if (!username) {
312
+ username = `user_${userId || 'unknown'}`;
313
+ }
314
+
315
+ const textContent = this.extractMessageContent(msgValue, itemType);
316
+
317
+ const msgData = {
318
+ username: username,
319
+ userId: userId,
320
+ text: textContent,
321
+ itemType: itemType,
322
+ threadId: threadId,
323
+ messageId: msgValue.item_id || msgValue.id,
324
+ timestamp: msgValue.timestamp,
325
+ status: 'good',
326
+ rawData: msgValue
327
+ };
328
+
329
+ console.log(this.formatMessageForConsole(msgData));
330
+
331
+ const parsedMessage = {
332
+ ...element,
333
+ message: {
334
+ path: e.path,
335
+ op: e.op,
336
+ thread_id: threadId,
337
+ ...msgValue,
338
+ },
339
+ parsed: msgData
340
+ };
341
+
342
+ client.emit('message', parsedMessage);
343
+
344
+ } catch (err) {
345
+ console.log(`[MESSAGE_SYNC] Parse error: ${err.message}`);
346
+ }
347
+ } else {
348
+ try {
349
+ const updateValue = e.value ? JSON.parse(e.value) : {};
350
+ client.emit('threadUpdate', {
351
+ ...element,
352
+ meta: {
353
+ path: e.path,
354
+ op: e.op,
355
+ thread_id: MessageSyncMixin.getThreadIdFromPath(e.path),
356
+ },
357
+ update: updateValue,
358
+ });
359
+ } catch (err) {
360
+ console.log(`[MESSAGE_SYNC] Thread update parse error: ${err.message}`);
361
+ }
362
+ }
363
+ }
364
+ }
365
+ }
366
+
367
+ static getThreadIdFromPath(path) {
368
+ const itemMatch = path.match(/^\/direct_v2\/threads\/(\d+)/);
369
+ if (itemMatch)
370
+ return itemMatch[1];
371
+ const inboxMatch = path.match(/^\/direct_v2\/inbox\/threads\/(\d+)/);
372
+ if (inboxMatch)
373
+ return inboxMatch[1];
374
+ return undefined;
375
+ }
376
+
377
+ get name() {
378
+ return 'Message Sync';
379
+ }
380
+ }
381
+ exports.MessageSyncMixin = MessageSyncMixin;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"message-sync.mixin.js","sourceRoot":"","sources":["../../../src/realtime/mixins/message-sync.mixin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import { RealtimeClient } from '../realtime.client';
2
+ import { IgApiClient } from 'instagram-private-api';
3
+ export declare abstract class Mixin {
4
+ abstract apply(client: RealtimeClient, ig: IgApiClient): void;
5
+ abstract get name(): string;
6
+ }
7
+ export declare function applyMixins(mixins: Mixin[], client: RealtimeClient, ig: IgApiClient): void;
8
+ export declare function hook<K extends string, Fn extends (...args: any[]) => any>(target: {
9
+ [x in K]: Fn;
10
+ }, key: K, hooks: {
11
+ pre?: (...args: Parameters<Fn>) => void | {
12
+ returnValue: ReturnType<Fn>;
13
+ overrideReturn: boolean;
14
+ };
15
+ post?: (returnValue: ReturnType<Fn>, ...args: Parameters<Fn>) => void | {
16
+ returnValue: ReturnType<Fn>;
17
+ overrideReturn: boolean;
18
+ };
19
+ }): void;
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.hook = exports.applyMixins = exports.Mixin = void 0;
4
+ class Mixin {
5
+ }
6
+ exports.Mixin = Mixin;
7
+ function applyMixins(mixins, client, ig) {
8
+ for (const mixin of mixins)
9
+ mixin.apply(client, ig);
10
+ }
11
+ exports.applyMixins = applyMixins;
12
+ function hook(target, key, hooks) {
13
+ const base = target[key];
14
+ const wrapper = (...args) => {
15
+ let returnValue;
16
+ let overrideReturn = false;
17
+ if (hooks.pre) {
18
+ const res = hooks.pre.apply(target, args);
19
+ if (typeof res === 'object' && res.overrideReturn) {
20
+ overrideReturn = true;
21
+ returnValue = res.returnValue;
22
+ }
23
+ }
24
+ const actualReturn = base.apply(target, args);
25
+ if (!overrideReturn)
26
+ returnValue = actualReturn;
27
+ if (hooks.post) {
28
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- it's always defined
29
+ const res = hooks.post.apply(target, [returnValue, ...args]);
30
+ if (typeof res === 'object' && res.overrideReturn) {
31
+ returnValue = res.returnValue;
32
+ }
33
+ }
34
+ // @ts-expect-error -- return value will be set [if pre sets it, else overrideReturn is false and it will be set by the actual function
35
+ return returnValue;
36
+ };
37
+ // @ts-expect-error -- any[] vs Parameters<Fn>
38
+ target[key] = wrapper.bind(target);
39
+ }
40
+ exports.hook = hook;
41
+ //# sourceMappingURL=mixin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mixin.js","sourceRoot":"","sources":["../../../src/realtime/mixins/mixin.ts"],"names":[],"mappings":";;;AAGA,MAAsB,KAAK;CAG1B;AAHD,sBAGC;AAED,SAAgB,WAAW,CAAC,MAAe,EAAE,MAAsB,EAAE,EAAe;IACjF,KAAK,MAAM,KAAK,IAAI,MAAM;QAAE,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACvD,CAAC;AAFD,kCAEC;AAED,SAAgB,IAAI,CACjB,MAAwB,EACxB,GAAM,EACN,KAMC;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACzB,MAAM,OAAO,GAAG,CAAC,GAAG,IAAoB,EAAkB,EAAE;QACzD,IAAI,WAA2B,CAAC;QAChC,IAAI,cAAc,GAAG,KAAK,CAAC;QAC3B,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAC1C,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,cAAc,EAAE,CAAC;gBACjD,cAAc,GAAG,IAAI,CAAC;gBACtB,WAAW,GAAG,GAAG,CAAC,WAAW,CAAC;YACjC,CAAC;QACJ,CAAC;QACD,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAC9C,IAAI,CAAC,cAAc;YAAE,WAAW,GAAG,YAAY,CAAC;QAEhD,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;YACd,2FAA2F;YAC3F,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,WAAY,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;YAC9D,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,cAAc,EAAE,CAAC;gBACjD,WAAW,GAAG,GAAG,CAAC,WAAW,CAAC;YACjC,CAAC;QACJ,CAAC;QACD,uIAAuI;QACvI,OAAO,WAAW,CAAC;IACtB,CAAC,CAAC;IACF,8CAA8C;IAC9C,MAAM,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACtC,CAAC;AArCD,oBAqCC"}
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PresenceTypingMixin = void 0;
4
+ const presence_manager_1 = require("../features/presence.manager");
5
+ const skywalker_protocol_1 = require("../protocols/skywalker.protocol");
6
+ /**
7
+ * Mixin for handling Presence and Typing Indicators
8
+ */
9
+ class PresenceTypingMixin {
10
+ apply(client) {
11
+ // Initialize managers
12
+ client.presenceManager = new presence_manager_1.PresenceManager(client);
13
+ client.skywalkerProtocol = new skywalker_protocol_1.SkywalkerProtocol(client);
14
+
15
+ // Add public methods
16
+ client.sendTyping = async (threadId, isTyping = true) => {
17
+ return client.skywalkerProtocol.sendTypingIndicator(threadId, isTyping);
18
+ };
19
+
20
+ client.sendReaction = async (messageId, threadId, emoji) => {
21
+ return client.skywalkerProtocol.sendReaction(messageId, threadId, emoji);
22
+ };
23
+
24
+ client.broadcastPresence = async (status = 'online') => {
25
+ return client.presenceManager.broadcastPresence(status);
26
+ };
27
+ }
28
+
29
+ get name() {
30
+ return 'Presence & Typing';
31
+ }
32
+ }
33
+ exports.PresenceTypingMixin = PresenceTypingMixin;
@@ -0,0 +1,8 @@
1
+ import { Mixin } from './mixin';
2
+ import { RealtimeClient } from '../realtime.client';
3
+ export declare class RealtimeSubMixin extends Mixin {
4
+ apply(client: RealtimeClient): void;
5
+ private handleRealtimeSub;
6
+ private emitDirectEvent;
7
+ get name(): string;
8
+ }
@@ -0,0 +1,55 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RealtimeSubMixin = void 0;
4
+ const mixin_1 = require("./mixin");
5
+ const constants_1 = require("../../constants");
6
+ const shared_1 = require("../../shared");
7
+ const mqtts_1 = require("mqtts");
8
+ class RealtimeSubMixin extends mixin_1.Mixin {
9
+ apply(client) {
10
+ (0, mixin_1.hook)(client, 'connect', {
11
+ post: async () => {
12
+ // Wait for MQTT client to be ready
13
+ let retries = 0;
14
+ while (!client.mqtt && retries < 50) {
15
+ await new Promise(r => setTimeout(r, 100));
16
+ retries++;
17
+ }
18
+ if (!client.mqtt) {
19
+ throw new mqtts_1.IllegalStateError('No mqtt client created after retries');
20
+ }
21
+ client.mqtt.on('message', async (msg) => {
22
+ const topicMap = client.mqtt?.topicMap;
23
+ const topic = topicMap?.get(msg.topic);
24
+ if (topic && topic.parser && !topic.noParse) {
25
+ try {
26
+ const unzipped = await (0, shared_1.tryUnzipAsync)(msg.payload);
27
+ const parsedMessages = topic.parser.parseMessage(topic, unzipped);
28
+ if (Array.isArray(parsedMessages)) {
29
+ parsedMessages.forEach(m => {
30
+ this.handleRealtimeSub(client, topic, m.data);
31
+ });
32
+ } else {
33
+ this.handleRealtimeSub(client, topic, parsedMessages.data);
34
+ }
35
+ } catch (e) {
36
+ console.error(`RealtimeSub parse error on ${topic.path}:`, e.message);
37
+ }
38
+ }
39
+ });
40
+ },
41
+ });
42
+ }
43
+ handleRealtimeSub(client, topic, data) {
44
+ client.emit('subscription', {
45
+ query: topic.path,
46
+ data: data,
47
+ topic: topic,
48
+ });
49
+ }
50
+ get name() {
51
+ return 'Realtime Sub';
52
+ }
53
+ }
54
+ exports.RealtimeSubMixin = RealtimeSubMixin;
55
+ //# sourceMappingURL=realtime-sub.mixin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"realtime-sub.mixin.js","sourceRoot":"","sources":["../../../src/realtime/mixins/realtime-sub.mixin.ts"],"names":[],"mappings":";;;AAAA,mCAAsC;AAEtC,+CAAyC;AACzC,yCAA6C;AAE7C,oDAA4C;AAE5C,iCAA0C;AAE1C,MAAa,gBAAiB,SAAQ,aAAK;IACxC,KAAK,CAAC,MAAsB;QACzB,IAAA,YAAI,EAAC,MAAM,EAAE,SAAS,EAAE;YACrB,IAAI,EAAE,GAAG,EAAE;gBACR,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;oBAChB,MAAM,IAAI,yBAAiB,CAAC,wBAAwB,CAAC,CAAC;gBACzD,CAAC;gBACD,MAAM,CAAC,IAAI,CAAC,MAAM,CACf;oBACG,KAAK,EAAE,kBAAM,CAAC,YAAY,CAAC,EAAE;oBAC7B,WAAW,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAChC,kBAAM,CAAC,YAAY,CAAC,MAAM,CAAC,YAAY,CAAC,kBAAM,CAAC,YAAY,EAAE,MAAM,IAAA,sBAAa,EAAC,OAAO,CAAC,CAAC;iBAC/F,EACD,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,CAC9C,CAAC;YACL,CAAC;SACH,CAAC,CAAC;IACN,CAAC;IAEO,iBAAiB,CAAC,MAAsB,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAiC;QAC3G,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;QAC1D,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC/B,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QACrD,CAAC;aAAM,CAAC;YACL,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;YACzC,QAAQ,KAAK,EAAE,CAAC;gBACb,KAAK,QAAQ,CAAC,CAAC,CAAC;oBACb,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;oBACnC,MAAM;gBACT,CAAC;gBACD,OAAO,CAAC,CAAC,CAAC;oBACP,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,wBAAQ,CAAC,CAAC;oBACzC,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC;oBAChD,IAAI,KAAK,EAAE,CAAC;wBACT,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAA0B,EAAE,IAAI,IAAI,OAAO,CAAC,CAAC;oBACnE,CAAC;gBACJ,CAAC;YACJ,CAAC;QACJ,CAAC;IACJ,CAAC;IAEO,eAAe,CAAC,MAAsB,EAAE,MAAW;QACxD,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE;YACtC,IAAI,OAAO,CAAC,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC/B,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YACjC,CAAC;YACD,OAAO,CAAC,CAAC;QACZ,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAkC,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;IAC5F,CAAC;IAED,IAAI,IAAI;QACL,OAAO,cAAc,CAAC;IACzB,CAAC;CACH;AAvDD,4CAuDC"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * GraphQL Parser
3
+ *
4
+ * Parses GraphQL messages from Instagram's realtime system.
5
+ * These messages contain GraphQL queries, mutations, and subscriptions.
6
+ */
7
+ class GraphqlParser {
8
+ /**
9
+ * Parse a GraphQL message
10
+ * @param {Buffer|string} data - The raw message data
11
+ * @returns {Object} Parsed GraphQL data
12
+ */
13
+ parse(data) {
14
+ try {
15
+ const message = Buffer.isBuffer(data) ? data.toString() : data;
16
+
17
+ // Try to parse as JSON first
18
+ try {
19
+ const parsed = JSON.parse(message);
20
+ return {
21
+ type: 'graphql',
22
+ data: parsed,
23
+ raw: message
24
+ };
25
+ } catch (jsonError) {
26
+ // If not JSON, treat as GraphQL query string
27
+ return {
28
+ type: 'graphql',
29
+ data: { query: message },
30
+ raw: message
31
+ };
32
+ }
33
+ } catch (error) {
34
+ return {
35
+ type: 'graphql',
36
+ data: { error: error.message },
37
+ raw: data.toString()
38
+ };
39
+ }
40
+ }
41
+ }
42
+
43
+ module.exports = GraphqlParser;
@@ -0,0 +1,15 @@
1
+ /// <reference types="node" />
2
+ import { ParsedMessage, Parser } from './parser';
3
+ import { Topic } from '../../topic';
4
+ import { ThriftPacketDescriptor } from '../../thrift';
5
+ export declare class GraphqlParser implements Parser<GraphQlMessage> {
6
+ static descriptors: ThriftPacketDescriptor[];
7
+ parseMessage(topic: Topic, payload: Buffer): ParsedMessage<GraphQlMessage>;
8
+ }
9
+ export interface GraphQlMessage {
10
+ message: string | {
11
+ topic: string;
12
+ payload: string;
13
+ json: any;
14
+ };
15
+ }
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GraphqlParser = void 0;
4
+ const thrift_1 = require("../../thrift");
5
+ const shared_1 = require("../../shared");
6
+ class GraphqlParser {
7
+ parseMessage(topic, payload) {
8
+ const message = (0, shared_1.isJson)(payload)
9
+ ? payload.toString()
10
+ : (0, thrift_1.thriftReadToObject)(payload, GraphqlParser.descriptors) ?? '';
11
+ if (message.payload) {
12
+ message.json = JSON.parse(message.payload);
13
+ }
14
+ return { topic, data: { message } };
15
+ }
16
+ }
17
+ exports.GraphqlParser = GraphqlParser;
18
+ GraphqlParser.descriptors = [
19
+ thrift_1.ThriftDescriptors.binary('topic', 1),
20
+ thrift_1.ThriftDescriptors.binary('payload', 2),
21
+ ];
22
+ //# sourceMappingURL=graphql.parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graphql.parser.js","sourceRoot":"","sources":["../../../src/realtime/parsers/graphql.parser.ts"],"names":[],"mappings":";;;AAEA,yCAA6F;AAC7F,yCAAsC;AAEtC,MAAa,aAAa;IAMhB,YAAY,CAAC,KAAY,EAAE,OAAe;QAC9C,MAAM,OAAO,GAAQ,IAAA,eAAM,EAAC,OAAO,CAAC;YACjC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE;YACpB,CAAC,CAAC,IAAA,2BAAkB,EAAqC,OAAO,EAAE,aAAa,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;QACtG,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACnB,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC9C,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC;IACvC,CAAC;;AAdJ,sCAeC;AAdgB,yBAAW,GAA6B;IACnD,0BAAiB,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IACpC,0BAAiB,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;CACxC,CAAC"}
@@ -0,0 +1,6 @@
1
+ export * from './graphql.parser';
2
+ export * from './iris.parser';
3
+ export * from './json.parser';
4
+ export * from './parser';
5
+ export * from './region-hint.parser';
6
+ export * from './skywalker.parser';