Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Syncromsp node #2477

Merged
merged 81 commits into from
Jan 7, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
81 commits
Select commit Hold shift + click to select a range
267c623
Init Node
Bearbobs Nov 23, 2021
22db145
Added get customer details api for syncomsp-node
Bearbobs Nov 23, 2021
84360a3
Fixed formatting bug :bug:
Bearbobs Nov 23, 2021
15d0d02
Updated description for query params, and removed redundant condition…
Bearbobs Nov 24, 2021
1c3c5ff
Changed default value for page parameter
Bearbobs Nov 24, 2021
5337f1b
:ship: Added tickets API
Bearbobs Nov 24, 2021
ad4ed8e
:ship: Added contacts API
Bearbobs Nov 24, 2021
2121777
:ship: Added RMM Alerts API
Bearbobs Nov 24, 2021
975fafd
Add customer API
Bearbobs Nov 24, 2021
f65e832
Updates post code review
Bearbobs Nov 25, 2021
0a90641
Merge branch 'syncromsp-node-add-customers' into syncromsp-node
Bearbobs Nov 25, 2021
621b487
Rename SyncroMspAPI.credentials.ts to SyncroMspApi.credentials.ts
Bearbobs Nov 25, 2021
423b9ac
added create and delete method to customers module
Bearbobs Nov 25, 2021
c36b586
fix liniting issue
Bearbobs Nov 25, 2021
c621a94
Added Update method to customer module
Bearbobs Nov 25, 2021
5220ccb
Merge branch 'syncromsp-node' of https://github.com/n8n-io/n8n into s…
Bearbobs Nov 25, 2021
4c5b25c
Code Review Changes
Bearbobs Nov 25, 2021
a03b1ec
:ship: Added CRUD for contacts endpoint
Bearbobs Nov 26, 2021
9366b4d
:ship: Added CRUD for RMM Alert endpoint
Bearbobs Nov 26, 2021
522e1b4
Added options for status field
Bearbobs Nov 26, 2021
59013af
:bug: fix linting issues
Bearbobs Nov 26, 2021
bfd68e4
Init Node
Bearbobs Nov 23, 2021
276f069
Added get customer details api for syncomsp-node
Bearbobs Nov 23, 2021
acd1c76
Fixed formatting bug :bug:
Bearbobs Nov 23, 2021
b912295
Updated description for query params, and removed redundant condition…
Bearbobs Nov 24, 2021
1ad8c45
Changed default value for page parameter
Bearbobs Nov 24, 2021
db43999
:ship: Added tickets API
Bearbobs Nov 24, 2021
07465b4
:ship: Added contacts API
Bearbobs Nov 24, 2021
f7306f8
:ship: Added RMM Alerts API
Bearbobs Nov 24, 2021
e771b50
Updates post code review
Bearbobs Nov 25, 2021
e14df3d
Add customer API
Bearbobs Nov 24, 2021
b1f423a
added create and delete method to customers module
Bearbobs Nov 25, 2021
6069228
fix liniting issue
Bearbobs Nov 25, 2021
d74c748
Added Update method to customer module
Bearbobs Nov 25, 2021
64986d1
Rename SyncroMspAPI.credentials.ts to SyncroMspApi.credentials.ts
Bearbobs Nov 25, 2021
eaf996c
Code Review Changes
Bearbobs Nov 25, 2021
cf48b4e
:ship: Added CRUD for contacts endpoint
Bearbobs Nov 26, 2021
886d14d
:ship: Added CRUD for RMM Alert endpoint
Bearbobs Nov 26, 2021
9815723
Added options for status field
Bearbobs Nov 26, 2021
d675291
:bug: fix linting issues
Bearbobs Nov 26, 2021
bf3927f
:ship: Added CRUD for ticket endpoint
Bearbobs Nov 27, 2021
e484341
:tag: update get customer module
Bearbobs Nov 27, 2021
e564e7a
:tag: update get customer module
Bearbobs Nov 27, 2021
f20a398
Fixed conflicts
Bearbobs Nov 29, 2021
baf1041
Minor bug fixes
Bearbobs Nov 29, 2021
6746317
Changed response for ticket update
Bearbobs Nov 29, 2021
e5a27cb
:shirt: Fix lint issue
Bearbobs Nov 29, 2021
b9250a0
Alphabetically ordered all options
Bearbobs Nov 29, 2021
4ac27de
:bug: Fixed build issue
Bearbobs Nov 29, 2021
ef5c24b
:bug: Fixed Server.ts build issue, rebased from master
Bearbobs Nov 30, 2021
6a21865
:twisted_rightwards_arrows: Merge branch 'master' into syncromsp-node
janober Nov 30, 2021
0a484d3
:zap: Fix node issues
janober Nov 30, 2021
2044ce0
:zap: Fix more issues
janober Nov 30, 2021
fe0f03c
:zap: Fixed all operations with the standard convention
Bearbobs Dec 1, 2021
b842b6c
:shirt: Fix lint
Bearbobs Dec 1, 2021
39a0ab8
Fix reviewed changes
Bearbobs Dec 1, 2021
97acb5b
update border color
Bearbobs Dec 1, 2021
2299651
:zap: minor fixes
Bearbobs Dec 2, 2021
d502bae
minor fixes
Bearbobs Dec 2, 2021
1f83d7a
Added fallback when port in use
Bearbobs Dec 6, 2021
0e11aca
:zap: Minor Fixes
Bearbobs Dec 6, 2021
30875a1
:zap: Hide addtional paramerts when return all is active
Bearbobs Dec 6, 2021
fafd2ea
Merge branch 'feature/n8n-2648-fail-gracefully-when-starting-n8n-and'…
Bearbobs Dec 7, 2021
7415043
Merge branch 'syncromsp-node' of https://github.com/n8n-io/n8n into s…
Bearbobs Dec 14, 2021
485da79
:zap: Fix issues with Tickets
Bearbobs Dec 14, 2021
6e466bf
:zap: Fix issues with Rmm
Bearbobs Dec 14, 2021
aedeb87
:zap: Fix issues with Customer
Bearbobs Dec 14, 2021
e9dc650
:shirt: Fix lint
Bearbobs Dec 14, 2021
8487bc6
:zap: Fix issues with Contact
Bearbobs Dec 14, 2021
ec3dbcc
:shirt: Fixed formatting issue
Bearbobs Dec 14, 2021
172ee8b
:zap: Return 404 in ID not found
Bearbobs Dec 15, 2021
32223b4
:shirt: Fixed formatting issue
Bearbobs Dec 15, 2021
7b95b5a
:zap: Improvements
RicardoE105 Dec 24, 2021
2d53184
:zap: Improvements
RicardoE105 Dec 28, 2021
19b9b7c
:zap: Improvements
RicardoE105 Dec 30, 2021
2d3e545
:zap: Add credentials verification
RicardoE105 Dec 30, 2021
fda0f10
🔀 Merge branch 'master' into 'syncromsp-node'
RicardoE105 Dec 30, 2021
8be9340
:zap: Improvements
RicardoE105 Dec 31, 2021
67cd3a4
:zap: Improvements
RicardoE105 Jan 4, 2022
53936f7
:twisted_rightwards_arrows: Merge branch 'master' into syncromsp-node
janober Jan 7, 2022
20c1d26
:zap: Additional improvements
janober Jan 7, 2022
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
24 changes: 24 additions & 0 deletions packages/nodes-base/credentials/SyncroMspApi.credentials.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import {
ICredentialType,
INodeProperties,
} from 'n8n-workflow';

