@moontaiworks/fanbox-dl 1.0.0
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/LICENSE +21 -0
- package/README.md +148 -0
- package/dist/bundle/index.cjs +2 -0
- package/dist/bundle/index.cjs.map +1 -0
- package/dist/bundle/index.d.cts +296 -0
- package/dist/bundle/index.d.ts +296 -0
- package/dist/bundle/index.js +2 -0
- package/dist/bundle/index.js.map +1 -0
- package/dist/cjs/client-options.d.ts +8 -0
- package/dist/cjs/client-options.d.ts.map +1 -0
- package/dist/cjs/client-options.js +3 -0
- package/dist/cjs/client-options.js.map +1 -0
- package/dist/cjs/client.d.ts +31 -0
- package/dist/cjs/client.d.ts.map +1 -0
- package/dist/cjs/client.js +107 -0
- package/dist/cjs/client.js.map +1 -0
- package/dist/cjs/downloader/asset.d.ts +30 -0
- package/dist/cjs/downloader/asset.d.ts.map +1 -0
- package/dist/cjs/downloader/asset.js +99 -0
- package/dist/cjs/downloader/asset.js.map +1 -0
- package/dist/cjs/downloader/cli.d.ts +8 -0
- package/dist/cjs/downloader/cli.d.ts.map +1 -0
- package/dist/cjs/downloader/cli.js +168 -0
- package/dist/cjs/downloader/cli.js.map +1 -0
- package/dist/cjs/downloader/discovery.d.ts +12 -0
- package/dist/cjs/downloader/discovery.d.ts.map +1 -0
- package/dist/cjs/downloader/discovery.js +87 -0
- package/dist/cjs/downloader/discovery.js.map +1 -0
- package/dist/cjs/downloader/errors.d.ts +5 -0
- package/dist/cjs/downloader/errors.d.ts.map +1 -0
- package/dist/cjs/downloader/errors.js +40 -0
- package/dist/cjs/downloader/errors.js.map +1 -0
- package/dist/cjs/downloader/index.d.ts +3 -0
- package/dist/cjs/downloader/index.d.ts.map +1 -0
- package/dist/cjs/downloader/index.js +8 -0
- package/dist/cjs/downloader/index.js.map +1 -0
- package/dist/cjs/downloader/logger.d.ts +16 -0
- package/dist/cjs/downloader/logger.d.ts.map +1 -0
- package/dist/cjs/downloader/logger.js +51 -0
- package/dist/cjs/downloader/logger.js.map +1 -0
- package/dist/cjs/downloader/manifest.d.ts +31 -0
- package/dist/cjs/downloader/manifest.d.ts.map +1 -0
- package/dist/cjs/downloader/manifest.js +53 -0
- package/dist/cjs/downloader/manifest.js.map +1 -0
- package/dist/cjs/downloader/markdown.d.ts +4 -0
- package/dist/cjs/downloader/markdown.d.ts.map +1 -0
- package/dist/cjs/downloader/markdown.js +62 -0
- package/dist/cjs/downloader/markdown.js.map +1 -0
- package/dist/cjs/downloader/options.d.ts +24 -0
- package/dist/cjs/downloader/options.d.ts.map +1 -0
- package/dist/cjs/downloader/options.js +135 -0
- package/dist/cjs/downloader/options.js.map +1 -0
- package/dist/cjs/downloader/path.d.ts +15 -0
- package/dist/cjs/downloader/path.d.ts.map +1 -0
- package/dist/cjs/downloader/path.js +79 -0
- package/dist/cjs/downloader/path.js.map +1 -0
- package/dist/cjs/downloader/resolver.d.ts +16 -0
- package/dist/cjs/downloader/resolver.d.ts.map +1 -0
- package/dist/cjs/downloader/resolver.js +21 -0
- package/dist/cjs/downloader/resolver.js.map +1 -0
- package/dist/cjs/downloader/scheduler.d.ts +19 -0
- package/dist/cjs/downloader/scheduler.d.ts.map +1 -0
- package/dist/cjs/downloader/scheduler.js +124 -0
- package/dist/cjs/downloader/scheduler.js.map +1 -0
- package/dist/cjs/downloader/sync.d.ts +21 -0
- package/dist/cjs/downloader/sync.d.ts.map +1 -0
- package/dist/cjs/downloader/sync.js +317 -0
- package/dist/cjs/downloader/sync.js.map +1 -0
- package/dist/cjs/endpoints/creator-get.d.ts +7 -0
- package/dist/cjs/endpoints/creator-get.d.ts.map +1 -0
- package/dist/cjs/endpoints/creator-get.js +5 -0
- package/dist/cjs/endpoints/creator-get.js.map +1 -0
- package/dist/cjs/endpoints/creator-list-following.d.ts +4 -0
- package/dist/cjs/endpoints/creator-list-following.d.ts.map +1 -0
- package/dist/cjs/endpoints/creator-list-following.js +5 -0
- package/dist/cjs/endpoints/creator-list-following.js.map +1 -0
- package/dist/cjs/endpoints/fanbox-envelope.d.ts +4 -0
- package/dist/cjs/endpoints/fanbox-envelope.d.ts.map +1 -0
- package/dist/cjs/endpoints/fanbox-envelope.js +3 -0
- package/dist/cjs/endpoints/fanbox-envelope.js.map +1 -0
- package/dist/cjs/endpoints/models/creator.d.ts +40 -0
- package/dist/cjs/endpoints/models/creator.d.ts.map +1 -0
- package/dist/cjs/endpoints/models/creator.js +3 -0
- package/dist/cjs/endpoints/models/creator.js.map +1 -0
- package/dist/cjs/endpoints/models/plan.d.ts +17 -0
- package/dist/cjs/endpoints/models/plan.d.ts.map +1 -0
- package/dist/cjs/endpoints/models/plan.js +3 -0
- package/dist/cjs/endpoints/models/plan.js.map +1 -0
- package/dist/cjs/endpoints/models/post.d.ts +134 -0
- package/dist/cjs/endpoints/models/post.d.ts.map +1 -0
- package/dist/cjs/endpoints/models/post.js +3 -0
- package/dist/cjs/endpoints/models/post.js.map +1 -0
- package/dist/cjs/endpoints/models/user.d.ts +6 -0
- package/dist/cjs/endpoints/models/user.d.ts.map +1 -0
- package/dist/cjs/endpoints/models/user.js +3 -0
- package/dist/cjs/endpoints/models/user.js.map +1 -0
- package/dist/cjs/endpoints/plan-list-creator.d.ts +7 -0
- package/dist/cjs/endpoints/plan-list-creator.d.ts.map +1 -0
- package/dist/cjs/endpoints/plan-list-creator.js +5 -0
- package/dist/cjs/endpoints/plan-list-creator.js.map +1 -0
- package/dist/cjs/endpoints/plan-list-supporting.d.ts +4 -0
- package/dist/cjs/endpoints/plan-list-supporting.d.ts.map +1 -0
- package/dist/cjs/endpoints/plan-list-supporting.js +5 -0
- package/dist/cjs/endpoints/plan-list-supporting.js.map +1 -0
- package/dist/cjs/endpoints/post-info.d.ts +7 -0
- package/dist/cjs/endpoints/post-info.d.ts.map +1 -0
- package/dist/cjs/endpoints/post-info.js +5 -0
- package/dist/cjs/endpoints/post-info.js.map +1 -0
- package/dist/cjs/endpoints/post-list-creator.d.ts +10 -0
- package/dist/cjs/endpoints/post-list-creator.d.ts.map +1 -0
- package/dist/cjs/endpoints/post-list-creator.js +5 -0
- package/dist/cjs/endpoints/post-list-creator.js.map +1 -0
- package/dist/cjs/endpoints/post-list-home.d.ts +5 -0
- package/dist/cjs/endpoints/post-list-home.d.ts.map +1 -0
- package/dist/cjs/endpoints/post-list-home.js +5 -0
- package/dist/cjs/endpoints/post-list-home.js.map +1 -0
- package/dist/cjs/endpoints/post-list-supporting.d.ts +5 -0
- package/dist/cjs/endpoints/post-list-supporting.d.ts.map +1 -0
- package/dist/cjs/endpoints/post-list-supporting.js +5 -0
- package/dist/cjs/endpoints/post-list-supporting.js.map +1 -0
- package/dist/cjs/endpoints/post-paginate-creator.d.ts +8 -0
- package/dist/cjs/endpoints/post-paginate-creator.d.ts.map +1 -0
- package/dist/cjs/endpoints/post-paginate-creator.js +5 -0
- package/dist/cjs/endpoints/post-paginate-creator.js.map +1 -0
- package/dist/cjs/fanbox-headers.d.ts +7 -0
- package/dist/cjs/fanbox-headers.d.ts.map +1 -0
- package/dist/cjs/fanbox-headers.js +23 -0
- package/dist/cjs/fanbox-headers.js.map +1 -0
- package/dist/cjs/http.d.ts +31 -0
- package/dist/cjs/http.d.ts.map +1 -0
- package/dist/cjs/http.js +200 -0
- package/dist/cjs/http.js.map +1 -0
- package/dist/cjs/index.d.ts +3 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +7 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/types.d.ts +16 -0
- package/dist/cjs/types.d.ts.map +1 -0
- package/dist/cjs/types.js +3 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/esm/client-options.d.ts +8 -0
- package/dist/esm/client-options.d.ts.map +1 -0
- package/dist/esm/client-options.js +2 -0
- package/dist/esm/client-options.js.map +1 -0
- package/dist/esm/client.d.ts +31 -0
- package/dist/esm/client.d.ts.map +1 -0
- package/dist/esm/client.js +102 -0
- package/dist/esm/client.js.map +1 -0
- package/dist/esm/downloader/asset.d.ts +30 -0
- package/dist/esm/downloader/asset.d.ts.map +1 -0
- package/dist/esm/downloader/asset.js +91 -0
- package/dist/esm/downloader/asset.js.map +1 -0
- package/dist/esm/downloader/cli.d.ts +8 -0
- package/dist/esm/downloader/cli.d.ts.map +1 -0
- package/dist/esm/downloader/cli.js +164 -0
- package/dist/esm/downloader/cli.js.map +1 -0
- package/dist/esm/downloader/discovery.d.ts +12 -0
- package/dist/esm/downloader/discovery.d.ts.map +1 -0
- package/dist/esm/downloader/discovery.js +84 -0
- package/dist/esm/downloader/discovery.js.map +1 -0
- package/dist/esm/downloader/errors.d.ts +5 -0
- package/dist/esm/downloader/errors.d.ts.map +1 -0
- package/dist/esm/downloader/errors.js +36 -0
- package/dist/esm/downloader/errors.js.map +1 -0
- package/dist/esm/downloader/index.d.ts +3 -0
- package/dist/esm/downloader/index.d.ts.map +1 -0
- package/dist/esm/downloader/index.js +6 -0
- package/dist/esm/downloader/index.js.map +1 -0
- package/dist/esm/downloader/logger.d.ts +16 -0
- package/dist/esm/downloader/logger.d.ts.map +1 -0
- package/dist/esm/downloader/logger.js +47 -0
- package/dist/esm/downloader/logger.js.map +1 -0
- package/dist/esm/downloader/manifest.d.ts +31 -0
- package/dist/esm/downloader/manifest.d.ts.map +1 -0
- package/dist/esm/downloader/manifest.js +46 -0
- package/dist/esm/downloader/manifest.js.map +1 -0
- package/dist/esm/downloader/markdown.d.ts +4 -0
- package/dist/esm/downloader/markdown.d.ts.map +1 -0
- package/dist/esm/downloader/markdown.js +59 -0
- package/dist/esm/downloader/markdown.js.map +1 -0
- package/dist/esm/downloader/options.d.ts +24 -0
- package/dist/esm/downloader/options.d.ts.map +1 -0
- package/dist/esm/downloader/options.js +130 -0
- package/dist/esm/downloader/options.js.map +1 -0
- package/dist/esm/downloader/path.d.ts +15 -0
- package/dist/esm/downloader/path.d.ts.map +1 -0
- package/dist/esm/downloader/path.js +69 -0
- package/dist/esm/downloader/path.js.map +1 -0
- package/dist/esm/downloader/resolver.d.ts +16 -0
- package/dist/esm/downloader/resolver.d.ts.map +1 -0
- package/dist/esm/downloader/resolver.js +18 -0
- package/dist/esm/downloader/resolver.js.map +1 -0
- package/dist/esm/downloader/scheduler.d.ts +19 -0
- package/dist/esm/downloader/scheduler.d.ts.map +1 -0
- package/dist/esm/downloader/scheduler.js +120 -0
- package/dist/esm/downloader/scheduler.js.map +1 -0
- package/dist/esm/downloader/sync.d.ts +21 -0
- package/dist/esm/downloader/sync.d.ts.map +1 -0
- package/dist/esm/downloader/sync.js +311 -0
- package/dist/esm/downloader/sync.js.map +1 -0
- package/dist/esm/endpoints/creator-get.d.ts +7 -0
- package/dist/esm/endpoints/creator-get.d.ts.map +1 -0
- package/dist/esm/endpoints/creator-get.js +2 -0
- package/dist/esm/endpoints/creator-get.js.map +1 -0
- package/dist/esm/endpoints/creator-list-following.d.ts +4 -0
- package/dist/esm/endpoints/creator-list-following.d.ts.map +1 -0
- package/dist/esm/endpoints/creator-list-following.js +2 -0
- package/dist/esm/endpoints/creator-list-following.js.map +1 -0
- package/dist/esm/endpoints/fanbox-envelope.d.ts +4 -0
- package/dist/esm/endpoints/fanbox-envelope.d.ts.map +1 -0
- package/dist/esm/endpoints/fanbox-envelope.js +2 -0
- package/dist/esm/endpoints/fanbox-envelope.js.map +1 -0
- package/dist/esm/endpoints/models/creator.d.ts +40 -0
- package/dist/esm/endpoints/models/creator.d.ts.map +1 -0
- package/dist/esm/endpoints/models/creator.js +2 -0
- package/dist/esm/endpoints/models/creator.js.map +1 -0
- package/dist/esm/endpoints/models/plan.d.ts +17 -0
- package/dist/esm/endpoints/models/plan.d.ts.map +1 -0
- package/dist/esm/endpoints/models/plan.js +2 -0
- package/dist/esm/endpoints/models/plan.js.map +1 -0
- package/dist/esm/endpoints/models/post.d.ts +134 -0
- package/dist/esm/endpoints/models/post.d.ts.map +1 -0
- package/dist/esm/endpoints/models/post.js +2 -0
- package/dist/esm/endpoints/models/post.js.map +1 -0
- package/dist/esm/endpoints/models/user.d.ts +6 -0
- package/dist/esm/endpoints/models/user.d.ts.map +1 -0
- package/dist/esm/endpoints/models/user.js +2 -0
- package/dist/esm/endpoints/models/user.js.map +1 -0
- package/dist/esm/endpoints/plan-list-creator.d.ts +7 -0
- package/dist/esm/endpoints/plan-list-creator.d.ts.map +1 -0
- package/dist/esm/endpoints/plan-list-creator.js +2 -0
- package/dist/esm/endpoints/plan-list-creator.js.map +1 -0
- package/dist/esm/endpoints/plan-list-supporting.d.ts +4 -0
- package/dist/esm/endpoints/plan-list-supporting.d.ts.map +1 -0
- package/dist/esm/endpoints/plan-list-supporting.js +2 -0
- package/dist/esm/endpoints/plan-list-supporting.js.map +1 -0
- package/dist/esm/endpoints/post-info.d.ts +7 -0
- package/dist/esm/endpoints/post-info.d.ts.map +1 -0
- package/dist/esm/endpoints/post-info.js +2 -0
- package/dist/esm/endpoints/post-info.js.map +1 -0
- package/dist/esm/endpoints/post-list-creator.d.ts +10 -0
- package/dist/esm/endpoints/post-list-creator.d.ts.map +1 -0
- package/dist/esm/endpoints/post-list-creator.js +2 -0
- package/dist/esm/endpoints/post-list-creator.js.map +1 -0
- package/dist/esm/endpoints/post-list-home.d.ts +5 -0
- package/dist/esm/endpoints/post-list-home.d.ts.map +1 -0
- package/dist/esm/endpoints/post-list-home.js +2 -0
- package/dist/esm/endpoints/post-list-home.js.map +1 -0
- package/dist/esm/endpoints/post-list-supporting.d.ts +5 -0
- package/dist/esm/endpoints/post-list-supporting.d.ts.map +1 -0
- package/dist/esm/endpoints/post-list-supporting.js +2 -0
- package/dist/esm/endpoints/post-list-supporting.js.map +1 -0
- package/dist/esm/endpoints/post-paginate-creator.d.ts +8 -0
- package/dist/esm/endpoints/post-paginate-creator.d.ts.map +1 -0
- package/dist/esm/endpoints/post-paginate-creator.js +2 -0
- package/dist/esm/endpoints/post-paginate-creator.js.map +1 -0
- package/dist/esm/fanbox-headers.d.ts +7 -0
- package/dist/esm/fanbox-headers.d.ts.map +1 -0
- package/dist/esm/fanbox-headers.js +19 -0
- package/dist/esm/fanbox-headers.js.map +1 -0
- package/dist/esm/http.d.ts +31 -0
- package/dist/esm/http.d.ts.map +1 -0
- package/dist/esm/http.js +195 -0
- package/dist/esm/http.js.map +1 -0
- package/dist/esm/index.d.ts +3 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +2 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/types.d.ts +16 -0
- package/dist/esm/types.d.ts.map +1 -0
- package/dist/esm/types.js +2 -0
- package/dist/esm/types.js.map +1 -0
- package/package.json +98 -0
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
const LEVEL_WEIGHTS = {
|
|
2
|
+
debug: 10,
|
|
3
|
+
error: 40,
|
|
4
|
+
info: 20,
|
|
5
|
+
warn: 30,
|
|
6
|
+
};
|
|
7
|
+
export function createLogger(options = {}) {
|
|
8
|
+
const format = options.format ?? "json";
|
|
9
|
+
const minimumLevel = options.level ?? "info";
|
|
10
|
+
const write = options.write ?? ((line) => process.stdout.write(`${line}\n`));
|
|
11
|
+
const log = (level, event, message, fields = {}) => {
|
|
12
|
+
if (LEVEL_WEIGHTS[level] < LEVEL_WEIGHTS[minimumLevel]) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
const entry = {
|
|
16
|
+
event,
|
|
17
|
+
level,
|
|
18
|
+
msg: message,
|
|
19
|
+
time: new Date().toISOString(),
|
|
20
|
+
...fields,
|
|
21
|
+
};
|
|
22
|
+
write(format === "json"
|
|
23
|
+
? JSON.stringify(entry)
|
|
24
|
+
: `${entry.time} ${level.toUpperCase()} ${event} ${message} ${JSON.stringify(fields)}`);
|
|
25
|
+
};
|
|
26
|
+
return {
|
|
27
|
+
debug: (event, message, fields) => {
|
|
28
|
+
log("debug", event, message, fields);
|
|
29
|
+
},
|
|
30
|
+
error: (event, message, fields) => {
|
|
31
|
+
log("error", event, message, fields);
|
|
32
|
+
},
|
|
33
|
+
info: (event, message, fields) => {
|
|
34
|
+
log("info", event, message, fields);
|
|
35
|
+
},
|
|
36
|
+
warn: (event, message, fields) => {
|
|
37
|
+
log("warn", event, message, fields);
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
export const silentLogger = {
|
|
42
|
+
debug: () => undefined,
|
|
43
|
+
error: () => undefined,
|
|
44
|
+
info: () => undefined,
|
|
45
|
+
warn: () => undefined,
|
|
46
|
+
};
|
|
47
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/downloader/logger.ts"],"names":[],"mappings":"AAiBA,MAAM,aAAa,GAA6B;IAC9C,KAAK,EAAE,EAAE;IACT,KAAK,EAAE,EAAE;IACT,IAAI,EAAE,EAAE;IACR,IAAI,EAAE,EAAE;CACT,CAAC;AAEF,MAAM,UAAU,YAAY,CAAC,UAA+B,EAAE;IAC5D,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC;IACxC,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,IAAI,MAAM,CAAC;IAC7C,MAAM,KAAK,GACT,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC;IACzE,MAAM,GAAG,GAAG,CACV,KAAe,EACf,KAAa,EACb,OAAe,EACf,SAAoB,EAAE,EACtB,EAAE;QACF,IAAI,aAAa,CAAC,KAAK,CAAC,GAAG,aAAa,CAAC,YAAY,CAAC,EAAE,CAAC;YACvD,OAAO;QACT,CAAC;QACD,MAAM,KAAK,GAAG;YACZ,KAAK;YACL,KAAK;YACL,GAAG,EAAE,OAAO;YACZ,IAAI,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YAC9B,GAAG,MAAM;SACV,CAAC;QACF,KAAK,CACH,MAAM,KAAK,MAAM;YACf,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;YACvB,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,WAAW,EAAE,IAAI,KAAK,IAAI,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CACzF,CAAC;IACJ,CAAC,CAAC;IAEF,OAAO;QACL,KAAK,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;YAChC,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QACvC,CAAC;QACD,KAAK,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;YAChC,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QACvC,CAAC;QACD,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;YAC/B,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QACtC,CAAC;QACD,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;YAC/B,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QACtC,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAW;IAClC,KAAK,EAAE,GAAG,EAAE,CAAC,SAAS;IACtB,KAAK,EAAE,GAAG,EAAE,CAAC,SAAS;IACtB,IAAI,EAAE,GAAG,EAAE,CAAC,SAAS;IACrB,IAAI,EAAE,GAAG,EAAE,CAAC,SAAS;CACtB,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export interface AssetManifestEntry {
|
|
2
|
+
bytes?: number;
|
|
3
|
+
error?: string;
|
|
4
|
+
path: string;
|
|
5
|
+
sha256?: string;
|
|
6
|
+
status: AssetStatus;
|
|
7
|
+
url: string;
|
|
8
|
+
}
|
|
9
|
+
export type AssetStatus = "complete" | "downloading" | "failed" | "obsolete" | "pending";
|
|
10
|
+
export interface CreatorManifest {
|
|
11
|
+
creatorId: string;
|
|
12
|
+
posts: Partial<Record<string, PostManifestEntry>>;
|
|
13
|
+
schemaVersion: 1;
|
|
14
|
+
}
|
|
15
|
+
export interface PostManifestEntry {
|
|
16
|
+
assets: Partial<Record<string, AssetManifestEntry>>;
|
|
17
|
+
directory: string;
|
|
18
|
+
error?: string;
|
|
19
|
+
id: string;
|
|
20
|
+
restricted: boolean;
|
|
21
|
+
status: PostStatus;
|
|
22
|
+
updatedDatetime: string;
|
|
23
|
+
}
|
|
24
|
+
export type PostStatus = "complete" | "failed" | "pending" | "skipped";
|
|
25
|
+
export declare class ManifestStore {
|
|
26
|
+
#private;
|
|
27
|
+
constructor(outputDirectory: string, creatorId: string);
|
|
28
|
+
load(): Promise<CreatorManifest>;
|
|
29
|
+
save(manifest: CreatorManifest): Promise<void>;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=manifest.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../src/downloader/manifest.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,WAAW,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;CACb;AACD,MAAM,MAAM,WAAW,GACnB,UAAU,GACV,aAAa,GACb,QAAQ,GACR,UAAU,GACV,SAAS,CAAC;AAEd,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC;IAClD,aAAa,EAAE,CAAC,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,CAAC;IACpD,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,UAAU,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,CAAC;AAEvE,qBAAa,aAAa;;gBAIL,eAAe,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAQhD,IAAI,IAAI,OAAO,CAAC,eAAe,CAAC;IAkBhC,IAAI,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;CAM5D"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
2
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
3
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
4
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
5
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
6
|
+
};
|
|
7
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
8
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
9
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
10
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
11
|
+
};
|
|
12
|
+
var _ManifestStore_creatorDirectory, _ManifestStore_manifestPath;
|
|
13
|
+
import { mkdir, readFile, rename, writeFile } from "node:fs/promises";
|
|
14
|
+
import path from "node:path";
|
|
15
|
+
import { createCreatorDirectoryName } from "./path.js";
|
|
16
|
+
export class ManifestStore {
|
|
17
|
+
constructor(outputDirectory, creatorId) {
|
|
18
|
+
_ManifestStore_creatorDirectory.set(this, void 0);
|
|
19
|
+
_ManifestStore_manifestPath.set(this, void 0);
|
|
20
|
+
__classPrivateFieldSet(this, _ManifestStore_creatorDirectory, path.join(outputDirectory, createCreatorDirectoryName(creatorId, outputDirectory)), "f");
|
|
21
|
+
__classPrivateFieldSet(this, _ManifestStore_manifestPath, path.join(__classPrivateFieldGet(this, _ManifestStore_creatorDirectory, "f"), "manifest.json"), "f");
|
|
22
|
+
}
|
|
23
|
+
async load() {
|
|
24
|
+
try {
|
|
25
|
+
return JSON.parse(await readFile(__classPrivateFieldGet(this, _ManifestStore_manifestPath, "f"), "utf8"));
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
if (error.code !== "ENOENT") {
|
|
29
|
+
throw error;
|
|
30
|
+
}
|
|
31
|
+
return {
|
|
32
|
+
creatorId: path.basename(__classPrivateFieldGet(this, _ManifestStore_creatorDirectory, "f")),
|
|
33
|
+
posts: {},
|
|
34
|
+
schemaVersion: 1,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
async save(manifest) {
|
|
39
|
+
await mkdir(__classPrivateFieldGet(this, _ManifestStore_creatorDirectory, "f"), { recursive: true });
|
|
40
|
+
const temporaryPath = `${__classPrivateFieldGet(this, _ManifestStore_manifestPath, "f")}.tmp`;
|
|
41
|
+
await writeFile(temporaryPath, `${JSON.stringify(manifest, null, 2)}\n`);
|
|
42
|
+
await rename(temporaryPath, __classPrivateFieldGet(this, _ManifestStore_manifestPath, "f"));
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
_ManifestStore_creatorDirectory = new WeakMap(), _ManifestStore_manifestPath = new WeakMap();
|
|
46
|
+
//# sourceMappingURL=manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../../src/downloader/manifest.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,0BAA0B,EAAE,MAAM,WAAW,CAAC;AAmCvD,MAAM,OAAO,aAAa;IAIxB,YAAmB,eAAuB,EAAE,SAAiB;QAHpD,kDAA0B;QAC1B,8CAAsB;QAG7B,uBAAA,IAAI,mCAAqB,IAAI,CAAC,IAAI,CAChC,eAAe,EACf,0BAA0B,CAAC,SAAS,EAAE,eAAe,CAAC,CACvD,MAAA,CAAC;QACF,uBAAA,IAAI,+BAAiB,IAAI,CAAC,IAAI,CAAC,uBAAA,IAAI,uCAAkB,EAAE,eAAe,CAAC,MAAA,CAAC;IAC1E,CAAC;IAEM,KAAK,CAAC,IAAI;QACf,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CACf,MAAM,QAAQ,CAAC,uBAAA,IAAI,mCAAc,EAAE,MAAM,CAAC,CACxB,CAAC;QACvB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACvD,MAAM,KAAK,CAAC;YACd,CAAC;YAED,OAAO;gBACL,SAAS,EAAE,IAAI,CAAC,QAAQ,CAAC,uBAAA,IAAI,uCAAkB,CAAC;gBAChD,KAAK,EAAE,EAAE;gBACT,aAAa,EAAE,CAAC;aACjB,CAAC;QACJ,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,QAAyB;QACzC,MAAM,KAAK,CAAC,uBAAA,IAAI,uCAAkB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzD,MAAM,aAAa,GAAG,GAAG,uBAAA,IAAI,mCAAc,MAAM,CAAC;QAClD,MAAM,SAAS,CAAC,aAAa,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QACzE,MAAM,MAAM,CAAC,aAAa,EAAE,uBAAA,IAAI,mCAAc,CAAC,CAAC;IAClD,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../../../src/downloader/markdown.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAIV,IAAI,EAGL,MAAM,aAAa,CAAC;AAErB,MAAM,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEvD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,GAAG,MAAM,CAwC1E"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
export function renderPostMarkdown(post, paths) {
|
|
2
|
+
let content;
|
|
3
|
+
switch (post.type) {
|
|
4
|
+
case "article":
|
|
5
|
+
content = renderArticle(post, paths);
|
|
6
|
+
break;
|
|
7
|
+
case "file": {
|
|
8
|
+
const filePost = post;
|
|
9
|
+
content = [
|
|
10
|
+
filePost.body.text,
|
|
11
|
+
...filePost.body.files.map((file) => `[${file.name}](${assetLink(paths, `file:${file.id}`)})`),
|
|
12
|
+
].join("\n\n");
|
|
13
|
+
break;
|
|
14
|
+
}
|
|
15
|
+
case "image": {
|
|
16
|
+
const imagePost = post;
|
|
17
|
+
content = [
|
|
18
|
+
imagePost.body.text,
|
|
19
|
+
...imagePost.body.images.map((image) => `})`),
|
|
20
|
+
].join("\n\n");
|
|
21
|
+
break;
|
|
22
|
+
}
|
|
23
|
+
case "text":
|
|
24
|
+
content = post.body.text;
|
|
25
|
+
break;
|
|
26
|
+
case "video": {
|
|
27
|
+
const videoPost = post;
|
|
28
|
+
content = `${videoPost.body.text}\n\n${videoPost.body.video.serviceProvider}: ${videoPost.body.video.videoId}`;
|
|
29
|
+
break;
|
|
30
|
+
}
|
|
31
|
+
default:
|
|
32
|
+
content = `[unsupported post type: ${post.type}]`;
|
|
33
|
+
}
|
|
34
|
+
return `# ${post.title}\n\n${content.trim()}\n`;
|
|
35
|
+
}
|
|
36
|
+
function assetLink(paths, key) {
|
|
37
|
+
return paths.get(key) ?? `[missing asset: ${key}]`;
|
|
38
|
+
}
|
|
39
|
+
function renderArticle(post, paths) {
|
|
40
|
+
return post.body.blocks
|
|
41
|
+
.map((block) => {
|
|
42
|
+
switch (block.type) {
|
|
43
|
+
case "file":
|
|
44
|
+
return `[${String(block.fileId)}](${assetLink(paths, `file:${String(block.fileId)}`)})`;
|
|
45
|
+
case "header":
|
|
46
|
+
return `# ${String(block.text)}`;
|
|
47
|
+
case "image":
|
|
48
|
+
return `}`)})`;
|
|
49
|
+
case "p":
|
|
50
|
+
return String(block.text);
|
|
51
|
+
case "url_embed":
|
|
52
|
+
return String(post.body.urlEmbedMap[String(block.urlEmbedId)] ?? block.urlEmbedId);
|
|
53
|
+
default:
|
|
54
|
+
return `[unsupported block: ${block.type}]`;
|
|
55
|
+
}
|
|
56
|
+
})
|
|
57
|
+
.join("\n\n");
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=markdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../../src/downloader/markdown.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { LogLevel } from "./logger.js";
|
|
2
|
+
export interface DownloadOptions {
|
|
3
|
+
concurrency: number;
|
|
4
|
+
cookie?: string;
|
|
5
|
+
creatorIds: string[];
|
|
6
|
+
dryRun: boolean;
|
|
7
|
+
flatPosts: boolean;
|
|
8
|
+
following: boolean;
|
|
9
|
+
ignoreCreatorIds: string[];
|
|
10
|
+
logFormat: "json" | "pretty";
|
|
11
|
+
logLevel: LogLevel;
|
|
12
|
+
maxRetries: number;
|
|
13
|
+
output: string;
|
|
14
|
+
rateLimitPauseMs: number;
|
|
15
|
+
requestIntervalMs: number;
|
|
16
|
+
supporting: boolean;
|
|
17
|
+
userAgent?: string;
|
|
18
|
+
verifyAssets: boolean;
|
|
19
|
+
}
|
|
20
|
+
export declare class CliUsageError extends Error {
|
|
21
|
+
constructor(message: string);
|
|
22
|
+
}
|
|
23
|
+
export declare function parseDownloadOptions(args: string[], env?: NodeJS.ProcessEnv): DownloadOptions;
|
|
24
|
+
//# sourceMappingURL=options.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../../src/downloader/options.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,WAAW,eAAe;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,SAAS,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC7B,QAAQ,EAAE,QAAQ,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,gBAAgB,EAAE,MAAM,CAAC;IACzB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,qBAAa,aAAc,SAAQ,KAAK;gBACnB,OAAO,EAAE,MAAM;CAInC;AAED,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EAAE,EACd,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,eAAe,CA8CjB"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import { parseArgs } from "node:util";
|
|
3
|
+
export class CliUsageError extends Error {
|
|
4
|
+
constructor(message) {
|
|
5
|
+
super(message);
|
|
6
|
+
this.name = "CliUsageError";
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
export function parseDownloadOptions(args, env = process.env) {
|
|
10
|
+
const { values } = parseDownloadArgs(args);
|
|
11
|
+
const creatorIds = values.creator ?? [];
|
|
12
|
+
if (creatorIds.length === 0 && !values.following && !values.supporting) {
|
|
13
|
+
throw new CliUsageError("at least one creator selector is required");
|
|
14
|
+
}
|
|
15
|
+
if (values["log-format"] !== "json" && values["log-format"] !== "pretty") {
|
|
16
|
+
throw new CliUsageError("log-format must be json or pretty");
|
|
17
|
+
}
|
|
18
|
+
if (!isLogLevel(values["log-level"])) {
|
|
19
|
+
throw new CliUsageError("log-level must be debug, info, warn, or error");
|
|
20
|
+
}
|
|
21
|
+
const cookieFile = values["cookie-file"];
|
|
22
|
+
const cookie = normalizeCookie(values.cookie ??
|
|
23
|
+
(cookieFile === undefined
|
|
24
|
+
? undefined
|
|
25
|
+
: readFileSync(cookieFile, "utf8")) ??
|
|
26
|
+
env.FANBOX_SESSION_ID);
|
|
27
|
+
return {
|
|
28
|
+
concurrency: parsePositiveInteger("concurrency", values.concurrency),
|
|
29
|
+
cookie,
|
|
30
|
+
creatorIds,
|
|
31
|
+
dryRun: values["dry-run"],
|
|
32
|
+
flatPosts: values["flat-posts"],
|
|
33
|
+
following: values.following,
|
|
34
|
+
ignoreCreatorIds: values["ignore-creator"] ?? [],
|
|
35
|
+
logFormat: values["log-format"],
|
|
36
|
+
logLevel: values["log-level"],
|
|
37
|
+
maxRetries: parseNonNegativeInteger("max-retries", values["max-retries"]),
|
|
38
|
+
output: values.output,
|
|
39
|
+
rateLimitPauseMs: parseNonNegativeInteger("rate-limit-pause-ms", values["rate-limit-pause-ms"]),
|
|
40
|
+
requestIntervalMs: parseNonNegativeInteger("request-interval-ms", values["request-interval-ms"]),
|
|
41
|
+
supporting: values.supporting,
|
|
42
|
+
userAgent: values["user-agent"],
|
|
43
|
+
verifyAssets: values["verify-assets"],
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
function isFanboxCookieDomain(domain) {
|
|
47
|
+
const normalized = domain.replace(/^\./, "").toLowerCase();
|
|
48
|
+
return normalized === "fanbox.cc" || normalized.endsWith(".fanbox.cc");
|
|
49
|
+
}
|
|
50
|
+
function isLogLevel(value) {
|
|
51
|
+
return (value === "debug" ||
|
|
52
|
+
value === "info" ||
|
|
53
|
+
value === "warn" ||
|
|
54
|
+
value === "error");
|
|
55
|
+
}
|
|
56
|
+
function normalizeCookie(cookie) {
|
|
57
|
+
const value = cookie?.trim();
|
|
58
|
+
if (!value) {
|
|
59
|
+
return undefined;
|
|
60
|
+
}
|
|
61
|
+
const cookies = parseNetscapeCookies(value);
|
|
62
|
+
if (cookies.length > 0) {
|
|
63
|
+
return cookies.map(({ name, value }) => `${name}=${value}`).join("; ");
|
|
64
|
+
}
|
|
65
|
+
return value.includes("=") ? value : `FANBOXSESSID=${value}`;
|
|
66
|
+
}
|
|
67
|
+
function parseDownloadArgs(args) {
|
|
68
|
+
try {
|
|
69
|
+
return parseArgs({
|
|
70
|
+
allowPositionals: false,
|
|
71
|
+
args: args.slice(1),
|
|
72
|
+
options: {
|
|
73
|
+
concurrency: { default: "3", type: "string" },
|
|
74
|
+
cookie: { type: "string" },
|
|
75
|
+
"cookie-file": { type: "string" },
|
|
76
|
+
creator: { multiple: true, type: "string" },
|
|
77
|
+
"dry-run": { default: false, type: "boolean" },
|
|
78
|
+
"flat-posts": { default: false, type: "boolean" },
|
|
79
|
+
following: { default: false, type: "boolean" },
|
|
80
|
+
"ignore-creator": { multiple: true, type: "string" },
|
|
81
|
+
"log-format": { default: "json", type: "string" },
|
|
82
|
+
"log-level": { default: "info", type: "string" },
|
|
83
|
+
"max-retries": { default: "5", type: "string" },
|
|
84
|
+
output: { default: "fanbox-downloads", type: "string" },
|
|
85
|
+
"rate-limit-pause-ms": { default: "60000", type: "string" },
|
|
86
|
+
"request-interval-ms": { default: "0", type: "string" },
|
|
87
|
+
supporting: { default: false, type: "boolean" },
|
|
88
|
+
"user-agent": { type: "string" },
|
|
89
|
+
"verify-assets": { default: false, type: "boolean" },
|
|
90
|
+
},
|
|
91
|
+
strict: true,
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
throw new CliUsageError(error.message);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
function parseNetscapeCookies(value) {
|
|
99
|
+
const cookies = [];
|
|
100
|
+
for (const line of value.split(/\r?\n/)) {
|
|
101
|
+
if (!line || line.startsWith("#")) {
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
const columns = line.split("\t");
|
|
105
|
+
if (columns.length < 7) {
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
const [domain, , , , , name, cookieValue] = columns;
|
|
109
|
+
if (!isFanboxCookieDomain(domain)) {
|
|
110
|
+
continue;
|
|
111
|
+
}
|
|
112
|
+
cookies.push({ name, value: cookieValue });
|
|
113
|
+
}
|
|
114
|
+
return cookies;
|
|
115
|
+
}
|
|
116
|
+
function parseNonNegativeInteger(name, value) {
|
|
117
|
+
const number = Number(value);
|
|
118
|
+
if (!Number.isSafeInteger(number) || number < 0) {
|
|
119
|
+
throw new CliUsageError(`${name} must be a non-negative integer`);
|
|
120
|
+
}
|
|
121
|
+
return number;
|
|
122
|
+
}
|
|
123
|
+
function parsePositiveInteger(name, value) {
|
|
124
|
+
const number = parseNonNegativeInteger(name, value);
|
|
125
|
+
if (number === 0) {
|
|
126
|
+
throw new CliUsageError(`${name} must be a positive integer`);
|
|
127
|
+
}
|
|
128
|
+
return number;
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=options.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"options.js","sourceRoot":"","sources":["../../../src/downloader/options.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface SanitizePathComponentOptions {
|
|
2
|
+
maxBytes?: number;
|
|
3
|
+
reserveBytes?: number;
|
|
4
|
+
suffix?: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function assertPathBudget(absolutePath: string, maxBytes?: number): void;
|
|
7
|
+
export declare function createCreatorDirectoryName(creatorId: string, outputDirectory: string): string;
|
|
8
|
+
export declare function createPostDirectoryName(post: {
|
|
9
|
+
id: string;
|
|
10
|
+
publishedDatetime: string;
|
|
11
|
+
title: string;
|
|
12
|
+
}, parentDirectory?: string): string;
|
|
13
|
+
export declare function sanitizePathComponent(value: string, options?: SanitizePathComponentOptions): string;
|
|
14
|
+
export declare function sanitizePathComponentForDirectory(value: string, directory: string, options?: SanitizePathComponentOptions): string;
|
|
15
|
+
//# sourceMappingURL=path.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path.d.ts","sourceRoot":"","sources":["../../../src/downloader/path.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAgB,gBAAgB,CAC9B,YAAY,EAAE,MAAM,EACpB,QAAQ,SAAqB,GAC5B,IAAI,CAMN;AAED,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,MAAM,EACjB,eAAe,EAAE,MAAM,GACtB,MAAM,CAIR;AAED,wBAAgB,uBAAuB,CACrC,IAAI,EAAE;IACJ,EAAE,EAAE,MAAM,CAAC;IACX,iBAAiB,EAAE,MAAM,CAAC;IAC1B,KAAK,EAAE,MAAM,CAAC;CACf,EACD,eAAe,CAAC,EAAE,MAAM,GACvB,MAAM,CAWR;AAED,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,4BAAiC,GACzC,MAAM,CAiBR;AAED,wBAAgB,iCAAiC,CAC/C,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,4BAAiC,GACzC,MAAM,CAiBR"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
const DEFAULT_COMPONENT_BYTES = 120;
|
|
3
|
+
const DEFAULT_PATH_BYTES = 240;
|
|
4
|
+
const RESERVED_NAMES = /^(?:AUX|CON|NUL|PRN|COM[1-9]|LPT[1-9])(?:\..*)?$/i;
|
|
5
|
+
const RESERVED_PREFIX = /^(?:AUX|CON|NUL|PRN|COM[1-9]|LPT[1-9])(?=$|[. <>:"/\\|?*])/i;
|
|
6
|
+
const SEGMENTER = new Intl.Segmenter(undefined, { granularity: "grapheme" });
|
|
7
|
+
export function assertPathBudget(absolutePath, maxBytes = DEFAULT_PATH_BYTES) {
|
|
8
|
+
if (Buffer.byteLength(path.resolve(absolutePath)) > maxBytes) {
|
|
9
|
+
throw new Error(`Path exceeds ${maxBytes} byte path budget: ${absolutePath}`);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export function createCreatorDirectoryName(creatorId, outputDirectory) {
|
|
13
|
+
return sanitizePathComponentForDirectory(creatorId, outputDirectory, {
|
|
14
|
+
reserveBytes: Buffer.byteLength(`${path.sep}manifest.json`),
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
export function createPostDirectoryName(post, parentDirectory) {
|
|
18
|
+
const date = post.publishedDatetime.slice(0, 10);
|
|
19
|
+
const prefix = `${date}_${post.id}_`;
|
|
20
|
+
const options = {
|
|
21
|
+
maxBytes: DEFAULT_COMPONENT_BYTES - Buffer.byteLength(prefix),
|
|
22
|
+
reserveBytes: Buffer.byteLength(`${prefix}${path.sep}metadata.json`),
|
|
23
|
+
};
|
|
24
|
+
const title = parentDirectory
|
|
25
|
+
? sanitizePathComponentForDirectory(post.title, parentDirectory, options)
|
|
26
|
+
: sanitizePathComponent(post.title, options);
|
|
27
|
+
return `${prefix}${title}`;
|
|
28
|
+
}
|
|
29
|
+
export function sanitizePathComponent(value, options = {}) {
|
|
30
|
+
const maxBytes = options.maxBytes ?? DEFAULT_COMPONENT_BYTES;
|
|
31
|
+
const suffix = options.suffix ?? "";
|
|
32
|
+
let sanitized = Array.from(SEGMENTER.segment(value), ({ segment }) => segment)
|
|
33
|
+
.map((character) => (character.charCodeAt(0) <= 31 ? "_" : character))
|
|
34
|
+
.join("")
|
|
35
|
+
.replaceAll(/[<>:"/\\|?*]/g, "_")
|
|
36
|
+
.replaceAll(/[. ]+$/g, "");
|
|
37
|
+
if (RESERVED_NAMES.test(sanitized) || RESERVED_PREFIX.test(value)) {
|
|
38
|
+
sanitized = `_${sanitized}`;
|
|
39
|
+
}
|
|
40
|
+
if (!sanitized) {
|
|
41
|
+
sanitized = "_";
|
|
42
|
+
}
|
|
43
|
+
const suffixBytes = Buffer.byteLength(suffix);
|
|
44
|
+
return `${truncateUtf8(sanitized, Math.max(0, maxBytes - suffixBytes))}${suffix}`;
|
|
45
|
+
}
|
|
46
|
+
export function sanitizePathComponentForDirectory(value, directory, options = {}) {
|
|
47
|
+
const availableBytes = DEFAULT_PATH_BYTES -
|
|
48
|
+
Buffer.byteLength(path.resolve(directory)) -
|
|
49
|
+
Buffer.byteLength(path.sep) -
|
|
50
|
+
(options.reserveBytes ?? 0);
|
|
51
|
+
if (availableBytes <= Buffer.byteLength(options.suffix ?? "")) {
|
|
52
|
+
throw new Error(`Directory leaves no room in path budget: ${directory}`);
|
|
53
|
+
}
|
|
54
|
+
return sanitizePathComponent(value, {
|
|
55
|
+
...options,
|
|
56
|
+
maxBytes: Math.min(options.maxBytes ?? DEFAULT_COMPONENT_BYTES, availableBytes),
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
function truncateUtf8(value, maxBytes) {
|
|
60
|
+
let result = "";
|
|
61
|
+
for (const { segment: character } of SEGMENTER.segment(value)) {
|
|
62
|
+
if (Buffer.byteLength(result + character) > maxBytes) {
|
|
63
|
+
break;
|
|
64
|
+
}
|
|
65
|
+
result += character;
|
|
66
|
+
}
|
|
67
|
+
return result;
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=path.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path.js","sourceRoot":"","sources":["../../../src/downloader/path.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface CreatorResolverClient {
|
|
2
|
+
listFollowingCreators(): Promise<{
|
|
3
|
+
creatorId: string;
|
|
4
|
+
}[]>;
|
|
5
|
+
listSupportingPlans(): Promise<{
|
|
6
|
+
creatorId: string;
|
|
7
|
+
}[]>;
|
|
8
|
+
}
|
|
9
|
+
export interface ResolveCreatorIdsOptions {
|
|
10
|
+
creatorIds: string[];
|
|
11
|
+
following: boolean;
|
|
12
|
+
ignoreCreatorIds: string[];
|
|
13
|
+
supporting: boolean;
|
|
14
|
+
}
|
|
15
|
+
export declare function resolveCreatorIds(client: CreatorResolverClient, options: ResolveCreatorIdsOptions): Promise<string[]>;
|
|
16
|
+
//# sourceMappingURL=resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../../src/downloader/resolver.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,qBAAqB;IACpC,qBAAqB,IAAI,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC,CAAC;IAC1D,mBAAmB,IAAI,OAAO,CAAC;QAAE,SAAS,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC,CAAC;CACzD;AAED,MAAM,WAAW,wBAAwB;IACvC,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,qBAAqB,EAC7B,OAAO,EAAE,wBAAwB,GAChC,OAAO,CAAC,MAAM,EAAE,CAAC,CAiBnB"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export async function resolveCreatorIds(client, options) {
|
|
2
|
+
const creatorIds = new Set(options.creatorIds);
|
|
3
|
+
if (options.following) {
|
|
4
|
+
for (const creator of await client.listFollowingCreators()) {
|
|
5
|
+
creatorIds.add(creator.creatorId);
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
if (options.supporting) {
|
|
9
|
+
for (const plan of await client.listSupportingPlans()) {
|
|
10
|
+
creatorIds.add(plan.creatorId);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
for (const ignored of options.ignoreCreatorIds) {
|
|
14
|
+
creatorIds.delete(ignored);
|
|
15
|
+
}
|
|
16
|
+
return [...creatorIds];
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../../src/downloader/resolver.ts"],"names":[],"mappings":"AAYA,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,MAA6B,EAC7B,OAAiC;IAEjC,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;IAC/C,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACtB,KAAK,MAAM,OAAO,IAAI,MAAM,MAAM,CAAC,qBAAqB,EAAE,EAAE,CAAC;YAC3D,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IACD,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QACvB,KAAK,MAAM,IAAI,IAAI,MAAM,MAAM,CAAC,mBAAmB,EAAE,EAAE,CAAC;YACtD,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IACD,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,gBAAgB,EAAE,CAAC;QAC/C,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAED,OAAO,CAAC,GAAG,UAAU,CAAC,CAAC;AACzB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { HttpResponse } from "../http.js";
|
|
2
|
+
import type { Logger } from "./logger.js";
|
|
3
|
+
export interface RequestSchedulerOptions {
|
|
4
|
+
concurrency: number;
|
|
5
|
+
logger?: Logger;
|
|
6
|
+
maxRetries?: number;
|
|
7
|
+
now?: () => number;
|
|
8
|
+
rateLimitPauseMs?: number;
|
|
9
|
+
requestIntervalMs?: number;
|
|
10
|
+
sleep?: (milliseconds: number) => Promise<void>;
|
|
11
|
+
}
|
|
12
|
+
export declare class RequestScheduler {
|
|
13
|
+
#private;
|
|
14
|
+
constructor(options: RequestSchedulerOptions);
|
|
15
|
+
pause(milliseconds: number): void;
|
|
16
|
+
request(operation: () => Promise<HttpResponse>): Promise<HttpResponse>;
|
|
17
|
+
run<T>(operation: () => Promise<T>): Promise<T>;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=scheduler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scheduler.d.ts","sourceRoot":"","sources":["../../../src/downloader/scheduler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAG1C,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,KAAK,CAAC,EAAE,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACjD;AAED,qBAAa,gBAAgB;;gBAaR,OAAO,EAAE,uBAAuB;IAa5C,KAAK,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAI3B,OAAO,CAClB,SAAS,EAAE,MAAM,OAAO,CAAC,YAAY,CAAC,GACrC,OAAO,CAAC,YAAY,CAAC;IAoCX,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;CAiC7D"}
|