@aglyn/plugins-commerce 1.0.0-beta.218 → 1.0.0-beta.220

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 (148) hide show
  1. package/README.md +6 -0
  2. package/package.json +14 -14
  3. package/src/index.d.ts +1 -0
  4. package/src/index.js +1 -19
  5. package/src/index.js.map +1 -1
  6. package/src/lib/components/cart.js +2 -1
  7. package/src/lib/components/cart.js.map +1 -1
  8. package/src/lib/components/console/catalog-organization-card.component.js +665 -459
  9. package/src/lib/components/console/catalog-organization-card.component.js.map +1 -1
  10. package/src/lib/components/console/host-orders-card.component.js +2 -1
  11. package/src/lib/components/console/host-orders-card.component.js.map +1 -1
  12. package/src/lib/components/console/member-posts-card.component.js +1 -1
  13. package/src/lib/components/console/member-posts-card.component.js.map +1 -1
  14. package/src/lib/components/console/order-detail-dialog.component.js +8 -7
  15. package/src/lib/components/console/order-detail-dialog.component.js.map +1 -1
  16. package/src/lib/components/console/payments-settings-card.component.js +2 -2
  17. package/src/lib/components/console/payments-settings-card.component.js.map +1 -1
  18. package/src/lib/components/console/product-editor-dialog.component.js +1221 -889
  19. package/src/lib/components/console/product-editor-dialog.component.js.map +1 -1
  20. package/src/lib/components/console/product-zones.d.ts +184 -0
  21. package/src/lib/components/console/product-zones.js +54 -0
  22. package/src/lib/components/console/product-zones.js.map +1 -0
  23. package/src/lib/components/console/products-hub-card.component.js +3 -2
  24. package/src/lib/components/console/products-hub-card.component.js.map +1 -1
  25. package/src/lib/components/console/products-hub-zone.component.d.ts +1 -1
  26. package/src/lib/components/console/products-hub-zone.component.js +2 -1
  27. package/src/lib/components/console/products-hub-zone.component.js.map +1 -1
  28. package/src/lib/components/console/site-member-purchases.component.d.ts +24 -0
  29. package/src/lib/components/console/site-member-purchases.component.js +339 -0
  30. package/src/lib/components/console/site-member-purchases.component.js.map +1 -0
  31. package/src/lib/components/console/store-settings-card.component.js +2 -2
  32. package/src/lib/components/console/store-settings-card.component.js.map +1 -1
  33. package/src/lib/components/console/storefront-tax-summary-card.component.js +1 -1
  34. package/src/lib/components/console/storefront-tax-summary-card.component.js.map +1 -1
  35. package/src/lib/components/member-signup.js +2 -2
  36. package/src/lib/components/member-signup.js.map +1 -1
  37. package/src/lib/components/newsletter-signup.js +2 -2
  38. package/src/lib/components/newsletter-signup.js.map +1 -1
  39. package/src/lib/components/product-detail.js +2 -1
  40. package/src/lib/components/product-detail.js.map +1 -1
  41. package/src/lib/components/product-grid.js +1 -1
  42. package/src/lib/components/product-grid.js.map +1 -1
  43. package/src/lib/constants/operator-alerts.js +5 -3
  44. package/src/lib/constants/operator-alerts.js.map +1 -1
  45. package/src/lib/constants/storefront-payments.d.ts +33 -0
  46. package/src/lib/constants/storefront-payments.js +35 -0
  47. package/src/lib/constants/storefront-payments.js.map +1 -0
  48. package/src/lib/declarations.server.d.ts +3 -1
  49. package/src/lib/declarations.server.js +19 -1
  50. package/src/lib/declarations.server.js.map +1 -1
  51. package/src/lib/model/commerce-io.js +1 -1
  52. package/src/lib/model/commerce-io.js.map +1 -1
  53. package/src/lib/model/commerce-record-lists.d.ts +31 -0
  54. package/src/lib/model/commerce-record-lists.js +45 -0
  55. package/src/lib/model/commerce-record-lists.js.map +1 -0
  56. package/src/lib/model/commerce-record-routes.d.ts +45 -0
  57. package/src/lib/model/commerce-record-routes.js +72 -0
  58. package/src/lib/model/commerce-record-routes.js.map +1 -0
  59. package/src/lib/model/commerce-search-sources.d.ts +21 -0
  60. package/src/lib/model/commerce-search-sources.js +42 -0
  61. package/src/lib/model/commerce-search-sources.js.map +1 -0
  62. package/src/lib/model/commerce-topics.d.ts +20 -0
  63. package/src/lib/model/commerce-topics.js +33 -0
  64. package/src/lib/model/commerce-topics.js.map +1 -0
  65. package/src/lib/model/index.d.ts +1 -0
  66. package/src/lib/model/index.js +1 -0
  67. package/src/lib/model/index.js.map +1 -1
  68. package/src/lib/model/product-record.d.ts +32 -0
  69. package/src/lib/model/product-record.js +82 -0
  70. package/src/lib/model/product-record.js.map +1 -0
  71. package/src/lib/model/site-member-purchases.d.ts +48 -0
  72. package/src/lib/model/site-member-purchases.js +50 -0
  73. package/src/lib/model/site-member-purchases.js.map +1 -0
  74. package/src/lib/model/storefront-tax-summary.d.ts +121 -0
  75. package/src/lib/model/storefront-tax-summary.js +148 -0
  76. package/src/lib/model/storefront-tax-summary.js.map +1 -0
  77. package/src/lib/plan-entitlements.d.ts +35 -0
  78. package/src/lib/plan-entitlements.js +54 -0
  79. package/src/lib/plan-entitlements.js.map +1 -0
  80. package/src/lib/plugin.js +21 -0
  81. package/src/lib/plugin.js.map +1 -1
  82. package/src/lib/server/billing-webhook.js +387 -248
  83. package/src/lib/server/billing-webhook.js.map +1 -1
  84. package/src/lib/server/cart-checkout.js +3 -3
  85. package/src/lib/server/cart-checkout.js.map +1 -1
  86. package/src/lib/server/checkout.js +2 -2
  87. package/src/lib/server/checkout.js.map +1 -1
  88. package/src/lib/server/connect.js +5 -5
  89. package/src/lib/server/connect.js.map +1 -1
  90. package/src/lib/server/draft-order.js +2 -2
  91. package/src/lib/server/draft-order.js.map +1 -1
  92. package/src/lib/server/gift-cards.js +7 -3
  93. package/src/lib/server/gift-cards.js.map +1 -1
  94. package/src/lib/server/low-stock.js +3 -1
  95. package/src/lib/server/low-stock.js.map +1 -1
  96. package/src/lib/server/member-post.js +2 -2
  97. package/src/lib/server/member-post.js.map +1 -1
  98. package/src/lib/server/membership-admin-password.js +4 -1
  99. package/src/lib/server/membership-admin-password.js.map +1 -1
  100. package/src/lib/server/membership-content.js +1 -1
  101. package/src/lib/server/membership-content.js.map +1 -1
  102. package/src/lib/server/membership-register.js +13 -2
  103. package/src/lib/server/membership-register.js.map +1 -1
  104. package/src/lib/server/newsletter.js +32 -19
  105. package/src/lib/server/newsletter.js.map +1 -1
  106. package/src/lib/server/pos-order.js +3 -3
  107. package/src/lib/server/pos-order.js.map +1 -1
  108. package/src/lib/server/process-abandoned.js +4 -2
  109. package/src/lib/server/process-abandoned.js.map +1 -1
  110. package/src/lib/server/process-restock.js +7 -5
  111. package/src/lib/server/process-restock.js.map +1 -1
  112. package/src/lib/server/product-record-index.d.ts +19 -0
  113. package/src/lib/server/product-record-index.js +83 -0
  114. package/src/lib/server/product-record-index.js.map +1 -0
  115. package/src/lib/server/reconcile-stock.js +1 -1
  116. package/src/lib/server/reconcile-stock.js.map +1 -1
  117. package/src/lib/server/reserve-stock.js +6 -1
  118. package/src/lib/server/reserve-stock.js.map +1 -1
  119. package/src/lib/server/reserve.js +2 -2
  120. package/src/lib/server/reserve.js.map +1 -1
  121. package/src/lib/server/revenue-source.d.ts +130 -0
  122. package/src/lib/server/revenue-source.js +286 -0
  123. package/src/lib/server/revenue-source.js.map +1 -0
  124. package/src/lib/server/supplier-outbox.js +16 -1
  125. package/src/lib/server/supplier-outbox.js.map +1 -1
  126. package/src/lib/server/supplier-update.js +19 -9
  127. package/src/lib/server/supplier-update.js.map +1 -1
  128. package/src/lib/server/tax-profile.d.ts +8 -5
  129. package/src/lib/server/tax-profile.js +22 -5
  130. package/src/lib/server/tax-profile.js.map +1 -1
  131. package/src/lib/server/tax-return-source.d.ts +125 -0
  132. package/src/lib/server/tax-return-source.js +524 -0
  133. package/src/lib/server/tax-return-source.js.map +1 -0
  134. package/src/lib/server/tax-summary.d.ts +92 -0
  135. package/src/lib/server/tax-summary.js +258 -0
  136. package/src/lib/server/tax-summary.js.map +1 -0
  137. package/src/lib/server.d.ts +1 -0
  138. package/src/lib/server.js +23 -0
  139. package/src/lib/server.js.map +1 -1
  140. package/src/lib/starter-templates.d.ts +19 -0
  141. package/src/lib/starter-templates.js +157 -0
  142. package/src/lib/starter-templates.js.map +1 -0
  143. package/src/lib/tenant-emails.d.ts +33 -0
  144. package/src/lib/tenant-emails.js +551 -0
  145. package/src/lib/tenant-emails.js.map +1 -0
  146. package/src/lib/testing/stand-in-crm-record-routes.d.ts +25 -0
  147. package/src/lib/testing/stand-in-crm-record-routes.js +46 -0
  148. package/src/lib/testing/stand-in-crm-record-routes.js.map +1 -0
