@hatchet-dev/typescript-sdk 0.2.1 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -15,4 +15,5 @@ export declare class EventClient {
15
15
  constructor(config: ClientConfig, channel: Channel, factory: ClientFactory);
16
16
  push<T>(type: string, input: T): Promise<import("../../protoc/events/events").Event>;
17
17
  putLog(stepRunId: string, log: string, level?: LogLevel): void;
18
+ putStream(stepRunId: string, data: string | Uint8Array): void;
18
19
  }
@@ -65,5 +65,31 @@ class EventClient {
65
65
  this.logger.warn(`Could not put log: ${e.message}`);
66
66
  }
67
67
  }
68
+ putStream(stepRunId, data) {
69
+ const createdAt = new Date();
70
+ let dataBytes;
71
+ if (typeof data === 'string') {
72
+ dataBytes = new TextEncoder().encode(data);
73
+ }
74
+ else if (data instanceof Uint8Array) {
75
+ dataBytes = data;
76
+ }
77
+ else {
78
+ throw new Error('Invalid data type. Expected string or Uint8Array.');
79
+ }
80
+ try {
81
+ (0, retrier_1.retrier)(() => __awaiter(this, void 0, void 0, function* () {
82
+ return this.client.putStreamEvent({
83
+ stepRunId,
84
+ createdAt,
85
+ message: dataBytes,
86
+ });
87
+ }), this.logger);
88
+ }
89
+ catch (e) {
90
+ // log a warning, but this is not a fatal error
91
+ this.logger.warn(`Could not put log: ${e.message}`);
92
+ }
93
+ }
68
94
  }
69
95
  exports.EventClient = EventClient;