export class SyncroMspApi implements ICredentialType {
name = 'syncroMspApi';
displayName = 'SyncroMSP API';
documentationUrl = 'syncromsp';
properties: INodeProperties[] = [
{
displayName: 'API Key',
name: 'apiKey',
type: 'string',
default: '',
},
{
displayName: 'Subdomain',
name: 'subdomain',
type: 'string',
default: '',
},
];
}
28 changes: 28 additions & 0 deletions packages/nodes-base/nodes/SyncroMSP/SyncroMsp.node.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import {
INodeTypeBaseDescription,
INodeVersionedType,
} from 'n8n-workflow';

import { NodeVersionedType } from '../../src/NodeVersionedType';

import { SyncroMspV1 } from './v1/SyncroMspV1.node';

export class SyncroMsp extends NodeVersionedType {
constructor() {
const baseDescription: INodeTypeBaseDescription = {
displayName: 'SyncroMSP',
name: 'syncroMsp',
icon: 'file:syncromsp.png',
group: ['output'],
subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}',
description: 'Manage contacts, tickets and more from Syncro MSP',
defaultVersion: 1,
};

const nodeVersions: INodeVersionedType['nodeVersions'] = {
1: new SyncroMspV1(baseDescription),
};

super(nodeVersions, baseDescription);
}
}
Binary file added packages/nodes-base/nodes/SyncroMSP/syncromsp.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
57 changes: 57 additions & 0 deletions packages/nodes-base/nodes/SyncroMSP/v1/SyncroMspV1.node.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
import {
IExecuteFunctions,
} from 'n8n-core';

