@itznexus/itznexus-cli 1.64.0 → 1.65.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/dist/commands/api/files.d.ts +21 -0
- package/dist/commands/api/files.js +40 -29
- package/dist/commands/api/files.js.map +1 -1
- package/dist/commands/api/short-publications-publish.d.ts +2 -0
- package/dist/commands/api/short-publications-publish.js +97 -0
- package/dist/commands/api/short-publications-publish.js.map +1 -0
- package/dist/commands/api/short-publications.d.ts +2 -0
- package/dist/commands/api/short-publications.js +176 -0
- package/dist/commands/api/short-publications.js.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/short-productions.d.ts +26 -0
- package/dist/lib/short-productions.js +85 -0
- package/dist/lib/short-productions.js.map +1 -0
- package/dist/lib/short-publications.d.ts +38 -0
- package/dist/lib/short-publications.js +37 -0
- package/dist/lib/short-publications.js.map +1 -0
- package/package.json +1 -1
|
@@ -1,2 +1,23 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
|
+
export type FileRecord = {
|
|
3
|
+
id: string;
|
|
4
|
+
name: string;
|
|
5
|
+
mimeType: string;
|
|
6
|
+
size: number;
|
|
7
|
+
folderId: string | null;
|
|
8
|
+
entityType: string | null;
|
|
9
|
+
entityId: string | null;
|
|
10
|
+
url: string | null;
|
|
11
|
+
status: string;
|
|
12
|
+
createdBy: string | null;
|
|
13
|
+
createdAt: string;
|
|
14
|
+
updatedAt: string;
|
|
15
|
+
};
|
|
16
|
+
export declare function uploadLocalFile(filePath: string, opts?: {
|
|
17
|
+
name?: string;
|
|
18
|
+
mimeType?: string;
|
|
19
|
+
folderId?: string;
|
|
20
|
+
entityType?: string;
|
|
21
|
+
entityId?: string;
|
|
22
|
+
}): Promise<FileRecord>;
|
|
2
23
|
export declare const fileCommand: Command;
|
|
@@ -18,7 +18,41 @@ const MIME_BY_EXTENSION = {
|
|
|
18
18
|
".txt": "text/plain",
|
|
19
19
|
".json": "application/json",
|
|
20
20
|
".zip": "application/zip",
|
|
21
|
+
".srt": "application/x-subrip",
|
|
21
22
|
};
|
|
23
|
+
// One-step upload (signed URL, PUT bytes, confirm); also used by `short publish`.
|
|
24
|
+
export async function uploadLocalFile(filePath, opts = {}) {
|
|
25
|
+
const absolute = path.resolve(filePath);
|
|
26
|
+
if (!fs.existsSync(absolute)) {
|
|
27
|
+
throw new Error(`File not found: ${absolute}`);
|
|
28
|
+
}
|
|
29
|
+
const bytes = fs.readFileSync(absolute);
|
|
30
|
+
const name = opts.name ?? path.basename(absolute);
|
|
31
|
+
const mimeType = opts.mimeType ??
|
|
32
|
+
MIME_BY_EXTENSION[path.extname(absolute).toLowerCase()] ??
|
|
33
|
+
"application/octet-stream";
|
|
34
|
+
const payload = {
|
|
35
|
+
name,
|
|
36
|
+
mimeType,
|
|
37
|
+
size: bytes.length,
|
|
38
|
+
};
|
|
39
|
+
if (opts.folderId !== undefined)
|
|
40
|
+
payload.folderId = opts.folderId;
|
|
41
|
+
if (opts.entityType !== undefined)
|
|
42
|
+
payload.entityType = opts.entityType;
|
|
43
|
+
if (opts.entityId !== undefined)
|
|
44
|
+
payload.entityId = opts.entityId;
|
|
45
|
+
const requested = await api.post("/files/upload-url", payload);
|
|
46
|
+
const uploadRes = await fetch(requested.uploadUrl, {
|
|
47
|
+
method: "PUT",
|
|
48
|
+
headers: { "Content-Type": mimeType },
|
|
49
|
+
body: bytes,
|
|
50
|
+
});
|
|
51
|
+
if (!uploadRes.ok) {
|
|
52
|
+
throw new Error(`Upload to storage failed: ${uploadRes.status} ${uploadRes.statusText}`);
|
|
53
|
+
}
|
|
54
|
+
return api.post(`/files/${requested.file.id}/confirm`, {});
|
|
55
|
+
}
|
|
22
56
|
const listCommand = new Command("list")
|
|
23
57
|
.description("List files")
|
|
24
58
|
.option("--entity-type <type>", "Filter by entity type")
|
|
@@ -144,36 +178,13 @@ const uploadCommand = new Command("upload")
|
|
|
144
178
|
.option("--json", "Output as JSON")
|
|
145
179
|
.action(async (filePath, opts) => {
|
|
146
180
|
try {
|
|
147
|
-
const
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
const mimeType = opts.mimeType ??
|
|
154
|
-
MIME_BY_EXTENSION[path.extname(absolute).toLowerCase()] ??
|
|
155
|
-
"application/octet-stream";
|
|
156
|
-
const payload = {
|
|
157
|
-
name,
|
|
158
|
-
mimeType,
|
|
159
|
-
size: bytes.length,
|
|
160
|
-
};
|
|
161
|
-
if (opts.folder !== undefined)
|
|
162
|
-
payload.folderId = opts.folder;
|
|
163
|
-
if (opts.entityType !== undefined)
|
|
164
|
-
payload.entityType = opts.entityType;
|
|
165
|
-
if (opts.entityId !== undefined)
|
|
166
|
-
payload.entityId = opts.entityId;
|
|
167
|
-
const requested = await api.post("/files/upload-url", payload);
|
|
168
|
-
const uploadRes = await fetch(requested.uploadUrl, {
|
|
169
|
-
method: "PUT",
|
|
170
|
-
headers: { "Content-Type": mimeType },
|
|
171
|
-
body: bytes,
|
|
181
|
+
const data = await uploadLocalFile(filePath, {
|
|
182
|
+
name: opts.name,
|
|
183
|
+
mimeType: opts.mimeType,
|
|
184
|
+
folderId: opts.folder,
|
|
185
|
+
entityType: opts.entityType,
|
|
186
|
+
entityId: opts.entityId,
|
|
172
187
|
});
|
|
173
|
-
if (!uploadRes.ok) {
|
|
174
|
-
throw new Error(`Upload to storage failed: ${uploadRes.status} ${uploadRes.statusText}`);
|
|
175
|
-
}
|
|
176
|
-
const data = await api.post(`/files/${requested.file.id}/confirm`, {});
|
|
177
188
|
if (opts.json) {
|
|
178
189
|
console.log(JSON.stringify(data, null, 2));
|
|
179
190
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"files.js","sourceRoot":"","sources":["../../../src/commands/api/files.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAE1E,MAAM,iBAAiB,GAA2B;IAChD,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,iBAAiB;IACzB,OAAO,EAAE,YAAY;IACrB,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,YAAY;IACpB,OAAO,EAAE,YAAY;IACrB,MAAM,EAAE,WAAW;IACnB,OAAO,EAAE,YAAY;IACrB,MAAM,EAAE,iBAAiB;IACzB,KAAK,EAAE,eAAe;IACtB,MAAM,EAAE,YAAY;IACpB,OAAO,EAAE,kBAAkB;IAC3B,MAAM,EAAE,iBAAiB;
|
|
1
|
+
{"version":3,"file":"files.js","sourceRoot":"","sources":["../../../src/commands/api/files.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { Command } from "commander";
|
|
3
|
+
import chalk from "chalk";
|
|
4
|
+
import { api } from "../../lib/api.js";
|
|
5
|
+
import { printList, handleError } from "../../lib/format.js";
|
|
6
|
+
import { uploadLocalFile } from "./files.js";
|
|
7
|
+
import { SHORT_PLATFORMS, resolveShortProduction, } from "../../lib/short-productions.js";
|
|
8
|
+
import { pollPublications, } from "../../lib/short-publications.js";
|
|
9
|
+
function collectPlatform(value, previous) {
|
|
10
|
+
if (!SHORT_PLATFORMS.includes(value)) {
|
|
11
|
+
throw new Error(`Unknown platform "${value}". Use ${SHORT_PLATFORMS.join(" or ")}.`);
|
|
12
|
+
}
|
|
13
|
+
return [...previous, value];
|
|
14
|
+
}
|
|
15
|
+
export const publishCommand = new Command("publish")
|
|
16
|
+
.description("Publish a short production: upload the final video (and .srt) from productions/<slug>/, create one publication per platform, then poll until each one lands")
|
|
17
|
+
.argument("<slug>", "Production slug (folder name under productions/)")
|
|
18
|
+
.option("--platform <platform>", "Restrict to a platform (instagram|tiktok, repeatable; default both)", collectPlatform, [])
|
|
19
|
+
.option("--json", "Output the final publications as JSON")
|
|
20
|
+
.action(async (slug, opts) => {
|
|
21
|
+
try {
|
|
22
|
+
const production = resolveShortProduction(slug, process.cwd());
|
|
23
|
+
const platforms = opts.platform.length > 0 ? opts.platform : [...SHORT_PLATFORMS];
|
|
24
|
+
for (const platform of platforms) {
|
|
25
|
+
if (!production.captions[platform]) {
|
|
26
|
+
const section = platform === "instagram" ? "## Instagram Reels" : "## TikTok";
|
|
27
|
+
throw new Error(`POST.md has no "${section}" section (needed for ${platform})`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
const quiet = opts.json === true;
|
|
31
|
+
if (!quiet) {
|
|
32
|
+
console.log(chalk.dim(`Uploading ${path.basename(production.videoPath)}...`));
|
|
33
|
+
}
|
|
34
|
+
const video = await uploadLocalFile(production.videoPath);
|
|
35
|
+
let srtFileId;
|
|
36
|
+
if (production.srtPath) {
|
|
37
|
+
if (!quiet) {
|
|
38
|
+
console.log(chalk.dim(`Uploading ${path.basename(production.srtPath)}...`));
|
|
39
|
+
}
|
|
40
|
+
srtFileId = (await uploadLocalFile(production.srtPath)).id;
|
|
41
|
+
}
|
|
42
|
+
const created = [];
|
|
43
|
+
for (const platform of platforms) {
|
|
44
|
+
const payload = {
|
|
45
|
+
slug,
|
|
46
|
+
platform,
|
|
47
|
+
caption: production.captions[platform],
|
|
48
|
+
videoFileId: video.id,
|
|
49
|
+
};
|
|
50
|
+
if (srtFileId)
|
|
51
|
+
payload.srtFileId = srtFileId;
|
|
52
|
+
created.push(await api.post("/short-publications", payload));
|
|
53
|
+
}
|
|
54
|
+
if (!quiet) {
|
|
55
|
+
printList(created, [
|
|
56
|
+
{ key: "platform", label: "Platform", width: 12 },
|
|
57
|
+
{ key: "status", label: "Status", width: 12 },
|
|
58
|
+
{ key: "id", label: "ID", width: 36 },
|
|
59
|
+
], {});
|
|
60
|
+
console.log(chalk.dim("Polling every 10s (up to 15 min)..."));
|
|
61
|
+
}
|
|
62
|
+
const current = await pollPublications(slug, created, (p) => {
|
|
63
|
+
if (!quiet)
|
|
64
|
+
console.log(` ${p.platform}: ${p.status}`);
|
|
65
|
+
});
|
|
66
|
+
if (quiet)
|
|
67
|
+
console.log(JSON.stringify(current, null, 2));
|
|
68
|
+
let failed = false;
|
|
69
|
+
for (const p of current) {
|
|
70
|
+
if (p.status === "failed")
|
|
71
|
+
failed = true;
|
|
72
|
+
if (quiet)
|
|
73
|
+
continue;
|
|
74
|
+
if (p.status === "published") {
|
|
75
|
+
console.log(chalk.green("✓"), `${p.platform} published${p.externalUrl ? `: ${p.externalUrl}` : ""}`);
|
|
76
|
+
}
|
|
77
|
+
else if (p.status === "drafted") {
|
|
78
|
+
const hint = p.platform === "tiktok"
|
|
79
|
+
? ": open TikTok, the video is in your drafts"
|
|
80
|
+
: "";
|
|
81
|
+
console.log(chalk.green("✓"), `${p.platform} drafted${hint}`);
|
|
82
|
+
}
|
|
83
|
+
else if (p.status === "failed") {
|
|
84
|
+
console.error(chalk.red("✗"), `${p.platform} failed: ${p.errorMessage ?? "no error message"}`);
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
console.log(chalk.yellow("!"), `${p.platform} still ${p.status} after 15 min; check later with: itznexus short status ${slug}`);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
if (failed)
|
|
91
|
+
process.exit(1);
|
|
92
|
+
}
|
|
93
|
+
catch (err) {
|
|
94
|
+
handleError(err);
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
//# sourceMappingURL=short-publications-publish.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"short-publications-publish.js","sourceRoot":"","sources":["../../../src/commands/api/short-publications-publish.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import { api } from "../../lib/api.js";
|
|
4
|
+
import { printList, handleError } from "../../lib/format.js";
|
|
5
|
+
import { SHORT_PLATFORMS, } from "../../lib/short-productions.js";
|
|
6
|
+
import { listPublications, } from "../../lib/short-publications.js";
|
|
7
|
+
import { publishCommand } from "./short-publications-publish.js";
|
|
8
|
+
function assertPlatform(value) {
|
|
9
|
+
if (!SHORT_PLATFORMS.includes(value)) {
|
|
10
|
+
throw new Error(`Unknown platform "${value}". Use ${SHORT_PLATFORMS.join(" or ")}.`);
|
|
11
|
+
}
|
|
12
|
+
return value;
|
|
13
|
+
}
|
|
14
|
+
const accountsCommand = new Command("accounts")
|
|
15
|
+
.description("List connected social accounts")
|
|
16
|
+
.option("--json", "Output as JSON")
|
|
17
|
+
.action(async (opts) => {
|
|
18
|
+
try {
|
|
19
|
+
const data = await api.get("/social-accounts");
|
|
20
|
+
printList(data, [
|
|
21
|
+
{ key: "platform", label: "Platform", width: 12 },
|
|
22
|
+
{ key: "handle", label: "Handle", width: 25 },
|
|
23
|
+
{ key: "status", label: "Status", width: 12 },
|
|
24
|
+
{ key: "tokenExpiresAt", label: "Token expires", width: 24 },
|
|
25
|
+
], opts);
|
|
26
|
+
}
|
|
27
|
+
catch (err) {
|
|
28
|
+
handleError(err);
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
const connectCommand = new Command("connect")
|
|
32
|
+
.description("Connect a social account via OAuth (instagram or tiktok)")
|
|
33
|
+
.argument("<platform>", "Platform to connect (instagram|tiktok)")
|
|
34
|
+
.option("--token <token>", "Instagram only: link with a dashboard-generated access token instead of OAuth")
|
|
35
|
+
.option("--json", "Output as JSON")
|
|
36
|
+
.action(async (platformArg, opts) => {
|
|
37
|
+
try {
|
|
38
|
+
const platform = assertPlatform(platformArg);
|
|
39
|
+
if (opts.token) {
|
|
40
|
+
if (platform !== "instagram") {
|
|
41
|
+
throw new Error("--token is only supported for instagram");
|
|
42
|
+
}
|
|
43
|
+
const data = await api.post("/social-accounts/instagram/token", { accessToken: opts.token });
|
|
44
|
+
if (opts.json) {
|
|
45
|
+
console.log(JSON.stringify(data, null, 2));
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
console.log(chalk.green("✓"), `Instagram account linked: ${chalk.bold(data.handle)} (${data.status})`);
|
|
49
|
+
}
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
const data = await api.get(`/social-accounts/connect/${platform}`);
|
|
53
|
+
if (opts.json) {
|
|
54
|
+
console.log(JSON.stringify(data, null, 2));
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
console.log(chalk.bold("Open this URL in your browser to connect:"));
|
|
58
|
+
console.log(` ${data.url}`);
|
|
59
|
+
if (platform === "instagram") {
|
|
60
|
+
console.log(chalk.dim("Have a dashboard-generated token instead? itznexus short connect instagram --token <token>"));
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
catch (err) {
|
|
65
|
+
handleError(err);
|
|
66
|
+
}
|
|
67
|
+
});
|
|
68
|
+
const statusCommand = new Command("status")
|
|
69
|
+
.description("List a production's publications and their statuses")
|
|
70
|
+
.argument("<slug>", "Production slug")
|
|
71
|
+
.option("--json", "Output as JSON")
|
|
72
|
+
.action(async (slug, opts) => {
|
|
73
|
+
try {
|
|
74
|
+
const data = await listPublications(slug);
|
|
75
|
+
printList(data, [
|
|
76
|
+
{ key: "platform", label: "Platform", width: 12 },
|
|
77
|
+
{ key: "status", label: "Status", width: 12 },
|
|
78
|
+
{ key: "externalUrl", label: "URL", width: 45 },
|
|
79
|
+
{ key: "errorMessage", label: "Error", width: 40 },
|
|
80
|
+
], opts);
|
|
81
|
+
}
|
|
82
|
+
catch (err) {
|
|
83
|
+
handleError(err);
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
const statsCommand = new Command("stats")
|
|
87
|
+
.description("Show per-day stats snapshots for a production's publications, with view deltas")
|
|
88
|
+
.argument("<slug>", "Production slug")
|
|
89
|
+
.option("--json", "Output raw snapshots as JSON")
|
|
90
|
+
.action(async (slug, opts) => {
|
|
91
|
+
try {
|
|
92
|
+
const publications = await listPublications(slug);
|
|
93
|
+
const withStats = [];
|
|
94
|
+
for (const p of publications) {
|
|
95
|
+
const stats = await api.get(`/short-publications/${p.id}/stats`);
|
|
96
|
+
withStats.push({ id: p.id, platform: p.platform, stats });
|
|
97
|
+
}
|
|
98
|
+
if (opts.json) {
|
|
99
|
+
console.log(JSON.stringify(withStats, null, 2));
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
if (withStats.length === 0) {
|
|
103
|
+
console.log(chalk.dim("No publications for this slug."));
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
const pad = (n) => String(n).padStart(2, "0");
|
|
107
|
+
const formatCapturedAt = (iso) => {
|
|
108
|
+
const d = new Date(iso);
|
|
109
|
+
return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())} ${pad(d.getHours())}:${pad(d.getMinutes())}`;
|
|
110
|
+
};
|
|
111
|
+
for (const { platform, stats } of withStats) {
|
|
112
|
+
console.log(chalk.bold(platform));
|
|
113
|
+
const ordered = [...stats].sort((a, b) => a.capturedAt.localeCompare(b.capturedAt));
|
|
114
|
+
const rows = ordered.map((snapshot, i) => {
|
|
115
|
+
const previous = i > 0 ? ordered[i - 1] : null;
|
|
116
|
+
const delta = previous ? snapshot.views - previous.views : null;
|
|
117
|
+
const views = delta === null
|
|
118
|
+
? String(snapshot.views)
|
|
119
|
+
: `${snapshot.views} (${delta >= 0 ? "+" : ""}${delta})`;
|
|
120
|
+
return {
|
|
121
|
+
capturedAt: formatCapturedAt(snapshot.capturedAt),
|
|
122
|
+
views,
|
|
123
|
+
likes: snapshot.likes,
|
|
124
|
+
comments: snapshot.comments,
|
|
125
|
+
shares: snapshot.shares,
|
|
126
|
+
saves: snapshot.saves,
|
|
127
|
+
};
|
|
128
|
+
});
|
|
129
|
+
printList(rows, [
|
|
130
|
+
{ key: "capturedAt", label: "Captured", width: 17 },
|
|
131
|
+
{ key: "views", label: "Views", width: 15 },
|
|
132
|
+
{ key: "likes", label: "Likes", width: 8 },
|
|
133
|
+
{ key: "comments", label: "Comments", width: 9 },
|
|
134
|
+
{ key: "shares", label: "Shares", width: 8 },
|
|
135
|
+
{ key: "saves", label: "Saves", width: 8 },
|
|
136
|
+
], {});
|
|
137
|
+
console.log();
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
catch (err) {
|
|
141
|
+
handleError(err);
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
const linkCommand = new Command("link")
|
|
145
|
+
.description("Link a production's TikTok publication to the posted video ID (after publishing the draft in-app)")
|
|
146
|
+
.argument("<slug>", "Production slug")
|
|
147
|
+
.requiredOption("--tiktok <videoId>", "TikTok video ID to link")
|
|
148
|
+
.option("--json", "Output as JSON")
|
|
149
|
+
.action(async (slug, opts) => {
|
|
150
|
+
try {
|
|
151
|
+
const publications = await listPublications(slug, "tiktok");
|
|
152
|
+
if (publications.length === 0) {
|
|
153
|
+
throw new Error(`No tiktok publication found for slug "${slug}"`);
|
|
154
|
+
}
|
|
155
|
+
const newest = [...publications].sort((a, b) => b.createdAt.localeCompare(a.createdAt))[0];
|
|
156
|
+
const data = await api.post(`/short-publications/${newest.id}/link`, { externalId: opts.tiktok });
|
|
157
|
+
if (opts.json) {
|
|
158
|
+
console.log(JSON.stringify(data, null, 2));
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
console.log(chalk.green("✓"), `TikTok publication linked (${data.status})${data.externalUrl ? `: ${data.externalUrl}` : ""}`);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
catch (err) {
|
|
165
|
+
handleError(err);
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
export const shortCommand = new Command("short")
|
|
169
|
+
.description("Publish short productions to Instagram and TikTok")
|
|
170
|
+
.addCommand(accountsCommand)
|
|
171
|
+
.addCommand(connectCommand)
|
|
172
|
+
.addCommand(publishCommand)
|
|
173
|
+
.addCommand(statusCommand)
|
|
174
|
+
.addCommand(statsCommand)
|
|
175
|
+
.addCommand(linkCommand);
|
|
176
|
+
//# sourceMappingURL=short-publications.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"short-publications.js","sourceRoot":"","sources":["../../../src/commands/api/short-publications.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -32,6 +32,7 @@ import { pipelineCommand } from "./commands/api/pipelines.js";
|
|
|
32
32
|
import { projectCommand } from "./commands/api/projects.js";
|
|
33
33
|
import { repositoryCommand } from "./commands/api/repositories.js";
|
|
34
34
|
import { settingCommand } from "./commands/api/settings.js";
|
|
35
|
+
import { shortCommand } from "./commands/api/short-publications.js";
|
|
35
36
|
import { shortLinkCommand } from "./commands/api/short-links.js";
|
|
36
37
|
import { uptimeCommand } from "./commands/api/uptime.js";
|
|
37
38
|
import { secureDropCommand } from "./commands/api/secure-drops.js";
|
|
@@ -84,6 +85,7 @@ CONTENT
|
|
|
84
85
|
folder Manage folders
|
|
85
86
|
content-seed Manage content seeds (multi-platform fan-out)
|
|
86
87
|
content-item Manage generated content items (per-surface)
|
|
88
|
+
short Publish short productions to Instagram and TikTok
|
|
87
89
|
|
|
88
90
|
YOUTUBE
|
|
89
91
|
youtube-production Manage YouTube productions
|
|
@@ -164,6 +166,7 @@ program.addCommand(fileCommand);
|
|
|
164
166
|
program.addCommand(folderCommand);
|
|
165
167
|
program.addCommand(contentSeedCommand);
|
|
166
168
|
program.addCommand(contentItemCommand);
|
|
169
|
+
program.addCommand(shortCommand);
|
|
167
170
|
// YouTube
|
|
168
171
|
program.addCommand(youtubeProductionCommand);
|
|
169
172
|
program.addCommand(youtubeVideoCommand);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export declare const SHORT_PLATFORMS: readonly ["instagram", "tiktok"];
|
|
2
|
+
export type ShortPlatform = (typeof SHORT_PLATFORMS)[number];
|
|
3
|
+
export type ShortProduction = {
|
|
4
|
+
dir: string;
|
|
5
|
+
videoPath: string;
|
|
6
|
+
srtPath: string | null;
|
|
7
|
+
captions: Partial<Record<ShortPlatform, string>>;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Walk up from startDir to the first folder containing a `productions/`
|
|
11
|
+
* directory (the short-productions root). Returns null when none is found.
|
|
12
|
+
*/
|
|
13
|
+
export declare function findProductionsRoot(startDir: string): string | null;
|
|
14
|
+
/**
|
|
15
|
+
* Parse a POST.md posting kit into per-platform captions. Each recognized
|
|
16
|
+
* `## <section>` heading's full text becomes that platform's caption, minus
|
|
17
|
+
* lines starting with "Note :" or "Note:", trimmed of blank edges. Anything
|
|
18
|
+
* before the first heading (e.g. the Cover title line) is ignored.
|
|
19
|
+
*/
|
|
20
|
+
export declare function parsePostCaptions(markdown: string): Partial<Record<ShortPlatform, string>>;
|
|
21
|
+
/**
|
|
22
|
+
* Resolve a production folder from any working directory inside the
|
|
23
|
+
* short-productions tree: locate `productions/<slug>/`, require the final
|
|
24
|
+
* video and POST.md, pick up the optional .srt, parse the captions.
|
|
25
|
+
*/
|
|
26
|
+
export declare function resolveShortProduction(slug: string, cwd: string): ShortProduction;
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
export const SHORT_PLATFORMS = ["instagram", "tiktok"];
|
|
4
|
+
// POST.md section headings mapped to publication platforms. Other sections
|
|
5
|
+
// (e.g. "## YouTube Shorts") are ignored on purpose.
|
|
6
|
+
const SECTION_PLATFORMS = {
|
|
7
|
+
tiktok: "tiktok",
|
|
8
|
+
"instagram reels": "instagram",
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Walk up from startDir to the first folder containing a `productions/`
|
|
12
|
+
* directory (the short-productions root). Returns null when none is found.
|
|
13
|
+
*/
|
|
14
|
+
export function findProductionsRoot(startDir) {
|
|
15
|
+
let dir = path.resolve(startDir);
|
|
16
|
+
for (;;) {
|
|
17
|
+
const candidate = path.join(dir, "productions");
|
|
18
|
+
if (fs.existsSync(candidate) && fs.statSync(candidate).isDirectory()) {
|
|
19
|
+
return dir;
|
|
20
|
+
}
|
|
21
|
+
const parent = path.dirname(dir);
|
|
22
|
+
if (parent === dir)
|
|
23
|
+
return null;
|
|
24
|
+
dir = parent;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Parse a POST.md posting kit into per-platform captions. Each recognized
|
|
29
|
+
* `## <section>` heading's full text becomes that platform's caption, minus
|
|
30
|
+
* lines starting with "Note :" or "Note:", trimmed of blank edges. Anything
|
|
31
|
+
* before the first heading (e.g. the Cover title line) is ignored.
|
|
32
|
+
*/
|
|
33
|
+
export function parsePostCaptions(markdown) {
|
|
34
|
+
const captions = {};
|
|
35
|
+
let current = null;
|
|
36
|
+
let lines = [];
|
|
37
|
+
const flush = () => {
|
|
38
|
+
if (current)
|
|
39
|
+
captions[current] = lines.join("\n").trim();
|
|
40
|
+
lines = [];
|
|
41
|
+
};
|
|
42
|
+
for (const line of markdown.split(/\r?\n/)) {
|
|
43
|
+
const heading = line.match(/^##\s+(.+?)\s*$/);
|
|
44
|
+
if (heading) {
|
|
45
|
+
flush();
|
|
46
|
+
current = SECTION_PLATFORMS[heading[1].toLowerCase()] ?? null;
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
if (!current)
|
|
50
|
+
continue;
|
|
51
|
+
if (line.startsWith("Note :") || line.startsWith("Note:"))
|
|
52
|
+
continue;
|
|
53
|
+
lines.push(line);
|
|
54
|
+
}
|
|
55
|
+
flush();
|
|
56
|
+
return captions;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Resolve a production folder from any working directory inside the
|
|
60
|
+
* short-productions tree: locate `productions/<slug>/`, require the final
|
|
61
|
+
* video and POST.md, pick up the optional .srt, parse the captions.
|
|
62
|
+
*/
|
|
63
|
+
export function resolveShortProduction(slug, cwd) {
|
|
64
|
+
const root = findProductionsRoot(cwd);
|
|
65
|
+
if (!root) {
|
|
66
|
+
throw new Error("No productions/ folder found walking up from the current directory. Run this from the short-productions folder (or any subfolder).");
|
|
67
|
+
}
|
|
68
|
+
const dir = path.join(root, "productions", slug);
|
|
69
|
+
if (!fs.existsSync(dir)) {
|
|
70
|
+
throw new Error(`Production folder not found: ${dir}`);
|
|
71
|
+
}
|
|
72
|
+
const videoPath = path.join(dir, `${slug}_final.mp4`);
|
|
73
|
+
if (!fs.existsSync(videoPath)) {
|
|
74
|
+
throw new Error(`Final video not found: ${videoPath}. Render it before publishing.`);
|
|
75
|
+
}
|
|
76
|
+
const postPath = path.join(dir, "POST.md");
|
|
77
|
+
if (!fs.existsSync(postPath)) {
|
|
78
|
+
throw new Error(`POST.md not found: ${postPath}`);
|
|
79
|
+
}
|
|
80
|
+
const captions = parsePostCaptions(fs.readFileSync(postPath, "utf-8"));
|
|
81
|
+
const srtCandidate = path.join(dir, `${slug}.srt`);
|
|
82
|
+
const srtPath = fs.existsSync(srtCandidate) ? srtCandidate : null;
|
|
83
|
+
return { dir, videoPath, srtPath, captions };
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=short-productions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"short-productions.js","sourceRoot":"","sources":["../../src/lib/short-productions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export type SocialAccount = {
|
|
2
|
+
id: string;
|
|
3
|
+
platform: string;
|
|
4
|
+
handle: string;
|
|
5
|
+
status: string;
|
|
6
|
+
scopes: string;
|
|
7
|
+
tokenExpiresAt: string | null;
|
|
8
|
+
createdAt: string;
|
|
9
|
+
updatedAt: string;
|
|
10
|
+
};
|
|
11
|
+
export type ShortPublication = {
|
|
12
|
+
id: string;
|
|
13
|
+
slug: string;
|
|
14
|
+
platform: string;
|
|
15
|
+
status: "pending" | "uploading" | "drafted" | "published" | "failed";
|
|
16
|
+
caption: string;
|
|
17
|
+
title: string | null;
|
|
18
|
+
externalUrl: string | null;
|
|
19
|
+
errorMessage: string | null;
|
|
20
|
+
publishedAt: string | null;
|
|
21
|
+
createdAt: string;
|
|
22
|
+
updatedAt: string;
|
|
23
|
+
};
|
|
24
|
+
export type StatsSnapshot = {
|
|
25
|
+
capturedAt: string;
|
|
26
|
+
views: number;
|
|
27
|
+
likes: number;
|
|
28
|
+
comments: number;
|
|
29
|
+
shares: number;
|
|
30
|
+
saves: number;
|
|
31
|
+
};
|
|
32
|
+
export declare function listPublications(slug: string, platform?: string): Promise<ShortPublication[]>;
|
|
33
|
+
/**
|
|
34
|
+
* Poll a slug's publications every 10s (up to 15 min) until every tracked
|
|
35
|
+
* publication leaves pending/uploading, reporting each status change.
|
|
36
|
+
* Returns the final state of the tracked publications.
|
|
37
|
+
*/
|
|
38
|
+
export declare function pollPublications(slug: string, tracked: ShortPublication[], onStatusChange: (publication: ShortPublication) => void): Promise<ShortPublication[]>;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { api } from "./api.js";
|
|
2
|
+
const POLL_INTERVAL_MS = 10_000;
|
|
3
|
+
const POLL_TIMEOUT_MS = 15 * 60 * 1000;
|
|
4
|
+
const OPEN_STATUSES = new Set(["pending", "uploading"]);
|
|
5
|
+
export function listPublications(slug, platform) {
|
|
6
|
+
const params = new URLSearchParams({ slug });
|
|
7
|
+
if (platform)
|
|
8
|
+
params.set("platform", platform);
|
|
9
|
+
return api.get(`/short-publications?${params}`);
|
|
10
|
+
}
|
|
11
|
+
function sleep(ms) {
|
|
12
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Poll a slug's publications every 10s (up to 15 min) until every tracked
|
|
16
|
+
* publication leaves pending/uploading, reporting each status change.
|
|
17
|
+
* Returns the final state of the tracked publications.
|
|
18
|
+
*/
|
|
19
|
+
export async function pollPublications(slug, tracked, onStatusChange) {
|
|
20
|
+
const lastStatus = new Map(tracked.map((p) => [p.id, p.status]));
|
|
21
|
+
let current = tracked;
|
|
22
|
+
const deadline = Date.now() + POLL_TIMEOUT_MS;
|
|
23
|
+
while (current.some((p) => OPEN_STATUSES.has(p.status)) &&
|
|
24
|
+
Date.now() < deadline) {
|
|
25
|
+
await sleep(POLL_INTERVAL_MS);
|
|
26
|
+
const all = await listPublications(slug);
|
|
27
|
+
current = current.map((prev) => all.find((p) => p.id === prev.id) ?? prev);
|
|
28
|
+
for (const p of current) {
|
|
29
|
+
if (lastStatus.get(p.id) !== p.status) {
|
|
30
|
+
lastStatus.set(p.id, p.status);
|
|
31
|
+
onStatusChange(p);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return current;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=short-publications.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"short-publications.js","sourceRoot":"","sources":["../../src/lib/short-publications.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAoC/B,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAChC,MAAM,eAAe,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AACvC,MAAM,aAAa,GAAG,IAAI,GAAG,CAAS,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC;AAEhE,MAAM,UAAU,gBAAgB,CAC9B,IAAY,EACZ,QAAiB;IAEjB,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,IAAI,QAAQ;QAAE,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IAC/C,OAAO,GAAG,CAAC,GAAG,CAAqB,uBAAuB,MAAM,EAAE,CAAC,CAAC;AACtE,CAAC;AAED,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,IAAY,EACZ,OAA2B,EAC3B,cAAuD;IAEvD,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACjE,IAAI,OAAO,GAAG,OAAO,CAAC;IACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,eAAe,CAAC;IAE9C,OACE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QAChD,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EACrB,CAAC;QACD,MAAM,KAAK,CAAC,gBAAgB,CAAC,CAAC;QAC9B,MAAM,GAAG,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACzC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC;QAC3E,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;gBACtC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;gBAC/B,cAAc,CAAC,CAAC,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
|