@aglyn/plugins-marketing 1.0.0-beta.199 → 1.0.0-beta.201

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/package.json +15 -15
  2. package/src/lib/components/campaign-composer.js +14 -6
  3. package/src/lib/components/campaign-composer.js.map +1 -1
  4. package/src/lib/components/campaign-conversions-card.js +6 -0
  5. package/src/lib/components/campaign-conversions-card.js.map +1 -1
  6. package/src/lib/components/campaign-detail-card.js +107 -37
  7. package/src/lib/components/campaign-detail-card.js.map +1 -1
  8. package/src/lib/components/campaign-members-section.d.ts +16 -4
  9. package/src/lib/components/campaign-members-section.js +171 -105
  10. package/src/lib/components/campaign-members-section.js.map +1 -1
  11. package/src/lib/components/campaign-queries.d.ts +11 -0
  12. package/src/lib/components/campaign-queries.js +13 -0
  13. package/src/lib/components/campaign-queries.js.map +1 -1
  14. package/src/lib/components/campaigns-card.d.ts +8 -6
  15. package/src/lib/components/campaigns-card.js +296 -128
  16. package/src/lib/components/campaigns-card.js.map +1 -1
  17. package/src/lib/components/email-compose-card.js +4 -3
  18. package/src/lib/components/email-compose-card.js.map +1 -1
  19. package/src/lib/components/email-detail.js +16 -5
  20. package/src/lib/components/email-detail.js.map +1 -1
  21. package/src/lib/components/email-recipients-card.js +3 -1
  22. package/src/lib/components/email-recipients-card.js.map +1 -1
  23. package/src/lib/components/emails-list-card.d.ts +11 -15
  24. package/src/lib/components/emails-list-card.js +142 -143
  25. package/src/lib/components/emails-list-card.js.map +1 -1
  26. package/src/lib/components/host-experiments-card.component.js +110 -78
  27. package/src/lib/components/host-experiments-card.component.js.map +1 -1
  28. package/src/lib/components/org-experiments-card.js +7 -3
  29. package/src/lib/components/org-experiments-card.js.map +1 -1
  30. package/src/lib/model/campaign-list-query.d.ts +99 -0
  31. package/src/lib/model/campaign-list-query.js +373 -0
  32. package/src/lib/model/campaign-list-query.js.map +1 -0
  33. package/src/lib/model/campaign-members-query.d.ts +37 -0
  34. package/src/lib/model/campaign-members-query.js +120 -0
  35. package/src/lib/model/campaign-members-query.js.map +1 -0
  36. package/src/lib/model/experiment-list-query.d.ts +22 -0
  37. package/src/lib/model/experiment-list-query.js +85 -0
  38. package/src/lib/model/experiment-list-query.js.map +1 -0
  39. package/src/lib/server/campaign-form-flags.d.ts +35 -0
  40. package/src/lib/server/campaign-form-flags.js +52 -0
  41. package/src/lib/server/campaign-form-flags.js.map +1 -0
  42. package/src/lib/server/campaign-manage.d.ts +1 -1
  43. package/src/lib/server/campaign-manage.js +42 -20
  44. package/src/lib/server/campaign-manage.js.map +1 -1
  45. package/src/lib/server/campaign-send.d.ts +42 -1
  46. package/src/lib/server/campaign-send.js +247 -16
  47. package/src/lib/server/campaign-send.js.map +1 -1
  48. package/src/lib/server/email-events.js +13 -1
  49. package/src/lib/server/email-events.js.map +1 -1
  50. package/src/lib/components/email-send-filter.d.ts +0 -32
  51. package/src/lib/components/email-send-filter.js +0 -55
  52. package/src/lib/components/email-send-filter.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aglyn/plugins-marketing",
3
- "version": "1.0.0-beta.199",
3
+ "version": "1.0.0-beta.201",
4
4
  "license": "Apache-2.0",
5
5
  "homepage": "https://aglyn.com",
6
6
  "repository": {
@@ -25,20 +25,20 @@
25
25
  "./package.json": "./package.json"
26
26
  },
