n8n-nodes-base 0.161.0 → 0.162.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/credentials/GristApi.credentials.js +20 -0
- package/dist/credentials/GristApi.credentials.js.map +1 -1
- package/dist/nodes/Google/Chat/GenericFunctions.d.ts +14 -0
- package/dist/nodes/Google/Chat/GenericFunctions.js +160 -0
- package/dist/nodes/Google/Chat/GenericFunctions.js.map +1 -0
- package/dist/nodes/Google/Chat/GoogleChat.node.d.ts +14 -0
- package/dist/nodes/Google/Chat/GoogleChat.node.js +358 -0
- package/dist/nodes/Google/Chat/GoogleChat.node.js.map +1 -0
- package/dist/nodes/Google/Chat/GoogleChat.node.json +27 -0
- package/dist/nodes/Google/Chat/MessageInterface.d.ts +36 -0
- package/dist/nodes/Google/Chat/MessageInterface.js +9 -0
- package/dist/nodes/Google/Chat/MessageInterface.js.map +1 -0
- package/dist/nodes/Google/Chat/descriptions/AttachmentDescription.d.ts +3 -0
- package/dist/nodes/Google/Chat/descriptions/AttachmentDescription.js +47 -0
- package/dist/nodes/Google/Chat/descriptions/AttachmentDescription.js.map +1 -0
- package/dist/nodes/Google/Chat/descriptions/IncomingWebhookDescription.d.ts +3 -0
- package/dist/nodes/Google/Chat/descriptions/IncomingWebhookDescription.js +180 -0
- package/dist/nodes/Google/Chat/descriptions/IncomingWebhookDescription.js.map +1 -0
- package/dist/nodes/Google/Chat/descriptions/MediaDescription.d.ts +3 -0
- package/dist/nodes/Google/Chat/descriptions/MediaDescription.js +65 -0
- package/dist/nodes/Google/Chat/descriptions/MediaDescription.js.map +1 -0
- package/dist/nodes/Google/Chat/descriptions/MemberDescription.d.ts +3 -0
- package/dist/nodes/Google/Chat/descriptions/MemberDescription.js +75 -0
- package/dist/nodes/Google/Chat/descriptions/MemberDescription.js.map +1 -0
- package/dist/nodes/Google/Chat/descriptions/MessageDescription.d.ts +3 -0
- package/dist/nodes/Google/Chat/descriptions/MessageDescription.js +323 -0
- package/dist/nodes/Google/Chat/descriptions/MessageDescription.js.map +1 -0
- package/dist/nodes/Google/Chat/descriptions/SpaceDescription.d.ts +3 -0
- package/dist/nodes/Google/Chat/descriptions/SpaceDescription.js +54 -0
- package/dist/nodes/Google/Chat/descriptions/SpaceDescription.js.map +1 -0
- package/dist/nodes/Google/Chat/descriptions/index.d.ts +6 -0
- package/dist/nodes/Google/Chat/descriptions/index.js +19 -0
- package/dist/nodes/Google/Chat/descriptions/index.js.map +1 -0
- package/dist/nodes/Google/Chat/googleChat.svg +1 -0
- package/dist/nodes/Grist/GenericFunctions.js +5 -3
- package/dist/nodes/Grist/GenericFunctions.js.map +1 -1
- package/dist/nodes/Grist/Grist.node.js +5 -3
- package/dist/nodes/Grist/Grist.node.js.map +1 -1
- package/dist/nodes/HaloPSA/HaloPSA.node.json +3 -5
- package/dist/nodes/Linear/LinearTrigger.node.json +20 -0
- package/dist/nodes/Telegram/GenericFunctions.js +1 -0
- package/dist/nodes/Telegram/GenericFunctions.js.map +1 -1
- package/dist/nodes/Telegram/TelegramTrigger.node.js +5 -1
- package/dist/nodes/Telegram/TelegramTrigger.node.js.map +1 -1
- package/dist/nodes/Wait/Wait.node.js +14 -0
- package/dist/nodes/Wait/Wait.node.js.map +1 -1
- package/dist/nodes/Webhook/Webhook.node.js +61 -15
- package/dist/nodes/Webhook/Webhook.node.js.map +1 -1
- package/package.json +4 -3
|
@@ -28,6 +28,10 @@ class GristApi {
|
|
|
28
28
|
name: 'Paid',
|
|
29
29
|
value: 'paid',
|
|
30
30
|
},
|
|
31
|
+
{
|
|
32
|
+
name: 'Self-hosted',
|
|
33
|
+
value: 'selfHosted',
|
|
34
|
+
},
|
|
31
35
|
],
|
|
32
36
|
},
|
|
33
37
|
{
|
|
@@ -45,6 +49,22 @@ class GristApi {
|
|
|
45
49
|
},
|
|
46
50
|
},
|
|
47
51
|
},
|
|
52
|
+
{
|
|
53
|
+
displayName: 'Self-hosted URL',
|
|
54
|
+
name: 'selfHostedUrl',
|
|
55
|
+
type: 'string',
|
|
56
|
+
default: '',
|
|
57
|
+
placeholder: 'http://localhost:8484',
|
|
58
|
+
required: true,
|
|
59
|
+
description: 'URL of your Grist instance. Include http/https without /api and no trailing slash.',
|
|
60
|
+
displayOptions: {
|
|
61
|
+
show: {
|
|
62
|
+
planType: [
|
|
63
|
+
'selfHosted',
|
|
64
|
+
],
|
|
65
|
+
},
|
|
66
|
+
},
|
|
67
|
+
},
|
|
48
68
|
];
|
|
49
69
|
}
|
|
50
70
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GristApi.credentials.js","sourceRoot":"","sources":["../../credentials/GristApi.credentials.ts"],"names":[],"mappings":";;;AAKA,MAAa,QAAQ;IAArB;QACC,SAAI,GAAG,UAAU,CAAC;QAClB,gBAAW,GAAG,WAAW,CAAC;QAC1B,qBAAgB,GAAG,OAAO,CAAC;QAC3B,eAAU,GAAsB;YAC/B;gBACC,WAAW,EAAE,SAAS;gBACtB,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,IAAI;aACd;YACD;gBACC,WAAW,EAAE,WAAW;gBACxB,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,MAAM;gBACf,OAAO,EAAE;oBACR;wBACC,IAAI,EAAE,MAAM;wBACZ,KAAK,EAAE,MAAM;qBACb;oBACD;wBACC,IAAI,EAAE,MAAM;wBACZ,KAAK,EAAE,MAAM;qBACb;iBACD;aACD;YACD;gBACC,WAAW,EAAE,kBAAkB;gBAC/B,IAAI,EAAE,iBAAiB;gBACvB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,+BAA+B;gBAC5C,cAAc,EAAE;oBACf,IAAI,EAAE;wBACL,QAAQ,EAAE;4BACT,MAAM;yBACN;qBACD;iBACD;aACD;SACD,CAAC;IACH,CAAC;CAAA;
|
|
1
|
+
{"version":3,"file":"GristApi.credentials.js","sourceRoot":"","sources":["../../credentials/GristApi.credentials.ts"],"names":[],"mappings":";;;AAKA,MAAa,QAAQ;IAArB;QACC,SAAI,GAAG,UAAU,CAAC;QAClB,gBAAW,GAAG,WAAW,CAAC;QAC1B,qBAAgB,GAAG,OAAO,CAAC;QAC3B,eAAU,GAAsB;YAC/B;gBACC,WAAW,EAAE,SAAS;gBACtB,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,IAAI;aACd;YACD;gBACC,WAAW,EAAE,WAAW;gBACxB,IAAI,EAAE,UAAU;gBAChB,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,MAAM;gBACf,OAAO,EAAE;oBACR;wBACC,IAAI,EAAE,MAAM;wBACZ,KAAK,EAAE,MAAM;qBACb;oBACD;wBACC,IAAI,EAAE,MAAM;wBACZ,KAAK,EAAE,MAAM;qBACb;oBACD;wBACC,IAAI,EAAE,aAAa;wBACnB,KAAK,EAAE,YAAY;qBACnB;iBACD;aACD;YACD;gBACC,WAAW,EAAE,kBAAkB;gBAC/B,IAAI,EAAE,iBAAiB;gBACvB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,+BAA+B;gBAC5C,cAAc,EAAE;oBACf,IAAI,EAAE;wBACL,QAAQ,EAAE;4BACT,MAAM;yBACN;qBACD;iBACD;aACD;YACD;gBACC,WAAW,EAAE,iBAAiB;gBAC9B,IAAI,EAAE,eAAe;gBACrB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;gBACX,WAAW,EAAE,uBAAuB;gBACpC,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,oFAAoF;gBACjG,cAAc,EAAE;oBACf,IAAI,EAAE;wBACL,QAAQ,EAAE;4BACT,YAAY;yBACZ;qBACD;iBACD;aACD;SACD,CAAC;IACH,CAAC;CAAA;AAhED,4BAgEC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { IExecuteFunctions, IExecuteSingleFunctions, ILoadOptionsFunctions } from 'n8n-core';
|
|
2
|
+
import { ICredentialTestFunctions, IDataObject, INodeProperties } from 'n8n-workflow';
|
|
3
|
+
interface IGoogleAuthCredentials {
|
|
4
|
+
delegatedEmail?: string;
|
|
5
|
+
email: string;
|
|
6
|
+
inpersonate: boolean;
|
|
7
|
+
privateKey: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function googleApiRequest(this: IExecuteFunctions | IExecuteSingleFunctions | ILoadOptionsFunctions, method: string, resource: string, body?: any, qs?: IDataObject, uri?: string, noCredentials?: boolean, encoding?: null | undefined): Promise<any>;
|
|
10
|
+
export declare function googleApiRequestAllItems(this: IExecuteFunctions | ILoadOptionsFunctions, propertyName: string, method: string, endpoint: string, body?: any, query?: IDataObject): Promise<any>;
|
|
11
|
+
export declare function getAccessToken(this: IExecuteFunctions | IExecuteSingleFunctions | ILoadOptionsFunctions | ICredentialTestFunctions, credentials: IGoogleAuthCredentials): Promise<IDataObject>;
|
|
12
|
+
export declare function validateJSON(json: string | undefined): any;
|
|
13
|
+
export declare function getPagingParameters(resource: string, operation?: string): INodeProperties[];
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getPagingParameters = exports.validateJSON = exports.getAccessToken = exports.googleApiRequestAllItems = exports.googleApiRequest = void 0;
|
|
4
|
+
const n8n_workflow_1 = require("n8n-workflow");
|
|
5
|
+
const moment = require("moment-timezone");
|
|
6
|
+
const jwt = require("jsonwebtoken");
|
|
7
|
+
async function googleApiRequest(method, resource, body = {}, qs = {}, uri, noCredentials = false, encoding) {
|
|
8
|
+
const options = {
|
|
9
|
+
headers: {
|
|
10
|
+
'Content-Type': 'application/json',
|
|
11
|
+
},
|
|
12
|
+
method,
|
|
13
|
+
body,
|
|
14
|
+
qs,
|
|
15
|
+
uri: uri || `https://chat.googleapis.com${resource}`,
|
|
16
|
+
json: true,
|
|
17
|
+
};
|
|
18
|
+
if (Object.keys(body).length === 0) {
|
|
19
|
+
delete options.body;
|
|
20
|
+
}
|
|
21
|
+
if (encoding === null) {
|
|
22
|
+
options.encoding = null;
|
|
23
|
+
}
|
|
24
|
+
let responseData;
|
|
25
|
+
try {
|
|
26
|
+
if (noCredentials) {
|
|
27
|
+
responseData = await this.helpers.request(options);
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
const credentials = await this.getCredentials('googleApi');
|
|
31
|
+
if (credentials === undefined) {
|
|
32
|
+
throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'No credentials got returned!');
|
|
33
|
+
}
|
|
34
|
+
const { access_token } = await getAccessToken.call(this, credentials);
|
|
35
|
+
options.headers.Authorization = `Bearer ${access_token}`;
|
|
36
|
+
responseData = await this.helpers.request(options);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
if (error.code === 'ERR_OSSL_PEM_NO_START_LINE') {
|
|
41
|
+
error.statusCode = '401';
|
|
42
|
+
}
|
|
43
|
+
throw new n8n_workflow_1.NodeApiError(this.getNode(), error);
|
|
44
|
+
}
|
|
45
|
+
if (Object.keys(responseData).length !== 0) {
|
|
46
|
+
return responseData;
|
|
47
|
+
}
|
|
48
|
+
else {
|
|
49
|
+
return { 'success': true };
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
exports.googleApiRequest = googleApiRequest;
|
|
53
|
+
async function googleApiRequestAllItems(propertyName, method, endpoint, body = {}, query = {}) {
|
|
54
|
+
const returnData = [];
|
|
55
|
+
let responseData;
|
|
56
|
+
query.pageSize = 100;
|
|
57
|
+
do {
|
|
58
|
+
responseData = await googleApiRequest.call(this, method, endpoint, body, query);
|
|
59
|
+
query.pageToken = responseData['nextPageToken'];
|
|
60
|
+
returnData.push.apply(returnData, responseData[propertyName]);
|
|
61
|
+
} while (responseData['nextPageToken'] !== undefined &&
|
|
62
|
+
responseData['nextPageToken'] !== '');
|
|
63
|
+
return returnData;
|
|
64
|
+
}
|
|
65
|
+
exports.googleApiRequestAllItems = googleApiRequestAllItems;
|
|
66
|
+
function getAccessToken(credentials) {
|
|
67
|
+
const scopes = [
|
|
68
|
+
'https://www.googleapis.com/auth/chat.bot',
|
|
69
|
+
];
|
|
70
|
+
const now = moment().unix();
|
|
71
|
+
credentials.email = credentials.email.trim();
|
|
72
|
+
const privateKey = credentials.privateKey.replace(/\\n/g, '\n').trim();
|
|
73
|
+
const signature = jwt.sign({
|
|
74
|
+
'iss': credentials.email,
|
|
75
|
+
'sub': credentials.delegatedEmail || credentials.email,
|
|
76
|
+
'scope': scopes.join(' '),
|
|
77
|
+
'aud': `https://oauth2.googleapis.com/token`,
|
|
78
|
+
'iat': now,
|
|
79
|
+
'exp': now + 3600,
|
|
80
|
+
}, privateKey, {
|
|
81
|
+
algorithm: 'RS256',
|
|
82
|
+
header: {
|
|
83
|
+
'kid': privateKey,
|
|
84
|
+
'typ': 'JWT',
|
|
85
|
+
'alg': 'RS256',
|
|
86
|
+
},
|
|
87
|
+
});
|
|
88
|
+
const options = {
|
|
89
|
+
headers: {
|
|
90
|
+
'Content-Type': 'application/x-www-form-urlencoded',
|
|
91
|
+
},
|
|
92
|
+
method: 'POST',
|
|
93
|
+
form: {
|
|
94
|
+
grant_type: 'urn:ietf:params:oauth:grant-type:jwt-bearer',
|
|
95
|
+
assertion: signature,
|
|
96
|
+
},
|
|
97
|
+
uri: 'https://oauth2.googleapis.com/token',
|
|
98
|
+
json: true,
|
|
99
|
+
};
|
|
100
|
+
return this.helpers.request(options);
|
|
101
|
+
}
|
|
102
|
+
exports.getAccessToken = getAccessToken;
|
|
103
|
+
function validateJSON(json) {
|
|
104
|
+
let result;
|
|
105
|
+
try {
|
|
106
|
+
result = JSON.parse(json);
|
|
107
|
+
}
|
|
108
|
+
catch (exception) {
|
|
109
|
+
result = undefined;
|
|
110
|
+
}
|
|
111
|
+
return result;
|
|
112
|
+
}
|
|
113
|
+
exports.validateJSON = validateJSON;
|
|
114
|
+
function getPagingParameters(resource, operation = 'getAll') {
|
|
115
|
+
const pagingParameters = [
|
|
116
|
+
{
|
|
117
|
+
displayName: 'Return All',
|
|
118
|
+
name: 'returnAll',
|
|
119
|
+
type: 'boolean',
|
|
120
|
+
displayOptions: {
|
|
121
|
+
show: {
|
|
122
|
+
resource: [
|
|
123
|
+
resource,
|
|
124
|
+
],
|
|
125
|
+
operation: [
|
|
126
|
+
operation,
|
|
127
|
+
],
|
|
128
|
+
},
|
|
129
|
+
},
|
|
130
|
+
default: false,
|
|
131
|
+
description: 'If all results should be returned or only up to a given limit',
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
displayName: 'Limit',
|
|
135
|
+
name: 'limit',
|
|
136
|
+
type: 'number',
|
|
137
|
+
typeOptions: {
|
|
138
|
+
maxValue: 1000,
|
|
139
|
+
},
|
|
140
|
+
displayOptions: {
|
|
141
|
+
show: {
|
|
142
|
+
resource: [
|
|
143
|
+
resource,
|
|
144
|
+
],
|
|
145
|
+
operation: [
|
|
146
|
+
operation,
|
|
147
|
+
],
|
|
148
|
+
returnAll: [
|
|
149
|
+
false,
|
|
150
|
+
],
|
|
151
|
+
},
|
|
152
|
+
},
|
|
153
|
+
default: 100,
|
|
154
|
+
description: 'How many results to return',
|
|
155
|
+
},
|
|
156
|
+
];
|
|
157
|
+
return pagingParameters;
|
|
158
|
+
}
|
|
159
|
+
exports.getPagingParameters = getPagingParameters;
|
|
160
|
+
//# sourceMappingURL=GenericFunctions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GenericFunctions.js","sourceRoot":"","sources":["../../../../nodes/Google/Chat/GenericFunctions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { IExecuteFunctions } from 'n8n-core';
|
|
2
|
+
import { ICredentialsDecrypted, ICredentialTestFunctions, ILoadOptionsFunctions, INodeCredentialTestResult, INodeExecutionData, INodePropertyOptions, INodeType, INodeTypeDescription } from 'n8n-workflow';
|
|
3
|
+
export declare class GoogleChat implements INodeType {
|
|
4
|
+
description: INodeTypeDescription;
|
|
5
|
+
methods: {
|
|
6
|
+
loadOptions: {
|
|
7
|
+
getSpaces(this: ILoadOptionsFunctions): Promise<INodePropertyOptions[]>;
|
|
8
|
+
};
|
|
9
|
+
credentialTest: {
|
|
10
|
+
testGoogleTokenAuth(this: ICredentialTestFunctions, credential: ICredentialsDecrypted): Promise<INodeCredentialTestResult>;
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
execute(this: IExecuteFunctions): Promise<INodeExecutionData[][]>;
|
|
14
|
+
}
|
|
@@ -0,0 +1,358 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GoogleChat = void 0;
|
|
4
|
+
const n8n_workflow_1 = require("n8n-workflow");
|
|
5
|
+
const descriptions_1 = require("./descriptions");
|
|
6
|
+
const GenericFunctions_1 = require("./GenericFunctions");
|
|
7
|
+
const moment = require("moment-timezone");
|
|
8
|
+
const jwt = require("jsonwebtoken");
|
|
9
|
+
class GoogleChat {
|
|
10
|
+
constructor() {
|
|
11
|
+
this.description = {
|
|
12
|
+
displayName: 'Google Chat',
|
|
13
|
+
name: 'googleChat',
|
|
14
|
+
icon: 'file:googleChat.svg',
|
|
15
|
+
group: ['input'],
|
|
16
|
+
version: 1,
|
|
17
|
+
subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}',
|
|
18
|
+
description: 'Consume Google Chat API',
|
|
19
|
+
defaults: {
|
|
20
|
+
name: 'Google Chat',
|
|
21
|
+
color: '#0aa55c',
|
|
22
|
+
},
|
|
23
|
+
inputs: ['main'],
|
|
24
|
+
outputs: ['main'],
|
|
25
|
+
credentials: [
|
|
26
|
+
{
|
|
27
|
+
name: 'googleApi',
|
|
28
|
+
required: true,
|
|
29
|
+
testedBy: 'testGoogleTokenAuth',
|
|
30
|
+
},
|
|
31
|
+
],
|
|
32
|
+
properties: [
|
|
33
|
+
{
|
|
34
|
+
displayName: 'Resource',
|
|
35
|
+
name: 'resource',
|
|
36
|
+
required: true,
|
|
37
|
+
noDataExpression: true,
|
|
38
|
+
type: 'options',
|
|
39
|
+
options: [
|
|
40
|
+
{
|
|
41
|
+
name: 'Member',
|
|
42
|
+
value: 'member',
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
name: 'Message',
|
|
46
|
+
value: 'message',
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
name: 'Space',
|
|
50
|
+
value: 'space',
|
|
51
|
+
},
|
|
52
|
+
],
|
|
53
|
+
default: 'message',
|
|
54
|
+
description: 'The resource to operate on',
|
|
55
|
+
},
|
|
56
|
+
...descriptions_1.memberOperations,
|
|
57
|
+
...descriptions_1.memberFields,
|
|
58
|
+
...descriptions_1.messageOperations,
|
|
59
|
+
...descriptions_1.messageFields,
|
|
60
|
+
...descriptions_1.spaceOperations,
|
|
61
|
+
...descriptions_1.spaceFields,
|
|
62
|
+
],
|
|
63
|
+
};
|
|
64
|
+
this.methods = {
|
|
65
|
+
loadOptions: {
|
|
66
|
+
async getSpaces() {
|
|
67
|
+
const returnData = [];
|
|
68
|
+
const spaces = await GenericFunctions_1.googleApiRequestAllItems.call(this, 'spaces', 'GET', `/v1/spaces`);
|
|
69
|
+
for (const space of spaces) {
|
|
70
|
+
returnData.push({
|
|
71
|
+
name: space.displayName,
|
|
72
|
+
value: space.name,
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
return returnData;
|
|
76
|
+
},
|
|
77
|
+
},
|
|
78
|
+
credentialTest: {
|
|
79
|
+
async testGoogleTokenAuth(credential) {
|
|
80
|
+
const scopes = [
|
|
81
|
+
'https://www.googleapis.com/auth/chat.bot',
|
|
82
|
+
];
|
|
83
|
+
const now = moment().unix();
|
|
84
|
+
const email = credential.data.email.trim();
|
|
85
|
+
const privateKey = credential.data.privateKey.replace(/\\n/g, '\n').trim();
|
|
86
|
+
try {
|
|
87
|
+
const signature = jwt.sign({
|
|
88
|
+
'iss': email,
|
|
89
|
+
'sub': credential.data.delegatedEmail || email,
|
|
90
|
+
'scope': scopes.join(' '),
|
|
91
|
+
'aud': `https://oauth2.googleapis.com/token`,
|
|
92
|
+
'iat': now,
|
|
93
|
+
'exp': now,
|
|
94
|
+
}, privateKey, {
|
|
95
|
+
algorithm: 'RS256',
|
|
96
|
+
header: {
|
|
97
|
+
'kid': privateKey,
|
|
98
|
+
'typ': 'JWT',
|
|
99
|
+
'alg': 'RS256',
|
|
100
|
+
},
|
|
101
|
+
});
|
|
102
|
+
const options = {
|
|
103
|
+
headers: {
|
|
104
|
+
'Content-Type': 'application/x-www-form-urlencoded',
|
|
105
|
+
},
|
|
106
|
+
method: 'POST',
|
|
107
|
+
form: {
|
|
108
|
+
grant_type: 'urn:ietf:params:oauth:grant-type:jwt-bearer',
|
|
109
|
+
assertion: signature,
|
|
110
|
+
},
|
|
111
|
+
uri: 'https://oauth2.googleapis.com/token',
|
|
112
|
+
json: true,
|
|
113
|
+
};
|
|
114
|
+
const response = await this.helpers.request(options);
|
|
115
|
+
if (!response.access_token) {
|
|
116
|
+
return {
|
|
117
|
+
status: 'Error',
|
|
118
|
+
message: JSON.stringify(response),
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
catch (err) {
|
|
123
|
+
return {
|
|
124
|
+
status: 'Error',
|
|
125
|
+
message: `${err.message}`,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
return {
|
|
129
|
+
status: 'OK',
|
|
130
|
+
message: 'Connection successful!',
|
|
131
|
+
};
|
|
132
|
+
},
|
|
133
|
+
},
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
async execute() {
|
|
137
|
+
const items = this.getInputData();
|
|
138
|
+
const returnData = [];
|
|
139
|
+
const length = items.length;
|
|
140
|
+
const qs = {};
|
|
141
|
+
let responseData;
|
|
142
|
+
const resource = this.getNodeParameter('resource', 0);
|
|
143
|
+
const operation = this.getNodeParameter('operation', 0);
|
|
144
|
+
for (let i = 0; i < length; i++) {
|
|
145
|
+
try {
|
|
146
|
+
if (resource === 'media') {
|
|
147
|
+
if (operation === 'download') {
|
|
148
|
+
const resourceName = this.getNodeParameter('resourceName', i);
|
|
149
|
+
const endpoint = `/v1/media/${resourceName}?alt=media`;
|
|
150
|
+
const encoding = null;
|
|
151
|
+
responseData = await GenericFunctions_1.googleApiRequest.call(this, 'GET', endpoint, undefined, undefined, undefined, undefined, encoding);
|
|
152
|
+
const newItem = {
|
|
153
|
+
json: items[i].json,
|
|
154
|
+
binary: {},
|
|
155
|
+
};
|
|
156
|
+
if (items[i].binary !== undefined) {
|
|
157
|
+
Object.assign(newItem.binary, items[i].binary);
|
|
158
|
+
}
|
|
159
|
+
items[i] = newItem;
|
|
160
|
+
const binaryPropertyName = this.getNodeParameter('binaryPropertyName', i);
|
|
161
|
+
items[i].binary[binaryPropertyName] = await this.helpers.prepareBinaryData(responseData, endpoint);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
else if (resource === 'space') {
|
|
165
|
+
if (operation === 'get') {
|
|
166
|
+
const spaceId = this.getNodeParameter('spaceId', i);
|
|
167
|
+
responseData = await GenericFunctions_1.googleApiRequest.call(this, 'GET', `/v1/${spaceId}`);
|
|
168
|
+
}
|
|
169
|
+
else if (operation === 'getAll') {
|
|
170
|
+
const returnAll = this.getNodeParameter('returnAll', 0);
|
|
171
|
+
if (returnAll) {
|
|
172
|
+
responseData = await GenericFunctions_1.googleApiRequestAllItems.call(this, 'spaces', 'GET', `/v1/spaces`);
|
|
173
|
+
}
|
|
174
|
+
else {
|
|
175
|
+
const limit = this.getNodeParameter('limit', i);
|
|
176
|
+
qs.pageSize = limit;
|
|
177
|
+
responseData = await GenericFunctions_1.googleApiRequest.call(this, 'GET', `/v1/spaces`, undefined, qs);
|
|
178
|
+
responseData = responseData.spaces;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
else if (resource === 'member') {
|
|
183
|
+
if (operation === 'get') {
|
|
184
|
+
const memberId = this.getNodeParameter('memberId', i);
|
|
185
|
+
responseData = await GenericFunctions_1.googleApiRequest.call(this, 'GET', `/v1/${memberId}`);
|
|
186
|
+
}
|
|
187
|
+
else if (operation === 'getAll') {
|
|
188
|
+
const spaceId = this.getNodeParameter('spaceId', i);
|
|
189
|
+
const returnAll = this.getNodeParameter('returnAll', 0);
|
|
190
|
+
if (returnAll) {
|
|
191
|
+
responseData = await GenericFunctions_1.googleApiRequestAllItems.call(this, 'memberships', 'GET', `/v1/${spaceId}/members`, undefined, qs);
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
const limit = this.getNodeParameter('limit', i);
|
|
195
|
+
qs.pageSize = limit;
|
|
196
|
+
responseData = await GenericFunctions_1.googleApiRequest.call(this, 'GET', `/v1/${spaceId}/members`, undefined, qs);
|
|
197
|
+
responseData = responseData.memberships;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
else if (resource === 'message') {
|
|
202
|
+
if (operation === 'create') {
|
|
203
|
+
const spaceId = this.getNodeParameter('spaceId', i);
|
|
204
|
+
const additionalFields = this.getNodeParameter('additionalFields', i);
|
|
205
|
+
if (additionalFields.threadKey) {
|
|
206
|
+
qs.threadKey = additionalFields.threadKey;
|
|
207
|
+
}
|
|
208
|
+
if (additionalFields.requestId) {
|
|
209
|
+
qs.requestId = additionalFields.requestId;
|
|
210
|
+
}
|
|
211
|
+
let message = {};
|
|
212
|
+
const jsonParameters = this.getNodeParameter('jsonParameters', i);
|
|
213
|
+
if (jsonParameters) {
|
|
214
|
+
const messageJson = this.getNodeParameter('messageJson', i);
|
|
215
|
+
if (messageJson instanceof Object) {
|
|
216
|
+
message = messageJson;
|
|
217
|
+
}
|
|
218
|
+
else {
|
|
219
|
+
if (GenericFunctions_1.validateJSON(messageJson) !== undefined) {
|
|
220
|
+
message = JSON.parse(messageJson);
|
|
221
|
+
}
|
|
222
|
+
else {
|
|
223
|
+
throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Message (JSON) must be a valid json');
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
else {
|
|
228
|
+
const messageUi = this.getNodeParameter('messageUi', i);
|
|
229
|
+
if (messageUi.text && messageUi.text !== '') {
|
|
230
|
+
message.text = messageUi.text;
|
|
231
|
+
}
|
|
232
|
+
else {
|
|
233
|
+
throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Message Text must be provided.');
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
const body = {};
|
|
237
|
+
Object.assign(body, message);
|
|
238
|
+
responseData = await GenericFunctions_1.googleApiRequest.call(this, 'POST', `/v1/${spaceId}/messages`, body, qs);
|
|
239
|
+
}
|
|
240
|
+
else if (operation === 'delete') {
|
|
241
|
+
const messageId = this.getNodeParameter('messageId', i);
|
|
242
|
+
responseData = await GenericFunctions_1.googleApiRequest.call(this, 'DELETE', `/v1/${messageId}`);
|
|
243
|
+
}
|
|
244
|
+
else if (operation === 'get') {
|
|
245
|
+
const messageId = this.getNodeParameter('messageId', i);
|
|
246
|
+
responseData = await GenericFunctions_1.googleApiRequest.call(this, 'GET', `/v1/${messageId}`);
|
|
247
|
+
}
|
|
248
|
+
else if (operation === 'update') {
|
|
249
|
+
const messageId = this.getNodeParameter('messageId', i);
|
|
250
|
+
let message = {};
|
|
251
|
+
const jsonParameters = this.getNodeParameter('jsonParameters', i);
|
|
252
|
+
if (jsonParameters) {
|
|
253
|
+
const updateFieldsJson = this.getNodeParameter('updateFieldsJson', i);
|
|
254
|
+
if (updateFieldsJson instanceof Object) {
|
|
255
|
+
message = updateFieldsJson;
|
|
256
|
+
}
|
|
257
|
+
else {
|
|
258
|
+
if (GenericFunctions_1.validateJSON(updateFieldsJson) !== undefined) {
|
|
259
|
+
message = JSON.parse(updateFieldsJson);
|
|
260
|
+
}
|
|
261
|
+
else {
|
|
262
|
+
throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Update Fields (JSON) must be a valid json');
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
else {
|
|
267
|
+
const updateFieldsUi = this.getNodeParameter('updateFieldsUi', i);
|
|
268
|
+
if (updateFieldsUi.text) {
|
|
269
|
+
message.text = updateFieldsUi.text;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
const body = {};
|
|
273
|
+
Object.assign(body, message);
|
|
274
|
+
let updateMask = '';
|
|
275
|
+
if (message.text) {
|
|
276
|
+
updateMask += 'text,';
|
|
277
|
+
}
|
|
278
|
+
if (message.cards) {
|
|
279
|
+
updateMask += 'cards,';
|
|
280
|
+
}
|
|
281
|
+
updateMask = updateMask.slice(0, -1);
|
|
282
|
+
qs.updateMask = updateMask;
|
|
283
|
+
responseData = await GenericFunctions_1.googleApiRequest.call(this, 'PUT', `/v1/${messageId}`, body, qs);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
else if (resource === 'attachment') {
|
|
287
|
+
if (operation === 'get') {
|
|
288
|
+
const attachmentName = this.getNodeParameter('attachmentName', i);
|
|
289
|
+
responseData = await GenericFunctions_1.googleApiRequest.call(this, 'GET', `/v1/${attachmentName}`);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
else if (resource === 'incomingWebhook') {
|
|
293
|
+
if (operation === 'create') {
|
|
294
|
+
const uri = this.getNodeParameter('incomingWebhookUrl', i);
|
|
295
|
+
const additionalFields = this.getNodeParameter('additionalFields', i);
|
|
296
|
+
if (additionalFields.threadKey) {
|
|
297
|
+
qs.threadKey = additionalFields.threadKey;
|
|
298
|
+
}
|
|
299
|
+
let message = {};
|
|
300
|
+
const jsonParameters = this.getNodeParameter('jsonParameters', i);
|
|
301
|
+
if (jsonParameters) {
|
|
302
|
+
const messageJson = this.getNodeParameter('messageJson', i);
|
|
303
|
+
if (messageJson instanceof Object) {
|
|
304
|
+
message = messageJson;
|
|
305
|
+
}
|
|
306
|
+
else {
|
|
307
|
+
if (GenericFunctions_1.validateJSON(messageJson) !== undefined) {
|
|
308
|
+
message = JSON.parse(messageJson);
|
|
309
|
+
}
|
|
310
|
+
else {
|
|
311
|
+
throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Message (JSON) must be a valid json');
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
else {
|
|
316
|
+
const messageUi = this.getNodeParameter('messageUi', i);
|
|
317
|
+
if (messageUi.text && messageUi.text !== '') {
|
|
318
|
+
message.text = messageUi.text;
|
|
319
|
+
}
|
|
320
|
+
else {
|
|
321
|
+
throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Message Text must be provided.');
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
const body = {};
|
|
325
|
+
Object.assign(body, message);
|
|
326
|
+
responseData = await GenericFunctions_1.googleApiRequest.call(this, 'POST', '', body, qs, uri, true);
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
if (Array.isArray(responseData)) {
|
|
330
|
+
returnData.push.apply(returnData, responseData);
|
|
331
|
+
}
|
|
332
|
+
else if (responseData !== undefined) {
|
|
333
|
+
returnData.push(responseData);
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
catch (error) {
|
|
337
|
+
if (this.continueOnFail()) {
|
|
338
|
+
if (operation === 'download') {
|
|
339
|
+
items[i].json = { error: error.message };
|
|
340
|
+
}
|
|
341
|
+
else {
|
|
342
|
+
returnData.push({ error: error.message });
|
|
343
|
+
}
|
|
344
|
+
continue;
|
|
345
|
+
}
|
|
346
|
+
throw error;
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
if (operation === 'download') {
|
|
350
|
+
return this.prepareOutputData(items);
|
|
351
|
+
}
|
|
352
|
+
else {
|
|
353
|
+
return [this.helpers.returnJsonArray(returnData)];
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
exports.GoogleChat = GoogleChat;
|
|
358
|
+
//# sourceMappingURL=GoogleChat.node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GoogleChat.node.js","sourceRoot":"","sources":["../../../../nodes/Google/Chat/GoogleChat.node.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"node": "n8n-nodes-base.googleChat",
|
|
3
|
+
"nodeVersion": "1.0",
|
|
4
|
+
"codexVersion": "1.0",
|
|
5
|
+
"categories": [
|
|
6
|
+
"Communication"
|
|
7
|
+
],
|
|
8
|
+
"resources": {
|
|
9
|
+
"credentialDocumentation": [
|
|
10
|
+
{
|
|
11
|
+
"url": "https://docs.n8n.io/credentials/google"
|
|
12
|
+
}
|
|
13
|
+
],
|
|
14
|
+
"primaryDocumentation": [
|
|
15
|
+
{
|
|
16
|
+
"url": "https://docs.n8n.io/nodes/n8n-nodes-base.googleChat/"
|
|
17
|
+
}
|
|
18
|
+
],
|
|
19
|
+
"generic": [
|
|
20
|
+
{
|
|
21
|
+
"label": "15 Google apps you can combine and automate to increase productivity",
|
|
22
|
+
"icon": "💡",
|
|
23
|
+
"url": "https://n8n.io/blog/automate-google-apps-for-productivity/"
|
|
24
|
+
}
|
|
25
|
+
]
|
|
26
|
+
}
|
|
27
|
+
}
|