60 lines
2.0 KiB
TypeScript
60 lines
2.0 KiB
TypeScript
/**
|
|
* Transak API utilities — shared across rFlows and rCart.
|
|
*
|
|
* Builds Transak widget URLs using direct query parameters.
|
|
* The gateway session API has auth issues, so we use the direct
|
|
* URL approach which Transak still supports.
|
|
*
|
|
* Environment: TRANSAK_ENV controls staging vs production.
|
|
* API keys are split: TRANSAK_API_KEY_STAGING / TRANSAK_API_KEY_PRODUCTION
|
|
* (falls back to legacy TRANSAK_API_KEY if per-env keys aren't set).
|
|
*/
|
|
|
|
const TRANSAK_WIDGET_BASE = 'https://global.transak.com';
|
|
const TRANSAK_WIDGET_BASE_STG = 'https://global-stg.transak.com';
|
|
|
|
export type TransakEnv = 'STAGING' | 'PRODUCTION';
|
|
|
|
/** Get the current Transak environment */
|
|
export function getTransakEnv(): TransakEnv {
|
|
return (process.env.TRANSAK_ENV as TransakEnv) || 'STAGING';
|
|
}
|
|
|
|
/** Get the API key for the current Transak environment */
|
|
export function getTransakApiKey(): string {
|
|
const env = getTransakEnv();
|
|
return (env === 'PRODUCTION'
|
|
? process.env.TRANSAK_API_KEY_PRODUCTION
|
|
: process.env.TRANSAK_API_KEY_STAGING
|
|
) || process.env.TRANSAK_API_KEY || '';
|
|
}
|
|
|
|
/** Get the webhook secret for the current Transak environment */
|
|
export function getTransakWebhookSecret(): string {
|
|
const env = getTransakEnv();
|
|
return (env === 'PRODUCTION'
|
|
? process.env.TRANSAK_WEBHOOK_SECRET_PRODUCTION
|
|
: process.env.TRANSAK_WEBHOOK_SECRET_STAGING
|
|
) || process.env.TRANSAK_WEBHOOK_SECRET || '';
|
|
}
|
|
|
|
/** Extract root domain from a hostname (e.g. "demo.rspace.online" → "rspace.online") */
|
|
export function extractRootDomain(host: string): string {
|
|
const parts = host.replace(/:\d+$/, '').split('.');
|
|
return parts.length > 2 ? parts.slice(-2).join('.') : parts.join('.');
|
|
}
|
|
|
|
export function createTransakWidgetUrl(params: Record<string, string>): string {
|
|
const env = getTransakEnv();
|
|
const base = env === 'PRODUCTION' ? TRANSAK_WIDGET_BASE : TRANSAK_WIDGET_BASE_STG;
|
|
|
|
const url = new URL(base);
|
|
for (const [key, value] of Object.entries(params)) {
|
|
if (value != null && value !== '') {
|
|
url.searchParams.set(key, value);
|
|
}
|
|
}
|
|
|
|
return url.toString();
|
|
}
|