@devrev/ts-adaas 1.0.0 → 1.0.2

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/README.md CHANGED
@@ -2,6 +2,10 @@
2
2
 
3
3
  ## Release Notes
4
4
 
5
+ #### v1.0.1
6
+
7
+ - Bug fixes and improvements in logging.
8
+
5
9
  #### v1.0.0
6
10
 
7
11
  - Allow extractions to use full lambda runtime and gracefully handle execution context timeout.
@@ -15,7 +15,7 @@ const emit = async ({ event, eventType, data, }) => {
15
15
  event_data: Object.assign({}, data),
16
16
  };
17
17
  return new Promise(async (resolve, reject) => {
18
- console.info('Emitting event', newEvent);
18
+ console.info('Emitting event', JSON.stringify(newEvent));
19
19
  try {
20
20
  await axios_1.default.post(event.payload.event_context.callback_url, Object.assign({}, newEvent), {
21
21
  headers: {
@@ -34,7 +34,7 @@ const emit = async ({ event, eventType, data, }) => {
34
34
  // TODO: Stop it through UI or think about retrying this request. Implement exponential retry mechanism.
35
35
  console.error(`Failed to emit event with event type ${eventType}.`, error);
36
36
  }
37
- reject(error);
37
+ reject();
38
38
  }
39
39
  });
40
40
  };
package/dist/index.d.ts CHANGED
@@ -8,3 +8,4 @@ export { WorkerAdapter } from './workers/worker-adapter';
8
8
  export { processTask } from './workers/process-task';
9
9
  export { spawn } from './workers/spawn';
10
10
  export * from './types/workers';
11
+ export { formatAxiosError } from './logger/logger';
package/dist/index.js CHANGED
@@ -14,7 +14,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.spawn = exports.processTask = exports.WorkerAdapter = void 0;
17
+ exports.formatAxiosError = exports.spawn = exports.processTask = exports.WorkerAdapter = void 0;
18
18
  __exportStar(require("./deprecated/adapter"), exports);
19
19
  __exportStar(require("./deprecated/demo-extractor"), exports);
20
20
  __exportStar(require("./deprecated/uploader"), exports);
@@ -28,3 +28,5 @@ Object.defineProperty(exports, "processTask", { enumerable: true, get: function
28
28
  var spawn_1 = require("./workers/spawn");
29
29
  Object.defineProperty(exports, "spawn", { enumerable: true, get: function () { return spawn_1.spawn; } });
30
30
  __exportStar(require("./types/workers"), exports);
31
+ var logger_1 = require("./logger/logger");
32
+ Object.defineProperty(exports, "formatAxiosError", { enumerable: true, get: function () { return logger_1.formatAxiosError; } });
@@ -1,9 +1,10 @@
1
1
  import { Console } from 'node:console';
2
- import { LogLevel, PrintableState } from './logger.interfaces';
3
- import { AirdropEvent } from '../types';
2
+ import { LoggerFactoryInterface, LogLevel, PrintableState } from './logger.interfaces';
4
3
  import { AxiosError } from 'axios';
5
4
  export declare class Logger extends Console {
6
- constructor(event: AirdropEvent);
5
+ private event;
6
+ private options?;
7
+ constructor({ event, options }: LoggerFactoryInterface);
7
8
  logFn(args: unknown[], level: LogLevel): void;
8
9
  log(...args: unknown[]): void;
9
10
  info(...args: unknown[]): void;
@@ -1,3 +1,9 @@
1
+ import { AirdropEvent } from '../types/extraction';
2
+ import { WorkerAdapterOptions } from '../types/workers';
3
+ export interface LoggerFactoryInterface {
4
+ event: AirdropEvent;
5
+ options?: WorkerAdapterOptions;
6
+ }
1
7
  export declare enum LogLevel {
2
8
  INFO = "info",
3
9
  WARN = "warn",
@@ -6,23 +6,30 @@ Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.Logger = void 0;
7
7
  exports.getPrintableState = getPrintableState;
8
8
  exports.formatAxiosError = formatAxiosError;
9
- /* eslint-disable @typescript-eslint/no-explicit-any */
10
9
  const lambda_log_1 = __importDefault(require("lambda-log"));
11
10
  const node_console_1 = require("node:console");
12
11
  const logger_interfaces_1 = require("./logger.interfaces");
13
12
  const node_worker_threads_1 = require("node:worker_threads");
14
13
  const workers_1 = require("../types/workers");
15
14
  class Logger extends node_console_1.Console {
16
- constructor(event) {
15
+ constructor({ event, options }) {
17
16
  super(process.stdout, process.stderr);
17
+ this.event = event;
18
+ this.options = options;
18
19
  lambda_log_1.default.options.levelKey = null;
19
20
  lambda_log_1.default.options.tagsKey = null;
20
21
  lambda_log_1.default.options.messageKey = 'message';
21
22
  lambda_log_1.default.options.meta = Object.assign({}, event.payload.event_context);
22
23
  }
23
24
  logFn(args, level) {
25
+ var _a;
24
26
  if (node_worker_threads_1.isMainThread) {
25
- lambda_log_1.default.log(level, JSON.stringify(args));
27
+ if ((_a = this.options) === null || _a === void 0 ? void 0 : _a.isLocalDevelopment) {
28
+ console[level](...args);
29
+ }
30
+ else {
31
+ lambda_log_1.default.log(level, JSON.stringify(args));
32
+ }
26
33
  }
27
34
  else {
28
35
  node_worker_threads_1.parentPort === null || node_worker_threads_1.parentPort === void 0 ? void 0 : node_worker_threads_1.parentPort.postMessage({
@@ -77,7 +84,7 @@ function getPrintableState(state) {
77
84
  return processValue(state);
78
85
  }
79
86
  function formatAxiosError(error) {
80
- var _a, _b, _c;
87
+ var _a, _b, _c, _d;
81
88
  if (error.response) {
82
89
  return {
83
90
  status: error.response.status,
@@ -85,6 +92,7 @@ function formatAxiosError(error) {
85
92
  method: (_a = error.config) === null || _a === void 0 ? void 0 : _a.method,
86
93
  baseURL: (_b = error.config) === null || _b === void 0 ? void 0 : _b.baseURL,
87
94
  url: (_c = error.config) === null || _c === void 0 ? void 0 : _c.url,
95
+ payload: (_d = error.config) === null || _d === void 0 ? void 0 : _d.data,
88
96
  };
89
97
  }
90
98
  return error;
@@ -37,8 +37,6 @@ function createEvent({ eventType, externalSyncUnits = [], progress, error, delay
37
37
  progress,
38
38
  error,
39
39
  delay,
40
- }, extractor_state: {
41
- test_extractor_state_key: 'test_extractor_state_value',
42
40
  } }, payloadOverrides),
43
41
  execution_metadata: {
44
42
  devrev_endpoint: 'test_devrev_endpoint',
@@ -28,7 +28,6 @@ export interface LogRecord {
28
28
  */
29
29
  export interface AdapterUpdateParams {
30
30
  artifact?: Artifact;
31
- extractor_state?: object;
32
31
  }
33
32
  /**
34
33
  * InitialDomainMapping is an interface that defines the structure of the initial domain mapping.
@@ -147,7 +147,6 @@ export interface AirdropMessage {
147
147
  event_context: EventContextIn;
148
148
  event_type: EventType;
149
149
  event_data?: EventData;
150
- extractor_state?: any;
151
150
  }
152
151
  /**
153
152
  * ExtractorEvent is an interface that defines the structure of the event that is sent from the external extractor to ADaaS.
@@ -156,6 +155,5 @@ export interface AirdropMessage {
156
155
  export interface ExtractorEvent {
157
156
  event_type: string;
158
157
  event_context: EventContextOut;
159
- extractor_state?: string;
160
158
  event_data?: EventData;
161
159
  }
@@ -1,5 +1,5 @@
1
1
  export { ErrorLevel, ErrorRecord, LogRecord, AdapterUpdateParams, InitialDomainMapping, } from './common';
2
2
  export { EventType, ExtractorEventType, ExtractionMode, ExternalSyncUnit, EventContextIn, EventContextOut, ConnectionData, EventData, DomainObjectState, AirdropEvent, AirdropMessage, ExtractorEvent, } from './extraction';
3
- export { NormalizedItem, NormalizedAttachment } from '../repo/repo.interfaces';
3
+ export { NormalizedItem, NormalizedAttachment, RepoInterface, } from '../repo/repo.interfaces';
4
4
  export { AdapterState } from '../state/state.interfaces';
5
5
  export { Artifact, ArtifactsPrepareResponse, UploadResponse, StreamResponse, StreamAttachmentsResponse, SsorAttachment, } from '../uploader/uploader.interfaces';
@@ -16,7 +16,7 @@ export interface WorkerAdapterInterface<ConnectorState> {
16
16
  event: AirdropEvent;
17
17
  adapterState: State<ConnectorState>;
18
18
  parentPort: MessagePort;
19
- options: WorkerAdapterOptions;
19
+ options?: WorkerAdapterOptions;
20
20
  }
21
21
  /**
22
22
  * WorkerAdapterOptions represents the options for WorkerAdapter class.
@@ -40,7 +40,7 @@ export type SpawnResolve = (value: boolean | PromiseLike<boolean>) => void;
40
40
  export interface SpawnInterface {
41
41
  event: AirdropEvent;
42
42
  worker: Worker;
43
- options: WorkerAdapterOptions | null;
43
+ options?: WorkerAdapterOptions;
44
44
  resolve: SpawnResolve;
45
45
  }
46
46
  /**
@@ -139,4 +139,5 @@ export interface WorkerData<ConnectorState> {
139
139
  export interface GetWorkerPathInterface {
140
140
  event: AirdropEvent;
141
141
  connectorWorkerPath?: string | null;
142
+ options?: WorkerAdapterOptions;
142
143
  }
@@ -7,14 +7,17 @@ const logger_1 = require("../logger/logger");
7
7
  async function createWorker(workerData) {
8
8
  return new Promise((resolve, reject) => {
9
9
  if (node_worker_threads_1.isMainThread) {
10
- const logger = new logger_1.Logger(workerData.event);
10
+ const logger = new logger_1.Logger({
11
+ event: workerData.event,
12
+ options: workerData.options,
13
+ });
11
14
  const workerFile = __dirname + '/worker.js';
12
15
  const worker = new node_worker_threads_1.Worker(workerFile, {
13
16
  workerData,
14
17
  });
15
- worker.on(workers_1.WorkerEvent.WorkerError, (error) => {
16
- logger.error('Worker error', error);
17
- reject(error);
18
+ worker.on(workers_1.WorkerEvent.WorkerError, () => {
19
+ logger.error('Worker error');
20
+ reject();
18
21
  });
19
22
  worker.on(workers_1.WorkerEvent.WorkerOnline, () => {
20
23
  resolve(worker);
@@ -12,7 +12,7 @@ function processTask({ task, onTimeout, }) {
12
12
  const event = node_worker_threads_1.workerData.event;
13
13
  const initialState = node_worker_threads_1.workerData.initialState;
14
14
  const options = node_worker_threads_1.workerData.options;
15
- console = new logger_1.Logger(event);
15
+ console = new logger_1.Logger({ event, options });
16
16
  const adapterState = await (0, state_1.createAdapterState)({
17
17
  event,
18
18
  initialState,
@@ -9,8 +9,8 @@ const logger_1 = require("../logger/logger");
9
9
  const constants_1 = require("../common/constants");
10
10
  const workers_1 = require("../types/workers");
11
11
  const create_worker_1 = require("./create-worker");
12
- function getWorkerPath({ event, connectorWorkerPath, }) {
13
- const logger = new logger_1.Logger(event);
12
+ function getWorkerPath({ event, connectorWorkerPath, options, }) {
13
+ const logger = new logger_1.Logger({ event, options });
14
14
  if (!constants_1.ALLOWED_EVENT_TYPES.includes(event.payload.event_type)) {
15
15
  return null;
16
16
  }
@@ -58,10 +58,11 @@ function getWorkerPath({ event, connectorWorkerPath, }) {
58
58
  * @returns {Promise<Spawn>} - A new instance of Spawn class
59
59
  */
60
60
  async function spawn({ event, initialState, workerPath, options, }) {
61
- const logger = new logger_1.Logger(event);
61
+ const logger = new logger_1.Logger({ event, options });
62
62
  const script = getWorkerPath({
63
63
  event,
64
64
  connectorWorkerPath: workerPath,
65
+ options,
65
66
  });
66
67
  if (script) {
67
68
  try {
@@ -75,7 +76,7 @@ async function spawn({ event, initialState, workerPath, options, }) {
75
76
  new Spawn({
76
77
  event,
77
78
  worker,
78
- options: options || null,
79
+ options,
79
80
  resolve,
80
81
  });
81
82
  });
@@ -109,14 +110,14 @@ class Spawn {
109
110
  await this.exitFromMainThread();
110
111
  }
111
112
  }, this.lambdaTimeout);
112
- this.logger = new logger_1.Logger(event);
113
+ this.logger = new logger_1.Logger({ event, options });
113
114
  this.worker = worker;
114
115
  worker.on(workers_1.WorkerEvent.WorkerExit, async (code) => {
115
116
  this.logger.info('Worker exited with exit code: ' + code + '.');
116
117
  if (this.timer) {
117
118
  clearTimeout(this.timer);
118
- await this.exitFromMainThread();
119
119
  }
120
+ await this.exitFromMainThread();
120
121
  });
121
122
  worker.on(workers_1.WorkerEvent.WorkerMessage, async (message) => {
122
123
  if ((message === null || message === void 0 ? void 0 : message.subject) === workers_1.WorkerMessageSubject.WorkerMessageEmitted) {
@@ -140,6 +141,7 @@ class Spawn {
140
141
  }
141
142
  async exitFromMainThread() {
142
143
  if (this.hasWorkerEmitted) {
144
+ this.resolve(true);
143
145
  return;
144
146
  }
145
147
  const timeoutEventType = (0, helpers_1.getErrorExtractorEventType)(this.event.payload.event_type);
@@ -21,7 +21,7 @@ export declare function createWorkerAdapter<ConnectorState>({ event, adapterStat
21
21
  */
22
22
  export declare class WorkerAdapter<ConnectorState> {
23
23
  readonly event: AirdropEvent;
24
- readonly options: WorkerAdapterOptions;
24
+ readonly options?: WorkerAdapterOptions;
25
25
  private adapterState;
26
26
  private _artifacts;
27
27
  private hasWorkerEmitted;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@devrev/ts-adaas",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "description": "Typescript library containing the ADaaS(AirDrop as a Service) control protocol.",
5
5
  "type": "commonjs",
6
6
  "main": "./dist/index.js",