sms-extension-1777538290/server/fdk.js

83 lines
2.7 KiB
JavaScript

require('dotenv').config();
const { setupFdk } = require('@gofynd/fdk-extension-javascript/express');
const { MemoryStorage } = require('@gofynd/fdk-extension-javascript/express/storage');
const { createFdkStorage } = require('./postgresFdkStorage');
function normalizeEnvText(value) {
return typeof value === 'string' ? value.trim() : '';
}
function trimTrailingSlash(value) {
return normalizeEnvText(value).replace(/\/+$/, '');
}
function buildRedirectUrl(baseUrl, companyId) {
const normalizedBaseUrl = trimTrailingSlash(baseUrl);
const query = companyId ? `?blt-gtw-fc-cid=${encodeURIComponent(companyId)}` : '';
return `${normalizedBaseUrl}/${query}`.replace(/\/\?/, '/?');
}
function createFdkExtension() {
const apiKey = normalizeEnvText(process.env.EXTENSION_API_KEY);
const apiSecret = normalizeEnvText(process.env.EXTENSION_API_SECRET);
const baseUrl = normalizeEnvText(process.env.EXTENSION_BASE_URL || process.env.EXTENSION_URL);
const cluster = normalizeEnvText(process.env.EXTENSION_CLUSTER_URL) || 'https://api.fynd.com';
const storageConnectionString = normalizeEnvText(process.env.FDK_STORAGE_CONNECTION_STRING);
if (!apiKey || !apiSecret || !baseUrl) {
return null;
}
const storage = createFdkStorage({
prefixKey: 'sms_extension_',
connectionString: storageConnectionString,
}) || new MemoryStorage('sms_extension_');
if (!storageConnectionString) {
console.warn('[FDK] FDK_STORAGE_CONNECTION_STRING is not set; falling back to in-memory session storage.');
}
try {
return setupFdk({
api_key: apiKey,
api_secret: apiSecret,
base_url: trimTrailingSlash(baseUrl),
cluster,
scopes: ['company/saleschannel', 'company/application/settings'],
callbacks: {
auth: async (req) => buildRedirectUrl(baseUrl, req?.fdkSession?.company_id || req?.query?.company_id || ''),
uninstall: async (req) => {
const companyId = req?.body?.company_id || req?.query?.company_id || req?.fdkSession?.company_id || '';
console.log(`[FDK] uninstall callback received for company ${companyId || 'unknown'}`);
},
},
storage,
access_mode: 'offline',
});
} catch (error) {
console.warn(`[FDK] Failed to initialize FDK: ${error.message}`);
return null;
}
}
const fdkExtension = createFdkExtension();
async function getPlatformClientForCompany(companyId) {
if (!fdkExtension) {
throw new Error('FDK is not configured');
}
if (!normalizeEnvText(companyId)) {
throw new Error('companyId is required to fetch a platform client');
}
return fdkExtension.getPlatformClient(companyId);
}
module.exports = {
fdkExtension,
isFdkConfigured: Boolean(fdkExtension),
getPlatformClientForCompany,
};