operand-meta-sdk 1.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/.eslintrc.js +25 -0
  2. package/.prettierrc +4 -0
  3. package/README.md +435 -0
  4. package/dist/jest.config.d.ts +3 -0
  5. package/dist/jest.config.js +14 -0
  6. package/dist/jest.config.js.map +1 -0
  7. package/dist/src/__test__/mocks/index.d.ts +2 -0
  8. package/dist/src/__test__/mocks/index.js +6 -0
  9. package/dist/src/__test__/mocks/index.js.map +1 -0
  10. package/dist/src/error/operand-error.d.ts +8 -0
  11. package/dist/src/error/operand-error.js +196 -0
  12. package/dist/src/error/operand-error.js.map +1 -0
  13. package/dist/src/index.d.ts +10 -0
  14. package/dist/src/index.js +22 -0
  15. package/dist/src/index.js.map +1 -0
  16. package/dist/src/interfaces/ing-publish.d.ts +53 -0
  17. package/dist/src/interfaces/ing-publish.js +3 -0
  18. package/dist/src/interfaces/ing-publish.js.map +1 -0
  19. package/dist/src/interfaces/meta-auth.d.ts +14 -0
  20. package/dist/src/interfaces/meta-auth.js +3 -0
  21. package/dist/src/interfaces/meta-auth.js.map +1 -0
  22. package/dist/src/interfaces/meta-mkt.d.ts +4 -0
  23. package/dist/src/interfaces/meta-mkt.js +3 -0
  24. package/dist/src/interfaces/meta-mkt.js.map +1 -0
  25. package/dist/src/interfaces/meta-response.d.ts +285 -0
  26. package/dist/src/interfaces/meta-response.js +3 -0
  27. package/dist/src/interfaces/meta-response.js.map +1 -0
  28. package/dist/src/interfaces/meta.d.ts +6 -0
  29. package/dist/src/interfaces/meta.js +3 -0
  30. package/dist/src/interfaces/meta.js.map +1 -0
  31. package/dist/src/interfaces/page-publish.d.ts +66 -0
  32. package/dist/src/interfaces/page-publish.js +3 -0
  33. package/dist/src/interfaces/page-publish.js.map +1 -0
  34. package/dist/src/modules/auth/meta-auth.d.ts +35 -0
  35. package/dist/src/modules/auth/meta-auth.js +131 -0
  36. package/dist/src/modules/auth/meta-auth.js.map +1 -0
  37. package/dist/src/modules/auth/meta-auth.spec.d.ts +1 -0
  38. package/dist/src/modules/auth/meta-auth.spec.js +76 -0
  39. package/dist/src/modules/auth/meta-auth.spec.js.map +1 -0
  40. package/dist/src/modules/comments/ing-comments.d.ts +7 -0
  41. package/dist/src/modules/comments/ing-comments.js +27 -0
  42. package/dist/src/modules/comments/ing-comments.js.map +1 -0
  43. package/dist/src/modules/comments/page-comments.d.ts +6 -0
  44. package/dist/src/modules/comments/page-comments.js +18 -0
  45. package/dist/src/modules/comments/page-comments.js.map +1 -0
  46. package/dist/src/modules/insights/ing-insights.d.ts +42 -0
  47. package/dist/src/modules/insights/ing-insights.js +150 -0
  48. package/dist/src/modules/insights/ing-insights.js.map +1 -0
  49. package/dist/src/modules/insights/mkt-insights.d.ts +10 -0
  50. package/dist/src/modules/insights/mkt-insights.js +46 -0
  51. package/dist/src/modules/insights/mkt-insights.js.map +1 -0
  52. package/dist/src/modules/insights/page-insights.d.ts +34 -0
  53. package/dist/src/modules/insights/page-insights.js +146 -0
  54. package/dist/src/modules/insights/page-insights.js.map +1 -0
  55. package/dist/src/modules/meta-ing.d.ts +5 -0
  56. package/dist/src/modules/meta-ing.js +11 -0
  57. package/dist/src/modules/meta-ing.js.map +1 -0
  58. package/dist/src/modules/meta-mkt.d.ts +5 -0
  59. package/dist/src/modules/meta-mkt.js +11 -0
  60. package/dist/src/modules/meta-mkt.js.map +1 -0
  61. package/dist/src/modules/meta-page.d.ts +5 -0
  62. package/dist/src/modules/meta-page.js +11 -0
  63. package/dist/src/modules/meta-page.js.map +1 -0
  64. package/dist/src/modules/meta.d.ts +10 -0
  65. package/dist/src/modules/meta.js +23 -0
  66. package/dist/src/modules/meta.js.map +1 -0
  67. package/dist/src/modules/publish/ing-publish.d.ts +39 -0
  68. package/dist/src/modules/publish/ing-publish.js +464 -0
  69. package/dist/src/modules/publish/ing-publish.js.map +1 -0
  70. package/dist/src/modules/publish/page-publish.d.ts +51 -0
  71. package/dist/src/modules/publish/page-publish.js +560 -0
  72. package/dist/src/modules/publish/page-publish.js.map +1 -0
  73. package/dist/src/modules/publish/page-publish.spec.d.ts +1 -0
  74. package/dist/src/modules/publish/page-publish.spec.js +280 -0
  75. package/dist/src/modules/publish/page-publish.spec.js.map +1 -0
  76. package/dist/src/modules/utils/meta-utils.d.ts +8 -0
  77. package/dist/src/modules/utils/meta-utils.js +28 -0
  78. package/dist/src/modules/utils/meta-utils.js.map +1 -0
  79. package/dist/src/utils/api.d.ts +8 -0
  80. package/dist/src/utils/api.js +36 -0
  81. package/dist/src/utils/api.js.map +1 -0
  82. package/dist/tsconfig.tsbuildinfo +1 -0
  83. package/jest.config.ts +198 -0
  84. package/package.json +39 -0
  85. package/src/__test__/mocks/image.jpeg +0 -0
  86. package/src/__test__/mocks/index.ts +5 -0
  87. package/src/__test__/mocks/video-to-post.mp4 +0 -0
  88. package/src/__test__/mocks/video-to-stories.mp4 +0 -0
  89. package/src/error/operand-error.ts +217 -0
  90. package/src/index.ts +21 -0
  91. package/src/interfaces/ing-publish.ts +58 -0
  92. package/src/interfaces/meta-auth.ts +52 -0
  93. package/src/interfaces/meta-mkt.ts +5 -0
  94. package/src/interfaces/meta-response.ts +319 -0
  95. package/src/interfaces/meta.ts +7 -0
  96. package/src/interfaces/page-publish.ts +72 -0
  97. package/src/modules/auth/meta-auth.spec.ts +93 -0
  98. package/src/modules/auth/meta-auth.ts +227 -0
  99. package/src/modules/comments/ing-comments.ts +38 -0
  100. package/src/modules/comments/page-comments.ts +20 -0
  101. package/src/modules/insights/ing-insights.ts +275 -0
  102. package/src/modules/insights/mkt-insights.ts +68 -0
  103. package/src/modules/insights/page-insights.ts +267 -0
  104. package/src/modules/meta-ing.ts +8 -0
  105. package/src/modules/meta-mkt.ts +8 -0
  106. package/src/modules/meta-page.ts +8 -0
  107. package/src/modules/meta.ts +31 -0
  108. package/src/modules/publish/ing-publish.ts +754 -0
  109. package/src/modules/publish/page-publish.spec.ts +386 -0
  110. package/src/modules/publish/page-publish.ts +881 -0
  111. package/src/modules/utils/meta-utils.ts +37 -0
  112. package/src/utils/api.ts +45 -0
  113. package/tsconfig.json +22 -0
