@webiny/api-mailer 6.3.0-beta.2 → 6.3.0-beta.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.
- package/domain/CodeMailerSettings/abstractions.d.ts +8 -0
- package/domain/CodeMailerSettings/abstractions.js +4 -0
- package/domain/CodeMailerSettings/abstractions.js.map +1 -0
- package/domain/MailTransport/abstractions.d.ts +8 -0
- package/domain/MailTransport/abstractions.js +1 -0
- package/domain/MailTransport/abstractions.js.map +1 -1
- package/domain/errors.d.ts +4 -0
- package/domain/errors.js +8 -0
- package/domain/errors.js.map +1 -1
- package/exports/api/mailer.d.ts +4 -0
- package/exports/api/mailer.js +6 -0
- package/exports/api/mailer.js.map +1 -0
- package/features/CodeMailerSettings/CodeMailerSettingsImpl.d.ts +12 -0
- package/features/CodeMailerSettings/CodeMailerSettingsImpl.js +22 -0
- package/features/CodeMailerSettings/CodeMailerSettingsImpl.js.map +1 -0
- package/features/{Encryption → CodeMailerSettings}/feature.d.ts +1 -1
- package/features/CodeMailerSettings/feature.js +10 -0
- package/features/CodeMailerSettings/feature.js.map +1 -0
- package/features/DummyTransport/DummyMailTransportFactory.d.ts +1 -0
- package/features/DummyTransport/DummyMailTransportFactory.js +1 -0
- package/features/DummyTransport/DummyMailTransportFactory.js.map +1 -1
- package/features/GetSettings/GetSettingsRepository.d.ts +6 -5
- package/features/GetSettings/GetSettingsRepository.js +29 -10
- package/features/GetSettings/GetSettingsRepository.js.map +1 -1
- package/features/GetSettings/GetSettingsUseCase.d.ts +3 -4
- package/features/GetSettings/GetSettingsUseCase.js +2 -2
- package/features/GetSettings/GetSettingsUseCase.js.map +1 -1
- package/features/GetSettings/abstractions.d.ts +11 -5
- package/features/GetSettings/abstractions.js.map +1 -1
- package/features/GetSettings/index.d.ts +1 -1
- package/features/GetSettings/index.js +1 -1
- package/features/GetSettings/index.js.map +1 -1
- package/features/MailerService/ActiveTransport.d.ts +10 -0
- package/features/MailerService/ActiveTransport.js +20 -0
- package/features/MailerService/ActiveTransport.js.map +1 -0
- package/features/MailerService/MailerService.d.ts +3 -2
- package/features/MailerService/MailerService.js +16 -15
- package/features/MailerService/MailerService.js.map +1 -1
- package/features/MailerService/feature.js +2 -0
- package/features/MailerService/feature.js.map +1 -1
- package/features/SaveSettings/SaveSettingsRepository.d.ts +1 -1
- package/features/SaveSettings/SaveSettingsRepository.js +12 -10
- package/features/SaveSettings/SaveSettingsRepository.js.map +1 -1
- package/features/SaveSettings/SaveSettingsUseCase.d.ts +5 -1
- package/features/SaveSettings/SaveSettingsUseCase.js +26 -8
- package/features/SaveSettings/SaveSettingsUseCase.js.map +1 -1
- package/features/SaveSettings/abstractions.d.ts +15 -7
- package/features/SaveSettings/abstractions.js +10 -1
- package/features/SaveSettings/abstractions.js.map +1 -1
- package/features/SaveSettings/index.d.ts +1 -1
- package/features/SaveSettings/index.js +1 -1
- package/features/SaveSettings/index.js.map +1 -1
- package/features/SaveSettings/validation.js +7 -3
- package/features/SaveSettings/validation.js.map +1 -1
- package/features/SendMail/SendMailUseCase.js +9 -6
- package/features/SendMail/SendMailUseCase.js.map +1 -1
- package/features/SendMail/index.d.ts +1 -0
- package/features/SendMail/index.js +3 -0
- package/features/SendMail/index.js.map +1 -0
- package/features/SmtpTransport/SmtpMailTransport.d.ts +51 -1
- package/features/SmtpTransport/SmtpMailTransport.js +7 -1
- package/features/SmtpTransport/SmtpMailTransport.js.map +1 -1
- package/features/SmtpTransport/SmtpMailTransportFactory.d.ts +1 -0
- package/features/SmtpTransport/SmtpMailTransportFactory.js +1 -0
- package/features/SmtpTransport/SmtpMailTransportFactory.js.map +1 -1
- package/graphql/settings.js +44 -32
- package/graphql/settings.js.map +1 -1
- package/index.js +3 -3
- package/index.js.map +1 -1
- package/package.json +20 -24
- package/utils/isMailboxAddress.d.ts +6 -0
- package/utils/isMailboxAddress.js +12 -0
- package/utils/isMailboxAddress.js.map +1 -0
- package/domain/Encryption/abstractions.d.ts +0 -8
- package/domain/Encryption/abstractions.js +0 -4
- package/domain/Encryption/abstractions.js.map +0 -1
- package/features/Encryption/PasswordEncryption.d.ts +0 -9
- package/features/Encryption/PasswordEncryption.js +0 -23
- package/features/Encryption/PasswordEncryption.js.map +0 -1
- package/features/Encryption/feature.js +0 -10
- package/features/Encryption/feature.js.map +0 -1
- package/features/Encryption/utils/password.d.ts +0 -7
- package/features/Encryption/utils/password.js +0 -56
- package/features/Encryption/utils/password.js.map +0 -1
- package/features/Encryption/utils/secret.d.ts +0 -1
- package/features/Encryption/utils/secret.js +0 -11
- package/features/Encryption/utils/secret.js.map +0 -1
- package/features/MailerService/TransportFactory.d.ts +0 -2
- package/features/MailerService/TransportFactory.js +0 -31
- package/features/MailerService/TransportFactory.js.map +0 -1
package/graphql/settings.js
CHANGED
|
@@ -1,8 +1,28 @@
|
|
|
1
|
-
import { ErrorResponse, GraphQLSchemaPlugin
|
|
1
|
+
import { ErrorResponse, GraphQLSchemaPlugin } from "@webiny/handler-graphql";
|
|
2
2
|
import { GetSettingsUseCase } from "../features/GetSettings/abstractions.js";
|
|
3
3
|
import { SaveSettingsUseCase } from "../features/SaveSettings/abstractions.js";
|
|
4
|
-
import {
|
|
4
|
+
import { ActiveTransport } from "../domain/MailTransport/abstractions.js";
|
|
5
5
|
const emptyResolver = () => ({});
|
|
6
|
+
|
|
7
|
+
// Strip `password` before the settings leave the server and tack on `source`
|
|
8
|
+
// so the admin UI can branch on code-vs-storage. Accepts both the full
|
|
9
|
+
// `TransportSettings` (from getSettings) and the already-stripped
|
|
10
|
+
// `Omit<TransportSettings, "password">` (from saveSettings) — defense in depth
|
|
11
|
+
// even when the input type carries no password to begin with.
|
|
12
|
+
const toPublicSettings = (settings, source) => {
|
|
13
|
+
if (!settings) {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
17
|
+
const {
|
|
18
|
+
password: _password,
|
|
19
|
+
...publicSettings
|
|
20
|
+
} = settings;
|
|
21
|
+
return {
|
|
22
|
+
...publicSettings,
|
|
23
|
+
source
|
|
24
|
+
};
|
|
25
|
+
};
|
|
6
26
|
export const createSettingsGraphQL = () => {
|
|
7
27
|
return new GraphQLSchemaPlugin({
|
|
8
28
|
typeDefs: `
|
|
@@ -18,6 +38,7 @@ export const createSettingsGraphQL = () => {
|
|
|
18
38
|
user: String
|
|
19
39
|
from: String
|
|
20
40
|
replyTo: String
|
|
41
|
+
source: String
|
|
21
42
|
}
|
|
22
43
|
|
|
23
44
|
type MailerTransportSettingsResponse {
|
|
@@ -56,24 +77,24 @@ export const createSettingsGraphQL = () => {
|
|
|
56
77
|
MailerQuery: {
|
|
57
78
|
getSettings: async (_, __, context) => {
|
|
58
79
|
try {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
// Remove password from response
|
|
68
|
-
if (settings?.password) {
|
|
69
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
70
|
-
const {
|
|
71
|
-
password,
|
|
72
|
-
...settingsWithoutPassword
|
|
73
|
-
} = settings;
|
|
74
|
-
return new Response(settingsWithoutPassword);
|
|
80
|
+
const activeTransport = context.container.resolve(ActiveTransport);
|
|
81
|
+
const transportName = activeTransport.name();
|
|
82
|
+
if (!transportName) {
|
|
83
|
+
return {
|
|
84
|
+
data: null,
|
|
85
|
+
error: null
|
|
86
|
+
};
|
|
75
87
|
}
|
|
76
|
-
|
|
88
|
+
const getSettings = context.container.resolve(GetSettingsUseCase);
|
|
89
|
+
const result = await getSettings.execute(transportName);
|
|
90
|
+
const {
|
|
91
|
+
settings,
|
|
92
|
+
source
|
|
93
|
+
} = result.value;
|
|
94
|
+
return {
|
|
95
|
+
data: toPublicSettings(settings, source),
|
|
96
|
+
error: null
|
|
97
|
+
};
|
|
77
98
|
} catch (ex) {
|
|
78
99
|
return new ErrorResponse(ex);
|
|
79
100
|
}
|
|
@@ -90,19 +111,10 @@ export const createSettingsGraphQL = () => {
|
|
|
90
111
|
if (result.isFail()) {
|
|
91
112
|
return new ErrorResponse(result.error);
|
|
92
113
|
}
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
if (settings?.password) {
|
|
98
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
99
|
-
const {
|
|
100
|
-
password,
|
|
101
|
-
...settingsWithoutPassword
|
|
102
|
-
} = settings;
|
|
103
|
-
return new Response(settingsWithoutPassword);
|
|
104
|
-
}
|
|
105
|
-
return new Response(settings);
|
|
114
|
+
return {
|
|
115
|
+
data: toPublicSettings(result.value, "storage"),
|
|
116
|
+
error: null
|
|
117
|
+
};
|
|
106
118
|
} catch (ex) {
|
|
107
119
|
return new ErrorResponse(ex);
|
|
108
120
|
}
|
package/graphql/settings.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["ErrorResponse","GraphQLSchemaPlugin","
|
|
1
|
+
{"version":3,"names":["ErrorResponse","GraphQLSchemaPlugin","GetSettingsUseCase","SaveSettingsUseCase","ActiveTransport","emptyResolver","toPublicSettings","settings","source","password","_password","publicSettings","createSettingsGraphQL","typeDefs","resolvers","Query","mailer","MailerQuery","getSettings","_","__","context","activeTransport","container","resolve","transportName","name","data","error","result","execute","value","ex","Mutation","MailerMutation","saveSettings","args","isFail"],"sources":["settings.ts"],"sourcesContent":["import { ErrorResponse, GraphQLSchemaPlugin } from \"@webiny/handler-graphql\";\nimport { GetSettingsUseCase } from \"~/features/GetSettings/abstractions.js\";\nimport { SaveSettingsUseCase } from \"~/features/SaveSettings/abstractions.js\";\nimport { ActiveTransport } from \"~/domain/MailTransport/abstractions.js\";\nimport type { MailerSettingsSource } from \"~/features/GetSettings/abstractions.js\";\nimport type { Context } from \"@webiny/api/types.js\";\nimport type { TransportSettings } from \"~/types.js\";\n\nconst emptyResolver = () => ({});\n\n// Strip `password` before the settings leave the server and tack on `source`\n// so the admin UI can branch on code-vs-storage. Accepts both the full\n// `TransportSettings` (from getSettings) and the already-stripped\n// `Omit<TransportSettings, \"password\">` (from saveSettings) — defense in depth\n// even when the input type carries no password to begin with.\nconst toPublicSettings = (\n settings: TransportSettings | Omit<TransportSettings, \"password\"> | null,\n source: MailerSettingsSource\n): (Omit<TransportSettings, \"password\"> & { source: MailerSettingsSource }) | null => {\n if (!settings) {\n return null;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { password: _password, ...publicSettings } = settings as TransportSettings;\n return { ...publicSettings, source };\n};\n\nexport const createSettingsGraphQL = () => {\n return new GraphQLSchemaPlugin<Context>({\n typeDefs: `\n type MailerTransportSettingsError {\n message: String!\n code: String\n data: JSON\n }\n\n type MailerTransportSettings {\n host: String\n port: Number\n user: String\n from: String\n replyTo: String\n source: String\n }\n\n type MailerTransportSettingsResponse {\n data: MailerTransportSettings\n error: MailerTransportSettingsError\n }\n\n type MailerQuery {\n getSettings: MailerTransportSettingsResponse!\n }\n\n input MailerTransportSettingsInput {\n host: String!\n port: Number\n user: String!\n password: String\n from: String!\n replyTo: String\n }\n\n type MailerMutation {\n saveSettings(data: MailerTransportSettingsInput!): MailerTransportSettingsResponse!\n }\n\n extend type Query {\n mailer: MailerQuery\n }\n extend type Mutation {\n mailer: MailerMutation\n }\n `,\n resolvers: {\n Query: {\n mailer: emptyResolver\n },\n MailerQuery: {\n getSettings: async (_, __, context) => {\n try {\n const activeTransport = context.container.resolve(ActiveTransport);\n const transportName = activeTransport.name();\n\n if (!transportName) {\n return { data: null, error: null };\n }\n\n const getSettings = context.container.resolve(GetSettingsUseCase);\n const result = await getSettings.execute(transportName);\n\n const { settings, source } = result.value;\n\n return {\n data: toPublicSettings(settings, source),\n error: null\n };\n } catch (ex) {\n return new ErrorResponse(ex);\n }\n }\n },\n Mutation: {\n mailer: emptyResolver\n },\n MailerMutation: {\n saveSettings: async (_, args: any, context) => {\n try {\n const saveSettings = context.container.resolve(SaveSettingsUseCase);\n const result = await saveSettings.execute(args.data);\n\n if (result.isFail()) {\n return new ErrorResponse(result.error);\n }\n\n return {\n data: toPublicSettings(result.value, \"storage\"),\n error: null\n };\n } catch (ex) {\n return new ErrorResponse(ex);\n }\n }\n }\n }\n });\n};\n"],"mappings":"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","ignoreList":[]}
|
package/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createContextPlugin } from "@webiny/api";
|
|
2
|
-
import {
|
|
2
|
+
import { CodeMailerSettingsFeature } from "./features/CodeMailerSettings/feature.js";
|
|
3
3
|
import { GetSettingsFeature } from "./features/GetSettings/feature.js";
|
|
4
4
|
import { SaveSettingsFeature } from "./features/SaveSettings/feature.js";
|
|
5
5
|
import { DummyTransportFeature } from "./features/DummyTransport/feature.js";
|
|
@@ -10,8 +10,8 @@ import { createSettingsGraphQL } from "./graphql/settings.js";
|
|
|
10
10
|
export { MailerService } from "./domain/MailerService/abstractions.js";
|
|
11
11
|
export const createMailerContext = () => {
|
|
12
12
|
return createContextPlugin(context => {
|
|
13
|
-
// Register all features
|
|
14
|
-
|
|
13
|
+
// Register all features.
|
|
14
|
+
CodeMailerSettingsFeature.register(context.container);
|
|
15
15
|
DummyTransportFeature.register(context.container);
|
|
16
16
|
SmtpTransportFeature.register(context.container);
|
|
17
17
|
GetSettingsFeature.register(context.container);
|
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["createContextPlugin","
|
|
1
|
+
{"version":3,"names":["createContextPlugin","CodeMailerSettingsFeature","GetSettingsFeature","SaveSettingsFeature","DummyTransportFeature","SmtpTransportFeature","MailerServiceFeature","SendMailFeature","createSettingsGraphQL","MailerService","createMailerContext","context","register","container","createMailerGraphQL"],"sources":["index.ts"],"sourcesContent":["import { createContextPlugin } from \"@webiny/api\";\nimport { CodeMailerSettingsFeature } from \"~/features/CodeMailerSettings/feature.js\";\nimport { GetSettingsFeature } from \"~/features/GetSettings/feature.js\";\nimport { SaveSettingsFeature } from \"~/features/SaveSettings/feature.js\";\nimport { DummyTransportFeature } from \"~/features/DummyTransport/feature.js\";\nimport { SmtpTransportFeature } from \"~/features/SmtpTransport/feature.js\";\nimport { MailerServiceFeature } from \"~/features/MailerService/feature.js\";\nimport { SendMailFeature } from \"~/features/SendMail/feature.js\";\nimport { createSettingsGraphQL } from \"~/graphql/settings.js\";\n\nexport { MailerService } from \"./domain/MailerService/abstractions.js\";\nexport type { IMailerService, IMailerServiceErrors } from \"./domain/MailerService/abstractions.js\";\n\nexport const createMailerContext = () => {\n return createContextPlugin(context => {\n // Register all features.\n CodeMailerSettingsFeature.register(context.container);\n DummyTransportFeature.register(context.container);\n SmtpTransportFeature.register(context.container);\n GetSettingsFeature.register(context.container);\n SaveSettingsFeature.register(context.container);\n MailerServiceFeature.register(context.container);\n SendMailFeature.register(context.container);\n });\n};\n\nexport const createMailerGraphQL = () => {\n return createSettingsGraphQL();\n};\n"],"mappings":"AAAA,SAASA,mBAAmB,QAAQ,aAAa;AACjD,SAASC,yBAAyB;AAClC,SAASC,kBAAkB;AAC3B,SAASC,mBAAmB;AAC5B,SAASC,qBAAqB;AAC9B,SAASC,oBAAoB;AAC7B,SAASC,oBAAoB;AAC7B,SAASC,eAAe;AACxB,SAASC,qBAAqB;AAE9B,SAASC,aAAa;AAGtB,OAAO,MAAMC,mBAAmB,GAAGA,CAAA,KAAM;EACrC,OAAOV,mBAAmB,CAACW,OAAO,IAAI;IAClC;IACAV,yBAAyB,CAACW,QAAQ,CAACD,OAAO,CAACE,SAAS,CAAC;IACrDT,qBAAqB,CAACQ,QAAQ,CAACD,OAAO,CAACE,SAAS,CAAC;IACjDR,oBAAoB,CAACO,QAAQ,CAACD,OAAO,CAACE,SAAS,CAAC;IAChDX,kBAAkB,CAACU,QAAQ,CAACD,OAAO,CAACE,SAAS,CAAC;IAC9CV,mBAAmB,CAACS,QAAQ,CAACD,OAAO,CAACE,SAAS,CAAC;IAC/CP,oBAAoB,CAACM,QAAQ,CAACD,OAAO,CAACE,SAAS,CAAC;IAChDN,eAAe,CAACK,QAAQ,CAACD,OAAO,CAACE,SAAS,CAAC;EAC/C,CAAC,CAAC;AACN,CAAC;AAED,OAAO,MAAMC,mBAAmB,GAAGA,CAAA,KAAM;EACrC,OAAON,qBAAqB,CAAC,CAAC;AAClC,CAAC","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webiny/api-mailer",
|
|
3
|
-
"version": "6.3.0-beta.
|
|
3
|
+
"version": "6.3.0-beta.3",
|
|
4
4
|
"type": "module",
|
|
5
|
-
"
|
|
5
|
+
"exports": {
|
|
6
|
+
".": "./index.js",
|
|
7
|
+
"./*": "./*"
|
|
8
|
+
},
|
|
6
9
|
"repository": {
|
|
7
10
|
"type": "git",
|
|
8
11
|
"url": "https://github.com/webiny/webiny-js.git",
|
|
@@ -15,24 +18,24 @@
|
|
|
15
18
|
"description": "The API to send e-mails.",
|
|
16
19
|
"license": "MIT",
|
|
17
20
|
"dependencies": {
|
|
18
|
-
"@webiny/api": "6.3.0-beta.
|
|
19
|
-
"@webiny/api-headless-cms": "6.3.0-beta.
|
|
20
|
-
"@webiny/
|
|
21
|
-
"@webiny/
|
|
22
|
-
"@webiny/
|
|
23
|
-
"
|
|
24
|
-
"nodemailer": "8.0.
|
|
21
|
+
"@webiny/api": "6.3.0-beta.3",
|
|
22
|
+
"@webiny/api-headless-cms": "6.3.0-beta.3",
|
|
23
|
+
"@webiny/feature": "6.3.0-beta.3",
|
|
24
|
+
"@webiny/handler-graphql": "6.3.0-beta.3",
|
|
25
|
+
"@webiny/plugins": "6.3.0-beta.3",
|
|
26
|
+
"email-addresses": "5.0.0",
|
|
27
|
+
"nodemailer": "8.0.7",
|
|
25
28
|
"zod": "4.3.6"
|
|
26
29
|
},
|
|
27
30
|
"devDependencies": {
|
|
28
31
|
"@types/nodemailer": "8.0.0",
|
|
29
|
-
"@webiny/api-core": "6.3.0-beta.
|
|
30
|
-
"@webiny/build-tools": "6.3.0-beta.
|
|
31
|
-
"@webiny/db-dynamodb": "6.3.0-beta.
|
|
32
|
-
"@webiny/handler": "6.3.0-beta.
|
|
33
|
-
"@webiny/handler-aws": "6.3.0-beta.
|
|
34
|
-
"@webiny/handler-db": "6.3.0-beta.
|
|
35
|
-
"@webiny/project-utils": "6.3.0-beta.
|
|
32
|
+
"@webiny/api-core": "6.3.0-beta.3",
|
|
33
|
+
"@webiny/build-tools": "6.3.0-beta.3",
|
|
34
|
+
"@webiny/db-dynamodb": "6.3.0-beta.3",
|
|
35
|
+
"@webiny/handler": "6.3.0-beta.3",
|
|
36
|
+
"@webiny/handler-aws": "6.3.0-beta.3",
|
|
37
|
+
"@webiny/handler-db": "6.3.0-beta.3",
|
|
38
|
+
"@webiny/project-utils": "6.3.0-beta.3",
|
|
36
39
|
"graphql": "16.13.2",
|
|
37
40
|
"jest-dynalite": "3.6.1",
|
|
38
41
|
"rimraf": "6.1.3",
|
|
@@ -43,12 +46,5 @@
|
|
|
43
46
|
"access": "public",
|
|
44
47
|
"directory": "dist"
|
|
45
48
|
},
|
|
46
|
-
"gitHead": "
|
|
47
|
-
"adio": {
|
|
48
|
-
"ignore": {
|
|
49
|
-
"src": [
|
|
50
|
-
"node:crypto"
|
|
51
|
-
]
|
|
52
|
-
}
|
|
53
|
-
}
|
|
49
|
+
"gitHead": "e154ec3326903876c357d35422dc60d29e061419"
|
|
54
50
|
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RFC 5322 mailbox validator. Accepts both addr-spec ("addr@domain") and
|
|
3
|
+
* name-addr ("Display Name <addr@domain>") forms — both are valid SMTP
|
|
4
|
+
* From / Reply-To inputs that nodemailer and most providers accept.
|
|
5
|
+
*/
|
|
6
|
+
export declare const isMailboxAddress: (value: string) => boolean;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import emailAddresses from "email-addresses";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* RFC 5322 mailbox validator. Accepts both addr-spec ("addr@domain") and
|
|
5
|
+
* name-addr ("Display Name <addr@domain>") forms — both are valid SMTP
|
|
6
|
+
* From / Reply-To inputs that nodemailer and most providers accept.
|
|
7
|
+
*/
|
|
8
|
+
export const isMailboxAddress = value => {
|
|
9
|
+
return emailAddresses.parseOneAddress(value) !== null;
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
//# sourceMappingURL=isMailboxAddress.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["emailAddresses","isMailboxAddress","value","parseOneAddress"],"sources":["isMailboxAddress.ts"],"sourcesContent":["import emailAddresses from \"email-addresses\";\n\n/**\n * RFC 5322 mailbox validator. Accepts both addr-spec (\"addr@domain\") and\n * name-addr (\"Display Name <addr@domain>\") forms — both are valid SMTP\n * From / Reply-To inputs that nodemailer and most providers accept.\n */\nexport const isMailboxAddress = (value: string): boolean => {\n return emailAddresses.parseOneAddress(value) !== null;\n};\n"],"mappings":"AAAA,OAAOA,cAAc,MAAM,iBAAiB;;AAE5C;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,gBAAgB,GAAIC,KAAa,IAAc;EACxD,OAAOF,cAAc,CAACG,eAAe,CAACD,KAAK,CAAC,KAAK,IAAI;AACzD,CAAC","ignoreList":[]}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
export interface IEncryption {
|
|
2
|
-
encrypt(value: string): Promise<string>;
|
|
3
|
-
decrypt(value: string): Promise<string>;
|
|
4
|
-
}
|
|
5
|
-
export declare const Encryption: import("@webiny/di").Abstraction<IEncryption>;
|
|
6
|
-
export declare namespace Encryption {
|
|
7
|
-
type Interface = IEncryption;
|
|
8
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["createAbstraction","Encryption"],"sources":["abstractions.ts"],"sourcesContent":["import { createAbstraction } from \"@webiny/feature/api\";\n\nexport interface IEncryption {\n encrypt(value: string): Promise<string>;\n decrypt(value: string): Promise<string>;\n}\n\nexport const Encryption = createAbstraction<IEncryption>(\"Encryption\");\n\nexport namespace Encryption {\n export type Interface = IEncryption;\n}\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,qBAAqB;AAOvD,OAAO,MAAMC,UAAU,GAAGD,iBAAiB,CAAc,YAAY,CAAC","ignoreList":[]}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { Encryption } from "../../domain/Encryption/abstractions.js";
|
|
2
|
-
declare class PasswordEncryptionImpl implements Encryption.Interface {
|
|
3
|
-
encrypt(value: string): Promise<string>;
|
|
4
|
-
decrypt(value: string): Promise<string>;
|
|
5
|
-
}
|
|
6
|
-
export declare const PasswordEncryption: typeof PasswordEncryptionImpl & {
|
|
7
|
-
__abstraction: import("@webiny/di").Abstraction<import("~/domain/Encryption/abstractions.js").IEncryption>;
|
|
8
|
-
};
|
|
9
|
-
export {};
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { Encryption } from "../../domain/Encryption/abstractions.js";
|
|
2
|
-
import { decrypt, encrypt } from "./utils/password.js";
|
|
3
|
-
import { getSecret } from "./utils/secret.js";
|
|
4
|
-
class PasswordEncryptionImpl {
|
|
5
|
-
async encrypt(value) {
|
|
6
|
-
return encrypt({
|
|
7
|
-
value,
|
|
8
|
-
secret: getSecret()
|
|
9
|
-
});
|
|
10
|
-
}
|
|
11
|
-
async decrypt(value) {
|
|
12
|
-
return decrypt({
|
|
13
|
-
value,
|
|
14
|
-
secret: getSecret()
|
|
15
|
-
});
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
export const PasswordEncryption = Encryption.createImplementation({
|
|
19
|
-
implementation: PasswordEncryptionImpl,
|
|
20
|
-
dependencies: []
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
//# sourceMappingURL=PasswordEncryption.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["Encryption","decrypt","encrypt","getSecret","PasswordEncryptionImpl","value","secret","PasswordEncryption","createImplementation","implementation","dependencies"],"sources":["PasswordEncryption.ts"],"sourcesContent":["import { Encryption } from \"~/domain/Encryption/abstractions.js\";\nimport { decrypt, encrypt } from \"./utils/password.js\";\nimport { getSecret } from \"./utils/secret.js\";\n\nclass PasswordEncryptionImpl implements Encryption.Interface {\n public async encrypt(value: string): Promise<string> {\n return encrypt({ value, secret: getSecret() });\n }\n\n public async decrypt(value: string): Promise<string> {\n return decrypt({ value, secret: getSecret() });\n }\n}\n\nexport const PasswordEncryption = Encryption.createImplementation({\n implementation: PasswordEncryptionImpl,\n dependencies: []\n});\n"],"mappings":"AAAA,SAASA,UAAU;AACnB,SAASC,OAAO,EAAEC,OAAO;AACzB,SAASC,SAAS;AAElB,MAAMC,sBAAsB,CAAiC;EACzD,MAAaF,OAAOA,CAACG,KAAa,EAAmB;IACjD,OAAOH,OAAO,CAAC;MAAEG,KAAK;MAAEC,MAAM,EAAEH,SAAS,CAAC;IAAE,CAAC,CAAC;EAClD;EAEA,MAAaF,OAAOA,CAACI,KAAa,EAAmB;IACjD,OAAOJ,OAAO,CAAC;MAAEI,KAAK;MAAEC,MAAM,EAAEH,SAAS,CAAC;IAAE,CAAC,CAAC;EAClD;AACJ;AAEA,OAAO,MAAMI,kBAAkB,GAAGP,UAAU,CAACQ,oBAAoB,CAAC;EAC9DC,cAAc,EAAEL,sBAAsB;EACtCM,YAAY,EAAE;AAClB,CAAC,CAAC","ignoreList":[]}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { createFeature } from "@webiny/feature/api";
|
|
2
|
-
import { PasswordEncryption } from "./PasswordEncryption.js";
|
|
3
|
-
export const EncryptionFeature = createFeature({
|
|
4
|
-
name: "Mailer/Encryption",
|
|
5
|
-
register(container) {
|
|
6
|
-
container.register(PasswordEncryption).inSingletonScope();
|
|
7
|
-
}
|
|
8
|
-
});
|
|
9
|
-
|
|
10
|
-
//# sourceMappingURL=feature.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["createFeature","PasswordEncryption","EncryptionFeature","name","register","container","inSingletonScope"],"sources":["feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { PasswordEncryption } from \"./PasswordEncryption.js\";\n\nexport const EncryptionFeature = createFeature({\n name: \"Mailer/Encryption\",\n register(container) {\n container.register(PasswordEncryption).inSingletonScope();\n }\n});\n"],"mappings":"AAAA,SAASA,aAAa,QAAQ,qBAAqB;AACnD,SAASC,kBAAkB;AAE3B,OAAO,MAAMC,iBAAiB,GAAGF,aAAa,CAAC;EAC3CG,IAAI,EAAE,mBAAmB;EACzBC,QAAQA,CAACC,SAAS,EAAE;IAChBA,SAAS,CAACD,QAAQ,CAACH,kBAAkB,CAAC,CAACK,gBAAgB,CAAC,CAAC;EAC7D;AACJ,CAAC,CAAC","ignoreList":[]}
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import crypto from "node:crypto";
|
|
2
|
-
import WebinyError from "@webiny/error";
|
|
3
|
-
const ALGORITHM = "aes-256-gcm";
|
|
4
|
-
const IV_LENGTH = 12;
|
|
5
|
-
const KEY_LENGTH = 32;
|
|
6
|
-
export const decrypt = params => {
|
|
7
|
-
const {
|
|
8
|
-
value,
|
|
9
|
-
secret
|
|
10
|
-
} = params;
|
|
11
|
-
if (!secret) {
|
|
12
|
-
throw new WebinyError(`Cannot call decrypt without passing the secret.`);
|
|
13
|
-
}
|
|
14
|
-
if (!value) {
|
|
15
|
-
return "";
|
|
16
|
-
}
|
|
17
|
-
try {
|
|
18
|
-
const data = Buffer.from(value, "base64");
|
|
19
|
-
const iv = data.subarray(0, 12);
|
|
20
|
-
const authTag = data.subarray(12, 28);
|
|
21
|
-
const encrypted = data.subarray(28);
|
|
22
|
-
const key = crypto.scryptSync(secret, "salt", 32);
|
|
23
|
-
const decipher = crypto.createDecipheriv(ALGORITHM, key, iv);
|
|
24
|
-
decipher.setAuthTag(authTag);
|
|
25
|
-
const decrypted = Buffer.concat([decipher.update(encrypted), decipher.final()]);
|
|
26
|
-
return decrypted.toString("utf8");
|
|
27
|
-
} catch {
|
|
28
|
-
console.log(`Could not decrypt given encrypted password.`);
|
|
29
|
-
}
|
|
30
|
-
return "";
|
|
31
|
-
};
|
|
32
|
-
export const encrypt = params => {
|
|
33
|
-
const {
|
|
34
|
-
value,
|
|
35
|
-
secret
|
|
36
|
-
} = params;
|
|
37
|
-
if (!secret) {
|
|
38
|
-
throw new WebinyError(`Cannot call decrypt without passing the secret.`);
|
|
39
|
-
}
|
|
40
|
-
if (!value) {
|
|
41
|
-
return "";
|
|
42
|
-
}
|
|
43
|
-
try {
|
|
44
|
-
const key = crypto.scryptSync(secret, "salt", KEY_LENGTH);
|
|
45
|
-
const iv = crypto.randomBytes(IV_LENGTH);
|
|
46
|
-
const cipher = crypto.createCipheriv(ALGORITHM, key, iv);
|
|
47
|
-
const encrypted = Buffer.concat([cipher.update(value, "utf8"), cipher.final()]);
|
|
48
|
-
const authTag = cipher.getAuthTag();
|
|
49
|
-
return Buffer.concat([iv, authTag, encrypted]).toString("base64");
|
|
50
|
-
} catch {
|
|
51
|
-
console.log(`Could not encrypt given password.`);
|
|
52
|
-
}
|
|
53
|
-
return "";
|
|
54
|
-
};
|
|
55
|
-
|
|
56
|
-
//# sourceMappingURL=password.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["crypto","WebinyError","ALGORITHM","IV_LENGTH","KEY_LENGTH","decrypt","params","value","secret","data","Buffer","from","iv","subarray","authTag","encrypted","key","scryptSync","decipher","createDecipheriv","setAuthTag","decrypted","concat","update","final","toString","console","log","encrypt","randomBytes","cipher","createCipheriv","getAuthTag"],"sources":["password.ts"],"sourcesContent":["import crypto from \"node:crypto\";\nimport WebinyError from \"@webiny/error\";\n\nconst ALGORITHM = \"aes-256-gcm\";\nconst IV_LENGTH = 12;\nconst KEY_LENGTH = 32;\n\ninterface Params {\n value?: string | null;\n secret?: string | null;\n}\n\nexport const decrypt = (params: Params): string => {\n const { value, secret } = params;\n if (!secret) {\n throw new WebinyError(`Cannot call decrypt without passing the secret.`);\n }\n if (!value) {\n return \"\";\n }\n try {\n const data = Buffer.from(value, \"base64\");\n\n const iv = data.subarray(0, 12);\n const authTag = data.subarray(12, 28);\n const encrypted = data.subarray(28);\n\n const key = crypto.scryptSync(secret, \"salt\", 32);\n\n const decipher = crypto.createDecipheriv(ALGORITHM, key, iv);\n decipher.setAuthTag(authTag);\n\n const decrypted = Buffer.concat([decipher.update(encrypted), decipher.final()]);\n\n return decrypted.toString(\"utf8\");\n } catch {\n console.log(`Could not decrypt given encrypted password.`);\n }\n return \"\";\n};\n\nexport const encrypt = (params: Params): string => {\n const { value, secret } = params;\n if (!secret) {\n throw new WebinyError(`Cannot call decrypt without passing the secret.`);\n }\n if (!value) {\n return \"\";\n }\n\n try {\n const key = crypto.scryptSync(secret, \"salt\", KEY_LENGTH);\n const iv = crypto.randomBytes(IV_LENGTH);\n const cipher = crypto.createCipheriv(ALGORITHM, key, iv);\n const encrypted = Buffer.concat([cipher.update(value, \"utf8\"), cipher.final()]);\n const authTag = cipher.getAuthTag();\n return Buffer.concat([iv, authTag, encrypted]).toString(\"base64\");\n } catch {\n console.log(`Could not encrypt given password.`);\n }\n return \"\";\n};\n"],"mappings":"AAAA,OAAOA,MAAM,MAAM,aAAa;AAChC,OAAOC,WAAW,MAAM,eAAe;AAEvC,MAAMC,SAAS,GAAG,aAAa;AAC/B,MAAMC,SAAS,GAAG,EAAE;AACpB,MAAMC,UAAU,GAAG,EAAE;AAOrB,OAAO,MAAMC,OAAO,GAAIC,MAAc,IAAa;EAC/C,MAAM;IAAEC,KAAK;IAAEC;EAAO,CAAC,GAAGF,MAAM;EAChC,IAAI,CAACE,MAAM,EAAE;IACT,MAAM,IAAIP,WAAW,CAAC,iDAAiD,CAAC;EAC5E;EACA,IAAI,CAACM,KAAK,EAAE;IACR,OAAO,EAAE;EACb;EACA,IAAI;IACA,MAAME,IAAI,GAAGC,MAAM,CAACC,IAAI,CAACJ,KAAK,EAAE,QAAQ,CAAC;IAEzC,MAAMK,EAAE,GAAGH,IAAI,CAACI,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC;IAC/B,MAAMC,OAAO,GAAGL,IAAI,CAACI,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC;IACrC,MAAME,SAAS,GAAGN,IAAI,CAACI,QAAQ,CAAC,EAAE,CAAC;IAEnC,MAAMG,GAAG,GAAGhB,MAAM,CAACiB,UAAU,CAACT,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC;IAEjD,MAAMU,QAAQ,GAAGlB,MAAM,CAACmB,gBAAgB,CAACjB,SAAS,EAAEc,GAAG,EAAEJ,EAAE,CAAC;IAC5DM,QAAQ,CAACE,UAAU,CAACN,OAAO,CAAC;IAE5B,MAAMO,SAAS,GAAGX,MAAM,CAACY,MAAM,CAAC,CAACJ,QAAQ,CAACK,MAAM,CAACR,SAAS,CAAC,EAAEG,QAAQ,CAACM,KAAK,CAAC,CAAC,CAAC,CAAC;IAE/E,OAAOH,SAAS,CAACI,QAAQ,CAAC,MAAM,CAAC;EACrC,CAAC,CAAC,MAAM;IACJC,OAAO,CAACC,GAAG,CAAC,6CAA6C,CAAC;EAC9D;EACA,OAAO,EAAE;AACb,CAAC;AAED,OAAO,MAAMC,OAAO,GAAItB,MAAc,IAAa;EAC/C,MAAM;IAAEC,KAAK;IAAEC;EAAO,CAAC,GAAGF,MAAM;EAChC,IAAI,CAACE,MAAM,EAAE;IACT,MAAM,IAAIP,WAAW,CAAC,iDAAiD,CAAC;EAC5E;EACA,IAAI,CAACM,KAAK,EAAE;IACR,OAAO,EAAE;EACb;EAEA,IAAI;IACA,MAAMS,GAAG,GAAGhB,MAAM,CAACiB,UAAU,CAACT,MAAM,EAAE,MAAM,EAAEJ,UAAU,CAAC;IACzD,MAAMQ,EAAE,GAAGZ,MAAM,CAAC6B,WAAW,CAAC1B,SAAS,CAAC;IACxC,MAAM2B,MAAM,GAAG9B,MAAM,CAAC+B,cAAc,CAAC7B,SAAS,EAAEc,GAAG,EAAEJ,EAAE,CAAC;IACxD,MAAMG,SAAS,GAAGL,MAAM,CAACY,MAAM,CAAC,CAACQ,MAAM,CAACP,MAAM,CAAChB,KAAK,EAAE,MAAM,CAAC,EAAEuB,MAAM,CAACN,KAAK,CAAC,CAAC,CAAC,CAAC;IAC/E,MAAMV,OAAO,GAAGgB,MAAM,CAACE,UAAU,CAAC,CAAC;IACnC,OAAOtB,MAAM,CAACY,MAAM,CAAC,CAACV,EAAE,EAAEE,OAAO,EAAEC,SAAS,CAAC,CAAC,CAACU,QAAQ,CAAC,QAAQ,CAAC;EACrE,CAAC,CAAC,MAAM;IACJC,OAAO,CAACC,GAAG,CAAC,mCAAmC,CAAC;EACpD;EACA,OAAO,EAAE;AACb,CAAC","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const getSecret: () => string;
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import WebinyError from "@webiny/error";
|
|
2
|
-
export const getSecret = () => {
|
|
3
|
-
const envValue = process.env.WEBINY_API_MAILER_PASSWORD_SECRET;
|
|
4
|
-
const value = String(envValue).trim();
|
|
5
|
-
if (!envValue || !value) {
|
|
6
|
-
throw new WebinyError(`There must be a password secret defined!`, "PASSWORD_SECRET_ERROR");
|
|
7
|
-
}
|
|
8
|
-
return value;
|
|
9
|
-
};
|
|
10
|
-
|
|
11
|
-
//# sourceMappingURL=secret.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["WebinyError","getSecret","envValue","process","env","WEBINY_API_MAILER_PASSWORD_SECRET","value","String","trim"],"sources":["secret.ts"],"sourcesContent":["import WebinyError from \"@webiny/error\";\n\nexport const getSecret = (): string => {\n const envValue = process.env.WEBINY_API_MAILER_PASSWORD_SECRET;\n\n const value = String(envValue).trim();\n if (!envValue || !value) {\n throw new WebinyError(`There must be a password secret defined!`, \"PASSWORD_SECRET_ERROR\");\n }\n return value;\n};\n"],"mappings":"AAAA,OAAOA,WAAW,MAAM,eAAe;AAEvC,OAAO,MAAMC,SAAS,GAAGA,CAAA,KAAc;EACnC,MAAMC,QAAQ,GAAGC,OAAO,CAACC,GAAG,CAACC,iCAAiC;EAE9D,MAAMC,KAAK,GAAGC,MAAM,CAACL,QAAQ,CAAC,CAACM,IAAI,CAAC,CAAC;EACrC,IAAI,CAACN,QAAQ,IAAI,CAACI,KAAK,EAAE;IACrB,MAAM,IAAIN,WAAW,CAAC,0CAA0C,EAAE,uBAAuB,CAAC;EAC9F;EACA,OAAOM,KAAK;AAChB,CAAC","ignoreList":[]}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
const getPort = value => {
|
|
2
|
-
const port = Number(value);
|
|
3
|
-
if (!!value && isNaN(port) === false) {
|
|
4
|
-
return port;
|
|
5
|
-
}
|
|
6
|
-
return 25;
|
|
7
|
-
};
|
|
8
|
-
export const getDefaultSettingsFromEnv = () => {
|
|
9
|
-
const input = {
|
|
10
|
-
host: process.env.WEBINY_API_MAILER_HOST,
|
|
11
|
-
port: getPort(process.env.WEBINY_API_MAILER_PORT),
|
|
12
|
-
user: process.env.WEBINY_API_MAILER_USER,
|
|
13
|
-
password: process.env.WEBINY_API_MAILER_PASSWORD,
|
|
14
|
-
replyTo: process.env.WEBINY_API_MAILER_REPLY_TO,
|
|
15
|
-
from: process.env.WEBINY_API_MAILER_FROM
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
// No need to do the validation if there is not at least one variable defined
|
|
19
|
-
const hasAtLeastOneValue = Object.values(input).some(value => !!String(value).trim());
|
|
20
|
-
if (!hasAtLeastOneValue) {
|
|
21
|
-
return null;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
// Basic validation - require essential fields
|
|
25
|
-
if (!input.host || !input.user || !input.from) {
|
|
26
|
-
return null;
|
|
27
|
-
}
|
|
28
|
-
return input;
|
|
29
|
-
};
|
|
30
|
-
|
|
31
|
-
//# sourceMappingURL=TransportFactory.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["getPort","value","port","Number","isNaN","getDefaultSettingsFromEnv","input","host","process","env","WEBINY_API_MAILER_HOST","WEBINY_API_MAILER_PORT","user","WEBINY_API_MAILER_USER","password","WEBINY_API_MAILER_PASSWORD","replyTo","WEBINY_API_MAILER_REPLY_TO","from","WEBINY_API_MAILER_FROM","hasAtLeastOneValue","Object","values","some","String","trim"],"sources":["TransportFactory.ts"],"sourcesContent":["import type { TransportSettings } from \"~/types.js\";\n\nconst getPort = (value: any): number => {\n const port = Number(value);\n if (!!value && isNaN(port) === false) {\n return port;\n }\n return 25;\n};\n\nexport const getDefaultSettingsFromEnv = (): TransportSettings | null => {\n const input: Partial<TransportSettings> = {\n host: process.env.WEBINY_API_MAILER_HOST,\n port: getPort(process.env.WEBINY_API_MAILER_PORT),\n user: process.env.WEBINY_API_MAILER_USER,\n password: process.env.WEBINY_API_MAILER_PASSWORD,\n replyTo: process.env.WEBINY_API_MAILER_REPLY_TO,\n from: process.env.WEBINY_API_MAILER_FROM\n };\n\n // No need to do the validation if there is not at least one variable defined\n const hasAtLeastOneValue = Object.values(input).some(value => !!String(value).trim());\n if (!hasAtLeastOneValue) {\n return null;\n }\n\n // Basic validation - require essential fields\n if (!input.host || !input.user || !input.from) {\n return null;\n }\n\n return input as TransportSettings;\n};\n"],"mappings":"AAEA,MAAMA,OAAO,GAAIC,KAAU,IAAa;EACpC,MAAMC,IAAI,GAAGC,MAAM,CAACF,KAAK,CAAC;EAC1B,IAAI,CAAC,CAACA,KAAK,IAAIG,KAAK,CAACF,IAAI,CAAC,KAAK,KAAK,EAAE;IAClC,OAAOA,IAAI;EACf;EACA,OAAO,EAAE;AACb,CAAC;AAED,OAAO,MAAMG,yBAAyB,GAAGA,CAAA,KAAgC;EACrE,MAAMC,KAAiC,GAAG;IACtCC,IAAI,EAAEC,OAAO,CAACC,GAAG,CAACC,sBAAsB;IACxCR,IAAI,EAAEF,OAAO,CAACQ,OAAO,CAACC,GAAG,CAACE,sBAAsB,CAAC;IACjDC,IAAI,EAAEJ,OAAO,CAACC,GAAG,CAACI,sBAAsB;IACxCC,QAAQ,EAAEN,OAAO,CAACC,GAAG,CAACM,0BAA0B;IAChDC,OAAO,EAAER,OAAO,CAACC,GAAG,CAACQ,0BAA0B;IAC/CC,IAAI,EAAEV,OAAO,CAACC,GAAG,CAACU;EACtB,CAAC;;EAED;EACA,MAAMC,kBAAkB,GAAGC,MAAM,CAACC,MAAM,CAAChB,KAAK,CAAC,CAACiB,IAAI,CAACtB,KAAK,IAAI,CAAC,CAACuB,MAAM,CAACvB,KAAK,CAAC,CAACwB,IAAI,CAAC,CAAC,CAAC;EACrF,IAAI,CAACL,kBAAkB,EAAE;IACrB,OAAO,IAAI;EACf;;EAEA;EACA,IAAI,CAACd,KAAK,CAACC,IAAI,IAAI,CAACD,KAAK,CAACM,IAAI,IAAI,CAACN,KAAK,CAACY,IAAI,EAAE;IAC3C,OAAO,IAAI;EACf;EAEA,OAAOZ,KAAK;AAChB,CAAC","ignoreList":[]}
|