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,139 @@
1
+ const Repository = require('../core/repository');
2
+ const crypto = require('crypto');
3
+
4
+ class TOTPRepository extends Repository {
5
+ async generateSeed() {
6
+ const response = await this.client.request.send({
7
+ method: 'POST',
8
+ url: '/api/v1/accounts/generate_two_factor_totp_key/',
9
+ form: this.client.request.sign({
10
+ _uuid: this.client.state.uuid,
11
+ }),
12
+ });
13
+ return response.body.totp_seed;
14
+ }
15
+
16
+ async enable(verificationCode) {
17
+ const response = await this.client.request.send({
18
+ method: 'POST',
19
+ url: '/api/v1/accounts/enable_totp_two_factor/',
20
+ form: this.client.request.sign({
21
+ _uuid: this.client.state.uuid,
22
+ verification_code: verificationCode,
23
+ }),
24
+ });
25
+ return response.body.backup_codes || [];
26
+ }
27
+
28
+ async disable() {
29
+ const response = await this.client.request.send({
30
+ method: 'POST',
31
+ url: '/api/v1/accounts/disable_totp_two_factor/',
32
+ form: this.client.request.sign({
33
+ _uuid: this.client.state.uuid,
34
+ }),
35
+ });
36
+ return response.body.status === 'ok';
37
+ }
38
+
39
+ generateCode(seed) {
40
+ const secret = this._base32Decode(seed);
41
+ const now = Math.floor(Date.now() / 1000);
42
+ const timeCode = Math.floor(now / 30);
43
+ return this._generateOTP(secret, timeCode);
44
+ }
45
+
46
+ _generateOTP(secret, input) {
47
+ if (input < 0) throw new Error('Input must be positive');
48
+
49
+ const buffer = Buffer.alloc(8);
50
+ let val = input;
51
+ for (let i = 7; i >= 0; i--) {
52
+ buffer[i] = val & 0xff;
53
+ val = val >> 8;
54
+ }
55
+
56
+ const hmac = crypto.createHmac('sha1', secret);
57
+ hmac.update(buffer);
58
+ const hash = hmac.digest();
59
+
60
+ const offset = hash[hash.length - 1] & 0x0f;
61
+ const code =
62
+ ((hash[offset] & 0x7f) << 24) |
63
+ ((hash[offset + 1] & 0xff) << 16) |
64
+ ((hash[offset + 2] & 0xff) << 8) |
65
+ (hash[offset + 3] & 0xff);
66
+
67
+ const otp = (code % 1000000).toString();
68
+ return otp.padStart(6, '0');
69
+ }
70
+
71
+ _base32Decode(input) {
72
+ const alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567';
73
+ let str = input.toUpperCase().replace(/=+$/, '');
74
+ const missing = str.length % 8;
75
+ if (missing) str += '='.repeat(8 - missing);
76
+ str = str.replace(/=+$/, '');
77
+
78
+ let bits = '';
79
+ for (const char of str) {
80
+ const val = alphabet.indexOf(char);
81
+ if (val === -1) continue;
82
+ bits += val.toString(2).padStart(5, '0');
83
+ }
84
+
85
+ const bytes = [];
86
+ for (let i = 0; i + 8 <= bits.length; i += 8) {
87
+ bytes.push(parseInt(bits.substr(i, 8), 2));
88
+ }
89
+ return Buffer.from(bytes);
90
+ }
91
+
92
+ async smsTwoFactorEnable(phoneNumber) {
93
+ const response = await this.client.request.send({
94
+ method: 'POST',
95
+ url: '/api/v1/accounts/send_two_factor_enable_sms/',
96
+ form: this.client.request.sign({
97
+ _uuid: this.client.state.uuid,
98
+ phone_number: phoneNumber,
99
+ }),
100
+ });
101
+ return response.body;
102
+ }
103
+
104
+ async smsTwoFactorConfirm(verificationCode) {
105
+ const response = await this.client.request.send({
106
+ method: 'POST',
107
+ url: '/api/v1/accounts/enable_sms_two_factor/',
108
+ form: this.client.request.sign({
109
+ _uuid: this.client.state.uuid,
110
+ verification_code: verificationCode,
111
+ }),
112
+ });
113
+ return response.body;
114
+ }
115
+
116
+ async disableSmsTwoFactor() {
117
+ const response = await this.client.request.send({
118
+ method: 'POST',
119
+ url: '/api/v1/accounts/disable_sms_two_factor/',
120
+ form: this.client.request.sign({
121
+ _uuid: this.client.state.uuid,
122
+ }),
123
+ });
124
+ return response.body;
125
+ }
126
+
127
+ async getBackupCodes() {
128
+ const response = await this.client.request.send({
129
+ method: 'POST',
130
+ url: '/api/v1/accounts/regen_backup_codes/',
131
+ form: this.client.request.sign({
132
+ _uuid: this.client.state.uuid,
133
+ }),
134
+ });
135
+ return response.body;
136
+ }
137
+ }
138
+
139
+ module.exports = TOTPRepository;
@@ -0,0 +1,53 @@
1
+ const Repository = require('../core/repository');
2
+
3
+ class TrackRepository extends Repository {
4
+ async downloadByUrl(url) {
5
+ const axios = require('axios');
6
+ const response = await axios.get(url, { responseType: 'arraybuffer' });
7
+ return Buffer.from(response.data);
8
+ }
9
+
10
+ async infoByCanonicalId(musicCanonicalId) {
11
+ const response = await this.client.request.send({
12
+ method: 'POST',
13
+ url: '/api/v1/clips/music/',
14
+ form: {
15
+ tab_type: 'clips',
16
+ referrer_media_id: '',
17
+ _uuid: this.client.state.uuid,
18
+ music_canonical_id: String(musicCanonicalId),
19
+ },
20
+ });
21
+ const body = response.body;
22
+ const trackData = body?.metadata?.music_info?.music_asset_info;
23
+ return trackData || body;
24
+ }
25
+
26
+ async infoById(trackId, maxId = '') {
27
+ const data = {
28
+ audio_cluster_id: trackId,
29
+ original_sound_audio_asset_id: trackId,
30
+ };
31
+ if (maxId) data.max_id = maxId;
32
+ const response = await this.client.request.send({
33
+ method: 'POST',
34
+ url: '/api/v1/clips/music/',
35
+ form: data,
36
+ });
37
+ return response.body;
38
+ }
39
+
40
+ async search(query) {
41
+ const response = await this.client.request.send({
42
+ method: 'GET',
43
+ url: '/api/v1/music/audio_global_search/',
44
+ qs: {
45
+ query,
46
+ browse_session_id: this.client.state.uuid,
47
+ },
48
+ });
49
+ return response.body;
50
+ }
51
+ }
52
+
53
+ module.exports = TrackRepository;
@@ -0,0 +1,204 @@
1
+ const Repository = require('../core/repository');
2
+ const Chance = require('chance');
3
+ const { random } = require('lodash');
4
+ const FormData = require('form-data');
5
+
6
+ class UploadRepository extends Repository {
7
+ constructor(client) {
8
+ super(client);
9
+ this.chance = new Chance();
10
+ }
11
+
12
+ async photo(options) {
13
+ const uploadId = options.uploadId || Date.now();
14
+ const name = `${uploadId}_0_${random(1000000000, 9999999999)}`;
15
+ const waterfallId = options.waterfallId || this.chance.guid();
16
+
17
+ const ruploadParams = this.createPhotoRuploadParams(options, uploadId);
18
+
19
+ const response = await this.client.request.send({
20
+ url: `/rupload_igphoto/${name}`,
21
+ method: 'POST',
22
+ headers: {
23
+ 'X_FB_PHOTO_WATERFALL_ID': waterfallId,
24
+ 'X-Entity-Type': 'image/jpeg',
25
+ 'Offset': '0',
26
+ 'X-Instagram-Rupload-Params': JSON.stringify(ruploadParams),
27
+ 'X-Entity-Name': name,
28
+ 'X-Entity-Length': options.file.length.toString(),
29
+ 'Content-Type': 'application/octet-stream',
30
+ 'Content-Length': options.file.length.toString(),
31
+ 'Accept-Encoding': 'gzip',
32
+ },
33
+ body: options.file,
34
+ });
35
+
36
+ return response.body;
37
+ }
38
+
39
+ async video(options) {
40
+ const uploadId = options.uploadId || Date.now();
41
+ const name = options.uploadName || `${uploadId}_0_${random(1000000000, 9999999999)}`;
42
+ const waterfallId = options.waterfallId || this.chance.guid();
43
+
44
+ const ruploadParams = this.createVideoRuploadParams(options, uploadId);
45
+
46
+ const response = await this.client.request.send({
47
+ url: `/rupload_igvideo/${name}`,
48
+ method: 'POST',
49
+ headers: {
50
+ 'X_FB_VIDEO_WATERFALL_ID': waterfallId,
51
+ 'X-Entity-Type': 'video/mp4',
52
+ 'Offset': options.offset || '0',
53
+ 'X-Instagram-Rupload-Params': JSON.stringify(ruploadParams),
54
+ 'X-Entity-Name': name,
55
+ 'X-Entity-Length': options.video.length.toString(),
56
+ 'Content-Type': 'application/octet-stream',
57
+ 'Content-Length': options.video.length.toString(),
58
+ 'Accept-Encoding': 'gzip',
59
+ },
60
+ body: options.video,
61
+ });
62
+
63
+ return response.body;
64
+ }
65
+
66
+ createPhotoRuploadParams(options, uploadId) {
67
+ const params = {
68
+ retry_context: JSON.stringify({
69
+ num_step_auto_retry: 0,
70
+ num_reupload: 0,
71
+ num_step_manual_retry: 0,
72
+ }),
73
+ media_type: '1',
74
+ xsharing_user_ids: JSON.stringify([]),
75
+ upload_id: uploadId.toString(),
76
+ image_compression: JSON.stringify({
77
+ lib_name: 'moz',
78
+ lib_version: '3.1.m',
79
+ quality: '80',
80
+ }),
81
+ };
82
+ if (options.for_album) params.is_sidecar = '1';
83
+ if (options.isClip) params.is_clips_video = '1';
84
+ return params;
85
+ }
86
+
87
+ createVideoRuploadParams(options, uploadId) {
88
+ const params = {
89
+ retry_context: JSON.stringify({
90
+ num_step_auto_retry: 0,
91
+ num_reupload: 0,
92
+ num_step_manual_retry: 0,
93
+ }),
94
+ media_type: '2',
95
+ xsharing_user_ids: JSON.stringify([]),
96
+ upload_id: uploadId.toString(),
97
+ upload_media_duration_ms: options.duration_ms || '0',
98
+ upload_media_width: options.width || '720',
99
+ upload_media_height: options.height || '1280',
100
+ };
101
+ if (options.for_album) params.is_sidecar = '1';
102
+ if (options.isClip) {
103
+ params.is_clips_video = '1';
104
+ params.clips_uses_original_audio = '1';
105
+ }
106
+ return params;
107
+ }
108
+
109
+ async configure(options) {
110
+ const basePayload = {
111
+ upload_id: options.uploadId,
112
+ source_type: options.source_type || '4',
113
+ camera_position: options.camera_position || 'back',
114
+ _uid: this.client.state.cookieUserId,
115
+ _uuid: this.client.state.uuid,
116
+ creation_logger_session_id: this.chance.guid(),
117
+ device: {
118
+ manufacturer: this.client.state.devicePayload?.manufacturer || 'samsung',
119
+ model: this.client.state.devicePayload?.model || 'SM-S928B',
120
+ android_version: this.client.state.devicePayload?.android_version || 35,
121
+ android_release: this.client.state.devicePayload?.android_release || '15',
122
+ },
123
+ length: options.length || 0,
124
+ audio_muted: options.audio_muted || false,
125
+ poster_frame_index: options.poster_frame_index || 0,
126
+ filter_type: options.filter_type || '0',
127
+ video_result: options.video_result || '',
128
+ composition_id: this.chance.guid(),
129
+ clips: options.clips || [
130
+ {
131
+ length: options.length || 0,
132
+ source_type: '4',
133
+ camera_position: 'back',
134
+ },
135
+ ],
136
+ };
137
+
138
+ if (options.caption) basePayload.caption = options.caption;
139
+ if (options.configure_mode) basePayload.configure_mode = options.configure_mode;
140
+ if (options.location) basePayload.location = JSON.stringify(options.location);
141
+ if (options.usertags) basePayload.usertags = JSON.stringify({ in: options.usertags });
142
+
143
+ const response = await this.client.request.send({
144
+ url: '/api/v1/media/configure/',
145
+ method: 'POST',
146
+ form: this.client.request.sign(basePayload),
147
+ });
148
+
149
+ return response.body;
150
+ }
151
+
152
+ async configureVideo(options) {
153
+ return this.configure({
154
+ ...options,
155
+ video_result: 'deprecated',
156
+ });
157
+ }
158
+
159
+ async configurePhoto(options) {
160
+ return this.configure({
161
+ ...options,
162
+ source_type: '4',
163
+ });
164
+ }
165
+
166
+ async configureToStory(options) {
167
+ return this.configure({
168
+ ...options,
169
+ configure_mode: 1,
170
+ });
171
+ }
172
+
173
+ async configureToClips(options) {
174
+ const data = {
175
+ upload_id: options.uploadId,
176
+ source_type: '4',
177
+ _uid: this.client.state.cookieUserId,
178
+ _uuid: this.client.state.uuid,
179
+ caption: options.caption || '',
180
+ clips_share_preview_to_feed: options.shareToFeed ? '1' : '0',
181
+ device: {
182
+ manufacturer: 'samsung',
183
+ model: 'SM-S928B',
184
+ android_version: 35,
185
+ android_release: '15',
186
+ },
187
+ length: options.length || 0,
188
+ poster_frame_index: '0',
189
+ audio_muted: '0',
190
+ filter_type: '0',
191
+ video_result: '',
192
+ clips_creation_entry_point: 'clips',
193
+ };
194
+
195
+ const response = await this.client.request.send({
196
+ url: '/api/v1/media/configure_to_clips/',
197
+ method: 'POST',
198
+ form: this.client.request.sign(data),
199
+ });
200
+ return response.body;
201
+ }
202
+ }
203
+
204
+ module.exports = UploadRepository;