apeframework 0.0.0-dev.20 → 0.0.0-dev.21

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.
Files changed (210) hide show
  1. package/LICENSE +1 -1
  2. package/cipher/Algorithm.js +2 -4
  3. package/cipher/Cipher.js +9 -15
  4. package/cipher/errors/DecryptError.js +3 -6
  5. package/cipher/errors/SecretLengthError.js +3 -6
  6. package/cipher/validateSecretLength.js +7 -10
  7. package/cli/Args.js +1 -2
  8. package/cli/Command.js +1 -2
  9. package/cli/getArgs.js +3 -6
  10. package/cli/parseArgs.js +3 -9
  11. package/cli/utils/exit.js +1 -4
  12. package/cli/utils/formatList.js +3 -6
  13. package/cli/utils/formatTable.js +3 -6
  14. package/cli/utils/formatText.js +3 -6
  15. package/cli/utils/print.js +1 -4
  16. package/cli/utils/printLn.js +3 -6
  17. package/config/Config.js +1 -2
  18. package/config/Properties.js +1 -2
  19. package/config/errors/FileReadError.js +3 -6
  20. package/config/errors/PropertyNameError.js +3 -6
  21. package/config/errors/PropertyParseError.js +3 -6
  22. package/config/getConfig.js +8 -11
  23. package/config/getPropertyEnvVar.js +1 -4
  24. package/config/parseProperty.js +3 -6
  25. package/config/readFile.js +8 -14
  26. package/config/validatePropertyName.js +3 -6
  27. package/env/Env.js +1 -2
  28. package/env/errors/FileReadError.js +3 -6
  29. package/env/getEnv.js +3 -6
  30. package/env/readFile.js +8 -14
  31. package/error/BaseError.js +1 -4
  32. package/jwt/Algorithm.js +2 -4
  33. package/jwt/Jwt.js +6 -9
  34. package/jwt/Payload.js +1 -2
  35. package/jwt/errors/SecretLengthError.js +3 -6
  36. package/jwt/validateSecretLength.js +7 -10
  37. package/logger/Level.js +2 -4
  38. package/logger/Logger.js +1 -4
  39. package/logger/Severity.js +2 -4
  40. package/logger/adapters/file/FileLogger.js +11 -17
  41. package/logger/adapters/file/errors/FileInitError.js +3 -6
  42. package/logger/adapters/file/initFile.js +6 -12
  43. package/logger/adapters/noop/NoopLogger.js +3 -6
  44. package/logger/adapters/stdio/StdioLogger.js +11 -17
  45. package/mailer/Address.js +1 -2
  46. package/mailer/Attachment.js +1 -2
  47. package/mailer/Event.js +1 -2
  48. package/mailer/List.js +1 -2
  49. package/mailer/Location.js +1 -2
  50. package/mailer/Mail.js +1 -2
  51. package/mailer/Mailer.js +16 -19
  52. package/mailer/Method.js +2 -4
  53. package/mailer/adapters/noop/NoopMailer.js +5 -8
  54. package/mailer/adapters/smtp/SmtpMailer.js +19 -25
  55. package/mailer/adapters/smtp/getAddress.js +1 -4
  56. package/mailer/adapters/smtp/getAddresses.js +3 -6
  57. package/mailer/adapters/smtp/getAttachments.js +1 -4
  58. package/mailer/errors/AddressEmailError.js +3 -6
  59. package/mailer/errors/EventAttachmentUrlError.js +3 -6
  60. package/mailer/errors/EventGeolocationError.js +3 -6
  61. package/mailer/errors/EventUrlError.js +3 -6
  62. package/mailer/errors/ListUrlError.js +3 -6
  63. package/mailer/getIcalendar.js +3 -6
  64. package/mailer/validateAddressEmail.js +5 -8
  65. package/mailer/validateEventAttachmentUrl.js +5 -8
  66. package/mailer/validateEventGeolocation.js +5 -8
  67. package/mailer/validateEventUrl.js +5 -8
  68. package/mailer/validateListUrl.js +5 -8
  69. package/package.json +2 -4
  70. package/parser/Parser.js +1 -2
  71. package/parser/errors/ParseError.js +3 -6
  72. package/parser/factories/enum/createEnumParser.js +3 -6
  73. package/parser/factories/unit/Unit.js +1 -2
  74. package/parser/factories/unit/createUnitParser.js +8 -11
  75. package/parser/parseBoolean.js +3 -6
  76. package/parser/parseBytes.js +3 -6
  77. package/parser/parseInteger.js +6 -9
  78. package/parser/parseMilliseconds.js +3 -6
  79. package/parser/parseNumber.js +4 -7
  80. package/parser/parseString.js +3 -6
  81. package/pwd/Pwd.js +6 -12
  82. package/pwd/errors/HashRoundsError.js +3 -6
  83. package/pwd/validateHashRounds.js +3 -6
  84. package/server/ErrorHandler.js +1 -2
  85. package/server/Format.js +1 -2
  86. package/server/Handler.js +1 -2
  87. package/server/Method.js +2 -4
  88. package/server/OpenApiFormat.js +2 -4
  89. package/server/Route.js +1 -2
  90. package/server/Schema.js +1 -2
  91. package/server/Server.js +15 -21
  92. package/server/getAjv.js +5 -11
  93. package/tls/Tls.js +1 -2
  94. package/tls/errors/FileReadError.js +3 -6
  95. package/tls/getTls.js +5 -8
  96. package/tls/readFile.js +7 -13
  97. package/utils/getRandomHexString.js +3 -6
  98. package/utils/getTimestamp.js +1 -4
  99. package/utils/isValidEmail.js +1 -4
  100. package/utils/isValidGeolocation.js +1 -4
  101. package/utils/isValidHexString.js +1 -4
  102. package/utils/isValidIsoDate.js +1 -4
  103. package/utils/isValidJwtToken.js +1 -4
  104. package/utils/isValidUrl.js +1 -4
  105. package/utils/isValidUuid.js +1 -4
  106. package/utils/wait.js +1 -4
  107. package/cipher/Algorithm.ts +0 -9
  108. package/cipher/Cipher.ts +0 -46
  109. package/cipher/errors/DecryptError.ts +0 -11
  110. package/cipher/errors/SecretLengthError.ts +0 -11
  111. package/cipher/validateSecretLength.ts +0 -18
  112. package/cli/Args.ts +0 -8
  113. package/cli/Command.ts +0 -7
  114. package/cli/getArgs.ts +0 -10
  115. package/cli/parseArgs.ts +0 -34
  116. package/cli/utils/exit.ts +0 -7
  117. package/cli/utils/formatList.ts +0 -11
  118. package/cli/utils/formatTable.ts +0 -25
  119. package/cli/utils/formatText.ts +0 -9
  120. package/cli/utils/print.ts +0 -7
  121. package/cli/utils/printLn.ts +0 -9
  122. package/config/Config.ts +0 -5
  123. package/config/Properties.ts +0 -12
  124. package/config/errors/FileReadError.ts +0 -11
  125. package/config/errors/PropertyNameError.ts +0 -11
  126. package/config/errors/PropertyParseError.ts +0 -11
  127. package/config/getConfig.ts +0 -47
  128. package/config/getPropertyEnvVar.ts +0 -15
  129. package/config/parseProperty.ts +0 -47
  130. package/config/readFile.ts +0 -34
  131. package/config/validatePropertyName.ts +0 -13
  132. package/env/Env.ts +0 -5
  133. package/env/errors/FileReadError.ts +0 -11
  134. package/env/getEnv.ts +0 -24
  135. package/env/readFile.ts +0 -24
  136. package/error/BaseError.ts +0 -12
  137. package/jwt/Algorithm.ts +0 -9
  138. package/jwt/Jwt.ts +0 -49
  139. package/jwt/Payload.ts +0 -14
  140. package/jwt/errors/SecretLengthError.ts +0 -11
  141. package/jwt/validateSecretLength.ts +0 -18
  142. package/logger/Level.ts +0 -13
  143. package/logger/Logger.ts +0 -19
  144. package/logger/Severity.ts +0 -12
  145. package/logger/adapters/file/FileLogger.ts +0 -87
  146. package/logger/adapters/file/errors/FileInitError.ts +0 -11
  147. package/logger/adapters/file/initFile.ts +0 -18
  148. package/logger/adapters/noop/NoopLogger.ts +0 -21
  149. package/logger/adapters/stdio/StdioLogger.ts +0 -89
  150. package/mailer/Address.ts +0 -8
  151. package/mailer/Attachment.ts +0 -11
  152. package/mailer/Event.ts +0 -20
  153. package/mailer/List.ts +0 -10
  154. package/mailer/Location.ts +0 -12
  155. package/mailer/Mail.ts +0 -23
  156. package/mailer/Mailer.ts +0 -69
  157. package/mailer/Method.ts +0 -8
  158. package/mailer/adapters/noop/NoopMailer.ts +0 -15
  159. package/mailer/adapters/smtp/SmtpMailer.ts +0 -74
  160. package/mailer/adapters/smtp/getAddress.ts +0 -15
  161. package/mailer/adapters/smtp/getAddresses.ts +0 -17
  162. package/mailer/adapters/smtp/getAttachments.ts +0 -20
  163. package/mailer/errors/AddressEmailError.ts +0 -11
  164. package/mailer/errors/EventAttachmentUrlError.ts +0 -11
  165. package/mailer/errors/EventGeolocationError.ts +0 -11
  166. package/mailer/errors/EventUrlError.ts +0 -11
  167. package/mailer/errors/ListUrlError.ts +0 -11
  168. package/mailer/getIcalendar.ts +0 -39
  169. package/mailer/validateAddressEmail.ts +0 -12
  170. package/mailer/validateEventAttachmentUrl.ts +0 -12
  171. package/mailer/validateEventGeolocation.ts +0 -15
  172. package/mailer/validateEventUrl.ts +0 -12
  173. package/mailer/validateListUrl.ts +0 -12
  174. package/parser/Parser.ts +0 -5
  175. package/parser/errors/ParseError.ts +0 -11
  176. package/parser/factories/enum/createEnumParser.ts +0 -21
  177. package/parser/factories/unit/Unit.ts +0 -8
  178. package/parser/factories/unit/createUnitParser.ts +0 -50
  179. package/parser/parseBoolean.ts +0 -33
  180. package/parser/parseBytes.ts +0 -55
  181. package/parser/parseInteger.ts +0 -23
  182. package/parser/parseMilliseconds.ts +0 -31
  183. package/parser/parseNumber.ts +0 -22
  184. package/parser/parseString.ts +0 -16
  185. package/pwd/Pwd.ts +0 -31
  186. package/pwd/errors/HashRoundsError.ts +0 -11
  187. package/pwd/validateHashRounds.ts +0 -11
  188. package/server/ErrorHandler.ts +0 -11
  189. package/server/Format.ts +0 -15
  190. package/server/Handler.ts +0 -10
  191. package/server/Method.ts +0 -11
  192. package/server/OpenApiFormat.ts +0 -8
  193. package/server/Route.ts +0 -16
  194. package/server/Schema.ts +0 -13
  195. package/server/Server.ts +0 -134
  196. package/server/getAjv.ts +0 -26
  197. package/tls/Tls.ts +0 -10
  198. package/tls/errors/FileReadError.ts +0 -11
  199. package/tls/getTls.ts +0 -24
  200. package/tls/readFile.ts +0 -18
  201. package/utils/getRandomHexString.ts +0 -9
  202. package/utils/getTimestamp.ts +0 -7
  203. package/utils/isValidEmail.ts +0 -9
  204. package/utils/isValidGeolocation.ts +0 -10
  205. package/utils/isValidHexString.ts +0 -9
  206. package/utils/isValidIsoDate.ts +0 -9
  207. package/utils/isValidJwtToken.ts +0 -9
  208. package/utils/isValidUrl.ts +0 -21
  209. package/utils/isValidUuid.ts +0 -10
  210. package/utils/wait.ts +0 -9
