@hestia-earth/pipeline-utils 0.15.5 → 0.16.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/dist/sns.js CHANGED
@@ -1,15 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.publishSnsMessage = void 0;
4
- const AWS = require("aws-sdk");
4
+ const client_sns_1 = require("@aws-sdk/client-sns");
5
5
  const rxjs_1 = require("rxjs");
6
- const operators_1 = require("rxjs/operators");
7
6
  const log_1 = require("./log");
8
7
  const s3_1 = require("./s3");
9
8
  const utils_1 = require("./utils");
10
9
  const publishSnsMessage = (functionName, params, topicArn = process.env.SNS_TOPIC, extras = {}) => s3_1.isS3Mode
11
- ? (0, rxjs_1.from)(new AWS.SNS()
12
- .publish({
10
+ ? (0, rxjs_1.from)(new client_sns_1.SNSClient({}).send(new client_sns_1.PublishCommand({
13
11
  TopicArn: topicArn,
14
12
  Message: JSON.stringify(params),
15
13
  MessageAttributes: {
@@ -25,11 +23,10 @@ const publishSnsMessage = (functionName, params, topicArn = process.env.SNS_TOPI
25
23
  }
26
24
  ]))
27
25
  }
28
- })
29
- .promise()).pipe((0, operators_1.take)(1), (0, operators_1.map)(res => {
26
+ }))).pipe((0, rxjs_1.take)(1), (0, rxjs_1.map)(res => {
30
27
  (0, log_1.info)(`SNS publish ${functionName}`, { params }, ', params byte size:', (0, utils_1.byteSize)(params), res);
31
28
  return res;
32
- }), (0, operators_1.catchError)(err => {
29
+ }), (0, rxjs_1.catchError)(err => {
33
30
  (0, log_1.error)(`SNS publish ${functionName}`, { params }, ', params byte size:', (0, utils_1.byteSize)(params), err);
34
31
  return (0, rxjs_1.throwError)(err);
35
32
  }))
package/dist/sns.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"sns.js","sourceRoot":"","sources":["../src/sns.ts"],"names":[],"mappings":";;;AAAA,+BAA+B;AAC/B,+BAA4C;AAC5C,8CAAuD;AAEvD,+BAAoC;AACpC,6BAAgD;AAChD,mCAAmC;AAM5B,MAAM,iBAAiB,GAAG,CAC/B,YAAoB,EACpB,MAA4C,EAC5C,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,EAChC,SAAqB,EAAE,EACvB,EAAE,CACF,aAAQ;IACN,CAAC,CAAC,IAAA,WAAI,EACF,IAAI,GAAG,CAAC,GAAG,EAAE;SACV,OAAO,CAAC;QACP,QAAQ,EAAE,QAAQ;QAClB,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;QAC/B,iBAAiB,EAAE;YACjB,YAAY,EAAE;gBACZ,QAAQ,EAAE,QAAQ;gBAClB,WAAW,EAAE,YAAY;aAC1B;YACD,GAAG,MAAM,CAAC,WAAW,CACnB,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;gBACjD,GAAG;gBACH;oBACE,QAAQ,EAAE,QAAQ;oBAClB,WAAW,EAAE,KAAK;iBACnB;aACF,CAAC,CACH;SACF;KACF,CAAC;SACD,OAAO,EAAE,CACb,CAAC,IAAI,CACJ,IAAA,gBAAI,EAAC,CAAC,CAAC,EACP,IAAA,eAAG,EAAC,GAAG,CAAC,EAAE;QACR,IAAA,UAAI,EAAC,eAAe,YAAY,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,qBAAqB,EAAE,IAAA,gBAAQ,EAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;QAC9F,OAAO,GAAG,CAAC;IACb,CAAC,CAAC,EACF,IAAA,sBAAU,EAAC,GAAG,CAAC,EAAE;QACf,IAAA,WAAK,EAAC,eAAe,YAAY,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,qBAAqB,EAAE,IAAA,gBAAQ,EAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;QAC/F,OAAO,IAAA,iBAAU,EAAC,GAAG,CAAC,CAAC;IACzB,CAAC,CAAC,CACH;IACH,CAAC,CAAC,IAAA,SAAE,EAAC,IAAI,CAAC,CAAC;AAxCF,QAAA,iBAAiB,qBAwCf"}
1
+ {"version":3,"file":"sns.js","sourceRoot":"","sources":["../src/sns.ts"],"names":[],"mappings":";;;AAAA,oDAAgE;AAChE,+BAAmE;AAEnE,+BAAoC;AACpC,6BAAgD;AAChD,mCAAmC;AAM5B,MAAM,iBAAiB,GAAG,CAC/B,YAAoB,EACpB,MAA4C,EAC5C,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,EAChC,SAAqB,EAAE,EACvB,EAAE,CACF,aAAQ;IACN,CAAC,CAAC,IAAA,WAAI,EACF,IAAI,sBAAS,CAAC,EAAE,CAAC,CAAC,IAAI,CACpB,IAAI,2BAAc,CAAC;QACjB,QAAQ,EAAE,QAAQ;QAClB,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;QAC/B,iBAAiB,EAAE;YACjB,YAAY,EAAE;gBACZ,QAAQ,EAAE,QAAQ;gBAClB,WAAW,EAAE,YAAY;aAC1B;YACD,GAAG,MAAM,CAAC,WAAW,CACnB,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;gBACjD,GAAG;gBACH;oBACE,QAAQ,EAAE,QAAQ;oBAClB,WAAW,EAAE,KAAK;iBACnB;aACF,CAAC,CACH;SACF;KACF,CAAC,CACH,CACF,CAAC,IAAI,CACJ,IAAA,WAAI,EAAC,CAAC,CAAC,EACP,IAAA,UAAG,EAAC,GAAG,CAAC,EAAE;QACR,IAAA,UAAI,EAAC,eAAe,YAAY,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,qBAAqB,EAAE,IAAA,gBAAQ,EAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;QAC9F,OAAO,GAAG,CAAC;IACb,CAAC,CAAC,EACF,IAAA,iBAAU,EAAC,GAAG,CAAC,EAAE;QACf,IAAA,WAAK,EAAC,eAAe,YAAY,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,qBAAqB,EAAE,IAAA,gBAAQ,EAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;QAC/F,OAAO,IAAA,iBAAU,EAAC,GAAG,CAAC,CAAC;IACzB,CAAC,CAAC,CACH;IACH,CAAC,CAAC,IAAA,SAAE,EAAC,IAAI,CAAC,CAAC;AAxCF,QAAA,iBAAiB,qBAwCf"}
package/dist/sqs.d.ts CHANGED
@@ -1,7 +1,7 @@
1
- import * as AWS from 'aws-sdk';
1
+ import { SendMessageCommandInput } from '@aws-sdk/client-sqs';
2
2
  import { IFunctionParam } from './s3';
