@vacantthinker/firefox-addon-framework-easy 2026.618.1706 → 2026.619.849
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/dist/ContentJs.d.ts +3 -1
- package/dist/ContentJs.d.ts.map +1 -1
- package/dist/ContentJs.js +48 -29
- package/dist/backgroundJs.d.ts.map +1 -1
- package/dist/backgroundJs.js +6 -0
- package/dist/browserDownload.d.ts.map +1 -1
- package/dist/serviceCommon.d.ts.map +1 -1
- package/dist/serviceCommon.js +1 -2
- package/dist/types.d.ts +5 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/ContentJs.d.ts
CHANGED
|
@@ -6,8 +6,9 @@
|
|
|
6
6
|
* @param filename
|
|
7
7
|
* @param querySelector - Optional custom selector if you aren't targeting the
|
|
8
8
|
* first <img>.
|
|
9
|
+
* @param delayMs
|
|
9
10
|
*/
|
|
10
|
-
export declare function ctJsDownloadYoutubeImageViaCanvas(filename: string, querySelector?: string): void
|
|
11
|
+
export declare function ctJsDownloadYoutubeImageViaCanvas(filename: string, querySelector?: string, delayMs?: number): Promise<void>;
|
|
11
12
|
/**
|
|
12
13
|
* Delays execution for a random period to emulate human actions and bypass
|
|
13
14
|
* anti-bot detections.
|
|
@@ -58,6 +59,7 @@ export declare function ctJsRemoveCurrentTab(): Promise<void>;
|
|
|
58
59
|
export declare function ctJsFocusTargetTab(targetTabId: number): Promise<void>;
|
|
59
60
|
export declare function ctJsReloadTargetTab(targetTabId: number): Promise<void>;
|
|
60
61
|
export declare function ctJsInfoToBackground(info: string): Promise<void>;
|
|
62
|
+
export declare function ctJsDownloadFile(downlink: string, filename: string): Promise<void>;
|
|
61
63
|
export declare function ctJsNotification(content: string): Promise<void>;
|
|
62
64
|
export declare function ctJsBrowserRuntimeSendMessage<T extends {
|
|
63
65
|
act: string;
|
package/dist/ContentJs.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ContentJs.d.ts","sourceRoot":"","sources":["../src/ContentJs.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ContentJs.d.ts","sourceRoot":"","sources":["../src/ContentJs.ts"],"names":[],"mappings":"AAYA;;;;;;;;;GASG;AACH,wBAAgB,iCAAiC,CAC/C,QAAQ,EAAE,MAAM,EAChB,aAAa,GAAE,MAAc,EAC7B,OAAO,GAAE,MAAY,GACpB,OAAO,CAAC,IAAI,CAAC,CAoDf;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAOvE;AAED,wBAAsB,wBAAwB,kBAE7C;AAED,wBAAsB,wBAAwB,kBAE7C;AAED,wBAAsB,wBAAwB,kBAE7C;AAED,wBAAsB,uBAAuB,kBAE5C;AAED,wBAAsB,sBAAsB,kBAE3C;AAED,QAAA,MAAM,YAAY;;;;;;CAMR,CAAC;AAEX,wBAAsB,eAAe,CAAC,MAAM,EAAE,MAAM,OAAO,YAAY,iBAGtE;AAID;;;;;;GAMG;AACH,wBAAgB,+BAA+B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKpE;AAGD;;;;;GAKG;AACH,wBAAsB,kBAAkB,CAAC,EAAE,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBtF;AAED,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,iBAE7C;AAED,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,MAAM,iBAEzD;AAED,wBAAsB,uBAAuB,CAAC,GAAG,EAAE,MAAM,iBAExD;AAED,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,QAKnD;AAQD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,GAAE,MAAW,EAAE,SAAS,UAAO,QAgB/D;AAED,wBAAsB,YAAY,kBAIjC;AAED,wBAAsB,oBAAoB,kBAIzC;AAED,wBAAsB,kBAAkB,CAAC,WAAW,EAAE,MAAM,iBAK3D;AAED,wBAAsB,mBAAmB,CAAC,WAAW,EAAE,MAAM,iBAK5D;AAED,wBAAsB,oBAAoB,CAAC,IAAI,EAAE,MAAM,iBAGtD;AAED,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,iBAIxE;AAED,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,MAAM,iBAIrD;AAED,wBAAsB,6BAA6B,CAAC,CAAC,SAAS;IAC5D,GAAG,EAAE,MAAM,CAAA;CACZ,EAAE,OAAO,EAAE,CAAC,iBAEZ"}
|
package/dist/ContentJs.js
CHANGED
|
@@ -9,36 +9,50 @@ import { browserRuntimeSendMessage } from "./browserRuntime";
|
|
|
9
9
|
* @param filename
|
|
10
10
|
* @param querySelector - Optional custom selector if you aren't targeting the
|
|
11
11
|
* first <img>.
|
|
12
|
+
* @param delayMs
|
|
12
13
|
*/
|
|
13
|
-
export function ctJsDownloadYoutubeImageViaCanvas(filename, querySelector = 'img') {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
14
|
+
export function ctJsDownloadYoutubeImageViaCanvas(filename, querySelector = 'img', delayMs = 300) {
|
|
15
|
+
return new Promise((resolve, reject) => {
|
|
16
|
+
const img = document.body.querySelector(querySelector);
|
|
17
|
+
if (!img) {
|
|
18
|
+
console.warn("No image element found on the page.");
|
|
19
|
+
return resolve();
|
|
20
|
+
}
|
|
21
|
+
const sizes = new Map();
|
|
22
|
+
sizes.set(1280, { w: 1280, h: 720 });
|
|
23
|
+
sizes.set(320, { w: 1280, h: 720 });
|
|
24
|
+
sizes.set(640, { w: 1280, h: 900 });
|
|
25
|
+
sizes.set(480, { w: 1280, h: 900 });
|
|
26
|
+
const { w, h } = sizes.get(img.naturalWidth) || {
|
|
27
|
+
w: img.naturalWidth,
|
|
28
|
+
h: img.naturalHeight
|
|
29
|
+
};
|
|
30
|
+
const canvas = document.createElement('canvas');
|
|
31
|
+
canvas.width = w;
|
|
32
|
+
canvas.height = h;
|
|
33
|
+
const ctx = canvas.getContext('2d');
|
|
34
|
+
if (!ctx)
|
|
35
|
+
return resolve();
|
|
36
|
+
ctx.drawImage(img, 0, 0, w, h);
|
|
37
|
+
// BETTER WAY: Use toBlob instead of toDataURL
|
|
38
|
+
canvas.toBlob((blob) => {
|
|
39
|
+
if (!blob) {
|
|
40
|
+
return reject(new Error("Canvas to Blob conversion failed"));
|
|
41
|
+
}
|
|
42
|
+
// Create a temporary local URL for the binary data
|
|
43
|
+
const blobUrl = URL.createObjectURL(blob);
|
|
44
|
+
const eleA = document.createElement('a');
|
|
45
|
+
eleA.href = blobUrl;
|
|
46
|
+
eleA.download = filename;
|
|
47
|
+
eleA.click();
|
|
48
|
+
// Clean up the memory immediately after the click
|
|
49
|
+
URL.revokeObjectURL(blobUrl);
|
|
50
|
+
// Wait for the browser to register the download before resolving
|
|
51
|
+
setTimeout(() => {
|
|
52
|
+
resolve();
|
|
53
|
+
}, delayMs);
|
|
54
|
+
}, 'image/jpeg', 1.0);
|
|
55
|
+
});
|
|
42
56
|
}
|
|
43
57
|
/**
|
|
44
58
|
* Delays execution for a random period to emulate human actions and bypass
|
|
@@ -176,6 +190,11 @@ export async function ctJsReloadTargetTab(targetTabId) {
|
|
|
176
190
|
export async function ctJsInfoToBackground(info) {
|
|
177
191
|
await browserRuntimeSendMessage({ act: "actInfo", info, });
|
|
178
192
|
}
|
|
193
|
+
export async function ctJsDownloadFile(downlink, filename) {
|
|
194
|
+
await browserRuntimeSendMessage({
|
|
195
|
+
act: "actDownloadFile", downloadParams: { downlink, filename }
|
|
196
|
+
});
|
|
197
|
+
}
|
|
179
198
|
export async function ctJsNotification(content) {
|
|
180
199
|
await browserRuntimeSendMessage({
|
|
181
200
|
act: "actNotification", content,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backgroundJs.d.ts","sourceRoot":"","sources":["../src/backgroundJs.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,wBAAwB,
|
|
1
|
+
{"version":3,"file":"backgroundJs.d.ts","sourceRoot":"","sources":["../src/backgroundJs.ts"],"names":[],"mappings":"AAGA,OAAO,EAAC,wBAAwB,EAA6B,MAAM,SAAS,CAAC;AAI7E,MAAM,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAErF;;;GAGG;AACH,wBAAgB,4BAA4B,CAAC,CAAC,SAAS,MAAM,GAAG,wBAAwB,KACpF,GAAG,CAAC,CAAC,EAAE,cAAc,CAAC,CAiCzB;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAAC,CAAC,SAAS,MAAM,EAC5D,WAAW,EAAE,GAAG,CAAC,CAAC,EAAE,cAAc,CAAC,EACnC,MAAM,GAAE,MAAyB,QAqBlC"}
|
package/dist/backgroundJs.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import { browserTabSendMessageMarcoPolo } from "./browserTab";
|
|
3
3
|
import { tabOpFocus, tabOpReload, tabOpRemove } from "./opTab";
|
|
4
4
|
import { browserNotificationCreateBasicContent } from "./browserNotification";
|
|
5
|
+
import { serviceDownloadByDownlink } from "./serviceCommon";
|
|
5
6
|
/**
|
|
6
7
|
* Uses <T extends string> so the app can pass its own union type.
|
|
7
8
|
* It defaults to FrameworkBaseAction if no type is passed.
|
|
@@ -10,6 +11,11 @@ export function bkJsCreateActionBaseHandlers() {
|
|
|
10
11
|
// We use `any` internally to set the map up without TS complaining,
|
|
11
12
|
// but we return the strictly typed generic Map.
|
|
12
13
|
const map = new Map();
|
|
14
|
+
map.set("actDownloadFile", async (rest) => {
|
|
15
|
+
if (rest && rest.downloadParams) {
|
|
16
|
+
await serviceDownloadByDownlink(rest.downloadParams);
|
|
17
|
+
}
|
|
18
|
+
});
|
|
13
19
|
map.set("actNotification", async (rest) => {
|
|
14
20
|
if (rest && rest.content) {
|
|
15
21
|
await browserNotificationCreateBasicContent(rest.content);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browserDownload.d.ts","sourceRoot":"","sources":["../src/browserDownload.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,wBAAsB,yBAAyB,
|
|
1
|
+
{"version":3,"file":"browserDownload.d.ts","sourceRoot":"","sources":["../src/browserDownload.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAED,wBAAsB,yBAAyB,CAC7C,EACE,QAAQ,EACR,QAAe,GAChB,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAWlC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serviceCommon.d.ts","sourceRoot":"","sources":["../src/serviceCommon.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,cAAc,EAAC,MAAM,mBAAmB,CAAC;AAK5E;;GAEG;AACH,wBAAsB,iBAAiB,kBAGtC;AAED;;;;;GAKG;AACH,wBAAsB,yBAAyB,
|
|
1
|
+
{"version":3,"file":"serviceCommon.d.ts","sourceRoot":"","sources":["../src/serviceCommon.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,cAAc,EAAC,MAAM,mBAAmB,CAAC;AAK5E;;GAEG;AACH,wBAAsB,iBAAiB,kBAGtC;AAED;;;;;GAKG;AACH,wBAAsB,yBAAyB,CAC7C,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBvC"}
|
package/dist/serviceCommon.js
CHANGED
|
@@ -20,8 +20,7 @@ export async function serviceDownloadByDownlink(params) {
|
|
|
20
20
|
try {
|
|
21
21
|
// Attempt 1: Full download with provided parameters
|
|
22
22
|
await browserDownloadByDownlink(params);
|
|
23
|
-
await browserNotificationCreateBasicContent(`downloading! ${filename ??
|
|
24
|
-
'file'}`);
|
|
23
|
+
await browserNotificationCreateBasicContent(`downloading! ${filename ?? 'file'}`);
|
|
25
24
|
}
|
|
26
25
|
catch (error) {
|
|
27
26
|
// Notify about the failure
|
package/dist/types.d.ts
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
|
-
|
|
1
|
+
import { DownloadParams } from "./browserDownload";
|
|
2
|
+
export type MessageActionBaseOptions = "actDownloadFile" | "actNotification" | 'actInfo' | "actMarco" | "actRemoveCurrentTab" | "actFocusTargetTab" | "actReloadTargetTab";
|
|
2
3
|
export interface MessagePayloadAction {
|
|
3
4
|
act: MessageActionBaseOptions;
|
|
4
5
|
}
|
|
6
|
+
export interface MessagePayloadDownloadInfo extends MessagePayloadAction {
|
|
7
|
+
downloadParams: DownloadParams;
|
|
8
|
+
}
|
|
5
9
|
export interface MessagePayloadNotification extends MessagePayloadAction {
|
|
6
10
|
content: string;
|
|
7
11
|
title?: string;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,wBAAwB,GAChC,iBAAiB,GACjB,SAAS,GACT,UAAU,GACV,qBAAqB,GACrB,mBAAmB,GACnB,oBAAoB,CAAA;AAExB,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,wBAAwB,CAAA;CAC9B;AAED,MAAM,WAAW,0BAA2B,SAAQ,oBAAoB;IACtE,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAmB,SAAQ,oBAAoB;IAC9D,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,uBAAwB,SAAQ,oBAAoB;IACnE,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,4BAA4B,GAAG,uBAAuB,CAAC;AACnE,MAAM,MAAM,6BAA6B,GAAG,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,cAAc,EAAC,MAAM,mBAAmB,CAAC;AAEjD,MAAM,MAAM,wBAAwB,GAChC,iBAAiB,GACjB,iBAAiB,GACjB,SAAS,GACT,UAAU,GACV,qBAAqB,GACrB,mBAAmB,GACnB,oBAAoB,CAAA;AAExB,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,wBAAwB,CAAA;CAC9B;AAED,MAAM,WAAW,0BAA2B,SAAQ,oBAAoB;IACtE,cAAc,EAAE,cAAc,CAAC;CAChC;AAED,MAAM,WAAW,0BAA2B,SAAQ,oBAAoB;IACtE,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAmB,SAAQ,oBAAoB;IAC9D,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,uBAAwB,SAAQ,oBAAoB;IACnE,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,MAAM,4BAA4B,GAAG,uBAAuB,CAAC;AACnE,MAAM,MAAM,6BAA6B,GAAG,uBAAuB,CAAC"}
|