@mailshot/mcp 0.2.3 → 1.0.3
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/dist/config.d.ts +2 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +5 -3
- package/dist/config.js.map +1 -1
- package/dist/index.js +26 -0
- package/dist/index.js.map +1 -1
- package/dist/tools/sequences.d.ts +18 -0
- package/dist/tools/sequences.d.ts.map +1 -0
- package/dist/tools/sequences.js +440 -0
- package/dist/tools/sequences.js.map +1 -0
- package/package.json +3 -2
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025-present Meiring de Wet
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/dist/config.d.ts
CHANGED
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA8BD,wBAAgB,aAAa,IAAI,SAAS,CAkBzC"}
|
package/dist/config.js
CHANGED
|
@@ -74,10 +74,12 @@ function resolveConfig() {
|
|
|
74
74
|
const tableName = process.env.TABLE_NAME;
|
|
75
75
|
const eventsTableName = process.env.EVENTS_TABLE_NAME;
|
|
76
76
|
const templateBucketName = process.env.TEMPLATE_BUCKET_NAME;
|
|
77
|
-
|
|
78
|
-
|
|
77
|
+
const eventBusName = process.env.EVENT_BUS_NAME;
|
|
78
|
+
const stackName = process.env.STACK_NAME || undefined;
|
|
79
|
+
if (!tableName || !eventsTableName || !templateBucketName || !eventBusName) {
|
|
80
|
+
throw new Error("Missing required env vars: TABLE_NAME, EVENTS_TABLE_NAME, TEMPLATE_BUCKET_NAME, EVENT_BUS_NAME. " +
|
|
79
81
|
"Ensure .env exists in the repo root or set them in the environment.");
|
|
80
82
|
}
|
|
81
|
-
return { region, tableName, eventsTableName, templateBucketName };
|
|
83
|
+
return { region, tableName, eventsTableName, templateBucketName, eventBusName, stackName };
|
|
82
84
|
}
|
|
83
85
|
//# sourceMappingURL=config.js.map
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwCA,sCAkBC;AA1DD,4CAA8B;AAC9B,gDAAkC;AAWlC,SAAS,eAAe;IACtB,IAAI,GAAG,GAAG,SAAS,CAAC;IACpB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5B,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;YAAE,OAAO,GAAG,CAAC;QACtD,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,qBAAqB,CAAC,CAAC;YAAE,OAAO,GAAG,CAAC;QACrE,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,MAAM,KAAK,GAAG;YAAE,MAAM;QAC1B,GAAG,GAAG,MAAM,CAAC;IACf,CAAC;IACD,OAAO,OAAO,CAAC,GAAG,EAAE,CAAC;AACvB,CAAC;AAED,SAAS,WAAW;IAClB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,MAAM,CAAC,CAAC;IACrD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO;IACpC,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACjE,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAClD,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,GAAG,KAAK,CAAC,CAAC;YAAE,SAAS;QACzB,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAClC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QACrC,IAAI,CAAC,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QAC3B,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAgB,aAAa;IAC3B,WAAW,EAAE,CAAC;IAEd,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,WAAW,CAAC;IAC3E,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;IACzC,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IACtD,MAAM,kBAAkB,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;IAC5D,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;IAChD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,SAAS,CAAC;IAEtD,IAAI,CAAC,SAAS,IAAI,CAAC,eAAe,IAAI,CAAC,kBAAkB,IAAI,CAAC,YAAY,EAAE,CAAC;QAC3E,MAAM,IAAI,KAAK,CACb,kGAAkG;YAChG,qEAAqE,CACxE,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,kBAAkB,EAAE,YAAY,EAAE,SAAS,EAAE,CAAC;AAC7F,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -11,6 +11,7 @@ const suppression_js_1 = require("./tools/suppression.js");
|
|
|
11
11
|
const engagement_js_1 = require("./tools/engagement.js");
|
|
12
12
|
const templates_js_1 = require("./tools/templates.js");
|
|
13
13
|
const system_js_1 = require("./tools/system.js");
|
|
14
|
+
const sequences_js_1 = require("./tools/sequences.js");
|
|
14
15
|
const config = (0, config_js_1.resolveConfig)();
|
|
15
16
|
const server = new mcp_js_1.McpServer({
|
|
16
17
|
name: "mailshot",
|
|
@@ -200,6 +201,31 @@ server.registerTool("validate_template", {
|
|
|
200
201
|
},
|
|
201
202
|
],
|
|
202
203
|
}));
|
|
204
|
+
// ── Sequences ─────────────────────────────────────────────────────────────
|
|
205
|
+
server.registerTool("list_sequences", {
|
|
206
|
+
description: "List deployed sequences by discovering S3 template prefixes and Step Functions state machines",
|
|
207
|
+
inputSchema: {},
|
|
208
|
+
}, async () => ({
|
|
209
|
+
content: [
|
|
210
|
+
{
|
|
211
|
+
type: "text",
|
|
212
|
+
text: JSON.stringify(await (0, sequences_js_1.listSequences)(config), null, 2),
|
|
213
|
+
},
|
|
214
|
+
],
|
|
215
|
+
}));
|
|
216
|
+
server.registerTool("export_sequence", {
|
|
217
|
+
description: "Export a deployed sequence — reverse-parses ASL to SequenceDefinition, fetches templates and EventBridge trigger config",
|
|
218
|
+
inputSchema: {
|
|
219
|
+
sequenceId: zod_1.z.string().describe("The sequence ID to export (kebab-case)"),
|
|
220
|
+
},
|
|
221
|
+
}, async ({ sequenceId }) => ({
|
|
222
|
+
content: [
|
|
223
|
+
{
|
|
224
|
+
type: "text",
|
|
225
|
+
text: JSON.stringify(await (0, sequences_js_1.exportSequence)(config, sequenceId), null, 2),
|
|
226
|
+
},
|
|
227
|
+
],
|
|
228
|
+
}));
|
|
203
229
|
// ── System health ──────────────────────────────────────────────────────────
|
|
204
230
|
server.registerTool("get_failed_executions", {
|
|
205
231
|
description: "Get recent Step Functions execution failures",
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,oEAAoE;AACpE,wEAAiF;AACjF,6BAAwB;AACxB,kDAA0C;AAC1C,2CAA4C;AAC5C,2DAOgC;AAChC,2DAA2E;AAC3E,yDAAkG;AAClG,uDAAwF;AACxF,iDAA0E;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,oEAAoE;AACpE,wEAAiF;AACjF,6BAAwB;AACxB,kDAA0C;AAC1C,2CAA4C;AAC5C,2DAOgC;AAChC,2DAA2E;AAC3E,yDAAkG;AAClG,uDAAwF;AACxF,iDAA0E;AAC1E,uDAAqE;AAErE,MAAM,MAAM,GAAG,IAAA,yBAAa,GAAE,CAAC;AAE/B,MAAM,MAAM,GAAG,IAAI,kBAAS,CAAC;IAC3B,IAAI,EAAE,UAAU;IAChB,OAAO,EAAP,sBAAO;CACR,CAAC,CAAC;AAEH,8EAA8E;AAE9E,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;IACE,WAAW,EAAE,gEAAgE;IAC7E,WAAW,EAAE,EAAE,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;CAC3C,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;IACpB,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,IAAA,8BAAa,EAAC,MAAM,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;CAC/F,CAAC,CACH,CAAC;AAEF,MAAM,CAAC,YAAY,CACjB,kBAAkB,EAClB;IACE,WAAW,EAAE,yDAAyD;IACtE,WAAW,EAAE;QACX,MAAM,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,cAAc,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;QACzF,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;KAC/D;CACF,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;IAC5B,OAAO,EAAE;QACP;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,IAAA,gCAAe,EAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;SAC5E;KACF;CACF,CAAC,CACH,CAAC;AAEF,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;IACE,WAAW,EAAE,iDAAiD;IAC9D,WAAW,EAAE;QACX,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE;QACzB,UAAU,EAAE,OAAC,CAAC,MAAM,CAAC,OAAC,CAAC,OAAO,EAAE,CAAC;KAClC;CACF,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;IAChC,OAAO,EAAE;QACP;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,IAAA,iCAAgB,EAAC,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;SACjF;KACF;CACF,CAAC,CACH,CAAC;AAEF,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;IACE,WAAW,EAAE,wDAAwD;IACrE,WAAW,EAAE,EAAE,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;CAC3C,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;IACpB,OAAO,EAAE;QACP;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,IAAA,iCAAgB,EAAC,MAAM,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;SACrE;KACF;CACF,CAAC,CACH,CAAC;AAEF,MAAM,CAAC,YAAY,CACjB,wBAAwB,EACxB;IACE,WAAW,EAAE,+DAA+D;IAC5E,WAAW,EAAE,EAAE,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;CAC3C,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;IACpB,OAAO,EAAE;QACP;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,IAAA,sCAAqB,EAAC,MAAM,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;SAC1E;KACF;CACF,CAAC,CACH,CAAC;AAEF,MAAM,CAAC,YAAY,CACjB,wBAAwB,EACxB;IACE,WAAW,EAAE,wCAAwC;IACrD,WAAW,EAAE,EAAE,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;CAC3C,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;IACpB,OAAO,EAAE;QACP;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,IAAA,sCAAqB,EAAC,MAAM,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;SAC1E;KACF;CACF,CAAC,CACH,CAAC;AAEF,8EAA8E;AAE9E,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;IACE,WAAW,EAAE,6BAA6B;IAC1C,WAAW,EAAE;QACX,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;KAC/D;CACF,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;IACpB,OAAO,EAAE;QACP;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,IAAA,+BAAc,EAAC,MAAM,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;SACnE;KACF;CACF,CAAC,CACH,CAAC;AAEF,MAAM,CAAC,YAAY,CACjB,oBAAoB,EACpB;IACE,WAAW,EAAE,gEAAgE;IAC7E,WAAW,EAAE,EAAE,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;CAC3C,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;IACpB,OAAO,EAAE;QACP;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,IAAA,kCAAiB,EAAC,MAAM,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;SACtE;KACF;CACF,CAAC,CACH,CAAC;AAEF,8EAA8E;AAE9E,MAAM,CAAC,YAAY,CACjB,uBAAuB,EACvB;IACE,WAAW,EAAE,0CAA0C;IACvD,WAAW,EAAE;QACX,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE;QACzB,SAAS,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,QAAQ,EAAE;QAClF,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;QAC1D,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;QACxD,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;KAC/D;CACF,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;IAC1D,OAAO,EAAE;QACP;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB,MAAM,IAAA,mCAAmB,EAAC,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,EAC9E,IAAI,EACJ,CAAC,CACF;SACF;KACF;CACF,CAAC,CACH,CAAC;AAEF,MAAM,CAAC,YAAY,CACjB,qBAAqB,EACrB;IACE,WAAW,EAAE,6DAA6D;IAC1E,WAAW,EAAE;QACX,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE;QACvB,SAAS,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,QAAQ,EAAE;QAClF,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;QAC1D,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;QACxD,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;KAC/D;CACF,EACD,KAAK,EAAE,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;IAChE,OAAO,EAAE;QACP;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB,MAAM,IAAA,iCAAiB,EAAC,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,EAClF,IAAI,EACJ,CAAC,CACF;SACF;KACF;CACF,CAAC,CACH,CAAC;AAEF,MAAM,CAAC,YAAY,CACjB,qBAAqB,EACrB;IACE,WAAW,EAAE,uDAAuD;IACpE,WAAW,EAAE;QACX,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE;QACtB,SAAS,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,QAAQ,EAAE;QAClF,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;QAC1D,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;QACxD,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;KAC/D;CACF,EACD,KAAK,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;IAC/D,OAAO,EAAE;QACP;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB,MAAM,IAAA,iCAAiB,EAAC,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,EACjF,IAAI,EACJ,CAAC,CACF;SACF;KACF;CACF,CAAC,CACH,CAAC;AAEF,8EAA8E;AAE9E,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;IACE,WAAW,EAAE,0BAA0B;IACvC,WAAW,EAAE;QACX,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KAC9B;CACF,EACD,KAAK,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CAAC;IACrB,OAAO,EAAE;QACP;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,IAAA,4BAAa,EAAC,MAAM,EAAE,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;SACnE;KACF;CACF,CAAC,CACH,CAAC;AAEF,MAAM,CAAC,YAAY,CACjB,kBAAkB,EAClB;IACE,WAAW,EAAE,4CAA4C;IACzD,WAAW,EAAE;QACX,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE;QACvB,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE;KAC1B;CACF,EACD,KAAK,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;IACjC,OAAO,EAAE;QACP;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,IAAA,8BAAe,EAAC,MAAM,EAAE,WAAW,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;SACjF;KACF;CACF,CAAC,CACH,CAAC;AAEF,MAAM,CAAC,YAAY,CACjB,mBAAmB,EACnB;IACE,WAAW,EAAE,mCAAmC;IAChD,WAAW,EAAE,EAAE,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,EAAE;CACzC,EACD,KAAK,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC;IAC1B,OAAO,EAAE;QACP;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,IAAA,+BAAgB,EAAC,MAAM,EAAE,WAAW,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;SAC3E;KACF;CACF,CAAC,CACH,CAAC;AAEF,6EAA6E;AAE7E,MAAM,CAAC,YAAY,CACjB,gBAAgB,EAChB;IACE,WAAW,EACT,+FAA+F;IACjG,WAAW,EAAE,EAAE;CAChB,EACD,KAAK,IAAI,EAAE,CAAC,CAAC;IACX,OAAO,EAAE;QACP;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,IAAA,4BAAa,EAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;SAC3D;KACF;CACF,CAAC,CACH,CAAC;AAEF,MAAM,CAAC,YAAY,CACjB,iBAAiB,EACjB;IACE,WAAW,EACT,yHAAyH;IAC3H,WAAW,EAAE;QACX,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;KAC1E;CACF,EACD,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;IACzB,OAAO,EAAE;QACP;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,IAAA,6BAAc,EAAC,MAAM,EAAE,UAAU,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;SACxE;KACF;CACF,CAAC,CACH,CAAC;AAEF,8EAA8E;AAE9E,MAAM,CAAC,YAAY,CACjB,uBAAuB,EACvB;IACE,WAAW,EAAE,8CAA8C;IAC3D,WAAW,EAAE;QACX,eAAe,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;QACzE,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;QAC1D,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;KAC/D;CACF,EACD,KAAK,EAAE,EAAE,eAAe,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;IAChD,OAAO,EAAE;QACP;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAClB,MAAM,IAAA,+BAAmB,EAAC,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,KAAK,CAAC,EACpE,IAAI,EACJ,CAAC,CACF;SACF;KACF;CACF,CAAC,CACH,CAAC;AAEF,MAAM,CAAC,YAAY,CACjB,oBAAoB,EACpB;IACE,WAAW,EAAE,wCAAwC;IACrD,WAAW,EAAE;QACX,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;QAC/C,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;KAC9C;CACF,EACD,KAAK,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;IACjC,OAAO,EAAE;QACP;YACE,IAAI,EAAE,MAAM;YACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,IAAA,4BAAgB,EAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;SAClF;KACF;CACF,CAAC,CACH,CAAC;AAEF,8EAA8E;AAE9E,KAAK,UAAU,IAAI;IACjB,MAAM,SAAS,GAAG,IAAI,+BAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACnB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { SequenceDefinition } from "@mailshot/shared";
|
|
2
|
+
import type { McpConfig } from "../config.js";
|
|
3
|
+
export interface SequenceInfo {
|
|
4
|
+
sequenceId: string;
|
|
5
|
+
stateMachineArn?: string;
|
|
6
|
+
templateKeys: string[];
|
|
7
|
+
}
|
|
8
|
+
export declare function listSequences(config: McpConfig): Promise<SequenceInfo[]>;
|
|
9
|
+
export interface ExportedSequence {
|
|
10
|
+
definition: SequenceDefinition;
|
|
11
|
+
templates: {
|
|
12
|
+
key: string;
|
|
13
|
+
html: string;
|
|
14
|
+
}[];
|
|
15
|
+
warnings: string[];
|
|
16
|
+
}
|
|
17
|
+
export declare function exportSequence(config: McpConfig, sequenceId: string): Promise<ExportedSequence>;
|
|
18
|
+
//# sourceMappingURL=sequences.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sequences.d.ts","sourceRoot":"","sources":["../../src/tools/sequences.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EACV,kBAAkB,EAInB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAwP9C,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CA4D9E;AAID,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,kBAAkB,CAAC;IAC/B,SAAS,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC3C,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,wBAAsB,cAAc,CAClC,MAAM,EAAE,SAAS,EACjB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,gBAAgB,CAAC,CAwO3B"}
|
|
@@ -0,0 +1,440 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.listSequences = listSequences;
|
|
4
|
+
exports.exportSequence = exportSequence;
|
|
5
|
+
const client_s3_1 = require("@aws-sdk/client-s3");
|
|
6
|
+
const client_sfn_1 = require("@aws-sdk/client-sfn");
|
|
7
|
+
const client_eventbridge_1 = require("@aws-sdk/client-eventbridge");
|
|
8
|
+
let s3;
|
|
9
|
+
let sfn;
|
|
10
|
+
let eb;
|
|
11
|
+
function getS3(region) {
|
|
12
|
+
if (!s3)
|
|
13
|
+
s3 = new client_s3_1.S3Client({ region });
|
|
14
|
+
return s3;
|
|
15
|
+
}
|
|
16
|
+
function getSfn(region) {
|
|
17
|
+
if (!sfn)
|
|
18
|
+
sfn = new client_sfn_1.SFNClient({ region });
|
|
19
|
+
return sfn;
|
|
20
|
+
}
|
|
21
|
+
function getEb(region) {
|
|
22
|
+
if (!eb)
|
|
23
|
+
eb = new client_eventbridge_1.EventBridgeClient({ region });
|
|
24
|
+
return eb;
|
|
25
|
+
}
|
|
26
|
+
// ── Helpers ──────────────────────────────────────────────────────────────────
|
|
27
|
+
function pascalCase(id) {
|
|
28
|
+
return id
|
|
29
|
+
.split(/[-_]/)
|
|
30
|
+
.map((s) => s.charAt(0).toUpperCase() + s.slice(1))
|
|
31
|
+
.join("");
|
|
32
|
+
}
|
|
33
|
+
function unpascalCase(pascal) {
|
|
34
|
+
return pascal
|
|
35
|
+
.replace(/([A-Z])/g, (match, _p1, offset) => (offset === 0 ? match : `-${match}`))
|
|
36
|
+
.toLowerCase();
|
|
37
|
+
}
|
|
38
|
+
function secondsToDuration(secs) {
|
|
39
|
+
if (secs % 86400 === 0)
|
|
40
|
+
return { days: secs / 86400 };
|
|
41
|
+
if (secs % 3600 === 0)
|
|
42
|
+
return { hours: secs / 3600 };
|
|
43
|
+
if (secs % 60 === 0)
|
|
44
|
+
return { minutes: secs / 60 };
|
|
45
|
+
const days = Math.floor(secs / 86400);
|
|
46
|
+
const remainder = secs % 86400;
|
|
47
|
+
const hours = Math.floor(remainder / 3600);
|
|
48
|
+
const minutes = Math.floor((remainder % 3600) / 60);
|
|
49
|
+
const result = {};
|
|
50
|
+
if (days > 0)
|
|
51
|
+
result.days = days;
|
|
52
|
+
if (hours > 0)
|
|
53
|
+
result.hours = hours;
|
|
54
|
+
if (minutes > 0)
|
|
55
|
+
result.minutes = minutes;
|
|
56
|
+
return result;
|
|
57
|
+
}
|
|
58
|
+
// ── ASL Reverse Parser ───────────────────────────────────────────────────────
|
|
59
|
+
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
60
|
+
function parseSteps(states, currentStateName, prefix, stopAtState) {
|
|
61
|
+
const steps = [];
|
|
62
|
+
let current = currentStateName;
|
|
63
|
+
while (current && current !== stopAtState) {
|
|
64
|
+
const state = states[current];
|
|
65
|
+
if (!state)
|
|
66
|
+
break;
|
|
67
|
+
const name = current;
|
|
68
|
+
// Send step: {Prefix}-Send{N}
|
|
69
|
+
const sendMatch = name.match(new RegExp(`^${escapeRegex(prefix)}-Send(\\d+)$`));
|
|
70
|
+
if (sendMatch) {
|
|
71
|
+
const params = state.Parameters ?? {};
|
|
72
|
+
steps.push({
|
|
73
|
+
type: "send",
|
|
74
|
+
templateKey: params.templateKey ?? params["templateKey.$"] ?? "",
|
|
75
|
+
subject: params.subject ?? params["subject.$"] ?? "",
|
|
76
|
+
});
|
|
77
|
+
current = state.Next;
|
|
78
|
+
continue;
|
|
79
|
+
}
|
|
80
|
+
// Wait step: {Prefix}-Wait{N}
|
|
81
|
+
const waitMatch = name.match(new RegExp(`^${escapeRegex(prefix)}-Wait(\\d+)$`));
|
|
82
|
+
if (waitMatch) {
|
|
83
|
+
const secs = state.Seconds ?? 0;
|
|
84
|
+
steps.push({ type: "wait", ...secondsToDuration(secs) });
|
|
85
|
+
current = state.Next;
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
// Condition step: {Prefix}-Check{N} → Cond{N} → branches → CondMerge{N}
|
|
89
|
+
const checkMatch = name.match(new RegExp(`^${escapeRegex(prefix)}-Check(\\d+)$`));
|
|
90
|
+
if (checkMatch) {
|
|
91
|
+
const n = checkMatch[1];
|
|
92
|
+
const params = state.Parameters ?? {};
|
|
93
|
+
const condChoiceName = state.Next;
|
|
94
|
+
const condChoice = states[condChoiceName];
|
|
95
|
+
const mergeStateName = `${prefix}-CondMerge${n}`;
|
|
96
|
+
// Extract check parameters
|
|
97
|
+
const check = params.check ?? params["check.$"] ?? "subscriber_field_exists";
|
|
98
|
+
const field = params.field ?? params["field.$"] ?? undefined;
|
|
99
|
+
const value = params.value ?? params["value.$"] ?? undefined;
|
|
100
|
+
const templateKey = params.templateKey ?? params["templateKey.$"] ?? undefined;
|
|
101
|
+
// Parse branches
|
|
102
|
+
let thenTarget;
|
|
103
|
+
const elseTarget = condChoice?.Default;
|
|
104
|
+
if (condChoice?.Choices) {
|
|
105
|
+
for (const rule of condChoice.Choices) {
|
|
106
|
+
if (rule.BooleanEquals === true) {
|
|
107
|
+
thenTarget = rule.Next;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
const thenSteps = parseSteps(states, thenTarget, prefix, mergeStateName);
|
|
112
|
+
const elseSteps = parseSteps(states, elseTarget, prefix, mergeStateName);
|
|
113
|
+
const step = {
|
|
114
|
+
type: "condition",
|
|
115
|
+
check,
|
|
116
|
+
then: thenSteps,
|
|
117
|
+
};
|
|
118
|
+
if (field !== undefined)
|
|
119
|
+
step.field = field;
|
|
120
|
+
if (value !== undefined)
|
|
121
|
+
step.value = value;
|
|
122
|
+
if (templateKey !== undefined)
|
|
123
|
+
step.templateKey = templateKey;
|
|
124
|
+
if (elseSteps.length > 0)
|
|
125
|
+
step.else = elseSteps;
|
|
126
|
+
steps.push(step);
|
|
127
|
+
current = states[mergeStateName]?.Next;
|
|
128
|
+
continue;
|
|
129
|
+
}
|
|
130
|
+
// Choice step: {Prefix}-Choice{N} → branches → ChoiceMerge{N}
|
|
131
|
+
const choiceMatch = name.match(new RegExp(`^${escapeRegex(prefix)}-Choice(\\d+)$`));
|
|
132
|
+
if (choiceMatch) {
|
|
133
|
+
const n = choiceMatch[1];
|
|
134
|
+
const mergeStateName = `${prefix}-ChoiceMerge${n}`;
|
|
135
|
+
// Extract field from first choice rule's Variable
|
|
136
|
+
const choices = state.Choices ?? [];
|
|
137
|
+
const field = choices[0]?.Variable ?? "";
|
|
138
|
+
const branches = [];
|
|
139
|
+
for (const rule of choices) {
|
|
140
|
+
if (rule.StringEquals !== undefined) {
|
|
141
|
+
const branchSteps = parseSteps(states, rule.Next, prefix, mergeStateName);
|
|
142
|
+
branches.push({ value: rule.StringEquals, steps: branchSteps });
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
// Default branch
|
|
146
|
+
let defaultSteps;
|
|
147
|
+
if (state.Default) {
|
|
148
|
+
const defaultParsed = parseSteps(states, state.Default, prefix, mergeStateName);
|
|
149
|
+
if (defaultParsed.length > 0) {
|
|
150
|
+
defaultSteps = defaultParsed;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
const step = {
|
|
154
|
+
type: "choice",
|
|
155
|
+
field,
|
|
156
|
+
branches,
|
|
157
|
+
};
|
|
158
|
+
if (defaultSteps)
|
|
159
|
+
step.default = defaultSteps;
|
|
160
|
+
steps.push(step);
|
|
161
|
+
current = states[mergeStateName]?.Next;
|
|
162
|
+
continue;
|
|
163
|
+
}
|
|
164
|
+
// Structural states — skip/break
|
|
165
|
+
if (name.includes("Complete") ||
|
|
166
|
+
name.includes("Done") ||
|
|
167
|
+
name.includes("Merge") ||
|
|
168
|
+
name.includes("Pass")) {
|
|
169
|
+
break;
|
|
170
|
+
}
|
|
171
|
+
// Unknown state — skip
|
|
172
|
+
current = state.Next;
|
|
173
|
+
}
|
|
174
|
+
return steps;
|
|
175
|
+
}
|
|
176
|
+
function escapeRegex(str) {
|
|
177
|
+
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
178
|
+
}
|
|
179
|
+
/* eslint-enable @typescript-eslint/no-explicit-any */
|
|
180
|
+
// ── EventBridge Parsing ──────────────────────────────────────────────────────
|
|
181
|
+
function parseInputTransformer(inputPathsMap, inputTemplate) {
|
|
182
|
+
if (!inputPathsMap || !inputTemplate)
|
|
183
|
+
return undefined;
|
|
184
|
+
try {
|
|
185
|
+
// CDK generates InputTemplate as a JSON string with <varName> placeholders
|
|
186
|
+
// Parse the template to find subscriber field mappings
|
|
187
|
+
// The template looks like: {"subscriber":{"email":<email>,"firstName":<firstName>,...}}
|
|
188
|
+
const reverseMap = {};
|
|
189
|
+
for (const [varName, jsonPath] of Object.entries(inputPathsMap)) {
|
|
190
|
+
reverseMap[varName] = jsonPath;
|
|
191
|
+
}
|
|
192
|
+
// Find which variables map to subscriber fields by parsing the template
|
|
193
|
+
const mapping = {
|
|
194
|
+
email: "$.detail.email",
|
|
195
|
+
firstName: "$.detail.firstName",
|
|
196
|
+
};
|
|
197
|
+
// Try to find email mapping
|
|
198
|
+
const emailMatch = inputTemplate.match(/"email"\s*:\s*<([^>]+)>/);
|
|
199
|
+
if (emailMatch && reverseMap[emailMatch[1]]) {
|
|
200
|
+
mapping.email = reverseMap[emailMatch[1]];
|
|
201
|
+
}
|
|
202
|
+
// Try to find firstName mapping
|
|
203
|
+
const firstNameMatch = inputTemplate.match(/"firstName"\s*:\s*<([^>]+)>/);
|
|
204
|
+
if (firstNameMatch && reverseMap[firstNameMatch[1]]) {
|
|
205
|
+
mapping.firstName = reverseMap[firstNameMatch[1]];
|
|
206
|
+
}
|
|
207
|
+
// Try to find attributes mapping
|
|
208
|
+
const attributesMatch = inputTemplate.match(/"attributes"\s*:\s*<([^>]+)>/);
|
|
209
|
+
if (attributesMatch && reverseMap[attributesMatch[1]]) {
|
|
210
|
+
mapping.attributes = reverseMap[attributesMatch[1]];
|
|
211
|
+
}
|
|
212
|
+
return mapping;
|
|
213
|
+
}
|
|
214
|
+
catch {
|
|
215
|
+
return undefined;
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
async function listSequences(config) {
|
|
219
|
+
const s3Client = getS3(config.region);
|
|
220
|
+
const sfnClient = getSfn(config.region);
|
|
221
|
+
// 1. S3 bucket prefixes → sequence IDs
|
|
222
|
+
const s3Result = await s3Client.send(new client_s3_1.ListObjectsV2Command({
|
|
223
|
+
Bucket: config.templateBucketName,
|
|
224
|
+
Delimiter: "/",
|
|
225
|
+
}));
|
|
226
|
+
const s3Sequences = new Map();
|
|
227
|
+
for (const prefix of s3Result.CommonPrefixes ?? []) {
|
|
228
|
+
const sequenceId = prefix.Prefix?.replace(/\/$/, "");
|
|
229
|
+
if (sequenceId) {
|
|
230
|
+
s3Sequences.set(sequenceId, []);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
// Get template keys per sequence
|
|
234
|
+
for (const sequenceId of s3Sequences.keys()) {
|
|
235
|
+
const templatesResult = await s3Client.send(new client_s3_1.ListObjectsV2Command({
|
|
236
|
+
Bucket: config.templateBucketName,
|
|
237
|
+
Prefix: `${sequenceId}/`,
|
|
238
|
+
}));
|
|
239
|
+
const keys = (templatesResult.Contents ?? [])
|
|
240
|
+
.map((obj) => obj.Key)
|
|
241
|
+
.filter((k) => k.endsWith(".html"))
|
|
242
|
+
.map((k) => k.replace(/\.html$/, ""));
|
|
243
|
+
s3Sequences.set(sequenceId, keys);
|
|
244
|
+
}
|
|
245
|
+
// 2. List state machines → cross-reference with S3 prefixes
|
|
246
|
+
const smResult = await sfnClient.send(new client_sfn_1.ListStateMachinesCommand({}));
|
|
247
|
+
const smMap = new Map();
|
|
248
|
+
for (const sm of smResult.stateMachines ?? []) {
|
|
249
|
+
if (sm.name?.endsWith("Sequence")) {
|
|
250
|
+
// Reverse PascalCase → kebab-case
|
|
251
|
+
const pascal = sm.name.replace(/Sequence$/, "");
|
|
252
|
+
const kebab = unpascalCase(pascal);
|
|
253
|
+
smMap.set(kebab, sm.stateMachineArn);
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
// 3. Combine results
|
|
257
|
+
const allIds = new Set([...s3Sequences.keys(), ...smMap.keys()]);
|
|
258
|
+
const results = [];
|
|
259
|
+
for (const sequenceId of allIds) {
|
|
260
|
+
results.push({
|
|
261
|
+
sequenceId,
|
|
262
|
+
stateMachineArn: smMap.get(sequenceId),
|
|
263
|
+
templateKeys: s3Sequences.get(sequenceId) ?? [],
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
return results.sort((a, b) => a.sequenceId.localeCompare(b.sequenceId));
|
|
267
|
+
}
|
|
268
|
+
async function exportSequence(config, sequenceId) {
|
|
269
|
+
const sfnClient = getSfn(config.region);
|
|
270
|
+
const s3Client = getS3(config.region);
|
|
271
|
+
const ebClient = getEb(config.region);
|
|
272
|
+
const warnings = [];
|
|
273
|
+
// 1. Find and describe state machine
|
|
274
|
+
const prefix = pascalCase(sequenceId);
|
|
275
|
+
const smName = `${prefix}Sequence`;
|
|
276
|
+
const smList = await sfnClient.send(new client_sfn_1.ListStateMachinesCommand({}));
|
|
277
|
+
const smEntry = (smList.stateMachines ?? []).find((sm) => sm.name === smName);
|
|
278
|
+
if (!smEntry) {
|
|
279
|
+
throw new Error(`State machine '${smName}' not found. Is the sequence deployed?`);
|
|
280
|
+
}
|
|
281
|
+
const smDetail = await sfnClient.send(new client_sfn_1.DescribeStateMachineCommand({ stateMachineArn: smEntry.stateMachineArn }));
|
|
282
|
+
const asl = JSON.parse(smDetail.definition);
|
|
283
|
+
// 2. Extract timeoutMinutes from ASL TimeoutSeconds
|
|
284
|
+
const timeoutSeconds = asl.TimeoutSeconds;
|
|
285
|
+
const timeoutMinutes = timeoutSeconds ? Math.round(timeoutSeconds / 60) : 43200;
|
|
286
|
+
// 3. Parse ASL → steps
|
|
287
|
+
// Find the first step after Register
|
|
288
|
+
const registerState = asl.States[`${prefix}-Register`];
|
|
289
|
+
const firstStepName = registerState?.Next;
|
|
290
|
+
const steps = parseSteps(asl.States, firstStepName, prefix);
|
|
291
|
+
// 4. Get trigger config from EventBridge
|
|
292
|
+
let detailType = `${sequenceId}.trigger`;
|
|
293
|
+
let subscriberMapping = {
|
|
294
|
+
email: "$.detail.email",
|
|
295
|
+
firstName: "$.detail.firstName",
|
|
296
|
+
attributes: "$.detail",
|
|
297
|
+
};
|
|
298
|
+
try {
|
|
299
|
+
const rulesResult = await ebClient.send(new client_eventbridge_1.ListRulesCommand({
|
|
300
|
+
EventBusName: config.eventBusName,
|
|
301
|
+
NamePrefix: `${sequenceId}-`,
|
|
302
|
+
}));
|
|
303
|
+
// Find the trigger rule (targets Step Functions, not Lambda)
|
|
304
|
+
for (const rule of rulesResult.Rules ?? []) {
|
|
305
|
+
const targetsResult = await ebClient.send(new client_eventbridge_1.ListTargetsByRuleCommand({
|
|
306
|
+
Rule: rule.Name,
|
|
307
|
+
EventBusName: config.eventBusName,
|
|
308
|
+
}));
|
|
309
|
+
const sfnTarget = (targetsResult.Targets ?? []).find((t) => t.Arn?.includes(":stateMachine:"));
|
|
310
|
+
if (sfnTarget) {
|
|
311
|
+
// This is the sequence trigger rule
|
|
312
|
+
const ruleDetail = await ebClient.send(new client_eventbridge_1.DescribeRuleCommand({
|
|
313
|
+
Name: rule.Name,
|
|
314
|
+
EventBusName: config.eventBusName,
|
|
315
|
+
}));
|
|
316
|
+
// Extract detailType from event pattern
|
|
317
|
+
const pattern = ruleDetail.EventPattern ? JSON.parse(ruleDetail.EventPattern) : {};
|
|
318
|
+
if (pattern["detail-type"]?.[0]) {
|
|
319
|
+
detailType = pattern["detail-type"][0];
|
|
320
|
+
}
|
|
321
|
+
// Extract subscriber mapping from input transformer
|
|
322
|
+
const inputTransformer = sfnTarget.InputTransformer;
|
|
323
|
+
if (inputTransformer) {
|
|
324
|
+
const parsed = parseInputTransformer(inputTransformer.InputPathsMap, inputTransformer.InputTemplate);
|
|
325
|
+
if (parsed) {
|
|
326
|
+
subscriberMapping = parsed;
|
|
327
|
+
}
|
|
328
|
+
else {
|
|
329
|
+
warnings.push("Could not fully parse EventBridge input transformer — using default subscriber mapping");
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
break;
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
catch (err) {
|
|
337
|
+
warnings.push(`Could not read EventBridge rules: ${err instanceof Error ? err.message : String(err)}. Using default trigger config.`);
|
|
338
|
+
}
|
|
339
|
+
// 5. Get fire-and-forget events
|
|
340
|
+
const events = [];
|
|
341
|
+
try {
|
|
342
|
+
const rulesResult = await ebClient.send(new client_eventbridge_1.ListRulesCommand({
|
|
343
|
+
EventBusName: config.eventBusName,
|
|
344
|
+
NamePrefix: `${sequenceId}-`,
|
|
345
|
+
}));
|
|
346
|
+
for (const rule of rulesResult.Rules ?? []) {
|
|
347
|
+
const targetsResult = await ebClient.send(new client_eventbridge_1.ListTargetsByRuleCommand({
|
|
348
|
+
Rule: rule.Name,
|
|
349
|
+
EventBusName: config.eventBusName,
|
|
350
|
+
}));
|
|
351
|
+
const lambdaTarget = (targetsResult.Targets ?? []).find((t) => t.Arn?.includes(":function:") && !t.Arn?.includes(":stateMachine:"));
|
|
352
|
+
if (lambdaTarget) {
|
|
353
|
+
// This is a fire-and-forget event rule
|
|
354
|
+
const ruleDetail = await ebClient.send(new client_eventbridge_1.DescribeRuleCommand({
|
|
355
|
+
Name: rule.Name,
|
|
356
|
+
EventBusName: config.eventBusName,
|
|
357
|
+
}));
|
|
358
|
+
const pattern = ruleDetail.EventPattern ? JSON.parse(ruleDetail.EventPattern) : {};
|
|
359
|
+
const evtDetailType = pattern["detail-type"]?.[0];
|
|
360
|
+
// Extract templateKey and subject from input transformer
|
|
361
|
+
const inputTransformer = lambdaTarget.InputTransformer;
|
|
362
|
+
let templateKey = "";
|
|
363
|
+
let subject = "";
|
|
364
|
+
if (inputTransformer?.InputTemplate) {
|
|
365
|
+
const template = inputTransformer.InputTemplate;
|
|
366
|
+
const templateKeyMatch = template.match(/"templateKey"\s*:\s*"([^"]+)"/);
|
|
367
|
+
if (templateKeyMatch)
|
|
368
|
+
templateKey = templateKeyMatch[1];
|
|
369
|
+
const subjectMatch = template.match(/"subject"\s*:\s*"([^"]+)"/);
|
|
370
|
+
if (subjectMatch)
|
|
371
|
+
subject = subjectMatch[1];
|
|
372
|
+
}
|
|
373
|
+
if (evtDetailType && templateKey) {
|
|
374
|
+
const evt = {
|
|
375
|
+
detailType: evtDetailType,
|
|
376
|
+
templateKey,
|
|
377
|
+
subject,
|
|
378
|
+
};
|
|
379
|
+
// Parse subscriber mapping if different from sequence trigger
|
|
380
|
+
if (inputTransformer) {
|
|
381
|
+
const evtMapping = parseInputTransformer(inputTransformer.InputPathsMap, inputTransformer.InputTemplate);
|
|
382
|
+
if (evtMapping &&
|
|
383
|
+
(evtMapping.email !== subscriberMapping.email ||
|
|
384
|
+
evtMapping.firstName !== subscriberMapping.firstName ||
|
|
385
|
+
evtMapping.attributes !== subscriberMapping.attributes)) {
|
|
386
|
+
evt.subscriberMapping = evtMapping;
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
events.push(evt);
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
}
|
|
394
|
+
catch (err) {
|
|
395
|
+
warnings.push(`Could not read fire-and-forget event rules: ${err instanceof Error ? err.message : String(err)}`);
|
|
396
|
+
}
|
|
397
|
+
// 6. Fetch templates from S3
|
|
398
|
+
const templates = [];
|
|
399
|
+
try {
|
|
400
|
+
const templatesResult = await s3Client.send(new client_s3_1.ListObjectsV2Command({
|
|
401
|
+
Bucket: config.templateBucketName,
|
|
402
|
+
Prefix: `${sequenceId}/`,
|
|
403
|
+
}));
|
|
404
|
+
for (const obj of templatesResult.Contents ?? []) {
|
|
405
|
+
if (obj.Key?.endsWith(".html")) {
|
|
406
|
+
const result = await s3Client.send(new client_s3_1.GetObjectCommand({
|
|
407
|
+
Bucket: config.templateBucketName,
|
|
408
|
+
Key: obj.Key,
|
|
409
|
+
}));
|
|
410
|
+
const html = (await result.Body?.transformToString()) ?? "";
|
|
411
|
+
const key = obj.Key.replace(/\.html$/, "");
|
|
412
|
+
templates.push({ key, html });
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
catch (err) {
|
|
417
|
+
warnings.push(`Could not fetch templates from S3: ${err instanceof Error ? err.message : String(err)}`);
|
|
418
|
+
}
|
|
419
|
+
// 7. Build the definition
|
|
420
|
+
const definition = {
|
|
421
|
+
id: sequenceId,
|
|
422
|
+
trigger: {
|
|
423
|
+
detailType,
|
|
424
|
+
subscriberMapping,
|
|
425
|
+
},
|
|
426
|
+
timeoutMinutes,
|
|
427
|
+
steps,
|
|
428
|
+
};
|
|
429
|
+
if (events.length > 0) {
|
|
430
|
+
definition.events = events;
|
|
431
|
+
}
|
|
432
|
+
// 8. Add warnings for HTML-only templates
|
|
433
|
+
if (templates.length > 0) {
|
|
434
|
+
warnings.push("Templates are compiled HTML with Liquid placeholders (not React Email .tsx). " +
|
|
435
|
+
"They work for deployment but cannot use `email dev` for preview. " +
|
|
436
|
+
"You can manually convert them to React Email later.");
|
|
437
|
+
}
|
|
438
|
+
return { definition, templates, warnings };
|
|
439
|
+
}
|
|
440
|
+
//# sourceMappingURL=sequences.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sequences.js","sourceRoot":"","sources":["../../src/tools/sequences.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mailshot/mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "1.0.3",
|
|
4
4
|
"description": "MCP server for mailshot — subscriber management, engagement analytics, and system health",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "commonjs",
|
|
@@ -23,12 +23,13 @@
|
|
|
23
23
|
"dependencies": {
|
|
24
24
|
"@modelcontextprotocol/sdk": "^1.12.1",
|
|
25
25
|
"@aws-sdk/client-dynamodb": "^3.1009.0",
|
|
26
|
+
"@aws-sdk/client-eventbridge": "^3.1009.0",
|
|
26
27
|
"@aws-sdk/client-s3": "^3.1009.0",
|
|
27
28
|
"@aws-sdk/client-sfn": "^3.1009.0",
|
|
28
29
|
"@aws-sdk/util-dynamodb": "^3.996.2",
|
|
29
30
|
"liquidjs": "^10.25.0",
|
|
30
31
|
"zod": "^3.25.67",
|
|
31
|
-
"@mailshot/shared": "0.
|
|
32
|
+
"@mailshot/shared": "1.0.3"
|
|
32
33
|
},
|
|
33
34
|
"scripts": {
|
|
34
35
|
"build": "tsc",
|