@aglyn/plugins-marketing 1.0.0-beta.221 → 1.0.0-beta.223

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 (127) hide show
  1. package/README.md +4 -1
  2. package/package.json +15 -15
  3. package/src/lib/components/campaign-conversions-card.js +53 -64
  4. package/src/lib/components/campaign-conversions-card.js.map +1 -1
  5. package/src/lib/components/campaign-detail-card.js +18 -3
  6. package/src/lib/components/campaign-detail-card.js.map +1 -1
  7. package/src/lib/components/campaign-edit-drawer.d.ts +6 -0
  8. package/src/lib/components/campaign-edit-drawer.js +13 -2
  9. package/src/lib/components/campaign-edit-drawer.js.map +1 -1
  10. package/src/lib/components/campaign-queries.d.ts +5 -0
  11. package/src/lib/components/campaign-queries.js +8 -1
  12. package/src/lib/components/campaign-queries.js.map +1 -1
  13. package/src/lib/components/campaign-reach-sections.d.ts +28 -0
  14. package/src/lib/components/campaign-reach-sections.js +96 -5
  15. package/src/lib/components/campaign-reach-sections.js.map +1 -1
  16. package/src/lib/components/campaign-report-card.js +5 -4
  17. package/src/lib/components/campaign-report-card.js.map +1 -1
  18. package/src/lib/components/campaigns-card.js +1 -1
  19. package/src/lib/components/campaigns-card.js.map +1 -1
  20. package/src/lib/components/conversion-attribution.component.d.ts +18 -0
  21. package/src/lib/components/conversion-attribution.component.js +177 -39
  22. package/src/lib/components/conversion-attribution.component.js.map +1 -1
  23. package/src/lib/components/email-compose-card.js +1 -1
  24. package/src/lib/components/email-compose-card.js.map +1 -1
  25. package/src/lib/components/email-detail.js +5 -4
  26. package/src/lib/components/email-detail.js.map +1 -1
  27. package/src/lib/components/email-template-report-card.d.ts +53 -0
  28. package/src/lib/components/email-template-report-card.js +469 -0
  29. package/src/lib/components/email-template-report-card.js.map +1 -0
  30. package/src/lib/components/emails-list-card.js +2 -2
  31. package/src/lib/components/emails-list-card.js.map +1 -1
  32. package/src/lib/components/host-experiments-card.component.js +3 -2
  33. package/src/lib/components/host-experiments-card.component.js.map +1 -1
  34. package/src/lib/components/record-attribution-widget.d.ts +5 -0
  35. package/src/lib/components/record-attribution-widget.js +6 -3
  36. package/src/lib/components/record-attribution-widget.js.map +1 -1
  37. package/src/lib/components/site-runtime.d.ts +5 -0
  38. package/src/lib/components/site-runtime.js +104 -3
  39. package/src/lib/components/site-runtime.js.map +1 -1
  40. package/src/lib/declarations.server.d.ts +9 -0
  41. package/src/lib/declarations.server.js +78 -0
  42. package/src/lib/declarations.server.js.map +1 -1
  43. package/src/lib/model/campaign-container.d.ts +531 -0
  44. package/src/lib/model/campaign-container.js +532 -0
  45. package/src/lib/model/campaign-container.js.map +1 -0
  46. package/src/lib/model/campaign-conversions.d.ts +55 -4
  47. package/src/lib/model/campaign-conversions.js +60 -4
  48. package/src/lib/model/campaign-conversions.js.map +1 -1
  49. package/src/lib/model/campaign-report.d.ts +158 -0
  50. package/src/lib/model/campaign-report.js +268 -0
  51. package/src/lib/model/campaign-report.js.map +1 -0
  52. package/src/lib/model/campaign-revenue.d.ts +3 -3
  53. package/src/lib/model/campaign-revenue.js +3 -3
  54. package/src/lib/model/campaign-revenue.js.map +1 -1
  55. package/src/lib/model/campaign-send-time.js +2 -2
  56. package/src/lib/model/campaign-send-time.js.map +1 -1
  57. package/src/lib/model/campaign-visits.d.ts +74 -0
  58. package/src/lib/model/campaign-visits.js +65 -0
  59. package/src/lib/model/campaign-visits.js.map +1 -0
  60. package/src/lib/model/compile-client-automations.d.ts +2 -2
  61. package/src/lib/model/compile-client-automations.js +3 -3
  62. package/src/lib/model/compile-client-automations.js.map +1 -1
  63. package/src/lib/model/email-record.d.ts +175 -0
  64. package/src/lib/model/email-record.js +206 -0
  65. package/src/lib/model/email-record.js.map +1 -0
  66. package/src/lib/model/site-contract.d.ts +2 -2
  67. package/src/lib/model/site-contract.js.map +1 -1
  68. package/src/lib/model/template-report.d.ts +158 -0
  69. package/src/lib/model/template-report.js +249 -0
  70. package/src/lib/model/template-report.js.map +1 -0
  71. package/src/lib/plugin.js +16 -0
  72. package/src/lib/plugin.js.map +1 -1
  73. package/src/lib/preview-props.js.map +1 -1
  74. package/src/lib/server/campaign-attribution-store.d.ts +55 -0
  75. package/src/lib/server/campaign-attribution-store.js +98 -0
  76. package/src/lib/server/campaign-attribution-store.js.map +1 -0
  77. package/src/lib/server/campaign-conversion-attribution.d.ts +314 -0
  78. package/src/lib/server/campaign-conversion-attribution.js +549 -0
  79. package/src/lib/server/campaign-conversion-attribution.js.map +1 -0
  80. package/src/lib/server/campaign-manage.js +1 -1
  81. package/src/lib/server/campaign-manage.js.map +1 -1
  82. package/src/lib/server/campaign-org-refs.js +1 -1
  83. package/src/lib/server/campaign-org-refs.js.map +1 -1
  84. package/src/lib/server/campaign-recipients.js +7 -7
  85. package/src/lib/server/campaign-recipients.js.map +1 -1
  86. package/src/lib/server/campaign-send.js +25 -19
  87. package/src/lib/server/campaign-send.js.map +1 -1
  88. package/src/lib/server/campaign-touch-targets.d.ts +61 -0
  89. package/src/lib/server/campaign-touch-targets.js +162 -0
  90. package/src/lib/server/campaign-touch-targets.js.map +1 -0
  91. package/src/lib/server/campaign-visit-beacon.d.ts +44 -0
  92. package/src/lib/server/campaign-visit-beacon.js +125 -0
  93. package/src/lib/server/campaign-visit-beacon.js.map +1 -0
  94. package/src/lib/server/conversion-creditor.d.ts +18 -0
  95. package/src/lib/server/conversion-creditor.js +238 -0
  96. package/src/lib/server/conversion-creditor.js.map +1 -0
  97. package/src/lib/server/email-campaign-touch.d.ts +81 -0
  98. package/src/lib/server/email-campaign-touch.js +227 -0
  99. package/src/lib/server/email-campaign-touch.js.map +1 -0
  100. package/src/lib/server/email-events.js +32 -31
  101. package/src/lib/server/email-events.js.map +1 -1
  102. package/src/lib/server/email-revenue-attribution.d.ts +186 -0
  103. package/src/lib/server/email-revenue-attribution.js +322 -0
  104. package/src/lib/server/email-revenue-attribution.js.map +1 -0
  105. package/src/lib/server/email-send-record-index.d.ts +34 -0
  106. package/src/lib/server/email-send-record-index.js +90 -0
  107. package/src/lib/server/email-send-record-index.js.map +1 -0
  108. package/src/lib/server/get-client-automations.js.map +1 -1
  109. package/src/lib/server/marketing-figures.js +3 -3
  110. package/src/lib/server/marketing-figures.js.map +1 -1
  111. package/src/lib/server/send-tally.d.ts +32 -0
  112. package/src/lib/server/send-tally.js +54 -0
  113. package/src/lib/server/send-tally.js.map +1 -0
  114. package/src/lib/server/site-page-enricher.js +18 -2
  115. package/src/lib/server/site-page-enricher.js.map +1 -1
  116. package/src/lib/testing/stand-in-person-records.d.ts +35 -0
  117. package/src/lib/testing/stand-in-person-records.js +67 -0
  118. package/src/lib/testing/stand-in-person-records.js.map +1 -0
  119. package/src/lib/testing/stand-in-record-counts.d.ts +26 -0
  120. package/src/lib/testing/stand-in-record-counts.js +70 -0
  121. package/src/lib/testing/stand-in-record-counts.js.map +1 -0
  122. package/src/lib/transfer/campaigns-package.d.ts +72 -0
  123. package/src/lib/transfer/campaigns-package.js +145 -0
  124. package/src/lib/transfer/campaigns-package.js.map +1 -0
  125. package/src/lib/transfer/campaigns-package.server.d.ts +33 -0
  126. package/src/lib/transfer/campaigns-package.server.js +305 -0
  127. package/src/lib/transfer/campaigns-package.server.js.map +1 -0
