Add Stripe regular node (#1470)

* 🎉 Register node

* 🎨 Add SVG icon

*  Add preliminary node stub

*  Add resource description stubs

* 🎨 Fix SVG size and position

*  Implement charge operations

*  Implement customer operations

* 🎨 Apply cosmetic changes

*  Fix customer address fields

*  Add stub and fields for invoice

*  Add invoice item stubs

*  Implement source operations

*  Reduce scope per feedback

*  Add continueOnFail functionality

* 🎨 Prettify error thrown

* 🔥 Remove unused resource

*  Replace source in card with token

* 🔨 Remove logging

* 🔧 Fix shipping address in charge:create

* 🔧 Load update fields for charge:update

*  Implement token:create to ease testing

*  Simplify card token fields

*  Update description parameters

* 🔧 Fix field adjusters

*  Remove unused source options

* 🔧 Fix shipping fields adjuster

* 🔥 Remove PNG icon

* 🔥 Remove logging

* 🔨 Reorder address fields

* 🐛 Fix shipping field in charge:update

* 💄 Apply cosmetic change

*  Small improvements

*  Fix lintings in main file

*  Lint all descriptions

*  Add target="_blank" attribute

*  Fix various lintings for charge

*  Fix lintings for coupon

*  Fix lintings for customer

*  Fix lintings for source

*  Fix lintings for token

*  Reorder address fields

*  Fix casing in credentials

* 🔨 Place recipient name above address in shipping

*  Remove references to string in descriptions

*  Apply minor renamings

* 🔥 Remove logging

* 🔨 Simplify error handling

*  Fix indentation

*  Move cardFields to root level for Token creation

Co-authored-by: ricardo <ricardoespinoza105@gmail.com>
Co-authored-by: Jan Oberhauser <jan.oberhauser@gmail.com>
This commit is contained in:
Iván Ovejero
2021-07-10 13:15:14 +02:00
committed by GitHub
parent a3ec24e912
commit b4f4ecc77e
14 changed files with 2609 additions and 5 deletions

View File

@@ -0,0 +1,27 @@
import {
INodeProperties,
} from 'n8n-workflow';
export const balanceOperations = [
{
displayName: 'Operation',
name: 'operation',
type: 'options',
default: 'get',
description: 'Operation to perform',
options: [
{
name: 'Get',
value: 'get',
description: 'Get a balance',
},
],
displayOptions: {
show: {
resource: [
'balance',
],
},
},
},
] as INodeProperties[];

View File

@@ -0,0 +1,509 @@
import {
INodeProperties,
} from 'n8n-workflow';
export const chargeOperations = [
{
displayName: 'Operation',
name: 'operation',
type: 'options',
default: 'get',
description: 'Operation to perform',
options: [
{
name: 'Create',
value: 'create',
description: 'Create a charge',
},
{
name: 'Get',
value: 'get',
description: 'Get a charge',
},
{
name: 'Get All',
value: 'getAll',
description: 'Get all charges',
},
{
name: 'Update',
value: 'update',
description: 'Update a charge',
},
],
displayOptions: {
show: {
resource: [
'charge',
],
},
},
},
] as INodeProperties[];
export const chargeFields = [
// ----------------------------------
// charge: create
// ----------------------------------
{
displayName: 'Customer ID',
name: 'customerId',
type: 'string',
required: true,
default: '',
description: 'ID of the customer to be associated with this charge',
displayOptions: {
show: {
resource: [
'charge',
],
operation: [
'create',
],
},
},
},
{
displayName: 'Amount',
name: 'amount',
type: 'number',
required: true,
default: 0,
description: 'Amount in cents to be collected for this charge, e.g. enter <code>100</code> for $1.00',
typeOptions: {
minValue: 0,
maxValue: 99999999,
},
displayOptions: {
show: {
resource: [
'charge',
],
operation: [
'create',
],
},
},
},
{
displayName: 'Currency',
name: 'currency',
type: 'options',
typeOptions: {
loadOptionsMethod: 'getCurrencies',
},
required: true,
default: '',
description: 'Three-letter ISO currency code, e.g. <code>USD</code> or <code>EUR</code>. It must be a <a target="_blank" href="https://stripe.com/docs/currencies">Stripe-supported currency</a>',
displayOptions: {
show: {
resource: [
'charge',
],
operation: [
'create',
],
},
},
},
{
displayName: 'Source ID',
name: 'source',
type: 'string',
required: true,
default: '',
description: 'ID of the customer\'s payment source to be charged',
displayOptions: {
show: {
resource: [
'charge',
],
operation: [
'create',
],
},
},
},
{
displayName: 'Additional Fields',
name: 'additionalFields',
type: 'collection',
placeholder: 'Add Field',
default: {},
displayOptions: {
show: {
resource: [
'charge',
],
operation: [
'create',
],
},
},
options: [
{
displayName: 'Description',
name: 'description',
type: 'string',
default: '',
description: 'Arbitrary text to describe the charge to create',
},
{
displayName: 'Metadata',
name: 'metadata',
type: 'fixedCollection',
default: [],
placeholder: 'Add Metadata Item',
description: 'Set of key-value pairs to attach to the charge to create',
typeOptions: {
multipleValues: true,
},
options: [
{
displayName: 'Metadata Properties',
name: 'metadataProperties',
values: [
{
displayName: 'Key',
name: 'key',
type: 'string',
default: '',
},
{
displayName: 'Value',
name: 'value',
type: 'string',
default: '',
},
],
},
],
},
{
displayName: 'Receipt Email',
name: 'receipt_email',
type: 'string',
default: '',
description: 'Email address to which the receipt for this charge will be sent',
},
{
displayName: 'Shipping',
name: 'shipping',
type: 'fixedCollection',
description: 'Shipping information for the charge',
placeholder: 'Add Field',
typeOptions: {
multipleValues: true,
},
default: [],
options: [
{
displayName: 'Shipping Properties',
name: 'shippingProperties',
values: [
{
displayName: 'Recipient Name',
name: 'name',
type: 'string',
description: 'Name of the person who will receive the shipment',
default: '',
},
{
displayName: 'Address',
name: 'address',
type: 'fixedCollection',
default: {},
placeholder: 'Add Field',
options: [
{
displayName: 'Details',
name: 'details',
values: [
{
displayName: 'Line 1',
name: 'line1',
description: 'Address line 1 (e.g. street, PO Box, or company name)',
type: 'string',
default: '',
},
{
displayName: 'Line 2',
name: 'line2',
description: 'Address line 2 (e.g. apartment, suite, unit, or building)',
type: 'string',
default: '',
},
{
displayName: 'City',
name: 'city',
description: 'City, district, suburb, town, or village',
type: 'string',
default: '',
},
{
displayName: 'State',
name: 'state',
description: 'State, county, province, or region',
type: 'string',
default: '',
},
{
displayName: 'Country',
name: 'country',
description: 'Two-letter country code (<a target="_blank" href="https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2">ISO 3166-1 alpha-2</a>)',
type: 'string',
default: '',
},
{
displayName: 'Postal Code',
name: 'postal_code',
description: 'ZIP or postal code',
type: 'string',
default: '',
},
],
},
],
},
],
},
],
},
],
},
// ----------------------------------
// charge: get
// ----------------------------------
{
displayName: 'Charge ID',
name: 'chargeId',
type: 'string',
required: true,
default: '',
description: 'ID of the charge to retrieve.',
displayOptions: {
show: {
resource: [
'charge',
],
operation: [
'get',
],
},
},
},
// ----------------------------------
// charge: getAll
// ----------------------------------
{
displayName: 'Return All',
name: 'returnAll',
type: 'boolean',
default: false,
description: 'Whether to return all results or only up to a given limit',
displayOptions: {
show: {
resource: [
'charge',
],
operation: [
'getAll',
],
},
},
},
{
displayName: 'Limit',
name: 'limit',
type: 'number',
default: 50,
description: 'How many results to return',
typeOptions: {
minValue: 1,
maxValue: 1000,
},
displayOptions: {
show: {
resource: [
'charge',
],
operation: [
'getAll',
],
returnAll: [
false,
],
},
},
},
// ----------------------------------
// charge: update
// ----------------------------------
{
displayName: 'Charge ID',
name: 'chargeId',
type: 'string',
required: true,
default: '',
description: 'ID of the charge to update',
displayOptions: {
show: {
resource: [
'charge',
],
operation: [
'update',
],
},
},
},
{
displayName: 'Update Fields',
name: 'updateFields',
type: 'collection',
placeholder: 'Add Field',
default: {},
displayOptions: {
show: {
resource: [
'charge',
],
operation: [
'update',
],
},
},
options: [
{
displayName: 'Description',
name: 'description',
type: 'string',
default: '',
description: 'Arbitrary text to describe the charge to update',
},
{
displayName: 'Metadata',
name: 'metadata',
type: 'fixedCollection',
placeholder: 'Add Metadata Item',
description: 'Set of key-value pairs to attach to the charge to update',
typeOptions: {
multipleValues: true,
},
options: [
{
displayName: 'Metadata Properties',
name: 'metadataProperties',
values: [
{
displayName: 'Key',
name: 'key',
type: 'string',
default: '',
},
{
displayName: 'Value',
name: 'value',
type: 'string',
default: '',
},
],
},
],
},
{
displayName: 'Receipt Email',
name: 'receipt_email',
type: 'string',
default: '',
description: 'The email address to which the receipt for this charge will be sent',
},
{
displayName: 'Shipping',
name: 'shipping',
type: 'fixedCollection',
description: 'Shipping information for the charge',
placeholder: 'Add Field',
typeOptions: {
multipleValues: true,
},
options: [
{
displayName: 'Shipping Properties',
name: 'shippingProperties',
default: {},
values: [
{
displayName: 'Recipient Name',
name: 'name',
type: 'string',
default: '',
},
{
displayName: 'Recipient Address',
name: 'address',
type: 'fixedCollection',
default: {},
placeholder: 'Add Address Details',
options: [
{
displayName: 'Details',
name: 'details',
values: [
{
displayName: 'Line 1',
name: 'line1',
description: 'Address line 1 (e.g. street, PO Box, or company name)',
type: 'string',
default: '',
},
{
displayName: 'Line 2',
name: 'line2',
description: 'Address line 2 (e.g. apartment, suite, unit, or building)',
type: 'string',
default: '',
},
{
displayName: 'City',
name: 'city',
description: 'City, district, suburb, town, or village',
type: 'string',
default: '',
},
{
displayName: 'State',
name: 'state',
description: 'State, county, province, or region',
type: 'string',
default: '',
},
{
displayName: 'Country',
name: 'country',
description: 'Two-letter country code (<a target="_blank" href="https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2">ISO 3166-1 alpha-2</a>)',
type: 'string',
default: '',
},
{
displayName: 'Postal Code',
name: 'postal_code',
description: 'ZIP or postal code',
type: 'string',
default: '',
},
],
},
],
},
],
},
],
},
],
},
] as INodeProperties[];

View File

@@ -0,0 +1,213 @@
import {
INodeProperties,
} from 'n8n-workflow';
export const couponOperations = [
{
displayName: 'Operation',
name: 'operation',
type: 'options',
default: 'create',
description: 'Operation to perform',
options: [
{
name: 'Create',
value: 'create',
description: 'Create a coupon',
},
{
name: 'Get All',
value: 'getAll',
description: 'Get all coupons',
},
],
displayOptions: {
show: {
resource: [
'coupon',
],
},
},
},
] as INodeProperties[];
export const couponFields = [
// ----------------------------------
// coupon: create
// ----------------------------------
{
displayName: 'Apply',
name: 'duration',
type: 'options',
required: true,
default: 'once',
description: 'How long the discount will be in effect',
options: [
{
name: 'Forever',
value: 'forever',
},
{
name: 'Once',
value: 'once',
},
],
displayOptions: {
show: {
resource: [
'coupon',
],
operation: [
'create',
],
},
},
},
{
displayName: 'Discount Type',
name: 'type',
type: 'options',
required: true,
default: 'percent',
description: 'Whether the coupon discount is a percentage or a fixed amount',
options: [
{
name: 'Fixed Amount (in Cents)',
value: 'fixedAmount',
},
{
name: 'Percent',
value: 'percent',
},
],
displayOptions: {
show: {
resource: [
'coupon',
],
operation: [
'create',
],
},
},
},
{
displayName: 'Amount Off',
name: 'amountOff',
type: 'number',
required: true,
default: 0,
description: 'Amount in cents to subtract from an invoice total, e.g. enter <code>100</code> for $1.00',
typeOptions: {
minValue: 0,
maxValue: 99999999,
},
displayOptions: {
show: {
resource: [
'coupon',
],
operation: [
'create',
],
type: [
'fixedAmount',
],
},
},
},
{
displayName: 'Currency',
name: 'currency',
type: 'options',
typeOptions: {
loadOptionsMethod: 'getCurrencies',
},
required: true,
default: '',
description: 'Three-letter ISO currency code, e.g. <code>USD</code> or <code>EUR</code>. It must be a <a target="_blank" href="https://stripe.com/docs/currencies">Stripe-supported currency</a>',
displayOptions: {
show: {
resource: [
'coupon',
],
operation: [
'create',
],
type: [
'fixedAmount',
],
},
},
},
{
displayName: 'Percent Off',
name: 'percentOff',
type: 'number',
required: true,
default: 1,
description: 'Percentage to apply with the coupon',
typeOptions: {
minValue: 1,
maxValue: 100,
},
displayOptions: {
show: {
resource: [
'coupon',
],
operation: [
'create',
],
type: [
'percent',
],
},
},
},
// ----------------------------------
// coupon: getAll
// ----------------------------------
{
displayName: 'Return All',
name: 'returnAll',
type: 'boolean',
default: false,
description: 'Whether to return all results or only up to a given limit',
displayOptions: {
show: {
resource: [
'coupon',
],
operation: [
'getAll',
],
},
},
},
{
displayName: 'Limit',
name: 'limit',
type: 'number',
default: 50,
description: 'How many results to return',
typeOptions: {
minValue: 1,
maxValue: 1000,
},
displayOptions: {
show: {
resource: [
'coupon',
],
operation: [
'getAll',
],
returnAll: [
false,
],
},
},
},
] as INodeProperties[];

View File

@@ -0,0 +1,160 @@
import {
INodeProperties,
} from 'n8n-workflow';
export const customerCardOperations = [
{
displayName: 'Operation',
name: 'operation',
type: 'options',
default: 'get',
description: 'Operation to perform',
options: [
{
name: 'Add',
value: 'add',
description: 'Add a customer card',
},
{
name: 'Get',
value: 'get',
description: 'Get a customer card',
},
{
name: 'Remove',
value: 'remove',
description: 'Remove a customer card',
},
],
displayOptions: {
show: {
resource: [
'customerCard',
],
},
},
},
] as INodeProperties[];
export const customerCardFields = [
// ----------------------------------
// customerCard: add
// ----------------------------------
{
displayName: 'Customer ID',
name: 'customerId',
type: 'string',
required: true,
default: '',
description: 'ID of the customer to be associated with this card',
displayOptions: {
show: {
resource: [
'customerCard',
],
operation: [
'add',
],
},
},
},
{
displayName: 'Card Token',
name: 'token',
type: 'string',
required: true,
default: '',
placeholder: 'tok_1IMfKdJhRTnqS5TKQVG1LI9o',
description: 'Token representing sensitive card information',
displayOptions: {
show: {
resource: [
'customerCard',
],
operation: [
'add',
],
},
},
},
// ----------------------------------
// customerCard: remove
// ----------------------------------
{
displayName: 'Customer ID',
name: 'customerId',
type: 'string',
required: true,
default: '',
description: 'ID of the customer whose card to remove',
displayOptions: {
show: {
resource: [
'customerCard',
],
operation: [
'remove',
],
},
},
},
{
displayName: 'Card ID',
name: 'cardId',
type: 'string',
required: true,
default: '',
description: 'ID of the card to remove',
displayOptions: {
show: {
resource: [
'customerCard',
],
operation: [
'remove',
],
},
},
},
// ----------------------------------
// customerCard: get
// ----------------------------------
{
displayName: 'Customer ID',
name: 'customerId',
type: 'string',
required: true,
default: '',
description: 'ID of the customer whose card to retrieve',
displayOptions: {
show: {
resource: [
'customerCard',
],
operation: [
'get',
],
},
},
},
{
displayName: 'Source ID',
name: 'sourceId',
type: 'string',
required: true,
default: '',
description: 'ID of the source to retrieve',
displayOptions: {
show: {
resource: [
'customerCard',
],
operation: [
'get',
],
},
},
},
] as INodeProperties[];

View File

@@ -0,0 +1,649 @@
import {
INodeProperties,
} from 'n8n-workflow';
export const customerOperations = [
{
displayName: 'Operation',
name: 'operation',
type: 'options',
default: 'get',
description: 'Operation to perform',
options: [
{
name: 'Create',
value: 'create',
description: 'Create a customer',
},
{
name: 'Delete',
value: 'delete',
description: 'Delete a customer',
},
{
name: 'Get',
value: 'get',
description: 'Get a customer',
},
{
name: 'Get All',
value: 'getAll',
description: 'Get all customers',
},
{
name: 'Update',
value: 'update',
description: 'Update a customer',
},
],
displayOptions: {
show: {
resource: [
'customer',
],
},
},
},
] as INodeProperties[];
export const customerFields = [
// ----------------------------------
// customer: create
// ----------------------------------
{
displayName: 'Name',
name: 'name',
type: 'string',
required: true,
default: '',
description: 'Full name or business name of the customer to create',
displayOptions: {
show: {
resource: [
'customer',
],
operation: [
'create',
],
},
},
},
{
displayName: 'Additional Fields',
name: 'additionalFields',
type: 'collection',
placeholder: 'Add Field',
default: {},
displayOptions: {
show: {
resource: [
'customer',
],
operation: [
'create',
],
},
},
options: [
{
displayName: 'Address',
name: 'address',
type: 'fixedCollection',
description: 'Address of the customer to create',
placeholder: 'Add Field',
default: {},
options: [
{
displayName: 'Details',
name: 'details',
values: [
{
displayName: 'Line 1',
name: 'line1',
description: 'Address line 1 (e.g. street, PO Box, or company name)',
type: 'string',
default: '',
},
{
displayName: 'Line 2',
name: 'line2',
description: 'Address line 2 (e.g. apartment, suite, unit, or building)',
type: 'string',
default: '',
},
{
displayName: 'City',
name: 'city',
description: 'City, district, suburb, town, or village',
type: 'string',
default: '',
},
{
displayName: 'State',
name: 'state',
description: 'State, county, province, or region',
type: 'string',
default: '',
},
{
displayName: 'Country',
name: 'country',
description: 'Two-letter country code (<a target="_blank" href="https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2">ISO 3166-1 alpha-2</a>)',
type: 'string',
default: '',
},
{
displayName: 'Postal Code',
name: 'postal_code',
description: 'ZIP or postal code',
type: 'string',
default: '',
},
],
},
],
},
{
displayName: 'Description',
name: 'description',
type: 'string',
default: '',
description: 'Arbitrary text to describe the customer to create',
},
{
displayName: 'Email',
name: 'email',
type: 'string',
default: '',
description: 'Email of the customer to create',
},
{
displayName: 'Metadata',
name: 'metadata',
type: 'fixedCollection',
default: {},
placeholder: 'Add Metadata Item',
description: 'Set of key-value pairs to attach to the customer to create',
typeOptions: {
multipleValues: true,
},
options: [
{
displayName: 'Metadata Properties',
name: 'metadataProperties',
values: [
{
displayName: 'Key',
name: 'key',
type: 'string',
default: '',
},
{
displayName: 'Value',
name: 'value',
type: 'string',
default: '',
},
],
},
],
},
{
displayName: 'Phone',
name: 'phone',
type: 'string',
default: '',
description: 'Telephone number of the customer to create',
},
{
displayName: 'Shipping',
name: 'shipping',
type: 'fixedCollection',
description: 'Shipping information for the customer',
typeOptions: {
multipleValues: true,
},
placeholder: 'Add Field',
options: [
{
displayName: 'Shipping Properties',
name: 'shippingProperties',
values: [
{
displayName: 'Recipient Name',
name: 'name',
type: 'string',
default: '',
},
{
displayName: 'Recipient Address',
name: 'address',
type: 'fixedCollection',
default: {},
placeholder: 'Add Address Details',
options: [
{
displayName: 'Details',
name: 'details',
values: [
{
displayName: 'Line 1',
name: 'line1',
description: 'Address line 1 (e.g. street, PO Box, or company name)',
type: 'string',
default: '',
},
{
displayName: 'Line 2',
name: 'line2',
description: 'Address line 2 (e.g. apartment, suite, unit, or building)',
type: 'string',
default: '',
},
{
displayName: 'City',
name: 'city',
description: 'City, district, suburb, town, or village',
type: 'string',
default: '',
},
{
displayName: 'State',
name: 'state',
description: 'State, county, province, or region',
type: 'string',
default: '',
},
{
displayName: 'Country',
name: 'country',
description: 'Two-letter country code (<a target="_blank" href="https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2">ISO 3166-1 alpha-2</a>)',
type: 'string',
default: '',
},
{
displayName: 'Postal Code',
name: 'postal_code',
description: 'ZIP or postal code',
type: 'string',
default: '',
},
],
},
],
},
{
displayName: 'Recipient Phone',
name: 'phone',
type: 'string',
default: '',
},
],
},
],
},
],
},
// ----------------------------------
// customer: delete
// ----------------------------------
{
displayName: 'Customer ID',
name: 'customerId',
type: 'string',
required: true,
default: '',
description: 'ID of the customer to delete',
displayOptions: {
show: {
resource: [
'customer',
],
operation: [
'delete',
],
},
},
},
// ----------------------------------
// customer: get
// ----------------------------------
{
displayName: 'Customer ID',
name: 'customerId',
type: 'string',
required: true,
default: '',
description: 'ID of the customer to retrieve',
displayOptions: {
show: {
resource: [
'customer',
],
operation: [
'get',
],
},
},
},
// ----------------------------------
// customer: getAll
// ----------------------------------
{
displayName: 'Return All',
name: 'returnAll',
type: 'boolean',
default: false,
description: 'Whether to return all results or only up to a given limit',
displayOptions: {
show: {
resource: [
'customer',
],
operation: [
'getAll',
],
},
},
},
{
displayName: 'Limit',
name: 'limit',
type: 'number',
default: 50,
description: 'How many results to return',
typeOptions: {
minValue: 1,
maxValue: 1000,
},
displayOptions: {
show: {
resource: [
'customer',
],
operation: [
'getAll',
],
returnAll: [
false,
],
},
},
},
{
displayName: 'Filters',
name: 'filters',
type: 'collection',
placeholder: 'Add Filter',
default: {},
displayOptions: {
show: {
resource: [
'customer',
],
operation: [
'getAll',
],
},
},
options: [
{
displayName: 'Email',
name: 'email',
type: 'string',
default: '',
description: 'Customer\'s email to filter by',
},
],
},
// ----------------------------------
// customer: update
// ----------------------------------
{
displayName: 'Customer ID',
name: 'customerId',
type: 'string',
required: true,
default: '',
description: 'ID of the customer to update',
displayOptions: {
show: {
resource: [
'customer',
],
operation: [
'update',
],
},
},
},
{
displayName: 'Update Fields',
name: 'updateFields',
type: 'collection',
placeholder: 'Add Field',
default: {},
displayOptions: {
show: {
resource: [
'customer',
],
operation: [
'update',
],
},
},
options: [
{
displayName: 'Address',
name: 'address',
type: 'fixedCollection',
description: 'Address of the customer to update',
placeholder: 'Add Field',
default: {},
options: [
{
displayName: 'Details',
name: 'details',
values: [
{
displayName: 'Line 1',
name: 'line1',
description: 'Address line 1 (e.g. street, PO Box, or company name)',
type: 'string',
default: '',
},
{
displayName: 'Line 2',
name: 'line2',
description: 'Address line 2 (e.g. apartment, suite, unit, or building)',
type: 'string',
default: '',
},
{
displayName: 'City',
name: 'city',
description: 'City, district, suburb, town, or village',
type: 'string',
default: '',
},
{
displayName: 'State',
name: 'state',
description: 'State, county, province, or region',
type: 'string',
default: '',
},
{
displayName: 'Country',
name: 'country',
description: 'Two-letter country code (<a target="_blank" href="https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2">ISO 3166-1 alpha-2</a>)',
type: 'string',
default: '',
},
{
displayName: 'Postal Code',
name: 'postal_code',
description: 'ZIP or postal code',
type: 'string',
default: '',
},
],
},
],
},
{
displayName: 'Description',
name: 'description',
type: 'string',
default: '',
description: 'Arbitrary text to describe the customer to create',
},
{
displayName: 'Email',
name: 'email',
type: 'string',
default: '',
description: 'Email of the customer to create',
},
{
displayName: 'Metadata',
name: 'metadata',
type: 'fixedCollection',
placeholder: 'Add Metadata Item',
description: 'Set of key-value pairs to attach to the customer to create',
typeOptions: {
multipleValues: true,
},
options: [
{
displayName: 'Metadata Properties',
name: 'metadataProperties',
values: [
{
displayName: 'Key',
name: 'key',
type: 'string',
default: '',
},
{
displayName: 'Value',
name: 'value',
type: 'string',
default: '',
},
],
},
],
},
{
displayName: 'Name',
name: 'name',
type: 'string',
default: '',
description: 'Full name or business name of the customer to create',
},
{
displayName: 'Phone',
name: 'phone',
type: 'string',
default: '',
description: 'Telephone number of this customer',
},
{
displayName: 'Shipping',
name: 'shipping',
type: 'fixedCollection',
description: 'Shipping information for the customer',
placeholder: 'Add Field',
typeOptions: {
multipleValues: true,
},
default: {},
options: [
{
displayName: 'Shipping Properties',
name: 'shippingProperties',
values: [
{
displayName: 'Recipient Name',
name: 'name',
type: 'string',
default: '',
description: 'Name of the person who will receive the shipment',
},
{
displayName: 'Recipient Address',
name: 'address',
type: 'fixedCollection',
default: {},
placeholder: 'Add Address Details',
options: [
{
displayName: 'Details',
name: 'details',
values: [
{
displayName: 'Line 1',
name: 'line1',
description: 'Address line 1 (e.g. street, PO Box, or company name)',
type: 'string',
default: '',
},
{
displayName: 'Line 2',
name: 'line2',
description: 'Address line 2 (e.g. apartment, suite, unit, or building)',
type: 'string',
default: '',
},
{
displayName: 'City',
name: 'city',
description: 'City, district, suburb, town, or village',
type: 'string',
default: '',
},
{
displayName: 'State',
name: 'state',
description: 'State, county, province, or region',
type: 'string',
default: '',
},
{
displayName: 'Country',
name: 'country',
description: 'Two-letter country code (<a target="_blank" href="https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2">ISO 3166-1 alpha-2</a>)',
type: 'string',
default: '',
},
{
displayName: 'Postal Code',
name: 'postal_code',
description: 'ZIP or postal code',
type: 'string',
default: '',
},
],
},
],
},
{
displayName: 'Recipient Phone',
name: 'phone',
type: 'string',
default: '',
description: 'Phone number of the person who will receive the shipment',
},
],
},
],
},
],
},
] as INodeProperties[];

View File

@@ -0,0 +1,246 @@
import {
INodeProperties,
} from 'n8n-workflow';
export const sourceOperations = [
{
displayName: 'Operation',
name: 'operation',
type: 'options',
default: 'get',
description: 'Operation to perform',
options: [
{
name: 'Create',
value: 'create',
description: 'Create a source',
},
{
name: 'Delete',
value: 'delete',
description: 'Delete a source',
},
{
name: 'Get',
value: 'get',
description: 'Get a source',
},
],
displayOptions: {
show: {
resource: [
'source',
],
},
},
},
] as INodeProperties[];
export const sourceFields = [
// ----------------------------------
// source: create
// ----------------------------------
{
displayName: 'Customer ID',
name: 'customerId',
type: 'string',
required: true,
default: '',
description: 'ID of the customer to attach the source to',
displayOptions: {
show: {
resource: [
'source',
],
operation: [
'create',
],
},
},
},
{
displayName: 'Type',
name: 'type',
type: 'options',
required: true,
default: 'wechat',
description: 'Type of source (payment instrument) to create',
options: [
{
name: 'WeChat',
value: 'wechat',
},
],
displayOptions: {
show: {
resource: [
'source',
],
operation: [
'create',
],
},
},
},
{
displayName: 'Amount',
name: 'amount',
type: 'number',
default: 0,
description: 'Amount in cents to be collected for this charge, e.g. enter <code>100</code> for $1.00',
typeOptions: {
minValue: 0,
maxValue: 99999999,
},
displayOptions: {
show: {
resource: [
'source',
],
operation: [
'create',
],
},
},
},
{
displayName: 'Currency',
name: 'currency',
type: 'options',
typeOptions: {
loadOptionsMethod: 'getCurrencies',
},
default: '',
description: 'Three-letter ISO currency code, e.g. <code>USD</code> or <code>EUR</code>. It must be a <a target="_blank" href="https://stripe.com/docs/currencies">Stripe-supported currency</a>',
displayOptions: {
show: {
resource: [
'source',
],
operation: [
'create',
],
},
},
},
{
displayName: 'Additional Fields',
name: 'additionalFields',
type: 'collection',
placeholder: 'Add Field',
default: {},
displayOptions: {
show: {
resource: [
'source',
],
operation: [
'create',
],
},
},
options: [
{
displayName: 'Metadata',
name: 'metadata',
type: 'fixedCollection',
placeholder: 'Add Metadata Item',
description: 'Set of key-value pairs to attach to the source to create',
default: {},
typeOptions: {
multipleValues: true,
},
options: [
{
displayName: 'Metadata Properties',
name: 'metadataProperties',
values: [
{
displayName: 'Key',
name: 'key',
type: 'string',
default: '',
},
{
displayName: 'Value',
name: 'value',
type: 'string',
default: '',
},
],
},
],
},
{
displayName: 'Statement Descriptor',
name: 'statement_descriptor',
type: 'string',
default: '',
description: 'Arbitrary text to display on the customer\'s statement',
},
],
},
// ----------------------------------
// source: delete
// ----------------------------------
{
displayName: 'Customer ID',
name: 'customerId',
type: 'string',
required: true,
default: '',
description: 'ID of the customer whose source to delete',
displayOptions: {
show: {
resource: [
'source',
],
operation: [
'delete',
],
},
},
},
{
displayName: 'Source ID',
name: 'sourceId',
type: 'string',
required: true,
default: '',
description: 'ID of the source to delete',
displayOptions: {
show: {
resource: [
'source',
],
operation: [
'delete',
],
},
},
},
// ----------------------------------
// source: get
// ----------------------------------
{
displayName: 'Source ID',
name: 'sourceId',
type: 'string',
required: true,
default: '',
description: 'ID of the source to retrieve',
displayOptions: {
show: {
resource: [
'source',
],
operation: [
'get',
],
},
},
},
] as INodeProperties[];

View File

@@ -0,0 +1,130 @@
import {
INodeProperties,
} from 'n8n-workflow';
export const tokenOperations = [
{
displayName: 'Operation',
name: 'operation',
type: 'options',
default: 'create',
description: 'Operation to perform',
options: [
{
name: 'Create',
value: 'create',
description: 'Create a token',
},
],
displayOptions: {
show: {
resource: [
'token',
],
},
},
},
] as INodeProperties[];
export const tokenFields = [
// ----------------------------------
// token: create
// ----------------------------------
{
displayName: 'Type',
name: 'type',
type: 'options',
required: true,
default: 'cardToken',
description: 'Type of token to create',
options: [
{
name: 'Card Token',
value: 'cardToken',
},
],
},
{
displayName: 'Card Number',
name: 'number',
type: 'string',
displayOptions: {
show: {
resource: [
'token',
],
operation: [
'create',
],
type: [
'cardToken'
],
},
},
placeholder: '4242424242424242',
default: '',
},
{
displayName: 'CVC',
name: 'cvc',
type: 'string',
displayOptions: {
show: {
resource: [
'token',
],
operation: [
'create',
],
type: [
'cardToken'
],
},
},
default: '',
placeholder: '314',
description: 'Security code printed on the back of the card',
},
{
displayName: 'Expiration Month',
description: 'Number of the month when the card will expire',
name: 'expirationMonth',
type: 'string',
displayOptions: {
show: {
resource: [
'token',
],
operation: [
'create',
],
type: [
'cardToken'
],
},
},
default: '',
placeholder: '10',
},
{
displayName: 'Expiration Year',
description: 'Year when the card will expire',
name: 'expirationYear',
type: 'string',
displayOptions: {
show: {
resource: [
'token',
],
operation: [
'create',
],
type: [
'cardToken'
],
},
},
default: '',
placeholder: '2022',
},
] as INodeProperties[];

View File

@@ -0,0 +1,7 @@
export * from './BalanceDescription';
export * from './CustomerCardDescription';
export * from './ChargeDescription';
export * from './CouponDescription';
export * from './CustomerDescription';
export * from './SourceDescription';
export * from './TokenDescription';