3
3
  type attributes = {
4
4
  [key: string]: string;
5
5
  };
6
- export declare const sendSqsMessage: (functionName: string, params: IFunctionParam | Record<string, any>, queueUrl?: string, extras?: attributes, requestParams?: Partial<Omit<AWS.SQS.Types.SendMessageRequest, 'QueueUrl' | 'MessageBody' | 'MessageAttributes'>>) => import("rxjs").Observable<any>;
6
+ export declare const sendSqsMessage: (functionName: string, params: IFunctionParam | Record<string, any>, queueUrl?: string, extras?: attributes, requestParams?: Partial<Omit<SendMessageCommandInput, 'QueueUrl' | 'MessageBody' | 'MessageAttributes'>>) => import("rxjs").Observable<import("@aws-sdk/client-sqs").SendMessageCommandOutput>;
7
7
  export {};
package/dist/sqs.js CHANGED
@@ -1,14 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.sendSqsMessage = void 0;
4
- const AWS = require("aws-sdk");
4
+ const client_sqs_1 = require("@aws-sdk/client-sqs");
5
5
  const rxjs_1 = require("rxjs");
6
- const operators_1 = require("rxjs/operators");
7
6
  const log_1 = require("./log");
8
7
  const s3_1 = require("./s3");
9
8
  const sendSqsMessage = (functionName, params, queueUrl = process.env.SQS_URL, extras = {}, requestParams = {}) => s3_1.isS3Mode
