@pipedream/trello 0.3.2 → 0.3.5

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.
Files changed (71) hide show
  1. package/actions/add-attachment-to-card-via-url/add-attachment-to-card-via-url.mjs +73 -0
  2. package/actions/add-checklist/add-checklist.mjs +68 -0
  3. package/actions/add-comment/add-comment.mjs +55 -0
  4. package/actions/add-existing-label-to-card/add-existing-label-to-card.mjs +48 -0
  5. package/actions/add-file-as-attachment-via-url/add-file-as-attachment-via-url.mjs +72 -0
  6. package/actions/add-image-attachment/add-image-attachment.mjs +75 -0
  7. package/actions/add-label-to-card/add-label-to-card.mjs +55 -0
  8. package/actions/add-member-to-card/add-member-to-card.mjs +48 -0
  9. package/actions/archive-card/archive-card.mjs +37 -0
  10. package/actions/close-board/close-board.mjs +25 -0
  11. package/actions/common.js +21 -0
  12. package/actions/complete-checklist-item/complete-checklist-item.mjs +49 -0
  13. package/actions/copy-board/copy-board.mjs +174 -0
  14. package/actions/create-board/create-board.mjs +175 -0
  15. package/actions/create-card/create-card.mjs +195 -0
  16. package/actions/create-checklist/create-checklist.mjs +66 -0
  17. package/actions/create-checklist-item/create-checklist-item.mjs +67 -0
  18. package/actions/create-comment-on-card/create-comment-on-card.mjs +42 -0
  19. package/actions/create-label/create-label.mjs +73 -0
  20. package/actions/create-list/create-list.mjs +67 -0
  21. package/actions/delete-checklist/delete-checklist.mjs +46 -0
  22. package/actions/find-labels/find-labels.mjs +44 -0
  23. package/actions/find-list/find-list.mjs +49 -0
  24. package/actions/get-card/get-card.mjs +37 -0
  25. package/actions/get-list/get-list.mjs +32 -0
  26. package/actions/move-card-to-list/move-card-to-list.mjs +53 -0
  27. package/actions/remove-label-from-card/remove-label-from-card.mjs +47 -0
  28. package/actions/rename-list/rename-list.mjs +47 -0
  29. package/actions/search-boards/search-boards.mjs +57 -0
  30. package/actions/search-cards/search-cards.mjs +59 -0
  31. package/actions/search-checklists/search-checklists.mjs +110 -0
  32. package/actions/search-members/search-members.mjs +61 -0
  33. package/actions/update-card/update-card.mjs +165 -0
  34. package/common/events.js +138 -0
  35. package/common/fields.js +50 -0
  36. package/package.json +23 -19
  37. package/sources/board-based.mjs +27 -0
  38. package/sources/card-archived/card-archived.mjs +54 -0
  39. package/sources/card-due-date-reminder/card-due-date-reminder.mjs +80 -0
  40. package/sources/card-moved/card-moved.mjs +84 -0
  41. package/sources/card-updates/card-updates.mjs +60 -0
  42. package/sources/common-polling.mjs +16 -0
  43. package/sources/common-webhook.mjs +90 -0
  44. package/sources/common.js +34 -0
  45. package/sources/custom-webhook-events/custom-webhook-events.mjs +110 -0
  46. package/sources/new-activity/new-activity.mjs +64 -0
  47. package/sources/new-attachment/new-attachment.mjs +60 -0
  48. package/sources/new-board/new-board.mjs +29 -0
  49. package/sources/new-card/new-card.mjs +58 -0
  50. package/sources/new-checklist/new-checklist.mjs +29 -0
  51. package/sources/new-comment-added-to-card/new-comment-added-to-card.mjs +94 -0
  52. package/sources/new-label/new-label.mjs +41 -0
  53. package/sources/new-label-added-to-card/new-label-added-to-card.mjs +138 -0
  54. package/sources/new-list/new-list.mjs +29 -0
  55. package/sources/new-member-on-card/new-member-on-card.mjs +38 -0
  56. package/sources/new-notification/new-notification.mjs +50 -0
  57. package/trello.app.js +647 -145
  58. package/sources/card-archived/card-archived.js +0 -75
  59. package/sources/card-due-date-reminder/card-due-date-reminder.js +0 -65
  60. package/sources/card-moved/card-moved.js +0 -84
  61. package/sources/card-updates/card-updates.js +0 -77
  62. package/sources/custom-webhook-events/custom-webhook-events.js +0 -72
  63. package/sources/new-board/new-board.js +0 -62
  64. package/sources/new-card/new-card.js +0 -77
  65. package/sources/new-checklist/new-checklist.js +0 -74
  66. package/sources/new-comment-added-to-card/new-comment-added-to-card.js +0 -86
  67. package/sources/new-label/new-label.js +0 -73
  68. package/sources/new-label-added-to-card/new-labels-added-to-card.js +0 -85
  69. package/sources/new-list/new-list.js +0 -74
  70. package/sources/new-member-on-card/new-member-on-card.js +0 -75
  71. package/sources/new-notification/new-notification.js +0 -45
