tractatus/scripts/test-stripe-connection.js
TheFlow ac2db33732 fix(submissions): restructure Economist package and fix article display
- Create Economist SubmissionTracking package correctly:
  * mainArticle = full blog post content
  * coverLetter = 216-word SIR— letter
  * Links to blog post via blogPostId
- Archive 'Letter to The Economist' from blog posts (it's the cover letter)
- Fix date display on article cards (use published_at)
- Target publication already displaying via blue badge

Database changes:
- Make blogPostId optional in SubmissionTracking model
- Economist package ID: 68fa85ae49d4900e7f2ecd83
- Le Monde package ID: 68fa2abd2e6acd5691932150

Next: Enhanced modal with tabs, validation, export

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-24 08:47:42 +13:00

82 lines
3.1 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env node
/**
* Test Stripe API Connection
* Verifies that Stripe test keys are configured correctly and can connect to the API
*/
require('dotenv').config();
const stripe = require('stripe')(process.env.STRIPE_SECRET_KEY);
async function testStripeConnection() {
try {
console.log('\n🔍 Testing Stripe API connection...\n');
console.log(`📋 Environment: ${process.env.NODE_ENV || 'development'}`);
console.log(`🔑 Using key: ${process.env.STRIPE_SECRET_KEY?.substring(0, 20)}...`);
console.log(`🔓 Public key: ${process.env.STRIPE_PUBLISHABLE_KEY?.substring(0, 20)}...\n`);
// Test 1: List existing products
console.log('📦 Checking existing products...');
const products = await stripe.products.list({ limit: 10 });
console.log(`✅ Found ${products.data.length} existing products in test mode`);
if (products.data.length > 0) {
products.data.forEach(p => {
console.log(`${p.name} (${p.id})`);
});
} else {
console.log(' No products created yet');
}
// Test 2: List existing prices
console.log('\n💰 Checking existing prices...');
const prices = await stripe.prices.list({ limit: 10 });
console.log(`✅ Found ${prices.data.length} existing prices in test mode`);
if (prices.data.length > 0) {
prices.data.forEach(p => {
const amount = p.unit_amount ? `${p.currency.toUpperCase()} ${(p.unit_amount / 100).toFixed(2)}` : 'Variable';
const interval = p.recurring ? `/ ${p.recurring.interval}` : '(one-time)';
console.log(`${p.id}: ${amount} ${interval}`);
});
} else {
console.log(' No prices created yet');
}
// Test 3: Check webhook endpoints
console.log('\n🔔 Checking webhook endpoints...');
const webhooks = await stripe.webhookEndpoints.list({ limit: 10 });
console.log(`✅ Found ${webhooks.data.length} webhook endpoint(s)`);
if (webhooks.data.length > 0) {
webhooks.data.forEach(w => {
console.log(`${w.url}`);
console.log(` Status: ${w.status}`);
console.log(` Events: ${w.enabled_events.length} enabled`);
});
} else {
console.log(' ⚠️ No webhook endpoints configured yet');
}
console.log('\n✅ Stripe API connection successful!\n');
console.log('📋 Next steps:');
console.log(' 1. Create product "Tractatus Framework Support" in Stripe Dashboard');
console.log(' 2. Create 3 monthly price tiers ($5, $15, $50 NZD)');
console.log(' 3. Configure webhook endpoint');
console.log(' 4. Update .env with product/price IDs\n');
} catch (error) {
console.error('\n❌ Stripe API error:', error.message);
if (error.type === 'StripeAuthenticationError') {
console.error('\n⚠ Authentication failed. Check that STRIPE_SECRET_KEY in .env is correct.');
} else if (error.type === 'StripeConnectionError') {
console.error('\n⚠ Network error. Check your internet connection.');
}
console.error('\nFull error:', error);
process.exit(1);
}
}
testStripeConnection();