@webda/aws 2.0.0-beta.3 → 2.0.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/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 +3 -1
- package/lib/services/cloudwatchlogger.js +63 -104
- 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 +4 -2
- package/lib/services/dynamodb.js +457 -498
- package/lib/services/dynamodb.js.map +1 -1
- package/lib/services/dynamodb.spec.d.ts +2 -2
- package/lib/services/dynamodb.spec.js +232 -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 +2 -0
- package/lib/services/lambdacaller.js +15 -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.js +168 -190
- 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 +5 -7
- package/lib/services/sqsqueue.js +70 -99
- 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 {
|
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,63 +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
|
-
return this;
|
|
49
|
-
});
|
|
27
|
+
async init() {
|
|
28
|
+
await super.init();
|
|
29
|
+
this.sqs = new SQS(this.parameters);
|
|
30
|
+
return this;
|
|
50
31
|
}
|
|
51
32
|
/**
|
|
52
33
|
* @inheritdoc
|
|
53
34
|
*/
|
|
54
|
-
size() {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
QueueUrl: this.parameters.queue
|
|
59
|
-
});
|
|
60
|
-
return (parseInt(res["Attributes"]["ApproximateNumberOfMessages"]) +
|
|
61
|
-
parseInt(res["Attributes"]["ApproximateNumberOfMessagesNotVisible"]));
|
|
35
|
+
async size() {
|
|
36
|
+
let res = await this.sqs.getQueueAttributes({
|
|
37
|
+
AttributeNames: ["ApproximateNumberOfMessages", "ApproximateNumberOfMessagesNotVisible"],
|
|
38
|
+
QueueUrl: this.parameters.queue
|
|
62
39
|
});
|
|
40
|
+
return (parseInt(res["Attributes"]["ApproximateNumberOfMessages"]) +
|
|
41
|
+
parseInt(res["Attributes"]["ApproximateNumberOfMessagesNotVisible"]));
|
|
63
42
|
}
|
|
64
43
|
/**
|
|
65
44
|
* @inheritdoc
|
|
66
45
|
*/
|
|
67
|
-
sendMessage(params) {
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
yield this.sqs.sendMessage(sqsParams);
|
|
80
|
-
});
|
|
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);
|
|
81
58
|
}
|
|
82
59
|
/**
|
|
83
60
|
* @inheritdoc
|
|
84
61
|
*/
|
|
85
|
-
receiveMessage(proto) {
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
(_a = data.Messages) !== null && _a !== void 0 ? _a : (data.Messages = []);
|
|
96
|
-
return data.Messages.map(m => ({ ReceiptHandle: m.ReceiptHandle, Message: this.unserialize(m.Body, proto) }));
|
|
97
|
-
});
|
|
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) }));
|
|
98
72
|
}
|
|
99
73
|
/**
|
|
100
74
|
* We will retrieve more than one message on receiveMessage if maxConsumers is higher
|
|
@@ -109,42 +83,36 @@ class SQSQueue extends core_1.Queue {
|
|
|
109
83
|
/**
|
|
110
84
|
* @inheritdoc
|
|
111
85
|
*/
|
|
112
|
-
deleteMessage(receipt) {
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
ReceiptHandle: receipt
|
|
117
|
-
});
|
|
86
|
+
async deleteMessage(receipt) {
|
|
87
|
+
await this.sqs.deleteMessage({
|
|
88
|
+
QueueUrl: this.parameters.queue,
|
|
89
|
+
ReceiptHandle: receipt
|
|
118
90
|
});
|
|
119
91
|
}
|
|
120
92
|
/**
|
|
121
93
|
* @inheritdoc
|
|
122
94
|
*/
|
|
123
|
-
__clean() {
|
|
124
|
-
return
|
|
125
|
-
return this.__cleanWithRetry(false);
|
|
126
|
-
});
|
|
95
|
+
async __clean() {
|
|
96
|
+
return this.__cleanWithRetry(false);
|
|
127
97
|
}
|
|
128
|
-
__cleanWithRetry(fail) {
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
throw err;
|
|
138
|
-
}
|
|
139
|
-
let delay = Math.floor(err.retryDelay * 1100);
|
|
140
|
-
// 10% of margin
|
|
141
|
-
return new Promise(resolve => {
|
|
142
|
-
setTimeout(() => {
|
|
143
|
-
resolve(this.__cleanWithRetry(true));
|
|
144
|
-
}, delay);
|
|
145
|
-
});
|
|
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;
|
|
146
107
|
}
|
|
147
|
-
|
|
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
|
+
}
|
|
148
116
|
}
|
|
149
117
|
_getQueueInfosFromUrl() {
|
|
150
118
|
let found = this.parameters.queue.match(/.*sqs\.(.*)\.amazonaws.com\/(\d+)\/(.*)/i);
|
|
@@ -152,7 +120,7 @@ class SQSQueue extends core_1.Queue {
|
|
|
152
120
|
// Check for LocalStack
|
|
153
121
|
found = this.parameters.queue.match(/http:\/\/(localhost):\d+\/(.*)\/(.*)/i);
|
|
154
122
|
if (!found) {
|
|
155
|
-
throw new
|
|
123
|
+
throw new WebdaError("SQS_PARAMETER_MALFORMED", "SQS Queue URL malformed");
|
|
156
124
|
}
|
|
157
125
|
found[1] = "us-east-1";
|
|
158
126
|
}
|
|
@@ -188,12 +156,15 @@ class SQSQueue extends core_1.Queue {
|
|
|
188
156
|
this.parameters.CloudFormation.Queue = this.parameters.CloudFormation.Queue || {};
|
|
189
157
|
resources[this._name + "Queue"] = {
|
|
190
158
|
Type: "AWS::SQS::Queue",
|
|
191
|
-
Properties:
|
|
159
|
+
Properties: {
|
|
160
|
+
...this.parameters.CloudFormation.Queue,
|
|
161
|
+
QueueName,
|
|
162
|
+
Tags: deployer.getDefaultTags(this.parameters.CloudFormation.Queue.Tags)
|
|
163
|
+
}
|
|
192
164
|
};
|
|
193
165
|
// Add any Other resources with prefix of the service
|
|
194
166
|
return resources;
|
|
195
167
|
}
|
|
196
168
|
}
|
|
197
|
-
|
|
198
|
-
exports.SQSQueue = SQSQueue;
|
|
169
|
+
export { SQSQueue };
|
|
199
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":"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"}
|