@@ -15,18 +15,19 @@ import { _ as _extends } from "@swc/helpers/_/_extends";
15
15
  * See the License for the specific language governing permissions and
16
16
  * limitations under the License.
17
17
  */ import { checkQuota, contactMatchesSegment, isSubscriptionTopicId, DEFAULT_SUBSCRIPTION_TOPIC_ID, readMarketingBasis, resolveMarketingConsentPolicy, splitByMarketingConsent, createResourceUid, decodeStoredNodes, emailStarterSendBlock, resolveBrandingProfile, seenOnlyThroughGrant, siteLockdownFromDocs, visibleToHost } from "@aglyn/aglyn/server";
18
+ import { readListingRevocation } from "@aglyn/aglyn/plugin-manager/plugin-revocations";
18
19
  import { renderRecipientEmail } from "@aglyn/aglyn/app-utils/recipient-email-render";
19
20
  import { composeHostComponentNodes } from "@aglyn/aglyn/app-utils/load-referenced-components";
20
21
  import { assignExperimentVariant } from "../model/index.js";
21
- import { campaignHeldForReviewNotice, campaignPlacedOnHost, campaignSendHeldForReview } from "@aglyn/shared-ui-email-campaigns/model";
22
+ import { campaignHeldForReviewNotice, campaignPlacedOnHost, campaignSendHeldForReview } from "../model/campaign-container.js";
22
23
  import { readPluginRecordCard } from "@aglyn/aglyn/plugin-manager/plugin-record-cards";