27
27
  "dependencies": {
28
- "@aglyn/aglyn": "1.0.0-beta.199",
29
- "@aglyn/shared-data-enums": "1.0.0-beta.199",
30
- "@aglyn/shared-data-mdi": "1.0.0-beta.199",
31
- "@aglyn/shared-ui-email-campaigns": "1.0.0-beta.199",
32
- "@aglyn/shared-ui-jsx": "1.0.0-beta.199",
33
- "@aglyn/shared-ui-jsx-forms": "1.0.0-beta.199",
34
- "@aglyn/shared-ui-next": "1.0.0-beta.199",
35
- "@aglyn/shared-ui-snackstack": "1.0.0-beta.199",
36
- "@aglyn/shared-util-email": "1.0.0-beta.199",
37
- "@aglyn/shared-util-http": "1.0.0-beta.199",
38
- "@aglyn/shared-util-timestamp": "1.0.0-beta.199",
39
- "@aglyn/tenant-data-admin": "1.0.0-beta.199",
40
- "@aglyn/tenant-feature-instance": "1.0.0-beta.199",
41
- "@aglyn/tenant-runtime": "1.0.0-beta.199",
28
+ "@aglyn/aglyn": "1.0.0-beta.201",
29
+ "@aglyn/shared-data-enums": "1.0.0-beta.201",
30
+ "@aglyn/shared-data-mdi": "1.0.0-beta.201",
31
+ "@aglyn/shared-ui-email-campaigns": "1.0.0-beta.201",
32
+ "@aglyn/shared-ui-jsx": "1.0.0-beta.201",
33
+ "@aglyn/shared-ui-jsx-forms": "1.0.0-beta.201",
34
+ "@aglyn/shared-ui-next": "1.0.0-beta.201",
35
+ "@aglyn/shared-ui-snackstack": "1.0.0-beta.201",
36
+ "@aglyn/shared-util-email": "1.0.0-beta.201",
37
+ "@aglyn/shared-util-http": "1.0.0-beta.201",
38
+ "@aglyn/shared-util-timestamp": "1.0.0-beta.201",
39
+ "@aglyn/tenant-data-admin": "1.0.0-beta.201",
40
+ "@aglyn/tenant-feature-instance": "1.0.0-beta.201",
41
+ "@aglyn/tenant-runtime": "1.0.0-beta.201",
42
42
  "@swc/helpers": "0.5.23"
43
43
  },
