nodejs-insta-private-api-mqt 1.3.70

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 (240) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +3677 -0
  3. package/dist/constants/constants.js +342 -0
  4. package/dist/constants/index.js +58 -0
  5. package/dist/core/client.js +419 -0
  6. package/dist/core/nav-chain.js +282 -0
  7. package/dist/core/repository.js +7 -0
  8. package/dist/core/request.js +390 -0
  9. package/dist/core/state.js +1473 -0
  10. package/dist/core/utils.js +786 -0
  11. package/dist/downloadMedia.js +381 -0
  12. package/dist/errors/index.d.ts +16 -0
  13. package/dist/errors/index.js +38 -0
  14. package/dist/errors/index.js.map +1 -0
  15. package/dist/extend.js +167 -0
  16. package/dist/fbns/fbns.client.d.ts +32 -0
  17. package/dist/fbns/fbns.client.events.d.ts +41 -0
  18. package/dist/fbns/fbns.client.events.js +3 -0
  19. package/dist/fbns/fbns.client.events.js.map +1 -0
  20. package/dist/fbns/fbns.client.js +252 -0
  21. package/dist/fbns/fbns.client.js.map +1 -0
  22. package/dist/fbns/fbns.device-auth.d.ts +17 -0
  23. package/dist/fbns/fbns.device-auth.js +54 -0
  24. package/dist/fbns/fbns.device-auth.js.map +1 -0
  25. package/dist/fbns/fbns.types.d.ts +83 -0
  26. package/dist/fbns/fbns.types.js +3 -0
  27. package/dist/fbns/fbns.types.js.map +1 -0
  28. package/dist/fbns/fbns.utilities.d.ts +2 -0
  29. package/dist/fbns/fbns.utilities.js +79 -0
  30. package/dist/fbns/fbns.utilities.js.map +1 -0
  31. package/dist/fbns/index.d.ts +4 -0
  32. package/dist/fbns/index.js +21 -0
  33. package/dist/fbns/index.js.map +1 -0
  34. package/dist/index.js +139 -0
  35. package/dist/mqtt-shim.d.ts +96 -0
  36. package/dist/mqtt-shim.js +15 -0
  37. package/dist/mqttot/index.d.ts +4 -0
  38. package/dist/mqttot/index.js +21 -0
  39. package/dist/mqttot/index.js.map +1 -0
  40. package/dist/mqttot/mqttot.client.d.ts +39 -0
  41. package/dist/mqttot/mqttot.client.js +318 -0
  42. package/dist/mqttot/mqttot.client.js.map +1 -0
  43. package/dist/mqttot/mqttot.connect.request.packet.d.ts +7 -0
  44. package/dist/mqttot/mqttot.connect.request.packet.js +9 -0
  45. package/dist/mqttot/mqttot.connect.request.packet.js.map +1 -0
  46. package/dist/mqttot/mqttot.connect.response.packet.d.ts +7 -0
  47. package/dist/mqttot/mqttot.connect.response.packet.js +24 -0
  48. package/dist/mqttot/mqttot.connect.response.packet.js.map +1 -0
  49. package/dist/mqttot/mqttot.connection.d.ts +57 -0
  50. package/dist/mqttot/mqttot.connection.js +79 -0
  51. package/dist/mqttot/mqttot.connection.js.map +1 -0
  52. package/dist/package.json +59 -0
  53. package/dist/realtime/commands/commands.d.ts +15 -0
  54. package/dist/realtime/commands/commands.js +71 -0
  55. package/dist/realtime/commands/commands.js.map +1 -0
  56. package/dist/realtime/commands/direct.commands.d.ts +75 -0
  57. package/dist/realtime/commands/direct.commands.js +417 -0
  58. package/dist/realtime/commands/direct.commands.js.map +1 -0
  59. package/dist/realtime/commands/enhanced.direct.commands.js +1731 -0
  60. package/dist/realtime/commands/enhanced.direct.commands.js.bak +967 -0
  61. package/dist/realtime/commands/index.d.ts +2 -0
  62. package/dist/realtime/commands/index.js +20 -0
  63. package/dist/realtime/commands/index.js.map +1 -0
  64. package/dist/realtime/delta-sync.manager.js +293 -0
  65. package/dist/realtime/features/dm-sender.js +88 -0
  66. package/dist/realtime/features/error-handler.js +185 -0
  67. package/dist/realtime/features/gap-handler.js +61 -0
  68. package/dist/realtime/features/persistent-logger.js +186 -0
  69. package/dist/realtime/features/presence.manager.js +66 -0
  70. package/dist/realtime/features/session-health-monitor.js +345 -0
  71. package/dist/realtime/index.js +30 -0
  72. package/dist/realtime/messages/app-presence.event.d.ts +9 -0
  73. package/dist/realtime/messages/app-presence.event.js +3 -0
  74. package/dist/realtime/messages/app-presence.event.js.map +1 -0
  75. package/dist/realtime/messages/index.d.ts +3 -0
  76. package/dist/realtime/messages/index.js +20 -0
  77. package/dist/realtime/messages/index.js.map +1 -0
  78. package/dist/realtime/messages/message-sync.message.d.ts +222 -0
  79. package/dist/realtime/messages/message-sync.message.js +43 -0
  80. package/dist/realtime/messages/message-sync.message.js.map +1 -0
  81. package/dist/realtime/messages/realtime-sub.direct.data.d.ts +11 -0
  82. package/dist/realtime/messages/realtime-sub.direct.data.js +3 -0
  83. package/dist/realtime/messages/realtime-sub.direct.data.js.map +1 -0
  84. package/dist/realtime/messages/thread-update.message.d.ts +68 -0
  85. package/dist/realtime/messages/thread-update.message.js +3 -0
  86. package/dist/realtime/messages/thread-update.message.js.map +1 -0
  87. package/dist/realtime/mixins/index.d.ts +3 -0
  88. package/dist/realtime/mixins/index.js +20 -0
  89. package/dist/realtime/mixins/index.js.map +1 -0
  90. package/dist/realtime/mixins/message-sync.mixin.d.ts +8 -0
  91. package/dist/realtime/mixins/message-sync.mixin.js +596 -0
  92. package/dist/realtime/mixins/message-sync.mixin.js.map +1 -0
  93. package/dist/realtime/mixins/mixin.d.ts +19 -0
  94. package/dist/realtime/mixins/mixin.js +41 -0
  95. package/dist/realtime/mixins/mixin.js.map +1 -0
  96. package/dist/realtime/mixins/presence-typing.mixin.js +33 -0
  97. package/dist/realtime/mixins/realtime-sub.mixin.d.ts +8 -0
  98. package/dist/realtime/mixins/realtime-sub.mixin.js +181 -0
  99. package/dist/realtime/mixins/realtime-sub.mixin.js.map +1 -0
  100. package/dist/realtime/parsers/graphql-parser.js +43 -0
  101. package/dist/realtime/parsers/graphql.parser.d.ts +15 -0
  102. package/dist/realtime/parsers/graphql.parser.js +22 -0
  103. package/dist/realtime/parsers/graphql.parser.js.map +1 -0
  104. package/dist/realtime/parsers/index.d.ts +6 -0
  105. package/dist/realtime/parsers/index.js +23 -0
  106. package/dist/realtime/parsers/index.js.map +1 -0
  107. package/dist/realtime/parsers/iris-parser.js +43 -0
  108. package/dist/realtime/parsers/iris.parser.d.ts +17 -0
  109. package/dist/realtime/parsers/iris.parser.js +10 -0
  110. package/dist/realtime/parsers/iris.parser.js.map +1 -0
  111. package/dist/realtime/parsers/json-parser.js +43 -0
  112. package/dist/realtime/parsers/json.parser.d.ts +6 -0
  113. package/dist/realtime/parsers/json.parser.js +10 -0
  114. package/dist/realtime/parsers/json.parser.js.map +1 -0
  115. package/dist/realtime/parsers/parser.d.ts +9 -0
  116. package/dist/realtime/parsers/parser.js +3 -0
  117. package/dist/realtime/parsers/parser.js.map +1 -0
  118. package/dist/realtime/parsers/region-hint-parser.js +43 -0
  119. package/dist/realtime/parsers/region-hint.parser.d.ts +12 -0
  120. package/dist/realtime/parsers/region-hint.parser.js +15 -0
  121. package/dist/realtime/parsers/region-hint.parser.js.map +1 -0
  122. package/dist/realtime/parsers/skywalker-parser.js +43 -0
  123. package/dist/realtime/parsers/skywalker.parser.d.ts +12 -0
  124. package/dist/realtime/parsers/skywalker.parser.js +15 -0
  125. package/dist/realtime/parsers/skywalker.parser.js.map +1 -0
  126. package/dist/realtime/parsers-advanced.js +158 -0
  127. package/dist/realtime/proto/common.proto +38 -0
  128. package/dist/realtime/proto/direct.proto +65 -0
  129. package/dist/realtime/proto/ig-messages.proto +83 -0
  130. package/dist/realtime/proto/iris.proto +188 -0
  131. package/dist/realtime/proto-parser.js +195 -0
  132. package/dist/realtime/protocols/iris.handshake.js +74 -0
  133. package/dist/realtime/protocols/proto-definitions.js +80 -0
  134. package/dist/realtime/protocols/skywalker.protocol.js +91 -0
  135. package/dist/realtime/realtime.client.events.js +3 -0
  136. package/dist/realtime/realtime.client.js +1915 -0
  137. package/dist/realtime/realtime.service.js +462 -0
  138. package/dist/realtime/reconnect.manager.js +88 -0
  139. package/dist/realtime/session.manager.js +121 -0
  140. package/dist/realtime/subscriptions/graphql.subscription.d.ts +47 -0
  141. package/dist/realtime/subscriptions/graphql.subscription.js +99 -0
  142. package/dist/realtime/subscriptions/graphql.subscription.js.map +1 -0
  143. package/dist/realtime/subscriptions/index.d.ts +2 -0
  144. package/dist/realtime/subscriptions/index.js +19 -0
  145. package/dist/realtime/subscriptions/index.js.map +1 -0
  146. package/dist/realtime/subscriptions/skywalker.subscription.d.ts +4 -0
  147. package/dist/realtime/subscriptions/skywalker.subscription.js +13 -0
  148. package/dist/realtime/subscriptions/skywalker.subscription.js.map +1 -0
  149. package/dist/realtime/topic-map.js +71 -0
  150. package/dist/realtime/topic.js +80 -0
  151. package/dist/repositories/account.repository.js +575 -0
  152. package/dist/repositories/bloks.repository.js +70 -0
  153. package/dist/repositories/captcha.repository.js +44 -0
  154. package/dist/repositories/challenge.repository.js +120 -0
  155. package/dist/repositories/clip.repository.js +165 -0
  156. package/dist/repositories/close-friends.repository.js +46 -0
  157. package/dist/repositories/collection.repository.js +68 -0
  158. package/dist/repositories/direct-thread.repository.js +446 -0
  159. package/dist/repositories/direct.repository.js +232 -0
  160. package/dist/repositories/explore.repository.js +70 -0
  161. package/dist/repositories/fbsearch.repository.js +140 -0
  162. package/dist/repositories/feed.repository.js +245 -0
  163. package/dist/repositories/friendship.repository.js +296 -0
  164. package/dist/repositories/fundraiser.repository.js +49 -0
  165. package/dist/repositories/hashtag.repository.js +99 -0
  166. package/dist/repositories/highlights.repository.js +121 -0
  167. package/dist/repositories/insights.repository.js +82 -0
  168. package/dist/repositories/location.repository.js +84 -0
  169. package/dist/repositories/media.repository.js +395 -0
  170. package/dist/repositories/multiple-accounts.repository.js +41 -0
  171. package/dist/repositories/news.repository.js +35 -0
  172. package/dist/repositories/note.repository.js +57 -0
  173. package/dist/repositories/notification.repository.js +79 -0
  174. package/dist/repositories/share.repository.js +35 -0
  175. package/dist/repositories/signup.repository.js +218 -0
  176. package/dist/repositories/story.repository.js +290 -0
  177. package/dist/repositories/timeline.repository.js +60 -0
  178. package/dist/repositories/totp.repository.js +139 -0
  179. package/dist/repositories/track.repository.js +53 -0
  180. package/dist/repositories/upload.repository.js +204 -0
  181. package/dist/repositories/user.repository.js +360 -0
  182. package/dist/sendmedia/index.js +27 -0
  183. package/dist/sendmedia/sendFile.js +72 -0
  184. package/dist/sendmedia/sendPhoto.js +142 -0
  185. package/dist/sendmedia/sendRavenPhoto.js +153 -0
  186. package/dist/sendmedia/sendRavenVideo.js +158 -0
  187. package/dist/sendmedia/uploadPhoto.js +107 -0
  188. package/dist/sendmedia/uploadfFile.js +130 -0
  189. package/dist/services/live.service.js +139 -0
  190. package/dist/services/search.service.js +115 -0
  191. package/dist/shared/index.js +96 -0
  192. package/dist/shared/shared.js +86 -0
  193. package/dist/thrift/index.d.ts +3 -0
  194. package/dist/thrift/index.js +20 -0
  195. package/dist/thrift/index.js.map +1 -0
  196. package/dist/thrift/thrift.d.ts +59 -0
  197. package/dist/thrift/thrift.js +101 -0
  198. package/dist/thrift/thrift.js.map +1 -0
  199. package/dist/thrift/thrift.reading.d.ts +41 -0
  200. package/dist/thrift/thrift.reading.js +327 -0
  201. package/dist/thrift/thrift.reading.js.map +1 -0
  202. package/dist/thrift/thrift.writing.d.ts +44 -0
  203. package/dist/thrift/thrift.writing.js +342 -0
  204. package/dist/thrift/thrift.writing.js.map +1 -0
  205. package/dist/types/index.js +285 -0
  206. package/dist/useMultiFileAuthState.js +1768 -0
  207. package/dist/utils/helper-1.js +1 -0
  208. package/dist/utils/helper-10.js +1 -0
  209. package/dist/utils/helper-11.js +1 -0
  210. package/dist/utils/helper-12.js +1 -0
  211. package/dist/utils/helper-13.js +1 -0
  212. package/dist/utils/helper-14.js +1 -0
  213. package/dist/utils/helper-15.js +1 -0
  214. package/dist/utils/helper-16.js +1 -0
  215. package/dist/utils/helper-17.js +1 -0
  216. package/dist/utils/helper-18.js +1 -0
  217. package/dist/utils/helper-19.js +1 -0
  218. package/dist/utils/helper-2.js +1 -0
  219. package/dist/utils/helper-20.js +1 -0
  220. package/dist/utils/helper-21.js +1 -0
  221. package/dist/utils/helper-22.js +1 -0
  222. package/dist/utils/helper-23.js +1 -0
  223. package/dist/utils/helper-24.js +1 -0
  224. package/dist/utils/helper-25.js +1 -0
  225. package/dist/utils/helper-26.js +1 -0
  226. package/dist/utils/helper-27.js +1 -0
  227. package/dist/utils/helper-28.js +1 -0
  228. package/dist/utils/helper-29.js +1 -0
  229. package/dist/utils/helper-3.js +1 -0
  230. package/dist/utils/helper-30.js +1 -0
  231. package/dist/utils/helper-4.js +1 -0
  232. package/dist/utils/helper-5.js +1 -0
  233. package/dist/utils/helper-6.js +1 -0
  234. package/dist/utils/helper-7.js +1 -0
  235. package/dist/utils/helper-8.js +1 -0
  236. package/dist/utils/helper-9.js +1 -0
  237. package/dist/utils/index.js +280 -0
  238. package/dist/utils/insta-mqtt-helper.js +128 -0
  239. package/examples/listen-to-messages.js +86 -0
  240. package/package.json +82 -0
