Fix some issues with Zulip

This commit is contained in:
Jan Oberhauser 2020-05-23 00:59:40 +02:00
parent 5e4fde6c6a
commit b445eafccd
7 changed files with 506 additions and 495 deletions

View file

@ -62,4 +62,3 @@ export function validateJSON(json: string | undefined): any { // tslint:disable-
} }
return result; return result;
} }

View file

@ -51,9 +51,9 @@ export const messageOperations = [
export const messageFields = [ export const messageFields = [
/* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */
/* message:sendPrivate */ /* message:sendPrivate */
/* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */
{ {
displayName: 'To', displayName: 'To',
name: 'to', name: 'to',
@ -96,9 +96,9 @@ export const messageFields = [
}, },
description: 'The content of the message.', description: 'The content of the message.',
}, },
/* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */
/* message:sendStream */ /* message:sendStream */
/* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */
{ {
displayName: 'Stream', displayName: 'Stream',
name: 'stream', name: 'stream',
@ -163,9 +163,9 @@ export const messageFields = [
}, },
description: 'The content of the message.', description: 'The content of the message.',
}, },
/* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */
/* message:update */ /* message:update */
/* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */
{ {
displayName: 'Message ID', displayName: 'Message ID',
name: 'messageId', name: 'messageId',
@ -241,9 +241,9 @@ export const messageFields = [
}, },
] ]
}, },
/* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */
/* message:get */ /* message:get */
/* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */
{ {
displayName: 'Message ID', displayName: 'Message ID',
name: 'messageId', name: 'messageId',
@ -262,9 +262,9 @@ export const messageFields = [
}, },
description: 'Unique identifier for the message.', description: 'Unique identifier for the message.',
}, },
/* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */
/* message:delete */ /* message:delete */
/* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */
{ {
displayName: 'Message ID', displayName: 'Message ID',
name: 'messageId', name: 'messageId',
@ -283,9 +283,9 @@ export const messageFields = [
}, },
description: 'Unique identifier for the message.', description: 'Unique identifier for the message.',
}, },
/* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */
/* message:updateFile */ /* message:updateFile */
/* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */
{ {
displayName: 'Binary Property', displayName: 'Binary Property',
name: 'dataBinaryProperty', name: 'dataBinaryProperty',

View file

@ -33,11 +33,11 @@ export const streamOperations = [
value: 'getSubscribed', value: 'getSubscribed',
description: 'Get subscribed streams.', description: 'Get subscribed streams.',
}, },
{ // {
name: 'Update', // name: 'Update',
value: 'update', // value: 'update',
description: 'Update a stream.', // description: 'Update a stream.',
}, // },
], ],
default: 'create', default: 'create',
description: 'The operation to perform.', description: 'The operation to perform.',
@ -45,9 +45,9 @@ export const streamOperations = [
] as INodeProperties[]; ] as INodeProperties[];
export const streamFields = [ export const streamFields = [
/* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */
/* stream:create */ /* stream:create */
/* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */
{ {
displayName: 'JSON Parameters', displayName: 'JSON Parameters',
name: 'jsonParameters', name: 'jsonParameters',
@ -86,9 +86,56 @@ export const streamFields = [
], ],
}, },
}, },
description: `JSON format parameters for stream creation.`, description: `JSON format parameters for stream creation.`,
}, },
{
displayName: 'Subscriptions',
name: 'subscriptions',
type: 'fixedCollection',
default: {},
displayOptions: {
show: {
resource: [
'stream',
],
operation: [
'create',
],
jsonParameters: [
false,
],
},
},
required: true,
description: 'A list of dictionaries containing the the key name and value specifying the name of the stream to subscribe. If the stream does not exist a new stream is created.',
typeOptions: {
multipleValues: true,
},
options: [
{
displayName: 'Subscription Properties',
name: 'properties',
values: [
{
displayName: 'Name',
name: 'name',
type: 'string',
required: true,
default: '',
description: 'Name of Subscription.',
},
{
displayName: 'Description',
name: 'description',
type: 'string',
required: true,
default: '',
description: 'Description of Subscription.',
}
],
},
],
},
{ {
displayName: 'Additional Fields', displayName: 'Additional Fields',
name: 'additionalFields', name: 'additionalFields',
@ -141,6 +188,7 @@ export const streamFields = [
displayName: 'Principals', displayName: 'Principals',
name: 'principals', name: 'principals',
type: 'fixedCollection', type: 'fixedCollection',
default: {},
description: 'A list of email addresses of the users that will be subscribed/unsubscribed to the streams specified in the subscriptions argument. If not provided, then the requesting user/bot is subscribed.', description: 'A list of email addresses of the users that will be subscribed/unsubscribed to the streams specified in the subscriptions argument. If not provided, then the requesting user/bot is subscribed.',
typeOptions: { typeOptions: {
multipleValues: true, multipleValues: true,
@ -162,40 +210,6 @@ export const streamFields = [
}, },
], ],
}, },
{
displayName: 'Subscriptions',
name: 'subscriptions',
type: 'fixedCollection',
required: true,
description: '"A list of dictionaries containing the the key name and value specifying the name of the stream to subscribe. If the stream does not exist a new stream is created.',
typeOptions: {
multipleValues: true,
},
options: [
{
displayName: 'Subscription Properties',
name: 'properties',
values: [
{
displayName: 'Name',
name: 'name',
type: 'string',
required: true,
default: '',
description: 'Name of Subscription.',
},
{
displayName: 'Description',
name: 'description',
type: 'string',
required: true,
default: '',
description: 'Description of Subscription.',
}
],
},
],
},
{ {
displayName: 'Stream Post Policy', displayName: 'Stream Post Policy',
name: 'streamPostPolicy', name: 'streamPostPolicy',
@ -222,9 +236,10 @@ export const streamFields = [
} }
] ]
}, },
/* -------------------------------------------------------------------------- */
/* stream:get all */ /* -------------------------------------------------------------------------- */
/* -------------------------------------------------------------------------- */ /* stream:get all */
/* -------------------------------------------------------------------------- */
{ {
displayName: 'Additional Fields', displayName: 'Additional Fields',
name: 'additionalFields', name: 'additionalFields',
@ -279,9 +294,10 @@ export const streamFields = [
}, },
] ]
}, },
/* -------------------------------------------------------------------------- */
/* stream:get subscribed */ /* -------------------------------------------------------------------------- */
/* -------------------------------------------------------------------------- */ /* stream:get subscribed */
/* -------------------------------------------------------------------------- */
{ {
displayName: 'Additional Fields', displayName: 'Additional Fields',
name: 'additionalFields', name: 'additionalFields',
@ -308,9 +324,10 @@ export const streamFields = [
} }
] ]
}, },
/* -------------------------------------------------------------------------- */
/* stream:update */ /* -------------------------------------------------------------------------- */
/* -------------------------------------------------------------------------- */ /* stream:update */
/* -------------------------------------------------------------------------- */
{ {
displayName: 'Stream ID', displayName: 'Stream ID',
name: 'streamId', name: 'streamId',
@ -454,9 +471,9 @@ export const streamFields = [
}, },
] ]
}, },
/* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */
/* stream:delete */ /* stream:delete */
/* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */
{ {
displayName: 'Stream ID', displayName: 'Stream ID',
name: 'streamId', name: 'streamId',

View file

@ -33,11 +33,11 @@ export const userOperations = [
value: 'getAll', value: 'getAll',
description: 'Get all users.', description: 'Get all users.',
}, },
{ // {
name: 'Update', // name: 'Update',
value: 'update', // value: 'update',
description: 'Update a user.', // description: 'Update a user.',
}, // },
], ],
default: 'create', default: 'create',
description: 'The operation to perform.', description: 'The operation to perform.',
@ -45,9 +45,9 @@ export const userOperations = [
] as INodeProperties[]; ] as INodeProperties[];
export const userFields = [ export const userFields = [
/* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */
/* user:create */ /* user:create */
/* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */
{ {
displayName: 'Email', displayName: 'Email',
name: 'email', name: 'email',
@ -120,9 +120,10 @@ export const userFields = [
default: '', default: '',
description: 'The short name of the new user. Not user-visible.', description: 'The short name of the new user. Not user-visible.',
}, },
/* -------------------------------------------------------------------------- */
/* user:get / getAll */ /* -------------------------------------------------------------------------- */
/* -------------------------------------------------------------------------- */ /* user:get / getAll */
/* -------------------------------------------------------------------------- */
{ {
displayName: 'User ID', displayName: 'User ID',
name: 'userId', name: 'userId',
@ -174,9 +175,10 @@ export const userFields = [
}, },
] ]
}, },
/* -------------------------------------------------------------------------- */
/* user:update */ /* -------------------------------------------------------------------------- */
/* -------------------------------------------------------------------------- */ /* user:update */
/* -------------------------------------------------------------------------- */
{ {
displayName: 'User ID', displayName: 'User ID',
name: 'userId', name: 'userId',
@ -237,6 +239,7 @@ export const userFields = [
displayName: 'Profile Data', displayName: 'Profile Data',
name: 'profileData', name: 'profileData',
type: 'fixedCollection', type: 'fixedCollection',
default: {},
description: 'A dictionary containing the to be updated custom profile field data for the user.', description: 'A dictionary containing the to be updated custom profile field data for the user.',
typeOptions: { typeOptions: {
multipleValues: true, multipleValues: true,
@ -267,10 +270,11 @@ export const userFields = [
}, },
] ]
}, },
/* -------------------------------------------------------------------------- */
/* user:deactivate */ /* -------------------------------------------------------------------------- */
/* -------------------------------------------------------------------------- */ /* user:deactivate */
{ /* -------------------------------------------------------------------------- */
{
displayName: 'User ID', displayName: 'User ID',
name: 'userId', name: 'userId',
type: 'string', type: 'string',
@ -287,5 +291,5 @@ export const userFields = [
}, },
default: '', default: '',
description: 'The ID of user to deactivate.', description: 'The ID of user to deactivate.',
}, },
] as INodeProperties[]; ] as INodeProperties[];

