@taskcast/server-sdk 0.1.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.
@@ -0,0 +1,33 @@
1
+ import type { Task, TaskEvent, TaskStatus, SeriesMode, SinceCursor, TaskError } from '@taskcast/core';
2
+ export type CreateTaskInput = Pick<Partial<Task>, 'type' | 'params' | 'result' | 'metadata' | 'ttl' | 'authConfig' | 'webhooks' | 'cleanup'>;
3
+ export interface PublishEventInput {
4
+ type: string;
5
+ level: 'debug' | 'info' | 'warn' | 'error';
6
+ data: unknown;
7
+ seriesId?: string;
8
+ seriesMode?: SeriesMode;
9
+ }
10
+ export interface TaskcastServerClientOptions {
11
+ baseUrl: string;
12
+ token?: string;
13
+ fetch?: typeof globalThis.fetch;
14
+ }
15
+ export declare class TaskcastServerClient {
16
+ private fetch;
17
+ private baseUrl;
18
+ private token?;
19
+ constructor(opts: TaskcastServerClientOptions);
20
+ createTask(input: CreateTaskInput): Promise<Task>;
21
+ getTask(taskId: string): Promise<Task>;
22
+ transitionTask(taskId: string, status: TaskStatus, payload?: {
23
+ result?: Record<string, unknown>;
24
+ error?: TaskError;
25
+ }): Promise<Task>;
26
+ publishEvent(taskId: string, input: PublishEventInput): Promise<TaskEvent>;
27
+ publishEvents(taskId: string, inputs: PublishEventInput[]): Promise<TaskEvent[]>;
28
+ getHistory(taskId: string, opts?: {
29
+ since?: SinceCursor;
30
+ }): Promise<TaskEvent[]>;
31
+ private _request;
32
+ }
33
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAA8C,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAEjJ,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,KAAK,GAAG,YAAY,GAAG,UAAU,GAAG,SAAS,CAAC,CAAA;AAE5I,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;IAC1C,IAAI,EAAE,OAAO,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,UAAU,CAAA;CACxB;AAED,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAA;CAChC;AAED,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,KAAK,CAAyB;IACtC,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,KAAK,CAAC,CAAQ;gBAEV,IAAI,EAAE,2BAA2B;IAQvC,UAAU,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjD,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAItC,cAAc,CAClB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,UAAU,EAClB,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,KAAK,CAAC,EAAE,SAAS,CAAA;KAAE,GAChE,OAAO,CAAC,IAAI,CAAC;IAOV,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,SAAS,CAAC;IAI1E,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAIhF,UAAU,CACd,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,WAAW,CAAA;KAAE,GAC7B,OAAO,CAAC,SAAS,EAAE,CAAC;YAUT,QAAQ;CAgCvB"}
package/dist/client.js ADDED
@@ -0,0 +1,69 @@
1
+ export class TaskcastServerClient {
2
+ fetch;
3
+ baseUrl;
4
+ token;
5
+ constructor(opts) {
6
+ this.baseUrl = opts.baseUrl.replace(/\/$/, '');
7
+ if (opts.token !== undefined) {
8
+ this.token = opts.token;
9
+ }
10
+ this.fetch = opts.fetch ?? globalThis.fetch;
11
+ }
12
+ async createTask(input) {
13
+ return this._request('POST', '/tasks', input);
14
+ }
15
+ async getTask(taskId) {
16
+ return this._request('GET', `/tasks/${taskId}`);
17
+ }
18
+ async transitionTask(taskId, status, payload) {
19
+ return this._request('PATCH', `/tasks/${taskId}/status`, {
20
+ status,
21
+ ...payload,
22
+ });
23
+ }
24
+ async publishEvent(taskId, input) {
25
+ return this._request('POST', `/tasks/${taskId}/events`, input);
26
+ }
27
+ async publishEvents(taskId, inputs) {
28
+ return this._request('POST', `/tasks/${taskId}/events`, inputs);
29
+ }
30
+ async getHistory(taskId, opts) {
31
+ const params = new URLSearchParams();
32
+ if (opts?.since?.id)
33
+ params.set('since.id', opts.since.id);
34
+ if (opts?.since?.index !== undefined)
35
+ params.set('since.index', String(opts.since.index));
36
+ if (opts?.since?.timestamp !== undefined)
37
+ params.set('since.timestamp', String(opts.since.timestamp));
38
+ const qs = params.toString();
39
+ return this._request('GET', `/tasks/${taskId}/events/history${qs ? `?${qs}` : ''}`);
40
+ }
41
+ async _request(method, path, body) {
42
+ const headers = {
43
+ Accept: 'application/json',
44
+ };
45
+ if (body !== undefined) {
46
+ headers['Content-Type'] = 'application/json';
47
+ }
48
+ if (this.token)
49
+ headers['Authorization'] = `Bearer ${this.token}`;
50
+ const init = { method, headers };
51
+ if (body !== undefined) {
52
+ init.body = JSON.stringify(body);
53
+ }
54
+ const res = await this.fetch(`${this.baseUrl}${path}`, init);
55
+ if (!res.ok) {
56
+ let message = `HTTP ${res.status}`;
57
+ try {
58
+ const err = await res.json();
59
+ message = err.error ?? message;
60
+ }
61
+ catch {
62
+ // ignore parse errors
63
+ }
64
+ throw new Error(message);
65
+ }
66
+ return res.json();
67
+ }
68
+ }
69
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export { TaskcastServerClient } from './client.js';
2
+ export type { TaskcastServerClientOptions, CreateTaskInput, PublishEventInput } from './client.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAClD,YAAY,EAAE,2BAA2B,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export { TaskcastServerClient } from './client.js';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA"}
package/package.json ADDED
@@ -0,0 +1,28 @@
1
+ {
2
+ "name": "@taskcast/server-sdk",
3
+ "version": "0.1.0",
4
+ "files": [
5
+ "dist",
6
+ "LICENSE"
7
+ ],
8
+ "type": "module",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js"
13
+ }
14
+ },
15
+ "scripts": {
16
+ "build": "tsc",
17
+ "test": "vitest run",
18
+ "test:watch": "vitest"
19
+ },
20
+ "dependencies": {
21
+ "@taskcast/core": "workspace:*"
22
+ },
23
+ "devDependencies": {
24
+ "typescript": "^5.7.0",
25
+ "vitest": "^2.1.0",
26
+ "@vitest/coverage-v8": "^2.1.0"
27
+ }
28
+ }