@@ -1,87 +0,0 @@
1
- import pino from 'pino'
2
- import { Level } from '../../Level'
3
- import { Logger } from '../../Logger'
4
- import { initFile } from './initFile'
5
- import type { Logger as PinoLogger } from 'pino'
6
-
7
- class FileLogger extends Logger {
8
- private readonly logger: PinoLogger
9
-
10
- private readonly context: object | undefined
11
-
12
- public constructor(params: {
13
- path: string,
14
- level?: Level,
15
- context?: object,
16
- }) {
17
- super()
18
-
19
- initFile(params.path)
20
-
21
- const stream = pino.destination(params.path)
22
-
23
- this.logger = pino({
24
- enabled: params.level !== Level.OFF,
25
- level: params.level ?? Level.INFO,
26
- messageKey: 'message',
27
- formatters: {
28
- level(label, number) {
29
- return {
30
- level: label,
31
- severity: number,
32
- }
33
- },
34
- bindings: () => { return {} },
35
- },
36
- }, stream)
37
-
38
- this.context = params.context
39
- }
40
-
41
- public trace(message: string, data?: unknown): void {
42
- this.logger.trace(this.getPayload(message, data))
43
- }
44
-
45
- public debug(message: string, data?: unknown): void {
46
- this.logger.debug(this.getPayload(message, data))
47
- }
48
-
49
- public info(message: string, data?: unknown): void {
50
- this.logger.info(this.getPayload(message, data))
51
- }
52
-
53
- public warn(message: string, data?: unknown): void {
54
- this.logger.warn(this.getPayload(message, data))
55
- }
56
-
57
- public error(message: string, data?: unknown): void {
58
- this.logger.error(this.getPayload(message, data))
59
- }
60
-
61
- public fatal(message: string, data?: unknown): void {
62
- this.logger.fatal(this.getPayload(message, data))
63
- }
64
-
65
- public async close(): Promise<void> {
66
- return new Promise((resolve, reject) => {
67
- this.logger.flush((error) => {
68
- if (error) {
69
- reject(error)
70
- }
71
- resolve()
72
- })
73
- })
74
- }
75
-
76
- private getPayload(message: string, data?: unknown): object {
77
- return {
78
- ...this.context,
79
- message,
80
- data,
81
- }
82
- }
83
- }
84
-
85
- export {
86
- FileLogger,
87
- }
@@ -1,11 +0,0 @@
1
- import { BaseError } from '../../../../error/BaseError'
2
-
3
- class FileInitError extends BaseError {
4
- public constructor(path: string, message: string) {
5
- super(`failed initializing file "${path}": ${message}`)
6
- }
7
- }
8
-
9
- export {
10
- FileInitError,
11
- }
@@ -1,18 +0,0 @@
1
- import fs from 'fs-extra'
2
- import { FileInitError } from './errors/FileInitError'
3
-
4
- const initFile = (path: string): void => {
5
- if (path === '') {
6
- throw new FileInitError('', 'empty path')
7
- }
8
-
9
- try {
10
- fs.ensureFileSync(path)
11
- } catch (error) {
12
- throw new FileInitError(path, (error as Error).message)
13
- }
14
- }
15
-
16
- export {
17
- initFile,
18
- }
@@ -1,21 +0,0 @@
1
- import { Logger } from '../../Logger'
2
-
3
- class NoopLogger extends Logger {
4
- public trace(): void { }
5
-
6
- public debug(): void { }
7
-
8
- public info(): void { }
9
-
10
- public warn(): void { }
11
-
12
- public error(): void { }
13
-
14
- public fatal(): void { }
15
-
16
- public async close(): Promise<void> { }
17
- }
18
-
19
- export {
20
- NoopLogger,
21
- }
@@ -1,89 +0,0 @@
1
- import pino from 'pino'
2
- import pretty from 'pino-pretty'
3
- import { Level } from '../../Level'
4
- import { Logger } from '../../Logger'
5
- import type { Logger as PinoLogger } from 'pino'
6
-
7
- class StdioLogger extends Logger {
8
- private readonly logger: PinoLogger
9
-
10
- private readonly context: object | undefined
11
-
12
- public constructor(params?: {
13
- pretty?: boolean,
14
- level?: Level,
15
- context?: object,
16
- }) {
17
- super()
18
-
19
- const stream = params?.pretty
20
- ? pretty()
21
- : pino.destination(process.stdout.fd)
22
-
23
- this.logger = pino({
24
- enabled: params?.level !== Level.OFF,
25
- level: params?.level ?? Level.INFO,
26
- messageKey: 'message',
27
- formatters: {
28
- level(label, number) {
29
- return {
30
- level: label,
31
- ...params?.pretty
32
- ? {}
33
- : { severity: number },
34
- }
35
- },
36
- bindings: () => { return {} },
37
- },
38
- }, stream)
39
-
40
- this.context = params?.context
41
- }
42
-
43
- public trace(message: string, data?: unknown): void {
44
- this.logger.trace(this.getPayload(message, data))
45
- }
46
-
47
- public debug(message: string, data?: unknown): void {
48
- this.logger.debug(this.getPayload(message, data))
49
- }
50
-
51
- public info(message: string, data?: unknown): void {
52
- this.logger.info(this.getPayload(message, data))
53
- }
54
-
55
- public warn(message: string, data?: unknown): void {
56
- this.logger.warn(this.getPayload(message, data))
57
- }
58
-
59
- public error(message: string, data?: unknown): void {
60
- this.logger.error(this.getPayload(message, data))
61
- }
62
-
63
- public fatal(message: string, data?: unknown): void {
64
- this.logger.fatal(this.getPayload(message, data))
65
- }
66
-
67
- public async close(): Promise<void> {
68
- return new Promise((resolve, reject) => {
69
- this.logger.flush((error) => {
70
- if (error) {
71
- reject(error)
72
- }
73
- resolve()
74
- })
75
- })
76
- }
77
-
78
- private getPayload(message: string, data?: unknown): object {
79
- return {
80
- ...this.context,
81
- message,
82
- data,
83
- }
84
- }
85
- }
86
-
87
- export {
88
- StdioLogger,
89
- }
package/mailer/Address.ts DELETED
@@ -1,8 +0,0 @@
1
- interface Address {
2
- email: string,
3
- name?: string,
4
- }
5
-
6
- export {
7
- type Address,
8
- }
@@ -1,11 +0,0 @@
1
- import type { Readable } from 'stream'
2
-
3
- interface Attachment {
4
- fileName: string,
5
- contentType?: string,
6
- content: Buffer | Readable | string,
7
- }
8
-
9
- export {
10
- type Attachment,
11
- }
package/mailer/Event.ts DELETED
@@ -1,20 +0,0 @@
1
- import type { Location } from './Location'
2
- import type { Method } from './Method'
3
-
4
- interface Event {
5
- fileName?: string,
6
- method: Method,
7
- id?: string,
8
- start: Date,
9
- end: Date,
10
- allDay?: boolean,
11
- name: string,
12
- description?: string,
13
- url?: string,
14
- location?: Location,
15
- attachments?: string[],
16
- }
17
-
18
- export {
19
- type Event,
20
- }
package/mailer/List.ts DELETED
@@ -1,10 +0,0 @@
1
- interface List {
2
- id?: string,
3
- help?: string,
4
- subscribe?: string,
5
- unsubscribe?: string,
6
- }
7
-
8
- export {
9
- type List,
10
- }
@@ -1,12 +0,0 @@
1
- interface Location {
2
- name: string,
3
- address?: string,
4
- geo?: {
5
- latitude: number,
6
- longitude: number,
7
- },
8
- }
9
-
10
- export {
11
- type Location,
12
- }
package/mailer/Mail.ts DELETED
@@ -1,23 +0,0 @@
1
- import type { Address } from './Address'
2
- import type { Attachment } from './Attachment'
3
- import type { Event } from './Event'
4
- import type { List } from './List'
5
-
6
- interface Mail {
7
- from: Address,
8
- sender?: Address,
9
- replyTo?: Address,
10
- to: Address[],
11
- cc?: Address[],
12
- bcc?: Address[],
13
- subject: string,
14
- text: string,
15
- html?: string,
16
- attachments?: Attachment[],
17
- event?: Event,
18
- list?: List,
19
- }
20
-
21
- export {
22
- type Mail,
23
- }
package/mailer/Mailer.ts DELETED
@@ -1,69 +0,0 @@
1
- import { validateAddressEmail } from './validateAddressEmail'
2
- import { validateEventAttachmentUrl } from './validateEventAttachmentUrl'
3
- import { validateEventGeolocation } from './validateEventGeolocation'
4
- import { validateEventUrl } from './validateEventUrl'
5
- import { validateListUrl } from './validateListUrl'
6
- import type { Mail } from './Mail'
7
-
8
- abstract class Mailer {
9
- public async send(mail: Mail): Promise<string> {
10
- validateAddressEmail(mail.from.email)
11
-
12
- if (mail.sender) {
13
- validateAddressEmail(mail.sender.email)
14
- }
15
-
16
- if (mail.replyTo) {
17
- validateAddressEmail(mail.replyTo.email)
18
- }
19
-
20
- mail.to.forEach((address) => {
21
- validateAddressEmail(address.email)
22
- })
23
-
24
- if (mail.cc) {
25
- mail.cc.forEach((address) => {
26
- validateAddressEmail(address.email)
27
- })
28
- }
29
-
30
- if (mail.bcc) {
31
- mail.bcc.forEach((address) => {
32
- validateAddressEmail(address.email)
33
- })
34
- }
35
-
36
- if (mail.event?.url) {
37
- validateEventUrl(mail.event.url)
38
- }
39
-
40
- if (mail.event?.location?.geo) {
41
- validateEventGeolocation(
42
- mail.event.location.geo.latitude,
43
- mail.event.location.geo.longitude,
44
- )
45
- }
46
-
47
- if (mail.event?.attachments) {
48
- mail.event.attachments.forEach((attachment) => {
49
- validateEventAttachmentUrl(attachment)
50
- })
51
- }
52
-
53
- if (mail.list) {
54
- Object.entries(mail.list).forEach(([property, url]: [string, string]) => {
55
- validateListUrl(property, url)
56
- })
57
- }
58
-
59
- return this.sendMail(mail)
60
- }
61
-
62
- public abstract sendMail(mail: Mail): Promise<string>
63
-
64
- public abstract close(): Promise<void>
65
- }
66
-
67
- export {
68
- Mailer,
69
- }
package/mailer/Method.ts DELETED
@@ -1,8 +0,0 @@
1
- enum Method {
2
- PUBLISH = 'PUBLISH',
3
- CANCEL = 'CANCEL',
4
- }
5
-
6
- export {
7
- Method,
8
- }
@@ -1,15 +0,0 @@
1
- import { randomUUID } from 'crypto'
2
- import { Mailer } from '../../Mailer'
3
- import type { Mail } from '../../Mail'
4
-
5
- class NoopMailer extends Mailer {
6
- public async sendMail(mail: Mail): Promise<string> {
7
- return `${randomUUID()}@${mail.from.email.split('@')[1]}`
8
- }
9
-
10
- public async close(): Promise<void> { }
11
- }
12
-
13
- export {
14
- NoopMailer,
15
- }
@@ -1,74 +0,0 @@
1
- import nodemailer from 'nodemailer'
2
- import { getTls } from '../../../tls/getTls'
3
- import { Mailer } from '../../Mailer'
4
- import { getIcalendar } from '../../getIcalendar'
5
- import { getAddress } from './getAddress'
6
- import { getAddresses } from './getAddresses'
7
- import { getAttachments } from './getAttachments'
8
- import type { Tls } from '../../../tls/Tls'
9
- import type { Mail } from '../../Mail'
10
- import type { Transporter } from 'nodemailer'
11
-
12
- class SmtpMailer extends Mailer {
13
- private readonly transporter: Transporter
14
-
15
- public constructor(params: {
16
- host: string,
17
- port: number,
18
- secure?: boolean,
19
- tls?: Tls,
20
- user?: string,
21
- password?: string,
22
- maxConnections?: number,
23
- }) {
24
- super()
25
-
26
- this.transporter = nodemailer.createTransport({
27
- host: params.host,
28
- port: params.port,
29
- secure: params.secure ?? false,
30
- tls: getTls(params.tls),
31
- auth: params.user || params.password
32
- ? {
33
- user: params.user,
34
- pass: params.password,
35
- }
36
- : undefined,
37
- pool: true,
38
- maxConnections: params.maxConnections ?? 5,
39
- })
40
- }
41
-
42
- public async sendMail(mail: Mail): Promise<string> {
43
- const result = await this.transporter.sendMail({
44
- from: getAddress(mail.from),
45
- sender: getAddress(mail.sender),
46
- replyTo: getAddress(mail.replyTo),
47
- to: getAddresses(mail.to),
48
- cc: getAddresses(mail.cc),
49
- bcc: getAddresses(mail.bcc),
50
- subject: mail.subject,
51
- text: mail.text,
52
- html: mail.html,
53
- attachments: getAttachments(mail.attachments),
54
- icalEvent: mail.event
55
- ? {
56
- filename: mail.event.fileName ?? 'event.ics',
57
- method: mail.event.method,
58
- content: getIcalendar(mail.event),
59
- }
60
- : undefined,
61
- list: { ...mail.list },
62
- })
63
-
64
- return result.messageId.slice(1, -1)
65
- }
66
-
67
- public async close(): Promise<void> {
68
- this.transporter.close()
69
- }
70
- }
71
-
72
- export {
73
- SmtpMailer,
74
- }
@@ -1,15 +0,0 @@
1
- import type { Address } from '../../Address'
2
- import type { Address as NodemailerAddress } from 'nodemailer/lib/mailer'
3
-
4
- const getAddress = (address?: Address): NodemailerAddress | undefined => {
5
- return address
6
- ? {
7
- address: address.email,
8
- name: address.name ?? '',
9
- }
10
- : undefined
11
- }
12
-
13
- export {
14
- getAddress,
15
- }
@@ -1,17 +0,0 @@
1
- import { getAddress } from './getAddress'
2
- import type { Address } from '../../Address'
3
- import type { Address as NodemailerAddress } from 'nodemailer/lib/mailer'
4
-
5
- const getAddresses = (addresses?: Address[]): NodemailerAddress[] => {
6
- return addresses
7
- ? addresses
8
- .map(getAddress)
9
- .filter((address) => {
10
- return address !== undefined
11
- })
12
- : []
13
- }
14
-
15
- export {
16
- getAddresses,
17
- }
@@ -1,20 +0,0 @@
1
- import type { Attachment } from '../../Attachment'
2
- import type { Attachment as NodemailerAttachment } from 'nodemailer/lib/mailer'
3
-
4
- const getAttachments = (attachments?: Attachment[]): NodemailerAttachment[] => {
5
- return attachments
6
- ? attachments
7
- .map((attachment) => {
8
- return {
9
- filename: attachment.fileName,
10
- cid: attachment.fileName,
11
- contentType: attachment.contentType,
12
- content: attachment.content,
13
- }
14
- })
15
- : []
16
- }
17
-
18
- export {
19
- getAttachments,
20
- }
@@ -1,11 +0,0 @@
1
- import { BaseError } from '../../error/BaseError'
2
-
3
- class AddressEmailError extends BaseError {
4
- public constructor(email: string) {
5
- super(`invalid address email "${email}"`)
6
- }
7
- }
8
-
9
- export {
10
- AddressEmailError,
11
- }
@@ -1,11 +0,0 @@
1
- import { BaseError } from '../../error/BaseError'
2
-
3
- class EventAttachmentUrlError extends BaseError {
4
- public constructor(url: string) {
5
- super(`invalid event attachment url "${url}"`)
6
- }
7
- }
8
-
9
- export {
10
- EventAttachmentUrlError,
11
- }
@@ -1,11 +0,0 @@
1
- import { BaseError } from '../../error/BaseError'
2
-
3
- class EventGeolocationError extends BaseError {
4
- public constructor(latitude: number, longitude: number) {
5
- super(`invalid event geolocation "${latitude}, ${longitude}"`)
6
- }
7
- }
8
-
9
- export {
10
- EventGeolocationError,
11
- }
@@ -1,11 +0,0 @@
1
- import { BaseError } from '../../error/BaseError'
2
-
3
- class EventUrlError extends BaseError {
4
- public constructor(url: string) {
5
- super(`invalid event url "${url}"`)
6
- }
7
- }
8
-
9
- export {
10
- EventUrlError,
11
- }
@@ -1,11 +0,0 @@
1
- import { BaseError } from '../../error/BaseError'
2
-
3
- class ListUrlError extends BaseError {
4
- public constructor(property: string, url: string) {
5
- super(`invalid list ${property} url "${url}"`)
6
- }
7
- }
8
-
9
- export {
10
- ListUrlError,
11
- }
@@ -1,39 +0,0 @@
1
- import { ICalCalendar } from 'ical-generator'
2
- import type { Event } from './Event'
3
- import type { ICalCalendarMethod } from 'ical-generator'
4
-
5
- const getIcalendar = (event: Event): string => {
6
- const calendar = new ICalCalendar({
7
- method: event.method as unknown as ICalCalendarMethod,
8
- events: [
9
- {
10
- id: event.id,
11
- start: event.start,
12
- end: event.end,
13
- allDay: event.allDay,
14
- summary: event.name,
15
- description: event.description,
16
- url: event.url,
17
- location: event.location
18
- ? {
19
- title: event.location.name,
20
- address: event.location.address,
21
- geo: event.location.geo
22
- ? {
23
- lat: event.location.geo.latitude,
24
- lon: event.location.geo.longitude,
25
- }
26
- : undefined,
27
- }
28
- : undefined,
29
- attachments: event.attachments,
30
- },
31
- ],
32
- })
33
-
34
- return calendar.toString()
35
- }
36
-
37
- export {
38
- getIcalendar,
39
- }
@@ -1,12 +0,0 @@
1
- import { isValidEmail } from 'utils/isValidEmail'
2
- import { AddressEmailError } from './errors/AddressEmailError'
3
-
4
- const validateAddressEmail = (email: string): void => {
5
- if (!isValidEmail(email)) {
6
- throw new AddressEmailError(email)
7
- }
8
- }
9
-
10
- export {
11
- validateAddressEmail,
12
- }
@@ -1,12 +0,0 @@
1
- import { isValidUrl } from 'utils/isValidUrl'
2
- import { EventAttachmentUrlError } from './errors/EventAttachmentUrlError'
3
-
4
- const validateEventAttachmentUrl = (url: string): void => {
5
- if (!isValidUrl(url)) {
6
- throw new EventAttachmentUrlError(url)
7
- }
8
- }
9
-
10
- export {
11
- validateEventAttachmentUrl,
12
- }