@@ -0,0 +1,174 @@
1
+ // legacy_hash_id: a_B0izQg
2
+ import { axios } from "@pipedream/platform";
3
+
4
+ export default {
5
+ key: "trello-copy-board",
6
+ name: "Copy a Board",
7
+ description: "Creates a copy of an existing board.",
8
+ version: "0.1.1",
9
+ type: "action",
10
+ props: {
11
+ trello: {
12
+ type: "app",
13
+ app: "trello",
14
+ },
15
+ name: {
16
+ type: "string",
17
+ description: "The new name for the board. 1 to 16384 characters long.",
18
+ },
19
+ defaultLabels: {
20
+ type: "boolean",
21
+ description: "Determines whether to use the default set of labels.",
22
+ optional: true,
23
+ },
24
+ defaultLists: {
25
+ type: "boolean",
26
+ description: "Determines whether to add the default set of lists to a board (To Do, Doing, Done). It is ignored if idBoardSource is provided.",
27
+ optional: true,
28
+ },
29
+ desc: {
30
+ type: "string",
31
+ description: "A new description for the board, 0 to 16384 characters long.",
32
+ optional: true,
33
+ },
34
+ idOrganization: {
35
+ type: "string",
36
+ description: "The id or name of the team the board should belong to.",
37
+ optional: true,
38
+ },
39
+ idBoardSource: {
40
+ type: "string",
41
+ description: "The id of a board to copy into the new board.",
42
+ },
43
+ keepFromSource: {
44
+ type: "string",
45
+ description: "To keep cards from the original board pass in the value \"cards\".",
46
+ optional: true,
47
+ options: [
48
+ "none",
49
+ "cards",
50
+ ],
51
+ },
52
+ powerUps: {
53
+ type: "string",
54
+ description: "The Power-Ups that should be enabled on the new board. One of: all, calendar, cardAging, recap, voting.",
55
+ optional: true,
56
+ },
57
+ prefs_permissionLevel: {
58
+ type: "string",
59
+ description: "The permissions level of the board. One of: org, private, public.",
60
+ optional: true,
61
+ options: [
62
+ "org",
63
+ "private",
64
+ "public",
65
+ ],
66
+ },
67
+ prefs_voting: {
68
+ type: "string",
69
+ label: "Prefs Voting",
70
+ description: "Who can vote on this board. One of disabled, members, observers, org, public.",
71
+ optional: true,
72
+ options: [
73
+ "disabled",
74
+ "members",
75
+ "observers",
76
+ "org",
77
+ "public",
78
+ ],
79
+ },
80
+ prefs_comments: {
81
+ type: "string",
82
+ label: "Prefs Comments",
83
+ description: "Who can comment on cards on this board. One of: disabled, members, observers, org, public.",
84
+ optional: true,
85
+ options: [
86
+ "disabled",
87
+ "members",
88
+ "observers",
89
+ "org",
90
+ "public",
91
+ ],
92
+ },
93
+ prefs_invitations: {
94
+ type: "string",
95
+ label: "Prefs Invitations",
96
+ description: "Determines what types of members can invite users to join. One of: admins, members.",
97
+ optional: true,
98
+ options: [
99
+ "admins",
100
+ "members",
101
+ ],
102
+ },
103
+ prefs_selfJoin: {
104
+ type: "boolean",
105
+ description: "Determines whether users can join the boards themselves or whether they have to be invited.",
106
+ optional: true,
107
+ },
108
+ prefs_cardCovers: {
109
+ type: "string",
110
+ description: "Determines whether card covers are enabled.",
111
+ optional: true,
112
+ },
113
+ prefs_background: {
114
+ type: "string",
115
+ label: "Prefs Background",
116
+ description: "The id of a custom background or one of: blue, orange, green, red, purple, pink, lime, sky, grey.",
117
+ optional: true,
118
+ },
119
+ prefs_cardAging: {
120
+ type: "string",
121
+ description: "Determines the type of card aging that should take place on the board if card aging is enabled. One of: pirate, regular.",
122
+ optional: true,
123
+ options: [
124
+ "pirate",
125
+ "regular",
126
+ ],
127
+ },
128
+ },
129
+ async run({ $ }) {
130
+ const oauthSignerUri = this.trello.$auth.oauth_signer_uri;
131
+
132
+ const trelloParams = [
133
+ "name",
134
+ "defaultLabels",
135
+ "defaultLists",
136
+ "desc",
137
+ "idOrganization",
138
+ "idBoardSource",
139
+ "keepFromSource",
140
+ "powerUps",
141
+ "prefs_permissionLevel",
142
+ "prefs_voting",
143
+ "prefs_comments",
144
+ "prefs_invitations",
145
+ "prefs_selfJoin",
146
+ "prefs_cardCovers",
147
+ "prefs_background",
148
+ "prefs_cardAging",
149
+ ];
150
+ let p = this;
151
+
152
+ const queryString = trelloParams.filter((param) => p[param]).map((param) => `${param}=${p[param]}`)
153
+ .join("&");
154
+
155
+ const config = {
156
+ url: `https://api.trello.com/1/boards?${queryString}`,
157
+ method: "POST",
158
+ data: "",
159
+ };
160
+
161
+ const token = {
162
+ key: this.trello.$auth.oauth_access_token,
163
+ secret: this.trello.$auth.oauth_refresh_token,
164
+ };
165
+
166
+ const signConfig = {
167
+ token,
168
+ oauthSignerUri,
169
+ };
170
+
171
+ const resp = await axios($, config, signConfig);
172
+ return resp;
173
+ },
174
+ };
@@ -0,0 +1,175 @@
1
+ // legacy_hash_id: a_Nqi0GV
2
+ import { axios } from "@pipedream/platform";
3
+
4
+ export default {
5
+ key: "trello-create-board",
6
+ name: "Create a Board",
7
+ description: "Creates a new Trello board.",
8
+ version: "0.1.1",
9
+ type: "action",
10
+ props: {
11
+ trello: {
12
+ type: "app",
13
+ app: "trello",
14
+ },
15
+ name: {
16
+ type: "string",
17
+ description: "The new name for the board. 1 to 16384 characters long.",
18
+ },
19
+ defaultLabels: {
20
+ type: "boolean",
21
+ description: "Determines whether to use the default set of labels.",
22
+ optional: true,
23
+ },
24
+ defaultLists: {
25
+ type: "boolean",
26
+ description: "Determines whether to add the default set of lists to a board (To Do, Doing, Done). It is ignored if idBoardSource is provided.",
27
+ optional: true,
28
+ },
29
+ desc: {
30
+ type: "string",
31
+ description: "A new description for the board, 0 to 16384 characters long",
32
+ optional: true,
33
+ },
34
+ idOrganization: {
35
+ type: "string",
36
+ description: "The id or name of the team the board should belong to.",
37
+ optional: true,
38
+ },
39
+ idBoardSource: {
40
+ type: "string",
41
+ description: "The id of a board to copy into the new board.",
42
+ optional: true,
43
+ },
44
+ keepFromSource: {
45
+ type: "string",
46
+ description: "To keep cards from the original board pass in the value \"cards\".",
47
+ optional: true,
48
+ options: [
49
+ "none",
50
+ "cards",
51
+ ],
52
+ },
53
+ powerUps: {
54
+ type: "string",
55
+ description: "The Power-Ups that should be enabled on the new board. One of: all, calendar, cardAging, recap, voting.",
56
+ optional: true,
57
+ },
58
+ prefs_permissionLevel: {
59
+ type: "string",
60
+ description: "The permissions level of the board. One of: org, private, public.",
61
+ optional: true,
62
+ options: [
63
+ "org",
64
+ "private",
65
+ "public",
66
+ ],
67
+ },
68
+ prefs_voting: {
69
+ type: "string",
70
+ label: "Prefs Voting",
71
+ description: "Who can vote on this board. One of disabled, members, observers, org, public.",
72
+ optional: true,
73
+ options: [
74
+ "disabled",
75
+ "members",
76
+ "observers",
77
+ "org",
78
+ "public",
79
+ ],
80
+ },
81
+ prefs_comments: {
82
+ type: "string",
83
+ label: "Prefs Comments",
84
+ description: "Who can comment on cards on this board. One of: disabled, members, observers, org, public.",
85
+ optional: true,
86
+ options: [
87
+ "disabled",
88
+ "members",
89
+ "observers",
90
+ "org",
91
+ "public",
92
+ ],
93
+ },
94
+ prefs_invitations: {
95
+ type: "string",
96
+ label: "Prefs Invitations",
97
+ description: "Determines what types of members can invite users to join. One of: admins, members.",
98
+ optional: true,
99
+ options: [
100
+ "admins",
101
+ "members",
102
+ ],
103
+ },
104
+ prefs_selfJoin: {
105
+ type: "boolean",
106
+ description: "Determines whether users can join the boards themselves or whether they have to be invited.",
107
+ optional: true,
108
+ },
109
+ prefs_cardCovers: {
110
+ type: "boolean",
111
+ description: "Determines whether card covers are enabled.",
112
+ optional: true,
113
+ },
114
+ prefs_background: {
115
+ type: "string",
116
+ label: "Prefs Background",
117
+ description: "The id of a custom background or one of: blue, orange, green, red, purple, pink, lime, sky, grey.",
118
+ optional: true,
119
+ },
120
+ prefs_cardAging: {
121
+ type: "string",
122
+ description: "Determines the type of card aging that should take place on the board if card aging is enabled. One of: pirate, regular.",
123
+ optional: true,
124
+ options: [
125
+ "pirate",
126
+ "regular",
127
+ ],
128
+ },
129
+ },
130
+ async run({ $ }) {
131
+ const oauthSignerUri = this.trello.$auth.oauth_signer_uri;
132
+
133
+ const trelloParams = [
134
+ "name",
135
+ "defaultLabels",
136
+ "defaultLists",
137
+ "desc",
138
+ "idOrganization",
139
+ "idBoardSource",
140
+ "keepFromSource",
141
+ "powerUps",
142
+ "prefs_permissionLevel",
143
+ "prefs_voting",
144
+ "prefs_comments",
145
+ "prefs_invitations",
146
+ "prefs_selfJoin",
147
+ "prefs_cardCovers",
148
+ "prefs_background",
149
+ "prefs_cardAging",
150
+ ];
151
+ let p = this;
152
+
153
+ const queryString = trelloParams.filter((param) => p[param]).map((param) => `${param}=${p[param]}`)
154
+ .join("&");
155
+
156
+ const config = {
157
+ url: `https://api.trello.com/1/boards?${queryString}`,
158
+ method: "POST",
159
+ data: "",
160
+ };
161
+
162
+ const token = {
163
+ key: this.trello.$auth.oauth_access_token,
164
+ secret: this.trello.$auth.oauth_refresh_token,
165
+ };
166
+
167
+ const signConfig = {
168
+ token,
169
+ oauthSignerUri,
170
+ };
171
+
172
+ const resp = await axios($, config, signConfig);
173
+ return resp;
174
+ },
175
+ };
@@ -0,0 +1,195 @@
1
+ import common from "../common.js";
2
+
3
+ export default {
4
+ ...common,
5
+ key: "trello-create-card",
6
+ name: "Create Card",
7
+ description: "Creates a new card. [See the docs here](https://developer.atlassian.com/cloud/trello/rest/api-group-cards/#api-cards-post)",
8
+ version: "0.0.1",
9
+ type: "action",
10
+ props: {
11
+ ...common.props,
12
+ board: {
13
+ propDefinition: [
14
+ common.props.trello,
15
+ "board",
16
+ ],
17
+ },
18
+ name: {
19
+ propDefinition: [
20
+ common.props.trello,
21
+ "name",
22
+ ],
23
+ description: "The name of the card.",
24
+ optional: false,
25
+ },
26
+ desc: {
27
+ propDefinition: [
28
+ common.props.trello,
29
+ "desc",
30
+ ],
31
+ },
32
+ pos: {
33
+ propDefinition: [
34
+ common.props.trello,
35
+ "pos",
36
+ ],
37
+ },
38
+ due: {
39
+ propDefinition: [
40
+ common.props.trello,
41
+ "due",
42
+ ],
43
+ },
44
+ dueComplete: {
45
+ propDefinition: [
46
+ common.props.trello,
47
+ "dueComplete",
48
+ ],
49
+ },
50
+ idList: {
51
+ propDefinition: [
52
+ common.props.trello,
53
+ "lists",
54
+ (c) => ({
55
+ board: c.board,
56
+ }),
57
+ ],
58
+ type: "string",
59
+ label: "List",
60
+ description: "The ID of the list the card should be created in.",
61
+ optional: false,
62
+ },
63
+ idMembers: {
64
+ propDefinition: [
65
+ common.props.trello,
66
+ "member",
67
+ (c) => ({
68
+ board: c.board,
69
+ }),
70
+ ],
71
+ type: "string[]",
72
+ label: "Members",
73
+ description: "Array of member IDs to add to the card",
74
+ optional: true,
75
+ },
76
+ idLabels: {
77
+ propDefinition: [
78
+ common.props.trello,
79
+ "label",
80
+ (c) => ({
81
+ board: c.board,
82
+ }),
83
+ ],
84
+ type: "string[]",
85
+ label: "Labels",
86
+ description: "Array of labelIDs to add to the card",
87
+ optional: true,
88
+ },
89
+ urlSource: {
90
+ propDefinition: [
91
+ common.props.trello,
92
+ "url",
93
+ ],
94
+ optional: true,
95
+ },
96
+ fileSource: {
97
+ type: "string",
98
+ label: "File Attachment Contents",
99
+ description: "Value must be in binary format",
100
+ optional: true,
101
+ },
102
+ mimeType: {
103
+ propDefinition: [
104
+ common.props.trello,
105
+ "mimeType",
106
+ ],
107
+ },
108
+ idCardSource: {
109
+ propDefinition: [
110
+ common.props.trello,
111
+ "cards",
112
+ (c) => ({
113
+ board: c.board,
114
+ }),
115
+ ],
116
+ type: "string",
117
+ label: "Copy Card",
118
+ description: "Specify an existing card to copy contents from",
119
+ },
120
+ keepFromSource: {
121
+ type: "string[]",
122
+ label: "Copy From Source",
123
+ description: "Specify which properties to copy from the source card",
124
+ options: [
125
+ "all",
126
+ "attachments",
127
+ "checklists",
128
+ "comments",
129
+ "due",
130
+ "labels",
131
+ "members",
132
+ "stickers",
133
+ ],
134
+ optional: true,
135
+ },
136
+ address: {
137
+ propDefinition: [
138
+ common.props.trello,
139
+ "address",
140
+ ],
141
+ },
142
+ locationName: {
143
+ propDefinition: [
144
+ common.props.trello,
145
+ "locationName",
146
+ ],
147
+ },
148
+ coordinates: {
149
+ propDefinition: [
150
+ common.props.trello,
151
+ "coordinates",
152
+ ],
153
+ },
154
+ },
155
+ async run({ $ }) {
156
+ const {
157
+ name,
158
+ desc,
159
+ pos,
160
+ due,
161
+ dueComplete,
162
+ idList,
163
+ idMembers,
164
+ idLabels,
165
+ urlSource,
166
+ fileSource,
167
+ mimeType,
168
+ idCardSource,
169
+ keepFromSource,
170
+ address,
171
+ locationName,
172
+ coordinates,
173
+ } = this;
174
+ const res = await this.trello.createCard({
175
+ name,
176
+ desc,
177
+ pos,
178
+ due,
179
+ dueComplete,
180
+ idList,
181
+ idMembers,
182
+ idLabels,
183
+ urlSource,
184
+ fileSource,
185
+ mimeType,
186
+ idCardSource,
187
+ keepFromSource: keepFromSource?.join(","),
188
+ address,
189
+ locationName,
190
+ coordinates,
191
+ }, $);
192
+ $.export("$summary", `Successfully created card ${res.id}`);
193
+ return res;
194
+ },
195
+ };
@@ -0,0 +1,66 @@
1
+ import common from "../common.js";
2
+
3
+ export default {
4
+ ...common,
5
+ key: "trello-create-checklist",
6
+ name: "Create Checklist",
7
+ description: "Creates a checklist on the specified card. [See the docs here](https://developer.atlassian.com/cloud/trello/rest/api-group-checklists/#api-checklists-post)",
8
+ version: "0.0.1",
9
+ type: "action",
10
+ props: {
11
+ ...common.props,
12
+ board: {
13
+ propDefinition: [
14
+ common.props.trello,
15
+ "board",
16
+ ],
17
+ },
18
+ idCard: {
19
+ propDefinition: [
20
+ common.props.trello,
21
+ "cards",
22
+ (c) => ({
23
+ board: c.board,
24
+ }),
25
+ ],
26
+ type: "string",
27
+ label: "Card",
28
+ description: "The ID of the Card that the checklist should be added to",
29
+ optional: false,
30
+ },
31
+ name: {
32
+ propDefinition: [
33
+ common.props.trello,
34
+ "name",
35
+ ],
36
+ description: "The name of the checklist. Should be a string of length 1 to 16384.",
37
+ },
38
+ pos: {
39
+ propDefinition: [
40
+ common.props.trello,
41
+ "pos",
42
+ ],
43
+ description: "The position of the new checklist. Valid values: `top`, `bottom`, or a positive float.",
44
+ },
45
+ idChecklistSource: {
46
+ propDefinition: [
47
+ common.props.trello,
48
+ "checklist",
49
+ (c) => ({
50
+ board: c.board,
51
+ }),
52
+ ],
53
+ },
54
+ },
55
+ async run({ $ }) {
56
+ const opts = {
57
+ idCard: this.idCard,
58
+ name: this.name,
59
+ pos: this.pos,
60
+ idChecklistSource: this.idChecklistSource,
61
+ };
62
+ const res = await this.trello.createChecklist(opts, $);
63
+ $.export("$summary", `Successfully created checklist ${res.name}`);
64
+ return res;
65
+ },
66
+ };
@@ -0,0 +1,67 @@
1
+ // legacy_hash_id: a_bKiP4j
2
+ import { axios } from "@pipedream/platform";
3
+
4
+ export default {
5
+ key: "trello-create-checklist-item",
6
+ name: "Create a Checklist Item",
7
+ description: "Creates a new checklist item in a card.",
8
+ version: "0.1.1",
9
+ type: "action",
10
+ props: {
11
+ trello: {
12
+ type: "app",
13
+ app: "trello",
14
+ },
15
+ id: {
16
+ type: "string",
17
+ description: "ID of a checklist.",
18
+ },
19
+ name: {
20
+ type: "string",
21
+ description: "The name of the new check item on the checklist. Should be a string of length 1 to 16384.",
22
+ },
23
+ pos: {
24
+ type: "string",
25
+ description: "The position of the check item in the checklist. One of: top, bottom, or a positive number.",
26
+ optional: true,
27
+ },
28
+ checked: {
29
+ type: "boolean",
30
+ description: "Determines whether the check item is already checked when created.",
31
+ optional: true,
32
+ },
33
+ },
34
+ async run({ $ }) {
35
+ const oauthSignerUri = this.trello.$auth.oauth_signer_uri;
36
+
37
+ let id = this.id;
38
+ const trelloParams = [
39
+ "name",
40
+ "pos",
41
+ "checked",
42
+ ];
43
+ let p = this;
44
+
45
+ const queryString = trelloParams.filter((param) => p[param]).map((param) => `${param}=${p[param]}`)
46
+ .join("&");
47
+
48
+ const config = {
49
+ url: `https://api.trello.com/1/checklists/${id}/checkItems?${queryString}`,
50
+ method: "POST",
51
+ data: "",
52
+ };
53
+
54
+ const token = {
55
+ key: this.trello.$auth.oauth_access_token,
56
+ secret: this.trello.$auth.oauth_refresh_token,
57
+ };
58
+
59
+ const signConfig = {
60
+ token,
61
+ oauthSignerUri,
62
+ };
63
+
64
+ const resp = await axios($, config, signConfig);
65
+ return resp;
66
+ },
67
+ };