@goldstack/template-email-send 0.3.101 → 0.3.104
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/dist/src/sesConnect.d.ts.map +1 -1
- package/dist/src/sesConnect.js +15 -5
- package/dist/src/sesConnect.js.map +1 -1
- package/dist/src/templateEmailSend.d.ts +2 -1
- package/dist/src/templateEmailSend.d.ts.map +1 -1
- package/dist/src/templateEmailSend.js +1 -31
- package/dist/src/templateEmailSend.js.map +1 -1
- package/package.json +13 -20
- package/bin/template +0 -12
- package/dist/src/mockesSES.spec.d.ts +0 -2
- package/dist/src/mockesSES.spec.d.ts.map +0 -1
- package/dist/src/mockesSES.spec.js +0 -10
- package/dist/src/mockesSES.spec.js.map +0 -1
- package/dist/src/sesConnect.spec.d.ts +0 -2
- package/dist/src/sesConnect.spec.d.ts.map +0 -1
- package/dist/src/sesConnect.spec.js +0 -27
- package/dist/src/sesConnect.spec.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sesConnect.d.ts","sourceRoot":"","sources":["../../src/sesConnect.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sesConnect.d.ts","sourceRoot":"","sources":["../../src/sesConnect.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,qBAAqB,CAAC;AAUtC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAMxC,eAAO,MAAM,YAAY,QAAO,SAK/B,CAAC;AAEF,eAAO,MAAM,OAAO,oBACD,GAAG,iBACL,GAAG,0CAEjB,QAAQ,GAAG,CAyCb,CAAC;AAEF,eAAO,MAAM,aAAa,oBACP,GAAG,iBACL,GAAG,0CAEjB,QAAQ,MAAM,CAuBhB,CAAC"}
|
package/dist/src/sesConnect.js
CHANGED
|
@@ -4,11 +4,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.getFromDomain = exports.connect = exports.getMockedSES = void 0;
|
|
7
|
-
const infra_aws_1 = require("@goldstack/infra-aws");
|
|
8
7
|
const ses_1 = __importDefault(require("aws-sdk/clients/ses"));
|
|
8
|
+
const core_1 = require("aws-sdk/lib/core");
|
|
9
9
|
const assert_1 = __importDefault(require("assert"));
|
|
10
|
-
const
|
|
10
|
+
const utils_package_config_embedded_1 = require("@goldstack/utils-package-config-embedded");
|
|
11
11
|
const mockedSES_1 = require("./mockedSES");
|
|
12
|
+
const utils_esbuild_1 = require("@goldstack/utils-esbuild");
|
|
12
13
|
let mockedSES;
|
|
13
14
|
const getMockedSES = () => {
|
|
14
15
|
if (!mockedSES) {
|
|
@@ -18,7 +19,7 @@ const getMockedSES = () => {
|
|
|
18
19
|
};
|
|
19
20
|
exports.getMockedSES = getMockedSES;
|
|
20
21
|
const connect = async (goldstackConfig, packageSchema, deploymentName) => {
|
|
21
|
-
const packageConfig = new
|
|
22
|
+
const packageConfig = new utils_package_config_embedded_1.EmbeddedPackageConfig({
|
|
22
23
|
goldstackJson: goldstackConfig,
|
|
23
24
|
packageSchema,
|
|
24
25
|
});
|
|
@@ -33,7 +34,16 @@ const connect = async (goldstackConfig, packageSchema, deploymentName) => {
|
|
|
33
34
|
return mockedSES;
|
|
34
35
|
}
|
|
35
36
|
const deployment = packageConfig.getDeployment(deploymentName);
|
|
36
|
-
|
|
37
|
+
let awsUser;
|
|
38
|
+
if (process.env.AWS_ACCESS_KEY_ID) {
|
|
39
|
+
awsUser = new core_1.EnvironmentCredentials('AWS');
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
// load this in lazy to enable omitting the dependency when bundling lambdas
|
|
43
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
44
|
+
const infraAWSLib = require((0, utils_esbuild_1.excludeInBundle)('@goldstack/infra-aws'));
|
|
45
|
+
awsUser = await infraAWSLib.getAWSUser(deployment.awsUser);
|
|
46
|
+
}
|
|
37
47
|
const ses = new ses_1.default({
|
|
38
48
|
apiVersion: '2010-12-01',
|
|
39
49
|
credentials: awsUser,
|
|
@@ -43,7 +53,7 @@ const connect = async (goldstackConfig, packageSchema, deploymentName) => {
|
|
|
43
53
|
};
|
|
44
54
|
exports.connect = connect;
|
|
45
55
|
const getFromDomain = async (goldstackConfig, packageSchema, deploymentName) => {
|
|
46
|
-
const packageConfig = new
|
|
56
|
+
const packageConfig = new utils_package_config_embedded_1.EmbeddedPackageConfig({
|
|
47
57
|
goldstackJson: goldstackConfig,
|
|
48
58
|
packageSchema,
|
|
49
59
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sesConnect.js","sourceRoot":"","sources":["../../src/sesConnect.ts"],"names":[],"mappings":";;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"sesConnect.js","sourceRoot":"","sources":["../../src/sesConnect.ts"],"names":[],"mappings":";;;;;;AAAA,8DAAsC;AACtC,2CAAuE;AAKvE,oDAA4B;AAE5B,4FAAiF;AAEjF,2CAAwC;AAExC,4DAA2D;AAE3D,IAAI,SAAgC,CAAC;AAE9B,MAAM,YAAY,GAAG,GAAc,EAAE;IAC1C,IAAI,CAAC,SAAS,EAAE;QACd,SAAS,GAAG,IAAI,qBAAS,EAAE,CAAC;KAC7B;IACD,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AALW,QAAA,YAAY,gBAKvB;AAEK,MAAM,OAAO,GAAG,KAAK,EAC1B,eAAoB,EACpB,aAAkB,EAClB,cAAuB,EACT,EAAE;IAChB,MAAM,aAAa,GAAG,IAAI,qDAAqB,CAG7C;QACA,aAAa,EAAE,eAAe;QAC9B,aAAa;KACd,CAAC,CAAC;IACH,IAAI,CAAC,cAAc,EAAE;QACnB,IAAA,gBAAM,EACJ,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAChC,qCAAqC,eAAe,CAAC,IAAI,mGAAmG,CAC7J,CAAC;QACF,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;KACnD;IAED,IAAI,cAAc,KAAK,OAAO,EAAE;QAC9B,IAAI,CAAC,SAAS,EAAE;YACd,SAAS,GAAG,IAAI,qBAAS,EAAE,CAAC;SAC7B;QACD,OAAO,SAAgB,CAAC;KACzB;IAED,MAAM,UAAU,GAAG,aAAa,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;IAE/D,IAAI,OAAoB,CAAC;IACzB,IAAI,OAAO,CAAC,GAAG,CAAC,iBAAiB,EAAE;QACjC,OAAO,GAAG,IAAI,6BAAsB,CAAC,KAAK,CAAC,CAAC;KAC7C;SAAM;QACL,4EAA4E;QAC5E,8DAA8D;QAC9D,MAAM,WAAW,GAAG,OAAO,CAAC,IAAA,+BAAe,EAAC,sBAAsB,CAAC,CAAC,CAAC;QACrE,OAAO,GAAG,MAAM,WAAW,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;KAC5D;IACD,MAAM,GAAG,GAAG,IAAI,aAAG,CAAC;QAClB,UAAU,EAAE,YAAY;QACxB,WAAW,EAAE,OAAO;QACpB,MAAM,EAAE,UAAU,CAAC,SAAS;KAC7B,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AA7CW,QAAA,OAAO,WA6ClB;AAEK,MAAM,aAAa,GAAG,KAAK,EAChC,eAAoB,EACpB,aAAkB,EAClB,cAAuB,EACN,EAAE;IACnB,MAAM,aAAa,GAAG,IAAI,qDAAqB,CAG7C;QACA,aAAa,EAAE,eAAe;QAC9B,aAAa;KACd,CAAC,CAAC;IACH,IAAI,CAAC,cAAc,EAAE;QACnB,IAAA,gBAAM,EACJ,OAAO,CAAC,GAAG,CAAC,oBAAoB,EAChC,qCAAqC,eAAe,CAAC,IAAI,mGAAmG,CAC7J,CAAC;QACF,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;KACnD;IAED,IAAI,cAAc,KAAK,OAAO,EAAE;QAC9B,OAAO,YAAY,CAAC;KACrB;IAED,MAAM,UAAU,GAAG,aAAa,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;IAE/D,OAAO,UAAU,CAAC,aAAa,CAAC,MAAM,CAAC;AACzC,CAAC,CAAC;AA3BW,QAAA,aAAa,iBA2BxB"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
+
import type { EmailSendPackage, EmailSendDeployment } from './types/EmailSendPackage';
|
|
2
|
+
export type { EmailSendDeployment, EmailSendPackage };
|
|
1
3
|
export { connect, getMockedSES, getFromDomain } from './sesConnect';
|
|
2
4
|
export { MockedSES } from './mockedSES';
|
|
3
|
-
export declare const run: (args: string[]) => Promise<void>;
|
|
4
5
|
//# sourceMappingURL=templateEmailSend.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templateEmailSend.d.ts","sourceRoot":"","sources":["../../src/templateEmailSend.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"templateEmailSend.d.ts","sourceRoot":"","sources":["../../src/templateEmailSend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,mBAAmB,EACpB,MAAM,0BAA0B,CAAC;AAElC,YAAY,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,CAAC;AAEtD,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -1,40 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.
|
|
7
|
-
const utils_package_1 = require("@goldstack/utils-package");
|
|
8
|
-
const utils_cli_1 = require("@goldstack/utils-cli");
|
|
9
|
-
const utils_terraform_1 = require("@goldstack/utils-terraform");
|
|
10
|
-
const utils_terraform_aws_1 = require("@goldstack/utils-terraform-aws");
|
|
11
|
-
const utils_package_config_1 = require("@goldstack/utils-package-config");
|
|
12
|
-
const yargs_1 = __importDefault(require("yargs"));
|
|
3
|
+
exports.MockedSES = exports.getFromDomain = exports.getMockedSES = exports.connect = void 0;
|
|
13
4
|
var sesConnect_1 = require("./sesConnect");
|
|
14
5
|
Object.defineProperty(exports, "connect", { enumerable: true, get: function () { return sesConnect_1.connect; } });
|
|
15
6
|
Object.defineProperty(exports, "getMockedSES", { enumerable: true, get: function () { return sesConnect_1.getMockedSES; } });
|
|
16
7
|
Object.defineProperty(exports, "getFromDomain", { enumerable: true, get: function () { return sesConnect_1.getFromDomain; } });
|
|
17
8
|
var mockedSES_1 = require("./mockedSES");
|
|
18
9
|
Object.defineProperty(exports, "MockedSES", { enumerable: true, get: function () { return mockedSES_1.MockedSES; } });
|
|
19
|
-
const run = async (args) => {
|
|
20
|
-
await (0, utils_cli_1.wrapCli)(async () => {
|
|
21
|
-
const argv = (0, utils_package_1.buildCli)({
|
|
22
|
-
yargs: yargs_1.default,
|
|
23
|
-
deployCommands: (yargs) => yargs,
|
|
24
|
-
infraCommands: (0, utils_terraform_1.infraCommands)(),
|
|
25
|
-
}).help().argv;
|
|
26
|
-
const packageConfig = new utils_package_config_1.PackageConfig({
|
|
27
|
-
packagePath: './',
|
|
28
|
-
});
|
|
29
|
-
const config = packageConfig.getConfig();
|
|
30
|
-
const command = argv._[0];
|
|
31
|
-
const [, , , ...opArgs] = args;
|
|
32
|
-
if (command === 'infra') {
|
|
33
|
-
await (0, utils_terraform_aws_1.terraformAwsCli)(opArgs);
|
|
34
|
-
return;
|
|
35
|
-
}
|
|
36
|
-
throw new Error('Unknown command: ' + command);
|
|
37
|
-
});
|
|
38
|
-
};
|
|
39
|
-
exports.run = run;
|
|
40
10
|
//# sourceMappingURL=templateEmailSend.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"templateEmailSend.js","sourceRoot":"","sources":["../../src/templateEmailSend.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"templateEmailSend.js","sourceRoot":"","sources":["../../src/templateEmailSend.ts"],"names":[],"mappings":";;;AAOA,2CAAoE;AAA3D,qGAAA,OAAO,OAAA;AAAE,0GAAA,YAAY,OAAA;AAAE,2GAAA,aAAa,OAAA;AAC7C,yCAAwC;AAA/B,sGAAA,SAAS,OAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@goldstack/template-email-send",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.104",
|
|
4
4
|
"description": "Utilities for packages that implement email sending using AWS SES",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"goldstack",
|
|
@@ -45,35 +45,28 @@
|
|
|
45
45
|
"version:apply:force": "yarn version $@ && yarn version apply"
|
|
46
46
|
},
|
|
47
47
|
"dependencies": {
|
|
48
|
-
"@goldstack/infra": "0.3.
|
|
49
|
-
"@goldstack/infra-aws": "0.3.
|
|
50
|
-
"@goldstack/utils-cli": "0.2.
|
|
51
|
-
"@goldstack/utils-
|
|
52
|
-
"@goldstack/utils-
|
|
53
|
-
"@goldstack/utils-
|
|
54
|
-
"@goldstack/utils-
|
|
55
|
-
"@goldstack/utils-
|
|
56
|
-
"@goldstack/utils-sh": "0.4.31",
|
|
57
|
-
"@goldstack/utils-template": "0.3.35",
|
|
58
|
-
"@goldstack/utils-terraform": "0.3.68",
|
|
59
|
-
"@goldstack/utils-terraform-aws": "0.3.67",
|
|
48
|
+
"@goldstack/infra": "0.3.37",
|
|
49
|
+
"@goldstack/infra-aws": "0.3.45",
|
|
50
|
+
"@goldstack/utils-cli": "0.2.14",
|
|
51
|
+
"@goldstack/utils-esbuild": "0.4.2",
|
|
52
|
+
"@goldstack/utils-package": "0.3.39",
|
|
53
|
+
"@goldstack/utils-package-config-embedded": "0.4.2",
|
|
54
|
+
"@goldstack/utils-terraform": "0.3.69",
|
|
55
|
+
"@goldstack/utils-terraform-aws": "0.3.68",
|
|
60
56
|
"aws-sdk": "2.1055.0",
|
|
61
|
-
"
|
|
62
|
-
"uuid": "^8.3.0",
|
|
63
|
-
"yargs": "^15.4.1"
|
|
57
|
+
"uuid": "^8.3.0"
|
|
64
58
|
},
|
|
65
59
|
"devDependencies": {
|
|
66
|
-
"@goldstack/utils-git": "0.1.
|
|
67
|
-
"@goldstack/utils-package-config-generate": "0.2.
|
|
60
|
+
"@goldstack/utils-git": "0.1.35",
|
|
61
|
+
"@goldstack/utils-package-config-generate": "0.2.15",
|
|
68
62
|
"@types/jest": "^27.5.1",
|
|
69
63
|
"@types/mock-aws-s3": "^2.6.3",
|
|
70
64
|
"@types/node": "^17.0.33",
|
|
71
65
|
"@types/uuid": "^8.3.0",
|
|
72
|
-
"@types/yargs": "^15.0.5",
|
|
73
66
|
"jest": "^28.1.0",
|
|
74
67
|
"rimraf": "^3.0.2",
|
|
75
68
|
"ts-jest": "^28.0.2",
|
|
76
|
-
"ts-node": "^10.
|
|
69
|
+
"ts-node": "^10.8.0",
|
|
77
70
|
"typescript": "^4.6.4"
|
|
78
71
|
},
|
|
79
72
|
"publishConfig": {
|
package/bin/template
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
|
|
3
|
-
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
4
|
-
require('source-map-support').install();
|
|
5
|
-
|
|
6
|
-
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
7
|
-
require('./../dist/src/templateEmailSend')
|
|
8
|
-
.run(process.argv)
|
|
9
|
-
.catch((e) => {
|
|
10
|
-
console.log(e);
|
|
11
|
-
process.exit(1);
|
|
12
|
-
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mockesSES.spec.d.ts","sourceRoot":"","sources":["../../src/mockesSES.spec.ts"],"names":[],"mappings":""}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const mockedSES_1 = require("./mockedSES");
|
|
4
|
-
describe('MockedSES', () => {
|
|
5
|
-
it('Should create instance', () => {
|
|
6
|
-
const mockedSES = new mockedSES_1.MockedSES();
|
|
7
|
-
expect(mockedSES.sendEmail).toBeDefined();
|
|
8
|
-
});
|
|
9
|
-
});
|
|
10
|
-
//# sourceMappingURL=mockesSES.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mockesSES.spec.js","sourceRoot":"","sources":["../../src/mockesSES.spec.ts"],"names":[],"mappings":";;AAAA,2CAAwC;AACxC,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;QAChC,MAAM,SAAS,GAAG,IAAI,qBAAS,EAAE,CAAC;QAClC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,WAAW,EAAE,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sesConnect.spec.d.ts","sourceRoot":"","sources":["../../src/sesConnect.spec.ts"],"names":[],"mappings":""}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const sesConnect_1 = require("./sesConnect");
|
|
4
|
-
describe('SES connect', () => {
|
|
5
|
-
it('Should connect to mocked SES', async () => {
|
|
6
|
-
const ses = await (0, sesConnect_1.connect)({}, {}, 'local');
|
|
7
|
-
await ses
|
|
8
|
-
.sendEmail({
|
|
9
|
-
Destination: { ToAddresses: ['test@test.com'] },
|
|
10
|
-
Message: {
|
|
11
|
-
Subject: { Charset: 'UTF-8', Data: 'Test email' },
|
|
12
|
-
Body: {
|
|
13
|
-
Text: {
|
|
14
|
-
Charset: 'UTF-8',
|
|
15
|
-
Data: 'This is the message body in text format.',
|
|
16
|
-
},
|
|
17
|
-
},
|
|
18
|
-
},
|
|
19
|
-
Source: 'sender@example.com',
|
|
20
|
-
})
|
|
21
|
-
.promise();
|
|
22
|
-
const mockedSES = (0, sesConnect_1.getMockedSES)();
|
|
23
|
-
const sentEmailRequests = mockedSES.getSentEmailRequests();
|
|
24
|
-
expect(sentEmailRequests).toHaveLength(1);
|
|
25
|
-
});
|
|
26
|
-
});
|
|
27
|
-
//# sourceMappingURL=sesConnect.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sesConnect.spec.js","sourceRoot":"","sources":["../../src/sesConnect.spec.ts"],"names":[],"mappings":";;AAAA,6CAAqD;AACrD,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;QAC5C,MAAM,GAAG,GAAG,MAAM,IAAA,oBAAO,EAAC,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;QAC3C,MAAM,GAAG;aACN,SAAS,CAAC;YACT,WAAW,EAAE,EAAE,WAAW,EAAE,CAAC,eAAe,CAAC,EAAE;YAC/C,OAAO,EAAE;gBACP,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE;gBACjD,IAAI,EAAE;oBACJ,IAAI,EAAE;wBACJ,OAAO,EAAE,OAAO;wBAChB,IAAI,EAAE,0CAA0C;qBACjD;iBACF;aACF;YACD,MAAM,EAAE,oBAAoB;SAC7B,CAAC;aACD,OAAO,EAAE,CAAC;QAEb,MAAM,SAAS,GAAG,IAAA,yBAAY,GAAE,CAAC;QACjC,MAAM,iBAAiB,GAAG,SAAS,CAAC,oBAAoB,EAAE,CAAC;QAC3D,MAAM,CAAC,iBAAiB,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|