@memberjunction/core-actions 2.54.0 → 2.56.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/custom/ai/execute-ai-prompt.action.d.ts +94 -0
- package/dist/custom/ai/execute-ai-prompt.action.d.ts.map +1 -0
- package/dist/custom/ai/execute-ai-prompt.action.js +274 -0
- package/dist/custom/ai/execute-ai-prompt.action.js.map +1 -0
- package/dist/custom/communication/slack-webhook.action.d.ts +101 -0
- package/dist/custom/communication/slack-webhook.action.d.ts.map +1 -0
- package/dist/custom/communication/slack-webhook.action.js +269 -0
- package/dist/custom/communication/slack-webhook.action.js.map +1 -0
- package/dist/custom/communication/teams-webhook.action.d.ts +96 -0
- package/dist/custom/communication/teams-webhook.action.d.ts.map +1 -0
- package/dist/custom/communication/teams-webhook.action.js +275 -0
- package/dist/custom/communication/teams-webhook.action.js.map +1 -0
- package/dist/custom/data/aggregate-data.action.d.ts +91 -0
- package/dist/custom/data/aggregate-data.action.d.ts.map +1 -0
- package/dist/custom/data/aggregate-data.action.js +333 -0
- package/dist/custom/data/aggregate-data.action.js.map +1 -0
- package/dist/custom/data/csv-parser.action.d.ts +68 -0
- package/dist/custom/data/csv-parser.action.d.ts.map +1 -0
- package/dist/custom/data/csv-parser.action.js +184 -0
- package/dist/custom/data/csv-parser.action.js.map +1 -0
- package/dist/custom/data/data-mapper.action.d.ts +89 -0
- package/dist/custom/data/data-mapper.action.d.ts.map +1 -0
- package/dist/custom/data/data-mapper.action.js +325 -0
- package/dist/custom/data/data-mapper.action.js.map +1 -0
- package/dist/custom/data/json-transform.action.d.ts +57 -0
- package/dist/custom/data/json-transform.action.d.ts.map +1 -0
- package/dist/custom/data/json-transform.action.js +205 -0
- package/dist/custom/data/json-transform.action.js.map +1 -0
- package/dist/custom/data/xml-parser.action.d.ts +85 -0
- package/dist/custom/data/xml-parser.action.d.ts.map +1 -0
- package/dist/custom/data/xml-parser.action.js +326 -0
- package/dist/custom/data/xml-parser.action.js.map +1 -0
- package/dist/custom/files/excel-reader.action.d.ts +86 -0
- package/dist/custom/files/excel-reader.action.d.ts.map +1 -0
- package/dist/custom/files/excel-reader.action.js +348 -0
- package/dist/custom/files/excel-reader.action.js.map +1 -0
- package/dist/custom/files/excel-writer.action.d.ts +79 -0
- package/dist/custom/files/excel-writer.action.d.ts.map +1 -0
- package/dist/custom/files/excel-writer.action.js +325 -0
- package/dist/custom/files/excel-writer.action.js.map +1 -0
- package/dist/custom/files/file-compress.action.d.ts +90 -0
- package/dist/custom/files/file-compress.action.d.ts.map +1 -0
- package/dist/custom/files/file-compress.action.js +346 -0
- package/dist/custom/files/file-compress.action.js.map +1 -0
- package/dist/custom/files/pdf-extractor.action.d.ts +86 -0
- package/dist/custom/files/pdf-extractor.action.d.ts.map +1 -0
- package/dist/custom/files/pdf-extractor.action.js +247 -0
- package/dist/custom/files/pdf-extractor.action.js.map +1 -0
- package/dist/custom/files/pdf-generator.action.d.ts +70 -0
- package/dist/custom/files/pdf-generator.action.d.ts.map +1 -0
- package/dist/custom/files/pdf-generator.action.js +286 -0
- package/dist/custom/files/pdf-generator.action.js.map +1 -0
- package/dist/custom/integration/api-rate-limiter.action.d.ts +88 -0
- package/dist/custom/integration/api-rate-limiter.action.d.ts.map +1 -0
- package/dist/custom/integration/api-rate-limiter.action.js +363 -0
- package/dist/custom/integration/api-rate-limiter.action.js.map +1 -0
- package/dist/custom/integration/graphql-query.action.d.ts +92 -0
- package/dist/custom/integration/graphql-query.action.d.ts.map +1 -0
- package/dist/custom/integration/graphql-query.action.js +251 -0
- package/dist/custom/integration/graphql-query.action.js.map +1 -0
- package/dist/custom/integration/http-request.action.d.ts +96 -0
- package/dist/custom/integration/http-request.action.d.ts.map +1 -0
- package/dist/custom/integration/http-request.action.js +316 -0
- package/dist/custom/integration/http-request.action.js.map +1 -0
- package/dist/custom/integration/oauth-flow.action.d.ts +130 -0
- package/dist/custom/integration/oauth-flow.action.d.ts.map +1 -0
- package/dist/custom/integration/oauth-flow.action.js +624 -0
- package/dist/custom/integration/oauth-flow.action.js.map +1 -0
- package/dist/custom/security/password-strength.action.d.ts +129 -0
- package/dist/custom/security/password-strength.action.d.ts.map +1 -0
- package/dist/custom/security/password-strength.action.js +463 -0
- package/dist/custom/security/password-strength.action.js.map +1 -0
- package/dist/custom/utilities/base-file-handler.d.ts +54 -0
- package/dist/custom/utilities/base-file-handler.d.ts.map +1 -0
- package/dist/custom/utilities/base-file-handler.js +167 -0
- package/dist/custom/utilities/base-file-handler.js.map +1 -0
- package/dist/custom/utilities/index.d.ts +3 -0
- package/dist/custom/utilities/index.d.ts.map +1 -0
- package/dist/custom/utilities/index.js +19 -0
- package/dist/custom/utilities/index.js.map +1 -0
- package/dist/custom/utilities/json-param-helper.d.ts +33 -0
- package/dist/custom/utilities/json-param-helper.d.ts.map +1 -0
- package/dist/custom/utilities/json-param-helper.js +66 -0
- package/dist/custom/utilities/json-param-helper.js.map +1 -0
- package/dist/custom/web/duckduckgo-rate-limiter.d.ts +85 -0
- package/dist/custom/web/duckduckgo-rate-limiter.d.ts.map +1 -0
- package/dist/custom/web/duckduckgo-rate-limiter.js +257 -0
- package/dist/custom/web/duckduckgo-rate-limiter.js.map +1 -0
- package/dist/custom/web/web-search.action.d.ts +1 -0
- package/dist/custom/web/web-search.action.d.ts.map +1 -1
- package/dist/custom/web/web-search.action.js +48 -20
- package/dist/custom/web/web-search.action.js.map +1 -1
- package/dist/custom/workflow/conditional.action.d.ts +94 -0
- package/dist/custom/workflow/conditional.action.d.ts.map +1 -0
- package/dist/custom/workflow/conditional.action.js +274 -0
- package/dist/custom/workflow/conditional.action.js.map +1 -0
- package/dist/custom/workflow/delay.action.d.ts +76 -0
- package/dist/custom/workflow/delay.action.d.ts.map +1 -0
- package/dist/custom/workflow/delay.action.js +187 -0
- package/dist/custom/workflow/delay.action.js.map +1 -0
- package/dist/custom/workflow/loop.action.d.ts +112 -0
- package/dist/custom/workflow/loop.action.d.ts.map +1 -0
- package/dist/custom/workflow/loop.action.js +380 -0
- package/dist/custom/workflow/loop.action.js.map +1 -0
- package/dist/custom/workflow/parallel-execute.action.d.ts +105 -0
- package/dist/custom/workflow/parallel-execute.action.d.ts.map +1 -0
- package/dist/custom/workflow/parallel-execute.action.js +457 -0
- package/dist/custom/workflow/parallel-execute.action.js.map +1 -0
- package/dist/custom/workflow/retry.action.d.ts +90 -0
- package/dist/custom/workflow/retry.action.d.ts.map +1 -0
- package/dist/custom/workflow/retry.action.js +378 -0
- package/dist/custom/workflow/retry.action.js.map +1 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +75 -0
- package/dist/index.js.map +1 -1
- package/package.json +25 -10
- package/readme.md +11270 -101
|
@@ -0,0 +1,269 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
9
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.LoadSlackWebhookAction = exports.SlackWebhookAction = void 0;
|
|
13
|
+
const global_1 = require("@memberjunction/global");
|
|
14
|
+
const actions_1 = require("@memberjunction/actions");
|
|
15
|
+
const axios_1 = __importDefault(require("axios"));
|
|
16
|
+
const json_param_helper_1 = require("../utilities/json-param-helper");
|
|
17
|
+
/**
|
|
18
|
+
* Action that sends messages to Slack via incoming webhooks
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```typescript
|
|
22
|
+
* // Simple text message
|
|
23
|
+
* await runAction({
|
|
24
|
+
* ActionName: 'Slack Webhook',
|
|
25
|
+
* Params: [{
|
|
26
|
+
* Name: 'WebhookURL',
|
|
27
|
+
* Value: 'https://hooks.slack.com/services/YOUR/WEBHOOK/URL'
|
|
28
|
+
* }, {
|
|
29
|
+
* Name: 'Message',
|
|
30
|
+
* Value: 'Hello from MemberJunction!'
|
|
31
|
+
* }]
|
|
32
|
+
* });
|
|
33
|
+
*
|
|
34
|
+
* // Rich message with blocks
|
|
35
|
+
* await runAction({
|
|
36
|
+
* ActionName: 'Slack Webhook',
|
|
37
|
+
* Params: [{
|
|
38
|
+
* Name: 'WebhookURL',
|
|
39
|
+
* Value: webhookUrl
|
|
40
|
+
* }, {
|
|
41
|
+
* Name: 'Blocks',
|
|
42
|
+
* Value: [
|
|
43
|
+
* {
|
|
44
|
+
* type: 'header',
|
|
45
|
+
* text: {
|
|
46
|
+
* type: 'plain_text',
|
|
47
|
+
* text: 'New Order Received'
|
|
48
|
+
* }
|
|
49
|
+
* },
|
|
50
|
+
* {
|
|
51
|
+
* type: 'section',
|
|
52
|
+
* text: {
|
|
53
|
+
* type: 'mrkdwn',
|
|
54
|
+
* text: `Order *#12345* from *John Doe*\nTotal: $99.99`
|
|
55
|
+
* }
|
|
56
|
+
* }
|
|
57
|
+
* ]
|
|
58
|
+
* }]
|
|
59
|
+
* });
|
|
60
|
+
*
|
|
61
|
+
* // With custom username and icon
|
|
62
|
+
* await runAction({
|
|
63
|
+
* ActionName: 'Slack Webhook',
|
|
64
|
+
* Params: [{
|
|
65
|
+
* Name: 'WebhookURL',
|
|
66
|
+
* Value: webhookUrl
|
|
67
|
+
* }, {
|
|
68
|
+
* Name: 'Message',
|
|
69
|
+
* Value: 'Deployment completed successfully!'
|
|
70
|
+
* }, {
|
|
71
|
+
* Name: 'Username',
|
|
72
|
+
* Value: 'Deploy Bot'
|
|
73
|
+
* }, {
|
|
74
|
+
* Name: 'IconEmoji',
|
|
75
|
+
* Value: ':rocket:'
|
|
76
|
+
* }]
|
|
77
|
+
* });
|
|
78
|
+
* ```
|
|
79
|
+
*/
|
|
80
|
+
let SlackWebhookAction = class SlackWebhookAction extends actions_1.BaseAction {
|
|
81
|
+
/**
|
|
82
|
+
* Sends messages to Slack via webhook
|
|
83
|
+
*
|
|
84
|
+
* @param params - The action parameters containing:
|
|
85
|
+
* - WebhookURL: Slack incoming webhook URL (required)
|
|
86
|
+
* - Message: Plain text message (required if no Blocks)
|
|
87
|
+
* - Blocks: Slack Block Kit blocks array (optional, overrides Message)
|
|
88
|
+
* - Username: Override webhook's default username (optional)
|
|
89
|
+
* - IconEmoji: Override webhook's default icon (optional, e.g., ':ghost:')
|
|
90
|
+
* - IconURL: Override webhook's default icon with URL (optional)
|
|
91
|
+
* - Channel: Override webhook's default channel (optional, may be disabled)
|
|
92
|
+
* - ThreadTS: Thread timestamp to reply to (optional)
|
|
93
|
+
* - Attachments: Legacy attachments array (optional)
|
|
94
|
+
*
|
|
95
|
+
* @returns Success confirmation
|
|
96
|
+
*/
|
|
97
|
+
async InternalRunAction(params) {
|
|
98
|
+
try {
|
|
99
|
+
const webhookURL = this.getParamValue(params, 'webhookurl');
|
|
100
|
+
const message = this.getParamValue(params, 'message');
|
|
101
|
+
const blocks = json_param_helper_1.JSONParamHelper.getJSONParam(params, 'blocks');
|
|
102
|
+
const username = this.getParamValue(params, 'username');
|
|
103
|
+
const iconEmoji = this.getParamValue(params, 'iconemoji');
|
|
104
|
+
const iconURL = this.getParamValue(params, 'iconurl');
|
|
105
|
+
const channel = this.getParamValue(params, 'channel');
|
|
106
|
+
const threadTS = this.getParamValue(params, 'threadts');
|
|
107
|
+
const attachments = json_param_helper_1.JSONParamHelper.getJSONParam(params, 'attachments');
|
|
108
|
+
// Validate webhook URL
|
|
109
|
+
if (!webhookURL) {
|
|
110
|
+
return {
|
|
111
|
+
Success: false,
|
|
112
|
+
Message: "WebhookURL parameter is required",
|
|
113
|
+
ResultCode: "MISSING_WEBHOOK_URL"
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
if (!webhookURL.startsWith('https://hooks.slack.com/')) {
|
|
117
|
+
return {
|
|
118
|
+
Success: false,
|
|
119
|
+
Message: "Invalid Slack webhook URL format",
|
|
120
|
+
ResultCode: "INVALID_WEBHOOK_URL"
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
// Validate message content
|
|
124
|
+
if (!message && !blocks) {
|
|
125
|
+
return {
|
|
126
|
+
Success: false,
|
|
127
|
+
Message: "Either Message or Blocks parameter is required",
|
|
128
|
+
ResultCode: "MISSING_CONTENT"
|
|
129
|
+
};
|
|
130
|
+
}
|
|
131
|
+
// Build payload
|
|
132
|
+
const payload = {};
|
|
133
|
+
if (blocks) {
|
|
134
|
+
// Use blocks if provided
|
|
135
|
+
payload.blocks = Array.isArray(blocks) ? blocks : [blocks];
|
|
136
|
+
// Add text as fallback
|
|
137
|
+
if (message) {
|
|
138
|
+
payload.text = message;
|
|
139
|
+
}
|
|
140
|
+
else {
|
|
141
|
+
// Generate fallback text from blocks
|
|
142
|
+
payload.text = this.generateFallbackText(payload.blocks);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
// Use simple text message
|
|
147
|
+
payload.text = message;
|
|
148
|
+
}
|
|
149
|
+
// Add optional parameters
|
|
150
|
+
if (username) {
|
|
151
|
+
payload.username = username;
|
|
152
|
+
}
|
|
153
|
+
if (iconEmoji && !iconURL) {
|
|
154
|
+
payload.icon_emoji = iconEmoji;
|
|
155
|
+
}
|
|
156
|
+
if (iconURL) {
|
|
157
|
+
payload.icon_url = iconURL;
|
|
158
|
+
}
|
|
159
|
+
if (channel) {
|
|
160
|
+
payload.channel = channel;
|
|
161
|
+
}
|
|
162
|
+
if (threadTS) {
|
|
163
|
+
payload.thread_ts = threadTS;
|
|
164
|
+
}
|
|
165
|
+
if (attachments) {
|
|
166
|
+
payload.attachments = Array.isArray(attachments) ? attachments : [attachments];
|
|
167
|
+
}
|
|
168
|
+
// Send to Slack
|
|
169
|
+
const response = await axios_1.default.post(webhookURL, payload, {
|
|
170
|
+
headers: {
|
|
171
|
+
'Content-Type': 'application/json'
|
|
172
|
+
},
|
|
173
|
+
validateStatus: () => true // Handle all status codes
|
|
174
|
+
});
|
|
175
|
+
// Check response
|
|
176
|
+
if (response.status === 200 && response.data === 'ok') {
|
|
177
|
+
// Add output parameters
|
|
178
|
+
params.Params.push({
|
|
179
|
+
Name: 'SlackResponse',
|
|
180
|
+
Type: 'Output',
|
|
181
|
+
Value: response.data
|
|
182
|
+
});
|
|
183
|
+
params.Params.push({
|
|
184
|
+
Name: 'MessageSent',
|
|
185
|
+
Type: 'Output',
|
|
186
|
+
Value: payload
|
|
187
|
+
});
|
|
188
|
+
return {
|
|
189
|
+
Success: true,
|
|
190
|
+
ResultCode: "MESSAGE_SENT",
|
|
191
|
+
Message: JSON.stringify({
|
|
192
|
+
message: "Slack message sent successfully",
|
|
193
|
+
response: response.data,
|
|
194
|
+
payload: payload
|
|
195
|
+
}, null, 2)
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
// Error response
|
|
200
|
+
return {
|
|
201
|
+
Success: false,
|
|
202
|
+
Message: `Slack webhook failed: ${response.data || `HTTP ${response.status}`}`,
|
|
203
|
+
ResultCode: response.status === 404 ? "WEBHOOK_NOT_FOUND" :
|
|
204
|
+
response.status === 400 ? "INVALID_PAYLOAD" :
|
|
205
|
+
"WEBHOOK_ERROR"
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
catch (error) {
|
|
210
|
+
return {
|
|
211
|
+
Success: false,
|
|
212
|
+
Message: `Slack webhook failed: ${error instanceof Error ? error.message : String(error)}`,
|
|
213
|
+
ResultCode: "REQUEST_FAILED"
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* Generate fallback text from blocks
|
|
219
|
+
*/
|
|
220
|
+
generateFallbackText(blocks) {
|
|
221
|
+
const textParts = [];
|
|
222
|
+
for (const block of blocks) {
|
|
223
|
+
if (block.type === 'section' && block.text) {
|
|
224
|
+
textParts.push(this.extractText(block.text));
|
|
225
|
+
}
|
|
226
|
+
else if (block.type === 'header' && block.text) {
|
|
227
|
+
textParts.push(this.extractText(block.text));
|
|
228
|
+
}
|
|
229
|
+
else if (block.type === 'context' && block.elements) {
|
|
230
|
+
const contextTexts = block.elements
|
|
231
|
+
.filter((el) => el.type === 'plain_text' || el.type === 'mrkdwn')
|
|
232
|
+
.map((el) => this.extractText(el));
|
|
233
|
+
textParts.push(contextTexts.join(' '));
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
return textParts.join('\n') || 'Slack message';
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Extract text from Slack text object
|
|
240
|
+
*/
|
|
241
|
+
extractText(textObj) {
|
|
242
|
+
if (typeof textObj === 'string') {
|
|
243
|
+
return textObj;
|
|
244
|
+
}
|
|
245
|
+
if (textObj && textObj.text) {
|
|
246
|
+
return textObj.text;
|
|
247
|
+
}
|
|
248
|
+
return '';
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Get parameter value by name (case-insensitive)
|
|
252
|
+
*/
|
|
253
|
+
getParamValue(params, name) {
|
|
254
|
+
const param = params.Params.find(p => p.Name.toLowerCase() === name.toLowerCase());
|
|
255
|
+
return param?.Value;
|
|
256
|
+
}
|
|
257
|
+
};
|
|
258
|
+
exports.SlackWebhookAction = SlackWebhookAction;
|
|
259
|
+
exports.SlackWebhookAction = SlackWebhookAction = __decorate([
|
|
260
|
+
(0, global_1.RegisterClass)(actions_1.BaseAction, "Slack Webhook")
|
|
261
|
+
], SlackWebhookAction);
|
|
262
|
+
/**
|
|
263
|
+
* Loader function to ensure the SlackWebhookAction class is included in the bundle
|
|
264
|
+
*/
|
|
265
|
+
function LoadSlackWebhookAction() {
|
|
266
|
+
// Stub function to prevent tree shaking
|
|
267
|
+
}
|
|
268
|
+
exports.LoadSlackWebhookAction = LoadSlackWebhookAction;
|
|
269
|
+
//# sourceMappingURL=slack-webhook.action.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slack-webhook.action.js","sourceRoot":"","sources":["../../../src/custom/communication/slack-webhook.action.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { ActionResultSimple, RunActionParams } from "@memberjunction/actions-base";
|
|
2
|
+
import { BaseAction } from "@memberjunction/actions";
|
|
3
|
+
/**
|
|
4
|
+
* Action that sends messages to Microsoft Teams via incoming webhooks
|
|
5
|
+
*
|
|
6
|
+
* @example
|
|
7
|
+
* ```typescript
|
|
8
|
+
* // Simple text message
|
|
9
|
+
* await runAction({
|
|
10
|
+
* ActionName: 'Teams Webhook',
|
|
11
|
+
* Params: [{
|
|
12
|
+
* Name: 'WebhookURL',
|
|
13
|
+
* Value: 'https://company.webhook.office.com/webhookb2/...'
|
|
14
|
+
* }, {
|
|
15
|
+
* Name: 'Message',
|
|
16
|
+
* Value: 'Build completed successfully!'
|
|
17
|
+
* }]
|
|
18
|
+
* });
|
|
19
|
+
*
|
|
20
|
+
* // Rich card with sections
|
|
21
|
+
* await runAction({
|
|
22
|
+
* ActionName: 'Teams Webhook',
|
|
23
|
+
* Params: [{
|
|
24
|
+
* Name: 'WebhookURL',
|
|
25
|
+
* Value: webhookUrl
|
|
26
|
+
* }, {
|
|
27
|
+
* Name: 'Title',
|
|
28
|
+
* Value: 'Deployment Status'
|
|
29
|
+
* }, {
|
|
30
|
+
* Name: 'Message',
|
|
31
|
+
* Value: 'Production deployment completed'
|
|
32
|
+
* }, {
|
|
33
|
+
* Name: 'ThemeColor',
|
|
34
|
+
* Value: '00FF00'
|
|
35
|
+
* }, {
|
|
36
|
+
* Name: 'Sections',
|
|
37
|
+
* Value: [{
|
|
38
|
+
* activityTitle: 'Deployment Details',
|
|
39
|
+
* facts: [
|
|
40
|
+
* { name: 'Environment', value: 'Production' },
|
|
41
|
+
* { name: 'Version', value: 'v2.5.0' },
|
|
42
|
+
* { name: 'Duration', value: '5 minutes' }
|
|
43
|
+
* ]
|
|
44
|
+
* }]
|
|
45
|
+
* }]
|
|
46
|
+
* });
|
|
47
|
+
*
|
|
48
|
+
* // Adaptive Card
|
|
49
|
+
* await runAction({
|
|
50
|
+
* ActionName: 'Teams Webhook',
|
|
51
|
+
* Params: [{
|
|
52
|
+
* Name: 'WebhookURL',
|
|
53
|
+
* Value: webhookUrl
|
|
54
|
+
* }, {
|
|
55
|
+
* Name: 'Card',
|
|
56
|
+
* Value: {
|
|
57
|
+
* type: 'AdaptiveCard',
|
|
58
|
+
* version: '1.2',
|
|
59
|
+
* body: [{
|
|
60
|
+
* type: 'TextBlock',
|
|
61
|
+
* text: 'Hello from MemberJunction!',
|
|
62
|
+
* size: 'Large',
|
|
63
|
+
* weight: 'Bolder'
|
|
64
|
+
* }]
|
|
65
|
+
* }
|
|
66
|
+
* }]
|
|
67
|
+
* });
|
|
68
|
+
* ```
|
|
69
|
+
*/
|
|
70
|
+
export declare class TeamsWebhookAction extends BaseAction {
|
|
71
|
+
/**
|
|
72
|
+
* Sends messages to Microsoft Teams via webhook
|
|
73
|
+
*
|
|
74
|
+
* @param params - The action parameters containing:
|
|
75
|
+
* - WebhookURL: Teams incoming webhook URL (required)
|
|
76
|
+
* - Message: Plain text message (required if no Card)
|
|
77
|
+
* - Card: Adaptive Card JSON (optional, overrides other formatting)
|
|
78
|
+
* - Title: Card title (optional)
|
|
79
|
+
* - ThemeColor: Hex color for card accent (optional, e.g., '0076D7')
|
|
80
|
+
* - Summary: Card summary (optional)
|
|
81
|
+
* - Sections: Array of MessageCard sections (optional)
|
|
82
|
+
* - PotentialAction: Array of actions for the card (optional)
|
|
83
|
+
*
|
|
84
|
+
* @returns Success confirmation
|
|
85
|
+
*/
|
|
86
|
+
protected InternalRunAction(params: RunActionParams): Promise<ActionResultSimple>;
|
|
87
|
+
/**
|
|
88
|
+
* Get parameter value by name (case-insensitive)
|
|
89
|
+
*/
|
|
90
|
+
private getParamValue;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Loader function to ensure the TeamsWebhookAction class is included in the bundle
|
|
94
|
+
*/
|
|
95
|
+
export declare function LoadTeamsWebhookAction(): void;
|
|
96
|
+
//# sourceMappingURL=teams-webhook.action.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"teams-webhook.action.d.ts","sourceRoot":"","sources":["../../../src/custom/communication/teams-webhook.action.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAEnF,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAIrD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkEG;AACH,qBACa,kBAAmB,SAAQ,UAAU;IAE9C;;;;;;;;;;;;;;OAcG;cACa,iBAAiB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAsKvF;;OAEG;IACH,OAAO,CAAC,aAAa;CAIxB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,SAErC"}
|
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
9
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.LoadTeamsWebhookAction = exports.TeamsWebhookAction = void 0;
|
|
13
|
+
const global_1 = require("@memberjunction/global");
|
|
14
|
+
const actions_1 = require("@memberjunction/actions");
|
|
15
|
+
const axios_1 = __importDefault(require("axios"));
|
|
16
|
+
const json_param_helper_1 = require("../utilities/json-param-helper");
|
|
17
|
+
/**
|
|
18
|
+
* Action that sends messages to Microsoft Teams via incoming webhooks
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```typescript
|
|
22
|
+
* // Simple text message
|
|
23
|
+
* await runAction({
|
|
24
|
+
* ActionName: 'Teams Webhook',
|
|
25
|
+
* Params: [{
|
|
26
|
+
* Name: 'WebhookURL',
|
|
27
|
+
* Value: 'https://company.webhook.office.com/webhookb2/...'
|
|
28
|
+
* }, {
|
|
29
|
+
* Name: 'Message',
|
|
30
|
+
* Value: 'Build completed successfully!'
|
|
31
|
+
* }]
|
|
32
|
+
* });
|
|
33
|
+
*
|
|
34
|
+
* // Rich card with sections
|
|
35
|
+
* await runAction({
|
|
36
|
+
* ActionName: 'Teams Webhook',
|
|
37
|
+
* Params: [{
|
|
38
|
+
* Name: 'WebhookURL',
|
|
39
|
+
* Value: webhookUrl
|
|
40
|
+
* }, {
|
|
41
|
+
* Name: 'Title',
|
|
42
|
+
* Value: 'Deployment Status'
|
|
43
|
+
* }, {
|
|
44
|
+
* Name: 'Message',
|
|
45
|
+
* Value: 'Production deployment completed'
|
|
46
|
+
* }, {
|
|
47
|
+
* Name: 'ThemeColor',
|
|
48
|
+
* Value: '00FF00'
|
|
49
|
+
* }, {
|
|
50
|
+
* Name: 'Sections',
|
|
51
|
+
* Value: [{
|
|
52
|
+
* activityTitle: 'Deployment Details',
|
|
53
|
+
* facts: [
|
|
54
|
+
* { name: 'Environment', value: 'Production' },
|
|
55
|
+
* { name: 'Version', value: 'v2.5.0' },
|
|
56
|
+
* { name: 'Duration', value: '5 minutes' }
|
|
57
|
+
* ]
|
|
58
|
+
* }]
|
|
59
|
+
* }]
|
|
60
|
+
* });
|
|
61
|
+
*
|
|
62
|
+
* // Adaptive Card
|
|
63
|
+
* await runAction({
|
|
64
|
+
* ActionName: 'Teams Webhook',
|
|
65
|
+
* Params: [{
|
|
66
|
+
* Name: 'WebhookURL',
|
|
67
|
+
* Value: webhookUrl
|
|
68
|
+
* }, {
|
|
69
|
+
* Name: 'Card',
|
|
70
|
+
* Value: {
|
|
71
|
+
* type: 'AdaptiveCard',
|
|
72
|
+
* version: '1.2',
|
|
73
|
+
* body: [{
|
|
74
|
+
* type: 'TextBlock',
|
|
75
|
+
* text: 'Hello from MemberJunction!',
|
|
76
|
+
* size: 'Large',
|
|
77
|
+
* weight: 'Bolder'
|
|
78
|
+
* }]
|
|
79
|
+
* }
|
|
80
|
+
* }]
|
|
81
|
+
* });
|
|
82
|
+
* ```
|
|
83
|
+
*/
|
|
84
|
+
let TeamsWebhookAction = class TeamsWebhookAction extends actions_1.BaseAction {
|
|
85
|
+
/**
|
|
86
|
+
* Sends messages to Microsoft Teams via webhook
|
|
87
|
+
*
|
|
88
|
+
* @param params - The action parameters containing:
|
|
89
|
+
* - WebhookURL: Teams incoming webhook URL (required)
|
|
90
|
+
* - Message: Plain text message (required if no Card)
|
|
91
|
+
* - Card: Adaptive Card JSON (optional, overrides other formatting)
|
|
92
|
+
* - Title: Card title (optional)
|
|
93
|
+
* - ThemeColor: Hex color for card accent (optional, e.g., '0076D7')
|
|
94
|
+
* - Summary: Card summary (optional)
|
|
95
|
+
* - Sections: Array of MessageCard sections (optional)
|
|
96
|
+
* - PotentialAction: Array of actions for the card (optional)
|
|
97
|
+
*
|
|
98
|
+
* @returns Success confirmation
|
|
99
|
+
*/
|
|
100
|
+
async InternalRunAction(params) {
|
|
101
|
+
try {
|
|
102
|
+
const webhookURL = this.getParamValue(params, 'webhookurl');
|
|
103
|
+
const message = this.getParamValue(params, 'message');
|
|
104
|
+
const card = json_param_helper_1.JSONParamHelper.getJSONParam(params, 'card');
|
|
105
|
+
const title = this.getParamValue(params, 'title');
|
|
106
|
+
const themeColor = this.getParamValue(params, 'themecolor');
|
|
107
|
+
const summary = this.getParamValue(params, 'summary');
|
|
108
|
+
const sections = json_param_helper_1.JSONParamHelper.getJSONParam(params, 'sections');
|
|
109
|
+
const potentialAction = json_param_helper_1.JSONParamHelper.getJSONParam(params, 'potentialaction');
|
|
110
|
+
// Validate webhook URL
|
|
111
|
+
if (!webhookURL) {
|
|
112
|
+
return {
|
|
113
|
+
Success: false,
|
|
114
|
+
Message: "WebhookURL parameter is required",
|
|
115
|
+
ResultCode: "MISSING_WEBHOOK_URL"
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
if (!webhookURL.includes('webhook.office.com')) {
|
|
119
|
+
return {
|
|
120
|
+
Success: false,
|
|
121
|
+
Message: "Invalid Teams webhook URL format",
|
|
122
|
+
ResultCode: "INVALID_WEBHOOK_URL"
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
// Validate content
|
|
126
|
+
if (!message && !card) {
|
|
127
|
+
return {
|
|
128
|
+
Success: false,
|
|
129
|
+
Message: "Either Message or Card parameter is required",
|
|
130
|
+
ResultCode: "MISSING_CONTENT"
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
// Build payload
|
|
134
|
+
let payload;
|
|
135
|
+
if (card) {
|
|
136
|
+
// Use Adaptive Card
|
|
137
|
+
payload = {
|
|
138
|
+
type: "message",
|
|
139
|
+
attachments: [{
|
|
140
|
+
contentType: "application/vnd.microsoft.card.adaptive",
|
|
141
|
+
content: card
|
|
142
|
+
}]
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
// Use MessageCard format
|
|
147
|
+
payload = {
|
|
148
|
+
"@type": "MessageCard",
|
|
149
|
+
"@context": "https://schema.org/extensions"
|
|
150
|
+
};
|
|
151
|
+
if (summary) {
|
|
152
|
+
payload.summary = summary;
|
|
153
|
+
}
|
|
154
|
+
else if (message) {
|
|
155
|
+
payload.summary = message.substring(0, 100);
|
|
156
|
+
}
|
|
157
|
+
if (title) {
|
|
158
|
+
payload.title = title;
|
|
159
|
+
}
|
|
160
|
+
if (message) {
|
|
161
|
+
payload.text = message;
|
|
162
|
+
}
|
|
163
|
+
if (themeColor) {
|
|
164
|
+
// Ensure color is in hex format without #
|
|
165
|
+
payload.themeColor = themeColor.replace('#', '');
|
|
166
|
+
}
|
|
167
|
+
if (sections && Array.isArray(sections)) {
|
|
168
|
+
payload.sections = sections;
|
|
169
|
+
}
|
|
170
|
+
if (potentialAction && Array.isArray(potentialAction)) {
|
|
171
|
+
payload.potentialAction = potentialAction;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
// Send to Teams
|
|
175
|
+
const response = await axios_1.default.post(webhookURL, payload, {
|
|
176
|
+
headers: {
|
|
177
|
+
'Content-Type': 'application/json'
|
|
178
|
+
},
|
|
179
|
+
validateStatus: () => true // Handle all status codes
|
|
180
|
+
});
|
|
181
|
+
// Check response
|
|
182
|
+
if (response.status === 200) {
|
|
183
|
+
// Success response from Teams is "1"
|
|
184
|
+
const isSuccess = response.data === 1 || response.data === "1";
|
|
185
|
+
if (isSuccess) {
|
|
186
|
+
// Add output parameters
|
|
187
|
+
params.Params.push({
|
|
188
|
+
Name: 'TeamsResponse',
|
|
189
|
+
Type: 'Output',
|
|
190
|
+
Value: response.data
|
|
191
|
+
});
|
|
192
|
+
params.Params.push({
|
|
193
|
+
Name: 'MessageSent',
|
|
194
|
+
Type: 'Output',
|
|
195
|
+
Value: payload
|
|
196
|
+
});
|
|
197
|
+
return {
|
|
198
|
+
Success: true,
|
|
199
|
+
ResultCode: "MESSAGE_SENT",
|
|
200
|
+
Message: JSON.stringify({
|
|
201
|
+
message: "Teams message sent successfully",
|
|
202
|
+
response: response.data,
|
|
203
|
+
payload: payload
|
|
204
|
+
}, null, 2)
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
else {
|
|
208
|
+
return {
|
|
209
|
+
Success: false,
|
|
210
|
+
Message: `Teams webhook returned unexpected response: ${response.data}`,
|
|
211
|
+
ResultCode: "UNEXPECTED_RESPONSE"
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
else if (response.status === 400) {
|
|
216
|
+
// Bad request - usually malformed payload
|
|
217
|
+
return {
|
|
218
|
+
Success: false,
|
|
219
|
+
Message: `Invalid payload: ${response.data || 'Bad Request'}`,
|
|
220
|
+
ResultCode: "INVALID_PAYLOAD"
|
|
221
|
+
};
|
|
222
|
+
}
|
|
223
|
+
else if (response.status === 413) {
|
|
224
|
+
// Payload too large
|
|
225
|
+
return {
|
|
226
|
+
Success: false,
|
|
227
|
+
Message: "Payload too large. Teams webhooks have a size limit.",
|
|
228
|
+
ResultCode: "PAYLOAD_TOO_LARGE"
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
else if (response.status === 429) {
|
|
232
|
+
// Rate limited
|
|
233
|
+
return {
|
|
234
|
+
Success: false,
|
|
235
|
+
Message: "Rate limited. Too many requests to Teams webhook.",
|
|
236
|
+
ResultCode: "RATE_LIMITED"
|
|
237
|
+
};
|
|
238
|
+
}
|
|
239
|
+
else {
|
|
240
|
+
// Other error
|
|
241
|
+
return {
|
|
242
|
+
Success: false,
|
|
243
|
+
Message: `Teams webhook failed: HTTP ${response.status} - ${response.data}`,
|
|
244
|
+
ResultCode: `HTTP_${response.status}`
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
catch (error) {
|
|
249
|
+
return {
|
|
250
|
+
Success: false,
|
|
251
|
+
Message: `Teams webhook failed: ${error instanceof Error ? error.message : String(error)}`,
|
|
252
|
+
ResultCode: "REQUEST_FAILED"
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Get parameter value by name (case-insensitive)
|
|
258
|
+
*/
|
|
259
|
+
getParamValue(params, name) {
|
|
260
|
+
const param = params.Params.find(p => p.Name.toLowerCase() === name.toLowerCase());
|
|
261
|
+
return param?.Value;
|
|
262
|
+
}
|
|
263
|
+
};
|
|
264
|
+
exports.TeamsWebhookAction = TeamsWebhookAction;
|
|
265
|
+
exports.TeamsWebhookAction = TeamsWebhookAction = __decorate([
|
|
266
|
+
(0, global_1.RegisterClass)(actions_1.BaseAction, "Teams Webhook")
|
|
267
|
+
], TeamsWebhookAction);
|
|
268
|
+
/**
|
|
269
|
+
* Loader function to ensure the TeamsWebhookAction class is included in the bundle
|
|
270
|
+
*/
|
|
271
|
+
function LoadTeamsWebhookAction() {
|
|
272
|
+
// Stub function to prevent tree shaking
|
|
273
|
+
}
|
|
274
|
+
exports.LoadTeamsWebhookAction = LoadTeamsWebhookAction;
|
|
275
|
+
//# sourceMappingURL=teams-webhook.action.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"teams-webhook.action.js","sourceRoot":"","sources":["../../../src/custom/communication/teams-webhook.action.ts"],"names":[],"mappings":"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"}
|