@autonoma-io/a6s 5.2.1 → 5.3.0
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/binaries/a6s-darwin-arm64 +0 -0
- package/bin/binaries/a6s-darwin-x64 +0 -0
- package/bin/binaries/a6s-linux-arm64 +0 -0
- package/bin/binaries/a6s-linux-x64 +0 -0
- package/bin/binaries/a6s-win32-x64.exe +0 -0
- package/dist/go-bridge.d.ts +14 -0
- package/dist/go-bridge.d.ts.map +1 -0
- package/dist/go-bridge.js +92 -0
- package/dist/go-bridge.js.map +1 -0
- package/dist/go-verbs.generated.d.ts +2 -0
- package/dist/go-verbs.generated.d.ts.map +1 -0
- package/dist/go-verbs.generated.js +46 -0
- package/dist/go-verbs.generated.js.map +1 -0
- package/dist/index.js +79 -312
- package/dist/index.js.map +1 -1
- package/dist/interactive.d.ts +9 -2
- package/dist/interactive.d.ts.map +1 -1
- package/dist/interactive.js +38 -194
- package/dist/interactive.js.map +1 -1
- package/dist/nlp/command-map.d.ts +33 -0
- package/dist/nlp/command-map.d.ts.map +1 -0
- package/dist/nlp/command-map.js +275 -0
- package/dist/nlp/command-map.js.map +1 -0
- package/dist/nlp/processor.d.ts +10 -0
- package/dist/nlp/processor.d.ts.map +1 -1
- package/dist/nlp/processor.js +81 -94
- package/dist/nlp/processor.js.map +1 -1
- package/package.json +7 -31
- package/dist/commands/ai-learning-demo.d.ts +0 -3
- package/dist/commands/ai-learning-demo.d.ts.map +0 -1
- package/dist/commands/ai-learning-demo.js +0 -176
- package/dist/commands/ai-learning-demo.js.map +0 -1
- package/dist/commands/auth.d.ts +0 -33
- package/dist/commands/auth.d.ts.map +0 -1
- package/dist/commands/auth.js +0 -603
- package/dist/commands/auth.js.map +0 -1
- package/dist/modules/ab-testing.d.ts +0 -16
- package/dist/modules/ab-testing.d.ts.map +0 -1
- package/dist/modules/ab-testing.js +0 -375
- package/dist/modules/ab-testing.js.map +0 -1
- package/dist/modules/ai-orchestration.d.ts +0 -70
- package/dist/modules/ai-orchestration.d.ts.map +0 -1
- package/dist/modules/ai-orchestration.js +0 -546
- package/dist/modules/ai-orchestration.js.map +0 -1
- package/dist/modules/auth-access-control.d.ts +0 -118
- package/dist/modules/auth-access-control.d.ts.map +0 -1
- package/dist/modules/auth-access-control.js +0 -832
- package/dist/modules/auth-access-control.js.map +0 -1
- package/dist/modules/campaign.d.ts +0 -20
- package/dist/modules/campaign.d.ts.map +0 -1
- package/dist/modules/campaign.js +0 -301
- package/dist/modules/campaign.js.map +0 -1
- package/dist/modules/database.d.ts +0 -14
- package/dist/modules/database.d.ts.map +0 -1
- package/dist/modules/database.js +0 -253
- package/dist/modules/database.js.map +0 -1
- package/dist/modules/deployment.d.ts +0 -17
- package/dist/modules/deployment.d.ts.map +0 -1
- package/dist/modules/deployment.js +0 -201
- package/dist/modules/deployment.js.map +0 -1
- package/dist/modules/edge-computing.d.ts +0 -130
- package/dist/modules/edge-computing.d.ts.map +0 -1
- package/dist/modules/edge-computing.js +0 -656
- package/dist/modules/edge-computing.js.map +0 -1
- package/dist/modules/load-testing.d.ts +0 -21
- package/dist/modules/load-testing.d.ts.map +0 -1
- package/dist/modules/load-testing.js +0 -372
- package/dist/modules/load-testing.js.map +0 -1
- package/dist/modules/monitoring.d.ts +0 -18
- package/dist/modules/monitoring.d.ts.map +0 -1
- package/dist/modules/monitoring.js +0 -375
- package/dist/modules/monitoring.js.map +0 -1
- package/dist/modules/onboarding.d.ts +0 -20
- package/dist/modules/onboarding.d.ts.map +0 -1
- package/dist/modules/onboarding.js +0 -455
- package/dist/modules/onboarding.js.map +0 -1
- package/dist/utils/db-client.d.ts +0 -35
- package/dist/utils/db-client.d.ts.map +0 -1
- package/dist/utils/db-client.js +0 -132
- package/dist/utils/db-client.js.map +0 -1
|
@@ -1,455 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.OnboardingModule = void 0;
|
|
7
|
-
const mail_1 = __importDefault(require("@sendgrid/mail"));
|
|
8
|
-
const chalk_1 = __importDefault(require("chalk"));
|
|
9
|
-
const ora_1 = __importDefault(require("ora"));
|
|
10
|
-
const table_1 = require("table");
|
|
11
|
-
const crypto_1 = __importDefault(require("crypto"));
|
|
12
|
-
const db_client_1 = require("../utils/db-client");
|
|
13
|
-
class OnboardingModule {
|
|
14
|
-
dbClient;
|
|
15
|
-
constructor() {
|
|
16
|
-
const sendgridKey = process.env.SENDGRID_API_KEY;
|
|
17
|
-
if (!sendgridKey) {
|
|
18
|
-
throw new Error('SENDGRID_API_KEY environment variable is required for OnboardingModule');
|
|
19
|
-
}
|
|
20
|
-
mail_1.default.setApiKey(sendgridKey);
|
|
21
|
-
// Initialize database with secure SSL configuration using AWS RDS CA bundle
|
|
22
|
-
this.dbClient = (0, db_client_1.createDbClient)();
|
|
23
|
-
}
|
|
24
|
-
async sendInvitation(email, options = {}) {
|
|
25
|
-
const spinner = (0, ora_1.default)('Sending invitation...').start();
|
|
26
|
-
try {
|
|
27
|
-
await this.dbClient.connect();
|
|
28
|
-
// Check if customer already exists
|
|
29
|
-
const existingCustomer = await this.dbClient.query('SELECT id, status FROM customers WHERE email = $1', [email]);
|
|
30
|
-
if (existingCustomer.rows.length > 0) {
|
|
31
|
-
const customer = existingCustomer.rows[0];
|
|
32
|
-
if (customer.status === 'active') {
|
|
33
|
-
spinner.fail('Customer already active');
|
|
34
|
-
return;
|
|
35
|
-
}
|
|
36
|
-
else if (customer.status === 'invited') {
|
|
37
|
-
spinner.warn('Invitation already sent');
|
|
38
|
-
console.log(chalk_1.default.yellow('\n⚠️ Resending invitation...'));
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
spinner.text = 'Generating invitation token...';
|
|
42
|
-
// Generate unique invitation token
|
|
43
|
-
const invitationToken = crypto_1.default.randomBytes(32).toString('hex');
|
|
44
|
-
const expiresAt = new Date(Date.now() + 7 * 24 * 60 * 60 * 1000); // 7 days
|
|
45
|
-
// Create or update customer record
|
|
46
|
-
if (existingCustomer.rows.length === 0) {
|
|
47
|
-
// Check if customers table exists
|
|
48
|
-
const tableExists = await this.dbClient.query(`
|
|
49
|
-
SELECT EXISTS (
|
|
50
|
-
SELECT FROM information_schema.tables
|
|
51
|
-
WHERE table_name = 'customers'
|
|
52
|
-
);
|
|
53
|
-
`);
|
|
54
|
-
if (!tableExists.rows[0].exists) {
|
|
55
|
-
spinner.text = 'Creating customers table...';
|
|
56
|
-
await this.dbClient.query(`
|
|
57
|
-
CREATE TABLE customers (
|
|
58
|
-
id SERIAL PRIMARY KEY,
|
|
59
|
-
email VARCHAR(255) UNIQUE NOT NULL,
|
|
60
|
-
organization_name VARCHAR(255),
|
|
61
|
-
tier VARCHAR(50) DEFAULT 'standard',
|
|
62
|
-
plan VARCHAR(50) DEFAULT 'enterprise',
|
|
63
|
-
status VARCHAR(50) DEFAULT 'invited',
|
|
64
|
-
invitation_token VARCHAR(255),
|
|
65
|
-
invitation_expires_at TIMESTAMP,
|
|
66
|
-
onboarding_completed_at TIMESTAMP,
|
|
67
|
-
metadata JSONB,
|
|
68
|
-
created_at TIMESTAMP DEFAULT NOW(),
|
|
69
|
-
updated_at TIMESTAMP DEFAULT NOW()
|
|
70
|
-
);
|
|
71
|
-
|
|
72
|
-
CREATE TABLE customer_features (
|
|
73
|
-
id SERIAL PRIMARY KEY,
|
|
74
|
-
customer_id INTEGER REFERENCES customers(id),
|
|
75
|
-
feature_name VARCHAR(100) NOT NULL,
|
|
76
|
-
enabled BOOLEAN DEFAULT true,
|
|
77
|
-
config JSONB,
|
|
78
|
-
created_at TIMESTAMP DEFAULT NOW()
|
|
79
|
-
);
|
|
80
|
-
|
|
81
|
-
CREATE INDEX idx_customers_email ON customers(email);
|
|
82
|
-
CREATE INDEX idx_customers_status ON customers(status);
|
|
83
|
-
CREATE INDEX idx_customer_features_customer_id ON customer_features(customer_id);
|
|
84
|
-
`);
|
|
85
|
-
}
|
|
86
|
-
await this.dbClient.query(`
|
|
87
|
-
INSERT INTO customers (email, tier, invitation_token, invitation_expires_at, status)
|
|
88
|
-
VALUES ($1, $2, $3, $4, 'invited')
|
|
89
|
-
`, [email, options.tier || 'standard', invitationToken, expiresAt]);
|
|
90
|
-
}
|
|
91
|
-
else {
|
|
92
|
-
await this.dbClient.query(`
|
|
93
|
-
UPDATE customers
|
|
94
|
-
SET invitation_token = $1,
|
|
95
|
-
invitation_expires_at = $2,
|
|
96
|
-
status = 'invited',
|
|
97
|
-
updated_at = NOW()
|
|
98
|
-
WHERE email = $3
|
|
99
|
-
`, [invitationToken, expiresAt, email]);
|
|
100
|
-
}
|
|
101
|
-
spinner.text = 'Sending invitation email...';
|
|
102
|
-
// Prepare invitation email
|
|
103
|
-
const invitationUrl = `https://www.theautonoma.io/alpha/register?token=${invitationToken}`;
|
|
104
|
-
const msg = {
|
|
105
|
-
to: email,
|
|
106
|
-
from: 'noreply@theautonoma.io',
|
|
107
|
-
subject: 'Welcome to Autonoma Alpha Program',
|
|
108
|
-
html: `
|
|
109
|
-
<div style="font-family: Arial, sans-serif; max-width: 600px; margin: 0 auto;">
|
|
110
|
-
<h1>Welcome to Autonoma Alpha Program!</h1>
|
|
111
|
-
<p>You've been invited to join the exclusive Autonoma Alpha Program.</p>
|
|
112
|
-
${options.customMessage ? `<p>${options.customMessage}</p>` : ''}
|
|
113
|
-
<p>As an Alpha customer, you'll get:</p>
|
|
114
|
-
<ul>
|
|
115
|
-
<li>Early access to Level 5 autonomous development</li>
|
|
116
|
-
<li>Direct influence on product roadmap</li>
|
|
117
|
-
<li>Dedicated support from our engineering team</li>
|
|
118
|
-
<li>Lifetime discount on all future services</li>
|
|
119
|
-
</ul>
|
|
120
|
-
<p>Click the button below to complete your registration:</p>
|
|
121
|
-
<a href="${invitationUrl}" style="display: inline-block; background-color: #7c3aed; color: white; padding: 12px 24px; text-decoration: none; border-radius: 4px; margin: 20px 0;">
|
|
122
|
-
Complete Registration
|
|
123
|
-
</a>
|
|
124
|
-
<p style="color: #666; font-size: 12px;">
|
|
125
|
-
This invitation expires in 7 days. If the button doesn't work, copy this link: ${invitationUrl}
|
|
126
|
-
</p>
|
|
127
|
-
</div>
|
|
128
|
-
`
|
|
129
|
-
};
|
|
130
|
-
await mail_1.default.send(msg);
|
|
131
|
-
spinner.succeed('Invitation sent successfully');
|
|
132
|
-
console.log(chalk_1.default.green('\n✅ Invitation Details:'));
|
|
133
|
-
console.log(` Email: ${email}`);
|
|
134
|
-
console.log(` Tier: ${options.tier || 'standard'}`);
|
|
135
|
-
console.log(` Token: ${invitationToken.substring(0, 8)}...`);
|
|
136
|
-
console.log(` Expires: ${expiresAt.toLocaleDateString()}`);
|
|
137
|
-
console.log(` URL: ${chalk_1.default.blue(invitationUrl)}`);
|
|
138
|
-
}
|
|
139
|
-
catch (error) {
|
|
140
|
-
spinner.fail('Failed to send invitation');
|
|
141
|
-
console.error(chalk_1.default.red('Error:'), error.message);
|
|
142
|
-
throw error;
|
|
143
|
-
}
|
|
144
|
-
finally {
|
|
145
|
-
await this.dbClient.end();
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
async provisionOrganization(orgName, options = {}) {
|
|
149
|
-
const spinner = (0, ora_1.default)(`Provisioning organization: ${orgName}...`).start();
|
|
150
|
-
try {
|
|
151
|
-
await this.dbClient.connect();
|
|
152
|
-
const plan = options.plan || 'enterprise';
|
|
153
|
-
const features = options.features || ['deployment', 'monitoring', 'ai-agents', 'analytics'];
|
|
154
|
-
spinner.text = 'Creating organization...';
|
|
155
|
-
// Check if organizations table exists
|
|
156
|
-
const tableExists = await this.dbClient.query(`
|
|
157
|
-
SELECT EXISTS (
|
|
158
|
-
SELECT FROM information_schema.tables
|
|
159
|
-
WHERE table_name = 'organizations'
|
|
160
|
-
);
|
|
161
|
-
`);
|
|
162
|
-
if (!tableExists.rows[0].exists) {
|
|
163
|
-
spinner.text = 'Setting up organization schema...';
|
|
164
|
-
await this.dbClient.query(`
|
|
165
|
-
CREATE TABLE organizations (
|
|
166
|
-
id SERIAL PRIMARY KEY,
|
|
167
|
-
name VARCHAR(255) UNIQUE NOT NULL,
|
|
168
|
-
slug VARCHAR(255) UNIQUE NOT NULL,
|
|
169
|
-
plan VARCHAR(50) DEFAULT 'enterprise',
|
|
170
|
-
status VARCHAR(50) DEFAULT 'provisioning',
|
|
171
|
-
api_key VARCHAR(255),
|
|
172
|
-
webhook_url VARCHAR(500),
|
|
173
|
-
config JSONB,
|
|
174
|
-
created_at TIMESTAMP DEFAULT NOW(),
|
|
175
|
-
updated_at TIMESTAMP DEFAULT NOW()
|
|
176
|
-
);
|
|
177
|
-
|
|
178
|
-
CREATE TABLE organization_users (
|
|
179
|
-
id SERIAL PRIMARY KEY,
|
|
180
|
-
organization_id INTEGER REFERENCES organizations(id),
|
|
181
|
-
customer_id INTEGER REFERENCES customers(id),
|
|
182
|
-
role VARCHAR(50) DEFAULT 'member',
|
|
183
|
-
permissions JSONB,
|
|
184
|
-
created_at TIMESTAMP DEFAULT NOW()
|
|
185
|
-
);
|
|
186
|
-
|
|
187
|
-
CREATE INDEX idx_organizations_slug ON organizations(slug);
|
|
188
|
-
CREATE INDEX idx_organization_users_org_id ON organization_users(organization_id);
|
|
189
|
-
`);
|
|
190
|
-
}
|
|
191
|
-
// Generate organization slug and API key
|
|
192
|
-
const slug = orgName.toLowerCase().replace(/[^a-z0-9]/g, '-');
|
|
193
|
-
const apiKey = `ak_${crypto_1.default.randomBytes(32).toString('hex')}`;
|
|
194
|
-
// Create organization
|
|
195
|
-
const orgResult = await this.dbClient.query(`
|
|
196
|
-
INSERT INTO organizations (name, slug, plan, api_key, config, status)
|
|
197
|
-
VALUES ($1, $2, $3, $4, $5, 'provisioning')
|
|
198
|
-
RETURNING id
|
|
199
|
-
`, [
|
|
200
|
-
orgName,
|
|
201
|
-
slug,
|
|
202
|
-
plan,
|
|
203
|
-
apiKey,
|
|
204
|
-
JSON.stringify({
|
|
205
|
-
features: features,
|
|
206
|
-
limits: this.getPlanLimits(plan),
|
|
207
|
-
customConfig: options.customConfig || {}
|
|
208
|
-
})
|
|
209
|
-
]);
|
|
210
|
-
const orgId = orgResult.rows[0].id;
|
|
211
|
-
spinner.text = 'Provisioning infrastructure...';
|
|
212
|
-
// Simulate infrastructure provisioning steps
|
|
213
|
-
const provisioningSteps = [
|
|
214
|
-
{ name: 'Creating AWS resources', duration: 2000 },
|
|
215
|
-
{ name: 'Setting up database', duration: 1500 },
|
|
216
|
-
{ name: 'Configuring AI agents', duration: 1000 },
|
|
217
|
-
{ name: 'Enabling monitoring', duration: 500 },
|
|
218
|
-
{ name: 'Generating API credentials', duration: 500 }
|
|
219
|
-
];
|
|
220
|
-
for (const step of provisioningSteps) {
|
|
221
|
-
spinner.text = step.name + '...';
|
|
222
|
-
await new Promise(resolve => setTimeout(resolve, step.duration));
|
|
223
|
-
}
|
|
224
|
-
// Mark organization as active
|
|
225
|
-
await this.dbClient.query(`
|
|
226
|
-
UPDATE organizations
|
|
227
|
-
SET status = 'active',
|
|
228
|
-
updated_at = NOW()
|
|
229
|
-
WHERE id = $1
|
|
230
|
-
`, [orgId]);
|
|
231
|
-
spinner.succeed('Organization provisioned successfully');
|
|
232
|
-
// Display provisioning summary
|
|
233
|
-
console.log(chalk_1.default.cyan('\n🏢 Organization Details:\n'));
|
|
234
|
-
const summaryData = [
|
|
235
|
-
['Property', 'Value'],
|
|
236
|
-
['Name', orgName],
|
|
237
|
-
['Slug', slug],
|
|
238
|
-
['Plan', plan],
|
|
239
|
-
['API Key', `${apiKey.substring(0, 12)}...`],
|
|
240
|
-
['Status', chalk_1.default.green('Active')],
|
|
241
|
-
['Features', features.join(', ')]
|
|
242
|
-
];
|
|
243
|
-
console.log((0, table_1.table)(summaryData));
|
|
244
|
-
// Display plan limits
|
|
245
|
-
const limits = this.getPlanLimits(plan);
|
|
246
|
-
console.log(chalk_1.default.cyan('\n📊 Plan Limits:\n'));
|
|
247
|
-
console.log(` Deployments/month: ${limits.deployments}`);
|
|
248
|
-
console.log(` API Calls/month: ${limits.apiCalls}`);
|
|
249
|
-
console.log(` AI Agents: ${limits.aiAgents}`);
|
|
250
|
-
console.log(` Team Members: ${limits.teamMembers}`);
|
|
251
|
-
// Generate onboarding URLs
|
|
252
|
-
console.log(chalk_1.default.cyan('\n🔗 Onboarding URLs:\n'));
|
|
253
|
-
console.log(` Dashboard: ${chalk_1.default.blue(`https://www.theautonoma.io/dashboard/${slug}`)}`);
|
|
254
|
-
console.log(` API Docs: ${chalk_1.default.blue(`https://www.theautonoma.io/docs/api/${slug}`)}`);
|
|
255
|
-
console.log(` Webhooks: ${chalk_1.default.blue(`https://www.theautonoma.io/webhooks/${slug}`)}`);
|
|
256
|
-
// Next steps
|
|
257
|
-
console.log(chalk_1.default.cyan('\n✅ Next Steps:\n'));
|
|
258
|
-
console.log(' 1. Share API key with development team');
|
|
259
|
-
console.log(' 2. Configure webhook endpoints');
|
|
260
|
-
console.log(' 3. Install Autonoma SDK in your codebase');
|
|
261
|
-
console.log(' 4. Deploy your first autonomous agent');
|
|
262
|
-
}
|
|
263
|
-
catch (error) {
|
|
264
|
-
spinner.fail('Provisioning failed');
|
|
265
|
-
console.error(chalk_1.default.red('Error:'), error.message);
|
|
266
|
-
throw error;
|
|
267
|
-
}
|
|
268
|
-
finally {
|
|
269
|
-
await this.dbClient.end();
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
async validateSetup(orgName) {
|
|
273
|
-
const spinner = (0, ora_1.default)('Validating organization setup...').start();
|
|
274
|
-
try {
|
|
275
|
-
await this.dbClient.connect();
|
|
276
|
-
// Get organization
|
|
277
|
-
const orgResult = await this.dbClient.query(`
|
|
278
|
-
SELECT
|
|
279
|
-
o.*,
|
|
280
|
-
COUNT(DISTINCT ou.customer_id) as user_count
|
|
281
|
-
FROM organizations o
|
|
282
|
-
LEFT JOIN organization_users ou ON o.id = ou.organization_id
|
|
283
|
-
WHERE o.name = $1 OR o.slug = $1
|
|
284
|
-
GROUP BY o.id
|
|
285
|
-
`, [orgName.toLowerCase()]);
|
|
286
|
-
if (orgResult.rows.length === 0) {
|
|
287
|
-
spinner.fail('Organization not found');
|
|
288
|
-
return;
|
|
289
|
-
}
|
|
290
|
-
const org = orgResult.rows[0];
|
|
291
|
-
const config = org.config || {};
|
|
292
|
-
spinner.stop();
|
|
293
|
-
console.log(chalk_1.default.cyan('\n🔍 Setup Validation Report\n'));
|
|
294
|
-
console.log(`Organization: ${org.name}`);
|
|
295
|
-
console.log(`Status: ${this.getStatusIcon(org.status)}`);
|
|
296
|
-
console.log(`Created: ${org.created_at.toLocaleDateString()}`);
|
|
297
|
-
// Validation checks
|
|
298
|
-
const checks = [
|
|
299
|
-
{
|
|
300
|
-
name: 'Organization Status',
|
|
301
|
-
passed: org.status === 'active',
|
|
302
|
-
message: org.status === 'active' ? 'Active' : `Status: ${org.status}`
|
|
303
|
-
},
|
|
304
|
-
{
|
|
305
|
-
name: 'API Key Generated',
|
|
306
|
-
passed: !!org.api_key,
|
|
307
|
-
message: org.api_key ? 'API key exists' : 'No API key'
|
|
308
|
-
},
|
|
309
|
-
{
|
|
310
|
-
name: 'Users Added',
|
|
311
|
-
passed: org.user_count > 0,
|
|
312
|
-
message: `${org.user_count} user(s) added`
|
|
313
|
-
},
|
|
314
|
-
{
|
|
315
|
-
name: 'Webhook Configured',
|
|
316
|
-
passed: !!org.webhook_url,
|
|
317
|
-
message: org.webhook_url ? org.webhook_url : 'No webhook URL'
|
|
318
|
-
},
|
|
319
|
-
{
|
|
320
|
-
name: 'Features Enabled',
|
|
321
|
-
passed: config.features && config.features.length > 0,
|
|
322
|
-
message: config.features ? `${config.features.length} features` : 'No features'
|
|
323
|
-
}
|
|
324
|
-
];
|
|
325
|
-
// Connectivity checks
|
|
326
|
-
spinner.start('Running connectivity checks...');
|
|
327
|
-
// Check API endpoint
|
|
328
|
-
let apiCheck = false;
|
|
329
|
-
try {
|
|
330
|
-
const apiResponse = await fetch(`https://www.theautonoma.io/api/health`);
|
|
331
|
-
apiCheck = apiResponse.ok;
|
|
332
|
-
}
|
|
333
|
-
catch (error) {
|
|
334
|
-
apiCheck = false;
|
|
335
|
-
}
|
|
336
|
-
checks.push({
|
|
337
|
-
name: 'API Connectivity',
|
|
338
|
-
passed: apiCheck,
|
|
339
|
-
message: apiCheck ? 'API accessible' : 'API unreachable'
|
|
340
|
-
});
|
|
341
|
-
// Check webhook if configured
|
|
342
|
-
if (org.webhook_url) {
|
|
343
|
-
let webhookCheck = false;
|
|
344
|
-
try {
|
|
345
|
-
const webhookResponse = await fetch(org.webhook_url, {
|
|
346
|
-
method: 'POST',
|
|
347
|
-
headers: { 'Content-Type': 'application/json' },
|
|
348
|
-
body: JSON.stringify({ type: 'test', timestamp: Date.now() })
|
|
349
|
-
});
|
|
350
|
-
webhookCheck = webhookResponse.ok;
|
|
351
|
-
}
|
|
352
|
-
catch (error) {
|
|
353
|
-
webhookCheck = false;
|
|
354
|
-
}
|
|
355
|
-
checks.push({
|
|
356
|
-
name: 'Webhook Connectivity',
|
|
357
|
-
passed: webhookCheck,
|
|
358
|
-
message: webhookCheck ? 'Webhook responsive' : 'Webhook unreachable'
|
|
359
|
-
});
|
|
360
|
-
}
|
|
361
|
-
spinner.stop();
|
|
362
|
-
// Display validation results
|
|
363
|
-
console.log(chalk_1.default.cyan('\n📋 Validation Results:\n'));
|
|
364
|
-
const tableData = [
|
|
365
|
-
['Check', 'Status', 'Details'],
|
|
366
|
-
...checks.map(check => [
|
|
367
|
-
check.name,
|
|
368
|
-
check.passed ? chalk_1.default.green('✅ Passed') : chalk_1.default.red('❌ Failed'),
|
|
369
|
-
check.message
|
|
370
|
-
])
|
|
371
|
-
];
|
|
372
|
-
console.log((0, table_1.table)(tableData));
|
|
373
|
-
// Calculate score
|
|
374
|
-
const passedChecks = checks.filter(c => c.passed).length;
|
|
375
|
-
const totalChecks = checks.length;
|
|
376
|
-
const score = Math.round((passedChecks / totalChecks) * 100);
|
|
377
|
-
console.log(chalk_1.default.cyan('\n📊 Validation Score:\n'));
|
|
378
|
-
console.log(` Score: ${score}% (${passedChecks}/${totalChecks} passed)`);
|
|
379
|
-
if (score === 100) {
|
|
380
|
-
console.log(chalk_1.default.green('\n✅ Organization is fully configured and ready!'));
|
|
381
|
-
}
|
|
382
|
-
else if (score >= 80) {
|
|
383
|
-
console.log(chalk_1.default.yellow('\n⚠️ Organization is mostly ready but has minor issues'));
|
|
384
|
-
}
|
|
385
|
-
else {
|
|
386
|
-
console.log(chalk_1.default.red('\n❌ Organization setup is incomplete'));
|
|
387
|
-
}
|
|
388
|
-
// Recommendations
|
|
389
|
-
if (score < 100) {
|
|
390
|
-
console.log(chalk_1.default.cyan('\n💡 Recommendations:\n'));
|
|
391
|
-
checks.filter(c => !c.passed).forEach(check => {
|
|
392
|
-
switch (check.name) {
|
|
393
|
-
case 'Users Added':
|
|
394
|
-
console.log(' • Invite team members to the organization');
|
|
395
|
-
break;
|
|
396
|
-
case 'Webhook Configured':
|
|
397
|
-
console.log(' • Configure webhook URL for event notifications');
|
|
398
|
-
break;
|
|
399
|
-
case 'API Connectivity':
|
|
400
|
-
console.log(' • Check network connectivity and firewall rules');
|
|
401
|
-
break;
|
|
402
|
-
case 'Webhook Connectivity':
|
|
403
|
-
console.log(' • Verify webhook endpoint is accessible and responsive');
|
|
404
|
-
break;
|
|
405
|
-
}
|
|
406
|
-
});
|
|
407
|
-
}
|
|
408
|
-
}
|
|
409
|
-
catch (error) {
|
|
410
|
-
spinner.fail('Validation failed');
|
|
411
|
-
console.error(chalk_1.default.red('Error:'), error.message);
|
|
412
|
-
throw error;
|
|
413
|
-
}
|
|
414
|
-
finally {
|
|
415
|
-
await this.dbClient.end();
|
|
416
|
-
}
|
|
417
|
-
}
|
|
418
|
-
getPlanLimits(plan) {
|
|
419
|
-
const limits = {
|
|
420
|
-
'starter': {
|
|
421
|
-
deployments: 100,
|
|
422
|
-
apiCalls: 10000,
|
|
423
|
-
aiAgents: 3,
|
|
424
|
-
teamMembers: 5
|
|
425
|
-
},
|
|
426
|
-
'standard': {
|
|
427
|
-
deployments: 500,
|
|
428
|
-
apiCalls: 100000,
|
|
429
|
-
aiAgents: 10,
|
|
430
|
-
teamMembers: 20
|
|
431
|
-
},
|
|
432
|
-
'enterprise': {
|
|
433
|
-
deployments: 'Unlimited',
|
|
434
|
-
apiCalls: 'Unlimited',
|
|
435
|
-
aiAgents: 'Unlimited',
|
|
436
|
-
teamMembers: 'Unlimited'
|
|
437
|
-
}
|
|
438
|
-
};
|
|
439
|
-
return limits[plan] || limits['standard'];
|
|
440
|
-
}
|
|
441
|
-
getStatusIcon(status) {
|
|
442
|
-
switch (status) {
|
|
443
|
-
case 'active':
|
|
444
|
-
return chalk_1.default.green('✅ Active');
|
|
445
|
-
case 'provisioning':
|
|
446
|
-
return chalk_1.default.yellow('⏳ Provisioning');
|
|
447
|
-
case 'suspended':
|
|
448
|
-
return chalk_1.default.red('❌ Suspended');
|
|
449
|
-
default:
|
|
450
|
-
return status;
|
|
451
|
-
}
|
|
452
|
-
}
|
|
453
|
-
}
|
|
454
|
-
exports.OnboardingModule = OnboardingModule;
|
|
455
|
-
//# sourceMappingURL=onboarding.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"onboarding.js","sourceRoot":"","sources":["../../src/modules/onboarding.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Database Client Utility
|
|
3
|
-
*
|
|
4
|
-
* Provides secure PostgreSQL client with proper AWS RDS certificate validation.
|
|
5
|
-
* Uses AWS RDS global CA bundle instead of disabling SSL verification.
|
|
6
|
-
*
|
|
7
|
-
* Security: This replaces the insecure NODE_TLS_REJECT_UNAUTHORIZED=0 approach
|
|
8
|
-
* Reference: AWS RDS Certificate Authority documentation
|
|
9
|
-
*/
|
|
10
|
-
import { Client, ClientConfig } from 'pg';
|
|
11
|
-
/**
|
|
12
|
-
* Get SSL configuration for PostgreSQL client
|
|
13
|
-
* Uses CA bundle if available, falls back to insecure mode with warning
|
|
14
|
-
*/
|
|
15
|
-
export declare function getSSLConfig(): ClientConfig['ssl'];
|
|
16
|
-
/**
|
|
17
|
-
* Default database connection string
|
|
18
|
-
* Uses environment variable or falls back to default
|
|
19
|
-
*/
|
|
20
|
-
export declare const DEFAULT_CONNECTION_STRING: string;
|
|
21
|
-
/**
|
|
22
|
-
* Create a new PostgreSQL client with secure SSL configuration
|
|
23
|
-
*
|
|
24
|
-
* @param connectionString - Optional connection string (defaults to DATABASE_URL)
|
|
25
|
-
* @returns Configured pg Client instance
|
|
26
|
-
*/
|
|
27
|
-
export declare function createDbClient(connectionString?: string): Client;
|
|
28
|
-
/**
|
|
29
|
-
* Create a new PostgreSQL client and connect it
|
|
30
|
-
*
|
|
31
|
-
* @param connectionString - Optional connection string (defaults to DATABASE_URL)
|
|
32
|
-
* @returns Promise resolving to connected pg Client instance
|
|
33
|
-
*/
|
|
34
|
-
export declare function createConnectedDbClient(connectionString?: string): Promise<Client>;
|
|
35
|
-
//# sourceMappingURL=db-client.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"db-client.d.ts","sourceRoot":"","sources":["../../src/utils/db-client.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AA2C1C;;;GAGG;AACH,wBAAgB,YAAY,IAAI,YAAY,CAAC,KAAK,CAAC,CAclD;AAED;;;GAGG;AACH,eAAO,MAAM,yBAAyB,EAAE,MAAuC,CAAC;AAEhF;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,MAAM,CAKhE;AAED;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAAC,gBAAgB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAIxF"}
|
package/dist/utils/db-client.js
DELETED
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Database Client Utility
|
|
4
|
-
*
|
|
5
|
-
* Provides secure PostgreSQL client with proper AWS RDS certificate validation.
|
|
6
|
-
* Uses AWS RDS global CA bundle instead of disabling SSL verification.
|
|
7
|
-
*
|
|
8
|
-
* Security: This replaces the insecure NODE_TLS_REJECT_UNAUTHORIZED=0 approach
|
|
9
|
-
* Reference: AWS RDS Certificate Authority documentation
|
|
10
|
-
*/
|
|
11
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
12
|
-
if (k2 === undefined) k2 = k;
|
|
13
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
14
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
15
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
16
|
-
}
|
|
17
|
-
Object.defineProperty(o, k2, desc);
|
|
18
|
-
}) : (function(o, m, k, k2) {
|
|
19
|
-
if (k2 === undefined) k2 = k;
|
|
20
|
-
o[k2] = m[k];
|
|
21
|
-
}));
|
|
22
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
23
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
24
|
-
}) : function(o, v) {
|
|
25
|
-
o["default"] = v;
|
|
26
|
-
});
|
|
27
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
28
|
-
var ownKeys = function(o) {
|
|
29
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
30
|
-
var ar = [];
|
|
31
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
32
|
-
return ar;
|
|
33
|
-
};
|
|
34
|
-
return ownKeys(o);
|
|
35
|
-
};
|
|
36
|
-
return function (mod) {
|
|
37
|
-
if (mod && mod.__esModule) return mod;
|
|
38
|
-
var result = {};
|
|
39
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
40
|
-
__setModuleDefault(result, mod);
|
|
41
|
-
return result;
|
|
42
|
-
};
|
|
43
|
-
})();
|
|
44
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
45
|
-
exports.DEFAULT_CONNECTION_STRING = void 0;
|
|
46
|
-
exports.getSSLConfig = getSSLConfig;
|
|
47
|
-
exports.createDbClient = createDbClient;
|
|
48
|
-
exports.createConnectedDbClient = createConnectedDbClient;
|
|
49
|
-
const pg_1 = require("pg");
|
|
50
|
-
const fs = __importStar(require("fs"));
|
|
51
|
-
const path = __importStar(require("path"));
|
|
52
|
-
// CA bundle paths to check (in order of preference)
|
|
53
|
-
const CA_BUNDLE_PATHS = [
|
|
54
|
-
path.join(__dirname, '../../certs/rds-global-bundle.pem'),
|
|
55
|
-
path.join(__dirname, '../../../certs/rds-global-bundle.pem'),
|
|
56
|
-
'/app/certs/rds-global-bundle.pem',
|
|
57
|
-
'/etc/ssl/certs/rds-global-bundle.pem'
|
|
58
|
-
];
|
|
59
|
-
// Cache the certificate to avoid repeated file reads
|
|
60
|
-
let rdsCaCertificate = null;
|
|
61
|
-
let certificateLoaded = false;
|
|
62
|
-
/**
|
|
63
|
-
* Load the RDS CA certificate bundle
|
|
64
|
-
* Tries multiple paths and caches the result
|
|
65
|
-
*/
|
|
66
|
-
function loadCaCertificate() {
|
|
67
|
-
if (certificateLoaded) {
|
|
68
|
-
return rdsCaCertificate;
|
|
69
|
-
}
|
|
70
|
-
for (const certPath of CA_BUNDLE_PATHS) {
|
|
71
|
-
try {
|
|
72
|
-
if (fs.existsSync(certPath)) {
|
|
73
|
-
rdsCaCertificate = fs.readFileSync(certPath, 'utf-8');
|
|
74
|
-
console.log(`[db-client] Loaded RDS CA bundle from: ${certPath}`);
|
|
75
|
-
certificateLoaded = true;
|
|
76
|
-
return rdsCaCertificate;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
catch (error) {
|
|
80
|
-
// Continue to next path
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
console.warn('[db-client] Could not load RDS CA bundle from any path, falling back to insecure mode');
|
|
84
|
-
certificateLoaded = true;
|
|
85
|
-
return null;
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* Get SSL configuration for PostgreSQL client
|
|
89
|
-
* Uses CA bundle if available, falls back to insecure mode with warning
|
|
90
|
-
*/
|
|
91
|
-
function getSSLConfig() {
|
|
92
|
-
const caCert = loadCaCertificate();
|
|
93
|
-
if (caCert) {
|
|
94
|
-
return {
|
|
95
|
-
rejectUnauthorized: true,
|
|
96
|
-
ca: caCert
|
|
97
|
-
};
|
|
98
|
-
}
|
|
99
|
-
// Fallback to insecure mode (only for development/testing)
|
|
100
|
-
return {
|
|
101
|
-
rejectUnauthorized: false
|
|
102
|
-
};
|
|
103
|
-
}
|
|
104
|
-
/**
|
|
105
|
-
* Default database connection string
|
|
106
|
-
* Uses environment variable or falls back to default
|
|
107
|
-
*/
|
|
108
|
-
exports.DEFAULT_CONNECTION_STRING = process.env.DATABASE_URL || '';
|
|
109
|
-
/**
|
|
110
|
-
* Create a new PostgreSQL client with secure SSL configuration
|
|
111
|
-
*
|
|
112
|
-
* @param connectionString - Optional connection string (defaults to DATABASE_URL)
|
|
113
|
-
* @returns Configured pg Client instance
|
|
114
|
-
*/
|
|
115
|
-
function createDbClient(connectionString) {
|
|
116
|
-
return new pg_1.Client({
|
|
117
|
-
connectionString: connectionString || exports.DEFAULT_CONNECTION_STRING,
|
|
118
|
-
ssl: getSSLConfig()
|
|
119
|
-
});
|
|
120
|
-
}
|
|
121
|
-
/**
|
|
122
|
-
* Create a new PostgreSQL client and connect it
|
|
123
|
-
*
|
|
124
|
-
* @param connectionString - Optional connection string (defaults to DATABASE_URL)
|
|
125
|
-
* @returns Promise resolving to connected pg Client instance
|
|
126
|
-
*/
|
|
127
|
-
async function createConnectedDbClient(connectionString) {
|
|
128
|
-
const client = createDbClient(connectionString);
|
|
129
|
-
await client.connect();
|
|
130
|
-
return client;
|
|
131
|
-
}
|
|
132
|
-
//# sourceMappingURL=db-client.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"db-client.js","sourceRoot":"","sources":["../../src/utils/db-client.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiDH,oCAcC;AAcD,wCAKC;AAQD,0DAIC;AA5FD,2BAA0C;AAC1C,uCAAyB;AACzB,2CAA6B;AAE7B,oDAAoD;AACpD,MAAM,eAAe,GAAG;IACtB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,mCAAmC,CAAC;IACzD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,sCAAsC,CAAC;IAC5D,kCAAkC;IAClC,sCAAsC;CACvC,CAAC;AAEF,qDAAqD;AACrD,IAAI,gBAAgB,GAAkB,IAAI,CAAC;AAC3C,IAAI,iBAAiB,GAAG,KAAK,CAAC;AAE9B;;;GAGG;AACH,SAAS,iBAAiB;IACxB,IAAI,iBAAiB,EAAE,CAAC;QACtB,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAED,KAAK,MAAM,QAAQ,IAAI,eAAe,EAAE,CAAC;QACvC,IAAI,CAAC;YACH,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC5B,gBAAgB,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBACtD,OAAO,CAAC,GAAG,CAAC,0CAA0C,QAAQ,EAAE,CAAC,CAAC;gBAClE,iBAAiB,GAAG,IAAI,CAAC;gBACzB,OAAO,gBAAgB,CAAC;YAC1B,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,wBAAwB;QAC1B,CAAC;IACH,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,uFAAuF,CAAC,CAAC;IACtG,iBAAiB,GAAG,IAAI,CAAC;IACzB,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,SAAgB,YAAY;IAC1B,MAAM,MAAM,GAAG,iBAAiB,EAAE,CAAC;IAEnC,IAAI,MAAM,EAAE,CAAC;QACX,OAAO;YACL,kBAAkB,EAAE,IAAI;YACxB,EAAE,EAAE,MAAM;SACX,CAAC;IACJ,CAAC;IAED,2DAA2D;IAC3D,OAAO;QACL,kBAAkB,EAAE,KAAK;KAC1B,CAAC;AACJ,CAAC;AAED;;;GAGG;AACU,QAAA,yBAAyB,GAAW,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC;AAEhF;;;;;GAKG;AACH,SAAgB,cAAc,CAAC,gBAAyB;IACtD,OAAO,IAAI,WAAM,CAAC;QAChB,gBAAgB,EAAE,gBAAgB,IAAI,iCAAyB;QAC/D,GAAG,EAAE,YAAY,EAAE;KACpB,CAAC,CAAC;AACL,CAAC;AAED;;;;;GAKG;AACI,KAAK,UAAU,uBAAuB,CAAC,gBAAyB;IACrE,MAAM,MAAM,GAAG,cAAc,CAAC,gBAAgB,CAAC,CAAC;IAChD,MAAM,MAAM,CAAC,OAAO,EAAE,CAAC;IACvB,OAAO,MAAM,CAAC;AAChB,CAAC"}
|