@twin.org/background-task-models 0.0.2-next.9 → 0.0.3-next.10

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.
Files changed (33) hide show
  1. package/README.md +1 -1
  2. package/dist/es/index.js +9 -0
  3. package/dist/es/index.js.map +1 -0
  4. package/dist/es/models/IBackgroundTask.js +2 -0
  5. package/dist/es/models/IBackgroundTask.js.map +1 -0
  6. package/dist/es/models/IBackgroundTaskComponent.js +2 -0
  7. package/dist/es/models/IBackgroundTaskComponent.js.map +1 -0
  8. package/dist/es/models/IScheduledTaskInfo.js +2 -0
  9. package/dist/es/models/IScheduledTaskInfo.js.map +1 -0
  10. package/dist/es/models/IScheduledTaskTime.js +4 -0
  11. package/dist/es/models/IScheduledTaskTime.js.map +1 -0
  12. package/dist/es/models/ITaskSchedulerComponent.js +2 -0
  13. package/dist/es/models/ITaskSchedulerComponent.js.map +1 -0
  14. package/dist/{esm/index.mjs → es/models/taskStatus.js} +2 -13
  15. package/dist/es/models/taskStatus.js.map +1 -0
  16. package/dist/types/index.d.ts +6 -7
  17. package/dist/types/models/IBackgroundTask.d.ts +1 -1
  18. package/dist/types/models/{IBackgroundTaskConnector.d.ts → IBackgroundTaskComponent.d.ts} +17 -7
  19. package/dist/types/models/IScheduledTaskInfo.d.ts +1 -1
  20. package/dist/types/models/ITaskSchedulerComponent.d.ts +2 -2
  21. package/docs/changelog.md +133 -42
  22. package/docs/examples.md +179 -1
  23. package/docs/reference/index.md +1 -2
  24. package/docs/reference/interfaces/IBackgroundTask.md +22 -22
  25. package/docs/reference/interfaces/{IBackgroundTaskConnector.md → IBackgroundTaskComponent.md} +45 -25
  26. package/docs/reference/interfaces/IScheduledTaskInfo.md +1 -1
  27. package/docs/reference/interfaces/IScheduledTaskTime.md +8 -8
  28. package/docs/reference/interfaces/ITaskSchedulerComponent.md +3 -11
  29. package/docs/reference/variables/TaskStatus.md +5 -5
  30. package/package.json +8 -10
  31. package/dist/cjs/index.cjs +0 -43
  32. package/dist/types/factories/backgroundTaskConnectorFactory.d.ts +0 -6
  33. package/docs/reference/variables/BackgroundTaskConnectorFactory.md +0 -5
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # TWIN Background Task Models
2
2
 
3
- Models which define the structure of the background task contracts and connectors.
3
+ This package is part of the background task toolkit and helps build reliable asynchronous workflows in TWIN applications.
4
4
 
5
5
  ## Installation
6
6
 
@@ -0,0 +1,9 @@
1
+ // Copyright 2024 IOTA Stiftung.
2
+ // SPDX-License-Identifier: Apache-2.0.
3
+ export * from "./models/IBackgroundTask.js";
4
+ export * from "./models/IBackgroundTaskComponent.js";
5
+ export * from "./models/IScheduledTaskInfo.js";
6
+ export * from "./models/IScheduledTaskTime.js";
7
+ export * from "./models/ITaskSchedulerComponent.js";
8
+ export * from "./models/taskStatus.js";
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,uCAAuC;AACvC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,sCAAsC,CAAC;AACrD,cAAc,gCAAgC,CAAC;AAC/C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,qCAAqC,CAAC;AACpD,cAAc,wBAAwB,CAAC","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nexport * from \"./models/IBackgroundTask.js\";\nexport * from \"./models/IBackgroundTaskComponent.js\";\nexport * from \"./models/IScheduledTaskInfo.js\";\nexport * from \"./models/IScheduledTaskTime.js\";\nexport * from \"./models/ITaskSchedulerComponent.js\";\nexport * from \"./models/taskStatus.js\";\n"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=IBackgroundTask.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IBackgroundTask.js","sourceRoot":"","sources":["../../../src/models/IBackgroundTask.ts"],"names":[],"mappings":"","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport type { IError } from \"@twin.org/core\";\nimport type { TaskStatus } from \"./taskStatus.js\";\n\n/**\n * Interface describing a background task.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport interface IBackgroundTask<T = any, U = any> {\n\t/**\n\t * The id.\n\t */\n\tid: string;\n\n\t/**\n\t * The type of the task.\n\t */\n\ttype: string;\n\n\t/**\n\t * The thread id for the task.\n\t */\n\tthreadId: string;\n\n\t/**\n\t * The retry interval in milliseconds, undefined if default scheduling.\n\t */\n\tretryInterval?: number;\n\n\t/**\n\t * The number of retries remaining, undefined if infinite retries.\n\t */\n\tretriesRemaining?: number;\n\n\t/**\n\t * The date the task was created.\n\t */\n\tdateCreated: string;\n\n\t/**\n\t * The date the task was last modified.\n\t */\n\tdateModified: string;\n\n\t/**\n\t * The date the task was complete.\n\t */\n\tdateCompleted?: string;\n\n\t/**\n\t * The date the task was cancelled.\n\t */\n\tdateCancelled?: string;\n\n\t/**\n\t * The date until when to retain.\n\t */\n\tdateRetainUntil?: string;\n\n\t/**\n\t * The status of the task.\n\t */\n\tstatus: TaskStatus;\n\n\t/**\n\t * The payload to execute the task with.\n\t */\n\tpayload?: T;\n\n\t/**\n\t * The result of the execution.\n\t */\n\tresult?: U;\n\n\t/**\n\t * The error at last execution.\n\t */\n\terror?: IError;\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=IBackgroundTaskComponent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IBackgroundTaskComponent.js","sourceRoot":"","sources":["../../../src/models/IBackgroundTaskComponent.ts"],"names":[],"mappings":"","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport type { IComponent } from \"@twin.org/core\";\nimport type { SortDirection } from \"@twin.org/entity\";\nimport type { IBackgroundTask } from \"./IBackgroundTask.js\";\nimport type { TaskStatus } from \"./taskStatus.js\";\n\n/**\n * Interface describing a background task component.\n */\nexport interface IBackgroundTaskComponent extends IComponent {\n\t/**\n\t * Register a handler for a task.\n\t * @param taskType The type of the task the handler can process.\n\t * @param module The module the handler is in.\n\t * @param method The method in the module to execute.\n\t * @param stateChangeCallback The callback to execute when the task state is updated.\n\t * @param options Additional options for the task.\n\t * @param options.maxWorkerCount The maximum number of workers in the pool.\n\t * @param options.idleShutdownTimeout Terminate the worker after it has been idle for the specified timeout in milliseconds, defaults to 0 shutdown immediately, -1 to keep forever.\n\t * @param options.initialiseMethod The initialisation method to call on the module when a worker is started.\n\t * @param options.shutdownMethod The shutdown method to call on the module when a worker is stopped.\n\t * @returns Nothing.\n\t */\n\tregisterHandler<T, U>(\n\t\ttaskType: string,\n\t\tmodule: string,\n\t\tmethod: string,\n\t\tstateChangeCallback?: (task: IBackgroundTask<T, U>) => Promise<void>,\n\t\toptions?: {\n\t\t\tmaxWorkerCount?: number;\n\t\t\tidleShutdownTimeout?: number;\n\t\t\tinitialiseMethod?: string;\n\t\t\tshutdownMethod?: string;\n\t\t}\n\t): Promise<void>;\n\n\t/**\n\t * Unregister a handler for a task.\n\t * @param taskType The type of the task handler to remove.\n\t * @returns Nothing.\n\t */\n\tunregisterHandler(taskType: string): Promise<void>;\n\n\t/**\n\t * Create a new task.\n\t * @param taskType The type of the task.\n\t * @param payload The payload for the task.\n\t * @param options Additional options for the task.\n\t * @param options.retryCount The number of times to retry the task if it fails, leave undefined to retry forever.\n\t * @param options.retryInterval The interval in milliseconds to wait between retries, defaults to 5000, leave undefined for default scheduling.\n\t * @param options.retainFor The amount of time in milliseconds to retain the result until removal, defaults to 0 for immediate removal, set to -1 to keep forever.\n\t * @returns The id of the created task.\n\t */\n\tcreate<T>(\n\t\ttaskType: string,\n\t\tpayload?: T,\n\t\toptions?: {\n\t\t\tretryCount?: number;\n\t\t\tretryInterval?: number;\n\t\t\tretainFor?: number;\n\t\t}\n\t): Promise<string>;\n\n\t/**\n\t * Get the task details.\n\t * @param taskId The id of the task to get the details for.\n\t * @returns The details of the task.\n\t */\n\tget<T, U>(taskId: string): Promise<IBackgroundTask<T, U> | undefined>;\n\n\t/**\n\t * Retry a failed task immediately instead of waiting for it's next scheduled retry time.\n\t * @param taskId The id of the task to retry.\n\t * @returns Nothing.\n\t */\n\tretry(taskId: string): Promise<void>;\n\n\t/**\n\t * Remove a task ignoring any retain until date.\n\t * @param taskId The id of the task to remove.\n\t * @returns Nothing.\n\t */\n\tremove(taskId: string): Promise<void>;\n\n\t/**\n\t * Cancel a task, will only be actioned if the task is currently pending.\n\t * @param taskId The id of the task to cancel.\n\t * @returns Nothing.\n\t */\n\tcancel(taskId: string): Promise<void>;\n\n\t/**\n\t * Get a list of tasks.\n\t * @param taskType The type of the task to get.\n\t * @param taskStatus The status of the task to get.\n\t * @param sortProperty The property to sort by, defaults to dateCreated.\n\t * @param sortDirection The order to sort by, defaults to ascending.\n\t * @param cursor The cursor to get the next page of tasks.\n\t * @param limit Limit the number of entities to return.\n\t * @returns The list of tasks.\n\t */\n\tquery(\n\t\ttaskType?: string,\n\t\ttaskStatus?: TaskStatus,\n\t\tsortProperty?: \"dateCreated\" | \"dateModified\" | \"dateCompleted\" | \"status\",\n\t\tsortDirection?: SortDirection,\n\t\tcursor?: string,\n\t\tlimit?: number\n\t): Promise<{\n\t\tentities: IBackgroundTask[];\n\t\tcursor?: string;\n\t}>;\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=IScheduledTaskInfo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IScheduledTaskInfo.js","sourceRoot":"","sources":["../../../src/models/IScheduledTaskInfo.ts"],"names":[],"mappings":"","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport type { IScheduledTaskTime } from \"./IScheduledTaskTime.js\";\n\n/**\n * Interface describing a scheduled task information.\n */\nexport interface IScheduledTaskInfo {\n\t/**\n\t * The information for the tasks.\n\t */\n\ttasks: {\n\t\t[id: string]: IScheduledTaskTime[];\n\t};\n}\n"]}
@@ -0,0 +1,4 @@
1
+ // Copyright 2024 IOTA Stiftung.
2
+ // SPDX-License-Identifier: Apache-2.0.
3
+ export {};
4
+ //# sourceMappingURL=IScheduledTaskTime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IScheduledTaskTime.js","sourceRoot":"","sources":["../../../src/models/IScheduledTaskTime.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,uCAAuC","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\n\n/**\n * Interface describing a scheduled task time.\n */\nexport interface IScheduledTaskTime {\n\t/**\n\t * The date/time to start the task, if not provided defaults to first interval from now.\n\t */\n\tnextTriggerTime?: number;\n\n\t/**\n\t * The interval in days to repeat the task, if no intervals are set the task will not repeat.\n\t */\n\tintervalDays?: number;\n\n\t/**\n\t * The interval in hours to repeat the task, if no intervals are set the task will not repeat.\n\t */\n\tintervalHours?: number;\n\n\t/**\n\t * The interval in minutes to repeat the task, if no intervals are set the task will not repeat.\n\t */\n\tintervalMinutes?: number;\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ITaskSchedulerComponent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ITaskSchedulerComponent.js","sourceRoot":"","sources":["../../../src/models/ITaskSchedulerComponent.ts"],"names":[],"mappings":"","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\nimport type { IComponent } from \"@twin.org/core\";\nimport type { IScheduledTaskInfo } from \"./IScheduledTaskInfo.js\";\nimport type { IScheduledTaskTime } from \"./IScheduledTaskTime.js\";\n\n/**\n * Interface describing a task scheduler.\n */\nexport interface ITaskSchedulerComponent extends IComponent {\n\t/**\n\t * Add a task to the scheduler.\n\t * @param taskId The id of the task to add.\n\t * @param times The times at which the task should be scheduled.\n\t * @param taskCallback The callback to execute when the task is scheduled.\n\t * @returns Nothing.\n\t */\n\taddTask(\n\t\ttaskId: string,\n\t\ttimes: IScheduledTaskTime[],\n\t\ttaskCallback: () => Promise<void>\n\t): Promise<void>;\n\n\t/**\n\t * Remove a task from the scheduler.\n\t * @param taskId The id of the task to remove.\n\t * @returns Nothing.\n\t */\n\tremoveTask(taskId: string): Promise<void>;\n\n\t/**\n\t * Get the information about the tasks.\n\t * @returns The tasks information.\n\t */\n\ttasksInfo(): Promise<IScheduledTaskInfo>;\n}\n"]}
@@ -1,20 +1,10 @@
1
- import { Factory } from '@twin.org/core';
2
-
3
- // Copyright 2024 IOTA Stiftung.
4
- // SPDX-License-Identifier: Apache-2.0.
5
- /**
6
- * Factory for creating background task connectors.
7
- */
8
- // eslint-disable-next-line @typescript-eslint/naming-convention
9
- const BackgroundTaskConnectorFactory = Factory.createFactory("background-task");
10
-
11
1
  // Copyright 2024 IOTA Stiftung.