10
- ? (0, rxjs_1.from)(new AWS.SQS({ region: s3_1.region })
11
- .sendMessage({
9
+ ? (0, rxjs_1.from)(new client_sqs_1.SQSClient({ region: s3_1.region }).send(new client_sqs_1.SendMessageCommand({
12
10
  QueueUrl: queueUrl,
13
11
  MessageBody: JSON.stringify(params),
14
12
  MessageAttributes: {
@@ -25,8 +23,7 @@ const sendSqsMessage = (functionName, params, queueUrl = process.env.SQS_URL, ex
25
23
  ]))
26
24
  },
27
25
  ...requestParams
28
- })
29
- .promise()).pipe((0, operators_1.take)(1), (0, operators_1.map)(res => {
26
+ }))).pipe((0, rxjs_1.take)(1), (0, rxjs_1.map)(res => {
30
27
  (0, log_1.info)(`SQS send message ${functionName}`, { params }, res);
31
28
  return res;
32
29
  }))
package/dist/sqs.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"sqs.js","sourceRoot":"","sources":["../src/sqs.ts"],"names":[],"mappings":";;;AAAA,+BAA+B;AAC/B,+BAAgC;AAChC,8CAA2C;AAE3C,+BAA6B;AAC7B,6BAAwD;AAMjD,MAAM,cAAc,GAAG,CAC5B,YAAoB,EACpB,MAA4C,EAC5C,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,EAC9B,SAAqB,EAAE,EACvB,gBAAmH,EAAE,EACrH,EAAE,CACF,aAAQ;IACN,CAAC,CAAC,IAAA,WAAI,EACF,IAAI,GAAG,CAAC,GAAG,CAAC,EAAE,MAAM,EAAN,WAAM,EAAE,CAAC;SACpB,WAAW,CAAC;QACX,QAAQ,EAAE,QAAQ;QAClB,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;QACnC,iBAAiB,EAAE;YACjB,YAAY,EAAE;gBACZ,QAAQ,EAAE,QAAQ;gBAClB,WAAW,EAAE,YAAY;aAC1B;YACD,GAAG,MAAM,CAAC,WAAW,CACnB,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;gBACjD,GAAG;gBACH;oBACE,QAAQ,EAAE,QAAQ;oBAClB,WAAW,EAAE,KAAK;iBACnB;aACF,CAAC,CACH;SACF;QACD,GAAG,aAAa;KACjB,CAAC;SACD,OAAO,EAAE,CACb,CAAC,IAAI,CACJ,IAAA,gBAAI,EAAC,CAAC,CAAC,EACP,IAAA,eAAG,EAAC,GAAG,CAAC,EAAE;QACR,IAAA,UAAI,EAAC,oBAAoB,YAAY,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC;QAC1D,OAAO,GAAG,CAAC;IACb,CAAC,CAAC,CACH;IACH,CAAC,CAAC,IAAA,SAAE,EAAC,IAAI,CAAC,CAAC;AAtCF,QAAA,cAAc,kBAsCZ"}
1
+ {"version":3,"file":"sqs.js","sourceRoot":"","sources":["../src/sqs.ts"],"names":[],"mappings":";;;AAAA,oDAA6F;AAC7F,+BAA2C;AAE3C,+BAA6B;AAC7B,6BAAwD;AAMjD,MAAM,cAAc,GAAG,CAC5B,YAAoB,EACpB,MAA4C,EAC5C,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,EAC9B,SAAqB,EAAE,EACvB,gBAA0G,EAAE,EAC5G,EAAE,CACF,aAAQ;IACN,CAAC,CAAC,IAAA,WAAI,EACF,IAAI,sBAAS,CAAC,EAAE,MAAM,EAAN,WAAM,EAAE,CAAC,CAAC,IAAI,CAC5B,IAAI,+BAAkB,CAAC;QACrB,QAAQ,EAAE,QAAQ;QAClB,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;QACnC,iBAAiB,EAAE;YACjB,YAAY,EAAE;gBACZ,QAAQ,EAAE,QAAQ;gBAClB,WAAW,EAAE,YAAY;aAC1B;YACD,GAAG,MAAM,CAAC,WAAW,CACnB,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;gBACjD,GAAG;gBACH;oBACE,QAAQ,EAAE,QAAQ;oBAClB,WAAW,EAAE,KAAK;iBACnB;aACF,CAAC,CACH;SACF;QACD,GAAG,aAAa;KACjB,CAAC,CACH,CACF,CAAC,IAAI,CACJ,IAAA,WAAI,EAAC,CAAC,CAAC,EACP,IAAA,UAAG,EAAC,GAAG,CAAC,EAAE;QACR,IAAA,UAAI,EAAC,oBAAoB,YAAY,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,CAAC,CAAC;QAC1D,OAAO,GAAG,CAAC;IACb,CAAC,CAAC,CACH;IACH,CAAC,CAAC,IAAA,SAAE,EAAC,IAAI,CAAC,CAAC;AAtCF,QAAA,cAAc,kBAsCZ"}
@@ -1 +1 @@
1
- export declare const streamJSONToFile: (filepath: string, data: Record<string, any>) => Promise<unknown>;
1
+ export declare const streamJSONToFile: (filepath: string, data: Record<string, any>) => Promise<void>;
@@ -34,7 +34,7 @@ const stringify = (writeStream, data) => data !== null && typeof data === 'objec
34
34
  : writeStream.write(JSON.stringify(data), encoding);
