@shogo-ai/email 1.9.13 → 2.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/server.cjs CHANGED
@@ -457,8 +457,11 @@ var EMAIL_CONSTANTS = {
457
457
  APP_NAME: "Shogo",
458
458
  APP_URL: "https://shogo.ai",
459
459
  SUPPORT_EMAIL: "support@shogo.ai",
460
- LOGO_URL: "https://shogo.ai/assets/images/shogo-logo-email.png",
461
- LOGO_DARK_URL: "https://shogo.ai/assets/images/shogo-logo-dark-email.png",
460
+ // Rendered from the current brand lockup (logo/shogo-logo-full{,-alt}.svg on
461
+ // shogo-website). Versioned filenames so the CDN's cached copy of the
462
+ // previous logo is never picked up by new sends.
463
+ LOGO_URL: "https://shogo.ai/assets/images/logo/shogo-logo-email-v2.png",
464
+ LOGO_DARK_URL: "https://shogo.ai/assets/images/logo/shogo-logo-dark-email-v2.png",
462
465
  FOOTER_TEXT: "© {{currentYear}} Shogo. All rights reserved"
463
466
  };
464
467
  var LIGHT_STYLES = `
@@ -625,8 +628,8 @@ function wrapInLayout(content) {
625
628
  <div class="email-container">
626
629
  <div class="email-header">
627
630
  <a href="${EMAIL_CONSTANTS.APP_URL}" style="display:inline-block;text-decoration:none;">
628
- <img class="email-logo-light" src="${EMAIL_CONSTANTS.LOGO_URL}" alt="${EMAIL_CONSTANTS.APP_NAME}" width="169" height="58" style="display:block;height:40px;width:auto;" />
629
- <img class="email-logo-dark" src="${EMAIL_CONSTANTS.LOGO_DARK_URL}" alt="${EMAIL_CONSTANTS.APP_NAME}" width="169" height="58" style="display:none;height:40px;width:auto;" />
631
+ <img class="email-logo-light" src="${EMAIL_CONSTANTS.LOGO_URL}" alt="${EMAIL_CONSTANTS.APP_NAME}" width="168" height="40" style="display:block;height:40px;width:auto;" />
632
+ <img class="email-logo-dark" src="${EMAIL_CONSTANTS.LOGO_DARK_URL}" alt="${EMAIL_CONSTANTS.APP_NAME}" width="168" height="40" style="display:none;height:40px;width:auto;" />
630
633
  </a>
631
634
  </div>
632
635
  <div class="email-content">
@@ -892,6 +895,33 @@ var paymentFailedTemplate = {
892
895
  }
893
896
  };
894
897
 
898
+ // src/templates/billing/payment-action-required.ts
899
+ var paymentActionRequiredTemplate = {
900
+ name: "payment-action-required",
901
+ subject: "Confirm your payment for {{workspaceName}}",
902
+ html: wrapInLayout(`
903
+ <h1 class="email-h1">Confirm Your Payment</h1>
904
+ <p class="email-text">
905
+ Your bank needs you to confirm the payment of <strong>{{currency}}{{amount}}</strong>
906
+ for <strong>{{workspaceName}}</strong> ({{planName}}). Nothing has been charged yet.
907
+ </p>
908
+ <p class="email-text">
909
+ This is a routine security check some banks require for recurring and
910
+ online payments. It only takes a moment.
911
+ </p>
912
+ <a href="{{confirmUrl}}" class="email-btn" style="color:#ffffff;text-decoration:none;">Confirm Payment</a>
913
+ <hr class="email-divider">
914
+ <p class="email-muted">
915
+ If you didn't expect this charge, please reply to this email or
916
+ contact support.
917
+ </p>
918
+ `),
919
+ defaults: {
920
+ appName: EMAIL_CONSTANTS.APP_NAME,
921
+ currency: "$"
922
+ }
923
+ };
924
+
895
925
  // src/templates/billing/usage-overage-charged.ts
896
926
  var usageOverageChargedTemplate = {
897
927
  name: "usage-overage-charged",
@@ -977,6 +1007,25 @@ var memberJoinedTemplate = {
977
1007
  }
978
1008
  };
979
1009
 
1010
+ // src/templates/workspace/channel-digest.ts
1011
+ var channelDigestTemplate = {
1012
+ name: "channel-digest",
1013
+ subject: "{{countLabel}} waiting in {{workspaceName}}",
1014
+ html: wrapInLayout(`
1015
+ <h1 class="email-h1">You have {{countLabel}}</h1>
1016
+ <p class="email-text">Here's what you missed in <strong>{{workspaceName}}</strong>:</p>
1017
+ <p class="email-text" style="white-space: pre-line;">{{summary}}</p>
1018
+ <a href="{{channelsUrl}}" class="email-btn-outline">Open channels</a>
1019
+ <p class="email-text" style="font-size: 12px; color: #888;">
1020
+ You get this daily summary because email digests are on.
1021
+ <a href="{{settingsUrl}}">Change notification settings</a>.
1022
+ </p>
1023
+ `),
1024
+ defaults: {
1025
+ appName: EMAIL_CONSTANTS.APP_NAME
1026
+ }
1027
+ };
1028
+
980
1029
  // src/templates/workspace/member-removed.ts
981
1030
  var memberRemovedTemplate = {
982
1031
  name: "member-removed",
@@ -1025,6 +1074,403 @@ var accountDeletedTemplate = {
1025
1074
  }
1026
1075
  };
1027
1076
 
1077
+ // src/templates/lifecycle/drip.ts
1078
+ var dripWelcomeTemplate = {
1079
+ name: "drip-welcome",
1080
+ subject: "Welcome to {{appName}} \u2014 your first agent is one message away",
1081
+ html: wrapInLayout(`
1082
+ <h1 class="email-h1">Hey {{name}},</h1>
1083
+ <p class="email-text">
1084
+ You just signed up for {{appName}} \u2014 a place where you build AI agents
1085
+ by chatting with them. No YAML, no config files, just describe what you
1086
+ want the agent to do.
1087
+ </p>
1088
+ <p class="email-text">
1089
+ In the next 5 minutes you can have an agent that checks your GitHub PRs,
1090
+ tracks your revenue, or manages your support queue \u2014 whatever you actually
1091
+ need. Start with a template.
1092
+ </p>
1093
+ <a href="{{appUrl}}/templates" class="email-btn" style="color:#ffffff;text-decoration:none;">
1094
+ Build your first agent \u2192
1095
+ </a>
1096
+ <hr class="email-divider">
1097
+ <p class="email-muted">
1098
+ Reply to this email any time \u2014 I read every one.
1099
+ </p>
1100
+ `),
1101
+ defaults: {
1102
+ appName: EMAIL_CONSTANTS.APP_NAME,
1103
+ appUrl: EMAIL_CONSTANTS.APP_URL
1104
+ }
1105
+ };
1106
+ var dripQuickWinTemplate = {
1107
+ name: "drip-quick-win",
1108
+ subject: "Start here: the Research Assistant takes 2 minutes",
1109
+ html: wrapInLayout(`
1110
+ <h1 class="email-h1">Your first agent in 2 minutes</h1>
1111
+ <p class="email-text">Hi {{name}},</p>
1112
+ <p class="email-text">
1113
+ The fastest way to see what {{appName}} does is the Research Assistant.
1114
+ It's pre-configured to search the web, summarize findings, and send you
1115
+ a digest \u2014 no setup required beyond pointing it at a topic.
1116
+ </p>
1117
+ <p class="email-text">Three steps:</p>
1118
+ <p class="email-text">
1119
+ <strong>1.</strong> Open the template gallery<br>
1120
+ <strong>2.</strong> Install Research Assistant (one click)<br>
1121
+ <strong>3.</strong> Chat with it: <em>"Summarize the top AI news from this week"</em>
1122
+ </p>
1123
+ <a href="{{appUrl}}/templates" class="email-btn" style="color:#ffffff;text-decoration:none;">
1124
+ Install Research Assistant \u2192
1125
+ </a>
1126
+ <hr class="email-divider">
1127
+ <p class="email-muted">
1128
+ Takes 2 minutes. No integrations needed to start.
1129
+ </p>
1130
+ `),
1131
+ defaults: {
1132
+ appName: EMAIL_CONSTANTS.APP_NAME,
1133
+ appUrl: EMAIL_CONSTANTS.APP_URL
1134
+ }
1135
+ };
1136
+ var dripStuckNudgeTemplate = {
1137
+ name: "drip-stuck-nudge",
1138
+ subject: "Most people get stuck at this exact step",
1139
+ html: wrapInLayout(`
1140
+ <h1 class="email-h1">Stuck on setup?</h1>
1141
+ <p class="email-text">Hi {{name}},</p>
1142
+ <p class="email-text">
1143
+ I checked and you haven't created your first agent yet. The most common
1144
+ friction point is figuring out what to ask \u2014 it feels open-ended.
1145
+ </p>
1146
+ <p class="email-text">
1147
+ Here's the simplest starting prompt that works every time:
1148
+ </p>
1149
+ <p class="email-text" style="background:#f8f8f8;border-left:3px solid #e8853d;padding:12px 16px;border-radius:4px;font-style:italic;">
1150
+ "I want an agent that checks my GitHub for open pull requests each morning
1151
+ and sends me a Slack message with a summary."
1152
+ </p>
1153
+ <p class="email-text">
1154
+ Paste that, swap GitHub/Slack for your tools, and you have an agent in
1155
+ under 60 seconds.
1156
+ </p>
1157
+ <a href="{{appUrl}}" class="email-btn" style="color:#ffffff;text-decoration:none;">
1158
+ Resume setup \u2192
1159
+ </a>
1160
+ <hr class="email-divider">
1161
+ <p class="email-muted">
1162
+ Or just reply here \u2014 tell me what you're trying to automate and I'll help
1163
+ you set it up.
1164
+ </p>
1165
+ `),
1166
+ defaults: {
1167
+ appName: EMAIL_CONSTANTS.APP_NAME,
1168
+ appUrl: EMAIL_CONSTANTS.APP_URL
1169
+ }
1170
+ };
1171
+ var dripFirstActionTemplate = {
1172
+ name: "drip-first-action",
1173
+ subject: "Your agent is configured \u2014 now talk to it",
1174
+ html: wrapInLayout(`
1175
+ <h1 class="email-h1">{{agentName}} is ready</h1>
1176
+ <p class="email-text">Hi {{name}},</p>
1177
+ <p class="email-text">
1178
+ You created <strong>{{agentName}}</strong> \u2014 nice work. The last step is
1179
+ sending it a message so it knows what to do first.
1180
+ </p>
1181
+ <p class="email-text">
1182
+ Open the chat panel and try something like:
1183
+ </p>
1184
+ <p class="email-text" style="background:#f8f8f8;border-left:3px solid #e8853d;padding:12px 16px;border-radius:4px;font-style:italic;">
1185
+ "Check my GitHub for any open PRs that haven't been reviewed in 2+ days."
1186
+ </p>
1187
+ <p class="email-text">
1188
+ The first message is always the most satisfying \u2014 watch it actually go do
1189
+ something.
1190
+ </p>
1191
+ <a href="{{appUrl}}" class="email-btn" style="color:#ffffff;text-decoration:none;">
1192
+ Open {{agentName}} \u2192
1193
+ </a>
1194
+ `),
1195
+ defaults: {
1196
+ appName: EMAIL_CONSTANTS.APP_NAME,
1197
+ appUrl: EMAIL_CONSTANTS.APP_URL,
1198
+ agentName: "your agent"
1199
+ }
1200
+ };
1201
+ var dripSocialProofTemplate = {
1202
+ name: "drip-social-proof",
1203
+ subject: "What a 3-person startup is doing with Shogo",
1204
+ html: wrapInLayout(`
1205
+ <h1 class="email-h1">A real example</h1>
1206
+ <p class="email-text">Hi {{name}},</p>
1207
+ <p class="email-text">
1208
+ A small eng team uses three {{appName}} agents in production:
1209
+ </p>
1210
+ <p class="email-text">
1211
+ <strong>GitHub Ops</strong> \u2014 runs every morning, reviews all PRs opened
1212
+ in the last 24h, flags anything stale, and posts a summary to their
1213
+ #engineering Slack channel. Replaced a 15-minute standup ritual.
1214
+ </p>
1215
+ <p class="email-text">
1216
+ <strong>Revenue Tracker</strong> \u2014 pulls MRR from Stripe each Monday,
1217
+ compares it to the prior week, and sends a one-paragraph summary to the
1218
+ founder. Takes 8 seconds.
1219
+ </p>
1220
+ <p class="email-text">
1221
+ <strong>Incident Commander</strong> \u2014 watches their Sentry error feed,
1222
+ auto-groups similar errors, and creates Linear tickets with severity tags.
1223
+ Zero manual triage.
1224
+ </p>
1225
+ <p class="email-text">
1226
+ Every one of these started with a single chat message. None required any
1227
+ code.
1228
+ </p>
1229
+ <a href="{{appUrl}}/templates" class="email-btn" style="color:#ffffff;text-decoration:none;">
1230
+ See all templates \u2192
1231
+ </a>
1232
+ `),
1233
+ defaults: {
1234
+ appName: EMAIL_CONSTANTS.APP_NAME,
1235
+ appUrl: EMAIL_CONSTANTS.APP_URL
1236
+ }
1237
+ };
1238
+ var dripReEngagementTemplate = {
1239
+ name: "drip-re-engagement",
1240
+ subject: "{{agentName}} hasn't heard from you yet",
1241
+ html: wrapInLayout(`
1242
+ <h1 class="email-h1">Still there?</h1>
1243
+ <p class="email-text">Hi {{name}},</p>
1244
+ <p class="email-text">
1245
+ You set up <strong>{{agentName}}</strong> a few days ago but haven't sent
1246
+ it a message yet. That's the one missing step before it's actually useful.
1247
+ </p>
1248
+ <p class="email-text">
1249
+ Takes 30 seconds \u2014 open the agent, type one request, and see what happens.
1250
+ If it does something useful, great. If it doesn't, reply to this email and
1251
+ tell me what it got wrong \u2014 that's useful feedback too.
1252
+ </p>
1253
+ <a href="{{appUrl}}" class="email-btn" style="color:#ffffff;text-decoration:none;">
1254
+ Open {{agentName}} \u2192
1255
+ </a>
1256
+ <hr class="email-divider">
1257
+ <p class="email-muted">
1258
+ If {{appName}} isn't the right fit right now, no hard feelings \u2014 just reply
1259
+ and let me know what you were hoping it would do.
1260
+ </p>
1261
+ `),
1262
+ defaults: {
1263
+ appName: EMAIL_CONSTANTS.APP_NAME,
1264
+ appUrl: EMAIL_CONSTANTS.APP_URL,
1265
+ agentName: "your agent"
1266
+ }
1267
+ };
1268
+ var dripPowerUpTemplate = {
1269
+ name: "drip-power-up",
1270
+ subject: "Your agent just did something useful \u2014 here's the next level",
1271
+ html: wrapInLayout(`
1272
+ <h1 class="email-h1">Nice \u2014 your agent is working</h1>
1273
+ <p class="email-text">Hi {{name}},</p>
1274
+ <p class="email-text">
1275
+ Your agent just executed its first tool call. That's the real milestone \u2014
1276
+ it's not just chatting, it's actually doing things.
1277
+ </p>
1278
+ <p class="email-text">
1279
+ The next level is connecting more tools. {{appName}} has 250+ integrations
1280
+ \u2014 GitHub, Slack, Linear, Stripe, Sentry, Google Sheets, Notion, and more.
1281
+ Each one you connect makes your agent more capable.
1282
+ </p>
1283
+ <p class="email-text">
1284
+ Go to <strong>Settings \u2192 Integrations</strong> and connect the tools your
1285
+ agent should be able to use.
1286
+ </p>
1287
+ <a href="{{appUrl}}/integrations" class="email-btn" style="color:#ffffff;text-decoration:none;">
1288
+ Connect your first tool \u2192
1289
+ </a>
1290
+ `),
1291
+ defaults: {
1292
+ appName: EMAIL_CONSTANTS.APP_NAME,
1293
+ appUrl: EMAIL_CONSTANTS.APP_URL
1294
+ }
1295
+ };
1296
+ var dripHeartbeatTemplate = {
1297
+ name: "drip-heartbeat",
1298
+ subject: "Your agent can work while you sleep",
1299
+ html: wrapInLayout(`
1300
+ <h1 class="email-h1">Set it on autopilot</h1>
1301
+ <p class="email-text">Hi {{name}},</p>
1302
+ <p class="email-text">
1303
+ You've been chatting with your agent \u2014 now let it run on a schedule
1304
+ without you having to ask.
1305
+ </p>
1306
+ <p class="email-text">
1307
+ The <strong>Heartbeat</strong> feature wakes your agent on a timer \u2014
1308
+ every hour, every morning at 8am, every Monday \u2014 whatever makes sense.
1309
+ When it wakes up, it checks in, looks for work, and acts.
1310
+ </p>
1311
+ <p class="email-text">
1312
+ Example: "Every morning at 8am, check GitHub for PRs that need review and
1313
+ post a summary to Slack." That's one heartbeat. Your agent does it
1314
+ automatically, every day, without you touching it.
1315
+ </p>
1316
+ <p class="email-text">
1317
+ Go to your agent's settings and enable the Heartbeat. Pick an interval
1318
+ and a schedule. That's it.
1319
+ </p>
1320
+ <a href="{{appUrl}}" class="email-btn" style="color:#ffffff;text-decoration:none;">
1321
+ Set your first heartbeat \u2192
1322
+ </a>
1323
+ `),
1324
+ defaults: {
1325
+ appName: EMAIL_CONSTANTS.APP_NAME,
1326
+ appUrl: EMAIL_CONSTANTS.APP_URL
1327
+ }
1328
+ };
1329
+
1330
+ // src/templates/lifecycle/conversion.ts
1331
+ var conversionUsageLimitTemplate = {
1332
+ name: "conversion-usage-limit",
1333
+ subject: "You maxed out your free {{appName}} window \u2014 Pro is 10\xD7 bigger",
1334
+ html: wrapInLayout(`
1335
+ <span class="email-badge">Time to upgrade</span>
1336
+ <h1 class="email-h1" style="margin-top:16px;">You're outgrowing the free plan</h1>
1337
+ <p class="email-text">Hi {{name}},</p>
1338
+ <p class="email-text">
1339
+ You just hit your free usage window \u2014 which means your agents are doing
1340
+ real work for you. The free tier is capped low on purpose. Pro takes the
1341
+ brakes off.
1342
+ </p>
1343
+ <p class="email-text">
1344
+ Here's what changes the moment you upgrade:
1345
+ </p>
1346
+ <div style="background:#f8f8f8;border-radius:8px;padding:16px 20px;margin:0 0 16px;">
1347
+ <div class="email-detail-row">
1348
+ <span class="email-detail-label">Usage window (5h)</span>
1349
+ <span class="email-detail-value">{{freeWindow}} \u2192 {{proWindow}} (10\xD7)</span>
1350
+ </div>
1351
+ <div class="email-detail-row">
1352
+ <span class="email-detail-label">Advanced AI models</span>
1353
+ <span class="email-detail-value">Claude Sonnet, GPT-4o &amp; more</span>
1354
+ </div>
1355
+ <div class="email-detail-row">
1356
+ <span class="email-detail-label">Always-on apps</span>
1357
+ <span class="email-detail-value">1 per seat</span>
1358
+ </div>
1359
+ <div class="email-detail-row" style="border-bottom:none;">
1360
+ <span class="email-detail-label">Waiting on window resets</span>
1361
+ <span class="email-detail-value">Rarely \u2014 10\xD7 more headroom</span>
1362
+ </div>
1363
+ </div>
1364
+ <p class="email-text">
1365
+ Pro is <strong>$20/seat/month</strong>. If your agents save you more than
1366
+ an hour a week, it's already paid for itself \u2014 and you stop losing momentum
1367
+ every time the free window fills up.
1368
+ </p>
1369
+ <a href="{{appUrl}}/billing?plan=pro" class="email-btn" style="color:#ffffff;text-decoration:none;">
1370
+ Upgrade to Pro \u2192
1371
+ </a>
1372
+ <p class="email-muted">
1373
+ Prefer to save 2 months? <a href="{{appUrl}}/billing?plan=pro&amp;interval=annual" style="color:#e8853d;text-decoration:none;font-weight:600;">Get Pro annual for $200/yr \u2192</a>
1374
+ </p>
1375
+ <hr class="email-divider">
1376
+ <p class="email-muted">
1377
+ Not ready yet? Your free window resets automatically \u2014 no action needed.
1378
+ Questions about what's included? Just reply to this email.
1379
+ </p>
1380
+ `),
1381
+ defaults: {
1382
+ appName: EMAIL_CONSTANTS.APP_NAME,
1383
+ appUrl: EMAIL_CONSTANTS.APP_URL,
1384
+ freeWindow: "$0.20",
1385
+ proWindow: "$1.96"
1386
+ }
1387
+ };
1388
+ var conversionPowerUserTemplate = {
1389
+ name: "conversion-power-user",
1390
+ subject: "You're in the top tier of {{appName}} free users",
1391
+ html: wrapInLayout(`
1392
+ <h1 class="email-h1">You're a power user on the free plan</h1>
1393
+ <p class="email-text">Hi {{name}},</p>
1394
+ <p class="email-text">
1395
+ You've sent <strong>{{messageCount}} messages</strong> to your agents \u2014
1396
+ you're one of the most active users on the free plan. That's worth
1397
+ acknowledging.
1398
+ </p>
1399
+ <p class="email-text">
1400
+ You're currently limited to economy AI models and small usage windows.
1401
+ Pro unlocks:
1402
+ </p>
1403
+ <div style="background:#f8f8f8;border-radius:8px;padding:16px 20px;margin:0 0 16px;">
1404
+ <div class="email-detail-row">
1405
+ <span class="email-detail-label">AI models</span>
1406
+ <span class="email-detail-value">Claude Sonnet, GPT-4o, and more</span>
1407
+ </div>
1408
+ <div class="email-detail-row">
1409
+ <span class="email-detail-label">Usage windows</span>
1410
+ <span class="email-detail-value">10\xD7 larger</span>
1411
+ </div>
1412
+ <div class="email-detail-row">
1413
+ <span class="email-detail-label">Always-on apps</span>
1414
+ <span class="email-detail-value">1 per seat</span>
1415
+ </div>
1416
+ <div class="email-detail-row" style="border-bottom:none;">
1417
+ <span class="email-detail-label">Annual pricing</span>
1418
+ <span class="email-detail-value">$200/yr (2 months free)</span>
1419
+ </div>
1420
+ </div>
1421
+ <p class="email-text">
1422
+ Annual is the smart move if you plan to stick around \u2014 same Pro features,
1423
+ billed once a year.
1424
+ </p>
1425
+ <a href="{{appUrl}}/billing?plan=pro&interval=annual" class="email-btn" style="color:#ffffff;text-decoration:none;">
1426
+ Get Pro annual ($200/yr) \u2192
1427
+ </a>
1428
+ <hr class="email-divider">
1429
+ <p class="email-muted">
1430
+ Monthly is also available at $20/seat/month if you prefer.
1431
+ </p>
1432
+ `),
1433
+ defaults: {
1434
+ appName: EMAIL_CONSTANTS.APP_NAME,
1435
+ appUrl: EMAIL_CONSTANTS.APP_URL,
1436
+ messageCount: "several"
1437
+ }
1438
+ };
1439
+ var conversionWinBackTemplate = {
1440
+ name: "conversion-win-back",
1441
+ subject: "{{agentName}} hasn't heard from you in a week",
1442
+ html: wrapInLayout(`
1443
+ <h1 class="email-h1">It's been a while</h1>
1444
+ <p class="email-text">Hi {{name}},</p>
1445
+ <p class="email-text">
1446
+ <strong>{{agentName}}</strong> hasn't heard from you in a week. That's
1447
+ fine \u2014 sometimes the timing isn't right.
1448
+ </p>
1449
+ <p class="email-text">
1450
+ If you left because something wasn't working, reply to this and tell me.
1451
+ I'd rather fix the issue than lose you.
1452
+ </p>
1453
+ <p class="email-text">
1454
+ If life just got busy: your agent is still there, still configured, still
1455
+ ready. One message and you're back up.
1456
+ </p>
1457
+ <a href="{{appUrl}}" class="email-btn" style="color:#ffffff;text-decoration:none;">
1458
+ Check in with {{agentName}} \u2192
1459
+ </a>
1460
+ <hr class="email-divider">
1461
+ <p class="email-muted">
1462
+ Pro tip: enable the Heartbeat on your agent so it works even when you're
1463
+ not thinking about it \u2014 that's how people get the most value from
1464
+ {{appName}}.
1465
+ </p>
1466
+ `),
1467
+ defaults: {
1468
+ appName: EMAIL_CONSTANTS.APP_NAME,
1469
+ appUrl: EMAIL_CONSTANTS.APP_URL,
1470
+ agentName: "your agent"
1471
+ }
1472
+ };
1473
+
1028
1474
  // src/templates/index.ts
1029
1475
  var allTemplates = [
1030
1476
  welcomeTemplate,
@@ -1036,11 +1482,26 @@ var allTemplates = [
1036
1482
  planUpgradedTemplate,
1037
1483
  paymentReceiptTemplate,
1038
1484
  paymentFailedTemplate,
1485
+ paymentActionRequiredTemplate,
1039
1486
  usageOverageChargedTemplate,
1040
1487
  usageApproachingLimitTemplate,
1041
1488
  memberJoinedTemplate,
1042
1489
  memberRemovedTemplate,
1043
- accountDeletedTemplate
1490
+ channelDigestTemplate,
1491
+ accountDeletedTemplate,
1492
+ // Lifecycle — Drip
1493
+ dripWelcomeTemplate,
1494
+ dripQuickWinTemplate,
1495
+ dripStuckNudgeTemplate,
1496
+ dripFirstActionTemplate,
1497
+ dripSocialProofTemplate,
1498
+ dripReEngagementTemplate,
1499
+ dripPowerUpTemplate,
1500
+ dripHeartbeatTemplate,
1501
+ // Lifecycle — Conversion
1502
+ conversionUsageLimitTemplate,
1503
+ conversionPowerUserTemplate,
1504
+ conversionWinBackTemplate
1044
1505
  ];
1045
1506
  function createShogoTemplateRegistry() {
1046
1507
  const registry = new EmailTemplateRegistry();
package/dist/server.js CHANGED
@@ -3,7 +3,7 @@ import {
3
3
  EmailTemplateRegistry,
4
4
  createShogoTemplateRegistry,
5
5
  formatEmailAddress
6
- } from "./chunk-AHEPUREO.js";
6
+ } from "./chunk-NKFT5JLE.js";
7
7
 
8
8
  // src/providers/smtp.ts
9
9
  var SmtpProvider = class {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shogo-ai/email",
3
- "version": "1.9.13",
3
+ "version": "2.4.1",
4
4
  "description": "Shogo Email — multi-provider transactional email (SES, SMTP, OCI) with built-in transactional templates.",
5
5
  "license": "MIT",
6
6
  "type": "module",