@@ -0,0 +1,195 @@
1
+ const protobuf = require('protobufjs');
2
+ const pako = require('pako');
3
+ const debug = require('debug')('ig:proto');
4
+
5
+ /**
6
+ * Protobuf Parser - Instagram MQTT messages
7
+ * Simplified embedded proto without external file dependencies
8
+ */
9
+ class ProtoParser {
10
+ constructor() {
11
+ this.root = null;
12
+ this.loadedTypes = {};
13
+ this.init();
14
+ }
15
+
16
+ init() {
17
+ try {
18
+ // Inline proto definitions - no file dependencies
19
+ const proto = `
20
+ syntax = "proto3";
21
+
22
+ package ig.iris;
23
+
24
+ message IrisPayload {
25
+ string action = 1;
26
+ int64 seq_id = 2;
27
+ repeated IrisItem items = 3;
28
+ }
29
+
30
+ message IrisItem {
31
+ string id = 1;
32
+ string type = 2;
33
+ int64 timestamp = 3;
34
+ string op = 4;
35
+ string path = 5;
36
+ MessageSyncMessage message = 6;
37
+ ThreadUpdate thread = 7;
38
+ TypingIndicator typing = 8;
39
+ PresenceIndicator presence = 9;
40
+ }
41
+
42
+ message MessageSyncMessage {
43
+ string item_id = 1;
44
+ int64 user_id = 2;
45
+ int64 timestamp = 3;
46
+ string thread_id = 4;
47
+ string thread_v2_id = 5;
48
+ string item_type = 6;
49
+ string text = 7;
50
+ bool is_sent = 8;
51
+ bool is_delivered = 9;
52
+ bool is_read = 10;
53
+ string emoji_reaction = 11;
54
+ }
55
+
56
+ message ThreadUpdate {
57
+ string thread_id = 1;
58
+ string thread_v2_id = 2;
59
+ repeated int64 user_ids = 3;
60
+ string thread_title = 4;
61
+ int64 last_activity_at = 5;
62
+ bool is_group = 6;
63
+ bool is_archived = 7;
64
+ bool is_muted = 8;
65
+ string thread_type = 9;
66
+ }
67
+
68
+ message TypingIndicator {
69
+ int64 thread_id = 1;
70
+ int64 from_user_id = 2;
71
+ string state = 3;
72
+ int64 timestamp = 4;
73
+ }
74
+
75
+ message PresenceIndicator {
76
+ int64 user_id = 1;
77
+ string status = 2;
78
+ int64 last_seen_at = 3;
79
+ }
80
+ `;
81
+
82
+ // Parse proto definition
83
+ this.root = protobuf.parse(proto).root;
84
+
85
+ // Load types
86
+ this.loadedTypes = {
87
+ IrisPayload: this.root.lookupType('ig.iris.IrisPayload'),
88
+ IrisItem: this.root.lookupType('ig.iris.IrisItem'),
89
+ MessageSyncMessage: this.root.lookupType('ig.iris.MessageSyncMessage'),
90
+ ThreadUpdate: this.root.lookupType('ig.iris.ThreadUpdate'),
91
+ TypingIndicator: this.root.lookupType('ig.iris.TypingIndicator'),
92
+ PresenceIndicator: this.root.lookupType('ig.iris.PresenceIndicator')
93
+ };
94
+
95
+ debug('✓ Proto parser initialized with', Object.keys(this.loadedTypes).length, 'types');
96
+ } catch (e) {
97
+ debug('❌ Proto init failed:', e.message);
98
+ this.root = null;
99
+ }
100
+ }
101
+
102
+ decompress(buffer) {
103
+ try {
104
+ return pako.inflate(buffer);
105
+ } catch (e) {
106
+ try {
107
+ return pako.ungzip(buffer);
108
+ } catch (e2) {
109
+ return buffer;
110
+ }
111
+ }
112
+ }
113
+
114
+ parsePayload(topicId, rawPayload) {
115
+ try {
116
+ if (!rawPayload || rawPayload.length === 0) {
117
+ return { error: 'Empty', decoded: null };
118
+ }
119
+
120
+ const payload = this.decompress(rawPayload);
121
+ debug(`📦 Topic ${topicId}: ${payload.length} bytes`);
122
+
123
+ if (this.loadedTypes.IrisPayload) {
124
+ try {
125
+ const decoded = this.loadedTypes.IrisPayload.decode(payload);
126
+ const message = this.loadedTypes.IrisPayload.toObject(decoded, {
127
+ longs: String,
128
+ enums: String,
129
+ bytes: String
130
+ });
131
+
132
+ debug(`✓ Decoded ${message.items?.length || 0} items`);
133
+ return { decoded: message, format: 'protobuf' };
134
+ } catch (e) {
135
+ debug(`Proto decode failed, trying JSON`);
136
+ try {
137
+ const json = JSON.parse(payload.toString('utf-8'));
138
+ return { decoded: json, format: 'json' };
139
+ } catch (e2) {
140
+ return { error: 'Parse failed', decoded: null };
141
+ }
142
+ }
143
+ }
144
+
145
+ return { error: 'Proto not ready', decoded: null };
146
+ } catch (e) {
147
+ debug('Parse error:', e.message);
148
+ return { error: e.message, decoded: null };
149
+ }
150
+ }
151
+
152
+ extractMessages(payload) {
153
+ if (!payload || !payload.items) return [];
154
+
155
+ const messages = [];
156
+ payload.items.forEach(item => {
157
+ if (item.message) {
158
+ messages.push({
159
+ id: item.id,
160
+ type: 'message',
161
+ message: item.message
162
+ });
163
+ }
164
+ if (item.thread) {
165
+ messages.push({
166
+ id: item.id,
167
+ type: 'thread',
168
+ thread: item.thread
169
+ });
170
+ }
171
+ if (item.typing) {
172
+ messages.push({
173
+ id: item.id,
174
+ type: 'typing',
175
+ typing: item.typing
176
+ });
177
+ }
178
+ });
179
+
180
+ return messages;
181
+ }
182
+
183
+ isReady() {
184
+ return this.root !== null && Object.keys(this.loadedTypes).length > 0;
185
+ }
186
+
187
+ getStats() {
188
+ return {
189
+ ready: this.isReady(),
190
+ types: Object.keys(this.loadedTypes).length
191
+ };
192
+ }
193
+ }
194
+
195
+ module.exports = ProtoParser;
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.IrisHandshake = void 0;
4
+ const uuid_1 = require("uuid");
5
+ const shared_1 = require("../../shared");
6
+ /**
7
+ * IRIS Handshake - Instagram Real-time Iris Sync Protocol
8
+ * Handles authentication and subscription to IRIS topics
9
+ */
10
+ class IrisHandshake {
11
+ constructor(client) {
12
+ this.irisDebug = (0, shared_1.debugChannel)('realtime', 'iris');
13
+ this.client = client;
14
+ }
15
+ /**
16
+ * Create IRIS client payload for handshake
17
+ */
18
+ createClientPayload() {
19
+ return {
20
+ clientVersion: '415.0.0.36.76',
21
+ clientUserID: this.client.ig.state.cookieUserId,
22
+ clientContext: {
23
+ clientContextVersion: '1',
24
+ clientContextType: 'mobile',
25
+ appVersion: '415.0.0.36.76',
26
+ userAgent: this.client.ig.state.appUserAgent,
27
+ },
28
+ subscribeProtoMask: 0,
29
+ capabilities: {
30
+ supportsPresenceEvents: true,
31
+ supportsTypingIndicators: true,
32
+ supportsMessageReactions: true,
33
+ supportsForegroundState: true,
34
+ },
35
+ };
36
+ }
37
+ /**
38
+ * Generate IRIS subscription request
39
+ */
40
+ generateSubscriptionRequest(topics) {
41
+ this.irisDebug(`Generating IRIS subscription for topics: ${topics.join(', ')}`);
42
+ return {
43
+ requestId: (0, uuid_1.v4)(),
44
+ clientVersion: '415.0.0.36.76',
45
+ subscriptions: topics.map(topic => ({
46
+ topic,
47
+ active: true,
48
+ priority: 10,
49
+ })),
50
+ };
51
+ }
52
+ /**
53
+ * Handle IRIS response
54
+ */
55
+ handleIrisResponse(data) {
56
+ try {
57
+ const response = typeof data === 'string' ? JSON.parse(data) : data;
58
+ this.irisDebug(`IRIS Response: ${response.type || 'unknown'}`);
59
+
60
+ if (response.type === 'heartbeat') {
61
+ this.client.emit('iris_heartbeat', response);
62
+ } else if (response.type === 'error') {
63
+ this.client.emit('error', new Error(`IRIS Error: ${response.message}`));
64
+ } else if (response.type === 'subscription_response') {
65
+ this.client.emit('iris_subscription', response);
66
+ }
67
+ return response;
68
+ } catch (err) {
69
+ this.irisDebug(`Failed to parse IRIS response: ${err.message}`);
70
+ return null;
71
+ }
72
+ }
73
+ }
74
+ exports.IrisHandshake = IrisHandshake;
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PROTO_DEFINITIONS = void 0;
4
+ /**
5
+ * Protobuf Definitions for Instagram MQTT Protocol
6
+ * These are the message schemas used in IRIS, Skywalker, and DirectMessage topics
7
+ */
8
+ exports.PROTO_DEFINITIONS = {
9
+ DirectRealtimePayload: {
10
+ type: 'object',
11
+ fields: {
12
+ messageType: { type: 'uint32', id: 1 },
13
+ payload: { type: 'bytes', id: 2 },
14
+ timestamp: { type: 'uint64', id: 3 },
15
+ }
16
+ },
17
+ IrisMessage: {
18
+ type: 'object',
19
+ fields: {
20
+ messageId: { type: 'string', id: 1 },
21
+ threadId: { type: 'string', id: 2 },
22
+ userId: { type: 'uint64', id: 3 },
23
+ text: { type: 'string', id: 4 },
24
+ timestamp: { type: 'uint64', id: 5 },
25
+ itemType: { type: 'string', id: 6 },
26
+ mediaId: { type: 'string', id: 7 },
27
+ isDelivered: { type: 'bool', id: 8 },
28
+ isSeen: { type: 'bool', id: 9 },
29
+ }
30
+ },
31
+ SkywalkerCommand: {
32
+ type: 'object',
33
+ fields: {
34
+ action: { type: 'string', id: 1 },
35
+ threadId: { type: 'string', id: 2 },
36
+ data: { type: 'bytes', id: 3 },
37
+ timestamp: { type: 'uint64', id: 4 },
38
+ clientContext: { type: 'string', id: 5 },
39
+ }
40
+ },
41
+ PresenceEvent: {
42
+ type: 'object',
43
+ fields: {
44
+ userId: { type: 'uint64', id: 1 },
45
+ status: { type: 'string', id: 2 }, // online, offline, away
46
+ lastActivity: { type: 'uint64', id: 3 },
47
+ device: { type: 'string', id: 4 }, // mobile, web, unknown
48
+ }
49
+ },
50
+ TypingIndicator: {
51
+ type: 'object',
52
+ fields: {
53
+ threadId: { type: 'string', id: 1 },
54
+ userId: { type: 'uint64', id: 2 },
55
+ isTyping: { type: 'bool', id: 3 },
56
+ timestamp: { type: 'uint64', id: 4 },
57
+ }
58
+ },
59
+ MessageReaction: {
60
+ type: 'object',
61
+ fields: {
62
+ messageId: { type: 'string', id: 1 },
63
+ threadId: { type: 'string', id: 2 },
64
+ userId: { type: 'uint64', id: 3 },
65
+ emoji: { type: 'string', id: 4 },
66
+ timestamp: { type: 'uint64', id: 5 },
67
+ operation: { type: 'string', id: 6 }, // add, remove
68
+ }
69
+ },
70
+ ClientPayload: {
71
+ type: 'object',
72
+ fields: {
73
+ clientVersion: { type: 'string', id: 1 },
74
+ clientUserID: { type: 'uint64', id: 2 },
75
+ clientContext: { type: 'object', id: 3 },
76
+ capabilities: { type: 'object', id: 4 },
77
+ subscribeProtoMask: { type: 'uint32', id: 5 },
78
+ }
79
+ },
80
+ };
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SkywalkerProtocol = void 0;
4
+ const shared_1 = require("../../shared");
5
+ const uuid_1 = require("uuid");
6
+ /**
7
+ * Skywalker Protocol - Real-time presence, typing, and reactions
8
+ */
9
+ class SkywalkerProtocol {
10
+ constructor(client) {
11
+ this.skyDebug = (0, shared_1.debugChannel)('realtime', 'skywalker');
12
+ this.client = client;
13
+ }
14
+ /**
15
+ * Send typing indicator
16
+ */
17
+ async sendTypingIndicator(threadId, isTyping = true) {
18
+ this.skyDebug(`${isTyping ? 'Starting' : 'Stopping'} typing in thread ${threadId}`);
19
+ const command = {
20
+ action: isTyping ? 'typing_on' : 'typing_off',
21
+ thread_id: threadId,
22
+ timestamp: Date.now(),
23
+ client_context: (0, uuid_1.v4)(),
24
+ };
25
+ return this.client.directCommands?.sendCommand({
26
+ action: 'send_typing',
27
+ data: command,
28
+ threadId,
29
+ });
30
+ }
31
+ /**
32
+ * Send message reaction
33
+ */
34
+ async sendReaction(messageId, threadId, reactionEmoji) {
35
+ this.skyDebug(`Sending reaction ${reactionEmoji} to message ${messageId}`);
36
+ const command = {
37
+ action: 'reaction',
38
+ message_id: messageId,
39
+ thread_id: threadId,
40
+ emoji: reactionEmoji,
41
+ timestamp: Date.now(),
42
+ client_context: (0, uuid_1.v4)(),
43
+ };
44
+ return this.client.directCommands?.sendCommand({
45
+ action: 'send_reaction',
46
+ data: command,
47
+ threadId,
48
+ });
49
+ }
50
+ /**
51
+ * Handle Skywalker event
52
+ */
53
+ handleSkywalkerEvent(data) {
54
+ try {
55
+ const event = typeof data === 'string' ? JSON.parse(data) : data;
56
+ this.skyDebug(`Skywalker Event: ${event.type || 'unknown'}`);
57
+
58
+ if (event.type === 'typing_on') {
59
+ this.client.emit('typing', {
60
+ user_id: event.from_user_id,
61
+ thread_id: event.thread_id,
62
+ is_typing: true,
63
+ });
64
+ } else if (event.type === 'typing_off') {
65
+ this.client.emit('typing', {
66
+ user_id: event.from_user_id,
67
+ thread_id: event.thread_id,
68
+ is_typing: false,
69
+ });
70
+ } else if (event.type === 'reaction') {
71
+ this.client.emit('reaction', {
72
+ message_id: event.message_id,
73
+ user_id: event.from_user_id,
74
+ emoji: event.emoji,
75
+ thread_id: event.thread_id,
76
+ });
77
+ } else if (event.type === 'presence') {
78
+ this.client.emit('presence', {
79
+ user_id: event.user_id,
80
+ status: event.status, // online, offline, away
81
+ last_activity: event.last_activity,
82
+ });
83
+ }
84
+ return event;
85
+ } catch (err) {
86
+ this.skyDebug(`Failed to parse Skywalker event: ${err.message}`);
87
+ return null;
88
+ }
89
+ }
90
+ }
91
+ exports.SkywalkerProtocol = SkywalkerProtocol;
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=realtime.client.events.js.map