@aglyn/plugins-marketing 1.0.0-beta.200 → 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.
- package/package.json +15 -15
- package/src/lib/components/campaign-composer.js +14 -6
- package/src/lib/components/campaign-composer.js.map +1 -1
- package/src/lib/components/campaign-conversions-card.js +6 -0
- package/src/lib/components/campaign-conversions-card.js.map +1 -1
- package/src/lib/components/campaign-detail-card.js +1 -1
- package/src/lib/components/campaign-detail-card.js.map +1 -1
- package/src/lib/components/campaign-members-section.d.ts +16 -4
- package/src/lib/components/campaign-members-section.js +171 -105
- package/src/lib/components/campaign-members-section.js.map +1 -1
- package/src/lib/components/campaigns-card.js +19 -9
- package/src/lib/components/campaigns-card.js.map +1 -1
- package/src/lib/components/email-compose-card.js +4 -3
- package/src/lib/components/email-compose-card.js.map +1 -1
- package/src/lib/components/email-detail.js +16 -5
- package/src/lib/components/email-detail.js.map +1 -1
- package/src/lib/components/email-recipients-card.js +3 -1
- package/src/lib/components/email-recipients-card.js.map +1 -1
- package/src/lib/components/emails-list-card.js +3 -1
- package/src/lib/components/emails-list-card.js.map +1 -1
- package/src/lib/components/host-experiments-card.component.js +3 -0
- package/src/lib/components/host-experiments-card.component.js.map +1 -1
- package/src/lib/model/campaign-members-query.d.ts +37 -0
- package/src/lib/model/campaign-members-query.js +120 -0
- package/src/lib/model/campaign-members-query.js.map +1 -0
- package/src/lib/server/campaign-form-flags.d.ts +35 -0
- package/src/lib/server/campaign-form-flags.js +52 -0
- package/src/lib/server/campaign-form-flags.js.map +1 -0
- package/src/lib/server/campaign-manage.js +12 -2
- package/src/lib/server/campaign-manage.js.map +1 -1
- package/src/lib/server/campaign-send.d.ts +35 -1
- package/src/lib/server/campaign-send.js +230 -11
- package/src/lib/server/campaign-send.js.map +1 -1
- package/src/lib/server/email-events.js +10 -0
- package/src/lib/server/email-events.js.map +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aglyn/plugins-marketing",
|
|
3
|
-
"version": "1.0.0-beta.
|
|
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.
|
|
29
|
-
"@aglyn/shared-data-enums": "1.0.0-beta.
|
|
30
|
-
"@aglyn/shared-data-mdi": "1.0.0-beta.
|
|
31
|
-
"@aglyn/shared-ui-email-campaigns": "1.0.0-beta.
|
|
32
|
-
"@aglyn/shared-ui-jsx": "1.0.0-beta.
|
|
33
|
-
"@aglyn/shared-ui-jsx-forms": "1.0.0-beta.
|
|
34
|
-
"@aglyn/shared-ui-next": "1.0.0-beta.
|
|
35
|
-
"@aglyn/shared-ui-snackstack": "1.0.0-beta.
|
|
36
|
-
"@aglyn/shared-util-email": "1.0.0-beta.
|
|
37
|
-
"@aglyn/shared-util-http": "1.0.0-beta.
|
|
38
|
-
"@aglyn/shared-util-timestamp": "1.0.0-beta.
|
|
39
|
-
"@aglyn/tenant-data-admin": "1.0.0-beta.
|
|
40
|
-
"@aglyn/tenant-feature-instance": "1.0.0-beta.
|
|
41
|
-
"@aglyn/tenant-runtime": "1.0.0-beta.
|
|
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
|
|
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((
|
|
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
|
-
|
|
464
|
-
|
|
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",
|