@vrplatform/email 1.0.1 → 1.0.2-6253
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/build/main/components/ActionEmailTemplate.d.ts +1 -1
- package/build/main/components/ActionEmailTemplate.js +18 -14
- package/build/main/components/ActionEmailTemplate.js.map +1 -1
- package/build/main/components/Button.d.ts +1 -1
- package/build/main/components/Button.js +7 -3
- package/build/main/components/Button.js.map +1 -1
- package/build/main/components/EmailContainer.d.ts +1 -1
- package/build/main/components/EmailContainer.js +26 -21
- package/build/main/components/EmailContainer.js.map +1 -1
- package/build/main/components/index.js +18 -2
- package/build/main/components/index.js.map +1 -1
- package/build/main/components/utils/index.js +17 -1
- package/build/main/components/utils/index.js.map +1 -1
- package/build/main/components/utils/parse-email-html.js +9 -5
- package/build/main/components/utils/parse-email-html.js.map +1 -1
- package/build/main/const.js +4 -1
- package/build/main/const.js.map +1 -1
- package/build/main/extensions.js +7 -4
- package/build/main/extensions.js.map +1 -1
- package/build/main/index.js +25 -6
- package/build/main/index.js.map +1 -1
- package/build/main/templates/InviteOwnerEmailTemplate.d.ts +1 -3
- package/build/main/templates/InviteOwnerEmailTemplate.js +12 -29
- package/build/main/templates/InviteOwnerEmailTemplate.js.map +1 -1
- package/build/main/templates/InvitePmEmailTemplate.d.ts +1 -3
- package/build/main/templates/InvitePmEmailTemplate.js +12 -34
- package/build/main/templates/InvitePmEmailTemplate.js.map +1 -1
- package/build/main/templates/OwnerStatementEmailTemplate.d.ts +1 -3
- package/build/main/templates/OwnerStatementEmailTemplate.js +15 -43
- package/build/main/templates/OwnerStatementEmailTemplate.js.map +1 -1
- package/build/main/templates/TenantDeletionEmailTemplate.d.ts +2 -4
- package/build/main/templates/TenantDeletionEmailTemplate.js +15 -19
- package/build/main/templates/TenantDeletionEmailTemplate.js.map +1 -1
- package/build/main/templates/TenantSuspensionEmailTemplate.d.ts +1 -3
- package/build/main/templates/TenantSuspensionEmailTemplate.js +13 -17
- package/build/main/templates/TenantSuspensionEmailTemplate.js.map +1 -1
- package/build/main/templates/index.d.ts +0 -3
- package/build/main/templates/index.js +21 -10
- package/build/main/templates/index.js.map +1 -1
- package/build/main/theme.d.ts +1 -1
- package/build/main/theme.js +7 -3
- package/build/main/theme.js.map +1 -1
- package/build/main/types.js +2 -1
- package/build/main/types.js.map +1 -1
- package/build/main/utils/index.js +17 -1
- package/build/main/utils/index.js.map +1 -1
- package/build/main/utils/send-email.d.ts +17 -10
- package/build/main/utils/send-email.js +41 -6
- package/build/main/utils/send-email.js.map +1 -1
- package/build/module/components/ActionEmailTemplate.d.ts +1 -1
- package/build/module/components/ActionEmailTemplate.js.map +1 -1
- package/build/module/components/Button.d.ts +1 -1
- package/build/module/components/Button.js.map +1 -1
- package/build/module/components/EmailContainer.d.ts +1 -1
- package/build/module/components/EmailContainer.js +2 -1
- package/build/module/components/EmailContainer.js.map +1 -1
- package/build/module/components/index.js.map +1 -1
- package/build/module/components/utils/index.js.map +1 -1
- package/build/module/components/utils/parse-email-html.js +4 -4
- package/build/module/components/utils/parse-email-html.js.map +1 -1
- package/build/module/const.js.map +1 -1
- package/build/module/extensions.js.map +1 -1
- package/build/module/index.js.map +1 -1
- package/build/module/templates/InviteOwnerEmailTemplate.d.ts +1 -3
- package/build/module/templates/InviteOwnerEmailTemplate.js +0 -22
- package/build/module/templates/InviteOwnerEmailTemplate.js.map +1 -1
- package/build/module/templates/InvitePmEmailTemplate.d.ts +1 -3
- package/build/module/templates/InvitePmEmailTemplate.js +0 -27
- package/build/module/templates/InvitePmEmailTemplate.js.map +1 -1
- package/build/module/templates/OwnerStatementEmailTemplate.d.ts +1 -3
- package/build/module/templates/OwnerStatementEmailTemplate.js +0 -33
- package/build/module/templates/OwnerStatementEmailTemplate.js.map +1 -1
- package/build/module/templates/TenantDeletionEmailTemplate.d.ts +2 -4
- package/build/module/templates/TenantDeletionEmailTemplate.js +0 -9
- package/build/module/templates/TenantDeletionEmailTemplate.js.map +1 -1
- package/build/module/templates/TenantSuspensionEmailTemplate.d.ts +1 -3
- package/build/module/templates/TenantSuspensionEmailTemplate.js +0 -8
- package/build/module/templates/TenantSuspensionEmailTemplate.js.map +1 -1
- package/build/module/templates/index.d.ts +0 -3
- package/build/module/templates/index.js +0 -5
- package/build/module/templates/index.js.map +1 -1
- package/build/module/theme.d.ts +1 -1
- package/build/module/theme.js.map +1 -1
- package/build/module/types.js.map +1 -1
- package/build/module/utils/index.js.map +1 -1
- package/build/module/utils/send-email.d.ts +17 -10
- package/build/module/utils/send-email.js +38 -6
- package/build/module/utils/send-email.js.map +1 -1
- package/package.json +31 -31
- package/src/components/EmailContainer.tsx +2 -1
- package/src/components/utils/parse-email-html.ts +4 -7
- package/src/templates/InviteOwnerEmailTemplate.tsx +0 -34
- package/src/templates/InvitePmEmailTemplate.tsx +0 -41
- package/src/templates/OwnerStatementEmailTemplate.tsx +0 -47
- package/src/templates/TenantDeletionEmailTemplate.tsx +0 -17
- package/src/templates/TenantSuspensionEmailTemplate.tsx +0 -16
- package/src/templates/index.ts +0 -7
- package/src/theme.ts +1 -1
- package/src/utils/send-email.ts +76 -27
- package/build/main/components/utils/parse-email-html.test.d.ts +0 -1
- package/build/main/components/utils/parse-email-html.test.js +0 -59
- package/build/main/components/utils/parse-email-html.test.js.map +0 -1
- package/build/main/templates/DailyDigestEmailTemplate.d.ts +0 -11
- package/build/main/templates/DailyDigestEmailTemplate.js +0 -97
- package/build/main/templates/DailyDigestEmailTemplate.js.map +0 -1
- package/build/main/templates/OwnerStatementSummaryEmailTemplate.d.ts +0 -9
- package/build/main/templates/OwnerStatementSummaryEmailTemplate.js +0 -46
- package/build/main/templates/OwnerStatementSummaryEmailTemplate.js.map +0 -1
- package/build/main/templates/OwnerTaxStatementEmailTemplate.d.ts +0 -10
- package/build/main/templates/OwnerTaxStatementEmailTemplate.js +0 -47
- package/build/main/templates/OwnerTaxStatementEmailTemplate.js.map +0 -1
- package/build/main/tsconfig.main.tsbuildinfo +0 -1
- package/build/module/components/utils/parse-email-html.test.d.ts +0 -1
- package/build/module/components/utils/parse-email-html.test.js +0 -59
- package/build/module/components/utils/parse-email-html.test.js.map +0 -1
- package/build/module/templates/DailyDigestEmailTemplate.d.ts +0 -11
- package/build/module/templates/DailyDigestEmailTemplate.js +0 -97
- package/build/module/templates/DailyDigestEmailTemplate.js.map +0 -1
- package/build/module/templates/OwnerStatementSummaryEmailTemplate.d.ts +0 -9
- package/build/module/templates/OwnerStatementSummaryEmailTemplate.js +0 -46
- package/build/module/templates/OwnerStatementSummaryEmailTemplate.js.map +0 -1
- package/build/module/templates/OwnerTaxStatementEmailTemplate.d.ts +0 -10
- package/build/module/templates/OwnerTaxStatementEmailTemplate.js +0 -47
- package/build/module/templates/OwnerTaxStatementEmailTemplate.js.map +0 -1
- package/build/module/tsconfig.esm.tsbuildinfo +0 -1
- package/src/components/utils/parse-email-html.test.ts +0 -65
- package/src/liveblocks.d.ts +0 -88
- package/src/templates/DailyDigestEmailTemplate.tsx +0 -186
- package/src/templates/OwnerStatementSummaryEmailTemplate.tsx +0 -78
- package/src/templates/OwnerTaxStatementEmailTemplate.tsx +0 -80
package/package.json
CHANGED
|
@@ -1,53 +1,53 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vrplatform/email",
|
|
3
|
-
"version": "1.0.
|
|
4
|
-
"
|
|
3
|
+
"version": "1.0.2-6253",
|
|
4
|
+
"description": "VRTrust transactional email templates and Postmark transport",
|
|
5
5
|
"license": "ISC",
|
|
6
6
|
"main": "build/main/index.js",
|
|
7
7
|
"module": "build/module/index.js",
|
|
8
|
-
"files": [
|
|
9
|
-
"build/main",
|
|
10
|
-
"build/module",
|
|
11
|
-
"src",
|
|
12
|
-
"!**/*.spec.*",
|
|
13
|
-
"LICENSE"
|
|
14
|
-
],
|
|
15
8
|
"publishConfig": {
|
|
16
9
|
"access": "public"
|
|
17
10
|
},
|
|
11
|
+
"scripts": {
|
|
12
|
+
"pub": "bun pm version patch --no-git-tag-version && bun run npmpub",
|
|
13
|
+
"npmpub": "bun run build && bunx vrp-publish && bunx vrp-deploy --prefix npmpub",
|
|
14
|
+
"npmpub:staging": "npm publish package.tgz --tag staging",
|
|
15
|
+
"npmpub:production": "npm publish package.tgz --tag latest",
|
|
16
|
+
"npmpub:preview": "npm publish package.tgz --tag preview",
|
|
17
|
+
"build": "bun build:main && bun build:module",
|
|
18
|
+
"build:main": "tsc -b tsconfig.main.json",
|
|
19
|
+
"build:module": "tsc -b tsconfig.esm.json",
|
|
20
|
+
"tsgo": "tsc -b tsconfig.src.json tsconfig.test.json"
|
|
21
|
+
},
|
|
18
22
|
"dependencies": {
|
|
19
|
-
"@finalytic/utils": "*",
|
|
20
|
-
"@react-email/html": "0.0.9",
|
|
21
23
|
"@react-email/body": "0.0.9",
|
|
22
24
|
"@react-email/button": "0.0.16",
|
|
23
25
|
"@react-email/font": "0.0.7",
|
|
24
26
|
"@react-email/head": "0.0.10",
|
|
25
27
|
"@react-email/heading": "0.0.13",
|
|
26
28
|
"@react-email/hr": "0.0.9",
|
|
27
|
-
"@react-email/
|
|
29
|
+
"@react-email/html": "0.0.9",
|
|
28
30
|
"@react-email/img": "0.0.9",
|
|
29
|
-
"@react-email/render": "0.0.17",
|
|
30
31
|
"@react-email/preview": "0.0.10",
|
|
31
|
-
"@react-email/
|
|
32
|
+
"@react-email/render": "0.0.17",
|
|
33
|
+
"@react-email/text": "0.0.9"
|
|
32
34
|
},
|
|
33
|
-
"
|
|
34
|
-
"@
|
|
35
|
-
"
|
|
36
|
-
"@types/react": "^19.0.12",
|
|
37
|
-
"react-email": "3.0.1",
|
|
38
|
-
"typescript": "*"
|
|
35
|
+
"peerDependencies": {
|
|
36
|
+
"@vrplatform/utils": "*",
|
|
37
|
+
"react": "^19.0.0"
|
|
39
38
|
},
|
|
40
|
-
"
|
|
41
|
-
"
|
|
42
|
-
"
|
|
43
|
-
"
|
|
44
|
-
"
|
|
45
|
-
"lint": "biome check --diagnostic-level=warn .",
|
|
46
|
-
"lint:err": "biome check --diagnostic-level=error .",
|
|
47
|
-
"lint:fix": "biome check --apply-unsafe --skip-errors .",
|
|
48
|
-
"preview": "email dev --port=3001 --dir src/templates",
|
|
49
|
-
"up": "bunx npm-check-updates --dep prod,dev,optional,overrides --interactive --format group",
|
|
50
|
-
"typecheck": "tsc --noEmit"
|
|
39
|
+
"devDependencies": {
|
|
40
|
+
"@types/react": "19.2.17",
|
|
41
|
+
"@vrplatform/bin": "*",
|
|
42
|
+
"@vrplatform/utils": "*",
|
|
43
|
+
"react": "19.2.7"
|
|
51
44
|
},
|
|
45
|
+
"files": [
|
|
46
|
+
"build/main",
|
|
47
|
+
"build/module",
|
|
48
|
+
"src",
|
|
49
|
+
"!**/*.spec.*",
|
|
50
|
+
"LICENSE"
|
|
51
|
+
],
|
|
52
52
|
"typings": "build/main/index.d.ts"
|
|
53
53
|
}
|
|
@@ -6,6 +6,7 @@ import { Html } from '@react-email/html';
|
|
|
6
6
|
import { Img } from '@react-email/img';
|
|
7
7
|
import { Preview } from '@react-email/preview';
|
|
8
8
|
import { Text } from '@react-email/text';
|
|
9
|
+
import { day } from '@vrplatform/utils';
|
|
9
10
|
import type { EmailBaseProps } from '../types';
|
|
10
11
|
|
|
11
12
|
type Props = {
|
|
@@ -123,7 +124,7 @@ const Footer = () => (
|
|
|
123
124
|
color: '#737373',
|
|
124
125
|
}}
|
|
125
126
|
>
|
|
126
|
-
© {
|
|
127
|
+
© {day().year()} VRPlatform Ventures Ltd. All rights reserved.
|
|
127
128
|
</Text>
|
|
128
129
|
<Text
|
|
129
130
|
style={{
|
|
@@ -13,16 +13,13 @@ export const parseEmailHtml = (
|
|
|
13
13
|
|
|
14
14
|
return html
|
|
15
15
|
.replaceAll(
|
|
16
|
-
/<action
|
|
16
|
+
/<action-link-component><\/action-link-component>/g,
|
|
17
17
|
`<a href="${args.href}" target="_blank">${args.href}</a>`
|
|
18
18
|
)
|
|
19
|
+
.replaceAll(/<user-name-component><\/user-name-component>/g, args.userName)
|
|
19
20
|
.replaceAll(
|
|
20
|
-
/<
|
|
21
|
-
args.userName
|
|
22
|
-
)
|
|
23
|
-
.replaceAll(
|
|
24
|
-
/<listing\-name\-component><\/listing\-name\-component>/g,
|
|
21
|
+
/<listing-name-component><\/listing-name-component>/g,
|
|
25
22
|
args.listingName
|
|
26
23
|
)
|
|
27
|
-
.replaceAll(/<date
|
|
24
|
+
.replaceAll(/<date-component><\/date-component>/g, args.date);
|
|
28
25
|
};
|
|
@@ -30,37 +30,3 @@ export const getDefaultInviteOwnerEmailData = (
|
|
|
30
30
|
export const InviteOwnerEmailTemplate = (props: ActionEmailTemplateProps) => {
|
|
31
31
|
return <ActionEmailTemplate {...props} />;
|
|
32
32
|
};
|
|
33
|
-
|
|
34
|
-
const Preview = () => (
|
|
35
|
-
<ActionEmailTemplate
|
|
36
|
-
mode="send"
|
|
37
|
-
tenant={{
|
|
38
|
-
name: 'Pineapple Mountain',
|
|
39
|
-
logo: 'https://imagedelivery.net/Ftdv9WftbW1DctaiLSVfFA/fbd8c31f-478f-4eb0-74ac-c8eeb47b5000/256x256',
|
|
40
|
-
}}
|
|
41
|
-
data={getDefaultInviteOwnerEmailData('text', {
|
|
42
|
-
appName: 'VRPlatform',
|
|
43
|
-
signInLink: 'https://example.com',
|
|
44
|
-
})}
|
|
45
|
-
user={{
|
|
46
|
-
firstName: 'John',
|
|
47
|
-
}}
|
|
48
|
-
listing={undefined}
|
|
49
|
-
month={undefined}
|
|
50
|
-
themeColors={[
|
|
51
|
-
// portal.brown
|
|
52
|
-
'#9E9390',
|
|
53
|
-
'#8D7C78',
|
|
54
|
-
'#7C6964',
|
|
55
|
-
'#6E5954',
|
|
56
|
-
'#614B46',
|
|
57
|
-
'#573F39',
|
|
58
|
-
'#4E342E',
|
|
59
|
-
'#3F2D29',
|
|
60
|
-
'#332725',
|
|
61
|
-
'#2A2220',
|
|
62
|
-
]}
|
|
63
|
-
/>
|
|
64
|
-
);
|
|
65
|
-
|
|
66
|
-
export default Preview;
|
|
@@ -40,44 +40,3 @@ export const InvitePmEmailTemplate = (props: ActionEmailTemplateProps) => {
|
|
|
40
40
|
/>
|
|
41
41
|
);
|
|
42
42
|
};
|
|
43
|
-
|
|
44
|
-
const Preview = () => (
|
|
45
|
-
<ActionEmailTemplate
|
|
46
|
-
mode="send"
|
|
47
|
-
tenant={{
|
|
48
|
-
name: 'Pineapple Mountain',
|
|
49
|
-
logo: 'https://imagedelivery.net/Ftdv9WftbW1DctaiLSVfFA/fbd8c31f-478f-4eb0-74ac-c8eeb47b5000/256x256',
|
|
50
|
-
}}
|
|
51
|
-
data={{
|
|
52
|
-
bodyOne:
|
|
53
|
-
'Hello, <br /> <br /> You have been invited to join Pineapple Mountain. <br /> <br />',
|
|
54
|
-
bodyTwo:
|
|
55
|
-
'Please click the button below to accept the invitation. <br /> <br />',
|
|
56
|
-
buttonText: 'Accept Invitation',
|
|
57
|
-
header: 'Welcome to Pineapple Mountain!',
|
|
58
|
-
shortDescription: 'You have been invited to join Pineapple Mountain.',
|
|
59
|
-
href: 'https://example.com',
|
|
60
|
-
subject: 'You are invited to join Pineapple Mountain',
|
|
61
|
-
}}
|
|
62
|
-
user={{
|
|
63
|
-
firstName: 'John',
|
|
64
|
-
}}
|
|
65
|
-
listing={undefined}
|
|
66
|
-
month={undefined}
|
|
67
|
-
themeColors={[
|
|
68
|
-
// baseColor: vrp primary palette
|
|
69
|
-
'#E6F1FF',
|
|
70
|
-
'#B8D9FE',
|
|
71
|
-
'#8BC0FE',
|
|
72
|
-
'#5DA8FD',
|
|
73
|
-
'#308FFD',
|
|
74
|
-
'#0377FC',
|
|
75
|
-
'#025FCA',
|
|
76
|
-
'#024797',
|
|
77
|
-
'#012F65',
|
|
78
|
-
'#011832',
|
|
79
|
-
]}
|
|
80
|
-
/>
|
|
81
|
-
);
|
|
82
|
-
|
|
83
|
-
export default Preview;
|
|
@@ -44,50 +44,3 @@ export const OwnerStatementEmailTemplate = (
|
|
|
44
44
|
) => {
|
|
45
45
|
return <ActionEmailTemplate {...props} />;
|
|
46
46
|
};
|
|
47
|
-
|
|
48
|
-
const Preview = () => {
|
|
49
|
-
const defaultListing = '1502 Amelia Way';
|
|
50
|
-
const defaultMonth = `May ${new Date().getFullYear()}`;
|
|
51
|
-
const defaultName = 'John';
|
|
52
|
-
|
|
53
|
-
return (
|
|
54
|
-
<ActionEmailTemplate
|
|
55
|
-
mode="send"
|
|
56
|
-
tenant={{
|
|
57
|
-
name: 'Pineapple Mountain',
|
|
58
|
-
logo: 'https://imagedelivery.net/Ftdv9WftbW1DctaiLSVfFA/fbd8c31f-478f-4eb0-74ac-c8eeb47b5000/256x256',
|
|
59
|
-
}}
|
|
60
|
-
data={{
|
|
61
|
-
banner:
|
|
62
|
-
'This month there was a $1000 charge for the property. That charge was split between the two owners.',
|
|
63
|
-
...getDefaultOwnerStatementEmailData('text', {
|
|
64
|
-
appName: 'VRPlatform',
|
|
65
|
-
ownerStatementHref: 'https://example.com',
|
|
66
|
-
listingName: defaultListing,
|
|
67
|
-
month: defaultMonth,
|
|
68
|
-
userName: defaultName,
|
|
69
|
-
}),
|
|
70
|
-
}}
|
|
71
|
-
user={{
|
|
72
|
-
firstName: 'John',
|
|
73
|
-
}}
|
|
74
|
-
listing={defaultListing}
|
|
75
|
-
month={defaultMonth}
|
|
76
|
-
themeColors={[
|
|
77
|
-
// portal.brown
|
|
78
|
-
'#9E9390',
|
|
79
|
-
'#8D7C78',
|
|
80
|
-
'#7C6964',
|
|
81
|
-
'#6E5954',
|
|
82
|
-
'#614B46',
|
|
83
|
-
'#573F39',
|
|
84
|
-
'#4E342E',
|
|
85
|
-
'#3F2D29',
|
|
86
|
-
'#332725',
|
|
87
|
-
'#2A2220',
|
|
88
|
-
]}
|
|
89
|
-
/>
|
|
90
|
-
);
|
|
91
|
-
};
|
|
92
|
-
|
|
93
|
-
export default Preview;
|
|
@@ -100,20 +100,3 @@ export const TenantDeletionEmail = (
|
|
|
100
100
|
) => {
|
|
101
101
|
return <TenantDeletionEmailTemplate {...props} />;
|
|
102
102
|
};
|
|
103
|
-
|
|
104
|
-
const Preview = () => {
|
|
105
|
-
return (
|
|
106
|
-
<TenantDeletionEmailTemplate
|
|
107
|
-
mode="send"
|
|
108
|
-
tenant={{
|
|
109
|
-
name: 'Pineapple Mountain',
|
|
110
|
-
logo: undefined,
|
|
111
|
-
}}
|
|
112
|
-
user={{
|
|
113
|
-
firstName: 'John',
|
|
114
|
-
}}
|
|
115
|
-
/>
|
|
116
|
-
);
|
|
117
|
-
};
|
|
118
|
-
|
|
119
|
-
export default Preview;
|
|
@@ -84,19 +84,3 @@ export const TenantSuspensionEmailTemplate = ({
|
|
|
84
84
|
</EmailContainer>
|
|
85
85
|
);
|
|
86
86
|
};
|
|
87
|
-
|
|
88
|
-
const Preview = () => {
|
|
89
|
-
return (
|
|
90
|
-
<TenantSuspensionEmailTemplate
|
|
91
|
-
mode="send"
|
|
92
|
-
user={{
|
|
93
|
-
firstName: 'John',
|
|
94
|
-
}}
|
|
95
|
-
tenant={{
|
|
96
|
-
name: 'Demo Test Console',
|
|
97
|
-
}}
|
|
98
|
-
/>
|
|
99
|
-
);
|
|
100
|
-
};
|
|
101
|
-
|
|
102
|
-
export default Preview;
|
package/src/templates/index.ts
CHANGED
|
@@ -3,15 +3,8 @@ export * from './TenantSuspensionEmailTemplate';
|
|
|
3
3
|
export * from './TenantDeletionEmailTemplate';
|
|
4
4
|
|
|
5
5
|
// Owner Statements
|
|
6
|
-
export * from './OwnerStatementSummaryEmailTemplate';
|
|
7
6
|
export * from './OwnerStatementEmailTemplate';
|
|
8
7
|
|
|
9
|
-
// Owner Tax Statements
|
|
10
|
-
export * from './OwnerTaxStatementEmailTemplate';
|
|
11
|
-
|
|
12
8
|
// Invitations
|
|
13
9
|
export * from './InviteOwnerEmailTemplate';
|
|
14
10
|
export * from './InvitePmEmailTemplate';
|
|
15
|
-
|
|
16
|
-
// Daily Digest
|
|
17
|
-
export * from './DailyDigestEmailTemplate';
|
package/src/theme.ts
CHANGED
package/src/utils/send-email.ts
CHANGED
|
@@ -1,37 +1,86 @@
|
|
|
1
|
-
export
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
export class EmailDeliveryError extends Error {
|
|
2
|
+
constructor(
|
|
3
|
+
message: string,
|
|
4
|
+
public readonly details?: Record<string, unknown>,
|
|
5
|
+
public readonly expected = false
|
|
6
|
+
) {
|
|
7
|
+
super(message);
|
|
8
|
+
this.name = 'EmailDeliveryError';
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export async function sendEmail(
|
|
6
13
|
data: {
|
|
7
14
|
to: string;
|
|
8
15
|
subject: string;
|
|
9
16
|
text: string;
|
|
10
17
|
html: string;
|
|
11
18
|
replyTo?: string;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
19
|
+
},
|
|
20
|
+
options: {
|
|
21
|
+
fetch?: (
|
|
22
|
+
input: string | URL | Request,
|
|
23
|
+
init?: RequestInit
|
|
24
|
+
) => Promise<Response>;
|
|
25
|
+
postmarkToken?: string;
|
|
26
|
+
}
|
|
27
|
+
) {
|
|
28
|
+
if (!options.postmarkToken) {
|
|
29
|
+
throw new EmailDeliveryError('Postmark is not configured');
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
const response = await (options.fetch ?? fetch)(
|
|
33
|
+
'https://api.postmarkapp.com/email',
|
|
34
|
+
{
|
|
35
|
+
method: 'POST',
|
|
36
|
+
headers: {
|
|
37
|
+
Accept: 'application/json',
|
|
38
|
+
'Content-Type': 'application/json',
|
|
39
|
+
'X-Postmark-Server-Token': options.postmarkToken,
|
|
40
|
+
},
|
|
41
|
+
body: JSON.stringify({
|
|
42
|
+
From: 'VRPlatform <notifications@vrplatform.app>',
|
|
43
|
+
To: data.to,
|
|
44
|
+
Subject: data.subject,
|
|
45
|
+
ReplyTo: data.replyTo,
|
|
46
|
+
TextBody: data.text,
|
|
47
|
+
HtmlBody: data.html,
|
|
48
|
+
MessageStream: 'outbound',
|
|
49
|
+
}),
|
|
50
|
+
}
|
|
51
|
+
);
|
|
52
|
+
|
|
53
|
+
const providerResponse: unknown = await response.json().catch(() => ({}));
|
|
54
|
+
const providerMessage =
|
|
55
|
+
providerResponse !== null &&
|
|
56
|
+
typeof providerResponse === 'object' &&
|
|
57
|
+
'Message' in providerResponse &&
|
|
58
|
+
typeof providerResponse.Message === 'string'
|
|
59
|
+
? providerResponse.Message
|
|
60
|
+
: undefined;
|
|
31
61
|
|
|
32
62
|
if (!response.ok) {
|
|
33
|
-
|
|
63
|
+
if (
|
|
64
|
+
response.status === 422 &&
|
|
65
|
+
providerMessage?.includes('marked as inactive')
|
|
66
|
+
) {
|
|
67
|
+
throw new EmailDeliveryError(
|
|
68
|
+
'Postmark recipient is inactive',
|
|
69
|
+
{
|
|
70
|
+
providerMessage,
|
|
71
|
+
status: response.status,
|
|
72
|
+
statusText: response.statusText,
|
|
73
|
+
},
|
|
74
|
+
true
|
|
75
|
+
);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
throw new EmailDeliveryError('Postmark rejected the email', {
|
|
79
|
+
providerResponse,
|
|
80
|
+
status: response.status,
|
|
81
|
+
statusText: response.statusText,
|
|
82
|
+
});
|
|
34
83
|
}
|
|
35
84
|
|
|
36
|
-
return response;
|
|
37
|
-
}
|
|
85
|
+
return { status: response.status };
|
|
86
|
+
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import { describe, expect, it } from 'bun:test';
|
|
2
|
-
import { parseEmailHtml } from './parse-email-html';
|
|
3
|
-
describe('parseEmailHtml', () => {
|
|
4
|
-
it('should replace <action-link-component></action-link-component> with the sign-in link anchor tag', () => {
|
|
5
|
-
const html = '<div><action-link-component></action-link-component></div>';
|
|
6
|
-
const args = {
|
|
7
|
-
href: 'https://example.com/signin',
|
|
8
|
-
userName: 'John Doe',
|
|
9
|
-
date: '2023-01-01',
|
|
10
|
-
listingName: '123 Main St',
|
|
11
|
-
};
|
|
12
|
-
const result = parseEmailHtml(html, args);
|
|
13
|
-
expect(result).toBe('<div><a href="https://example.com/signin" target="_blank">https://example.com/signin</a></div>');
|
|
14
|
-
});
|
|
15
|
-
it('should replace <user-name-component></user-name-component> with the user name', () => {
|
|
16
|
-
const html = '<div>Hello <user-name-component></user-name-component>!</div>';
|
|
17
|
-
const args = {
|
|
18
|
-
href: 'https://example.com/signin',
|
|
19
|
-
userName: 'John Doe',
|
|
20
|
-
date: '2023-01-01',
|
|
21
|
-
listingName: '123 Main St',
|
|
22
|
-
};
|
|
23
|
-
const result = parseEmailHtml(html, args);
|
|
24
|
-
expect(result).toBe('<div>Hello John Doe!</div>');
|
|
25
|
-
});
|
|
26
|
-
it('should replace both <action-link-component> and <user-name-component> appropriately', () => {
|
|
27
|
-
const html = `
|
|
28
|
-
<div>
|
|
29
|
-
<action-link-component></action-link-component>
|
|
30
|
-
<user-name-component></user-name-component>
|
|
31
|
-
</div>
|
|
32
|
-
`;
|
|
33
|
-
const args = {
|
|
34
|
-
href: 'https://example.com/signin',
|
|
35
|
-
userName: 'Jane Doe',
|
|
36
|
-
date: '2023-01-01',
|
|
37
|
-
listingName: '123 Main St',
|
|
38
|
-
};
|
|
39
|
-
const result = parseEmailHtml(html, args);
|
|
40
|
-
expect(result).toBe(`
|
|
41
|
-
<div>
|
|
42
|
-
<a href="https://example.com/signin" target="_blank">https://example.com/signin</a>
|
|
43
|
-
Jane Doe
|
|
44
|
-
</div>
|
|
45
|
-
`);
|
|
46
|
-
});
|
|
47
|
-
it('should return the input HTML unchanged if there are no components to replace', () => {
|
|
48
|
-
const html = '<div>No components to replace here</div>';
|
|
49
|
-
const args = {
|
|
50
|
-
href: 'https://example.com/signin',
|
|
51
|
-
userName: 'John Doe',
|
|
52
|
-
date: '2023-01-01',
|
|
53
|
-
listingName: '123 Main St',
|
|
54
|
-
};
|
|
55
|
-
const result = parseEmailHtml(html, args);
|
|
56
|
-
expect(result).toBe('<div>No components to replace here</div>');
|
|
57
|
-
});
|
|
58
|
-
});
|
|
59
|
-
//# sourceMappingURL=parse-email-html.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"parse-email-html.test.js","sourceRoot":"src/","sources":["components/utils/parse-email-html.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;IAC9B,EAAE,CAAC,iGAAiG,EAAE,GAAG,EAAE;QACzG,MAAM,IAAI,GAAG,4DAA4D,CAAC;QAC1E,MAAM,IAAI,GAAyC;YACjD,IAAI,EAAE,4BAA4B;YAClC,QAAQ,EAAE,UAAU;YACpB,IAAI,EAAE,YAAY;YAClB,WAAW,EAAE,aAAa;SAC3B,CAAC;QACF,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC1C,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CACjB,gGAAgG,CACjG,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+EAA+E,EAAE,GAAG,EAAE;QACvF,MAAM,IAAI,GACR,+DAA+D,CAAC;QAClE,MAAM,IAAI,GAAyC;YACjD,IAAI,EAAE,4BAA4B;YAClC,QAAQ,EAAE,UAAU;YACpB,IAAI,EAAE,YAAY;YAClB,WAAW,EAAE,aAAa;SAC3B,CAAC;QACF,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC1C,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qFAAqF,EAAE,GAAG,EAAE;QAC7F,MAAM,IAAI,GAAG;;;;;KAKZ,CAAC;QACF,MAAM,IAAI,GAAyC;YACjD,IAAI,EAAE,4BAA4B;YAClC,QAAQ,EAAE,UAAU;YACpB,IAAI,EAAE,YAAY;YAClB,WAAW,EAAE,aAAa;SAC3B,CAAC;QACF,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC1C,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC;;;;;KAKnB,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8EAA8E,EAAE,GAAG,EAAE;QACtF,MAAM,IAAI,GAAG,0CAA0C,CAAC;QACxD,MAAM,IAAI,GAAyC;YACjD,IAAI,EAAE,4BAA4B;YAClC,QAAQ,EAAE,UAAU;YACpB,IAAI,EAAE,YAAY;YAClB,WAAW,EAAE,aAAa;SAC3B,CAAC;QACF,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC1C,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;IAClE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import type { EmailBaseProps } from '../types';
|
|
2
|
-
type NotificationKey = keyof Liveblocks['ActivitiesData'];
|
|
3
|
-
export type DailyDigestEmailTemplateProps = {
|
|
4
|
-
mode: EmailBaseProps['mode'];
|
|
5
|
-
unreadNotifications: Record<NotificationKey, {
|
|
6
|
-
id: string;
|
|
7
|
-
name: string;
|
|
8
|
-
}[]>;
|
|
9
|
-
};
|
|
10
|
-
export declare const DailyDigestEmailTemplate: ({ mode, unreadNotifications, }: DailyDigestEmailTemplateProps) => import("react/jsx-runtime").JSX.Element;
|
|
11
|
-
export {};
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { Heading } from '@react-email/heading';
|
|
3
|
-
import { Link } from '@react-email/link';
|
|
4
|
-
import { Text } from '@react-email/text';
|
|
5
|
-
import { EmailContainer } from '../components';
|
|
6
|
-
import { Button } from '../components/Button';
|
|
7
|
-
const THEME_VRP = [
|
|
8
|
-
// baseColor: #012F64
|
|
9
|
-
'#E6F1FF',
|
|
10
|
-
'#B8D9FE',
|
|
11
|
-
'#8BC0FE',
|
|
12
|
-
'#5DA8FD',
|
|
13
|
-
'#308FFD',
|
|
14
|
-
'#0377FC',
|
|
15
|
-
'#025FCA',
|
|
16
|
-
'#024797',
|
|
17
|
-
'#012F65',
|
|
18
|
-
'#011832',
|
|
19
|
-
];
|
|
20
|
-
const THEME_NEUTRAL = [
|
|
21
|
-
'#fafafa',
|
|
22
|
-
'#f5f5f5',
|
|
23
|
-
'#e5e5e5',
|
|
24
|
-
'#d4d4d4',
|
|
25
|
-
'#a3a3a3',
|
|
26
|
-
'#737373',
|
|
27
|
-
'#525252',
|
|
28
|
-
'#404040',
|
|
29
|
-
'#262626',
|
|
30
|
-
'#171717',
|
|
31
|
-
// "#0a0a0a"
|
|
32
|
-
];
|
|
33
|
-
const NOTIFICATION_ORDER = {
|
|
34
|
-
$inviteOwnerAccepted: {
|
|
35
|
-
title: 'Owners invitations',
|
|
36
|
-
text: 'accepted invite',
|
|
37
|
-
order: 1,
|
|
38
|
-
},
|
|
39
|
-
$inviteTeamMemberAccepted: {
|
|
40
|
-
title: 'Team member invitations',
|
|
41
|
-
text: 'accepted invite',
|
|
42
|
-
order: 2,
|
|
43
|
-
},
|
|
44
|
-
$ownerStatementInReview: {
|
|
45
|
-
title: 'Owner statements ready for review',
|
|
46
|
-
text: 'is ready for review',
|
|
47
|
-
order: 3,
|
|
48
|
-
},
|
|
49
|
-
$ownerStatementPublished: {
|
|
50
|
-
title: 'Owner statements were published',
|
|
51
|
-
text: 'was published to owner portal',
|
|
52
|
-
order: 4,
|
|
53
|
-
},
|
|
54
|
-
$1099StatementPublished: {
|
|
55
|
-
title: '1099 tax statements were published',
|
|
56
|
-
text: 'was finalized and published',
|
|
57
|
-
order: 5,
|
|
58
|
-
},
|
|
59
|
-
};
|
|
60
|
-
export const DailyDigestEmailTemplate = ({ mode, unreadNotifications, }) => {
|
|
61
|
-
const total = Object.values(unreadNotifications).reduce((acc, curr) => acc + curr.length, 0);
|
|
62
|
-
const emailTitle = `You have ${total} unread notification${total > 1 ? 's' : ''}`;
|
|
63
|
-
const link = 'https://portal.vrplatform.app/dashboard/inbox';
|
|
64
|
-
return (_jsxs(EmailContainer, { title: emailTitle, shortDescription: "Login to VRPlatform now to check your team's activity!", tenant: {
|
|
65
|
-
logo: undefined,
|
|
66
|
-
}, mode: mode, children: [_jsx(Heading, { style: {
|
|
67
|
-
fontSize: 26,
|
|
68
|
-
fontWeight: 600,
|
|
69
|
-
marginBottom: '50px',
|
|
70
|
-
}, children: emailTitle }), Object.entries(unreadNotifications)
|
|
71
|
-
.sort(([aKey], [bKey]) => {
|
|
72
|
-
const a = NOTIFICATION_ORDER[aKey]?.order ?? 0;
|
|
73
|
-
const b = NOTIFICATION_ORDER[bKey]?.order ?? 0;
|
|
74
|
-
return a - b;
|
|
75
|
-
})
|
|
76
|
-
.map(([key, notifications]) => {
|
|
77
|
-
const data = NOTIFICATION_ORDER[key];
|
|
78
|
-
if (notifications.length === 0 || !data)
|
|
79
|
-
return null;
|
|
80
|
-
return (_jsxs("div", { style: {
|
|
81
|
-
marginBottom: '42px',
|
|
82
|
-
}, children: [_jsx(Text, { style: {
|
|
83
|
-
color: THEME_NEUTRAL[5],
|
|
84
|
-
}, children: data.title }), notifications.map((not) => (_jsxs(Text, { style: { color: THEME_NEUTRAL[5] }, children: [_jsx("span", { style: {
|
|
85
|
-
fontWeight: 800,
|
|
86
|
-
color: '#000',
|
|
87
|
-
}, children: not.name }), ' ', data.text] }, not.id)))] }, key));
|
|
88
|
-
}), _jsx(Button, { href: link, mode: mode, "data-testid": "accept-invite-button", label: 'Go to VRPlatform', themeColors: THEME_VRP, style: {
|
|
89
|
-
marginTop: '50px',
|
|
90
|
-
marginBottom: '50px',
|
|
91
|
-
} }), _jsx(Text, { children: "Best, VRPlatform" }), _jsxs(Text, { children: ["If you have any trouble with the button, you can copy and paste the link below into your browser:", ' ', _jsx(Link, { href: link, style: {
|
|
92
|
-
display: 'inline',
|
|
93
|
-
wordBreak: 'break-all',
|
|
94
|
-
color: THEME_VRP[7],
|
|
95
|
-
}, children: link })] })] }));
|
|
96
|
-
};
|
|
97
|
-
//# sourceMappingURL=DailyDigestEmailTemplate.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DailyDigestEmailTemplate.js","sourceRoot":"src/","sources":["templates/DailyDigestEmailTemplate.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { type ActionEmailData, type ActionEmailTemplateProps } from '../components';
|
|
2
|
-
export declare const getDefaultOwnerStatementSummaryEmailData: (mode: "tag" | "text", args: {
|
|
3
|
-
appName: string;
|
|
4
|
-
ownerStatementHref: string;
|
|
5
|
-
userName: string;
|
|
6
|
-
}) => ActionEmailData;
|
|
7
|
-
export declare const OwnerStatementSummaryEmailTemplate: (props: ActionEmailTemplateProps) => import("react/jsx-runtime").JSX.Element;
|
|
8
|
-
declare const Preview: () => import("react/jsx-runtime").JSX.Element;
|
|
9
|
-
export default Preview;
|