@webda/aws 2.0.0-beta.2 → 2.0.1
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/lib/deployers/cloudformation.d.ts +2 -2
- package/lib/deployers/cloudformation.js +672 -693
- package/lib/deployers/cloudformation.js.map +1 -1
- package/lib/deployers/cloudformation.spec.js +428 -477
- package/lib/deployers/cloudformation.spec.js.map +1 -1
- package/lib/deployers/index.js +282 -342
- package/lib/deployers/index.js.map +1 -1
- package/lib/deployers/index.spec.d.ts +1 -1
- package/lib/deployers/index.spec.js +445 -510
- package/lib/deployers/index.spec.js.map +1 -1
- package/lib/deployers/lambda-entrypoint.js +4 -16
- package/lib/deployers/lambda-entrypoint.js.map +1 -1
- package/lib/deployers/lambdapackager.js +13 -52
- package/lib/deployers/lambdapackager.js.map +1 -1
- package/lib/deployers/lambdapackager.spec.js +25 -61
- package/lib/deployers/lambdapackager.spec.js.map +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1 -17
- package/lib/index.js.map +1 -1
- package/lib/index.spec.d.ts +1 -1
- package/lib/index.spec.js +28 -75
- package/lib/index.spec.js.map +1 -1
- package/lib/services/aws-mixin.d.ts +2 -0
- package/lib/services/aws-mixin.js +2 -7
- package/lib/services/aws-mixin.js.map +1 -1
- package/lib/services/cloudwatchlogger.d.ts +4 -2
- package/lib/services/cloudwatchlogger.js +63 -103
- package/lib/services/cloudwatchlogger.js.map +1 -1
- package/lib/services/cloudwatchlogger.spec.js +57 -100
- package/lib/services/cloudwatchlogger.spec.js.map +1 -1
- package/lib/services/dynamodb.d.ts +5 -3
- package/lib/services/dynamodb.js +458 -498
- package/lib/services/dynamodb.js.map +1 -1
- package/lib/services/dynamodb.spec.d.ts +2 -2
- package/lib/services/dynamodb.spec.js +231 -302
- package/lib/services/dynamodb.spec.js.map +1 -1
- package/lib/services/index.d.ts +9 -9
- package/lib/services/index.js +8 -24
- package/lib/services/index.js.map +1 -1
- package/lib/services/lambdacaller.d.ts +3 -1
- package/lib/services/lambdacaller.js +16 -29
- package/lib/services/lambdacaller.js.map +1 -1
- package/lib/services/lambdacaller.spec.js +43 -81
- package/lib/services/lambdacaller.spec.js.map +1 -1
- package/lib/services/lambdaserver.d.ts +1 -8
- package/lib/services/lambdaserver.js +168 -206
- package/lib/services/lambdaserver.js.map +1 -1
- package/lib/services/lambdaserver.spec.js +266 -354
- package/lib/services/lambdaserver.spec.js.map +1 -1
- package/lib/services/route53.js +112 -137
- package/lib/services/route53.js.map +1 -1
- package/lib/services/route53.spec.js +56 -92
- package/lib/services/route53.spec.js.map +1 -1
- package/lib/services/s3binary.d.ts +6 -2
- package/lib/services/s3binary.js +189 -251
- package/lib/services/s3binary.js.map +1 -1
- package/lib/services/s3binary.spec.js +185 -254
- package/lib/services/s3binary.spec.js.map +1 -1
- package/lib/services/secretsmanager.d.ts +2 -0
- package/lib/services/secretsmanager.js +32 -56
- package/lib/services/secretsmanager.js.map +1 -1
- package/lib/services/secretsmanager.spec.js +50 -93
- package/lib/services/secretsmanager.spec.js.map +1 -1
- package/lib/services/sqsqueue.d.ts +6 -8
- package/lib/services/sqsqueue.js +70 -98
- package/lib/services/sqsqueue.js.map +1 -1
- package/lib/services/sqsqueue.spec.js +95 -145
- package/lib/services/sqsqueue.spec.js.map +1 -1
- package/lib/shell.js +19 -38
- package/lib/shell.js.map +1 -1
- package/package.json +12 -9
- package/webda.module.json +48 -0
|
@@ -1,25 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.AWSSecretsManager = exports.AWSSecretsManagerParameters = void 0;
|
|
13
|
-
const client_secrets_manager_1 = require("@aws-sdk/client-secrets-manager");
|
|
14
|
-
const core_1 = require("@webda/core");
|
|
15
|
-
const aws_mixin_1 = require("./aws-mixin");
|
|
16
|
-
class AWSSecretsManagerParameters extends (0, aws_mixin_1.AWSServiceParameters)(core_1.ServiceParameters) {
|
|
1
|
+
import { SecretsManager } from "@aws-sdk/client-secrets-manager";
|
|
2
|
+
import { Service, ServiceParameters } from "@webda/core";
|
|
3
|
+
import { AWSServiceParameters } from "./aws-mixin.js";
|
|
4
|
+
export class AWSSecretsManagerParameters extends AWSServiceParameters(ServiceParameters) {
|
|
17
5
|
}
|
|
18
|
-
exports.AWSSecretsManagerParameters = AWSSecretsManagerParameters;
|
|
19
6
|
/**
|
|
20
7
|
* @WebdaModda
|
|
21
8
|
*/
|
|
22
|
-
class AWSSecretsManager extends
|
|
9
|
+
export default class AWSSecretsManager extends Service {
|
|
23
10
|
/**
|
|
24
11
|
* @inheritdoc
|
|
25
12
|
*/
|
|
@@ -30,7 +17,7 @@ class AWSSecretsManager extends core_1.Service {
|
|
|
30
17
|
* @inheritdoc
|
|
31
18
|
*/
|
|
32
19
|
computeParameters() {
|
|
33
|
-
this._client = new
|
|
20
|
+
this._client = new SecretsManager(this.parameters);
|
|
34
21
|
}
|
|
35
22
|
/**
|
|
36
23
|
* @inheritdoc
|
|
@@ -41,10 +28,8 @@ class AWSSecretsManager extends core_1.Service {
|
|
|
41
28
|
/**
|
|
42
29
|
* @inheritdoc
|
|
43
30
|
*/
|
|
44
|
-
getConfiguration(id) {
|
|
45
|
-
return
|
|
46
|
-
return this.get(id);
|
|
47
|
-
});
|
|
31
|
+
async getConfiguration(id) {
|
|
32
|
+
return this.get(id);
|
|
48
33
|
}
|
|
49
34
|
/**
|
|
50
35
|
* Create a new secret on AWS SecretsManager
|
|
@@ -53,12 +38,10 @@ class AWSSecretsManager extends core_1.Service {
|
|
|
53
38
|
* @param values
|
|
54
39
|
* @param params
|
|
55
40
|
*/
|
|
56
|
-
create(id, values = {}, params = {}) {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
yield this._client.createSecret(params);
|
|
61
|
-
});
|
|
41
|
+
async create(id, values = {}, params = {}) {
|
|
42
|
+
params.Name = id;
|
|
43
|
+
params.SecretString = JSON.stringify(values);
|
|
44
|
+
await this._client.createSecret(params);
|
|
62
45
|
}
|
|
63
46
|
/**
|
|
64
47
|
* Delete a secret
|
|
@@ -67,20 +50,18 @@ class AWSSecretsManager extends core_1.Service {
|
|
|
67
50
|
* @param RecoveryWindowInDays
|
|
68
51
|
* @param ForceDeleteWithoutRecovery
|
|
69
52
|
*/
|
|
70
|
-
delete(SecretId, RecoveryWindowInDays = 7, ForceDeleteWithoutRecovery = false) {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
53
|
+
async delete(SecretId, RecoveryWindowInDays = 7, ForceDeleteWithoutRecovery = false) {
|
|
54
|
+
let params = {
|
|
55
|
+
RecoveryWindowInDays,
|
|
56
|
+
SecretId
|
|
57
|
+
};
|
|
58
|
+
if (ForceDeleteWithoutRecovery) {
|
|
59
|
+
params = {
|
|
60
|
+
SecretId,
|
|
61
|
+
ForceDeleteWithoutRecovery
|
|
75
62
|
};
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
SecretId,
|
|
79
|
-
ForceDeleteWithoutRecovery
|
|
80
|
-
};
|
|
81
|
-
}
|
|
82
|
-
yield this._client.deleteSecret(params);
|
|
83
|
-
});
|
|
63
|
+
}
|
|
64
|
+
await this._client.deleteSecret(params);
|
|
84
65
|
}
|
|
85
66
|
/**
|
|
86
67
|
* Store data in a AWS secret
|
|
@@ -88,12 +69,10 @@ class AWSSecretsManager extends core_1.Service {
|
|
|
88
69
|
* @param SecretId
|
|
89
70
|
* @param value
|
|
90
71
|
*/
|
|
91
|
-
put(SecretId, value) {
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
SecretString: JSON.stringify(value)
|
|
96
|
-
});
|
|
72
|
+
async put(SecretId, value) {
|
|
73
|
+
await this._client.putSecretValue({
|
|
74
|
+
SecretId,
|
|
75
|
+
SecretString: JSON.stringify(value)
|
|
97
76
|
});
|
|
98
77
|
}
|
|
99
78
|
/**
|
|
@@ -102,13 +81,11 @@ class AWSSecretsManager extends core_1.Service {
|
|
|
102
81
|
* @param SecretId
|
|
103
82
|
* @returns JSON.parse of SecretString
|
|
104
83
|
*/
|
|
105
|
-
get(SecretId) {
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
SecretId
|
|
109
|
-
});
|
|
110
|
-
return JSON.parse(res.SecretString);
|
|
84
|
+
async get(SecretId) {
|
|
85
|
+
let res = await this._client.getSecretValue({
|
|
86
|
+
SecretId
|
|
111
87
|
});
|
|
88
|
+
return JSON.parse(res.SecretString);
|
|
112
89
|
}
|
|
113
90
|
/**
|
|
114
91
|
* @inheritdoc
|
|
@@ -123,6 +100,5 @@ class AWSSecretsManager extends core_1.Service {
|
|
|
123
100
|
};
|
|
124
101
|
}
|
|
125
102
|
}
|
|
126
|
-
|
|
127
|
-
exports.AWSSecretsManager = AWSSecretsManager;
|
|
103
|
+
export { AWSSecretsManager };
|
|
128
104
|
//# sourceMappingURL=secretsmanager.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secretsmanager.js","sourceRoot":"","sources":["../../src/services/secretsmanager.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"secretsmanager.js","sourceRoot":"","sources":["../../src/services/secretsmanager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtF,OAAO,EAAyB,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChF,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAEnD,MAAM,OAAO,2BAA4B,SAAQ,oBAAoB,CAAC,iBAAiB,CAAC;CAAG;AAE3F;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,iBACnB,SAAQ,OAAU;IAKlB;;OAEG;IACH,cAAc,CAAC,MAAW;QACxB,OAAO,IAAI,2BAA2B,CAAC,MAAM,CAAC,CAAC;IACjD,CAAC;IAED;;OAEG;IACH,iBAAiB;QACf,IAAI,CAAC,OAAO,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACrD,CAAC;IAED;;OAEG;IACH,uBAAuB,CAAC,GAAW,EAAE,SAAqB;QACxD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,gBAAgB,CAAC,EAAU;QAC/B,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACtB,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,MAAM,CAAC,EAAU,EAAE,SAAc,EAAE,EAAE,SAAc,EAAE;QACzD,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;QACjB,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC7C,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,MAAM,CAAC,QAAgB,EAAE,uBAA+B,CAAC,EAAE,6BAAsC,KAAK;QAC1G,IAAI,MAAM,GAAwB;YAChC,oBAAoB;YACpB,QAAQ;SACT,CAAC;QACF,IAAI,0BAA0B,EAAE;YAC9B,MAAM,GAAG;gBACP,QAAQ;gBACR,0BAA0B;aAC3B,CAAC;SACH;QACD,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,GAAG,CAAC,QAAgB,EAAE,KAAU;QACpC,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC;YAChC,QAAQ;YACR,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;SACpC,CAAC,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,GAAG,CAAC,QAAgB;QACxB,IAAI,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC;YAC1C,QAAQ;SACT,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACtC,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,SAAS;QACpB,IAAI,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,WAAW,CAAC;QACnD,OAAO;YACL,GAAG,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK;YACvC,MAAM,EAAE,OAAO;YACf,MAAM,EAAE,CAAC,kBAAkB,CAAC;YAC5B,QAAQ,EAAE,CAAC,yBAAyB,GAAG,MAAM,GAAG,GAAG,GAAG,SAAS,GAAG,WAAW,CAAC;SAC/E,CAAC;IACJ,CAAC;CACF;AAED,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
|
|
@@ -1,109 +1,66 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
1
|
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
19
2
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
20
3
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
21
4
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
22
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
23
6
|
};
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
before: { get: () => super.before }
|
|
48
|
-
});
|
|
49
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
50
|
-
yield _super.before.call(this);
|
|
51
|
-
this.service = this.getService("AWSSecretsManager");
|
|
52
|
-
assert.notStrictEqual(this.service, undefined);
|
|
53
|
-
try {
|
|
54
|
-
yield this.service.delete("webda-test-unit-test", 7, true);
|
|
55
|
-
}
|
|
56
|
-
catch (err) {
|
|
57
|
-
// Skip bad delete
|
|
58
|
-
}
|
|
59
|
-
try {
|
|
60
|
-
yield this.service.create("webda-test-manual", {
|
|
61
|
-
"webda-test-1": "Test1",
|
|
62
|
-
"webda-test-2": "Test2"
|
|
63
|
-
});
|
|
64
|
-
}
|
|
65
|
-
catch (err) {
|
|
66
|
-
// Skip as it will fail if it already exists
|
|
67
|
-
}
|
|
68
|
-
});
|
|
7
|
+
import { suite, test } from "@testdeck/mocha";
|
|
8
|
+
import * as assert from "assert";
|
|
9
|
+
import { WebdaAwsTest } from "../index.spec.js";
|
|
10
|
+
let SecretsManagerTest = class SecretsManagerTest extends WebdaAwsTest {
|
|
11
|
+
async before() {
|
|
12
|
+
await super.before();
|
|
13
|
+
this.service = this.getService("AWSSecretsManager");
|
|
14
|
+
assert.notStrictEqual(this.service, undefined);
|
|
15
|
+
try {
|
|
16
|
+
await this.service.delete("webda-test-unit-test", 7, true);
|
|
17
|
+
}
|
|
18
|
+
catch (err) {
|
|
19
|
+
// Skip bad delete
|
|
20
|
+
}
|
|
21
|
+
try {
|
|
22
|
+
await this.service.create("webda-test-manual", {
|
|
23
|
+
"webda-test-1": "Test1",
|
|
24
|
+
"webda-test-2": "Test2"
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
catch (err) {
|
|
28
|
+
// Skip as it will fail if it already exists
|
|
29
|
+
}
|
|
69
30
|
}
|
|
70
|
-
after() {
|
|
71
|
-
|
|
72
|
-
yield this.service.delete("webda-test-unit-test", 7, true);
|
|
73
|
-
});
|
|
31
|
+
async after() {
|
|
32
|
+
await this.service.delete("webda-test-unit-test", 7, true);
|
|
74
33
|
}
|
|
75
|
-
basic() {
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
Sid: "AWSSecretsManagerAWSSecretsManager"
|
|
99
|
-
});
|
|
34
|
+
async basic() {
|
|
35
|
+
let result = await this.service.get("webda-test-manual");
|
|
36
|
+
assert.strictEqual(result["webda-test-1"], "Test1");
|
|
37
|
+
assert.strictEqual(result["webda-test-2"], "Test2");
|
|
38
|
+
let config = await this.service.getConfiguration("webda-test-manual");
|
|
39
|
+
assert.strictEqual(config["webda-test-1"], result["webda-test-1"]);
|
|
40
|
+
assert.strictEqual(config["webda-test-2"], result["webda-test-2"]);
|
|
41
|
+
await this.service.create("webda-test-unit-test", {
|
|
42
|
+
"Authentication.providers.email.text": "Bouzouf"
|
|
43
|
+
});
|
|
44
|
+
result = await this.service.get("webda-test-unit-test");
|
|
45
|
+
assert.strictEqual(result["Authentication.providers.email.text"], "Bouzouf");
|
|
46
|
+
await this.service.put("webda-test-unit-test", {
|
|
47
|
+
"Authentication.providers.email.text": "Bouzouf2"
|
|
48
|
+
});
|
|
49
|
+
result = await this.service.get("webda-test-unit-test");
|
|
50
|
+
assert.strictEqual(result["Authentication.providers.email.text"], "Bouzouf2");
|
|
51
|
+
assert.ok(!this.service.canTriggerConfiguration(undefined, undefined));
|
|
52
|
+
assert.deepStrictEqual(this.service.getARNPolicy("plop"), {
|
|
53
|
+
Action: ["secretsmanager:*"],
|
|
54
|
+
Effect: "Allow",
|
|
55
|
+
Resource: ["arn:aws:secretsmanager:us-east-1:plop:secret:*"],
|
|
56
|
+
Sid: "AWSSecretsManagerAWSSecretsManager"
|
|
100
57
|
});
|
|
101
58
|
}
|
|
102
59
|
};
|
|
103
60
|
__decorate([
|
|
104
|
-
|
|
61
|
+
test
|
|
105
62
|
], SecretsManagerTest.prototype, "basic", null);
|
|
106
63
|
SecretsManagerTest = __decorate([
|
|
107
|
-
|
|
64
|
+
suite
|
|
108
65
|
], SecretsManagerTest);
|
|
109
66
|
//# sourceMappingURL=secretsmanager.spec.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"secretsmanager.spec.js","sourceRoot":"","sources":["../../src/services/secretsmanager.spec.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"secretsmanager.spec.js","sourceRoot":"","sources":["../../src/services/secretsmanager.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { SQS } from "@aws-sdk/client-sqs";
|
|
2
2
|
import { MessageReceipt, Queue, QueueParameters } from "@webda/core";
|
|
3
|
-
import
|
|
4
|
-
import
|
|
3
|
+
import CloudFormationDeployer from "../deployers/cloudformation.js";
|
|
4
|
+
import { CloudFormationContributor } from "./index.js";
|
|
5
5
|
declare const SQSQueueParameters_base: {
|
|
6
6
|
new (...args: any[]): {
|
|
7
7
|
endpoint?: string;
|
|
@@ -11,11 +11,9 @@ declare const SQSQueueParameters_base: {
|
|
|
11
11
|
sessionToken?: string;
|
|
12
12
|
};
|
|
13
13
|
region?: string;
|
|
14
|
-
type: string;
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
* @WebdaModda
|
|
18
|
-
*/
|
|
14
|
+
type: string;
|
|
15
|
+
url?: string;
|
|
16
|
+
openapi?: import("@webda/core/lib/router").OpenAPIWebdaDefinition;
|
|
19
17
|
};
|
|
20
18
|
} & typeof QueueParameters;
|
|
21
19
|
export declare class SQSQueueParameters extends SQSQueueParameters_base {
|
|
@@ -66,7 +64,7 @@ export default class SQSQueue<T = any, K extends SQSQueueParameters = SQSQueuePa
|
|
|
66
64
|
/**
|
|
67
65
|
* @inheritdoc
|
|
68
66
|
*/
|
|
69
|
-
init(): Promise<
|
|
67
|
+
init(): Promise<this>;
|
|
70
68
|
/**
|
|
71
69
|
* @inheritdoc
|
|
72
70
|
*/
|
package/lib/services/sqsqueue.js
CHANGED
|
@@ -1,34 +1,20 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
-
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
-
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
-
});
|
|
10
|
-
};
|
|
11
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.SQSQueue = exports.SQSQueueParameters = void 0;
|
|
13
|
-
const client_sqs_1 = require("@aws-sdk/client-sqs");
|
|
14
|
-
const core_1 = require("@webda/core");
|
|
15
|
-
const crypto_1 = require("crypto");
|
|
16
|
-
const _1 = require(".");
|
|
17
|
-
class SQSQueueParameters extends (0, _1.AWSServiceParameters)(core_1.QueueParameters) {
|
|
1
|
+
import { SQS } from "@aws-sdk/client-sqs";
|
|
2
|
+
import { Queue, QueueParameters, WebdaError } from "@webda/core";
|
|
3
|
+
import { createHash } from "crypto";
|
|
4
|
+
import { AWSServiceParameters } from "./index.js";
|
|
5
|
+
export class SQSQueueParameters extends AWSServiceParameters(QueueParameters) {
|
|
18
6
|
constructor(params) {
|
|
19
|
-
var _a, _b;
|
|
20
7
|
super(params);
|
|
21
|
-
this.WaitTimeSeconds =
|
|
22
|
-
this.queue =
|
|
8
|
+
this.WaitTimeSeconds = this.WaitTimeSeconds ?? 20;
|
|
9
|
+
this.queue = this.queue ?? "";
|
|
23
10
|
}
|
|
24
11
|
}
|
|
25
|
-
exports.SQSQueueParameters = SQSQueueParameters;
|
|
26
12
|
/**
|
|
27
13
|
* Implement SQS as queue for Webda
|
|
28
14
|
*
|
|
29
15
|
* @WebdaModda
|
|
30
16
|
*/
|
|
31
|
-
class SQSQueue extends
|
|
17
|
+
export default class SQSQueue extends Queue {
|
|
32
18
|
/**
|
|
33
19
|
* @inheritdoc
|
|
34
20
|
*/
|
|
@@ -38,62 +24,51 @@ class SQSQueue extends core_1.Queue {
|
|
|
38
24
|
/**
|
|
39
25
|
* @inheritdoc
|
|
40
26
|
*/
|
|
41
|
-
init() {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
46
|
-
yield _super.init.call(this);
|
|
47
|
-
this.sqs = new client_sqs_1.SQS(this.parameters);
|
|
48
|
-
});
|
|
27
|
+
async init() {
|
|
28
|
+
await super.init();
|
|
29
|
+
this.sqs = new SQS(this.parameters);
|
|
30
|
+
return this;
|
|
49
31
|
}
|
|
50
32
|
/**
|
|
51
33
|
* @inheritdoc
|
|
52
34
|
*/
|
|
53
|
-
size() {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
QueueUrl: this.parameters.queue
|
|
58
|
-
});
|
|
59
|
-
return (parseInt(res["Attributes"]["ApproximateNumberOfMessages"]) +
|
|
60
|
-
parseInt(res["Attributes"]["ApproximateNumberOfMessagesNotVisible"]));
|
|
35
|
+
async size() {
|
|
36
|
+
let res = await this.sqs.getQueueAttributes({
|
|
37
|
+
AttributeNames: ["ApproximateNumberOfMessages", "ApproximateNumberOfMessagesNotVisible"],
|
|
38
|
+
QueueUrl: this.parameters.queue
|
|
61
39
|
});
|
|
40
|
+
return (parseInt(res["Attributes"]["ApproximateNumberOfMessages"]) +
|
|
41
|
+
parseInt(res["Attributes"]["ApproximateNumberOfMessagesNotVisible"]));
|
|
62
42
|
}
|
|
63
43
|
/**
|
|
64
44
|
* @inheritdoc
|
|
65
45
|
*/
|
|
66
|
-
sendMessage(params) {
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
yield this.sqs.sendMessage(sqsParams);
|
|
79
|
-
});
|
|
46
|
+
async sendMessage(params) {
|
|
47
|
+
const sqsParams = {
|
|
48
|
+
QueueUrl: this.parameters.queue,
|
|
49
|
+
MessageBody: JSON.stringify(params)
|
|
50
|
+
};
|
|
51
|
+
if (this.parameters.MessageGroupId) {
|
|
52
|
+
sqsParams.MessageGroupId = this.parameters.MessageGroupId;
|
|
53
|
+
}
|
|
54
|
+
if (this.parameters.queue.endsWith(".fifo")) {
|
|
55
|
+
sqsParams.MessageDeduplicationId = createHash("sha256").update(sqsParams.MessageBody).digest("hex");
|
|
56
|
+
}
|
|
57
|
+
await this.sqs.sendMessage(sqsParams);
|
|
80
58
|
}
|
|
81
59
|
/**
|
|
82
60
|
* @inheritdoc
|
|
83
61
|
*/
|
|
84
|
-
receiveMessage(proto) {
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
(_a = data.Messages) !== null && _a !== void 0 ? _a : (data.Messages = []);
|
|
95
|
-
return data.Messages.map(m => ({ ReceiptHandle: m.ReceiptHandle, Message: this.unserialize(m.Body, proto) }));
|
|
96
|
-
});
|
|
62
|
+
async receiveMessage(proto) {
|
|
63
|
+
let queueArg = {
|
|
64
|
+
QueueUrl: this.parameters.queue,
|
|
65
|
+
WaitTimeSeconds: this.parameters.WaitTimeSeconds,
|
|
66
|
+
AttributeNames: ["MessageGroupId"],
|
|
67
|
+
MaxNumberOfMessages: this.parameters.maxConsumers > 10 ? 10 : this.parameters.maxConsumers
|
|
68
|
+
};
|
|
69
|
+
let data = await this.sqs.receiveMessage(queueArg);
|
|
70
|
+
data.Messages ?? (data.Messages = []);
|
|
71
|
+
return data.Messages.map(m => ({ ReceiptHandle: m.ReceiptHandle, Message: this.unserialize(m.Body, proto) }));
|
|
97
72
|
}
|
|
98
73
|
/**
|
|
99
74
|
* We will retrieve more than one message on receiveMessage if maxConsumers is higher
|
|
@@ -108,42 +83,36 @@ class SQSQueue extends core_1.Queue {
|
|
|
108
83
|
/**
|
|
109
84
|
* @inheritdoc
|
|
110
85
|
*/
|
|
111
|
-
deleteMessage(receipt) {
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
ReceiptHandle: receipt
|
|
116
|
-
});
|
|
86
|
+
async deleteMessage(receipt) {
|
|
87
|
+
await this.sqs.deleteMessage({
|
|
88
|
+
QueueUrl: this.parameters.queue,
|
|
89
|
+
ReceiptHandle: receipt
|
|
117
90
|
});
|
|
118
91
|
}
|
|
119
92
|
/**
|
|
120
93
|
* @inheritdoc
|
|
121
94
|
*/
|
|
122
|
-
__clean() {
|
|
123
|
-
return
|
|
124
|
-
return this.__cleanWithRetry(false);
|
|
125
|
-
});
|
|
95
|
+
async __clean() {
|
|
96
|
+
return this.__cleanWithRetry(false);
|
|
126
97
|
}
|
|
127
|
-
__cleanWithRetry(fail) {
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
throw err;
|
|
137
|
-
}
|
|
138
|
-
let delay = Math.floor(err.retryDelay * 1100);
|
|
139
|
-
// 10% of margin
|
|
140
|
-
return new Promise(resolve => {
|
|
141
|
-
setTimeout(() => {
|
|
142
|
-
resolve(this.__cleanWithRetry(true));
|
|
143
|
-
}, delay);
|
|
144
|
-
});
|
|
98
|
+
async __cleanWithRetry(fail) {
|
|
99
|
+
try {
|
|
100
|
+
await this.sqs.purgeQueue({
|
|
101
|
+
QueueUrl: this.parameters.queue
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
catch (err) {
|
|
105
|
+
if (fail || err.name !== "AWS.SimpleQueueService.PurgeQueueInProgress") {
|
|
106
|
+
throw err;
|
|
145
107
|
}
|
|
146
|
-
|
|
108
|
+
let delay = Math.floor(err.retryDelay * 1100);
|
|
109
|
+
// 10% of margin
|
|
110
|
+
return new Promise(resolve => {
|
|
111
|
+
setTimeout(() => {
|
|
112
|
+
resolve(this.__cleanWithRetry(true));
|
|
113
|
+
}, delay);
|
|
114
|
+
});
|
|
115
|
+
}
|
|
147
116
|
}
|
|
148
117
|
_getQueueInfosFromUrl() {
|
|
149
118
|
let found = this.parameters.queue.match(/.*sqs\.(.*)\.amazonaws.com\/(\d+)\/(.*)/i);
|
|
@@ -151,7 +120,7 @@ class SQSQueue extends core_1.Queue {
|
|
|
151
120
|
// Check for LocalStack
|
|
152
121
|
found = this.parameters.queue.match(/http:\/\/(localhost):\d+\/(.*)\/(.*)/i);
|
|
153
122
|
if (!found) {
|
|
154
|
-
throw new
|
|
123
|
+
throw new WebdaError("SQS_PARAMETER_MALFORMED", "SQS Queue URL malformed");
|
|
155
124
|
}
|
|
156
125
|
found[1] = "us-east-1";
|
|
157
126
|
}
|
|
@@ -187,12 +156,15 @@ class SQSQueue extends core_1.Queue {
|
|
|
187
156
|
this.parameters.CloudFormation.Queue = this.parameters.CloudFormation.Queue || {};
|
|
188
157
|
resources[this._name + "Queue"] = {
|
|
189
158
|
Type: "AWS::SQS::Queue",
|
|
190
|
-
Properties:
|
|
159
|
+
Properties: {
|
|
160
|
+
...this.parameters.CloudFormation.Queue,
|
|
161
|
+
QueueName,
|
|
162
|
+
Tags: deployer.getDefaultTags(this.parameters.CloudFormation.Queue.Tags)
|
|
163
|
+
}
|
|
191
164
|
};
|
|
192
165
|
// Add any Other resources with prefix of the service
|
|
193
166
|
return resources;
|
|
194
167
|
}
|
|
195
168
|
}
|
|
196
|
-
|
|
197
|
-
exports.SQSQueue = SQSQueue;
|
|
169
|
+
export { SQSQueue };
|
|
198
170
|
//# sourceMappingURL=sqsqueue.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqsqueue.js","sourceRoot":"","sources":["../../src/services/sqsqueue.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sqsqueue.js","sourceRoot":"","sources":["../../src/services/sqsqueue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkD,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC1F,OAAO,EAAkB,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACjF,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC,OAAO,EAAE,oBAAoB,EAA6B,MAAM,SAAS,CAAC;AAE1E,MAAM,OAAO,kBAAmB,SAAQ,oBAAoB,CAAC,eAAe,CAAC;IA8B3E,YAAY,MAAW;QACrB,KAAK,CAAC,MAAM,CAAC,CAAC;QACd,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,IAAI,EAAE,CAAC;QAClD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;IAChC,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,CAAC,OAAO,OAAO,QACnB,SAAQ,KAAW;IAOnB;;OAEG;IACH,cAAc,CAAC,MAAW;QACxB,OAAO,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI;QACR,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI;QACR,IAAI,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC;YAC1C,cAAc,EAAE,CAAC,6BAA6B,EAAE,uCAAuC,CAAC;YACxF,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK;SAChC,CAAC,CAAC;QACH,OAAO,CACL,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,6BAA6B,CAAC,CAAC;YAC1D,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,uCAAuC,CAAC,CAAC,CACrE,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,MAAS;QACzB,MAAM,SAAS,GAA4B;YACzC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK;YAC/B,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;SACpC,CAAC;QACF,IAAI,IAAI,CAAC,UAAU,CAAC,cAAc,EAAE;YAClC,SAAS,CAAC,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC;SAC3D;QACD,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;YAC3C,SAAS,CAAC,sBAAsB,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;SACrG;QACD,MAAM,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc,CAAI,KAAqB;QAC3C,IAAI,QAAQ,GAA0B;YACpC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK;YAC/B,eAAe,EAAE,IAAI,CAAC,UAAU,CAAC,eAAe;YAChD,cAAc,EAAE,CAAC,gBAAgB,CAAC;YAClC,mBAAmB,EAAE,IAAI,CAAC,UAAU,CAAC,YAAY,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY;SAC3F,CAAC;QACF,IAAI,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC;QACnD,IAAI,CAAC,QAAQ,KAAb,IAAI,CAAC,QAAQ,GAAK,EAAE,EAAC;QACrB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;IAChH,CAAC;IAED;;;;;;OAMG;IACH,eAAe;QACb,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,YAAY,GAAG,EAAE,CAAC,CAAC;IACtD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa,CAAC,OAAe;QACjC,MAAM,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC;YAC3B,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK;YAC/B,aAAa,EAAE,OAAO;SACvB,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,OAAO;QACX,OAAO,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,IAAI;QACjC,IAAI;YACF,MAAM,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;gBACxB,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK;aAChC,CAAC,CAAC;SACJ;QAAC,OAAO,GAAG,EAAE;YACZ,IAAI,IAAI,IAAI,GAAG,CAAC,IAAI,KAAK,6CAA6C,EAAE;gBACtE,MAAM,GAAG,CAAC;aACX;YACD,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;YAC9C,gBAAgB;YAChB,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;gBAC3B,UAAU,CAAC,GAAG,EAAE;oBACd,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;gBACvC,CAAC,EAAE,KAAK,CAAC,CAAC;YACZ,CAAC,CAAC,CAAC;SACJ;IACH,CAAC;IAED,qBAAqB;QACnB,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;QACpF,IAAI,CAAC,KAAK,EAAE;YACV,uBAAuB;YACvB,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;YAC7E,IAAI,CAAC,KAAK,EAAE;gBACV,MAAM,IAAI,UAAU,CAAC,yBAAyB,EAAE,yBAAyB,CAAC,CAAC;aAC5E;YACD,KAAK,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC;SACxB;QACD,OAAO;YACL,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;YACnB,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;YAChB,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;SACf,CAAC;IACJ,CAAC;IAED,YAAY;QACV,4BAA4B;QAC5B,IAAI,KAAK,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;QACzC,OAAO;YACL,GAAG,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK;YACvC,MAAM,EAAE,OAAO;YACf,MAAM,EAAE;gBACN,mBAAmB;gBACnB,wBAAwB;gBACxB,oBAAoB;gBACpB,iBAAiB;gBACjB,sBAAsB;aACvB;YACD,QAAQ,EAAE,CAAC,cAAc,GAAG,KAAK,CAAC,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,SAAS,GAAG,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC;SACrF,CAAC;IACJ,CAAC;IAED,iBAAiB,CAAC,QAAgC;QAChD,IAAI,IAAI,CAAC,UAAU,CAAC,kBAAkB,EAAE;YACtC,OAAO,EAAE,CAAC;SACX;QACD,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;QACvD,IAAI,SAAS,GAAG,EAAE,CAAC;QACnB,IAAI,CAAC,UAAU,CAAC,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,IAAI,EAAE,CAAC;QACtE,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,KAAK,IAAI,EAAE,CAAC;QAClF,SAAS,CAAC,IAAI,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG;YAChC,IAAI,EAAE,iBAAiB;YACvB,UAAU,EAAE;gBACV,GAAG,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,KAAK;gBACvC,SAAS;gBACT,IAAI,EAAE,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC;aACzE;SACF,CAAC;QACF,qDAAqD;QACrD,OAAO,SAAS,CAAC;IACnB,CAAC;CACF;AAED,OAAO,EAAE,QAAQ,EAAE,CAAC"}
|