@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.
Files changed (111) hide show
  1. package/Makefile +20 -0
  2. package/dist/asset-manager.d.ts +1 -0
  3. package/dist/asset-manager.d.ts.map +1 -1
  4. package/dist/asset-manager.js +3 -0
  5. package/dist/asset-manager.js.map +1 -1
  6. package/dist/cli/ai-generation-strategy-factory.d.ts +23 -0
  7. package/dist/cli/ai-generation-strategy-factory.d.ts.map +1 -0
  8. package/dist/cli/ai-generation-strategy-factory.js +44 -0
  9. package/dist/cli/ai-generation-strategy-factory.js.map +1 -0
  10. package/dist/cli/ai-generation-strategy.d.ts +33 -0
  11. package/dist/cli/ai-generation-strategy.d.ts.map +1 -0
  12. package/dist/cli/ai-generation-strategy.js +3 -0
  13. package/dist/cli/ai-generation-strategy.js.map +1 -0
  14. package/dist/cli/ai-music-api-ai/ai-music-api-ai-generation-strategy.d.ts +38 -0
  15. package/dist/cli/ai-music-api-ai/ai-music-api-ai-generation-strategy.d.ts.map +1 -0
  16. package/dist/cli/ai-music-api-ai/ai-music-api-ai-generation-strategy.js +174 -0
  17. package/dist/cli/ai-music-api-ai/ai-music-api-ai-generation-strategy.js.map +1 -0
  18. package/dist/cli/auth-strategy-factory.d.ts +31 -0
  19. package/dist/cli/auth-strategy-factory.d.ts.map +1 -0
  20. package/dist/cli/auth-strategy-factory.js +61 -0
  21. package/dist/cli/auth-strategy-factory.js.map +1 -0
  22. package/dist/cli/auth-strategy.d.ts +31 -0
  23. package/dist/cli/auth-strategy.d.ts.map +1 -0
  24. package/dist/cli/auth-strategy.js +3 -0
  25. package/dist/cli/auth-strategy.js.map +1 -0
  26. package/dist/cli/commands/auth.d.ts +6 -0
  27. package/dist/cli/commands/auth.d.ts.map +1 -0
  28. package/dist/cli/commands/auth.js +103 -0
  29. package/dist/cli/commands/auth.js.map +1 -0
  30. package/dist/cli/commands/generate.d.ts.map +1 -1
  31. package/dist/cli/commands/generate.js +69 -2
  32. package/dist/cli/commands/generate.js.map +1 -1
  33. package/dist/cli/instagram/instagram-auth-strategy.d.ts +31 -0
  34. package/dist/cli/instagram/instagram-auth-strategy.d.ts.map +1 -0
  35. package/dist/cli/instagram/instagram-auth-strategy.js +505 -0
  36. package/dist/cli/instagram/instagram-auth-strategy.js.map +1 -0
  37. package/dist/cli/instagram/instagram-upload-strategy.d.ts +45 -0
  38. package/dist/cli/instagram/instagram-upload-strategy.d.ts.map +1 -0
  39. package/dist/cli/instagram/instagram-upload-strategy.js +303 -0
  40. package/dist/cli/instagram/instagram-upload-strategy.js.map +1 -0
  41. package/dist/cli/s3/s3-upload-strategy.d.ts.map +1 -1
  42. package/dist/cli/s3/s3-upload-strategy.js +7 -3
  43. package/dist/cli/s3/s3-upload-strategy.js.map +1 -1
  44. package/dist/cli/upload-strategy-factory.d.ts +1 -1
  45. package/dist/cli/upload-strategy-factory.d.ts.map +1 -1
  46. package/dist/cli/upload-strategy-factory.js +5 -5
  47. package/dist/cli/upload-strategy-factory.js.map +1 -1
  48. package/dist/cli/youtube/youtube-auth-strategy.d.ts +11 -0
  49. package/dist/cli/youtube/youtube-auth-strategy.d.ts.map +1 -0
  50. package/dist/cli/youtube/youtube-auth-strategy.js +320 -0
  51. package/dist/cli/youtube/youtube-auth-strategy.js.map +1 -0
  52. package/dist/cli/youtube/youtube-upload-strategy.d.ts +10 -3
  53. package/dist/cli/youtube/youtube-upload-strategy.d.ts.map +1 -1
  54. package/dist/cli/youtube/youtube-upload-strategy.js +96 -16
  55. package/dist/cli/youtube/youtube-upload-strategy.js.map +1 -1
  56. package/dist/cli.js +2 -3
  57. package/dist/cli.js.map +1 -1
  58. package/dist/html-project-parser.d.ts +40 -1
  59. package/dist/html-project-parser.d.ts.map +1 -1
  60. package/dist/html-project-parser.js +343 -9
  61. package/dist/html-project-parser.js.map +1 -1
  62. package/dist/lib/file.d.ts +2 -0
  63. package/dist/lib/file.d.ts.map +1 -0
  64. package/dist/lib/file.js +13 -0
  65. package/dist/lib/file.js.map +1 -0
  66. package/dist/lib/net.d.ts +19 -0
  67. package/dist/lib/net.d.ts.map +1 -0
  68. package/dist/lib/net.js +101 -0
  69. package/dist/lib/net.js.map +1 -0
  70. package/dist/project.d.ts +5 -2
  71. package/dist/project.d.ts.map +1 -1
  72. package/dist/project.js +9 -1
  73. package/dist/project.js.map +1 -1
  74. package/dist/type.d.ts +17 -0
  75. package/dist/type.d.ts.map +1 -1
  76. package/package.json +2 -1
  77. package/src/asset-manager.ts +4 -0
  78. package/src/cli/ai-generation-strategy-factory.ts +48 -0
  79. package/src/cli/ai-generation-strategy.ts +35 -0
  80. package/src/cli/ai-music-api-ai/ai-music-api-ai-generation-strategy.ts +266 -0
  81. package/src/cli/auth-strategy-factory.ts +67 -0
  82. package/src/cli/auth-strategy.ts +37 -0
  83. package/src/cli/commands/auth.ts +120 -0
  84. package/src/cli/commands/generate.ts +55 -2
  85. package/src/cli/instagram/instagram-auth-strategy.ts +569 -0
  86. package/src/cli/instagram/instagram-upload-strategy.ts +398 -0
  87. package/src/cli/s3/s3-upload-strategy.ts +7 -3
  88. package/src/cli/upload-strategy-factory.ts +6 -9
  89. package/src/cli/youtube/youtube-auth-strategy.ts +323 -0
  90. package/src/cli/youtube/youtube-upload-strategy.ts +147 -16
  91. package/src/cli.ts +2 -4
  92. package/src/html-project-parser.ts +429 -8
  93. package/src/lib/file.ts +11 -0
  94. package/src/lib/net.ts +120 -0
  95. package/src/project.ts +10 -0
  96. package/src/type.ts +19 -0
  97. package/dist/cli/youtube/auth-commands.d.ts +0 -3
  98. package/dist/cli/youtube/auth-commands.d.ts.map +0 -1
  99. package/dist/cli/youtube/auth-commands.js +0 -273
  100. package/dist/cli/youtube/auth-commands.js.map +0 -1
  101. package/dist/cli/youtube/cli.d.ts +0 -7
  102. package/dist/cli/youtube/cli.d.ts.map +0 -1
  103. package/dist/cli/youtube/cli.js +0 -13
  104. package/dist/cli/youtube/cli.js.map +0 -1
  105. package/dist/cli/youtube/upload-handler.d.ts +0 -12
  106. package/dist/cli/youtube/upload-handler.d.ts.map +0 -1
  107. package/dist/cli/youtube/upload-handler.js +0 -66
  108. package/dist/cli/youtube/upload-handler.js.map +0 -1
  109. package/src/cli/youtube/auth-commands.ts +0 -312
  110. package/src/cli/youtube/cli.ts +0 -11
  111. 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
@@ -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"}
@@ -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;AAnDD,oCAmDC"}
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,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=ai-generation-strategy.js.map
@@ -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":"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"}
@@ -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,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=auth-strategy.js.map
@@ -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"}