@gannochenko/staticstripes 0.0.12 ā 0.0.15
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/Makefile +20 -0
- package/dist/asset-manager.d.ts +1 -0
- package/dist/asset-manager.d.ts.map +1 -1
- package/dist/asset-manager.js +3 -0
- package/dist/asset-manager.js.map +1 -1
- package/dist/cli/ai-generation-strategy-factory.d.ts +23 -0
- package/dist/cli/ai-generation-strategy-factory.d.ts.map +1 -0
- package/dist/cli/ai-generation-strategy-factory.js +44 -0
- package/dist/cli/ai-generation-strategy-factory.js.map +1 -0
- package/dist/cli/ai-generation-strategy.d.ts +33 -0
- package/dist/cli/ai-generation-strategy.d.ts.map +1 -0
- package/dist/cli/ai-generation-strategy.js +3 -0
- package/dist/cli/ai-generation-strategy.js.map +1 -0
- package/dist/cli/ai-music-api-ai/ai-music-api-ai-generation-strategy.d.ts +38 -0
- package/dist/cli/ai-music-api-ai/ai-music-api-ai-generation-strategy.d.ts.map +1 -0
- package/dist/cli/ai-music-api-ai/ai-music-api-ai-generation-strategy.js +174 -0
- package/dist/cli/ai-music-api-ai/ai-music-api-ai-generation-strategy.js.map +1 -0
- package/dist/cli/auth-strategy-factory.d.ts +31 -0
- package/dist/cli/auth-strategy-factory.d.ts.map +1 -0
- package/dist/cli/auth-strategy-factory.js +61 -0
- package/dist/cli/auth-strategy-factory.js.map +1 -0
- package/dist/cli/auth-strategy.d.ts +31 -0
- package/dist/cli/auth-strategy.d.ts.map +1 -0
- package/dist/cli/auth-strategy.js +3 -0
- package/dist/cli/auth-strategy.js.map +1 -0
- package/dist/cli/commands/auth.d.ts +6 -0
- package/dist/cli/commands/auth.d.ts.map +1 -0
- package/dist/cli/commands/auth.js +103 -0
- package/dist/cli/commands/auth.js.map +1 -0
- package/dist/cli/commands/generate.d.ts.map +1 -1
- package/dist/cli/commands/generate.js +69 -2
- package/dist/cli/commands/generate.js.map +1 -1
- package/dist/cli/instagram/instagram-auth-strategy.d.ts +31 -0
- package/dist/cli/instagram/instagram-auth-strategy.d.ts.map +1 -0
- package/dist/cli/instagram/instagram-auth-strategy.js +505 -0
- package/dist/cli/instagram/instagram-auth-strategy.js.map +1 -0
- package/dist/cli/instagram/instagram-upload-strategy.d.ts +45 -0
- package/dist/cli/instagram/instagram-upload-strategy.d.ts.map +1 -0
- package/dist/cli/instagram/instagram-upload-strategy.js +303 -0
- package/dist/cli/instagram/instagram-upload-strategy.js.map +1 -0
- package/dist/cli/s3/s3-upload-strategy.d.ts.map +1 -1
- package/dist/cli/s3/s3-upload-strategy.js +7 -3
- package/dist/cli/s3/s3-upload-strategy.js.map +1 -1
- package/dist/cli/upload-strategy-factory.d.ts +1 -1
- package/dist/cli/upload-strategy-factory.d.ts.map +1 -1
- package/dist/cli/upload-strategy-factory.js +5 -5
- package/dist/cli/upload-strategy-factory.js.map +1 -1
- package/dist/cli/youtube/youtube-auth-strategy.d.ts +11 -0
- package/dist/cli/youtube/youtube-auth-strategy.d.ts.map +1 -0
- package/dist/cli/youtube/youtube-auth-strategy.js +320 -0
- package/dist/cli/youtube/youtube-auth-strategy.js.map +1 -0
- package/dist/cli/youtube/youtube-upload-strategy.d.ts +10 -3
- package/dist/cli/youtube/youtube-upload-strategy.d.ts.map +1 -1
- package/dist/cli/youtube/youtube-upload-strategy.js +96 -16
- package/dist/cli/youtube/youtube-upload-strategy.js.map +1 -1
- package/dist/cli.js +2 -3
- package/dist/cli.js.map +1 -1
- package/dist/html-project-parser.d.ts +40 -1
- package/dist/html-project-parser.d.ts.map +1 -1
- package/dist/html-project-parser.js +343 -9
- package/dist/html-project-parser.js.map +1 -1
- package/dist/lib/file.d.ts +2 -0
- package/dist/lib/file.d.ts.map +1 -0
- package/dist/lib/file.js +13 -0
- package/dist/lib/file.js.map +1 -0
- package/dist/lib/net.d.ts +19 -0
- package/dist/lib/net.d.ts.map +1 -0
- package/dist/lib/net.js +101 -0
- package/dist/lib/net.js.map +1 -0
- package/dist/project.d.ts +5 -2
- package/dist/project.d.ts.map +1 -1
- package/dist/project.js +9 -1
- package/dist/project.js.map +1 -1
- package/dist/type.d.ts +17 -0
- package/dist/type.d.ts.map +1 -1
- package/package.json +2 -1
- package/src/asset-manager.ts +4 -0
- package/src/cli/ai-generation-strategy-factory.ts +48 -0
- package/src/cli/ai-generation-strategy.ts +35 -0
- package/src/cli/ai-music-api-ai/ai-music-api-ai-generation-strategy.ts +266 -0
- package/src/cli/auth-strategy-factory.ts +67 -0
- package/src/cli/auth-strategy.ts +37 -0
- package/src/cli/commands/auth.ts +120 -0
- package/src/cli/commands/generate.ts +55 -2
- package/src/cli/instagram/instagram-auth-strategy.ts +569 -0
- package/src/cli/instagram/instagram-upload-strategy.ts +398 -0
- package/src/cli/s3/s3-upload-strategy.ts +7 -3
- package/src/cli/upload-strategy-factory.ts +6 -9
- package/src/cli/youtube/youtube-auth-strategy.ts +323 -0
- package/src/cli/youtube/youtube-upload-strategy.ts +147 -16
- package/src/cli.ts +2 -4
- package/src/html-project-parser.ts +429 -8
- package/src/lib/file.ts +11 -0
- package/src/lib/net.ts +120 -0
- package/src/project.ts +10 -0
- package/src/type.ts +19 -0
- package/dist/cli/youtube/auth-commands.d.ts +0 -3
- package/dist/cli/youtube/auth-commands.d.ts.map +0 -1
- package/dist/cli/youtube/auth-commands.js +0 -273
- package/dist/cli/youtube/auth-commands.js.map +0 -1
- package/dist/cli/youtube/cli.d.ts +0 -7
- package/dist/cli/youtube/cli.d.ts.map +0 -1
- package/dist/cli/youtube/cli.js +0 -13
- package/dist/cli/youtube/cli.js.map +0 -1
- package/dist/cli/youtube/upload-handler.d.ts +0 -12
- package/dist/cli/youtube/upload-handler.d.ts.map +0 -1
- package/dist/cli/youtube/upload-handler.js +0 -66
- package/dist/cli/youtube/upload-handler.js.map +0 -1
- package/src/cli/youtube/auth-commands.ts +0 -312
- package/src/cli/youtube/cli.ts +0 -11
- package/src/cli/youtube/upload-handler.ts +0 -101
package/src/type.ts
CHANGED
|
@@ -30,6 +30,11 @@ export type Asset = {
|
|
|
30
30
|
rotation: number; // rotation in degrees (0, 90, 180, 270)
|
|
31
31
|
hasVideo: boolean; // whether the asset has a video stream
|
|
32
32
|
hasAudio: boolean; // whether the asset has an audio stream
|
|
33
|
+
ai?: {
|
|
34
|
+
integrationName: string; // References AI integration name from <ai> section
|
|
35
|
+
prompt: string; // Generation prompt
|
|
36
|
+
duration?: number; // Optional duration in seconds for generation
|
|
37
|
+
};
|
|
33
38
|
};
|
|
34
39
|
|
|
35
40
|
export type Fragment = {
|
|
@@ -99,11 +104,25 @@ export type Upload = {
|
|
|
99
104
|
path: string; // e.g. "videos/${slug}/${output}.mp4"
|
|
100
105
|
acl?: string; // e.g. "public-read", "private"
|
|
101
106
|
};
|
|
107
|
+
// Instagram-specific configuration
|
|
108
|
+
instagram?: {
|
|
109
|
+
caption: string; // Caption/description for the Reel
|
|
110
|
+
shareToFeed: boolean; // Whether to share to Feed in addition to Reels tab
|
|
111
|
+
thumbOffset?: number; // Thumbnail frame location in milliseconds
|
|
112
|
+
coverUrl?: string; // Optional cover image URL
|
|
113
|
+
videoUrl?: string; // Public URL to video (if not auto-generated from S3)
|
|
114
|
+
};
|
|
102
115
|
};
|
|
103
116
|
|
|
104
117
|
// Legacy alias for backward compatibility
|
|
105
118
|
export type YouTubeUpload = Upload;
|
|
106
119
|
|
|
120
|
+
export type AIProvider = {
|
|
121
|
+
name: string; // e.g. "music-api" - used to reference this provider in assets
|
|
122
|
+
tag: string; // e.g. "music-api-ai" - used to identify provider type
|
|
123
|
+
model?: string; // e.g. "sonic-v3-5" - optional model name
|
|
124
|
+
};
|
|
125
|
+
|
|
107
126
|
export type ProjectStructure = {
|
|
108
127
|
sequences: SequenceDefinition[];
|
|
109
128
|
assets: Map<string, Asset>;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auth-commands.d.ts","sourceRoot":"","sources":["../../../src/cli/youtube/auth-commands.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkFpC,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqOlE"}
|
|
@@ -1,273 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.registerYouTubeAuthCommands = registerYouTubeAuthCommands;
|
|
7
|
-
const path_1 = require("path");
|
|
8
|
-
const fs_1 = require("fs");
|
|
9
|
-
const youtube_uploader_js_1 = require("../../youtube-uploader.js");
|
|
10
|
-
const open_1 = __importDefault(require("open"));
|
|
11
|
-
const http_1 = __importDefault(require("http"));
|
|
12
|
-
const url_1 = require("url");
|
|
13
|
-
function getOAuthInstructions() {
|
|
14
|
-
let instructions = '';
|
|
15
|
-
instructions +=
|
|
16
|
-
'ā Error: STATICSTRIPES_GOOGLE_CLIENT_ID and STATICSTRIPES_GOOGLE_CLIENT_SECRET environment variables are not set\n\n';
|
|
17
|
-
instructions += 'š Getting Google OAuth Credentials:\n\n';
|
|
18
|
-
instructions += '1. Go to Google Cloud Console:\n';
|
|
19
|
-
instructions += ' https://console.cloud.google.com/\n\n';
|
|
20
|
-
instructions += '2. Create or select a project\n\n';
|
|
21
|
-
instructions += '3. Enable YouTube Data API v3:\n';
|
|
22
|
-
instructions += ' - Go to "APIs & Services" > "Library"\n';
|
|
23
|
-
instructions += ' - Search for "YouTube Data API v3"\n';
|
|
24
|
-
instructions += ' - Click "Enable"\n\n';
|
|
25
|
-
instructions += '4. Configure OAuth Consent Screen:\n';
|
|
26
|
-
instructions += ' - Go to "APIs & Services" > "OAuth consent screen"\n';
|
|
27
|
-
instructions += ' - Choose "External" user type\n';
|
|
28
|
-
instructions += ' - Fill in app name and contact emails\n';
|
|
29
|
-
instructions +=
|
|
30
|
-
' - Add scope: https://www.googleapis.com/auth/youtube.upload\n';
|
|
31
|
-
instructions += ' - Add your email as a test user\n\n';
|
|
32
|
-
instructions += '5. Create OAuth 2.0 Credentials:\n';
|
|
33
|
-
instructions += ' - Go to "APIs & Services" > "Credentials"\n';
|
|
34
|
-
instructions += ' - Click "Create Credentials" > "OAuth client ID"\n';
|
|
35
|
-
instructions += ' - Choose "Web application"\n';
|
|
36
|
-
instructions +=
|
|
37
|
-
' - Add redirect URI: http://localhost:3000/oauth2callback\n';
|
|
38
|
-
instructions += ' - Click "Create"\n\n';
|
|
39
|
-
instructions += '6. Copy your Client ID and Client Secret\n\n';
|
|
40
|
-
instructions += '7. Publish your OAuth app (IMPORTANT):\n';
|
|
41
|
-
instructions +=
|
|
42
|
-
' - Go to "APIs & Services" > "OAuth consent screen"\n';
|
|
43
|
-
instructions += ' - Click "PUBLISH APP" button\n';
|
|
44
|
-
instructions +=
|
|
45
|
-
' - This makes refresh tokens permanent (otherwise they expire in 7 days)\n';
|
|
46
|
-
instructions +=
|
|
47
|
-
' - Note: For personal use, you don\'t need Google verification\n\n';
|
|
48
|
-
instructions += '8. Set environment variables:\n\n';
|
|
49
|
-
// Platform-specific instructions
|
|
50
|
-
const platform = process.platform;
|
|
51
|
-
if (platform === 'win32') {
|
|
52
|
-
instructions += ' PowerShell (Recommended) - Run as Administrator:\n';
|
|
53
|
-
instructions +=
|
|
54
|
-
' [System.Environment]::SetEnvironmentVariable("STATICSTRIPES_GOOGLE_CLIENT_ID", "your-client-id.apps.googleusercontent.com", "User")\n';
|
|
55
|
-
instructions +=
|
|
56
|
-
' [System.Environment]::SetEnvironmentVariable("STATICSTRIPES_GOOGLE_CLIENT_SECRET", "your-client-secret", "User")\n';
|
|
57
|
-
instructions += ' Then restart your terminal\n\n';
|
|
58
|
-
instructions += ' Or Command Prompt - Run as Administrator:\n';
|
|
59
|
-
instructions +=
|
|
60
|
-
' setx STATICSTRIPES_GOOGLE_CLIENT_ID "your-client-id.apps.googleusercontent.com"\n';
|
|
61
|
-
instructions +=
|
|
62
|
-
' setx STATICSTRIPES_GOOGLE_CLIENT_SECRET "your-client-secret"\n';
|
|
63
|
-
instructions += ' Then restart your terminal\n\n';
|
|
64
|
-
}
|
|
65
|
-
else if (platform === 'darwin') {
|
|
66
|
-
instructions += ' Add to ~/.zshrc (or ~/.bash_profile for bash):\n';
|
|
67
|
-
instructions +=
|
|
68
|
-
' export STATICSTRIPES_GOOGLE_CLIENT_ID="your-client-id.apps.googleusercontent.com"\n';
|
|
69
|
-
instructions +=
|
|
70
|
-
' export STATICSTRIPES_GOOGLE_CLIENT_SECRET="your-client-secret"\n\n';
|
|
71
|
-
instructions += ' Then reload your shell:\n';
|
|
72
|
-
instructions += ' source ~/.zshrc\n\n';
|
|
73
|
-
}
|
|
74
|
-
else {
|
|
75
|
-
// Linux and others
|
|
76
|
-
instructions += ' Add to ~/.bashrc (or ~/.zshrc for zsh):\n';
|
|
77
|
-
instructions +=
|
|
78
|
-
' export STATICSTRIPES_GOOGLE_CLIENT_ID="your-client-id.apps.googleusercontent.com"\n';
|
|
79
|
-
instructions +=
|
|
80
|
-
' export STATICSTRIPES_GOOGLE_CLIENT_SECRET="your-client-secret"\n\n';
|
|
81
|
-
instructions += ' Then reload your shell:\n';
|
|
82
|
-
instructions += ' source ~/.bashrc # or source ~/.zshrc\n\n';
|
|
83
|
-
}
|
|
84
|
-
return instructions;
|
|
85
|
-
}
|
|
86
|
-
function registerYouTubeAuthCommands(program) {
|
|
87
|
-
program
|
|
88
|
-
.command('auth')
|
|
89
|
-
.description('Authenticate with YouTube for uploading')
|
|
90
|
-
.option('-p, --project <path>', 'Path to project directory', '.')
|
|
91
|
-
.requiredOption('--upload-name <name>', 'Name of the upload configuration')
|
|
92
|
-
.action(async (options) => {
|
|
93
|
-
try {
|
|
94
|
-
// Get OAuth credentials from environment variables
|
|
95
|
-
const clientId = process.env.STATICSTRIPES_GOOGLE_CLIENT_ID;
|
|
96
|
-
const clientSecret = process.env.STATICSTRIPES_GOOGLE_CLIENT_SECRET;
|
|
97
|
-
if (!clientId || !clientSecret) {
|
|
98
|
-
console.error(getOAuthInstructions());
|
|
99
|
-
process.exit(1);
|
|
100
|
-
}
|
|
101
|
-
// Resolve project path
|
|
102
|
-
const projectPath = (0, path_1.resolve)(process.cwd(), options.project);
|
|
103
|
-
const projectFilePath = (0, path_1.resolve)(projectPath, 'project.html');
|
|
104
|
-
// Validate project.html exists
|
|
105
|
-
if (!(0, fs_1.existsSync)(projectFilePath)) {
|
|
106
|
-
console.error(`Error: project.html not found in ${projectPath}`);
|
|
107
|
-
process.exit(1);
|
|
108
|
-
}
|
|
109
|
-
console.log(`š Project: ${projectPath}`);
|
|
110
|
-
console.log(`š Authenticating: ${options.uploadName}\n`);
|
|
111
|
-
// Create uploader instance
|
|
112
|
-
const uploader = new youtube_uploader_js_1.YouTubeUploader(clientId, clientSecret);
|
|
113
|
-
// Get authorization URL
|
|
114
|
-
const authUrl = uploader.getAuthUrl();
|
|
115
|
-
console.log('š Starting local server on http://localhost:3000...\n');
|
|
116
|
-
// Create a promise that resolves when we get the OAuth callback
|
|
117
|
-
const authPromise = new Promise((resolve, reject) => {
|
|
118
|
-
// Track all connections to force-close them
|
|
119
|
-
const connections = new Set();
|
|
120
|
-
const server = http_1.default.createServer((req, res) => {
|
|
121
|
-
const url = (0, url_1.parse)(req.url || '', true);
|
|
122
|
-
if (url.pathname === '/oauth2callback') {
|
|
123
|
-
const code = url.query.code;
|
|
124
|
-
const error = url.query.error;
|
|
125
|
-
const closeServer = () => {
|
|
126
|
-
// Destroy all connections
|
|
127
|
-
connections.forEach((socket) => {
|
|
128
|
-
socket.destroy();
|
|
129
|
-
});
|
|
130
|
-
connections.clear();
|
|
131
|
-
server.close();
|
|
132
|
-
};
|
|
133
|
-
if (error) {
|
|
134
|
-
res.writeHead(200, { 'Content-Type': 'text/html' });
|
|
135
|
-
res.end(`
|
|
136
|
-
<html>
|
|
137
|
-
<body style="font-family: system-ui; padding: 40px; text-align: center;">
|
|
138
|
-
<h1>ā Authorization Failed</h1>
|
|
139
|
-
<p>Error: ${error}</p>
|
|
140
|
-
<p>You can close this window.</p>
|
|
141
|
-
</body>
|
|
142
|
-
</html>
|
|
143
|
-
`);
|
|
144
|
-
res.on('finish', closeServer);
|
|
145
|
-
reject(new Error(`Authorization failed: ${error}`));
|
|
146
|
-
return;
|
|
147
|
-
}
|
|
148
|
-
if (code) {
|
|
149
|
-
res.writeHead(200, { 'Content-Type': 'text/html' });
|
|
150
|
-
res.end(`
|
|
151
|
-
<html>
|
|
152
|
-
<body style="font-family: system-ui; padding: 40px; text-align: center;">
|
|
153
|
-
<h1>ā
Authorization Successful!</h1>
|
|
154
|
-
<p>You can close this window and return to the terminal.</p>
|
|
155
|
-
</body>
|
|
156
|
-
</html>
|
|
157
|
-
`);
|
|
158
|
-
res.on('finish', closeServer);
|
|
159
|
-
resolve(code);
|
|
160
|
-
}
|
|
161
|
-
else {
|
|
162
|
-
res.writeHead(400, { 'Content-Type': 'text/html' });
|
|
163
|
-
res.end(`
|
|
164
|
-
<html>
|
|
165
|
-
<body style="font-family: system-ui; padding: 40px; text-align: center;">
|
|
166
|
-
<h1>ā No Authorization Code</h1>
|
|
167
|
-
<p>No code was received from Google.</p>
|
|
168
|
-
<p>You can close this window.</p>
|
|
169
|
-
</body>
|
|
170
|
-
</html>
|
|
171
|
-
`);
|
|
172
|
-
res.on('finish', closeServer);
|
|
173
|
-
reject(new Error('No authorization code received'));
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
else {
|
|
177
|
-
res.writeHead(404);
|
|
178
|
-
res.end('Not found');
|
|
179
|
-
}
|
|
180
|
-
});
|
|
181
|
-
// Track connections
|
|
182
|
-
server.on('connection', (socket) => {
|
|
183
|
-
connections.add(socket);
|
|
184
|
-
socket.on('close', () => {
|
|
185
|
-
connections.delete(socket);
|
|
186
|
-
});
|
|
187
|
-
});
|
|
188
|
-
server.listen(3000, () => {
|
|
189
|
-
console.log('ā
Server started successfully\n');
|
|
190
|
-
});
|
|
191
|
-
// Set timeout to avoid hanging forever
|
|
192
|
-
setTimeout(() => {
|
|
193
|
-
connections.forEach((socket) => {
|
|
194
|
-
socket.destroy();
|
|
195
|
-
});
|
|
196
|
-
connections.clear();
|
|
197
|
-
server.close();
|
|
198
|
-
reject(new Error('Authentication timeout (5 minutes)'));
|
|
199
|
-
}, 5 * 60 * 1000);
|
|
200
|
-
});
|
|
201
|
-
console.log('š Opening browser for authorization...\n');
|
|
202
|
-
// Open browser automatically
|
|
203
|
-
try {
|
|
204
|
-
await (0, open_1.default)(authUrl);
|
|
205
|
-
console.log('ā
Browser opened successfully\n');
|
|
206
|
-
}
|
|
207
|
-
catch (err) {
|
|
208
|
-
console.log('ā ļø Could not open browser automatically');
|
|
209
|
-
console.log('š Please visit this URL to authorize:\n');
|
|
210
|
-
console.log(authUrl);
|
|
211
|
-
console.log();
|
|
212
|
-
}
|
|
213
|
-
console.log('ā³ Waiting for authorization...\n');
|
|
214
|
-
// Wait for the OAuth callback
|
|
215
|
-
const code = await authPromise;
|
|
216
|
-
console.log('š Authorization code received\n');
|
|
217
|
-
console.log('š¾ Saving authentication tokens...\n');
|
|
218
|
-
// Complete authentication
|
|
219
|
-
await uploader.authenticate(code, options.uploadName, projectPath);
|
|
220
|
-
console.log(`ā
Authentication complete for ${options.uploadName}!\n`);
|
|
221
|
-
}
|
|
222
|
-
catch (error) {
|
|
223
|
-
console.error(`\nā Authentication failed\n`);
|
|
224
|
-
if (error.message) {
|
|
225
|
-
console.error(`Error: ${error.message}\n`);
|
|
226
|
-
}
|
|
227
|
-
process.exit(1);
|
|
228
|
-
}
|
|
229
|
-
});
|
|
230
|
-
program
|
|
231
|
-
.command('auth-complete')
|
|
232
|
-
.description('(Fallback) Complete authentication with authorization code manually')
|
|
233
|
-
.option('-p, --project <path>', 'Path to project directory', '.')
|
|
234
|
-
.requiredOption('--upload-name <name>', 'Name of the upload configuration')
|
|
235
|
-
.requiredOption('--code <code>', 'Authorization code from OAuth flow')
|
|
236
|
-
.action(async (options) => {
|
|
237
|
-
try {
|
|
238
|
-
const clientId = process.env.STATICSTRIPES_GOOGLE_CLIENT_ID;
|
|
239
|
-
const clientSecret = process.env.STATICSTRIPES_GOOGLE_CLIENT_SECRET;
|
|
240
|
-
if (!clientId || !clientSecret) {
|
|
241
|
-
console.error('ā Error: STATICSTRIPES_GOOGLE_CLIENT_ID and STATICSTRIPES_GOOGLE_CLIENT_SECRET environment variables are not set');
|
|
242
|
-
console.error('\nš” Run: staticstripes auth --help');
|
|
243
|
-
console.error(' for complete setup instructions\n');
|
|
244
|
-
process.exit(1);
|
|
245
|
-
}
|
|
246
|
-
const projectPath = (0, path_1.resolve)(process.cwd(), options.project);
|
|
247
|
-
// Create uploader and complete authentication
|
|
248
|
-
const uploader = new youtube_uploader_js_1.YouTubeUploader(clientId, clientSecret);
|
|
249
|
-
await uploader.authenticate(options.code, options.uploadName, projectPath);
|
|
250
|
-
console.log(`ā
Authentication complete for ${options.uploadName}`);
|
|
251
|
-
}
|
|
252
|
-
catch (error) {
|
|
253
|
-
console.error(`\nā Authentication completion failed\n`);
|
|
254
|
-
if (error.message) {
|
|
255
|
-
console.error(`Error: ${error.message}\n`);
|
|
256
|
-
}
|
|
257
|
-
// Provide helpful guidance for common OAuth errors
|
|
258
|
-
if (error.message === 'invalid_grant' || error.code === 400) {
|
|
259
|
-
console.error('š” Common causes:\n');
|
|
260
|
-
console.error(' ⢠Authorization code expired (codes expire in ~60 seconds)');
|
|
261
|
-
console.error(' ⢠Code was already used');
|
|
262
|
-
console.error(' ⢠Code was copied incorrectly\n');
|
|
263
|
-
console.error('š Solution: Run the auth command again and complete it quickly:\n');
|
|
264
|
-
console.error(` 1. staticstripes auth --upload-name ${options.uploadName}`);
|
|
265
|
-
console.error(' 2. Authorize in browser immediately');
|
|
266
|
-
console.error(' 3. Copy the code from the URL');
|
|
267
|
-
console.error(' 4. Run auth-complete right away with the fresh code\n');
|
|
268
|
-
}
|
|
269
|
-
process.exit(1);
|
|
270
|
-
}
|
|
271
|
-
});
|
|
272
|
-
}
|
|
273
|
-
//# sourceMappingURL=auth-commands.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auth-commands.js","sourceRoot":"","sources":["../../../src/cli/youtube/auth-commands.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { Command } from 'commander';
|
|
2
|
-
/**
|
|
3
|
-
* Registers YouTube-specific commands (authentication only)
|
|
4
|
-
* Upload functionality is handled by the generic upload command with strategy pattern
|
|
5
|
-
*/
|
|
6
|
-
export declare function registerYouTubeCommands(program: Command): void;
|
|
7
|
-
//# sourceMappingURL=cli.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../../../src/cli/youtube/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAG9D"}
|
package/dist/cli/youtube/cli.js
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.registerYouTubeCommands = registerYouTubeCommands;
|
|
4
|
-
const auth_commands_js_1 = require("./auth-commands.js");
|
|
5
|
-
/**
|
|
6
|
-
* Registers YouTube-specific commands (authentication only)
|
|
7
|
-
* Upload functionality is handled by the generic upload command with strategy pattern
|
|
8
|
-
*/
|
|
9
|
-
function registerYouTubeCommands(program) {
|
|
10
|
-
// Register YouTube auth commands
|
|
11
|
-
(0, auth_commands_js_1.registerYouTubeAuthCommands)(program);
|
|
12
|
-
}
|
|
13
|
-
//# sourceMappingURL=cli.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../src/cli/youtube/cli.ts"],"names":[],"mappings":";;AAOA,0DAGC;AATD,yDAAiE;AAEjE;;;GAGG;AACH,SAAgB,uBAAuB,CAAC,OAAgB;IACtD,iCAAiC;IACjC,IAAA,8CAA2B,EAAC,OAAO,CAAC,CAAC;AACvC,CAAC"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { Project } from '../../project';
|
|
2
|
-
export interface YouTubeUploadOptions {
|
|
3
|
-
uploadName: string;
|
|
4
|
-
projectPath: string;
|
|
5
|
-
clientId: string;
|
|
6
|
-
clientSecret: string;
|
|
7
|
-
}
|
|
8
|
-
/**
|
|
9
|
-
* Handles YouTube video upload process
|
|
10
|
-
*/
|
|
11
|
-
export declare function handleYouTubeUpload(project: Project, options: YouTubeUploadOptions): Promise<void>;
|
|
12
|
-
//# sourceMappingURL=upload-handler.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"upload-handler.d.ts","sourceRoot":"","sources":["../../../src/cli/youtube/upload-handler.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAGxC,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,IAAI,CAAC,CAkFf"}
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.handleYouTubeUpload = handleYouTubeUpload;
|
|
7
|
-
const path_1 = require("path");
|
|
8
|
-
const youtube_uploader_1 = require("../../youtube-uploader");
|
|
9
|
-
const ejs_1 = __importDefault(require("ejs"));
|
|
10
|
-
/**
|
|
11
|
-
* Handles YouTube video upload process
|
|
12
|
-
*/
|
|
13
|
-
async function handleYouTubeUpload(project, options) {
|
|
14
|
-
// Get upload configuration
|
|
15
|
-
const upload = project.getYouTubeUpload(options.uploadName);
|
|
16
|
-
if (!upload) {
|
|
17
|
-
const availableUploads = Array.from(project.getYouTubeUploads().keys());
|
|
18
|
-
throw new Error(`Upload "${options.uploadName}" not found in project.html\n` +
|
|
19
|
-
(availableUploads.length > 0
|
|
20
|
-
? `Available uploads: ${availableUploads.join(', ')}`
|
|
21
|
-
: 'No uploads defined in project.html'));
|
|
22
|
-
}
|
|
23
|
-
// Get the output file
|
|
24
|
-
const output = project.getOutput(upload.outputName);
|
|
25
|
-
if (!output) {
|
|
26
|
-
throw new Error(`Output "${upload.outputName}" not found`);
|
|
27
|
-
}
|
|
28
|
-
console.log(`š¹ Video file: ${output.path}`);
|
|
29
|
-
console.log(`š¬ Upload config: ${options.uploadName}\n`);
|
|
30
|
-
// Create uploader and load tokens
|
|
31
|
-
const uploader = new youtube_uploader_1.YouTubeUploader(options.clientId, options.clientSecret);
|
|
32
|
-
const hasTokens = uploader.loadTokens(options.uploadName, options.projectPath);
|
|
33
|
-
if (!hasTokens) {
|
|
34
|
-
throw new Error(`Not authenticated. Please run: staticstripes auth --upload-name ${options.uploadName}`);
|
|
35
|
-
}
|
|
36
|
-
// Determine title (use upload-specific title or fall back to project title)
|
|
37
|
-
const title = upload.title || project.getTitle();
|
|
38
|
-
console.log(`š Title: ${title}\n`);
|
|
39
|
-
// Build the project to populate fragment times (needed for timecodes)
|
|
40
|
-
console.log('šØ Building project to calculate timecodes...');
|
|
41
|
-
await project.build(upload.outputName);
|
|
42
|
-
// Get timecodes and process description with EJS
|
|
43
|
-
const timecodes = project.getTimecodes();
|
|
44
|
-
// Convert ${variable} syntax to <%= variable %> for EJS compatibility
|
|
45
|
-
const ejsDescription = upload.description.replace(/\$\{(\w+)\}/g, '<%= $1 %>');
|
|
46
|
-
const processedDescription = ejs_1.default.render(ejsDescription, {
|
|
47
|
-
timecodes: timecodes.join('\n'),
|
|
48
|
-
});
|
|
49
|
-
// Create a processed upload object with rendered description
|
|
50
|
-
const processedUpload = {
|
|
51
|
-
...upload,
|
|
52
|
-
description: processedDescription,
|
|
53
|
-
};
|
|
54
|
-
// Upload video
|
|
55
|
-
const videoId = await uploader.uploadVideo(output.path, processedUpload, title);
|
|
56
|
-
// Handle thumbnail if specified
|
|
57
|
-
if (upload.thumbnailTimecode !== undefined) {
|
|
58
|
-
console.log(`\nš¼ļø Extracting thumbnail at ${upload.thumbnailTimecode}ms...`);
|
|
59
|
-
const thumbnailPath = (0, path_1.resolve)(options.projectPath, '.cache', 'thumbnail.png');
|
|
60
|
-
await uploader.extractThumbnail(output.path, upload.thumbnailTimecode, thumbnailPath);
|
|
61
|
-
await uploader.uploadThumbnail(videoId, thumbnailPath);
|
|
62
|
-
}
|
|
63
|
-
// TODO: Update project.html with video ID
|
|
64
|
-
console.log('\nā
Upload complete!');
|
|
65
|
-
}
|
|
66
|
-
//# sourceMappingURL=upload-handler.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"upload-handler.js","sourceRoot":"","sources":["../../../src/cli/youtube/upload-handler.ts"],"names":[],"mappings":"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"}
|