@aglyn/shared-util-email 1.0.0-beta.290 → 1.0.0-beta.292

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.
@@ -7,6 +7,95 @@
7
7
  * order. `TENANT_EMAILS` in `tenant-email-catalog.ts` is this list.
8
8
  * Source of truth: plugins.config.json and the entries it names.
9
9
  */ export const PLUGIN_TENANT_EMAILS = [
10
+ {
11
+ "key": "form-confirmation",
12
+ "name": "Form confirmation",
13
+ "description": "Sent to the person who filled in a form, when the form is set to email them a confirmation: what they sent, the files they attached, what happens next and how to reach you. Your reply, such as a quote, arrives in the same conversation.",
14
+ "pluginId": "forms",
15
+ "plugin": "Forms",
16
+ "control": "besigner",
17
+ "defaultSubject": "{{form.subject}}",
18
+ "mergeTokens": [
19
+ {
20
+ "name": "form.subject",
21
+ "description": "The subject, which the conversation keeps: “Your quote request with” the business for a request, else “We got your message”",
22
+ "sample": "Your quote request with Northwind Signs"
23
+ },
24
+ {
25
+ "name": "form.name",
26
+ "description": "What they sent, as they would call it: “Quote request”, else “Your message”",
27
+ "sample": "Quote request"
28
+ },
29
+ {
30
+ "name": "form.heading",
31
+ "description": "“We got your request” for a request, else “Thanks, we got your message”",
32
+ "sample": "We got your request"
33
+ },
34
+ {
35
+ "name": "form.intro",
36
+ "description": "One sentence on what this email is",
37
+ "sample": "Thanks for asking Northwind Signs for a quote. Here is a copy of what you sent."
38
+ },
39
+ {
40
+ "name": "form.answers",
41
+ "description": "Their answers, one per line, under the form’s own labels",
42
+ "sample": "Name: Jane Doe\nProduct: Vinyl banner — 3 × 6 ft / Matte\nDetails: Two banners for the spring fair."
43
+ },
44
+ {
45
+ "name": "form.files",
46
+ "description": "The files they attached, by name; empty when there were none",
47
+ "sample": "Files you sent: logo.ai, banner-sketch.pdf"
48
+ },
49
+ {
50
+ "name": "form.nextStep",
51
+ "description": "What happens next",
52
+ "sample": "Northwind Signs will look over your request and email you a quote. Reply to this email if anything changes."
53
+ },
54
+ {
55
+ "name": "business.contact",
56
+ "description": "How to reach the business beyond a reply: its contact email, and its phone when it lists one",
57
+ "sample": "You can also reach Northwind Signs at hello@northwind.example or 555-0100."
58
+ }
59
+ ],
60
+ "defaultBody": [
61
+ {
62
+ "block": "text",
63
+ "text": "{{host.businessName}} · {{form.name}}",
64
+ "variant": "eyebrow"
65
+ },
66
+ {
67
+ "block": "text",
68
+ "text": "{{form.heading}}",
69
+ "variant": "heading"
70
+ },
71
+ {
72
+ "block": "text",
73
+ "text": "{{form.intro}}",
74
+ "variant": "body"
75
+ },
76
+ {
77
+ "block": "text",
78
+ "text": "{{form.answers}}",
79
+ "variant": "details"
80
+ },
81
+ {
82
+ "block": "text",
83
+ "text": "{{form.files}}",
84
+ "variant": "caption"
85
+ },
86
+ {
87
+ "block": "text",
88
+ "text": "{{form.nextStep}}",
89
+ "variant": "body"
90
+ },
91
+ {
92
+ "block": "text",
93
+ "text": "{{business.contact}}",
94
+ "variant": "caption"
95
+ }
96
+ ],
97
+ "footerReason": "You’re receiving this because you sent a form on the {{host.businessName}} website."
98
+ },
10
99
  {
11
100
  "key": "booking-confirmed",
12
101
  "name": "Booking confirmed",
@@ -791,6 +880,238 @@
791
880
  ],
792
881
  "footerReason": "You’re receiving this because you placed an order with {{host.businessName}}."
793
882
  },