import {
ICredentialDataDecryptedObject,
ICredentialsDecrypted,
ICredentialTestFunctions,
INodeType,
INodeTypeBaseDescription,
INodeTypeDescription,
NodeCredentialTestResult,
} from 'n8n-workflow';

import { versionDescription } from './actions/versionDescription';
import { loadOptions } from './methods';
import { router } from './actions/router';
import { validateCredentials } from './transport';

export class SyncroMspV1 implements INodeType {

description: INodeTypeDescription;

constructor(baseDescription: INodeTypeBaseDescription) {
this.description = {
...baseDescription,
...versionDescription,
};
}

methods = {
loadOptions,
credentialTest: {
async syncroMspApiCredentialTest(this: ICredentialTestFunctions, credential: ICredentialsDecrypted): Promise<NodeCredentialTestResult> {
try {
await validateCredentials.call(this, credential.data as ICredentialDataDecryptedObject);
} catch (error) {
if (error.statusCode === 401) {
return {
status: 'Error',
message: 'The API Key included in the request is invalid',
};
}
}

return {
status: 'OK',
message: 'Connection successful!',
};
},
},
};

async execute(this: IExecuteFunctions) {
return await router.call(this);
}
}
33 changes: 33 additions & 0 deletions packages/nodes-base/nodes/SyncroMSP/v1/actions/Interfaces.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
import {
AllEntities,
Entity,
PropertiesOf,
} from 'n8n-workflow';

type SyncroMspMap = {
contact: 'create'|'delete'|'get'|'getAll'|'update';
customer: 'create'|'delete'|'get'|'getAll'|'update';
rmm: 'create'|'delete'|'get'|'getAll'|'mute' ;
ticket: 'create'|'delete'|'get'|'getAll'|'update';
};

export type SyncroMsp = AllEntities<SyncroMspMap>;

export type SyncroMspMapContact = Entity<SyncroMspMap, 'contact'>;
export type SyncroMspMapCustomer = Entity<SyncroMspMap, 'customer'>;
export type SyncroMspMapRmm = Entity<SyncroMspMap, 'rmm'>;
export type SyncroMspMapTicket = Entity<SyncroMspMap, 'ticket'>;

export type ContactProperties = PropertiesOf<SyncroMspMapContact>;
export type CustomerProperties = PropertiesOf<SyncroMspMapCustomer>;
export type RmmProperties = PropertiesOf<SyncroMspMapRmm>;
export type TicketProperties = PropertiesOf<SyncroMspMapTicket>;