@@ -0,0 +1,560 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PagePublish = void 0;
4
+ const FileType = require("file-type");
5
+ const fs = require("node:fs");
6
+ const FormData = require("form-data");
7
+ const date_fns_1 = require("date-fns");
8
+ const operand_error_1 = require("../../error/operand-error");
9
+ const ffmpeg = require("fluent-ffmpeg");
10
+ const path = require("node:path");
11
+ const meta_utils_1 = require("../utils/meta-utils");
12
+ class PagePublish extends meta_utils_1.MetaUtils {
13
+ constructor({ pageAccessToken, pageId, apiVersion }) {
14
+ super({ pageAccessToken, apiVersion });
15
+ this.pageId = pageId;
16
+ }
17
+ isValidUrl(url) {
18
+ const regexUrl = /[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)/g;
19
+ return regexUrl.test(url);
20
+ }
21
+ fileTypesPermitted(file, type) {
22
+ return file === "photo"
23
+ ? ["jpeg", "jpg", "png", "gif", "bmp", "tiff", "webp"].includes(type)
24
+ : ["mp4", "avi", "flv", "mkv", "mov", "mpeg", "wmv"].includes(type);
25
+ }
26
+ static async verifyVideoSpec(videoSource, ext, to) {
27
+ let tempFilePath = "";
28
+ const isBuffer = videoSource instanceof Buffer;
29
+ if (isBuffer) {
30
+ tempFilePath = path.resolve(__dirname, "..", "..", "temp", `${Date.now()}.${ext}`);
31
+ await fs.promises.writeFile(tempFilePath, videoSource);
32
+ }
33
+ else {
34
+ tempFilePath = videoSource;
35
+ }
36
+ const videoSpecResponse = await new Promise((resolve, reject) => {
37
+ ffmpeg.ffprobe(tempFilePath, (err, metadata) => {
38
+ var _a, _b, _c, _d;
39
+ if (err) {
40
+ reject(err);
41
+ }
42
+ const stream = metadata.streams.find((s) => s.width && s.height);
43
+ const width = stream === null || stream === void 0 ? void 0 : stream.width;
44
+ const height = stream === null || stream === void 0 ? void 0 : stream.height;
45
+ const fpsString = stream === null || stream === void 0 ? void 0 : stream.avg_frame_rate;
46
+ const fps = fpsString ? eval(fpsString) : 0;
47
+ const ratio = width / height;
48
+ const size = metadata.format.size;
49
+ const duration = metadata.format.duration;
50
+ const isReelsOrStories = ["reels", "stories"].includes(to);
51
+ const validResolution = isReelsOrStories
52
+ ? width && height && width >= 540 && height >= 960
53
+ : width && height && width <= 1920 && height <= 1080;
54
+ if (!validResolution) {
55
+ resolve({
56
+ success: false,
57
+ error: `Invalid resolution. The video must have at least ${isReelsOrStories
58
+ ? "The video must have at least 540x960"
59
+ : "The video must have a maximum of 1920x1080"}. The current resolution is ${width}x${height}.`,
60
+ });
61
+ }
62
+ const validFps = fps && fps >= 24 && fps <= 60;
63
+ if (!validFps) {
64
+ resolve({
65
+ success: false,
66
+ error: `Invalid fps. The video must have between 24 and 60 fps. The current fps is ${fps}.`,
67
+ });
68
+ }
69
+ const validRatio = isReelsOrStories ? ratio <= 0.5625 : true;
70
+ if (!validRatio) {
71
+ resolve({
72
+ success: false,
73
+ error: `Invalid ratio. The video must have a ratio of 0.56 or less. The current ratio is ${ratio}.`,
74
+ });
75
+ }
76
+ const validSize = isReelsOrStories
77
+ ? true
78
+ : size < 1024 * 1024 * 1024 * 10;
79
+ if (!validSize) {
80
+ resolve({
81
+ success: false,
82
+ error: `Invalid size. The video must be a maximum of 10 gigabytes.`,
83
+ });
84
+ }
85
+ const validDuration = isReelsOrStories
86
+ ? duration <= 60
87
+ : duration <= 14400;
88
+ if (!validDuration) {
89
+ resolve({
90
+ success: false,
91
+ error: `Invalid duration. The video must be a maximum of ${isReelsOrStories ? "60 seconds" : "240 minutes"}.`,
92
+ });
93
+ }
94
+ const videoStream = metadata.streams.find((s) => s.codec_type === "video");
95
+ const audioStream = metadata.streams.find((s) => s.codec_type === "audio");
96
+ const validVideoCodec = ["h264", "hevc", "vp9", "av1"].includes((_a = videoStream === null || videoStream === void 0 ? void 0 : videoStream.codec_name) !== null && _a !== void 0 ? _a : "");
97
+ const validAudioCodec = ["aac"].includes((_b = audioStream === null || audioStream === void 0 ? void 0 : audioStream.codec_name) !== null && _b !== void 0 ? _b : "");
98
+ if (!validVideoCodec) {
99
+ resolve({
100
+ success: false,
101
+ error: `Invalid codecs. The video must have the following video codecs: h264, hevc, vp9, av1`,
102
+ });
103
+ }
104
+ if (!validAudioCodec) {
105
+ resolve({
106
+ success: false,
107
+ error: `Invalid codecs. The video must be have aac audio codec`,
108
+ });
109
+ }
110
+ const videoChecks = {
111
+ chromaSubsampling: (videoStream === null || videoStream === void 0 ? void 0 : videoStream.pix_fmt) === "yuv420p",
112
+ fixedFrameRate: (videoStream === null || videoStream === void 0 ? void 0 : videoStream.avg_frame_rate) === (videoStream === null || videoStream === void 0 ? void 0 : videoStream.r_frame_rate),
113
+ progressive: (videoStream === null || videoStream === void 0 ? void 0 : videoStream.field_order) === "progressive" ||
114
+ videoStream.progressive === "1" ||
115
+ videoStream.progressive === true ||
116
+ (!videoStream.interlaced &&
117
+ !videoStream.top_field_first &&
118
+ !videoStream.bottom_field_first) ||
119
+ videoStream.interlaced === "0" ||
120
+ videoStream.interlaced === false,
121
+ };
122
+ const audioChecks = {
123
+ bitrate: isReelsOrStories
124
+ ? parseInt((_c = audioStream === null || audioStream === void 0 ? void 0 : audioStream.bit_rate) !== null && _c !== void 0 ? _c : "0") >= 128000
125
+ : parseInt((_d = audioStream === null || audioStream === void 0 ? void 0 : audioStream.bit_rate) !== null && _d !== void 0 ? _d : "0") <= 4000000,
126
+ channels: (audioStream === null || audioStream === void 0 ? void 0 : audioStream.channels) === 2,
127
+ sampleRate: (audioStream === null || audioStream === void 0 ? void 0 : audioStream.sample_rate) === 48000,
128
+ };
129
+ resolve({
130
+ success: true,
131
+ warn: { videoChecks, audioChecks },
132
+ });
133
+ });
134
+ });
135
+ if (isBuffer)
136
+ await fs.promises.unlink(tempFilePath);
137
+ return videoSpecResponse;
138
+ }
139
+ async verifyPhotoSize(value, isBuffer) {
140
+ if (isBuffer) {
141
+ return value.length / 1024 / 1024 <= 8;
142
+ }
143
+ const status = await fs.promises.stat(value);
144
+ return status.size / 1024 / 1024 <= 8;
145
+ }
146
+ validatePublishDate(datePublish) {
147
+ const now = new Date();
148
+ const tenMinutesFromNow = (0, date_fns_1.addMinutes)(now, 10);
149
+ const sixMonthsFromNow = (0, date_fns_1.addMonths)(now, 6);
150
+ return ((0, date_fns_1.isBefore)(datePublish, tenMinutesFromNow) ||
151
+ (0, date_fns_1.isAfter)(datePublish, sixMonthsFromNow));
152
+ }
153
+ async savePhotoInMetaStorageByUrl(url) {
154
+ const response = await fetch(url);
155
+ const arrayBuffer = await response.arrayBuffer();
156
+ const fileType = await FileType.fromBuffer(arrayBuffer);
157
+ if (!fileType) {
158
+ throw new operand_error_1.OperandError({
159
+ message: "Impossible to get the file type of file.",
160
+ });
161
+ }
162
+ if (!this.fileTypesPermitted("photo", fileType.ext)) {
163
+ throw new operand_error_1.OperandError({
164
+ message: "This file type is not permitted. File types permitted: jpeg, jpg, png, gif, bmp, tiff, webp.",
165
+ });
166
+ }
167
+ if (!(await this.verifyPhotoSize(Buffer.from(arrayBuffer), true))) {
168
+ throw new operand_error_1.OperandError({
169
+ message: "The photo must be less or equal to 4MB.",
170
+ code: 37,
171
+ });
172
+ }
173
+ return (await this.api.post(`/me/photos`, {
174
+ published: false,
175
+ access_token: this.pageAccessToken,
176
+ url,
177
+ })).data.id;
178
+ }
179
+ async savePhotoInMetaStorageByPath(path) {
180
+ const fileType = await FileType.fromFile(path);
181
+ if (!fileType) {
182
+ throw new operand_error_1.OperandError({
183
+ message: "Impossible to get the file type of file.",
184
+ });
185
+ }
186
+ if (!this.fileTypesPermitted("photo", fileType.ext)) {
187
+ throw new operand_error_1.OperandError({
188
+ message: "This file type is not permitted. File types permitted: jpeg, jpg, png, gif, bmp, tiff, webp.",
189
+ });
190
+ }
191
+ if (!(await this.verifyPhotoSize(path, false))) {
192
+ throw new operand_error_1.OperandError({
193
+ message: "The photo must be less or equal to 4MB.",
194
+ code: 37,
195
+ });
196
+ }
197
+ const fileStream = fs.createReadStream(path);
198
+ const formData = new FormData();
199
+ formData.append("published", "false");
200
+ formData.append("access_token", this.pageAccessToken);
201
+ formData.append("source", fileStream);
202
+ const response = await this.api.post(`/me/photos`, formData, {
203
+ headers: Object.assign({}, formData.getHeaders()),
204
+ });
205
+ return response.data.id;
206
+ }
207
+ async saveVideoInMetaStorageMomentaryByUrl(video, to) {
208
+ const response = await fetch(video);
209
+ const arrayBuffer = await response.arrayBuffer();
210
+ const fileType = await FileType.fromBuffer(arrayBuffer);
211
+ if (!fileType) {
212
+ throw new operand_error_1.OperandError({
213
+ message: "Impossible to get the file type of file.",
214
+ });
215
+ }
216
+ if (!this.fileTypesPermitted("video", fileType.ext)) {
217
+ throw new operand_error_1.OperandError({
218
+ message: "This file type is not permitted. File types permitted: mp4, avi, flv, mkv, mov, mpeg, wmv.",
219
+ });
220
+ }
221
+ const { data: { upload_url, video_id }, } = await this.api.post(`${this.pageId}/${to === "stories" ? "video_stories" : "video_reels"}`, {
222
+ upload_phase: "start",
223
+ access_token: this.pageAccessToken,
224
+ });
225
+ await fetch(upload_url, {
226
+ method: "POST",
227
+ body: JSON.stringify({
228
+ file_url: video,
229
+ }),
230
+ headers: {
231
+ Authorization: `OAuth ${this.pageAccessToken}`,
232
+ file_url: video,
233
+ },
234
+ });
235
+ return video_id;
236
+ }
237
+ async saveVideoInMetaStorageMomentaryByPath(video, to) {
238
+ const arrayBuffer = await fs.promises.readFile(video);
239
+ const fileType = await FileType.fromBuffer(arrayBuffer);
240
+ if (!fileType) {
241
+ throw new operand_error_1.OperandError({
242
+ message: "Impossible to get the file type of file.",
243
+ });
244
+ }
245
+ if (!this.fileTypesPermitted("video", fileType.ext)) {
246
+ throw new operand_error_1.OperandError({
247
+ message: "This file type is not permitted. File types permitted: mp4, avi, flv, mkv, mov, mpeg, wmv.",
248
+ });
249
+ }
250
+ const { data: { upload_url, video_id }, } = await this.api.post(`${this.pageId}/${to === "stories" ? "video_stories" : "video_reels"}`, {
251
+ upload_phase: "start",
252
+ access_token: this.pageAccessToken,
253
+ });
254
+ await fetch(upload_url, {
255
+ method: "POST",
256
+ body: arrayBuffer,
257
+ headers: {
258
+ Authorization: `OAuth ${this.pageAccessToken}`,
259
+ offset: "0",
260
+ file_size: String(arrayBuffer.byteLength),
261
+ },
262
+ });
263
+ return video_id;
264
+ }
265
+ async getAllPosts() {
266
+ var _a;
267
+ const values = [];
268
+ let nextUrl = `${this.api.getUri()}/${this.pageId}/feed?access_token=${this.pageAccessToken}`;
269
+ while (nextUrl) {
270
+ const response = (await (await fetch(nextUrl)).json());
271
+ values.push(...response.data);
272
+ const isValidNext = ((_a = response.paging) === null || _a === void 0 ? void 0 : _a.next) && this.isValidUrl(response.paging.next);
273
+ if (!isValidNext) {
274
+ nextUrl = "";
275
+ break;
276
+ }
277
+ nextUrl = response.paging.next;
278
+ }
279
+ return values;
280
+ }
281
+ getPostUrlById(postId) {
282
+ return `https://www.facebook.com/${this.pageId}/posts/${postId}`;
283
+ }
284
+ async uploadPhotos(photos) {
285
+ try {
286
+ const medias = [];
287
+ for (const photo of photos) {
288
+ medias.push(photo.source === "url"
289
+ ? await this.savePhotoInMetaStorageByUrl(photo.value)
290
+ : await this.savePhotoInMetaStorageByPath(photo.value));
291
+ }
292
+ return medias;
293
+ }
294
+ catch (error) {
295
+ throw new operand_error_1.OperandError({
296
+ message: "Error when upload photos",
297
+ error,
298
+ });
299
+ }
300
+ }
301
+ async createTextPost(message, publishNow, datePublish) {
302
+ try {
303
+ const newPost = (await this.api.post(`/${this.pageId}/feed`, Object.assign({ access_token: this.pageAccessToken, message }, (!publishNow && {
304
+ scheduled_publish_time: Math.floor(new Date(datePublish).getTime() / 1000),
305
+ published: publishNow,
306
+ })))).data;
307
+ return newPost.post_id || newPost.id;
308
+ }
309
+ catch (error) {
310
+ throw new operand_error_1.OperandError({
311
+ message: "Error creating post text ",
312
+ error,
313
+ });
314
+ }
315
+ }
316
+ async createPhotosPost(message, mediaIds, publishNow, datePublish) {
317
+ try {
318
+ const newPost = (await this.api.post(`/${this.pageId}/feed`, Object.assign(Object.assign({ access_token: this.pageAccessToken, message }, (!publishNow && {
319
+ scheduled_publish_time: Math.floor(new Date(datePublish).getTime() / 1000),
320
+ published: publishNow,
321
+ })), { attached_media: mediaIds.map((id) => ({
322
+ media_fbid: id,
323
+ })) }))).data;
324
+ return newPost.post_id || newPost.id;
325
+ }
326
+ catch (error) {
327
+ throw new operand_error_1.OperandError({
328
+ message: "Error when create photos post",
329
+ error,
330
+ });
331
+ }
332
+ }
333
+ async createVideoPost(video, message, publishNow, datePublish) {
334
+ try {
335
+ let arrayBuffer;
336
+ if (video.source === "url") {
337
+ const response = await fetch(video.value);
338
+ arrayBuffer = await response.arrayBuffer();
339
+ }
340
+ else {
341
+ arrayBuffer = await fs.promises.readFile(video.value);
342
+ }
343
+ const fileType = await FileType.fromBuffer(arrayBuffer);
344
+ if (!fileType) {
345
+ throw new operand_error_1.OperandError({
346
+ message: "Impossible to get the file type of file.",
347
+ });
348
+ }
349
+ if (!this.fileTypesPermitted("video", fileType.ext)) {
350
+ throw new operand_error_1.OperandError({
351
+ message: "This file type is not permitted. File types permitted: mp4, avi, flv, mkv, mov, mpeg, wmv.",
352
+ });
353
+ }
354
+ const formData = new FormData();
355
+ formData.append("description", message || "");
356
+ formData.append(video.source === "url" ? "file_url" : "source", video.source === "url" ? video.value : fs.createReadStream(video.value));
357
+ formData.append("access_token", this.pageAccessToken);
358
+ if (!publishNow) {
359
+ formData.append("published", "false");
360
+ formData.append("scheduled_publish_time", Math.floor(new Date(datePublish).getTime() / 1000));
361
+ }
362
+ const { data } = await this.apiVideo.post(`/${this.pageId}/videos`, formData, {
363
+ headers: Object.assign({}, formData.getHeaders()),
364
+ });
365
+ return data.id;
366
+ }
367
+ catch (error) {
368
+ throw new operand_error_1.OperandError({
369
+ message: "Error when create video post",
370
+ error,
371
+ });
372
+ }
373
+ }
374
+ async createPost(post) {
375
+ await this.createTempFolder();
376
+ const { message, publishNow, datePublish, mediaType } = post;
377
+ if (!publishNow && !datePublish) {
378
+ throw new operand_error_1.OperandError({
379
+ message: "You must provide the datePublish if you don't want to publish now.",
380
+ });
381
+ }
382
+ if (!publishNow && this.validatePublishDate(new Date(datePublish))) {
383
+ throw new operand_error_1.OperandError({
384
+ message: "The datePublish must be between 10 minutes from now and 6 months from now.",
385
+ });
386
+ }
387
+ if (!mediaType && message) {
388
+ return this.createTextPost(message, publishNow, datePublish);
389
+ }
390
+ if (mediaType === "photo") {
391
+ const mediaIds = await this.uploadPhotos(post.photos);
392
+ return this.createPhotosPost(message, mediaIds, publishNow, datePublish);
393
+ }
394
+ if (mediaType === "video") {
395
+ return this.createVideoPost(post.video, message, publishNow, datePublish);
396
+ }
397
+ throw new operand_error_1.OperandError({
398
+ message: "Invalid parameters.",
399
+ });
400
+ }
401
+ async updatePost(postId, message) {
402
+ try {
403
+ return (await this.api.post(`/${postId}`, {
404
+ access_token: this.pageAccessToken,
405
+ message,
406
+ })).data.success;
407
+ }
408
+ catch (error) {
409
+ throw new operand_error_1.OperandError({
410
+ message: "Error in update post",
411
+ error,
412
+ });
413
+ }
414
+ }
415
+ async deletePost(postId) {
416
+ try {
417
+ return (await this.api.delete(`/${postId}`, {
418
+ params: {
419
+ access_token: this.pageAccessToken,
420
+ },
421
+ })).data.success;
422
+ }
423
+ catch (error) {
424
+ throw new operand_error_1.OperandError({
425
+ message: "Error in delete post",
426
+ error,
427
+ });
428
+ }
429
+ }
430
+ async createPhotoStory(story) {
431
+ try {
432
+ const photoId = story.source === "url"
433
+ ? await this.savePhotoInMetaStorageByUrl(story.url)
434
+ : await this.savePhotoInMetaStorageByPath(story.path);
435
+ const response = await this.api.post(`/${this.pageId}/photo_stories`, {
436
+ access_token: this.pageAccessToken,
437
+ photo_id: photoId,
438
+ });
439
+ return response.data.post_id;
440
+ }
441
+ catch (error) {
442
+ throw new operand_error_1.OperandError({
443
+ message: "Error in create photo story",
444
+ error,
445
+ });
446
+ }
447
+ }
448
+ async createVideoStory(story) {
449
+ try {
450
+ const videoId = story.source === "url"
451
+ ? await this.saveVideoInMetaStorageMomentaryByUrl(story.url, "stories")
452
+ : await this.saveVideoInMetaStorageMomentaryByPath(story.path, "stories");
453
+ const { data: { post_id }, } = await this.api.post(`${this.pageId}/video_stories`, {
454
+ upload_phase: "finish",
455
+ video_id: videoId,
456
+ access_token: this.pageAccessToken,
457
+ });
458
+ return post_id;
459
+ }
460
+ catch (error) {
461
+ throw new operand_error_1.OperandError({
462
+ message: "Error in create video story",
463
+ error,
464
+ });
465
+ }
466
+ }
467
+ async createStories(story) {
468
+ await this.createTempFolder();
469
+ if (story.mediaType === "photo") {
470
+ return this.createPhotoStory(story);
471
+ }
472
+ else if (story.mediaType === "video") {
473
+ return this.createVideoStory(story);
474
+ }
475
+ else {
476
+ throw new Error("Unsupported media type.");
477
+ }
478
+ }
479
+ async createReels(reel) {
480
+ try {
481
+ await this.createTempFolder();
482
+ const videoId = reel.source === "url"
483
+ ? await this.saveVideoInMetaStorageMomentaryByUrl(reel.url, "reels")
484
+ : await this.saveVideoInMetaStorageMomentaryByPath(reel.path, "reels");
485
+ const { data: { post_id }, } = await this.api.post(`${this.pageId}/video_reels`, {}, {
486
+ params: {
487
+ video_id: videoId,
488
+ upload_phase: "finish",
489
+ video_state: "PUBLISHED",
490
+ description: reel.description,
491
+ title: reel.title,
492
+ access_token: this.pageAccessToken,
493
+ },
494
+ });
495
+ return {
496
+ postId: post_id,
497
+ videoId,
498
+ };
499
+ }
500
+ catch (error) {
501
+ throw new operand_error_1.OperandError({
502
+ message: "Error in create reels",
503
+ error,
504
+ });
505
+ }
506
+ }
507
+ async setThumbnailToReels({ source, value, videoId, }) {
508
+ try {
509
+ let buffer;
510
+ if (source === "path") {
511
+ buffer = await fs.promises.readFile(value);
512
+ }
513
+ else {
514
+ const response = await fetch(value);
515
+ buffer = Buffer.from(await response.arrayBuffer());
516
+ }
517
+ const { ext } = await FileType.fromBuffer(buffer);
518
+ const pathFile = path.resolve(__dirname, "..", "..", "temp", `${new Date().getTime()}.${ext}`);
519
+ await fs.promises.writeFile(pathFile, buffer);
520
+ const fileStream = fs.createReadStream(pathFile);
521
+ const formData = new FormData();
522
+ formData.append("source", fileStream);
523
+ await this.api.post(`${videoId}/thumbnails`, formData, {
524
+ params: {
525
+ access_token: this.pageAccessToken,
526
+ is_preferred: true,
527
+ },
528
+ headers: Object.assign({}, formData.getHeaders()),
529
+ });
530
+ await fs.promises.unlink(pathFile);
531
+ return {
532
+ success: true,
533
+ };
534
+ }
535
+ catch (error) {
536
+ throw new operand_error_1.OperandError({
537
+ message: "Error in set thumbnail to reels",
538
+ error,
539
+ });
540
+ }
541
+ }
542
+ async getLinkStories(id) {
543
+ var _a;
544
+ try {
545
+ return (_a = (await this.api.get(`${this.pageId}/stories`, {
546
+ params: {
547
+ access_token: this.pageAccessToken,
548
+ },
549
+ })).data.data.find((data) => data.post_id === id)) === null || _a === void 0 ? void 0 : _a.url;
550
+ }
551
+ catch (error) {
552
+ throw new operand_error_1.OperandError({
553
+ message: "Error in get link stories",
554
+ error,
555
+ });
556
+ }
557
+ }
558
+ }
559
+ exports.PagePublish = PagePublish;
560
+ //# sourceMappingURL=page-publish.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-publish.js","sourceRoot":"","sources":["../../../../src/modules/publish/page-publish.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};