Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
75 changes: 75 additions & 0 deletions .eslintrc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
module.exports = {
env: {
browser: true,
commonjs: true,
es6: true,
node: true,
jasmine: true,
},
extends: [
'airbnb-base',
],
parserOptions: {
ecmaVersion: 2020,
sourceType: 'module',
},
rules: {
// Allow console.* methods for logging
'no-console': 'off',
// Allow class methods that don't use 'this'
'class-methods-use-this': 'off',
// Allow dangling underscores for private methods
'no-underscore-dangle': 'off',
// Allow reassigning function parameters
'no-param-reassign': 'off',
// Allow unused variables that start with underscore
'no-unused-vars': ['error', { argsIgnorePattern: '^_' }],
// Allow longer line lengths for readability
'max-len': ['error', { code: 120 }],
// Allow empty catch blocks with comment
'no-empty': ['error', { allowEmptyCatch: true }],
// Allow for...in loops
'no-restricted-syntax': 'off',
// Allow continue statements
'no-continue': 'off',
// Allow await inside loops
'no-await-in-loop': 'off',
// Disable strict equality for legacy code
eqeqeq: 'warn',
// Allow global require() calls
'global-require': 'off',
// Allow accessing Object.prototype methods
'no-prototype-builtins': 'off',
// Allow for...in without hasOwnProperty check
'guard-for-in': 'off',
// Allow prefer-destructuring as suggestion only
'prefer-destructuring': 'warn',
// Allow default parameters not to be last
'default-param-last': 'off',
// Allow regex constructor
'prefer-regex-literals': 'off',
// Allow variable shadowing
'no-shadow': 'warn',
// Allow inconsistent return
'consistent-return': 'off',
// Allow no-return-await
'no-return-await': 'warn',
// Allow camelcase violations for API fields
camelcase: 'warn',
// Allow unary operators
'no-plusplus': 'off',
// Allow unused expressions (for backward compatibility)
'no-unused-expressions': 'warn',
// Allow comma operator
'no-sequences': 'warn',
},
ignorePatterns: [
'node_modules/',
'coverage/',
'build/',
'dist/',
'examples/',
'spec/',
'*.min.js',
],
};
108 changes: 53 additions & 55 deletions express/api_routes.js
Original file line number Diff line number Diff line change
@@ -1,66 +1,64 @@
'use strict';
const { extension } = require('./extension');
const express = require('express');
const { ApplicationClient } = require('@gofynd/fdk-client-javascript');
const { extension } = require('./extension');
const { sessionMiddleware, partnerSessionMiddleware } = require('./middleware/session_middleware');
const { ApplicationClient } = require("@gofynd/fdk-client-javascript");


function setupProxyRoutes(configData) {
const apiRoutes = express.Router({ mergeParams: true });
const applicationProxyRoutes = express.Router({ mergeParams: true });
const partnerApiRoutes = express.Router({ mergeParams: true });
const apiRoutes = express.Router({ mergeParams: true });
const applicationProxyRoutes = express.Router({ mergeParams: true });
const partnerApiRoutes = express.Router({ mergeParams: true });

applicationProxyRoutes.use(async (req, res, next) => {
try {
if (req.headers["x-user-data"]) {
req.user = JSON.parse(req.headers["x-user-data"]);
req.user.user_id = req.user._id;
}
if (req.headers["x-application-data"]) {
req.application = JSON.parse(req.headers["x-application-data"]);
req.applicationClient = new ApplicationClient({
applicationID: req.application._id,
applicationToken: req.application.token,
domain: extension.cluster,
logLevel: configData.debug === true ? "debug" : null
});
}
next();
} catch (error) {
next(error);
}
});
applicationProxyRoutes.use(async (req, res, next) => {
try {
if (req.headers['x-user-data']) {
req.user = JSON.parse(req.headers['x-user-data']);
req.user.user_id = req.user._id;
}
if (req.headers['x-application-data']) {
req.application = JSON.parse(req.headers['x-application-data']);
req.applicationClient = new ApplicationClient({
applicationID: req.application._id,
applicationToken: req.application.token,
domain: extension.cluster,
logLevel: configData.debug === true ? 'debug' : null,
});
}
next();
} catch (error) {
next(error);
}
});

apiRoutes.use(sessionMiddleware(true), async (req, res, next) => {
try {
const client = await extension.getPlatformClient(req.fdkSession.company_id, req.fdkSession);
req.platformClient = client;
req.extension = extension;
next();
} catch (error) {
next(error);
}
});
apiRoutes.use(sessionMiddleware(true), async (req, res, next) => {
try {
const client = await extension.getPlatformClient(req.fdkSession.company_id, req.fdkSession);
req.platformClient = client;
req.extension = extension;
next();
} catch (error) {
next(error);
}
});

partnerApiRoutes.use(partnerSessionMiddleware(true), async (req, res, next) => {
try {
const client = await extension.getPartnerClient(req.fdkSession.organization_id, req.fdkSession);
req.partnerClient = client;
req.extension = extension;
next();
} catch (error) {
next(error);
}
});
partnerApiRoutes.use(partnerSessionMiddleware(true), async (req, res, next) => {
try {
const client = await extension.getPartnerClient(req.fdkSession.organization_id, req.fdkSession);
req.partnerClient = client;
req.extension = extension;
next();
} catch (error) {
next(error);
}
});

return {
partnerApiRoutes: partnerApiRoutes,
platformApiRoutes: apiRoutes,
apiRoutes: apiRoutes, // this is deprecated use platformApiRoutes
applicationProxyRoutes: applicationProxyRoutes
};
return {
partnerApiRoutes,
platformApiRoutes: apiRoutes,
apiRoutes, // this is deprecated use platformApiRoutes
applicationProxyRoutes,
};
}

