pull:初次提交
This commit is contained in:
24
n8n-n8n-1.109.2/packages/nodes-base/nodes/ProfitWell/CompanyDescription.ts
Executable file
24
n8n-n8n-1.109.2/packages/nodes-base/nodes/ProfitWell/CompanyDescription.ts
Executable file
@@ -0,0 +1,24 @@
|
||||
import type { INodeProperties } from 'n8n-workflow';
|
||||
|
||||
export const companyOperations: INodeProperties[] = [
|
||||
{
|
||||
displayName: 'Operation',
|
||||
name: 'operation',
|
||||
type: 'options',
|
||||
noDataExpression: true,
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['company'],
|
||||
},
|
||||
},
|
||||
options: [
|
||||
{
|
||||
name: 'Get Settings',
|
||||
value: 'getSetting',
|
||||
description: "Get your company's ProfitWell account settings",
|
||||
action: 'Get settings for your company',
|
||||
},
|
||||
],
|
||||
default: 'getSetting',
|
||||
},
|
||||
];
|
||||
70
n8n-n8n-1.109.2/packages/nodes-base/nodes/ProfitWell/GenericFunctions.ts
Executable file
70
n8n-n8n-1.109.2/packages/nodes-base/nodes/ProfitWell/GenericFunctions.ts
Executable file
@@ -0,0 +1,70 @@
|
||||
import type {
|
||||
IDataObject,
|
||||
IExecuteFunctions,
|
||||
IHookFunctions,
|
||||
ILoadOptionsFunctions,
|
||||
JsonObject,
|
||||
IRequestOptions,
|
||||
IHttpRequestMethods,
|
||||
} from 'n8n-workflow';
|
||||
import { NodeApiError } from 'n8n-workflow';
|
||||
|
||||
export async function profitWellApiRequest(
|
||||
this: IHookFunctions | IExecuteFunctions | ILoadOptionsFunctions,
|
||||
method: IHttpRequestMethods,
|
||||
resource: string,
|
||||
|
||||
body: any = {},
|
||||
qs: IDataObject = {},
|
||||
uri?: string,
|
||||
option: IDataObject = {},
|
||||
): Promise<any> {
|
||||
try {
|
||||
const credentials = await this.getCredentials('profitWellApi');
|
||||
let options: IRequestOptions = {
|
||||
headers: {
|
||||
Authorization: credentials.accessToken,
|
||||
},
|
||||
method,
|
||||
qs,
|
||||
body,
|
||||
uri: uri || `https://api.profitwell.com/v2${resource}`,
|
||||
json: true,
|
||||
};
|
||||
|
||||
options = Object.assign({}, options, option);
|
||||
|
||||
return await this.helpers.request(options);
|
||||
} catch (error) {
|
||||
throw new NodeApiError(this.getNode(), error as JsonObject);
|
||||
}
|
||||
}
|
||||
export type Metrics = {
|
||||
[key: string]: [{ date: string; value: number | null }];
|
||||
};
|
||||
export function simplifyDailyMetrics(responseData: Metrics) {
|
||||
const data: IDataObject[] = [];
|
||||
const keys = Object.keys(responseData);
|
||||
const dates = responseData[keys[0]].map((e) => e.date);
|
||||
for (const [index, date] of dates.entries()) {
|
||||
const element: IDataObject = {
|
||||
date,
|
||||
};
|
||||
for (const key of keys) {
|
||||
element[key] = responseData[key][index].value;
|
||||
}
|
||||
data.push(element);
|
||||
}
|
||||
return data;
|
||||
}
|
||||
|
||||
export function simplifyMontlyMetrics(responseData: Metrics) {
|
||||
const data: IDataObject = {};
|
||||
for (const key of Object.keys(responseData)) {
|
||||
for (const [index] of responseData[key].entries()) {
|
||||
data[key] = responseData[key][index].value;
|
||||
data.date = responseData[key][index].date;
|
||||
}
|
||||
}
|
||||
return data;
|
||||
}
|
||||
425
n8n-n8n-1.109.2/packages/nodes-base/nodes/ProfitWell/MetricDescription.ts
Executable file
425
n8n-n8n-1.109.2/packages/nodes-base/nodes/ProfitWell/MetricDescription.ts
Executable file
@@ -0,0 +1,425 @@
|
||||
import type { INodeProperties } from 'n8n-workflow';
|
||||
|
||||
export const metricOperations: INodeProperties[] = [
|
||||
{
|
||||
displayName: 'Operation',
|
||||
name: 'operation',
|
||||
type: 'options',
|
||||
noDataExpression: true,
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['metric'],
|
||||
},
|
||||
},
|
||||
options: [
|
||||
{
|
||||
name: 'Get',
|
||||
value: 'get',
|
||||
description:
|
||||
'Retrieve financial metric broken down by day for either the current month or the last',
|
||||
action: 'Get a metric',
|
||||
},
|
||||
],
|
||||
default: 'get',
|
||||
},
|
||||
];
|
||||
|
||||
export const metricFields: INodeProperties[] = [
|
||||
/* -------------------------------------------------------------------------- */
|
||||
/* metric:get */
|
||||
/* -------------------------------------------------------------------------- */
|
||||
|
||||
{
|
||||
displayName: 'Type',
|
||||
name: 'type',
|
||||
type: 'options',
|
||||
options: [
|
||||
{
|
||||
name: 'Daily',
|
||||
value: 'daily',
|
||||
description:
|
||||
'Retrieve financial metric broken down by day for either the current month or the last',
|
||||
},
|
||||
{
|
||||
name: 'Monthly',
|
||||
value: 'monthly',
|
||||
description: 'Retrieve all monthly financial metric for your company',
|
||||
},
|
||||
],
|
||||
default: '',
|
||||
required: true,
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['metric'],
|
||||
operation: ['get'],
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
displayName: 'Month',
|
||||
name: 'month',
|
||||
type: 'string',
|
||||
default: '',
|
||||
placeholder: 'YYYY-MM',
|
||||
required: true,
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['metric'],
|
||||
operation: ['get'],
|
||||
type: ['daily'],
|
||||
},
|
||||
},
|
||||
description: 'Can only be the current or previous month. Format should be YYYY-MM.',
|
||||
},
|
||||
{
|
||||
displayName: 'Simplify',
|
||||
name: 'simple',
|
||||
type: 'boolean',
|
||||
default: true,
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['metric'],
|
||||
operation: ['get'],
|
||||
},
|
||||
},
|
||||
description: 'Whether to return a simplified version of the response instead of the raw data',
|
||||
},
|
||||
{
|
||||
displayName: 'Options',
|
||||
name: 'options',
|
||||
type: 'collection',
|
||||
placeholder: 'Add option',
|
||||
displayOptions: {
|
||||
show: {
|
||||
resource: ['metric'],
|
||||
operation: ['get'],
|
||||
},
|
||||
},
|
||||
default: {},
|
||||
options: [
|
||||
{
|
||||
displayName: 'Plan Name or ID',
|
||||
name: 'plan_id',
|
||||
type: 'options',
|
||||
typeOptions: {
|
||||
loadOptionsMethod: 'getPlanIds',
|
||||
},
|
||||
default: '',
|
||||
description:
|
||||
'Only return the metric for this Plan ID. Choose from the list, or specify an ID using an <a href="https://docs.n8n.io/code/expressions/">expression</a>.',
|
||||
},
|
||||
{
|
||||
displayName: 'Metrics',
|
||||
name: 'dailyMetrics',
|
||||
type: 'multiOptions',
|
||||
displayOptions: {
|
||||
show: {
|
||||
'/type': ['daily'],
|
||||
},
|
||||
},
|
||||
options: [
|
||||
{
|
||||
name: 'Active Customers',
|
||||
value: 'active_customers',
|
||||
description: 'Number of paying customers',
|
||||
},
|
||||
{
|
||||
name: 'Churned Customers',
|
||||
value: 'churned_customers',
|
||||
description: 'Number of paying customers who churned',
|
||||
},
|
||||
{
|
||||
name: 'Churned Recurring Revenue',
|
||||
value: 'churned_recurring_revenue',
|
||||
description: 'MRR lost to churn (voluntary and delinquent)',
|
||||
},
|
||||
{
|
||||
name: 'Cumulative Net New MRR',
|
||||
value: 'cumulative_net_new_mrr',
|
||||
description:
|
||||
'New + Upgrades - Downgrades - Churn MRR, cumulative for the month up through the given day',
|
||||
},
|
||||
{
|
||||
name: 'Cumulative New Trialing Customers',
|
||||
value: 'cumulative_new_trialing_customers',
|
||||
description:
|
||||
'Number of new trialing customers, cumulative for the month up through the given day',
|
||||
},
|
||||
{
|
||||
name: 'Downgraded Customers',
|
||||
value: 'downgraded_customers',
|
||||
description: 'Number of existing customers who net downgraded',
|
||||
},
|
||||
{
|
||||
name: 'Downgraded Recurring Revenue',
|
||||
value: 'downgraded_recurring_revenue',
|
||||
description: 'How much downgrades and plan length decreases affect your MRR',
|
||||
},
|
||||
{
|
||||
name: 'Future Churn MRR',
|
||||
value: 'future_churn_mrr',
|
||||
description:
|
||||
'MRR that will be lost when users who are currently cancelled actually churn',
|
||||
},
|
||||
{
|
||||
name: 'New Customers',
|
||||
value: 'new_customers',
|
||||
description: 'Number of new, paying customers you have',
|
||||
},
|
||||
{
|
||||
name: 'New Recurring Revenue',
|
||||
value: 'new_recurring_revenue',
|
||||
description: 'MRR from new users',
|
||||
},
|
||||
{
|
||||
name: 'Reactivated Customers',
|
||||
value: 'reactivated_customers',
|
||||
description: 'Number of customers who have reactivated',
|
||||
},
|
||||
{
|
||||
name: 'Reactivated Recurring Revenue',
|
||||
value: 'reactivated_recurring_revenue',
|
||||
description: 'How much MRR comes from reactivated customers',
|
||||
},
|
||||
{
|
||||
name: 'Recurring Revenue',
|
||||
value: 'recurring_revenue',
|
||||
description: "Your company's MRR",
|
||||
},
|
||||
{
|
||||
name: 'Upgraded Customers',
|
||||
value: 'upgraded_customers',
|
||||
description: 'Number of existing customers who net upgraded',
|
||||
},
|
||||
{
|
||||
name: 'Upgraded Recurring Revenue',
|
||||
value: 'upgraded_recurring_revenue',
|
||||
description: 'How much upgrades and plan length increases affect your MRR',
|
||||
},
|
||||
],
|
||||
default: [],
|
||||
description:
|
||||
'Comma-separated list of metric trends to return (the default is to return all metric)',
|
||||
},
|
||||
{
|
||||
displayName: 'Metrics',
|
||||
name: 'monthlyMetrics',
|
||||
type: 'multiOptions',
|
||||
displayOptions: {
|
||||
show: {
|
||||
'/type': ['monthly'],
|
||||
},
|
||||
},
|
||||
options: [
|
||||
{
|
||||
name: 'Active Customers',
|
||||
value: 'active_customers',
|
||||
description: 'Number of paying customers',
|
||||
},
|
||||
{
|
||||
name: 'Active Trialing Customers',
|
||||
value: 'active_trialing_customers',
|
||||
description: 'Number of trialing customers',
|
||||
},
|
||||
{
|
||||
name: 'Average Revenue Per User',
|
||||
value: 'average_revenue_per_user',
|
||||
description: 'ARPU',
|
||||
},
|
||||
{
|
||||
name: 'Churned Customers',
|
||||
value: 'churned_customers',
|
||||
description: 'Number of paying customers who churned',
|
||||
},
|
||||
{
|
||||
name: 'Churned Customers Cancellations',
|
||||
value: 'churned_customers_cancellations',
|
||||
description: 'Number of customers who churned by cancelling their subscription(s)',
|
||||
},
|
||||
{
|
||||
name: 'Churned Customers Delinquent',
|
||||
value: 'churned_customers_delinquent',
|
||||
description: 'Number of customers who churned because they failed to pay you',
|
||||
},
|
||||
{
|
||||
name: 'Churned Recurring Revenue',
|
||||
value: 'churned_recurring_revenue',
|
||||
description: 'Revenue lost to churn (voluntary and delinquent)',
|
||||
},
|
||||
{
|
||||
name: 'Churned Recurring Revenue Cancellations',
|
||||
value: 'churned_recurring_revenue_cancellations',
|
||||
description:
|
||||
'Revenue lost to customers who churned by cancelling their subscription(s)',
|
||||
},
|
||||
{
|
||||
name: 'Churned Recurring Revenue Delinquent',
|
||||
value: 'churned_recurring_revenue_delinquent',
|
||||
description: 'Revenue lost to customers who churned delinquent',
|
||||
},
|
||||
{
|
||||
name: 'Churned Trialing Customers',
|
||||
value: 'churned_trialing_customers',
|
||||
description: 'Number of trialling customers who churned',
|
||||
},
|
||||
{
|
||||
name: 'Converted Customers',
|
||||
value: 'converted_customers',
|
||||
description: 'Number of customers who converted from trialing to active',
|
||||
},
|
||||
{
|
||||
name: 'Converted Recurring Revenue',
|
||||
value: 'converted_recurring_revenue',
|
||||
description: 'How much MRR comes from users who converted from trialing to active',
|
||||
},
|
||||
{
|
||||
name: 'Customer Churn Cancellations Rate',
|
||||
value: 'customers_churn_cancellations_rate',
|
||||
description:
|
||||
'Percentage of paying customers who churned by cancelling their subscription(s)',
|
||||
},
|
||||
{
|
||||
name: 'Customer Churn Delinquent Rate',
|
||||
value: 'customers_churn_delinquent_rate',
|
||||
description:
|
||||
'Percentage of paying customers who churned because they failed to pay you',
|
||||
},
|
||||
{
|
||||
name: 'Customer Churn Rate',
|
||||
value: 'customers_churn_rate',
|
||||
description: 'Percentage of paying customers who churned',
|
||||
},
|
||||
{
|
||||
name: 'Customer Conversion Rate',
|
||||
value: 'customer_conversion_rate',
|
||||
description: 'Percent of trialing customers who converted',
|
||||
},
|
||||
{
|
||||
name: 'Customer Retention Rate',
|
||||
value: 'customers_retention_rate',
|
||||
description: 'Percent of customers active last month who are still active this month',
|
||||
},
|
||||
{
|
||||
name: 'Downgrade Customers',
|
||||
value: 'downgraded_customers',
|
||||
description: 'Number of existing customers who net downgraded',
|
||||
},
|
||||
{
|
||||
name: 'Downgrade Rate',
|
||||
value: 'downgrade_rate',
|
||||
description: 'Downgrade revenue as a percent of existing revenue',
|
||||
},
|
||||
{
|
||||
name: 'Downgrade Recurring Revenue',
|
||||
value: 'downgraded_recurring_revenue',
|
||||
description: 'How much downgrades and plan length decreases affect your MRR',
|
||||
},
|
||||
{
|
||||
name: 'Existing Customers',
|
||||
value: 'existing_customers',
|
||||
description: 'Number of paying customers you had at the start of the given month',
|
||||
},
|
||||
{
|
||||
name: 'Existing Recurring Revenue',
|
||||
value: 'existing_recurring_revenue',
|
||||
description: "Your company's MRR at the start of the given month",
|
||||
},
|
||||
{
|
||||
name: 'Existing Trialing Customers',
|
||||
value: 'existing_trialing_customers',
|
||||
description: 'Number of trialing customers who existed at the start of the month',
|
||||
},
|
||||
{
|
||||
name: 'Growth_Rate',
|
||||
value: 'growth_rate',
|
||||
description: "Rate at which your company's MRR has grown over the previous month",
|
||||
},
|
||||
{
|
||||
name: 'Lifetime Value',
|
||||
value: 'lifetime_value',
|
||||
description: 'Average LTV, as calculated at the end of the given period',
|
||||
},
|
||||
{
|
||||
name: 'New Customers',
|
||||
value: 'new_customers',
|
||||
description: 'Number of new, paying customers you have',
|
||||
},
|
||||
{
|
||||
name: 'New Recurring Revenue',
|
||||
value: 'new_recurring_revenue',
|
||||
description: 'MRR from new users',
|
||||
},
|
||||
{
|
||||
name: 'New Trailing Customers',
|
||||
value: 'new_trialing_customers',
|
||||
description: 'Number of new trialing customers',
|
||||
},
|
||||
{
|
||||
name: 'Plan Changed Rate',
|
||||
value: 'plan_change_rate',
|
||||
description: 'Net change in revenue as a percentage of existing revenue',
|
||||
},
|
||||
{
|
||||
name: 'Plan Changed Recurring Revenue',
|
||||
value: 'plan_changed_recurring_revenue',
|
||||
description: 'Net change in revenue for this plan',
|
||||
},
|
||||
{
|
||||
name: 'Reactivated Customers',
|
||||
value: 'reactivated_customers',
|
||||
description: 'Number of customers who have reactivated',
|
||||
},
|
||||
{
|
||||
name: 'Reactivated Recurring Revenue',
|
||||
value: 'reactivated_recurring_revenue',
|
||||
description: 'How much MRR comes from reactivated customers',
|
||||
},
|
||||
{
|
||||
name: 'Recurring Revenue',
|
||||
value: 'recurring_revenue',
|
||||
description: "Your company's MRR",
|
||||
},
|
||||
{
|
||||
name: 'Revenue Churn Cancellations Rate',
|
||||
value: 'revenue_churn_cancellations_rate',
|
||||
description: "Voluntary churn revenue as a percent of the month's starting revenue",
|
||||
},
|
||||
{
|
||||
name: 'Revenue Churn Delinquent_ Rate',
|
||||
value: 'revenue_churn_delinquent_rate',
|
||||
description: "Delinquent churn revenue as a percent of the month's starting revenue",
|
||||
},
|
||||
{
|
||||
name: 'Revenue Churn Rate',
|
||||
value: 'revenue_churn_rate',
|
||||
description: 'Revenue lost to churn as a percentage of existing revenue',
|
||||
},
|
||||
{
|
||||
name: 'Revenue Retention Rate',
|
||||
value: 'revenue_retention_rate',
|
||||
description:
|
||||
'Percent of revenue coming from existing customers that was retained by the end of the month',
|
||||
},
|
||||
{
|
||||
name: 'Upgrade Rate',
|
||||
value: 'upgrade_rate',
|
||||
description: 'Upgrade revenue as a percent of existing revenue',
|
||||
},
|
||||
{
|
||||
name: 'Upgraded Customers',
|
||||
value: 'upgraded_customers',
|
||||
description: 'Number of existing customers who net upgraded',
|
||||
},
|
||||
{
|
||||
name: 'Upgraded Recurring Revenue',
|
||||
value: 'upgraded_recurring_revenue',
|
||||
description: 'How much upgrades and plan length increases affect your MRR',
|
||||
},
|
||||
],
|
||||
default: [],
|
||||
description:
|
||||
'Comma-separated list of metric trends to return (the default is to return all metric)',
|
||||
},
|
||||
],
|
||||
},
|
||||
];
|
||||
18
n8n-n8n-1.109.2/packages/nodes-base/nodes/ProfitWell/ProfitWell.node.json
Executable file
18
n8n-n8n-1.109.2/packages/nodes-base/nodes/ProfitWell/ProfitWell.node.json
Executable file
@@ -0,0 +1,18 @@
|
||||
{
|
||||
"node": "n8n-nodes-base.profitWell",
|
||||
"nodeVersion": "1.0",
|
||||
"codexVersion": "1.0",
|
||||
"categories": ["Analytics"],
|
||||
"resources": {
|
||||
"credentialDocumentation": [
|
||||
{
|
||||
"url": "https://docs.n8n.io/integrations/builtin/credentials/profitWell/"
|
||||
}
|
||||
],
|
||||
"primaryDocumentation": [
|
||||
{
|
||||
"url": "https://docs.n8n.io/integrations/builtin/app-nodes/n8n-nodes-base.profitwell/"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
150
n8n-n8n-1.109.2/packages/nodes-base/nodes/ProfitWell/ProfitWell.node.ts
Executable file
150
n8n-n8n-1.109.2/packages/nodes-base/nodes/ProfitWell/ProfitWell.node.ts
Executable file
@@ -0,0 +1,150 @@
|
||||
import {
|
||||
type IExecuteFunctions,
|
||||
type IDataObject,
|
||||
type ILoadOptionsFunctions,
|
||||
type INodeExecutionData,
|
||||
type INodePropertyOptions,
|
||||
type INodeType,
|
||||
type INodeTypeDescription,
|
||||
NodeConnectionTypes,
|
||||
} from 'n8n-workflow';
|
||||
|
||||
import { companyOperations } from './CompanyDescription';
|
||||
import type { Metrics } from './GenericFunctions';
|
||||
import {
|
||||
profitWellApiRequest,
|
||||
simplifyDailyMetrics,
|
||||
simplifyMontlyMetrics,
|
||||
} from './GenericFunctions';
|
||||
import { metricFields, metricOperations } from './MetricDescription';
|
||||
|
||||
export class ProfitWell implements INodeType {
|
||||
description: INodeTypeDescription = {
|
||||
displayName: 'ProfitWell',
|
||||
name: 'profitWell',
|
||||
|
||||
icon: { light: 'file:profitwell.svg', dark: 'file:profitwell.dark.svg' },
|
||||
group: ['output'],
|
||||
version: 1,
|
||||
subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}',
|
||||
description: 'Consume ProfitWell API',
|
||||
defaults: {
|
||||
name: 'ProfitWell',
|
||||
},
|
||||
usableAsTool: true,
|
||||
inputs: [NodeConnectionTypes.Main],
|
||||
outputs: [NodeConnectionTypes.Main],
|
||||
credentials: [
|
||||
{
|
||||
name: 'profitWellApi',
|
||||
required: true,
|
||||
},
|
||||
],
|
||||
properties: [
|
||||
{
|
||||
displayName: 'Resource',
|
||||
name: 'resource',
|
||||
type: 'options',
|
||||
noDataExpression: true,
|
||||
options: [
|
||||
{
|
||||
name: 'Company',
|
||||
value: 'company',
|
||||
},
|
||||
{
|
||||
name: 'Metric',
|
||||
value: 'metric',
|
||||
},
|
||||
],
|
||||
default: 'metric',
|
||||
},
|
||||
// COMPANY
|
||||
...companyOperations,
|
||||
// METRICS
|
||||
...metricOperations,
|
||||
...metricFields,
|
||||
],
|
||||
};
|
||||
|
||||
methods = {
|
||||
loadOptions: {
|
||||
async getPlanIds(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]> {
|
||||
const returnData: INodePropertyOptions[] = [];
|
||||
const planIds = await profitWellApiRequest.call(this, 'GET', '/metrics/plans');
|
||||
for (const planId of planIds.plan_ids) {
|
||||
returnData.push({
|
||||
name: planId,
|
||||
value: planId,
|
||||
});
|
||||
}
|
||||
return returnData;
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
async execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]> {
|
||||
const items = this.getInputData();
|
||||
const returnData: IDataObject[] = [];
|
||||
const length = items.length;
|
||||
const qs: IDataObject = {};
|
||||
let responseData;
|
||||
const resource = this.getNodeParameter('resource', 0);
|
||||
const operation = this.getNodeParameter('operation', 0);
|
||||
for (let i = 0; i < length; i++) {
|
||||
try {
|
||||
if (resource === 'company') {
|
||||
if (operation === 'getSetting') {
|
||||
responseData = await profitWellApiRequest.call(this, 'GET', '/company/settings/');
|
||||
}
|
||||
}
|
||||
if (resource === 'metric') {
|
||||
if (operation === 'get') {
|
||||
const type = this.getNodeParameter('type', i) as string;
|
||||
|
||||
const simple = this.getNodeParameter('simple', 0) as boolean;
|
||||
|
||||
if (type === 'daily') {
|
||||
qs.month = this.getNodeParameter('month', i) as string;
|
||||
}
|
||||
const options = this.getNodeParameter('options', i);
|
||||
|
||||
Object.assign(qs, options);
|
||||
|
||||
if (qs.dailyMetrics) {
|
||||
qs.metrics = (qs.dailyMetrics as string[]).join(',');
|
||||
delete qs.dailyMetrics;
|
||||
}
|
||||
|
||||
if (qs.monthlyMetrics) {
|
||||
qs.metrics = (qs.monthlyMetrics as string[]).join(',');
|
||||
delete qs.monthlyMetrics;
|
||||
}
|
||||
|
||||
responseData = await profitWellApiRequest.call(this, 'GET', `/metrics/${type}`, {}, qs);
|
||||
responseData = responseData.data as Metrics;
|
||||
|
||||
if (simple) {
|
||||
if (type === 'daily') {
|
||||
responseData = simplifyDailyMetrics(responseData);
|
||||
} else {
|
||||
responseData = simplifyMontlyMetrics(responseData);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (Array.isArray(responseData)) {
|
||||
returnData.push.apply(returnData, responseData as IDataObject[]);
|
||||
} else {
|
||||
returnData.push(responseData as IDataObject);
|
||||
}
|
||||
} catch (error) {
|
||||
if (this.continueOnFail()) {
|
||||
returnData.push({ error: error.message });
|
||||
continue;
|
||||
}
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
return [this.helpers.returnJsonArray(returnData)];
|
||||
}
|
||||
}
|
||||
5
n8n-n8n-1.109.2/packages/nodes-base/nodes/ProfitWell/profitwell.dark.svg
Executable file
5
n8n-n8n-1.109.2/packages/nodes-base/nodes/ProfitWell/profitwell.dark.svg
Executable file
@@ -0,0 +1,5 @@
|
||||
<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M30.0083 20.9944H39.9973L30.0083 10.9917V20.9944Z" fill="#09B8A0"/>
|
||||
<path d="M18.9718 21.0144H11.0405C10.4665 21.0144 10.001 20.55 9.99997 19.9764V12.0496C9.99997 11.4754 10.4658 11.0099 11.0405 11.0099H18.9736C19.5466 11.0109 20.0105 11.4753 20.0105 12.0478V19.9729C20.0105 20.5471 19.5447 21.0126 18.97 21.0126M30.0049 10.9884L21.469 2.45918C21.0493 2.03983 20.5586 1.69814 20.0195 1.44994V1.4607C19.3656 1.15789 18.6537 1.00069 17.9331 1H12.0738C10.7692 1.00119 9.51709 1.51349 8.5863 2.42691L1.39593 9.61164V9.6224C0.49993 10.5508 -0.000451194 11.7905 6.18382e-05 13.0803V28.9305C-0.0067181 30.2921 0.544276 31.5973 1.52509 32.5426L7.8687 38.8812C8.20204 39.2058 8.68775 39.3196 9.13076 39.1768C9.57377 39.034 9.90138 38.6581 9.98203 38.2H10.0036V32.055C10.0036 31.4818 10.4686 31.0171 11.0423 31.0171H17.9277C19.2577 31.0191 20.5334 30.4899 21.4708 29.5471H21.4816L28.4782 22.556V22.5399C28.5518 22.47 28.6182 22.3929 28.6881 22.3194L30.0103 20.9911L30.0049 10.9884Z" fill="white"/>
|
||||
<path d="M39.9991 36.5705C40 36.561 40 36.5514 39.9991 36.5418V20.9946H30.0083V36.5418C30.0083 36.61 29.9976 36.6781 29.9976 36.7462C30.0025 38.1252 31.1201 39.2419 32.5002 39.2469H37.5055C38.8206 39.2461 39.9105 38.2276 39.9991 36.9165V36.5705Z" fill="white"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
5
n8n-n8n-1.109.2/packages/nodes-base/nodes/ProfitWell/profitwell.svg
Executable file
5
n8n-n8n-1.109.2/packages/nodes-base/nodes/ProfitWell/profitwell.svg
Executable file
@@ -0,0 +1,5 @@
|
||||
<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M30.0083 20.9944H39.9973L30.0083 10.9917V20.9944Z" fill="#09B8A0"/>
|
||||
<path d="M18.9718 21.0144H11.0405C10.4665 21.0144 10.001 20.55 9.99997 19.9764V12.0496C9.99997 11.4754 10.4658 11.0099 11.0405 11.0099H18.9736C19.5466 11.0109 20.0105 11.4753 20.0105 12.0478V19.9729C20.0105 20.5471 19.5447 21.0126 18.97 21.0126M30.0049 10.9884L21.469 2.45918C21.0493 2.03983 20.5586 1.69814 20.0195 1.44994V1.4607C19.3656 1.15789 18.6537 1.00069 17.9331 1H12.0738C10.7692 1.00119 9.51709 1.51349 8.5863 2.42691L1.39593 9.61164V9.6224C0.49993 10.5508 -0.000451194 11.7905 6.18382e-05 13.0803V28.9305C-0.0067181 30.2921 0.544276 31.5973 1.52509 32.5426L7.8687 38.8812C8.20204 39.2058 8.68775 39.3196 9.13076 39.1768C9.57377 39.034 9.90138 38.6581 9.98203 38.2H10.0036V32.055C10.0036 31.4818 10.4686 31.0171 11.0423 31.0171H17.9277C19.2577 31.0191 20.5334 30.4899 21.4708 29.5471H21.4816L28.4782 22.556V22.5399C28.5518 22.47 28.6182 22.3929 28.6881 22.3194L30.0103 20.9911L30.0049 10.9884Z" fill="#21323B"/>
|
||||
<path d="M39.9991 36.5705C40 36.561 40 36.5514 39.9991 36.5418V20.9946H30.0083V36.5418C30.0083 36.61 29.9976 36.6781 29.9976 36.7462C30.0025 38.1252 31.1201 39.2419 32.5002 39.2469H37.5055C38.8206 39.2461 39.9105 38.2276 39.9991 36.9165V36.5705Z" fill="#21323B"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
Reference in New Issue
Block a user