226 lines
6.4 KiB
TypeScript
226 lines
6.4 KiB
TypeScript
|
|
// SolaceNet Seed Script
|
||
|
|
// Populates initial capability catalog
|
||
|
|
|
||
|
|
import { capabilityRegistryService } from '../src/core/solacenet/registry/capability-registry.service';
|
||
|
|
import { logger } from '../src/infrastructure/monitoring/logger';
|
||
|
|
|
||
|
|
async function seedCapabilities() {
|
||
|
|
logger.info('Starting SolaceNet capability seed...');
|
||
|
|
|
||
|
|
const capabilities = [
|
||
|
|
// Core Platform Primitives
|
||
|
|
{
|
||
|
|
capabilityId: 'tenant-service',
|
||
|
|
name: 'Tenant Service',
|
||
|
|
description: 'Tenant, program, and environment management',
|
||
|
|
defaultState: 'enabled',
|
||
|
|
},
|
||
|
|
{
|
||
|
|
capabilityId: 'iam-auth',
|
||
|
|
name: 'IAM/Auth Service',
|
||
|
|
description: 'OIDC, RBAC/ABAC, service-to-service authentication',
|
||
|
|
defaultState: 'enabled',
|
||
|
|
},
|
||
|
|
{
|
||
|
|
capabilityId: 'kyc-kyb',
|
||
|
|
name: 'KYC/KYB Orchestration',
|
||
|
|
description: 'Workflow, document intake, verification',
|
||
|
|
defaultState: 'enabled',
|
||
|
|
},
|
||
|
|
{
|
||
|
|
capabilityId: 'aml-monitoring',
|
||
|
|
name: 'AML Monitoring',
|
||
|
|
description: 'Transaction monitoring rules and scoring',
|
||
|
|
defaultState: 'enabled',
|
||
|
|
},
|
||
|
|
{
|
||
|
|
capabilityId: 'ledger',
|
||
|
|
name: 'Ledger Service',
|
||
|
|
description: 'Double-entry, immutable journal',
|
||
|
|
defaultState: 'enabled',
|
||
|
|
},
|
||
|
|
{
|
||
|
|
capabilityId: 'limits-velocity',
|
||
|
|
name: 'Limits & Velocity Controls',
|
||
|
|
description: 'Per user/account/merchant limits',
|
||
|
|
defaultState: 'enabled',
|
||
|
|
},
|
||
|
|
{
|
||
|
|
capabilityId: 'fees-pricing',
|
||
|
|
name: 'Fees & Pricing Engine',
|
||
|
|
description: 'Fee schedules, interchange sharing, tiering',
|
||
|
|
defaultState: 'enabled',
|
||
|
|
},
|
||
|
|
{
|
||
|
|
capabilityId: 'risk-rules',
|
||
|
|
name: 'Risk Rules Engine',
|
||
|
|
description: 'Configurable fraud detection rules',
|
||
|
|
defaultState: 'enabled',
|
||
|
|
},
|
||
|
|
|
||
|
|
// Payments & Merchant
|
||
|
|
{
|
||
|
|
capabilityId: 'payment-gateway',
|
||
|
|
name: 'Payment Gateway',
|
||
|
|
description: 'Pay-in intents, captures, refunds',
|
||
|
|
defaultState: 'disabled',
|
||
|
|
dependencies: ['ledger', 'limits-velocity', 'fees-pricing'],
|
||
|
|
},
|
||
|
|
{
|
||
|
|
capabilityId: 'merchant-onboarding',
|
||
|
|
name: 'Merchant Onboarding',
|
||
|
|
description: 'KYB + underwriting',
|
||
|
|
defaultState: 'disabled',
|
||
|
|
dependencies: ['kyc-kyb'],
|
||
|
|
},
|
||
|
|
{
|
||
|
|
capabilityId: 'merchant-processing',
|
||
|
|
name: 'Merchant Processing',
|
||
|
|
description: 'Authorization/capture/refund',
|
||
|
|
defaultState: 'disabled',
|
||
|
|
dependencies: ['payment-gateway'],
|
||
|
|
},
|
||
|
|
{
|
||
|
|
capabilityId: 'disputes',
|
||
|
|
name: 'Disputes/Chargebacks',
|
||
|
|
description: 'Representment workflows',
|
||
|
|
defaultState: 'disabled',
|
||
|
|
dependencies: ['merchant-processing'],
|
||
|
|
},
|
||
|
|
{
|
||
|
|
capabilityId: 'payouts',
|
||
|
|
name: 'Payouts',
|
||
|
|
description: 'Bank payout, push-to-card payout',
|
||
|
|
defaultState: 'disabled',
|
||
|
|
dependencies: ['payment-gateway', 'ledger'],
|
||
|
|
},
|
||
|
|
|
||
|
|
// Cards
|
||
|
|
{
|
||
|
|
capabilityId: 'card-issuing',
|
||
|
|
name: 'Card Issuing',
|
||
|
|
description: 'Virtual/physical card issuance',
|
||
|
|
defaultState: 'disabled',
|
||
|
|
dependencies: ['ledger', 'risk-rules'],
|
||
|
|
},
|
||
|
|
{
|
||
|
|
capabilityId: 'card-lifecycle',
|
||
|
|
name: 'Card Lifecycle',
|
||
|
|
description: 'Create/activate/PIN/replace',
|
||
|
|
defaultState: 'disabled',
|
||
|
|
dependencies: ['card-issuing'],
|
||
|
|
},
|
||
|
|
{
|
||
|
|
capabilityId: 'card-controls',
|
||
|
|
name: 'Card Controls',
|
||
|
|
description: 'Freeze, limits, MCC/merchant category blocks',
|
||
|
|
defaultState: 'disabled',
|
||
|
|
dependencies: ['card-issuing'],
|
||
|
|
},
|
||
|
|
{
|
||
|
|
capabilityId: 'authorization-decisioning',
|
||
|
|
name: 'Authorization Decisioning',
|
||
|
|
description: 'Real-time rules + risk',
|
||
|
|
defaultState: 'disabled',
|
||
|
|
dependencies: ['card-issuing', 'risk-rules'],
|
||
|
|
},
|
||
|
|
|
||
|
|
// Wallets & Transfers
|
||
|
|
{
|
||
|
|
capabilityId: 'wallet-accounts',
|
||
|
|
name: 'Wallet Accounts',
|
||
|
|
description: 'Stored value with sub-ledgers',
|
||
|
|
defaultState: 'disabled',
|
||
|
|
dependencies: ['ledger'],
|
||
|
|
},
|
||
|
|
{
|
||
|
|
capabilityId: 'p2p-transfers',
|
||
|
|
name: 'P2P Transfers',
|
||
|
|
description: 'Internal transfers',
|
||
|
|
defaultState: 'disabled',
|
||
|
|
dependencies: ['wallet-accounts'],
|
||
|
|
},
|
||
|
|
{
|
||
|
|
capabilityId: 'bank-transfers',
|
||
|
|
name: 'Bank Transfers',
|
||
|
|
description: 'ACH/SEPA/FPS via connector',
|
||
|
|
defaultState: 'disabled',
|
||
|
|
dependencies: ['wallet-accounts'],
|
||
|
|
},
|
||
|
|
{
|
||
|
|
capabilityId: 'account-funding',
|
||
|
|
name: 'Account Funding',
|
||
|
|
description: 'Bank transfer, card, cash',
|
||
|
|
defaultState: 'disabled',
|
||
|
|
dependencies: ['wallet-accounts'],
|
||
|
|
},
|
||
|
|
|
||
|
|
// Mobile Money
|
||
|
|
{
|
||
|
|
capabilityId: 'mobile-money-connector',
|
||
|
|
name: 'Mobile Money Connector',
|
||
|
|
description: 'Abstraction layer for mobile money providers',
|
||
|
|
defaultState: 'disabled',
|
||
|
|
dependencies: ['ledger'],
|
||
|
|
},
|
||
|
|
{
|
||
|
|
capabilityId: 'mobile-money-cash-in',
|
||
|
|
name: 'Mobile Money Cash-In',
|
||
|
|
description: 'Cash-in orchestration',
|
||
|
|
defaultState: 'disabled',
|
||
|
|
dependencies: ['mobile-money-connector'],
|
||
|
|
},
|
||
|
|
{
|
||
|
|
capabilityId: 'mobile-money-cash-out',
|
||
|
|
name: 'Mobile Money Cash-Out',
|
||
|
|
description: 'Cash-out orchestration',
|
||
|
|
defaultState: 'disabled',
|
||
|
|
dependencies: ['mobile-money-connector'],
|
||
|
|
},
|
||
|
|
{
|
||
|
|
capabilityId: 'mobile-money-transfers',
|
||
|
|
name: 'Mobile Money Transfers',
|
||
|
|
description: 'Domestic transfers',
|
||
|
|
defaultState: 'disabled',
|
||
|
|
dependencies: ['mobile-money-connector'],
|
||
|
|
},
|
||
|
|
];
|
||
|
|
|
||
|
|
for (const cap of capabilities) {
|
||
|
|
try {
|
||
|
|
await capabilityRegistryService.createCapability({
|
||
|
|
capabilityId: cap.capabilityId,
|
||
|
|
name: cap.name,
|
||
|
|
version: '1.0.0',
|
||
|
|
description: cap.description,
|
||
|
|
defaultState: cap.defaultState as any,
|
||
|
|
dependencies: cap.dependencies || [],
|
||
|
|
});
|
||
|
|
logger.info(`Created capability: ${cap.capabilityId}`);
|
||
|
|
} catch (error: any) {
|
||
|
|
if (error.message?.includes('already exists')) {
|
||
|
|
logger.info(`Capability ${cap.capabilityId} already exists, skipping`);
|
||
|
|
} else {
|
||
|
|
logger.error(`Failed to create capability ${cap.capabilityId}`, { error });
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
logger.info('SolaceNet capability seed completed!');
|
||
|
|
}
|
||
|
|
|
||
|
|
// Run if called directly
|
||
|
|
if (require.main === module) {
|
||
|
|
seedCapabilities()
|
||
|
|
.then(() => {
|
||
|
|
logger.info('Seed script completed successfully');
|
||
|
|
process.exit(0);
|
||
|
|
})
|
||
|
|
.catch((error) => {
|
||
|
|
logger.error('Seed script failed', { error });
|
||
|
|
process.exit(1);
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
export { seedCapabilities };
|