View file

@ -219,7 +219,7 @@ export class Zulip implements INodeType {
} }
} }
}; };
responseData = await zulipApiRequest.call(this, 'POST', '/user_uploads', {}, {}, undefined, { formData } ); responseData = await zulipApiRequest.call(this, 'POST', '/user_uploads', {}, {}, undefined, { formData });
responseData.uri = `${credentials!.url}${responseData.uri}`; responseData.uri = `${credentials!.url}${responseData.uri}`;
} }
} }
@ -247,6 +247,7 @@ export class Zulip implements INodeType {
} }
responseData = await zulipApiRequest.call(this, 'GET', `/streams`, body); responseData = await zulipApiRequest.call(this, 'GET', `/streams`, body);
responseData = responseData.streams;
} }
if (operation === 'getSubscribed') { if (operation === 'getSubscribed') {
@ -257,10 +258,10 @@ export class Zulip implements INodeType {
} }
responseData = await zulipApiRequest.call(this, 'GET', `/users/me/subscriptions`, body); responseData = await zulipApiRequest.call(this, 'GET', `/users/me/subscriptions`, body);
responseData = responseData.subscriptions;
} }
if (operation === 'create') { if (operation === 'create') {
const jsonParameters = this.getNodeParameter('jsonParameters', i) as boolean; const jsonParameters = this.getNodeParameter('jsonParameters', i) as boolean;
if (jsonParameters) { if (jsonParameters) {
@ -278,20 +279,18 @@ export class Zulip implements INodeType {
} }
} else { } else {
const additionalFields = this.getNodeParameter('additionalFields', i) as IDataObject; const additionalFields = this.getNodeParameter('additionalFields', i) as IDataObject;
if (additionalFields.subscriptions) { const subscriptions = this.getNodeParameter('subscriptions', i) as IDataObject;
//@ts-ignore body.subscriptions = JSON.stringify(subscriptions.properties);
body.subscriptions = JSON.stringify(additionalFields.subscriptions.properties);
}
if (additionalFields.inviteOnly) { if (additionalFields.inviteOnly) {
body.invite_only = additionalFields.inviteOnly as boolean; body.invite_only = additionalFields.inviteOnly as boolean;
} }
if (additionalFields.principals) { if (additionalFields.principals) {
const principals : string[] = []; const principals: string[] = [];
//@ts-ignore //@ts-ignore
additionalFields.principals.properties.map((principal : IPrincipal) => { additionalFields.principals.properties.map((principal: IPrincipal) => {
principals.push(principal.email); principals.push(principal.email);
}); });
body.principals = JSON.stringify(principals); body.principals = JSON.stringify(principals);
@ -368,7 +367,7 @@ export class Zulip implements INodeType {
} }
if (resource === 'user') { if (resource === 'user') {
const body : IUser = {}; const body: IUser = {};
if (operation === 'get') { if (operation === 'get') {
const userId = this.getNodeParameter('userId', i) as string; const userId = this.getNodeParameter('userId', i) as string;
@ -396,6 +395,7 @@ export class Zulip implements INodeType {
} }
responseData = await zulipApiRequest.call(this, 'GET', `/users`, body); responseData = await zulipApiRequest.call(this, 'GET', `/users`, body);
responseData = responseData.members;
} }
if (operation === 'create') { if (operation === 'create') {
@ -434,19 +434,10 @@ export class Zulip implements INodeType {
responseData = await zulipApiRequest.call(this, 'DELETE', `/users/${userId}`, body); responseData = await zulipApiRequest.call(this, 'DELETE', `/users/${userId}`, body);
} }
} }
// Specific checks because API returns multiple objects within 1 object with each key name
if (responseData.members) {
returnData.push.apply(returnData, responseData.members as IDataObject[]);
}
if (responseData.streams) { if (Array.isArray(responseData)) {
returnData.push.apply(returnData, responseData.streams as IDataObject[]); returnData.push.apply(returnData, responseData as IDataObject[]);
} } else {
if (responseData.subscriptions) {
returnData.push.apply(returnData, responseData.subscriptions as IDataObject[]);
}
else {
returnData.push(responseData as IDataObject); returnData.push(responseData as IDataObject);
} }
} }