@webda/aws 4.0.0-beta.1 → 4.0.0-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. package/README.md +64 -7
  2. package/lib/index.d.ts +1 -0
  3. package/lib/index.d.ts.map +1 -0
  4. package/lib/index.js.map +1 -1
  5. package/lib/services/aws-parameters.d.ts +33 -0
  6. package/lib/services/aws-parameters.d.ts.map +1 -0
  7. package/lib/services/aws-parameters.js +18 -0
  8. package/lib/services/aws-parameters.js.map +1 -0
  9. package/lib/services/awscommands.service.d.ts +39 -0
  10. package/lib/services/awscommands.service.d.ts.map +1 -0
  11. package/lib/services/awscommands.service.js +127 -0
  12. package/lib/services/awscommands.service.js.map +1 -0
  13. package/lib/services/cloudwatchlogger.service.d.ts +131 -0
  14. package/lib/services/cloudwatchlogger.service.d.ts.map +1 -0
  15. package/lib/services/{cloudwatchlogger.js → cloudwatchlogger.service.js} +66 -34
  16. package/lib/services/cloudwatchlogger.service.js.map +1 -0
  17. package/lib/services/contributors.d.ts +37 -0
  18. package/lib/services/contributors.d.ts.map +1 -0
  19. package/lib/services/contributors.js +2 -0
  20. package/lib/services/contributors.js.map +1 -0
  21. package/lib/services/dynamodb.service.d.ts +297 -0
  22. package/lib/services/dynamodb.service.d.ts.map +1 -0
  23. package/lib/services/dynamodb.service.js +985 -0
  24. package/lib/services/dynamodb.service.js.map +1 -0
  25. package/lib/services/index.d.ts +12 -31
  26. package/lib/services/index.d.ts.map +1 -0
  27. package/lib/services/index.js +11 -8
  28. package/lib/services/index.js.map +1 -1
  29. package/lib/services/lambdacaller.service.d.ts +81 -0
  30. package/lib/services/lambdacaller.service.d.ts.map +1 -0
  31. package/lib/services/lambdacaller.service.js +75 -0
  32. package/lib/services/lambdacaller.service.js.map +1 -0
  33. package/lib/services/lambdaserver.service.d.ts +127 -0
  34. package/lib/services/lambdaserver.service.d.ts.map +1 -0
  35. package/lib/services/lambdaserver.service.js +294 -0
  36. package/lib/services/lambdaserver.service.js.map +1 -0
  37. package/lib/services/{route53.d.ts → route53.service.d.ts} +21 -11
  38. package/lib/services/route53.service.d.ts.map +1 -0
  39. package/lib/services/{route53.js → route53.service.js} +35 -38
  40. package/lib/services/route53.service.js.map +1 -0
  41. package/lib/services/s3binary.service.d.ts +215 -0
  42. package/lib/services/s3binary.service.d.ts.map +1 -0
  43. package/lib/services/{s3binary.js → s3binary.service.js} +113 -74
  44. package/lib/services/s3binary.service.js.map +1 -0
  45. package/lib/services/secretsmanager.service.d.ts +102 -0
  46. package/lib/services/secretsmanager.service.d.ts.map +1 -0
  47. package/lib/services/{secretsmanager.js → secretsmanager.service.js} +42 -24
  48. package/lib/services/secretsmanager.service.js.map +1 -0
  49. package/lib/services/{sqsqueue.d.ts → sqsqueue.service.d.ts} +60 -34
  50. package/lib/services/sqsqueue.service.d.ts.map +1 -0
  51. package/lib/services/{sqsqueue.js → sqsqueue.service.js} +60 -35
  52. package/lib/services/sqsqueue.service.js.map +1 -0
  53. package/package.json +59 -65
  54. package/webda.module.json +738 -377
  55. package/lib/deployers/cloudformation.d.ts +0 -316
  56. package/lib/deployers/cloudformation.js +0 -837
  57. package/lib/deployers/cloudformation.js.map +0 -1
  58. package/lib/deployers/cloudformation.spec.d.ts +0 -1
  59. package/lib/deployers/cloudformation.spec.js +0 -530
  60. package/lib/deployers/cloudformation.spec.js.map +0 -1
  61. package/lib/deployers/index.d.ts +0 -254
  62. package/lib/deployers/index.js +0 -543
  63. package/lib/deployers/index.js.map +0 -1
  64. package/lib/deployers/index.spec.d.ts +0 -8
  65. package/lib/deployers/index.spec.js +0 -595
  66. package/lib/deployers/index.spec.js.map +0 -1
  67. package/lib/deployers/lambda-entrypoint.d.ts +0 -1
  68. package/lib/deployers/lambda-entrypoint.js +0 -11
  69. package/lib/deployers/lambda-entrypoint.js.map +0 -1
  70. package/lib/deployers/lambdapackager.d.ts +0 -27
  71. package/lib/deployers/lambdapackager.js +0 -26
  72. package/lib/deployers/lambdapackager.js.map +0 -1
  73. package/lib/deployers/lambdapackager.spec.d.ts +0 -1
  74. package/lib/deployers/lambdapackager.spec.js +0 -44
  75. package/lib/deployers/lambdapackager.spec.js.map +0 -1
  76. package/lib/index.spec.d.ts +0 -10
  77. package/lib/index.spec.js +0 -42
  78. package/lib/index.spec.js.map +0 -1
  79. package/lib/services/aws-mixin.d.ts +0 -24
  80. package/lib/services/aws-mixin.js +0 -18
  81. package/lib/services/aws-mixin.js.map +0 -1
  82. package/lib/services/cloudwatchlogger.d.ts +0 -81
  83. package/lib/services/cloudwatchlogger.js.map +0 -1
  84. package/lib/services/cloudwatchlogger.spec.d.ts +0 -1
  85. package/lib/services/cloudwatchlogger.spec.js +0 -104
  86. package/lib/services/cloudwatchlogger.spec.js.map +0 -1
  87. package/lib/services/dynamodb.d.ts +0 -173
  88. package/lib/services/dynamodb.js +0 -711
  89. package/lib/services/dynamodb.js.map +0 -1
  90. package/lib/services/dynamodb.spec.d.ts +0 -23
  91. package/lib/services/dynamodb.spec.js +0 -339
  92. package/lib/services/dynamodb.spec.js.map +0 -1
  93. package/lib/services/lambdacaller.d.ts +0 -68
  94. package/lib/services/lambdacaller.js +0 -63
  95. package/lib/services/lambdacaller.js.map +0 -1
  96. package/lib/services/lambdacaller.spec.d.ts +0 -1
  97. package/lib/services/lambdacaller.spec.js +0 -70
  98. package/lib/services/lambdacaller.spec.js.map +0 -1
  99. package/lib/services/lambdaserver.d.ts +0 -86
  100. package/lib/services/lambdaserver.js +0 -264
  101. package/lib/services/lambdaserver.js.map +0 -1
  102. package/lib/services/lambdaserver.spec.d.ts +0 -1
  103. package/lib/services/lambdaserver.spec.js +0 -417
  104. package/lib/services/lambdaserver.spec.js.map +0 -1
  105. package/lib/services/route53.js.map +0 -1
  106. package/lib/services/route53.spec.d.ts +0 -1
  107. package/lib/services/route53.spec.js +0 -102
  108. package/lib/services/route53.spec.js.map +0 -1
  109. package/lib/services/s3binary.d.ts +0 -162
  110. package/lib/services/s3binary.js.map +0 -1
  111. package/lib/services/s3binary.spec.d.ts +0 -1
  112. package/lib/services/s3binary.spec.js +0 -269
  113. package/lib/services/s3binary.spec.js.map +0 -1
  114. package/lib/services/secretsmanager.d.ts +0 -80
  115. package/lib/services/secretsmanager.js.map +0 -1
  116. package/lib/services/secretsmanager.spec.d.ts +0 -1
  117. package/lib/services/secretsmanager.spec.js +0 -66
  118. package/lib/services/secretsmanager.spec.js.map +0 -1
  119. package/lib/services/sqsqueue.js.map +0 -1
  120. package/lib/services/sqsqueue.spec.d.ts +0 -1
  121. package/lib/services/sqsqueue.spec.js +0 -152
  122. package/lib/services/sqsqueue.spec.js.map +0 -1
  123. package/lib/shell.d.ts +0 -12
  124. package/lib/shell.js +0 -42
  125. package/lib/shell.js.map +0 -1
  126. package/webda.shell.json +0 -11