module.exports = {
setupProxyRoutes: setupProxyRoutes
};
setupProxyRoutes,
};
18 changes: 8 additions & 10 deletions express/constants.js
Original file line number Diff line number Diff line change
@@ -1,13 +1,11 @@
'use strict';

exports.SESSION_COOKIE_NAME = "ext_session";
exports.ADMIN_SESSION_COOKIE_NAME='ext_adm_session';
exports.TEST_WEBHOOK_EVENT_NAME = "ping"
exports.SESSION_COOKIE_NAME = 'ext_session';
exports.ADMIN_SESSION_COOKIE_NAME = 'ext_adm_session';
exports.TEST_WEBHOOK_EVENT_NAME = 'ping';
exports.ASSOCIATION_CRITERIA = {
ALL: "ALL",
SPECIFIC: "SPECIFIC-EVENTS", // to be set when saleschannel specific events are subscribed and sales channel present
EMPTY: "EMPTY" // to be set when saleschannel specific events are subscribed but not sales channel present
}
ALL: 'ALL',
SPECIFIC: 'SPECIFIC-EVENTS', // to be set when saleschannel specific events are subscribed and sales channel present
EMPTY: 'EMPTY', // to be set when saleschannel specific events are subscribed but not sales channel present
};
exports.TIMEOUT_STATUS = 504;
exports.SERVICE_UNAVAILABLE = 503;
exports.BAD_GATEWAY = 502;
exports.BAD_GATEWAY = 502;
79 changes: 20 additions & 59 deletions express/error_code.js
Original file line number Diff line number Diff line change
@@ -1,68 +1,29 @@
'use strict';
/* eslint-disable max-classes-per-file */
class FdkInvalidExtensionConfig extends Error {}

class FdkInvalidExtensionConfig extends Error {
constructor(message) {
super(message);
}
}
class FdkClusterMetaMissingEror extends Error {}

class FdkSessionNotFoundError extends Error {}
class FdkInvalidOAuthError extends Error {}

class FdkClusterMetaMissingEror extends Error {
constructor(message) {
super(message);
}
}
class FdkInvalidHMacError extends Error {}

class FdkSessionNotFoundError extends Error {
constructor(message) {
super(message);
}
}
class FdkInvalidOAuthError extends Error {
constructor(message) {
super(message);
}
}
class FdkInvalidWebhookConfig extends Error {}

class FdkInvalidHMacError extends Error {
constructor(message) {
super(message);
}
}
class FdkWebhookRegistrationError extends Error {}

class FdkInvalidWebhookConfig extends Error {
constructor(message) {
super(message);
}
}

class FdkWebhookRegistrationError extends Error {
constructor(message) {
super(message);
}
}

class FdkWebhookProcessError extends Error {
constructor(message) {
super(message);
}
}

class FdkWebhookHandlerNotFound extends Error {
constructor(message) {
super(message);
}
}
class FdkWebhookProcessError extends Error {}

class FdkWebhookHandlerNotFound extends Error {}

module.exports = {
FdkInvalidExtensionConfig,
FdkClusterMetaMissingEror,
FdkSessionNotFoundError,
FdkInvalidOAuthError,
FdkInvalidHMacError,
FdkInvalidWebhookConfig,
FdkWebhookRegistrationError,
FdkWebhookProcessError,
FdkWebhookHandlerNotFound
};
FdkInvalidExtensionConfig,
FdkClusterMetaMissingEror,
FdkSessionNotFoundError,
FdkInvalidOAuthError,
FdkInvalidHMacError,
FdkInvalidWebhookConfig,
FdkWebhookRegistrationError,
FdkWebhookProcessError,
FdkWebhookHandlerNotFound,
};
Loading
Loading