@astami/temporal-functions 0.2.1 → 0.2.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/dist/client/index.d.mts +2 -2
- package/dist/client/index.d.ts +2 -2
- package/dist/client/index.js +8 -2
- package/dist/client/index.js.map +1 -1
- package/dist/client/index.mjs +8 -2
- package/dist/client/index.mjs.map +1 -1
- package/dist/index.d.mts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/testing/index.d.mts +1 -1
- package/dist/testing/index.d.ts +1 -1
- package/dist/{types-CmhOIEkF.d.mts → types-Curq8YlS.d.mts} +26 -0
- package/dist/{types-CmhOIEkF.d.ts → types-Curq8YlS.d.ts} +26 -0
- package/dist/worker/index.d.mts +1 -1
- package/dist/worker/index.d.ts +1 -1
- package/package.json +1 -1
package/dist/client/index.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { g as ClientConfig, j as TFNClient } from '../types-
|
|
2
|
-
export { S as StartWorkflowOptions, i as WorkflowHandle } from '../types-
|
|
1
|
+
import { g as ClientConfig, j as TFNClient } from '../types-Curq8YlS.mjs';
|
|
2
|
+
export { S as StartWorkflowOptions, i as WorkflowHandle } from '../types-Curq8YlS.mjs';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Temporal Functions - Client Package
|
package/dist/client/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { g as ClientConfig, j as TFNClient } from '../types-
|
|
2
|
-
export { S as StartWorkflowOptions, i as WorkflowHandle } from '../types-
|
|
1
|
+
import { g as ClientConfig, j as TFNClient } from '../types-Curq8YlS.js';
|
|
2
|
+
export { S as StartWorkflowOptions, i as WorkflowHandle } from '../types-Curq8YlS.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Temporal Functions - Client Package
|
package/dist/client/index.js
CHANGED
|
@@ -43,10 +43,16 @@ var TemporalFunctionsClient = class {
|
|
|
43
43
|
} : void 0
|
|
44
44
|
} : void 0
|
|
45
45
|
});
|
|
46
|
-
|
|
46
|
+
const clientOptions = {
|
|
47
47
|
connection,
|
|
48
48
|
namespace: this.config.temporal.namespace
|
|
49
|
-
}
|
|
49
|
+
};
|
|
50
|
+
if (this.config.interceptors?.workflow) {
|
|
51
|
+
clientOptions.interceptors = {
|
|
52
|
+
workflow: this.config.interceptors.workflow
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
this.client = new client.Client(clientOptions);
|
|
50
56
|
return this.client;
|
|
51
57
|
})();
|
|
52
58
|
return this.connectionPromise;
|
package/dist/client/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/client/index.ts"],"names":["Connection","Client"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Temporal Functions - Client Package\n *\n * Lightweight client for triggering workflows.\n * Import from 'temporal-functions/client'.\n */\n\nimport { Client, Connection } from '@temporalio/client';\nimport type {\n ClientConfig,\n WorkflowDef,\n StartWorkflowOptions,\n WorkflowHandle,\n TFNClient,\n} from '../types.js';\n\n// =============================================================================\n// Client Implementation\n// =============================================================================\n\nclass TemporalFunctionsClient implements TFNClient {\n private client: Client | null = null;\n private config: ClientConfig;\n private connectionPromise: Promise<Client> | null = null;\n\n constructor(config: ClientConfig) {\n this.config = {\n ...config,\n temporal: {\n namespace: 'default',\n ...config.temporal,\n },\n taskQueue: config.taskQueue || 'default',\n };\n }\n\n /**\n * Lazily connect to Temporal\n */\n private async getClient(): Promise<Client> {\n if (this.client) {\n return this.client;\n }\n\n if (this.connectionPromise) {\n return this.connectionPromise;\n }\n\n this.connectionPromise = (async () => {\n const connection = await Connection.connect({\n address: this.config.temporal.address,\n tls: this.config.temporal.tls\n ? {\n clientCertPair: this.config.temporal.tls.clientCertPath\n ? {\n crt: await import('fs').then((fs) =>\n fs.promises.readFile(this.config.temporal.tls!.clientCertPath!)\n ),\n key: await import('fs').then((fs) =>\n fs.promises.readFile(this.config.temporal.tls!.clientKeyPath!)\n ),\n }\n : undefined,\n }\n : undefined,\n });\n\n this.client = new Client({\n connection,\n namespace: this.config.temporal.namespace,\n });\n\n return this.client;\n })();\n\n return this.connectionPromise;\n }\n\n /**\n * Generate a workflow ID if not provided\n */\n private generateWorkflowId(workflowName: string): string {\n const timestamp = Date.now();\n const random = Math.random().toString(36).substring(2, 8);\n return `${workflowName}-${timestamp}-${random}`;\n }\n\n /**\n * Start a workflow and wait for the result\n */\n async invoke<TInput, TOutput>(\n workflow: WorkflowDef<TInput, TOutput>,\n input: TInput,\n options: StartWorkflowOptions = {}\n ): Promise<TOutput> {\n const handle = await this.start(workflow, input, options);\n return handle.result();\n }\n\n /**\n * Start a workflow without waiting (fire and forget)\n */\n async start<TInput, TOutput>(\n workflow: WorkflowDef<TInput, TOutput>,\n input: TInput,\n options: StartWorkflowOptions = {}\n ): Promise<WorkflowHandle<TOutput>> {\n const client = await this.getClient();\n\n const workflowId = options.workflowId || this.generateWorkflowId(workflow.name);\n const taskQueue = options.taskQueue || workflow.options.taskQueue || this.config.taskQueue || 'default';\n\n const handle = await client.workflow.start(workflow.name, {\n workflowId,\n taskQueue,\n args: [input],\n workflowExecutionTimeout: options.workflowExecutionTimeout,\n memo: options.memo,\n // searchAttributes requires specific types, omit for now if not properly typed\n });\n\n return this.wrapHandle<TOutput>(handle);\n }\n\n /**\n * Get a handle to an existing workflow\n */\n getHandle<TOutput = unknown>(workflowId: string): WorkflowHandle<TOutput> {\n // Create a lazy handle that connects when needed\n return {\n workflowId,\n runId: '', // Will be populated when we fetch\n result: async () => {\n const client = await this.getClient();\n const handle = client.workflow.getHandle(workflowId);\n return handle.result() as Promise<TOutput>;\n },\n query: async <TResult = unknown>(queryName: string) => {\n const client = await this.getClient();\n const handle = client.workflow.getHandle(workflowId);\n return handle.query<TResult>(queryName);\n },\n signal: async <TPayload = unknown>(signalName: string, payload: TPayload) => {\n const client = await this.getClient();\n const handle = client.workflow.getHandle(workflowId);\n await handle.signal(signalName, payload);\n },\n cancel: async () => {\n const client = await this.getClient();\n const handle = client.workflow.getHandle(workflowId);\n await handle.cancel();\n },\n terminate: async (reason?: string) => {\n const client = await this.getClient();\n const handle = client.workflow.getHandle(workflowId);\n await handle.terminate(reason);\n },\n };\n }\n\n /**\n * Signal an existing workflow\n */\n async signal<TPayload = unknown>(\n workflowId: string,\n signalName: string,\n payload: TPayload\n ): Promise<void> {\n const client = await this.getClient();\n const handle = client.workflow.getHandle(workflowId);\n await handle.signal(signalName, payload);\n }\n\n /**\n * Query an existing workflow\n */\n async query<TResult = unknown>(\n workflowId: string,\n queryName: string\n ): Promise<TResult> {\n const client = await this.getClient();\n const handle = client.workflow.getHandle(workflowId);\n return handle.query<TResult>(queryName);\n }\n\n /**\n * Wrap a Temporal workflow handle in our interface\n */\n private wrapHandle<TOutput>(\n handle: Awaited<ReturnType<Client['workflow']['start']>>\n ): WorkflowHandle<TOutput> {\n return {\n workflowId: handle.workflowId,\n runId: handle.firstExecutionRunId,\n result: () => handle.result() as Promise<TOutput>,\n query: <TResult = unknown>(queryName: string) =>\n handle.query<TResult>(queryName),\n signal: <TPayload = unknown>(signalName: string, payload: TPayload) =>\n handle.signal(signalName, payload),\n cancel: async () => {\n await handle.cancel();\n },\n terminate: async (reason?: string) => {\n await handle.terminate(reason);\n },\n };\n }\n}\n\n// =============================================================================\n// Factory Function\n// =============================================================================\n\n/**\n * Create a Temporal Functions client\n *\n * @example\n * ```typescript\n * import { tfn } from 'temporal-functions/client';\n *\n * const client = tfn.client({\n * temporal: {\n * address: 'localhost:7233',\n * namespace: 'default',\n * },\n * taskQueue: 'my-queue',\n * });\n *\n * const result = await client.invoke(myWorkflow, { data: 'hello' });\n * ```\n */\nfunction createClient(config: ClientConfig): TFNClient {\n return new TemporalFunctionsClient(config);\n}\n\n// =============================================================================\n// Export\n// =============================================================================\n\nexport const tfn = {\n client: createClient,\n};\n\nexport { createClient };\nexport type { ClientConfig, TFNClient, WorkflowHandle, StartWorkflowOptions };\nexport default tfn;\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/client/index.ts"],"names":["Connection","Client"],"mappings":";;;;;;;AAoBA,IAAM,0BAAN,MAAmD;AAAA,EACzC,MAAA,GAAwB,IAAA;AAAA,EACxB,MAAA;AAAA,EACA,iBAAA,GAA4C,IAAA;AAAA,EAEpD,YAAY,MAAA,EAAsB;AAChC,IAAA,IAAA,CAAK,MAAA,GAAS;AAAA,MACZ,GAAG,MAAA;AAAA,MACH,QAAA,EAAU;AAAA,QACR,SAAA,EAAW,SAAA;AAAA,QACX,GAAG,MAAA,CAAO;AAAA,OACZ;AAAA,MACA,SAAA,EAAW,OAAO,SAAA,IAAa;AAAA,KACjC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,SAAA,GAA6B;AACzC,IAAA,IAAI,KAAK,MAAA,EAAQ;AACf,MAAA,OAAO,IAAA,CAAK,MAAA;AAAA,IACd;AAEA,IAAA,IAAI,KAAK,iBAAA,EAAmB;AAC1B,MAAA,OAAO,IAAA,CAAK,iBAAA;AAAA,IACd;AAEA,IAAA,IAAA,CAAK,qBAAqB,YAAY;AACpC,MAAA,MAAM,UAAA,GAAa,MAAMA,iBAAA,CAAW,OAAA,CAAQ;AAAA,QAC1C,OAAA,EAAS,IAAA,CAAK,MAAA,CAAO,QAAA,CAAS,OAAA;AAAA,QAC9B,GAAA,EAAK,IAAA,CAAK,MAAA,CAAO,QAAA,CAAS,GAAA,GACtB;AAAA,UACE,cAAA,EAAgB,IAAA,CAAK,MAAA,CAAO,QAAA,CAAS,IAAI,cAAA,GACrC;AAAA,YACE,GAAA,EAAK,MAAM,OAAO,IAAI,CAAA,CAAE,IAAA;AAAA,cAAK,CAAC,OAC5B,EAAA,CAAG,QAAA,CAAS,SAAS,IAAA,CAAK,MAAA,CAAO,QAAA,CAAS,GAAA,CAAK,cAAe;AAAA,aAChE;AAAA,YACA,GAAA,EAAK,MAAM,OAAO,IAAI,CAAA,CAAE,IAAA;AAAA,cAAK,CAAC,OAC5B,EAAA,CAAG,QAAA,CAAS,SAAS,IAAA,CAAK,MAAA,CAAO,QAAA,CAAS,GAAA,CAAK,aAAc;AAAA;AAC/D,WACF,GACA;AAAA,SACN,GACA;AAAA,OACL,CAAA;AAGD,MAAA,MAAM,aAAA,GAA+B;AAAA,QACnC,UAAA;AAAA,QACA,SAAA,EAAW,IAAA,CAAK,MAAA,CAAO,QAAA,CAAS;AAAA,OAClC;AAGA,MAAA,IAAI,IAAA,CAAK,MAAA,CAAO,YAAA,EAAc,QAAA,EAAU;AACtC,QAAA,aAAA,CAAc,YAAA,GAAe;AAAA,UAC3B,QAAA,EAAU,IAAA,CAAK,MAAA,CAAO,YAAA,CAAa;AAAA,SACrC;AAAA,MACF;AAEA,MAAA,IAAA,CAAK,MAAA,GAAS,IAAIC,aAAA,CAAO,aAAa,CAAA;AAEtC,MAAA,OAAO,IAAA,CAAK,MAAA;AAAA,IACd,CAAA,GAAG;AAEH,IAAA,OAAO,IAAA,CAAK,iBAAA;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKQ,mBAAmB,YAAA,EAA8B;AACvD,IAAA,MAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAC3B,IAAA,MAAM,MAAA,GAAS,KAAK,MAAA,EAAO,CAAE,SAAS,EAAE,CAAA,CAAE,SAAA,CAAU,CAAA,EAAG,CAAC,CAAA;AACxD,IAAA,OAAO,CAAA,EAAG,YAAY,CAAA,CAAA,EAAI,SAAS,IAAI,MAAM,CAAA,CAAA;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,MAAA,CACJ,QAAA,EACA,KAAA,EACA,OAAA,GAAgC,EAAC,EACf;AAClB,IAAA,MAAM,SAAS,MAAM,IAAA,CAAK,KAAA,CAAM,QAAA,EAAU,OAAO,OAAO,CAAA;AACxD,IAAA,OAAO,OAAO,MAAA,EAAO;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,KAAA,CACJ,QAAA,EACA,KAAA,EACA,OAAA,GAAgC,EAAC,EACC;AAClC,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,SAAA,EAAU;AAEpC,IAAA,MAAM,aAAa,OAAA,CAAQ,UAAA,IAAc,IAAA,CAAK,kBAAA,CAAmB,SAAS,IAAI,CAAA;AAC9E,IAAA,MAAM,SAAA,GAAY,QAAQ,SAAA,IAAa,QAAA,CAAS,QAAQ,SAAA,IAAa,IAAA,CAAK,OAAO,SAAA,IAAa,SAAA;AAE9F,IAAA,MAAM,SAAS,MAAM,MAAA,CAAO,QAAA,CAAS,KAAA,CAAM,SAAS,IAAA,EAAM;AAAA,MACxD,UAAA;AAAA,MACA,SAAA;AAAA,MACA,IAAA,EAAM,CAAC,KAAK,CAAA;AAAA,MACZ,0BAA0B,OAAA,CAAQ,wBAAA;AAAA,MAClC,MAAM,OAAA,CAAQ;AAAA;AAAA,KAEf,CAAA;AAED,IAAA,OAAO,IAAA,CAAK,WAAoB,MAAM,CAAA;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA,EAKA,UAA6B,UAAA,EAA6C;AAExE,IAAA,OAAO;AAAA,MACL,UAAA;AAAA,MACA,KAAA,EAAO,EAAA;AAAA;AAAA,MACP,QAAQ,YAAY;AAClB,QAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,SAAA,EAAU;AACpC,QAAA,MAAM,MAAA,GAAS,MAAA,CAAO,QAAA,CAAS,SAAA,CAAU,UAAU,CAAA;AACnD,QAAA,OAAO,OAAO,MAAA,EAAO;AAAA,MACvB,CAAA;AAAA,MACA,KAAA,EAAO,OAA0B,SAAA,KAAsB;AACrD,QAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,SAAA,EAAU;AACpC,QAAA,MAAM,MAAA,GAAS,MAAA,CAAO,QAAA,CAAS,SAAA,CAAU,UAAU,CAAA;AACnD,QAAA,OAAO,MAAA,CAAO,MAAe,SAAS,CAAA;AAAA,MACxC,CAAA;AAAA,MACA,MAAA,EAAQ,OAA2B,UAAA,EAAoB,OAAA,KAAsB;AAC3E,QAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,SAAA,EAAU;AACpC,QAAA,MAAM,MAAA,GAAS,MAAA,CAAO,QAAA,CAAS,SAAA,CAAU,UAAU,CAAA;AACnD,QAAA,MAAM,MAAA,CAAO,MAAA,CAAO,UAAA,EAAY,OAAO,CAAA;AAAA,MACzC,CAAA;AAAA,MACA,QAAQ,YAAY;AAClB,QAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,SAAA,EAAU;AACpC,QAAA,MAAM,MAAA,GAAS,MAAA,CAAO,QAAA,CAAS,SAAA,CAAU,UAAU,CAAA;AACnD,QAAA,MAAM,OAAO,MAAA,EAAO;AAAA,MACtB,CAAA;AAAA,MACA,SAAA,EAAW,OAAO,MAAA,KAAoB;AACpC,QAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,SAAA,EAAU;AACpC,QAAA,MAAM,MAAA,GAAS,MAAA,CAAO,QAAA,CAAS,SAAA,CAAU,UAAU,CAAA;AACnD,QAAA,MAAM,MAAA,CAAO,UAAU,MAAM,CAAA;AAAA,MAC/B;AAAA,KACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,MAAA,CACJ,UAAA,EACA,UAAA,EACA,OAAA,EACe;AACf,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,SAAA,EAAU;AACpC,IAAA,MAAM,MAAA,GAAS,MAAA,CAAO,QAAA,CAAS,SAAA,CAAU,UAAU,CAAA;AACnD,IAAA,MAAM,MAAA,CAAO,MAAA,CAAO,UAAA,EAAY,OAAO,CAAA;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,KAAA,CACJ,UAAA,EACA,SAAA,EACkB;AAClB,IAAA,MAAM,MAAA,GAAS,MAAM,IAAA,CAAK,SAAA,EAAU;AACpC,IAAA,MAAM,MAAA,GAAS,MAAA,CAAO,QAAA,CAAS,SAAA,CAAU,UAAU,CAAA;AACnD,IAAA,OAAO,MAAA,CAAO,MAAe,SAAS,CAAA;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA,EAKQ,WACN,MAAA,EACyB;AACzB,IAAA,OAAO;AAAA,MACL,YAAY,MAAA,CAAO,UAAA;AAAA,MACnB,OAAO,MAAA,CAAO,mBAAA;AAAA,MACd,MAAA,EAAQ,MAAM,MAAA,CAAO,MAAA,EAAO;AAAA,MAC5B,KAAA,EAAO,CAAoB,SAAA,KACzB,MAAA,CAAO,MAAe,SAAS,CAAA;AAAA,MACjC,QAAQ,CAAqB,UAAA,EAAoB,YAC/C,MAAA,CAAO,MAAA,CAAO,YAAY,OAAO,CAAA;AAAA,MACnC,QAAQ,YAAY;AAClB,QAAA,MAAM,OAAO,MAAA,EAAO;AAAA,MACtB,CAAA;AAAA,MACA,SAAA,EAAW,OAAO,MAAA,KAAoB;AACpC,QAAA,MAAM,MAAA,CAAO,UAAU,MAAM,CAAA;AAAA,MAC/B;AAAA,KACF;AAAA,EACF;AACF,CAAA;AAwBA,SAAS,aAAa,MAAA,EAAiC;AACrD,EAAA,OAAO,IAAI,wBAAwB,MAAM,CAAA;AAC3C;AAMO,IAAM,GAAA,GAAM;AAAA,EACjB,MAAA,EAAQ;AACV;AAIA,IAAO,cAAA,GAAQ","file":"index.js","sourcesContent":["/**\n * Temporal Functions - Client Package\n *\n * Lightweight client for triggering workflows.\n * Import from 'temporal-functions/client'.\n */\n\nimport { Client, Connection, type ClientOptions } from '@temporalio/client';\nimport type {\n ClientConfig,\n WorkflowDef,\n StartWorkflowOptions,\n WorkflowHandle,\n TFNClient,\n} from '../types.js';\n\n// =============================================================================\n// Client Implementation\n// =============================================================================\n\nclass TemporalFunctionsClient implements TFNClient {\n private client: Client | null = null;\n private config: ClientConfig;\n private connectionPromise: Promise<Client> | null = null;\n\n constructor(config: ClientConfig) {\n this.config = {\n ...config,\n temporal: {\n namespace: 'default',\n ...config.temporal,\n },\n taskQueue: config.taskQueue || 'default',\n };\n }\n\n /**\n * Lazily connect to Temporal\n */\n private async getClient(): Promise<Client> {\n if (this.client) {\n return this.client;\n }\n\n if (this.connectionPromise) {\n return this.connectionPromise;\n }\n\n this.connectionPromise = (async () => {\n const connection = await Connection.connect({\n address: this.config.temporal.address,\n tls: this.config.temporal.tls\n ? {\n clientCertPair: this.config.temporal.tls.clientCertPath\n ? {\n crt: await import('fs').then((fs) =>\n fs.promises.readFile(this.config.temporal.tls!.clientCertPath!)\n ),\n key: await import('fs').then((fs) =>\n fs.promises.readFile(this.config.temporal.tls!.clientKeyPath!)\n ),\n }\n : undefined,\n }\n : undefined,\n });\n\n // Build client options with optional interceptors\n const clientOptions: ClientOptions = {\n connection,\n namespace: this.config.temporal.namespace!,\n };\n\n // Add workflow interceptors if configured (e.g., for OpenTelemetry)\n if (this.config.interceptors?.workflow) {\n clientOptions.interceptors = {\n workflow: this.config.interceptors.workflow,\n };\n }\n\n this.client = new Client(clientOptions);\n\n return this.client;\n })();\n\n return this.connectionPromise;\n }\n\n /**\n * Generate a workflow ID if not provided\n */\n private generateWorkflowId(workflowName: string): string {\n const timestamp = Date.now();\n const random = Math.random().toString(36).substring(2, 8);\n return `${workflowName}-${timestamp}-${random}`;\n }\n\n /**\n * Start a workflow and wait for the result\n */\n async invoke<TInput, TOutput>(\n workflow: WorkflowDef<TInput, TOutput>,\n input: TInput,\n options: StartWorkflowOptions = {}\n ): Promise<TOutput> {\n const handle = await this.start(workflow, input, options);\n return handle.result();\n }\n\n /**\n * Start a workflow without waiting (fire and forget)\n */\n async start<TInput, TOutput>(\n workflow: WorkflowDef<TInput, TOutput>,\n input: TInput,\n options: StartWorkflowOptions = {}\n ): Promise<WorkflowHandle<TOutput>> {\n const client = await this.getClient();\n\n const workflowId = options.workflowId || this.generateWorkflowId(workflow.name);\n const taskQueue = options.taskQueue || workflow.options.taskQueue || this.config.taskQueue || 'default';\n\n const handle = await client.workflow.start(workflow.name, {\n workflowId,\n taskQueue,\n args: [input],\n workflowExecutionTimeout: options.workflowExecutionTimeout,\n memo: options.memo,\n // searchAttributes requires specific types, omit for now if not properly typed\n });\n\n return this.wrapHandle<TOutput>(handle);\n }\n\n /**\n * Get a handle to an existing workflow\n */\n getHandle<TOutput = unknown>(workflowId: string): WorkflowHandle<TOutput> {\n // Create a lazy handle that connects when needed\n return {\n workflowId,\n runId: '', // Will be populated when we fetch\n result: async () => {\n const client = await this.getClient();\n const handle = client.workflow.getHandle(workflowId);\n return handle.result() as Promise<TOutput>;\n },\n query: async <TResult = unknown>(queryName: string) => {\n const client = await this.getClient();\n const handle = client.workflow.getHandle(workflowId);\n return handle.query<TResult>(queryName);\n },\n signal: async <TPayload = unknown>(signalName: string, payload: TPayload) => {\n const client = await this.getClient();\n const handle = client.workflow.getHandle(workflowId);\n await handle.signal(signalName, payload);\n },\n cancel: async () => {\n const client = await this.getClient();\n const handle = client.workflow.getHandle(workflowId);\n await handle.cancel();\n },\n terminate: async (reason?: string) => {\n const client = await this.getClient();\n const handle = client.workflow.getHandle(workflowId);\n await handle.terminate(reason);\n },\n };\n }\n\n /**\n * Signal an existing workflow\n */\n async signal<TPayload = unknown>(\n workflowId: string,\n signalName: string,\n payload: TPayload\n ): Promise<void> {\n const client = await this.getClient();\n const handle = client.workflow.getHandle(workflowId);\n await handle.signal(signalName, payload);\n }\n\n /**\n * Query an existing workflow\n */\n async query<TResult = unknown>(\n workflowId: string,\n queryName: string\n ): Promise<TResult> {\n const client = await this.getClient();\n const handle = client.workflow.getHandle(workflowId);\n return handle.query<TResult>(queryName);\n }\n\n /**\n * Wrap a Temporal workflow handle in our interface\n */\n private wrapHandle<TOutput>(\n handle: Awaited<ReturnType<Client['workflow']['start']>>\n ): WorkflowHandle<TOutput> {\n return {\n workflowId: handle.workflowId,\n runId: handle.firstExecutionRunId,\n result: () => handle.result() as Promise<TOutput>,\n query: <TResult = unknown>(queryName: string) =>\n handle.query<TResult>(queryName),\n signal: <TPayload = unknown>(signalName: string, payload: TPayload) =>\n handle.signal(signalName, payload),\n cancel: async () => {\n await handle.cancel();\n },\n terminate: async (reason?: string) => {\n await handle.terminate(reason);\n },\n };\n }\n}\n\n// =============================================================================\n// Factory Function\n// =============================================================================\n\n/**\n * Create a Temporal Functions client\n *\n * @example\n * ```typescript\n * import { tfn } from 'temporal-functions/client';\n *\n * const client = tfn.client({\n * temporal: {\n * address: 'localhost:7233',\n * namespace: 'default',\n * },\n * taskQueue: 'my-queue',\n * });\n *\n * const result = await client.invoke(myWorkflow, { data: 'hello' });\n * ```\n */\nfunction createClient(config: ClientConfig): TFNClient {\n return new TemporalFunctionsClient(config);\n}\n\n// =============================================================================\n// Export\n// =============================================================================\n\nexport const tfn = {\n client: createClient,\n};\n\nexport { createClient };\nexport type { ClientConfig, TFNClient, WorkflowHandle, StartWorkflowOptions };\nexport default tfn;\n"]}
|
package/dist/client/index.mjs
CHANGED
|
@@ -39,10 +39,16 @@ var TemporalFunctionsClient = class {
|
|
|
39
39
|
} : void 0
|
|
40
40
|
} : void 0
|
|
41
41
|
});
|
|
42
|
-
|
|
42
|
+
const clientOptions = {
|
|
43
43
|
connection,
|
|
44
44
|
namespace: this.config.temporal.namespace
|
|
45
|
-
}
|
|
45
|
+
};
|
|
46
|
+
if (this.config.interceptors?.workflow) {
|
|
47
|
+
clientOptions.interceptors = {
|
|
48
|
+
workflow: this.config.interceptors.workflow
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
this.client = new Client(clientOptions);
|
|
46
52
|
return this.client;
|
|
47
53
|
})();
|
|
48
54
|
return this.connectionPromise;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/client/index.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * Temporal Functions - Client Package\n *\n * Lightweight client for triggering workflows.\n * Import from 'temporal-functions/client'.\n */\n\nimport { Client, Connection } from '@temporalio/client';\nimport type {\n ClientConfig,\n WorkflowDef,\n StartWorkflowOptions,\n WorkflowHandle,\n TFNClient,\n} from '../types.js';\n\n// =============================================================================\n// Client Implementation\n// =============================================================================\n\nclass TemporalFunctionsClient implements TFNClient {\n private client: Client | null = null;\n private config: ClientConfig;\n private connectionPromise: Promise<Client> | null = null;\n\n constructor(config: ClientConfig) {\n this.config = {\n ...config,\n temporal: {\n namespace: 'default',\n ...config.temporal,\n },\n taskQueue: config.taskQueue || 'default',\n };\n }\n\n /**\n * Lazily connect to Temporal\n */\n private async getClient(): Promise<Client> {\n if (this.client) {\n return this.client;\n }\n\n if (this.connectionPromise) {\n return this.connectionPromise;\n }\n\n this.connectionPromise = (async () => {\n const connection = await Connection.connect({\n address: this.config.temporal.address,\n tls: this.config.temporal.tls\n ? {\n clientCertPair: this.config.temporal.tls.clientCertPath\n ? {\n crt: await import('fs').then((fs) =>\n fs.promises.readFile(this.config.temporal.tls!.clientCertPath!)\n ),\n key: await import('fs').then((fs) =>\n fs.promises.readFile(this.config.temporal.tls!.clientKeyPath!)\n ),\n }\n : undefined,\n }\n : undefined,\n });\n\n this.client = new Client({\n connection,\n namespace: this.config.temporal.namespace,\n });\n\n return this.client;\n })();\n\n return this.connectionPromise;\n }\n\n /**\n * Generate a workflow ID if not provided\n */\n private generateWorkflowId(workflowName: string): string {\n const timestamp = Date.now();\n const random = Math.random().toString(36).substring(2, 8);\n return `${workflowName}-${timestamp}-${random}`;\n }\n\n /**\n * Start a workflow and wait for the result\n */\n async invoke<TInput, TOutput>(\n workflow: WorkflowDef<TInput, TOutput>,\n input: TInput,\n options: StartWorkflowOptions = {}\n ): Promise<TOutput> {\n const handle = await this.start(workflow, input, options);\n return handle.result();\n }\n\n /**\n * Start a workflow without waiting (fire and forget)\n */\n async start<TInput, TOutput>(\n workflow: WorkflowDef<TInput, TOutput>,\n input: TInput,\n options: StartWorkflowOptions = {}\n ): Promise<WorkflowHandle<TOutput>> {\n const client = await this.getClient();\n\n const workflowId = options.workflowId || this.generateWorkflowId(workflow.name);\n const taskQueue = options.taskQueue || workflow.options.taskQueue || this.config.taskQueue || 'default';\n\n const handle = await client.workflow.start(workflow.name, {\n workflowId,\n taskQueue,\n args: [input],\n workflowExecutionTimeout: options.workflowExecutionTimeout,\n memo: options.memo,\n // searchAttributes requires specific types, omit for now if not properly typed\n });\n\n return this.wrapHandle<TOutput>(handle);\n }\n\n /**\n * Get a handle to an existing workflow\n */\n getHandle<TOutput = unknown>(workflowId: string): WorkflowHandle<TOutput> {\n // Create a lazy handle that connects when needed\n return {\n workflowId,\n runId: '', // Will be populated when we fetch\n result: async () => {\n const client = await this.getClient();\n const handle = client.workflow.getHandle(workflowId);\n return handle.result() as Promise<TOutput>;\n },\n query: async <TResult = unknown>(queryName: string) => {\n const client = await this.getClient();\n const handle = client.workflow.getHandle(workflowId);\n return handle.query<TResult>(queryName);\n },\n signal: async <TPayload = unknown>(signalName: string, payload: TPayload) => {\n const client = await this.getClient();\n const handle = client.workflow.getHandle(workflowId);\n await handle.signal(signalName, payload);\n },\n cancel: async () => {\n const client = await this.getClient();\n const handle = client.workflow.getHandle(workflowId);\n await handle.cancel();\n },\n terminate: async (reason?: string) => {\n const client = await this.getClient();\n const handle = client.workflow.getHandle(workflowId);\n await handle.terminate(reason);\n },\n };\n }\n\n /**\n * Signal an existing workflow\n */\n async signal<TPayload = unknown>(\n workflowId: string,\n signalName: string,\n payload: TPayload\n ): Promise<void> {\n const client = await this.getClient();\n const handle = client.workflow.getHandle(workflowId);\n await handle.signal(signalName, payload);\n }\n\n /**\n * Query an existing workflow\n */\n async query<TResult = unknown>(\n workflowId: string,\n queryName: string\n ): Promise<TResult> {\n const client = await this.getClient();\n const handle = client.workflow.getHandle(workflowId);\n return handle.query<TResult>(queryName);\n }\n\n /**\n * Wrap a Temporal workflow handle in our interface\n */\n private wrapHandle<TOutput>(\n handle: Awaited<ReturnType<Client['workflow']['start']>>\n ): WorkflowHandle<TOutput> {\n return {\n workflowId: handle.workflowId,\n runId: handle.firstExecutionRunId,\n result: () => handle.result() as Promise<TOutput>,\n query: <TResult = unknown>(queryName: string) =>\n handle.query<TResult>(queryName),\n signal: <TPayload = unknown>(signalName: string, payload: TPayload) =>\n handle.signal(signalName, payload),\n cancel: async () => {\n await handle.cancel();\n },\n terminate: async (reason?: string) => {\n await handle.terminate(reason);\n },\n };\n }\n}\n\n// =============================================================================\n// Factory Function\n// =============================================================================\n\n/**\n * Create a Temporal Functions client\n *\n * @example\n * ```typescript\n * import { tfn } from 'temporal-functions/client';\n *\n * const client = tfn.client({\n * temporal: {\n * address: 'localhost:7233',\n * namespace: 'default',\n * },\n * taskQueue: 'my-queue',\n * });\n *\n * const result = await client.invoke(myWorkflow, { data: 'hello' });\n * ```\n */\nfunction createClient(config: ClientConfig): TFNClient {\n return new TemporalFunctionsClient(config);\n}\n\n// =============================================================================\n// Export\n// =============================================================================\n\nexport const tfn = {\n client: createClient,\n};\n\nexport { createClient };\nexport type { ClientConfig, TFNClient, WorkflowHandle, StartWorkflowOptions };\nexport default tfn;\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/client/index.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["/**\n * Temporal Functions - Client Package\n *\n * Lightweight client for triggering workflows.\n * Import from 'temporal-functions/client'.\n */\n\nimport { Client, Connection, type ClientOptions } from '@temporalio/client';\nimport type {\n ClientConfig,\n WorkflowDef,\n StartWorkflowOptions,\n WorkflowHandle,\n TFNClient,\n} from '../types.js';\n\n// =============================================================================\n// Client Implementation\n// =============================================================================\n\nclass TemporalFunctionsClient implements TFNClient {\n private client: Client | null = null;\n private config: ClientConfig;\n private connectionPromise: Promise<Client> | null = null;\n\n constructor(config: ClientConfig) {\n this.config = {\n ...config,\n temporal: {\n namespace: 'default',\n ...config.temporal,\n },\n taskQueue: config.taskQueue || 'default',\n };\n }\n\n /**\n * Lazily connect to Temporal\n */\n private async getClient(): Promise<Client> {\n if (this.client) {\n return this.client;\n }\n\n if (this.connectionPromise) {\n return this.connectionPromise;\n }\n\n this.connectionPromise = (async () => {\n const connection = await Connection.connect({\n address: this.config.temporal.address,\n tls: this.config.temporal.tls\n ? {\n clientCertPair: this.config.temporal.tls.clientCertPath\n ? {\n crt: await import('fs').then((fs) =>\n fs.promises.readFile(this.config.temporal.tls!.clientCertPath!)\n ),\n key: await import('fs').then((fs) =>\n fs.promises.readFile(this.config.temporal.tls!.clientKeyPath!)\n ),\n }\n : undefined,\n }\n : undefined,\n });\n\n // Build client options with optional interceptors\n const clientOptions: ClientOptions = {\n connection,\n namespace: this.config.temporal.namespace!,\n };\n\n // Add workflow interceptors if configured (e.g., for OpenTelemetry)\n if (this.config.interceptors?.workflow) {\n clientOptions.interceptors = {\n workflow: this.config.interceptors.workflow,\n };\n }\n\n this.client = new Client(clientOptions);\n\n return this.client;\n })();\n\n return this.connectionPromise;\n }\n\n /**\n * Generate a workflow ID if not provided\n */\n private generateWorkflowId(workflowName: string): string {\n const timestamp = Date.now();\n const random = Math.random().toString(36).substring(2, 8);\n return `${workflowName}-${timestamp}-${random}`;\n }\n\n /**\n * Start a workflow and wait for the result\n */\n async invoke<TInput, TOutput>(\n workflow: WorkflowDef<TInput, TOutput>,\n input: TInput,\n options: StartWorkflowOptions = {}\n ): Promise<TOutput> {\n const handle = await this.start(workflow, input, options);\n return handle.result();\n }\n\n /**\n * Start a workflow without waiting (fire and forget)\n */\n async start<TInput, TOutput>(\n workflow: WorkflowDef<TInput, TOutput>,\n input: TInput,\n options: StartWorkflowOptions = {}\n ): Promise<WorkflowHandle<TOutput>> {\n const client = await this.getClient();\n\n const workflowId = options.workflowId || this.generateWorkflowId(workflow.name);\n const taskQueue = options.taskQueue || workflow.options.taskQueue || this.config.taskQueue || 'default';\n\n const handle = await client.workflow.start(workflow.name, {\n workflowId,\n taskQueue,\n args: [input],\n workflowExecutionTimeout: options.workflowExecutionTimeout,\n memo: options.memo,\n // searchAttributes requires specific types, omit for now if not properly typed\n });\n\n return this.wrapHandle<TOutput>(handle);\n }\n\n /**\n * Get a handle to an existing workflow\n */\n getHandle<TOutput = unknown>(workflowId: string): WorkflowHandle<TOutput> {\n // Create a lazy handle that connects when needed\n return {\n workflowId,\n runId: '', // Will be populated when we fetch\n result: async () => {\n const client = await this.getClient();\n const handle = client.workflow.getHandle(workflowId);\n return handle.result() as Promise<TOutput>;\n },\n query: async <TResult = unknown>(queryName: string) => {\n const client = await this.getClient();\n const handle = client.workflow.getHandle(workflowId);\n return handle.query<TResult>(queryName);\n },\n signal: async <TPayload = unknown>(signalName: string, payload: TPayload) => {\n const client = await this.getClient();\n const handle = client.workflow.getHandle(workflowId);\n await handle.signal(signalName, payload);\n },\n cancel: async () => {\n const client = await this.getClient();\n const handle = client.workflow.getHandle(workflowId);\n await handle.cancel();\n },\n terminate: async (reason?: string) => {\n const client = await this.getClient();\n const handle = client.workflow.getHandle(workflowId);\n await handle.terminate(reason);\n },\n };\n }\n\n /**\n * Signal an existing workflow\n */\n async signal<TPayload = unknown>(\n workflowId: string,\n signalName: string,\n payload: TPayload\n ): Promise<void> {\n const client = await this.getClient();\n const handle = client.workflow.getHandle(workflowId);\n await handle.signal(signalName, payload);\n }\n\n /**\n * Query an existing workflow\n */\n async query<TResult = unknown>(\n workflowId: string,\n queryName: string\n ): Promise<TResult> {\n const client = await this.getClient();\n const handle = client.workflow.getHandle(workflowId);\n return handle.query<TResult>(queryName);\n }\n\n /**\n * Wrap a Temporal workflow handle in our interface\n */\n private wrapHandle<TOutput>(\n handle: Awaited<ReturnType<Client['workflow']['start']>>\n ): WorkflowHandle<TOutput> {\n return {\n workflowId: handle.workflowId,\n runId: handle.firstExecutionRunId,\n result: () => handle.result() as Promise<TOutput>,\n query: <TResult = unknown>(queryName: string) =>\n handle.query<TResult>(queryName),\n signal: <TPayload = unknown>(signalName: string, payload: TPayload) =>\n handle.signal(signalName, payload),\n cancel: async () => {\n await handle.cancel();\n },\n terminate: async (reason?: string) => {\n await handle.terminate(reason);\n },\n };\n }\n}\n\n// =============================================================================\n// Factory Function\n// =============================================================================\n\n/**\n * Create a Temporal Functions client\n *\n * @example\n * ```typescript\n * import { tfn } from 'temporal-functions/client';\n *\n * const client = tfn.client({\n * temporal: {\n * address: 'localhost:7233',\n * namespace: 'default',\n * },\n * taskQueue: 'my-queue',\n * });\n *\n * const result = await client.invoke(myWorkflow, { data: 'hello' });\n * ```\n */\nfunction createClient(config: ClientConfig): TFNClient {\n return new TemporalFunctionsClient(config);\n}\n\n// =============================================================================\n// Export\n// =============================================================================\n\nexport const tfn = {\n client: createClient,\n};\n\nexport { createClient };\nexport type { ClientConfig, TFNClient, WorkflowHandle, StartWorkflowOptions };\nexport default tfn;\n"]}
|
package/dist/index.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { F as FunctionOptions, a as FunctionDef, W as WorkflowHandler, b as WorkflowOptions, c as WorkflowDef, H as HttpTriggerOptions, C as CronTriggerOptions, R as Registry } from './types-
|
|
2
|
-
export { g as ClientConfig, f as RetryPolicy, S as StartWorkflowOptions, j as TFNClient, k as TFNWorker, T as TemporalConfig, h as WorkerConfig, d as WorkflowContext, i as WorkflowHandle, e as WorkflowInfo } from './types-
|
|
1
|
+
import { F as FunctionOptions, a as FunctionDef, W as WorkflowHandler, b as WorkflowOptions, c as WorkflowDef, H as HttpTriggerOptions, C as CronTriggerOptions, R as Registry } from './types-Curq8YlS.mjs';
|
|
2
|
+
export { g as ClientConfig, f as RetryPolicy, S as StartWorkflowOptions, j as TFNClient, k as TFNWorker, T as TemporalConfig, h as WorkerConfig, d as WorkflowContext, i as WorkflowHandle, e as WorkflowInfo } from './types-Curq8YlS.mjs';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Temporal Functions - Main Entry Point
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { F as FunctionOptions, a as FunctionDef, W as WorkflowHandler, b as WorkflowOptions, c as WorkflowDef, H as HttpTriggerOptions, C as CronTriggerOptions, R as Registry } from './types-
|
|
2
|
-
export { g as ClientConfig, f as RetryPolicy, S as StartWorkflowOptions, j as TFNClient, k as TFNWorker, T as TemporalConfig, h as WorkerConfig, d as WorkflowContext, i as WorkflowHandle, e as WorkflowInfo } from './types-
|
|
1
|
+
import { F as FunctionOptions, a as FunctionDef, W as WorkflowHandler, b as WorkflowOptions, c as WorkflowDef, H as HttpTriggerOptions, C as CronTriggerOptions, R as Registry } from './types-Curq8YlS.js';
|
|
2
|
+
export { g as ClientConfig, f as RetryPolicy, S as StartWorkflowOptions, j as TFNClient, k as TFNWorker, T as TemporalConfig, h as WorkerConfig, d as WorkflowContext, i as WorkflowHandle, e as WorkflowInfo } from './types-Curq8YlS.js';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Temporal Functions - Main Entry Point
|
package/dist/testing/index.d.mts
CHANGED
package/dist/testing/index.d.ts
CHANGED
|
@@ -172,6 +172,28 @@ interface TLSConfig {
|
|
|
172
172
|
/** Path to CA certificate */
|
|
173
173
|
serverRootCACertPath?: string;
|
|
174
174
|
}
|
|
175
|
+
/**
|
|
176
|
+
* Client interceptors configuration
|
|
177
|
+
*
|
|
178
|
+
* Uses the actual Temporal SDK interceptor types for full compatibility
|
|
179
|
+
* with @temporalio/interceptors-opentelemetry and other interceptor packages.
|
|
180
|
+
*
|
|
181
|
+
* @example
|
|
182
|
+
* ```typescript
|
|
183
|
+
* import { OpenTelemetryWorkflowClientInterceptor } from '@temporalio/interceptors-opentelemetry';
|
|
184
|
+
*
|
|
185
|
+
* const client = tfn.client({
|
|
186
|
+
* temporal: { address: 'localhost:7233' },
|
|
187
|
+
* interceptors: {
|
|
188
|
+
* workflow: [new OpenTelemetryWorkflowClientInterceptor()],
|
|
189
|
+
* },
|
|
190
|
+
* });
|
|
191
|
+
* ```
|
|
192
|
+
*/
|
|
193
|
+
interface ClientInterceptors {
|
|
194
|
+
/** Workflow client interceptors (e.g., for OpenTelemetry trace propagation) */
|
|
195
|
+
workflow?: any[];
|
|
196
|
+
}
|
|
175
197
|
/**
|
|
176
198
|
* Client configuration options
|
|
177
199
|
*/
|
|
@@ -180,6 +202,8 @@ interface ClientConfig {
|
|
|
180
202
|
temporal: TemporalConfig;
|
|
181
203
|
/** Default task queue for workflows */
|
|
182
204
|
taskQueue?: string;
|
|
205
|
+
/** Client interceptors for customizing behavior */
|
|
206
|
+
interceptors?: ClientInterceptors;
|
|
183
207
|
}
|
|
184
208
|
/**
|
|
185
209
|
* Options when starting a workflow
|
|
@@ -195,6 +219,8 @@ interface StartWorkflowOptions {
|
|
|
195
219
|
memo?: Record<string, unknown>;
|
|
196
220
|
/** Search attributes */
|
|
197
221
|
searchAttributes?: Record<string, unknown>;
|
|
222
|
+
/** Headers for context propagation (e.g., OpenTelemetry trace context) */
|
|
223
|
+
headers?: Record<string, string>;
|
|
198
224
|
}
|
|
199
225
|
/**
|
|
200
226
|
* Handle to a running workflow
|
|
@@ -172,6 +172,28 @@ interface TLSConfig {
|
|
|
172
172
|
/** Path to CA certificate */
|
|
173
173
|
serverRootCACertPath?: string;
|
|
174
174
|
}
|
|
175
|
+
/**
|
|
176
|
+
* Client interceptors configuration
|
|
177
|
+
*
|
|
178
|
+
* Uses the actual Temporal SDK interceptor types for full compatibility
|
|
179
|
+
* with @temporalio/interceptors-opentelemetry and other interceptor packages.
|
|
180
|
+
*
|
|
181
|
+
* @example
|
|
182
|
+
* ```typescript
|
|
183
|
+
* import { OpenTelemetryWorkflowClientInterceptor } from '@temporalio/interceptors-opentelemetry';
|
|
184
|
+
*
|
|
185
|
+
* const client = tfn.client({
|
|
186
|
+
* temporal: { address: 'localhost:7233' },
|
|
187
|
+
* interceptors: {
|
|
188
|
+
* workflow: [new OpenTelemetryWorkflowClientInterceptor()],
|
|
189
|
+
* },
|
|
190
|
+
* });
|
|
191
|
+
* ```
|
|
192
|
+
*/
|
|
193
|
+
interface ClientInterceptors {
|
|
194
|
+
/** Workflow client interceptors (e.g., for OpenTelemetry trace propagation) */
|
|
195
|
+
workflow?: any[];
|
|
196
|
+
}
|
|
175
197
|
/**
|
|
176
198
|
* Client configuration options
|
|
177
199
|
*/
|
|
@@ -180,6 +202,8 @@ interface ClientConfig {
|
|
|
180
202
|
temporal: TemporalConfig;
|
|
181
203
|
/** Default task queue for workflows */
|
|
182
204
|
taskQueue?: string;
|
|
205
|
+
/** Client interceptors for customizing behavior */
|
|
206
|
+
interceptors?: ClientInterceptors;
|
|
183
207
|
}
|
|
184
208
|
/**
|
|
185
209
|
* Options when starting a workflow
|
|
@@ -195,6 +219,8 @@ interface StartWorkflowOptions {
|
|
|
195
219
|
memo?: Record<string, unknown>;
|
|
196
220
|
/** Search attributes */
|
|
197
221
|
searchAttributes?: Record<string, unknown>;
|
|
222
|
+
/** Headers for context propagation (e.g., OpenTelemetry trace context) */
|
|
223
|
+
headers?: Record<string, string>;
|
|
198
224
|
}
|
|
199
225
|
/**
|
|
200
226
|
* Handle to a running workflow
|
package/dist/worker/index.d.mts
CHANGED
package/dist/worker/index.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@astami/temporal-functions",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.2",
|
|
4
4
|
"description": "A lightweight TypeScript framework providing lambda-like DX on top of Temporal's durable execution engine",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.mjs",
|