35
35
  const streamJSONToFile = (filepath, data) => new Promise((resolve, reject) => {
36
36
  const writeStream = (0, fs_1.createWriteStream)(filepath);
37
- writeStream.on('finish', resolve);
37
+ writeStream.on('finish', () => resolve());
38
38
  writeStream.on('error', reject);
39
39
  stringify(writeStream, data);
40
40
  writeStream.end();
@@ -1 +1 @@
1
- {"version":3,"file":"write-json-stream.js","sourceRoot":"","sources":["../src/write-json-stream.ts"],"names":[],"mappings":";;;AAAA,2BAAoD;AAEpD,MAAM,QAAQ,GAAG,OAAO,CAAC;AAEzB,MAAM,WAAW,GAAG,CAAC,KAAU,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,WAAW,CAAC;AAEjE,MAAM,cAAc,GAAG,CAAC,WAAwB,EAAE,IAAW,EAAE,EAAE;IAC/D,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAEjC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QAChD,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;YAChB,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACnC,CAAC;QACD,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IACH,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AACnC,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,WAAwB,EAAE,IAAyB,EAAE,EAAE;IAC9E,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAEjC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;SACjB,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;SAC7C,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE;QAC/B,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;YAChB,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACnC,CAAC;QACD,WAAW,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,EAAE,QAAQ,CAAC,CAAC;QACzC,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IACL,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AACnC,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,WAAwB,EAAE,IAAS,EAAE,EAAE,CACxD,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;IACvC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QACnB,CAAC,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC;QACnC,CAAC,CAAC,eAAe,CAAC,WAAW,EAAE,IAAI,CAAC;IACtC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC;AAEjD,MAAM,gBAAgB,GAAG,CAAC,QAAgB,EAAE,IAAyB,EAAE,EAAE,CAC9E,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;IAC9B,MAAM,WAAW,GAAG,IAAA,sBAAiB,EAAC,QAAQ,CAAC,CAAC;IAChD,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAClC,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAChC,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IAC7B,WAAW,CAAC,GAAG,EAAE,CAAC;AACpB,CAAC,CAAC,CAAC;AAPQ,QAAA,gBAAgB,oBAOxB"}
1
+ {"version":3,"file":"write-json-stream.js","sourceRoot":"","sources":["../src/write-json-stream.ts"],"names":[],"mappings":";;;AAAA,2BAAoD;AAEpD,MAAM,QAAQ,GAAG,OAAO,CAAC;AAEzB,MAAM,WAAW,GAAG,CAAC,KAAU,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,WAAW,CAAC;AAEjE,MAAM,cAAc,GAAG,CAAC,WAAwB,EAAE,IAAW,EAAE,EAAE;IAC/D,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAEjC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QAChD,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;YAChB,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACnC,CAAC;QACD,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IACH,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AACnC,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CAAC,WAAwB,EAAE,IAAyB,EAAE,EAAE;IAC9E,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAEjC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC;SACjB,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;SAC7C,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE;QAC/B,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;YAChB,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QACnC,CAAC;QACD,WAAW,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,EAAE,QAAQ,CAAC,CAAC;QACzC,SAAS,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;IACL,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AACnC,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,WAAwB,EAAE,IAAS,EAAE,EAAE,CACxD,IAAI,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;IACvC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QACnB,CAAC,CAAC,cAAc,CAAC,WAAW,EAAE,IAAI,CAAC;QACnC,CAAC,CAAC,eAAe,CAAC,WAAW,EAAE,IAAI,CAAC;IACtC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC;AAEjD,MAAM,gBAAgB,GAAG,CAAC,QAAgB,EAAE,IAAyB,EAAE,EAAE,CAC9E,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;IACpC,MAAM,WAAW,GAAG,IAAA,sBAAiB,EAAC,QAAQ,CAAC,CAAC;IAChD,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;IAC1C,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAChC,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;IAC7B,WAAW,CAAC,GAAG,EAAE,CAAC;AACpB,CAAC,CAAC,CAAC;AAPQ,QAAA,gBAAgB,oBAOxB"}
package/jest.setup.js ADDED
@@ -0,0 +1,15 @@
1
+ const defaultEnv = (key, value) => {
2
+ process.env[key] = process.env[key] || value;
3
+ return process.env[key];
4
+ };
5
+
6
+ defaultEnv('TMP_DIR', './');
7
+ defaultEnv('ELASTICSEARCH_URL', 'http://localhost:9200');
8
+ defaultEnv('ELASTICSEARCH_INDEX', 'test');
9
+ // enable search by normalized field
10
+ defaultEnv('SEARCH_NORMALIZED', 'true');
11
+ // enable search by API
12
+ defaultEnv('API_URL', 'http://localhost:3001');
13
+ defaultEnv('API_ACCESS_TOKEN', 'token');
14
+ // enable cache requests
15
+ defaultEnv('CACHE_MAX_SIZE', '1');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hestia-earth/pipeline-utils",
3
- "version": "0.15.5",
3
+ "version": "0.16.1",
4
4
  "description": "Utilities for running pipelines",
5
5
  "main": "dist/index.js",
6
6
  "typings": "dist/index.d.ts",
@@ -8,8 +8,8 @@
8
8
  "build": "rimraf ./dist && tsc -p tsconfig.dist.json",
9
9
  "lint": "eslint \"src/**/*.ts\"",
10
10
  "lint:fix": "npm run lint -- --fix",
11
- "test": "nyc mocha \"src/**/*.spec.ts\"",
12
- "test:watch": "npm run test -- --watch ",
11
+ "test": "jest",
12
+ "test:watch": "jest --watch",
13
13
  "release": "standard-version",
14
14
  "postrelease": "git push origin master --follow-tags"
15
15
  },
@@ -28,9 +28,15 @@
28
28
  },
29
29
  "homepage": "https://gitlab.com/hestia-earth/hestia-pipeline-utils#readme",
30
30
  "dependencies": {
31
+ "@aws-sdk/client-ec2": "^3.525.0",
32
+ "@aws-sdk/client-lambda": "^3.525.0",
33
+ "@aws-sdk/client-s3": "^3.525.0",
34
+ "@aws-sdk/client-sns": "^3.525.0",
35
+ "@aws-sdk/client-sqs": "^3.525.0",
36
+ "@aws-sdk/lib-storage": "^3.525.0",
37
+ "@aws-sdk/util-utf8-node": "^3.259.0",
31
38
  "@elastic/elasticsearch": "7.13.0",
32
39
  "@slack/web-api": "^7.7.0",
33
- "aws-sdk": "^2.1692.0",
34
40
  "axios": "^1.4.0",
35
41
  "bson": "^4.7.2",
36
42
  "lodash.get": "^4.4.2",
@@ -38,7 +44,7 @@
38
44
  "lodash.pick": "^4.4.0",
39
45
  "memory-cache": "^0.2.0",
40
46
  "mongodb": "^3.7.4",
41
- "rxjs": "^6.6.7"
47
+ "rxjs": "^7.8.1"
42
48
  },
