n8n-nodes-quepasa-api-yurisilva_pro 2.0.1
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/LICENSE +21 -0
- package/README.md +599 -0
- package/dist/QuePasa/quepasa.svg +4 -0
- package/dist/credentials/QuePasaApi.credentials.d.ts +9 -0
- package/dist/credentials/QuePasaApi.credentials.js +90 -0
- package/dist/nodes/QuePasa/QuePasa.node.d.ts +5 -0
- package/dist/nodes/QuePasa/QuePasa.node.js +501 -0
- package/dist/nodes/QuePasa/descriptions/ChatDescription.d.ts +3 -0
- package/dist/nodes/QuePasa/descriptions/ChatDescription.js +90 -0
- package/dist/nodes/QuePasa/descriptions/ContactDescription.d.ts +3 -0
- package/dist/nodes/QuePasa/descriptions/ContactDescription.js +103 -0
- package/dist/nodes/QuePasa/descriptions/GroupDescription.d.ts +3 -0
- package/dist/nodes/QuePasa/descriptions/GroupDescription.js +250 -0
- package/dist/nodes/QuePasa/descriptions/MediaDescription.d.ts +3 -0
- package/dist/nodes/QuePasa/descriptions/MediaDescription.js +60 -0
- package/dist/nodes/QuePasa/descriptions/MessageDescription.d.ts +3 -0
- package/dist/nodes/QuePasa/descriptions/MessageDescription.js +286 -0
- package/dist/nodes/QuePasa/descriptions/SessionDescription.d.ts +3 -0
- package/dist/nodes/QuePasa/descriptions/SessionDescription.js +103 -0
- package/dist/nodes/QuePasa/descriptions/StatusDescription.d.ts +3 -0
- package/dist/nodes/QuePasa/descriptions/StatusDescription.js +87 -0
- package/dist/nodes/QuePasa/descriptions/WebhookDescription.d.ts +3 -0
- package/dist/nodes/QuePasa/descriptions/WebhookDescription.js +89 -0
- package/dist/tests/GenericFunctions.spec.d.ts +1 -0
- package/dist/tests/GenericFunctions.spec.js +38 -0
- package/dist/utils/GenericFunctions.d.ts +21 -0
- package/dist/utils/GenericFunctions.js +77 -0
- package/dist/utils/Validators.d.ts +34 -0
- package/dist/utils/Validators.js +75 -0
- package/package.json +72 -0
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.chatFields = exports.chatOperations = void 0;
|
|
4
|
+
exports.chatOperations = [
|
|
5
|
+
{
|
|
6
|
+
displayName: 'Operation',
|
|
7
|
+
name: 'operation',
|
|
8
|
+
type: 'options',
|
|
9
|
+
noDataExpression: true,
|
|
10
|
+
displayOptions: {
|
|
11
|
+
show: {
|
|
12
|
+
resource: ['chat'],
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
options: [
|
|
16
|
+
{
|
|
17
|
+
name: 'Mark as Read',
|
|
18
|
+
value: 'markAsRead',
|
|
19
|
+
description: 'Mark chat as read',
|
|
20
|
+
action: 'Mark chat as read',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
name: 'Archive Chat',
|
|
24
|
+
value: 'archiveChat',
|
|
25
|
+
description: 'Archive a chat',
|
|
26
|
+
action: 'Archive chat',
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
name: 'Unarchive Chat',
|
|
30
|
+
value: 'unarchiveChat',
|
|
31
|
+
description: 'Unarchive a chat',
|
|
32
|
+
action: 'Unarchive chat',
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
name: 'Pin Chat',
|
|
36
|
+
value: 'pinChat',
|
|
37
|
+
description: 'Pin a chat',
|
|
38
|
+
action: 'Pin chat',
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
name: 'Unpin Chat',
|
|
42
|
+
value: 'unpinChat',
|
|
43
|
+
description: 'Unpin a chat',
|
|
44
|
+
action: 'Unpin chat',
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
name: 'Mute Chat',
|
|
48
|
+
value: 'muteChat',
|
|
49
|
+
description: 'Mute chat notifications',
|
|
50
|
+
action: 'Mute chat',
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
name: 'Unmute Chat',
|
|
54
|
+
value: 'unmuteChat',
|
|
55
|
+
description: 'Unmute chat notifications',
|
|
56
|
+
action: 'Unmute chat',
|
|
57
|
+
},
|
|
58
|
+
],
|
|
59
|
+
default: 'markAsRead',
|
|
60
|
+
},
|
|
61
|
+
];
|
|
62
|
+
exports.chatFields = [
|
|
63
|
+
{
|
|
64
|
+
displayName: 'Chat ID',
|
|
65
|
+
name: 'chatId',
|
|
66
|
+
type: 'string',
|
|
67
|
+
required: true,
|
|
68
|
+
displayOptions: {
|
|
69
|
+
show: {
|
|
70
|
+
resource: ['chat'],
|
|
71
|
+
},
|
|
72
|
+
},
|
|
73
|
+
default: '',
|
|
74
|
+
placeholder: '5511999999999@s.whatsapp.net',
|
|
75
|
+
description: 'ID of the chat',
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
displayName: 'Duration (seconds)',
|
|
79
|
+
name: 'duration',
|
|
80
|
+
type: 'number',
|
|
81
|
+
displayOptions: {
|
|
82
|
+
show: {
|
|
83
|
+
resource: ['chat'],
|
|
84
|
+
operation: ['muteChat'],
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
default: 28800,
|
|
88
|
+
description: 'Mute duration in seconds (default: 8 hours)',
|
|
89
|
+
},
|
|
90
|
+
];
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.contactFields = exports.contactOperations = void 0;
|
|
4
|
+
exports.contactOperations = [
|
|
5
|
+
{
|
|
6
|
+
displayName: 'Operation',
|
|
7
|
+
name: 'operation',
|
|
8
|
+
type: 'options',
|
|
9
|
+
noDataExpression: true,
|
|
10
|
+
displayOptions: {
|
|
11
|
+
show: {
|
|
12
|
+
resource: ['contact'],
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
options: [
|
|
16
|
+
{
|
|
17
|
+
name: 'Check WhatsApp',
|
|
18
|
+
value: 'checkWhatsApp',
|
|
19
|
+
description: 'Check if phone numbers are on WhatsApp',
|
|
20
|
+
action: 'Check if on whats app',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
name: 'List Contacts',
|
|
24
|
+
value: 'listContacts',
|
|
25
|
+
description: 'List all contacts',
|
|
26
|
+
action: 'List all contacts',
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
name: 'Get Contact Info',
|
|
30
|
+
value: 'getContactInfo',
|
|
31
|
+
description: 'Get contact information',
|
|
32
|
+
action: 'Get contact information',
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
name: 'Get Picture',
|
|
36
|
+
value: 'getPicture',
|
|
37
|
+
description: 'Get contact profile picture',
|
|
38
|
+
action: 'Get profile picture',
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
name: 'Block Contact',
|
|
42
|
+
value: 'blockContact',
|
|
43
|
+
description: 'Block a contact',
|
|
44
|
+
action: 'Block contact',
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
name: 'Unblock Contact',
|
|
48
|
+
value: 'unblockContact',
|
|
49
|
+
description: 'Unblock a contact',
|
|
50
|
+
action: 'Unblock contact',
|
|
51
|
+
},
|
|
52
|
+
],
|
|
53
|
+
default: 'checkWhatsApp',
|
|
54
|
+
},
|
|
55
|
+
];
|
|
56
|
+
exports.contactFields = [
|
|
57
|
+
// Check WhatsApp
|
|
58
|
+
{
|
|
59
|
+
displayName: 'Phone Numbers',
|
|
60
|
+
name: 'phones',
|
|
61
|
+
type: 'string',
|
|
62
|
+
required: true,
|
|
63
|
+
displayOptions: {
|
|
64
|
+
show: {
|
|
65
|
+
resource: ['contact'],
|
|
66
|
+
operation: ['checkWhatsApp'],
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
default: '',
|
|
70
|
+
placeholder: '5511999999999, 5511888888888',
|
|
71
|
+
description: 'Phone numbers to check (comma-separated)',
|
|
72
|
+
},
|
|
73
|
+
// Get Contact Info / Picture / Block / Unblock
|
|
74
|
+
{
|
|
75
|
+
displayName: 'Contact ID',
|
|
76
|
+
name: 'contactId',
|
|
77
|
+
type: 'string',
|
|
78
|
+
required: true,
|
|
79
|
+
displayOptions: {
|
|
80
|
+
show: {
|
|
81
|
+
resource: ['contact'],
|
|
82
|
+
operation: ['getContactInfo', 'getPicture', 'blockContact', 'unblockContact'],
|
|
83
|
+
},
|
|
84
|
+
},
|
|
85
|
+
default: '',
|
|
86
|
+
placeholder: '5511999999999@s.whatsapp.net',
|
|
87
|
+
description: 'Contact ID',
|
|
88
|
+
},
|
|
89
|
+
// Get Picture Options
|
|
90
|
+
{
|
|
91
|
+
displayName: 'Binary Property Name',
|
|
92
|
+
name: 'binaryPropertyName',
|
|
93
|
+
type: 'string',
|
|
94
|
+
displayOptions: {
|
|
95
|
+
show: {
|
|
96
|
+
resource: ['contact'],
|
|
97
|
+
operation: ['getPicture'],
|
|
98
|
+
},
|
|
99
|
+
},
|
|
100
|
+
default: 'data',
|
|
101
|
+
description: 'Name of the binary property to store the picture',
|
|
102
|
+
},
|
|
103
|
+
];
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.groupFields = exports.groupOperations = void 0;
|
|
4
|
+
exports.groupOperations = [
|
|
5
|
+
{
|
|
6
|
+
displayName: 'Operation',
|
|
7
|
+
name: 'operation',
|
|
8
|
+
type: 'options',
|
|
9
|
+
noDataExpression: true,
|
|
10
|
+
displayOptions: {
|
|
11
|
+
show: {
|
|
12
|
+
resource: ['group'],
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
options: [
|
|
16
|
+
{
|
|
17
|
+
name: 'Add Participants',
|
|
18
|
+
value: 'addParticipants',
|
|
19
|
+
description: 'Add participants to group',
|
|
20
|
+
action: 'Add participants',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
name: 'Create Group',
|
|
24
|
+
value: 'createGroup',
|
|
25
|
+
description: 'Create a new group',
|
|
26
|
+
action: 'Create group',
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
name: 'Get Group Info',
|
|
30
|
+
value: 'getGroupInfo',
|
|
31
|
+
description: 'Get details of a specific group',
|
|
32
|
+
action: 'Get group information',
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
name: 'Leave Group',
|
|
36
|
+
value: 'leaveGroup',
|
|
37
|
+
description: 'Leave a group',
|
|
38
|
+
action: 'Leave group',
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
name: 'List Groups',
|
|
42
|
+
value: 'listGroups',
|
|
43
|
+
description: 'List all groups',
|
|
44
|
+
action: 'List all groups',
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
name: 'Remove Participant',
|
|
48
|
+
value: 'removeParticipant',
|
|
49
|
+
description: 'Remove participant from group',
|
|
50
|
+
action: 'Remove participant',
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
name: 'Update Name',
|
|
54
|
+
value: 'updateName',
|
|
55
|
+
description: 'Update group name',
|
|
56
|
+
action: 'Update group name',
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
name: 'Update Description',
|
|
60
|
+
value: 'updateDescription',
|
|
61
|
+
description: 'Update group description',
|
|
62
|
+
action: 'Update group description',
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
name: 'Update Picture',
|
|
66
|
+
value: 'updatePicture',
|
|
67
|
+
description: 'Update group picture',
|
|
68
|
+
action: 'Update group picture',
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
name: 'Remove Picture',
|
|
72
|
+
value: 'removePicture',
|
|
73
|
+
description: 'Remove group picture',
|
|
74
|
+
action: 'Remove group picture',
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
name: 'Promote to Admin',
|
|
78
|
+
value: 'promoteToAdmin',
|
|
79
|
+
description: 'Promote participant to admin',
|
|
80
|
+
action: 'Promote to admin',
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
name: 'Demote from Admin',
|
|
84
|
+
value: 'demoteFromAdmin',
|
|
85
|
+
description: 'Demote admin to participant',
|
|
86
|
+
action: 'Demote from admin',
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
name: 'Get Invite Link',
|
|
90
|
+
value: 'getInviteLink',
|
|
91
|
+
description: 'Get group invite link',
|
|
92
|
+
action: 'Get invite link',
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
name: 'Revoke Invite Link',
|
|
96
|
+
value: 'revokeInviteLink',
|
|
97
|
+
description: 'Revoke current invite link',
|
|
98
|
+
action: 'Revoke invite link',
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
name: 'Join via Invite',
|
|
102
|
+
value: 'joinViaInvite',
|
|
103
|
+
description: 'Join group using invite code',
|
|
104
|
+
action: 'Join via invite',
|
|
105
|
+
},
|
|
106
|
+
],
|
|
107
|
+
default: 'listGroups',
|
|
108
|
+
},
|
|
109
|
+
];
|
|
110
|
+
exports.groupFields = [
|
|
111
|
+
// Group ID (for most operations)
|
|
112
|
+
{
|
|
113
|
+
displayName: 'Group ID',
|
|
114
|
+
name: 'groupId',
|
|
115
|
+
type: 'string',
|
|
116
|
+
required: true,
|
|
117
|
+
displayOptions: {
|
|
118
|
+
show: {
|
|
119
|
+
resource: ['group'],
|
|
120
|
+
operation: ['getGroupInfo', 'updateName', 'addParticipants', 'removeParticipant', 'leaveGroup'],
|
|
121
|
+
},
|
|
122
|
+
},
|
|
123
|
+
default: '',
|
|
124
|
+
placeholder: '123456789@g.us',
|
|
125
|
+
description: 'ID of the group',
|
|
126
|
+
},
|
|
127
|
+
// Create Group
|
|
128
|
+
{
|
|
129
|
+
displayName: 'Group Name',
|
|
130
|
+
name: 'name',
|
|
131
|
+
type: 'string',
|
|
132
|
+
required: true,
|
|
133
|
+
displayOptions: {
|
|
134
|
+
show: {
|
|
135
|
+
resource: ['group'],
|
|
136
|
+
operation: ['createGroup', 'updateName'],
|
|
137
|
+
},
|
|
138
|
+
},
|
|
139
|
+
default: '',
|
|
140
|
+
description: 'Name of the group',
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
displayName: 'Participants',
|
|
144
|
+
name: 'participants',
|
|
145
|
+
type: 'string',
|
|
146
|
+
required: true,
|
|
147
|
+
displayOptions: {
|
|
148
|
+
show: {
|
|
149
|
+
resource: ['group'],
|
|
150
|
+
operation: ['createGroup', 'addParticipants'],
|
|
151
|
+
},
|
|
152
|
+
},
|
|
153
|
+
default: '',
|
|
154
|
+
placeholder: '5511999999999, 5511888888888',
|
|
155
|
+
description: 'Phone numbers separated by comma',
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
displayName: 'Description',
|
|
159
|
+
name: 'topic',
|
|
160
|
+
type: 'string',
|
|
161
|
+
displayOptions: {
|
|
162
|
+
show: {
|
|
163
|
+
resource: ['group'],
|
|
164
|
+
operation: ['createGroup'],
|
|
165
|
+
},
|
|
166
|
+
},
|
|
167
|
+
default: '',
|
|
168
|
+
description: 'Group description (optional)',
|
|
169
|
+
},
|
|
170
|
+
// Remove Participant
|
|
171
|
+
{
|
|
172
|
+
displayName: 'Participant ID',
|
|
173
|
+
name: 'participantId',
|
|
174
|
+
type: 'string',
|
|
175
|
+
required: true,
|
|
176
|
+
displayOptions: {
|
|
177
|
+
show: {
|
|
178
|
+
resource: ['group'],
|
|
179
|
+
operation: ['removeParticipant', 'promoteToAdmin', 'demoteFromAdmin'],
|
|
180
|
+
},
|
|
181
|
+
},
|
|
182
|
+
default: '',
|
|
183
|
+
placeholder: '5511999999999@s.whatsapp.net',
|
|
184
|
+
description: 'ID of the participant',
|
|
185
|
+
},
|
|
186
|
+
// Update Description
|
|
187
|
+
{
|
|
188
|
+
displayName: 'Group ID',
|
|
189
|
+
name: 'groupId',
|
|
190
|
+
type: 'string',
|
|
191
|
+
required: true,
|
|
192
|
+
displayOptions: {
|
|
193
|
+
show: {
|
|
194
|
+
resource: ['group'],
|
|
195
|
+
operation: ['updateDescription', 'updatePicture', 'removePicture', 'promoteToAdmin', 'demoteFromAdmin', 'getInviteLink', 'revokeInviteLink'],
|
|
196
|
+
},
|
|
197
|
+
},
|
|
198
|
+
default: '',
|
|
199
|
+
placeholder: '123456789@g.us',
|
|
200
|
+
description: 'ID of the group',
|
|
201
|
+
},
|
|
202
|
+
{
|
|
203
|
+
displayName: 'Description',
|
|
204
|
+
name: 'description',
|
|
205
|
+
type: 'string',
|
|
206
|
+
required: true,
|
|
207
|
+
typeOptions: {
|
|
208
|
+
rows: 3,
|
|
209
|
+
},
|
|
210
|
+
displayOptions: {
|
|
211
|
+
show: {
|
|
212
|
+
resource: ['group'],
|
|
213
|
+
operation: ['updateDescription'],
|
|
214
|
+
},
|
|
215
|
+
},
|
|
216
|
+
default: '',
|
|
217
|
+
description: 'New group description',
|
|
218
|
+
},
|
|
219
|
+
// Update Picture
|
|
220
|
+
{
|
|
221
|
+
displayName: 'Binary Property',
|
|
222
|
+
name: 'binaryProperty',
|
|
223
|
+
type: 'string',
|
|
224
|
+
required: true,
|
|
225
|
+
displayOptions: {
|
|
226
|
+
show: {
|
|
227
|
+
resource: ['group'],
|
|
228
|
+
operation: ['updatePicture'],
|
|
229
|
+
},
|
|
230
|
+
},
|
|
231
|
+
default: 'data',
|
|
232
|
+
description: 'Name of the binary property containing the image',
|
|
233
|
+
},
|
|
234
|
+
// Join via Invite
|
|
235
|
+
{
|
|
236
|
+
displayName: 'Invite Code',
|
|
237
|
+
name: 'inviteCode',
|
|
238
|
+
type: 'string',
|
|
239
|
+
required: true,
|
|
240
|
+
displayOptions: {
|
|
241
|
+
show: {
|
|
242
|
+
resource: ['group'],
|
|
243
|
+
operation: ['joinViaInvite'],
|
|
244
|
+
},
|
|
245
|
+
},
|
|
246
|
+
default: '',
|
|
247
|
+
placeholder: 'ABC123DEF456',
|
|
248
|
+
description: 'Invite code from the invite link',
|
|
249
|
+
},
|
|
250
|
+
];
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.mediaFields = exports.mediaOperations = void 0;
|
|
4
|
+
exports.mediaOperations = [
|
|
5
|
+
{
|
|
6
|
+
displayName: 'Operation',
|
|
7
|
+
name: 'operation',
|
|
8
|
+
type: 'options',
|
|
9
|
+
noDataExpression: true,
|
|
10
|
+
displayOptions: {
|
|
11
|
+
show: {
|
|
12
|
+
resource: ['media'],
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
options: [
|
|
16
|
+
{
|
|
17
|
+
name: 'Download Media',
|
|
18
|
+
value: 'downloadMedia',
|
|
19
|
+
description: 'Download media from a message',
|
|
20
|
+
action: 'Download media',
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
name: 'Download as Base64',
|
|
24
|
+
value: 'downloadAsBase64',
|
|
25
|
+
description: 'Download media as Base64 string',
|
|
26
|
+
action: 'Download as base64',
|
|
27
|
+
},
|
|
28
|
+
],
|
|
29
|
+
default: 'downloadMedia',
|
|
30
|
+
},
|
|
31
|
+
];
|
|
32
|
+
exports.mediaFields = [
|
|
33
|
+
{
|
|
34
|
+
displayName: 'Message ID',
|
|
35
|
+
name: 'messageId',
|
|
36
|
+
type: 'string',
|
|
37
|
+
required: true,
|
|
38
|
+
displayOptions: {
|
|
39
|
+
show: {
|
|
40
|
+
resource: ['media'],
|
|
41
|
+
operation: ['downloadMedia', 'downloadAsBase64'],
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
default: '',
|
|
45
|
+
description: 'ID of the message containing media',
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
displayName: 'Binary Property Name',
|
|
49
|
+
name: 'binaryPropertyName',
|
|
50
|
+
type: 'string',
|
|
51
|
+
displayOptions: {
|
|
52
|
+
show: {
|
|
53
|
+
resource: ['media'],
|
|
54
|
+
operation: ['downloadMedia'],
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
default: 'data',
|
|
58
|
+
description: 'Name of the binary property to store the file',
|
|
59
|
+
},
|
|
60
|
+
];
|