target-supabase-sdk 0.3.1 → 0.3.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.
Files changed (48) hide show
  1. package/README.md +1 -1
  2. package/dist/browser.js +2 -2
  3. package/dist/chunks/{config-aBbuDpyt.js → config-t31awPWL.js} +20 -10
  4. package/dist/chunks/config-t31awPWL.js.map +1 -0
  5. package/dist/chunks/{enable-BTFwzWHc.js → enable-BKsBzEqS.js} +2 -2
  6. package/dist/chunks/{enable-BTFwzWHc.js.map → enable-BKsBzEqS.js.map} +1 -1
  7. package/dist/chunks/{task-queue-D8CraGI8.js → task-queue-BpLJ8skY.js} +18 -19
  8. package/dist/chunks/{task-queue-D8CraGI8.js.map → task-queue-BpLJ8skY.js.map} +1 -1
  9. package/dist/config/config.api.d.ts.map +1 -1
  10. package/dist/core.api.d.ts +15 -5
  11. package/dist/core.api.d.ts.map +1 -1
  12. package/dist/core.interface.d.ts +5 -0
  13. package/dist/core.interface.d.ts.map +1 -1
  14. package/dist/core.schema.d.ts +7 -0
  15. package/dist/core.schema.d.ts.map +1 -1
  16. package/dist/node.d.ts +0 -3
  17. package/dist/node.d.ts.map +1 -1
  18. package/dist/node.js +12 -186
  19. package/dist/node.js.map +1 -1
  20. package/dist/parcel/parcel.api.d.ts.map +1 -1
  21. package/dist/preload.js +2 -2
  22. package/dist/service/service.api.d.ts.map +1 -1
  23. package/dist/task/task.api.d.ts +1 -1
  24. package/dist/task/task.api.d.ts.map +1 -1
  25. package/dist/task/task.interface.d.ts +2 -1
  26. package/dist/task/task.interface.d.ts.map +1 -1
  27. package/dist/trigger/trigger-node.d.ts +1 -1
  28. package/dist/trigger/trigger.interface.d.ts +0 -42
  29. package/dist/trigger/trigger.interface.d.ts.map +1 -1
  30. package/package.json +1 -2
  31. package/src/core.api.ts +32 -12
  32. package/src/core.interface.ts +5 -0
  33. package/src/core.schema.ts +2 -0
  34. package/src/node.ts +0 -3
  35. package/src/task/task-node.ts +1 -1
  36. package/src/task/task-post.api.ts +1 -1
  37. package/src/task/task-queue.ts +2 -2
  38. package/src/task/task.api.ts +15 -13
  39. package/src/task/task.interface.ts +2 -1
  40. package/src/trigger/trigger-node.ts +1 -1
  41. package/src/trigger/trigger.interface.ts +0 -52
  42. package/dist/chunks/config-aBbuDpyt.js.map +0 -1
  43. package/dist/trigger/trigger.api.d.ts +0 -145
  44. package/dist/trigger/trigger.api.d.ts.map +0 -1
  45. package/dist/trigger/trigger.utils.d.ts +0 -6
  46. package/dist/trigger/trigger.utils.d.ts.map +0 -1
  47. package/src/trigger/trigger.api.ts +0 -171
  48. package/src/trigger/trigger.utils.ts +0 -56