@@ -0,0 +1,102 @@
1
+ import { SecretsManager } from "@aws-sdk/client-secrets-manager";
2
+ import { ConfigurationProvider, Service, ServiceParameters } from "@webda/core";
3
+ import { AWSServiceParameters } from "./aws-parameters.js";
4
+ /**
5
+ * AWS SecretsManager parameters
6
+ */
7
+ export declare class AWSSecretsManagerParameters extends ServiceParameters implements AWSServiceParameters {
8
+ /**
9
+ * Custom endpoint (localstack, minio, ...)
10
+ */
11
+ endpoint?: string;
12
+ /**
13
+ * Static credentials, default to the AWS environment variables
14
+ */
15
+ credentials?: {
16
+ accessKeyId: string;
17
+ secretAccessKey: string;
18
+ sessionToken?: string;
19
+ };
20
+ /**
21
+ * AWS region
22
+ * @default "us-east-1"
23
+ */
24
+ region?: string;
25
+ /**
26
+ * @override
27
+ * @param params - raw parameters
28
+ * @returns this
29
+ */
30
+ load(params?: any): this;
31
+ }
32
+ /**
33
+ * Use AWS SecretsManager as a configuration provider and secret storage
34
+ *
35
+ * @WebdaModda
36
+ */
37
+ export default class AWSSecretsManager<T extends AWSSecretsManagerParameters = AWSSecretsManagerParameters> extends Service<T> implements ConfigurationProvider {
38
+ _client: SecretsManager;
39
+ /**
40
+ * Create the AWS client
41
+ * @override
42
+ */
43
+ computeParameters(): void;
44
+ /**
45
+ * SecretsManager cannot notify changes
46
+ * @param _id - configuration id
47
+ * @param _callback - change callback
48
+ * @returns false
49
+ */
50
+ canTriggerConfiguration(_id: string, _callback: () => void): boolean;
51
+ /**
52
+ * Retrieve the configuration stored in a secret
53
+ * @param id - secret id
54
+ * @returns the secret content
55
+ */
56
+ getConfiguration(id: string): Promise<{
57
+ [key: string]: any;
58
+ }>;
59
+ /**
60
+ * Create a new secret on AWS SecretsManager
61
+ *
62
+ * @param id - secret name
63
+ * @param values - secret content
64
+ * @param params - additional createSecret parameters
65
+ */
66
+ create(id: string, values?: any, params?: any): Promise<void>;
67
+ /**
68
+ * Delete a secret
69
+ *
70
+ * @param SecretId to delete
71
+ * @param RecoveryWindowInDays - days before the secret is deleted
72
+ * @param ForceDeleteWithoutRecovery - delete immediately
73
+ */
74
+ delete(SecretId: string, RecoveryWindowInDays?: number, ForceDeleteWithoutRecovery?: boolean): Promise<void>;
75
+ /**
76
+ * Store data in a AWS secret
77
+ *
78
+ * @param SecretId - secret id
79
+ * @param value - secret content
80
+ */
81
+ put(SecretId: string, value: any): Promise<void>;
82
+ /**
83
+ * Return SecretValue
84
+ *
85
+ * @param SecretId - secret id
86
+ * @returns JSON.parse of SecretString
87
+ */
88
+ get(SecretId: string): Promise<any>;
89
+ /**
90
+ * IAM policy required by the service
91
+ * @param accountId - AWS account id
92
+ * @returns the policy statement
93
+ */
94
+ getARNPolicy(accountId: string): {
95
+ Sid: string;
96
+ Effect: string;
97
+ Action: string[];
98
+ Resource: string[];
99
+ };
100
+ }
101
+ export { AWSSecretsManager };
102
+ //# sourceMappingURL=secretsmanager.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secretsmanager.service.d.ts","sourceRoot":"","sources":["../../src/services/secretsmanager.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtF,OAAO,EAAE,qBAAqB,EAAE,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChF,OAAO,EAAE,oBAAoB,EAAqB,MAAM,qBAAqB,CAAC;AAE9E;;GAEG;AACH,qBAAa,2BAA4B,SAAQ,iBAAkB,YAAW,oBAAoB;IAChG;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,WAAW,CAAC,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACtF;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;;OAIG;IACH,IAAI,CAAC,MAAM,GAAE,GAAQ,GAAG,IAAI,CAI3B;CACF;AAED;;;;GAIG;AACH,MAAM,CAAC,OAAO,OAAO,iBAAiB,CAAC,CAAC,SAAS,2BAA2B,GAAG,2BAA2B,CACxG,SAAQ,OAAO,CAAC,CAAC,CACjB,YAAW,qBAAqB;IAEhC,OAAO,EAAE,cAAc,CAAC;IAExB;;;OAGG;IACH,iBAAiB,SAGhB;IAED;;;;;OAKG;IACH,uBAAuB,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,IAAI,WAEzD;IAED;;;;OAIG;IACG,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAA;KAAE,CAAC,CAElE;IAED;;;;;;OAMG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,GAAE,GAAQ,EAAE,MAAM,GAAE,GAAQ,iBAI1D;IAED;;;;;;OAMG;IACG,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,oBAAoB,GAAE,MAAU,EAAE,0BAA0B,GAAE,OAAe,iBAY3G;IAED;;;;;OAKG;IACG,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,iBAKrC;IAED;;;;;OAKG;IACG,GAAG,CAAC,QAAQ,EAAE,MAAM,gBAKzB;IAED;;;;OAIG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM;QAG1B,GAAG;QACH,MAAM;QACN,MAAM;QACN,QAAQ;MAEX;CACF;AAED,OAAO,EAAE,iBAAiB,EAAE,CAAC"}
@@ -1,32 +1,48 @@
1
1
  import { SecretsManager } from "@aws-sdk/client-secrets-manager";
