HerzaJ commited on
Commit
34b2a3a
·
verified ·
1 Parent(s): f8ae812

Update plugins/sora2.js

Browse files
Files changed (1) hide show
  1. plugins/sora2.js +74 -92
plugins/sora2.js CHANGED
@@ -1,14 +1,52 @@
1
  const axios = require('axios');
 
2
  const dns = require('dns').promises;
3
 
4
- const PROXY_URL = 'https://proxy-sigma-roan.vercel.app/api/proxy';
5
-
6
  dns.setServers([
7
  '1.1.1.1',
8
  '8.8.8.8',
9
  '8.8.4.4'
10
  ]);
11
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
12
  function generateUniqueId() {
13
  return Array.from({ length: 32 }, () =>
14
  Math.floor(Math.random() * 16).toString(16)
@@ -33,9 +71,7 @@ function generateRandomIP() {
33
  return `${Math.floor(Math.random() * 255)}.${Math.floor(Math.random() * 255)}.${Math.floor(Math.random() * 255)}.${Math.floor(Math.random() * 255)}`;
34
  }
35
 
36
- async function proxyRequest(url, options = {}) {
37
- const targetPath = url.startsWith('http') ? url : url;
38
-
39
  const fakeIP = generateRandomIP();
40
 
41
  const headers = {
@@ -49,42 +85,30 @@ async function proxyRequest(url, options = {}) {
49
 
50
  await randomDelay(500, 1500);
51
 
52
- const axiosConfig = {
53
- method: options.method || 'GET',
54
- headers: headers,
55
- timeout: 30000,
56
- params: {
57
- url: targetPath
58
- },
59
- validateStatus: function (status) {
60
- return status >= 200 && status < 600;
61
- }
62
- };
63
-
64
- if (options.data && (options.method === 'POST' || options.method === 'PUT')) {
65
- axiosConfig.data = options.data;
66
- }
67
-
68
  let lastError = null;
69
 
70
  for (let attempt = 1; attempt <= 3; attempt++) {
71
  try {
72
- axiosConfig.url = PROXY_URL;
73
- console.log(`Attempt ${attempt}: ${PROXY_URL}?url=${targetPath}`);
74
 
75
- const response = await axios(axiosConfig);
 
 
 
 
 
 
 
 
76
 
77
- console.log(`Attempt ${attempt} got status ${response.status}`);
78
- console.log(`Response data:`, JSON.stringify(response.data).substring(0, 200));
79
 
80
  if (response.status === 403) {
81
- console.log('Got 403, waiting longer before retry...');
82
  await randomDelay(3000, 5000);
83
  throw new Error('API Bylo returned 403 Forbidden - possible rate limit or IP block');
84
  }
85
 
86
  if (response.status === 429) {
87
- console.log('Got 429 Too Many Requests, waiting...');
88
  await randomDelay(5000, 10000);
89
  if (attempt < 3) continue;
90
  throw new Error('Rate limit exceeded');
@@ -108,16 +132,9 @@ async function proxyRequest(url, options = {}) {
108
 
109
  } catch (error) {
110
  lastError = error;
111
- console.error(`Attempt ${attempt} failed:`, error.message);
112
-
113
- if (error.response) {
114
- console.error(`Response status: ${error.response.status}`);
115
- console.error(`Response data:`, error.response.data);
116
- }
117
 
118
  if (attempt < 3) {
119
  const waitTime = 3000 * attempt;
120
- console.log(`Retrying in ${waitTime/1000} seconds...`);
121
  await randomDelay(waitTime, waitTime + 2000);
122
  }
123
  }
@@ -127,7 +144,6 @@ async function proxyRequest(url, options = {}) {
127
  }
128
 
129
  async function createTempEmail() {
130
- console.log('Creating temporary email...');
131
  const { data } = await axios.post('https://api.internal.temp-mail.io/api/v3/email/new', {
132
  min_name_length: 10,
133
  max_name_length: 10
@@ -141,14 +157,14 @@ async function createTempEmail() {
141
  timeout: 15000
142
  });
143
 
144
- console.log(`Email created: ${data.email}`);
145
  return data;
146
  }
147
 
148
- async function getHcaptchaToken() {
149
- console.log('Getting hCaptcha token...');
150
- const { data } = await axios.get(
151
- 'https://anabot.my.id/api/tools/bypass?url=https%3A%2F%2Fapi.hcaptcha.com&siteKey=6f70c0f2-3ef6-4972-9fb6-c0b4bade3af8&type=hcaptcha-invisible&apikey=freeApikey',
 
152
  {
153
  timeout: 15000
154
  }
@@ -158,21 +174,19 @@ async function getHcaptchaToken() {
158
  throw new Error('Failed to get hCaptcha token');
159
  }
160
 
161
- console.log('hCaptcha token obtained');
162
  return data.data.result.token;
163
  }
164
 
165
- async function sendVerificationEmail(email) {
166
- console.log(`Sending verification email to ${email}...`);
167
-
168
  await randomDelay(1000, 2000);
169
 
170
- const hcaptchaToken = await getHcaptchaToken();
171
  const encodedEmail = encodeURIComponent(email);
172
 
173
  await randomDelay(500, 1000);
174
 
175
  const { data } = await proxyRequest(
 
176
  `/api/auth/send-captcha?email=${encodedEmail}&type=register`,
177
  {
178
  method: 'GET',
@@ -188,13 +202,11 @@ async function sendVerificationEmail(email) {
188
  throw new Error(`Failed to send verification email: ${data.msg || 'Unknown error'}`);
189
  }
190
 
191
- console.log('Verification email sent successfully');
192
  await randomDelay(3000, 5000);
193
  return true;
194
  }
195
 
196
  async function getVerificationCode(email) {
197
- console.log('Waiting for verification code...');
198
  let attempts = 0;
199
  const maxAttempts = 30;
200
 
@@ -220,15 +232,12 @@ async function getVerificationCode(email) {
220
  const codeMatch = bodyText.match(/Verification Code:\s*(\d{6})/);
221
 
222
  if (codeMatch) {
223
- console.log(`Verification code received: ${codeMatch[1]}`);
224
  return codeMatch[1];
225
  }
226
  }
227
 
228
  attempts++;
229
- console.log(`Checking for verification code... attempt ${attempts}/${maxAttempts}`);
230
  } catch (error) {
231
- console.log(`Email check attempt ${attempts} failed:`, error.message);
232
  attempts++;
233
  }
234
  }
@@ -236,9 +245,8 @@ async function getVerificationCode(email) {
236
  throw new Error('Verification code not received after 30 attempts');
237
  }
238
 
239
- async function registerAccount(email, password, verificationCode) {
240
- console.log('Registering account...');
241
- const { data } = await proxyRequest('/api/auth/register', {
242
  method: 'POST',
243
  headers: {
244
  'Accept': 'application/json, text/plain, */*',
@@ -258,15 +266,13 @@ async function registerAccount(email, password, verificationCode) {
258
  throw new Error(`Registration failed: ${data.msg || 'Unknown error'}`);
259
  }
260
 
261
- console.log('Account registered successfully');
262
  return data.data.token;
263
  }
264
 
265
- async function createVideo(prompt, ratio, authToken, email) {
266
- console.log('Creating video task...');
267
  await randomDelay(2000, 3000);
268
 
269
- const { data } = await proxyRequest('/aimodels/api/v1/ai/video/create', {
270
  method: 'POST',
271
  headers: {
272
  'Content-Type': 'application/json',
@@ -294,13 +300,13 @@ async function createVideo(prompt, ratio, authToken, email) {
294
  throw new Error(`Failed to create video: ${data.message || 'Unknown error'}`);
295
  }
296
 
297
- console.log(`Video task created with ID: ${data.data}`);
298
  return data.data;
299
  }
300
 
301
- async function getTaskStatus(taskId, authToken) {
302
  try {
303
  const { data } = await proxyRequest(
 
304
  `/aimodels/api/v1/ai/${taskId}?channel=SORA2`,
305
  {
306
  method: 'GET',
@@ -317,26 +323,21 @@ async function getTaskStatus(taskId, authToken) {
317
 
318
  return data.data;
319
  } catch (error) {
320
- console.error('Error getting task status:', error.message);
321
  throw error;
322
  }
323
  }
324
 
325
- async function waitForVideoCompletion(taskId, authToken) {
326
- console.log('Waiting for video generation...');
327
  let attempts = 0;
328
  const maxAttempts = 120;
329
 
330
  while (attempts < maxAttempts) {
331
  await randomDelay(5000, 7000);
332
 
333
- const taskData = await getTaskStatus(taskId, authToken);
334
-
335
- console.log(`Video status check ${attempts + 1}/${maxAttempts} - State: ${taskData.state}`);
336
 
337
  if (taskData.state === 1 && taskData.completeData) {
338
  const completeData = JSON.parse(taskData.completeData);
339
- console.log('Video generation completed!');
340
  return completeData.data.result_urls[0];
341
  }
342
 
@@ -351,22 +352,17 @@ async function waitForVideoCompletion(taskId, authToken) {
351
  }
352
 
353
  async function sora2(prompt, ratio = 'portrait') {
354
- console.log('=== Starting Sora2 Video Generation ===');
355
- console.log(`Prompt: ${prompt}`);
356
- console.log(`Ratio: ${ratio}`);
357
 
358
  const tempMail = await createTempEmail();
359
  const email = tempMail.email;
360
  const password = generatePassword();
361
 
362
- await sendVerificationEmail(email);
363
  const verificationCode = await getVerificationCode(email);
364
- const authToken = await registerAccount(email, password, verificationCode);
365
- const taskId = await createVideo(prompt, ratio, authToken, email);
366
- const videoUrl = await waitForVideoCompletion(taskId, authToken);
367
-
368
- console.log('=== Video Generation Completed ===');
369
- console.log(`Video URL: ${videoUrl}`);
370
 
371
  return {
372
  success: true,
@@ -408,21 +404,10 @@ const handler = async (req, res) => {
408
  });
409
  }
410
 
411
- console.log(`\n${'='.repeat(60)}`);
412
- console.log('NEW REQUEST RECEIVED');
413
- console.log(`Prompt: ${prompt}`);
414
- console.log(`Ratio: ${ratio}`);
415
- console.log(`${'='.repeat(60)}\n`);
416
-
417
  const result = await sora2(prompt, ratio);
418
 
419
  const duration = ((Date.now() - startTime) / 1000).toFixed(2);
420
 
421
- console.log(`\n${'='.repeat(60)}`);
422
- console.log('REQUEST COMPLETED');
423
- console.log(`Duration: ${duration}s`);
424
- console.log(`${'='.repeat(60)}\n`);
425
-
426
  res.json({
427
  author: 'Herza',
428
  success: true,
@@ -440,9 +425,6 @@ const handler = async (req, res) => {
440
  }
441
  });
442
  } catch (error) {
443
- console.error('\n❌ ERROR:', error.message);
444
- console.error('Stack:', error.stack);
445
-
446
  const duration = ((Date.now() - startTime) / 1000).toFixed(2);
447
 
448
  res.status(500).json({
@@ -460,7 +442,7 @@ const handler = async (req, res) => {
460
 
461
  module.exports = {
462
  name: 'Sora2 Video Generator',
463
- description: 'Generate videos using Sora2 AI model from Bylo.ai via Vercel Proxy',
464
  type: 'GET',
465
  routes: ['api/AI/sora2'],
466
  tags: ['AI', 'Sora', 'OpenAI', 'Video'],
 
1
  const axios = require('axios');
2
+ const { HttpsProxyAgent } = require('https-proxy-agent');
3
  const dns = require('dns').promises;
4
 
 
 
5
  dns.setServers([
6
  '1.1.1.1',
7
  '8.8.8.8',
8
  '8.8.4.4'
9
  ]);
10
 
11
+ async function fetchProxyList() {
12
+ try {
13
+ const response = await axios.get('https://cdn.jsdelivr.net/gh/proxifly/free-proxy-list@main/proxies/protocols/https/data.txt');
14
+ const proxies = response.data
15
+ .split('\n')
16
+ .map(line => line.trim())
17
+ .filter(line => line.startsWith('http'));
18
+ return proxies;
19
+ } catch (err) {
20
+ return [];
21
+ }
22
+ }
23
+
24
+ function getRandomProxy(proxyList) {
25
+ if (proxyList.length === 0) return null;
26
+ const randomIndex = Math.floor(Math.random() * proxyList.length);
27
+ return proxyList[randomIndex];
28
+ }
29
+
30
+ async function createAxiosWithProxy(proxyList, baseURL) {
31
+ const proxy = getRandomProxy(proxyList);
32
+
33
+ const config = {
34
+ baseURL,
35
+ timeout: 30000,
36
+ validateStatus: function (status) {
37
+ return status >= 200 && status < 600;
38
+ }
39
+ };
40
+
41
+ if (proxy) {
42
+ const httpsAgent = new HttpsProxyAgent(proxy);
43
+ config.httpsAgent = httpsAgent;
44
+ config.proxy = false;
45
+ }
46
+
47
+ return axios.create(config);
48
+ }
49
+
50
  function generateUniqueId() {
51
  return Array.from({ length: 32 }, () =>
52
  Math.floor(Math.random() * 16).toString(16)
 
71
  return `${Math.floor(Math.random() * 255)}.${Math.floor(Math.random() * 255)}.${Math.floor(Math.random() * 255)}.${Math.floor(Math.random() * 255)}`;
72
  }
73
 
74
+ async function proxyRequest(proxyList, url, options = {}) {
 
 
75
  const fakeIP = generateRandomIP();
76
 
77
  const headers = {
 
85
 
86
  await randomDelay(500, 1500);
87
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
88
  let lastError = null;
89
 
90
  for (let attempt = 1; attempt <= 3; attempt++) {
91
  try {
92
+ const axiosInstance = await createAxiosWithProxy(proxyList, 'https://api.bylo.ai');
 
93
 
94
+ const axiosConfig = {
95
+ method: options.method || 'GET',
96
+ url: url,
97
+ headers: headers,
98
+ };
99
+
100
+ if (options.data && (options.method === 'POST' || options.method === 'PUT')) {
101
+ axiosConfig.data = options.data;
102
+ }
103
 
104
+ const response = await axiosInstance(axiosConfig);
 
105
 
106
  if (response.status === 403) {
 
107
  await randomDelay(3000, 5000);
108
  throw new Error('API Bylo returned 403 Forbidden - possible rate limit or IP block');
109
  }
110
 
111
  if (response.status === 429) {
 
112
  await randomDelay(5000, 10000);
113
  if (attempt < 3) continue;
114
  throw new Error('Rate limit exceeded');
 
132
 
133
  } catch (error) {
134
  lastError = error;
 
 
 
 
 
 
135
 
136
  if (attempt < 3) {
137
  const waitTime = 3000 * attempt;
 
138
  await randomDelay(waitTime, waitTime + 2000);
139
  }
140
  }
 
144
  }
145
 
146
  async function createTempEmail() {
 
147
  const { data } = await axios.post('https://api.internal.temp-mail.io/api/v3/email/new', {
148
  min_name_length: 10,
149
  max_name_length: 10
 
157
  timeout: 15000
158
  });
159
 
 
160
  return data;
161
  }
162
 
163
+ async function getHcaptchaToken(proxyList) {
164
+ const axiosInstance = await createAxiosWithProxy(proxyList, 'https://anabot.my.id');
165
+
166
+ const { data } = await axiosInstance.get(
167
+ '/api/tools/bypass?url=https%3A%2F%2Fapi.hcaptcha.com&siteKey=6f70c0f2-3ef6-4972-9fb6-c0b4bade3af8&type=hcaptcha-invisible&apikey=freeApikey',
168
  {
169
  timeout: 15000
170
  }
 
174
  throw new Error('Failed to get hCaptcha token');
175
  }
176
 
 
177
  return data.data.result.token;
178
  }
179
 
180
+ async function sendVerificationEmail(proxyList, email) {
 
 
181
  await randomDelay(1000, 2000);
182
 
183
+ const hcaptchaToken = await getHcaptchaToken(proxyList);
184
  const encodedEmail = encodeURIComponent(email);
185
 
186
  await randomDelay(500, 1000);
187
 
188
  const { data } = await proxyRequest(
189
+ proxyList,
190
  `/api/auth/send-captcha?email=${encodedEmail}&type=register`,
191
  {
192
  method: 'GET',
 
202
  throw new Error(`Failed to send verification email: ${data.msg || 'Unknown error'}`);
203
  }
204
 
 
205
  await randomDelay(3000, 5000);
206
  return true;
207
  }
208
 
209
  async function getVerificationCode(email) {
 
210
  let attempts = 0;
211
  const maxAttempts = 30;
212
 
 
232
  const codeMatch = bodyText.match(/Verification Code:\s*(\d{6})/);
233
 
234
  if (codeMatch) {
 
235
  return codeMatch[1];
236
  }
237
  }
238
 
239
  attempts++;
 
240
  } catch (error) {
 
241
  attempts++;
242
  }
243
  }
 
245
  throw new Error('Verification code not received after 30 attempts');
246
  }
247
 
248
+ async function registerAccount(proxyList, email, password, verificationCode) {
249
+ const { data } = await proxyRequest(proxyList, '/api/auth/register', {
 
250
  method: 'POST',
251
  headers: {
252
  'Accept': 'application/json, text/plain, */*',
 
266
  throw new Error(`Registration failed: ${data.msg || 'Unknown error'}`);
267
  }
268
 
 
269
  return data.data.token;
270
  }
271
 
272
+ async function createVideo(proxyList, prompt, ratio, authToken, email) {
 
273
  await randomDelay(2000, 3000);
274
 
275
+ const { data } = await proxyRequest(proxyList, '/aimodels/api/v1/ai/video/create', {
276
  method: 'POST',
277
  headers: {
278
  'Content-Type': 'application/json',
 
300
  throw new Error(`Failed to create video: ${data.message || 'Unknown error'}`);
301
  }
302
 
 
303
  return data.data;
304
  }
305
 
306
+ async function getTaskStatus(proxyList, taskId, authToken) {
307
  try {
308
  const { data } = await proxyRequest(
309
+ proxyList,
310
  `/aimodels/api/v1/ai/${taskId}?channel=SORA2`,
311
  {
312
  method: 'GET',
 
323
 
324
  return data.data;
325
  } catch (error) {
 
326
  throw error;
327
  }
328
  }
329
 
330
+ async function waitForVideoCompletion(proxyList, taskId, authToken) {
 
331
  let attempts = 0;
332
  const maxAttempts = 120;
333
 
334
  while (attempts < maxAttempts) {
335
  await randomDelay(5000, 7000);
336
 
337
+ const taskData = await getTaskStatus(proxyList, taskId, authToken);
 
 
338
 
339
  if (taskData.state === 1 && taskData.completeData) {
340
  const completeData = JSON.parse(taskData.completeData);
 
341
  return completeData.data.result_urls[0];
342
  }
343
 
 
352
  }
353
 
354
  async function sora2(prompt, ratio = 'portrait') {
355
+ const proxyList = await fetchProxyList();
 
 
356
 
357
  const tempMail = await createTempEmail();
358
  const email = tempMail.email;
359
  const password = generatePassword();
360
 
361
+ await sendVerificationEmail(proxyList, email);
362
  const verificationCode = await getVerificationCode(email);
363
+ const authToken = await registerAccount(proxyList, email, password, verificationCode);
364
+ const taskId = await createVideo(proxyList, prompt, ratio, authToken, email);
365
+ const videoUrl = await waitForVideoCompletion(proxyList, taskId, authToken);
 
 
 
366
 
367
  return {
368
  success: true,
 
404
  });
405
  }
406
 
 
 
 
 
 
 
407
  const result = await sora2(prompt, ratio);
408
 
409
  const duration = ((Date.now() - startTime) / 1000).toFixed(2);
410
 
 
 
 
 
 
411
  res.json({
412
  author: 'Herza',
413
  success: true,
 
425
  }
426
  });
427
  } catch (error) {
 
 
 
428
  const duration = ((Date.now() - startTime) / 1000).toFixed(2);
429
 
430
  res.status(500).json({
 
442
 
443
  module.exports = {
444
  name: 'Sora2 Video Generator',
445
+ description: 'Generate videos using Sora2 AI model from Bylo.ai with Random Proxy',
446
  type: 'GET',
447
  routes: ['api/AI/sora2'],
448
  tags: ['AI', 'Sora', 'OpenAI', 'Video'],