23
24
  import { hostPublicOrigin } from "@aglyn/aglyn/server";
24
25
  import { consentGroupForSite, orgDataCollectionForHost, orgDataQueryForHost, filterDeliverableRecipients, filterSendableForHost, filterTopicSendable, firebaseAdmin, getOrgForHost, meterHostEmail, claimOrgEmailSendBudget, orgCampaignEmailSendsForMonth, readEmailSendRateConfig, readEmailSendRateWindow, reconcileCampaignSendReservation, reserveCampaignEmailSends, resolveHostSendingIdentity } from "@aglyn/tenant-data-admin";
25
26
  import { raiseOperatorAlert } from "@aglyn/tenant-data-admin/server/operator-alerts";
26
27
  import { MARKETING_REPUTATION_BREAKER } from "../constants/operator-alerts.js";
27
- // The leaf, not the barrel: this plugin's specs substitute the barrel
28
- // wholesale, and the lookup must reach the real index logic under them.
29
- import { findContactByEmail } from "@aglyn/tenant-data-admin/server/contact-email-index";
28
+ // The person behind an address, through the plugin that keeps people
29
+ // (AGL-3080): the sender never opens the record system's collections.
30
+ import { findPluginPerson } from "@aglyn/aglyn/plugin-manager/plugin-person-records";
30
31
  import { siteEmailFrame } from "@aglyn/tenant-data-admin/server/host-email-tokens";
31
32
  import { isDocumentId } from "@aglyn/tenant-data-admin/server/document-id";
32
33
  /*
@@ -293,7 +294,13 @@ const EMAIL_PATTERN = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
293
294
  * is what keeps that read from happening.
294
295
  */ const installedFrom = (_ref = versionSnapshot == null ? void 0 : versionSnapshot.get('installedFrom')) != null ? _ref : screenSnapshot.get('installedFrom');
295
296
  if (installedFrom == null ? void 0 : installedFrom.listingId) {
296
- const revocation = (await firestore.collection('revocations').doc(installedFrom.listingId).get()).data();
297
+ /*
298
+ * The revocation is kept by the plugin that runs the distribution channel
299
+ * the design came from, and asked through the platform's slot
300
+ * (`plugin-revocations`). A reader that FAILS throws through, so a send
301
+ * that cannot learn whether its design was pulled is refused rather than
302
+ * mailed — the direction the read had when this file made it itself.
303
+ */ const revocation = await readListingRevocation(installedFrom.listingId);
297
304
  const block = emailStarterSendBlock({
298
305
  installedFrom,
299
306
  revocation
@@ -2525,15 +2532,13 @@ export async function performCampaignSend(options) {
2525
2532
  * The three sources are the three an audience is built from, tried in the
2526
2533
  * order a small site grows them. Nothing here is taken from the request.
2527
2534
  *
2528
- * The org `contacts` lookup goes through the org's address index narrowed
2529
- * to this site (AGL-2633): the index is consulted for the address, the
2530
- * contact it names is checked against `visibleTo` in memory, and only
2531
- * then does the `email ==` query run. So a person whose two records were
2532
- * merged is found under the address that became an alternate, and the
2533
- * scope check is not skipped — it is applied to the one document an
2534
- * address names, which is the same shape the segment branch above uses.
2535
+ * The third is the person the workspace keeps for the address, asked of the
2536
+ * plugin that keeps people (`plugin-person-records`, AGL-3080) and narrowed
2537
+ * to this site: the owner's address lookup answers an alternate address a
2538
+ * merge folded in (AGL-2633), and the scope check is applied to the one
2539
+ * record an address names, which is the same shape the segment branch above
2540
+ * uses.
2535
2541
  */ async function findAudienceDocument(hostId, email) {
2536
- var _contact_data;
2537
2542
  const hostRef = firebaseAdmin.app().firestore().collection('hosts').doc(hostId);
2538
2543
  for (const [collection, nameFields] of [
2539
2544
  [
@@ -2564,12 +2569,13 @@ export async function performCampaignSend(options) {
2564
2569
  };
2565
2570
  }
2566
2571
  }
2567
- const contacts = await orgDataCollectionForHost(hostId, 'contacts').catch(()=>null);
2568
- const contact = contacts ? await findContactByEmail(contacts, email, {
2569
- hostId
2570
- }).catch(()=>null) : null;
2571
- return contact ? {
2572
- data: (_contact_data = contact.data()) != null ? _contact_data : {},
2572
+ const person = await findPluginPerson({
2573
+ hostId,
2574
+ email,
2575
+ onlyVisibleToSite: true
2576
+ }).catch(()=>null);
2577
+ return person ? {
2578
+ data: _extends({}, person.data),
2573
2579
  nameFields: [
2574
2580
  'name',
2575
2581
  'firstName'