export interface IAttachment {
fields: {
item?: object[];
};
actions: {
item?: object[];
};
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
import {
ContactProperties,
} from '../../Interfaces';

import {
addressFixedCollection
} from '../../../methods/sharedFields';

export const contactCreateDescription: ContactProperties = [
{
displayName: 'Customer ID',
name: 'customerId',
type: 'string',
required: true,
displayOptions: {
show: {
resource: [
'contact',
],
operation: [
'create',
],
},
},
default: '',
},
{
displayName: 'Email',
name: 'email',
type: 'string',
displayOptions: {
show: {
resource: [
'contact',
],
operation: [
'create',
],
},
},
default: '',
},
{
displayName: 'Additional Fields',
name: 'additionalFields',
type: 'collection',
placeholder: 'Add Field',
displayOptions: {
show: {
resource: [
'contact',
],
operation: [
'create',
],
},
},
default: {},
options: [
addressFixedCollection,
{
displayName: 'Name',
name: 'name',
type: 'string',
default: '',
},
{
displayName: 'Notes',
name: 'notes',
type: 'string',
default: '',
},
{
displayName: 'Phone',
name: 'phone',
type: 'string',
default: '',
},
],
},
];
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import {
IExecuteFunctions,
} from 'n8n-core';

import {
IDataObject,
INodeExecutionData,
} from 'n8n-workflow';

import {
apiRequest,
} from '../../../transport';


export async function createContact(this: IExecuteFunctions, index: number): Promise<INodeExecutionData[]> {
const id = this.getNodeParameter('customerId', index) as IDataObject;
const email = this.getNodeParameter('email', index) as IDataObject;
const { address, notes, phone, name } = this.getNodeParameter('additionalFields', index) as IDataObject;

const qs = {} as IDataObject;
const requestMethod = 'POST';
const endpoint = 'contacts';
let body = {} as IDataObject;
let addressData = address as IDataObject;

if (addressData) {
addressData = addressData['addressFields'] as IDataObject;
addressData.address1 = addressData.address;
}

body = {
...addressData,
customer_id: id,
email,
name,
notes,
phone,
};

let responseData;
responseData = await apiRequest.call(this, requestMethod, endpoint, body, qs);

return this.helpers.returnJsonArray(responseData);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import { createContact as execute } from './execute';
import { contactCreateDescription as description } from './description';

export {
description,
execute,
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import {
ContactProperties,
} from '../../Interfaces';

export const contactDeleteDescription: ContactProperties = [
{
displayName: 'Contact ID',
name: 'contactId',
type: 'string',
required: true,
displayOptions: {
show: {
resource: [
'contact',
],
operation: [
'delete',
],
},
},
default: '',
description: 'Delete a specific contact by ID',
},
];
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import {
IExecuteFunctions,
} from 'n8n-core';

import {
IDataObject,
INodeExecutionData,
} from 'n8n-workflow';

import {
apiRequest
} from '../../../transport';


export async function deleteContact(this: IExecuteFunctions, index: number): Promise<INodeExecutionData[]> {
const id = this.getNodeParameter('contactId', index) as string;

const qs = {} as IDataObject;
const requestMethod = 'DELETE';
const endpoint = `contacts/${id}`;
const body = {} as IDataObject;

let responseData;
responseData = await apiRequest.call(this, requestMethod, endpoint, body, qs);
return this.helpers.returnJsonArray(responseData);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import { deleteContact as execute } from './execute';
import { contactDeleteDescription as description } from './description';

export {
description,
execute,
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
import {
ContactProperties,
} from '../../Interfaces';

export const contactGetDescription: ContactProperties = [
{
displayName: 'Contact ID',
name: 'contactId',
type: 'string',
required: true,
displayOptions: {
show: {
resource: [
'contact',
],
operation: [
'get',
],
},
},
default: '',
description: 'Get specific contact by ID',
},
];
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import {
IExecuteFunctions,
} from 'n8n-core';

import {
IDataObject,
INodeExecutionData,
} from 'n8n-workflow';

import {
apiRequest
} from '../../../transport';


export async function getContact(this: IExecuteFunctions, index: number): Promise<INodeExecutionData[]> {
const id = this.getNodeParameter('contactId', index) as string;

const qs = {} as IDataObject;
const requestMethod = 'GET';
const endpoint = `contacts/${id}`;
const body = {} as IDataObject;

let responseData;
responseData = await apiRequest.call(this, requestMethod, endpoint, body, qs);
return this.helpers.returnJsonArray(responseData);
}
Loading