@ooneex/mailer 0.0.1 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +436 -1
- package/dist/index.d.ts +38 -5
- package/dist/index.js +3 -2
- package/dist/index.js.map +14 -3
- package/package.json +18 -8
- package/dist/ooneex-mailer-0.0.1.tgz +0 -0
package/README.md
CHANGED
|
@@ -1 +1,436 @@
|
|
|
1
|
-
# @ooneex/
|
|
1
|
+
# @ooneex/mailer
|
|
2
|
+
|
|
3
|
+
An email sending service for TypeScript applications with support for Nodemailer SMTP and Resend API. This package provides a unified interface for sending transactional emails with React-based email templates and seamless integration with the Ooneex framework.
|
|
4
|
+
|
|
5
|
+

|
|
6
|
+

|
|
7
|
+

|
|
8
|
+

|
|
9
|
+

|
|
10
|
+
|
|
11
|
+
## Features
|
|
12
|
+
|
|
13
|
+
✅ **Multiple Providers** - Support for Nodemailer SMTP and Resend API
|
|
14
|
+
|
|
15
|
+
✅ **React Templates** - Build email templates using React components
|
|
16
|
+
|
|
17
|
+
✅ **Layout System** - Pre-built email layout with header, body, and footer
|
|
18
|
+
|
|
19
|
+
✅ **Type-Safe** - Full TypeScript support with proper type definitions
|
|
20
|
+
|
|
21
|
+
✅ **Container Integration** - Works seamlessly with dependency injection
|
|
22
|
+
|
|
23
|
+
✅ **Error Handling** - Comprehensive error handling with custom exceptions
|
|
24
|
+
|
|
25
|
+
## Installation
|
|
26
|
+
|
|
27
|
+
### Bun
|
|
28
|
+
```bash
|
|
29
|
+
bun add @ooneex/mailer
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### pnpm
|
|
33
|
+
```bash
|
|
34
|
+
pnpm add @ooneex/mailer
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### Yarn
|
|
38
|
+
```bash
|
|
39
|
+
yarn add @ooneex/mailer
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
### npm
|
|
43
|
+
```bash
|
|
44
|
+
npm install @ooneex/mailer
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Usage
|
|
48
|
+
|
|
49
|
+
### Basic Usage with Resend
|
|
50
|
+
|
|
51
|
+
```typescript
|
|
52
|
+
import { ResendMailerAdapter } from '@ooneex/mailer';
|
|
53
|
+
|
|
54
|
+
const mailer = new ResendMailerAdapter({
|
|
55
|
+
apiKey: 'your-resend-api-key'
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
await mailer.send({
|
|
59
|
+
to: ['user@example.com'],
|
|
60
|
+
subject: 'Welcome to our platform!',
|
|
61
|
+
content: <WelcomeEmail userName="John" />
|
|
62
|
+
});
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### Using Nodemailer SMTP
|
|
66
|
+
|
|
67
|
+
```typescript
|
|
68
|
+
import { NodeMailerAdapter } from '@ooneex/mailer';
|
|
69
|
+
|
|
70
|
+
const mailer = new NodeMailerAdapter({
|
|
71
|
+
host: 'smtp.example.com',
|
|
72
|
+
port: 587,
|
|
73
|
+
secure: false,
|
|
74
|
+
auth: {
|
|
75
|
+
user: 'your-username',
|
|
76
|
+
pass: 'your-password'
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
await mailer.send({
|
|
81
|
+
to: ['user@example.com'],
|
|
82
|
+
subject: 'Hello from Nodemailer!',
|
|
83
|
+
content: <SimpleEmail message="Hello World" />
|
|
84
|
+
});
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
### With Environment Variables
|
|
88
|
+
|
|
89
|
+
```typescript
|
|
90
|
+
import { ResendMailerAdapter } from '@ooneex/mailer';
|
|
91
|
+
|
|
92
|
+
// Automatically uses MAILER_RESEND_API_KEY environment variable
|
|
93
|
+
const mailer = new ResendMailerAdapter();
|
|
94
|
+
|
|
95
|
+
await mailer.send({
|
|
96
|
+
to: ['user@example.com'],
|
|
97
|
+
subject: 'Test Email',
|
|
98
|
+
content: <TestEmail />
|
|
99
|
+
});
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
**Environment Variables:**
|
|
103
|
+
- `MAILER_RESEND_API_KEY` - Resend API key
|
|
104
|
+
- `MAILER_SMTP_HOST` - SMTP server host
|
|
105
|
+
- `MAILER_SMTP_PORT` - SMTP server port
|
|
106
|
+
- `MAILER_SMTP_USER` - SMTP username
|
|
107
|
+
- `MAILER_SMTP_PASS` - SMTP password
|
|
108
|
+
|
|
109
|
+
### Using the Email Layout
|
|
110
|
+
|
|
111
|
+
```typescript
|
|
112
|
+
import { MailerLayout } from '@ooneex/mailer';
|
|
113
|
+
|
|
114
|
+
function WelcomeEmail({ userName }: { userName: string }) {
|
|
115
|
+
return (
|
|
116
|
+
<MailerLayout
|
|
117
|
+
title="Welcome"
|
|
118
|
+
previewText="Welcome to our platform!"
|
|
119
|
+
>
|
|
120
|
+
<h1>Hello, {userName}!</h1>
|
|
121
|
+
<p>Thank you for joining us.</p>
|
|
122
|
+
<a href="https://example.com/dashboard">Get Started</a>
|
|
123
|
+
</MailerLayout>
|
|
124
|
+
);
|
|
125
|
+
}
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### Custom Sender Information
|
|
129
|
+
|
|
130
|
+
```typescript
|
|
131
|
+
import { ResendMailerAdapter } from '@ooneex/mailer';
|
|
132
|
+
|
|
133
|
+
const mailer = new ResendMailerAdapter();
|
|
134
|
+
|
|
135
|
+
await mailer.send({
|
|
136
|
+
to: ['user@example.com'],
|
|
137
|
+
subject: 'Important Update',
|
|
138
|
+
content: <UpdateEmail />,
|
|
139
|
+
from: {
|
|
140
|
+
name: 'Support Team',
|
|
141
|
+
address: 'support@example.com'
|
|
142
|
+
}
|
|
143
|
+
});
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
## API Reference
|
|
147
|
+
|
|
148
|
+
### Classes
|
|
149
|
+
|
|
150
|
+
#### `ResendMailerAdapter`
|
|
151
|
+
|
|
152
|
+
Email adapter using the Resend API for sending emails.
|
|
153
|
+
|
|
154
|
+
**Constructor:**
|
|
155
|
+
```typescript
|
|
156
|
+
new ResendMailerAdapter(options?: { apiKey?: string })
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
**Parameters:**
|
|
160
|
+
- `options.apiKey` - Resend API key (optional if set via environment variable)
|
|
161
|
+
|
|
162
|
+
**Methods:**
|
|
163
|
+
|
|
164
|
+
##### `send(config: SendConfig): Promise<void>`
|
|
165
|
+
|
|
166
|
+
Sends an email using the Resend API.
|
|
167
|
+
|
|
168
|
+
**Parameters:**
|
|
169
|
+
- `config.to` - Array of recipient email addresses
|
|
170
|
+
- `config.subject` - Email subject line
|
|
171
|
+
- `config.content` - React node to render as email body
|
|
172
|
+
- `config.from` - Optional sender information
|
|
173
|
+
|
|
174
|
+
**Example:**
|
|
175
|
+
```typescript
|
|
176
|
+
const mailer = new ResendMailerAdapter();
|
|
177
|
+
|
|
178
|
+
await mailer.send({
|
|
179
|
+
to: ['recipient@example.com'],
|
|
180
|
+
subject: 'Welcome!',
|
|
181
|
+
content: <WelcomeEmail />
|
|
182
|
+
});
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
#### `NodeMailerAdapter`
|
|
188
|
+
|
|
189
|
+
Email adapter using Nodemailer for SMTP-based email sending.
|
|
190
|
+
|
|
191
|
+
**Constructor:**
|
|
192
|
+
```typescript
|
|
193
|
+
new NodeMailerAdapter(options?: NodeMailerOptionsType)
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
**Parameters:**
|
|
197
|
+
- `options.host` - SMTP server hostname
|
|
198
|
+
- `options.port` - SMTP server port
|
|
199
|
+
- `options.secure` - Use TLS (default: false for port 587)
|
|
200
|
+
- `options.auth.user` - SMTP username
|
|
201
|
+
- `options.auth.pass` - SMTP password
|
|
202
|
+
|
|
203
|
+
**Methods:**
|
|
204
|
+
|
|
205
|
+
##### `send(config: SendConfig): Promise<void>`
|
|
206
|
+
|
|
207
|
+
Sends an email using SMTP.
|
|
208
|
+
|
|
209
|
+
**Parameters:**
|
|
210
|
+
Same as `ResendMailerAdapter.send()`
|
|
211
|
+
|
|
212
|
+
---
|
|
213
|
+
|
|
214
|
+
#### `MailerLayout`
|
|
215
|
+
|
|
216
|
+
React component providing a pre-styled email layout.
|
|
217
|
+
|
|
218
|
+
**Props:**
|
|
219
|
+
- `title` - Email title (for document head)
|
|
220
|
+
- `previewText` - Preview text shown in email clients
|
|
221
|
+
- `children` - Email content
|
|
222
|
+
|
|
223
|
+
**Example:**
|
|
224
|
+
```typescript
|
|
225
|
+
<MailerLayout
|
|
226
|
+
title="Order Confirmation"
|
|
227
|
+
previewText="Your order has been confirmed"
|
|
228
|
+
>
|
|
229
|
+
<h1>Thank you for your order!</h1>
|
|
230
|
+
<p>Order #12345 has been confirmed.</p>
|
|
231
|
+
</MailerLayout>
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
### Interfaces
|
|
235
|
+
|
|
236
|
+
#### `IMailer`
|
|
237
|
+
|
|
238
|
+
```typescript
|
|
239
|
+
interface IMailer {
|
|
240
|
+
send: (config: {
|
|
241
|
+
to: string[];
|
|
242
|
+
subject: string;
|
|
243
|
+
content: React.ReactNode;
|
|
244
|
+
from?: { name: string; address: string };
|
|
245
|
+
}) => Promise<void>;
|
|
246
|
+
}
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
### Types
|
|
250
|
+
|
|
251
|
+
#### `MailerClassType`
|
|
252
|
+
|
|
253
|
+
```typescript
|
|
254
|
+
type MailerClassType = new (...args: any[]) => IMailer;
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
## Advanced Usage
|
|
258
|
+
|
|
259
|
+
### Integration with Ooneex App
|
|
260
|
+
|
|
261
|
+
```typescript
|
|
262
|
+
import { App } from '@ooneex/app';
|
|
263
|
+
import { ResendMailerAdapter } from '@ooneex/mailer';
|
|
264
|
+
|
|
265
|
+
const app = new App({
|
|
266
|
+
mailer: ResendMailerAdapter,
|
|
267
|
+
// ... other config
|
|
268
|
+
});
|
|
269
|
+
|
|
270
|
+
await app.run();
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
### Using in Controllers
|
|
274
|
+
|
|
275
|
+
```typescript
|
|
276
|
+
import { Route } from '@ooneex/routing';
|
|
277
|
+
import type { IController, ContextType } from '@ooneex/controller';
|
|
278
|
+
|
|
279
|
+
@Route.http({
|
|
280
|
+
name: 'api.users.invite',
|
|
281
|
+
path: '/api/users/invite',
|
|
282
|
+
method: 'POST',
|
|
283
|
+
description: 'Send invitation email'
|
|
284
|
+
})
|
|
285
|
+
class InviteUserController implements IController {
|
|
286
|
+
public async index(context: ContextType): Promise<IResponse> {
|
|
287
|
+
const { email, name } = context.payload;
|
|
288
|
+
|
|
289
|
+
await context.mailer?.send({
|
|
290
|
+
to: [email],
|
|
291
|
+
subject: 'You are invited!',
|
|
292
|
+
content: <InvitationEmail recipientName={name} />
|
|
293
|
+
});
|
|
294
|
+
|
|
295
|
+
return context.response.json({ sent: true });
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
### Container Registration with Decorator
|
|
301
|
+
|
|
302
|
+
```typescript
|
|
303
|
+
import { container } from '@ooneex/container';
|
|
304
|
+
import { ResendMailerAdapter, decorator } from '@ooneex/mailer';
|
|
305
|
+
|
|
306
|
+
// Register with container using decorator
|
|
307
|
+
@decorator.mailer()
|
|
308
|
+
class MyMailerService extends ResendMailerAdapter {
|
|
309
|
+
// Custom implementation
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
// Resolve from container
|
|
313
|
+
const mailer = container.get(MyMailerService);
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
### Error Handling
|
|
317
|
+
|
|
318
|
+
```typescript
|
|
319
|
+
import { ResendMailerAdapter, MailerException } from '@ooneex/mailer';
|
|
320
|
+
|
|
321
|
+
const mailer = new ResendMailerAdapter();
|
|
322
|
+
|
|
323
|
+
try {
|
|
324
|
+
await mailer.send({
|
|
325
|
+
to: ['user@example.com'],
|
|
326
|
+
subject: 'Test',
|
|
327
|
+
content: <TestEmail />
|
|
328
|
+
});
|
|
329
|
+
} catch (error) {
|
|
330
|
+
if (error instanceof MailerException) {
|
|
331
|
+
console.error('Mailer Error:', error.message);
|
|
332
|
+
// Handle email-specific error
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
```
|
|
336
|
+
|
|
337
|
+
### Building Custom Email Templates
|
|
338
|
+
|
|
339
|
+
```typescript
|
|
340
|
+
import { MailerLayout } from '@ooneex/mailer';
|
|
341
|
+
|
|
342
|
+
interface OrderConfirmationProps {
|
|
343
|
+
orderId: string;
|
|
344
|
+
items: Array<{ name: string; price: number }>;
|
|
345
|
+
total: number;
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
function OrderConfirmationEmail({ orderId, items, total }: OrderConfirmationProps) {
|
|
349
|
+
return (
|
|
350
|
+
<MailerLayout
|
|
351
|
+
title="Order Confirmation"
|
|
352
|
+
previewText={`Order #${orderId} confirmed`}
|
|
353
|
+
>
|
|
354
|
+
<div style={{ fontFamily: 'Arial, sans-serif' }}>
|
|
355
|
+
<h1 style={{ color: '#333' }}>Order Confirmed!</h1>
|
|
356
|
+
<p>Order ID: <strong>{orderId}</strong></p>
|
|
357
|
+
|
|
358
|
+
<table style={{ width: '100%', borderCollapse: 'collapse' }}>
|
|
359
|
+
<thead>
|
|
360
|
+
<tr>
|
|
361
|
+
<th style={{ textAlign: 'left', padding: '8px' }}>Item</th>
|
|
362
|
+
<th style={{ textAlign: 'right', padding: '8px' }}>Price</th>
|
|
363
|
+
</tr>
|
|
364
|
+
</thead>
|
|
365
|
+
<tbody>
|
|
366
|
+
{items.map((item, index) => (
|
|
367
|
+
<tr key={index}>
|
|
368
|
+
<td style={{ padding: '8px' }}>{item.name}</td>
|
|
369
|
+
<td style={{ textAlign: 'right', padding: '8px' }}>
|
|
370
|
+
${item.price.toFixed(2)}
|
|
371
|
+
</td>
|
|
372
|
+
</tr>
|
|
373
|
+
))}
|
|
374
|
+
</tbody>
|
|
375
|
+
<tfoot>
|
|
376
|
+
<tr>
|
|
377
|
+
<td style={{ padding: '8px', fontWeight: 'bold' }}>Total</td>
|
|
378
|
+
<td style={{ textAlign: 'right', padding: '8px', fontWeight: 'bold' }}>
|
|
379
|
+
${total.toFixed(2)}
|
|
380
|
+
</td>
|
|
381
|
+
</tr>
|
|
382
|
+
</tfoot>
|
|
383
|
+
</table>
|
|
384
|
+
|
|
385
|
+
<p style={{ marginTop: '20px' }}>
|
|
386
|
+
Thank you for your purchase!
|
|
387
|
+
</p>
|
|
388
|
+
</div>
|
|
389
|
+
</MailerLayout>
|
|
390
|
+
);
|
|
391
|
+
}
|
|
392
|
+
```
|
|
393
|
+
|
|
394
|
+
### Sending to Multiple Recipients
|
|
395
|
+
|
|
396
|
+
```typescript
|
|
397
|
+
import { ResendMailerAdapter } from '@ooneex/mailer';
|
|
398
|
+
|
|
399
|
+
const mailer = new ResendMailerAdapter();
|
|
400
|
+
|
|
401
|
+
await mailer.send({
|
|
402
|
+
to: [
|
|
403
|
+
'user1@example.com',
|
|
404
|
+
'user2@example.com',
|
|
405
|
+
'user3@example.com'
|
|
406
|
+
],
|
|
407
|
+
subject: 'Team Announcement',
|
|
408
|
+
content: <AnnouncementEmail />
|
|
409
|
+
});
|
|
410
|
+
```
|
|
411
|
+
|
|
412
|
+
## License
|
|
413
|
+
|
|
414
|
+
This project is licensed under the MIT License - see the [LICENSE](./LICENSE) file for details.
|
|
415
|
+
|
|
416
|
+
## Contributing
|
|
417
|
+
|
|
418
|
+
Contributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.
|
|
419
|
+
|
|
420
|
+
### Development Setup
|
|
421
|
+
|
|
422
|
+
1. Clone the repository
|
|
423
|
+
2. Install dependencies: `bun install`
|
|
424
|
+
3. Run tests: `bun run test`
|
|
425
|
+
4. Build the project: `bun run build`
|
|
426
|
+
|
|
427
|
+
### Guidelines
|
|
428
|
+
|
|
429
|
+
- Write tests for new features
|
|
430
|
+
- Follow the existing code style
|
|
431
|
+
- Update documentation for API changes
|
|
432
|
+
- Ensure all tests pass before submitting PR
|
|
433
|
+
|
|
434
|
+
---
|
|
435
|
+
|
|
436
|
+
Made with ❤️ by the Ooneex team
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
declare class MailerException extends Exception {
|
|
3
|
-
constructor(message: string, data?: Record<string, unknown>);
|
|
4
|
-
}
|
|
1
|
+
import { EContainerScope } from "@ooneex/container";
|
|
5
2
|
type MailerClassType = new (...args: any[]) => IMailer;
|
|
6
3
|
interface IMailer {
|
|
7
4
|
send: (config: {
|
|
@@ -14,6 +11,42 @@ interface IMailer {
|
|
|
14
11
|
};
|
|
15
12
|
}) => Promise<void>;
|
|
16
13
|
}
|
|
14
|
+
declare const decorator: {
|
|
15
|
+
mailer: (scope?: EContainerScope) => (target: MailerClassType) => void;
|
|
16
|
+
};
|
|
17
|
+
import { Exception } from "@ooneex/exception";
|
|
18
|
+
declare class MailerException extends Exception {
|
|
19
|
+
constructor(message: string, data?: Record<string, unknown>);
|
|
20
|
+
}
|
|
21
|
+
import { LocaleType } from "@ooneex/translation";
|
|
22
|
+
declare const MailerLayoutBody: ({ children, backgroundColor }: {
|
|
23
|
+
children: React.ReactNode;
|
|
24
|
+
backgroundColor?: string;
|
|
25
|
+
}) => React.JSX.Element;
|
|
26
|
+
declare const MailerLayoutFooter: ({ backgroundColor, instagram, tiktok, linkedin, facebook, slack }: {
|
|
27
|
+
backgroundColor?: string;
|
|
28
|
+
instagram?: string;
|
|
29
|
+
tiktok?: string;
|
|
30
|
+
linkedin?: string;
|
|
31
|
+
facebook?: string;
|
|
32
|
+
slack?: string;
|
|
33
|
+
}) => React.JSX.Element;
|
|
34
|
+
declare const MailerLayoutHeader: ({ children, backgroundColor }: {
|
|
35
|
+
children?: React.ReactNode;
|
|
36
|
+
backgroundColor?: string;
|
|
37
|
+
}) => React.JSX.Element;
|
|
38
|
+
type PropsType = {
|
|
39
|
+
locale?: LocaleType;
|
|
40
|
+
fontFamily?: string;
|
|
41
|
+
backgroundColor?: string;
|
|
42
|
+
children?: React.ReactNode;
|
|
43
|
+
};
|
|
44
|
+
type MailerLayoutComponentType = React.FC<PropsType> & {
|
|
45
|
+
Header: typeof MailerLayoutHeader;
|
|
46
|
+
Body: typeof MailerLayoutBody;
|
|
47
|
+
Footer: typeof MailerLayoutFooter;
|
|
48
|
+
};
|
|
49
|
+
declare const MailerLayout: MailerLayoutComponentType;
|
|
17
50
|
declare class NodeMailerAdapter implements IMailer {
|
|
18
51
|
private dsn;
|
|
19
52
|
private from?;
|
|
@@ -42,4 +75,4 @@ declare class ResendMailerAdapter implements IMailer {
|
|
|
42
75
|
};
|
|
43
76
|
}): Promise<void>;
|
|
44
77
|
}
|
|
45
|
-
export { ResendMailerAdapter, NodeMailerAdapter, MailerException, MailerClassType, IMailer };
|
|
78
|
+
export { decorator, ResendMailerAdapter, NodeMailerAdapter, MailerLayout, MailerException, MailerClassType, IMailer };
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
// @bun
|
|
2
|
+
import{container as I,EContainerScope as G}from"@ooneex/container";var N={mailer:(e=G.Singleton)=>{return(t)=>{I.add(t,e)}}};import{Exception as H}from"@ooneex/exception";import{HttpStatus as P}from"@ooneex/http-status";class n extends H{constructor(e,t={}){super(e,{status:P.Code.InternalServerError,data:t});this.name="MailerException"}}import{jsxDEV as _}from"react/jsx-dev-runtime";var f=({children:e,backgroundColor:t="#ffffff"})=>_("div",{style:{backgroundColor:t,width:"100%",maxWidth:"640px",padding:"32px",margin:"auto",borderRadius:"4px",display:"flex",flexDirection:"column",columnGap:"26px",marginTop:"60px",marginBottom:"32px",color:"#432371",lineHeight:"1.5",fontSize:"16px"},children:e},void 0,!1,void 0,this);import{jsxDEV as m}from"react/jsx-dev-runtime";var C=(e)=>{return m("svg",{xmlns:"http://www.w3.org/2000/svg",width:256,height:256,viewBox:"0 0 256 256",...e,children:[m("path",{fill:"#1877f2",d:"M256 128C256 57.308 198.692 0 128 0S0 57.308 0 128c0 63.888 46.808 116.843 108 126.445V165H75.5v-37H108V99.8c0-32.08 19.11-49.8 48.348-49.8C170.352 50 185 52.5 185 52.5V84h-16.14C152.959 84 148 93.867 148 103.99V128h35.5l-5.675 37H148v89.445c61.192-9.602 108-62.556 108-126.445"},void 0,!1,void 0,this),m("path",{fill:"#fff",d:"m177.825 165l5.675-37H148v-24.01C148 93.866 152.959 84 168.86 84H185V52.5S170.352 50 156.347 50C127.11 50 108 67.72 108 99.8V128H75.5v37H108v89.445A129 129 0 0 0 128 256a129 129 0 0 0 20-1.555V165z"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)};import{jsxDEV as o}from"react/jsx-dev-runtime";var h=(e)=>{return o("svg",{xmlns:"http://www.w3.org/2000/svg",width:256,height:256,viewBox:"0 0 256 256",...e,children:o("g",{fill:"none",children:[o("rect",{width:256,height:256,fill:"url(#skillIconsInstagram0)",rx:60},void 0,!1,void 0,this),o("rect",{width:256,height:256,fill:"url(#skillIconsInstagram1)",rx:60},void 0,!1,void 0,this),o("path",{fill:"#fff",d:"M128.009 28c-27.158 0-30.567.119-41.233.604c-10.646.488-17.913 2.173-24.271 4.646c-6.578 2.554-12.157 5.971-17.715 11.531c-5.563 5.559-8.98 11.138-11.542 17.713c-2.48 6.36-4.167 13.63-4.646 24.271c-.477 10.667-.602 14.077-.602 41.236s.12 30.557.604 41.223c.49 10.646 2.175 17.913 4.646 24.271c2.556 6.578 5.973 12.157 11.533 17.715c5.557 5.563 11.136 8.988 17.709 11.542c6.363 2.473 13.631 4.158 24.275 4.646c10.667.485 14.073.604 41.23.604c27.161 0 30.559-.119 41.225-.604c10.646-.488 17.921-2.173 24.284-4.646c6.575-2.554 12.146-5.979 17.702-11.542c5.563-5.558 8.979-11.137 11.542-17.712c2.458-6.361 4.146-13.63 4.646-24.272c.479-10.666.604-14.066.604-41.225s-.125-30.567-.604-41.234c-.5-10.646-2.188-17.912-4.646-24.27c-2.563-6.578-5.979-12.157-11.542-17.716c-5.562-5.562-11.125-8.979-17.708-11.53c-6.375-2.474-13.646-4.16-24.292-4.647c-10.667-.485-14.063-.604-41.23-.604zm-8.971 18.021c2.663-.004 5.634 0 8.971 0c26.701 0 29.865.096 40.409.575c9.75.446 15.042 2.075 18.567 3.444c4.667 1.812 7.994 3.979 11.492 7.48c3.5 3.5 5.666 6.833 7.483 11.5c1.369 3.52 3 8.812 3.444 18.562c.479 10.542.583 13.708.583 40.396s-.104 29.855-.583 40.396c-.446 9.75-2.075 15.042-3.444 18.563c-1.812 4.667-3.983 7.99-7.483 11.488c-3.5 3.5-6.823 5.666-11.492 7.479c-3.521 1.375-8.817 3-18.567 3.446c-10.542.479-13.708.583-40.409.583c-26.702 0-29.867-.104-40.408-.583c-9.75-.45-15.042-2.079-18.57-3.448c-4.666-1.813-8-3.979-11.5-7.479s-5.666-6.825-7.483-11.494c-1.369-3.521-3-8.813-3.444-18.563c-.479-10.542-.575-13.708-.575-40.413s.096-29.854.575-40.396c.446-9.75 2.075-15.042 3.444-18.567c1.813-4.667 3.983-8 7.484-11.5s6.833-5.667 11.5-7.483c3.525-1.375 8.819-3 18.569-3.448c9.225-.417 12.8-.542 31.437-.563zm62.351 16.604c-6.625 0-12 5.37-12 11.996c0 6.625 5.375 12 12 12s12-5.375 12-12s-5.375-12-12-12zm-53.38 14.021c-28.36 0-51.354 22.994-51.354 51.355s22.994 51.344 51.354 51.344c28.361 0 51.347-22.983 51.347-51.344c0-28.36-22.988-51.355-51.349-51.355zm0 18.021c18.409 0 33.334 14.923 33.334 33.334c0 18.409-14.925 33.334-33.334 33.334s-33.333-14.925-33.333-33.334c0-18.411 14.923-33.334 33.333-33.334"},void 0,!1,void 0,this),o("defs",{children:[o("radialGradient",{id:"skillIconsInstagram0",cx:0,cy:0,r:1,gradientTransform:"matrix(0 -253.715 235.975 0 68 275.717)",gradientUnits:"userSpaceOnUse",children:[o("stop",{stopColor:"#fd5"},void 0,!1,void 0,this),o("stop",{offset:0.1,stopColor:"#fd5"},void 0,!1,void 0,this),o("stop",{offset:0.5,stopColor:"#ff543e"},void 0,!1,void 0,this),o("stop",{offset:1,stopColor:"#c837ab"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),o("radialGradient",{id:"skillIconsInstagram1",cx:0,cy:0,r:1,gradientTransform:"matrix(22.25952 111.2061 -458.39518 91.75449 -42.881 18.441)",gradientUnits:"userSpaceOnUse",children:[o("stop",{stopColor:"#3771c8"},void 0,!1,void 0,this),o("stop",{offset:0.128,stopColor:"#3771c8"},void 0,!1,void 0,this),o("stop",{offset:1,stopColor:"#60f",stopOpacity:0},void 0,!1,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)]},void 0,!0,void 0,this)},void 0,!1,void 0,this)};import{jsxDEV as g}from"react/jsx-dev-runtime";var w=(e)=>{return g("svg",{xmlns:"http://www.w3.org/2000/svg",width:256,height:256,viewBox:"0 0 256 256",...e,children:g("path",{fill:"#0a66c2",d:"M218.123 218.127h-37.931v-59.403c0-14.165-.253-32.4-19.728-32.4c-19.756 0-22.779 15.434-22.779 31.369v60.43h-37.93V95.967h36.413v16.694h.51a39.91 39.91 0 0 1 35.928-19.733c38.445 0 45.533 25.288 45.533 58.186zM56.955 79.27c-12.157.002-22.014-9.852-22.016-22.009s9.851-22.014 22.008-22.016c12.157-.003 22.014 9.851 22.016 22.008A22.013 22.013 0 0 1 56.955 79.27m18.966 138.858H37.95V95.967h37.97zM237.033.018H18.89C8.58-.098.125 8.161-.001 18.471v219.053c.122 10.315 8.576 18.582 18.89 18.474h218.144c10.336.128 18.823-8.139 18.966-18.474V18.454c-.147-10.33-8.635-18.588-18.966-18.453"},void 0,!1,void 0,this)},void 0,!1,void 0,this)};import{jsxDEV as s}from"react/jsx-dev-runtime";var v=(e)=>{return s("svg",{xmlns:"http://www.w3.org/2000/svg",width:128,height:128,viewBox:"0 0 128 128",...e,children:[s("path",{fill:"#de1c59",d:"M27.255 80.719c0 7.33-5.978 13.317-13.309 13.317S.63 88.049.63 80.719s5.987-13.317 13.317-13.317h13.309zm6.709 0c0-7.33 5.987-13.317 13.317-13.317s13.317 5.986 13.317 13.317v33.335c0 7.33-5.986 13.317-13.317 13.317c-7.33 0-13.317-5.987-13.317-13.317zm0 0"},void 0,!1,void 0,this),s("path",{fill:"#35c5f0",d:"M47.281 27.255c-7.33 0-13.317-5.978-13.317-13.309S39.951.63 47.281.63s13.317 5.987 13.317 13.317v13.309zm0 6.709c7.33 0 13.317 5.987 13.317 13.317s-5.986 13.317-13.317 13.317H13.946C6.616 60.598.63 54.612.63 47.281c0-7.33 5.987-13.317 13.317-13.317zm0 0"},void 0,!1,void 0,this),s("path",{fill:"#2eb57d",d:"M100.745 47.281c0-7.33 5.978-13.317 13.309-13.317s13.317 5.987 13.317 13.317s-5.987 13.317-13.317 13.317h-13.309zm-6.709 0c0 7.33-5.987 13.317-13.317 13.317s-13.317-5.986-13.317-13.317V13.946C67.402 6.616 73.388.63 80.719.63c7.33 0 13.317 5.987 13.317 13.317zm0 0"},void 0,!1,void 0,this),s("path",{fill:"#ebb02e",d:"M80.719 100.745c7.33 0 13.317 5.978 13.317 13.309s-5.987 13.317-13.317 13.317s-13.317-5.987-13.317-13.317v-13.309zm0-6.709c-7.33 0-13.317-5.987-13.317-13.317s5.986-13.317 13.317-13.317h33.335c7.33 0 13.317 5.986 13.317 13.317c0 7.33-5.987 13.317-13.317 13.317zm0 0"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)};import{jsxDEV as p}from"react/jsx-dev-runtime";var y=(e)=>{return p("svg",{xmlns:"http://www.w3.org/2000/svg",width:256,height:290,viewBox:"0 0 256 290",...e,children:[p("path",{fill:"#ff004f",d:"M189.72 104.421c18.678 13.345 41.56 21.197 66.273 21.197v-47.53a67 67 0 0 1-13.918-1.456v37.413c-24.711 0-47.59-7.851-66.272-21.195v96.996c0 48.523-39.356 87.855-87.9 87.855c-18.113 0-34.949-5.473-48.934-14.86c15.962 16.313 38.222 26.432 62.848 26.432c48.548 0 87.905-39.332 87.905-87.857v-96.995zm17.17-47.952c-9.546-10.423-15.814-23.893-17.17-38.785v-6.113h-13.189c3.32 18.927 14.644 35.097 30.358 44.898M69.673 225.607a40 40 0 0 1-8.203-24.33c0-22.192 18.001-40.186 40.21-40.186a40.3 40.3 0 0 1 12.197 1.883v-48.593c-4.61-.631-9.262-.9-13.912-.801v37.822a40.3 40.3 0 0 0-12.203-1.882c-22.208 0-40.208 17.992-40.208 40.187c0 15.694 8.997 29.281 22.119 35.9"},void 0,!1,void 0,this),p("path",{d:"M175.803 92.849c18.683 13.344 41.56 21.195 66.272 21.195V76.631c-13.794-2.937-26.005-10.141-35.186-20.162c-15.715-9.802-27.038-25.972-30.358-44.898h-34.643v189.843c-.079 22.132-18.049 40.052-40.21 40.052c-13.058 0-24.66-6.221-32.007-15.86c-13.12-6.618-22.118-20.206-22.118-35.898c0-22.193 18-40.187 40.208-40.187c4.255 0 8.356.662 12.203 1.882v-37.822c-47.692.985-86.047 39.933-86.047 87.834c0 23.912 9.551 45.589 25.053 61.428c13.985 9.385 30.82 14.86 48.934 14.86c48.545 0 87.9-39.335 87.9-87.857z"},void 0,!1,void 0,this),p("path",{fill:"#00f2ea",d:"M242.075 76.63V66.516a66.3 66.3 0 0 1-35.186-10.047a66.47 66.47 0 0 0 35.186 20.163M176.53 11.57a68 68 0 0 1-.728-5.457V0h-47.834v189.845c-.076 22.13-18.046 40.05-40.208 40.05a40.06 40.06 0 0 1-18.09-4.287c7.347 9.637 18.949 15.857 32.007 15.857c22.16 0 40.132-17.918 40.21-40.05V11.571zM99.966 113.58v-10.769a89 89 0 0 0-12.061-.818C39.355 101.993 0 141.327 0 189.845c0 30.419 15.467 57.227 38.971 72.996c-15.502-15.838-25.053-37.516-25.053-61.427c0-47.9 38.354-86.848 86.048-87.833"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)};import{jsxDEV as i}from"react/jsx-dev-runtime";var u=({backgroundColor:e,instagram:t="https://www.instagram.com/ooneex_official",tiktok:a="https://www.tiktok.com/@ooneex",linkedin:c="https://www.linkedin.com/company/ooneex/",facebook:A="https://www.facebook.com/profile.php?id=61560619401969",slack:k="https://join.slack.com/t/ooneex/shared_invite/zt-2ragcg3dz-P0Su1E7yFG33C3L5CPOuzw"})=>i("div",{style:{display:"flex",flexDirection:"row",rowGap:"24px",columnGap:"24px",gap:"24px",alignItems:"center",justifyContent:"center",justifyItems:"center",placeContent:"center",placeItems:"center",backgroundColor:e},children:[i("a",{href:t,children:i(h,{width:28,height:28},void 0,!1,void 0,this)},void 0,!1,void 0,this),i("a",{href:a,children:i(y,{width:28,height:28},void 0,!1,void 0,this)},void 0,!1,void 0,this),i("a",{href:c,children:i(w,{width:28,height:28},void 0,!1,void 0,this)},void 0,!1,void 0,this),i("a",{href:A,children:i(C,{width:28,height:28},void 0,!1,void 0,this)},void 0,!1,void 0,this),i("a",{href:k,children:i(v,{width:28,height:28},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this);import{jsxDEV as r}from"react/jsx-dev-runtime";var M=()=>{return r("svg",{width:"180",height:"28",viewBox:"0 0 180 28",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[r("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M20.6871 6.38198C20.6143 6.45588 20.4954 6.45943 20.4154 6.3901C19.3852 5.49205 18.2821 4.8131 17.1059 4.35326C15.9189 3.888 14.6691 3.66687 13.3564 3.68986C11.6827 3.71962 10.1334 4.15106 8.70848 4.98419C7.98115 5.40887 6.95099 6.27649 5.618 7.58705C3.81454 9.36016 2.0077 11.161 0.197485 12.9895C0.0501262 13.1383 -0.0147658 13.1086 0.00280911 12.9003C0.375938 8.52905 2.24902 5.07616 5.62205 2.5416C8.12175 0.663 11.0662 -0.174188 14.4555 0.030037C17.819 0.231557 20.6851 1.5056 23.0537 3.85216C23.0729 3.87121 23.0837 3.89713 23.0837 3.92418C23.0837 3.95123 23.0729 3.97715 23.0537 3.9962L20.6871 6.38198Z",fill:"#FAAE7B"},void 0,!1,void 0,this),r("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M2.73435 19.7128C2.49236 19.963 2.23887 20.2017 1.9739 20.4289C1.95437 20.4451 1.92876 20.452 1.90405 20.4477C1.87934 20.4434 1.85811 20.4283 1.84614 20.4066C1.26617 19.3381 0.796378 18.1926 0.436768 16.9699C0.406636 16.8685 0.434606 16.7581 0.509771 16.6818C2.86616 14.3231 5.18335 12.0049 7.46133 9.72736C8.67805 8.51148 9.56626 7.74124 10.126 7.41664C11.1953 6.7972 12.3681 6.49492 13.6443 6.5098C15.437 6.53144 17.0343 7.16846 18.4362 8.42086C18.4566 8.43869 18.4691 8.46394 18.4708 8.49076C18.4721 8.51758 18.4626 8.54363 18.4443 8.56287L16.025 11.046C15.9633 11.1096 15.8612 11.1148 15.7878 11.0582C14.8874 10.3603 13.937 10.1162 12.9366 10.3258C12.4093 10.4354 11.8618 10.7383 11.294 11.2347C10.787 11.6756 10.2145 12.2268 9.5764 12.8881C8.71793 13.7753 6.69547 15.7838 3.509 18.9134C3.50224 18.9202 3.24402 19.1866 2.73435 19.7128Z",fill:"#FEF6F0"},void 0,!1,void 0,this),r("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M23.0922 14.0365C20.6547 16.4872 19.1486 17.9891 18.5741 18.5423C17.6764 19.4092 16.6395 20.003 15.4633 20.3235C14.302 20.6413 13.1461 20.667 11.9957 20.4006C10.7641 20.1125 9.66495 19.512 8.69833 18.5991C8.67874 18.5812 8.66744 18.556 8.66705 18.5291C8.66667 18.5023 8.67724 18.4763 8.69631 18.4571L11.1115 16.0186C11.1849 15.9454 11.3015 15.9377 11.3853 16.0003C12.5276 16.8632 13.6524 17.0735 14.7597 16.6312C15.2585 16.4324 15.9642 15.8799 16.8768 14.9738C19.6563 12.2106 22.4277 9.45291 25.191 6.7006C25.2088 6.68235 25.2342 6.67373 25.2597 6.67731C25.2852 6.6809 25.3078 6.69628 25.3208 6.71886C25.9738 7.86577 26.451 9.01944 26.7525 10.1799C26.7763 10.2677 26.7508 10.3621 26.6856 10.4274C25.4283 11.6892 24.2305 12.8923 23.0922 14.0365Z",fill:"#FEF6F0"},void 0,!1,void 0,this),r("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M26.4118 18.1241C26.0576 19.0411 25.6561 19.8952 25.2073 20.6864L24.5442 21.6156L24.0879 22.2242C23.3254 23.0763 22.519 23.8255 21.6686 24.472L21.0522 24.9366C20.1112 25.5101 19.1433 25.9949 18.1482 26.3912L17.2945 26.6367C12.4479 27.816 8.08457 26.7368 4.20457 23.3988C4.13559 23.3394 4.09477 23.2536 4.09193 23.1626C4.08937 23.0715 4.12504 22.9835 4.19038 22.92L6.52446 20.6296C6.56497 20.5897 6.63046 20.5897 6.6725 20.6296C8.48812 22.3121 10.5586 23.2352 12.8839 23.3988C15.2497 23.5652 17.3547 22.9883 19.1987 21.6683C19.6597 21.3397 20.652 20.4234 22.1756 18.9194C23.8006 17.3153 25.4134 15.7113 27.0141 14.1073C27.1277 13.9923 27.179 14.0153 27.1682 14.1762C27.0749 15.5247 26.8228 16.8406 26.4118 18.1241Z",fill:"#FAAE7B"},void 0,!1,void 0,this),r("path",{d:"M13.5936 15.6898C14.7136 15.6898 15.6215 14.7815 15.6215 13.6611C15.6215 12.5406 14.7136 11.6323 13.5936 11.6323C12.4737 11.6323 11.5658 12.5406 11.5658 13.6611C11.5658 14.7815 12.4737 15.6898 13.5936 15.6898Z",fill:"#FAAE7B"},void 0,!1,void 0,this),r("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M48.9648 0C41.2331 0 34.966 6.06592 34.966 13.5489C34.966 21.0318 41.2331 27.0977 48.9648 27.0977C56.6964 27.0977 62.9635 21.0318 62.9635 13.5489C62.9635 6.06592 56.6964 0 48.9648 0ZM48.9648 21.8357C44.2359 21.8357 40.4032 18.1256 40.4032 13.5489C40.4032 8.97208 44.2359 5.2621 48.9648 5.2621C53.6937 5.2621 57.5264 8.97208 57.5264 13.5489C57.5264 18.1256 53.6937 21.8357 48.9648 21.8357Z",fill:"white"},void 0,!1,void 0,this),r("path",{d:"M70.7608 24.7148C70.7608 25.0407 70.8377 25.3632 71.0005 25.6452C71.5247 26.5549 72.51 27.1272 73.5714 27.0966C74.5653 27.0684 75.4655 26.5168 75.9631 25.67C76.1332 25.3805 76.2165 25.0489 76.2165 24.714V11.5492C76.2276 11.1349 76.5663 10.8066 76.9605 10.8049C77.27 10.8032 77.4762 11.0431 77.6601 11.2937C77.7871 11.4665 77.8655 11.5864 77.9537 11.7179C80.9159 16.1911 83.7962 20.6643 86.7585 25.1366C86.7841 25.1746 86.8098 25.2127 86.8383 25.249C87.9002 26.6359 89.6388 27.3893 91.0123 26.9312C91.0463 26.9196 91.0796 26.908 91.1116 26.8956C92.247 26.4573 92.6544 25.0531 91.977 24.0425C86.9445 16.5301 81.9133 9.0178 76.8807 1.50545C76.8231 1.42027 76.7606 1.33839 76.6898 1.26479C75.512 0.0408533 73.8039 -0.327156 72.4959 0.303005C71.6032 0.733041 71.1378 1.51124 70.917 2.01321C70.8112 2.25387 70.7599 2.51355 70.7599 2.77653V24.7156L70.7608 24.7148Z",fill:"white"},void 0,!1,void 0,this),r("path",{d:"M87.272 2.61519C87.2762 1.21676 88.556 0.0474006 89.9844 0.0515245C91.4128 0.0556703 92.5843 1.20932 92.5802 2.60775C92.5732 6.16627 92.5656 13.6117 92.5594 17.1693C91.9854 17.1189 90.5903 16.9163 89.3216 15.8486C87.2797 14.131 87.2519 11.5971 87.2547 11.2175C87.2603 8.34955 87.2672 5.48236 87.2727 2.61437L87.272 2.61519Z",fill:"white"},void 0,!1,void 0,this),r("path",{d:"M118.428 11.2459C119.325 11.2546 120.068 12.5352 120.057 13.9578C120.046 15.3813 119.299 16.5451 118.403 16.5365C116.121 16.5171 111.344 16.4843 109.062 16.465C109.044 15.9908 109.039 14.7372 109.556 13.4671C110.242 11.7789 111.348 11.298 111.596 11.2004L118.428 11.2459Z",fill:"white"},void 0,!1,void 0,this),r("path",{d:"M120.154 2.44455V2.37286C120.154 1.0622 119.092 0 117.782 0H102.749C101.438 0 100.377 1.0622 100.377 2.37286V24.7249C100.377 26.0355 101.438 27.0977 102.749 27.0977H118.212C119.523 27.0977 120.584 26.0355 120.584 24.7249C120.584 23.42 119.531 22.3603 118.227 22.352L107.508 22.2944C106.204 22.287 105.15 21.2264 105.15 19.9216C105.15 19.9216 105.15 8.50089 105.15 7.19024C105.15 5.8796 106.212 4.81741 107.522 4.81741C108.832 4.81741 117.782 4.81741 117.782 4.81741C119.092 4.81741 120.154 3.75521 120.154 2.44455Z",fill:"white"},void 0,!1,void 0,this),r("path",{d:"M146.432 11.2459C147.33 11.2546 148.073 12.5352 148.062 13.9578C148.051 15.3813 147.305 16.5451 146.408 16.5365C144.126 16.5171 139.349 16.4843 137.067 16.465C137.049 15.9908 137.045 14.7372 137.561 13.4671C138.247 11.7789 139.352 11.298 139.601 11.2004L146.434 11.2459H146.432Z",fill:"white"},void 0,!1,void 0,this),r("path",{d:"M148.158 2.44455V2.37286C148.158 1.0622 147.096 0 145.786 0H130.752C129.442 0 128.38 1.0622 128.38 2.37286V24.7249C128.38 26.0355 129.442 27.0977 130.752 27.0977H146.216C147.526 27.0977 148.588 26.0355 148.588 24.7249C148.588 23.42 147.534 22.3603 146.23 22.352L135.511 22.2944C134.207 22.287 133.154 21.2264 133.154 19.9216C133.154 19.9216 133.154 8.50089 133.154 7.19024C133.154 5.8796 134.216 4.81741 135.526 4.81741C136.836 4.81741 145.786 4.81741 145.786 4.81741C147.096 4.81741 148.158 3.75521 148.158 2.44455Z",fill:"white"},void 0,!1,void 0,this),r("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M163.507 0.808756L168.101 8.40362L172.778 0.79792C173.084 0.300992 173.614 0 174.186 0H178.479C179.141 0 179.539 0.756232 179.176 1.32653L171.851 12.8626L179.868 25.7787C180.222 26.3498 179.824 27.0977 179.165 27.0977H174.679C174.112 27.0977 173.583 26.8001 173.277 26.309L168.101 18.0079L162.925 26.309C162.619 26.8009 162.091 27.0977 161.523 27.0977H157.219C156.558 27.0977 156.16 26.3431 156.52 25.7728L164.517 13.1203C159.811 5.63577 157.338 1.7034 157.099 1.3232C156.74 0.7529 157.138 0 157.799 0C158.239 0 159.67 0 162.092 0C162.668 0 163.202 0.30599 163.507 0.808756Z",fill:"white"},void 0,!1,void 0,this)]},void 0,!0,void 0,this)};import{jsxDEV as S}from"react/jsx-dev-runtime";var R=({children:e,backgroundColor:t="#432371"})=>{return S("div",{style:{backgroundColor:t,width:"100%",padding:"20px",textAlign:"center"},children:e??S(M,{},void 0,!1,void 0,this)},void 0,!1,void 0,this)};import{jsxDEV as l}from"react/jsx-dev-runtime";var d=({locale:e="en",fontFamily:t="Montserrat",backgroundColor:a="#f6f4fe",children:c})=>l("html",{lang:e,style:{width:"100%",padding:"0px",margin:"0px",boxSizing:"border-box"},children:[l("head",{children:[l("link",{href:`https://fonts.googleapis.com/css?family=${t}:thin,extra-light,light,100,200,300,400,500,600,700,800`,rel:"stylesheet"},void 0,!1,void 0,this),l("link",{rel:"preconnect",href:"https://fonts.googleapis.com"},void 0,!1,void 0,this),l("link",{rel:"preconnect",href:"https://fonts.gstatic.com"},void 0,!1,void 0,this)]},void 0,!0,void 0,this),l("body",{style:{backgroundColor:a,width:"100%",minHeight:"100vh",fontFamily:t,display:"flex",flexDirection:"column",columnGap:"32px",padding:"0px",margin:"0px",boxSizing:"border-box",overflow:"scroll"},children:l("div",{style:{backgroundColor:"#ffffff",width:"100%",maxWidth:"640px",padding:"32px",margin:"auto",borderRadius:"4px",display:"flex",flexDirection:"column",columnGap:"26px",marginTop:"60px",marginBottom:"32px",color:"#432371",lineHeight:"1.5",fontSize:"16px"},children:c},void 0,!1,void 0,this)},void 0,!1,void 0,this)]},void 0,!0,void 0,this);d.Header=R;d.Body=f;d.Footer=u;var z=d;import B from"nodemailer";import{renderToString as x}from"react-dom/server";class L{dsn;from;constructor(){if(this.dsn=Bun.env.NODE_MAILER_DSN?.trim(),this.from={name:Bun.env.MAILER_SENDER_NAME?.trim()||"",address:Bun.env.MAILER_SENDER_ADDRESS?.trim()||""},!this.dsn)throw new n("NODE_MAILER_DSN environment variable is not set or is empty. Please configure the mailer DSN connection string.")}async send(e){let t=e.from?.name||this.from?.name||"",a=e.from?.address||this.from?.address||"";if(!t)throw new n("MAILER_SENDER_NAME environment variable is not set or is empty. Please configure the mailer sender name.");if(!a)throw new n("MAILER_SENDER_ADDRESS environment variable is not set or is empty. Please configure the mailer sender address.");await B.createTransport({url:this.dsn}).sendMail({from:{name:t,address:a},to:e.to,subject:e.subject,html:x(e.content)})}}import{renderToString as T}from"react-dom/server";import{Resend as F}from"resend";class b{apiKey;from;constructor(){if(this.apiKey=Bun.env.RESEND_API_KEY?.trim(),this.from={name:Bun.env.MAILER_SENDER_NAME?.trim()||"",address:Bun.env.MAILER_SENDER_ADDRESS?.trim()||""},!this.apiKey)throw new n("RESEND_API_KEY environment variable is not set or is empty. Please configure the mailer DSN connection string.")}async send(e){let t=e.from?.name||this.from?.name||"",a=e.from?.address||this.from?.address||"";if(!t)throw new n("MAILER_SENDER_NAME environment variable is not set or is empty. Please configure the mailer sender name.");if(!a)throw new n("MAILER_SENDER_ADDRESS environment variable is not set or is empty. Please configure the mailer sender address.");await new F(this.apiKey).emails.send({to:e.to,from:`${t} <${a}>`,subject:`${e.subject}`,html:T(e.content)})}}export{N as decorator,b as ResendMailerAdapter,L as NodeMailerAdapter,z as MailerLayout,n as MailerException};
|
|
2
3
|
|
|
3
|
-
//# debugId=
|
|
4
|
+
//# debugId=A15C2116FA354B7B64756E2164756E21
|
package/dist/index.js.map
CHANGED
|
@@ -1,12 +1,23 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["src/MailerException.ts", "src/NodeMailerAdapter.ts", "src/ResendMailerAdapter.ts"],
|
|
3
|
+
"sources": ["src/decorators.ts", "src/MailerException.ts", "src/MailerLayoutBody.tsx", "src/icons/Facebook.tsx", "src/icons/Instagram.tsx", "src/icons/Linkedin.tsx", "src/icons/Slack.tsx", "src/icons/TikTok.tsx", "src/MailerLayoutFooter.tsx", "src/icons/Ooneex.tsx", "src/MailerLayoutHeader.tsx", "src/MailerLayout.tsx", "src/NodeMailerAdapter.ts", "src/ResendMailerAdapter.ts"],
|
|
4
4
|
"sourcesContent": [
|
|
5
|
+
"import { container, EContainerScope } from \"@ooneex/container\";\nimport type { MailerClassType } from \"./types\";\n\nexport const decorator = {\n mailer: (scope: EContainerScope = EContainerScope.Singleton) => {\n return (target: MailerClassType): void => {\n container.add(target, scope);\n };\n },\n};\n",
|
|
5
6
|
"import { Exception } from \"@ooneex/exception\";\nimport { HttpStatus } from \"@ooneex/http-status\";\n\nexport class MailerException extends Exception {\n constructor(message: string, data: Record<string, unknown> = {}) {\n super(message, {\n status: HttpStatus.Code.InternalServerError,\n data,\n });\n this.name = \"MailerException\";\n }\n}\n",
|
|
7
|
+
"export const MailerLayoutBody = ({\n children,\n backgroundColor = \"#ffffff\",\n}: {\n children: React.ReactNode;\n backgroundColor?: string;\n}): React.JSX.Element => (\n <div\n style={{\n backgroundColor,\n width: \"100%\",\n maxWidth: \"640px\",\n padding: \"32px\",\n margin: \"auto\",\n borderRadius: \"4px\",\n display: \"flex\",\n flexDirection: \"column\",\n columnGap: \"26px\",\n marginTop: \"60px\",\n marginBottom: \"32px\",\n color: \"#432371\",\n lineHeight: \"1.5\",\n fontSize: \"16px\",\n }}\n >\n {children}\n </div>\n);\n",
|
|
8
|
+
"import type { SVGProps } from \"react\";\n\nexport const Facebook = (props: SVGProps<SVGSVGElement>) => {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width={256} height={256} viewBox=\"0 0 256 256\" {...props}>\n <path\n fill=\"#1877f2\"\n d=\"M256 128C256 57.308 198.692 0 128 0S0 57.308 0 128c0 63.888 46.808 116.843 108 126.445V165H75.5v-37H108V99.8c0-32.08 19.11-49.8 48.348-49.8C170.352 50 185 52.5 185 52.5V84h-16.14C152.959 84 148 93.867 148 103.99V128h35.5l-5.675 37H148v89.445c61.192-9.602 108-62.556 108-126.445\"\n />\n <path\n fill=\"#fff\"\n d=\"m177.825 165l5.675-37H148v-24.01C148 93.866 152.959 84 168.86 84H185V52.5S170.352 50 156.347 50C127.11 50 108 67.72 108 99.8V128H75.5v37H108v89.445A129 129 0 0 0 128 256a129 129 0 0 0 20-1.555V165z\"\n />\n </svg>\n );\n};\n",
|
|
9
|
+
"import type { SVGProps } from \"react\";\n\nexport const Instagram = (props: SVGProps<SVGSVGElement>) => {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width={256} height={256} viewBox=\"0 0 256 256\" {...props}>\n <g fill=\"none\">\n <rect width={256} height={256} fill=\"url(#skillIconsInstagram0)\" rx={60} />\n <rect width={256} height={256} fill=\"url(#skillIconsInstagram1)\" rx={60} />\n <path\n fill=\"#fff\"\n d=\"M128.009 28c-27.158 0-30.567.119-41.233.604c-10.646.488-17.913 2.173-24.271 4.646c-6.578 2.554-12.157 5.971-17.715 11.531c-5.563 5.559-8.98 11.138-11.542 17.713c-2.48 6.36-4.167 13.63-4.646 24.271c-.477 10.667-.602 14.077-.602 41.236s.12 30.557.604 41.223c.49 10.646 2.175 17.913 4.646 24.271c2.556 6.578 5.973 12.157 11.533 17.715c5.557 5.563 11.136 8.988 17.709 11.542c6.363 2.473 13.631 4.158 24.275 4.646c10.667.485 14.073.604 41.23.604c27.161 0 30.559-.119 41.225-.604c10.646-.488 17.921-2.173 24.284-4.646c6.575-2.554 12.146-5.979 17.702-11.542c5.563-5.558 8.979-11.137 11.542-17.712c2.458-6.361 4.146-13.63 4.646-24.272c.479-10.666.604-14.066.604-41.225s-.125-30.567-.604-41.234c-.5-10.646-2.188-17.912-4.646-24.27c-2.563-6.578-5.979-12.157-11.542-17.716c-5.562-5.562-11.125-8.979-17.708-11.53c-6.375-2.474-13.646-4.16-24.292-4.647c-10.667-.485-14.063-.604-41.23-.604zm-8.971 18.021c2.663-.004 5.634 0 8.971 0c26.701 0 29.865.096 40.409.575c9.75.446 15.042 2.075 18.567 3.444c4.667 1.812 7.994 3.979 11.492 7.48c3.5 3.5 5.666 6.833 7.483 11.5c1.369 3.52 3 8.812 3.444 18.562c.479 10.542.583 13.708.583 40.396s-.104 29.855-.583 40.396c-.446 9.75-2.075 15.042-3.444 18.563c-1.812 4.667-3.983 7.99-7.483 11.488c-3.5 3.5-6.823 5.666-11.492 7.479c-3.521 1.375-8.817 3-18.567 3.446c-10.542.479-13.708.583-40.409.583c-26.702 0-29.867-.104-40.408-.583c-9.75-.45-15.042-2.079-18.57-3.448c-4.666-1.813-8-3.979-11.5-7.479s-5.666-6.825-7.483-11.494c-1.369-3.521-3-8.813-3.444-18.563c-.479-10.542-.575-13.708-.575-40.413s.096-29.854.575-40.396c.446-9.75 2.075-15.042 3.444-18.567c1.813-4.667 3.983-8 7.484-11.5s6.833-5.667 11.5-7.483c3.525-1.375 8.819-3 18.569-3.448c9.225-.417 12.8-.542 31.437-.563zm62.351 16.604c-6.625 0-12 5.37-12 11.996c0 6.625 5.375 12 12 12s12-5.375 12-12s-5.375-12-12-12zm-53.38 14.021c-28.36 0-51.354 22.994-51.354 51.355s22.994 51.344 51.354 51.344c28.361 0 51.347-22.983 51.347-51.344c0-28.36-22.988-51.355-51.349-51.355zm0 18.021c18.409 0 33.334 14.923 33.334 33.334c0 18.409-14.925 33.334-33.334 33.334s-33.333-14.925-33.333-33.334c0-18.411 14.923-33.334 33.333-33.334\"\n />\n <defs>\n <radialGradient\n id=\"skillIconsInstagram0\"\n cx={0}\n cy={0}\n r={1}\n gradientTransform=\"matrix(0 -253.715 235.975 0 68 275.717)\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#fd5\" />\n <stop offset={0.1} stopColor=\"#fd5\" />\n <stop offset={0.5} stopColor=\"#ff543e\" />\n <stop offset={1} stopColor=\"#c837ab\" />\n </radialGradient>\n <radialGradient\n id=\"skillIconsInstagram1\"\n cx={0}\n cy={0}\n r={1}\n gradientTransform=\"matrix(22.25952 111.2061 -458.39518 91.75449 -42.881 18.441)\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stopColor=\"#3771c8\" />\n <stop offset={0.128} stopColor=\"#3771c8\" />\n <stop offset={1} stopColor=\"#60f\" stopOpacity={0} />\n </radialGradient>\n </defs>\n </g>\n </svg>\n );\n};\n",
|
|
10
|
+
"import type { SVGProps } from \"react\";\n\nexport const Linkedin = (props: SVGProps<SVGSVGElement>) => {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width={256} height={256} viewBox=\"0 0 256 256\" {...props}>\n <path\n fill=\"#0a66c2\"\n d=\"M218.123 218.127h-37.931v-59.403c0-14.165-.253-32.4-19.728-32.4c-19.756 0-22.779 15.434-22.779 31.369v60.43h-37.93V95.967h36.413v16.694h.51a39.91 39.91 0 0 1 35.928-19.733c38.445 0 45.533 25.288 45.533 58.186zM56.955 79.27c-12.157.002-22.014-9.852-22.016-22.009s9.851-22.014 22.008-22.016c12.157-.003 22.014 9.851 22.016 22.008A22.013 22.013 0 0 1 56.955 79.27m18.966 138.858H37.95V95.967h37.97zM237.033.018H18.89C8.58-.098.125 8.161-.001 18.471v219.053c.122 10.315 8.576 18.582 18.89 18.474h218.144c10.336.128 18.823-8.139 18.966-18.474V18.454c-.147-10.33-8.635-18.588-18.966-18.453\"\n />\n </svg>\n );\n};\n",
|
|
11
|
+
"import type { SVGProps } from \"react\";\n\nexport const Slack = (props: SVGProps<SVGSVGElement>) => {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width={128} height={128} viewBox=\"0 0 128 128\" {...props}>\n <path\n fill=\"#de1c59\"\n d=\"M27.255 80.719c0 7.33-5.978 13.317-13.309 13.317S.63 88.049.63 80.719s5.987-13.317 13.317-13.317h13.309zm6.709 0c0-7.33 5.987-13.317 13.317-13.317s13.317 5.986 13.317 13.317v33.335c0 7.33-5.986 13.317-13.317 13.317c-7.33 0-13.317-5.987-13.317-13.317zm0 0\"\n />\n <path\n fill=\"#35c5f0\"\n d=\"M47.281 27.255c-7.33 0-13.317-5.978-13.317-13.309S39.951.63 47.281.63s13.317 5.987 13.317 13.317v13.309zm0 6.709c7.33 0 13.317 5.987 13.317 13.317s-5.986 13.317-13.317 13.317H13.946C6.616 60.598.63 54.612.63 47.281c0-7.33 5.987-13.317 13.317-13.317zm0 0\"\n />\n <path\n fill=\"#2eb57d\"\n d=\"M100.745 47.281c0-7.33 5.978-13.317 13.309-13.317s13.317 5.987 13.317 13.317s-5.987 13.317-13.317 13.317h-13.309zm-6.709 0c0 7.33-5.987 13.317-13.317 13.317s-13.317-5.986-13.317-13.317V13.946C67.402 6.616 73.388.63 80.719.63c7.33 0 13.317 5.987 13.317 13.317zm0 0\"\n />\n <path\n fill=\"#ebb02e\"\n d=\"M80.719 100.745c7.33 0 13.317 5.978 13.317 13.309s-5.987 13.317-13.317 13.317s-13.317-5.987-13.317-13.317v-13.309zm0-6.709c-7.33 0-13.317-5.987-13.317-13.317s5.986-13.317 13.317-13.317h33.335c7.33 0 13.317 5.986 13.317 13.317c0 7.33-5.987 13.317-13.317 13.317zm0 0\"\n />\n </svg>\n );\n};\n",
|
|
12
|
+
"import type { SVGProps } from \"react\";\n\nexport const Tiktok = (props: SVGProps<SVGSVGElement>) => {\n return (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width={256} height={290} viewBox=\"0 0 256 290\" {...props}>\n <path\n fill=\"#ff004f\"\n d=\"M189.72 104.421c18.678 13.345 41.56 21.197 66.273 21.197v-47.53a67 67 0 0 1-13.918-1.456v37.413c-24.711 0-47.59-7.851-66.272-21.195v96.996c0 48.523-39.356 87.855-87.9 87.855c-18.113 0-34.949-5.473-48.934-14.86c15.962 16.313 38.222 26.432 62.848 26.432c48.548 0 87.905-39.332 87.905-87.857v-96.995zm17.17-47.952c-9.546-10.423-15.814-23.893-17.17-38.785v-6.113h-13.189c3.32 18.927 14.644 35.097 30.358 44.898M69.673 225.607a40 40 0 0 1-8.203-24.33c0-22.192 18.001-40.186 40.21-40.186a40.3 40.3 0 0 1 12.197 1.883v-48.593c-4.61-.631-9.262-.9-13.912-.801v37.822a40.3 40.3 0 0 0-12.203-1.882c-22.208 0-40.208 17.992-40.208 40.187c0 15.694 8.997 29.281 22.119 35.9\"\n />\n <path d=\"M175.803 92.849c18.683 13.344 41.56 21.195 66.272 21.195V76.631c-13.794-2.937-26.005-10.141-35.186-20.162c-15.715-9.802-27.038-25.972-30.358-44.898h-34.643v189.843c-.079 22.132-18.049 40.052-40.21 40.052c-13.058 0-24.66-6.221-32.007-15.86c-13.12-6.618-22.118-20.206-22.118-35.898c0-22.193 18-40.187 40.208-40.187c4.255 0 8.356.662 12.203 1.882v-37.822c-47.692.985-86.047 39.933-86.047 87.834c0 23.912 9.551 45.589 25.053 61.428c13.985 9.385 30.82 14.86 48.934 14.86c48.545 0 87.9-39.335 87.9-87.857z\" />\n <path\n fill=\"#00f2ea\"\n d=\"M242.075 76.63V66.516a66.3 66.3 0 0 1-35.186-10.047a66.47 66.47 0 0 0 35.186 20.163M176.53 11.57a68 68 0 0 1-.728-5.457V0h-47.834v189.845c-.076 22.13-18.046 40.05-40.208 40.05a40.06 40.06 0 0 1-18.09-4.287c7.347 9.637 18.949 15.857 32.007 15.857c22.16 0 40.132-17.918 40.21-40.05V11.571zM99.966 113.58v-10.769a89 89 0 0 0-12.061-.818C39.355 101.993 0 141.327 0 189.845c0 30.419 15.467 57.227 38.971 72.996c-15.502-15.838-25.053-37.516-25.053-61.427c0-47.9 38.354-86.848 86.048-87.833\"\n />\n </svg>\n );\n};\n",
|
|
13
|
+
"import { Facebook } from \"./icons/Facebook\";\nimport { Instagram } from \"./icons/Instagram\";\nimport { Linkedin } from \"./icons/Linkedin\";\nimport { Slack } from \"./icons/Slack\";\nimport { Tiktok } from \"./icons/TikTok\";\n\nexport const MailerLayoutFooter = ({\n backgroundColor,\n instagram = \"https://www.instagram.com/ooneex_official\",\n tiktok = \"https://www.tiktok.com/@ooneex\",\n linkedin = \"https://www.linkedin.com/company/ooneex/\",\n facebook = \"https://www.facebook.com/profile.php?id=61560619401969\",\n slack = \"https://join.slack.com/t/ooneex/shared_invite/zt-2ragcg3dz-P0Su1E7yFG33C3L5CPOuzw\",\n}: {\n backgroundColor?: string;\n instagram?: string;\n tiktok?: string;\n linkedin?: string;\n facebook?: string;\n slack?: string;\n}): React.JSX.Element => (\n <div\n style={{\n display: \"flex\",\n flexDirection: \"row\",\n rowGap: \"24px\",\n columnGap: \"24px\",\n gap: \"24px\",\n alignItems: \"center\",\n justifyContent: \"center\",\n justifyItems: \"center\",\n placeContent: \"center\",\n placeItems: \"center\",\n backgroundColor,\n }}\n >\n <a href={instagram}>\n <Instagram width={28} height={28} />\n </a>\n <a href={tiktok}>\n <Tiktok width={28} height={28} />\n </a>\n <a href={linkedin}>\n <Linkedin width={28} height={28} />\n </a>\n <a href={facebook}>\n <Facebook width={28} height={28} />\n </a>\n <a href={slack}>\n <Slack width={28} height={28} />\n </a>\n </div>\n);\n",
|
|
14
|
+
"export const Ooneex = () => {\n return (\n <svg width=\"180\" height=\"28\" viewBox=\"0 0 180 28\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M20.6871 6.38198C20.6143 6.45588 20.4954 6.45943 20.4154 6.3901C19.3852 5.49205 18.2821 4.8131 17.1059 4.35326C15.9189 3.888 14.6691 3.66687 13.3564 3.68986C11.6827 3.71962 10.1334 4.15106 8.70848 4.98419C7.98115 5.40887 6.95099 6.27649 5.618 7.58705C3.81454 9.36016 2.0077 11.161 0.197485 12.9895C0.0501262 13.1383 -0.0147658 13.1086 0.00280911 12.9003C0.375938 8.52905 2.24902 5.07616 5.62205 2.5416C8.12175 0.663 11.0662 -0.174188 14.4555 0.030037C17.819 0.231557 20.6851 1.5056 23.0537 3.85216C23.0729 3.87121 23.0837 3.89713 23.0837 3.92418C23.0837 3.95123 23.0729 3.97715 23.0537 3.9962L20.6871 6.38198Z\"\n fill=\"#FAAE7B\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M2.73435 19.7128C2.49236 19.963 2.23887 20.2017 1.9739 20.4289C1.95437 20.4451 1.92876 20.452 1.90405 20.4477C1.87934 20.4434 1.85811 20.4283 1.84614 20.4066C1.26617 19.3381 0.796378 18.1926 0.436768 16.9699C0.406636 16.8685 0.434606 16.7581 0.509771 16.6818C2.86616 14.3231 5.18335 12.0049 7.46133 9.72736C8.67805 8.51148 9.56626 7.74124 10.126 7.41664C11.1953 6.7972 12.3681 6.49492 13.6443 6.5098C15.437 6.53144 17.0343 7.16846 18.4362 8.42086C18.4566 8.43869 18.4691 8.46394 18.4708 8.49076C18.4721 8.51758 18.4626 8.54363 18.4443 8.56287L16.025 11.046C15.9633 11.1096 15.8612 11.1148 15.7878 11.0582C14.8874 10.3603 13.937 10.1162 12.9366 10.3258C12.4093 10.4354 11.8618 10.7383 11.294 11.2347C10.787 11.6756 10.2145 12.2268 9.5764 12.8881C8.71793 13.7753 6.69547 15.7838 3.509 18.9134C3.50224 18.9202 3.24402 19.1866 2.73435 19.7128Z\"\n fill=\"#FEF6F0\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M23.0922 14.0365C20.6547 16.4872 19.1486 17.9891 18.5741 18.5423C17.6764 19.4092 16.6395 20.003 15.4633 20.3235C14.302 20.6413 13.1461 20.667 11.9957 20.4006C10.7641 20.1125 9.66495 19.512 8.69833 18.5991C8.67874 18.5812 8.66744 18.556 8.66705 18.5291C8.66667 18.5023 8.67724 18.4763 8.69631 18.4571L11.1115 16.0186C11.1849 15.9454 11.3015 15.9377 11.3853 16.0003C12.5276 16.8632 13.6524 17.0735 14.7597 16.6312C15.2585 16.4324 15.9642 15.8799 16.8768 14.9738C19.6563 12.2106 22.4277 9.45291 25.191 6.7006C25.2088 6.68235 25.2342 6.67373 25.2597 6.67731C25.2852 6.6809 25.3078 6.69628 25.3208 6.71886C25.9738 7.86577 26.451 9.01944 26.7525 10.1799C26.7763 10.2677 26.7508 10.3621 26.6856 10.4274C25.4283 11.6892 24.2305 12.8923 23.0922 14.0365Z\"\n fill=\"#FEF6F0\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M26.4118 18.1241C26.0576 19.0411 25.6561 19.8952 25.2073 20.6864L24.5442 21.6156L24.0879 22.2242C23.3254 23.0763 22.519 23.8255 21.6686 24.472L21.0522 24.9366C20.1112 25.5101 19.1433 25.9949 18.1482 26.3912L17.2945 26.6367C12.4479 27.816 8.08457 26.7368 4.20457 23.3988C4.13559 23.3394 4.09477 23.2536 4.09193 23.1626C4.08937 23.0715 4.12504 22.9835 4.19038 22.92L6.52446 20.6296C6.56497 20.5897 6.63046 20.5897 6.6725 20.6296C8.48812 22.3121 10.5586 23.2352 12.8839 23.3988C15.2497 23.5652 17.3547 22.9883 19.1987 21.6683C19.6597 21.3397 20.652 20.4234 22.1756 18.9194C23.8006 17.3153 25.4134 15.7113 27.0141 14.1073C27.1277 13.9923 27.179 14.0153 27.1682 14.1762C27.0749 15.5247 26.8228 16.8406 26.4118 18.1241Z\"\n fill=\"#FAAE7B\"\n />\n <path\n d=\"M13.5936 15.6898C14.7136 15.6898 15.6215 14.7815 15.6215 13.6611C15.6215 12.5406 14.7136 11.6323 13.5936 11.6323C12.4737 11.6323 11.5658 12.5406 11.5658 13.6611C11.5658 14.7815 12.4737 15.6898 13.5936 15.6898Z\"\n fill=\"#FAAE7B\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M48.9648 0C41.2331 0 34.966 6.06592 34.966 13.5489C34.966 21.0318 41.2331 27.0977 48.9648 27.0977C56.6964 27.0977 62.9635 21.0318 62.9635 13.5489C62.9635 6.06592 56.6964 0 48.9648 0ZM48.9648 21.8357C44.2359 21.8357 40.4032 18.1256 40.4032 13.5489C40.4032 8.97208 44.2359 5.2621 48.9648 5.2621C53.6937 5.2621 57.5264 8.97208 57.5264 13.5489C57.5264 18.1256 53.6937 21.8357 48.9648 21.8357Z\"\n fill=\"white\"\n />\n <path\n d=\"M70.7608 24.7148C70.7608 25.0407 70.8377 25.3632 71.0005 25.6452C71.5247 26.5549 72.51 27.1272 73.5714 27.0966C74.5653 27.0684 75.4655 26.5168 75.9631 25.67C76.1332 25.3805 76.2165 25.0489 76.2165 24.714V11.5492C76.2276 11.1349 76.5663 10.8066 76.9605 10.8049C77.27 10.8032 77.4762 11.0431 77.6601 11.2937C77.7871 11.4665 77.8655 11.5864 77.9537 11.7179C80.9159 16.1911 83.7962 20.6643 86.7585 25.1366C86.7841 25.1746 86.8098 25.2127 86.8383 25.249C87.9002 26.6359 89.6388 27.3893 91.0123 26.9312C91.0463 26.9196 91.0796 26.908 91.1116 26.8956C92.247 26.4573 92.6544 25.0531 91.977 24.0425C86.9445 16.5301 81.9133 9.0178 76.8807 1.50545C76.8231 1.42027 76.7606 1.33839 76.6898 1.26479C75.512 0.0408533 73.8039 -0.327156 72.4959 0.303005C71.6032 0.733041 71.1378 1.51124 70.917 2.01321C70.8112 2.25387 70.7599 2.51355 70.7599 2.77653V24.7156L70.7608 24.7148Z\"\n fill=\"white\"\n />\n <path\n d=\"M87.272 2.61519C87.2762 1.21676 88.556 0.0474006 89.9844 0.0515245C91.4128 0.0556703 92.5843 1.20932 92.5802 2.60775C92.5732 6.16627 92.5656 13.6117 92.5594 17.1693C91.9854 17.1189 90.5903 16.9163 89.3216 15.8486C87.2797 14.131 87.2519 11.5971 87.2547 11.2175C87.2603 8.34955 87.2672 5.48236 87.2727 2.61437L87.272 2.61519Z\"\n fill=\"white\"\n />\n <path\n d=\"M118.428 11.2459C119.325 11.2546 120.068 12.5352 120.057 13.9578C120.046 15.3813 119.299 16.5451 118.403 16.5365C116.121 16.5171 111.344 16.4843 109.062 16.465C109.044 15.9908 109.039 14.7372 109.556 13.4671C110.242 11.7789 111.348 11.298 111.596 11.2004L118.428 11.2459Z\"\n fill=\"white\"\n />\n <path\n d=\"M120.154 2.44455V2.37286C120.154 1.0622 119.092 0 117.782 0H102.749C101.438 0 100.377 1.0622 100.377 2.37286V24.7249C100.377 26.0355 101.438 27.0977 102.749 27.0977H118.212C119.523 27.0977 120.584 26.0355 120.584 24.7249C120.584 23.42 119.531 22.3603 118.227 22.352L107.508 22.2944C106.204 22.287 105.15 21.2264 105.15 19.9216C105.15 19.9216 105.15 8.50089 105.15 7.19024C105.15 5.8796 106.212 4.81741 107.522 4.81741C108.832 4.81741 117.782 4.81741 117.782 4.81741C119.092 4.81741 120.154 3.75521 120.154 2.44455Z\"\n fill=\"white\"\n />\n <path\n d=\"M146.432 11.2459C147.33 11.2546 148.073 12.5352 148.062 13.9578C148.051 15.3813 147.305 16.5451 146.408 16.5365C144.126 16.5171 139.349 16.4843 137.067 16.465C137.049 15.9908 137.045 14.7372 137.561 13.4671C138.247 11.7789 139.352 11.298 139.601 11.2004L146.434 11.2459H146.432Z\"\n fill=\"white\"\n />\n <path\n d=\"M148.158 2.44455V2.37286C148.158 1.0622 147.096 0 145.786 0H130.752C129.442 0 128.38 1.0622 128.38 2.37286V24.7249C128.38 26.0355 129.442 27.0977 130.752 27.0977H146.216C147.526 27.0977 148.588 26.0355 148.588 24.7249C148.588 23.42 147.534 22.3603 146.23 22.352L135.511 22.2944C134.207 22.287 133.154 21.2264 133.154 19.9216C133.154 19.9216 133.154 8.50089 133.154 7.19024C133.154 5.8796 134.216 4.81741 135.526 4.81741C136.836 4.81741 145.786 4.81741 145.786 4.81741C147.096 4.81741 148.158 3.75521 148.158 2.44455Z\"\n fill=\"white\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M163.507 0.808756L168.101 8.40362L172.778 0.79792C173.084 0.300992 173.614 0 174.186 0H178.479C179.141 0 179.539 0.756232 179.176 1.32653L171.851 12.8626L179.868 25.7787C180.222 26.3498 179.824 27.0977 179.165 27.0977H174.679C174.112 27.0977 173.583 26.8001 173.277 26.309L168.101 18.0079L162.925 26.309C162.619 26.8009 162.091 27.0977 161.523 27.0977H157.219C156.558 27.0977 156.16 26.3431 156.52 25.7728L164.517 13.1203C159.811 5.63577 157.338 1.7034 157.099 1.3232C156.74 0.7529 157.138 0 157.799 0C158.239 0 159.67 0 162.092 0C162.668 0 163.202 0.30599 163.507 0.808756Z\"\n fill=\"white\"\n />\n </svg>\n );\n};\n",
|
|
15
|
+
"import { Ooneex } from \"./icons/Ooneex\";\n\nexport const MailerLayoutHeader = ({\n children,\n backgroundColor = \"#432371\",\n}: {\n children?: React.ReactNode;\n backgroundColor?: string;\n}): React.JSX.Element => {\n return (\n <div\n style={{\n backgroundColor,\n width: \"100%\",\n padding: \"20px\",\n textAlign: \"center\",\n }}\n >\n {children ?? <Ooneex />}\n </div>\n );\n};\n",
|
|
16
|
+
"import type { LocaleType } from \"@ooneex/translation\";\nimport { MailerLayoutBody } from \"./MailerLayoutBody\";\nimport { MailerLayoutFooter } from \"./MailerLayoutFooter\";\nimport { MailerLayoutHeader } from \"./MailerLayoutHeader\";\n\ntype PropsType = {\n locale?: LocaleType;\n fontFamily?: string;\n backgroundColor?: string;\n children?: React.ReactNode;\n};\n\ntype MailerLayoutComponentType = React.FC<PropsType> & {\n Header: typeof MailerLayoutHeader;\n Body: typeof MailerLayoutBody;\n Footer: typeof MailerLayoutFooter;\n};\n\nconst MailerLayoutComponent = ({\n locale = \"en\",\n fontFamily = \"Montserrat\",\n backgroundColor = \"#f6f4fe\",\n children,\n}: PropsType): React.JSX.Element => (\n <html\n lang={locale}\n style={{\n width: \"100%\",\n padding: \"0px\",\n margin: \"0px\",\n boxSizing: \"border-box\",\n }}\n >\n <head>\n <link\n href={`https://fonts.googleapis.com/css?family=${fontFamily}:thin,extra-light,light,100,200,300,400,500,600,700,800`}\n rel=\"stylesheet\"\n />\n <link rel=\"preconnect\" href=\"https://fonts.googleapis.com\" />\n <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" />\n </head>\n <body\n style={{\n backgroundColor,\n width: \"100%\",\n minHeight: \"100vh\",\n fontFamily,\n display: \"flex\",\n flexDirection: \"column\",\n columnGap: \"32px\",\n padding: \"0px\",\n margin: \"0px\",\n boxSizing: \"border-box\",\n overflow: \"scroll\",\n }}\n >\n <div\n style={{\n backgroundColor: \"#ffffff\",\n width: \"100%\",\n maxWidth: \"640px\",\n padding: \"32px\",\n margin: \"auto\",\n borderRadius: \"4px\",\n display: \"flex\",\n flexDirection: \"column\",\n columnGap: \"26px\",\n marginTop: \"60px\",\n marginBottom: \"32px\",\n color: \"#432371\",\n lineHeight: \"1.5\",\n fontSize: \"16px\",\n }}\n >\n {children}\n </div>\n </body>\n </html>\n);\n\nMailerLayoutComponent.Header = MailerLayoutHeader;\nMailerLayoutComponent.Body = MailerLayoutBody;\nMailerLayoutComponent.Footer = MailerLayoutFooter;\n\nexport const MailerLayout: MailerLayoutComponentType = MailerLayoutComponent;\n",
|
|
6
17
|
"import nodemailer from \"nodemailer\";\nimport { renderToString } from \"react-dom/server\";\nimport { MailerException } from \"./MailerException\";\nimport type { IMailer } from \"./types\";\n\nexport class NodeMailerAdapter implements IMailer {\n private dsn: string;\n private from?: { name: string; address: string };\n\n constructor() {\n this.dsn = Bun.env.NODE_MAILER_DSN?.trim() as string;\n\n this.from = {\n name: Bun.env.MAILER_SENDER_NAME?.trim() || \"\",\n address: Bun.env.MAILER_SENDER_ADDRESS?.trim() || \"\",\n };\n\n if (!this.dsn) {\n throw new MailerException(\n \"NODE_MAILER_DSN environment variable is not set or is empty. Please configure the mailer DSN connection string.\",\n );\n }\n }\n\n public async send(config: {\n to: string[];\n subject: string;\n content: React.ReactNode;\n from?: { name: string; address: string };\n }): Promise<void> {\n const senderName = config.from?.name || this.from?.name || \"\";\n const senderAddress = config.from?.address || this.from?.address || \"\";\n\n if (!senderName) {\n throw new MailerException(\n \"MAILER_SENDER_NAME environment variable is not set or is empty. Please configure the mailer sender name.\",\n );\n }\n\n if (!senderAddress) {\n throw new MailerException(\n \"MAILER_SENDER_ADDRESS environment variable is not set or is empty. Please configure the mailer sender address.\",\n );\n }\n\n const transporter = nodemailer.createTransport({\n url: this.dsn,\n });\n\n await transporter.sendMail({\n from: { name: senderName, address: senderAddress },\n to: config.to,\n subject: config.subject,\n html: renderToString(config.content),\n });\n }\n}\n",
|
|
7
18
|
"import { renderToString } from \"react-dom/server\";\nimport { Resend } from \"resend\";\nimport { MailerException } from \"./MailerException\";\nimport type { IMailer } from \"./types\";\n\nexport class ResendMailerAdapter implements IMailer {\n private apiKey: string;\n private from?: { name: string; address: string };\n\n constructor() {\n this.apiKey = Bun.env.RESEND_API_KEY?.trim() as string;\n\n this.from = {\n name: Bun.env.MAILER_SENDER_NAME?.trim() || \"\",\n address: Bun.env.MAILER_SENDER_ADDRESS?.trim() || \"\",\n };\n\n if (!this.apiKey) {\n throw new MailerException(\n \"RESEND_API_KEY environment variable is not set or is empty. Please configure the mailer DSN connection string.\",\n );\n }\n }\n\n public async send(config: {\n to: string[];\n subject: string;\n content: React.ReactNode;\n from?: { name: string; address: string };\n }): Promise<void> {\n const senderName = config.from?.name || this.from?.name || \"\";\n const senderAddress = config.from?.address || this.from?.address || \"\";\n\n if (!senderName) {\n throw new MailerException(\n \"MAILER_SENDER_NAME environment variable is not set or is empty. Please configure the mailer sender name.\",\n );\n }\n\n if (!senderAddress) {\n throw new MailerException(\n \"MAILER_SENDER_ADDRESS environment variable is not set or is empty. Please configure the mailer sender address.\",\n );\n }\n\n const client = new Resend(this.apiKey);\n\n await client.emails.send({\n to: config.to,\n from: `${senderName} <${senderAddress}>`,\n subject: `${config.subject}`,\n html: renderToString(config.content),\n });\n }\n}\n"
|
|
8
19
|
],
|
|
9
|
-
"mappings": "AAAA,oBAAS,0BACT,qBAAS,4BAEF,MAAM,UAAwB,CAAU,CAC7C,WAAW,CAAC,EAAiB,EAAgC,CAAC,EAAG,CAC/D,MAAM,EAAS,CACb,OAAQ,EAAW,KAAK,oBACxB,MACF,CAAC,EACD,KAAK,KAAO,kBAEhB,
|
|
10
|
-
"debugId": "
|
|
20
|
+
"mappings": "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",
|
|
21
|
+
"debugId": "A15C2116FA354B7B64756E2164756E21",
|
|
11
22
|
"names": []
|
|
12
23
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ooneex/mailer",
|
|
3
|
-
"description": "",
|
|
4
|
-
"version": "0.0.
|
|
3
|
+
"description": "Email sending service with support for Nodemailer SMTP and Resend API for transactional emails",
|
|
4
|
+
"version": "0.0.4",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"files": [
|
|
7
7
|
"dist",
|
|
@@ -25,17 +25,27 @@
|
|
|
25
25
|
"test": "bun test tests",
|
|
26
26
|
"build": "bunup",
|
|
27
27
|
"lint": "tsgo --noEmit && bunx biome lint",
|
|
28
|
-
"publish
|
|
29
|
-
"publish:pack": "bun pm pack --destination ./dist",
|
|
30
|
-
"publish:dry": "bun publish --dry-run"
|
|
28
|
+
"publish": "bun publish --access public || true"
|
|
31
29
|
},
|
|
32
30
|
"dependencies": {
|
|
31
|
+
"@ooneex/container": "0.0.2",
|
|
33
32
|
"@ooneex/exception": "0.0.1",
|
|
34
33
|
"@ooneex/http-status": "0.0.1",
|
|
35
34
|
"nodemailer": "^7.0.10",
|
|
36
|
-
"react-dom": "^19.0.0",
|
|
37
35
|
"resend": "^6.4.2"
|
|
38
36
|
},
|
|
39
|
-
"devDependencies": {
|
|
40
|
-
|
|
37
|
+
"devDependencies": {
|
|
38
|
+
"@types/nodemailer": "^7.0.4"
|
|
39
|
+
},
|
|
40
|
+
"keywords": [
|
|
41
|
+
"bun",
|
|
42
|
+
"email",
|
|
43
|
+
"mail",
|
|
44
|
+
"mailer",
|
|
45
|
+
"nodemailer",
|
|
46
|
+
"ooneex",
|
|
47
|
+
"resend",
|
|
48
|
+
"smtp",
|
|
49
|
+
"typescript"
|
|
50
|
+
]
|
|
41
51
|
}
|
|
Binary file
|