@@ -11,6 +11,7 @@ export declare enum RunEventType {
11
11
  STEP_RUN_EVENT_TYPE_FAILED = "STEP_RUN_EVENT_TYPE_FAILED",
12
12
  STEP_RUN_EVENT_TYPE_CANCELLED = "STEP_RUN_EVENT_TYPE_CANCELLED",
13
13
  STEP_RUN_EVENT_TYPE_TIMED_OUT = "STEP_RUN_EVENT_TYPE_TIMED_OUT",
14
+ STEP_RUN_EVENT_TYPE_STREAM = "STEP_RUN_EVENT_TYPE_STREAM",
14
15
  WORKFLOW_RUN_EVENT_TYPE_STARTED = "WORKFLOW_RUN_EVENT_TYPE_STARTED",
15
16
  WORKFLOW_RUN_EVENT_TYPE_COMPLETED = "WORKFLOW_RUN_EVENT_TYPE_COMPLETED",
16
17
  WORKFLOW_RUN_EVENT_TYPE_FAILED = "WORKFLOW_RUN_EVENT_TYPE_FAILED",
@@ -52,6 +52,7 @@ var RunEventType;
52
52
  RunEventType["STEP_RUN_EVENT_TYPE_FAILED"] = "STEP_RUN_EVENT_TYPE_FAILED";
53
53
  RunEventType["STEP_RUN_EVENT_TYPE_CANCELLED"] = "STEP_RUN_EVENT_TYPE_CANCELLED";
54
54
  RunEventType["STEP_RUN_EVENT_TYPE_TIMED_OUT"] = "STEP_RUN_EVENT_TYPE_TIMED_OUT";
55
+ RunEventType["STEP_RUN_EVENT_TYPE_STREAM"] = "STEP_RUN_EVENT_TYPE_STREAM";
55
56
  RunEventType["WORKFLOW_RUN_EVENT_TYPE_STARTED"] = "WORKFLOW_RUN_EVENT_TYPE_STARTED";
56
57
  RunEventType["WORKFLOW_RUN_EVENT_TYPE_COMPLETED"] = "WORKFLOW_RUN_EVENT_TYPE_COMPLETED";
57
58
  RunEventType["WORKFLOW_RUN_EVENT_TYPE_FAILED"] = "WORKFLOW_RUN_EVENT_TYPE_FAILED";
@@ -64,6 +65,7 @@ const stepEventTypeMap = {
64
65
  [dispatcher_1.ResourceEventType.RESOURCE_EVENT_TYPE_FAILED]: RunEventType.STEP_RUN_EVENT_TYPE_FAILED,
65
66
  [dispatcher_1.ResourceEventType.RESOURCE_EVENT_TYPE_CANCELLED]: RunEventType.STEP_RUN_EVENT_TYPE_CANCELLED,
66
67
  [dispatcher_1.ResourceEventType.RESOURCE_EVENT_TYPE_TIMED_OUT]: RunEventType.STEP_RUN_EVENT_TYPE_TIMED_OUT,
68
+ [dispatcher_1.ResourceEventType.RESOURCE_EVENT_TYPE_STREAM]: RunEventType.STEP_RUN_EVENT_TYPE_STREAM,
67
69
  [dispatcher_1.ResourceEventType.RESOURCE_EVENT_TYPE_UNKNOWN]: undefined,
68
70
  [dispatcher_1.ResourceEventType.UNRECOGNIZED]: undefined,
69
71
  };
@@ -74,6 +76,7 @@ const workflowEventTypeMap = {
74
76
  [dispatcher_1.ResourceEventType.RESOURCE_EVENT_TYPE_CANCELLED]: RunEventType.WORKFLOW_RUN_EVENT_TYPE_CANCELLED,
75
77
  [dispatcher_1.ResourceEventType.RESOURCE_EVENT_TYPE_TIMED_OUT]: RunEventType.WORKFLOW_RUN_EVENT_TYPE_TIMED_OUT,
76
78
  [dispatcher_1.ResourceEventType.RESOURCE_EVENT_TYPE_UNKNOWN]: undefined,
79
+ [dispatcher_1.ResourceEventType.RESOURCE_EVENT_TYPE_STREAM]: undefined,
77
80
  [dispatcher_1.ResourceEventType.UNRECOGNIZED]: undefined,
78
81
  };
79
82
  const resourceTypeMap = {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hatchet-dev/typescript-sdk",
3
- "version": "0.2.1",
3
+ "version": "0.3.0",
4
4
  "description": "Background task orchestration & visibility for developers",
5
5
  "types": "dist/index.d.ts",
6
6
  "files": [
@@ -42,6 +42,7 @@ export declare enum ResourceEventType {
42
42
  RESOURCE_EVENT_TYPE_FAILED = 3,
43
43
  RESOURCE_EVENT_TYPE_CANCELLED = 4,
44
44
  RESOURCE_EVENT_TYPE_TIMED_OUT = 5,
45
+ RESOURCE_EVENT_TYPE_STREAM = 6,
45
46
  UNRECOGNIZED = -1
46
47
  }
47
48
  export declare function resourceEventTypeFromJSON(object: any): ResourceEventType;
@@ -203,6 +203,7 @@ var ResourceEventType;
203
203
  ResourceEventType[ResourceEventType["RESOURCE_EVENT_TYPE_FAILED"] = 3] = "RESOURCE_EVENT_TYPE_FAILED";
204
204
  ResourceEventType[ResourceEventType["RESOURCE_EVENT_TYPE_CANCELLED"] = 4] = "RESOURCE_EVENT_TYPE_CANCELLED";
205
205
  ResourceEventType[ResourceEventType["RESOURCE_EVENT_TYPE_TIMED_OUT"] = 5] = "RESOURCE_EVENT_TYPE_TIMED_OUT";
206
+ ResourceEventType[ResourceEventType["RESOURCE_EVENT_TYPE_STREAM"] = 6] = "RESOURCE_EVENT_TYPE_STREAM";
206
207
  ResourceEventType[ResourceEventType["UNRECOGNIZED"] = -1] = "UNRECOGNIZED";
207
208
  })(ResourceEventType || (exports.ResourceEventType = ResourceEventType = {}));
208
209
  function resourceEventTypeFromJSON(object) {
@@ -225,6 +226,9 @@ function resourceEventTypeFromJSON(object) {
225
226
  case 5:
226
227
  case 'RESOURCE_EVENT_TYPE_TIMED_OUT':
227
228
  return ResourceEventType.RESOURCE_EVENT_TYPE_TIMED_OUT;
229
+ case 6:
230
+ case 'RESOURCE_EVENT_TYPE_STREAM':
231
+ return ResourceEventType.RESOURCE_EVENT_TYPE_STREAM;
228
232
  case -1:
229
233
  case 'UNRECOGNIZED':
230
234
  default:
@@ -246,6 +250,8 @@ function resourceEventTypeToJSON(object) {
246
250
  return 'RESOURCE_EVENT_TYPE_CANCELLED';
247
251
  case ResourceEventType.RESOURCE_EVENT_TYPE_TIMED_OUT:
248
252
  return 'RESOURCE_EVENT_TYPE_TIMED_OUT';
253
+ case ResourceEventType.RESOURCE_EVENT_TYPE_STREAM:
254
+ return 'RESOURCE_EVENT_TYPE_STREAM';
249
255
  case ResourceEventType.UNRECOGNIZED:
250
256
  default:
251
257
  return 'UNRECOGNIZED';
@@ -27,6 +27,18 @@ export interface PutLogRequest {
27
27
  }
28
28
  export interface PutLogResponse {
29
29
  }
30
+ export interface PutStreamEventRequest {
31
+ /** the step run id for the request */
32
+ stepRunId: string;
33
+ /** when the stream event was created */
34
+ createdAt: Date | undefined;
35
+ /** the stream event message */
36
+ message: Uint8Array;
37
+ /** associated stream event metadata */
38
+ metadata: string;
39
+ }
40
+ export interface PutStreamEventResponse {
41
+ }
30
42
  export interface PushEventRequest {
31
43
  /** the key for the event */
32
44
  key: string;
@@ -63,6 +75,22 @@ export declare const PutLogResponse: {
63
75
  create(base?: DeepPartial<PutLogResponse>): PutLogResponse;
64
76
  fromPartial(_: DeepPartial<PutLogResponse>): PutLogResponse;
65
77
  };
78
+ export declare const PutStreamEventRequest: {
79
+ encode(message: PutStreamEventRequest, writer?: _m0.Writer): _m0.Writer;
80
+ decode(input: _m0.Reader | Uint8Array, length?: number): PutStreamEventRequest;
81
+ fromJSON(object: any): PutStreamEventRequest;
82
+ toJSON(message: PutStreamEventRequest): unknown;
83
+ create(base?: DeepPartial<PutStreamEventRequest>): PutStreamEventRequest;
84
+ fromPartial(object: DeepPartial<PutStreamEventRequest>): PutStreamEventRequest;
85
+ };
86
+ export declare const PutStreamEventResponse: {
87
+ encode(_: PutStreamEventResponse, writer?: _m0.Writer): _m0.Writer;
88
+ decode(input: _m0.Reader | Uint8Array, length?: number): PutStreamEventResponse;
89
+ fromJSON(_: any): PutStreamEventResponse;
90
+ toJSON(_: PutStreamEventResponse): unknown;
91
+ create(base?: DeepPartial<PutStreamEventResponse>): PutStreamEventResponse;
92
+ fromPartial(_: DeepPartial<PutStreamEventResponse>): PutStreamEventResponse;
93
+ };
66
94
  export declare const PushEventRequest: {
67
95
  encode(message: PushEventRequest, writer?: _m0.Writer): _m0.Writer;
68
96
  decode(input: _m0.Reader | Uint8Array, length?: number): PushEventRequest;
@@ -150,17 +178,41 @@ export declare const EventsServiceDefinition: {
150
178
  readonly responseStream: false;
151
179
  readonly options: {};
152
180
  };
181
+ readonly putStreamEvent: {
182
+ readonly name: "PutStreamEvent";
183
+ readonly requestType: {
184
+ encode(message: PutStreamEventRequest, writer?: _m0.Writer): _m0.Writer;
185
+ decode(input: _m0.Reader | Uint8Array, length?: number): PutStreamEventRequest;
186
+ fromJSON(object: any): PutStreamEventRequest;
187
+ toJSON(message: PutStreamEventRequest): unknown;
188
+ create(base?: DeepPartial<PutStreamEventRequest>): PutStreamEventRequest;
189
+ fromPartial(object: DeepPartial<PutStreamEventRequest>): PutStreamEventRequest;
190
+ };
191
+ readonly requestStream: false;
192
+ readonly responseType: {
193
+ encode(_: PutStreamEventResponse, writer?: _m0.Writer): _m0.Writer;
194
+ decode(input: _m0.Reader | Uint8Array, length?: number): PutStreamEventResponse;
195
+ fromJSON(_: any): PutStreamEventResponse;
196
+ toJSON(_: PutStreamEventResponse): unknown;
197
+ create(base?: DeepPartial<PutStreamEventResponse>): PutStreamEventResponse;
198
+ fromPartial(_: DeepPartial<PutStreamEventResponse>): PutStreamEventResponse;
199
+ };
200
+ readonly responseStream: false;
201
+ readonly options: {};
202
+ };
153
203
  };
154
204
  };
155
205
  export interface EventsServiceImplementation<CallContextExt = {}> {
156
206
  push(request: PushEventRequest, context: CallContext & CallContextExt): Promise<DeepPartial<Event>>;
157
207
  replaySingleEvent(request: ReplayEventRequest, context: CallContext & CallContextExt): Promise<DeepPartial<Event>>;
158
208
  putLog(request: PutLogRequest, context: CallContext & CallContextExt): Promise<DeepPartial<PutLogResponse>>;
209
+ putStreamEvent(request: PutStreamEventRequest, context: CallContext & CallContextExt): Promise<DeepPartial<PutStreamEventResponse>>;
159
210
  }
160
211
  export interface EventsServiceClient<CallOptionsExt = {}> {
161
212
  push(request: DeepPartial<PushEventRequest>, options?: CallOptions & CallOptionsExt): Promise<Event>;
162
213
  replaySingleEvent(request: DeepPartial<ReplayEventRequest>, options?: CallOptions & CallOptionsExt): Promise<Event>;
163
214
  putLog(request: DeepPartial<PutLogRequest>, options?: CallOptions & CallOptionsExt): Promise<PutLogResponse>;
215
+ putStreamEvent(request: DeepPartial<PutStreamEventRequest>, options?: CallOptions & CallOptionsExt): Promise<PutStreamEventResponse>;
164
216
  }
165
217
  type Builtin = Date | Function | Uint8Array | string | number | boolean | undefined;
166
218
  export type DeepPartial<T> = T extends Builtin ? T : T extends globalThis.Array<infer U> ? globalThis.Array<DeepPartial<U>> : T extends ReadonlyArray<infer U> ? ReadonlyArray<DeepPartial<U>> : T extends {} ? {
@@ -23,7 +23,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
23
23
  return result;
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.EventsServiceDefinition = exports.ReplayEventRequest = exports.PushEventRequest = exports.PutLogResponse = exports.PutLogRequest = exports.Event = exports.protobufPackage = void 0;
26
+ exports.EventsServiceDefinition = exports.ReplayEventRequest = exports.PushEventRequest = exports.PutStreamEventResponse = exports.PutStreamEventRequest = exports.PutLogResponse = exports.PutLogRequest = exports.Event = exports.protobufPackage = void 0;
27
27
  const _m0 = __importStar(require("protobufjs/minimal"));
28
28
  const timestamp_1 = require("../google/protobuf/timestamp");
29
29
  exports.protobufPackage = '';
@@ -284,6 +284,138 @@ exports.PutLogResponse = {
284
284
  return message;
285
285
  },
286
286
  };
287
+ function createBasePutStreamEventRequest() {
288
+ return { stepRunId: '', createdAt: undefined, message: new Uint8Array(0), metadata: '' };
289
+ }
290
+ exports.PutStreamEventRequest = {
291
+ encode(message, writer = _m0.Writer.create()) {
292
+ if (message.stepRunId !== '') {
293
+ writer.uint32(10).string(message.stepRunId);
294
+ }
295
+ if (message.createdAt !== undefined) {
296
+ timestamp_1.Timestamp.encode(toTimestamp(message.createdAt), writer.uint32(18).fork()).ldelim();
297
+ }
298
+ if (message.message.length !== 0) {
299
+ writer.uint32(26).bytes(message.message);
300
+ }
301
+ if (message.metadata !== '') {
302
+ writer.uint32(42).string(message.metadata);
303
+ }
304
+ return writer;
305
+ },
306
+ decode(input, length) {
307
+ const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
308
+ let end = length === undefined ? reader.len : reader.pos + length;
309
+ const message = createBasePutStreamEventRequest();
310
+ while (reader.pos < end) {
311
+ const tag = reader.uint32();
312
+ switch (tag >>> 3) {
313
+ case 1:
314
+ if (tag !== 10) {
315
+ break;
316
+ }
317
+ message.stepRunId = reader.string();
318
+ continue;
319
+ case 2:
320
+ if (tag !== 18) {
321
+ break;
322
+ }
323
+ message.createdAt = fromTimestamp(timestamp_1.Timestamp.decode(reader, reader.uint32()));
324
+ continue;
325
+ case 3:
326
+ if (tag !== 26) {
327
+ break;
328
+ }
329
+ message.message = reader.bytes();
330
+ continue;
331
+ case 5:
332
+ if (tag !== 42) {
333
+ break;
334
+ }
335
+ message.metadata = reader.string();
336
+ continue;
337
+ }
338
+ if ((tag & 7) === 4 || tag === 0) {
339
+ break;
340
+ }
341
+ reader.skipType(tag & 7);
342
+ }
343
+ return message;
344
+ },
345
+ fromJSON(object) {
346
+ return {
347
+ stepRunId: isSet(object.stepRunId) ? globalThis.String(object.stepRunId) : '',
348
+ createdAt: isSet(object.createdAt) ? fromJsonTimestamp(object.createdAt) : undefined,
349
+ message: isSet(object.message) ? bytesFromBase64(object.message) : new Uint8Array(0),
350
+ metadata: isSet(object.metadata) ? globalThis.String(object.metadata) : '',
351
+ };
352
+ },
353
+ toJSON(message) {
354
+ const obj = {};
355
+ if (message.stepRunId !== '') {
356
+ obj.stepRunId = message.stepRunId;
357
+ }
358
+ if (message.createdAt !== undefined) {
359
+ obj.createdAt = message.createdAt.toISOString();
360
+ }
361
+ if (message.message.length !== 0) {
362
+ obj.message = base64FromBytes(message.message);
363
+ }
364
+ if (message.metadata !== '') {
365
+ obj.metadata = message.metadata;
366
+ }
367
+ return obj;
368
+ },
369
+ create(base) {
370
+ return exports.PutStreamEventRequest.fromPartial(base !== null && base !== void 0 ? base : {});
371
+ },
372
+ fromPartial(object) {
373
+ var _a, _b, _c, _d;
374
+ const message = createBasePutStreamEventRequest();
375
+ message.stepRunId = (_a = object.stepRunId) !== null && _a !== void 0 ? _a : '';
376
+ message.createdAt = (_b = object.createdAt) !== null && _b !== void 0 ? _b : undefined;
377
+ message.message = (_c = object.message) !== null && _c !== void 0 ? _c : new Uint8Array(0);
378
+ message.metadata = (_d = object.metadata) !== null && _d !== void 0 ? _d : '';
379
+ return message;
380
+ },
381
+ };
382
+ function createBasePutStreamEventResponse() {
383
+ return {};
384
+ }
385
+ exports.PutStreamEventResponse = {
386
+ encode(_, writer = _m0.Writer.create()) {
387
+ return writer;
388
+ },
389
+ decode(input, length) {
390
+ const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input);
391
+ let end = length === undefined ? reader.len : reader.pos + length;
392
+ const message = createBasePutStreamEventResponse();
393
+ while (reader.pos < end) {
394
+ const tag = reader.uint32();
395
+ switch (tag >>> 3) {
396
+ }
397
+ if ((tag & 7) === 4 || tag === 0) {
398
+ break;
399
+ }
400
+ reader.skipType(tag & 7);
401
+ }
402
+ return message;
403
+ },
404
+ fromJSON(_) {
405
+ return {};
406
+ },
407
+ toJSON(_) {
408
+ const obj = {};
409
+ return obj;
410
+ },
411
+ create(base) {
412
+ return exports.PutStreamEventResponse.fromPartial(base !== null && base !== void 0 ? base : {});
413
+ },
414
+ fromPartial(_) {
415
+ const message = createBasePutStreamEventResponse();
416
+ return message;
417
+ },
418
+ };
287
419
  function createBasePushEventRequest() {
288
420
  return { key: '', payload: '', eventTimestamp: undefined };
289
421
  }
@@ -446,8 +578,41 @@ exports.EventsServiceDefinition = {
446
578
  responseStream: false,
447
579
  options: {},
448
580
  },
581
+ putStreamEvent: {
582
+ name: 'PutStreamEvent',
583
+ requestType: exports.PutStreamEventRequest,
584
+ requestStream: false,
585
+ responseType: exports.PutStreamEventResponse,
586
+ responseStream: false,
587
+ options: {},
588
+ },
449
589
  },
450
590
  };
591
+ function bytesFromBase64(b64) {
592
+ if (globalThis.Buffer) {
593
+ return Uint8Array.from(globalThis.Buffer.from(b64, 'base64'));
594
+ }
595
+ else {
596
+ const bin = globalThis.atob(b64);
597
+ const arr = new Uint8Array(bin.length);
598
+ for (let i = 0; i < bin.length; ++i) {
599
+ arr[i] = bin.charCodeAt(i);
600
+ }
601
+ return arr;
602
+ }
603
+ }
604
+ function base64FromBytes(arr) {
605
+ if (globalThis.Buffer) {
606
+ return globalThis.Buffer.from(arr).toString('base64');
607
+ }
608
+ else {
609
+ const bin = [];
610
+ arr.forEach((byte) => {
611
+ bin.push(globalThis.String.fromCharCode(byte));
612
+ });
613
+ return globalThis.btoa(bin.join(''));
614
+ }
615
+ }
451
616
  function toTimestamp(date) {
452
617
  const seconds = Math.trunc(date.getTime() / 1000);
453
618
  const nanos = (date.getTime() % 1000) * 1000000;
package/step.d.ts CHANGED
@@ -59,6 +59,7 @@ export declare class Context<T, K> {
59
59
  workflowRunId(): string;
60
60
  playground(name: string, defaultValue?: string): string;
61
61
  log(message: string, level?: LogLevel): void;
62
+ putStream(data: string | Uint8Array): Promise<void>;
62
63
  spawnWorkflow<P = unknown>(workflowName: string, input: T, key?: string): ChildWorkflowRef<P>;
63
64
  }
64
65
  export type StepRunFunction<T, K> = (ctx: Context<T, K>) => Promise<NextStep> | NextStep | void;
package/step.js CHANGED
@@ -182,6 +182,17 @@ class Context {
182
182
  }
183
183
  this.client.event.putLog(stepRunId, message, level);
184
184
  }
185
+ putStream(data) {
186
+ return __awaiter(this, void 0, void 0, function* () {
187
+ const { stepRunId } = this.action;
188
+ if (!stepRunId) {
189
+ // log a warning
190
+ this.logger.warn('cannot log from context without stepRunId');
191
+ return;
192
+ }
193
+ yield this.client.event.putStream(stepRunId, data);
194
+ });
195
+ }
185
196
  spawnWorkflow(workflowName, input, key) {
186
197
  const { workflowRunId, stepRunId } = this.action;
187
198
  const childWorkflowRunIdPromise = this.client.admin.run_workflow(workflowName, input, {