43
49
  "peerDependencies": {
44
50
  "@hestia-earth/api": ">=0.21.0",
@@ -55,26 +61,22 @@
55
61
  "@hestia-earth/schema": "^30.3.2",
56
62
  "@hestia-earth/utils": "^0.13.9",
57
63
  "@types/aws-lambda": "^8.10.130",
58
- "@types/chai": "^4.3.11",
64
+ "@types/jest": "^30.0.0",
59
65
  "@types/lodash.get": "^4.4.9",
60
66
  "@types/lodash.omit": "^4.5.9",
61
67
  "@types/lodash.pick": "^4.4.9",
62
- "@types/mocha": "^10.0.6",
63
68
  "@types/mongodb": "^3.6.20",
64
- "@types/node": "^18.19.64",
69
+ "@types/node": "^22.19.3",
65
70
  "@typescript-eslint/eslint-plugin": "^5.62.0",
66
71
  "@typescript-eslint/parser": "^5.62.0",
67
- "chai": "^4.3.10",
68
72
  "dotenv": "^16.4.7",
69
73
  "eslint": "^7.32.0",
70
74
  "eslint-plugin-jsdoc": "^30.7.13",
71
75
  "husky": "^4.3.8",
72
- "mocha": "^10.2.0",
73
- "nyc": "^15.1.0",
76
+ "jest": "^30.2.0",
74
77
  "prettier": "^3.1.1",
75
- "sinon": "^15.2.0",
76
- "source-map-support": "^0.5.21",
77
78
  "standard-version": "^9.5.0",
79
+ "ts-jest": "^29.4.6",
78
80
  "ts-node": "^10.9.2",
79
81
  "typescript": "^5.3.3"
80
82
  },
@@ -86,6 +88,6 @@
86
88
  "prettier": "@hestia-earth/eslint-config/prettier.json",
87
89
  "engines": {
88
90
  "npm": ">=8.0.0",
89
- "node": ">=16.0.0"
91
+ "node": ">=22.0.0"
90
92
  }
91
93
  }
package/src/ec2.ts CHANGED
@@ -1,6 +1,5 @@
1
- import * as AWS from 'aws-sdk';
2
- import { from, of } from 'rxjs';
3
- import { take, map } from 'rxjs/operators';
1
+ import { EC2Client, StartInstancesCommand } from '@aws-sdk/client-ec2';
2
+ import { from, of, take, map } from 'rxjs';
4
3
 
5
4
  import { debug } from './log';
6
5
  import { isS3Mode } from './s3';
@@ -10,11 +9,11 @@ const defaultInstanceIds = (process.env.START_INSTANCE_ID || '').split(',');
10
9
  export const startInstances = (functionName: string, instanceIds = defaultInstanceIds) =>
11
10
  isS3Mode
