twitter-snap 0.0.14 → 0.0.16

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 (87) hide show
  1. package/README.md +1 -1
  2. package/bin/dev.cmd +3 -0
  3. package/bin/dev.js +5 -0
  4. package/bin/run.cmd +3 -0
  5. package/bin/run.js +5 -0
  6. package/dist/cli.d.ts +1 -2
  7. package/dist/cli.js +15 -37
  8. package/dist/cli.js.map +1 -1
  9. package/dist/commands/index.d.ts +24 -0
  10. package/dist/commands/index.d.ts.map +1 -0
  11. package/dist/commands/index.js +96 -0
  12. package/dist/commands/index.js.map +1 -0
  13. package/dist/core/core.d.ts +29 -0
  14. package/dist/core/core.d.ts.map +1 -0
  15. package/dist/core/core.js +133 -0
  16. package/dist/core/core.js.map +1 -0
  17. package/dist/index.d.ts +2 -0
  18. package/dist/index.d.ts.map +1 -0
  19. package/dist/index.js +2 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/tsconfig.build.tsbuildinfo +1 -1
  22. package/dist/utils/fonts.d.ts +0 -4
  23. package/dist/utils/fonts.d.ts.map +1 -1
  24. package/dist/utils/fonts.js +26 -12
  25. package/dist/utils/fonts.js.map +1 -1
  26. package/dist/utils/logger.d.ts +18 -0
  27. package/dist/utils/logger.d.ts.map +1 -0
  28. package/dist/utils/logger.js +122 -0
  29. package/dist/utils/logger.js.map +1 -0
  30. package/dist/utils/types.d.ts +8 -0
  31. package/dist/utils/types.d.ts.map +1 -0
  32. package/dist/utils/types.js +4 -0
  33. package/dist/utils/types.js.map +1 -0
  34. package/oclif.manifest.json +130 -0
  35. package/package.json +71 -23
  36. package/.eslintrc.json +0 -3
  37. package/dist/app/api/twitter/route.d.ts +0 -3
  38. package/dist/app/api/twitter/route.d.ts.map +0 -1
  39. package/dist/app/api/twitter/route.js +0 -19
  40. package/dist/app/api/twitter/route.js.map +0 -1
  41. package/dist/app/api/twitter/route.jsx +0 -71
  42. package/dist/app/api/twitter/route.jsx.map +0 -1
  43. package/dist/app/layout.d.ts +0 -7
  44. package/dist/app/layout.d.ts.map +0 -1
  45. package/dist/app/layout.js +0 -11
  46. package/dist/app/layout.js.map +0 -1
  47. package/dist/app/layout.jsx +0 -19
  48. package/dist/app/layout.jsx.map +0 -1
  49. package/dist/app/page.d.ts +0 -2
  50. package/dist/app/page.d.ts.map +0 -1
  51. package/dist/app/page.js +0 -23
  52. package/dist/app/page.js.map +0 -1
  53. package/dist/app/page.jsx +0 -56
  54. package/dist/app/page.jsx.map +0 -1
  55. package/dist/core/twitterSnap.d.mts +0 -33
  56. package/dist/core/twitterSnap.d.mts.map +0 -1
  57. package/dist/core/twitterSnap.d.ts +0 -49
  58. package/dist/core/twitterSnap.d.ts.map +0 -1
  59. package/dist/core/twitterSnap.js +0 -62
  60. package/dist/core/twitterSnap.js.map +0 -1
  61. package/dist/core/twitterSnap.mjs +0 -102
  62. package/dist/core/twitterSnap.mjs.map +0 -1
  63. package/dist/theme/normal.d.ts +0 -4
  64. package/dist/theme/normal.d.ts.map +0 -1
  65. package/dist/theme/normal.js +0 -52
  66. package/dist/theme/normal.js.map +0 -1
  67. package/dist/theme/normal.jsx +0 -333
  68. package/dist/theme/normal.jsx.map +0 -1
  69. package/dist/theme/normalComponent.d.ts +0 -4
  70. package/dist/theme/normalComponent.d.ts.map +0 -1
  71. package/dist/theme/normalComponent.js +0 -256
  72. package/dist/theme/normalComponent.js.map +0 -1
  73. package/dist/theme/normalUtils.d.ts +0 -19
  74. package/dist/theme/normalUtils.d.ts.map +0 -1
  75. package/dist/theme/normalUtils.js +0 -115
  76. package/dist/theme/normalUtils.js.map +0 -1
  77. package/dist/tsconfig.tsbuildinfo +0 -1
  78. package/dist/utils/cookies.d.ts +0 -2
  79. package/dist/utils/cookies.d.ts.map +0 -1
  80. package/dist/utils/cookies.js +0 -15
  81. package/dist/utils/cookies.js.map +0 -1
  82. package/docs/img/output.png +0 -0
  83. package/next-env.d.ts +0 -5
  84. package/next.config.cjs +0 -5
  85. package/test/test.ps1 +0 -21
  86. package/tsconfig.build.json +0 -25
  87. package/tsconfig.json +0 -40