12
2
  // SPDX-License-Identifier: Apache-2.0.
13
3
  /**
14
4
  * Task statuses.
15
5
  */
16
6
  // eslint-disable-next-line @typescript-eslint/naming-convention
17
- const TaskStatus = {
7
+ export const TaskStatus = {
18
8
  /**
19
9
  * Pending.
20
10
  */
@@ -36,5 +26,4 @@ const TaskStatus = {
36
26
  */
37
27
  Cancelled: "cancelled"
38
28
  };
39
-
40
- export { BackgroundTaskConnectorFactory, TaskStatus };
29
+ //# sourceMappingURL=taskStatus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"taskStatus.js","sourceRoot":"","sources":["../../../src/models/taskStatus.ts"],"names":[],"mappings":"AAAA,gCAAgC;AAChC,uCAAuC;AAEvC;;GAEG;AACH,gEAAgE;AAChE,MAAM,CAAC,MAAM,UAAU,GAAG;IACzB;;OAEG;IACH,OAAO,EAAE,SAAS;IAElB;;OAEG;IACH,UAAU,EAAE,YAAY;IAExB;;OAEG;IACH,OAAO,EAAE,SAAS;IAElB;;OAEG;IACH,MAAM,EAAE,QAAQ;IAEhB;;OAEG;IACH,SAAS,EAAE,WAAW;CACb,CAAC","sourcesContent":["// Copyright 2024 IOTA Stiftung.\n// SPDX-License-Identifier: Apache-2.0.\n\n/**\n * Task statuses.\n */\n// eslint-disable-next-line @typescript-eslint/naming-convention\nexport const TaskStatus = {\n\t/**\n\t * Pending.\n\t */\n\tPending: \"pending\",\n\n\t/**\n\t * Processing.\n\t */\n\tProcessing: \"processing\",\n\n\t/**\n\t * Success.\n\t */\n\tSuccess: \"success\",\n\n\t/**\n\t * Failed.\n\t */\n\tFailed: \"failed\",\n\n\t/**\n\t * Cancelled.\n\t */\n\tCancelled: \"cancelled\"\n} as const;\n\n/**\n * Task statuses.\n */\nexport type TaskStatus = (typeof TaskStatus)[keyof typeof TaskStatus];\n"]}
@@ -1,7 +1,6 @@
1
- export * from "./factories/backgroundTaskConnectorFactory";
2
- export * from "./models/IBackgroundTask";
3
- export * from "./models/IBackgroundTaskConnector";
4
- export * from "./models/IScheduledTaskInfo";
5
- export * from "./models/IScheduledTaskTime";
6
- export * from "./models/ITaskSchedulerComponent";
7
- export * from "./models/taskStatus";
1
+ export * from "./models/IBackgroundTask.js";
2
+ export * from "./models/IBackgroundTaskComponent.js";
3
+ export * from "./models/IScheduledTaskInfo.js";
4
+ export * from "./models/IScheduledTaskTime.js";
5
+ export * from "./models/ITaskSchedulerComponent.js";
6
+ export * from "./models/taskStatus.js";
@@ -1,5 +1,5 @@
1
1
  import type { IError } from "@twin.org/core";
2
- import type { TaskStatus } from "./taskStatus";
2
+ import type { TaskStatus } from "./taskStatus.js";
3
3
  /**
4
4
  * Interface describing a background task.
5
5
  */
@@ -1,20 +1,30 @@
1
1
  import type { IComponent } from "@twin.org/core";
2
2
  import type { SortDirection } from "@twin.org/entity";
3
- import type { IBackgroundTask } from "./IBackgroundTask";
4
- import type { TaskStatus } from "./taskStatus";
3
+ import type { IBackgroundTask } from "./IBackgroundTask.js";
4
+ import type { TaskStatus } from "./taskStatus.js";
5
5
  /**
6
- * Interface describing a background task connector.
6
+ * Interface describing a background task component.
7
7
  */
8
- export interface IBackgroundTaskConnector extends IComponent {
8
+ export interface IBackgroundTaskComponent extends IComponent {
9
9
  /**
10
10
  * Register a handler for a task.
11
11
  * @param taskType The type of the task the handler can process.
12
12
  * @param module The module the handler is in.
13
13
  * @param method The method in the module to execute.
14
14
  * @param stateChangeCallback The callback to execute when the task state is updated.
15
+ * @param options Additional options for the task.
16
+ * @param options.maxWorkerCount The maximum number of workers in the pool.
17
+ * @param options.idleShutdownTimeout Terminate the worker after it has been idle for the specified timeout in milliseconds, defaults to 0 shutdown immediately, -1 to keep forever.
18
+ * @param options.initialiseMethod The initialisation method to call on the module when a worker is started.
19
+ * @param options.shutdownMethod The shutdown method to call on the module when a worker is stopped.
15
20
  * @returns Nothing.
16
21
  */
17
- registerHandler<T, U>(taskType: string, module: string, method: string, stateChangeCallback?: (task: IBackgroundTask<T, U>) => Promise<void>): Promise<void>;
22
+ registerHandler<T, U>(taskType: string, module: string, method: string, stateChangeCallback?: (task: IBackgroundTask<T, U>) => Promise<void>, options?: {
23
+ maxWorkerCount?: number;
24
+ idleShutdownTimeout?: number;
25
+ initialiseMethod?: string;
26
+ shutdownMethod?: string;
27
+ }): Promise<void>;
18
28
  /**
19
29
  * Unregister a handler for a task.
20
30
  * @param taskType The type of the task handler to remove.
@@ -23,7 +33,7 @@ export interface IBackgroundTaskConnector extends IComponent {
23
33
  unregisterHandler(taskType: string): Promise<void>;
24
34
  /**
25
35
  * Create a new task.
26
- * @param type The type of the task.
36
+ * @param taskType The type of the task.
27
37
  * @param payload The payload for the task.
28
38
  * @param options Additional options for the task.
29
39
  * @param options.retryCount The number of times to retry the task if it fails, leave undefined to retry forever.
@@ -31,7 +41,7 @@ export interface IBackgroundTaskConnector extends IComponent {
31
41
  * @param options.retainFor The amount of time in milliseconds to retain the result until removal, defaults to 0 for immediate removal, set to -1 to keep forever.
32
42
  * @returns The id of the created task.
33
43
  */
34
- create<T>(type: string, payload?: T, options?: {
44
+ create<T>(taskType: string, payload?: T, options?: {
35
45
  retryCount?: number;
36
46
  retryInterval?: number;
37
47
  retainFor?: number;
@@ -1,4 +1,4 @@
1
- import type { IScheduledTaskTime } from "./IScheduledTaskTime";
1
+ import type { IScheduledTaskTime } from "./IScheduledTaskTime.js";
2
2
  /**
3
3
  * Interface describing a scheduled task information.
4
4
  */
@@ -1,6 +1,6 @@
1
1
  import type { IComponent } from "@twin.org/core";
2
- import type { IScheduledTaskInfo } from "./IScheduledTaskInfo";
3
- import type { IScheduledTaskTime } from "./IScheduledTaskTime";
2
+ import type { IScheduledTaskInfo } from "./IScheduledTaskInfo.js";
3
+ import type { IScheduledTaskTime } from "./IScheduledTaskTime.js";
4
4
  /**
5
5
  * Interface describing a task scheduler.
6
6
  */
package/docs/changelog.md CHANGED
@@ -1,148 +1,239 @@
1
- # @twin.org/background-task-models - Changelog
1
+ # Changelog
2
2
 
3
- ## [0.0.2-next.9](https://github.com/twinfoundation/background-task/compare/background-task-models-v0.0.2-next.8...background-task-models-v0.0.2-next.9) (2025-10-09)
3
+ ## [0.0.3-next.10](https://github.com/iotaledger/twin-background-task/compare/background-task-models-v0.0.3-next.9...background-task-models-v0.0.3-next.10) (2026-06-09)
4
+
5
+
6
+ ### Miscellaneous Chores
7
+
8
+ * **background-task-models:** Synchronize repo versions
9
+
10
+ ## [0.0.3-next.9](https://github.com/iotaledger/twin-background-task/compare/background-task-models-v0.0.3-next.8...background-task-models-v0.0.3-next.9) (2026-06-08)
11
+
12
+
13
+ ### Features
14
+
15
+ * add context id features ([#29](https://github.com/iotaledger/twin-background-task/issues/29)) ([46ede49](https://github.com/iotaledger/twin-background-task/commit/46ede49a51a4955fe1530e645a66f0073db9a1fd))
16
+ * add multi-threading ([#32](https://github.com/iotaledger/twin-background-task/issues/32)) ([60fb5ef](https://github.com/iotaledger/twin-background-task/commit/60fb5ef55d3f7dc46a27c38d4497812d80b98e3b))
17
+ * add task scheduler ([754d973](https://github.com/iotaledger/twin-background-task/commit/754d973e7c8483e5e54e887c157661867d5a0375))
18
+ * add validate-locales ([968cbf9](https://github.com/iotaledger/twin-background-task/commit/968cbf966fffb5060305e8b221fecc0b6c8105b9))
19
+ * eslint migration to flat config ([6c9136c](https://github.com/iotaledger/twin-background-task/commit/6c9136c37bccdbbd109892d1503660aab7080d49))
20
+ * improve comment ([f2b4ac2](https://github.com/iotaledger/twin-background-task/commit/f2b4ac22fb8f735d2bf4ce28583cf7c54acdf272))
21
+ * only run tasks from your own thread ([c7d305b](https://github.com/iotaledger/twin-background-task/commit/c7d305b9807e65b8b1af6d0c2ca59e74190cab69))
22
+ * typescript 6 update ([e3f2727](https://github.com/iotaledger/twin-background-task/commit/e3f272783e0de7cf4d31f3e84a8e6f5ff633961b))
23
+ * update dependencies ([0867e02](https://github.com/iotaledger/twin-background-task/commit/0867e02fc3c034f8e8cf5918ac6cc4e6b5ca0c93))
24
+ * update dependencies ([8e65767](https://github.com/iotaledger/twin-background-task/commit/8e657679f5e4305dbcb15ac7bcb3ab8a4613a60b))
25
+ * update framework core ([a068098](https://github.com/iotaledger/twin-background-task/commit/a0680983d7923a1bfb980a67879019bb870ccc5d))
26
+ * update IComponent signatures ([e1a79bc](https://github.com/iotaledger/twin-background-task/commit/e1a79bc4dd813435c56e376f231a4b4ecd2276bf))
27
+ * use shared store mechanism ([#6](https://github.com/iotaledger/twin-background-task/issues/6)) ([27ed203](https://github.com/iotaledger/twin-background-task/commit/27ed20367d5ace7257bfa7a82b59ad70e5b5d209))
28
+
29
+ ## [0.0.3-next.8](https://github.com/iotaledger/twin-background-task/compare/background-task-models-v0.0.3-next.7...background-task-models-v0.0.3-next.8) (2026-06-08)
30
+
31
+
32
+ ### Miscellaneous Chores
33
+
34
+ * **background-task-models:** Synchronize repo versions
35
+
36
+ ## [0.0.3-next.7](https://github.com/iotaledger/twin-background-task/compare/background-task-models-v0.0.3-next.6...background-task-models-v0.0.3-next.7) (2026-05-20)
37
+
38
+
39
+ ### Features
40
+
41
+ * update dependencies ([0867e02](https://github.com/iotaledger/twin-background-task/commit/0867e02fc3c034f8e8cf5918ac6cc4e6b5ca0c93))
42
+
43
+ ## [0.0.3-next.6](https://github.com/iotaledger/twin-background-task/compare/background-task-models-v0.0.3-next.5...background-task-models-v0.0.3-next.6) (2026-05-11)
44
+
45
+
46
+ ### Features
47
+
48
+ * typescript 6 update ([e3f2727](https://github.com/iotaledger/twin-background-task/commit/e3f272783e0de7cf4d31f3e84a8e6f5ff633961b))
49
+
50
+ ## [0.0.3-next.5](https://github.com/iotaledger/twin-background-task/compare/background-task-models-v0.0.3-next.4...background-task-models-v0.0.3-next.5) (2026-04-10)
51
+
52
+
53
+ ### Miscellaneous Chores
54
+
55
+ * **background-task-models:** Synchronize repo versions
56
+
57
+ ## [0.0.3-next.4](https://github.com/iotaledger/twin-background-task/compare/background-task-models-v0.0.3-next.3...background-task-models-v0.0.3-next.4) (2026-02-23)
58
+
59
+
60
+ ### Miscellaneous Chores
61
+
62
+ * **background-task-models:** Synchronize repo versions
63
+
64
+ ## [0.0.3-next.3](https://github.com/iotaledger/twin-background-task/compare/background-task-models-v0.0.3-next.2...background-task-models-v0.0.3-next.3) (2026-01-07)
65
+
66
+
67
+ ### Miscellaneous Chores
68
+
69
+ * **background-task-models:** Synchronize repo versions
70
+
71
+ ## [0.0.3-next.2](https://github.com/iotaledger/twin-background-task/compare/background-task-models-v0.0.3-next.1...background-task-models-v0.0.3-next.2) (2025-11-28)
72
+
73
+
74
+ ### Features
75
+
76
+ * add multi-threading ([#32](https://github.com/iotaledger/twin-background-task/issues/32)) ([60fb5ef](https://github.com/iotaledger/twin-background-task/commit/60fb5ef55d3f7dc46a27c38d4497812d80b98e3b))
77
+
78
+ ## [0.0.3-next.1](https://github.com/iotaledger/twin-background-task/compare/background-task-models-v0.0.3-next.0...background-task-models-v0.0.3-next.1) (2025-11-11)
79
+
80
+
81
+ ### Features
82
+
83
+ * add context id features ([#29](https://github.com/iotaledger/twin-background-task/issues/29)) ([46ede49](https://github.com/iotaledger/twin-background-task/commit/46ede49a51a4955fe1530e645a66f0073db9a1fd))
84
+ * add task scheduler ([754d973](https://github.com/iotaledger/twin-background-task/commit/754d973e7c8483e5e54e887c157661867d5a0375))
85
+ * add validate-locales ([968cbf9](https://github.com/iotaledger/twin-background-task/commit/968cbf966fffb5060305e8b221fecc0b6c8105b9))
86
+ * eslint migration to flat config ([6c9136c](https://github.com/iotaledger/twin-background-task/commit/6c9136c37bccdbbd109892d1503660aab7080d49))
87
+ * improve comment ([f2b4ac2](https://github.com/iotaledger/twin-background-task/commit/f2b4ac22fb8f735d2bf4ce28583cf7c54acdf272))
88
+ * only run tasks from your own thread ([c7d305b](https://github.com/iotaledger/twin-background-task/commit/c7d305b9807e65b8b1af6d0c2ca59e74190cab69))
89
+ * update dependencies ([8e65767](https://github.com/iotaledger/twin-background-task/commit/8e657679f5e4305dbcb15ac7bcb3ab8a4613a60b))
90
+ * update framework core ([a068098](https://github.com/iotaledger/twin-background-task/commit/a0680983d7923a1bfb980a67879019bb870ccc5d))
91
+ * update IComponent signatures ([e1a79bc](https://github.com/iotaledger/twin-background-task/commit/e1a79bc4dd813435c56e376f231a4b4ecd2276bf))
92
+ * use shared store mechanism ([#6](https://github.com/iotaledger/twin-background-task/issues/6)) ([27ed203](https://github.com/iotaledger/twin-background-task/commit/27ed20367d5ace7257bfa7a82b59ad70e5b5d209))
93
+
94
+ ## [0.0.2-next.9](https://github.com/iotaledger/twin-background-task/compare/background-task-models-v0.0.2-next.8...background-task-models-v0.0.2-next.9) (2025-10-09)
4
95
 
5
96
 
6
97
  ### Features
7
98
 
8
- * add validate-locales ([968cbf9](https://github.com/twinfoundation/background-task/commit/968cbf966fffb5060305e8b221fecc0b6c8105b9))
99
+ * add validate-locales ([968cbf9](https://github.com/iotaledger/twin-background-task/commit/968cbf966fffb5060305e8b221fecc0b6c8105b9))
9
100
 
10
- ## [0.0.2-next.8](https://github.com/twinfoundation/background-task/compare/background-task-models-v0.0.2-next.7...background-task-models-v0.0.2-next.8) (2025-09-29)
101
+ ## [0.0.2-next.8](https://github.com/iotaledger/twin-background-task/compare/background-task-models-v0.0.2-next.7...background-task-models-v0.0.2-next.8) (2025-09-29)
11
102
 
12
103
 
13
104
  ### Features
14
105
 
15
- * update IComponent signatures ([e1a79bc](https://github.com/twinfoundation/background-task/commit/e1a79bc4dd813435c56e376f231a4b4ecd2276bf))
106
+ * update IComponent signatures ([e1a79bc](https://github.com/iotaledger/twin-background-task/commit/e1a79bc4dd813435c56e376f231a4b4ecd2276bf))
16
107
 
17
- ## [0.0.2-next.7](https://github.com/twinfoundation/background-task/compare/background-task-models-v0.0.2-next.6...background-task-models-v0.0.2-next.7) (2025-08-29)
108
+ ## [0.0.2-next.7](https://github.com/iotaledger/twin-background-task/compare/background-task-models-v0.0.2-next.6...background-task-models-v0.0.2-next.7) (2025-08-29)
18
109
 
19
110
 
20
111
  ### Features
21
112
 
22
- * eslint migration to flat config ([6c9136c](https://github.com/twinfoundation/background-task/commit/6c9136c37bccdbbd109892d1503660aab7080d49))
113
+ * eslint migration to flat config ([6c9136c](https://github.com/iotaledger/twin-background-task/commit/6c9136c37bccdbbd109892d1503660aab7080d49))
23
114
 
24
- ## [0.0.2-next.6](https://github.com/twinfoundation/background-task/compare/background-task-models-v0.0.2-next.5...background-task-models-v0.0.2-next.6) (2025-08-22)
115
+ ## [0.0.2-next.6](https://github.com/iotaledger/twin-background-task/compare/background-task-models-v0.0.2-next.5...background-task-models-v0.0.2-next.6) (2025-08-22)
25
116
 
26
117
 
27
118
  ### Miscellaneous Chores
28
119
 
29
120
  * **background-task-models:** Synchronize repo versions
30
121
 
31
- ## [0.0.2-next.5](https://github.com/twinfoundation/background-task/compare/background-task-models-v0.0.2-next.4...background-task-models-v0.0.2-next.5) (2025-08-20)
122
+ ## [0.0.2-next.5](https://github.com/iotaledger/twin-background-task/compare/background-task-models-v0.0.2-next.4...background-task-models-v0.0.2-next.5) (2025-08-20)
32
123
 
33
124
 
34
125
  ### Features
35
126
 
36
- * update framework core ([a068098](https://github.com/twinfoundation/background-task/commit/a0680983d7923a1bfb980a67879019bb870ccc5d))
127
+ * update framework core ([a068098](https://github.com/iotaledger/twin-background-task/commit/a0680983d7923a1bfb980a67879019bb870ccc5d))
37
128
 
38
- ## [0.0.2-next.4](https://github.com/twinfoundation/background-task/compare/background-task-models-v0.0.2-next.3...background-task-models-v0.0.2-next.4) (2025-07-23)
129
+ ## [0.0.2-next.4](https://github.com/iotaledger/twin-background-task/compare/background-task-models-v0.0.2-next.3...background-task-models-v0.0.2-next.4) (2025-07-23)
39
130
 
40
131
 
41
132
  ### Miscellaneous Chores
42
133
 
43
134
  * **background-task-models:** Synchronize repo versions
44
135
 
45
- ## [0.0.2-next.3](https://github.com/twinfoundation/background-task/compare/background-task-models-v0.0.2-next.2...background-task-models-v0.0.2-next.3) (2025-07-21)
136
+ ## [0.0.2-next.3](https://github.com/iotaledger/twin-background-task/compare/background-task-models-v0.0.2-next.2...background-task-models-v0.0.2-next.3) (2025-07-21)
46
137
 
47
138
 
48
139
  ### Miscellaneous Chores
49
140
 
50
141
  * **background-task-models:** Synchronize repo versions
51
142
 
52
- ## [0.0.2-next.2](https://github.com/twinfoundation/background-task/compare/background-task-models-v0.0.2-next.1...background-task-models-v0.0.2-next.2) (2025-07-09)
143
+ ## [0.0.2-next.2](https://github.com/iotaledger/twin-background-task/compare/background-task-models-v0.0.2-next.1...background-task-models-v0.0.2-next.2) (2025-07-09)
53
144
 
54
145
 
55
146
  ### Features
56
147
 
57
- * add task scheduler ([754d973](https://github.com/twinfoundation/background-task/commit/754d973e7c8483e5e54e887c157661867d5a0375))
58
- * improve comment ([f2b4ac2](https://github.com/twinfoundation/background-task/commit/f2b4ac22fb8f735d2bf4ce28583cf7c54acdf272))
59
- * only run tasks from your own thread ([c7d305b](https://github.com/twinfoundation/background-task/commit/c7d305b9807e65b8b1af6d0c2ca59e74190cab69))
60
- * update dependencies ([8e65767](https://github.com/twinfoundation/background-task/commit/8e657679f5e4305dbcb15ac7bcb3ab8a4613a60b))
61
- * use shared store mechanism ([#6](https://github.com/twinfoundation/background-task/issues/6)) ([27ed203](https://github.com/twinfoundation/background-task/commit/27ed20367d5ace7257bfa7a82b59ad70e5b5d209))
148
+ * add task scheduler ([754d973](https://github.com/iotaledger/twin-background-task/commit/754d973e7c8483e5e54e887c157661867d5a0375))
149
+ * improve comment ([f2b4ac2](https://github.com/iotaledger/twin-background-task/commit/f2b4ac22fb8f735d2bf4ce28583cf7c54acdf272))
150
+ * only run tasks from your own thread ([c7d305b](https://github.com/iotaledger/twin-background-task/commit/c7d305b9807e65b8b1af6d0c2ca59e74190cab69))
151
+ * update dependencies ([8e65767](https://github.com/iotaledger/twin-background-task/commit/8e657679f5e4305dbcb15ac7bcb3ab8a4613a60b))
152
+ * use shared store mechanism ([#6](https://github.com/iotaledger/twin-background-task/issues/6)) ([27ed203](https://github.com/iotaledger/twin-background-task/commit/27ed20367d5ace7257bfa7a82b59ad70e5b5d209))
62
153
 
63
- ## [0.0.2-next.1](https://github.com/twinfoundation/background-task/compare/background-task-models-v0.0.2-next.0...background-task-models-v0.0.2-next.1) (2025-07-09)
154
+ ## [0.0.2-next.1](https://github.com/iotaledger/twin-background-task/compare/background-task-models-v0.0.2-next.0...background-task-models-v0.0.2-next.1) (2025-07-09)
64
155
 
65
156
 
66
157
  ### Features
67
158
 
68
- * add task scheduler ([754d973](https://github.com/twinfoundation/background-task/commit/754d973e7c8483e5e54e887c157661867d5a0375))
69
- * improve comment ([f2b4ac2](https://github.com/twinfoundation/background-task/commit/f2b4ac22fb8f735d2bf4ce28583cf7c54acdf272))
70
- * only run tasks from your own thread ([c7d305b](https://github.com/twinfoundation/background-task/commit/c7d305b9807e65b8b1af6d0c2ca59e74190cab69))
71
- * update dependencies ([8e65767](https://github.com/twinfoundation/background-task/commit/8e657679f5e4305dbcb15ac7bcb3ab8a4613a60b))
72
- * use shared store mechanism ([#6](https://github.com/twinfoundation/background-task/issues/6)) ([27ed203](https://github.com/twinfoundation/background-task/commit/27ed20367d5ace7257bfa7a82b59ad70e5b5d209))
159
+ * add task scheduler ([754d973](https://github.com/iotaledger/twin-background-task/commit/754d973e7c8483e5e54e887c157661867d5a0375))
160
+ * improve comment ([f2b4ac2](https://github.com/iotaledger/twin-background-task/commit/f2b4ac22fb8f735d2bf4ce28583cf7c54acdf272))
161
+ * only run tasks from your own thread ([c7d305b](https://github.com/iotaledger/twin-background-task/commit/c7d305b9807e65b8b1af6d0c2ca59e74190cab69))
162
+ * update dependencies ([8e65767](https://github.com/iotaledger/twin-background-task/commit/8e657679f5e4305dbcb15ac7bcb3ab8a4613a60b))
163
+ * use shared store mechanism ([#6](https://github.com/iotaledger/twin-background-task/issues/6)) ([27ed203](https://github.com/iotaledger/twin-background-task/commit/27ed20367d5ace7257bfa7a82b59ad70e5b5d209))
73
164
 
74
165
  ## 0.0.1 (2025-07-07)
75
166
 
76
167
 
77
168
  ### Features
78
169
 
79
- * release to production ([7ce9896](https://github.com/twinfoundation/background-task/commit/7ce989659e6819f05655c86b1bda2a265af5d281))
170
+ * release to production ([7ce9896](https://github.com/iotaledger/twin-background-task/commit/7ce989659e6819f05655c86b1bda2a265af5d281))
80
171
 
81
- ## [0.0.1-next.21](https://github.com/twinfoundation/background-task/compare/background-task-models-v0.0.1-next.20...background-task-models-v0.0.1-next.21) (2025-06-23)
172
+ ## [0.0.1-next.21](https://github.com/iotaledger/twin-background-task/compare/background-task-models-v0.0.1-next.20...background-task-models-v0.0.1-next.21) (2025-06-23)
82
173
 
83
174
 
84
175
  ### Miscellaneous Chores
85
176
 
86
177
  * **background-task-models:** Synchronize repo versions
87
178
 
88
- ## [0.0.1-next.20](https://github.com/twinfoundation/background-task/compare/background-task-models-v0.0.1-next.19...background-task-models-v0.0.1-next.20) (2025-06-23)
179
+ ## [0.0.1-next.20](https://github.com/iotaledger/twin-background-task/compare/background-task-models-v0.0.1-next.19...background-task-models-v0.0.1-next.20) (2025-06-23)
89
180
 
90
181
 
91
182
  ### Features
92
183
 
93
- * add task scheduler ([754d973](https://github.com/twinfoundation/background-task/commit/754d973e7c8483e5e54e887c157661867d5a0375))
94
- * improve comment ([f2b4ac2](https://github.com/twinfoundation/background-task/commit/f2b4ac22fb8f735d2bf4ce28583cf7c54acdf272))
95
- * update dependencies ([8e65767](https://github.com/twinfoundation/background-task/commit/8e657679f5e4305dbcb15ac7bcb3ab8a4613a60b))
96
- * use shared store mechanism ([#6](https://github.com/twinfoundation/background-task/issues/6)) ([27ed203](https://github.com/twinfoundation/background-task/commit/27ed20367d5ace7257bfa7a82b59ad70e5b5d209))
184
+ * add task scheduler ([754d973](https://github.com/iotaledger/twin-background-task/commit/754d973e7c8483e5e54e887c157661867d5a0375))
185
+ * improve comment ([f2b4ac2](https://github.com/iotaledger/twin-background-task/commit/f2b4ac22fb8f735d2bf4ce28583cf7c54acdf272))
186
+ * update dependencies ([8e65767](https://github.com/iotaledger/twin-background-task/commit/8e657679f5e4305dbcb15ac7bcb3ab8a4613a60b))
187
+ * use shared store mechanism ([#6](https://github.com/iotaledger/twin-background-task/issues/6)) ([27ed203](https://github.com/iotaledger/twin-background-task/commit/27ed20367d5ace7257bfa7a82b59ad70e5b5d209))
97
188
 
98
- ## [0.0.1-next.19](https://github.com/twinfoundation/background-task/compare/background-task-models-v0.0.1-next.18...background-task-models-v0.0.1-next.19) (2025-06-23)
189
+ ## [0.0.1-next.19](https://github.com/iotaledger/twin-background-task/compare/background-task-models-v0.0.1-next.18...background-task-models-v0.0.1-next.19) (2025-06-23)
99
190
 
100
191
 
101
192
  ### Features
102
193
 
103
- * add task scheduler ([754d973](https://github.com/twinfoundation/background-task/commit/754d973e7c8483e5e54e887c157661867d5a0375))
194
+ * add task scheduler ([754d973](https://github.com/iotaledger/twin-background-task/commit/754d973e7c8483e5e54e887c157661867d5a0375))
104
195
 
105
- ## [0.0.1-next.18](https://github.com/twinfoundation/background-task/compare/background-task-models-v0.0.1-next.17...background-task-models-v0.0.1-next.18) (2025-06-19)
196
+ ## [0.0.1-next.18](https://github.com/iotaledger/twin-background-task/compare/background-task-models-v0.0.1-next.17...background-task-models-v0.0.1-next.18) (2025-06-19)
106
197
 
107
198
 
108
199
  ### Miscellaneous Chores
109
200
 
110
201
  * **background-task-models:** Synchronize repo versions
111
202
 
112
- ## [0.0.1-next.17](https://github.com/twinfoundation/background-task/compare/background-task-models-v0.0.1-next.16...background-task-models-v0.0.1-next.17) (2025-06-12)
203
+ ## [0.0.1-next.17](https://github.com/iotaledger/twin-background-task/compare/background-task-models-v0.0.1-next.16...background-task-models-v0.0.1-next.17) (2025-06-12)
113
204
 
114
205
 
115
206
  ### Features
116
207
 
117
- * update dependencies ([8e65767](https://github.com/twinfoundation/background-task/commit/8e657679f5e4305dbcb15ac7bcb3ab8a4613a60b))
208
+ * update dependencies ([8e65767](https://github.com/iotaledger/twin-background-task/commit/8e657679f5e4305dbcb15ac7bcb3ab8a4613a60b))
118
209
 
119
- ## [0.0.1-next.16](https://github.com/twinfoundation/background-task/compare/background-task-models-v0.0.1-next.15...background-task-models-v0.0.1-next.16) (2025-06-05)
210
+ ## [0.0.1-next.16](https://github.com/iotaledger/twin-background-task/compare/background-task-models-v0.0.1-next.15...background-task-models-v0.0.1-next.16) (2025-06-05)
120
211
 
121
212
 
122
213
  ### Miscellaneous Chores
123
214
 
124
215
  * **background-task-models:** Synchronize repo versions
125
216
 
126
- ## [0.0.1-next.15](https://github.com/twinfoundation/background-task/compare/background-task-models-v0.0.1-next.14...background-task-models-v0.0.1-next.15) (2025-04-17)
217
+ ## [0.0.1-next.15](https://github.com/iotaledger/twin-background-task/compare/background-task-models-v0.0.1-next.14...background-task-models-v0.0.1-next.15) (2025-04-17)
127
218
 
128
219
 
129
220
  ### Features
130
221
 
131
- * use shared store mechanism ([#6](https://github.com/twinfoundation/background-task/issues/6)) ([27ed203](https://github.com/twinfoundation/background-task/commit/27ed20367d5ace7257bfa7a82b59ad70e5b5d209))
222
+ * use shared store mechanism ([#6](https://github.com/iotaledger/twin-background-task/issues/6)) ([27ed203](https://github.com/iotaledger/twin-background-task/commit/27ed20367d5ace7257bfa7a82b59ad70e5b5d209))
132
223
 
133
- ## [0.0.1-next.14](https://github.com/twinfoundation/background-task/compare/background-task-models-v0.0.1-next.13...background-task-models-v0.0.1-next.14) (2025-04-11)
224
+ ## [0.0.1-next.14](https://github.com/iotaledger/twin-background-task/compare/background-task-models-v0.0.1-next.13...background-task-models-v0.0.1-next.14) (2025-04-11)
134
225
 
135
226
 
136
227
  ### Miscellaneous Chores
137
228
 
138
229
  * **background-task-models:** Synchronize repo versions
139
230
 
140
- ## [0.0.1-next.13](https://github.com/twinfoundation/background-task/compare/background-task-models-v0.0.1-next.12...background-task-models-v0.0.1-next.13) (2025-03-28)
231
+ ## [0.0.1-next.13](https://github.com/iotaledger/twin-background-task/compare/background-task-models-v0.0.1-next.12...background-task-models-v0.0.1-next.13) (2025-03-28)
141
232
 
142
233
 
143
234
  ### Features
144
235
 
145
- * improve comment ([f2b4ac2](https://github.com/twinfoundation/background-task/commit/f2b4ac22fb8f735d2bf4ce28583cf7c54acdf272))
236
+ * improve comment ([f2b4ac2](https://github.com/iotaledger/twin-background-task/commit/f2b4ac22fb8f735d2bf4ce28583cf7c54acdf272))
146
237
 
147
238
  ## v0.0.1-next.12
148
239
 
package/docs/examples.md CHANGED
@@ -1 +1,179 @@
1
- # @twin.org/background-task-models - Examples
1
+ # Background Task Models Examples
2
+
3
+ Use these snippets to model task payloads, status transitions and scheduler contracts in a strongly typed way.
4
+
5
+ ## IBackgroundTask
6
+
7
+ ```typescript
8
+ import type { IBackgroundTask } from '@twin.org/background-task-models';
9
+ import { TaskStatus } from '@twin.org/background-task-models';
10
+
11
+ type ImportPayload = {
12
+ source: string;
13
+ batchSize: number;
14
+ };
15
+
16
+ type ImportResult = {
17
+ inserted: number;
18
+ skipped: number;
19
+ };
20
+
21
+ const queuedTask: IBackgroundTask<ImportPayload, ImportResult> = {
22
+ id: '7f4b2c18a4f44f1f9ff7348e260ca4c2',
23
+ type: 'catalogue-import',
24
+ threadId: '0',
25
+ dateCreated: '2026-03-09T10:30:00.000Z',
26
+ dateModified: '2026-03-09T10:30:00.000Z',
27
+ status: TaskStatus.Pending,
28
+ payload: {
29
+ source: 'tenant-a',
30
+ batchSize: 250
31
+ },
32
+ retriesRemaining: 3,
33
+ retryInterval: 5000
34
+ };
35
+
36
+ console.log(queuedTask.status); // pending
37
+ ```
38
+
39
+ ```typescript
40
+ import type { IBackgroundTask } from '@twin.org/background-task-models';
41
+ import { TaskStatus } from '@twin.org/background-task-models';
42
+
43
+ type ImportResult = {
44
+ inserted: number;
45
+ skipped: number;
46
+ };
47
+
48
+ const completedTask: IBackgroundTask<unknown, ImportResult> = {
49
+ id: '7f4b2c18a4f44f1f9ff7348e260ca4c2',
50
+ type: 'catalogue-import',
51
+ threadId: '3',
52
+ dateCreated: '2026-03-09T10:30:00.000Z',
53
+ dateModified: '2026-03-09T10:31:22.000Z',
54
+ dateCompleted: '2026-03-09T10:31:22.000Z',
55
+ status: TaskStatus.Success,
56
+ result: {
57
+ inserted: 248,
58
+ skipped: 2
59
+ }
60
+ };
61
+
62
+ console.log(completedTask.result?.inserted); // 248
63
+ ```
64
+
65
+ ## IBackgroundTaskComponent
66
+
67
+ ```typescript
68
+ import type { IBackgroundTask, IBackgroundTaskComponent } from '@twin.org/background-task-models';
69
+ import { TaskStatus } from '@twin.org/background-task-models';
70
+
71
+ type ResizePayload = {
72
+ imageId: string;
73
+ width: number;
74
+ height: number;
75
+ };
76
+
77
+ type ResizeResult = {
78
+ imageId: string;
79
+ location: string;
80
+ };
81
+
82
+ export async function configureImageHandler(
83
+ taskComponent: IBackgroundTaskComponent
84
+ ): Promise<void> {
85
+ await taskComponent.registerHandler<ResizePayload, ResizeResult>(
86
+ 'image-resize',
87
+ './workers/imageWorker',
88
+ 'resize',
89
+ async (task: IBackgroundTask<ResizePayload, ResizeResult>) => {
90
+ if (task.status === TaskStatus.Success) {
91
+ console.log(task.result?.location); // s3://tenant-a/images/hero-1920x1080.webp
92
+ }
93
+ },
94
+ {
95
+ maxWorkerCount: 4,
96
+ idleShutdownTimeout: 60000,
97
+ initialiseMethod: 'initialise',
98
+ shutdownMethod: 'shutdown'
99
+ }
100
+ );
101
+
102
+ const taskId = await taskComponent.create<ResizePayload>(
103
+ 'image-resize',
104
+ {
105
+ imageId: 'hero',
106
+ width: 1920,
107
+ height: 1080
108
+ },
109
+ {
110
+ retryCount: 2,
111
+ retryInterval: 3000,
112
+ retainFor: 120000
113
+ }
114
+ );
115
+
116
+ const task = await taskComponent.get<ResizePayload, ResizeResult>(taskId);
117
+ console.log(task?.status); // pending
118
+ }
119
+ ```
120
+
121
+ ## ITaskSchedulerComponent
122
+
123
+ ```typescript
124
+ import type { ITaskSchedulerComponent } from '@twin.org/background-task-models';
125
+
126
+ export async function registerDailySync(
127
+ scheduler: ITaskSchedulerComponent,
128
+ syncTaskId: string
129
+ ): Promise<void> {
130
+ await scheduler.addTask(
131
+ syncTaskId,
132
+ [
133
+ {
134
+ nextTriggerTime: Date.now() + 15 * 60 * 1000,
135
+ intervalDays: 1
136
+ }
137
+ ],
138
+ async () => {
139
+ console.log('sync running at', new Date().toISOString()); // sync running at 2026-03-09T10:45:00.000Z
140
+ }
141
+ );
142
+
143
+ const info = await scheduler.tasksInfo();
144
+ console.log(info.tasks[syncTaskId].length); // 1
145
+ }
146
+ ```
147
+
148
+ ## IScheduledTaskInfo and IScheduledTaskTime
149
+
150
+ ```typescript
151
+ import type { IScheduledTaskInfo, IScheduledTaskTime } from '@twin.org/background-task-models';
152
+
153
+ const everyQuarterHour: IScheduledTaskTime = {
154
+ intervalMinutes: 15
155
+ };
156
+
157
+ const schedule: IScheduledTaskInfo = {
158
+ tasks: {
159
+ 'cleanup-cache': [everyQuarterHour]
160
+ }
161
+ };
162
+
163
+ console.log(schedule.tasks['cleanup-cache'][0].intervalMinutes); // 15
164
+ ```
165
+
166
+ ## TaskStatus
167
+
168
+ ```typescript
169
+ import type { TaskStatus } from '@twin.org/background-task-models';
170
+ import { TaskStatus as TaskStatuses } from '@twin.org/background-task-models';
171
+
172
+ const terminalStatuses: TaskStatus[] = [
173
+ TaskStatuses.Success,
174
+ TaskStatuses.Failed,
175
+ TaskStatuses.Cancelled
176
+ ];
177
+
178
+ console.log(terminalStatuses.join(', ')); // success, failed, cancelled
179
+ ```
@@ -3,7 +3,7 @@
3
3
  ## Interfaces
4
4
 
5
5
  - [IBackgroundTask](interfaces/IBackgroundTask.md)
6
- - [IBackgroundTaskConnector](interfaces/IBackgroundTaskConnector.md)
6
+ - [IBackgroundTaskComponent](interfaces/IBackgroundTaskComponent.md)
7
7
  - [IScheduledTaskInfo](interfaces/IScheduledTaskInfo.md)
8
8
  - [IScheduledTaskTime](interfaces/IScheduledTaskTime.md)
9
9
  - [ITaskSchedulerComponent](interfaces/ITaskSchedulerComponent.md)
@@ -14,5 +14,4 @@
14
14
 
15
15
  ## Variables
16
16
 
17
- - [BackgroundTaskConnectorFactory](variables/BackgroundTaskConnectorFactory.md)
18
17
  - [TaskStatus](variables/TaskStatus.md)
@@ -14,7 +14,7 @@ Interface describing a background task.
14
14
 
15
15
  ## Properties
16
16
 
17
- ### id
17
+ ### id {#id}
18
18
 
19
19
  > **id**: `string`
20
20
 
@@ -22,7 +22,7 @@ The id.
22
22
 
23
23
  ***
24
24
 
25
- ### type
25
+ ### type {#type}
26
26
 
27
27
  > **type**: `string`
28
28
 
@@ -30,7 +30,7 @@ The type of the task.
30
30
 
31
31
  ***
32
32
 
33
- ### threadId
33
+ ### threadId {#threadid}
34
34
 
35
35
  > **threadId**: `string`
36
36
 
@@ -38,23 +38,23 @@ The thread id for the task.
38
38
 
39
39
  ***
40
40
 
41
- ### retryInterval?
41
+ ### retryInterval? {#retryinterval}
42
42
 
43
- > `optional` **retryInterval**: `number`
43
+ > `optional` **retryInterval?**: `number`
44
44
 
45
45
  The retry interval in milliseconds, undefined if default scheduling.
46
46
 
47
47
  ***
48
48
 
49
- ### retriesRemaining?
49
+ ### retriesRemaining? {#retriesremaining}
50
50
 
51
- > `optional` **retriesRemaining**: `number`
51
+ > `optional` **retriesRemaining?**: `number`
52
52
 
53
53
  The number of retries remaining, undefined if infinite retries.
54
54
 
55
55
  ***
56
56
 
57
- ### dateCreated
57
+ ### dateCreated {#datecreated}
58
58
 
59
59
  > **dateCreated**: `string`
60
60
 
@@ -62,7 +62,7 @@ The date the task was created.
62
62
 
63
63
  ***
64
64
 
65
- ### dateModified
65
+ ### dateModified {#datemodified}
66
66
 
67
67
  > **dateModified**: `string`
68
68
 
@@ -70,31 +70,31 @@ The date the task was last modified.
70
70
 
71
71
  ***
72
72
 
73
- ### dateCompleted?
73
+ ### dateCompleted? {#datecompleted}
74
74
 
75
- > `optional` **dateCompleted**: `string`
75
+ > `optional` **dateCompleted?**: `string`
76
76
 
77
77
  The date the task was complete.
78
78
 
79
79
  ***
80
80
 
81
- ### dateCancelled?
81
+ ### dateCancelled? {#datecancelled}
82
82
 
83
- > `optional` **dateCancelled**: `string`
83
+ > `optional` **dateCancelled?**: `string`
84
84
 
85
85
  The date the task was cancelled.
86
86
 
87
87
  ***
88
88
 
89
- ### dateRetainUntil?
89
+ ### dateRetainUntil? {#dateretainuntil}
90
90
 
91
- > `optional` **dateRetainUntil**: `string`
91
+ > `optional` **dateRetainUntil?**: `string`
92
92
 
93
93
  The date until when to retain.
94
94
 
95
95
  ***
96
96
 
97
- ### status
97
+ ### status {#status}
98
98
 
99
99
  > **status**: [`TaskStatus`](../type-aliases/TaskStatus.md)
100
100
 
@@ -102,24 +102,24 @@ The status of the task.
102
102
 
103
103
  ***
104
104
 
105
- ### payload?
105
+ ### payload? {#payload}
106
106
 
107
- > `optional` **payload**: `T`
107
+ > `optional` **payload?**: `T`
108
108
 
109
109
  The payload to execute the task with.
110
110
 
111
111
  ***
112
112
 
113
- ### result?
113
+ ### result? {#result}
114
114
 
115
- > `optional` **result**: `U`
115
+ > `optional` **result?**: `U`
116
116
 
117
117
  The result of the execution.
118
118
 
119
119
  ***
120
120
 
121
- ### error?
121
+ ### error? {#error}
122
122
 
123
- > `optional` **error**: `IError`
123
+ > `optional` **error?**: `IError`
124
124
 
125
125
  The error at last execution.
@@ -1,24 +1,16 @@
1
- # Interface: IBackgroundTaskConnector
1
+ # Interface: IBackgroundTaskComponent
2
2
 
3
- Interface describing a background task connector.
3
+ Interface describing a background task component.
4
4
 
5
5
  ## Extends
6
6
 
7
7
  - `IComponent`
8
8
 
9
- ## Indexable
10
-
11
- \[`key`: `string`\]: `any`
12
-
13
- All methods are optional, so we introduce an index signature to allow
14
- any additional properties or methods, which removes the TypeScript error where
15
- the class has no properties in common with the type.
16
-
17
9
  ## Methods
18
10
 
19
- ### registerHandler()
11
+ ### registerHandler() {#registerhandler}
20
12
 
21
- > **registerHandler**\<`T`, `U`\>(`taskType`, `module`, `method`, `stateChangeCallback?`): `Promise`\<`void`\>
13
+ > **registerHandler**\<`T`, `U`\>(`taskType`, `module`, `method`, `stateChangeCallback?`, `options?`): `Promise`\<`void`\>
22
14
 
23
15
  Register a handler for a task.
24
16
 
@@ -58,6 +50,34 @@ The method in the module to execute.
58
50
 
59
51
  The callback to execute when the task state is updated.
60
52
 
53
+ ##### options?
54
+
55
+ Additional options for the task.
56
+
57
+ ###### maxWorkerCount?
58
+
59
+ `number`
60
+
61
+ The maximum number of workers in the pool.
62
+
63
+ ###### idleShutdownTimeout?
64
+
65
+ `number`
66
+
67
+ Terminate the worker after it has been idle for the specified timeout in milliseconds, defaults to 0 shutdown immediately, -1 to keep forever.
68
+
69
+ ###### initialiseMethod?
70
+
71
+ `string`
72
+
73
+ The initialisation method to call on the module when a worker is started.
74
+
75
+ ###### shutdownMethod?
76
+
77
+ `string`
78
+
79
+ The shutdown method to call on the module when a worker is stopped.
80
+
61
81
  #### Returns
62
82
 
63
83
  `Promise`\<`void`\>
@@ -66,7 +86,7 @@ Nothing.
66
86
 
67
87
  ***
68
88
 
69
- ### unregisterHandler()
89
+ ### unregisterHandler() {#unregisterhandler}
70
90
 
71
91
  > **unregisterHandler**(`taskType`): `Promise`\<`void`\>
72
92
 
@@ -88,9 +108,9 @@ Nothing.
88
108
 
89
109
  ***
90
110
 
91
- ### create()
111
+ ### create() {#create}
92
112
 
93
- > **create**\<`T`\>(`type`, `payload?`, `options?`): `Promise`\<`string`\>
113
+ > **create**\<`T`\>(`taskType`, `payload?`, `options?`): `Promise`\<`string`\>
94
114
 
95
115
  Create a new task.
96
116
 
@@ -102,7 +122,7 @@ Create a new task.
102
122
 
103
123
  #### Parameters
104
124
 
105
- ##### type
125
+ ##### taskType
106
126
 
107
127
  `string`
108
128
 
@@ -144,9 +164,9 @@ The id of the created task.
144
164
 
145
165
  ***
146
166
 
147
- ### get()
167
+ ### get() {#get}
148
168
 
149
- > **get**\<`T`, `U`\>(`taskId`): `Promise`\<`undefined` \| [`IBackgroundTask`](IBackgroundTask.md)\<`T`, `U`\>\>
169
+ > **get**\<`T`, `U`\>(`taskId`): `Promise`\<[`IBackgroundTask`](IBackgroundTask.md)\<`T`, `U`\> \| `undefined`\>
150
170
 
151
171
  Get the task details.
152
172
 
@@ -170,13 +190,13 @@ The id of the task to get the details for.
170
190
 
171
191
  #### Returns
172
192
 
173
- `Promise`\<`undefined` \| [`IBackgroundTask`](IBackgroundTask.md)\<`T`, `U`\>\>
193
+ `Promise`\<[`IBackgroundTask`](IBackgroundTask.md)\<`T`, `U`\> \| `undefined`\>
174
194
 
175
195
  The details of the task.
176
196
 
177
197
  ***
178
198
 
179
- ### retry()
199
+ ### retry() {#retry}
180
200
 
181
201
  > **retry**(`taskId`): `Promise`\<`void`\>
182
202
 
@@ -198,7 +218,7 @@ Nothing.
198
218
 
199
219
  ***
200
220
 
201
- ### remove()
221
+ ### remove() {#remove}
202
222
 
203
223
  > **remove**(`taskId`): `Promise`\<`void`\>
204
224
 
@@ -220,7 +240,7 @@ Nothing.
220
240
 
221
241
  ***
222
242
 
223
- ### cancel()
243
+ ### cancel() {#cancel}
224
244
 
225
245
  > **cancel**(`taskId`): `Promise`\<`void`\>
226
246
 
@@ -242,7 +262,7 @@ Nothing.
242
262
 
243
263
  ***
244
264
 
245
- ### query()
265
+ ### query() {#query}
246
266
 
247
267
  > **query**(`taskType?`, `taskStatus?`, `sortProperty?`, `sortDirection?`, `cursor?`, `limit?`): `Promise`\<\{ `entities`: [`IBackgroundTask`](IBackgroundTask.md)\<`any`, `any`\>[]; `cursor?`: `string`; \}\>
248
268
 
@@ -264,9 +284,9 @@ The status of the task to get.
264
284
 
265
285
  ##### sortProperty?
266
286
 
267
- The property to sort by, defaults to dateCreated.
287
+ `"dateCreated"` \| `"dateModified"` \| `"dateCompleted"` \| `"status"`
268
288
 
269
- `"dateCreated"` | `"dateModified"` | `"dateCompleted"` | `"status"`
289
+ The property to sort by, defaults to dateCreated.
270
290
 
271
291
  ##### sortDirection?
272
292
 
@@ -4,7 +4,7 @@ Interface describing a scheduled task information.
4
4
 
5
5
  ## Properties
6
6
 
7
- ### tasks
7
+ ### tasks {#tasks}
8
8
 
9
9
  > **tasks**: `object`
10
10
 
@@ -4,32 +4,32 @@ Interface describing a scheduled task time.
4
4
 
5
5
  ## Properties
6
6
 
7
- ### nextTriggerTime?
7
+ ### nextTriggerTime? {#nexttriggertime}
8
8
 
9
- > `optional` **nextTriggerTime**: `number`
9
+ > `optional` **nextTriggerTime?**: `number`
10
10
 
11
11
  The date/time to start the task, if not provided defaults to first interval from now.
12
12
 
13
13
  ***
14
14
 
15
- ### intervalDays?
15
+ ### intervalDays? {#intervaldays}
16
16
 
17
- > `optional` **intervalDays**: `number`
17
+ > `optional` **intervalDays?**: `number`
18
18
 
19
19
  The interval in days to repeat the task, if no intervals are set the task will not repeat.
20
20
 
21
21
  ***
22
22
 
23
- ### intervalHours?
23
+ ### intervalHours? {#intervalhours}
24
24
 
25
- > `optional` **intervalHours**: `number`
25
+ > `optional` **intervalHours?**: `number`
26
26
 
27
27
  The interval in hours to repeat the task, if no intervals are set the task will not repeat.
28
28
 
29
29
  ***
30
30
 
31
- ### intervalMinutes?
31
+ ### intervalMinutes? {#intervalminutes}
32
32
 
33
- > `optional` **intervalMinutes**: `number`
33
+ > `optional` **intervalMinutes?**: `number`
34
34
 
35
35
  The interval in minutes to repeat the task, if no intervals are set the task will not repeat.
@@ -6,17 +6,9 @@ Interface describing a task scheduler.
6
6
 
7
7
  - `IComponent`
8
8
 
9
- ## Indexable
10
-
11
- \[`key`: `string`\]: `any`
12
-
13
- All methods are optional, so we introduce an index signature to allow
14
- any additional properties or methods, which removes the TypeScript error where
15
- the class has no properties in common with the type.
16
-
17
9
  ## Methods
18
10
 
19
- ### addTask()
11
+ ### addTask() {#addtask}
20
12
 
21
13
  > **addTask**(`taskId`, `times`, `taskCallback`): `Promise`\<`void`\>
22
14
 
@@ -50,7 +42,7 @@ Nothing.
50
42
 
51
43
  ***
52
44
 
53
- ### removeTask()
45
+ ### removeTask() {#removetask}
54
46
 
55
47
  > **removeTask**(`taskId`): `Promise`\<`void`\>
56
48
 
@@ -72,7 +64,7 @@ Nothing.
72
64
 
73
65
  ***
74
66
 
75
- ### tasksInfo()
67
+ ### tasksInfo() {#tasksinfo}
76
68
 
77
69
  > **tasksInfo**(): `Promise`\<[`IScheduledTaskInfo`](IScheduledTaskInfo.md)\>
78
70
 
@@ -6,31 +6,31 @@ Task statuses.
6
6
 
7
7
  ## Type Declaration
8
8
 
9
- ### Pending
9
+ ### Pending {#pending}
10
10
 
11
11
  > `readonly` **Pending**: `"pending"` = `"pending"`
12
12
 
13
13
  Pending.
14
14
 
15
- ### Processing
15
+ ### Processing {#processing}
16
16
 
17
17
  > `readonly` **Processing**: `"processing"` = `"processing"`
18
18
 
19
19
  Processing.
20
20
 
21
- ### Success
21
+ ### Success {#success}
22
22
 
23
23
  > `readonly` **Success**: `"success"` = `"success"`
24
24
 
25
25
  Success.
26
26
 
27
- ### Failed
27
+ ### Failed {#failed}
28
28
 
29
29
  > `readonly` **Failed**: `"failed"` = `"failed"`
30
30
 
31
31
  Failed.
32
32
 
33
- ### Cancelled
33
+ ### Cancelled {#cancelled}
34
34
 
35
35
  > `readonly` **Cancelled**: `"cancelled"` = `"cancelled"`
36
36
 
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "@twin.org/background-task-models",
3
- "version": "0.0.2-next.9",
4
- "description": "Models which define the structure of the background task contracts and connectors",
3
+ "version": "0.0.3-next.10",
4
+ "description": "Defines shared contracts and status models for background task workflows",
5
5
  "repository": {
6
6
  "type": "git",
7
- "url": "git+https://github.com/twinfoundation/background-task.git",
7
+ "url": "git+https://github.com/iotaledger/twin-background-task.git",
8
8
  "directory": "packages/background-task-models"
9
9
  },
10
10
  "author": "martyn.janes@iota.org",
@@ -18,20 +18,18 @@
18
18
  "@twin.org/entity": "next",
19
19
  "@twin.org/nameof": "next"
20
20
  },
21
- "main": "./dist/cjs/index.cjs",
22
- "module": "./dist/esm/index.mjs",
21
+ "main": "./dist/es/index.js",
23
22
  "types": "./dist/types/index.d.ts",
24
23
  "exports": {
25
24
  ".": {
26
25
  "types": "./dist/types/index.d.ts",
27
- "require": "./dist/cjs/index.cjs",
28
- "import": "./dist/esm/index.mjs"
26
+ "import": "./dist/es/index.js",
27
+ "default": "./dist/es/index.js"
29
28
  },
30
29
  "./locales/*.json": "./locales/*.json"
31
30
  },
32
31
  "files": [
33
- "dist/cjs",
34
- "dist/esm",
32
+ "dist/es",
35
33
  "dist/types",
36
34
  "locales",
37
35
  "docs"
@@ -52,7 +50,7 @@
52
50
  "schemas"
53
51
  ],
54
52
  "bugs": {
55
- "url": "git+https://github.com/twinfoundation/background-task/issues"
53
+ "url": "git+https://github.com/iotaledger/twin-background-task/issues"
56
54
  },
57
55
  "homepage": "https://twindev.org"
58
56
  }
@@ -1,43 +0,0 @@
1
- 'use strict';
2
-
3
- var core = require('@twin.org/core');
4
-
5
- // Copyright 2024 IOTA Stiftung.
6
- // SPDX-License-Identifier: Apache-2.0.
7
- /**
8
- * Factory for creating background task connectors.
9
- */
10
- // eslint-disable-next-line @typescript-eslint/naming-convention
11
- const BackgroundTaskConnectorFactory = core.Factory.createFactory("background-task");
12
-
13
- // Copyright 2024 IOTA Stiftung.
14
- // SPDX-License-Identifier: Apache-2.0.
15
- /**
16
- * Task statuses.
17
- */
18
- // eslint-disable-next-line @typescript-eslint/naming-convention
19
- const TaskStatus = {
20
- /**
21
- * Pending.
22
- */
23
- Pending: "pending",
24
- /**
25
- * Processing.
26
- */
27
- Processing: "processing",
28
- /**
29
- * Success.
30
- */
31
- Success: "success",
32
- /**
33
- * Failed.
34
- */
35
- Failed: "failed",
36
- /**
37
- * Cancelled.
38
- */
39
- Cancelled: "cancelled"
40
- };
41
-
42
- exports.BackgroundTaskConnectorFactory = BackgroundTaskConnectorFactory;
43
- exports.TaskStatus = TaskStatus;
@@ -1,6 +0,0 @@
1
- import { Factory } from "@twin.org/core";
2
- import type { IBackgroundTaskConnector } from "../models/IBackgroundTaskConnector";
3
- /**
4
- * Factory for creating background task connectors.
5
- */
6
- export declare const BackgroundTaskConnectorFactory: Factory<IBackgroundTaskConnector>;
@@ -1,5 +0,0 @@
1
- # Variable: BackgroundTaskConnectorFactory
2
-
3
- > `const` **BackgroundTaskConnectorFactory**: `Factory`\<[`IBackgroundTaskConnector`](../interfaces/IBackgroundTaskConnector.md)\>
4
-
5
- Factory for creating background task connectors.