@@ -1 +1 @@
1
- {"version":3,"file":"parcel.api.d.ts","sourceRoot":"","sources":["../../src/parcel/parcel.api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAkB,KAAK,MAAM,EAAsB,MAAM,oBAAoB,CAAC;AAqBrF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAO9B,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAM3B,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAEjE,eAAO,MAAM,eAAe;;;;;;EAE1B,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAE/D,eAAO,MAAM,kBAAkB;;;;;;EAE7B,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAQrE,yGAAyG;AACzG,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;4FAerB,CAAC;AAEH,gDAAgD;AAChD,eAAO,MAAM,SAAS;;;UAUO,MAAM;;;;;;YApEnC,CAAC;;;UAoE4B,MAAM;;;;;;YApEnC,CAAC;;EAsEC,CAAC;AAEH,yGAAyG;AACzG,eAAO,MAAM,YAAY;;8FAQvB,CAAC"}
1
+ {"version":3,"file":"parcel.api.d.ts","sourceRoot":"","sources":["../../src/parcel/parcel.api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAkB,KAAK,MAAM,EAAsB,MAAM,oBAAoB,CAAC;AAqBrF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAO9B,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAM3B,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAEjE,eAAO,MAAM,eAAe;;;;;;EAE1B,CAAC;AAEH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAE/D,eAAO,MAAM,kBAAkB;;;;;;EAE7B,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAQrE,yGAAyG;AACzG,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;4FAerB,CAAC;AAEH,gDAAgD;AAChD,eAAO,MAAM,SAAS;;;UAUO,MAAM;;;;;;YA9Df,CAAC;;;UA8DQ,MAAM;;;;;;YA9Df,CAAC;;EAgEnB,CAAC;AAEH,yGAAyG;AACzG,eAAO,MAAM,YAAY;;8FAQvB,CAAC"}
package/dist/preload.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { resolve } from 'node:path';
2
- import { w as logManager, H as resolveLogMinLevel } from './chunks/config-aBbuDpyt.js';
3
- import { r as resolveProjectRootByPackageName, p as pinEnvProfileFromArgv, l as loadEnvFiles, v as validateLogSpoolPreloadEnv, a as logSpoolEnabledFromEnv, m as mergeLogSpoolExtraProcessRolesEnv } from './chunks/enable-BTFwzWHc.js';
2
+ import { w as logManager, H as resolveLogMinLevel } from './chunks/config-t31awPWL.js';
3
+ import { r as resolveProjectRootByPackageName, p as pinEnvProfileFromArgv, l as loadEnvFiles, v as validateLogSpoolPreloadEnv, a as logSpoolEnabledFromEnv, m as mergeLogSpoolExtraProcessRolesEnv } from './chunks/enable-BKsBzEqS.js';
4
4
  import 'node:crypto';
5
5
  import 'zod';
6
6
  import 'lodash-es';
@@ -1 +1 @@
1
- {"version":3,"file":"service.api.d.ts","sourceRoot":"","sources":["../../src/service/service.api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AACvG,OAAO,EACH,KAAK,GAAG,EAER,SAAS,EAGT,KAAK,OAAO,EAEf,MAAM,qBAAqB,CAAC;AAc7B,QAAA,MAAM,sBAAsB,EAAE,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAyCvD,CAAC;AAEF,QAAA,MAAM,qBAAqB,EAAE,CAAC,CAAC,OAAO,CAAC,eAAe,CAGrD,CAAC;AAEF,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,CAAC;AAEzD,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;EAKjC,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAY3B,CAAC;AAEH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;EAIpC,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAG/B,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAM/B,CAAC;AAEH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAMxB,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAE3D,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;EAYpB,CAAC;AAEN,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAEzD,eAAO,MAAM,gBAAgB;;;IAIrB,kEAAkE;;;;;;;;;;;;;;;;;;EAUrE,CAAC;AAEN,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAEjE,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAM5B,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAoCnE,qDAAqD;AACrD,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;sFAelB,CAAC;AAEH,uEAAuE;AACvE,eAAO,MAAM,MAAM;;;;UAWc,GAAG;;;;;;YAhNM,CAAC;;;;;;;;;YAAD,CAAC;;;UAgNV,GAAG;;;;;;YAhNM,CAAC;;;;;;;;;YAAD,CAAC;;EAmOzC,CAAC;AAEH,kFAAkF;AAClF,eAAO,MAAM,UAAU;;;;;UAaU,OAAO;;;;;;YAnPE,CAAC;;;;;;;;;YAAD,CAAC;;;UAmPV,OAAO;;;;;;YAnPE,CAAC;;;;;;;;;YAAD,CAAC;;EAsQzC,CAAC;AAEH,2DAA2D;AAC3D,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;8FAetB,CAAC"}
1
+ {"version":3,"file":"service.api.d.ts","sourceRoot":"","sources":["../../src/service/service.api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,KAAK,eAAe,EAAE,KAAK,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AACvG,OAAO,EACH,KAAK,GAAG,EAER,SAAS,EAGT,KAAK,OAAO,EAEf,MAAM,qBAAqB,CAAC;AAc7B,QAAA,MAAM,sBAAsB,EAAE,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAyCvD,CAAC;AAEF,QAAA,MAAM,qBAAqB,EAAE,CAAC,CAAC,OAAO,CAAC,eAAe,CAGrD,CAAC;AAEF,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,CAAC;AAEzD,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;EAKjC,CAAC;AAEH,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAY3B,CAAC;AAEH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;EAIpC,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAG/B,CAAC;AAEH,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAM/B,CAAC;AAEH,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAMxB,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAE3D,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;EAYpB,CAAC;AAEN,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAEzD,eAAO,MAAM,gBAAgB;;;IAIrB,kEAAkE;;;;;;;;;;;;;;;;;;EAUrE,CAAC;AAEN,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAEjE,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAM5B,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAoCnE,qDAAqD;AACrD,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;;;;;;;sFAelB,CAAC;AAEH,uEAAuE;AACvE,eAAO,MAAM,MAAM;;;;UAWc,GAAG;;;;;;YA3MV,CAAC;;;;;;;;;YAAD,CAAC;;;UA2MM,GAAG;;;;;;YA3MV,CAAC;;;;;;;;;YAAD,CAAC;;EA8NzB,CAAC;AAEH,kFAAkF;AAClF,eAAO,MAAM,UAAU;;;;;UAaU,OAAO;;;;;;YA9Od,CAAC;;;;;;;;;YAAD,CAAC;;;UA8OM,OAAO;;;;;;YA9Od,CAAC;;;;;;;;;YAAD,CAAC;;EAiQzB,CAAC;AAEH,2DAA2D;AAC3D,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;8FAetB,CAAC"}
@@ -193,7 +193,7 @@ export declare const patchTaskProgress: (payload: {
193
193
  /**
194
194
  * Discover and claim one TODO task for this node.
195
195
  *
196
- * Match criteria (all required): `details.status = TODO`, `value ∈ availableTaskList`, and when
196
+ * Match criteria (all required): `status = TODO`, `value ∈ availableTaskList`, and when
197
197
  * `namePrefixList` is non-empty, `name` matches any listed prefix. Those filters are independent
198
198
  * (AND); omitting `namePrefixList` does not relax the `value` constraint.
199
199
  *
@@ -1 +1 @@
1
- {"version":3,"file":"task.api.d.ts","sourceRoot":"","sources":["../../src/task/task.api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAWxB,OAAO,EAAoB,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAM5E,OAAO,EAA4B,KAAK,IAAI,EAAgC,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AA0DvH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA2BtC,CAAC;AAEH,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAEvF,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;EAKlC,CAAC;AAEH,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAE/E,eAAO,MAAM,oBAAoB;;IAE7B,0DAA0D;;;IAG1D;;;OAGG;;;;;;;;;;;;EAEL,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AA0GzE,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oEAmGhC,CAAC;AAIH,gGAAgG;AAChG,eAAO,MAAM,iBAAiB;;;;;8DAe5B,CAAC;AAIH;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,cAAc;;;;;4EAkFzB,CAAC"}
1
+ {"version":3,"file":"task.api.d.ts","sourceRoot":"","sources":["../../src/task/task.api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAWxB,OAAO,EAAoB,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAM5E,OAAO,EAA4B,KAAK,IAAI,EAAgC,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AA0DvH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA2BtC,CAAC;AAEH,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAEvF,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;EAKlC,CAAC;AAEH,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAE/E,eAAO,MAAM,oBAAoB;;IAE7B,0DAA0D;;;IAG1D;;;OAGG;;;;;;;;;;;;EAEL,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AA8GzE,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oEAiGhC,CAAC;AAIH,gGAAgG;AAChG,eAAO,MAAM,iBAAiB;;;;;8DAe5B,CAAC;AAIH;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,cAAc;;;;;4EAkFzB,CAAC"}
@@ -36,12 +36,13 @@ export interface Task extends Target {
36
36
  name: string;
37
37
  /** Unique key, as TaskType */
38
38
  value: string;
39
+ /** Task lifecycle — persisted in `target.status` (not in `details`). */
40
+ status: TaskStatus;
39
41
  details: TaskDetails;
40
42
  category: CategoryTask;
41
43
  }
42
44
  export interface TaskDetails {
43
45
  manifestVersion: number;
44
- status: TaskStatus;
45
46
  params: unknown;
46
47
  /** [0,100] */
47
48
  progress: number;
@@ -1 +1 @@
1
- {"version":3,"file":"task.interface.d.ts","sourceRoot":"","sources":["../../src/task/task.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,oBAAY,YAAY;IACpB,IAAI,SAAS;IACb,mGAAmG;IACnG,aAAa,kBAAkB;CAClC;AAED,oBAAY,UAAU;IAClB,IAAI,SAAS;IACb,IAAI,SAAS;IACb,KAAK,UAAU;IACf,IAAI,SAAS;IACb,MAAM,WAAW;CACpB;AAED,kGAAkG;AAClG,oBAAY,gBAAgB;IACxB,OAAO,YAAY;IACnB,KAAK,UAAU;IACf,KAAK,UAAU;IACf,MAAM,WAAW;IACjB,KAAK,UAAU;IACf,MAAM,WAAW;CACpB;AAED,oBAAY,UAAU;IAClB,OAAO,OAAO;IAEd,mBAAmB;IACnB,gBAAgB,OAAO;IACvB,cAAc,OAAO;IAErB,kBAAkB;IAClB,OAAO,OAAO;IACd,SAAS,OAAO;IAChB,gBAAgB,OAAO;IAEvB,aAAa,OAAO;CACvB;AAED,MAAM,WAAW,IAAK,SAAQ,MAAM;IAChC,eAAe;IACf,IAAI,EAAE,MAAM,CAAC;IACb,8BAA8B;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,WAAW,CAAC;IACrB,QAAQ,EAAE,YAAY,CAAC;CAC1B;AAED,MAAM,WAAW,WAAW;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,UAAU,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,IAAI,GAAG,MAAM,CAAC;IACtB,2DAA2D;IAC3D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,UAAU,CAAC;QACjB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,IAAI,CAAC,EAAE,OAAO,CAAC;KAClB,CAAC;CACL;AAGD,MAAM,WAAW,QAAS,SAAQ,MAAM;CAAG"}
1
+ {"version":3,"file":"task.interface.d.ts","sourceRoot":"","sources":["../../src/task/task.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEhD,oBAAY,YAAY;IACpB,IAAI,SAAS;IACb,mGAAmG;IACnG,aAAa,kBAAkB;CAClC;AAED,oBAAY,UAAU;IAClB,IAAI,SAAS;IACb,IAAI,SAAS;IACb,KAAK,UAAU;IACf,IAAI,SAAS;IACb,MAAM,WAAW;CACpB;AAED,kGAAkG;AAClG,oBAAY,gBAAgB;IACxB,OAAO,YAAY;IACnB,KAAK,UAAU;IACf,KAAK,UAAU;IACf,MAAM,WAAW;IACjB,KAAK,UAAU;IACf,MAAM,WAAW;CACpB;AAED,oBAAY,UAAU;IAClB,OAAO,OAAO;IAEd,mBAAmB;IACnB,gBAAgB,OAAO;IACvB,cAAc,OAAO;IAErB,kBAAkB;IAClB,OAAO,OAAO;IACd,SAAS,OAAO;IAChB,gBAAgB,OAAO;IAEvB,aAAa,OAAO;CACvB;AAED,MAAM,WAAW,IAAK,SAAQ,MAAM;IAChC,eAAe;IACf,IAAI,EAAE,MAAM,CAAC;IACb,8BAA8B;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,wEAAwE;IACxE,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,WAAW,CAAC;IACrB,QAAQ,EAAE,YAAY,CAAC;CAC1B;AAED,MAAM,WAAW,WAAW;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,IAAI,GAAG,MAAM,CAAC;IACtB,2DAA2D;IAC3D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,UAAU,CAAC;QACjB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,IAAI,CAAC,EAAE,OAAO,CAAC;KAClB,CAAC;CACL;AAGD,MAAM,WAAW,QAAS,SAAQ,MAAM;CAAG"}
@@ -7,7 +7,7 @@ import type { TriggerNodeOptions } from "./trigger.interface";
7
7
  * Main loop: commands → heartbeat → {@link TriggerManager.tick}.
8
8
  *
9
9
  * Register runners via {@link TriggerManager.registerRunner} before {@link start}.
10
- * Does not scan Supabase trigger rows — see `trigger.api.ts` for remote admin APIs.
10
+ * In-process interval runners only (no `category=trigger` Target rows).
11
11
  *
12
12
  * Deploy **one** TriggerNode per logical scheduler — multiple processes duplicate runner work.
13
13
  */
@@ -1,46 +1,4 @@
1
- import type { Target } from "../core.interface";
2
1
  import type { LoggerWithScope } from "../shared/log";
3
- import type { TaskStatus } from "../task/task.interface";
4
- export declare enum CategoryTrigger {
5
- TRIGGER = "trigger"
6
- }
7
- export declare enum TriggerStatus {
8
- ENABLED = "ENABLED",
9
- DISABLED = "DISABLED",
10
- PAUSED = "PAUSED"
11
- }
12
- /** Phase 1: daily fire at `hour`:`minute` UTC. */
13
- export interface TriggerDailySchedule {
14
- kind: "daily";
15
- hour: number;
16
- minute: number;
17
- }
18
- export type TriggerSchedule = TriggerDailySchedule;
19
- export interface TriggerPostTaskAction {
20
- kind: "post_task";
21
- taskTypeKey: string;
22
- taskParams: unknown;
23
- taskName?: string;
24
- taskStatus?: TaskStatus.OPEN | TaskStatus.TODO;
25
- }
26
- export type TriggerAction = TriggerPostTaskAction;
27
- export interface Trigger extends Target {
28
- /** Human readable */
29
- name: string;
30
- /** Unique trigger key */
31
- value: string;
32
- details: TriggerDetails;
33
- category: CategoryTrigger;
34
- }
35
- export interface TriggerDetails {
36
- manifestVersion: number;
37
- status: TriggerStatus;
38
- schedule: TriggerSchedule;
39
- action: TriggerAction;
40
- lastFiredAt?: number | null;
41
- /** Idempotency key for the last successful fire, e.g. `daily:2026-06-18` (UTC date). */
42
- lastFireKey?: string | null;
43
- }
44
2
  /** Context passed to each runner invocation. */
45
3
  export interface TriggerRunnerContext {
46
4
  loopTraceId: string;
@@ -1 +1 @@
1
- {"version":3,"file":"trigger.interface.d.ts","sourceRoot":"","sources":["../../src/trigger/trigger.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEzD,oBAAY,eAAe;IACvB,OAAO,YAAY;CACtB;AAED,oBAAY,aAAa;IACrB,OAAO,YAAY;IACnB,QAAQ,aAAa;IACrB,MAAM,WAAW;CACpB;AAED,kDAAkD;AAClD,MAAM,WAAW,oBAAoB;IACjC,IAAI,EAAE,OAAO,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,MAAM,eAAe,GAAG,oBAAoB,CAAC;AAEnD,MAAM,WAAW,qBAAqB;IAClC,IAAI,EAAE,WAAW,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,UAAU,CAAC,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC;CAClD;AAED,MAAM,MAAM,aAAa,GAAG,qBAAqB,CAAC;AAElD,MAAM,WAAW,OAAQ,SAAQ,MAAM;IACnC,qBAAqB;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,yBAAyB;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,cAAc,CAAC;IACxB,QAAQ,EAAE,eAAe,CAAC;CAC7B;AAED,MAAM,WAAW,cAAc;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,MAAM,EAAE,aAAa,CAAC;IACtB,QAAQ,EAAE,eAAe,CAAC;IAC1B,MAAM,EAAE,aAAa,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,wFAAwF;IACxF,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAC/B;AAID,gDAAgD;AAChD,MAAM,WAAW,oBAAoB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,eAAe,CAAC;IACxB,iEAAiE;IACjE,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,MAAM,eAAe,GAAG,CAAC,GAAG,EAAE,oBAAoB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAElF,MAAM,WAAW,4BAA4B;IACzC,0EAA0E;IAC1E,GAAG,EAAE,MAAM,CAAC;IACZ,sDAAsD;IACtD,UAAU,EAAE,MAAM,CAAC;IACnB,EAAE,EAAE,eAAe,CAAC;IACpB,uDAAuD;IACvD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,uCAAuC;AACvC,MAAM,WAAW,kBAAkB;IAC/B;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAClD"}
1
+ {"version":3,"file":"trigger.interface.d.ts","sourceRoot":"","sources":["../../src/trigger/trigger.interface.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAErD,gDAAgD;AAChD,MAAM,WAAW,oBAAoB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,eAAe,CAAC;IACxB,iEAAiE;IACjE,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,MAAM,eAAe,GAAG,CAAC,GAAG,EAAE,oBAAoB,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAElF,MAAM,WAAW,4BAA4B;IACzC,0EAA0E;IAC1E,GAAG,EAAE,MAAM,CAAC;IACZ,sDAAsD;IACtD,UAAU,EAAE,MAAM,CAAC;IACnB,EAAE,EAAE,eAAe,CAAC;IACpB,uDAAuD;IACvD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,uCAAuC;AACvC,MAAM,WAAW,kBAAkB;IAC/B;;;OAGG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAClD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "target-supabase-sdk",
3
- "version": "0.3.1",
3
+ "version": "0.3.2",
4
4
  "description": "Supabase client initializer and data access APIs",
5
5
  "license": "MIT",
6
6
  "author": "KyLoc20",
@@ -58,7 +58,6 @@
58
58
  "prepare": "git config core.hooksPath .githooks",
59
59
  "worker:trigger": "tsx scripts/run-trigger-node.ts",
60
60
  "post-command": "tsx scripts/post-command.ts",
61
- "post-trigger": "tsx scripts/post-trigger.ts",
62
61
  "parcel:split": "tsx scripts/parcel-split-local.ts",
63
62
  "parcel:restore": "tsx scripts/parcel-restore-local.ts",
64
63
  "dev": "rollup -c --watch",
package/src/core.api.ts CHANGED
@@ -20,7 +20,7 @@ export const MAX_TARGET_LIST_PAGE_SIZE = 100;
20
20
  /** Alias for {@link pollTargetList} batch size cap. */
21
21
  export const MAX_POLL_TARGET_LIST_SIZE = MAX_TARGET_LIST_PAGE_SIZE;
22
22
 
23
- const TARGET_LIST_ORDER_FIELDS = new Set<string>(["created_at", "name", "value", "category"]);
23
+ const TARGET_LIST_ORDER_FIELDS = new Set<string>(["created_at", "name", "value", "category", "status"]);
24
24
 
25
25
  // biome-ignore lint/suspicious/noExplicitAny: PostgrestFilterBuilder is generic over schema
26
26
  export type TargetFilterBuilder = PostgrestFilterBuilder<any, any, any[], "target", unknown>;
@@ -456,6 +456,8 @@ export interface UpdateTargetRowSnapshot<D> {
456
456
  tagList: string[];
457
457
  details: D;
458
458
  extra?: string;
459
+ /** Present when the row has a top-level status; domain APIs narrow the type. */
460
+ status?: unknown;
459
461
  }
460
462
 
461
463
  /**
@@ -466,13 +468,15 @@ export type UpdateTargetPatch<D> = {
466
468
  tagList?: string[];
467
469
  details?: D;
468
470
  extra?: string;
471
+ /** Set or clear top-level status (`null` writes SQL NULL). */
472
+ status?: unknown;
469
473
  };
470
474
 
471
475
  /**
472
- * Read-modify-write mutable Target columns (`tagList` / `details` / `extra`) with optional
473
- * DB-level optimistic locking. Does not write `name` / `value` / `category`.
476
+ * Read-modify-write mutable Target columns (`tagList` / `details` / `extra` / optional `status`)
477
+ * with optional DB-level optimistic locking. Does not write `name` / `value` / `category`.
474
478
  *
475
- * Prefer this when the update may touch `tagList` (and optionally `details`/`extra`) in one UPDATE.
479
+ * Prefer this when the update may touch `tagList` (and optionally `details`/`extra`/`status`) in one UPDATE.
476
480
  * For details-only flows, {@link updateTargetDetails} remains the thinner API.
477
481
  */
478
482
  export interface UpdateTargetParams<D> {
@@ -493,7 +497,7 @@ export interface UpdateTargetParams<D> {
493
497
  export const updateTarget = async <T, D>({ id, updateFn, optimisticLockFilterList = [] }: UpdateTargetParams<D>) => {
494
498
  const { data: currentData, error: fetchError } = await supabase.client
495
499
  .from("target")
496
- .select("tagList, details, extra")
500
+ .select("tagList, details, extra, status")
497
501
  .eq("id", id)
498
502
  .single();
499
503
 
@@ -510,6 +514,7 @@ export const updateTarget = async <T, D>({ id, updateFn, optimisticLockFilterLis
510
514
  tagList: Array.isArray(currentData.tagList) ? (currentData.tagList as string[]) : [],
511
515
  details: currentData.details as D,
512
516
  extra: typeof currentData.extra === "string" ? currentData.extra : undefined,
517
+ status: currentData.status ?? undefined,
513
518
  };
514
519
 
515
520
  const patch = updateFn(existing);
@@ -517,6 +522,7 @@ export const updateTarget = async <T, D>({ id, updateFn, optimisticLockFilterLis
517
522
  tagList?: string[];
518
523
  details?: D;
519
524
  extra?: string;
525
+ status?: unknown;
520
526
  } = {};
521
527
 
522
528
  if (patch.tagList !== undefined) {
@@ -528,6 +534,9 @@ export const updateTarget = async <T, D>({ id, updateFn, optimisticLockFilterLis
528
534
  if (patch.extra !== undefined) {
529
535
  updated.extra = patch.extra;
530
536
  }
537
+ if (patch.status !== undefined) {
538
+ updated.status = patch.status;
539
+ }
531
540
 
532
541
  if (Object.keys(updated).length === 0) {
533
542
  throw new Error("[updateTarget] updateFn returned an empty patch");
@@ -640,12 +649,18 @@ export interface UpdateTargetDetailsParams<D> {
640
649
  * Optional `target.extra` derived from existing details (written together with details).
641
650
  */
642
651
  updateExtraFn?: (existing: D) => string;
652
+ /**
653
+ * Optional top-level `status` patch in the same UPDATE as `details`.
654
+ * Return `undefined` to leave the column unchanged; `null` writes SQL NULL.
655
+ */
656
+ updateStatusFn?: (snapshot: UpdateTargetRowSnapshot<D>) => unknown;
643
657
  /**
644
658
  * Optimistic lock conditions applied on UPDATE (not on the prior SELECT).
645
659
  *
646
660
  * Replaces the removed `beforeUpdateValidator`: validators ran in app code between read and
647
661
  * write and could not prevent concurrent overwrites. These filters become part of the UPDATE
648
- * WHERE clause (via `applyQueryFilters`), e.g. `{ field: "details->>status", operator: "eq", value: "TODO" }`.
662
+ * WHERE clause (via `applyQueryFilters`), e.g. `{ field: "status", operator: "eq", value: "TODO" }`
663
+ * (or legacy `{ field: "details->>status", … }` until domain migration completes).
649
664
  *
650
665
  * If no row matches after UPDATE:
651
666
  * - empty locks → not-found (`UPDATE_TARGET_NOT_FOUND_MESSAGE`)
@@ -659,6 +674,7 @@ export const updateTargetDetails = async <T, D>({
659
674
  id,
660
675
  updateFn,
661
676
  updateExtraFn,
677
+ updateStatusFn,
662
678
  optimisticLockFilterList = [],
663
679
  }: UpdateTargetDetailsParams<D>) => {
664
680
  return updateTarget<T, D>({
@@ -666,13 +682,17 @@ export const updateTargetDetails = async <T, D>({
666
682
  optimisticLockFilterList,
667
683
  updateFn: (existing) => {
668
684
  const nextDetails = updateFn(existing.details);
669
- if (updateExtraFn == null) {
670
- return { details: nextDetails };
685
+ const patch: UpdateTargetPatch<D> = { details: nextDetails };
686
+ if (updateExtraFn != null) {
687
+ patch.extra = updateExtraFn(existing.details);
688
+ }
689
+ if (updateStatusFn != null) {
690
+ const nextStatus = updateStatusFn(existing);
691
+ if (nextStatus !== undefined) {
692
+ patch.status = nextStatus;
693
+ }
671
694
  }
672
- return {
673
- details: nextDetails,
674
- extra: updateExtraFn(existing.details),
675
- };
695
+ return patch;
676
696
  },
677
697
  });
678
698
  };
@@ -9,6 +9,11 @@ export interface Target {
9
9
  extra?: string;
10
10
  details?: unknown;
11
11
  created_at: string;
12
+ /**
13
+ * Optional row lifecycle — semantics and TypeScript narrowing are defined per domain
14
+ * (e.g. task / node ). Omitted or null for targets that do not use status.
15
+ */
16
+ status?: unknown;
12
17
  }
13
18
 
14
19
  /** Target row before persistence — no `id` or `created_at`. */
@@ -24,6 +24,8 @@ export const postTargetPayloadSchema = z.object({
24
24
  tagList: z.array(z.string()),
25
25
  extra: z.string().optional(),
26
26
  details: z.unknown().optional(),
27
+ /** Optional; domain-specific. Omit on create when unused (DB NULL). */
28
+ status: z.unknown().optional(),
27
29
  });
28
30
 
29
31
  export type PostTargetPayload = z.infer<typeof postTargetPayloadSchema>;
package/src/node.ts CHANGED
@@ -282,7 +282,6 @@ export {
282
282
  TaskRepoValidation,
283
283
  validateTaskRepoAndParams,
284
284
  } from "./task/task-repo-validation";
285
- export * from "./trigger/trigger.api";
286
285
  export {
287
286
  LOG_TOPIC_TRIGGER,
288
287
  TRIGGER_LOOP_INTERVAL_MS,
@@ -295,7 +294,5 @@ export type {
295
294
  TriggerRunnerContext,
296
295
  TriggerRunnerFn,
297
296
  } from "./trigger/trigger.interface";
298
- export * from "./trigger/trigger.interface";
299
- export { buildDailyFireKey, buildFireKey, isDailyScheduleDue, isTriggerDue } from "./trigger/trigger.utils";
300
297
  export { TriggerManager } from "./trigger/trigger-manager";
301
298
  export { TriggerNode } from "./trigger/trigger-node";
@@ -115,7 +115,7 @@ class TaskNode extends BaseNodeRuntime {
115
115
  taskId: task.id,
116
116
  taskName: task.name,
117
117
  taskTypeKey: task.value,
118
- taskStatus: task.details.status,
118
+ taskStatus: task.status,
119
119
  },
120
120
  });
121
121
 
@@ -53,9 +53,9 @@ export async function createTaskRow(
53
53
  category: CategoryTask.TASK,
54
54
  tagList,
55
55
  extra,
56
+ status: taskStatus,
56
57
  details: {
57
58
  manifestVersion: 0,
58
- status: taskStatus,
59
59
  params,
60
60
  progress: 0,
61
61
  nodeId: null,
@@ -7,12 +7,12 @@ export function countTasksByType(tasks: Task[], taskType: string, statuses: Task
7
7
  const filtered = tasks.filter((task) => task.value === taskType);
8
8
  const counts: TaskStatusCount = {};
9
9
  for (const status of statuses) {
10
- counts[status] = filtered.filter((task) => task.details.status === status).length;
10
+ counts[status] = filtered.filter((task) => task.status === status).length;
11
11
  }
12
12
  return counts;
13
13
  }
14
14
 
15
15
  /** Total tasks of `taskType` whose status is in `statuses`. */
16
16
  export function summarizeTaskQueue(tasks: Task[], taskType: string, statuses: TaskStatus[]): number {
17
- return tasks.filter((task) => task.value === taskType && statuses.includes(task.details.status)).length;
17
+ return tasks.filter((task) => task.value === taskType && statuses.includes(task.status)).length;
18
18
  }
@@ -17,13 +17,13 @@ import { supabase } from "../supabase";
17
17
  import { LOG_TOPIC_TASK } from "./task.constant";
18
18
  import { CategoryTask, ResultCode, type Task, type TaskDetails, TaskStatus, TaskStatusAction } from "./task.interface";
19
19
 
20
- const TASK_STATUS_FIELD = "details->>status" as const;
20
+ const TASK_STATUS_FIELD = "status" as const;
21
21
  const TASK_NODE_ID_FIELD = "details->>nodeId" as const;
22
22
 
23
23
  // ─── State machine ───────────────────────────────────────────────────────────
24
24
 
25
25
  /**
26
- * Task state machine (field: `details.status`)
26
+ * Task state machine (field: top-level `target.status`)
27
27
  *
28
28
  * ```text
29
29
  * publish claim (CLAIM / patchClaimTask) finish
@@ -174,17 +174,21 @@ async function transitionTask({
174
174
  optimisticLockFilterList,
175
175
  updateFn,
176
176
  updateExtraFn,
177
+ nextStatus,
177
178
  }: {
178
179
  id: string;
179
180
  optimisticLockFilterList: QueryFilter[];
180
181
  updateFn: (details: TaskDetails) => TaskDetails;
181
182
  updateExtraFn?: (existing: TaskDetails) => string;
183
+ /** When set, writes `target.status` in the same UPDATE as `details`. */
184
+ nextStatus?: TaskStatus;
182
185
  }): Promise<Task> {
183
186
  return updateTargetDetails<Task, TaskDetails>({
184
187
  id,
185
188
  optimisticLockFilterList,
186
189
  updateFn,
187
190
  updateExtraFn,
191
+ updateStatusFn: nextStatus == null ? undefined : () => nextStatus,
188
192
  });
189
193
  }
190
194
 
@@ -200,7 +204,7 @@ function logTaskTransition(
200
204
  action,
201
205
  taskId: task.id,
202
206
  taskValue: task.value,
203
- status: task.details.status,
207
+ status: task.status,
204
208
  nodeId: task.details.nodeId,
205
209
  ...data,
206
210
  },
@@ -220,9 +224,9 @@ async function claimTaskById({
220
224
  return transitionTask({
221
225
  id: taskId,
222
226
  optimisticLockFilterList: lockOnStatus(TaskStatus.TODO),
227
+ nextStatus: TaskStatus.DOING,
223
228
  updateFn: (details) => ({
224
229
  ...details,
225
- status: TaskStatus.DOING,
226
230
  nodeId,
227
231
  }),
228
232
  updateExtraFn,
@@ -244,10 +248,10 @@ export const patchChangeTaskStatus = validateWithSchema(
244
248
  const data = await transitionTask({
245
249
  id,
246
250
  optimisticLockFilterList: lockOnStatus(TaskStatus.OPEN),
251
+ nextStatus: TaskStatus.TODO,
247
252
  updateFn: (details) => ({
248
253
  ...details,
249
254
  ...clearExecutionState(),
250
- status: TaskStatus.TODO,
251
255
  }),
252
256
  updateExtraFn,
253
257
  });
@@ -265,10 +269,10 @@ export const patchChangeTaskStatus = validateWithSchema(
265
269
  const data = await transitionTask({
266
270
  id,
267
271
  optimisticLockFilterList: lockOnReset(nodeId),
272
+ nextStatus: TaskStatus.OPEN,
268
273
  updateFn: (details) => ({
269
274
  ...details,
270
275
  ...clearExecutionState(),
271
- status: TaskStatus.OPEN,
272
276
  }),
273
277
  updateExtraFn,
274
278
  });
@@ -280,10 +284,10 @@ export const patchChangeTaskStatus = validateWithSchema(
280
284
  const data = await transitionTask({
281
285
  id,
282
286
  optimisticLockFilterList: lockOnDoingOwner(nodeId),
287
+ nextStatus: TaskStatus.TODO,
283
288
  updateFn: (details) => ({
284
289
  ...details,
285
290
  ...clearExecutionState(),
286
- status: TaskStatus.TODO,
287
291
  }),
288
292
  updateExtraFn,
289
293
  });
@@ -294,10 +298,8 @@ export const patchChangeTaskStatus = validateWithSchema(
294
298
  const data = await transitionTask({
295
299
  id,
296
300
  optimisticLockFilterList: lockOnStatus(TaskStatus.OPEN, TaskStatus.DONE),
297
- updateFn: (details) => ({
298
- ...details,
299
- status: TaskStatus.CLOSED,
300
- }),
301
+ nextStatus: TaskStatus.CLOSED,
302
+ updateFn: (details) => details,
301
303
  updateExtraFn,
302
304
  });
303
305
  logTaskTransition(logger, action, data);
@@ -308,10 +310,10 @@ export const patchChangeTaskStatus = validateWithSchema(
308
310
  const data = await transitionTask({
309
311
  id,
310
312
  optimisticLockFilterList: lockOnDoingOwner(nodeId),
313
+ nextStatus: TaskStatus.DONE,
311
314
  updateFn: (details) => ({
312
315
  ...details,
313
316
  progress: 100,
314
- status: TaskStatus.DONE,
315
317
  nodeId,
316
318
  result: {
317
319
  cost,
@@ -357,7 +359,7 @@ export const patchTaskProgress = validateWithSchema(
357
359
  /**
358
360
  * Discover and claim one TODO task for this node.
359
361
  *
360
- * Match criteria (all required): `details.status = TODO`, `value ∈ availableTaskList`, and when
362
+ * Match criteria (all required): `status = TODO`, `value ∈ availableTaskList`, and when
361
363
  * `namePrefixList` is non-empty, `name` matches any listed prefix. Those filters are independent
362
364
  * (AND); omitting `namePrefixList` does not relax the `value` constraint.
363
365
  *
@@ -44,13 +44,14 @@ export interface Task extends Target {
44
44
  name: string;
45
45
  /** Unique key, as TaskType */
46
46
  value: string;
47
+ /** Task lifecycle — persisted in `target.status` (not in `details`). */
48
+ status: TaskStatus;
47
49
  details: TaskDetails;
48
50
  category: CategoryTask;
49
51
  }
50
52
 
51
53
  export interface TaskDetails {
52
54
  manifestVersion: number;
53
- status: TaskStatus;
54
55
  params: unknown;
55
56
  /** [0,100] */
56
57
  progress: number;
@@ -10,7 +10,7 @@ import { TriggerManager } from "./trigger-manager";
10
10
  * Main loop: commands → heartbeat → {@link TriggerManager.tick}.
11
11
  *
12
12
  * Register runners via {@link TriggerManager.registerRunner} before {@link start}.
13
- * Does not scan Supabase trigger rows — see `trigger.api.ts` for remote admin APIs.
13
+ * In-process interval runners only (no `category=trigger` Target rows).
14
14
  *
15
15
  * Deploy **one** TriggerNode per logical scheduler — multiple processes duplicate runner work.
16
16
  */
@@ -1,56 +1,4 @@
1
- import type { Target } from "../core.interface";
2
1
  import type { LoggerWithScope } from "../shared/log";
3
- import type { TaskStatus } from "../task/task.interface";
4
-
5
- export enum CategoryTrigger {
6
- TRIGGER = "trigger",
7
- }
8
-
9
- export enum TriggerStatus {
10
- ENABLED = "ENABLED",
11
- DISABLED = "DISABLED",
12
- PAUSED = "PAUSED",
13
- }
14
-
15
- /** Phase 1: daily fire at `hour`:`minute` UTC. */
16
- export interface TriggerDailySchedule {
17
- kind: "daily";
18
- hour: number;
19
- minute: number;
20
- }
21
-
22
- export type TriggerSchedule = TriggerDailySchedule;
23
-
24
- export interface TriggerPostTaskAction {
25
- kind: "post_task";
26
- taskTypeKey: string;
27
- taskParams: unknown;
28
- taskName?: string;
29
- taskStatus?: TaskStatus.OPEN | TaskStatus.TODO;
30
- }
31
-
32
- export type TriggerAction = TriggerPostTaskAction;
33
-
34
- export interface Trigger extends Target {
35
- /** Human readable */
36
- name: string;
37
- /** Unique trigger key */
38
- value: string;
39
- details: TriggerDetails;
40
- category: CategoryTrigger;
41
- }
42
-
43
- export interface TriggerDetails {
44
- manifestVersion: number;
45
- status: TriggerStatus;
46
- schedule: TriggerSchedule;
47
- action: TriggerAction;
48
- lastFiredAt?: number | null;
49
- /** Idempotency key for the last successful fire, e.g. `daily:2026-06-18` (UTC date). */
50
- lastFireKey?: string | null;
51
- }
52
-
53
- // ─── TriggerNode local runners ───────────────────────────────────────────────
54
2
 
55
3
  /** Context passed to each runner invocation. */
56
4
  export interface TriggerRunnerContext {