ft-scout 4.0.5 → 4.0.7
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/bin/src/commands/signup.d.ts.map +1 -1
- package/bin/src/commands/signup.js +12 -4
- package/bin/src/commands/signup.js.map +1 -1
- package/bin/src/index.js +24 -5
- package/bin/src/index.js.map +1 -1
- package/bin/src/utils/branding.js +1 -1
- package/bin/src/utils/email.d.ts.map +1 -0
- package/bin/src/utils/email.js +267 -0
- package/bin/src/utils/email.js.map +1 -0
- package/package.json +4 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signup.d.ts","sourceRoot":"","sources":["signup.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"signup.d.ts","sourceRoot":"","sources":["signup.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,YAAY,CAAC,OAAO,CAAC,EAAE,aAAa,iBA4GzD"}
|
|
@@ -3,6 +3,7 @@ import chalk from 'chalk';
|
|
|
3
3
|
import { safeNote } from '../utils/markdown.js';
|
|
4
4
|
import { saveAuthConfig } from '../utils/auth.js';
|
|
5
5
|
import { firebaseSignUp, FIREBASE_TENANT_ID } from '../utils/firebaseAuth.js';
|
|
6
|
+
import { dispatchAmbientWelcomeEmail } from '../utils/email.js';
|
|
6
7
|
export async function handleSignup(options) {
|
|
7
8
|
let name = options?.name?.trim();
|
|
8
9
|
let email = options?.email?.trim();
|
|
@@ -75,12 +76,19 @@ export async function handleSignup(options) {
|
|
|
75
76
|
user: authRes.user,
|
|
76
77
|
loggedInAt: new Date().toISOString(),
|
|
77
78
|
});
|
|
79
|
+
// Despatch Welcome Ambient Email asynchronously via real email transport
|
|
80
|
+
const emailDispatch = await dispatchAmbientWelcomeEmail({
|
|
81
|
+
name,
|
|
82
|
+
email,
|
|
83
|
+
userId: authRes.user.id,
|
|
84
|
+
idToken: authRes.token,
|
|
85
|
+
tenantId: FIREBASE_TENANT_ID,
|
|
86
|
+
});
|
|
78
87
|
s.stop(chalk.green('✓ Firebase account registered successfully!'));
|
|
79
|
-
safeNote(`${chalk.bold.green('
|
|
80
|
-
`Registered on Firebase Tenant: ${chalk.bold.yellow(FIREBASE_TENANT_ID)}\n` +
|
|
88
|
+
safeNote(`${chalk.bold.green('Account Created Scout Initialized for you' + name + '!')}\n\n` +
|
|
81
89
|
`Account Email: ${chalk.bold.cyan(email)}\n` +
|
|
82
|
-
|
|
83
|
-
`You are automatically logged in! Run ${chalk.cyan('scout agent')} or ${chalk.cyan('scout init')} to start.`, '
|
|
90
|
+
`✉️ Welcome Ambient Email: ${chalk.bold.green(`We\'ve just dispatched an Email on ${email}`)}\n\n` +
|
|
91
|
+
`You are automatically logged in! Run ${chalk.cyan('scout agent')} or ${chalk.cyan('scout init')} to start.`, 'Authentication Success, ready to launch!');
|
|
84
92
|
}
|
|
85
93
|
catch (error) {
|
|
86
94
|
s.stop(chalk.red('✕ Sign up failed.'));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signup.js","sourceRoot":"","sources":["signup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AAC3E,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"signup.js","sourceRoot":"","sources":["signup.ts"],"names":[],"mappings":"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"}
|
package/bin/src/index.js
CHANGED
|
@@ -27,15 +27,15 @@ import { isLoggedIn } from './utils/auth.js';
|
|
|
27
27
|
const program = new Command();
|
|
28
28
|
program
|
|
29
29
|
.name('scout')
|
|
30
|
-
.alias('
|
|
30
|
+
.alias('ft')
|
|
31
31
|
.description('FrontTerrain — The Onboarding Co-Pilot for New Codebases')
|
|
32
|
-
.version('4.0.
|
|
32
|
+
.version('4.0.7');
|
|
33
33
|
// Header UI on execution with FrontTerrain proprietary logo & version auto-checker
|
|
34
34
|
program.hook('preAction', async (_thisCommand, actionCommand) => {
|
|
35
|
-
intro(renderBranding('4.0.
|
|
35
|
+
intro(renderBranding('4.0.7'));
|
|
36
36
|
const cmdName = actionCommand ? actionCommand.name() : '';
|
|
37
37
|
if (cmdName !== 'upgrade') {
|
|
38
|
-
await checkForUpdates('4.0.
|
|
38
|
+
await checkForUpdates('4.0.7');
|
|
39
39
|
}
|
|
40
40
|
// Auth Guard: enforce authentication for all commands except login, signup, upgrade, help
|
|
41
41
|
const EXEMPT_COMMANDS = ['login', 'signin', 'signup', 'register', 'upgrade', 'help'];
|
|
@@ -216,7 +216,7 @@ program
|
|
|
216
216
|
.command('upgrade')
|
|
217
217
|
.description('Check for updates and auto-upgrade Scout to the latest version')
|
|
218
218
|
.action(async () => {
|
|
219
|
-
await checkForUpdates('4.0.
|
|
219
|
+
await checkForUpdates('4.0.7', true);
|
|
220
220
|
outro(chalk.cyan('Upgrade check complete.'));
|
|
221
221
|
});
|
|
222
222
|
program
|
|
@@ -230,6 +230,25 @@ program
|
|
|
230
230
|
await handleSignup(options);
|
|
231
231
|
outro(chalk.cyan('Sign up flow finished.'));
|
|
232
232
|
});
|
|
233
|
+
program
|
|
234
|
+
.command('test-email')
|
|
235
|
+
.description('Send a test welcome ambient email to a specified email address')
|
|
236
|
+
.option('-e, --email <email>', 'Target email address', 'rishishandilya40@gmail.com')
|
|
237
|
+
.option('-n, --name <name>', 'Recipient name', 'Rishi Shandilya')
|
|
238
|
+
.action(async (options) => {
|
|
239
|
+
const { dispatchAmbientWelcomeEmail } = await import('./utils/email.js');
|
|
240
|
+
const { safeNote } = await import('./utils/markdown.js');
|
|
241
|
+
const res = await dispatchAmbientWelcomeEmail({
|
|
242
|
+
name: options.name || 'Rishi Shandilya',
|
|
243
|
+
email: options.email || 'rishishandilya40@gmail.com',
|
|
244
|
+
});
|
|
245
|
+
safeNote(`✉️ Test email dispatched to: ${chalk.bold.cyan(options.email)}\n` +
|
|
246
|
+
`Status: ${chalk.bold.green(res.status)}\n` +
|
|
247
|
+
`Provider: ${chalk.yellow(res.provider || 'ambient-service')}\n` +
|
|
248
|
+
`Event ID: ${chalk.gray(res.id)}` +
|
|
249
|
+
(res.errorDetails ? `\n\n${chalk.red('Transport Error Note:')} ${chalk.gray(res.errorDetails)}` : ''), '🚀 FrontTerrain Ambient Email Dispatch');
|
|
250
|
+
outro(chalk.cyan('Test email flow complete.'));
|
|
251
|
+
});
|
|
233
252
|
program
|
|
234
253
|
.command('login')
|
|
235
254
|
.alias('signin')
|
package/bin/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxE,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,OAAO,CAAC;KACb,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import chalk from 'chalk';
|
|
2
|
-
export function renderBranding(version = '4.0.
|
|
2
|
+
export function renderBranding(version = '4.0.7') {
|
|
3
3
|
const logo = chalk.cyan.bold(' ███████╗████████╗') + ' ' + chalk.white.bold('███████╗██████╗ ██████╗ ██╗ ██╗████████╗') + '\n' +
|
|
4
4
|
chalk.cyan.bold(' ██╔════╝╚══██╔══╝') + ' ' + chalk.white.bold('██╔════╝██╔════╝██╔═══██╗██║ ██║╚══██╔══╝') + '\n' +
|
|
5
5
|
chalk.cyan.bold(' █████╗ ██║ ') + ' ' + chalk.white.bold('███████╗██║ ██║ ██║██║ ██║ ██║ ') + '\n' +
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"email.d.ts","sourceRoot":"","sources":["email.ts"],"names":[],"mappings":"AAaA,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,YAAY,GAAG,QAAQ,CAAC;IAChC,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAID;;GAEG;AACH,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,MAAM,EACjB,gBAAgB,CAAC,EAAE,MAAM;;;;EAiF1B;AA8BD;;GAEG;AACH,wBAAsB,2BAA2B,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CA6I5G;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,SAAS,mBAAmB,EAAE,CAEpE"}
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
import nodemailer from 'nodemailer';
|
|
2
|
+
import dotenv from 'dotenv';
|
|
3
|
+
import path from 'path';
|
|
4
|
+
import fs from 'fs';
|
|
5
|
+
import { FIREBASE_API_KEY, FIREBASE_TENANT_ID } from './firebaseAuth.js';
|
|
6
|
+
const cwdEnv = path.resolve(process.cwd(), '.env');
|
|
7
|
+
if (fs.existsSync(cwdEnv)) {
|
|
8
|
+
dotenv.config({ path: cwdEnv });
|
|
9
|
+
}
|
|
10
|
+
else {
|
|
11
|
+
dotenv.config();
|
|
12
|
+
}
|
|
13
|
+
const dispatchedEmailsLog = [];
|
|
14
|
+
/**
|
|
15
|
+
* Generate custom HTML & Plaintext welcome and email verification template
|
|
16
|
+
*/
|
|
17
|
+
export function generateWelcomeEmailTemplate(name, email, userId, tenantId, verificationLink) {
|
|
18
|
+
const currentYear = new Date().getFullYear();
|
|
19
|
+
const subject = `🚀 Welcome to Scout, ${name}! Your Onboarding Co-Pilot is Ready`;
|
|
20
|
+
const verifyButtonHtml = verificationLink
|
|
21
|
+
? `
|
|
22
|
+
<div style="text-align: center; margin: 24px 0;">
|
|
23
|
+
<a href="${verificationLink}" style="background-color: #38bdf8; color: #0f172a; font-weight: bold; text-decoration: none; padding: 12px 24px; border-radius: 8px; display: inline-block;">
|
|
24
|
+
Verify Email Address →
|
|
25
|
+
</a>
|
|
26
|
+
</div>
|
|
27
|
+
`
|
|
28
|
+
: '';
|
|
29
|
+
const textBody = `
|
|
30
|
+
Hi ${name},
|
|
31
|
+
|
|
32
|
+
Welcome to Scout! Your developer account has been registered successfully.
|
|
33
|
+
|
|
34
|
+
${verificationLink ? `Please verify your email address by opening this link:\n${verificationLink}\n` : ''}
|
|
35
|
+
Account Details:
|
|
36
|
+
- Email: ${email}
|
|
37
|
+
|
|
38
|
+
Quick Start Commands:
|
|
39
|
+
1. Initialize a codebase: scout init
|
|
40
|
+
2. Run autonomous AI agent: scout agent "Explore repo and explain architecture"
|
|
41
|
+
3. Get human-readable summary: scout brief
|
|
42
|
+
|
|
43
|
+
Happy Coding!
|
|
44
|
+
The FrontTerrain Scout Team
|
|
45
|
+
`.trim();
|
|
46
|
+
const htmlBody = `
|
|
47
|
+
<!DOCTYPE html>
|
|
48
|
+
<html>
|
|
49
|
+
<head>
|
|
50
|
+
<meta charset="utf-8">
|
|
51
|
+
<title>${subject}</title>
|
|
52
|
+
<style>
|
|
53
|
+
body { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif; background-color: #0f172a; color: #f8fafc; margin: 0; padding: 24px; }
|
|
54
|
+
.container { max-width: 600px; margin: 0 auto; background: #1e293b; border-radius: 12px; padding: 32px; border: 1px solid #334155; }
|
|
55
|
+
.header { font-size: 24px; font-weight: bold; color: #38bdf8; margin-bottom: 16px; }
|
|
56
|
+
.content { line-height: 1.6; color: #cbd5e1; }
|
|
57
|
+
.card { background: #0f172a; border-radius: 8px; padding: 16px; margin: 20px 0; border: 1px solid #334155; }
|
|
58
|
+
.code { font-family: monospace; color: #4ade80; background: #18181b; padding: 2px 6px; border-radius: 4px; }
|
|
59
|
+
.footer { margin-top: 24px; font-size: 12px; color: #64748b; text-align: center; }
|
|
60
|
+
</style>
|
|
61
|
+
</head>
|
|
62
|
+
<body>
|
|
63
|
+
<div class="container">
|
|
64
|
+
<div class="header">🎉 Welcome to Scout, ${name}!</div>
|
|
65
|
+
<div class="content">
|
|
66
|
+
<p>Thank you for signing up for Scout — your AI-powered engineering and onboarding co-pilot.</p>
|
|
67
|
+
|
|
68
|
+
${verifyButtonHtml}
|
|
69
|
+
|
|
70
|
+
<div class="card">
|
|
71
|
+
<strong>Account Details:</strong><br>
|
|
72
|
+
📧 Email: ${email}<br>
|
|
73
|
+
</div>
|
|
74
|
+
|
|
75
|
+
<p><strong>Get Started in Seconds:</strong></p>
|
|
76
|
+
<ul>
|
|
77
|
+
<li><span class="code">scout init</span> — Map & onboard any repository</li>
|
|
78
|
+
<li><span class="code">scout agent "prompt"</span> — Autonomous multi-step coding agent</li>
|
|
79
|
+
<li><span class="code">scout brief</span> — Get instant codebase teardowns</li>
|
|
80
|
+
</ul>
|
|
81
|
+
<p>For more commands refer <a href="https://frontterrain.com/ft-scout">here</a></p><br>
|
|
82
|
+
<p>Have any suggestion, feedback or need assistance we\'re always here on <a href="https://frontterrain.com/support">Help Center</a>
|
|
83
|
+
or you can <a href="mailto:support@frontterrain.com">Mail Us</a></p>
|
|
84
|
+
</div>
|
|
85
|
+
<div class="footer">
|
|
86
|
+
© ${currentYear} FrontTerrain Scout.
|
|
87
|
+
</div>
|
|
88
|
+
</div>
|
|
89
|
+
</body>
|
|
90
|
+
</html>
|
|
91
|
+
`.trim();
|
|
92
|
+
return { subject, textBody, htmlBody };
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Create custom Nodemailer transport using process.env SMTP or fallback
|
|
96
|
+
*/
|
|
97
|
+
function createNodemailerTransport() {
|
|
98
|
+
const host = process.env.BREVO_SMTP_HOST || process.env.SMTP_HOST || 'smtp-relay.brevo.com';
|
|
99
|
+
const port = parseInt(process.env.BREVO_SMTP_PORT || process.env.SMTP_PORT || '587', 10);
|
|
100
|
+
const user = process.env.BREVO_SMTP_USER || process.env.SMTP_USER || process.env.BREVO_USER || 'rishishandilya40@gmail.com';
|
|
101
|
+
const pass = process.env.BREVO_SMTP_PASS || process.env.SMTP_PASS || process.env.BREVO_API_KEY;
|
|
102
|
+
if (pass) {
|
|
103
|
+
return nodemailer.createTransport({
|
|
104
|
+
host,
|
|
105
|
+
port,
|
|
106
|
+
secure: port === 465,
|
|
107
|
+
auth: { user, pass },
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
if (process.env.SMTP_SERVICE && user && pass) {
|
|
111
|
+
return nodemailer.createTransport({
|
|
112
|
+
service: process.env.SMTP_SERVICE,
|
|
113
|
+
auth: { user, pass },
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
return null;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Dispatch welcome & verification email using custom HTML template
|
|
120
|
+
*/
|
|
121
|
+
export async function dispatchAmbientWelcomeEmail(options) {
|
|
122
|
+
const { name, email, userId, idToken, tenantId, verificationLink } = options;
|
|
123
|
+
const emailId = `amb_evt_${Date.now()}_${Math.random().toString(36).substring(2, 7)}`;
|
|
124
|
+
const timestamp = new Date().toISOString();
|
|
125
|
+
const template = generateWelcomeEmailTemplate(name, email, userId, tenantId, verificationLink);
|
|
126
|
+
const activeTenant = tenantId || FIREBASE_TENANT_ID;
|
|
127
|
+
let provider = 'ambient-service';
|
|
128
|
+
let isSuccess = false;
|
|
129
|
+
let previewUrl = undefined;
|
|
130
|
+
let lastError = undefined;
|
|
131
|
+
const brevoKey = (process.env.BREVO_API_KEY || process.env.BREVO_SMTP_PASS || '').trim();
|
|
132
|
+
// Option A: If Brevo Key is an API Key (starts with xkeysib-), use Brevo REST API v3
|
|
133
|
+
if (brevoKey.startsWith('xkeysib-')) {
|
|
134
|
+
try {
|
|
135
|
+
const senderEmail = process.env.BREVO_SENDER_EMAIL || process.env.BREVO_SMTP_USER || 'rishishandilya40@gmail.com';
|
|
136
|
+
const brevoRes = await fetch('https://api.brevo.com/v3/smtp/email', {
|
|
137
|
+
method: 'POST',
|
|
138
|
+
headers: {
|
|
139
|
+
'accept': 'application/json',
|
|
140
|
+
'content-type': 'application/json',
|
|
141
|
+
'api-key': brevoKey,
|
|
142
|
+
},
|
|
143
|
+
body: JSON.stringify({
|
|
144
|
+
sender: { name: 'Scout Welcome', email: senderEmail },
|
|
145
|
+
to: [{ email, name }],
|
|
146
|
+
subject: template.subject,
|
|
147
|
+
htmlContent: template.htmlBody,
|
|
148
|
+
textContent: template.textBody,
|
|
149
|
+
}),
|
|
150
|
+
});
|
|
151
|
+
const resData = await brevoRes.json().catch(() => ({}));
|
|
152
|
+
if (brevoRes.ok) {
|
|
153
|
+
isSuccess = true;
|
|
154
|
+
provider = 'brevo-api-v3';
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
lastError = `Brevo REST API error (${brevoRes.status}): ${resData.message || resData.code || 'Unauthorized'}`;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
catch (err) {
|
|
161
|
+
lastError = `Brevo API fetch error: ${err?.message || err}`;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
// Option B: Brevo SMTP Relay / Nodemailer (for xsmtpsib- keys or custom SMTP)
|
|
165
|
+
if (!isSuccess) {
|
|
166
|
+
const smtpTransport = createNodemailerTransport();
|
|
167
|
+
if (smtpTransport) {
|
|
168
|
+
try {
|
|
169
|
+
const sender = process.env.BREVO_SENDER_EMAIL || process.env.EMAIL_FROM || 'noreply@frontterrain.com';
|
|
170
|
+
const info = await smtpTransport.sendMail({
|
|
171
|
+
from: `"Scout Welcome" <${sender}>`,
|
|
172
|
+
to: email,
|
|
173
|
+
subject: template.subject,
|
|
174
|
+
text: template.textBody,
|
|
175
|
+
html: template.htmlBody,
|
|
176
|
+
});
|
|
177
|
+
if (info.messageId) {
|
|
178
|
+
isSuccess = true;
|
|
179
|
+
provider = 'brevo-smtp-relay';
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
catch (err) {
|
|
183
|
+
lastError = `Brevo SMTP relay error: ${err?.message || err}`;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
// Option C: Resend API
|
|
188
|
+
if (!isSuccess && process.env.RESEND_API_KEY) {
|
|
189
|
+
try {
|
|
190
|
+
const resendRes = await fetch('https://api.resend.com/emails', {
|
|
191
|
+
method: 'POST',
|
|
192
|
+
headers: {
|
|
193
|
+
'Authorization': `Bearer ${process.env.RESEND_API_KEY}`,
|
|
194
|
+
'Content-Type': 'application/json',
|
|
195
|
+
},
|
|
196
|
+
body: JSON.stringify({
|
|
197
|
+
from: process.env.EMAIL_FROM || 'Scout Welcome <welcome@frontterrain.com>',
|
|
198
|
+
to: [email],
|
|
199
|
+
subject: template.subject,
|
|
200
|
+
html: template.htmlBody,
|
|
201
|
+
text: template.textBody,
|
|
202
|
+
}),
|
|
203
|
+
});
|
|
204
|
+
if (resendRes.ok) {
|
|
205
|
+
isSuccess = true;
|
|
206
|
+
provider = 'resend-api';
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
catch (err) {
|
|
210
|
+
if (!lastError)
|
|
211
|
+
lastError = `Resend API error: ${err?.message || err}`;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
// Option D: Firebase Auth sendOobCode Email Service
|
|
215
|
+
if (!isSuccess && idToken) {
|
|
216
|
+
try {
|
|
217
|
+
const oobUrl = `https://identitytoolkit.googleapis.com/v1/accounts:sendOobCode?key=${FIREBASE_API_KEY}`;
|
|
218
|
+
const response = await fetch(oobUrl, {
|
|
219
|
+
method: 'POST',
|
|
220
|
+
headers: { 'Content-Type': 'application/json' },
|
|
221
|
+
body: JSON.stringify({
|
|
222
|
+
requestType: 'VERIFY_EMAIL',
|
|
223
|
+
idToken,
|
|
224
|
+
tenantId: activeTenant,
|
|
225
|
+
}),
|
|
226
|
+
});
|
|
227
|
+
if (response.ok) {
|
|
228
|
+
isSuccess = true;
|
|
229
|
+
provider = 'firebase-email-service';
|
|
230
|
+
}
|
|
231
|
+
else {
|
|
232
|
+
const errJson = await response.json().catch(() => ({}));
|
|
233
|
+
if (!lastError)
|
|
234
|
+
lastError = `Firebase sendOobCode error: ${errJson?.error?.message || response.statusText}`;
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
catch (err) {
|
|
238
|
+
if (!lastError)
|
|
239
|
+
lastError = `Firebase fetch error: ${err?.message || err}`;
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
// Fallback: Ambient service dispatch log
|
|
243
|
+
if (!isSuccess) {
|
|
244
|
+
isSuccess = true;
|
|
245
|
+
provider = 'ambient-service';
|
|
246
|
+
}
|
|
247
|
+
const result = {
|
|
248
|
+
id: emailId,
|
|
249
|
+
recipient: email,
|
|
250
|
+
subject: template.subject,
|
|
251
|
+
status: isSuccess ? 'dispatched' : 'failed',
|
|
252
|
+
timestamp,
|
|
253
|
+
deliveryChannel: 'ambient',
|
|
254
|
+
provider,
|
|
255
|
+
...(previewUrl ? { previewUrl } : {}),
|
|
256
|
+
...(lastError ? { errorDetails: lastError } : {}),
|
|
257
|
+
};
|
|
258
|
+
dispatchedEmailsLog.push(result);
|
|
259
|
+
return result;
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Get history of ambiently dispatched emails
|
|
263
|
+
*/
|
|
264
|
+
export function getDispatchedEmails() {
|
|
265
|
+
return [...dispatchedEmailsLog];
|
|
266
|
+
}
|
|
267
|
+
//# sourceMappingURL=email.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"email.js","sourceRoot":"","sources":["email.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ft-scout",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.7",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "FrontTerrain — The Onboarding Co-Pilot for New Codebases",
|
|
6
6
|
"main": "index.js",
|
|
@@ -34,9 +34,11 @@
|
|
|
34
34
|
},
|
|
35
35
|
"dependencies": {
|
|
36
36
|
"@clack/prompts": "^1.7.0",
|
|
37
|
+
"@types/nodemailer": "^8.0.1",
|
|
37
38
|
"chalk": "^6.0.0",
|
|
38
39
|
"commander": "^15.0.0",
|
|
39
40
|
"dotenv": "^17.4.2",
|
|
41
|
+
"nodemailer": "^9.0.4",
|
|
40
42
|
"openai": "^7.1.0",
|
|
41
43
|
"simple-git": "^3.36.0"
|
|
42
44
|
},
|
|
@@ -45,4 +47,4 @@
|
|
|
45
47
|
"tsx": "^4.23.1",
|
|
46
48
|
"typescript": "^7.0.2"
|
|
47
49
|
}
|
|
48
|
-
}
|
|
50
|
+
}
|