Files
metamask-integration/dist/ramps/ramp-factory.service.js
2026-03-02 12:14:14 -08:00

153 lines
6.4 KiB
JavaScript

"use strict";
/**
* Ramp factory service - creates and selects ramp providers
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.rampFactoryService = exports.RampFactoryService = void 0;
const moonpay_1 = require("./providers/moonpay");
const ramp_network_1 = require("./providers/ramp-network");
const onramper_1 = require("./providers/onramper");
const transak_1 = require("./providers/transak");
const banxa_1 = require("./providers/banxa");
const coinbase_ramps_1 = require("./providers/coinbase-ramps");
const stripe_crypto_1 = require("./providers/stripe-crypto");
const cybrid_1 = require("./providers/cybrid");
const sardine_1 = require("./providers/sardine");
const honeycoin_1 = require("./providers/honeycoin");
const DEFAULT_ON_RAMP_PROVIDER = 'onramper';
const DEFAULT_OFF_RAMP_PROVIDER = 'moonpay';
class RampFactoryService {
constructor() {
this.onRampProviders = new Map();
this.offRampProviders = new Map();
this.quoteProviders = new Map();
this.defaultOnRamp = DEFAULT_ON_RAMP_PROVIDER;
this.defaultOffRamp = DEFAULT_OFF_RAMP_PROVIDER;
this.registerProviders();
}
registerProviders() {
const moonpayKey = process.env.MOONPAY_API_KEY;
if (moonpayKey) {
const moonpay = new moonpay_1.MoonPayProvider({ apiKey: moonpayKey });
this.onRampProviders.set('moonpay', moonpay);
this.offRampProviders.set('moonpay', moonpay);
this.quoteProviders.set('moonpay', moonpay);
}
const rampKey = process.env.RAMP_NETWORK_API_KEY;
if (rampKey) {
const ramp = new ramp_network_1.RampNetworkProvider({ hostApiKey: rampKey });
this.onRampProviders.set('ramp-network', ramp);
this.offRampProviders.set('ramp-network', ramp);
}
const onramperKey = process.env.ONRAMPER_API_KEY;
if (onramperKey) {
const onramper = new onramper_1.OnramperProvider({ apiKey: onramperKey });
this.onRampProviders.set('onramper', onramper);
this.quoteProviders.set('onramper', onramper);
}
const transakKey = process.env.TRANSAK_API_KEY;
if (transakKey) {
const transak = new transak_1.TransakProvider({ apiKey: transakKey });
this.onRampProviders.set('transak', transak);
this.offRampProviders.set('transak', transak);
}
const banxaKey = process.env.BANXA_API_KEY;
if (banxaKey) {
const banxa = new banxa_1.BanxaProvider({ apiKey: banxaKey });
this.onRampProviders.set('banxa', banxa);
this.offRampProviders.set('banxa', banxa);
}
const coinbaseAppId = process.env.COINBASE_CLIENT_ID;
if (coinbaseAppId) {
const coinbase = new coinbase_ramps_1.CoinbaseRampsProvider({ appId: coinbaseAppId });
this.onRampProviders.set('coinbase-ramps', coinbase);
this.offRampProviders.set('coinbase-ramps', coinbase);
}
const stripeKey = process.env.STRIPE_SECRET_KEY;
if (stripeKey) {
const stripe = new stripe_crypto_1.StripeCryptoProvider({ apiKey: stripeKey });
this.onRampProviders.set('stripe-crypto', stripe);
}
const cybridKey = process.env.CYBRID_API_KEY;
if (cybridKey) {
const cybrid = new cybrid_1.CybridProvider({ apiKey: cybridKey });
this.onRampProviders.set('cybrid', cybrid);
this.offRampProviders.set('cybrid', cybrid);
}
const sardineKey = process.env.SARDINE_API_KEY;
if (sardineKey) {
const sardine = new sardine_1.SardineProvider({ apiKey: sardineKey });
this.onRampProviders.set('sardine', sardine);
}
const honeycoinKey = process.env.HONEYCOIN_API_KEY;
if (honeycoinKey) {
const honeycoin = new honeycoin_1.HoneyCoinProvider({ apiKey: honeycoinKey });
this.offRampProviders.set('honeycoin', honeycoin);
}
}
async createOnRampSession(params, providerId) {
const id = providerId ?? this.defaultOnRamp;
const provider = this.onRampProviders.get(id);
if (!provider) {
const fallback = this.onRampProviders.get(DEFAULT_ON_RAMP_PROVIDER)
?? Array.from(this.onRampProviders.values())[0];
if (!fallback) {
throw new Error(`No on-ramp provider configured. Set MOONPAY_API_KEY, RAMP_NETWORK_API_KEY, or ONRAMPER_API_KEY`);
}
return fallback.createSession(params);
}
return provider.createSession(params);
}
async createOffRampSession(params, providerId) {
const id = providerId ?? this.defaultOffRamp;
const provider = this.offRampProviders.get(id);
if (!provider) {
const fallback = this.offRampProviders.get(DEFAULT_OFF_RAMP_PROVIDER)
?? Array.from(this.offRampProviders.values())[0];
if (!fallback) {
throw new Error(`No off-ramp provider configured. Set MOONPAY_API_KEY or RAMP_NETWORK_API_KEY`);
}
return fallback.createPayoutSession(params);
}
return provider.createPayoutSession(params);
}
async getQuote(params, providerId) {
const providers = providerId
? [this.quoteProviders.get(providerId)].filter((p) => !!p)
: Array.from(this.quoteProviders.values());
for (const provider of providers) {
const quote = await provider.getQuote(params);
if (quote)
return quote;
}
return null;
}
getProviders() {
const seen = new Set();
const caps = [];
for (const p of this.onRampProviders.values()) {
const c = p.getCapabilities();
if (!seen.has(c.id)) {
seen.add(c.id);
caps.push(c);
}
}
for (const p of this.offRampProviders.values()) {
const c = p.getCapabilities();
if (!seen.has(c.id)) {
seen.add(c.id);
caps.push(c);
}
}
return caps;
}
setDefaultOnRamp(id) {
this.defaultOnRamp = id;
}
setDefaultOffRamp(id) {
this.defaultOffRamp = id;
}
}
exports.RampFactoryService = RampFactoryService;
exports.rampFactoryService = new RampFactoryService();
//# sourceMappingURL=ramp-factory.service.js.map