@ikonintegration/ikapi 5.0.6 → 5.0.7-alpha.0
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/package.json +2 -2
- package/src/Mailer/Mailer.ts +52 -39
- package/dist/index.d.ts +0 -17
- package/dist/index.js +0 -28
- package/dist/index.js.map +0 -1
- package/dist/package-lock.json +0 -11907
- package/dist/package.json +0 -82
- package/dist/src/API/Request.d.ts +0 -125
- package/dist/src/API/Request.js +0 -185
- package/dist/src/API/Request.js.map +0 -1
- package/dist/src/API/Response.d.ts +0 -188
- package/dist/src/API/Response.js +0 -270
- package/dist/src/API/Response.js.map +0 -1
- package/dist/src/BaseEvent/DynamoTransaction.d.ts +0 -70
- package/dist/src/BaseEvent/DynamoTransaction.js +0 -104
- package/dist/src/BaseEvent/DynamoTransaction.js.map +0 -1
- package/dist/src/BaseEvent/EventProcessor.d.ts +0 -58
- package/dist/src/BaseEvent/EventProcessor.js +0 -101
- package/dist/src/BaseEvent/EventProcessor.js.map +0 -1
- package/dist/src/BaseEvent/Launchable/ContainerExec.d.ts +0 -42
- package/dist/src/BaseEvent/Launchable/ContainerExec.js +0 -104
- package/dist/src/BaseEvent/Launchable/ContainerExec.js.map +0 -1
- package/dist/src/BaseEvent/Launchable/index.d.ts +0 -34
- package/dist/src/BaseEvent/Launchable/index.js +0 -43
- package/dist/src/BaseEvent/Launchable/index.js.map +0 -1
- package/dist/src/BaseEvent/Launchable/types.d.ts +0 -10
- package/dist/src/BaseEvent/Launchable/types.js +0 -2
- package/dist/src/BaseEvent/Launchable/types.js.map +0 -1
- package/dist/src/BaseEvent/Process.d.ts +0 -50
- package/dist/src/BaseEvent/Process.js +0 -64
- package/dist/src/BaseEvent/Process.js.map +0 -1
- package/dist/src/BaseEvent/StepTransaction.d.ts +0 -23
- package/dist/src/BaseEvent/StepTransaction.js +0 -27
- package/dist/src/BaseEvent/StepTransaction.js.map +0 -1
- package/dist/src/BaseEvent/Transaction.d.ts +0 -149
- package/dist/src/BaseEvent/Transaction.js +0 -224
- package/dist/src/BaseEvent/Transaction.js.map +0 -1
- package/dist/src/Cache/Redis.d.ts +0 -29
- package/dist/src/Cache/Redis.js +0 -80
- package/dist/src/Cache/Redis.js.map +0 -1
- package/dist/src/Cache/types.d.ts +0 -31
- package/dist/src/Cache/types.js +0 -2
- package/dist/src/Cache/types.js.map +0 -1
- package/dist/src/Config/Configuration.d.ts +0 -123
- package/dist/src/Config/Configuration.js +0 -109
- package/dist/src/Config/Configuration.js.map +0 -1
- package/dist/src/Config/EnvironmentVar.d.ts +0 -74
- package/dist/src/Config/EnvironmentVar.js +0 -138
- package/dist/src/Config/EnvironmentVar.js.map +0 -1
- package/dist/src/Crypto/Crypto.d.ts +0 -45
- package/dist/src/Crypto/Crypto.js +0 -72
- package/dist/src/Crypto/Crypto.js.map +0 -1
- package/dist/src/Database/Database.d.ts +0 -21
- package/dist/src/Database/Database.js +0 -15
- package/dist/src/Database/Database.js.map +0 -1
- package/dist/src/Database/DatabaseManager.d.ts +0 -47
- package/dist/src/Database/DatabaseManager.js +0 -60
- package/dist/src/Database/DatabaseManager.js.map +0 -1
- package/dist/src/Database/DatabaseTransaction.d.ts +0 -101
- package/dist/src/Database/DatabaseTransaction.js +0 -126
- package/dist/src/Database/DatabaseTransaction.js.map +0 -1
- package/dist/src/Database/index.d.ts +0 -10
- package/dist/src/Database/index.js +0 -15
- package/dist/src/Database/index.js.map +0 -1
- package/dist/src/Database/integrations/dynamo/DynamoDatabase.d.ts +0 -35
- package/dist/src/Database/integrations/dynamo/DynamoDatabase.js +0 -59
- package/dist/src/Database/integrations/dynamo/DynamoDatabase.js.map +0 -1
- package/dist/src/Database/integrations/kysely/KyselyDatabase.d.ts +0 -66
- package/dist/src/Database/integrations/kysely/KyselyDatabase.js +0 -86
- package/dist/src/Database/integrations/kysely/KyselyDatabase.js.map +0 -1
- package/dist/src/Database/integrations/kysely/KyselyTransaction.d.ts +0 -70
- package/dist/src/Database/integrations/kysely/KyselyTransaction.js +0 -118
- package/dist/src/Database/integrations/kysely/KyselyTransaction.js.map +0 -1
- package/dist/src/Database/integrations/pgsql/PostgresDatabase.d.ts +0 -36
- package/dist/src/Database/integrations/pgsql/PostgresDatabase.js +0 -54
- package/dist/src/Database/integrations/pgsql/PostgresDatabase.js.map +0 -1
- package/dist/src/Database/integrations/pgsql/PostgresTransaction.d.ts +0 -63
- package/dist/src/Database/integrations/pgsql/PostgresTransaction.js +0 -61
- package/dist/src/Database/integrations/pgsql/PostgresTransaction.js.map +0 -1
- package/dist/src/Database/types.d.ts +0 -76
- package/dist/src/Database/types.js +0 -2
- package/dist/src/Database/types.js.map +0 -1
- package/dist/src/Globals.d.ts +0 -93
- package/dist/src/Globals.js +0 -99
- package/dist/src/Globals.js.map +0 -1
- package/dist/src/Logger/Logger.d.ts +0 -161
- package/dist/src/Logger/Logger.js +0 -299
- package/dist/src/Logger/Logger.js.map +0 -1
- package/dist/src/Mailer/Mailer.d.ts +0 -79
- package/dist/src/Mailer/Mailer.js +0 -183
- package/dist/src/Mailer/Mailer.js.map +0 -1
- package/dist/src/Publisher/Publisher.d.ts +0 -39
- package/dist/src/Publisher/Publisher.js +0 -77
- package/dist/src/Publisher/Publisher.js.map +0 -1
- package/dist/src/Server/RouteResolver.d.ts +0 -33
- package/dist/src/Server/RouteResolver.js +0 -100
- package/dist/src/Server/RouteResolver.js.map +0 -1
- package/dist/src/Server/Router.d.ts +0 -157
- package/dist/src/Server/Router.js +0 -32
- package/dist/src/Server/Router.js.map +0 -1
- package/dist/src/Server/lib/ContainerServer.d.ts +0 -42
- package/dist/src/Server/lib/ContainerServer.js +0 -66
- package/dist/src/Server/lib/ContainerServer.js.map +0 -1
- package/dist/src/Server/lib/Server.d.ts +0 -45
- package/dist/src/Server/lib/Server.js +0 -93
- package/dist/src/Server/lib/Server.js.map +0 -1
- package/dist/src/Server/lib/container/GenericHandler.d.ts +0 -9
- package/dist/src/Server/lib/container/GenericHandler.js +0 -82
- package/dist/src/Server/lib/container/GenericHandler.js.map +0 -1
- package/dist/src/Server/lib/container/GenericHandlerEvent.d.ts +0 -52
- package/dist/src/Server/lib/container/GenericHandlerEvent.js +0 -132
- package/dist/src/Server/lib/container/GenericHandlerEvent.js.map +0 -1
- package/dist/src/Server/lib/container/HealthHandler.d.ts +0 -9
- package/dist/src/Server/lib/container/HealthHandler.js +0 -19
- package/dist/src/Server/lib/container/HealthHandler.js.map +0 -1
- package/dist/src/Server/lib/container/Proxy.d.ts +0 -67
- package/dist/src/Server/lib/container/Proxy.js +0 -143
- package/dist/src/Server/lib/container/Proxy.js.map +0 -1
- package/dist/src/Server/lib/container/Utils.d.ts +0 -14
- package/dist/src/Server/lib/container/Utils.js +0 -37
- package/dist/src/Server/lib/container/Utils.js.map +0 -1
- package/dist/src/Util/AsyncSingleton.d.ts +0 -31
- package/dist/src/Util/AsyncSingleton.js +0 -83
- package/dist/src/Util/AsyncSingleton.js.map +0 -1
- package/dist/src/Util/Utils.d.ts +0 -61
- package/dist/src/Util/Utils.js +0 -147
- package/dist/src/Util/Utils.js.map +0 -1
- package/dist/src/Validation/Validator.d.ts +0 -17
- package/dist/src/Validation/Validator.js +0 -39
- package/dist/src/Validation/Validator.js.map +0 -1
- package/dist/tsconfig.tsbuildinfo +0 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ikonintegration/ikapi",
|
|
3
|
-
"version": "5.0.
|
|
3
|
+
"version": "5.0.7-alpha.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
"kysely": "^0.27.2",
|
|
42
42
|
"node-cache": "^5.1.2",
|
|
43
43
|
"object-hash": "^3.0.0",
|
|
44
|
-
"parse-duration": "^
|
|
44
|
+
"parse-duration": "^2.1.3",
|
|
45
45
|
"path-to-regexp": "^8.1.0",
|
|
46
46
|
"pg": "^8.11.3",
|
|
47
47
|
"redis": "^4.7.0",
|
package/src/Mailer/Mailer.ts
CHANGED
|
@@ -1,26 +1,28 @@
|
|
|
1
1
|
/* eslint-disable prettier/prettier */
|
|
2
|
-
import * as SES from
|
|
3
|
-
import { defaultProvider } from
|
|
4
|
-
import Email from
|
|
5
|
-
import nodemailer from
|
|
6
|
-
import type SESTransport from
|
|
2
|
+
import * as SES from '@aws-sdk/client-ses'
|
|
3
|
+
import { defaultProvider } from '@aws-sdk/credential-provider-node'
|
|
4
|
+
import Email from 'email-templates'
|
|
5
|
+
import nodemailer from 'nodemailer'
|
|
6
|
+
import type SESTransport from 'nodemailer/lib/ses-transport'
|
|
7
7
|
|
|
8
8
|
export default class Mailer {
|
|
9
9
|
/**
|
|
10
10
|
* The starting point of a range.
|
|
11
11
|
* @type {string}
|
|
12
12
|
*/
|
|
13
|
-
private readonly from: string
|
|
13
|
+
private readonly from: string
|
|
14
14
|
/**
|
|
15
15
|
* The default file template for the application.
|
|
16
16
|
* @type {string}
|
|
17
17
|
*/
|
|
18
|
-
private readonly templateDefaultFile: string =
|
|
18
|
+
private readonly templateDefaultFile: string = 'html'
|
|
19
19
|
/**
|
|
20
20
|
* The transporter object used for sending emails using the AWS SES service.
|
|
21
21
|
* @type {ReturnType<typeof nodemailer.createTransport<SESTransport.SentMessageInfo>>}
|
|
22
22
|
*/
|
|
23
|
-
private readonly transporter: ReturnType<
|
|
23
|
+
private readonly transporter: ReturnType<
|
|
24
|
+
typeof nodemailer.createTransport<SESTransport.SentMessageInfo>
|
|
25
|
+
>
|
|
24
26
|
|
|
25
27
|
/**
|
|
26
28
|
* Constructs a new instance of the EmailSender class.
|
|
@@ -29,17 +31,17 @@ export default class Mailer {
|
|
|
29
31
|
* @returns None
|
|
30
32
|
*/
|
|
31
33
|
constructor(defaultFrom: string, region: string) {
|
|
32
|
-
this.from = defaultFrom
|
|
34
|
+
this.from = defaultFrom
|
|
33
35
|
this.transporter = nodemailer.createTransport({
|
|
34
36
|
SES: {
|
|
35
37
|
ses: new SES.SESClient({
|
|
36
38
|
credentials: defaultProvider(),
|
|
37
|
-
apiVersion:
|
|
39
|
+
apiVersion: '2010-12-01',
|
|
38
40
|
region,
|
|
39
41
|
}),
|
|
40
42
|
aws: SES,
|
|
41
43
|
},
|
|
42
|
-
})
|
|
44
|
+
})
|
|
43
45
|
}
|
|
44
46
|
|
|
45
47
|
/**
|
|
@@ -76,17 +78,17 @@ export default class Mailer {
|
|
|
76
78
|
},
|
|
77
79
|
transport: optionalTransport || this.transporter,
|
|
78
80
|
send: true,
|
|
79
|
-
})
|
|
81
|
+
})
|
|
80
82
|
//
|
|
81
|
-
let resp = null
|
|
83
|
+
let resp = null
|
|
82
84
|
try {
|
|
83
|
-
resp = await email.send()
|
|
84
|
-
console.debug(
|
|
85
|
+
resp = await email.send()
|
|
86
|
+
console.debug('Mailer resp:', resp)
|
|
85
87
|
} catch (e) {
|
|
86
|
-
console.error(
|
|
87
|
-
throw e
|
|
88
|
+
console.error('Mailer error:', e)
|
|
89
|
+
throw e
|
|
88
90
|
}
|
|
89
|
-
return resp
|
|
91
|
+
return resp
|
|
90
92
|
}
|
|
91
93
|
|
|
92
94
|
/**
|
|
@@ -124,18 +126,18 @@ export default class Mailer {
|
|
|
124
126
|
},
|
|
125
127
|
transport: optionalTransport || this.transporter,
|
|
126
128
|
send: true,
|
|
127
|
-
})
|
|
129
|
+
})
|
|
128
130
|
//
|
|
129
|
-
let resp = null
|
|
131
|
+
let resp = null
|
|
130
132
|
try {
|
|
131
|
-
const chosenTemplate = await this.chooseTemplate(templates, data)
|
|
132
|
-
resp = await email.send({ template: chosenTemplate, locals: data })
|
|
133
|
-
console.debug(
|
|
133
|
+
const chosenTemplate = await this.chooseTemplate(templates, data)
|
|
134
|
+
resp = await email.send({ template: chosenTemplate, locals: data })
|
|
135
|
+
console.debug('Mailer resp:', resp)
|
|
134
136
|
} catch (e) {
|
|
135
|
-
console.error(
|
|
136
|
-
throw e
|
|
137
|
+
console.error('Mailer error:', e)
|
|
138
|
+
throw e
|
|
137
139
|
}
|
|
138
|
-
return resp
|
|
140
|
+
return resp
|
|
139
141
|
}
|
|
140
142
|
|
|
141
143
|
/**
|
|
@@ -146,7 +148,12 @@ export default class Mailer {
|
|
|
146
148
|
* @param {string} password - The password for authentication with the SMTP server.
|
|
147
149
|
* @returns {Email.NodeMailerTransportOptions} - The SMTP transporter object.
|
|
148
150
|
*/
|
|
149
|
-
public newSMTPTransporter(
|
|
151
|
+
public newSMTPTransporter(
|
|
152
|
+
host: string,
|
|
153
|
+
portNumber: number,
|
|
154
|
+
user: string,
|
|
155
|
+
password: string
|
|
156
|
+
): Email.NodeMailerTransportOptions {
|
|
150
157
|
const smtpTransporter = nodemailer.createTransport({
|
|
151
158
|
host: host,
|
|
152
159
|
port: portNumber,
|
|
@@ -155,8 +162,8 @@ export default class Mailer {
|
|
|
155
162
|
user: user,
|
|
156
163
|
pass: password,
|
|
157
164
|
},
|
|
158
|
-
})
|
|
159
|
-
return smtpTransporter
|
|
165
|
+
})
|
|
166
|
+
return smtpTransporter
|
|
160
167
|
}
|
|
161
168
|
|
|
162
169
|
/**
|
|
@@ -170,12 +177,15 @@ export default class Mailer {
|
|
|
170
177
|
if (Array.isArray(templates)) {
|
|
171
178
|
//For each template check if can render it
|
|
172
179
|
for (const template of templates) {
|
|
173
|
-
if (await this.canRenderTemplate(template, data)) return template
|
|
180
|
+
if (await this.canRenderTemplate(template, data)) return template
|
|
174
181
|
}
|
|
175
182
|
} else if (templates) {
|
|
176
|
-
if (await this.canRenderTemplate(templates, data)) return templates
|
|
183
|
+
if (await this.canRenderTemplate(templates, data)) return templates
|
|
177
184
|
}
|
|
178
|
-
throw new Error(
|
|
185
|
+
throw new Error(
|
|
186
|
+
`Could not render email with template ${templates} and following data. Please, check logs above! ` +
|
|
187
|
+
JSON.stringify(data, null, 2)
|
|
188
|
+
)
|
|
179
189
|
}
|
|
180
190
|
|
|
181
191
|
/**
|
|
@@ -185,8 +195,11 @@ export default class Mailer {
|
|
|
185
195
|
* @returns {Promise<boolean>} - A promise that resolves to true if the template can be rendered, false otherwise.
|
|
186
196
|
*/
|
|
187
197
|
private async canRenderTemplate(template: string, data: object): Promise<boolean> {
|
|
188
|
-
const validRenderResp = await Mailer.renderTemplate(
|
|
189
|
-
|
|
198
|
+
const validRenderResp = await Mailer.renderTemplate(
|
|
199
|
+
`${template}/${this.templateDefaultFile}`,
|
|
200
|
+
data
|
|
201
|
+
)
|
|
202
|
+
return validRenderResp != null
|
|
190
203
|
}
|
|
191
204
|
|
|
192
205
|
/**
|
|
@@ -196,13 +209,13 @@ export default class Mailer {
|
|
|
196
209
|
* @returns {Promise<boolean>} - A promise that resolves to true if the template was rendered successfully, false otherwise.
|
|
197
210
|
*/
|
|
198
211
|
public static async renderTemplate(template: string, data: object): Promise<any> {
|
|
199
|
-
let validRenderResp: string | null = null
|
|
212
|
+
let validRenderResp: string | null = null
|
|
200
213
|
try {
|
|
201
|
-
const email = new Email()
|
|
202
|
-
validRenderResp = await email.render(`${template}`, data)
|
|
214
|
+
const email = new Email()
|
|
215
|
+
validRenderResp = await email.render(`${template}`, data)
|
|
203
216
|
} catch (e) {
|
|
204
|
-
console.log(`Error while checking renderability of email template ${template}`, e)
|
|
217
|
+
console.log(`Error while checking renderability of email template ${template}`, e)
|
|
205
218
|
}
|
|
206
|
-
return validRenderResp
|
|
219
|
+
return validRenderResp
|
|
207
220
|
}
|
|
208
221
|
}
|
package/dist/index.d.ts
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { HttpMethod } from './src/API/Request.js';
|
|
2
|
-
import Response, { ResponseErrorType } from './src/API/Response.js';
|
|
3
|
-
import DynamoTransaction from './src/BaseEvent/DynamoTransaction.js';
|
|
4
|
-
import EventProcessor from './src/BaseEvent/EventProcessor.js';
|
|
5
|
-
import Launchable from './src/BaseEvent/Launchable/index.js';
|
|
6
|
-
import Process from './src/BaseEvent/Process.js';
|
|
7
|
-
import StepTransaction from './src/BaseEvent/StepTransaction.js';
|
|
8
|
-
import Transaction, { TransactionConfig } from './src/BaseEvent/Transaction.js';
|
|
9
|
-
import Redis from './src/Cache/Redis.js';
|
|
10
|
-
import Configuration from './src/Config/Configuration.js';
|
|
11
|
-
import Crypto from './src/Crypto/Crypto.js';
|
|
12
|
-
import * as Database from './src/Database/index.js';
|
|
13
|
-
import Mailer from './src/Mailer/Mailer.js';
|
|
14
|
-
import Router, { Route } from './src/Server/Router.js';
|
|
15
|
-
import AsyncSingleton from './src/Util/AsyncSingleton.js';
|
|
16
|
-
import Utils from './src/Util/Utils.js';
|
|
17
|
-
export { Transaction, Process, EventProcessor, DynamoTransaction, StepTransaction, Launchable, Router, Route, HttpMethod, Mailer, Crypto, Configuration, Redis, Database, Response, ResponseErrorType, Utils, AsyncSingleton, TransactionConfig, };
|
package/dist/index.js
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { HttpMethod } from './src/API/Request.js';
|
|
2
|
-
import Response from './src/API/Response.js';
|
|
3
|
-
import DynamoTransaction from './src/BaseEvent/DynamoTransaction.js';
|
|
4
|
-
import EventProcessor from './src/BaseEvent/EventProcessor.js';
|
|
5
|
-
import Launchable from './src/BaseEvent/Launchable/index.js';
|
|
6
|
-
import Process from './src/BaseEvent/Process.js';
|
|
7
|
-
import StepTransaction from './src/BaseEvent/StepTransaction.js';
|
|
8
|
-
import Transaction from './src/BaseEvent/Transaction.js';
|
|
9
|
-
import Redis from './src/Cache/Redis.js';
|
|
10
|
-
import Configuration from './src/Config/Configuration.js';
|
|
11
|
-
import Crypto from './src/Crypto/Crypto.js';
|
|
12
|
-
import * as Database from './src/Database/index.js';
|
|
13
|
-
import Mailer from './src/Mailer/Mailer.js';
|
|
14
|
-
import Router from './src/Server/Router.js';
|
|
15
|
-
import AsyncSingleton from './src/Util/AsyncSingleton.js';
|
|
16
|
-
import Utils from './src/Util/Utils.js';
|
|
17
|
-
export {
|
|
18
|
-
// Base Events
|
|
19
|
-
Transaction, Process, EventProcessor, DynamoTransaction, StepTransaction, Launchable,
|
|
20
|
-
// Http
|
|
21
|
-
Router, HttpMethod,
|
|
22
|
-
// Modules
|
|
23
|
-
Mailer, Crypto, Configuration, Redis, Database,
|
|
24
|
-
// API
|
|
25
|
-
Response,
|
|
26
|
-
// Helpers
|
|
27
|
-
Utils, AsyncSingleton, };
|
|
28
|
-
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACjD,OAAO,QAA+B,MAAM,uBAAuB,CAAA;AACnE,OAAO,iBAAiB,MAAM,sCAAsC,CAAA;AACpE,OAAO,cAAc,MAAM,mCAAmC,CAAA;AAC9D,OAAO,UAAU,MAAM,qCAAqC,CAAA;AAC5D,OAAO,OAAO,MAAM,4BAA4B,CAAA;AAChD,OAAO,eAAe,MAAM,oCAAoC,CAAA;AAChE,OAAO,WAAkC,MAAM,gCAAgC,CAAA;AAC/E,OAAO,KAAK,MAAM,sBAAsB,CAAA;AACxC,OAAO,aAAa,MAAM,+BAA+B,CAAA;AACzD,OAAO,MAAM,MAAM,wBAAwB,CAAA;AAC3C,OAAO,KAAK,QAAQ,MAAM,yBAAyB,CAAA;AACnD,OAAO,MAAM,MAAM,wBAAwB,CAAA;AAC3C,OAAO,MAAiB,MAAM,wBAAwB,CAAA;AACtD,OAAO,cAAc,MAAM,8BAA8B,CAAA;AACzD,OAAO,KAAK,MAAM,qBAAqB,CAAA;AAEvC,OAAO;AACL,cAAc;AACd,WAAW,EACX,OAAO,EACP,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,UAAU;AACV,OAAO;AACP,MAAM,EAEN,UAAU;AACV,UAAU;AACV,MAAM,EACN,MAAM,EACN,aAAa,EACb,KAAK,EACL,QAAQ;AACR,MAAM;AACN,QAAQ;AAER,UAAU;AACV,KAAK,EACL,cAAc,GAEf,CAAA"}
|