n8n-nodes-scalefluidly
Version:
ScaleFluidly N8N Node
392 lines • 18.9 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ScaleFluidly = void 0;
const n8n_workflow_1 = require("n8n-workflow");
const quote_actions_1 = require("./quote-actions");
const configure_actions_1 = require("./configure-actions");
const pricing_actions_1 = require("./pricing-actions");
const intent_url_map_1 = require("./intent-url-map");
const admin_actions_1 = require("./admin-actions");
class ScaleFluidly {
constructor() {
this.description = {
displayName: 'ScaleFluidly',
name: 'scaleFluidly',
usableAsTool: true,
icon: 'file:ScaleFluidly.svg',
group: ['transform'],
version: 1,
subtitle: '={{ $parameter["operation"] + ": " + $parameter["resource"] }}',
description: 'Consume ScaleFluidly API',
defaults: {
name: 'ScaleFluidly',
},
credentials: [
{
name: 'scaleFluidlyApi',
required: false,
},
],
inputs: ["main"],
outputs: ["main"],
properties: [
{
displayName: 'Environment',
name: 'environment',
type: 'options',
options: [
{
name: 'Dev',
value: 'https://documentation-dev.scalefluidly.com',
},
{
name: 'QA',
value: 'https://documentation.scalefluidly.com',
},
{
name: 'Local',
value: 'http://localhost:8400',
}
],
default: 'Dev',
noDataExpression: true,
required: true,
description: 'Environment Type',
},
{
displayName: 'Resource',
name: 'resource',
type: 'options',
options: [
{
name: 'Admin',
value: 'admin',
},
{
name: 'Configure',
value: 'configure',
},
{
name: 'MCP',
value: 'mcp',
},
{
name: 'Pricing',
value: 'pricing',
},
{
name: 'Quote',
value: 'quote',
}
],
default: 'quote',
noDataExpression: true,
required: true,
description: 'Create a new quote',
},
{
displayName: 'Operation',
name: 'operation',
type: 'options',
displayOptions: {
show: {
resource: [
'admin',
],
},
},
options: admin_actions_1.adminActions,
default: "get_all_users",
noDataExpression: true,
required: true,
},
{
displayName: 'Operation',
name: 'operation',
type: 'options',
displayOptions: {
show: {
resource: [
'quote',
],
},
},
options: quote_actions_1.quoteActions,
default: "get_user_room",
noDataExpression: true,
required: true,
},
{
displayName: 'Operation',
name: 'operation',
type: 'options',
displayOptions: {
show: {
resource: [
'configure',
],
},
},
options: configure_actions_1.configureActions,
default: 'ungroup_products',
noDataExpression: true,
required: true,
},
{
displayName: 'Operation',
name: 'operation',
type: 'options',
displayOptions: {
show: {
resource: [
'pricing',
],
},
},
options: pricing_actions_1.pricingActions,
default: 'get_pricing',
noDataExpression: true,
required: true,
},
{
displayName: 'Operation',
name: 'operation',
type: 'options',
displayOptions: {
show: {
resource: [
'mcp'
],
},
},
options: [{
name: 'Execute MCP',
value: 'execute_mcp',
description: 'Execute MCP Action',
action: 'Execute MCP Action',
}],
default: 'execute_mcp',
noDataExpression: true,
required: true,
},
{
displayName: 'Intent',
name: 'intent',
type: 'string',
required: true,
displayOptions: {
show: {
operation: ["execute_mcp"],
resource: [
'mcp'
],
}
},
default: '',
placeholder: '',
description: 'User Intent Name',
},
{
displayName: 'Token',
name: 'access_token',
type: 'string',
typeOptions: { password: true },
required: true,
displayOptions: {
show: {
operation: ["execute_mcp"],
resource: [
'mcp'
],
}
},
default: '',
placeholder: '',
description: 'Token Details',
},
{
displayName: 'Request',
name: 'request_info',
type: 'json',
required: true,
displayOptions: {
show: {
operation: [
"add_approver_to_quote", "add_participants_for_quote", "add_participants_for_room", "clone_quote",
"create_account", "create_contact", "create_external_account", "create_order",
"create_quote", "create_room", "create_quote_version", "delegate_approver_to_quote",
"delete_participants_for_quote", "delete_participants_for_room", "get_account_details",
"get_account_layout_by_type", "get_accounts", "get_order_activity_timeline",
"get_all_users_and_contacts_for_room", "get_all_users_and_contacts_for_quote",
"get_approvals_list_for_quote", "get_approvers_list_for_quote", "get_available_users_and_contacts_for_room",
"get_cart_quote_line_items", "get_complete_account_details", "get_complete_order_details",
"get_contact_details", "get_contacts_by_account", "get_deal_data",
"get_documents_by_room_and_parent", "get_high_value_deals_data",
"get_complete_quote_details", "get_orders",
"get_page_layout", "get_performance_data", "get_quote_activity_timeline",
"get_quote_data", "get_quote_details", "get_quote_id_and_type_from_sf_external_id",
"get_quote_versions", "get_quote_line_summary",
"get_shared_templates", "get_user_quotes", "send_email_to_customers",
"insert_into_address_details", "get_order_details", "get_participants_for_quote",
"get_participants_for_room", "get_room_by_id", "save_or_update_page_layout",
"update_account", "update_contact", "update_order",
"update_quote", "update_room", "update_status_by_approver",
"get_user_room", "add_products_to_quote", "add_products_to_group",
"apply_discount", "apply_favorite_carts", "apply_target_value",
"apply_promotion", "clone_bundle", "get_adjustment_values_line_item",
"configure_product", "save_favorite_cart", "delete_bundle",
"delete_favorite_cart", "get_favorite_carts", "get_price_trails",
"predefined_grouping", "get_product_line_summary", "get_product_ramps",
"get_recommendations", "get_product_details", "get_quote_line_summary_details",
"get_adjustment_values_quote_line_item", "get_selected_product_options", "ungroup_products",
"search_objects", "universal_search_objects", "add_user_favourite_product", "get_categories_by_pricebookId",
"get_user_products_by_filter", "get_product_categories", "remove_user_favourite_product",
"search_product_categories", "get_user_favourite_products", "get_pricing",
"update_users", "add_users", "get_group_members", "get_groups",
"add_groups", "update_groups", "get_permission", "add_permission", "update_permission",
"get_configuration_rule", "add_or_update_configuration_rule", "add_rule_product_groups",
"update_rule_product_groups", "get_configuration", "save_configuration", "save_quote_types",
"get_layout_fields_by_object", "get_data_values", "get_field_columns", "add_currency_conversion",
"update_currency_conversion", "delete_currency_conversion", "save_translation_meta_data", "save_translation_data",
"set_customer_languages", "get_properties", "get_flow_by_id", "create_flow", "update_flow",
"set_up_customer_profile_for_salesforce", "request_free_trial", "get_category_products", "get_non_associated_category_products",
"get_category_pricebooks", "get_non_associated_pricebooks", "get_category_details", "get_category_discounts",
"get_category_discount_by_id", "add_categories", "update_category", "add_products_to_category", "add_pricebook_to_category",
"delete_category_products", "update_category_pricebooks", "add_update_category_discounts", "delete_category_discounts",
"get_price_book_associated_products", "get_price_book_available_products", "pricebook_line_items", "get_pricing_customer_lookup",
"add_price_book", "update_price_book",
"add_price_book_associated_products", "update_price_book_associated_products",
"add_deal_guidance", "update_deal_guidances", "get_group_users", "add_or_update_approval",
"add_objects", "update_objects", "import_data", "get_object_details_by_id",
"insert_or_update_templates", "get_layout_fields", "get_layouts_by_layout_id",
"add_layouts", "delete_layouts", "get_product_activity_timeline", "get_price_book_activity_timeline",
"get_price_book_item_activity_timeline", "get_rule_activity_timeline",
"add_product_uom", "edit_product_uom", "add_product_uom_conversion", "edit_product_uom_conversion",
"get_product_by_id", "get_available_product_options", "get_available_product_group_options",
"get_associated_product_options", "get_product_groups", "get_product_group_options", "get_product_options_by_group_id",
"get_product_attributes", "get_product_attributes_by_group_id", "get_group_attributes",
"get_available_product_group_attributes", "add_price_book_item", "edit_price_book_item",
"add_products", "update_products", "save_product_group_options", "delete_product_group_options",
"save_product_group_attributes", "update_option_group", "fetch_object_details", "execute_mcp"
],
resource: [
'quote', 'configure', 'product', 'pricing', 'mcp', 'admin'
],
},
},
default: '',
placeholder: '',
description: 'Request Body',
},
{
displayName: 'Additional Fields',
name: 'additionalFields',
type: 'collection',
placeholder: 'Add Field',
default: {},
displayOptions: {
show: {
resource: [
'quote',
],
operation: [
'create',
],
},
},
options: [
{
displayName: 'Description',
name: 'description',
type: 'string',
default: '',
},
],
},
],
};
}
getToolParameters() {
return {
type: 'object',
properties: {
request_info: {
type: 'object',
description: 'Optional tool input object (can be empty)',
},
},
required: [],
};
}
async execute() {
const items = this.getInputData();
let responseData;
const returnData = [];
const operation = this.getNodeParameter('operation', 0);
const environment = this.getNodeParameter('environment', 0);
const staticData = this.getWorkflowStaticData('node');
for (let i = 0; i < items.length; i++) {
if (i === 0) {
const headers = items[i].json.headers;
if (headers && headers['authorization']) {
const authorizationHeader = headers['authorization'];
staticData.authorizationHeader = authorizationHeader;
}
}
else {
const bearerToken = staticData.authorizationHeader;
if (!bearerToken) {
throw new n8n_workflow_1.ApplicationError('Bearer token not found');
}
}
let uri;
let quoteUrl = environment;
const makeRequest = async (uri, method, body, access_token) => {
let authHeader = staticData.authorizationHeader;
if (access_token) {
authHeader = `Bearer ${access_token}`;
}
const options = {
headers: {
'Accept': 'application/json',
'authorization': authHeader
},
method,
uri,
json: true,
};
if (body) {
options.body = body;
}
if (!authHeader) {
responseData = await this.helpers.requestWithAuthentication.call(this, 'scaleFluidlyApi', options);
}
else {
responseData = await this.helpers.request(options);
}
returnData.push(responseData);
};
let requestData = undefined;
try {
requestData = this.getNodeParameter('request_info', i);
}
catch {
}
let intent = operation;
let access_token = undefined;
if (operation === 'execute_mcp') {
intent = this.getNodeParameter('intent', i);
access_token = this.getNodeParameter('access_token', i);
}
const slectedOperation = intent_url_map_1.intentUrlMap[intent];
if (!slectedOperation) {
throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Operation "${intent}" not found`);
}
uri = `${quoteUrl}${slectedOperation.url}`;
await makeRequest(uri, slectedOperation.method, requestData, access_token);
}
return [this.helpers.returnJsonArray(returnData)];
}
}
exports.ScaleFluidly = ScaleFluidly;
//# sourceMappingURL=ScaleFluidly.node.js.map