@metorial-services/relay-client 1.0.0 → 1.0.2

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.
@@ -10,103 +10,125 @@ export declare let createRelayClient: (o: ClientOpts & {
10
10
  name: string;
11
11
  };
12
12
  }) => {
13
- sender: {
14
- get: (arg0: Omit<import("@lowerdeck/validation/dist/validators").UndefinedIsOptional<{
15
- senderId: string;
16
- }>, "senderId">, opts?: {
17
- headers?: Record<string, string>;
18
- query?: Record<string, string>;
19
- } | undefined) => Promise<{
20
- object: string;
21
- id: string;
22
- identifier: string;
23
- name: string;
24
- createdAt: Date;
25
- }>;
26
- upsert: (arg0: Omit<import("@lowerdeck/validation/dist/validators").UndefinedIsOptional<{
27
- name: string;
28
- identifier: string;
29
- }>, "senderId">, opts?: {
30
- headers?: Record<string, string>;
31
- query?: Record<string, string>;
32
- } | undefined) => Promise<{
33
- object: string;
34
- id: string;
35
- identifier: string;
36
- name: string;
37
- createdAt: Date;
38
- }>;
39
- };
40
- emailIdentity: {
41
- get: (arg0: Omit<import("@lowerdeck/validation/dist/validators").UndefinedIsOptional<{
42
- senderId: string;
43
- emailIdentityId: string;
44
- }>, "senderId">, opts?: {
45
- headers?: Record<string, string>;
46
- query?: Record<string, string>;
47
- } | undefined) => Promise<{
48
- object: string;
49
- id: string;
50
- type: "email";
51
- slug: string;
52
- fromName: string;
53
- fromEmail: string;
54
- senderOid: number;
55
- createdAt: Date;
56
- }>;
57
- upsert: (arg0: Omit<import("@lowerdeck/validation/dist/validators").UndefinedIsOptional<{
58
- senderId: string;
59
- name: string;
60
- email: string;
61
- }>, "senderId">, opts?: {
62
- headers?: Record<string, string>;
63
- query?: Record<string, string>;
64
- } | undefined) => Promise<{
65
- object: string;
66
- id: string;
67
- type: "email";
68
- slug: string;
69
- fromName: string;
70
- fromEmail: string;
71
- senderOid: number;
72
- createdAt: Date;
73
- }>;
74
- };
75
- email: {
76
- send: (arg0: Omit<import("@lowerdeck/validation/dist/validators").UndefinedIsOptional<{
77
- senderId: string;
78
- emailIdentityId: string;
79
- type: "email" | undefined;
80
- to: string[];
81
- template: Record<string, any>;
82
- content: import("@lowerdeck/validation/dist/validators").UndefinedIsOptional<{
83
- subject: string;
84
- html: string;
85
- text: string;
13
+ client: import("@lowerdeck/rpc-server").InferClient<{
14
+ emailIdentity: {
15
+ upsert: import("@lowerdeck/rpc-server").Handler<import("@lowerdeck/validation/dist/validators").UndefinedIsOptional<{
16
+ senderId: string;
17
+ name: string;
18
+ email: string;
19
+ }>, {
20
+ object: string;
21
+ id: string;
22
+ type: "email";
23
+ slug: string;
24
+ fromName: string;
25
+ fromEmail: string;
26
+ senderOid: number;
27
+ createdAt: Date;
28
+ }, {
29
+ sender: {} & {
30
+ name: string;
31
+ oid: number;
32
+ id: string;
33
+ identifier: string;
34
+ createdAt: Date;
35
+ };
86
36
  }>;
87
- }>, "senderId">, opts?: {
88
- headers?: Record<string, string>;
89
- query?: Record<string, string>;
90
- } | undefined) => Promise<{
91
- id: string;
92
- }>;
93
- };
94
- send: (arg0: Omit<import("@lowerdeck/validation/dist/validators").UndefinedIsOptional<{
95
- senderId: string;
96
- emailIdentityId: string;
97
- type: "email" | undefined;
98
- to: string[];
99
- template: Record<string, any>;
100
- content: import("@lowerdeck/validation/dist/validators").UndefinedIsOptional<{
101
- subject: string;
102
- html: string;
103
- text: string;
104
- }>;
105
- }>, "senderId">, opts?: {
106
- headers?: Record<string, string>;
107
- query?: Record<string, string>;
108
- } | undefined) => Promise<{
109
- id: string;
37
+ get: import("@lowerdeck/rpc-server").Handler<import("@lowerdeck/validation/dist/validators").UndefinedIsOptional<{
38
+ senderId: string;
39
+ emailIdentityId: string;
40
+ }>, {
41
+ object: string;
42
+ id: string;
43
+ type: "email";
44
+ slug: string;
45
+ fromName: string;
46
+ fromEmail: string;
47
+ senderOid: number;
48
+ createdAt: Date;
49
+ }, {
50
+ sender: {} & {
51
+ name: string;
52
+ oid: number;
53
+ id: string;
54
+ identifier: string;
55
+ createdAt: Date;
56
+ };
57
+ emailIdentity: {
58
+ sender: {
59
+ name: string;
60
+ oid: number;
61
+ id: string;
62
+ identifier: string;
63
+ createdAt: Date;
64
+ };
65
+ } & {
66
+ oid: number;
67
+ id: string;
68
+ createdAt: Date;
69
+ type: import("../../../service/prisma/generated/enums").EmailIdentityType;
70
+ slug: string;
71
+ fromName: string;
72
+ fromEmail: string;
73
+ subjectMarker: string | null;
74
+ senderOid: number;
75
+ updatedAt: Date;
76
+ };
77
+ }>;
78
+ };
79
+ sender: {
80
+ upsert: import("@lowerdeck/rpc-server").Handler<import("@lowerdeck/validation/dist/validators").UndefinedIsOptional<{
81
+ name: string;
82
+ identifier: string;
83
+ }>, {
84
+ object: string;
85
+ id: string;
86
+ identifier: string;
87
+ name: string;
88
+ createdAt: Date;
89
+ }, {}>;
90
+ get: import("@lowerdeck/rpc-server").Handler<import("@lowerdeck/validation/dist/validators").UndefinedIsOptional<{
91
+ senderId: string;
92
+ }>, {
93
+ object: string;
94
+ id: string;
95
+ identifier: string;
96
+ name: string;
97
+ createdAt: Date;
98
+ }, {
99
+ sender: {} & {
100
+ name: string;
101
+ oid: number;
102
+ id: string;
103
+ identifier: string;
104
+ createdAt: Date;
105
+ };
106
+ }>;
107
+ };
108
+ email: {
109
+ send: import("@lowerdeck/rpc-server").Handler<import("@lowerdeck/validation/dist/validators").UndefinedIsOptional<{
110
+ senderId: string;
111
+ emailIdentityId: string;
112
+ type: "email" | undefined;
113
+ to: string[];
114
+ template: Record<string, any>;
115
+ content: import("@lowerdeck/validation/dist/validators").UndefinedIsOptional<{
116
+ subject: string;
117
+ html: string;
118
+ text: string;
119
+ }>;
120
+ }>, {
121
+ id: string;
122
+ }, {
123
+ sender: {} & {
124
+ name: string;
125
+ oid: number;
126
+ id: string;
127
+ identifier: string;
128
+ createdAt: Date;
129
+ };
130
+ }>;
131
+ };
110
132
  }>;
111
133
  createTemplate<Data>(template: ITemplate<Data>, identity: EmailIdentity | Promise<EmailIdentity>): {
112
134
  send: (i: {
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,cAAc,aAAa,CAAC;AAE5B,KAAK,UAAU,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AAErD,KAAK,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAE9E,eAAO,IAAI,iBAAiB,GAC1B,GAAG,UAAU,GAAG;IACd,MAAM,EAAE;QACN,UAAU,EAAE,MAAM,CAAC;QACnB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBA8BgB,IAAI,YACP,SAAS,CAAC,IAAI,CAAC,YACf,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;kBAG9B;YAAE,IAAI,EAAE,IAAI,CAAC;YAAC,EAAE,EAAE,MAAM,EAAE,CAAA;SAAE;;;;CAsBnD,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,cAAc,aAAa,CAAC;AAE5B,KAAK,UAAU,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;AAErD,KAAK,aAAa,GAAG,OAAO,CAAC,UAAU,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAE9E,eAAO,IAAI,iBAAiB,GAC1B,GAAG,UAAU,GAAG;IACd,MAAM,EAAE;QACN,UAAU,EAAE,MAAM,CAAC;QACnB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAmBgB,IAAI,YACP,SAAS,CAAC,IAAI,CAAC,YACf,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;kBAG9B;YAAE,IAAI,EAAE,IAAI,CAAC;YAAC,EAAE,EAAE,MAAM,EAAE,CAAA;SAAE;;;;CAsBnD,CAAC"}
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- var e=require("@lowerdeck/rpc-client"),t=require("react/jsx-runtime"),n=require("@react-email/components");function r(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var i=/*#__PURE__*/r(require("react"));function s(){return s=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},s.apply(null,arguments)}var o={padding:"27px 0 27px",textAlign:"center"},a={backgroundColor:"#000000",borderRadius:"7px",fontWeight:"600",color:"#fff",fontSize:"15px",textDecoration:"none",textAlign:"center",display:"block"},l={},c={backgroundColor:"#ffffff",margin:"0 auto",fontFamily:"-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif"},d={maxWidth:"600px",margin:"0 auto"},u={marginTop:"25px"},x={fontSize:"12px",color:"#777"},p={margin:"20px 0px",border:"none",borderBottom:"1px solid #ddd",background:"none"},f=function(e){var r=e.children,i=e.preview;return t.jsxs(n.Html,{children:[t.jsx(n.Head,{}),i&&t.jsx(n.Preview,{children:i}),t.jsx(n.Body,{style:c,children:t.jsxs(n.Container,{style:d,children:[t.jsx(n.Section,{style:u,children:t.jsx(n.Img,{src:"https://cdn.metorial.com/2025-06-13--14-59-55/logos/metorial/primary_logo_text/resized-100-w881-h256.png",height:"30",alt:"Metorial"})}),r,t.jsx(n.Hr,{style:p}),t.jsx(n.Section,{children:"enterprise"==process.env.METORIAL_SOURCE?t.jsx(n.Text,{style:x,children:"Sent by Metorial 💌. If you have any questions, feel free to contact us. If you need to reference this message use this ID: EMAIL_ID."}):t.jsxs(n.Text,{style:x,children:["Sent by a self hosted instance of ",t.jsx("a",{href:"https://metorial.com",children:"Metorial"}),". Contact the administrator of this instance if you have any questions."]})})]})})]})};exports.Button=function(e){var r=e.href,i=e.children;return t.jsx(n.Section,{style:o,children:t.jsx(n.Button,{style:s({},a,{padding:"12px 18px"}),href:r,children:i})})},exports.Code=function(e){var r=e.code,i=r.slice(0,3),s=r.slice(3,6);return t.jsx(n.Section,{style:{background:"#fff",border:"1px solid #ddd",borderRadius:"8px",margin:"20px 0px",padding:"6px 15px"},children:t.jsxs(n.Text,{style:{fontSize:"20px",textAlign:"center",verticalAlign:"middle"},children:[t.jsx("span",{children:i}),t.jsx("span",{style:{margin:"0 5px",color:"#aaa"},children:"-"}),t.jsx("span",{children:s})]})})},exports.DataList=function(e){return t.jsx(n.Section,{style:l,children:e.items.map(function(e,r){var i=e.value;return t.jsx(n.Row,{children:t.jsxs(n.Column,{style:{padding:"10px 0px"},children:[t.jsxs(n.Text,{style:{fontSize:14,fontWeight:"bold",padding:"3px 0px",margin:0},children:[e.label,":"," "]}),t.jsx(n.Text,{style:{fontSize:14,padding:"3px 0px",margin:0},children:i})]})},r)})})},exports.Layout=function(e){var r=e.title,o=e.description,a=e.children,l=e.style;return t.jsxs(i.default.Fragment,{children:[t.jsx(n.Text,{style:s({fontFamily:"sans-serif",fontSize:20,fontWeight:"bold",marginBottom:10},l),children:r}),o&&t.jsx(n.Text,{style:s({fontFamily:"sans-serif",fontSize:16,marginBottom:20},l),children:o}),a]})},exports.Text=function(e){var r=e.children;return t.jsx(n.Text,{style:s({fontFamily:"sans-serif",fontSize:14},e.style),children:r})},exports.Wrapper=f,exports.createEmail=function(e){var r=e.subject,i=t.jsx(f,{preview:e.preview,children:e.content});return{subject:r,html:n.render(i,{plainText:!1}),text:n.render(i,{plainText:!0})}},exports.createRelayClient=function(t){var n=e.createClient(t),r=n.sender.upsert({identifier:t.sender.identifier,name:t.sender.name}),i=function(e){return function(t){try{var n=arguments;return Promise.resolve(r).then(function(r){return Promise.resolve(e.apply(void 0,[s({},t,{senderId:r.id})].concat([].slice.call(n,1))))})}catch(e){return Promise.reject(e)}}};return{sender:{get:i(n.sender.get),upsert:i(n.sender.upsert)},emailIdentity:{get:i(n.emailIdentity.get),upsert:i(n.emailIdentity.upsert)},email:{send:i(n.email.send)},send:i(n.email.send),createTemplate:function(e,t){return{send:function(i){try{return Promise.resolve(e.render(i.data)).then(function(e){return Promise.resolve(r).then(function(r){var s=n.email,o=s.send,a=i.data,l=i.to;return Promise.resolve(t).then(function(t){var n=r.id,i=t.id,c=e.subject;return Promise.resolve(e.html).then(function(t){return Promise.resolve(e.text).then(function(e){return Promise.resolve(o.call(s,{type:"email",to:l,template:a,emailIdentityId:i,senderId:n,content:{subject:c,html:t,text:e}}))})})})})})}catch(e){return Promise.reject(e)}}}}}},exports.createTemplate=function(e){return e};
1
+ var e=require("@lowerdeck/rpc-client"),t=require("react/jsx-runtime"),n=require("@react-email/components");function r(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var i=/*#__PURE__*/r(require("react"));function o(){return o=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},o.apply(null,arguments)}var s={padding:"27px 0 27px",textAlign:"center"},a={backgroundColor:"#000000",borderRadius:"7px",fontWeight:"600",color:"#fff",fontSize:"15px",textDecoration:"none",textAlign:"center",display:"block"},l={},c={backgroundColor:"#ffffff",margin:"0 auto",fontFamily:"-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif"},d={maxWidth:"600px",margin:"0 auto"},x={marginTop:"25px"},u={fontSize:"12px",color:"#777"},p={margin:"20px 0px",border:"none",borderBottom:"1px solid #ddd",background:"none"},f=function(e){var r=e.children,i=e.preview;return t.jsxs(n.Html,{children:[t.jsx(n.Head,{}),i&&t.jsx(n.Preview,{children:i}),t.jsx(n.Body,{style:c,children:t.jsxs(n.Container,{style:d,children:[t.jsx(n.Section,{style:x,children:t.jsx(n.Img,{src:"https://cdn.metorial.com/2025-06-13--14-59-55/logos/metorial/primary_logo_text/resized-100-w881-h256.png",height:"30",alt:"Metorial"})}),r,t.jsx(n.Hr,{style:p}),t.jsx(n.Section,{children:"enterprise"==process.env.METORIAL_SOURCE?t.jsx(n.Text,{style:u,children:"Sent by Metorial 💌. If you have any questions, feel free to contact us. If you need to reference this message use this ID: EMAIL_ID."}):t.jsxs(n.Text,{style:u,children:["Sent by a self hosted instance of ",t.jsx("a",{href:"https://metorial.com",children:"Metorial"}),". Contact the administrator of this instance if you have any questions."]})})]})})]})};exports.Button=function(e){var r=e.href,i=e.children;return t.jsx(n.Section,{style:s,children:t.jsx(n.Button,{style:o({},a,{padding:"12px 18px"}),href:r,children:i})})},exports.Code=function(e){var r=e.code,i=r.slice(0,3),o=r.slice(3,6);return t.jsx(n.Section,{style:{background:"#fff",border:"1px solid #ddd",borderRadius:"8px",margin:"20px 0px",padding:"6px 15px"},children:t.jsxs(n.Text,{style:{fontSize:"20px",textAlign:"center",verticalAlign:"middle"},children:[t.jsx("span",{children:i}),t.jsx("span",{style:{margin:"0 5px",color:"#aaa"},children:"-"}),t.jsx("span",{children:o})]})})},exports.DataList=function(e){return t.jsx(n.Section,{style:l,children:e.items.map(function(e,r){var i=e.value;return t.jsx(n.Row,{children:t.jsxs(n.Column,{style:{padding:"10px 0px"},children:[t.jsxs(n.Text,{style:{fontSize:14,fontWeight:"bold",padding:"3px 0px",margin:0},children:[e.label,":"," "]}),t.jsx(n.Text,{style:{fontSize:14,padding:"3px 0px",margin:0},children:i})]})},r)})})},exports.Layout=function(e){var r=e.title,s=e.description,a=e.children,l=e.style;return t.jsxs(i.default.Fragment,{children:[t.jsx(n.Text,{style:o({fontFamily:"sans-serif",fontSize:20,fontWeight:"bold",marginBottom:10},l),children:r}),s&&t.jsx(n.Text,{style:o({fontFamily:"sans-serif",fontSize:16,marginBottom:20},l),children:s}),a]})},exports.Text=function(e){var r=e.children;return t.jsx(n.Text,{style:o({fontFamily:"sans-serif",fontSize:14},e.style),children:r})},exports.Wrapper=f,exports.createEmail=function(e){var r=e.subject,i=t.jsx(f,{preview:e.preview,children:e.content});return{subject:r,html:n.render(i,{plainText:!1}),text:n.render(i,{plainText:!0})}},exports.createRelayClient=function(t){var n=e.createClient(t),r=n.sender.upsert({identifier:t.sender.identifier,name:t.sender.name});return{client:n,createTemplate:function(e,t){return{send:function(i){try{return Promise.resolve(e.render(i.data)).then(function(e){return Promise.resolve(r).then(function(r){var o=n.email,s=o.send,a=i.data,l=i.to;return Promise.resolve(t).then(function(t){var n=r.id,i=t.id,c=e.subject;return Promise.resolve(e.html).then(function(t){return Promise.resolve(e.text).then(function(e){return Promise.resolve(s.call(o,{type:"email",to:l,template:a,emailIdentityId:i,senderId:n,content:{subject:c,html:t,text:e}}))})})})})})}catch(e){return Promise.reject(e)}}}}}},exports.createTemplate=function(e){return e};
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../src/templates/components/button.tsx","../src/templates/components/dataList.tsx","../src/templates/components/wrapper.tsx","../src/templates/components/code.tsx","../src/templates/components/layout.tsx","../src/templates/components/text.tsx","../src/templates/lib/email.tsx","../src/index.ts","../src/templates/template.ts"],"sourcesContent":["import { Button as EmailButton, Section } from '@react-email/components';\nimport React from 'react';\n\nlet buttonContainer = {\n padding: '27px 0 27px',\n textAlign: 'center' as const\n};\n\nlet button = {\n backgroundColor: '#000000',\n borderRadius: '7px',\n fontWeight: '600',\n color: '#fff',\n fontSize: '15px',\n textDecoration: 'none',\n textAlign: 'center' as const,\n display: 'block'\n};\n\nexport let Button = ({ href, children }: { href: string; children: React.ReactNode }) => {\n return (\n <Section style={buttonContainer}>\n <EmailButton style={{ ...button, padding: '12px 18px' }} href={href}>\n {children as any}\n </EmailButton>\n </Section>\n );\n};\n","import { Column, Row, Section, Text } from '@react-email/components';\n\nlet container = {\n // background: '#efefef',\n // border: '1px solid #ccc'\n};\n\nexport let DataList = ({ items }: { items: { label: string; value: string }[] }) => {\n return (\n <Section style={container}>\n {items.map(({ label, value }, i) => (\n <Row key={i}>\n <Column style={{ padding: '10px 0px' }}>\n <Text style={{ fontSize: 14, fontWeight: 'bold', padding: '3px 0px', margin: 0 }}>\n {label}:{' '}\n </Text>\n <Text style={{ fontSize: 14, padding: '3px 0px', margin: 0 }}>{value}</Text>\n </Column>\n </Row>\n ))}\n </Section>\n );\n};\n","import {\n Body,\n Container,\n Head,\n Hr,\n Html,\n Img,\n Preview,\n Section,\n Text\n} from '@react-email/components';\nimport React from 'react';\n\nlet main = {\n backgroundColor: '#ffffff',\n margin: '0 auto',\n fontFamily:\n \"-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif\"\n};\n\nlet container = {\n maxWidth: '600px',\n margin: '0 auto'\n};\n\nlet logoContainer = {\n marginTop: '25px'\n};\n\nlet footerText = {\n fontSize: '12px',\n color: '#777'\n};\n\nlet hr = {\n margin: '20px 0px',\n border: 'none',\n borderBottom: '1px solid #ddd',\n background: 'none'\n};\n\nexport let Wrapper = ({\n children,\n preview\n}: {\n children?: React.ReactNode;\n preview?: string;\n}) => {\n return (\n <Html>\n <Head />\n\n {preview && <Preview>{preview}</Preview>}\n\n <Body style={main}>\n <Container style={container}>\n <Section style={logoContainer}>\n <Img\n src=\"https://cdn.metorial.com/2025-06-13--14-59-55/logos/metorial/primary_logo_text/resized-100-w881-h256.png\"\n height=\"30\"\n alt=\"Metorial\"\n />\n </Section>\n\n {children}\n\n <Hr style={hr} />\n\n <Section>\n {process.env.METORIAL_SOURCE == 'enterprise' ? (\n <Text style={footerText}>\n Sent by Metorial 💌. If you have any questions, feel free to contact us. If you\n need to reference this message use this ID: EMAIL_ID.\n </Text>\n ) : (\n <Text style={footerText}>\n Sent by a self hosted instance of <a href=\"https://metorial.com\">Metorial</a>.\n Contact the administrator of this instance if you have any questions.\n </Text>\n )}\n </Section>\n </Container>\n </Body>\n </Html>\n );\n};\n","import { Section, Text } from '@react-email/components';\n\nexport let Code = ({ code }: { code: string }) => {\n let first3 = code.slice(0, 3);\n let last3 = code.slice(3, 6);\n\n return (\n <Section\n style={{\n background: '#fff',\n border: '1px solid #ddd',\n borderRadius: '8px',\n margin: '20px 0px',\n padding: '6px 15px'\n }}\n >\n <Text\n style={{\n fontSize: '20px',\n textAlign: 'center',\n verticalAlign: 'middle'\n }}\n >\n <span>{first3}</span>\n <span style={{ margin: '0 5px', color: '#aaa' }}>-</span>\n <span>{last3}</span>\n </Text>\n </Section>\n );\n};\n","import { Text as EmailText } from '@react-email/components';\nimport React from 'react';\n\nexport let Layout = ({\n title,\n description,\n children,\n style\n}: {\n title: React.ReactNode;\n description?: React.ReactNode;\n children: React.ReactNode;\n style?: React.CSSProperties;\n}) => {\n return (\n <React.Fragment>\n <EmailText\n style={{\n fontFamily: 'sans-serif',\n fontSize: 20,\n fontWeight: 'bold',\n marginBottom: 10,\n ...style\n }}\n >\n {title}\n </EmailText>\n\n {description && (\n <EmailText\n style={{\n fontFamily: 'sans-serif',\n fontSize: 16,\n marginBottom: 20,\n ...style\n }}\n >\n {description}\n </EmailText>\n )}\n\n {children}\n </React.Fragment>\n );\n};\n","import { Text as EmailText } from '@react-email/components';\nimport React from 'react';\n\nexport let Text = ({\n children,\n style\n}: {\n children: React.ReactNode;\n style?: React.CSSProperties;\n}) => {\n return (\n <EmailText\n style={{\n fontFamily: 'sans-serif',\n fontSize: 14,\n ...style\n }}\n >\n {children}\n </EmailText>\n );\n};\n","import { render } from '@react-email/components';\nimport React from 'react';\nimport { Wrapper } from '../components/wrapper';\n\nexport interface IEmail {\n subject: string;\n html: string | Promise<string>;\n text: string | Promise<string>;\n}\n\nexport let createEmail = ({\n content,\n preview,\n subject\n}: {\n content: React.ReactElement;\n preview?: string;\n subject: string;\n}) => {\n let inner = <Wrapper preview={preview}>{content}</Wrapper>;\n\n let html = render(inner, { plainText: false });\n let text = render(inner, { plainText: true });\n\n return {\n subject,\n html,\n text\n };\n};\n","import { createClient } from '@lowerdeck/rpc-client';\nimport type { RelayClient } from '../../../service/src/controllers';\nimport { ITemplate } from './templates';\n\nexport * from './templates';\n\ntype ClientOpts = Parameters<typeof createClient>[0];\n\ntype EmailIdentity = Awaited<ReturnType<RelayClient['emailIdentity']['get']>>;\n\nexport let createRelayClient = (\n o: ClientOpts & {\n sender: {\n identifier: string;\n name: string;\n };\n }\n) => {\n let inner = createClient<RelayClient>(o);\n\n let sender = inner.sender.upsert({\n identifier: o.sender.identifier,\n name: o.sender.name\n });\n\n let wrap =\n <Arg0, Args extends any[], R>(fn: (arg0: Arg0, ...args: Args) => Promise<R>) =>\n async (arg0: Omit<Arg0, 'senderId'>, ...args: Args) => {\n let s = await sender;\n return await fn({ ...arg0, senderId: s.id } as any, ...args);\n };\n\n return {\n sender: {\n get: wrap(inner.sender.get),\n upsert: wrap(inner.sender.upsert)\n },\n emailIdentity: {\n get: wrap(inner.emailIdentity.get),\n upsert: wrap(inner.emailIdentity.upsert)\n },\n email: {\n send: wrap(inner.email.send)\n },\n send: wrap(inner.email.send),\n\n createTemplate<Data>(\n template: ITemplate<Data>,\n identity: EmailIdentity | Promise<EmailIdentity>\n ) {\n return {\n send: async (i: { data: Data; to: string[] }) => {\n let rendered = await template.render(i.data);\n let s = await sender;\n\n return await inner.email.send({\n type: 'email',\n to: i.to,\n template: i.data as any,\n\n emailIdentityId: (await identity).id,\n senderId: s.id,\n\n content: {\n subject: rendered.subject,\n html: await rendered.html,\n text: await rendered.text\n }\n });\n }\n };\n }\n };\n};\n","import { IEmail } from './lib/email';\n\nexport interface ITemplate<Data> {\n render: (data: Data) => IEmail | Promise<IEmail>;\n}\n\nexport let createTemplate = <Data>(template: ITemplate<Data>) => template;\n"],"names":["buttonContainer","padding","textAlign","button","backgroundColor","borderRadius","fontWeight","color","fontSize","textDecoration","display","container","main","margin","fontFamily","maxWidth","logoContainer","marginTop","footerText","hr","border","borderBottom","background","Wrapper","_ref","children","preview","_jsxs","Html","_jsx","Head","Preview","jsx","Body","style","jsxs","Container","Section","Img","src","height","alt","Hr","process","env","METORIAL_SOURCE","Text","href","EmailButton","_extends","code","first3","slice","last3","verticalAlign","items","map","_ref2","i","value","Row","Column","label","title","description","React","Fragment","EmailText","marginBottom","subject","inner","content","html","render","plainText","text","o","createClient","sender","upsert","identifier","name","wrap","fn","arg0","_arguments","arguments","Promise","resolve","then","s","apply","senderId","id","concat","call","e","reject","get","emailIdentity","email","send","createTemplate","template","identity","data","rendered","_inner$email","_send","_i$data","_i$to","to","_identity","_s$id","_identity$id","_rendered$subject","_rendered$html","_rendered$text","type","emailIdentityId"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../src/templates/components/button.tsx","../src/templates/components/dataList.tsx","../src/templates/components/wrapper.tsx","../src/templates/components/code.tsx","../src/templates/components/layout.tsx","../src/templates/components/text.tsx","../src/templates/lib/email.tsx","../src/index.ts","../src/templates/template.ts"],"sourcesContent":["import { Button as EmailButton, Section } from '@react-email/components';\nimport React from 'react';\n\nlet buttonContainer = {\n padding: '27px 0 27px',\n textAlign: 'center' as const\n};\n\nlet button = {\n backgroundColor: '#000000',\n borderRadius: '7px',\n fontWeight: '600',\n color: '#fff',\n fontSize: '15px',\n textDecoration: 'none',\n textAlign: 'center' as const,\n display: 'block'\n};\n\nexport let Button = ({ href, children }: { href: string; children: React.ReactNode }) => {\n return (\n <Section style={buttonContainer}>\n <EmailButton style={{ ...button, padding: '12px 18px' }} href={href}>\n {children as any}\n </EmailButton>\n </Section>\n );\n};\n","import { Column, Row, Section, Text } from '@react-email/components';\n\nlet container = {\n // background: '#efefef',\n // border: '1px solid #ccc'\n};\n\nexport let DataList = ({ items }: { items: { label: string; value: string }[] }) => {\n return (\n <Section style={container}>\n {items.map(({ label, value }, i) => (\n <Row key={i}>\n <Column style={{ padding: '10px 0px' }}>\n <Text style={{ fontSize: 14, fontWeight: 'bold', padding: '3px 0px', margin: 0 }}>\n {label}:{' '}\n </Text>\n <Text style={{ fontSize: 14, padding: '3px 0px', margin: 0 }}>{value}</Text>\n </Column>\n </Row>\n ))}\n </Section>\n );\n};\n","import {\n Body,\n Container,\n Head,\n Hr,\n Html,\n Img,\n Preview,\n Section,\n Text\n} from '@react-email/components';\nimport React from 'react';\n\nlet main = {\n backgroundColor: '#ffffff',\n margin: '0 auto',\n fontFamily:\n \"-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif\"\n};\n\nlet container = {\n maxWidth: '600px',\n margin: '0 auto'\n};\n\nlet logoContainer = {\n marginTop: '25px'\n};\n\nlet footerText = {\n fontSize: '12px',\n color: '#777'\n};\n\nlet hr = {\n margin: '20px 0px',\n border: 'none',\n borderBottom: '1px solid #ddd',\n background: 'none'\n};\n\nexport let Wrapper = ({\n children,\n preview\n}: {\n children?: React.ReactNode;\n preview?: string;\n}) => {\n return (\n <Html>\n <Head />\n\n {preview && <Preview>{preview}</Preview>}\n\n <Body style={main}>\n <Container style={container}>\n <Section style={logoContainer}>\n <Img\n src=\"https://cdn.metorial.com/2025-06-13--14-59-55/logos/metorial/primary_logo_text/resized-100-w881-h256.png\"\n height=\"30\"\n alt=\"Metorial\"\n />\n </Section>\n\n {children}\n\n <Hr style={hr} />\n\n <Section>\n {process.env.METORIAL_SOURCE == 'enterprise' ? (\n <Text style={footerText}>\n Sent by Metorial 💌. If you have any questions, feel free to contact us. If you\n need to reference this message use this ID: EMAIL_ID.\n </Text>\n ) : (\n <Text style={footerText}>\n Sent by a self hosted instance of <a href=\"https://metorial.com\">Metorial</a>.\n Contact the administrator of this instance if you have any questions.\n </Text>\n )}\n </Section>\n </Container>\n </Body>\n </Html>\n );\n};\n","import { Section, Text } from '@react-email/components';\n\nexport let Code = ({ code }: { code: string }) => {\n let first3 = code.slice(0, 3);\n let last3 = code.slice(3, 6);\n\n return (\n <Section\n style={{\n background: '#fff',\n border: '1px solid #ddd',\n borderRadius: '8px',\n margin: '20px 0px',\n padding: '6px 15px'\n }}\n >\n <Text\n style={{\n fontSize: '20px',\n textAlign: 'center',\n verticalAlign: 'middle'\n }}\n >\n <span>{first3}</span>\n <span style={{ margin: '0 5px', color: '#aaa' }}>-</span>\n <span>{last3}</span>\n </Text>\n </Section>\n );\n};\n","import { Text as EmailText } from '@react-email/components';\nimport React from 'react';\n\nexport let Layout = ({\n title,\n description,\n children,\n style\n}: {\n title: React.ReactNode;\n description?: React.ReactNode;\n children: React.ReactNode;\n style?: React.CSSProperties;\n}) => {\n return (\n <React.Fragment>\n <EmailText\n style={{\n fontFamily: 'sans-serif',\n fontSize: 20,\n fontWeight: 'bold',\n marginBottom: 10,\n ...style\n }}\n >\n {title}\n </EmailText>\n\n {description && (\n <EmailText\n style={{\n fontFamily: 'sans-serif',\n fontSize: 16,\n marginBottom: 20,\n ...style\n }}\n >\n {description}\n </EmailText>\n )}\n\n {children}\n </React.Fragment>\n );\n};\n","import { Text as EmailText } from '@react-email/components';\nimport React from 'react';\n\nexport let Text = ({\n children,\n style\n}: {\n children: React.ReactNode;\n style?: React.CSSProperties;\n}) => {\n return (\n <EmailText\n style={{\n fontFamily: 'sans-serif',\n fontSize: 14,\n ...style\n }}\n >\n {children}\n </EmailText>\n );\n};\n","import { render } from '@react-email/components';\nimport React from 'react';\nimport { Wrapper } from '../components/wrapper';\n\nexport interface IEmail {\n subject: string;\n html: string | Promise<string>;\n text: string | Promise<string>;\n}\n\nexport let createEmail = ({\n content,\n preview,\n subject\n}: {\n content: React.ReactElement;\n preview?: string;\n subject: string;\n}) => {\n let inner = <Wrapper preview={preview}>{content}</Wrapper>;\n\n let html = render(inner, { plainText: false });\n let text = render(inner, { plainText: true });\n\n return {\n subject,\n html,\n text\n };\n};\n","import { createClient } from '@lowerdeck/rpc-client';\nimport type { RelayClient } from '../../../service/src/controllers';\nimport { ITemplate } from './templates';\n\nexport * from './templates';\n\ntype ClientOpts = Parameters<typeof createClient>[0];\n\ntype EmailIdentity = Awaited<ReturnType<RelayClient['emailIdentity']['get']>>;\n\nexport let createRelayClient = (\n o: ClientOpts & {\n sender: {\n identifier: string;\n name: string;\n };\n }\n) => {\n let inner = createClient<RelayClient>(o);\n\n let sender = inner.sender.upsert({\n identifier: o.sender.identifier,\n name: o.sender.name\n });\n\n let wrap =\n <Arg0, Args extends any[], R>(fn: (arg0: Arg0, ...args: Args) => Promise<R>) =>\n async (arg0: Omit<Arg0, 'senderId'>, ...args: Args) => {\n let s = await sender;\n return await fn({ ...arg0, senderId: s.id } as any, ...args);\n };\n\n return {\n client: inner,\n\n createTemplate<Data>(\n template: ITemplate<Data>,\n identity: EmailIdentity | Promise<EmailIdentity>\n ) {\n return {\n send: async (i: { data: Data; to: string[] }) => {\n let rendered = await template.render(i.data);\n let s = await sender;\n\n return await inner.email.send({\n type: 'email',\n to: i.to,\n template: i.data as any,\n\n emailIdentityId: (await identity).id,\n senderId: s.id,\n\n content: {\n subject: rendered.subject,\n html: await rendered.html,\n text: await rendered.text\n }\n });\n }\n };\n }\n };\n};\n","import { IEmail } from './lib/email';\n\nexport interface ITemplate<Data> {\n render: (data: Data) => IEmail | Promise<IEmail>;\n}\n\nexport let createTemplate = <Data>(template: ITemplate<Data>) => template;\n"],"names":["buttonContainer","padding","textAlign","button","backgroundColor","borderRadius","fontWeight","color","fontSize","textDecoration","display","container","main","margin","fontFamily","maxWidth","logoContainer","marginTop","footerText","hr","border","borderBottom","background","Wrapper","_ref","children","preview","_jsxs","Html","_jsx","Head","Preview","jsx","Body","style","jsxs","Container","Section","Img","src","height","alt","Hr","process","env","METORIAL_SOURCE","Text","href","EmailButton","_extends","code","first3","slice","last3","verticalAlign","items","map","_ref2","i","value","Row","Column","label","title","description","React","Fragment","EmailText","marginBottom","subject","inner","content","html","render","plainText","text","o","createClient","sender","upsert","identifier","name","client","createTemplate","template","identity","send","Promise","resolve","data","then","rendered","s","_inner$email","email","_send","_i$data","_i$to","to","_identity","_s$id","id","_identity$id","_rendered$subject","_rendered$html","_rendered$text","call","type","emailIdentityId","senderId","e","reject"],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -289,103 +289,125 @@ export declare let createRelayClient: (o: ClientOpts$1 & {
289
289
  name: string;
290
290
  };
291
291
  }) => {
292
- sender: {
293
- get: (arg0: Omit<UndefinedIsOptional<{
294
- senderId: string;
295
- }>, "senderId">, opts?: {
296
- headers?: Record<string, string>;
297
- query?: Record<string, string>;
298
- } | undefined) => Promise<{
299
- object: string;
300
- id: string;
301
- identifier: string;
302
- name: string;
303
- createdAt: Date;
304
- }>;
305
- upsert: (arg0: Omit<UndefinedIsOptional<{
306
- name: string;
307
- identifier: string;
308
- }>, "senderId">, opts?: {
309
- headers?: Record<string, string>;
310
- query?: Record<string, string>;
311
- } | undefined) => Promise<{
312
- object: string;
313
- id: string;
314
- identifier: string;
315
- name: string;
316
- createdAt: Date;
317
- }>;
318
- };
319
- emailIdentity: {
320
- get: (arg0: Omit<UndefinedIsOptional<{
321
- senderId: string;
322
- emailIdentityId: string;
323
- }>, "senderId">, opts?: {
324
- headers?: Record<string, string>;
325
- query?: Record<string, string>;
326
- } | undefined) => Promise<{
327
- object: string;
328
- id: string;
329
- type: "email";
330
- slug: string;
331
- fromName: string;
332
- fromEmail: string;
333
- senderOid: number;
334
- createdAt: Date;
335
- }>;
336
- upsert: (arg0: Omit<UndefinedIsOptional<{
337
- senderId: string;
338
- name: string;
339
- email: string;
340
- }>, "senderId">, opts?: {
341
- headers?: Record<string, string>;
342
- query?: Record<string, string>;
343
- } | undefined) => Promise<{
344
- object: string;
345
- id: string;
346
- type: "email";
347
- slug: string;
348
- fromName: string;
349
- fromEmail: string;
350
- senderOid: number;
351
- createdAt: Date;
352
- }>;
353
- };
354
- email: {
355
- send: (arg0: Omit<UndefinedIsOptional<{
356
- senderId: string;
357
- emailIdentityId: string;
358
- type: "email" | undefined;
359
- to: string[];
360
- template: Record<string, any>;
361
- content: UndefinedIsOptional<{
362
- subject: string;
363
- html: string;
364
- text: string;
292
+ client: InferClient<{
293
+ emailIdentity: {
294
+ upsert: Handler<UndefinedIsOptional<{
295
+ senderId: string;
296
+ name: string;
297
+ email: string;
298
+ }>, {
299
+ object: string;
300
+ id: string;
301
+ type: "email";
302
+ slug: string;
303
+ fromName: string;
304
+ fromEmail: string;
305
+ senderOid: number;
306
+ createdAt: Date;
307
+ }, {
308
+ sender: {} & {
309
+ name: string;
310
+ oid: number;
311
+ id: string;
312
+ createdAt: Date;
313
+ identifier: string;
314
+ };
365
315
  }>;
366
- }>, "senderId">, opts?: {
367
- headers?: Record<string, string>;
368
- query?: Record<string, string>;
369
- } | undefined) => Promise<{
370
- id: string;
371
- }>;
372
- };
373
- send: (arg0: Omit<UndefinedIsOptional<{
374
- senderId: string;
375
- emailIdentityId: string;
376
- type: "email" | undefined;
377
- to: string[];
378
- template: Record<string, any>;
379
- content: UndefinedIsOptional<{
380
- subject: string;
381
- html: string;
382
- text: string;
383
- }>;
384
- }>, "senderId">, opts?: {
385
- headers?: Record<string, string>;
386
- query?: Record<string, string>;
387
- } | undefined) => Promise<{
388
- id: string;
316
+ get: Handler<UndefinedIsOptional<{
317
+ senderId: string;
318
+ emailIdentityId: string;
319
+ }>, {
320
+ object: string;
321
+ id: string;
322
+ type: "email";
323
+ slug: string;
324
+ fromName: string;
325
+ fromEmail: string;
326
+ senderOid: number;
327
+ createdAt: Date;
328
+ }, {
329
+ sender: {} & {
330
+ name: string;
331
+ oid: number;
332
+ id: string;
333
+ createdAt: Date;
334
+ identifier: string;
335
+ };
336
+ emailIdentity: {
337
+ sender: {
338
+ name: string;
339
+ oid: number;
340
+ id: string;
341
+ createdAt: Date;
342
+ identifier: string;
343
+ };
344
+ } & {
345
+ oid: number;
346
+ id: string;
347
+ type: EmailIdentityType;
348
+ slug: string;
349
+ fromName: string;
350
+ fromEmail: string;
351
+ subjectMarker: string | null;
352
+ senderOid: number;
353
+ createdAt: Date;
354
+ updatedAt: Date;
355
+ };
356
+ }>;
357
+ };
358
+ sender: {
359
+ upsert: Handler<UndefinedIsOptional<{
360
+ name: string;
361
+ identifier: string;
362
+ }>, {
363
+ object: string;
364
+ id: string;
365
+ identifier: string;
366
+ name: string;
367
+ createdAt: Date;
368
+ }, {}>;
369
+ get: Handler<UndefinedIsOptional<{
370
+ senderId: string;
371
+ }>, {
372
+ object: string;
373
+ id: string;
374
+ identifier: string;
375
+ name: string;
376
+ createdAt: Date;
377
+ }, {
378
+ sender: {} & {
379
+ name: string;
380
+ oid: number;
381
+ id: string;
382
+ createdAt: Date;
383
+ identifier: string;
384
+ };
385
+ }>;
386
+ };
387
+ email: {
388
+ send: Handler<UndefinedIsOptional<{
389
+ senderId: string;
390
+ emailIdentityId: string;
391
+ type: "email" | undefined;
392
+ to: string[];
393
+ template: Record<string, any>;
394
+ content: UndefinedIsOptional<{
395
+ subject: string;
396
+ html: string;
397
+ text: string;
398
+ }>;
399
+ }>, {
400
+ id: string;
401
+ }, {
402
+ sender: {} & {
403
+ name: string;
404
+ oid: number;
405
+ id: string;
406
+ createdAt: Date;
407
+ identifier: string;
408
+ };
409
+ }>;
410
+ };
389
411
  }>;
390
412
  createTemplate<Data>(template: ITemplate<Data>, identity: EmailIdentity | Promise<EmailIdentity>): {
391
413
  send: (i: {
@@ -1,2 +1,2 @@
1
- import{createClient as e}from"@lowerdeck/rpc-client";import{jsx as n,jsxs as t}from"react/jsx-runtime";import{Section as r,Button as i,Text as o,Row as l,Column as a,Html as s,Head as c,Preview as d,Body as u,Container as f,Img as p,Hr as m,render as h}from"@react-email/components";import y from"react";function g(){return g=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var t=arguments[n];for(var r in t)({}).hasOwnProperty.call(t,r)&&(e[r]=t[r])}return e},g.apply(null,arguments)}var x={padding:"27px 0 27px",textAlign:"center"},v={backgroundColor:"#000000",borderRadius:"7px",fontWeight:"600",color:"#fff",fontSize:"15px",textDecoration:"none",textAlign:"center",display:"block"},b=function(e){var t=e.href,o=e.children;return n(r,{style:x,children:n(i,{style:g({},v,{padding:"12px 18px"}),href:t,children:o})})},S=function(e){var i=e.code,l=i.slice(0,3),a=i.slice(3,6);return n(r,{style:{background:"#fff",border:"1px solid #ddd",borderRadius:"8px",margin:"20px 0px",padding:"6px 15px"},children:t(o,{style:{fontSize:"20px",textAlign:"center",verticalAlign:"middle"},children:[n("span",{children:l}),n("span",{style:{margin:"0 5px",color:"#aaa"},children:"-"}),n("span",{children:a})]})})},I={},P=function(e){return n(r,{style:I,children:e.items.map(function(e,r){var i=e.value;return n(l,{children:t(a,{style:{padding:"10px 0px"},children:[t(o,{style:{fontSize:14,fontWeight:"bold",padding:"3px 0px",margin:0},children:[e.label,":"," "]}),n(o,{style:{fontSize:14,padding:"3px 0px",margin:0},children:i})]})},r)})})},j=function(e){var r=e.title,i=e.description,l=e.children,a=e.style;return t(y.Fragment,{children:[n(o,{style:g({fontFamily:"sans-serif",fontSize:20,fontWeight:"bold",marginBottom:10},a),children:r}),i&&n(o,{style:g({fontFamily:"sans-serif",fontSize:16,marginBottom:20},a),children:i}),l]})},z=function(e){var t=e.children;return n(o,{style:g({fontFamily:"sans-serif",fontSize:14},e.style),children:t})},k={backgroundColor:"#ffffff",margin:"0 auto",fontFamily:"-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif"},F={maxWidth:"600px",margin:"0 auto"},w={marginTop:"25px"},A={fontSize:"12px",color:"#777"},M={margin:"20px 0px",border:"none",borderBottom:"1px solid #ddd",background:"none"},O=function(e){var i=e.children,l=e.preview;return t(s,{children:[n(c,{}),l&&n(d,{children:l}),n(u,{style:k,children:t(f,{style:F,children:[n(r,{style:w,children:n(p,{src:"https://cdn.metorial.com/2025-06-13--14-59-55/logos/metorial/primary_logo_text/resized-100-w881-h256.png",height:"30",alt:"Metorial"})}),i,n(m,{style:M}),n(r,{children:"enterprise"==process.env.METORIAL_SOURCE?n(o,{style:A,children:"Sent by Metorial 💌. If you have any questions, feel free to contact us. If you need to reference this message use this ID: EMAIL_ID."}):t(o,{style:A,children:["Sent by a self hosted instance of ",n("a",{href:"https://metorial.com",children:"Metorial"}),". Contact the administrator of this instance if you have any questions."]})})]})})]})},T=function(e){var t=e.subject,r=n(O,{preview:e.preview,children:e.content});return{subject:t,html:h(r,{plainText:!1}),text:h(r,{plainText:!0})}},B=function(e){return e},C=function(n){var t=e(n),r=t.sender.upsert({identifier:n.sender.identifier,name:n.sender.name}),i=function(e){return function(n){try{var t=arguments;return Promise.resolve(r).then(function(r){return Promise.resolve(e.apply(void 0,[g({},n,{senderId:r.id})].concat([].slice.call(t,1))))})}catch(e){return Promise.reject(e)}}};return{sender:{get:i(t.sender.get),upsert:i(t.sender.upsert)},emailIdentity:{get:i(t.emailIdentity.get),upsert:i(t.emailIdentity.upsert)},email:{send:i(t.email.send)},send:i(t.email.send),createTemplate:function(e,n){return{send:function(i){try{return Promise.resolve(e.render(i.data)).then(function(e){return Promise.resolve(r).then(function(r){var o=t.email,l=o.send,a=i.data,s=i.to;return Promise.resolve(n).then(function(n){var t=r.id,i=n.id,c=e.subject;return Promise.resolve(e.html).then(function(n){return Promise.resolve(e.text).then(function(e){return Promise.resolve(l.call(o,{type:"email",to:s,template:a,emailIdentityId:i,senderId:t,content:{subject:c,html:n,text:e}}))})})})})})}catch(e){return Promise.reject(e)}}}}}};export{b as Button,S as Code,P as DataList,j as Layout,z as Text,O as Wrapper,T as createEmail,C as createRelayClient,B as createTemplate};
1
+ import{createClient as e}from"@lowerdeck/rpc-client";import{jsx as n,jsxs as t}from"react/jsx-runtime";import{Section as r,Button as i,Text as o,Row as l,Column as a,Html as s,Head as c,Preview as d,Body as f,Container as p,Img as u,Hr as h,render as m}from"@react-email/components";import x from"react";function y(){return y=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var t=arguments[n];for(var r in t)({}).hasOwnProperty.call(t,r)&&(e[r]=t[r])}return e},y.apply(null,arguments)}var g={padding:"27px 0 27px",textAlign:"center"},v={backgroundColor:"#000000",borderRadius:"7px",fontWeight:"600",color:"#fff",fontSize:"15px",textDecoration:"none",textAlign:"center",display:"block"},b=function(e){var t=e.href,o=e.children;return n(r,{style:g,children:n(i,{style:y({},v,{padding:"12px 18px"}),href:t,children:o})})},S=function(e){var i=e.code,l=i.slice(0,3),a=i.slice(3,6);return n(r,{style:{background:"#fff",border:"1px solid #ddd",borderRadius:"8px",margin:"20px 0px",padding:"6px 15px"},children:t(o,{style:{fontSize:"20px",textAlign:"center",verticalAlign:"middle"},children:[n("span",{children:l}),n("span",{style:{margin:"0 5px",color:"#aaa"},children:"-"}),n("span",{children:a})]})})},I={},z=function(e){return n(r,{style:I,children:e.items.map(function(e,r){var i=e.value;return n(l,{children:t(a,{style:{padding:"10px 0px"},children:[t(o,{style:{fontSize:14,fontWeight:"bold",padding:"3px 0px",margin:0},children:[e.label,":"," "]}),n(o,{style:{fontSize:14,padding:"3px 0px",margin:0},children:i})]})},r)})})},j=function(e){var r=e.title,i=e.description,l=e.children,a=e.style;return t(x.Fragment,{children:[n(o,{style:y({fontFamily:"sans-serif",fontSize:20,fontWeight:"bold",marginBottom:10},a),children:r}),i&&n(o,{style:y({fontFamily:"sans-serif",fontSize:16,marginBottom:20},a),children:i}),l]})},P=function(e){var t=e.children;return n(o,{style:y({fontFamily:"sans-serif",fontSize:14},e.style),children:t})},k={backgroundColor:"#ffffff",margin:"0 auto",fontFamily:"-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif"},F={maxWidth:"600px",margin:"0 auto"},w={marginTop:"25px"},A={fontSize:"12px",color:"#777"},M={margin:"20px 0px",border:"none",borderBottom:"1px solid #ddd",background:"none"},O=function(e){var i=e.children,l=e.preview;return t(s,{children:[n(c,{}),l&&n(d,{children:l}),n(f,{style:k,children:t(p,{style:F,children:[n(r,{style:w,children:n(u,{src:"https://cdn.metorial.com/2025-06-13--14-59-55/logos/metorial/primary_logo_text/resized-100-w881-h256.png",height:"30",alt:"Metorial"})}),i,n(h,{style:M}),n(r,{children:"enterprise"==process.env.METORIAL_SOURCE?n(o,{style:A,children:"Sent by Metorial 💌. If you have any questions, feel free to contact us. If you need to reference this message use this ID: EMAIL_ID."}):t(o,{style:A,children:["Sent by a self hosted instance of ",n("a",{href:"https://metorial.com",children:"Metorial"}),". Contact the administrator of this instance if you have any questions."]})})]})})]})},T=function(e){var t=e.subject,r=n(O,{preview:e.preview,children:e.content});return{subject:t,html:m(r,{plainText:!1}),text:m(r,{plainText:!0})}},B=function(e){return e},C=function(n){var t=e(n),r=t.sender.upsert({identifier:n.sender.identifier,name:n.sender.name});return{client:t,createTemplate:function(e,n){return{send:function(i){try{return Promise.resolve(e.render(i.data)).then(function(e){return Promise.resolve(r).then(function(r){var o=t.email,l=o.send,a=i.data,s=i.to;return Promise.resolve(n).then(function(n){var t=r.id,i=n.id,c=e.subject;return Promise.resolve(e.html).then(function(n){return Promise.resolve(e.text).then(function(e){return Promise.resolve(l.call(o,{type:"email",to:s,template:a,emailIdentityId:i,senderId:t,content:{subject:c,html:n,text:e}}))})})})})})}catch(e){return Promise.reject(e)}}}}}};export{b as Button,S as Code,z as DataList,j as Layout,P as Text,O as Wrapper,T as createEmail,C as createRelayClient,B as createTemplate};
2
2
  //# sourceMappingURL=index.module.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.module.js","sources":["../src/templates/components/button.tsx","../src/templates/components/code.tsx","../src/templates/components/dataList.tsx","../src/templates/components/layout.tsx","../src/templates/components/text.tsx","../src/templates/components/wrapper.tsx","../src/templates/lib/email.tsx","../src/templates/template.ts","../src/index.ts"],"sourcesContent":["import { Button as EmailButton, Section } from '@react-email/components';\nimport React from 'react';\n\nlet buttonContainer = {\n padding: '27px 0 27px',\n textAlign: 'center' as const\n};\n\nlet button = {\n backgroundColor: '#000000',\n borderRadius: '7px',\n fontWeight: '600',\n color: '#fff',\n fontSize: '15px',\n textDecoration: 'none',\n textAlign: 'center' as const,\n display: 'block'\n};\n\nexport let Button = ({ href, children }: { href: string; children: React.ReactNode }) => {\n return (\n <Section style={buttonContainer}>\n <EmailButton style={{ ...button, padding: '12px 18px' }} href={href}>\n {children as any}\n </EmailButton>\n </Section>\n );\n};\n","import { Section, Text } from '@react-email/components';\n\nexport let Code = ({ code }: { code: string }) => {\n let first3 = code.slice(0, 3);\n let last3 = code.slice(3, 6);\n\n return (\n <Section\n style={{\n background: '#fff',\n border: '1px solid #ddd',\n borderRadius: '8px',\n margin: '20px 0px',\n padding: '6px 15px'\n }}\n >\n <Text\n style={{\n fontSize: '20px',\n textAlign: 'center',\n verticalAlign: 'middle'\n }}\n >\n <span>{first3}</span>\n <span style={{ margin: '0 5px', color: '#aaa' }}>-</span>\n <span>{last3}</span>\n </Text>\n </Section>\n );\n};\n","import { Column, Row, Section, Text } from '@react-email/components';\n\nlet container = {\n // background: '#efefef',\n // border: '1px solid #ccc'\n};\n\nexport let DataList = ({ items }: { items: { label: string; value: string }[] }) => {\n return (\n <Section style={container}>\n {items.map(({ label, value }, i) => (\n <Row key={i}>\n <Column style={{ padding: '10px 0px' }}>\n <Text style={{ fontSize: 14, fontWeight: 'bold', padding: '3px 0px', margin: 0 }}>\n {label}:{' '}\n </Text>\n <Text style={{ fontSize: 14, padding: '3px 0px', margin: 0 }}>{value}</Text>\n </Column>\n </Row>\n ))}\n </Section>\n );\n};\n","import { Text as EmailText } from '@react-email/components';\nimport React from 'react';\n\nexport let Layout = ({\n title,\n description,\n children,\n style\n}: {\n title: React.ReactNode;\n description?: React.ReactNode;\n children: React.ReactNode;\n style?: React.CSSProperties;\n}) => {\n return (\n <React.Fragment>\n <EmailText\n style={{\n fontFamily: 'sans-serif',\n fontSize: 20,\n fontWeight: 'bold',\n marginBottom: 10,\n ...style\n }}\n >\n {title}\n </EmailText>\n\n {description && (\n <EmailText\n style={{\n fontFamily: 'sans-serif',\n fontSize: 16,\n marginBottom: 20,\n ...style\n }}\n >\n {description}\n </EmailText>\n )}\n\n {children}\n </React.Fragment>\n );\n};\n","import { Text as EmailText } from '@react-email/components';\nimport React from 'react';\n\nexport let Text = ({\n children,\n style\n}: {\n children: React.ReactNode;\n style?: React.CSSProperties;\n}) => {\n return (\n <EmailText\n style={{\n fontFamily: 'sans-serif',\n fontSize: 14,\n ...style\n }}\n >\n {children}\n </EmailText>\n );\n};\n","import {\n Body,\n Container,\n Head,\n Hr,\n Html,\n Img,\n Preview,\n Section,\n Text\n} from '@react-email/components';\nimport React from 'react';\n\nlet main = {\n backgroundColor: '#ffffff',\n margin: '0 auto',\n fontFamily:\n \"-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif\"\n};\n\nlet container = {\n maxWidth: '600px',\n margin: '0 auto'\n};\n\nlet logoContainer = {\n marginTop: '25px'\n};\n\nlet footerText = {\n fontSize: '12px',\n color: '#777'\n};\n\nlet hr = {\n margin: '20px 0px',\n border: 'none',\n borderBottom: '1px solid #ddd',\n background: 'none'\n};\n\nexport let Wrapper = ({\n children,\n preview\n}: {\n children?: React.ReactNode;\n preview?: string;\n}) => {\n return (\n <Html>\n <Head />\n\n {preview && <Preview>{preview}</Preview>}\n\n <Body style={main}>\n <Container style={container}>\n <Section style={logoContainer}>\n <Img\n src=\"https://cdn.metorial.com/2025-06-13--14-59-55/logos/metorial/primary_logo_text/resized-100-w881-h256.png\"\n height=\"30\"\n alt=\"Metorial\"\n />\n </Section>\n\n {children}\n\n <Hr style={hr} />\n\n <Section>\n {process.env.METORIAL_SOURCE == 'enterprise' ? (\n <Text style={footerText}>\n Sent by Metorial 💌. If you have any questions, feel free to contact us. If you\n need to reference this message use this ID: EMAIL_ID.\n </Text>\n ) : (\n <Text style={footerText}>\n Sent by a self hosted instance of <a href=\"https://metorial.com\">Metorial</a>.\n Contact the administrator of this instance if you have any questions.\n </Text>\n )}\n </Section>\n </Container>\n </Body>\n </Html>\n );\n};\n","import { render } from '@react-email/components';\nimport React from 'react';\nimport { Wrapper } from '../components/wrapper';\n\nexport interface IEmail {\n subject: string;\n html: string | Promise<string>;\n text: string | Promise<string>;\n}\n\nexport let createEmail = ({\n content,\n preview,\n subject\n}: {\n content: React.ReactElement;\n preview?: string;\n subject: string;\n}) => {\n let inner = <Wrapper preview={preview}>{content}</Wrapper>;\n\n let html = render(inner, { plainText: false });\n let text = render(inner, { plainText: true });\n\n return {\n subject,\n html,\n text\n };\n};\n","import { IEmail } from './lib/email';\n\nexport interface ITemplate<Data> {\n render: (data: Data) => IEmail | Promise<IEmail>;\n}\n\nexport let createTemplate = <Data>(template: ITemplate<Data>) => template;\n","import { createClient } from '@lowerdeck/rpc-client';\nimport type { RelayClient } from '../../../service/src/controllers';\nimport { ITemplate } from './templates';\n\nexport * from './templates';\n\ntype ClientOpts = Parameters<typeof createClient>[0];\n\ntype EmailIdentity = Awaited<ReturnType<RelayClient['emailIdentity']['get']>>;\n\nexport let createRelayClient = (\n o: ClientOpts & {\n sender: {\n identifier: string;\n name: string;\n };\n }\n) => {\n let inner = createClient<RelayClient>(o);\n\n let sender = inner.sender.upsert({\n identifier: o.sender.identifier,\n name: o.sender.name\n });\n\n let wrap =\n <Arg0, Args extends any[], R>(fn: (arg0: Arg0, ...args: Args) => Promise<R>) =>\n async (arg0: Omit<Arg0, 'senderId'>, ...args: Args) => {\n let s = await sender;\n return await fn({ ...arg0, senderId: s.id } as any, ...args);\n };\n\n return {\n sender: {\n get: wrap(inner.sender.get),\n upsert: wrap(inner.sender.upsert)\n },\n emailIdentity: {\n get: wrap(inner.emailIdentity.get),\n upsert: wrap(inner.emailIdentity.upsert)\n },\n email: {\n send: wrap(inner.email.send)\n },\n send: wrap(inner.email.send),\n\n createTemplate<Data>(\n template: ITemplate<Data>,\n identity: EmailIdentity | Promise<EmailIdentity>\n ) {\n return {\n send: async (i: { data: Data; to: string[] }) => {\n let rendered = await template.render(i.data);\n let s = await sender;\n\n return await inner.email.send({\n type: 'email',\n to: i.to,\n template: i.data as any,\n\n emailIdentityId: (await identity).id,\n senderId: s.id,\n\n content: {\n subject: rendered.subject,\n html: await rendered.html,\n text: await rendered.text\n }\n });\n }\n };\n }\n };\n};\n"],"names":["buttonContainer","padding","textAlign","button","backgroundColor","borderRadius","fontWeight","color","fontSize","textDecoration","display","Button","_ref","href","children","_jsx","Section","style","EmailButton","_extends","Code","code","first3","slice","last3","background","border","margin","_jsxs","Text","verticalAlign","container","DataList","items","map","_ref2","i","value","Row","Column","label","Layout","title","description","React","Fragment","EmailText","fontFamily","marginBottom","main","maxWidth","logoContainer","marginTop","footerText","hr","borderBottom","Wrapper","preview","Html","Head","Preview","Body","Container","Img","src","height","alt","Hr","process","env","METORIAL_SOURCE","createEmail","subject","inner","content","html","render","plainText","text","createTemplate","template","createRelayClient","o","createClient","sender","upsert","identifier","name","wrap","fn","arg0","_arguments","arguments","Promise","resolve","then","s","apply","senderId","id","concat","call","e","reject","get","emailIdentity","email","send","identity","data","rendered","_inner$email","_send","_i$data","_i$to","to","_identity","_s$id","_identity$id","_rendered$subject","_rendered$html","_rendered$text","type","emailIdentityId"],"mappings":"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"}
1
+ {"version":3,"file":"index.module.js","sources":["../src/templates/components/button.tsx","../src/templates/components/code.tsx","../src/templates/components/dataList.tsx","../src/templates/components/layout.tsx","../src/templates/components/text.tsx","../src/templates/components/wrapper.tsx","../src/templates/lib/email.tsx","../src/templates/template.ts","../src/index.ts"],"sourcesContent":["import { Button as EmailButton, Section } from '@react-email/components';\nimport React from 'react';\n\nlet buttonContainer = {\n padding: '27px 0 27px',\n textAlign: 'center' as const\n};\n\nlet button = {\n backgroundColor: '#000000',\n borderRadius: '7px',\n fontWeight: '600',\n color: '#fff',\n fontSize: '15px',\n textDecoration: 'none',\n textAlign: 'center' as const,\n display: 'block'\n};\n\nexport let Button = ({ href, children }: { href: string; children: React.ReactNode }) => {\n return (\n <Section style={buttonContainer}>\n <EmailButton style={{ ...button, padding: '12px 18px' }} href={href}>\n {children as any}\n </EmailButton>\n </Section>\n );\n};\n","import { Section, Text } from '@react-email/components';\n\nexport let Code = ({ code }: { code: string }) => {\n let first3 = code.slice(0, 3);\n let last3 = code.slice(3, 6);\n\n return (\n <Section\n style={{\n background: '#fff',\n border: '1px solid #ddd',\n borderRadius: '8px',\n margin: '20px 0px',\n padding: '6px 15px'\n }}\n >\n <Text\n style={{\n fontSize: '20px',\n textAlign: 'center',\n verticalAlign: 'middle'\n }}\n >\n <span>{first3}</span>\n <span style={{ margin: '0 5px', color: '#aaa' }}>-</span>\n <span>{last3}</span>\n </Text>\n </Section>\n );\n};\n","import { Column, Row, Section, Text } from '@react-email/components';\n\nlet container = {\n // background: '#efefef',\n // border: '1px solid #ccc'\n};\n\nexport let DataList = ({ items }: { items: { label: string; value: string }[] }) => {\n return (\n <Section style={container}>\n {items.map(({ label, value }, i) => (\n <Row key={i}>\n <Column style={{ padding: '10px 0px' }}>\n <Text style={{ fontSize: 14, fontWeight: 'bold', padding: '3px 0px', margin: 0 }}>\n {label}:{' '}\n </Text>\n <Text style={{ fontSize: 14, padding: '3px 0px', margin: 0 }}>{value}</Text>\n </Column>\n </Row>\n ))}\n </Section>\n );\n};\n","import { Text as EmailText } from '@react-email/components';\nimport React from 'react';\n\nexport let Layout = ({\n title,\n description,\n children,\n style\n}: {\n title: React.ReactNode;\n description?: React.ReactNode;\n children: React.ReactNode;\n style?: React.CSSProperties;\n}) => {\n return (\n <React.Fragment>\n <EmailText\n style={{\n fontFamily: 'sans-serif',\n fontSize: 20,\n fontWeight: 'bold',\n marginBottom: 10,\n ...style\n }}\n >\n {title}\n </EmailText>\n\n {description && (\n <EmailText\n style={{\n fontFamily: 'sans-serif',\n fontSize: 16,\n marginBottom: 20,\n ...style\n }}\n >\n {description}\n </EmailText>\n )}\n\n {children}\n </React.Fragment>\n );\n};\n","import { Text as EmailText } from '@react-email/components';\nimport React from 'react';\n\nexport let Text = ({\n children,\n style\n}: {\n children: React.ReactNode;\n style?: React.CSSProperties;\n}) => {\n return (\n <EmailText\n style={{\n fontFamily: 'sans-serif',\n fontSize: 14,\n ...style\n }}\n >\n {children}\n </EmailText>\n );\n};\n","import {\n Body,\n Container,\n Head,\n Hr,\n Html,\n Img,\n Preview,\n Section,\n Text\n} from '@react-email/components';\nimport React from 'react';\n\nlet main = {\n backgroundColor: '#ffffff',\n margin: '0 auto',\n fontFamily:\n \"-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif\"\n};\n\nlet container = {\n maxWidth: '600px',\n margin: '0 auto'\n};\n\nlet logoContainer = {\n marginTop: '25px'\n};\n\nlet footerText = {\n fontSize: '12px',\n color: '#777'\n};\n\nlet hr = {\n margin: '20px 0px',\n border: 'none',\n borderBottom: '1px solid #ddd',\n background: 'none'\n};\n\nexport let Wrapper = ({\n children,\n preview\n}: {\n children?: React.ReactNode;\n preview?: string;\n}) => {\n return (\n <Html>\n <Head />\n\n {preview && <Preview>{preview}</Preview>}\n\n <Body style={main}>\n <Container style={container}>\n <Section style={logoContainer}>\n <Img\n src=\"https://cdn.metorial.com/2025-06-13--14-59-55/logos/metorial/primary_logo_text/resized-100-w881-h256.png\"\n height=\"30\"\n alt=\"Metorial\"\n />\n </Section>\n\n {children}\n\n <Hr style={hr} />\n\n <Section>\n {process.env.METORIAL_SOURCE == 'enterprise' ? (\n <Text style={footerText}>\n Sent by Metorial 💌. If you have any questions, feel free to contact us. If you\n need to reference this message use this ID: EMAIL_ID.\n </Text>\n ) : (\n <Text style={footerText}>\n Sent by a self hosted instance of <a href=\"https://metorial.com\">Metorial</a>.\n Contact the administrator of this instance if you have any questions.\n </Text>\n )}\n </Section>\n </Container>\n </Body>\n </Html>\n );\n};\n","import { render } from '@react-email/components';\nimport React from 'react';\nimport { Wrapper } from '../components/wrapper';\n\nexport interface IEmail {\n subject: string;\n html: string | Promise<string>;\n text: string | Promise<string>;\n}\n\nexport let createEmail = ({\n content,\n preview,\n subject\n}: {\n content: React.ReactElement;\n preview?: string;\n subject: string;\n}) => {\n let inner = <Wrapper preview={preview}>{content}</Wrapper>;\n\n let html = render(inner, { plainText: false });\n let text = render(inner, { plainText: true });\n\n return {\n subject,\n html,\n text\n };\n};\n","import { IEmail } from './lib/email';\n\nexport interface ITemplate<Data> {\n render: (data: Data) => IEmail | Promise<IEmail>;\n}\n\nexport let createTemplate = <Data>(template: ITemplate<Data>) => template;\n","import { createClient } from '@lowerdeck/rpc-client';\nimport type { RelayClient } from '../../../service/src/controllers';\nimport { ITemplate } from './templates';\n\nexport * from './templates';\n\ntype ClientOpts = Parameters<typeof createClient>[0];\n\ntype EmailIdentity = Awaited<ReturnType<RelayClient['emailIdentity']['get']>>;\n\nexport let createRelayClient = (\n o: ClientOpts & {\n sender: {\n identifier: string;\n name: string;\n };\n }\n) => {\n let inner = createClient<RelayClient>(o);\n\n let sender = inner.sender.upsert({\n identifier: o.sender.identifier,\n name: o.sender.name\n });\n\n let wrap =\n <Arg0, Args extends any[], R>(fn: (arg0: Arg0, ...args: Args) => Promise<R>) =>\n async (arg0: Omit<Arg0, 'senderId'>, ...args: Args) => {\n let s = await sender;\n return await fn({ ...arg0, senderId: s.id } as any, ...args);\n };\n\n return {\n client: inner,\n\n createTemplate<Data>(\n template: ITemplate<Data>,\n identity: EmailIdentity | Promise<EmailIdentity>\n ) {\n return {\n send: async (i: { data: Data; to: string[] }) => {\n let rendered = await template.render(i.data);\n let s = await sender;\n\n return await inner.email.send({\n type: 'email',\n to: i.to,\n template: i.data as any,\n\n emailIdentityId: (await identity).id,\n senderId: s.id,\n\n content: {\n subject: rendered.subject,\n html: await rendered.html,\n text: await rendered.text\n }\n });\n }\n };\n }\n };\n};\n"],"names":["buttonContainer","padding","textAlign","button","backgroundColor","borderRadius","fontWeight","color","fontSize","textDecoration","display","Button","_ref","href","children","_jsx","Section","style","EmailButton","_extends","Code","code","first3","slice","last3","background","border","margin","_jsxs","Text","verticalAlign","container","DataList","items","map","_ref2","i","value","Row","Column","label","Layout","title","description","React","Fragment","EmailText","fontFamily","marginBottom","main","maxWidth","logoContainer","marginTop","footerText","hr","borderBottom","Wrapper","preview","Html","Head","Preview","Body","Container","Img","src","height","alt","Hr","process","env","METORIAL_SOURCE","createEmail","subject","inner","content","html","render","plainText","text","createTemplate","template","createRelayClient","o","createClient","sender","upsert","identifier","name","client","identity","send","Promise","resolve","data","then","rendered","s","_inner$email","email","_send","_i$data","_i$to","to","_identity","_s$id","id","_identity$id","_rendered$subject","_rendered$html","_rendered$text","call","type","emailIdentityId","senderId","e","reject"],"mappings":"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"}
package/dist/index.umd.js CHANGED
@@ -1,2 +1,2 @@
1
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@lowerdeck/rpc-client"),require("react/jsx-runtime"),require("@react-email/components"),require("react")):"function"==typeof define&&define.amd?define(["exports","@lowerdeck/rpc-client","react/jsx-runtime","@react-email/components","react"],t):t((e||self).relayClient={},e.rpcClient,e.jsxRuntime,e.components,e.react)}(this,function(e,t,n,r,i){function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var s=/*#__PURE__*/o(i);function l(){return l=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},l.apply(null,arguments)}var a={padding:"27px 0 27px",textAlign:"center"},c={backgroundColor:"#000000",borderRadius:"7px",fontWeight:"600",color:"#fff",fontSize:"15px",textDecoration:"none",textAlign:"center",display:"block"},d={},u={backgroundColor:"#ffffff",margin:"0 auto",fontFamily:"-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif"},f={maxWidth:"600px",margin:"0 auto"},p={marginTop:"25px"},x={fontSize:"12px",color:"#777"},m={margin:"20px 0px",border:"none",borderBottom:"1px solid #ddd",background:"none"},h=function(e){var t=e.children,i=e.preview;return n.jsxs(r.Html,{children:[n.jsx(r.Head,{}),i&&n.jsx(r.Preview,{children:i}),n.jsx(r.Body,{style:u,children:n.jsxs(r.Container,{style:f,children:[n.jsx(r.Section,{style:p,children:n.jsx(r.Img,{src:"https://cdn.metorial.com/2025-06-13--14-59-55/logos/metorial/primary_logo_text/resized-100-w881-h256.png",height:"30",alt:"Metorial"})}),t,n.jsx(r.Hr,{style:m}),n.jsx(r.Section,{children:"enterprise"==process.env.METORIAL_SOURCE?n.jsx(r.Text,{style:x,children:"Sent by Metorial 💌. If you have any questions, feel free to contact us. If you need to reference this message use this ID: EMAIL_ID."}):n.jsxs(r.Text,{style:x,children:["Sent by a self hosted instance of ",n.jsx("a",{href:"https://metorial.com",children:"Metorial"}),". Contact the administrator of this instance if you have any questions."]})})]})})]})};e.Button=function(e){var t=e.href,i=e.children;return n.jsx(r.Section,{style:a,children:n.jsx(r.Button,{style:l({},c,{padding:"12px 18px"}),href:t,children:i})})},e.Code=function(e){var t=e.code,i=t.slice(0,3),o=t.slice(3,6);return n.jsx(r.Section,{style:{background:"#fff",border:"1px solid #ddd",borderRadius:"8px",margin:"20px 0px",padding:"6px 15px"},children:n.jsxs(r.Text,{style:{fontSize:"20px",textAlign:"center",verticalAlign:"middle"},children:[n.jsx("span",{children:i}),n.jsx("span",{style:{margin:"0 5px",color:"#aaa"},children:"-"}),n.jsx("span",{children:o})]})})},e.DataList=function(e){return n.jsx(r.Section,{style:d,children:e.items.map(function(e,t){var i=e.value;return n.jsx(r.Row,{children:n.jsxs(r.Column,{style:{padding:"10px 0px"},children:[n.jsxs(r.Text,{style:{fontSize:14,fontWeight:"bold",padding:"3px 0px",margin:0},children:[e.label,":"," "]}),n.jsx(r.Text,{style:{fontSize:14,padding:"3px 0px",margin:0},children:i})]})},t)})})},e.Layout=function(e){var t=e.title,i=e.description,o=e.children,a=e.style;return n.jsxs(s.default.Fragment,{children:[n.jsx(r.Text,{style:l({fontFamily:"sans-serif",fontSize:20,fontWeight:"bold",marginBottom:10},a),children:t}),i&&n.jsx(r.Text,{style:l({fontFamily:"sans-serif",fontSize:16,marginBottom:20},a),children:i}),o]})},e.Text=function(e){var t=e.children;return n.jsx(r.Text,{style:l({fontFamily:"sans-serif",fontSize:14},e.style),children:t})},e.Wrapper=h,e.createEmail=function(e){var t=e.subject,i=n.jsx(h,{preview:e.preview,children:e.content});return{subject:t,html:r.render(i,{plainText:!1}),text:r.render(i,{plainText:!0})}},e.createRelayClient=function(e){var n=t.createClient(e),r=n.sender.upsert({identifier:e.sender.identifier,name:e.sender.name}),i=function(e){return function(t){try{var n=arguments;return Promise.resolve(r).then(function(r){return Promise.resolve(e.apply(void 0,[l({},t,{senderId:r.id})].concat([].slice.call(n,1))))})}catch(e){return Promise.reject(e)}}};return{sender:{get:i(n.sender.get),upsert:i(n.sender.upsert)},emailIdentity:{get:i(n.emailIdentity.get),upsert:i(n.emailIdentity.upsert)},email:{send:i(n.email.send)},send:i(n.email.send),createTemplate:function(e,t){return{send:function(i){try{return Promise.resolve(e.render(i.data)).then(function(e){return Promise.resolve(r).then(function(r){var o=n.email,s=o.send,l=i.data,a=i.to;return Promise.resolve(t).then(function(t){var n=r.id,i=t.id,c=e.subject;return Promise.resolve(e.html).then(function(t){return Promise.resolve(e.text).then(function(e){return Promise.resolve(s.call(o,{type:"email",to:a,template:l,emailIdentityId:i,senderId:n,content:{subject:c,html:t,text:e}}))})})})})})}catch(e){return Promise.reject(e)}}}}}},e.createTemplate=function(e){return e}});
1
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("@lowerdeck/rpc-client"),require("react/jsx-runtime"),require("@react-email/components"),require("react")):"function"==typeof define&&define.amd?define(["exports","@lowerdeck/rpc-client","react/jsx-runtime","@react-email/components","react"],t):t((e||self).relayClient={},e.rpcClient,e.jsxRuntime,e.components,e.react)}(this,function(e,t,n,r,i){function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var s=/*#__PURE__*/o(i);function l(){return l=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},l.apply(null,arguments)}var a={padding:"27px 0 27px",textAlign:"center"},c={backgroundColor:"#000000",borderRadius:"7px",fontWeight:"600",color:"#fff",fontSize:"15px",textDecoration:"none",textAlign:"center",display:"block"},d={},u={backgroundColor:"#ffffff",margin:"0 auto",fontFamily:"-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif"},f={maxWidth:"600px",margin:"0 auto"},x={marginTop:"25px"},p={fontSize:"12px",color:"#777"},m={margin:"20px 0px",border:"none",borderBottom:"1px solid #ddd",background:"none"},h=function(e){var t=e.children,i=e.preview;return n.jsxs(r.Html,{children:[n.jsx(r.Head,{}),i&&n.jsx(r.Preview,{children:i}),n.jsx(r.Body,{style:u,children:n.jsxs(r.Container,{style:f,children:[n.jsx(r.Section,{style:x,children:n.jsx(r.Img,{src:"https://cdn.metorial.com/2025-06-13--14-59-55/logos/metorial/primary_logo_text/resized-100-w881-h256.png",height:"30",alt:"Metorial"})}),t,n.jsx(r.Hr,{style:m}),n.jsx(r.Section,{children:"enterprise"==process.env.METORIAL_SOURCE?n.jsx(r.Text,{style:p,children:"Sent by Metorial 💌. If you have any questions, feel free to contact us. If you need to reference this message use this ID: EMAIL_ID."}):n.jsxs(r.Text,{style:p,children:["Sent by a self hosted instance of ",n.jsx("a",{href:"https://metorial.com",children:"Metorial"}),". Contact the administrator of this instance if you have any questions."]})})]})})]})};e.Button=function(e){var t=e.href,i=e.children;return n.jsx(r.Section,{style:a,children:n.jsx(r.Button,{style:l({},c,{padding:"12px 18px"}),href:t,children:i})})},e.Code=function(e){var t=e.code,i=t.slice(0,3),o=t.slice(3,6);return n.jsx(r.Section,{style:{background:"#fff",border:"1px solid #ddd",borderRadius:"8px",margin:"20px 0px",padding:"6px 15px"},children:n.jsxs(r.Text,{style:{fontSize:"20px",textAlign:"center",verticalAlign:"middle"},children:[n.jsx("span",{children:i}),n.jsx("span",{style:{margin:"0 5px",color:"#aaa"},children:"-"}),n.jsx("span",{children:o})]})})},e.DataList=function(e){return n.jsx(r.Section,{style:d,children:e.items.map(function(e,t){var i=e.value;return n.jsx(r.Row,{children:n.jsxs(r.Column,{style:{padding:"10px 0px"},children:[n.jsxs(r.Text,{style:{fontSize:14,fontWeight:"bold",padding:"3px 0px",margin:0},children:[e.label,":"," "]}),n.jsx(r.Text,{style:{fontSize:14,padding:"3px 0px",margin:0},children:i})]})},t)})})},e.Layout=function(e){var t=e.title,i=e.description,o=e.children,a=e.style;return n.jsxs(s.default.Fragment,{children:[n.jsx(r.Text,{style:l({fontFamily:"sans-serif",fontSize:20,fontWeight:"bold",marginBottom:10},a),children:t}),i&&n.jsx(r.Text,{style:l({fontFamily:"sans-serif",fontSize:16,marginBottom:20},a),children:i}),o]})},e.Text=function(e){var t=e.children;return n.jsx(r.Text,{style:l({fontFamily:"sans-serif",fontSize:14},e.style),children:t})},e.Wrapper=h,e.createEmail=function(e){var t=e.subject,i=n.jsx(h,{preview:e.preview,children:e.content});return{subject:t,html:r.render(i,{plainText:!1}),text:r.render(i,{plainText:!0})}},e.createRelayClient=function(e){var n=t.createClient(e),r=n.sender.upsert({identifier:e.sender.identifier,name:e.sender.name});return{client:n,createTemplate:function(e,t){return{send:function(i){try{return Promise.resolve(e.render(i.data)).then(function(e){return Promise.resolve(r).then(function(r){var o=n.email,s=o.send,l=i.data,a=i.to;return Promise.resolve(t).then(function(t){var n=r.id,i=t.id,c=e.subject;return Promise.resolve(e.html).then(function(t){return Promise.resolve(e.text).then(function(e){return Promise.resolve(s.call(o,{type:"email",to:a,template:l,emailIdentityId:i,senderId:n,content:{subject:c,html:t,text:e}}))})})})})})}catch(e){return Promise.reject(e)}}}}}},e.createTemplate=function(e){return e}});
2
2
  //# sourceMappingURL=index.umd.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.umd.js","sources":["../src/templates/components/button.tsx","../src/templates/components/dataList.tsx","../src/templates/components/wrapper.tsx","../src/templates/components/code.tsx","../src/templates/components/layout.tsx","../src/templates/components/text.tsx","../src/templates/lib/email.tsx","../src/index.ts","../src/templates/template.ts"],"sourcesContent":["import { Button as EmailButton, Section } from '@react-email/components';\nimport React from 'react';\n\nlet buttonContainer = {\n padding: '27px 0 27px',\n textAlign: 'center' as const\n};\n\nlet button = {\n backgroundColor: '#000000',\n borderRadius: '7px',\n fontWeight: '600',\n color: '#fff',\n fontSize: '15px',\n textDecoration: 'none',\n textAlign: 'center' as const,\n display: 'block'\n};\n\nexport let Button = ({ href, children }: { href: string; children: React.ReactNode }) => {\n return (\n <Section style={buttonContainer}>\n <EmailButton style={{ ...button, padding: '12px 18px' }} href={href}>\n {children as any}\n </EmailButton>\n </Section>\n );\n};\n","import { Column, Row, Section, Text } from '@react-email/components';\n\nlet container = {\n // background: '#efefef',\n // border: '1px solid #ccc'\n};\n\nexport let DataList = ({ items }: { items: { label: string; value: string }[] }) => {\n return (\n <Section style={container}>\n {items.map(({ label, value }, i) => (\n <Row key={i}>\n <Column style={{ padding: '10px 0px' }}>\n <Text style={{ fontSize: 14, fontWeight: 'bold', padding: '3px 0px', margin: 0 }}>\n {label}:{' '}\n </Text>\n <Text style={{ fontSize: 14, padding: '3px 0px', margin: 0 }}>{value}</Text>\n </Column>\n </Row>\n ))}\n </Section>\n );\n};\n","import {\n Body,\n Container,\n Head,\n Hr,\n Html,\n Img,\n Preview,\n Section,\n Text\n} from '@react-email/components';\nimport React from 'react';\n\nlet main = {\n backgroundColor: '#ffffff',\n margin: '0 auto',\n fontFamily:\n \"-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif\"\n};\n\nlet container = {\n maxWidth: '600px',\n margin: '0 auto'\n};\n\nlet logoContainer = {\n marginTop: '25px'\n};\n\nlet footerText = {\n fontSize: '12px',\n color: '#777'\n};\n\nlet hr = {\n margin: '20px 0px',\n border: 'none',\n borderBottom: '1px solid #ddd',\n background: 'none'\n};\n\nexport let Wrapper = ({\n children,\n preview\n}: {\n children?: React.ReactNode;\n preview?: string;\n}) => {\n return (\n <Html>\n <Head />\n\n {preview && <Preview>{preview}</Preview>}\n\n <Body style={main}>\n <Container style={container}>\n <Section style={logoContainer}>\n <Img\n src=\"https://cdn.metorial.com/2025-06-13--14-59-55/logos/metorial/primary_logo_text/resized-100-w881-h256.png\"\n height=\"30\"\n alt=\"Metorial\"\n />\n </Section>\n\n {children}\n\n <Hr style={hr} />\n\n <Section>\n {process.env.METORIAL_SOURCE == 'enterprise' ? (\n <Text style={footerText}>\n Sent by Metorial 💌. If you have any questions, feel free to contact us. If you\n need to reference this message use this ID: EMAIL_ID.\n </Text>\n ) : (\n <Text style={footerText}>\n Sent by a self hosted instance of <a href=\"https://metorial.com\">Metorial</a>.\n Contact the administrator of this instance if you have any questions.\n </Text>\n )}\n </Section>\n </Container>\n </Body>\n </Html>\n );\n};\n","import { Section, Text } from '@react-email/components';\n\nexport let Code = ({ code }: { code: string }) => {\n let first3 = code.slice(0, 3);\n let last3 = code.slice(3, 6);\n\n return (\n <Section\n style={{\n background: '#fff',\n border: '1px solid #ddd',\n borderRadius: '8px',\n margin: '20px 0px',\n padding: '6px 15px'\n }}\n >\n <Text\n style={{\n fontSize: '20px',\n textAlign: 'center',\n verticalAlign: 'middle'\n }}\n >\n <span>{first3}</span>\n <span style={{ margin: '0 5px', color: '#aaa' }}>-</span>\n <span>{last3}</span>\n </Text>\n </Section>\n );\n};\n","import { Text as EmailText } from '@react-email/components';\nimport React from 'react';\n\nexport let Layout = ({\n title,\n description,\n children,\n style\n}: {\n title: React.ReactNode;\n description?: React.ReactNode;\n children: React.ReactNode;\n style?: React.CSSProperties;\n}) => {\n return (\n <React.Fragment>\n <EmailText\n style={{\n fontFamily: 'sans-serif',\n fontSize: 20,\n fontWeight: 'bold',\n marginBottom: 10,\n ...style\n }}\n >\n {title}\n </EmailText>\n\n {description && (\n <EmailText\n style={{\n fontFamily: 'sans-serif',\n fontSize: 16,\n marginBottom: 20,\n ...style\n }}\n >\n {description}\n </EmailText>\n )}\n\n {children}\n </React.Fragment>\n );\n};\n","import { Text as EmailText } from '@react-email/components';\nimport React from 'react';\n\nexport let Text = ({\n children,\n style\n}: {\n children: React.ReactNode;\n style?: React.CSSProperties;\n}) => {\n return (\n <EmailText\n style={{\n fontFamily: 'sans-serif',\n fontSize: 14,\n ...style\n }}\n >\n {children}\n </EmailText>\n );\n};\n","import { render } from '@react-email/components';\nimport React from 'react';\nimport { Wrapper } from '../components/wrapper';\n\nexport interface IEmail {\n subject: string;\n html: string | Promise<string>;\n text: string | Promise<string>;\n}\n\nexport let createEmail = ({\n content,\n preview,\n subject\n}: {\n content: React.ReactElement;\n preview?: string;\n subject: string;\n}) => {\n let inner = <Wrapper preview={preview}>{content}</Wrapper>;\n\n let html = render(inner, { plainText: false });\n let text = render(inner, { plainText: true });\n\n return {\n subject,\n html,\n text\n };\n};\n","import { createClient } from '@lowerdeck/rpc-client';\nimport type { RelayClient } from '../../../service/src/controllers';\nimport { ITemplate } from './templates';\n\nexport * from './templates';\n\ntype ClientOpts = Parameters<typeof createClient>[0];\n\ntype EmailIdentity = Awaited<ReturnType<RelayClient['emailIdentity']['get']>>;\n\nexport let createRelayClient = (\n o: ClientOpts & {\n sender: {\n identifier: string;\n name: string;\n };\n }\n) => {\n let inner = createClient<RelayClient>(o);\n\n let sender = inner.sender.upsert({\n identifier: o.sender.identifier,\n name: o.sender.name\n });\n\n let wrap =\n <Arg0, Args extends any[], R>(fn: (arg0: Arg0, ...args: Args) => Promise<R>) =>\n async (arg0: Omit<Arg0, 'senderId'>, ...args: Args) => {\n let s = await sender;\n return await fn({ ...arg0, senderId: s.id } as any, ...args);\n };\n\n return {\n sender: {\n get: wrap(inner.sender.get),\n upsert: wrap(inner.sender.upsert)\n },\n emailIdentity: {\n get: wrap(inner.emailIdentity.get),\n upsert: wrap(inner.emailIdentity.upsert)\n },\n email: {\n send: wrap(inner.email.send)\n },\n send: wrap(inner.email.send),\n\n createTemplate<Data>(\n template: ITemplate<Data>,\n identity: EmailIdentity | Promise<EmailIdentity>\n ) {\n return {\n send: async (i: { data: Data; to: string[] }) => {\n let rendered = await template.render(i.data);\n let s = await sender;\n\n return await inner.email.send({\n type: 'email',\n to: i.to,\n template: i.data as any,\n\n emailIdentityId: (await identity).id,\n senderId: s.id,\n\n content: {\n subject: rendered.subject,\n html: await rendered.html,\n text: await rendered.text\n }\n });\n }\n };\n }\n };\n};\n","import { IEmail } from './lib/email';\n\nexport interface ITemplate<Data> {\n render: (data: Data) => IEmail | Promise<IEmail>;\n}\n\nexport let createTemplate = <Data>(template: ITemplate<Data>) => template;\n"],"names":["buttonContainer","padding","textAlign","button","backgroundColor","borderRadius","fontWeight","color","fontSize","textDecoration","display","container","main","margin","fontFamily","maxWidth","logoContainer","marginTop","footerText","hr","border","borderBottom","background","Wrapper","_ref","children","preview","_jsxs","Html","_jsx","Head","Preview","jsx","Body","style","jsxs","Container","Section","Img","src","height","alt","Hr","process","env","METORIAL_SOURCE","Text","href","EmailButton","_extends","code","first3","slice","last3","verticalAlign","items","map","_ref2","i","value","Row","Column","label","title","description","React","Fragment","EmailText","marginBottom","subject","inner","content","html","render","plainText","text","o","createClient","sender","upsert","identifier","name","wrap","fn","arg0","_arguments","arguments","Promise","resolve","then","s","apply","senderId","id","concat","call","e","reject","get","emailIdentity","email","send","createTemplate","template","identity","data","rendered","_inner$email","_send","_i$data","_i$to","to","_identity","_s$id","_identity$id","_rendered$subject","_rendered$html","_rendered$text","type","emailIdentityId"],"mappings":"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"}
1
+ {"version":3,"file":"index.umd.js","sources":["../src/templates/components/button.tsx","../src/templates/components/dataList.tsx","../src/templates/components/wrapper.tsx","../src/templates/components/code.tsx","../src/templates/components/layout.tsx","../src/templates/components/text.tsx","../src/templates/lib/email.tsx","../src/index.ts","../src/templates/template.ts"],"sourcesContent":["import { Button as EmailButton, Section } from '@react-email/components';\nimport React from 'react';\n\nlet buttonContainer = {\n padding: '27px 0 27px',\n textAlign: 'center' as const\n};\n\nlet button = {\n backgroundColor: '#000000',\n borderRadius: '7px',\n fontWeight: '600',\n color: '#fff',\n fontSize: '15px',\n textDecoration: 'none',\n textAlign: 'center' as const,\n display: 'block'\n};\n\nexport let Button = ({ href, children }: { href: string; children: React.ReactNode }) => {\n return (\n <Section style={buttonContainer}>\n <EmailButton style={{ ...button, padding: '12px 18px' }} href={href}>\n {children as any}\n </EmailButton>\n </Section>\n );\n};\n","import { Column, Row, Section, Text } from '@react-email/components';\n\nlet container = {\n // background: '#efefef',\n // border: '1px solid #ccc'\n};\n\nexport let DataList = ({ items }: { items: { label: string; value: string }[] }) => {\n return (\n <Section style={container}>\n {items.map(({ label, value }, i) => (\n <Row key={i}>\n <Column style={{ padding: '10px 0px' }}>\n <Text style={{ fontSize: 14, fontWeight: 'bold', padding: '3px 0px', margin: 0 }}>\n {label}:{' '}\n </Text>\n <Text style={{ fontSize: 14, padding: '3px 0px', margin: 0 }}>{value}</Text>\n </Column>\n </Row>\n ))}\n </Section>\n );\n};\n","import {\n Body,\n Container,\n Head,\n Hr,\n Html,\n Img,\n Preview,\n Section,\n Text\n} from '@react-email/components';\nimport React from 'react';\n\nlet main = {\n backgroundColor: '#ffffff',\n margin: '0 auto',\n fontFamily:\n \"-apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif\"\n};\n\nlet container = {\n maxWidth: '600px',\n margin: '0 auto'\n};\n\nlet logoContainer = {\n marginTop: '25px'\n};\n\nlet footerText = {\n fontSize: '12px',\n color: '#777'\n};\n\nlet hr = {\n margin: '20px 0px',\n border: 'none',\n borderBottom: '1px solid #ddd',\n background: 'none'\n};\n\nexport let Wrapper = ({\n children,\n preview\n}: {\n children?: React.ReactNode;\n preview?: string;\n}) => {\n return (\n <Html>\n <Head />\n\n {preview && <Preview>{preview}</Preview>}\n\n <Body style={main}>\n <Container style={container}>\n <Section style={logoContainer}>\n <Img\n src=\"https://cdn.metorial.com/2025-06-13--14-59-55/logos/metorial/primary_logo_text/resized-100-w881-h256.png\"\n height=\"30\"\n alt=\"Metorial\"\n />\n </Section>\n\n {children}\n\n <Hr style={hr} />\n\n <Section>\n {process.env.METORIAL_SOURCE == 'enterprise' ? (\n <Text style={footerText}>\n Sent by Metorial 💌. If you have any questions, feel free to contact us. If you\n need to reference this message use this ID: EMAIL_ID.\n </Text>\n ) : (\n <Text style={footerText}>\n Sent by a self hosted instance of <a href=\"https://metorial.com\">Metorial</a>.\n Contact the administrator of this instance if you have any questions.\n </Text>\n )}\n </Section>\n </Container>\n </Body>\n </Html>\n );\n};\n","import { Section, Text } from '@react-email/components';\n\nexport let Code = ({ code }: { code: string }) => {\n let first3 = code.slice(0, 3);\n let last3 = code.slice(3, 6);\n\n return (\n <Section\n style={{\n background: '#fff',\n border: '1px solid #ddd',\n borderRadius: '8px',\n margin: '20px 0px',\n padding: '6px 15px'\n }}\n >\n <Text\n style={{\n fontSize: '20px',\n textAlign: 'center',\n verticalAlign: 'middle'\n }}\n >\n <span>{first3}</span>\n <span style={{ margin: '0 5px', color: '#aaa' }}>-</span>\n <span>{last3}</span>\n </Text>\n </Section>\n );\n};\n","import { Text as EmailText } from '@react-email/components';\nimport React from 'react';\n\nexport let Layout = ({\n title,\n description,\n children,\n style\n}: {\n title: React.ReactNode;\n description?: React.ReactNode;\n children: React.ReactNode;\n style?: React.CSSProperties;\n}) => {\n return (\n <React.Fragment>\n <EmailText\n style={{\n fontFamily: 'sans-serif',\n fontSize: 20,\n fontWeight: 'bold',\n marginBottom: 10,\n ...style\n }}\n >\n {title}\n </EmailText>\n\n {description && (\n <EmailText\n style={{\n fontFamily: 'sans-serif',\n fontSize: 16,\n marginBottom: 20,\n ...style\n }}\n >\n {description}\n </EmailText>\n )}\n\n {children}\n </React.Fragment>\n );\n};\n","import { Text as EmailText } from '@react-email/components';\nimport React from 'react';\n\nexport let Text = ({\n children,\n style\n}: {\n children: React.ReactNode;\n style?: React.CSSProperties;\n}) => {\n return (\n <EmailText\n style={{\n fontFamily: 'sans-serif',\n fontSize: 14,\n ...style\n }}\n >\n {children}\n </EmailText>\n );\n};\n","import { render } from '@react-email/components';\nimport React from 'react';\nimport { Wrapper } from '../components/wrapper';\n\nexport interface IEmail {\n subject: string;\n html: string | Promise<string>;\n text: string | Promise<string>;\n}\n\nexport let createEmail = ({\n content,\n preview,\n subject\n}: {\n content: React.ReactElement;\n preview?: string;\n subject: string;\n}) => {\n let inner = <Wrapper preview={preview}>{content}</Wrapper>;\n\n let html = render(inner, { plainText: false });\n let text = render(inner, { plainText: true });\n\n return {\n subject,\n html,\n text\n };\n};\n","import { createClient } from '@lowerdeck/rpc-client';\nimport type { RelayClient } from '../../../service/src/controllers';\nimport { ITemplate } from './templates';\n\nexport * from './templates';\n\ntype ClientOpts = Parameters<typeof createClient>[0];\n\ntype EmailIdentity = Awaited<ReturnType<RelayClient['emailIdentity']['get']>>;\n\nexport let createRelayClient = (\n o: ClientOpts & {\n sender: {\n identifier: string;\n name: string;\n };\n }\n) => {\n let inner = createClient<RelayClient>(o);\n\n let sender = inner.sender.upsert({\n identifier: o.sender.identifier,\n name: o.sender.name\n });\n\n let wrap =\n <Arg0, Args extends any[], R>(fn: (arg0: Arg0, ...args: Args) => Promise<R>) =>\n async (arg0: Omit<Arg0, 'senderId'>, ...args: Args) => {\n let s = await sender;\n return await fn({ ...arg0, senderId: s.id } as any, ...args);\n };\n\n return {\n client: inner,\n\n createTemplate<Data>(\n template: ITemplate<Data>,\n identity: EmailIdentity | Promise<EmailIdentity>\n ) {\n return {\n send: async (i: { data: Data; to: string[] }) => {\n let rendered = await template.render(i.data);\n let s = await sender;\n\n return await inner.email.send({\n type: 'email',\n to: i.to,\n template: i.data as any,\n\n emailIdentityId: (await identity).id,\n senderId: s.id,\n\n content: {\n subject: rendered.subject,\n html: await rendered.html,\n text: await rendered.text\n }\n });\n }\n };\n }\n };\n};\n","import { IEmail } from './lib/email';\n\nexport interface ITemplate<Data> {\n render: (data: Data) => IEmail | Promise<IEmail>;\n}\n\nexport let createTemplate = <Data>(template: ITemplate<Data>) => template;\n"],"names":["buttonContainer","padding","textAlign","button","backgroundColor","borderRadius","fontWeight","color","fontSize","textDecoration","display","container","main","margin","fontFamily","maxWidth","logoContainer","marginTop","footerText","hr","border","borderBottom","background","Wrapper","_ref","children","preview","_jsxs","Html","_jsx","Head","Preview","jsx","Body","style","jsxs","Container","Section","Img","src","height","alt","Hr","process","env","METORIAL_SOURCE","Text","href","EmailButton","_extends","code","first3","slice","last3","verticalAlign","items","map","_ref2","i","value","Row","Column","label","title","description","React","Fragment","EmailText","marginBottom","subject","inner","content","html","render","plainText","text","o","createClient","sender","upsert","identifier","name","client","createTemplate","template","identity","send","Promise","resolve","data","then","rendered","s","_inner$email","email","_send","_i$data","_i$to","to","_identity","_s$id","id","_identity$id","_rendered$subject","_rendered$html","_rendered$text","call","type","emailIdentityId","senderId","e","reject"],"mappings":"mxBAGA,IAAIA,EAAkB,CACpBC,QAAS,cACTC,UAAW,UAGTC,EAAS,CACXC,gBAAiB,UACjBC,aAAc,MACdC,WAAY,MACZC,MAAO,OACPC,SAAU,OACVC,eAAgB,OAChBP,UAAW,SACXQ,QAAS,SCdPC,EAAY,CAGf,ECQGC,EAAO,CACTR,gBAAiB,UACjBS,OAAQ,SACRC,WACE,qJAGAH,EAAY,CACdI,SAAU,QACVF,OAAQ,UAGNG,EAAgB,CAClBC,UAAW,QAGTC,EAAa,CACfV,SAAU,OACVD,MAAO,QAGLY,EAAK,CACPN,OAAQ,WACRO,OAAQ,OACRC,aAAc,iBACdC,WAAY,QAGHC,EAAU,SAAHC,GAChB,IAAAC,EAAQD,EAARC,SACAC,EAAOF,EAAPE,QAKA,OACEC,OAACC,EAAAA,KACC,CAAAH,SAAA,CAAAI,EAAAA,IAACC,EAAAA,KAAO,CAAA,GAEPJ,GAAWG,MAACE,EAAAA,kBAASL,IAEtBG,EAAAG,IAACC,EAAIA,KAAA,CAACC,MAAOtB,EACXa,SAAAE,EAAAQ,KAACC,EAASA,UAAA,CAACF,MAAOvB,EAChBc,SAAA,CAAAI,EAAAG,IAACK,EAAOA,QAAA,CAACH,MAAOlB,EACdS,SAAAI,EAAAA,IAACS,EAAAA,IAAG,CACFC,IAAI,2GACJC,OAAO,KACPC,IAAI,eAIPhB,EAEDI,EAAAG,IAACU,EAAEA,GAAA,CAACR,MAAOf,IAEXU,EAAAA,IAACQ,EAAAA,QACE,CAAAZ,SAA+B,cAA/BkB,QAAQC,IAAIC,gBACXhB,EAAAA,IAACiB,EAAAA,KAAK,CAAAZ,MAAOhB,EAAUO,SAAA,0IAKvBE,EAACQ,KAAAW,EAAIA,KAAC,CAAAZ,MAAOhB,iDACuBW,EAAAA,IAAG,IAAA,CAAAkB,KAAK,uBAAmCtB,SAAA,aAAA,sFAS7F,WFlEoB,SAAHD,GAAuE,IAAjEuB,EAAIvB,EAAJuB,KAAMtB,EAAQD,EAARC,SAC3B,OACEI,EAAAG,IAACK,EAAOA,QAAA,CAACH,MAAOlC,EAAeyB,SAC7BI,EAAAA,IAACmB,EAAAA,OAAY,CAAAd,MAAKe,EAAA,CAAA,EAAO9C,EAAQF,CAAAA,QAAS,cAAe8C,KAAMA,EAC5DtB,SAAAA,KAIT,SGzBkB,SAAHD,GAAM,IAAA0B,EAAI1B,EAAJ0B,KACfC,EAASD,EAAKE,MAAM,EAAG,GACvBC,EAAQH,EAAKE,MAAM,EAAG,GAE1B,OACEvB,EAAAA,IAACQ,EAAOA,QAAA,CACNH,MAAO,CACLZ,WAAY,OACZF,OAAQ,iBACRf,aAAc,MACdQ,OAAQ,WACRZ,QAAS,YACVwB,SAEDE,EAAAA,KAACmB,EAAAA,KACC,CAAAZ,MAAO,CACL1B,SAAU,OACVN,UAAW,SACXoD,cAAe,UAGjB7B,SAAA,CAAAI,EAAAA,IAAA,OAAA,CAAAJ,SAAO0B,IACPtB,MAAA,OAAA,CAAMK,MAAO,CAAErB,OAAQ,QAASN,MAAO,QAAQkB,SAAA,MAC/CI,EAAAG,IAAA,OAAA,CAAAP,SAAO4B,QAIf,aFtBsB,SAAH7B,GACjB,OACEK,EAAAA,IAACQ,EAAAA,QAAO,CAACH,MAAOvB,WAFUa,EAAL+B,MAGZC,IAAI,SAAAC,EAAmBC,OAATC,EAAKF,EAALE,MACnB,OAAA9B,EAAAG,IAAC4B,MACC,CAAAnC,SAAAE,OAACkC,EAAAA,OAAO,CAAA3B,MAAO,CAAEjC,QAAS,sBACxB0B,EAAAA,KAACmB,EAAAA,MAAKZ,MAAO,CAAE1B,SAAU,GAAIF,WAAY,OAAQL,QAAS,UAAWY,OAAQ,GAC1EY,SAAA,CAJUgC,EAALK,UAIG,OAEXjC,EAAAA,IAACiB,EAAIA,KAAC,CAAAZ,MAAO,CAAE1B,SAAU,GAAIP,QAAS,UAAWY,OAAQ,YAAM8C,QALzDD,EAOJ,IAId,WGnBoB,SAAHlC,GACf,IAAAuC,EAAKvC,EAALuC,MACAC,EAAWxC,EAAXwC,YACAvC,EAAQD,EAARC,SACAS,EAAKV,EAALU,MAOA,OACEP,EAAAA,KAACsC,EAAAA,QAAMC,oBACLrC,EAAAA,IAACsC,EAAAA,KACC,CAAAjC,MAAKe,EAAA,CACHnC,WAAY,aACZN,SAAU,GACVF,WAAY,OACZ8D,aAAc,IACXlC,GAGJT,SAAAsC,IAGFC,GACCnC,EAAAA,IAACsC,EAAAA,KACC,CAAAjC,MAAKe,EACHnC,CAAAA,WAAY,aACZN,SAAU,GACV4D,aAAc,IACXlC,GACJT,SAEAuC,IAIJvC,IAGP,SCzCkB,SAAHD,GAMV,IALHC,EAAQD,EAARC,SAMA,OACEI,EAAAG,IAACmC,OAAS,CACRjC,MAAKe,EACHnC,CAAAA,WAAY,aACZN,SAAU,IATXgB,EAALU,OAaKT,SAAAA,GAGP,4BCXyB,SAAHD,GACpB,IAEA6C,EAAO7C,EAAP6C,QAMIC,EAAQzC,EAAAA,IAACN,EAAO,CAACG,QAPdF,EAAPE,QAOqCD,SAR9BD,EAAP+C,UAaA,MAAO,CACLF,QAAAA,EACAG,KALSC,SAAOH,EAAO,CAAEI,WAAW,IAMpCC,KALSF,EAAAA,OAAOH,EAAO,CAAEI,WAAW,IAOxC,sBCnB+B,SAC7BE,GAOA,IAAIN,EAAQO,EAAAA,aAA0BD,GAElCE,EAASR,EAAMQ,OAAOC,OAAO,CAC/BC,WAAYJ,EAAEE,OAAOE,WACrBC,KAAML,EAAEE,OAAOG,OAUjB,MAAO,CACLC,OAAQZ,EAERa,eAAA,SACEC,EACAC,GAEA,MAAO,CACLC,KAAIA,SAAS5B,GAAmC,IAAA,OAAA6B,QAAAC,QACzBJ,EAASX,OAAOf,EAAE+B,OAAKC,KAAxCC,SAAAA,UAAQJ,QAAAC,QACEV,GAAMY,KAAhBE,SAAAA,OAACC,EAEQvB,EAAMwB,MAAKC,EAAXF,EAAYP,KAAIU,EAGjBtC,EAAE+B,KAAWQ,EADnBvC,EAAEwC,GAAE,OAAAX,QAAAC,QAGgBH,GAAQK,KAAA,SAAAS,GAAA,IAAAC,EACtBR,EAAES,GAAEC,EADGH,EAAiBE,GAAEE,EAIzBZ,EAAStB,QAAO,OAAAkB,QAAAC,QACbG,EAASnB,MAAIkB,KAAA,SAAAc,GAAA,OAAAjB,QAAAC,QACbG,EAAShB,MAAIe,cAAAe,GAAA,OAAAlB,QAAAC,QAAAO,EAAAW,KAAAb,EAXC,CAC5Bc,KAAM,QACNT,GAAED,EACFb,SAAQY,EAERY,gBAAeN,EACfO,SAAQT,EAER7B,QAAS,CACPF,QAAOkC,EACP/B,KAAIgC,EACJ7B,KAAI8B,eAGV,CAAC,MAAAK,GAAA,OAAAvB,QAAAwB,OAAAD,KAEL,EAEJ,mBCxD4B,SAAO1B,GAA8B,OAAAA,CAAQ"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@metorial-services/relay-client",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -31,7 +31,7 @@
31
31
  "prepublish": "bun run build"
32
32
  },
33
33
  "dependencies": {
34
- "@lowerdeck/rpc-client": "^1.0.2",
34
+ "@lowerdeck/rpc-client": "^1.0.4",
35
35
  "@react-email/components": "^1.0.7",
36
36
  "react": "^19.2.4"
37
37
  },
package/src/index.ts CHANGED
@@ -31,18 +31,7 @@ export let createRelayClient = (
31
31
  };
32
32
 
33
33
  return {
34
- sender: {
35
- get: wrap(inner.sender.get),
36
- upsert: wrap(inner.sender.upsert)
37
- },
38
- emailIdentity: {
39
- get: wrap(inner.emailIdentity.get),
40
- upsert: wrap(inner.emailIdentity.upsert)
41
- },
42
- email: {
43
- send: wrap(inner.email.send)
44
- },
45
- send: wrap(inner.email.send),
34
+ client: inner,
46
35
 
47
36
  createTemplate<Data>(
48
37
  template: ITemplate<Data>,