curatedreels-deploy 1.0.1
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/README.md +176 -0
- package/dist/clients/deno.d.ts +60 -0
- package/dist/clients/deno.d.ts.map +1 -0
- package/dist/clients/deno.js +173 -0
- package/dist/clients/deno.js.map +1 -0
- package/dist/clients/vercel.d.ts +82 -0
- package/dist/clients/vercel.d.ts.map +1 -0
- package/dist/clients/vercel.js +363 -0
- package/dist/clients/vercel.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +165 -0
- package/dist/index.js.map +1 -0
- package/dist/orchestrator.d.ts +44 -0
- package/dist/orchestrator.d.ts.map +1 -0
- package/dist/orchestrator.js +201 -0
- package/dist/orchestrator.js.map +1 -0
- package/dist/services/bundles.d.ts +42 -0
- package/dist/services/bundles.d.ts.map +1 -0
- package/dist/services/bundles.js +213 -0
- package/dist/services/bundles.js.map +1 -0
- package/dist/services/license.d.ts +39 -0
- package/dist/services/license.d.ts.map +1 -0
- package/dist/services/license.js +103 -0
- package/dist/services/license.js.map +1 -0
- package/dist/services/mongodb.d.ts +21 -0
- package/dist/services/mongodb.d.ts.map +1 -0
- package/dist/services/mongodb.js +161 -0
- package/dist/services/mongodb.js.map +1 -0
- package/dist/utils/credentials.d.ts +26 -0
- package/dist/utils/credentials.d.ts.map +1 -0
- package/dist/utils/credentials.js +176 -0
- package/dist/utils/credentials.js.map +1 -0
- package/package.json +56 -0
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Deployment Orchestrator
|
|
3
|
+
*
|
|
4
|
+
* Coordinates deployment to all customer infrastructure:
|
|
5
|
+
* - Vercel (Frontend + CMS)
|
|
6
|
+
* - Deno Deploy (Bot)
|
|
7
|
+
* - MongoDB Atlas (Database)
|
|
8
|
+
*/
|
|
9
|
+
import ora from 'ora';
|
|
10
|
+
import chalk from 'chalk';
|
|
11
|
+
import { VercelClient } from './clients/vercel.js';
|
|
12
|
+
import { DenoClient } from './clients/deno.js';
|
|
13
|
+
import { setupMongoDB } from './services/mongodb.js';
|
|
14
|
+
import { registerDeployment } from './services/license.js';
|
|
15
|
+
import { getBundlesDir } from './services/bundles.js';
|
|
16
|
+
export class DeploymentOrchestrator {
|
|
17
|
+
credentials;
|
|
18
|
+
licenseKey;
|
|
19
|
+
vercel;
|
|
20
|
+
deno;
|
|
21
|
+
frontendUrl = '';
|
|
22
|
+
cmsUrl = '';
|
|
23
|
+
botUrl = '';
|
|
24
|
+
constructor(credentials, licenseKey) {
|
|
25
|
+
this.credentials = credentials;
|
|
26
|
+
this.licenseKey = licenseKey;
|
|
27
|
+
this.vercel = new VercelClient(credentials.vercelToken, credentials.vercelTeamId);
|
|
28
|
+
this.deno = new DenoClient(credentials.denoToken, credentials.denoOrg);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Main deployment flow
|
|
32
|
+
*/
|
|
33
|
+
async deploy() {
|
|
34
|
+
const startTime = Date.now();
|
|
35
|
+
try {
|
|
36
|
+
// Step 1: Setup MongoDB
|
|
37
|
+
await this.deployMongoDB();
|
|
38
|
+
// Step 2: Deploy CMS (needs to be first so frontend can reference its URL)
|
|
39
|
+
await this.deployCMS();
|
|
40
|
+
// Step 3: Deploy Frontend
|
|
41
|
+
await this.deployFrontend();
|
|
42
|
+
// Step 4: Deploy Bot
|
|
43
|
+
await this.deployBot();
|
|
44
|
+
// Step 5: Register deployment with license server
|
|
45
|
+
await this.registerDeployment();
|
|
46
|
+
// Success metrics
|
|
47
|
+
const duration = Math.round((Date.now() - startTime) / 1000);
|
|
48
|
+
console.log(chalk.gray(`\n⏱️ Total deployment time: ${duration}s\n`));
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
console.error(chalk.red('\n❌ Deployment failed\n'));
|
|
52
|
+
throw error;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Deploy and configure MongoDB
|
|
57
|
+
*/
|
|
58
|
+
async deployMongoDB() {
|
|
59
|
+
const spinner = ora('Setting up MongoDB...').start();
|
|
60
|
+
try {
|
|
61
|
+
await setupMongoDB(this.credentials.mongodbUri);
|
|
62
|
+
spinner.succeed('MongoDB configured');
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
spinner.fail('MongoDB setup failed');
|
|
66
|
+
throw new Error(`MongoDB: ${error instanceof Error ? error.message : String(error)}`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Deploy CMS to Vercel
|
|
71
|
+
*/
|
|
72
|
+
async deployCMS() {
|
|
73
|
+
const spinner = ora('Deploying CMS to Vercel...').start();
|
|
74
|
+
try {
|
|
75
|
+
const projectName = `${this.credentials.projectName}-cms`;
|
|
76
|
+
const bundlePath = `${getBundlesDir()}/cms`;
|
|
77
|
+
// Generate a random secret for Payload CMS
|
|
78
|
+
const payloadSecret = Array.from(crypto.getRandomValues(new Uint8Array(32)))
|
|
79
|
+
.map(b => b.toString(16).padStart(2, '0')).join('');
|
|
80
|
+
const envVars = {
|
|
81
|
+
MONGODB_URI: this.credentials.mongodbUri,
|
|
82
|
+
PAYLOAD_SECRET: payloadSecret,
|
|
83
|
+
TELEGRAM_BOT_TOKEN: this.credentials.telegramBotToken,
|
|
84
|
+
...(this.credentials.telegramGroupId && {
|
|
85
|
+
TELEGRAM_GROUP: this.credentials.telegramGroupId
|
|
86
|
+
}),
|
|
87
|
+
...(this.credentials.cloudinaryCloudName && {
|
|
88
|
+
CLOUDINARY_CLOUD_NAME: this.credentials.cloudinaryCloudName,
|
|
89
|
+
CLOUDINARY_API_KEY: this.credentials.cloudinaryApiKey,
|
|
90
|
+
CLOUDINARY_API_SECRET: this.credentials.cloudinaryApiSecret,
|
|
91
|
+
}),
|
|
92
|
+
...(this.credentials.youtubeApiKey && {
|
|
93
|
+
YOUTUBE_API_KEY: this.credentials.youtubeApiKey
|
|
94
|
+
}),
|
|
95
|
+
NODE_ENV: 'production',
|
|
96
|
+
};
|
|
97
|
+
this.cmsUrl = await this.vercel.deploy({
|
|
98
|
+
projectName,
|
|
99
|
+
bundlePath,
|
|
100
|
+
envVars,
|
|
101
|
+
framework: 'nextjs'
|
|
102
|
+
});
|
|
103
|
+
spinner.succeed(`CMS deployed: ${chalk.cyan(this.cmsUrl)}`);
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
spinner.fail('CMS deployment failed');
|
|
107
|
+
throw new Error(`Vercel CMS: ${error instanceof Error ? error.message : String(error)}`);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Deploy Frontend to Vercel
|
|
112
|
+
*/
|
|
113
|
+
async deployFrontend() {
|
|
114
|
+
const spinner = ora('Deploying Frontend to Vercel...').start();
|
|
115
|
+
try {
|
|
116
|
+
const projectName = `${this.credentials.projectName}-frontend`;
|
|
117
|
+
const bundlePath = `${getBundlesDir()}/frontend`;
|
|
118
|
+
const envVars = {
|
|
119
|
+
NEXT_PUBLIC_PAYLOAD_API_URL: `${this.cmsUrl}/api`,
|
|
120
|
+
};
|
|
121
|
+
this.frontendUrl = await this.vercel.deploy({
|
|
122
|
+
projectName,
|
|
123
|
+
bundlePath,
|
|
124
|
+
envVars,
|
|
125
|
+
framework: 'nextjs'
|
|
126
|
+
});
|
|
127
|
+
// Update CMS with frontend URL
|
|
128
|
+
spinner.text = 'Linking frontend to CMS...';
|
|
129
|
+
await this.vercel.updateEnvironmentVariables(`${this.credentials.projectName}-cms`, { NEXT_PUBLIC_FRONTEND_URL: this.frontendUrl });
|
|
130
|
+
// Add custom domain if specified
|
|
131
|
+
if (this.credentials.customDomain) {
|
|
132
|
+
spinner.text = 'Adding custom domain...';
|
|
133
|
+
await this.vercel.addDomain(projectName, this.credentials.customDomain);
|
|
134
|
+
this.frontendUrl = `https://${this.credentials.customDomain}`;
|
|
135
|
+
}
|
|
136
|
+
spinner.succeed(`Frontend deployed: ${chalk.cyan(this.frontendUrl)}`);
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
spinner.fail('Frontend deployment failed');
|
|
140
|
+
throw new Error(`Vercel Frontend: ${error instanceof Error ? error.message : String(error)}`);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Deploy Bot to Deno Deploy
|
|
145
|
+
*/
|
|
146
|
+
async deployBot() {
|
|
147
|
+
const spinner = ora('Deploying Bot to Deno Deploy...').start();
|
|
148
|
+
try {
|
|
149
|
+
const projectName = `${this.credentials.projectName}-bot`;
|
|
150
|
+
const botDir = `${getBundlesDir()}/bot`;
|
|
151
|
+
const envVars = {
|
|
152
|
+
TELEGRAM_BOT_TOKEN: this.credentials.telegramBotToken,
|
|
153
|
+
MONGODB_URI: this.credentials.mongodbUri,
|
|
154
|
+
PAYLOAD_CMS_URL: this.cmsUrl,
|
|
155
|
+
FRONTEND_URL: this.frontendUrl,
|
|
156
|
+
WEBHOOK_URL: `https://${projectName}.deno.dev/webhook`,
|
|
157
|
+
...(this.credentials.telegramGroupId && {
|
|
158
|
+
TELEGRAM_GROUP: this.credentials.telegramGroupId
|
|
159
|
+
}),
|
|
160
|
+
...(this.credentials.cloudinaryCloudName && {
|
|
161
|
+
CLOUDINARY_CLOUD_NAME: this.credentials.cloudinaryCloudName,
|
|
162
|
+
CLOUDINARY_API_KEY: this.credentials.cloudinaryApiKey,
|
|
163
|
+
CLOUDINARY_API_SECRET: this.credentials.cloudinaryApiSecret,
|
|
164
|
+
}),
|
|
165
|
+
...(this.credentials.youtubeApiKey && {
|
|
166
|
+
YOUTUBE_API_KEY: this.credentials.youtubeApiKey
|
|
167
|
+
}),
|
|
168
|
+
};
|
|
169
|
+
this.botUrl = await this.deno.deploy({
|
|
170
|
+
projectName,
|
|
171
|
+
entrypoint: botDir,
|
|
172
|
+
envVars
|
|
173
|
+
});
|
|
174
|
+
spinner.succeed(`Bot deployed: ${chalk.cyan(this.botUrl)}`);
|
|
175
|
+
}
|
|
176
|
+
catch (error) {
|
|
177
|
+
spinner.fail('Bot deployment failed');
|
|
178
|
+
throw new Error(`Deno Deploy: ${error instanceof Error ? error.message : String(error)}`);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Register deployment with license server
|
|
183
|
+
*/
|
|
184
|
+
async registerDeployment() {
|
|
185
|
+
const spinner = ora('Registering deployment...').start();
|
|
186
|
+
try {
|
|
187
|
+
await registerDeployment(this.licenseKey, {
|
|
188
|
+
projectName: this.credentials.projectName,
|
|
189
|
+
frontendUrl: this.frontendUrl,
|
|
190
|
+
cmsUrl: this.cmsUrl,
|
|
191
|
+
botUrl: this.botUrl
|
|
192
|
+
});
|
|
193
|
+
spinner.succeed('Deployment registered');
|
|
194
|
+
}
|
|
195
|
+
catch (error) {
|
|
196
|
+
spinner.warn('Failed to register deployment (non-critical)');
|
|
197
|
+
// Don't fail deployment if registration fails
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
//# sourceMappingURL=orchestrator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"orchestrator.js","sourceRoot":"","sources":["../src/orchestrator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bundle Download Service
|
|
3
|
+
*
|
|
4
|
+
* Downloads pre-compiled bundles from CDN (authenticated)
|
|
5
|
+
*/
|
|
6
|
+
export interface BundleManifest {
|
|
7
|
+
version: string;
|
|
8
|
+
releaseDate: string;
|
|
9
|
+
bundles: {
|
|
10
|
+
frontend: string;
|
|
11
|
+
cms: string;
|
|
12
|
+
bot: string;
|
|
13
|
+
schema: string;
|
|
14
|
+
};
|
|
15
|
+
checksums: {
|
|
16
|
+
frontend: string;
|
|
17
|
+
cms: string;
|
|
18
|
+
bot: string;
|
|
19
|
+
schema: string;
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Download deployment bundles from GitHub Releases
|
|
24
|
+
*/
|
|
25
|
+
export declare function downloadBundles(licenseKey: string): Promise<void>;
|
|
26
|
+
/**
|
|
27
|
+
* Mock bundle download for development/testing
|
|
28
|
+
*/
|
|
29
|
+
export declare function mockDownloadBundles(_licenseKey: string): Promise<void>;
|
|
30
|
+
/**
|
|
31
|
+
* Extract bundle archives
|
|
32
|
+
*/
|
|
33
|
+
export declare function extractBundles(): Promise<void>;
|
|
34
|
+
/**
|
|
35
|
+
* Get bundles directory path
|
|
36
|
+
*/
|
|
37
|
+
export declare function getBundlesDir(): string;
|
|
38
|
+
/**
|
|
39
|
+
* Clean up downloaded bundles
|
|
40
|
+
*/
|
|
41
|
+
export declare function cleanupBundles(): Promise<void>;
|
|
42
|
+
//# sourceMappingURL=bundles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bundles.d.ts","sourceRoot":"","sources":["../../src/services/bundles.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAiBH,MAAM,WAAW,cAAc;IAC3B,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,MAAM,CAAA;IACnB,OAAO,EAAE;QACL,QAAQ,EAAE,MAAM,CAAA;QAChB,GAAG,EAAE,MAAM,CAAA;QACX,GAAG,EAAE,MAAM,CAAA;QACX,MAAM,EAAE,MAAM,CAAA;KACjB,CAAA;IACD,SAAS,EAAE;QACP,QAAQ,EAAE,MAAM,CAAA;QAChB,GAAG,EAAE,MAAM,CAAA;QACX,GAAG,EAAE,MAAM,CAAA;QACX,MAAM,EAAE,MAAM,CAAA;KACjB,CAAA;CACJ;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoDvE;AAkDD;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoE5E;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAwBpD;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAOpD"}
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bundle Download Service
|
|
3
|
+
*
|
|
4
|
+
* Downloads pre-compiled bundles from CDN (authenticated)
|
|
5
|
+
*/
|
|
6
|
+
import fetch from 'node-fetch';
|
|
7
|
+
import { createWriteStream } from 'fs';
|
|
8
|
+
import { mkdir } from 'fs/promises';
|
|
9
|
+
import { pipeline } from 'stream/promises';
|
|
10
|
+
import { extract } from 'tar';
|
|
11
|
+
import ora from 'ora';
|
|
12
|
+
import chalk from 'chalk';
|
|
13
|
+
// GitHub Releases configuration
|
|
14
|
+
const GITHUB_OWNER = 'choicexchangedev-cpu';
|
|
15
|
+
const GITHUB_REPO = 'curatedreels-releases';
|
|
16
|
+
const BUNDLES_VERSION = process.env.CURATEKIDS_VERSION || '1.0.6';
|
|
17
|
+
const BUNDLES_DIR = './.curatedreels-bundles';
|
|
18
|
+
const GITHUB_RELEASES_URL = `https://github.com/${GITHUB_OWNER}/${GITHUB_REPO}/releases/download`;
|
|
19
|
+
/**
|
|
20
|
+
* Download deployment bundles from GitHub Releases
|
|
21
|
+
*/
|
|
22
|
+
export async function downloadBundles(licenseKey) {
|
|
23
|
+
const spinner = ora('Downloading deployment bundles...').start();
|
|
24
|
+
try {
|
|
25
|
+
// Create bundles directory
|
|
26
|
+
await mkdir(BUNDLES_DIR, { recursive: true });
|
|
27
|
+
// Get manifest from GitHub Release
|
|
28
|
+
spinner.text = 'Fetching bundle manifest...';
|
|
29
|
+
const manifest = await fetchManifestFromGitHub();
|
|
30
|
+
// Download each bundle from GitHub Release
|
|
31
|
+
const version = `v${manifest.version}`;
|
|
32
|
+
spinner.text = 'Downloading frontend bundle...';
|
|
33
|
+
await downloadFromGitHub(version, 'frontend.tar.gz', `${BUNDLES_DIR}/frontend.tar.gz`);
|
|
34
|
+
spinner.text = 'Extracting frontend bundle...';
|
|
35
|
+
await mkdir(`${BUNDLES_DIR}/frontend`, { recursive: true });
|
|
36
|
+
await extract({
|
|
37
|
+
file: `${BUNDLES_DIR}/frontend.tar.gz`,
|
|
38
|
+
cwd: `${BUNDLES_DIR}/frontend`
|
|
39
|
+
});
|
|
40
|
+
spinner.text = 'Downloading CMS bundle...';
|
|
41
|
+
await downloadFromGitHub(version, 'cms.tar.gz', `${BUNDLES_DIR}/cms.tar.gz`);
|
|
42
|
+
spinner.text = 'Extracting CMS bundle...';
|
|
43
|
+
await mkdir(`${BUNDLES_DIR}/cms`, { recursive: true });
|
|
44
|
+
await extract({
|
|
45
|
+
file: `${BUNDLES_DIR}/cms.tar.gz`,
|
|
46
|
+
cwd: `${BUNDLES_DIR}/cms`
|
|
47
|
+
});
|
|
48
|
+
spinner.text = 'Downloading bot bundle...';
|
|
49
|
+
await downloadFromGitHub(version, 'bot.tar.gz', `${BUNDLES_DIR}/bot.tar.gz`);
|
|
50
|
+
spinner.text = 'Extracting bot bundle...';
|
|
51
|
+
await mkdir(`${BUNDLES_DIR}/bot`, { recursive: true });
|
|
52
|
+
await extract({
|
|
53
|
+
file: `${BUNDLES_DIR}/bot.tar.gz`,
|
|
54
|
+
cwd: `${BUNDLES_DIR}/bot`
|
|
55
|
+
});
|
|
56
|
+
spinner.text = 'Downloading database schema...';
|
|
57
|
+
await downloadFromGitHub(version, 'schema.json', `${BUNDLES_DIR}/schema.json`);
|
|
58
|
+
spinner.succeed('Bundles downloaded and extracted');
|
|
59
|
+
}
|
|
60
|
+
catch (error) {
|
|
61
|
+
spinner.fail('Failed to download bundles');
|
|
62
|
+
throw error;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Fetch manifest from GitHub Release
|
|
67
|
+
*/
|
|
68
|
+
async function fetchManifestFromGitHub() {
|
|
69
|
+
const url = `${GITHUB_RELEASES_URL}/v${BUNDLES_VERSION}/manifest.json`;
|
|
70
|
+
const response = await fetch(url, {
|
|
71
|
+
headers: {
|
|
72
|
+
'User-Agent': 'curatedreels-deploy/1.0.0'
|
|
73
|
+
},
|
|
74
|
+
redirect: 'follow'
|
|
75
|
+
});
|
|
76
|
+
if (!response.ok) {
|
|
77
|
+
if (response.status === 404) {
|
|
78
|
+
throw new Error(`Release v${BUNDLES_VERSION} not found. Check https://github.com/${GITHUB_OWNER}/${GITHUB_REPO}/releases`);
|
|
79
|
+
}
|
|
80
|
+
throw new Error(`Failed to fetch manifest: ${response.statusText}`);
|
|
81
|
+
}
|
|
82
|
+
return await response.json();
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Download a file from GitHub Release
|
|
86
|
+
*/
|
|
87
|
+
async function downloadFromGitHub(version, filename, destPath) {
|
|
88
|
+
const url = `${GITHUB_RELEASES_URL}/${version}/${filename}`;
|
|
89
|
+
const response = await fetch(url, {
|
|
90
|
+
headers: {
|
|
91
|
+
'User-Agent': 'curatedreels-deploy/1.0.0'
|
|
92
|
+
},
|
|
93
|
+
redirect: 'follow'
|
|
94
|
+
});
|
|
95
|
+
if (!response.ok) {
|
|
96
|
+
throw new Error(`Failed to download ${filename}: ${response.statusText}`);
|
|
97
|
+
}
|
|
98
|
+
if (!response.body) {
|
|
99
|
+
throw new Error('No response body');
|
|
100
|
+
}
|
|
101
|
+
const fileStream = createWriteStream(destPath);
|
|
102
|
+
await pipeline(response.body, fileStream);
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Mock bundle download for development/testing
|
|
106
|
+
*/
|
|
107
|
+
export async function mockDownloadBundles(_licenseKey) {
|
|
108
|
+
const spinner = ora('Downloading deployment bundles...').start();
|
|
109
|
+
const fs = await import('fs/promises');
|
|
110
|
+
try {
|
|
111
|
+
console.log(chalk.yellow('\n⚠️ Using mock bundle download (development mode)'));
|
|
112
|
+
// Create bundles directory
|
|
113
|
+
await mkdir(BUNDLES_DIR, { recursive: true });
|
|
114
|
+
await mkdir(`${BUNDLES_DIR}/cms`, { recursive: true });
|
|
115
|
+
await mkdir(`${BUNDLES_DIR}/frontend`, { recursive: true });
|
|
116
|
+
// Create mock CMS bundle directory with minimal Next.js structure
|
|
117
|
+
spinner.text = 'Creating mock CMS bundle...';
|
|
118
|
+
await fs.writeFile(`${BUNDLES_DIR}/cms/package.json`, JSON.stringify({
|
|
119
|
+
name: 'mock-cms',
|
|
120
|
+
version: '1.0.0',
|
|
121
|
+
scripts: { build: 'echo mock build', start: 'echo mock start' }
|
|
122
|
+
}, null, 2));
|
|
123
|
+
await fs.writeFile(`${BUNDLES_DIR}/cms/next.config.mjs`, 'export default {}');
|
|
124
|
+
// Create mock frontend bundle directory
|
|
125
|
+
spinner.text = 'Creating mock frontend bundle...';
|
|
126
|
+
await fs.writeFile(`${BUNDLES_DIR}/frontend/package.json`, JSON.stringify({
|
|
127
|
+
name: 'mock-frontend',
|
|
128
|
+
version: '1.0.0',
|
|
129
|
+
scripts: { build: 'echo mock build', start: 'echo mock start' }
|
|
130
|
+
}, null, 2));
|
|
131
|
+
await fs.writeFile(`${BUNDLES_DIR}/frontend/next.config.mjs`, 'export default {}');
|
|
132
|
+
// Create mock bot bundle
|
|
133
|
+
spinner.text = 'Creating mock bot bundle...';
|
|
134
|
+
await fs.writeFile(`${BUNDLES_DIR}/bot.js`, '// Mock bot bundle\nexport default {}');
|
|
135
|
+
// Create mock database schema
|
|
136
|
+
spinner.text = 'Creating mock database schema...';
|
|
137
|
+
const mockSchema = {
|
|
138
|
+
version: '1.0.0',
|
|
139
|
+
collections: [
|
|
140
|
+
{
|
|
141
|
+
name: 'videos',
|
|
142
|
+
indexes: [
|
|
143
|
+
{ key: { slug: 1 }, unique: true, name: 'slug_1' },
|
|
144
|
+
{ key: { category: 1 }, name: 'category_1' },
|
|
145
|
+
{ key: { ageRange: 1 }, name: 'ageRange_1' }
|
|
146
|
+
]
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
name: 'users',
|
|
150
|
+
indexes: [
|
|
151
|
+
{ key: { email: 1 }, unique: true, name: 'email_1' }
|
|
152
|
+
]
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
name: 'organizations',
|
|
156
|
+
indexes: [
|
|
157
|
+
{ key: { slug: 1 }, unique: true, name: 'slug_1' }
|
|
158
|
+
]
|
|
159
|
+
}
|
|
160
|
+
]
|
|
161
|
+
};
|
|
162
|
+
await fs.writeFile(`${BUNDLES_DIR}/schema.json`, JSON.stringify(mockSchema, null, 2));
|
|
163
|
+
spinner.succeed('Mock bundles created (development mode)');
|
|
164
|
+
}
|
|
165
|
+
catch (error) {
|
|
166
|
+
spinner.fail('Failed to create mock bundles');
|
|
167
|
+
throw error;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Extract bundle archives
|
|
172
|
+
*/
|
|
173
|
+
export async function extractBundles() {
|
|
174
|
+
const spinner = ora('Extracting bundles...').start();
|
|
175
|
+
try {
|
|
176
|
+
await mkdir(`${BUNDLES_DIR}/frontend`, { recursive: true });
|
|
177
|
+
await mkdir(`${BUNDLES_DIR}/cms`, { recursive: true });
|
|
178
|
+
// Extract frontend
|
|
179
|
+
await extract({
|
|
180
|
+
file: `${BUNDLES_DIR}/frontend.tar.gz`,
|
|
181
|
+
cwd: `${BUNDLES_DIR}/frontend`
|
|
182
|
+
});
|
|
183
|
+
// Extract CMS
|
|
184
|
+
await extract({
|
|
185
|
+
file: `${BUNDLES_DIR}/cms.tar.gz`,
|
|
186
|
+
cwd: `${BUNDLES_DIR}/cms`
|
|
187
|
+
});
|
|
188
|
+
spinner.succeed('Bundles extracted');
|
|
189
|
+
}
|
|
190
|
+
catch (error) {
|
|
191
|
+
spinner.fail('Failed to extract bundles');
|
|
192
|
+
throw error;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Get bundles directory path
|
|
197
|
+
*/
|
|
198
|
+
export function getBundlesDir() {
|
|
199
|
+
return BUNDLES_DIR;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Clean up downloaded bundles
|
|
203
|
+
*/
|
|
204
|
+
export async function cleanupBundles() {
|
|
205
|
+
const fs = await import('fs/promises');
|
|
206
|
+
try {
|
|
207
|
+
await fs.rm(BUNDLES_DIR, { recursive: true, force: true });
|
|
208
|
+
}
|
|
209
|
+
catch (error) {
|
|
210
|
+
// Ignore errors
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
//# sourceMappingURL=bundles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bundles.js","sourceRoot":"","sources":["../../src/services/bundles.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* License Verification Service
|
|
3
|
+
*
|
|
4
|
+
* Verifies customer license keys with Lambda Function URLs
|
|
5
|
+
*/
|
|
6
|
+
export interface License {
|
|
7
|
+
key: string;
|
|
8
|
+
customerId: string;
|
|
9
|
+
customerEmail: string;
|
|
10
|
+
tier: 'starter' | 'pro' | 'enterprise';
|
|
11
|
+
status: 'active' | 'expired' | 'suspended';
|
|
12
|
+
expiresAt: string;
|
|
13
|
+
maxDeployments: number;
|
|
14
|
+
currentDeployments: number;
|
|
15
|
+
features: string[];
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Verify license key with Lambda
|
|
19
|
+
*/
|
|
20
|
+
export declare function verifyLicense(licenseKey: string): Promise<boolean>;
|
|
21
|
+
/**
|
|
22
|
+
* Get license details
|
|
23
|
+
*/
|
|
24
|
+
export declare function getLicenseDetails(licenseKey: string): Promise<License>;
|
|
25
|
+
/**
|
|
26
|
+
* Register a new deployment
|
|
27
|
+
*/
|
|
28
|
+
export declare function registerDeployment(licenseKey: string, deploymentInfo: {
|
|
29
|
+
projectName: string;
|
|
30
|
+
frontendUrl: string;
|
|
31
|
+
cmsUrl: string;
|
|
32
|
+
botUrl: string;
|
|
33
|
+
}): Promise<void>;
|
|
34
|
+
/**
|
|
35
|
+
* For development/testing: Mock license verification
|
|
36
|
+
* Remove this in production
|
|
37
|
+
*/
|
|
38
|
+
export declare function mockVerifyLicense(licenseKey: string): Promise<boolean>;
|
|
39
|
+
//# sourceMappingURL=license.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"license.d.ts","sourceRoot":"","sources":["../../src/services/license.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,MAAM,WAAW,OAAO;IACpB,GAAG,EAAE,MAAM,CAAA;IACX,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,IAAI,EAAE,SAAS,GAAG,KAAK,GAAG,YAAY,CAAA;IACtC,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,WAAW,CAAA;IAC1C,SAAS,EAAE,MAAM,CAAA;IACjB,cAAc,EAAE,MAAM,CAAA;IACtB,kBAAkB,EAAE,MAAM,CAAA;IAC1B,QAAQ,EAAE,MAAM,EAAE,CAAA;CACrB;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CA+BxE;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CA+B5E;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACpC,UAAU,EAAE,MAAM,EAClB,cAAc,EAAE;IACZ,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;CACjB,GACF,OAAO,CAAC,IAAI,CAAC,CAef;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQ5E"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* License Verification Service
|
|
3
|
+
*
|
|
4
|
+
* Verifies customer license keys with Lambda Function URLs
|
|
5
|
+
*/
|
|
6
|
+
import fetch from 'node-fetch';
|
|
7
|
+
// Lambda Function URLs (us-east-1 region)
|
|
8
|
+
const VERIFY_URL = process.env.VERIFY_LICENSE_URL || 'https://rltcg4cuhqxdap4ha2nvez5gka0dvivf.lambda-url.us-east-1.on.aws';
|
|
9
|
+
const REGISTER_URL = process.env.REGISTER_DEPLOYMENT_URL || 'https://qpc4fnenqobl2s2zw44c4t7mtm0uwttj.lambda-url.us-east-1.on.aws';
|
|
10
|
+
/**
|
|
11
|
+
* Verify license key with Lambda
|
|
12
|
+
*/
|
|
13
|
+
export async function verifyLicense(licenseKey) {
|
|
14
|
+
try {
|
|
15
|
+
const response = await fetch(VERIFY_URL, {
|
|
16
|
+
method: 'POST',
|
|
17
|
+
headers: {
|
|
18
|
+
'Content-Type': 'application/json',
|
|
19
|
+
'User-Agent': 'curatedreels-deploy/1.0.0'
|
|
20
|
+
},
|
|
21
|
+
body: JSON.stringify({ key: licenseKey })
|
|
22
|
+
});
|
|
23
|
+
if (!response.ok) {
|
|
24
|
+
if (response.status === 401) {
|
|
25
|
+
return false; // Invalid license
|
|
26
|
+
}
|
|
27
|
+
throw new Error(`License verification failed: ${response.statusText}`);
|
|
28
|
+
}
|
|
29
|
+
const result = await response.json();
|
|
30
|
+
if (!result.valid) {
|
|
31
|
+
throw new Error(result.error || 'Invalid license');
|
|
32
|
+
}
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
if (error instanceof Error) {
|
|
37
|
+
throw error;
|
|
38
|
+
}
|
|
39
|
+
throw new Error('Failed to verify license');
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Get license details
|
|
44
|
+
*/
|
|
45
|
+
export async function getLicenseDetails(licenseKey) {
|
|
46
|
+
const response = await fetch(VERIFY_URL, {
|
|
47
|
+
method: 'POST',
|
|
48
|
+
headers: {
|
|
49
|
+
'Content-Type': 'application/json',
|
|
50
|
+
'User-Agent': 'curatedreels-deploy/1.0.0'
|
|
51
|
+
},
|
|
52
|
+
body: JSON.stringify({ key: licenseKey })
|
|
53
|
+
});
|
|
54
|
+
if (!response.ok) {
|
|
55
|
+
throw new Error(`Failed to get license details: ${response.statusText}`);
|
|
56
|
+
}
|
|
57
|
+
const result = await response.json();
|
|
58
|
+
if (!result.valid) {
|
|
59
|
+
throw new Error(result.error || 'Invalid license');
|
|
60
|
+
}
|
|
61
|
+
return {
|
|
62
|
+
key: licenseKey,
|
|
63
|
+
customerId: result.customerId,
|
|
64
|
+
customerEmail: result.email,
|
|
65
|
+
tier: result.tier,
|
|
66
|
+
status: 'active',
|
|
67
|
+
expiresAt: result.expiresAt,
|
|
68
|
+
maxDeployments: result.maxDeployments,
|
|
69
|
+
currentDeployments: result.currentDeployments,
|
|
70
|
+
features: []
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Register a new deployment
|
|
75
|
+
*/
|
|
76
|
+
export async function registerDeployment(licenseKey, deploymentInfo) {
|
|
77
|
+
const response = await fetch(REGISTER_URL, {
|
|
78
|
+
method: 'POST',
|
|
79
|
+
headers: {
|
|
80
|
+
'Content-Type': 'application/json',
|
|
81
|
+
'Authorization': `License ${licenseKey}`,
|
|
82
|
+
'User-Agent': 'curatedreels-deploy/1.0.0'
|
|
83
|
+
},
|
|
84
|
+
body: JSON.stringify(deploymentInfo)
|
|
85
|
+
});
|
|
86
|
+
if (!response.ok) {
|
|
87
|
+
const error = await response.text();
|
|
88
|
+
throw new Error(`Failed to register deployment: ${error}`);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* For development/testing: Mock license verification
|
|
93
|
+
* Remove this in production
|
|
94
|
+
*/
|
|
95
|
+
export async function mockVerifyLicense(licenseKey) {
|
|
96
|
+
// Development bypass for testing
|
|
97
|
+
if (process.env.NODE_ENV === 'development') {
|
|
98
|
+
console.warn('⚠️ Using mock license verification (development mode)');
|
|
99
|
+
return licenseKey.startsWith('test_') || licenseKey.startsWith('dev_') || licenseKey.startsWith('ck_');
|
|
100
|
+
}
|
|
101
|
+
return verifyLicense(licenseKey);
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=license.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"license.js","sourceRoot":"","sources":["../../src/services/license.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MongoDB Setup Service
|
|
3
|
+
*
|
|
4
|
+
* Configures MongoDB Atlas database for CuratedReels
|
|
5
|
+
* - Creates collections
|
|
6
|
+
* - Sets up indexes
|
|
7
|
+
* - Seeds initial data
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Setup MongoDB database
|
|
11
|
+
*/
|
|
12
|
+
export declare function setupMongoDB(uri: string): Promise<void>;
|
|
13
|
+
/**
|
|
14
|
+
* Test MongoDB connection
|
|
15
|
+
*/
|
|
16
|
+
export declare function testConnection(uri: string): Promise<boolean>;
|
|
17
|
+
/**
|
|
18
|
+
* Get database statistics
|
|
19
|
+
*/
|
|
20
|
+
export declare function getDatabaseStats(uri: string): Promise<any>;
|
|
21
|
+
//# sourceMappingURL=mongodb.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mongodb.d.ts","sourceRoot":"","sources":["../../src/services/mongodb.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAsBH;;GAEG;AACH,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyB7D;AA4FD;;GAEG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAYlE;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CA+BhE"}
|