d3ro-voice/scripts/playwright-fill-all-live-ad-portals.js
Yun Chan 708e20f747
Some checks failed
CI Pipeline / Code Quality & Typecheck (push) Waiting to run
CI Pipeline / Test Suite (macos-latest) (push) Blocked by required conditions
CI Pipeline / Test Suite (ubuntu-latest) (push) Blocked by required conditions
CI Pipeline / Test Suite (windows-latest) (push) Blocked by required conditions
CI Pipeline / Build Validation (admin) (push) Blocked by required conditions
CI Pipeline / Build Validation (desktop) (push) Blocked by required conditions
Deploy Landing Page / deploy (push) Blocked by required conditions
Deploy Landing Page / build (push) Waiting to run
Release & Packaging Pipeline / Build & Publish Admin Docker Image (push) Failing after 8s
Release & Code Signing CA Pipeline / build-and-sign-windows (push) Failing after 1m51s
Build macOS / Build & Package (macOS) (push) Failing after 4s
Build macOS / Build & Package (macOS)-1 (push) Failing after 5s
Release & Code Signing CA Pipeline / build-and-sign-macos (push) Failing after 3s
Release & Packaging Pipeline / Package macOS Desktop App (push) Failing after 4s
Release & Packaging Pipeline / Package Windows Desktop App (push) Failing after 2m28s
Release & Packaging Pipeline / Publish Official GitHub Release (push) Has been skipped
feat: complete release preparation, 10+ ad mediation, CI/CD, and docker deployment
2026-08-20 11:12:05 +09:00

123 lines
5 KiB
JavaScript

// scripts/playwright-fill-all-live-ad-portals.js
const { chromium } = require('@playwright/test');
const path = require('path');
const fs = require('fs');
const OUTPUT_DIR = 'C:/Users/encep/.gemini/antigravity-cli/brain/3ab7ae82-5634-41d5-93a7-3c12c22503e2/screenshots/live_portal_signups';
const CREDS = {
email: 'yunchanpaca@gmail.com',
password: 'ONVI2v4J#y',
firstName: 'Yunchan',
lastName: 'Park',
fullName: 'Yunchan Park',
company: 'D3RO Voice AI',
url: 'https://d3ro.app',
};
async function fillAllLiveAdPortals() {
if (!fs.existsSync(OUTPUT_DIR)) {
fs.mkdirSync(OUTPUT_DIR, { recursive: true });
}
const browser = await chromium.launch({
channel: 'msedge',
headless: true,
});
const context = await browser.newContext({
viewport: { width: 1440, height: 1080 },
userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36',
});
// 1. AppLovin MAX
try {
console.log('[1/3] Interacting with AppLovin MAX Signup...');
const page = await context.newPage();
await page.goto('https://dash.applovin.com/signup', { waitUntil: 'networkidle', timeout: 30000 });
await page.waitForTimeout(2000);
const nameInput = page.locator('input[placeholder*="name" i]').first();
const emailInput = page.locator('input[type="email"]').first();
const companyInput = page.locator('input[placeholder*="company" i]').first();
const websiteInput = page.locator('input[placeholder*="applovin.com" i], input[placeholder*="site" i]').first();
const storeUrlInput = page.locator('input[placeholder*="store" i]').first();
const passInputs = page.locator('input[type="password"]');
if (await nameInput.isVisible()) await nameInput.fill(CREDS.fullName);
if (await emailInput.isVisible()) await emailInput.fill(CREDS.email);
if (await companyInput.isVisible()) await companyInput.fill(CREDS.company);
if (await websiteInput.isVisible()) await websiteInput.fill(CREDS.url);
if (await storeUrlInput.isVisible()) await storeUrlInput.fill('https://d3ro.app/download/desktop');
// Fill both password and confirm password
const count = await passInputs.count();
for (let i = 0; i < count; i++) {
await passInputs.nth(i).fill(CREDS.password);
}
await page.waitForTimeout(1000);
const shotPath = path.join(OUTPUT_DIR, '02_applovin_max_form_filled_complete.png');
await page.screenshot({ path: shotPath, fullPage: true });
console.log('AppLovin MAX complete screenshot saved:', shotPath);
await page.close();
} catch (err) {
console.error('AppLovin error:', err.message);
}
// 2. Mintegral Developer Signup
try {
console.log('[2/3] Interacting with Mintegral Signup...');
const page = await context.newPage();
await page.goto('https://www.mintegral.com/en/signup', { waitUntil: 'networkidle', timeout: 30000 });
await page.waitForTimeout(2000);
const emailInput = page.locator('input[type="email"], input[placeholder*="email" i]').first();
const passInputs = page.locator('input[type="password"]');
if (await emailInput.isVisible()) await emailInput.fill(CREDS.email);
const count = await passInputs.count();
for (let i = 0; i < count; i++) {
await passInputs.nth(i).fill(CREDS.password);
}
await page.waitForTimeout(1000);
const shotPath = path.join(OUTPUT_DIR, '03_mintegral_signup_filled_complete.png');
await page.screenshot({ path: shotPath, fullPage: false });
console.log('Mintegral complete screenshot saved:', shotPath);
await page.close();
} catch (err) {
console.error('Mintegral error:', err.message);
}
// 3. Unity ID Registration
try {
console.log('[3/3] Interacting with Unity ID Registration...');
const page = await context.newPage();
await page.goto('https://id.unity.com/en/conversations/new', { waitUntil: 'networkidle', timeout: 30000 });
await page.waitForTimeout(2000);
const emailInput = page.locator('input[type="email"]').first();
const passInput = page.locator('input[type="password"]').first();
const usernameInput = page.locator('input[name*="username" i]').first();
const fullnameInput = page.locator('input[name*="name" i]').first();
if (await emailInput.isVisible()) await emailInput.fill(CREDS.email);
if (await passInput.isVisible()) await passInput.fill(CREDS.password);
if (await usernameInput.isVisible()) await usernameInput.fill('yunchanpaca');
if (await fullnameInput.isVisible()) await fullnameInput.fill(CREDS.fullName);
await page.waitForTimeout(1000);
const shotPath = path.join(OUTPUT_DIR, '06_unity_cloud_signup_filled_complete.png');
await page.screenshot({ path: shotPath, fullPage: false });
console.log('Unity ID complete screenshot saved:', shotPath);
await page.close();
} catch (err) {
console.error('Unity error:', err.message);
}
await browser.close();
console.log('--- All Direct Browser Actions Completed! ---');
}
fillAllLiveAdPortals().catch(console.error);