package/README.md CHANGED
@@ -73,4 +73,4 @@ You can specify the font by creating a font config file. (path: `--fonts`)
73
73
 
74
74
  ## Dependence
75
75
 
76
- - [ffmpeg](https://ffmpeg.org/) (for video)
76
+ - [ffmpeg](https://ffmpeg.org/) (for video)
package/bin/dev.cmd ADDED
@@ -0,0 +1,3 @@
1
+ @echo off
2
+
3
+ node --loader ts-node/esm --no-warnings=ExperimentalWarning "%~dp0\dev" %*
package/bin/dev.js ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env -S node --loader ts-node/esm --no-warnings=ExperimentalWarning
2
+
3
+ import {execute} from '@oclif/core'
4
+
5
+ await execute({development: true, dir: import.meta.url})
package/bin/run.cmd ADDED
@@ -0,0 +1,3 @@
1
+ @echo off
2
+
3
+ node "%~dp0\run" %*
package/bin/run.js ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env node
2
+
3
+ import {execute} from '@oclif/core'
4
+
5
+ await execute({dir: import.meta.url})
package/dist/cli.d.ts CHANGED
@@ -1,3 +1,2 @@
1
- #!/usr/bin/env node
2
- export {};
1
+ export {};
3
2
  //# sourceMappingURL=cli.d.ts.map
package/dist/cli.js CHANGED
@@ -1,38 +1,16 @@
1
- #!/usr/bin/env node
2
- import { TwitterSnap } from "./core/twitterSnap.js";
3
- import { Command } from "commander";
4
- import { getClient } from "./utils/cookies.js";
5
- import { getFonts } from "./utils/fonts.js";
6
- const version = "0.0.10";
7
- const program = new Command();
8
- program.name("twitter-snap").version(version);
9
- const emoji = "(twemoji, openmoji, blobmoji, noto, fluent, fluentFlat)";
10
- program
11
- .argument("<string>", "tweet url or tweet id")
12
- .option("-o, --output <path>", "output file path", "output.png")
13
- .option("-w, --width <number>", "image width", "600")
14
- .option("-h, --height <number>", "image height")
15
- .option("-t, --theme <string>", Object.keys(TwitterSnap.themes).join())
16
- .option("--margin <number>", "margin")
17
- .option("--fonts <path>", "font config file path .json")
18
- .option("--emoji <string>", `emoji type ${emoji}`, "twemoji")
19
- .option("--cookies <path>", "net escape cookie file path .txt")
20
- .option("--auto-photo", "if the tweet is not a video, save it as an image")
21
- .option("--no-remove-temp", "no remove temp file")
22
- .action(async (text, param) => {
23
- const id = isNaN(text) ? text.split("/").pop() : text;
24
- const twitterSnap = new TwitterSnap({
25
- width: parseInt(param.width),
26
- height: param.height ? parseInt(param.height) : undefined,
27
- client: param.cookies ? await getClient(param.cookies) : undefined,
28
- themeName: param.theme,
29
- fonts: param.fonts ? await getFonts(param.fonts) : undefined,
30
- emoji: param.emoji ? param.emoji : undefined,
31
- autoPhoto: param.autoPhoto ? true : false,
32
- removeTemp: param.removeTemp ? true : false,
33
- });
34
- await twitterSnap.render({ output: param.output, id });
35
- process.exit(0);
36
- });
37
- program.parse(process.argv);
1
+ // #!/usr/bin/env node
2
+ import { twitterSnapPuppeteer } from './core/core';
3
+ const snap = await twitterSnapPuppeteer();
4
+ await snap({ id: '900282258736545792', type: 'getLikes', max: 100 }, async (render) => {
5
+ const finalize = await render({
6
+ themeName: 'RenderBasic',
7
+ themeParam: {
8
+ width: 600,
9
+ },
10
+ output: 'temp/{id}.png',
11
+ });
12
+ await finalize({
13
+ cleanup: true,
14
+ });
15
+ });
38
16
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,WAAW,EAAqB,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,MAAM,OAAO,GAAG,QAAQ,CAAC;AAEzB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAC9B,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAe9C,MAAM,KAAK,GAAG,yDAAyD,CAAC;AAExE,OAAO;KACJ,QAAQ,CAAC,UAAU,EAAE,uBAAuB,CAAC;KAC7C,MAAM,CAAC,qBAAqB,EAAE,kBAAkB,EAAE,YAAY,CAAC;KAC/D,MAAM,CAAC,sBAAsB,EAAE,aAAa,EAAE,KAAK,CAAC;KACpD,MAAM,CAAC,uBAAuB,EAAE,cAAc,CAAC;KAC/C,MAAM,CAAC,sBAAsB,EAAE,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;KACtE,MAAM,CAAC,mBAAmB,EAAE,QAAQ,CAAC;KACrC,MAAM,CAAC,gBAAgB,EAAE,6BAA6B,CAAC;KACvD,MAAM,CAAC,kBAAkB,EAAE,cAAc,KAAK,EAAE,EAAE,SAAS,CAAC;KAC5D,MAAM,CAAC,kBAAkB,EAAE,kCAAkC,CAAC;KAC9D,MAAM,CAAC,cAAc,EAAE,kDAAkD,CAAC;KAC1E,MAAM,CAAC,kBAAkB,EAAE,qBAAqB,CAAC;KACjD,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,KAAY,EAAE,EAAE;IACnC,MAAM,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAEtD,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC;QAClC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC;QAC5B,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;QACzD,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS;QAClE,SAAS,EAAE,KAAK,CAAC,KAAK;QACtB,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;QAC5D,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;QAC5C,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK;QACzC,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK;KAC5C,CAAC,CAAC;IAEH,MAAM,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;IAEvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AACL,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,sBAAsB;AAEtB,OAAO,EAAC,oBAAoB,EAAC,MAAM,aAAa,CAAA;AAEhD,MAAM,IAAI,GAAG,MAAM,oBAAoB,EAAE,CAAA;AACzC,MAAM,IAAI,CAAC,EAAC,EAAE,EAAE,oBAAoB,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,EAAC,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;IAClF,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC;QAC5B,SAAS,EAAE,aAAa;QACxB,UAAU,EAAE;YACV,KAAK,EAAE,GAAG;SACX;QACD,MAAM,EAAE,eAAe;KACxB,CAAC,CAAA;IACF,MAAM,QAAQ,CAAC;QACb,OAAO,EAAE,IAAI;KACd,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,24 @@
1
+ import { Command } from '@oclif/core';
2
+ export default class Default extends Command {
3
+ static args: {
4
+ id: import("@oclif/core/lib/interfaces/parser.js").Arg<string, Record<string, unknown>>;
5
+ };
6
+ static description: string;
7
+ static examples: string[];
8
+ static browser_profile: string;
9
+ static flags: {
10
+ api: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<"getTweetDetail" | "getSearchTimeline" | "getHomeTimeline" | "getHomeLatestTimeline" | "getListLatestTweetsTimeline" | "getUserTweets" | "getUserTweetsAndReplies" | "getUserMedia" | "getLikes" | "getBookmarks" | "getTweetResultByRestId", import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
11
+ theme: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<"RenderBasic", import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
12
+ output: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
13
+ cleanup: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
14
+ max: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<number, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
15
+ debug: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
16
+ sleep: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<number, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
17
+ session_type: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<"guest" | "browser" | "file", import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
18
+ cookies_file: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
19
+ browser_profile: import("@oclif/core/lib/interfaces/parser.js").OptionFlag<string, import("@oclif/core/lib/interfaces/parser.js").CustomOptions>;
20
+ browser_headless: import("@oclif/core/lib/interfaces/parser.js").BooleanFlag<boolean>;
21
+ };
22
+ run(): Promise<void>;
23
+ }
24
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAO,OAAO,EAAQ,MAAM,aAAa,CAAA;AAyBhD,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,OAAO;IAC1C,MAAM,CAAC,IAAI;;MAEV;IAED,MAAM,CAAC,WAAW,SAAiB;IACnC,MAAM,CAAC,QAAQ,WAGd;IAED,MAAM,CAAC,eAAe,SAAiD;IAEvE,MAAM,CAAC,KAAK;;;;;;;;;;;;MAYX;IAEK,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAwD3B"}
@@ -0,0 +1,96 @@
1
+ var _a;
2
+ import { Args, Command, Flags } from '@oclif/core';
3
+ import os from 'os';
4
+ import { themeList } from 'twitter-snap-core';
5
+ import { twitterSnapCookies, twitterSnapGuest, twitterSnapPuppeteer } from '../core/core.js';
6
+ import { Logger } from '../utils/logger.js';
7
+ import { getTweetList } from './../utils/types.js';
8
+ const apiFlag = Flags.custom({
9
+ description: 'API type',
10
+ options: ['getTweetResultByRestId', ...getTweetList],
11
+ default: 'getTweetResultByRestId',
12
+ });
13
+ const themeNameFlag = Flags.custom({
14
+ description: 'Theme type',
15
+ options: Object.keys(themeList),
16
+ default: 'RenderBasic',
17
+ });
18
+ const sessionType = Flags.custom({
19
+ description: 'Session type',
20
+ default: 'guest',
21
+ });
22
+ class Default extends Command {
23
+ async run() {
24
+ const { args, flags } = await this.parse(_a);
25
+ const logger = new Logger();
26
+ console.log = flags.debug ? logger.log.bind(logger) : (_) => { };
27
+ const getClient = (() => {
28
+ switch (flags.session_type) {
29
+ case 'guest':
30
+ return twitterSnapGuest();
31
+ case 'browser':
32
+ return twitterSnapPuppeteer(flags.browser_headless, flags.browser_profile);
33
+ case 'file':
34
+ return twitterSnapCookies(flags.cookies_file);
35
+ }
36
+ })();
37
+ const client = await logger.guard({ text: 'Loading Client' }, getClient);
38
+ const logHandler = async ({ type, user, id }) => {
39
+ switch (type) {
40
+ case 'start':
41
+ return logger.update(`Rendering tweet ${user}/${id}`);
42
+ case 'image':
43
+ return logger.update(`Rendering image ${user}/${id}`);
44
+ case 'video':
45
+ return logger.update(`Rendering video ${user}/${id}`);
46
+ }
47
+ };
48
+ const sleep = async (ms) => new Promise((resolve) => setTimeout(resolve, ms));
49
+ const render = client({ id: args.id, type: flags.api, max: flags.max }, async (render) => {
50
+ try {
51
+ const finalize = await render({
52
+ themeName: flags.theme,
53
+ themeParam: {
54
+ width: 600,
55
+ },
56
+ output: flags.output,
57
+ handler: logHandler,
58
+ });
59
+ await finalize({
60
+ cleanup: true,
61
+ });
62
+ logger.succeed();
63
+ }
64
+ catch (e) {
65
+ logger.error(e);
66
+ }
67
+ await sleep(flags.sleep);
68
+ });
69
+ await logger.guard({ text: 'Rendering tweet', max: flags.max }, render);
70
+ }
71
+ }
72
+ _a = Default;
73
+ Default.args = {
74
+ id: Args.string({ description: 'Twitter status id', required: true }),
75
+ };
76
+ Default.description = 'Twitter Snap';
77
+ Default.examples = [
78
+ 'twitter-snap 1765415187161464972',
79
+ 'twitter-snap 1765415187161464972 --api getTweetResultByRestId',
80
+ ];
81
+ Default.browser_profile = `${os.homedir()}/.cache/twitter-snap/profiles`;
82
+ Default.flags = {
83
+ api: apiFlag(),
84
+ theme: themeNameFlag(),
85
+ output: Flags.string({ char: 'o', description: 'Output file name', default: '{id}.{if-photo:png:mp4}' }),
86
+ cleanup: Flags.boolean({ description: 'Cleanup', default: true }),
87
+ max: Flags.integer({ description: 'Max count', default: 30 }),
88
+ debug: Flags.boolean({ description: 'Debug', default: false }),
89
+ sleep: Flags.integer({ description: 'Sleep (ms)', default: 0 }),
90
+ session_type: sessionType(),
91
+ cookies_file: Flags.file({ description: 'Cookies file', default: 'cookies.json' }),
92
+ browser_profile: Flags.string({ description: 'Browser profile', default: _a.browser_profile }),
93
+ browser_headless: Flags.boolean({ description: 'Browser headless', default: false }),
94
+ };
95
+ export default Default;
96
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/commands/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ import { TweetApiUtilsData } from 'twitter-openapi-typescript';
2
+ import { ThemeNameType } from 'twitter-snap-core';
3
+ import { GetTweetApi, ThemeParamType } from '../utils/types.js';
4
+ export declare const twitterSnapGuest: () => Promise<({ id, type, max }: tweetApiSnapParam, handler: (e: ReturnType<typeof twitterRender>) => Promise<void>) => Promise<void>>;
5
+ export declare const twitterSnapPuppeteer: (headless?: boolean, userDataDir?: string) => Promise<({ id, type, max }: tweetApiSnapParam, handler: (e: ReturnType<typeof twitterRender>) => Promise<void>) => Promise<void>>;
6
+ export declare const twitterSnapCookies: (path: string) => Promise<({ id, type, max }: tweetApiSnapParam, handler: (e: ReturnType<typeof twitterRender>) => Promise<void>) => Promise<void>>;
7
+ type tweetApiSnapParam = {
8
+ id: string;
9
+ type?: 'getTweetResultByRestId' | keyof GetTweetApi;
10
+ max: number;
11
+ };
12
+ type HandlerTypeLiteral = 'start' | 'image' | 'video';
13
+ export type HandlerType = {
14
+ type: HandlerTypeLiteral;
15
+ user: string;
16
+ id: string;
17
+ };
18
+ type twitterRenderParam = {
19
+ themeName: ThemeNameType;
20
+ themeParam: ThemeParamType;
21
+ output: string;
22
+ handler?: (e: HandlerType) => void;
23
+ };
24
+ declare const twitterRender: (data: TweetApiUtilsData) => ({ themeName, themeParam, output, handler }: twitterRenderParam) => Promise<({ cleanup }: FinalizeParam) => Promise<void>>;
25
+ type FinalizeParam = {
26
+ cleanup: boolean;
27
+ };
28
+ export {};
29
+ //# sourceMappingURL=core.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.d.ts","sourceRoot":"","sources":["../../src/core/core.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,iBAAiB,EAAuC,MAAM,4BAA4B,CAAA;AAGlG,OAAO,EAAC,aAAa,EAAY,MAAM,mBAAmB,CAAA;AAC1D,OAAO,EAAC,WAAW,EAAE,cAAc,EAAe,MAAM,mBAAmB,CAAA;AAE3E,eAAO,MAAM,gBAAgB,oCA4CR,iBAAiB,eACrB,WAAW,oBAAoB,CAAC,KAAK,QAAQ,IAAI,CAAC,mBAzClE,CAAA;AAED,eAAO,MAAM,oBAAoB,cAAqB,OAAO,gBAAgB,MAAM,iCAsC9D,iBAAiB,eACrB,WAAW,oBAAoB,CAAC,KAAK,QAAQ,IAAI,CAAC,mBAnBlE,CAAA;AAED,eAAO,MAAM,kBAAkB,SAAgB,MAAM,iCAgBhC,iBAAiB,eACrB,WAAW,oBAAoB,CAAC,KAAK,QAAQ,IAAI,CAAC,mBAXlE,CAAA;AAED,KAAK,iBAAiB,GAAG;IACvB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,CAAC,EAAE,wBAAwB,GAAG,MAAM,WAAW,CAAA;IACnD,GAAG,EAAE,MAAM,CAAA;CACZ,CAAA;AA4CD,KAAK,kBAAkB,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAA;AACrD,MAAM,MAAM,WAAW,GAAG;IAAC,IAAI,EAAE,kBAAkB,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAC,CAAA;AAE9E,KAAK,kBAAkB,GAAG;IACxB,SAAS,EAAE,aAAa,CAAA;IACxB,UAAU,EAAE,cAAc,CAAA;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,KAAK,IAAI,CAAA;CACnC,CAAA;AAED,QAAA,MAAM,aAAa,SAAU,iBAAiB,kDAKY,kBAAkB,2BAsDjD,aAAa,mBANvC,CAAA;AAED,KAAK,aAAa,GAAG;IACnB,OAAO,EAAE,OAAO,CAAA;CACjB,CAAA"}
@@ -0,0 +1,133 @@
1
+ import { ImageResponse } from '@vercel/og';
2
+ import { promises as fs } from 'fs';
3
+ import { TwitterOpenApi } from 'twitter-openapi-typescript';
4
+ import puppeteer from 'puppeteer';
5
+ import { themeList } from 'twitter-snap-core';
6
+ import { getTweetList } from '../utils/types.js';
7
+ export const twitterSnapGuest = async () => {
8
+ const twitter = new TwitterOpenApi();
9
+ const api = await twitter.getGuestClient();
10
+ return tweetApiSnap(api);
11
+ };
12
+ export const twitterSnapPuppeteer = async (headless, userDataDir) => {
13
+ const browser = await puppeteer.launch({
14
+ headless: headless,
15
+ timeout: 0,
16
+ userDataDir: userDataDir,
17
+ });
18
+ const [page] = await browser.pages();
19
+ await page.goto('https://twitter.com/login');
20
+ page.setDefaultNavigationTimeout(0);
21
+ page.setDefaultTimeout(0);
22
+ await page.waitForResponse((res) => {
23
+ return RegExp('https://twitter.com/i/api/graphql/[a-zA-Z0-9_-]+/HomeTimeline?.*').test(res.url());
24
+ });
25
+ const cookies = await page.cookies();
26
+ await browser.close();
27
+ const twitter = new TwitterOpenApi();
28
+ const api = await twitter.getClientFromCookies(cookies.reduce((acc, e) => ({ ...acc, [e.name]: e.value }), {}));
29
+ return tweetApiSnap(api);
30
+ };
31
+ export const twitterSnapCookies = async (path) => {
32
+ const data = await fs.readFile(path, 'utf-8');
33
+ const cookies = JSON.parse(data);
34
+ const twitter = new TwitterOpenApi();
35
+ const api = await twitter.getClientFromCookies(cookies.reduce((acc, e) => ({ ...acc, [e.name]: e.value }), {}));
36
+ return tweetApiSnap(api);
37
+ };
38
+ const tweetApiSnap = (client) => {
39
+ return async ({ id, type, max }, handler) => {
40
+ const key = getTweetList.find((k) => k == type);
41
+ if (key) {
42
+ const that = client.getTweetApi();
43
+ const api = that[key].bind(that);
44
+ let count = 0;
45
+ const cursor = [];
46
+ while (count < max) {
47
+ const res = await api({
48
+ focalTweetId: id,
49
+ rawQuery: id,
50
+ listId: id,
51
+ userId: id,
52
+ cursor: cursor.length ? cursor.pop() : undefined,
53
+ });
54
+ for (const e of res.data.data) {
55
+ if (e.promotedMetadata)
56
+ continue;
57
+ if (count >= max)
58
+ return;
59
+ await handler(twitterRender(e));
60
+ count++;
61
+ }
62
+ if (res.data.cursor.bottom) {
63
+ cursor.push(res.data.cursor.bottom?.value);
64
+ }
65
+ else {
66
+ return;
67
+ }
68
+ }
69
+ }
70
+ else {
71
+ const res = await client.getDefaultApi().getTweetResultByRestId({
72
+ tweetId: id,
73
+ });
74
+ if (res.data)
75
+ await handler(twitterRender(res.data));
76
+ }
77
+ };
78
+ };
79
+ const twitterRender = (data) => {
80
+ const extEntities = data.tweet.legacy?.extendedEntities;
81
+ const extMedia = extEntities?.media ?? [];
82
+ const isVideoData = !!extMedia.find((e) => e.type !== 'photo');
83
+ return async ({ themeName, themeParam, output, handler }) => {
84
+ handler && handler({ type: 'start', user: data.user.legacy.screenName, id: data.tweet.restId });
85
+ const theme = Object.entries(themeList).find(([k, _]) => k == themeName)?.[1];
86
+ const replacData = [
87
+ ['{id}', data.tweet.restId],
88
+ ['{user-screen-name}', data.user.legacy.screenName],
89
+ ['{if-photo:(?<true>.+?):(?<false>.+?)}', isVideoData ? '$2' : '$1'],
90
+ ];
91
+ const repOutput = replacData.reduce((acc, [k, v]) => acc.replace(new RegExp(k, 'g'), v), output);
92
+ const video = repOutput.split('.').pop() != 'png';
93
+ const pngOutput = video ? repOutput.replace(/\.\w+$/, '.png') : repOutput;
94
+ const render = new theme({
95
+ ...themeParam,
96
+ video: video,
97
+ });
98
+ handler && handler({ type: 'image', user: data.user.legacy.screenName, id: data.tweet.restId });
99
+ const element = render.imageRender({
100
+ data: data,
101
+ });
102
+ const img = new ImageResponse(element, {
103
+ width: themeParam.width,
104
+ height: undefined,
105
+ emoji: 'twemoji',
106
+ });
107
+ const png = Buffer.from(await img.arrayBuffer());
108
+ if (pngOutput.split('/').length > 1) {
109
+ await fs.mkdir(pngOutput.split('/').slice(0, -1).join('/'), { recursive: true });
110
+ }
111
+ await fs.writeFile(pngOutput, png);
112
+ if (video) {
113
+ handler && handler({ type: 'video', user: data.user.legacy.screenName, id: data.tweet.restId });
114
+ const res = await render.videoRender({
115
+ data: data,
116
+ image: pngOutput,
117
+ output: repOutput,
118
+ });
119
+ return finalize(res.temp);
120
+ }
121
+ else {
122
+ return finalize([]);
123
+ }
124
+ };
125
+ };
126
+ const finalize = async (temp) => {
127
+ return async ({ cleanup }) => {
128
+ if (cleanup) {
129
+ temp.forEach(async (e) => await fs.unlink(e));
130
+ }
131
+ };
132
+ };
133
+ //# sourceMappingURL=core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["../../src/core/core.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { run } from '@oclif/core';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,GAAG,EAAC,MAAM,aAAa,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export { run } from '@oclif/core';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,GAAG,EAAC,MAAM,aAAa,CAAA"}