12
11
  ? from(
13
- new AWS.EC2()
14
- .startInstances({
12
+ new EC2Client({}).send(
13
+ new StartInstancesCommand({
15
14
  InstanceIds: instanceIds
16
15
  })
17
- .promise()
16
+ )
18
17
  ).pipe(
19
18
  take(1),
20
19
  map(res => {
package/src/find-nodes.ts CHANGED
@@ -5,8 +5,7 @@ const cache = require('memory-cache');
5
5
  import { SchemaType, JSON as HestiaJson, isExpandable, NodeType, isTypeValid, isTypeNode } from '@hestia-earth/schema';
6
6
  import { definitions, uniqueProperties, extendableProperties } from '@hestia-earth/json-schema';
7
7
  import { reduceUndefinedValues } from '@hestia-earth/utils';
8
- import { from, of } from 'rxjs';
9
- import { filter, map, mergeMap, reduce, toArray } from 'rxjs/operators';
8
+ import { from, of, filter, map, mergeMap, reduce, toArray } from 'rxjs';
10
9
 
11
10
  import { debug, error } from './log';
12
11
  import { client, indexName } from './es';
package/src/lambda.ts CHANGED
@@ -1,6 +1,6 @@
1
- import * as AWS from 'aws-sdk';
2
- import { from, of } from 'rxjs';
3
- import { take, map } from 'rxjs/operators';
1
+ import { LambdaClient, InvokeCommand } from '@aws-sdk/client-lambda';
2
+ import { from, of, take, map } from 'rxjs';
3
+ import { fromUtf8 } from '@aws-sdk/util-utf8-node';
4
4
 
5
5
  import { info } from './log';
6
6
  import { IFunctionParam, isS3Mode } from './s3';
@@ -8,14 +8,14 @@ import { IFunctionParam, isS3Mode } from './s3';
8
8
  export const invoke = (functionName: string, params: IFunctionParam | Record<string, any>) =>
9
9
  isS3Mode
10
10
  ? from(
11
- new AWS.Lambda()
12
- .invoke({
11
+ new LambdaClient({}).send(
12
+ new InvokeCommand({
13
13
  FunctionName: functionName,
14
14
  InvocationType: 'Event',
15
15
  LogType: 'None',
16
- Payload: JSON.stringify(params)
16
+ Payload: fromUtf8(JSON.stringify(params))
17
17
  })
18
- .promise()
18
+ )
19
19
  ).pipe(
20
20
  take(1),
21
21
  map(res => {
package/src/progress.ts CHANGED
@@ -1,5 +1,4 @@
1
- import { catchError, mergeMap } from 'rxjs/operators';
2
- import { of, throwError } from 'rxjs';
1
+ import { catchError, mergeMap, of, throwError } from 'rxjs';
3
2
  import { FileProgress, fileToExt, HestiaExtensions } from '@hestia-earth/api';
4
3
  import { NodeType } from '@hestia-earth/schema';
5
4
 
package/src/s3.ts CHANGED
@@ -1,16 +1,46 @@
1
1
  /* eslint-disable complexity */
2
- import * as AWS from 'aws-sdk';
2
+ import {
3
+ S3Client,
4
+ GetObjectCommand,
5
+ GetObjectCommandInput,
6
+ PutObjectCommand,
7
+ PutObjectCommandInput,
8
+ DeleteObjectsCommand,
9
+ CopyObjectCommand,
10
+ waitUntilObjectExists,
11
+ HeadObjectCommand,
12
+ DeleteObjectCommand,
13
+ ListObjectsV2Command,
14
+ MetadataDirective,
15
+ _Object,
16
+ ObjectIdentifier,
17
+ DeletedObject
18
+ } from '@aws-sdk/client-s3';
19
+ import { Upload } from '@aws-sdk/lib-storage';
3
20
  import { createReadStream, unlinkSync } from 'fs';
4
21
  import { join } from 'path';
5
- import { PassThrough } from 'stream';
6
- import { Subject, Observable, from, of } from 'rxjs';
7
- import { bufferCount, catchError, concatMap, delay, map, mergeMap, take, tap, toArray } from 'rxjs/operators';
22
+ import {
23
+ from,
24
+ of,
25
+ Observable,
26
+ Subject,
27
+ catchError,
28
+ map,
29
+ mergeMap,
30
+ tap,
31
+ take,
32
+ bufferCount,
33
+ concatMap,
34
+ delay,
35
+ toArray
36
+ } from 'rxjs';
8
37
  import { filenameFromPath, fileToExt, sizeInMb } from '@hestia-earth/api';
9
38
 
10
39
  import { debug } from './log';
11
40
  import * as local from './local';
12
41
  import { stripBOM } from './utils';
13
42
  import { streamJSONToFile } from './write-json-stream';
43
+ import { PassThrough, Readable } from 'stream';
14
44
 
15
45
  const encoding = 'utf-8';
16
46
  export const isS3Mode = (process.env.SOURCE_MODE || 's3') === 's3';
@@ -29,79 +59,83 @@ export interface IFunctionParam {
29
59
  /**
30
60
  * Unsafe, but needed otherwise it is impossible to run unit tests
31
61
  */
32
- let _s3: AWS.S3;
62
+ let _s3: S3Client;
33
63
 
34
64
  export const getS3 = () => {
35
- _s3 = _s3 || new AWS.S3();
65
+ _s3 = _s3 || new S3Client({ region });
36
66
  return _s3;
37
67
  };
38
68
 
39
- export const getObject = ({ Key, ...params }: AWS.S3.GetObjectRequest) =>
40
- from(
41
- getS3()
42
- .getObject({ ...params, Key: decodeURI(Key) })
43
- .promise()
44
- ).pipe(
45
- take(1),
46
- map(({ Body }) => Body.toString())
47
- );
69
+ const getBody = async (command: GetObjectCommand) => {
70
+ const response = await getS3().send(command);
71
+ return response.Body.transformToString();
72
+ };
73
+
74
+ export const getObject = ({ Key, Bucket, ...params }: GetObjectCommandInput) =>
75
+ from(getBody(new GetObjectCommand({ ...params, Key: decodeURI(Key), Bucket }))).pipe(map(Body => Body.toString()));
48
76
 
49
- export const putObject = ({ Key, ...params }: AWS.S3.PutObjectRequest) =>
77
+ export const putObject = ({ Key, Bucket, ...params }: PutObjectCommandInput) =>
78
+ from(getS3().send(new PutObjectCommand({ ...params, Key: decodeURI(Key), Bucket })));
79
+
80
+ const execDeleteObjects = (Bucket: string, Objects: ObjectIdentifier[]) =>
50
81
  from(
51
- getS3()
52
- .putObject({ ...params, Key: decodeURI(Key) })
53
- .promise()
82
+ getS3().send(
83
+ new DeleteObjectsCommand({
84
+ Bucket,
85
+ Delete: { Objects }
86
+ })
87
+ )
54
88
  ).pipe(
55
89
  take(1),
56
- map(res => (res.$response.data || '').toString())
90
+ map(res => res.Deleted || [])
57
91
  );
58
92
 
59
- export const deleteObjects = (objects: AWS.S3.Object[], Bucket = bucket) =>
93
+ export const deleteObjects = (objects: ObjectIdentifier[], Bucket = bucket) =>
60
94
  objects.length === 0
61
- ? of('')
95
+ ? of([] as DeletedObject[])
62
96
  : from(objects).pipe(
63
97
  // max objects to delete is 1000
64
98
  bufferCount(1000),
65
99
  // delay each operation by 500ms to avoid "Slow down" errors
66
100
  concatMap(values => of(values.map(({ Key }) => ({ Key }))).pipe(delay(500))),
67
- mergeMap(Objects =>
68
- from(getS3().deleteObjects({ Bucket, Delete: { Objects } }).promise()).pipe(
69
- take(1),
70
- map(res => (res.$response.data || '').toString())
71
- )
72
- ),
101
+ mergeMap(Objects => execDeleteObjects(Bucket, Objects)),
73
102
  toArray(),
74
- map(res => res.join(''))
103
+ map(res => res.flat())
75
104
  );
76
105
 
77
106
  export const copyObject = (
78
107
  fromParams: { bucket: string; key: string },
79
108
  toParams: { bucket: string; key: string },
80
- Metadata: any = {},
81
- MetadataDirective = 'REPLACE'
109
+ metadata: any = {},
110
+ metadataDirective: MetadataDirective = 'REPLACE'
82
111
  ) =>
83
112
  from(
84
- getS3()
85
- .copyObject({
113
+ getS3().send(
114
+ new CopyObjectCommand({
86
115
  Bucket: toParams.bucket,
87
116
  Key: decodeURI(toParams.key),
88
117
  CopySource: `${fromParams.bucket}/${fromParams.key}`,
89
- Metadata,
90
- MetadataDirective
118
+ Metadata: metadata,
119
+ MetadataDirective: metadataDirective
91
120
  })
92
- .promise()
93
- ).pipe(
94
- take(1),
95
- map(res => (res.$response.data || '').toString())
121
+ )
96
122
  );
97
123
 
98
- export const loadStream = (key: string, Bucket = bucket) =>
124
+ export const loadStream = (key: string, Bucket = bucket): Readable => {
125
+ const stream = new PassThrough();
126
+
127
+ const command = new GetObjectCommand({
128
+ Bucket,
129
+ Key: decodeURI(key)
130
+ });
131
+
99
132
  getS3()
100
- .getObject({
101
- Bucket,
102
- Key: decodeURI(key)
103
- })
104
- .createReadStream();
133
+ .send(command)
134
+ .then(response => (response.Body as Readable).pipe(stream))
135
+ .catch(err => stream.emit('error', err));
136
+
137
+ return stream;
138
+ };
105
139
 
106
140
  export const loadFile = (key: string, Bucket = bucket) => {
107
141
  const stream = loadStream(key, Bucket);
@@ -183,24 +217,7 @@ export const uploadText = (key: string, data: string, Bucket = bucket) =>
183
217
  })
184
218
  : local.uploadText(Bucket)(key, data);
185
219
 
186
- /**
187
- * Use this method to upload large JSON files.
188
- *
189
- * @param Key
190
- * @param data
191
- * @param Bucket
192
- * @returns
193
- */
194
- export const uploadStreamJSON = (Key: string, data: Record<string, any>, Bucket = bucket) => {
195
- const stream = new PassThrough();
196
-
197
- const uploader = getS3().upload({
198
- Bucket,
199
- Key,
200
- Body: stream,
201
- ContentType: 'application/json'
202
- });
203
-
220
+ const uploadDataToStream = (stream: PassThrough, data: Record<string, any>) => {
204
221
  // beginning of JSON object
205
222
  stream.write('{', encoding);
206
223
 
@@ -224,8 +241,30 @@ export const uploadStreamJSON = (Key: string, data: Record<string, any>, Bucket
224
241
  // end of JSON object
225
242
  stream.write('}', encoding);
226
243
  stream.end();
244
+ };
245
+
246
+ export const uploadStreamJSON = (Key: string, data: Record<string, any>, Bucket = bucket) => {
247
+ const stream = new PassThrough();
248
+
249
+ const uploader = new Upload({
250
+ client: getS3(),
251
+ params: {
252
+ Bucket,
253
+ Key,
254
+ Body: stream,
255
+ ContentType: 'application/json'
256
+ }
257
+ });
258
+
259
+ process.nextTick(() => {
260
+ try {
261
+ uploadDataToStream(stream, data);
262
+ } catch (err) {
263
+ stream.destroy(err as Error);
264
+ }
265
+ });
227
266
 
228
- return from(uploader.promise());
267
+ return from(uploader.done());
229
268
  };
230
269
 
231
270
  /**
@@ -243,23 +282,21 @@ export const uploadFileStream = (
243
282
  type = 'application/json',
244
283
  Bucket = bucket,
245
284
  partSize = 100 * 1024 * 1024
246
- ) =>
247
- from(
248
- getS3()
249
- .upload(
250
- {
251
- Bucket,
252
- Key: key,
253
- Body: createReadStream(filepath),
254
- ContentType: type
255
- },
256
- {
257
- partSize,
258
- queueSize: 1
259
- }
260
- )
261
- .promise()
262
- );
285
+ ) => {
286
+ const fileStream = createReadStream(filepath);
287
+ const upload = new Upload({
288
+ client: getS3(),
289
+ params: {
290
+ Bucket,
291
+ Key: key,
292
+ Body: fileStream,
293
+ ContentType: type
294
+ },
295
+ partSize,
296
+ queueSize: 1
297
+ });
298
+ return from(upload.done());
299
+ };
263
300
 
264
301
  export const uploadJSON = (key: string, data: any, type = 'application/json', Bucket = bucket) =>
265
302
  isS3Mode
@@ -283,26 +320,27 @@ export const uploadJSONLarge = (key: string, data: any, type = 'application/json
283
320
  export const waitObjectCreated = (key: string, Bucket = bucket) =>
284
321
  isS3Mode
285
322
  ? from(
286
- getS3()
287
- .waitFor('objectExists', {
323
+ waitUntilObjectExists(
324
+ {
325
+ client: getS3(),
326
+ maxWaitTime: 20
327
+ },
328
+ {
288
329
  Bucket,
289
330
  Key: decodeURI(key)
290
- })
291
- .promise()
292
- ).pipe(
293
- take(1),
294
- map(() => true)
295
- )
331
+ }
332
+ )
333
+ ).pipe(map(() => true))
296
334
  : of(true);
297
335
 
298
336
  export const headObject = (key: string, Bucket = bucket) =>
299
337
  from(
300
- getS3()
301
- .headObject({
338
+ getS3().send(
339
+ new HeadObjectCommand({
302
340
  Bucket,
303
341
  Key: decodeURI(key)
304
342
  })
305
- .promise()
343
+ )
306
344
  );
307
345
 
308
346
  export const lastModified = (key: string, Bucket = bucket) =>
@@ -318,8 +356,7 @@ export const fileExists = (key: string, Bucket = bucket) =>
318
356
  isS3Mode
319
357
  ? headObject(key, Bucket).pipe(
320
358
  map(() => true),
321
- catchError(() => of(false)),
322
- take(1)
359
+ catchError(() => of(false))
323
360
  )
324
361
  : local.fileExists(Bucket)(key);
325
362
 
@@ -327,37 +364,43 @@ export const fileSize = (key: string, Bucket = bucket) =>
327
364
  isS3Mode
328
365
  ? headObject(key, Bucket).pipe(
329
366
  map(({ ContentLength }) => ContentLength),
330
- catchError(() => of(undefined as number)),
331
- take(1)
367
+ catchError(() => of(undefined as number))
332
368
  )
333
369
  : local.fileSize(Bucket)(key);
334
370
 
335
371
  export const deleteObject = (key: string, Bucket = bucket) =>
336
372
  isS3Mode
337
373
  ? from(
338
- getS3()
339
- .deleteObject({
374
+ getS3().send(
375
+ new DeleteObjectCommand({
340
376
  Bucket,
341
377
  Key: decodeURI(key)
342
378
  })
343
- .promise()
379
+ )
344
380
  )
345
381
  : local.deleteFile(Bucket)(key);
346
382
 
347
- export const listFolder = async (Prefix = '', Bucket = bucket, nextToken?: string): Promise<AWS.S3.Object[]> => {
348
- const { Contents, IsTruncated, NextContinuationToken } = await getS3()
349
- .listObjectsV2({
383
+ export const listFolder = async (Prefix = '', Bucket = bucket, nextToken?: string): Promise<_Object[]> => {
384
+ const { Contents, IsTruncated, NextContinuationToken } = await getS3().send(
385
+ new ListObjectsV2Command({
350
386
  Bucket,
351
387
  Prefix,
352
388
  ContinuationToken: nextToken,
353
389
  MaxKeys: 1000
354
390
  })
355
- .promise();
356
- return [...Contents, ...(IsTruncated ? await listFolder(Prefix, bucket, NextContinuationToken) : [])];
391
+ );
392
+ return [...(Contents || []), ...(IsTruncated ? await listFolder(Prefix, bucket, NextContinuationToken) : [])];
357
393
  };
358
394
 
359
395
  export const listFolders = async (Bucket = bucket) =>
360
- (await getS3().listObjectsV2({ Bucket, Delimiter: '/' }).promise()).CommonPrefixes?.map(({ Prefix }) => Prefix);
396
+ (
397
+ await getS3().send(
398
+ new ListObjectsV2Command({
399
+ Bucket,
400
+ Delimiter: '/'
401
+ })
402
+ )
403
+ ).CommonPrefixes?.map(({ Prefix }) => Prefix);
361
404
 
362
405
  export const largeFileSize = +(process.env.LARGE_SIZE_MB || '100');
363
406