@aglyn/plugins-email 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 (82) hide show
  1. package/README.md +5 -4
  2. package/package.json +16 -17
  3. package/src/lib/components/email-template-detail.d.ts +5 -13
  4. package/src/lib/components/email-template-detail.js +29 -426
  5. package/src/lib/components/email-template-detail.js.map +1 -1
  6. package/src/lib/components/email-zones.d.ts +15 -0
  7. package/src/lib/components/email-zones.js +1 -0
  8. package/src/lib/components/email-zones.js.map +1 -1
  9. package/src/lib/components/list-detail-card.d.ts +0 -36
  10. package/src/lib/components/list-detail-card.js +125 -84
  11. package/src/lib/components/list-detail-card.js.map +1 -1
  12. package/src/lib/components/list-members-panel.d.ts +17 -0
  13. package/src/lib/components/list-members-panel.js +14 -0
  14. package/src/lib/components/list-members-panel.js.map +1 -1
  15. package/src/lib/components/site-package-email-preview.d.ts +13 -0
  16. package/src/lib/components/site-package-email-preview.js +47 -0
  17. package/src/lib/components/site-package-email-preview.js.map +1 -0
  18. package/src/lib/components/suppressions-card.js +75 -6
  19. package/src/lib/components/suppressions-card.js.map +1 -1
  20. package/src/lib/components/use-org-email-topics.js +2 -9
  21. package/src/lib/components/use-org-email-topics.js.map +1 -1
  22. package/src/lib/constants/site-package.d.ts +21 -0
  23. package/src/lib/constants/site-package.js +21 -0
  24. package/src/lib/constants/site-package.js.map +1 -0
  25. package/src/lib/declarations.console-server.d.ts +12 -0
  26. package/src/lib/declarations.console-server.js +73 -0
  27. package/src/lib/declarations.console-server.js.map +1 -1
  28. package/src/lib/list-import.d.ts +64 -75
  29. package/src/lib/list-import.js +43 -158
  30. package/src/lib/list-import.js.map +1 -1
  31. package/src/lib/model/email-topic-catalog.d.ts +24 -0
  32. package/src/lib/model/email-topic-catalog.js +19 -0
  33. package/src/lib/model/email-topic-catalog.js.map +1 -1
  34. package/src/lib/model/index.d.ts +0 -25
  35. package/src/lib/model/index.js +0 -27
  36. package/src/lib/model/index.js.map +1 -1
  37. package/src/lib/plugin.d.ts +8 -0
  38. package/src/lib/plugin.js +76 -2
  39. package/src/lib/plugin.js.map +1 -1
  40. package/src/lib/server/person-eraser.d.ts +39 -0
  41. package/src/lib/server/person-eraser.js +44 -0
  42. package/src/lib/server/person-eraser.js.map +1 -0
  43. package/src/lib/server-console.js +9 -9
  44. package/src/lib/server-console.js.map +1 -1
  45. package/src/lib/server-list-gate.d.ts +7 -0
  46. package/src/lib/server-list-gate.js +10 -3
  47. package/src/lib/server-list-gate.js.map +1 -1
  48. package/src/lib/server-list-import.d.ts +20 -177
  49. package/src/lib/server-list-import.js +34 -594
  50. package/src/lib/server-list-import.js.map +1 -1
  51. package/src/lib/server.js +16 -29
  52. package/src/lib/server.js.map +1 -1
  53. package/src/lib/testing/stand-in-send-tally.d.ts +29 -0
  54. package/src/lib/testing/stand-in-send-tally.js +52 -0
  55. package/src/lib/testing/stand-in-send-tally.js.map +1 -0
  56. package/src/lib/transfer/email-transfer-catalog.d.ts +151 -0
  57. package/src/lib/transfer/email-transfer-catalog.js +536 -0
  58. package/src/lib/transfer/email-transfer-catalog.js.map +1 -0
  59. package/src/lib/transfer/list-import-steps.d.ts +44 -0
  60. package/src/lib/transfer/list-import-steps.js +201 -0
  61. package/src/lib/transfer/list-import-steps.js.map +1 -0
  62. package/src/lib/transfer/list-members.server.d.ts +165 -0
  63. package/src/lib/transfer/list-members.server.js +911 -0
  64. package/src/lib/transfer/list-members.server.js.map +1 -0
  65. package/src/lib/transfer/suppressions.server.d.ts +69 -0
  66. package/src/lib/transfer/suppressions.server.js +282 -0
  67. package/src/lib/transfer/suppressions.server.js.map +1 -0
  68. package/src/lib/transfer/topics-package.d.ts +56 -0
  69. package/src/lib/transfer/topics-package.js +87 -0
  70. package/src/lib/transfer/topics-package.js.map +1 -0
  71. package/src/lib/transfer/topics-package.server.d.ts +33 -0
  72. package/src/lib/transfer/topics-package.server.js +171 -0
  73. package/src/lib/transfer/topics-package.server.js.map +1 -0
  74. package/src/lib/transfer/transfer-reads.server.d.ts +25 -0
  75. package/src/lib/transfer/transfer-reads.server.js +34 -0
  76. package/src/lib/transfer/transfer-reads.server.js.map +1 -0
  77. package/src/lib/components/list-import-drawer.d.ts +0 -22
  78. package/src/lib/components/list-import-drawer.js +0 -662
  79. package/src/lib/components/list-import-drawer.js.map +0 -1
  80. package/src/lib/model/template-report.d.ts +0 -158
  81. package/src/lib/model/template-report.js +0 -249
  82. package/src/lib/model/template-report.js.map +0 -1
