66 lines
2.2 KiB
JavaScript
66 lines
2.2 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';
|
|
|
|
if (!apiKey || !apiSecret || !baseUrl) {
|
|
return null;
|
|
}
|
|
|
|
try {
|
|
const storage = createFdkStorage(process.env.FDK_STORAGE_CONNECTION_STRING)
|
|
|| new MemoryStorage('sms_extension_');
|
|
|
|
if (storage instanceof MemoryStorage) {
|
|
console.warn('[FDK] FDK_STORAGE_CONNECTION_STRING is not set. Falling back to in-memory session storage.');
|
|
}
|
|
|
|
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,
|
|
});
|
|
} catch (error) {
|
|
console.warn(`[FDK] Failed to initialize FDK: ${error.message}`);
|
|
return null;
|
|
}
|
|
}
|
|
|
|
const fdkExtension = createFdkExtension();
|
|
|
|
module.exports = {
|
|
fdkExtension,
|
|
isFdkConfigured: Boolean(fdkExtension),
|
|
};
|