@metorial-services/relay-client 1.0.2 → 1.0.3

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.
@@ -4,12 +4,7 @@ import { ITemplate } from './templates';
4
4
  export * from './templates';
5
5
  type ClientOpts = Parameters<typeof createClient>[0];
6
6
  type EmailIdentity = Awaited<ReturnType<RelayClient['emailIdentity']['get']>>;
7
- export declare let createRelayClient: (o: ClientOpts & {
8
- sender: {
9
- identifier: string;
10
- name: string;
11
- };
12
- }) => {
7
+ export declare let createRelayClient: (o: ClientOpts) => {
13
8
  client: import("@lowerdeck/rpc-server").InferClient<{
14
9
  emailIdentity: {
15
10
  upsert: import("@lowerdeck/rpc-server").Handler<import("@lowerdeck/validation/dist/validators").UndefinedIsOptional<{
@@ -130,7 +125,11 @@ export declare let createRelayClient: (o: ClientOpts & {
130
125
  }>;
131
126
  };
132
127
  }>;
133
- createTemplate<Data>(template: ITemplate<Data>, identity: EmailIdentity | Promise<EmailIdentity>): {
128
+ createTemplate<Data>(template: ITemplate<Data>, identity: EmailIdentity | Promise<EmailIdentity>, sender: {
129
+ id: string;
130
+ } | Promise<{
131
+ id: string;
132
+ }>): {
134
133
  send: (i: {
135
134
  data: Data;
136
135
  to: string[];
@@ -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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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"}
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,GAAI,GAAG,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAM1B,IAAI,YACP,SAAS,CAAC,IAAI,CAAC,YACf,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC,UACxC;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAC;kBAG9B;YAAE,IAAI,EAAE,IAAI,CAAC;YAAC,EAAE,EAAE,MAAM,EAAE,CAAA;SAAE;;;;CAqBnD,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 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};
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);return{client:n,createTemplate:function(e,t,r){return{send:function(i){try{return Promise.resolve(e.render(i.data)).then(function(e){var o=n.email,s=o.send,a=i.data,l=i.to;return Promise.resolve(t).then(function(t){var n=t.id;return Promise.resolve(r).then(function(t){var r=t.id,i=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:n,senderId:r,content:{subject:i,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 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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"}
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 = (o: ClientOpts) => {\n let inner = createClient<RelayClient>(o);\n\n return {\n client: inner,\n\n createTemplate<Data>(\n template: ITemplate<Data>,\n identity: EmailIdentity | Promise<EmailIdentity>,\n sender: { id: string } | Promise<{ id: string }>\n ) {\n return {\n send: async (i: { data: Data; to: string[] }) => {\n let rendered = await template.render(i.data);\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: (await sender).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","client","createTemplate","template","identity","sender","send","Promise","resolve","data","then","rendered","_inner$email","email","_send","_i$data","_i$to","to","_identity","_identity$id","id","_sender","_sender$id","_rendered$subject","_rendered$html","_rendered$text","call","type","emailIdentityId","senderId","e","reject"],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -283,12 +283,7 @@ export interface ITemplate<Data> {
283
283
  export declare let createTemplate: <Data>(template: ITemplate<Data>) => ITemplate<Data>;
284
284
  type ClientOpts$1 = Parameters<typeof createClient>[0];
285
285
  export type EmailIdentity = Awaited<ReturnType<RelayClient["emailIdentity"]["get"]>>;
286
- export declare let createRelayClient: (o: ClientOpts$1 & {
287
- sender: {
288
- identifier: string;
289
- name: string;
290
- };
291
- }) => {
286
+ export declare let createRelayClient: (o: ClientOpts$1) => {
292
287
  client: InferClient<{
293
288
  emailIdentity: {
294
289
  upsert: Handler<UndefinedIsOptional<{
@@ -409,7 +404,11 @@ export declare let createRelayClient: (o: ClientOpts$1 & {
409
404
  }>;
410
405
  };
411
406
  }>;
412
- createTemplate<Data>(template: ITemplate<Data>, identity: EmailIdentity | Promise<EmailIdentity>): {
407
+ createTemplate<Data>(template: ITemplate<Data>, identity: EmailIdentity | Promise<EmailIdentity>, sender: {
408
+ id: string;
409
+ } | Promise<{
410
+ id: string;
411
+ }>): {
413
412
  send: (i: {
414
413
  data: Data;
415
414
  to: string[];
@@ -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 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};
1
+ import{createClient as e}from"@lowerdeck/rpc-client";import{jsx as t,jsxs as n}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 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},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 n=e.href,o=e.children;return t(r,{style:g,children:t(i,{style:y({},v,{padding:"12px 18px"}),href:n,children:o})})},S=function(e){var i=e.code,l=i.slice(0,3),a=i.slice(3,6);return t(r,{style:{background:"#fff",border:"1px solid #ddd",borderRadius:"8px",margin:"20px 0px",padding:"6px 15px"},children:n(o,{style:{fontSize:"20px",textAlign:"center",verticalAlign:"middle"},children:[t("span",{children:l}),t("span",{style:{margin:"0 5px",color:"#aaa"},children:"-"}),t("span",{children:a})]})})},I={},z=function(e){return t(r,{style:I,children:e.items.map(function(e,r){var i=e.value;return t(l,{children:n(a,{style:{padding:"10px 0px"},children:[n(o,{style:{fontSize:14,fontWeight:"bold",padding:"3px 0px",margin:0},children:[e.label,":"," "]}),t(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 n(x.Fragment,{children:[t(o,{style:y({fontFamily:"sans-serif",fontSize:20,fontWeight:"bold",marginBottom:10},a),children:r}),i&&t(o,{style:y({fontFamily:"sans-serif",fontSize:16,marginBottom:20},a),children:i}),l]})},P=function(e){var n=e.children;return t(o,{style:y({fontFamily:"sans-serif",fontSize:14},e.style),children:n})},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 n(s,{children:[t(c,{}),l&&t(d,{children:l}),t(f,{style:k,children:n(p,{style:F,children:[t(r,{style:w,children:t(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,t(h,{style:M}),t(r,{children:"enterprise"==process.env.METORIAL_SOURCE?t(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."}):n(o,{style:A,children:["Sent by a self hosted instance of ",t("a",{href:"https://metorial.com",children:"Metorial"}),". Contact the administrator of this instance if you have any questions."]})})]})})]})},T=function(e){var n=e.subject,r=t(O,{preview:e.preview,children:e.content});return{subject:n,html:m(r,{plainText:!1}),text:m(r,{plainText:!0})}},B=function(e){return e},C=function(t){var n=e(t);return{client:n,createTemplate:function(e,t,r){return{send:function(i){try{return Promise.resolve(e.render(i.data)).then(function(e){var o=n.email,l=o.send,a=i.data,s=i.to;return Promise.resolve(t).then(function(t){var n=t.id;return Promise.resolve(r).then(function(t){var r=t.id,i=e.subject;return Promise.resolve(e.html).then(function(t){return Promise.resolve(e.text).then(function(e){return Promise.resolve(l.call(o,{type:"email",to:s,template:a,emailIdentityId:n,senderId:r,content:{subject:i,html:t,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 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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"}
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 = (o: ClientOpts) => {\n let inner = createClient<RelayClient>(o);\n\n return {\n client: inner,\n\n createTemplate<Data>(\n template: ITemplate<Data>,\n identity: EmailIdentity | Promise<EmailIdentity>,\n sender: { id: string } | Promise<{ id: string }>\n ) {\n return {\n send: async (i: { data: Data; to: string[] }) => {\n let rendered = await template.render(i.data);\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: (await sender).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","client","identity","sender","send","Promise","resolve","data","then","rendered","_inner$email","email","_send","_i$data","_i$to","to","_identity","_identity$id","id","_sender","_sender$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"},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}});
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"},h={margin:"20px 0px",border:"none",borderBottom:"1px solid #ddd",background:"none"},m=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:h}),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=m,e.createEmail=function(e){var t=e.subject,i=n.jsx(m,{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);return{client:n,createTemplate:function(e,t,r){return{send:function(i){try{return Promise.resolve(e.render(i.data)).then(function(e){var o=n.email,s=o.send,l=i.data,a=i.to;return Promise.resolve(t).then(function(t){var n=t.id;return Promise.resolve(r).then(function(t){var r=t.id,i=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:n,senderId:r,content:{subject:i,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 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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"}
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 = (o: ClientOpts) => {\n let inner = createClient<RelayClient>(o);\n\n return {\n client: inner,\n\n createTemplate<Data>(\n template: ITemplate<Data>,\n identity: EmailIdentity | Promise<EmailIdentity>,\n sender: { id: string } | Promise<{ id: string }>\n ) {\n return {\n send: async (i: { data: Data; to: string[] }) => {\n let rendered = await template.render(i.data);\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: (await sender).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","client","createTemplate","template","identity","sender","send","Promise","resolve","data","then","rendered","_inner$email","email","_send","_i$data","_i$to","to","_identity","_identity$id","id","_sender","_sender$id","_rendered$subject","_rendered$html","_rendered$text","call","type","emailIdentityId","senderId","e","reject"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@metorial-services/relay-client",
3
- "version": "1.0.2",
3
+ "version": "1.0.3",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
package/src/index.ts CHANGED
@@ -8,39 +8,20 @@ type ClientOpts = Parameters<typeof createClient>[0];
8
8
 
9
9
  type EmailIdentity = Awaited<ReturnType<RelayClient['emailIdentity']['get']>>;
10
10
 
11
- export let createRelayClient = (
12
- o: ClientOpts & {
13
- sender: {
14
- identifier: string;
15
- name: string;
16
- };
17
- }
18
- ) => {
11
+ export let createRelayClient = (o: ClientOpts) => {
19
12
  let inner = createClient<RelayClient>(o);
20
13
 
21
- let sender = inner.sender.upsert({
22
- identifier: o.sender.identifier,
23
- name: o.sender.name
24
- });
25
-
26
- let wrap =
27
- <Arg0, Args extends any[], R>(fn: (arg0: Arg0, ...args: Args) => Promise<R>) =>
28
- async (arg0: Omit<Arg0, 'senderId'>, ...args: Args) => {
29
- let s = await sender;
30
- return await fn({ ...arg0, senderId: s.id } as any, ...args);
31
- };
32
-
33
14
  return {
34
15
  client: inner,
35
16
 
36
17
  createTemplate<Data>(
37
18
  template: ITemplate<Data>,
38
- identity: EmailIdentity | Promise<EmailIdentity>
19
+ identity: EmailIdentity | Promise<EmailIdentity>,
20
+ sender: { id: string } | Promise<{ id: string }>
39
21
  ) {
40
22
  return {
41
23
  send: async (i: { data: Data; to: string[] }) => {
42
24
  let rendered = await template.render(i.data);
43
- let s = await sender;
44
25
 
45
26
  return await inner.email.send({
46
27
  type: 'email',
@@ -48,7 +29,7 @@ export let createRelayClient = (
48
29
  template: i.data as any,
49
30
 
50
31
  emailIdentityId: (await identity).id,
51
- senderId: s.id,
32
+ senderId: (await sender).id,
52
33
 
53
34
  content: {
54
35
  subject: rendered.subject,