883
+ {
884
+ "key": "quote-sent",
885
+ "name": "Quote",
886
+ "description": "Sends a quote to the customer when you choose Send quote: your message, the proof, the quote as a PDF and a button to approve or pay it on your site. Later sends, such as a new revision, arrive in the same conversation.",
887
+ "pluginId": "commerce",
888
+ "plugin": "Commerce",
889
+ "control": "besigner",
890
+ "defaultSubject": "{{quote.subject}}",
891
+ "mergeTokens": [
892
+ {
893
+ "name": "quote.subject",
894
+ "description": "The subject typed when sending; it stays the same for every email about the quote",
895
+ "sample": "Quote #1042 from Northwind Signs"
896
+ },
897
+ {
898
+ "name": "quote.number",
899
+ "description": "The quote number",
900
+ "sample": "#1042"
901
+ },
902
+ {
903
+ "name": "quote.revision",
904
+ "description": "Which revision of the quote this is",
905
+ "sample": "2"
906
+ },
907
+ {
908
+ "name": "quote.total",
909
+ "description": "The quote total; “before tax” when tax is added at payment",
910
+ "sample": "$1,250.00"
911
+ },
912
+ {
913
+ "name": "quote.heading",
914
+ "description": "“Your quote from …”, or “Your updated quote” from the second revision on",
915
+ "sample": "Your quote from Northwind Signs"
916
+ },
917
+ {
918
+ "name": "quote.intro",
919
+ "description": "One sentence on what this email is: a new quote, or an updated revision",
920
+ "sample": "Here is your quote from Northwind Signs. The quote is attached as a PDF too."
921
+ },
922
+ {
923
+ "name": "quote.message",
924
+ "description": "The message typed when sending; empty when none was typed",
925
+ "sample": "Thanks for stopping by the shop. Here is the banner we talked about."
926
+ },
927
+ {
928
+ "name": "quote.proofImages",
929
+ "description": "Up to three proof images, each linked to the quote page; empty when the revision has none",
930
+ "sample": "<table role=\"presentation\"><tr><td><img src=\"https://shop.example.com/api/commerce/quote-proof?file=p1\" alt=\"Proof: banner.png\" width=\"552\" /></td></tr></table>"
931
+ },
932
+ {
933
+ "name": "quote.proofFiles",
934
+ "description": "The other proof files by name, to see on the quote page; empty when there are none",
935
+ "sample": "Also with this revision: banner.ai. See it on your quote page."
936
+ },
937
+ {
938
+ "name": "quote.nextStep",
939
+ "description": "What to do next: approve the proof first, or pay when ready",
940
+ "sample": "Look over the proof, then approve it on your quote page. Once you approve it, you can pay there."
941
+ },
942
+ {
943
+ "name": "quote.buttonLabel",
944
+ "description": "“Review and approve” while an approval is needed first, else “View and pay” with the total",
945
+ "sample": "View and pay $1,250.00"
946
+ },
947
+ {
948
+ "name": "quote.url",
949
+ "description": "The quote’s pay link on your site. Private to the customer; it needs no account",
950
+ "sample": "https://shop.example.com/pay-quote?q=quote_123&t=…"
951
+ }
952
+ ],
953
+ "defaultBody": [
954
+ {
955
+ "block": "text",
956
+ "text": "{{host.businessName}} · Quote {{quote.number}}",
957
+ "variant": "eyebrow"
958
+ },
959
+ {
960
+ "block": "text",
961
+ "text": "{{quote.heading}}",
962
+ "variant": "heading"
963
+ },
964
+ {
965
+ "block": "text",
966
+ "text": "{{quote.intro}}",
967
+ "variant": "body"
968
+ },
969
+ {
970
+ "block": "text",
971
+ "text": "{{quote.message}}",
972
+ "variant": "body"
973
+ },
974
+ {
975
+ "block": "text",
976
+ "text": "Quote: {{quote.number}}\nRevision: {{quote.revision}}\nTotal: {{quote.total}}",
977
+ "variant": "details"
978
+ },
979
+ {
980
+ "block": "html",
981
+ "html": "{{quote.proofImages}}"
982
+ },
983
+ {
984
+ "block": "text",
985
+ "text": "{{quote.proofFiles}}",
986
+ "variant": "caption"
987
+ },
988
+ {
989
+ "block": "text",
990
+ "text": "{{quote.nextStep}}",
991
+ "variant": "body"
992
+ },
993
+ {
994
+ "block": "button",
995
+ "label": "{{quote.buttonLabel}}",
996
+ "href": "{{quote.url}}"
997
+ },
998
+ {
999
+ "block": "text",
1000
+ "text": "Reply to this email to reach {{host.businessName}}.",
1001
+ "variant": "caption"
1002
+ }
1003
+ ],
1004
+ "footerReason": "You’re receiving this because {{host.businessName}} prepared a quote for you."
1005
+ },
1006
+ {
1007
+ "key": "order-invoice",
1008
+ "name": "Invoice",
1009
+ "description": "Sends an invoice for an order or a quote when you choose Send invoice: your message, the invoice as a PDF and, while it is unpaid, a button to pay it on your site. A paid invoice is the customer’s record. It arrives in the same conversation as the quote’s emails.",
1010
+ "pluginId": "commerce",
1011
+ "plugin": "Commerce",
1012
+ "control": "besigner",
1013
+ "defaultSubject": "{{invoice.subject}}",
1014
+ "mergeTokens": [
1015
+ {
1016
+ "name": "invoice.subject",
1017
+ "description": "The subject typed when sending; it stays the same as the conversation it joins",
1018
+ "sample": "Invoice #1042 from Northwind Signs"
1019
+ },
1020
+ {
1021
+ "name": "invoice.number",
1022
+ "description": "The invoice number, which is the order number",
1023
+ "sample": "#1042"
1024
+ },
1025
+ {
1026
+ "name": "invoice.date",
1027
+ "description": "The date of the order or quote",
1028
+ "sample": "October 28, 2026"
1029
+ },
1030
+ {
1031
+ "name": "invoice.total",
1032
+ "description": "The invoice total; “before tax” or “before shipping” when those are added at payment",
1033
+ "sample": "$1,250.00"
1034
+ },
1035
+ {
1036
+ "name": "invoice.status",
1037
+ "description": "“Paid on …”, or what is still due",
1038
+ "sample": "Unpaid, $1,250.00 due"
1039
+ },
1040
+ {
1041
+ "name": "invoice.heading",
1042
+ "description": "“Invoice #… from …”",
1043
+ "sample": "Invoice #1042 from Northwind Signs"
1044
+ },
1045
+ {
1046
+ "name": "invoice.intro",
1047
+ "description": "One sentence on what this email is: an invoice to pay, or a paid one for the customer’s records",
1048
+ "sample": "Northwind Signs sent you an invoice for your order. The details are below, and the invoice is attached as a PDF."
1049
+ },
1050
+ {
1051
+ "name": "invoice.message",
1052
+ "description": "The message typed when sending; empty when none was typed",
1053
+ "sample": "Thanks again for your order. Here is the invoice we talked about."
1054
+ },
1055
+ {
1056
+ "name": "invoice.nextStep",
1057
+ "description": "What to do next: pay with the button, or keep a paid invoice for the records",
1058
+ "sample": "Use the button below to pay it securely by card. The button keeps working until the invoice is paid."
1059
+ },
1060
+ {
1061
+ "name": "invoice.buttonLabel",
1062
+ "description": "“Pay” with the amount; empty on a paid invoice, which leaves the button out",
1063
+ "sample": "Pay $1,250.00"
1064
+ },
1065
+ {
1066
+ "name": "invoice.url",
1067
+ "description": "The invoice’s pay link on your site. Private to the customer; it needs no account. Empty once paid",
1068
+ "sample": "https://shop.example.com/pay-quote?q=order_123&t=…"
1069
+ }
1070
+ ],
1071
+ "defaultBody": [
1072
+ {
1073
+ "block": "text",
1074
+ "text": "{{host.businessName}} · Invoice {{invoice.number}}",
1075
+ "variant": "eyebrow"
1076
+ },
1077
+ {
1078
+ "block": "text",
1079
+ "text": "{{invoice.heading}}",
1080
+ "variant": "heading"
1081
+ },
1082
+ {
1083
+ "block": "text",
1084
+ "text": "{{invoice.intro}}",
1085
+ "variant": "body"
1086
+ },
1087
+ {
1088
+ "block": "text",
1089
+ "text": "{{invoice.message}}",
1090
+ "variant": "body"
1091
+ },
1092
+ {
1093
+ "block": "text",
1094
+ "text": "Invoice: {{invoice.number}}\nDate: {{invoice.date}}\nTotal: {{invoice.total}}\nStatus: {{invoice.status}}",
1095
+ "variant": "details"
1096
+ },
1097
+ {
1098
+ "block": "text",
1099
+ "text": "{{invoice.nextStep}}",
1100
+ "variant": "body"
1101
+ },
1102
+ {
1103
+ "block": "button",
1104
+ "label": "{{invoice.buttonLabel}}",
1105
+ "href": "{{invoice.url}}"
1106
+ },
1107
+ {
1108
+ "block": "text",
1109
+ "text": "Reply to this email to reach {{host.businessName}}.",
1110
+ "variant": "caption"
1111
+ }
1112
+ ],
1113
+ "footerReason": "You’re receiving this because {{host.businessName}} sent you an invoice."
1114
+ },
794
1115
  {
795
1116
  "key": "sale-notification",
796
1117
  "name": "New sale",