@@ -0,0 +1,157 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Aglyn LLC
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */ import { buildStarterNodes, starterHeroSection, starterSection, starterText } from "@aglyn/aglyn/app-utils/starter-template-nodes";
17
+ import { SCREEN_ROOT_PATH } from "@aglyn/aglyn/app-utils/screen-route";
18
+ import { BUNDLE_ID } from "./constants/bundle-common.js";
19
+ /**
20
+ * The shop starters (AGL-300): storefront sites built around this plugin's
21
+ * elements — the product grid, the product page, the cart and the customer
22
+ * account.
23
+ *
24
+ * Declared under `starterTemplates` in plugins.config.json; the manifest
25
+ * generator calls {@link commerceStarterTemplates} and compiles what it
26
+ * returns into core's `plugin-starter-templates.generated.ts`, after the
27
+ * platform's own starters. The gallery, the seed route and the AI plugin's
28
+ * examples read that list, so none of them loads this plugin to offer a shop.
29
+ *
30
+ * PERSISTED IDENTIFIERS: the starter ids, the screen keys and every node id
31
+ * below appear in stored documents — seeded template ids are derived from
32
+ * the first two — so none is ever renamed.
33
+ */ /** One of this plugin's elements, placed on a starter page. */ const commerceBlock = (id, componentId, props)=>({
34
+ id,
35
+ componentId,
36
+ pluginId: BUNDLE_ID,
37
+ props
38
+ });
39
+ /** The pages both shop starters share. */ function shopScreens(prefix, digital) {
40
+ return [
41
+ {
42
+ key: 'home',
43
+ displayName: 'Home',
44
+ // The site root, spelled the way the routing map spells it. `''` here
45
+ // read as "no address" everywhere downstream and put the shop's home
46
+ // page at `/home` (AGL-1575).
47
+ slug: SCREEN_ROOT_PATH,
48
+ seo: {
49
+ title: digital ? 'Digital shop' : 'Shop',
50
+ description: 'Browse our products.'
51
+ },
52
+ nodes: buildStarterNodes([
53
+ starterHeroSection(`${prefix}h_`, digital ? 'Downloads that level you up' : 'Gear you can trust', digital ? 'Instant delivery. Lifetime updates.' : 'Quality parts, shipped fast.'),
54
+ starterSection(`${prefix}h_gridSection`, 'xl', 6, [
55
+ commerceBlock(`${prefix}h_grid`, 'product-grid', {
56
+ source: 'all',
57
+ sort: 'newest',
58
+ columns: 3,
59
+ maxItems: 6
60
+ })
61
+ ]),
62
+ // A newsletter capture is a short text-led band, not a gallery.
63
+ starterSection(`${prefix}h_newsSection`, 'md', 6, [
64
+ commerceBlock(`${prefix}h_news`, 'newsletter-signup', {
65
+ heading: 'Get updates and offers'
66
+ })
67
+ ])
68
+ ])
69
+ },
70
+ {
71
+ key: 'shop',
72
+ displayName: 'Shop',
73
+ slug: 'shop',
74
+ seo: {
75
+ title: 'All products'
76
+ },
77
+ nodes: buildStarterNodes([
78
+ starterSection(`${prefix}s_section`, 'xl', 6, [
79
+ starterText(`${prefix}s_title`, 'h3', 'All products'),
80
+ commerceBlock(`${prefix}s_grid`, 'product-grid', {
81
+ source: 'all',
82
+ columns: 4,
83
+ showFilters: true
84
+ })
85
+ ])
86
+ ])
87
+ },
88
+ {
89
+ key: 'product',
90
+ displayName: 'Product page',
91
+ slug: 'product',
92
+ seo: {
93
+ title: 'Product'
94
+ },
95
+ nodes: buildStarterNodes([
96
+ starterSection(`${prefix}p_section`, 'xl', 6, [
97
+ commerceBlock(`${prefix}p_detail`, 'product-detail', {})
98
+ ])
99
+ ])
100
+ },
101
+ {
102
+ key: 'cart',
103
+ displayName: 'Cart',
104
+ slug: 'cart',
105
+ seo: {
106
+ title: 'Your cart'
107
+ },
108
+ // LG, the deliberate middle case: a cart is a wide table but it is read
109
+ // line by line, so a full XL band spreads it further than the eye
110
+ // tracks. Same for the account screen below.
111
+ nodes: buildStarterNodes([
112
+ starterSection(`${prefix}c_section`, 'lg', 6, [
113
+ starterText(`${prefix}c_title`, 'h3', 'Your cart'),
114
+ commerceBlock(`${prefix}c_cart`, 'cart', {
115
+ variant: 'inline',
116
+ showCoupon: true
117
+ })
118
+ ])
119
+ ])
120
+ },
121
+ {
122
+ key: 'account',
123
+ displayName: 'Account',
124
+ slug: 'account',
125
+ seo: {
126
+ title: 'Your account'
127
+ },
128
+ nodes: buildStarterNodes([
129
+ starterSection(`${prefix}a_section`, 'lg', 6, [
130
+ commerceBlock(`${prefix}a_account`, 'customer-account', {
131
+ signedOutHeading: 'Your account'
132
+ })
133
+ ])
134
+ ])
135
+ }
136
+ ];
137
+ }
138
+ /** This plugin's starters, as the manifest generator compiles them. */ export function commerceStarterTemplates() {
139
+ return [
140
+ {
141
+ id: 'physical-shop',
142
+ displayName: 'Shop (physical products)',
143
+ description: 'Storefront starter: home with featured products, filterable shop, ' + 'product page, cart, and customer accounts. After applying, set the ' + 'Product page as the product template in Store settings.',
144
+ category: 'Commerce',
145
+ screens: shopScreens('ps_', false)
146
+ },
147
+ {
148
+ id: 'digital-shop',
149
+ displayName: 'Shop (digital products)',
150
+ description: 'Digital storefront starter: downloads-focused home, shop, product ' + 'page, cart, and accounts with a newsletter capture. Set the Product ' + 'page as the product template in Store settings after applying.',
151
+ category: 'Commerce',
152
+ screens: shopScreens('ds_', true)
153
+ }
154
+ ];
155
+ }
156
+
157
+ //# sourceMappingURL=starter-templates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../libs/plugins/commerce/src/lib/starter-templates.ts"],"sourcesContent":["/**\n * @license\n * Copyright 2026 Aglyn LLC\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n buildStarterNodes,\n starterHeroSection,\n starterSection,\n starterText,\n type StarterNodeSpec,\n type StarterTemplate,\n type StarterTemplateScreen,\n} from '@aglyn/aglyn/app-utils/starter-template-nodes'\nimport { SCREEN_ROOT_PATH } from '@aglyn/aglyn/app-utils/screen-route'\nimport { BUNDLE_ID } from './constants/bundle-common'\n\n/**\n * The shop starters (AGL-300): storefront sites built around this plugin's\n * elements — the product grid, the product page, the cart and the customer\n * account.\n *\n * Declared under `starterTemplates` in plugins.config.json; the manifest\n * generator calls {@link commerceStarterTemplates} and compiles what it\n * returns into core's `plugin-starter-templates.generated.ts`, after the\n * platform's own starters. The gallery, the seed route and the AI plugin's\n * examples read that list, so none of them loads this plugin to offer a shop.\n *\n * PERSISTED IDENTIFIERS: the starter ids, the screen keys and every node id\n * below appear in stored documents — seeded template ids are derived from\n * the first two — so none is ever renamed.\n */\n\n/** One of this plugin's elements, placed on a starter page. */\nconst commerceBlock = (\n id: string,\n componentId: string,\n props?: Record<string, unknown>,\n): StarterNodeSpec => ({ id, componentId, pluginId: BUNDLE_ID, props })\n\n/** The pages both shop starters share. */\nfunction shopScreens(prefix: string, digital: boolean): StarterTemplateScreen[] {\n return [\n {\n key: 'home',\n displayName: 'Home',\n // The site root, spelled the way the routing map spells it. `''` here\n // read as \"no address\" everywhere downstream and put the shop's home\n // page at `/home` (AGL-1575).\n slug: SCREEN_ROOT_PATH,\n seo: {\n title: digital ? 'Digital shop' : 'Shop',\n description: 'Browse our products.',\n },\n nodes: buildStarterNodes([\n starterHeroSection(\n `${prefix}h_`,\n digital ? 'Downloads that level you up' : 'Gear you can trust',\n digital\n ? 'Instant delivery. Lifetime updates.'\n : 'Quality parts, shipped fast.',\n ),\n starterSection(`${prefix}h_gridSection`, 'xl', 6, [\n commerceBlock(`${prefix}h_grid`, 'product-grid', {\n source: 'all',\n sort: 'newest',\n columns: 3,\n maxItems: 6,\n }),\n ]),\n // A newsletter capture is a short text-led band, not a gallery.\n starterSection(`${prefix}h_newsSection`, 'md', 6, [\n commerceBlock(`${prefix}h_news`, 'newsletter-signup', {\n heading: 'Get updates and offers',\n }),\n ]),\n ]),\n },\n {\n key: 'shop',\n displayName: 'Shop',\n slug: 'shop',\n seo: { title: 'All products' },\n nodes: buildStarterNodes([\n starterSection(`${prefix}s_section`, 'xl', 6, [\n starterText(`${prefix}s_title`, 'h3', 'All products'),\n commerceBlock(`${prefix}s_grid`, 'product-grid', {\n source: 'all',\n columns: 4,\n showFilters: true,\n }),\n ]),\n ]),\n },\n {\n key: 'product',\n displayName: 'Product page',\n slug: 'product',\n seo: { title: 'Product' },\n nodes: buildStarterNodes([\n starterSection(`${prefix}p_section`, 'xl', 6, [\n commerceBlock(`${prefix}p_detail`, 'product-detail', {}),\n ]),\n ]),\n },\n {\n key: 'cart',\n displayName: 'Cart',\n slug: 'cart',\n seo: { title: 'Your cart' },\n // LG, the deliberate middle case: a cart is a wide table but it is read\n // line by line, so a full XL band spreads it further than the eye\n // tracks. Same for the account screen below.\n nodes: buildStarterNodes([\n starterSection(`${prefix}c_section`, 'lg', 6, [\n starterText(`${prefix}c_title`, 'h3', 'Your cart'),\n commerceBlock(`${prefix}c_cart`, 'cart', {\n variant: 'inline',\n showCoupon: true,\n }),\n ]),\n ]),\n },\n {\n key: 'account',\n displayName: 'Account',\n slug: 'account',\n seo: { title: 'Your account' },\n nodes: buildStarterNodes([\n starterSection(`${prefix}a_section`, 'lg', 6, [\n commerceBlock(`${prefix}a_account`, 'customer-account', {\n signedOutHeading: 'Your account',\n }),\n ]),\n ]),\n },\n ]\n}\n\n/** This plugin's starters, as the manifest generator compiles them. */\nexport function commerceStarterTemplates(): StarterTemplate[] {\n return [\n {\n id: 'physical-shop',\n displayName: 'Shop (physical products)',\n description:\n 'Storefront starter: home with featured products, filterable shop, ' +\n 'product page, cart, and customer accounts. After applying, set the ' +\n 'Product page as the product template in Store settings.',\n category: 'Commerce',\n screens: shopScreens('ps_', false),\n },\n {\n id: 'digital-shop',\n displayName: 'Shop (digital products)',\n description:\n 'Digital storefront starter: downloads-focused home, shop, product ' +\n 'page, cart, and accounts with a newsletter capture. Set the Product ' +\n 'page as the product template in Store settings after applying.',\n category: 'Commerce',\n screens: shopScreens('ds_', true),\n },\n ]\n}\n"],"names":["buildStarterNodes","starterHeroSection","starterSection","starterText","SCREEN_ROOT_PATH","BUNDLE_ID","commerceBlock","id","componentId","props","pluginId","shopScreens","prefix","digital","key","displayName","slug","seo","title","description","nodes","source","sort","columns","maxItems","heading","showFilters","variant","showCoupon","signedOutHeading","commerceStarterTemplates","category","screens"],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2026 Aglyn LLC
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ import type { TenantEmailEntry } from '@aglyn/shared-util-email';
18
+ /**
19
+ * The emails a site sends its own customers through Commerce (AGL-769/770).
20
+ *
21
+ * Declared here, by the plugin that sends them, and compiled into the
22
+ * platform's tenant email catalog (`TENANT_EMAILS` in
23
+ * `@aglyn/shared-util-email`) by `tools/scripts/generate-plugin-manifests.mjs`
24
+ * (AGL-3080): the catalog's readers include the send path, which loads no
25
+ * plugin code, so a runtime registry it had not filled would quietly send
26
+ * the text card in place of the site's designed email. Regenerate after
27
+ * changing an entry; `--check` refuses a stale catalog.
28
+ *
29
+ * Most commerce sends are designable in the email besigner; a `fixed` entry
30
+ * flips to `besigner` when its send site is wired to `renderHostEmail`
31
+ * (AGL-770).
32
+ */
33
+ export declare function commerceTenantEmails(): readonly TenantEmailEntry[];