44
44
  "peerDependencies": {
@@ -27,6 +27,8 @@ import { CampaignDesignCreate, CampaignSenderEditor, CampaignTopicSelect } from
27
27
  import { useCampaignSendApi } from "./use-campaign-send-api.js";
28
28
  import { useSendingApi } from "@aglyn/tenant-feature-instance/hooks/use-sending-identity-api";
29
29
  import { describeCallFailure } from "@aglyn/shared-util-http/authorized-token";
30
+ // By its own path: the one sentence, without the send path behind the barrel.
31
+ import { deliverabilityExclusionSummary } from "@aglyn/shared-util-email/email-deliverability";
30
32
  import CampaignTestSendDrawer from "./campaign-test-send-drawer.js";
31
33
  import { useRouter } from "next/navigation";
32
34
  import { useCallback, useEffect, useMemo, useRef, useState } from "react";
@@ -407,7 +409,7 @@ export function CampaignComposer(props) {
407
409
  // list, and each stop would otherwise be a full audience resolution.
408
410
  const timer = setTimeout(async ()=>{
409
411
  try {
410
- var _ref, _ref1, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7, _ref8;
412
+ var _ref, _ref1, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7, _ref8, _ref9, _ref10;
411
413
  /*
412
414
  * NO SUBJECT AND NO BODY, and that is the point of this request.
413
415
  *
@@ -435,7 +437,7 @@ export function CampaignComposer(props) {
435
437
  } : {}));
436
438
  if (!active) return;
437
439
  if (!response.ok) {
438
- var _ref9;
440
+ var _ref11;
439
441
  // The refusals are useful, not noise: "The audience is empty"
440
442
  // and the monthly-cap message are exactly what a merchant needs
441
443
  // BEFORE writing the email rather than after.
@@ -447,7 +449,7 @@ export function CampaignComposer(props) {
447
449
  // sentence the merchant can act on for the same 409 arriving after
448
450
  // the click.
449
451
  return setPreview({
450
- error: String((_ref9 = payload == null ? void 0 : payload.error) != null ? _ref9 : ''),
452
+ error: String((_ref11 = payload == null ? void 0 : payload.error) != null ? _ref11 : ''),
451
453
  blocking: response.status === 409
452
454
  });
453
455
  }
@@ -460,8 +462,10 @@ export function CampaignComposer(props) {
460
462
  grandfathered: Number((_ref4 = payload == null ? void 0 : payload.grandfathered) != null ? _ref4 : 0),
461
463
  consentWithheld: Number((_ref5 = payload == null ? void 0 : payload.consentWithheld) != null ? _ref5 : 0),
462
464
  cadenceHeld: Number((_ref6 = payload == null ? void 0 : payload.cadenceHeld) != null ? _ref6 : 0),
463
- identity: String((_ref7 = payload == null ? void 0 : payload.identity) != null ? _ref7 : ''),
464
- identitySource: (_ref8 = payload == null ? void 0 : payload.identitySource) != null ? _ref8 : null
465
+ noMailServer: Number((_ref7 = payload == null ? void 0 : payload.noMailServer) != null ? _ref7 : 0),
466
+ gatewayHeld: Number((_ref8 = payload == null ? void 0 : payload.gatewayHeld) != null ? _ref8 : 0),
467
+ identity: String((_ref9 = payload == null ? void 0 : payload.identity) != null ? _ref9 : ''),
468
+ identitySource: (_ref10 = payload == null ? void 0 : payload.identitySource) != null ? _ref10 : null
465
469
  });
466
470
  } catch (error) {
467
471
  /*
@@ -804,6 +808,10 @@ export function CampaignComposer(props) {
804
808
  if (counts.grandfathered) {
805
809
  withheld.push(`${counts.grandfathered.toLocaleString()} reachable only because ` + `consent is not enforced retroactively`);
806
810
  }
811
+ // Addresses that would bounce, named apart from the rest: nobody
812
+ // unsubscribed, and the fix is the list rather than the send.
813
+ const excluded = deliverabilityExclusionSummary(counts);
814
+ if (excluded) withheld.push(excluded);
807
815
  return `${quoted} goes to ${reach}${when}.` + (withheld.length ? ` Not counted: ${withheld.join('; ')}.` : '');
808
816
  }, [
809
817
  counts,
@@ -1090,7 +1098,7 @@ export function CampaignComposer(props) {
1090
1098
  /*#__PURE__*/ _jsx(Typography, {
1091
1099
  variant: "caption",
1092
1100
  color: "text.secondary",
1093
- children: preview === null ? 'Counting recipients…' : 'error' in preview ? preview.error || 'Could not count this audience' : `Recipients ${preview.sendable.toLocaleString()}` + (preview.audienceSize > preview.sendable ? ` of ${preview.audienceSize.toLocaleString()}${preview.audienceTruncated ? '+' : ''} in this audience` : '') + (preview.suppressed ? ` · ${preview.suppressed.toLocaleString()} unsubscribed or suppressed` : '') + (preview.cadenceHeld ? ` · ${preview.cadenceHeld.toLocaleString()} asked for mail less often than this` : '')
1101
+ children: preview === null ? 'Counting recipients…' : 'error' in preview ? preview.error || 'Could not count this audience' : `Recipients ${preview.sendable.toLocaleString()}` + (preview.audienceSize > preview.sendable ? ` of ${preview.audienceSize.toLocaleString()}${preview.audienceTruncated ? '+' : ''} in this audience` : '') + (preview.suppressed ? ` · ${preview.suppressed.toLocaleString()} unsubscribed or suppressed` : '') + (preview.cadenceHeld ? ` · ${preview.cadenceHeld.toLocaleString()} asked for mail less often than this` : '') + (deliverabilityExclusionSummary(preview) ? ` · ${deliverabilityExclusionSummary(preview)}` : '')
1094
1102
  }),
1095
1103
  counts && /*#__PURE__*/ _jsxs(Typography, {
1096
1104
  variant: "caption",