channel-worker 2.5.122 → 2.5.123
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/scripts/upload_facebook.js +42 -6
package/package.json
CHANGED
|
@@ -640,7 +640,34 @@ async function isCustomThumbApplied(page) {
|
|
|
640
640
|
if (/Gỡ hình thu nhỏ tùy chỉnh|Remove( your)? custom thumbnail/i.test(al) && vis(el)) return true;
|
|
641
641
|
}
|
|
642
642
|
return false;
|
|
643
|
-
|
|
643
|
+
// `null` = KHÔNG ĐO ĐƯỢC (page.evaluate ném giữa lúc FB dựng lại panel).
|
|
644
|
+
// Bản cũ nuốt thành `false` = "không có thumb", và một mẫu đơn lẻ như thế
|
|
645
|
+
// được quyền bấm Hủy = GỠ ảnh bìa vừa dán. Xem thumbVerdict().
|
|
646
|
+
}).catch(() => null);
|
|
647
|
+
}
|
|
648
|
+
|
|
649
|
+
// Một lần đo KHÔNG được quyết định hành động PHÁ. Đo trên log prod 20/09/2026:
|
|
650
|
+
// trong 152 lượt "hết giờ chờ hộp ảnh bìa đóng", 138 lượt đo thấy thumb đang
|
|
651
|
+
// áp rồi đăng bình thường, còn 14 lượt mẫu CUỐI trả "không áp" (trong khi suốt
|
|
652
|
+
// vòng chờ trước đó mẫu nào cũng "đang áp") → rơi vào nhánh ESC+Hủy, gỡ mất
|
|
653
|
+
// ảnh bìa, rồi chết ở cổng "Custom thumbnail required but not applied".
|
|
654
|
+
// 'applied' — có ít nhất một mẫu thấy nút "Gỡ hình thu nhỏ tùy chỉnh"
|
|
655
|
+
// 'unknown' — không mẫu nào thấy, nhưng có mẫu đo hỏng
|
|
656
|
+
// 'absent' — mọi mẫu đo được và đều không thấy
|
|
657
|
+
function thumbVerdict(samples) {
|
|
658
|
+
const list = Array.isArray(samples) ? samples : [];
|
|
659
|
+
if (list.some((s) => s === true)) return 'applied';
|
|
660
|
+
if (list.some((s) => s === null || s === undefined)) return 'unknown';
|
|
661
|
+
return 'absent';
|
|
662
|
+
}
|
|
663
|
+
|
|
664
|
+
async function sampleCustomThumb(page, { samples = 3, gapMs = 1500 } = {}) {
|
|
665
|
+
const out = [];
|
|
666
|
+
for (let i = 0; i < samples; i++) {
|
|
667
|
+
if (i) await pause(page, gapMs);
|
|
668
|
+
out.push(await isCustomThumbApplied(page));
|
|
669
|
+
}
|
|
670
|
+
return { verdict: thumbVerdict(out), samples: out };
|
|
644
671
|
}
|
|
645
672
|
|
|
646
673
|
// Composer đang ở trạng thái gì? Đọc từ CHỮ trong hộp thoại — ba chữ ký nhìn
|
|
@@ -2136,6 +2163,7 @@ async function runOnce({ page, payload, log }) {
|
|
|
2136
2163
|
// doesn't close within 12s of polling, RE-CLICK Lưu (in case
|
|
2137
2164
|
// the first click didn't register because the button was
|
|
2138
2165
|
// disabled while FB was still hashing the upload).
|
|
2166
|
+
let thumbTimeoutSt = { verdict: 'unknown', samples: [] };
|
|
2139
2167
|
const closeDeadline = Date.now() + 60_000;
|
|
2140
2168
|
let modalClosed = false;
|
|
2141
2169
|
let closedPolls = 0;
|
|
@@ -2230,7 +2258,11 @@ async function runOnce({ page, payload, log }) {
|
|
|
2230
2258
|
}
|
|
2231
2259
|
thumbApplied = true;
|
|
2232
2260
|
log('info', `[fb-pw] page-wall thumb — modal closed after save (retries=${retryCount})`);
|
|
2233
|
-
} else if (await
|
|
2261
|
+
} else if (await (async () => {
|
|
2262
|
+
// Giữ kết quả đo để ghi vào log: bằng chứng vì sao KHÔNG Hủy.
|
|
2263
|
+
thumbTimeoutSt = await sampleCustomThumb(page);
|
|
2264
|
+
return thumbTimeoutSt.verdict !== 'absent';
|
|
2265
|
+
})()) {
|
|
2234
2266
|
// Hết giờ chờ đóng nhưng bằng chứng áp thumb còn đó — tuyệt
|
|
2235
2267
|
// đối không ESC/Hủy (Hủy trên panel này là GỠ thumb).
|
|
2236
2268
|
//
|
|
@@ -2241,10 +2273,10 @@ async function runOnce({ page, payload, log }) {
|
|
|
2241
2273
|
// "Custom thumbnail required but not applied" (đo 04/09/2026,
|
|
2242
2274
|
// 3 lượt liên tiếp, log ghi rõ variant=modal). Nút "Gỡ" là
|
|
2243
2275
|
// bằng chứng vật lý thumb đang áp, biến thể nào cũng đúng.
|
|
2244
|
-
log('info', `[fb-pw] page-wall thumb — hết giờ chờ đóng
|
|
2276
|
+
log('info', `[fb-pw] page-wall thumb — hết giờ chờ đóng, đo 3 nhịp ${JSON.stringify(thumbTimeoutSt.samples)} → ${thumbTimeoutSt.verdict} (variant=${thumbEditorVia}) → giữ panel, coi như dán xong, KHÔNG Hủy`);
|
|
2245
2277
|
thumbApplied = true;
|
|
2246
2278
|
} else {
|
|
2247
|
-
log('warn',
|
|
2279
|
+
log('warn', `[fb-pw] page-wall thumb — modal still open 60s after Lưu click, đo 3 nhịp ${JSON.stringify(thumbTimeoutSt.samples)} → CHẮC CHẮN chưa áp; ESC + click Hủy fallback`);
|
|
2248
2280
|
// Chụp lại trước khi ESC/Hủy: đây là nhánh phá lượt nhiều
|
|
2249
2281
|
// nhất mà lại không có ảnh nào để soi (04/09/2026).
|
|
2250
2282
|
await dumpFailure(page, 'thumb-modal-stuck-before-cancel', log);
|
|
@@ -2625,8 +2657,9 @@ async function runOnce({ page, payload, log }) {
|
|
|
2625
2657
|
// customThumbDone lỡ false trong khi nút "Gỡ hình thu nhỏ tùy chỉnh"
|
|
2626
2658
|
// ngay trên bước này chứng minh thumb ĐANG được áp — cả 5 lượt fail
|
|
2627
2659
|
// 02-03/09 của idea 6a965a32 đều ở trạng thái này (diag 158386).
|
|
2628
|
-
|
|
2629
|
-
|
|
2660
|
+
const gateSt = await sampleCustomThumb(page);
|
|
2661
|
+
if (gateSt.verdict === 'applied') {
|
|
2662
|
+
log('info', `[fb-pw] pre-publish: nút "Gỡ hình thu nhỏ tùy chỉnh" đang hiện (${JSON.stringify(gateSt.samples)}) — thumb đã áp dù cờ chưa bật, tiếp tục đăng`);
|
|
2630
2663
|
customThumbDone = true;
|
|
2631
2664
|
} else {
|
|
2632
2665
|
// Defensive: we normally fail at the caption step (before any Tiếp)
|
|
@@ -3501,6 +3534,9 @@ module.exports = { run };
|
|
|
3501
3534
|
// Exposed so the overlay-click escalation can be exercised against a synthetic
|
|
3502
3535
|
// page (toast covering the CTA) without driving the whole upload flow.
|
|
3503
3536
|
module.exports.__testables = {
|
|
3537
|
+
// Phán quyết "ảnh bìa đã áp chưa" từ nhiều mẫu đo — một mẫu đo hỏng không
|
|
3538
|
+
// được biến thành "chưa áp" rồi kéo theo hành động PHÁ (Hủy = gỡ ảnh bìa).
|
|
3539
|
+
thumbVerdict,
|
|
3504
3540
|
// Dùng chung cho comment_facebook: script nào trượt giữa chừng cũng cần chụp
|
|
3505
3541
|
// lại màn hình, viết bản thứ hai là sớm muộn hai bên lệch nhau.
|
|
3506
3542
|
dumpFailure,
|