package/README.md CHANGED
@@ -35,7 +35,7 @@ This plugin owns email designs, the topic catalog, lists, sending identities and
35
35
 
36
36
  - An **Emails** nav item and page at `/emails`, with the sections Messages, Templates, Audiences, Topics, Sending and Suppressions as routes. It requires the `data.manage` permission and is code-split.
37
37
  - The same page at the organization level, `/[orgSlug]/emails` (an `orgNavItems` entry, served by the shell's generic org route to org-wide members). Audiences and topics are the organization's; messages, templates, sending identities and suppression lists are read site by site over a capped batch of sites, and every write that belongs to a site asks which one.
38
- - Two zones this plugin hosts for the plugin that owns campaigns: the whole body of the Messages section (under a site, and on the organization's page with `hostId: null` and the org mount), and the recipients table under a template's report. This package draws neither.
38
+ - Three zones this plugin hosts for the plugin that owns campaigns: the whole body of the Messages section (under a site, and on the organization's page with `hostId: null` and the org mount), what the emails sent from a template did (`emailTemplateReport`, on the template's page), and who received them (`emailTemplateRecipients`). This package draws none of them and reads no send.
39
39
  - Five widgets drawn in zones the campaign owner's pages host: `campaignTopicSelect`, `campaignTopicOptions`, `campaignSenderEditor`, `campaignDesignCreate` and `campaignDesignPreview`. Each reports back through a callback; none writes a campaign.
40
40
 
41
41
  ### On the server
@@ -43,7 +43,8 @@ This plugin owns email designs, the topic catalog, lists, sending identities and
43
43
  `@aglyn/plugins-email/server` imports `firebase-admin` and is kept out of the client entry point.
44
44
 
45
45
  - `registerEmailApi()` (the `tenantApi` surface) registers the recipient-facing pages behind signed links: `email/unsubscribe`, `email/resubscribe`, `email/preferences` and `email/confirm`.
46
- - `registerEmailConsoleApi()` (the `consoleApi` surface) registers list membership routes (`email/list-rule-preview`, `email/list-members-preview`, `email/list-members-add`), the staged list import routes, the suppression routes, and an email design draft writer on the core's resource-drafts seam.
46
+ - `registerEmailConsoleApi()` (the `consoleApi` surface) registers list membership routes (`email/list-rule-preview`, `email/list-members-preview`, `email/list-members-add`), the list import's screening readout (`email/list-import-screening`), the suppression routes, and an email design draft writer on the core's resource-drafts seam.
47
+ - `registerEmailConsoleServerDeclarations()` (the `consoleServerDeclarations` surface) registers, among others, the plugin's two transfer resources: `email.list-members` (one list's members, imported into and exported from that list) and `email.suppressions` (a site's suppression list, import add-only). The console registrar registers their wizard halves, including the list import's own steps.
47
48
 
48
49
  Routes are served by the host app's API dispatcher under `/api/`.
49
50
 
@@ -51,7 +52,7 @@ Routes are served by the host app's API dispatcher under `/api/`.
51
52
 
52
53
  | import | contents |
53
54
  | -- | -- |
54
- | `@aglyn/plugins-email` | `BUNDLE_ID`, the email block components and their schemas, `registerEmailConsole`, the site half, and the model (template reports, sending-domain status, and report types re-exported from `@aglyn/shared-ui-email-campaigns`) |
55
+ | `@aglyn/plugins-email` | `BUNDLE_ID`, the email block components and their schemas, `registerEmailConsole`, the site half, and the model (the renderer re-exports, template provenance and sending-domain status) |
55
56
  | `@aglyn/plugins-email/site` | `registerEmailPlugin` and `EMAIL_BUNDLE` only, with no console code |
56
57
  | `@aglyn/plugins-email/server` | `registerEmailApi`, `registerEmailConsoleApi` and the list handlers |
57
58
  | `@aglyn/plugins-email/*` | any module under `src/lib/`. Console components are deep-imported from `@aglyn/plugins-email/components/...` and are deliberately not re-exported from the root |
@@ -79,7 +80,7 @@ registerEmailApi()
79
80
 
80
81
  ## How it fits
81
82
 
82
- A plugin may import the tenant runtime, the renderer, the Besigner logic, the core and the shared packages. It never imports another plugin, and the core never imports a plugin. Email depends on `@aglyn/aglyn`, `@aglyn/tenant-data-admin`, `@aglyn/tenant-feature-instance` and `@aglyn/shared-*` packages, including `@aglyn/shared-ui-email-campaigns` and `@aglyn/shared-util-email`. Its relationship with the marketing plugin runs entirely through plugin zones and widget slots registered with the core, so neither package imports the other.
83
+ A plugin may import the tenant runtime, the renderer, the Besigner logic, the core and the shared packages. It never imports another plugin, and the core never imports a plugin. Email depends on `@aglyn/aglyn`, `@aglyn/tenant-data-admin`, `@aglyn/tenant-feature-instance` and `@aglyn/shared-*` packages, including `@aglyn/shared-util-email`. Its relationship with the marketing plugin runs entirely through plugin zones and widget slots registered with the core, so neither package imports the other.
83
84
 
84
85
  ## License
85
86
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aglyn/plugins-email",
3
- "version": "1.0.0-beta.221",
3
+ "version": "1.0.0-beta.223",
4
4
  "license": "Apache-2.0",
5
5
  "homepage": "https://aglyn.com",
6
6
  "repository": {
@@ -25,22 +25,21 @@
25
25
  "./package.json": "./package.json"
26
26
  },
27
27
  "dependencies": {
28
- "@aglyn/aglyn": "1.0.0-beta.221",
29
- "@aglyn/shared-data-enums": "1.0.0-beta.221",
30
- "@aglyn/shared-data-mdi": "1.0.0-beta.221",
31
- "@aglyn/shared-data-types": "1.0.0-beta.221",
32
- "@aglyn/shared-ui-email-campaigns": "1.0.0-beta.221",
33
- "@aglyn/shared-ui-jsx": "1.0.0-beta.221",
34
- "@aglyn/shared-ui-jsx-forms": "1.0.0-beta.221",
35
- "@aglyn/shared-ui-next": "1.0.0-beta.221",
36
- "@aglyn/shared-ui-snackstack": "1.0.0-beta.221",
37
- "@aglyn/shared-ui-theme": "1.0.0-beta.221",
38
- "@aglyn/shared-util-email": "1.0.0-beta.221",
39
- "@aglyn/shared-util-http": "1.0.0-beta.221",
40
- "@aglyn/shared-util-timestamp": "1.0.0-beta.221",
41
- "@aglyn/shared-util-tools": "1.0.0-beta.221",
42
- "@aglyn/tenant-data-admin": "1.0.0-beta.221",
43
- "@aglyn/tenant-feature-instance": "1.0.0-beta.221",
28
+ "@aglyn/aglyn": "1.0.0-beta.223",
29
+ "@aglyn/shared-data-enums": "1.0.0-beta.223",
30
+ "@aglyn/shared-data-mdi": "1.0.0-beta.223",
31
+ "@aglyn/shared-data-types": "1.0.0-beta.223",
32
+ "@aglyn/shared-ui-jsx": "1.0.0-beta.223",
33
+ "@aglyn/shared-ui-jsx-forms": "1.0.0-beta.223",
34
+ "@aglyn/shared-ui-next": "1.0.0-beta.223",
35
+ "@aglyn/shared-ui-snackstack": "1.0.0-beta.223",
36
+ "@aglyn/shared-ui-theme": "1.0.0-beta.223",
37
+ "@aglyn/shared-util-email": "1.0.0-beta.223",
38
+ "@aglyn/shared-util-http": "1.0.0-beta.223",
39
+ "@aglyn/shared-util-timestamp": "1.0.0-beta.223",
40
+ "@aglyn/shared-util-tools": "1.0.0-beta.223",
41
+ "@aglyn/tenant-data-admin": "1.0.0-beta.223",
42
+ "@aglyn/tenant-feature-instance": "1.0.0-beta.223",
44
43
  "@swc/helpers": "0.5.23"
45
44
  },
46
45
  "peerDependencies": {
@@ -1,12 +1,3 @@
1
- /**
2
- * How many of a template's messages one read covers.
3
- *
4
- * A CEILING on the read, not a page size: the report is a single figure per
5
- * quantity, so there is nothing to page through. Past it every total is a
6
- * floor and the report says so — the same treatment `audienceSizeTruncated`
7
- * gets, and for the same reason.
8
- */
9
- export declare const TEMPLATE_CAMPAIGN_CEILING = 100;
10
1
  export interface EmailTemplateDetailProps {
11
2
  hostId: string;
12
3
  /** The `kind: 'email'` screen document this page is about. */
@@ -36,10 +27,11 @@ export interface EmailTemplateDetailProps {
36
27
  *
37
28
  * ## What this page reads
38
29
  *
39
- * The screen document, its published version, and the messages naming this
40
- * template — bounded at {@link TEMPLATE_CAMPAIGN_CEILING}. The recipients
41
- * table is its own card and its own request, so a reader who came for the
42
- * preview does not pay for the delivery-log query.
30
+ * The screen document and its published version. The messages sent from the
31
+ * template are a send's, and sends are the campaign owner's: this page hosts
32
+ * two zones that plugin fills — the report of what those messages did, and
33
+ * who received them — handing over the site, the template and this page's
34
+ * base path, and reads none of the sends itself (AGL-3080).
43
35
  */
44
36
  export declare function EmailTemplateDetail(props: EmailTemplateDetailProps): import("react").JSX.Element;
45
37
  export declare namespace EmailTemplateDetail {