2
2
  import { Service, ServiceParameters } from "@webda/core";
3
- import { AWSServiceParameters } from "./aws-mixin.js";
4
- export class AWSSecretsManagerParameters extends AWSServiceParameters(ServiceParameters) {
5
- }
3
+ import { loadAWSParameters } from "./aws-parameters.js";
6
4
  /**
7
- * @WebdaModda
5
+ * AWS SecretsManager parameters
8
6
  */
9
- export default class AWSSecretsManager extends Service {
7
+ export class AWSSecretsManagerParameters extends ServiceParameters {
10
8
  /**
11
- * @inheritdoc
9
+ * @override
10
+ * @param params - raw parameters
11
+ * @returns this
12
12
  */
13
- loadParameters(params) {
14
- return new AWSSecretsManagerParameters(params);
13
+ load(params = {}) {
14
+ super.load(params);
15
+ loadAWSParameters(this);
16
+ return this;
15
17
  }
18
+ }
19
+ /**
20
+ * Use AWS SecretsManager as a configuration provider and secret storage
21
+ *
22
+ * @WebdaModda
23
+ */
24
+ export default class AWSSecretsManager extends Service {
16
25
  /**
17
- * @inheritdoc
26
+ * Create the AWS client
27
+ * @override
18
28
  */
19
29
  computeParameters() {
30
+ super.computeParameters();
20
31
  this._client = new SecretsManager(this.parameters);
21
32
  }
22
33
  /**
23
- * @inheritdoc
34
+ * SecretsManager cannot notify changes
35
+ * @param _id - configuration id
36
+ * @param _callback - change callback
37
+ * @returns false
24
38
  */
25
39
  canTriggerConfiguration(_id, _callback) {
26
40
  return false;
27
41
  }
28
42
  /**
29
- * @inheritdoc
43
+ * Retrieve the configuration stored in a secret
44
+ * @param id - secret id
45
+ * @returns the secret content
30
46
  */
31
47
  async getConfiguration(id) {
32
48
  return this.get(id);
@@ -34,9 +50,9 @@ export default class AWSSecretsManager extends Service {
34
50
  /**
35
51
  * Create a new secret on AWS SecretsManager
36
52
  *
37
- * @param id
38
- * @param values
39
- * @param params
53
+ * @param id - secret name
54
+ * @param values - secret content
55
+ * @param params - additional createSecret parameters
40
56
  */
41
57
  async create(id, values = {}, params = {}) {
42
58
  params.Name = id;
@@ -47,8 +63,8 @@ export default class AWSSecretsManager extends Service {
47
63
  * Delete a secret
48
64
  *
49
65
  * @param SecretId to delete
50
- * @param RecoveryWindowInDays
51
- * @param ForceDeleteWithoutRecovery
66
+ * @param RecoveryWindowInDays - days before the secret is deleted
67
+ * @param ForceDeleteWithoutRecovery - delete immediately
52
68
  */
53
69
  async delete(SecretId, RecoveryWindowInDays = 7, ForceDeleteWithoutRecovery = false) {
54
70
  let params = {
@@ -66,8 +82,8 @@ export default class AWSSecretsManager extends Service {
66
82
  /**
67
83
  * Store data in a AWS secret
68
84
  *
69
- * @param SecretId
70
- * @param value
85
+ * @param SecretId - secret id
86
+ * @param value - secret content
71
87
  */
72
88
  async put(SecretId, value) {
73
89
  await this._client.putSecretValue({
@@ -78,22 +94,24 @@ export default class AWSSecretsManager extends Service {
78
94
  /**
79
95
  * Return SecretValue
80
96
  *
81
- * @param SecretId
97
+ * @param SecretId - secret id
82
98
  * @returns JSON.parse of SecretString
83
99
  */
84
100
  async get(SecretId) {
85
- let res = await this._client.getSecretValue({
101
+ const res = await this._client.getSecretValue({
86
102
  SecretId
87
103
  });
88
104
  return JSON.parse(res.SecretString);
89
105
  }
90
106
  /**
91
- * @inheritdoc
107
+ * IAM policy required by the service
108
+ * @param accountId - AWS account id
109
+ * @returns the policy statement
92
110
  */
93
111
  getARNPolicy(accountId) {
94
- let region = this.parameters.region || "us-east-1";
112
+ const region = this.parameters.region || "us-east-1";
95
113
  return {
96
- Sid: this.constructor.name + this._name,
114
+ Sid: this.constructor.name + this.getName(),
97
115
  Effect: "Allow",
98
116
  Action: ["secretsmanager:*"],
99
117
  Resource: ["arn:aws:secretsmanager:" + region + ":" + accountId + ":secret:*"]
@@ -101,4 +119,4 @@ export default class AWSSecretsManager extends Service {
101
119
  }
102
120
  }
103
121
  export { AWSSecretsManager };
104
- //# sourceMappingURL=secretsmanager.js.map
122
+ //# sourceMappingURL=secretsmanager.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secretsmanager.service.js","sourceRoot":"","sources":["../../src/services/secretsmanager.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAuB,cAAc,EAAE,MAAM,iCAAiC,CAAC;AACtF,OAAO,EAAyB,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChF,OAAO,EAAwB,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE9E;;GAEG;AACH,MAAM,OAAO,2BAA4B,SAAQ,iBAAiB;IAehE;;;;OAIG;IACH,IAAI,CAAC,MAAM,GAAQ,EAAE;QACnB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnB,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,CAAC,OAAO,OAAO,iBACnB,SAAQ,OAAU;IAKlB;;;OAGG;IACH,iBAAiB;QACf,KAAK,CAAC,iBAAiB,EAAE,CAAC;QAC1B,IAAI,CAAC,OAAO,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACrD,CAAC;IAED;;;;;OAKG;IACH,uBAAuB,CAAC,GAAW,EAAE,SAAqB;QACxD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;OAIG;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,MAAM,GAAQ,EAAE,EAAE,MAAM,GAAQ,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,oBAAoB,GAAW,CAAC,EAAE,0BAA0B,GAAY,KAAK;QAC1G,IAAI,MAAM,GAAwB;YAChC,oBAAoB;YACpB,QAAQ;SACT,CAAC;QACF,IAAI,0BAA0B,EAAE,CAAC;YAC/B,MAAM,GAAG;gBACP,QAAQ;gBACR,0BAA0B;aAC3B,CAAC;QACJ,CAAC;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,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC;YAC5C,QAAQ;SACT,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACtC,CAAC;IAED;;;;OAIG;IACH,YAAY,CAAC,SAAiB;QAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,WAAW,CAAC;QACrD,OAAO;YACL,GAAG,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE;YAC3C,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,32 +1,33 @@
1
1
  import { SQS } from "@aws-sdk/client-sqs";
2
2
  import { MessageReceipt, Queue, QueueParameters } from "@webda/core";
3
- import CloudFormationDeployer from "../deployers/cloudformation.js";
4
- import { CloudFormationContributor } from "./index.js";
5
- declare const SQSQueueParameters_base: {
6
- new (...args: any[]): {
7
- endpoint?: string;
8
- credentials?: {
9
- accessKeyId: string;
10
- secretAccessKey: string;
11
- sessionToken?: string;
12
- };
13
- region?: string;
14
- type: string;
15
- url?: string;
16
- openapi?: import("@webda/core/lib/router").OpenAPIWebdaDefinition;
3
+ import { AWSServiceParameters } from "./aws-parameters.js";
4
+ import type { CloudFormationContributor, CloudFormationDeployerInfo } from "./contributors.js";
5
+ /**
6
+ * SQS Queue parameters
7
+ */
8
+ export declare class SQSQueueParameters extends QueueParameters implements AWSServiceParameters {
9
+ /**
10
+ * Custom endpoint (localstack, minio, ...)
11
+ */
12
+ endpoint?: string;
13
+ /**
14
+ * Static credentials, default to the AWS environment variables
15
+ */
16
+ credentials?: {
17
+ accessKeyId: string;
18
+ secretAccessKey: string;
19
+ sessionToken?: string;
17
20
  };
18
- } & typeof QueueParameters;
19
- export declare class SQSQueueParameters extends SQSQueueParameters_base {
21
+ /**
22
+ * AWS region
23
+ * @default "us-east-1"
24
+ */
25
+ region?: string;
20
26
  /**
21
27
  * Time to wait pending for an item
22
28
  * @default 20
23
29
  */
24
30
  WaitTimeSeconds?: number;
25
- /**
26
- * Endpoint to pass to the AWS client
27
- * Useful for localstack
28
- */
29
- endpoint?: string;
30
31
  /**
31
32
  * Queue URL
32
33
  * @default ""
@@ -45,7 +46,12 @@ export declare class SQSQueueParameters extends SQSQueueParameters_base {
45
46
  * Any additional CloudFormation parameters
46
47
  */
47
48
  CloudFormation?: any;
48
- constructor(params: any);
49
+ /**
50
+ * @override
51
+ * @param params - raw parameters
52
+ * @returns this
53
+ */
54
+ load(params?: any): this;
49
55
  }
50
56
  /**
51
57
  * Implement SQS as queue for Webda
@@ -58,23 +64,24 @@ export default class SQSQueue<T = any, K extends SQSQueueParameters = SQSQueuePa
58
64
  */
59
65
  sqs: SQS;
60
66
  /**
61
- * @inheritdoc
62
- */
63
- loadParameters(params: any): SQSQueueParameters;
64
- /**
65
- * @inheritdoc
67
+ * Create the SQS client
68
+ * @returns this
66
69
  */
67
70
  init(): Promise<this>;
68
71
  /**
69
- * @inheritdoc
72
+ * @override
73
+ * @returns approximate number of messages in the queue
70
74
  */
71
75
  size(): Promise<number>;
72
76
  /**
73
- * @inheritdoc
77
+ * @override
78
+ * @param params - the message to send
74
79
  */
75
80
  sendMessage(params: T): Promise<void>;
76
81
  /**
77
- * @inheritdoc
82
+ * @override
83
+ * @param proto - optional prototype to rehydrate the payload into
84
+ * @returns the received messages
78
85
  */
79
86
  receiveMessage<L>(proto?: {
80
87
  new (): L;
@@ -84,29 +91,48 @@ export default class SQSQueue<T = any, K extends SQSQueueParameters = SQSQueuePa
84
91
  * therefore we need to divide by 10 (the max number of group messaged) to get the number
85
92
  * of consumers
86
93
  *
87
- * @returns
94
+ * @returns the number of consumers
88
95
  */
89
96
  getMaxConsumers(): number;
90
97
  /**
91
- * @inheritdoc
98
+ * @override
99
+ * @param receipt - the message receipt handle
92
100
  */
93
101
  deleteMessage(receipt: string): Promise<void>;
94
102
  /**
95
- * @inheritdoc
103
+ * Purge the queue (used in tests)
96
104
  */
97
105
  __clean(): Promise<void>;
106
+ /**
107
+ * Purge the queue, retrying once if a purge is already in progress
108
+ * @param fail - throw on any error
109
+ */
98
110
  private __cleanWithRetry;
111
+ /**
112
+ * Parse the queue url
113
+ * @returns the account id, region and queue name
114
+ */
99
115
  _getQueueInfosFromUrl(): {
100
116
  accountId: string;
101
117
  region: string;
102
118
  name: string;
103
119
  };
120
+ /**
121
+ * IAM policy required by the service
122
+ * @returns the policy statement
123
+ */
104
124
  getARNPolicy(): {
105
125
  Sid: string;
106
126
  Effect: string;
107
127
  Action: string[];
108
128
  Resource: string[];
109
129
  };
110
- getCloudFormation(deployer: CloudFormationDeployer): {};
130
+ /**
131
+ * CloudFormation resources for the queue
132
+ * @param deployer - the deployer requesting the resources
133
+ * @returns the resources
134
+ */
135
+ getCloudFormation(deployer: CloudFormationDeployerInfo): {};
111
136
  }
112
137
  export { SQSQueue };
138
+ //# sourceMappingURL=sqsqueue.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqsqueue.service.d.ts","sourceRoot":"","sources":["../../src/services/sqsqueue.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkD,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAC1F,OAAO,EAAE,cAAc,EAAE,KAAK,EAAE,eAAe,EAAc,MAAM,aAAa,CAAC;AAEjF,OAAO,EAAE,oBAAoB,EAAqB,MAAM,qBAAqB,CAAC;AAC9E,OAAO,KAAK,EAAE,yBAAyB,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAE/F;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,eAAgB,YAAW,oBAAoB;IACrF;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,WAAW,CAAC,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACtF;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB;;;OAGG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B;;OAEG;IACH,cAAc,CAAC,EAAE,GAAG,CAAC;IAErB;;;;OAIG;IACH,IAAI,CAAC,MAAM,GAAE,GAAQ,GAAG,IAAI,CAM3B;CACF;AAED;;;;GAIG;AACH,MAAM,CAAC,OAAO,OAAO,QAAQ,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,SAAS,kBAAkB,GAAG,kBAAkB,CACtF,SAAQ,KAAK,CAAC,CAAC,EAAE,CAAC,CAClB,YAAW,yBAAyB;IAEpC;;OAEG;IACH,GAAG,EAAE,GAAG,CAAC;IAET;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAI1B;IAED;;;OAGG;IACG,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAS5B;IAED;;;OAGG;IACG,WAAW,CAAC,MAAM,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAa1C;IAED;;;;OAIG;IACG,cAAc,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE;QAAE,QAAQ,CAAC,CAAA;KAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAY3E;IAED;;;;;;OAMG;IACH,eAAe,IAAI,MAAM,CAExB;IAED;;;OAGG;IACG,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAKlD;IAED;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAE7B;IAED;;;OAGG;YACW,gBAAgB;IAgB9B;;;OAGG;IACH,qBAAqB;QAWjB,SAAS;QACT,MAAM;QACN,IAAI;MAEP;IAED;;;OAGG;IACH,YAAY;QAIR,GAAG;QACH,MAAM;QACN,MAAM;QAON,QAAQ;MAEX;IAED;;;;OAIG;IACH,iBAAiB,CAAC,QAAQ,EAAE,0BAA0B,MAkBrD;CACF;AAED,OAAO,EAAE,QAAQ,EAAE,CAAC"}
@@ -1,12 +1,22 @@
1
1
  import { SQS } from "@aws-sdk/client-sqs";
2
2
  import { Queue, QueueParameters, WebdaError } from "@webda/core";
3
3
  import { createHash } from "crypto";
4
- import { AWSServiceParameters } from "./index.js";
5
- export class SQSQueueParameters extends AWSServiceParameters(QueueParameters) {
6
- constructor(params) {
7
- super(params);
8
- this.WaitTimeSeconds = this.WaitTimeSeconds ?? 20;
9
- this.queue = this.queue ?? "";
4
+ import { loadAWSParameters } from "./aws-parameters.js";
5
+ /**
6
+ * SQS Queue parameters
7
+ */
8
+ export class SQSQueueParameters extends QueueParameters {
9
+ /**
10
+ * @override
11
+ * @param params - raw parameters
12
+ * @returns this
13
+ */
14
+ load(params = {}) {
15
+ super.load(params);
16
+ loadAWSParameters(this);
17
+ this.WaitTimeSeconds ?? (this.WaitTimeSeconds = 20);
18
+ this.queue ?? (this.queue = "");
19
+ return this;
10
20
  }
11
21
  }
12
22
  /**
@@ -16,13 +26,8 @@ export class SQSQueueParameters extends AWSServiceParameters(QueueParameters) {
16
26
  */
17
27
  export default class SQSQueue extends Queue {
18
28
  /**
19
- * @inheritdoc
20
- */
21
- loadParameters(params) {
22
- return new SQSQueueParameters(params);
23
- }
24
- /**
25
- * @inheritdoc
29
+ * Create the SQS client
30
+ * @returns this
26
31
  */
27
32
  async init() {
28
33
  await super.init();
@@ -30,10 +35,11 @@ export default class SQSQueue extends Queue {
30
35
  return this;
31
36
  }
32
37
  /**
33
- * @inheritdoc
38
+ * @override
39
+ * @returns approximate number of messages in the queue
34
40
  */
35
41
  async size() {
36
- let res = await this.sqs.getQueueAttributes({
42
+ const res = await this.sqs.getQueueAttributes({
37
43
  AttributeNames: ["ApproximateNumberOfMessages", "ApproximateNumberOfMessagesNotVisible"],
38
44
  QueueUrl: this.parameters.queue
39
45
  });
@@ -41,9 +47,11 @@ export default class SQSQueue extends Queue {
41
47
  parseInt(res["Attributes"]["ApproximateNumberOfMessagesNotVisible"]));
42
48
  }
43
49
  /**
44
- * @inheritdoc
50
+ * @override
51
+ * @param params - the message to send
45
52
  */
46
53
  async sendMessage(params) {
54
+ this.metrics.messages_sent.inc();
47
55
  const sqsParams = {
48
56
  QueueUrl: this.parameters.queue,
49
57
  MessageBody: JSON.stringify(params)
@@ -57,15 +65,17 @@ export default class SQSQueue extends Queue {
57
65
  await this.sqs.sendMessage(sqsParams);
58
66
  }
59
67
  /**
60
- * @inheritdoc
68
+ * @override
69
+ * @param proto - optional prototype to rehydrate the payload into
70
+ * @returns the received messages
61
71
  */
62
72
  async receiveMessage(proto) {
63
- let queueArg = {
73
+ const queueArg = {
64
74
  QueueUrl: this.parameters.queue,
65
75
  WaitTimeSeconds: this.parameters.WaitTimeSeconds,
66
76
  MaxNumberOfMessages: this.parameters.maxConsumers > 10 ? 10 : this.parameters.maxConsumers
67
77
  };
68
- let data = await this.sqs.receiveMessage(queueArg);
78
+ const data = await this.sqs.receiveMessage(queueArg);
69
79
  data.Messages ?? (data.Messages = []);
70
80
  return data.Messages.map(m => ({
71
81
  ReceiptHandle: m.ReceiptHandle,
@@ -77,13 +87,14 @@ export default class SQSQueue extends Queue {
77
87
  * therefore we need to divide by 10 (the max number of group messaged) to get the number
78
88
  * of consumers
79
89
  *
80
- * @returns
90
+ * @returns the number of consumers
81
91
  */
82
92
  getMaxConsumers() {
83
93
  return Math.ceil(this.parameters.maxConsumers / 10);
84
94
  }
85
95
  /**
86
- * @inheritdoc
96
+ * @override
97
+ * @param receipt - the message receipt handle
87
98
  */
88
99
  async deleteMessage(receipt) {
89
100
  await this.sqs.deleteMessage({
@@ -92,11 +103,15 @@ export default class SQSQueue extends Queue {
92
103
  });
93
104
  }
94
105
  /**
95
- * @inheritdoc
106
+ * Purge the queue (used in tests)
96
107
  */
97
108
  async __clean() {
98
- return this.__cleanWithRetry(false);
109
+ await this.__cleanWithRetry(false);
99
110
  }
111
+ /**
112
+ * Purge the queue, retrying once if a purge is already in progress
113
+ * @param fail - throw on any error
114
+ */
100
115
  async __cleanWithRetry(fail) {
101
116
  try {
102
117
  await this.sqs.purgeQueue({
@@ -107,15 +122,16 @@ export default class SQSQueue extends Queue {
107
122
  if (fail || err.name !== "AWS.SimpleQueueService.PurgeQueueInProgress") {
108
123
  throw err;
109
124
  }
110
- let delay = Math.floor(err.retryDelay * 1100);
125
+ const delay = Math.floor(err.retryDelay * 1100);
111
126
  // 10% of margin
112
- return new Promise(resolve => {
113
- setTimeout(() => {
114
- resolve(this.__cleanWithRetry(true));
115
- }, delay);
116
- });
127
+ await new Promise(resolve => setTimeout(resolve, delay));
128
+ await this.__cleanWithRetry(true);
117
129
  }
118
130
  }
131
+ /**
132
+ * Parse the queue url
133
+ * @returns the account id, region and queue name
134
+ */
119
135
  _getQueueInfosFromUrl() {
120
136
  let found = this.parameters.queue.match(/.*sqs\.(.*)\.amazonaws.com\/(\d+)\/(.*)/i);
121
137
  if (!found) {
@@ -132,11 +148,15 @@ export default class SQSQueue extends Queue {
132
148
  name: found[3]
133
149
  };
134
150
  }
151
+ /**
152
+ * IAM policy required by the service
153
+ * @returns the policy statement
154
+ */
135
155
  getARNPolicy() {
136
156
  // Parse this._params.queue;
137
- let queue = this._getQueueInfosFromUrl();
157
+ const queue = this._getQueueInfosFromUrl();
138
158
  return {
139
- Sid: this.constructor.name + this._name,
159
+ Sid: this.constructor.name + this.getName(),
140
160
  Effect: "Allow",
141
161
  Action: [
142
162
  "sqs:DeleteMessage",
@@ -148,15 +168,20 @@ export default class SQSQueue extends Queue {
148
168
  Resource: ["arn:aws:sqs:" + queue.region + ":" + queue.accountId + ":" + queue.name]
149
169
  };
150
170
  }
171
+ /**
172
+ * CloudFormation resources for the queue
173
+ * @param deployer - the deployer requesting the resources
174
+ * @returns the resources
175
+ */
151
176
  getCloudFormation(deployer) {
152
177
  if (this.parameters.CloudFormationSkip) {
153
178
  return {};
154
179
  }
155
- let { name: QueueName } = this._getQueueInfosFromUrl();
156
- let resources = {};
180
+ const { name: QueueName } = this._getQueueInfosFromUrl();
181
+ const resources = {};
157
182
  this.parameters.CloudFormation = this.parameters.CloudFormation || {};
158
183
  this.parameters.CloudFormation.Queue = this.parameters.CloudFormation.Queue || {};
159
- resources[this._name + "Queue"] = {
184
+ resources[this.getName() + "Queue"] = {
160
185
  Type: "AWS::SQS::Queue",
161
186
  Properties: {
162
187
  ...this.parameters.CloudFormation.Queue,
@@ -169,4 +194,4 @@ export default class SQSQueue extends Queue {
169
194
  }
170
195
  }
171
196
  export { SQSQueue };
172
- //# sourceMappingURL=sqsqueue.js.map
197
+ //# sourceMappingURL=sqsqueue.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sqsqueue.service.js","sourceRoot":"","sources":["../../src/services/sqsqueue.service.ts"],"names":[],"mappings":"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"}