n8n-nodes-walichat
Version:
n8n plugin for WaliChat
391 lines (390 loc) • 13 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.executeMeetingLinkOperations = exports.meetingLinkProperties = void 0;
const request_1 = require("../request");
exports.meetingLinkProperties = [
{
displayName: 'Operation',
name: 'operation',
type: 'options',
noDataExpression: true,
displayOptions: {
show: {
resource: ['meeting-links'],
},
},
options: [
{
name: 'Get Meeting Links',
value: 'getMeetingLinks',
description: 'Get active meeting links for a WhatsApp number',
},
{
name: 'Create Meeting Link',
value: 'createMeetingLink',
description: 'Create a new WhatsApp meeting link for voice or video call',
},
{
name: 'Delete Meeting Links',
value: 'deleteMeetingLinks',
description: 'Delete one or multiple meeting links',
},
],
default: 'getMeetingLinks',
},
{
displayName: 'WhatsApp Number',
name: 'device',
type: 'string',
required: true,
default: '',
typeOptions: {
loadOptionsMethod: 'getDevices',
},
displayOptions: {
show: {
resource: ['meeting-links'],
},
},
description: 'The ID of the WhatsApp number',
},
// GET MEETING LINKS OPTIONS
{
displayName: 'Filters',
name: 'filters',
type: 'collection',
placeholder: 'Add Filter',
default: {},
displayOptions: {
show: {
resource: ['meeting-links'],
operation: ['getMeetingLinks'],
},
},
options: [
{
displayName: 'Search',
name: 'search',
type: 'string',
default: '',
description: 'Search links by URL, token or message',
},
{
displayName: 'Created Before',
name: 'before',
type: 'dateTime',
default: '',
description: 'Filter links created before a specific date',
},
{
displayName: 'Created After',
name: 'after',
type: 'dateTime',
default: '',
description: 'Filter links created after a specific date',
},
{
displayName: 'Expires Before',
name: 'expiresBefore',
type: 'dateTime',
default: '',
description: 'Filter links that expire before a specific date',
},
{
displayName: 'Expires After',
name: 'expiresAfter',
type: 'dateTime',
default: '',
description: 'Filter links that expire after a specific date',
},
{
displayName: 'Link Type',
name: 'kind',
type: 'multiOptions',
options: [
{
name: 'Voice',
value: 'voice',
},
{
name: 'Video',
value: 'video',
},
],
default: [],
description: 'Filter links by type (voice or video)',
},
{
displayName: 'Results Page Size',
name: 'size',
type: 'number',
default: 20,
description: 'Number of results per page',
},
{
displayName: 'Page Number',
name: 'page',
type: 'number',
default: 0,
description: 'Page number (starting from 0)',
},
],
},
// CREATE MEETING LINK OPTIONS
{
displayName: 'Link Type',
name: 'kind',
type: 'options',
required: true,
default: 'voice',
displayOptions: {
show: {
resource: ['meeting-links'],
operation: ['createMeetingLink'],
},
},
options: [
{
name: 'Voice Call',
value: 'voice',
},
{
name: 'Video Call',
value: 'video',
},
],
description: 'Type of meeting link to create',
},
{
displayName: 'Call Description',
name: 'message',
type: 'string',
required: false,
default: '',
displayOptions: {
show: {
resource: ['meeting-links'],
operation: ['createMeetingLink'],
},
},
description: 'Optional message describing the purpose of the call (max 500 characters)',
},
{
displayName: 'Expiration',
name: 'expiration',
type: 'options',
required: false,
default: '30d',
displayOptions: {
show: {
resource: ['meeting-links'],
operation: ['createMeetingLink'],
},
},
options: [
{ name: '1 Hour', value: '1h' },
{ name: '2 Hours', value: '2h' },
{ name: '8 Hours', value: '8h' },
{ name: '12 Hours', value: '12h' },
{ name: '24 Hours', value: '24h' },
{ name: '2 Days', value: '2d' },
{ name: '3 Days', value: '3d' },
{ name: '4 Days', value: '4d' },
{ name: '5 Days', value: '5d' },
{ name: '6 Days', value: '6d' },
{ name: '7 Days', value: '7d' },
{ name: '15 Days', value: '15d' },
{ name: '30 Days', value: '30d' },
],
description: 'When the meeting link will expire if not used',
},
// DELETE MEETING LINKS OPTIONS
{
displayName: 'Delete Method',
name: 'deleteMethod',
type: 'options',
required: true,
default: 'specific',
displayOptions: {
show: {
resource: ['meeting-links'],
operation: ['deleteMeetingLinks'],
},
},
options: [
{
name: 'Delete All',
value: 'all',
},
{
name: 'Delete Specific Links',
value: 'specific',
},
{
name: 'Delete By Date Range',
value: 'dateRange',
},
],
description: 'Method to use for deleting meeting links',
},
{
displayName: 'Link IDs',
name: 'ids',
type: 'string',
required: true,
typeOptions: {
multipleValues: true,
},
default: [],
displayOptions: {
show: {
resource: ['meeting-links'],
operation: ['deleteMeetingLinks'],
deleteMethod: ['specific'],
},
},
description: 'IDs of meeting links to delete',
},
{
displayName: 'Link URLs',
name: 'urls',
type: 'string',
required: false,
typeOptions: {
multipleValues: true,
},
default: [],
displayOptions: {
show: {
resource: ['meeting-links'],
operation: ['deleteMeetingLinks'],
deleteMethod: ['specific'],
},
},
description: 'URLs of meeting links to delete (e.g., https://call.whatsapp.com/voice/447362053576)',
},
{
displayName: 'Date Filters',
name: 'dateFilters',
type: 'collection',
placeholder: 'Add Date Filter',
default: {},
displayOptions: {
show: {
resource: ['meeting-links'],
operation: ['deleteMeetingLinks'],
deleteMethod: ['dateRange'],
},
},
options: [
{
displayName: 'Created Before',
name: 'createdBefore',
type: 'dateTime',
default: '',
description: 'Delete links created before this date',
},
{
displayName: 'Created After',
name: 'createdAfter',
type: 'dateTime',
default: '',
description: 'Delete links created after this date',
},
{
displayName: 'Expires Before',
name: 'expiresBefore',
type: 'dateTime',
default: '',
description: 'Delete links that expire before this date',
},
{
displayName: 'Expires After',
name: 'expiresAfter',
type: 'dateTime',
default: '',
description: 'Delete links that expire after this date',
},
],
},
];
async function executeMeetingLinkOperations(index) {
const operation = this.getNodeParameter('operation', index);
const device = this.getNodeParameter('device', index);
// GET MEETING LINKS
if (operation === 'getMeetingLinks') {
const filters = this.getNodeParameter('filters', index, {});
const queryParameters = {};
if (filters.search)
queryParameters.search = filters.search;
if (filters.before)
queryParameters.before = filters.before;
if (filters.after)
queryParameters.after = filters.after;
if (filters.expiresBefore)
queryParameters.expiresBefore = filters.expiresBefore;
if (filters.expiresAfter)
queryParameters.expiresAfter = filters.expiresAfter;
if (filters.kind && filters.kind.length > 0)
queryParameters.kind = filters.kind;
if (filters.size)
queryParameters.size = filters.size.toString();
if (filters.page !== undefined)
queryParameters.page = filters.page.toString();
return (0, request_1.request)(this, 'GET', `/devices/${device}/meeting-links`, undefined, queryParameters);
}
// CREATE MEETING LINK
if (operation === 'createMeetingLink') {
const kind = this.getNodeParameter('kind', index);
const message = this.getNodeParameter('message', index, '');
const expiration = this.getNodeParameter('expiration', index, '30d');
const body = {
kind,
};
if (message) {
body.message = message;
}
if (expiration && expiration !== '30d') {
body.expiration = expiration;
}
return (0, request_1.request)(this, 'POST', `/devices/${device}/meeting-links`, body);
}
// DELETE MEETING LINKS
if (operation === 'deleteMeetingLinks') {
const deleteMethod = this.getNodeParameter('deleteMethod', index);
const body = {};
if (deleteMethod === 'all') {
body.all = true;
}
else if (deleteMethod === 'specific') {
const ids = this.getNodeParameter('ids', index, []);
const urls = this.getNodeParameter('urls', index, []);
if (ids && ids.length > 0) {
body.ids = ids;
}
if (urls && urls.length > 0) {
body.urls = urls;
}
if (!body.ids && !body.urls) {
throw new Error('You must specify at least one ID or URL to delete specific meeting links');
}
}
else if (deleteMethod === 'dateRange') {
const dateFilters = this.getNodeParameter('dateFilters', index, {});
if (dateFilters.createdBefore)
body.createdBefore = dateFilters.createdBefore;
if (dateFilters.createdAfter)
body.createdAfter = dateFilters.createdAfter;
if (dateFilters.expiresBefore)
body.expiresBefore = dateFilters.expiresBefore;
if (dateFilters.expiresAfter)
body.expiresAfter = dateFilters.expiresAfter;
if (!body.createdBefore && !body.createdAfter && !body.expiresBefore && !body.expiresAfter) {
throw new Error('You must specify at least one date filter when using the date range delete method');
}
}
return (0, request_1.request)(this, 'DELETE', `/devices/${device}/meeting-links`, body);
}
throw new Error(`The operation "${operation}" is not supported for meeting links!`);
}
exports.executeMeetingLinkOperations = executeMeetingLinkOperations;