@hatchet-dev/typescript-sdk 0.19.0 → 0.20.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/clients/admin/admin-client.js +1 -2
- package/clients/dispatcher/action-listener.js +1 -2
- package/clients/dispatcher/dispatcher-client.js +1 -2
- package/clients/dispatcher/heartbeat/heartbeat-controller.js +2 -3
- package/clients/dispatcher/heartbeat/heartbeat-worker.js +2 -3
- package/clients/event/event-client.js +1 -2
- package/clients/hatchet-client/client-config.d.ts +4 -0
- package/clients/hatchet-client/features/cron-client.js +1 -5
- package/clients/hatchet-client/features/schedule-client.js +1 -5
- package/clients/hatchet-client/hatchet-client.d.ts +1 -1
- package/clients/hatchet-client/hatchet-client.js +7 -3
- package/clients/hatchet-client/hatchet-logger.d.ts +13 -0
- package/clients/hatchet-client/hatchet-logger.js +42 -0
- package/clients/hatchet-client/index.d.ts +1 -0
- package/clients/hatchet-client/index.js +3 -0
- package/clients/listener/listener-client.js +1 -2
- package/clients/worker/worker.js +5 -6
- package/examples/byo-logger.d.ts +1 -0
- package/examples/byo-logger.js +74 -0
- package/package.json +3 -1
- package/step.js +1 -2
- package/util/logger/logger.d.ts +13 -11
- package/util/logger/logger.js +5 -39
- package/version.d.ts +1 -1
- package/version.js +1 -1
|
@@ -15,7 +15,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
15
15
|
exports.AdminClient = void 0;
|
|
16
16
|
const workflows_1 = require("../../protoc/workflows");
|
|
17
17
|
const hatchet_error_1 = __importDefault(require("../../util/errors/hatchet-error"));
|
|
18
|
-
const logger_1 = require("../../util/logger");
|
|
19
18
|
const retrier_1 = require("../../util/retrier");
|
|
20
19
|
const workflow_run_ref_1 = __importDefault(require("../../util/workflow-run-ref"));
|
|
21
20
|
/**
|
|
@@ -40,7 +39,7 @@ class AdminClient {
|
|
|
40
39
|
this.client = factory.create(workflows_1.WorkflowServiceDefinition, channel);
|
|
41
40
|
this.api = api;
|
|
42
41
|
this.tenantId = tenantId;
|
|
43
|
-
this.logger =
|
|
42
|
+
this.logger = config.logger(`Admin`, config.log_level);
|
|
44
43
|
this.listenerClient = listenerClient;
|
|
45
44
|
}
|
|
46
45
|
/**
|
|
@@ -36,7 +36,6 @@ exports.ActionListener = void 0;
|
|
|
36
36
|
const nice_grpc_1 = require("nice-grpc");
|
|
37
37
|
const sleep_1 = __importDefault(require("../../util/sleep"));
|
|
38
38
|
const hatchet_error_1 = __importDefault(require("../../util/errors/hatchet-error"));
|
|
39
|
-
const logger_1 = require("../../util/logger");
|
|
40
39
|
const heartbeat_controller_1 = require("./heartbeat/heartbeat-controller");
|
|
41
40
|
const DEFAULT_ACTION_LISTENER_RETRY_INTERVAL = 5000; // milliseconds
|
|
42
41
|
const DEFAULT_ACTION_LISTENER_RETRY_COUNT = 20;
|
|
@@ -106,7 +105,7 @@ class ActionListener {
|
|
|
106
105
|
this.config = client.config;
|
|
107
106
|
this.client = client.client;
|
|
108
107
|
this.workerId = workerId;
|
|
109
|
-
this.logger =
|
|
108
|
+
this.logger = client.config.logger(`ActionListener`, this.config.log_level);
|
|
110
109
|
this.retryInterval = retryInterval;
|
|
111
110
|
this.retryCount = retryCount;
|
|
112
111
|
this.heartbeat = new heartbeat_controller_1.Heartbeat(client, workerId);
|
|
@@ -15,7 +15,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
15
15
|
exports.DispatcherClient = void 0;
|
|
16
16
|
const dispatcher_1 = require("../../protoc/dispatcher");
|
|
17
17
|
const hatchet_error_1 = __importDefault(require("../../util/errors/hatchet-error"));
|
|
18
|
-
const logger_1 = require("../../util/logger");
|
|
19
18
|
const retrier_1 = require("../../util/retrier");
|
|
20
19
|
const version_1 = require("../../version");
|
|
21
20
|
const action_listener_1 = require("./action-listener");
|
|
@@ -23,7 +22,7 @@ class DispatcherClient {
|
|
|
23
22
|
constructor(config, channel, factory) {
|
|
24
23
|
this.config = config;
|
|
25
24
|
this.client = factory.create(dispatcher_1.DispatcherDefinition, channel);
|
|
26
|
-
this.logger =
|
|
25
|
+
this.logger = config.logger(`Dispatcher`, config.log_level);
|
|
27
26
|
}
|
|
28
27
|
getRuntimeInfo() {
|
|
29
28
|
return {
|
|
@@ -13,7 +13,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
13
13
|
};
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.Heartbeat = void 0;
|
|
16
|
-
const logger_1 = require("../../../util/logger");
|
|
17
16
|
const path_1 = __importDefault(require("path"));
|
|
18
17
|
const thread_helper_1 = require("../../../util/thread-helper");
|
|
19
18
|
class Heartbeat {
|
|
@@ -21,14 +20,14 @@ class Heartbeat {
|
|
|
21
20
|
this.config = client.config;
|
|
22
21
|
this.client = client.client;
|
|
23
22
|
this.workerId = workerId;
|
|
24
|
-
this.logger =
|
|
23
|
+
this.logger = client.config.logger(`HeartbeatController`, this.config.log_level);
|
|
25
24
|
}
|
|
26
25
|
start() {
|
|
27
26
|
return __awaiter(this, void 0, void 0, function* () {
|
|
28
27
|
if (!this.heartbeatWorker) {
|
|
29
28
|
this.heartbeatWorker = (0, thread_helper_1.runThreaded)(path_1.default.join(__dirname, './heartbeat-worker'), {
|
|
30
29
|
workerData: {
|
|
31
|
-
config: this.config,
|
|
30
|
+
config: Object.assign(Object.assign({}, this.config), { logger: undefined }),
|
|
32
31
|
workerId: this.workerId,
|
|
33
32
|
},
|
|
34
33
|
});
|
|
@@ -10,7 +10,6 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
12
|
const worker_threads_1 = require("worker_threads");
|
|
13
|
-
const logger_1 = require("../../../util/logger");
|
|
14
13
|
const hatchet_client_1 = require("../../hatchet-client");
|
|
15
14
|
const config_loader_1 = require("../../../util/config-loader");
|
|
16
15
|
const nice_grpc_1 = require("nice-grpc");
|
|
@@ -20,10 +19,10 @@ class HeartbeatWorker {
|
|
|
20
19
|
constructor(config, workerId) {
|
|
21
20
|
this.timeLastHeartbeat = new Date().getTime();
|
|
22
21
|
this.workerId = workerId;
|
|
23
|
-
this.logger = new
|
|
22
|
+
this.logger = new hatchet_client_1.HatchetLogger(`Heartbeat`, config.log_level);
|
|
24
23
|
const credentials = config_loader_1.ConfigLoader.createCredentials(config.tls_config);
|
|
25
24
|
const clientFactory = (0, nice_grpc_1.createClientFactory)().use((0, hatchet_client_1.addTokenMiddleware)(config.token));
|
|
26
|
-
const dispatcher = new dispatcher_client_1.DispatcherClient(config, (0, hatchet_client_1.channelFactory)(config, credentials), clientFactory);
|
|
25
|
+
const dispatcher = new dispatcher_client_1.DispatcherClient(Object.assign(Object.assign({}, config), { logger: (ctx, level) => new hatchet_client_1.HatchetLogger(ctx, level) }), (0, hatchet_client_1.channelFactory)(config, credentials), clientFactory);
|
|
27
26
|
this.client = dispatcher.client;
|
|
28
27
|
}
|
|
29
28
|
start() {
|
|
@@ -15,7 +15,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
15
15
|
exports.EventClient = exports.LogLevel = void 0;
|
|
16
16
|
const events_1 = require("../../protoc/events/events");
|
|
17
17
|
const hatchet_error_1 = __importDefault(require("../../util/errors/hatchet-error"));
|
|
18
|
-
const logger_1 = require("../../util/logger");
|
|
19
18
|
const retrier_1 = require("../../util/retrier");
|
|
20
19
|
// eslint-disable-next-line no-shadow
|
|
21
20
|
var LogLevel;
|
|
@@ -29,7 +28,7 @@ class EventClient {
|
|
|
29
28
|
constructor(config, channel, factory) {
|
|
30
29
|
this.config = config;
|
|
31
30
|
this.client = factory.create(events_1.EventsServiceDefinition, channel);
|
|
32
|
-
this.logger =
|
|
31
|
+
this.logger = config.logger(`Dispatcher`, config.log_level);
|
|
33
32
|
this.retrier = retrier_1.retrier;
|
|
34
33
|
}
|
|
35
34
|
push(type, input, options = {}) {
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { ChannelCredentials } from 'nice-grpc';
|
|
2
2
|
import { z } from 'zod';
|
|
3
|
+
import { Logger, LogLevel } from '../../util/logger';
|
|
3
4
|
declare const ClientTLSConfigSchema: z.ZodObject<{
|
|
4
5
|
tls_strategy: z.ZodOptional<z.ZodEnum<["tls", "mtls", "none"]>>;
|
|
5
6
|
cert_file: z.ZodOptional<z.ZodString>;
|
|
@@ -74,8 +75,11 @@ export declare const ClientConfigSchema: z.ZodObject<{
|
|
|
74
75
|
log_level?: "OFF" | "DEBUG" | "INFO" | "WARN" | "ERROR" | undefined;
|
|
75
76
|
namespace?: string | undefined;
|
|
76
77
|
}>;
|
|
78
|
+
export type LogConstructor = (context: string, logLevel?: LogLevel) => Logger;
|
|
77
79
|
export type ClientConfig = z.infer<typeof ClientConfigSchema> & {
|
|
78
80
|
credentials?: ChannelCredentials;
|
|
81
|
+
} & {
|
|
82
|
+
logger: LogConstructor;
|
|
79
83
|
};
|
|
80
84
|
export type ClientTLSConfig = z.infer<typeof ClientTLSConfigSchema>;
|
|
81
85
|
export {};
|
|
@@ -8,12 +8,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
8
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
-
};
|
|
14
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
12
|
exports.CronClient = exports.CreateCronTriggerSchema = void 0;
|
|
16
|
-
const logger_1 = __importDefault(require("../../../util/logger/logger"));
|
|
17
13
|
const zod_1 = require("zod");
|
|
18
14
|
const axios_1 = require("axios");
|
|
19
15
|
/**
|
|
@@ -45,7 +41,7 @@ class CronClient {
|
|
|
45
41
|
this.config = config;
|
|
46
42
|
this.api = api;
|
|
47
43
|
this.adminClient = adminClient;
|
|
48
|
-
this.logger =
|
|
44
|
+
this.logger = config.logger('Cron', this.config.log_level);
|
|
49
45
|
}
|
|
50
46
|
/**
|
|
51
47
|
* Retrieves the Cron ID from a CronWorkflows object or a string.
|
|
@@ -8,12 +8,8 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
8
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
-
};
|
|
14
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
12
|
exports.ScheduleClient = exports.CreateScheduledRunTriggerSchema = void 0;
|
|
16
|
-
const logger_1 = __importDefault(require("../../../util/logger/logger"));
|
|
17
13
|
const zod_1 = require("zod");
|
|
18
14
|
const axios_1 = require("axios");
|
|
19
15
|
/**
|
|
@@ -40,7 +36,7 @@ class ScheduleClient {
|
|
|
40
36
|
this.config = config;
|
|
41
37
|
this.api = api;
|
|
42
38
|
this.adminClient = adminClient;
|
|
43
|
-
this.logger =
|
|
39
|
+
this.logger = config.logger('Scheduled Run', this.config.log_level);
|
|
44
40
|
}
|
|
45
41
|
/**
|
|
46
42
|
* Retrieves the Scheduled Run ID from a ScheduledRun object or a string.
|
|
@@ -4,8 +4,8 @@ import { AdminClient } from '../admin/admin-client';
|
|
|
4
4
|
import { CallOptions, ChannelCredentials, ClientMiddlewareCall } from 'nice-grpc';
|
|
5
5
|
import { Workflow } from '../../workflow';
|
|
6
6
|
import { Worker, WorkerOpts } from '../worker';
|
|
7
|
-
import Logger from '../../util/logger/logger';
|
|
8
7
|
import { AxiosRequestConfig } from 'axios';
|
|
8
|
+
import { Logger } from '../../util/logger';
|
|
9
9
|
import { ClientConfig } from './client-config';
|
|
10
10
|
import { ListenerClient } from '../listener/listener-client';
|
|
11
11
|
import { Api } from '../rest/generated/Api';
|
|
@@ -45,7 +45,7 @@ const dispatcher_client_1 = require("../dispatcher/dispatcher-client");
|
|
|
45
45
|
const admin_client_1 = require("../admin/admin-client");
|
|
46
46
|
const nice_grpc_1 = require("nice-grpc");
|
|
47
47
|
const worker_1 = require("../worker");
|
|
48
|
-
const
|
|
48
|
+
const hatchet_logger_1 = require("./hatchet-logger");
|
|
49
49
|
const client_config_1 = require("./client-config");
|
|
50
50
|
const listener_client_1 = require("../listener/listener-client");
|
|
51
51
|
const rest_1 = __importDefault(require("../rest"));
|
|
@@ -98,7 +98,11 @@ class HatchetClient {
|
|
|
98
98
|
});
|
|
99
99
|
try {
|
|
100
100
|
const valid = client_config_1.ClientConfigSchema.parse(loaded);
|
|
101
|
-
|
|
101
|
+
let logConstructor = config === null || config === void 0 ? void 0 : config.logger;
|
|
102
|
+
if (logConstructor == null) {
|
|
103
|
+
logConstructor = hatchet_logger_1.DEFAULT_LOGGER;
|
|
104
|
+
}
|
|
105
|
+
this.config = Object.assign(Object.assign({}, valid), { logger: logConstructor });
|
|
102
106
|
}
|
|
103
107
|
catch (e) {
|
|
104
108
|
if (e instanceof zod_1.z.ZodError) {
|
|
@@ -115,7 +119,7 @@ class HatchetClient {
|
|
|
115
119
|
this.dispatcher = new dispatcher_client_1.DispatcherClient(this.config, (0, exports.channelFactory)(this.config, this.credentials), clientFactory);
|
|
116
120
|
this.listener = new listener_client_1.ListenerClient(this.config, (0, exports.channelFactory)(this.config, this.credentials), clientFactory, this.api);
|
|
117
121
|
this.admin = new admin_client_1.AdminClient(this.config, (0, exports.channelFactory)(this.config, this.credentials), clientFactory, this.api, this.tenantId, this.listener);
|
|
118
|
-
this.logger =
|
|
122
|
+
this.logger = this.config.logger('HatchetClient', this.config.log_level);
|
|
119
123
|
this.logger.info(`Initialized HatchetClient`);
|
|
120
124
|
// Feature Clients
|
|
121
125
|
this.cron = new cron_client_1.CronClient(this.tenantId, this.config, this.api, this.admin);
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Logger, LogLevel } from '../../util/logger';
|
|
2
|
+
export declare const DEFAULT_LOGGER: (context: string, logLevel?: LogLevel) => HatchetLogger;
|
|
3
|
+
export declare class HatchetLogger implements Logger {
|
|
4
|
+
private logLevel;
|
|
5
|
+
private context;
|
|
6
|
+
constructor(context: string, logLevel?: LogLevel);
|
|
7
|
+
private log;
|
|
8
|
+
debug(message: string): void;
|
|
9
|
+
info(message: string): void;
|
|
10
|
+
green(message: string): void;
|
|
11
|
+
warn(message: string, error?: Error): void;
|
|
12
|
+
error(message: string, error?: Error): void;
|
|
13
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.HatchetLogger = exports.DEFAULT_LOGGER = void 0;
|
|
4
|
+
const logger_1 = require("../../util/logger");
|
|
5
|
+
const DEFAULT_LOGGER = (context, logLevel) => new HatchetLogger(context, logLevel);
|
|
6
|
+
exports.DEFAULT_LOGGER = DEFAULT_LOGGER;
|
|
7
|
+
class HatchetLogger {
|
|
8
|
+
constructor(context, logLevel = 'INFO') {
|
|
9
|
+
this.logLevel = logLevel;
|
|
10
|
+
this.context = context;
|
|
11
|
+
}
|
|
12
|
+
log(level, message, color) {
|
|
13
|
+
if (logger_1.LogLevelEnum[level] >= logger_1.LogLevelEnum[this.logLevel]) {
|
|
14
|
+
const time = new Date().toLocaleString('en-US', {
|
|
15
|
+
month: '2-digit',
|
|
16
|
+
day: '2-digit',
|
|
17
|
+
year: '2-digit',
|
|
18
|
+
hour: '2-digit',
|
|
19
|
+
minute: '2-digit',
|
|
20
|
+
second: '2-digit',
|
|
21
|
+
});
|
|
22
|
+
// eslint-disable-next-line no-console
|
|
23
|
+
console.log(`🪓 ${process.pid} | ${time} ${color && `\x1b[${color}m`} [${level}/${this.context}] ${message}\x1b[0m`);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
debug(message) {
|
|
27
|
+
this.log('DEBUG', message, '35');
|
|
28
|
+
}
|
|
29
|
+
info(message) {
|
|
30
|
+
this.log('INFO', message);
|
|
31
|
+
}
|
|
32
|
+
green(message) {
|
|
33
|
+
this.log('INFO', message, '32');
|
|
34
|
+
}
|
|
35
|
+
warn(message, error) {
|
|
36
|
+
this.log('WARN', `${message} ${error}`, '93');
|
|
37
|
+
}
|
|
38
|
+
error(message, error) {
|
|
39
|
+
this.log('ERROR', `${message} ${error}`, '91');
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
exports.HatchetLogger = HatchetLogger;
|
|
@@ -14,5 +14,8 @@ 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.HatchetLogger = void 0;
|
|
17
18
|
__exportStar(require("./hatchet-client"), exports);
|
|
18
19
|
__exportStar(require("./client-config"), exports);
|
|
20
|
+
var hatchet_logger_1 = require("./hatchet-logger");
|
|
21
|
+
Object.defineProperty(exports, "HatchetLogger", { enumerable: true, get: function () { return hatchet_logger_1.HatchetLogger; } });
|
|
@@ -38,7 +38,6 @@ const nice_grpc_1 = require("nice-grpc");
|
|
|
38
38
|
const events_1 = require("events");
|
|
39
39
|
const dispatcher_1 = require("../../protoc/dispatcher");
|
|
40
40
|
const hatchet_error_1 = __importDefault(require("../../util/errors/hatchet-error"));
|
|
41
|
-
const logger_1 = require("../../util/logger");
|
|
42
41
|
const sleep_1 = __importDefault(require("../../util/sleep"));
|
|
43
42
|
const data_contracts_1 = require("../rest/generated/data-contracts");
|
|
44
43
|
const child_listener_client_1 = require("./child-listener-client");
|
|
@@ -217,7 +216,7 @@ class ListenerClient {
|
|
|
217
216
|
constructor(config, channel, factory, api) {
|
|
218
217
|
this.config = config;
|
|
219
218
|
this.client = factory.create(dispatcher_1.DispatcherDefinition, channel);
|
|
220
|
-
this.logger =
|
|
219
|
+
this.logger = config.logger(`Listener`, config.log_level);
|
|
221
220
|
this.api = api;
|
|
222
221
|
}
|
|
223
222
|
get(workflowRunId) {
|
package/clients/worker/worker.js
CHANGED
|
@@ -24,7 +24,6 @@ const hatchet_error_1 = __importDefault(require("../../util/errors/hatchet-error
|
|
|
24
24
|
const dispatcher_1 = require("../../protoc/dispatcher");
|
|
25
25
|
const hatchet_promise_1 = __importDefault(require("../../util/hatchet-promise/hatchet-promise"));
|
|
26
26
|
const workflows_1 = require("../../protoc/workflows");
|
|
27
|
-
const logger_1 = require("../../util/logger");
|
|
28
27
|
const handler_1 = require("./handler");
|
|
29
28
|
const step_1 = require("../../step");
|
|
30
29
|
class Worker {
|
|
@@ -43,7 +42,7 @@ class Worker {
|
|
|
43
42
|
process.on('SIGINT', () => this.exitGracefully(true));
|
|
44
43
|
this.killing = false;
|
|
45
44
|
this.handle_kill = options.handleKill === undefined ? true : options.handleKill;
|
|
46
|
-
this.logger =
|
|
45
|
+
this.logger = client.config.logger(`Worker/${this.name}`, this.client.config.log_level);
|
|
47
46
|
}
|
|
48
47
|
registerActions(workflow) {
|
|
49
48
|
var _a;
|
|
@@ -84,7 +83,7 @@ class Worker {
|
|
|
84
83
|
registerWorkflow(initWorkflow) {
|
|
85
84
|
return __awaiter(this, void 0, void 0, function* () {
|
|
86
85
|
var _a, _b, _c;
|
|
87
|
-
const workflow = Object.assign(Object.assign({}, initWorkflow), { id: this.client.config.namespace + initWorkflow.id });
|
|
86
|
+
const workflow = Object.assign(Object.assign({}, initWorkflow), { id: (this.client.config.namespace + initWorkflow.id).toLowerCase() });
|
|
88
87
|
try {
|
|
89
88
|
if (((_a = workflow.concurrency) === null || _a === void 0 ? void 0 : _a.key) && workflow.concurrency.expression) {
|
|
90
89
|
throw new hatchet_error_1.default('Cannot have both key function and expression in workflow concurrency configuration');
|
|
@@ -244,11 +243,11 @@ class Worker {
|
|
|
244
243
|
yield future.promise;
|
|
245
244
|
}
|
|
246
245
|
catch (e) {
|
|
247
|
-
this.logger.error(
|
|
246
|
+
this.logger.error('Could not wait for step run to finish: ', e);
|
|
248
247
|
}
|
|
249
248
|
}
|
|
250
249
|
catch (e) {
|
|
251
|
-
this.logger.error(
|
|
250
|
+
this.logger.error('Could not send action event (outer): ', e);
|
|
252
251
|
}
|
|
253
252
|
});
|
|
254
253
|
}
|
|
@@ -364,7 +363,7 @@ class Worker {
|
|
|
364
363
|
}
|
|
365
364
|
}
|
|
366
365
|
catch (e) {
|
|
367
|
-
this.logger.error(
|
|
366
|
+
this.logger.error('Could not cancel step run: ', e);
|
|
368
367
|
}
|
|
369
368
|
});
|
|
370
369
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
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
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
// eslint-disable-next-line import/no-extraneous-dependencies
|
|
16
|
+
const pino_1 = __importDefault(require("pino"));
|
|
17
|
+
const sdk_1 = __importDefault(require("../sdk"));
|
|
18
|
+
const logger = (0, pino_1.default)();
|
|
19
|
+
class PinoLogger {
|
|
20
|
+
constructor(context, logLevel = 'DEBUG') {
|
|
21
|
+
this.logLevel = logLevel;
|
|
22
|
+
this.context = context;
|
|
23
|
+
}
|
|
24
|
+
debug(message) {
|
|
25
|
+
logger.debug(message);
|
|
26
|
+
}
|
|
27
|
+
info(message) {
|
|
28
|
+
logger.info(message);
|
|
29
|
+
}
|
|
30
|
+
green(message) {
|
|
31
|
+
logger.info(`%c${message}`);
|
|
32
|
+
}
|
|
33
|
+
warn(message, error) {
|
|
34
|
+
logger.warn(`${message} ${error}`);
|
|
35
|
+
}
|
|
36
|
+
error(message, error) {
|
|
37
|
+
logger.error(`${message} ${error}`);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
const hatchet = sdk_1.default.init({
|
|
41
|
+
log_level: 'DEBUG',
|
|
42
|
+
logger: (ctx, level) => new PinoLogger(ctx, level),
|
|
43
|
+
});
|
|
44
|
+
const sleep = (ms) => new Promise((resolve) => {
|
|
45
|
+
setTimeout(resolve, ms);
|
|
46
|
+
});
|
|
47
|
+
const workflow = {
|
|
48
|
+
id: 'byo-logger-example',
|
|
49
|
+
description: 'An example showing how to pass a custom logger to Hatchet',
|
|
50
|
+
on: {
|
|
51
|
+
event: 'byo-logger:spawn',
|
|
52
|
+
},
|
|
53
|
+
steps: [
|
|
54
|
+
{
|
|
55
|
+
name: 'logger-step1',
|
|
56
|
+
run: (ctx) => __awaiter(void 0, void 0, void 0, function* () {
|
|
57
|
+
// eslint-disable-next-line no-plusplus
|
|
58
|
+
for (let i = 0; i < 5; i++) {
|
|
59
|
+
logger.info(`log message ${i}`);
|
|
60
|
+
yield sleep(500);
|
|
61
|
+
}
|
|
62
|
+
return { step1: 'completed step run' };
|
|
63
|
+
}),
|
|
64
|
+
},
|
|
65
|
+
],
|
|
66
|
+
};
|
|
67
|
+
function main() {
|
|
68
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
69
|
+
const worker = yield hatchet.worker('byo-logger-worker', 1);
|
|
70
|
+
yield worker.registerWorkflow(workflow);
|
|
71
|
+
worker.start();
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
main();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hatchet-dev/typescript-sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.20.1",
|
|
4
4
|
"description": "Background task orchestration & visibility for developers",
|
|
5
5
|
"types": "dist/index.d.ts",
|
|
6
6
|
"files": [
|
|
@@ -59,6 +59,7 @@
|
|
|
59
59
|
"worker:retries-with-backoff": "npm run exec -- ./src/examples/retries-with-backoff.ts",
|
|
60
60
|
"worker:multi-workflow": "npm run exec -- ./src/examples/multi-workflow.ts",
|
|
61
61
|
"worker:logger": "npm run exec -- ./src/examples/logger.ts",
|
|
62
|
+
"worker:byo-logger": "npm run exec -- ./src/examples/byo-logger.ts",
|
|
62
63
|
"api": "npm run exec -- ./src/examples/api.ts",
|
|
63
64
|
"prepublish": "cp package.json dist/package.json;",
|
|
64
65
|
"publish:ci": "rm -rf ./dist && npm run dump-version && npm run tsc:build && npm run prepublish && cd dist && npm publish --access public --no-git-checks",
|
|
@@ -90,6 +91,7 @@
|
|
|
90
91
|
"eslint-plugin-unused-imports": "^4.1.3",
|
|
91
92
|
"grpc-tools": "^1.12.4",
|
|
92
93
|
"jest": "^29.7.0",
|
|
94
|
+
"pino": "^9.6.0",
|
|
93
95
|
"prettier": "^3.1.1",
|
|
94
96
|
"resolve-tspaths": "^0.8.17",
|
|
95
97
|
"ts-jest": "^29.1.1",
|
package/step.js
CHANGED
|
@@ -51,7 +51,6 @@ exports.mapRateLimit = mapRateLimit;
|
|
|
51
51
|
const hatchet_error_1 = __importDefault(require("./util/errors/hatchet-error"));
|
|
52
52
|
const z = __importStar(require("zod"));
|
|
53
53
|
const workflow_1 = require("./workflow");
|
|
54
|
-
const logger_1 = require("./util/logger");
|
|
55
54
|
const parse_1 = require("./util/parse");
|
|
56
55
|
const workflows_1 = require("./protoc/workflows");
|
|
57
56
|
exports.CreateRateLimitSchema = z.object({
|
|
@@ -120,7 +119,7 @@ class Context {
|
|
|
120
119
|
this.action = action;
|
|
121
120
|
this.client = client;
|
|
122
121
|
this.worker = new ContextWorker(worker);
|
|
123
|
-
this.logger =
|
|
122
|
+
this.logger = client.config.logger(`Context Logger`, client.config.log_level);
|
|
124
123
|
// if this is a getGroupKeyRunId, the data is the workflow input
|
|
125
124
|
if (action.getGroupKeyRunId !== '') {
|
|
126
125
|
this.input = data;
|
package/util/logger/logger.d.ts
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
|
+
export declare abstract class Logger {
|
|
2
|
+
abstract debug(message: string): void;
|
|
3
|
+
abstract info(message: string): void;
|
|
4
|
+
abstract green(message: string): void;
|
|
5
|
+
abstract warn(message: string, error?: Error): void;
|
|
6
|
+
abstract error(message: string, error?: Error): void;
|
|
7
|
+
}
|
|
1
8
|
export type LogLevel = 'OFF' | 'DEBUG' | 'INFO' | 'WARN' | 'ERROR';
|
|
2
|
-
export declare
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
info(message: string): void;
|
|
9
|
-
green(message: string): void;
|
|
10
|
-
warn(message: string): void;
|
|
11
|
-
error(message: string): void;
|
|
9
|
+
export declare enum LogLevelEnum {
|
|
10
|
+
OFF = -1,
|
|
11
|
+
DEBUG = 0,
|
|
12
|
+
INFO = 1,
|
|
13
|
+
WARN = 2,
|
|
14
|
+
ERROR = 3
|
|
12
15
|
}
|
|
13
|
-
export default Logger;
|
package/util/logger/logger.js
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.Logger = void 0;
|
|
3
|
+
exports.LogLevelEnum = exports.Logger = void 0;
|
|
4
|
+
class Logger {
|
|
5
|
+
}
|
|
6
|
+
exports.Logger = Logger;
|
|
4
7
|
// eslint-disable-next-line no-shadow
|
|
5
8
|
var LogLevelEnum;
|
|
6
9
|
(function (LogLevelEnum) {
|
|
@@ -9,41 +12,4 @@ var LogLevelEnum;
|
|
|
9
12
|
LogLevelEnum[LogLevelEnum["INFO"] = 1] = "INFO";
|
|
10
13
|
LogLevelEnum[LogLevelEnum["WARN"] = 2] = "WARN";
|
|
11
14
|
LogLevelEnum[LogLevelEnum["ERROR"] = 3] = "ERROR";
|
|
12
|
-
})(LogLevelEnum || (LogLevelEnum = {}));
|
|
13
|
-
class Logger {
|
|
14
|
-
constructor(context, logLevel = 'INFO') {
|
|
15
|
-
this.logLevel = logLevel;
|
|
16
|
-
this.context = context;
|
|
17
|
-
}
|
|
18
|
-
log(level, message, color) {
|
|
19
|
-
if (LogLevelEnum[level] >= LogLevelEnum[this.logLevel]) {
|
|
20
|
-
const time = new Date().toLocaleString('en-US', {
|
|
21
|
-
month: '2-digit',
|
|
22
|
-
day: '2-digit',
|
|
23
|
-
year: '2-digit',
|
|
24
|
-
hour: '2-digit',
|
|
25
|
-
minute: '2-digit',
|
|
26
|
-
second: '2-digit',
|
|
27
|
-
});
|
|
28
|
-
// eslint-disable-next-line no-console
|
|
29
|
-
console.log(`🪓 ${process.pid} | ${time} ${color && `\x1b[${color}m`} [${level}/${this.context}] ${message}\x1b[0m`);
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
debug(message) {
|
|
33
|
-
this.log('DEBUG', message, '35');
|
|
34
|
-
}
|
|
35
|
-
info(message) {
|
|
36
|
-
this.log('INFO', message);
|
|
37
|
-
}
|
|
38
|
-
green(message) {
|
|
39
|
-
this.log('INFO', message, '32');
|
|
40
|
-
}
|
|
41
|
-
warn(message) {
|
|
42
|
-
this.log('WARN', message, '93');
|
|
43
|
-
}
|
|
44
|
-
error(message) {
|
|
45
|
-
this.log('ERROR', message, '91');
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
exports.Logger = Logger;
|
|
49
|
-
exports.default = Logger;
|
|
15
|
+
})(LogLevelEnum || (exports.LogLevelEnum = LogLevelEnum = {}));
|
package/version.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export declare const HATCHET_VERSION = "0.
|
|
1
|
+
export declare const HATCHET_VERSION = "0.20.1";
|
package/version.js
CHANGED