@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/Makefile
CHANGED
|
@@ -69,10 +69,18 @@ demo:
|
|
|
69
69
|
make build
|
|
70
70
|
node dist/cli.js generate -p ../../examples/demo -o youtube --option meh --debug
|
|
71
71
|
|
|
72
|
+
demoi:
|
|
73
|
+
make build
|
|
74
|
+
node dist/cli.js generate -p ../../examples/demo -o instagram_shorts
|
|
75
|
+
|
|
72
76
|
demoauth:
|
|
73
77
|
make build
|
|
74
78
|
node dist/cli.js auth -p ../../examples/demo --upload-name yt_primary
|
|
75
79
|
|
|
80
|
+
demoauthi:
|
|
81
|
+
make build
|
|
82
|
+
node dist/cli.js auth -p ../../examples/demo --upload-name ig_primary
|
|
83
|
+
|
|
76
84
|
demoupload:
|
|
77
85
|
make build
|
|
78
86
|
node dist/cli.js upload -p ../../examples/demo --upload-name yt_primary
|
|
@@ -80,3 +88,15 @@ demoupload:
|
|
|
80
88
|
demouploads3:
|
|
81
89
|
make build
|
|
82
90
|
node dist/cli.js upload -p ../../examples/demo --upload-name s3_primary
|
|
91
|
+
|
|
92
|
+
demouploads3i:
|
|
93
|
+
make build
|
|
94
|
+
node dist/cli.js upload -p ../../examples/demo --upload-name s3_instagram
|
|
95
|
+
|
|
96
|
+
demouploadi:
|
|
97
|
+
make build
|
|
98
|
+
node dist/cli.js upload -p ../../examples/demo --upload-name ig_primary
|
|
99
|
+
|
|
100
|
+
authhelpi:
|
|
101
|
+
make build
|
|
102
|
+
node dist/cli.js auth-help instagram
|
package/dist/asset-manager.d.ts
CHANGED
|
@@ -6,6 +6,7 @@ export declare class AssetManager {
|
|
|
6
6
|
constructor(assets: Asset[]);
|
|
7
7
|
getAssetIndexMap(): Map<string, number>;
|
|
8
8
|
getAssetByName(name: string): Asset | undefined;
|
|
9
|
+
getAssets(): Asset[];
|
|
9
10
|
getVideoInputLabelByAssetName(name: string): Label;
|
|
10
11
|
getAudioInputLabelByAssetName(name: string): Label;
|
|
11
12
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"asset-manager.d.ts","sourceRoot":"","sources":["../src/asset-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAE/B,qBAAa,YAAY;IAGX,OAAO,CAAC,MAAM;IAF1B,OAAO,CAAC,aAAa,CAAkC;gBAEnC,MAAM,EAAE,KAAK,EAAE;IAO5B,gBAAgB,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAIvC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS;IAI/C,6BAA6B,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK;IAalD,6BAA6B,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK;IASzD;;OAEG;IACI,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;CAQ3C"}
|
|
1
|
+
{"version":3,"file":"asset-manager.d.ts","sourceRoot":"","sources":["../src/asset-manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAE/B,qBAAa,YAAY;IAGX,OAAO,CAAC,MAAM;IAF1B,OAAO,CAAC,aAAa,CAAkC;gBAEnC,MAAM,EAAE,KAAK,EAAE;IAO5B,gBAAgB,IAAI,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC;IAIvC,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS;IAI/C,SAAS,IAAI,KAAK,EAAE;IAIpB,6BAA6B,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK;IAalD,6BAA6B,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK;IASzD;;OAEG;IACI,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI;CAQ3C"}
|
package/dist/asset-manager.js
CHANGED
|
@@ -17,6 +17,9 @@ class AssetManager {
|
|
|
17
17
|
getAssetByName(name) {
|
|
18
18
|
return this.assets.find((assetItem) => assetItem.name === name);
|
|
19
19
|
}
|
|
20
|
+
getAssets() {
|
|
21
|
+
return this.assets;
|
|
22
|
+
}
|
|
20
23
|
getVideoInputLabelByAssetName(name) {
|
|
21
24
|
const assetIndex = this.assetIndexMap.get(name);
|
|
22
25
|
const asset = this.getAssetByName(name);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"asset-manager.js","sourceRoot":"","sources":["../src/asset-manager.ts"],"names":[],"mappings":";;;AAGA,MAAa,YAAY;IAGH;IAFZ,aAAa,GAAwB,IAAI,GAAG,EAAE,CAAC;IAEvD,YAAoB,MAAe;QAAf,WAAM,GAAN,MAAM,CAAS;QACjC,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAEM,gBAAgB;QACrB,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAEM,cAAc,CAAC,IAAY;QAChC,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAClE,CAAC;IAEM,6BAA6B,CAAC,IAAY;QAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACzE,CAAC;QAED,OAAO;YACL,GAAG,EAAE,GAAG,UAAU,IAAI;YACtB,OAAO,EAAE,KAAK;SACf,CAAC;IACJ,CAAC;IAEM,6BAA6B,CAAC,IAAY;QAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAEhD,OAAO;YACL,GAAG,EAAE,GAAG,UAAU,IAAI;YACtB,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAED;;OAEG;IACI,eAAe,CAAC,KAAY;QACjC,sBAAsB;QACtB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAExB,8BAA8B;QAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;QAC1C,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAChD,CAAC;CACF;
|
|
1
|
+
{"version":3,"file":"asset-manager.js","sourceRoot":"","sources":["../src/asset-manager.ts"],"names":[],"mappings":";;;AAGA,MAAa,YAAY;IAGH;IAFZ,aAAa,GAAwB,IAAI,GAAG,EAAE,CAAC;IAEvD,YAAoB,MAAe;QAAf,WAAM,GAAN,MAAM,CAAS;QACjC,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAEM,gBAAgB;QACrB,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAEM,cAAc,CAAC,IAAY;QAChC,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;IAClE,CAAC;IAEM,SAAS;QACd,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAEM,6BAA6B,CAAC,IAAY;QAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACzE,CAAC;QAED,OAAO;YACL,GAAG,EAAE,GAAG,UAAU,IAAI;YACtB,OAAO,EAAE,KAAK;SACf,CAAC;IACJ,CAAC;IAEM,6BAA6B,CAAC,IAAY;QAC/C,MAAM,UAAU,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAEhD,OAAO;YACL,GAAG,EAAE,GAAG,UAAU,IAAI;YACtB,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAED;;OAEG;IACI,eAAe,CAAC,KAAY;QACjC,sBAAsB;QACtB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAExB,8BAA8B;QAC9B,MAAM,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;QAC1C,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAChD,CAAC;CACF;AAvDD,oCAuDC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { AIGenerationStrategy } from './ai-generation-strategy';
|
|
2
|
+
/**
|
|
3
|
+
* Factory for creating AI generation strategies based on provider tag
|
|
4
|
+
*/
|
|
5
|
+
export declare class AIGenerationStrategyFactory {
|
|
6
|
+
private strategies;
|
|
7
|
+
/**
|
|
8
|
+
* Registers an AI generation strategy
|
|
9
|
+
*/
|
|
10
|
+
register(strategy: AIGenerationStrategy): void;
|
|
11
|
+
/**
|
|
12
|
+
* Gets a strategy for the given tag
|
|
13
|
+
* @param tag The AI provider tag (e.g., "ai-music-api-ai")
|
|
14
|
+
* @returns The strategy for this tag
|
|
15
|
+
* @throws Error if no strategy is registered for the tag
|
|
16
|
+
*/
|
|
17
|
+
getStrategy(tag: string): AIGenerationStrategy;
|
|
18
|
+
/**
|
|
19
|
+
* Creates a factory with all available strategies registered
|
|
20
|
+
*/
|
|
21
|
+
static createDefault(): AIGenerationStrategyFactory;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=ai-generation-strategy-factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-generation-strategy-factory.d.ts","sourceRoot":"","sources":["../../src/cli/ai-generation-strategy-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAGhE;;GAEG;AACH,qBAAa,2BAA2B;IACtC,OAAO,CAAC,UAAU,CAAgD;IAElE;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,oBAAoB,GAAG,IAAI;IAI9C;;;;;OAKG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,oBAAoB;IAc9C;;OAEG;IACH,MAAM,CAAC,aAAa,IAAI,2BAA2B;CAQpD"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AIGenerationStrategyFactory = void 0;
|
|
4
|
+
const ai_music_api_ai_generation_strategy_1 = require("./ai-music-api-ai/ai-music-api-ai-generation-strategy");
|
|
5
|
+
/**
|
|
6
|
+
* Factory for creating AI generation strategies based on provider tag
|
|
7
|
+
*/
|
|
8
|
+
class AIGenerationStrategyFactory {
|
|
9
|
+
strategies = new Map();
|
|
10
|
+
/**
|
|
11
|
+
* Registers an AI generation strategy
|
|
12
|
+
*/
|
|
13
|
+
register(strategy) {
|
|
14
|
+
this.strategies.set(strategy.getTag(), strategy);
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Gets a strategy for the given tag
|
|
18
|
+
* @param tag The AI provider tag (e.g., "ai-music-api-ai")
|
|
19
|
+
* @returns The strategy for this tag
|
|
20
|
+
* @throws Error if no strategy is registered for the tag
|
|
21
|
+
*/
|
|
22
|
+
getStrategy(tag) {
|
|
23
|
+
const strategy = this.strategies.get(tag);
|
|
24
|
+
if (!strategy) {
|
|
25
|
+
const availableTags = Array.from(this.strategies.keys());
|
|
26
|
+
throw new Error(`No AI generation strategy registered for tag "${tag}".\n` +
|
|
27
|
+
(availableTags.length > 0
|
|
28
|
+
? `Available: ${availableTags.join(', ')}`
|
|
29
|
+
: 'No AI generation strategies registered.'));
|
|
30
|
+
}
|
|
31
|
+
return strategy;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Creates a factory with all available strategies registered
|
|
35
|
+
*/
|
|
36
|
+
static createDefault() {
|
|
37
|
+
const factory = new AIGenerationStrategyFactory();
|
|
38
|
+
// Register AIMusicAPI.ai strategy
|
|
39
|
+
factory.register(new ai_music_api_ai_generation_strategy_1.AIMusicAPIGenerationStrategy());
|
|
40
|
+
return factory;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
exports.AIGenerationStrategyFactory = AIGenerationStrategyFactory;
|
|
44
|
+
//# sourceMappingURL=ai-generation-strategy-factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-generation-strategy-factory.js","sourceRoot":"","sources":["../../src/cli/ai-generation-strategy-factory.ts"],"names":[],"mappings":";;;AACA,+GAAqG;AAErG;;GAEG;AACH,MAAa,2BAA2B;IAC9B,UAAU,GAAsC,IAAI,GAAG,EAAE,CAAC;IAElE;;OAEG;IACH,QAAQ,CAAC,QAA8B;QACrC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,QAAQ,CAAC,CAAC;IACnD,CAAC;IAED;;;;;OAKG;IACH,WAAW,CAAC,GAAW;QACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC1C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;YACzD,MAAM,IAAI,KAAK,CACb,iDAAiD,GAAG,MAAM;gBACxD,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC;oBACvB,CAAC,CAAC,cAAc,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;oBAC1C,CAAC,CAAC,yCAAyC,CAAC,CACjD,CAAC;QACJ,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,aAAa;QAClB,MAAM,OAAO,GAAG,IAAI,2BAA2B,EAAE,CAAC;QAElD,kCAAkC;QAClC,OAAO,CAAC,QAAQ,CAAC,IAAI,kEAA4B,EAAE,CAAC,CAAC;QAErD,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AAzCD,kEAyCC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration for AI asset generation
|
|
3
|
+
*/
|
|
4
|
+
export interface AIAssetConfig {
|
|
5
|
+
assetName: string;
|
|
6
|
+
assetPath: string;
|
|
7
|
+
integrationName: string;
|
|
8
|
+
prompt: string;
|
|
9
|
+
model?: string;
|
|
10
|
+
duration?: number;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Interface for AI generation strategies
|
|
14
|
+
* Each AI provider (AIMusicAPI.ai, etc.) implements this interface
|
|
15
|
+
*/
|
|
16
|
+
export interface AIGenerationStrategy {
|
|
17
|
+
/**
|
|
18
|
+
* Returns the tag name this strategy handles (e.g., "ai-music-api-ai")
|
|
19
|
+
*/
|
|
20
|
+
getTag(): string;
|
|
21
|
+
/**
|
|
22
|
+
* Validates that required credentials and configuration are present
|
|
23
|
+
* @throws Error if validation fails
|
|
24
|
+
*/
|
|
25
|
+
validate(): void;
|
|
26
|
+
/**
|
|
27
|
+
* Generates an AI asset
|
|
28
|
+
* @param config The AI asset configuration
|
|
29
|
+
* @param projectPath The absolute path to the project directory
|
|
30
|
+
*/
|
|
31
|
+
generate(config: AIAssetConfig, projectPath: string): Promise<void>;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=ai-generation-strategy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-generation-strategy.d.ts","sourceRoot":"","sources":["../../src/cli/ai-generation-strategy.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;GAGG;AACH,MAAM,WAAW,oBAAoB;IACnC;;OAEG;IACH,MAAM,IAAI,MAAM,CAAC;IAEjB;;;OAGG;IACH,QAAQ,IAAI,IAAI,CAAC;IAEjB;;;;OAIG;IACH,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACrE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-generation-strategy.js","sourceRoot":"","sources":["../../src/cli/ai-generation-strategy.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { AIGenerationStrategy, AIAssetConfig } from '../ai-generation-strategy';
|
|
2
|
+
/**
|
|
3
|
+
* AIMusicAPI.ai generation strategy
|
|
4
|
+
* Generates music using AIMusicAPI.ai's API (https://aimusicapi.ai)
|
|
5
|
+
*/
|
|
6
|
+
export declare class AIMusicAPIGenerationStrategy implements AIGenerationStrategy {
|
|
7
|
+
private readonly API_BASE_URL;
|
|
8
|
+
private readonly POLL_INTERVAL_MS;
|
|
9
|
+
private readonly MAX_POLL_ATTEMPTS;
|
|
10
|
+
private readonly DEFAULT_MODEL;
|
|
11
|
+
private readonly DEFAULT_DURATION;
|
|
12
|
+
getTag(): string;
|
|
13
|
+
validate(): void;
|
|
14
|
+
generate(config: AIAssetConfig, projectPath: string): Promise<void>;
|
|
15
|
+
/**
|
|
16
|
+
* Loads credentials from .auth/<integrationName>.json
|
|
17
|
+
*/
|
|
18
|
+
private loadCredentials;
|
|
19
|
+
/**
|
|
20
|
+
* Creates a music generation task
|
|
21
|
+
* Returns the task ID
|
|
22
|
+
*/
|
|
23
|
+
private createMusicGenerationTask;
|
|
24
|
+
/**
|
|
25
|
+
* Polls for task completion
|
|
26
|
+
* Returns all audio URLs when ready
|
|
27
|
+
*/
|
|
28
|
+
private pollForCompletion;
|
|
29
|
+
/**
|
|
30
|
+
* Downloads audio from URL to file
|
|
31
|
+
*/
|
|
32
|
+
private downloadAudio;
|
|
33
|
+
/**
|
|
34
|
+
* Sleep for specified milliseconds
|
|
35
|
+
*/
|
|
36
|
+
private sleep;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=ai-music-api-ai-generation-strategy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-music-api-ai-generation-strategy.d.ts","sourceRoot":"","sources":["../../../src/cli/ai-music-api-ai/ai-music-api-ai-generation-strategy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAmBhF;;;GAGG;AACH,qBAAa,4BAA6B,YAAW,oBAAoB;IACvE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsC;IACnE,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAM;IACxC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAM;IAEvC,MAAM,IAAI,MAAM;IAIhB,QAAQ,IAAI,IAAI;IAIV,QAAQ,CAAC,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkDzE;;OAEG;IACH,OAAO,CAAC,eAAe;IA4CvB;;;OAGG;YACW,yBAAyB;IAkCvC;;;OAGG;YACW,iBAAiB;IAyE/B;;OAEG;YACW,aAAa;IAM3B;;OAEG;IACH,OAAO,CAAC,KAAK;CAGd"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AIMusicAPIGenerationStrategy = void 0;
|
|
4
|
+
const path_1 = require("path");
|
|
5
|
+
const fs_1 = require("fs");
|
|
6
|
+
const net_1 = require("../../lib/net");
|
|
7
|
+
const file_1 = require("../../lib/file");
|
|
8
|
+
/**
|
|
9
|
+
* AIMusicAPI.ai generation strategy
|
|
10
|
+
* Generates music using AIMusicAPI.ai's API (https://aimusicapi.ai)
|
|
11
|
+
*/
|
|
12
|
+
class AIMusicAPIGenerationStrategy {
|
|
13
|
+
API_BASE_URL = 'https://api.aimusicapi.ai/api/v1';
|
|
14
|
+
POLL_INTERVAL_MS = 20000; // 20 seconds
|
|
15
|
+
MAX_POLL_ATTEMPTS = 60; // 20 minutes max
|
|
16
|
+
DEFAULT_MODEL = 'sonic-v4-5'; // Default model if none specified
|
|
17
|
+
DEFAULT_DURATION = 30; // Default duration in seconds if none specified
|
|
18
|
+
getTag() {
|
|
19
|
+
return 'ai-music-api-ai';
|
|
20
|
+
}
|
|
21
|
+
validate() {
|
|
22
|
+
// Validation happens during generation when we load credentials
|
|
23
|
+
}
|
|
24
|
+
async generate(config, projectPath) {
|
|
25
|
+
const credentials = this.loadCredentials(config.integrationName, projectPath);
|
|
26
|
+
const model = config.model || this.DEFAULT_MODEL;
|
|
27
|
+
const duration = config.duration || this.DEFAULT_DURATION;
|
|
28
|
+
console.log(` Submitting music generation request (model: ${model}, duration: ${duration}s)...`);
|
|
29
|
+
console.log(` Using API key: ${credentials.apiKey.substring(0, 10)}... (length: ${credentials.apiKey.length})`);
|
|
30
|
+
const taskId = await this.createMusicGenerationTask(credentials.apiKey, config.prompt, model, duration);
|
|
31
|
+
console.log(` Task ID: ${taskId}`);
|
|
32
|
+
console.log(` Waiting for generation to complete...`);
|
|
33
|
+
const audioUrls = await this.pollForCompletion(credentials.apiKey, taskId);
|
|
34
|
+
console.log(` Downloading ${audioUrls.length} audio file(s)...`);
|
|
35
|
+
// Download the first file to the main asset path
|
|
36
|
+
await this.downloadAudio(audioUrls[0], config.assetPath);
|
|
37
|
+
console.log(` Primary audio saved to: ${config.assetPath}`);
|
|
38
|
+
// Download remaining files to alternative paths in the same directory
|
|
39
|
+
if (audioUrls.length > 1) {
|
|
40
|
+
const assetDir = (0, path_1.dirname)(config.assetPath);
|
|
41
|
+
const assetExt = (0, path_1.extname)(config.assetPath);
|
|
42
|
+
const assetBase = (0, path_1.basename)(config.assetPath, assetExt);
|
|
43
|
+
for (let i = 1; i < audioUrls.length; i++) {
|
|
44
|
+
const altNumber = String(i).padStart(2, '0');
|
|
45
|
+
const altPath = (0, path_1.resolve)(assetDir, `${assetBase}_alt_${altNumber}${assetExt}`);
|
|
46
|
+
await this.downloadAudio(audioUrls[i], altPath);
|
|
47
|
+
console.log(` Alternative ${i} saved to: ${altPath}`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Loads credentials from .auth/<integrationName>.json
|
|
53
|
+
*/
|
|
54
|
+
loadCredentials(integrationName, projectPath) {
|
|
55
|
+
const authFilePath = (0, path_1.resolve)(projectPath, '.auth', `${integrationName}.json`);
|
|
56
|
+
if (!(0, fs_1.existsSync)(authFilePath)) {
|
|
57
|
+
throw new Error(`Credentials file not found: ${authFilePath}\n` +
|
|
58
|
+
`Please create the file with the following format:\n` +
|
|
59
|
+
`{\n "apiKey": "your-api-key-here"\n}`);
|
|
60
|
+
}
|
|
61
|
+
try {
|
|
62
|
+
const fileContent = (0, fs_1.readFileSync)(authFilePath, 'utf-8');
|
|
63
|
+
const credentials = JSON.parse(fileContent);
|
|
64
|
+
if (!credentials.apiKey) {
|
|
65
|
+
throw new Error(`Invalid credentials file: ${authFilePath}\n` +
|
|
66
|
+
`Missing "apiKey" field`);
|
|
67
|
+
}
|
|
68
|
+
// Trim whitespace from API key
|
|
69
|
+
return {
|
|
70
|
+
apiKey: credentials.apiKey.trim(),
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
if (error instanceof SyntaxError) {
|
|
75
|
+
throw new Error(`Invalid JSON in credentials file: ${authFilePath}\n` +
|
|
76
|
+
`${error.message}`);
|
|
77
|
+
}
|
|
78
|
+
throw error;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Creates a music generation task
|
|
83
|
+
* Returns the task ID
|
|
84
|
+
*/
|
|
85
|
+
async createMusicGenerationTask(apiKey, prompt, model, duration) {
|
|
86
|
+
const endpoint = `${this.API_BASE_URL}/sonic/create`;
|
|
87
|
+
const requestBody = {
|
|
88
|
+
task_type: 'create_music',
|
|
89
|
+
custom_mode: false,
|
|
90
|
+
gpt_description_prompt: prompt,
|
|
91
|
+
mv: model,
|
|
92
|
+
duration,
|
|
93
|
+
};
|
|
94
|
+
const response = await (0, net_1.makeRequest)({
|
|
95
|
+
url: endpoint,
|
|
96
|
+
method: 'POST',
|
|
97
|
+
headers: {
|
|
98
|
+
Authorization: `Bearer ${apiKey}`,
|
|
99
|
+
},
|
|
100
|
+
body: requestBody,
|
|
101
|
+
});
|
|
102
|
+
if (!response.task_id) {
|
|
103
|
+
throw new Error(`Failed to create music generation task: ${response.message || 'Unknown error'}`);
|
|
104
|
+
}
|
|
105
|
+
return response.task_id;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Polls for task completion
|
|
109
|
+
* Returns all audio URLs when ready
|
|
110
|
+
*/
|
|
111
|
+
async pollForCompletion(apiKey, taskId) {
|
|
112
|
+
const endpoint = `${this.API_BASE_URL}/sonic/task/${taskId}`;
|
|
113
|
+
for (let attempt = 0; attempt < this.MAX_POLL_ATTEMPTS; attempt++) {
|
|
114
|
+
const response = await (0, net_1.makeRequest)({
|
|
115
|
+
url: endpoint,
|
|
116
|
+
method: 'GET',
|
|
117
|
+
headers: {
|
|
118
|
+
Authorization: `Bearer ${apiKey}`,
|
|
119
|
+
},
|
|
120
|
+
});
|
|
121
|
+
// API returns an array of clips in the data field
|
|
122
|
+
if (!response.data || !Array.isArray(response.data)) {
|
|
123
|
+
throw new Error(`Unexpected API response format: ${JSON.stringify(response)}`);
|
|
124
|
+
}
|
|
125
|
+
if (response.data.length === 0) {
|
|
126
|
+
throw new Error('No clips returned in response');
|
|
127
|
+
}
|
|
128
|
+
// Check the first clip to determine overall status
|
|
129
|
+
const firstClip = response.data[0];
|
|
130
|
+
const state = firstClip.state;
|
|
131
|
+
const errorMessage = firstClip.error_message;
|
|
132
|
+
console.log(` Status: ${state}... (${response.data.length} clip(s), attempt ${attempt + 1}/${this.MAX_POLL_ATTEMPTS})`);
|
|
133
|
+
if (state === 'succeeded' ||
|
|
134
|
+
state === 'completed' ||
|
|
135
|
+
state === 'success') {
|
|
136
|
+
// Collect all audio URLs from successful clips
|
|
137
|
+
const audioUrls = [];
|
|
138
|
+
for (const clip of response.data) {
|
|
139
|
+
if (clip.audio_url) {
|
|
140
|
+
audioUrls.push(clip.audio_url);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
if (audioUrls.length === 0) {
|
|
144
|
+
throw new Error('Task succeeded but no audio URLs returned');
|
|
145
|
+
}
|
|
146
|
+
console.log(` Found ${audioUrls.length} generated clip(s)`);
|
|
147
|
+
return audioUrls;
|
|
148
|
+
}
|
|
149
|
+
if (state === 'failed' || state === 'error') {
|
|
150
|
+
throw new Error(`Music generation failed: ${errorMessage || 'Unknown error'}`);
|
|
151
|
+
}
|
|
152
|
+
// Still processing, wait before next poll
|
|
153
|
+
if (attempt < this.MAX_POLL_ATTEMPTS - 1) {
|
|
154
|
+
await this.sleep(this.POLL_INTERVAL_MS);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
throw new Error(`Music generation timed out after ${this.MAX_POLL_ATTEMPTS} attempts`);
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Downloads audio from URL to file
|
|
161
|
+
*/
|
|
162
|
+
async downloadAudio(url, outputPath) {
|
|
163
|
+
const buffer = await (0, net_1.downloadFile)(url);
|
|
164
|
+
(0, file_1.writeFile)(outputPath, buffer);
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Sleep for specified milliseconds
|
|
168
|
+
*/
|
|
169
|
+
sleep(ms) {
|
|
170
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
exports.AIMusicAPIGenerationStrategy = AIMusicAPIGenerationStrategy;
|
|
174
|
+
//# sourceMappingURL=ai-music-api-ai-generation-strategy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-music-api-ai-generation-strategy.js","sourceRoot":"","sources":["../../../src/cli/ai-music-api-ai/ai-music-api-ai-generation-strategy.ts"],"names":[],"mappings":";;;AACA,+BAA2D;AAC3D,2BAA8C;AAC9C,uCAA0D;AAC1D,yCAA2C;AAe3C;;;GAGG;AACH,MAAa,4BAA4B;IACtB,YAAY,GAAG,kCAAkC,CAAC;IAClD,gBAAgB,GAAG,KAAK,CAAC,CAAC,aAAa;IACvC,iBAAiB,GAAG,EAAE,CAAC,CAAC,iBAAiB;IACzC,aAAa,GAAG,YAAY,CAAC,CAAC,kCAAkC;IAChE,gBAAgB,GAAG,EAAE,CAAC,CAAC,gDAAgD;IAExF,MAAM;QACJ,OAAO,iBAAiB,CAAC;IAC3B,CAAC;IAED,QAAQ;QACN,gEAAgE;IAClE,CAAC;IAED,KAAK,CAAC,QAAQ,CAAC,MAAqB,EAAE,WAAmB;QACvD,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CACtC,MAAM,CAAC,eAAe,EACtB,WAAW,CACZ,CAAC;QACF,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,aAAa,CAAC;QACjD,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,gBAAgB,CAAC;QAE1D,OAAO,CAAC,GAAG,CACT,iDAAiD,KAAK,eAAe,QAAQ,OAAO,CACrF,CAAC;QACF,OAAO,CAAC,GAAG,CACT,oBAAoB,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,gBAAgB,WAAW,CAAC,MAAM,CAAC,MAAM,GAAG,CACpG,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,yBAAyB,CACjD,WAAW,CAAC,MAAM,EAClB,MAAM,CAAC,MAAM,EACb,KAAK,EACL,QAAQ,CACT,CAAC;QAEF,OAAO,CAAC,GAAG,CAAC,cAAc,MAAM,EAAE,CAAC,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;QAEvD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAE3E,OAAO,CAAC,GAAG,CAAC,iBAAiB,SAAS,CAAC,MAAM,mBAAmB,CAAC,CAAC;QAElE,iDAAiD;QACjD,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QACzD,OAAO,CAAC,GAAG,CAAC,6BAA6B,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;QAE7D,sEAAsE;QACtE,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,IAAA,cAAO,EAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC3C,MAAM,QAAQ,GAAG,IAAA,cAAO,EAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC3C,MAAM,SAAS,GAAG,IAAA,eAAQ,EAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YAEvD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC1C,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;gBAC7C,MAAM,OAAO,GAAG,IAAA,cAAO,EACrB,QAAQ,EACR,GAAG,SAAS,QAAQ,SAAS,GAAG,QAAQ,EAAE,CAC3C,CAAC;gBACF,MAAM,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;gBAChD,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,cAAc,OAAO,EAAE,CAAC,CAAC;YACzD,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,eAAe,CACrB,eAAuB,EACvB,WAAmB;QAEnB,MAAM,YAAY,GAAG,IAAA,cAAO,EAC1B,WAAW,EACX,OAAO,EACP,GAAG,eAAe,OAAO,CAC1B,CAAC;QAEF,IAAI,CAAC,IAAA,eAAU,EAAC,YAAY,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CACb,+BAA+B,YAAY,IAAI;gBAC7C,qDAAqD;gBACrD,uCAAuC,CAC1C,CAAC;QACJ,CAAC;QAED,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,IAAA,iBAAY,EAAC,YAAY,EAAE,OAAO,CAAC,CAAC;YACxD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAwB,CAAC;YAEnE,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;gBACxB,MAAM,IAAI,KAAK,CACb,6BAA6B,YAAY,IAAI;oBAC3C,wBAAwB,CAC3B,CAAC;YACJ,CAAC;YAED,+BAA+B;YAC/B,OAAO;gBACL,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE;aAClC,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;gBACjC,MAAM,IAAI,KAAK,CACb,qCAAqC,YAAY,IAAI;oBACnD,GAAG,KAAK,CAAC,OAAO,EAAE,CACrB,CAAC;YACJ,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,yBAAyB,CACrC,MAAc,EACd,MAAc,EACd,KAAa,EACb,QAAgB;QAEhB,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,YAAY,eAAe,CAAC;QAErD,MAAM,WAAW,GAAG;YAClB,SAAS,EAAE,cAAc;YACzB,WAAW,EAAE,KAAK;YAClB,sBAAsB,EAAE,MAAM;YAC9B,EAAE,EAAE,KAAK;YACT,QAAQ;SACT,CAAC;QAEF,MAAM,QAAQ,GAAG,MAAM,IAAA,iBAAW,EAAyB;YACzD,GAAG,EAAE,QAAQ;YACb,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,MAAM,EAAE;aAClC;YACD,IAAI,EAAE,WAAW;SAClB,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CACb,2CAA2C,QAAQ,CAAC,OAAO,IAAI,eAAe,EAAE,CACjF,CAAC;QACJ,CAAC;QAED,OAAO,QAAQ,CAAC,OAAO,CAAC;IAC1B,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,iBAAiB,CAC7B,MAAc,EACd,MAAc;QAEd,MAAM,QAAQ,GAAG,GAAG,IAAI,CAAC,YAAY,eAAe,MAAM,EAAE,CAAC;QAE7D,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC,iBAAiB,EAAE,OAAO,EAAE,EAAE,CAAC;YAClE,MAAM,QAAQ,GAAG,MAAM,IAAA,iBAAW,EAAM;gBACtC,GAAG,EAAE,QAAQ;gBACb,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE;oBACP,aAAa,EAAE,UAAU,MAAM,EAAE;iBAClC;aACF,CAAC,CAAC;YAEH,kDAAkD;YAClD,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBACpD,MAAM,IAAI,KAAK,CACb,mCAAmC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAC9D,CAAC;YACJ,CAAC;YAED,IAAI,QAAQ,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC/B,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;YACnD,CAAC;YAED,mDAAmD;YACnD,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACnC,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;YAC9B,MAAM,YAAY,GAAG,SAAS,CAAC,aAAa,CAAC;YAE7C,OAAO,CAAC,GAAG,CACT,aAAa,KAAK,QAAQ,QAAQ,CAAC,IAAI,CAAC,MAAM,qBAAqB,OAAO,GAAG,CAAC,IAAI,IAAI,CAAC,iBAAiB,GAAG,CAC5G,CAAC;YAEF,IACE,KAAK,KAAK,WAAW;gBACrB,KAAK,KAAK,WAAW;gBACrB,KAAK,KAAK,SAAS,EACnB,CAAC;gBACD,+CAA+C;gBAC/C,MAAM,SAAS,GAAa,EAAE,CAAC;gBAC/B,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC;oBACjC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;wBACnB,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;oBACjC,CAAC;gBACH,CAAC;gBAED,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBAC3B,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;gBAC/D,CAAC;gBAED,OAAO,CAAC,GAAG,CAAC,WAAW,SAAS,CAAC,MAAM,oBAAoB,CAAC,CAAC;gBAC7D,OAAO,SAAS,CAAC;YACnB,CAAC;YAED,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;gBAC5C,MAAM,IAAI,KAAK,CACb,4BAA4B,YAAY,IAAI,eAAe,EAAE,CAC9D,CAAC;YACJ,CAAC;YAED,0CAA0C;YAC1C,IAAI,OAAO,GAAG,IAAI,CAAC,iBAAiB,GAAG,CAAC,EAAE,CAAC;gBACzC,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;YAC1C,CAAC;QACH,CAAC;QAED,MAAM,IAAI,KAAK,CACb,oCAAoC,IAAI,CAAC,iBAAiB,WAAW,CACtE,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,aAAa,CAAC,GAAW,EAAE,UAAkB;QACzD,MAAM,MAAM,GAAG,MAAM,IAAA,kBAAY,EAAC,GAAG,CAAC,CAAC;QAEvC,IAAA,gBAAS,EAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IAChC,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,EAAU;QACtB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IAC3D,CAAC;CACF;AAlPD,oEAkPC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { AuthStrategy } from './auth-strategy';
|
|
2
|
+
/**
|
|
3
|
+
* Factory for creating authentication strategies based on upload tag
|
|
4
|
+
*/
|
|
5
|
+
export declare class AuthStrategyFactory {
|
|
6
|
+
private strategies;
|
|
7
|
+
/**
|
|
8
|
+
* Registers an authentication strategy
|
|
9
|
+
*/
|
|
10
|
+
register(strategy: AuthStrategy): void;
|
|
11
|
+
/**
|
|
12
|
+
* Gets a strategy for the given tag
|
|
13
|
+
* @param tag The upload provider tag (e.g., "youtube", "instagram")
|
|
14
|
+
* @returns The strategy for this tag
|
|
15
|
+
* @throws Error if no strategy is registered for the tag
|
|
16
|
+
*/
|
|
17
|
+
getStrategy(tag: string): AuthStrategy;
|
|
18
|
+
/**
|
|
19
|
+
* Gets setup instructions for a specific tag
|
|
20
|
+
*/
|
|
21
|
+
getSetupInstructions(tag: string): string | undefined;
|
|
22
|
+
/**
|
|
23
|
+
* Lists all available authentication providers
|
|
24
|
+
*/
|
|
25
|
+
listProviders(): string[];
|
|
26
|
+
/**
|
|
27
|
+
* Creates a factory with all available strategies registered
|
|
28
|
+
*/
|
|
29
|
+
static createDefault(): AuthStrategyFactory;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=auth-strategy-factory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-strategy-factory.d.ts","sourceRoot":"","sources":["../../src/cli/auth-strategy-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAI/C;;GAEG;AACH,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,UAAU,CAAwC;IAE1D;;OAEG;IACH,QAAQ,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;IAItC;;;;;OAKG;IACH,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY;IActC;;OAEG;IACH,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAQrD;;OAEG;IACH,aAAa,IAAI,MAAM,EAAE;IAIzB;;OAEG;IACH,MAAM,CAAC,aAAa,IAAI,mBAAmB;CAQ5C"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AuthStrategyFactory = void 0;
|
|
4
|
+
const youtube_auth_strategy_1 = require("./youtube/youtube-auth-strategy");
|
|
5
|
+
const instagram_auth_strategy_1 = require("./instagram/instagram-auth-strategy");
|
|
6
|
+
/**
|
|
7
|
+
* Factory for creating authentication strategies based on upload tag
|
|
8
|
+
*/
|
|
9
|
+
class AuthStrategyFactory {
|
|
10
|
+
strategies = new Map();
|
|
11
|
+
/**
|
|
12
|
+
* Registers an authentication strategy
|
|
13
|
+
*/
|
|
14
|
+
register(strategy) {
|
|
15
|
+
this.strategies.set(strategy.getTag(), strategy);
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Gets a strategy for the given tag
|
|
19
|
+
* @param tag The upload provider tag (e.g., "youtube", "instagram")
|
|
20
|
+
* @returns The strategy for this tag
|
|
21
|
+
* @throws Error if no strategy is registered for the tag
|
|
22
|
+
*/
|
|
23
|
+
getStrategy(tag) {
|
|
24
|
+
const strategy = this.strategies.get(tag);
|
|
25
|
+
if (!strategy) {
|
|
26
|
+
const availableTags = Array.from(this.strategies.keys());
|
|
27
|
+
throw new Error(`No authentication strategy registered for tag "${tag}".\n` +
|
|
28
|
+
(availableTags.length > 0
|
|
29
|
+
? `Available: ${availableTags.join(', ')}`
|
|
30
|
+
: 'No authentication strategies registered.'));
|
|
31
|
+
}
|
|
32
|
+
return strategy;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Gets setup instructions for a specific tag
|
|
36
|
+
*/
|
|
37
|
+
getSetupInstructions(tag) {
|
|
38
|
+
const strategy = this.strategies.get(tag);
|
|
39
|
+
if (strategy && strategy.getSetupInstructions) {
|
|
40
|
+
return strategy.getSetupInstructions();
|
|
41
|
+
}
|
|
42
|
+
return undefined;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Lists all available authentication providers
|
|
46
|
+
*/
|
|
47
|
+
listProviders() {
|
|
48
|
+
return Array.from(this.strategies.keys());
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Creates a factory with all available strategies registered
|
|
52
|
+
*/
|
|
53
|
+
static createDefault() {
|
|
54
|
+
const factory = new AuthStrategyFactory();
|
|
55
|
+
factory.register(new youtube_auth_strategy_1.YouTubeAuthStrategy());
|
|
56
|
+
factory.register(new instagram_auth_strategy_1.InstagramAuthStrategy());
|
|
57
|
+
return factory;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
exports.AuthStrategyFactory = AuthStrategyFactory;
|
|
61
|
+
//# sourceMappingURL=auth-strategy-factory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-strategy-factory.js","sourceRoot":"","sources":["../../src/cli/auth-strategy-factory.ts"],"names":[],"mappings":";;;AACA,2EAAsE;AACtE,iFAA4E;AAE5E;;GAEG;AACH,MAAa,mBAAmB;IACtB,UAAU,GAA8B,IAAI,GAAG,EAAE,CAAC;IAE1D;;OAEG;IACH,QAAQ,CAAC,QAAsB;QAC7B,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,QAAQ,CAAC,CAAC;IACnD,CAAC;IAED;;;;;OAKG;IACH,WAAW,CAAC,GAAW;QACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC1C,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;YACzD,MAAM,IAAI,KAAK,CACb,kDAAkD,GAAG,MAAM;gBACzD,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC;oBACvB,CAAC,CAAC,cAAc,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;oBAC1C,CAAC,CAAC,0CAA0C,CAAC,CAClD,CAAC;QACJ,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,oBAAoB,CAAC,GAAW;QAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC1C,IAAI,QAAQ,IAAI,QAAQ,CAAC,oBAAoB,EAAE,CAAC;YAC9C,OAAO,QAAQ,CAAC,oBAAoB,EAAE,CAAC;QACzC,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED;;OAEG;IACH,aAAa;QACX,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,MAAM,CAAC,aAAa;QAClB,MAAM,OAAO,GAAG,IAAI,mBAAmB,EAAE,CAAC;QAE1C,OAAO,CAAC,QAAQ,CAAC,IAAI,2CAAmB,EAAE,CAAC,CAAC;QAC5C,OAAO,CAAC,QAAQ,CAAC,IAAI,+CAAqB,EAAE,CAAC,CAAC;QAE9C,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AA3DD,kDA2DC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Options that can be passed to authentication strategies
|
|
3
|
+
*/
|
|
4
|
+
export interface AuthOptions {
|
|
5
|
+
/**
|
|
6
|
+
* OAuth redirect URL for providers that need it (e.g., Instagram with ngrok)
|
|
7
|
+
*/
|
|
8
|
+
oauthRedirectUrl?: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Interface for authentication strategies
|
|
12
|
+
* Each upload provider (YouTube, Instagram, etc.) implements this interface
|
|
13
|
+
*/
|
|
14
|
+
export interface AuthStrategy {
|
|
15
|
+
/**
|
|
16
|
+
* Returns the tag name this strategy handles (e.g., "youtube", "instagram")
|
|
17
|
+
*/
|
|
18
|
+
getTag(): string;
|
|
19
|
+
/**
|
|
20
|
+
* Executes the authentication flow
|
|
21
|
+
* @param uploadName The name of the upload configuration to authenticate
|
|
22
|
+
* @param projectPath The absolute path to the project directory
|
|
23
|
+
* @param options Optional configuration options
|
|
24
|
+
*/
|
|
25
|
+
execute(uploadName: string, projectPath: string, options?: AuthOptions): Promise<void>;
|
|
26
|
+
/**
|
|
27
|
+
* Optional: Returns help/setup instructions for this provider
|
|
28
|
+
*/
|
|
29
|
+
getSetupInstructions?(): string;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=auth-strategy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-strategy.d.ts","sourceRoot":"","sources":["../../src/cli/auth-strategy.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;OAEG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B;;OAEG;IACH,MAAM,IAAI,MAAM,CAAC;IAEjB;;;;;OAKG;IACH,OAAO,CACL,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,WAAW,GACpB,OAAO,CAAC,IAAI,CAAC,CAAC;IAEjB;;OAEG;IACH,oBAAoB,CAAC,IAAI,MAAM,CAAC;CACjC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth-strategy.js","sourceRoot":"","sources":["../../src/cli/auth-strategy.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
/**
|
|
3
|
+
* Registers the generic auth command that works with any upload provider
|
|
4
|
+
*/
|
|
5
|
+
export declare function registerAuthCommand(program: Command, handleError: (error: any, operation: string) => void): void;
|
|
6
|
+
//# sourceMappingURL=auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/auth.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,GACnD,IAAI,CA0GN"}
|