target-supabase-sdk 0.3.1 → 0.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/browser.js +2 -3
- package/dist/browser.js.map +1 -1
- package/dist/chunks/{config-aBbuDpyt.js → config-BfWyCqKZ.js} +22 -42
- package/dist/chunks/config-BfWyCqKZ.js.map +1 -0
- package/dist/chunks/{enable-BTFwzWHc.js → enable-BPzz7a9r.js} +36 -3
- package/dist/chunks/enable-BPzz7a9r.js.map +1 -0
- package/dist/chunks/{task-queue-D8CraGI8.js → task-queue-C1eVq9St.js} +18 -20
- package/dist/chunks/{task-queue-D8CraGI8.js.map → task-queue-C1eVq9St.js.map} +1 -1
- package/dist/config/config.api.d.ts.map +1 -1
- package/dist/core.api.d.ts +15 -5
- package/dist/core.api.d.ts.map +1 -1
- package/dist/core.interface.d.ts +5 -0
- package/dist/core.interface.d.ts.map +1 -1
- package/dist/core.schema.d.ts +7 -0
- package/dist/core.schema.d.ts.map +1 -1
- package/dist/node.d.ts +0 -3
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +12 -186
- package/dist/node.js.map +1 -1
- package/dist/parcel/parcel.api.d.ts.map +1 -1
- package/dist/preload.js +2 -3
- package/dist/preload.js.map +1 -1
- package/dist/service/service.api.d.ts.map +1 -1
- package/dist/shared/log/index.d.ts +1 -1
- package/dist/shared/log/index.d.ts.map +1 -1
- package/dist/shared/log/spool/batch-timestamp.d.ts +3 -0
- package/dist/shared/log/spool/batch-timestamp.d.ts.map +1 -0
- package/dist/shared/log/spool/file.d.ts +1 -1
- package/dist/shared/log/spool/file.d.ts.map +1 -1
- package/dist/task/task.api.d.ts +1 -1
- package/dist/task/task.api.d.ts.map +1 -1
- package/dist/task/task.interface.d.ts +2 -1
- package/dist/task/task.interface.d.ts.map +1 -1
- package/dist/trigger/trigger-node.d.ts +1 -1
- package/dist/trigger/trigger.interface.d.ts +0 -42
- package/dist/trigger/trigger.interface.d.ts.map +1 -1
- package/package.json +1 -2
- package/src/core.api.ts +32 -12
- package/src/core.interface.ts +5 -0
- package/src/core.schema.ts +2 -0
- package/src/node.ts +0 -3
- package/src/shared/log/README.md +4 -1
- package/src/shared/log/index.ts +1 -1
- package/src/shared/log/spool/batch-timestamp.ts +14 -0
- package/src/shared/log/spool/file.ts +5 -14
- package/src/task/task-node.ts +1 -1
- package/src/task/task-post.api.ts +1 -1
- package/src/task/task-queue.ts +2 -2
- package/src/task/task.api.ts +15 -13
- package/src/task/task.interface.ts +2 -1
- package/src/trigger/trigger-node.ts +1 -1
- package/src/trigger/trigger.interface.ts +0 -52
- package/dist/chunks/config-aBbuDpyt.js.map +0 -1
- package/dist/chunks/enable-BTFwzWHc.js.map +0 -1
- package/dist/trigger/trigger.api.d.ts +0 -145
- package/dist/trigger/trigger.api.d.ts.map +0 -1
- package/dist/trigger/trigger.utils.d.ts +0 -6
- package/dist/trigger/trigger.utils.d.ts.map +0 -1
- package/src/trigger/trigger.api.ts +0 -171
- 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;;;;;;
|
|
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,7 +1,6 @@
|
|
|
1
1
|
import { resolve } from 'node:path';
|
|
2
|
-
import { w as logManager, H as resolveLogMinLevel } from './chunks/config-
|
|
3
|
-
import { r as resolveProjectRootByPackageName, p as pinEnvProfileFromArgv, l as loadEnvFiles, v as validateLogSpoolPreloadEnv, a as logSpoolEnabledFromEnv, m as mergeLogSpoolExtraProcessRolesEnv } from './chunks/enable-
|
|
4
|
-
import 'node:crypto';
|
|
2
|
+
import { w as logManager, H as resolveLogMinLevel } from './chunks/config-BfWyCqKZ.js';
|
|
3
|
+
import { r as resolveProjectRootByPackageName, p as pinEnvProfileFromArgv, l as loadEnvFiles, v as validateLogSpoolPreloadEnv, a as logSpoolEnabledFromEnv, m as mergeLogSpoolExtraProcessRolesEnv } from './chunks/enable-BPzz7a9r.js';
|
|
5
4
|
import 'zod';
|
|
6
5
|
import 'lodash-es';
|
|
7
6
|
import '@supabase/supabase-js';
|
package/dist/preload.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preload.js","sources":["../src/node/preload/run-service-preload.ts"],"sourcesContent":["import { resolve } from \"node:path\";\nimport { logManager } from \"../../shared/log/core/log-manager\";\nimport { resolveLogMinLevel } from \"../../shared/log/core/log-min-level\";\nimport { validateLogSpoolPreloadEnv } from \"../../shared/log/spool/enable\";\nimport { mergeLogSpoolExtraProcessRolesEnv } from \"../../shared/log/spool/process-roles\";\nimport { logSpoolEnabledFromEnv } from \"../../shared/log/upload/env\";\nimport { loadEnvFiles, pinEnvProfileFromArgv } from \"../env/load-env\";\nimport { resolveProjectRootByPackageName } from \"../env/project-root\";\nimport type { ServicePreloadOptions } from \"./service-preload.interface\";\n\nfunction applyServiceEnvDefaults(projectRoot: string, options: ServicePreloadOptions): void {\n if (!logSpoolEnabledFromEnv()) {\n return;\n }\n\n const service = process.env.LOG_PERSIST_SERVICE?.trim();\n if (service == null || service === \"\") {\n process.env.LOG_PERSIST_SERVICE = options.serviceValue;\n }\n\n const runtimeDir = process.env.RUNTIME_DATA_DIR?.trim();\n if (runtimeDir == null || runtimeDir === \"\") {\n const relative = options.runtimeDataDirRelative ?? \"data/runtime\";\n process.env.RUNTIME_DATA_DIR = resolve(projectRoot, relative);\n }\n\n if (options.logSpoolExtraProcessRoles != null && options.logSpoolExtraProcessRoles.length > 0) {\n mergeLogSpoolExtraProcessRolesEnv(process.env, options.logSpoolExtraProcessRoles);\n }\n}\n\nfunction applyLogMinLevelFromEnv(options: ServicePreloadOptions): void {\n if (options.applyLogMinLevel === false) {\n return;\n }\n logManager.setOptions({\n minLevel: resolveLogMinLevel({ defaultLevel: options.defaultLogMinLevel }),\n });\n}\n\n/**\n * Unified Node `--import` preload runner (sync only).\n *\n * Phase 1 — Resolve project root from service package name\n * Phase 2 — Load env files (`.env.local` / `.env`, or `.env.prod` when `--prod`)\n * Phase 3 — Apply SDK service env defaults + optional L3 hook\n * Phase 3½ — Apply LOG_MIN_LEVEL → logManager.minLevel (after env load)\n * Phase 4 — Validate log-persist env when enabled\n * Phase 5 — Process diagnostics (TODO)\n *\n * Supabase init and log-persist enable stay in app `main()` (async).\n */\nexport function runServicePreload(options: ServicePreloadOptions): void {\n const projectRoot = resolveProjectRootByPackageName(options.callerImportMetaUrl, options.packageName);\n\n pinEnvProfileFromArgv();\n loadEnvFiles(projectRoot, { afterLoad: options.afterLoadEnv });\n\n applyServiceEnvDefaults(projectRoot, options);\n options.applyEnvDefaults?.(projectRoot);\n\n applyLogMinLevelFromEnv(options);\n\n validateLogSpoolPreloadEnv();\n\n // TODO: Phase 5 — optional unhandledRejection / uncaughtException formatters\n // (formerly watch-service preload-diagnostics.mjs)\n}\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"preload.js","sources":["../src/node/preload/run-service-preload.ts"],"sourcesContent":["import { resolve } from \"node:path\";\nimport { logManager } from \"../../shared/log/core/log-manager\";\nimport { resolveLogMinLevel } from \"../../shared/log/core/log-min-level\";\nimport { validateLogSpoolPreloadEnv } from \"../../shared/log/spool/enable\";\nimport { mergeLogSpoolExtraProcessRolesEnv } from \"../../shared/log/spool/process-roles\";\nimport { logSpoolEnabledFromEnv } from \"../../shared/log/upload/env\";\nimport { loadEnvFiles, pinEnvProfileFromArgv } from \"../env/load-env\";\nimport { resolveProjectRootByPackageName } from \"../env/project-root\";\nimport type { ServicePreloadOptions } from \"./service-preload.interface\";\n\nfunction applyServiceEnvDefaults(projectRoot: string, options: ServicePreloadOptions): void {\n if (!logSpoolEnabledFromEnv()) {\n return;\n }\n\n const service = process.env.LOG_PERSIST_SERVICE?.trim();\n if (service == null || service === \"\") {\n process.env.LOG_PERSIST_SERVICE = options.serviceValue;\n }\n\n const runtimeDir = process.env.RUNTIME_DATA_DIR?.trim();\n if (runtimeDir == null || runtimeDir === \"\") {\n const relative = options.runtimeDataDirRelative ?? \"data/runtime\";\n process.env.RUNTIME_DATA_DIR = resolve(projectRoot, relative);\n }\n\n if (options.logSpoolExtraProcessRoles != null && options.logSpoolExtraProcessRoles.length > 0) {\n mergeLogSpoolExtraProcessRolesEnv(process.env, options.logSpoolExtraProcessRoles);\n }\n}\n\nfunction applyLogMinLevelFromEnv(options: ServicePreloadOptions): void {\n if (options.applyLogMinLevel === false) {\n return;\n }\n logManager.setOptions({\n minLevel: resolveLogMinLevel({ defaultLevel: options.defaultLogMinLevel }),\n });\n}\n\n/**\n * Unified Node `--import` preload runner (sync only).\n *\n * Phase 1 — Resolve project root from service package name\n * Phase 2 — Load env files (`.env.local` / `.env`, or `.env.prod` when `--prod`)\n * Phase 3 — Apply SDK service env defaults + optional L3 hook\n * Phase 3½ — Apply LOG_MIN_LEVEL → logManager.minLevel (after env load)\n * Phase 4 — Validate log-persist env when enabled\n * Phase 5 — Process diagnostics (TODO)\n *\n * Supabase init and log-persist enable stay in app `main()` (async).\n */\nexport function runServicePreload(options: ServicePreloadOptions): void {\n const projectRoot = resolveProjectRootByPackageName(options.callerImportMetaUrl, options.packageName);\n\n pinEnvProfileFromArgv();\n loadEnvFiles(projectRoot, { afterLoad: options.afterLoadEnv });\n\n applyServiceEnvDefaults(projectRoot, options);\n options.applyEnvDefaults?.(projectRoot);\n\n applyLogMinLevelFromEnv(options);\n\n validateLogSpoolPreloadEnv();\n\n // TODO: Phase 5 — optional unhandledRejection / uncaughtException formatters\n // (formerly watch-service preload-diagnostics.mjs)\n}\n"],"names":[],"mappings":";;;;;;;;;;AAUA,SAAS,uBAAuB,CAAC,WAAmB,EAAE,OAA8B,EAAA;AAChF,IAAA,IAAI,CAAC,sBAAsB,EAAE,EAAE;QAC3B;IACJ;IAEA,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,EAAE,IAAI,EAAE;IACvD,IAAI,OAAO,IAAI,IAAI,IAAI,OAAO,KAAK,EAAE,EAAE;QACnC,OAAO,CAAC,GAAG,CAAC,mBAAmB,GAAG,OAAO,CAAC,YAAY;IAC1D;IAEA,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,EAAE;IACvD,IAAI,UAAU,IAAI,IAAI,IAAI,UAAU,KAAK,EAAE,EAAE;AACzC,QAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,sBAAsB,IAAI,cAAc;QACjE,OAAO,CAAC,GAAG,CAAC,gBAAgB,GAAG,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC;IACjE;AAEA,IAAA,IAAI,OAAO,CAAC,yBAAyB,IAAI,IAAI,IAAI,OAAO,CAAC,yBAAyB,CAAC,MAAM,GAAG,CAAC,EAAE;QAC3F,iCAAiC,CAAC,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,yBAAyB,CAAC;IACrF;AACJ;AAEA,SAAS,uBAAuB,CAAC,OAA8B,EAAA;AAC3D,IAAA,IAAI,OAAO,CAAC,gBAAgB,KAAK,KAAK,EAAE;QACpC;IACJ;IACA,UAAU,CAAC,UAAU,CAAC;QAClB,QAAQ,EAAE,kBAAkB,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,kBAAkB,EAAE,CAAC;AAC7E,KAAA,CAAC;AACN;AAEA;;;;;;;;;;;AAWG;AACG,SAAU,iBAAiB,CAAC,OAA8B,EAAA;AAC5D,IAAA,MAAM,WAAW,GAAG,+BAA+B,CAAC,OAAO,CAAC,mBAAmB,EAAE,OAAO,CAAC,WAAW,CAAC;AAErG,IAAA,qBAAqB,EAAE;IACvB,YAAY,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC;AAE9D,IAAA,uBAAuB,CAAC,WAAW,EAAE,OAAO,CAAC;AAC7C,IAAA,OAAO,CAAC,gBAAgB,GAAG,WAAW,CAAC;IAEvC,uBAAuB,CAAC,OAAO,CAAC;AAEhC,IAAA,0BAA0B,EAAE;;;AAIhC;;;;"}
|
|
@@ -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;;;;;;
|
|
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"}
|
|
@@ -11,7 +11,7 @@ export type { ResolveLogMinLevelOptions } from "./core/log-min-level";
|
|
|
11
11
|
export { LOG_MIN_LEVEL_ENV_KEY, logMinLevelFromEnv, resolveLogMinLevel, } from "./core/log-min-level";
|
|
12
12
|
export type { CreateScopeInput, LoggerResetScopePatch, LogScope, LogScopeInput, LogScopePatch, PatchScopeInput, } from "./core/log-scope";
|
|
13
13
|
export { createScope, formatScopeLabels, normalizeScope, patchScope, resolveLogData, withModule, } from "./core/log-scope";
|
|
14
|
-
export { formatLogSpoolBatchTimestamp } from "./spool/
|
|
14
|
+
export { formatLogSpoolBatchTimestamp } from "./spool/batch-timestamp";
|
|
15
15
|
export type { LogBatchMeta, LogPersistLane } from "./upload/interface";
|
|
16
16
|
export { LOG_BATCH_LIST_VALUE } from "./upload/interface";
|
|
17
17
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/shared/log/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,YAAY,EACR,2BAA2B,EAC3B,0BAA0B,EAC1B,iBAAiB,GACpB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EACH,cAAc,EACd,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,UAAU,EACV,iBAAiB,GACpB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,QAAQ,EAAE,eAAe,EAAE,UAAU,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACjH,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACtE,YAAY,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACtE,OAAO,EACH,qBAAqB,EACrB,kBAAkB,EAClB,kBAAkB,GACrB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACR,gBAAgB,EAChB,qBAAqB,EACrB,QAAQ,EACR,aAAa,EACb,aAAa,EACb,eAAe,GAClB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACH,WAAW,EACX,iBAAiB,EACjB,cAAc,EACd,UAAU,EACV,cAAc,EACd,UAAU,GACb,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,4BAA4B,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/shared/log/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,YAAY,EACR,2BAA2B,EAC3B,0BAA0B,EAC1B,iBAAiB,GACpB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,YAAY,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACtE,OAAO,EACH,cAAc,EACd,kBAAkB,EAClB,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,UAAU,EACV,iBAAiB,GACpB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,QAAQ,EAAE,eAAe,EAAE,UAAU,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACjH,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACtE,YAAY,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACtE,OAAO,EACH,qBAAqB,EACrB,kBAAkB,EAClB,kBAAkB,GACrB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EACR,gBAAgB,EAChB,qBAAqB,EACrB,QAAQ,EACR,aAAa,EACb,aAAa,EACb,eAAe,GAClB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACH,WAAW,EACX,iBAAiB,EACjB,cAAc,EACd,UAAU,EACV,cAAc,EACd,UAAU,GACb,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,4BAA4B,EAAE,MAAM,yBAAyB,CAAC;AACvE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACvE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"batch-timestamp.d.ts","sourceRoot":"","sources":["../../../../src/shared/log/spool/batch-timestamp.ts"],"names":[],"mappings":"AAAA,oGAAoG;AAEpG,wBAAgB,4BAA4B,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAW/D"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { LogSpoolProcessRole } from "./interface";
|
|
2
|
-
export
|
|
2
|
+
export { formatLogSpoolBatchTimestamp } from "./batch-timestamp";
|
|
3
3
|
export declare function randomLogSpoolShortId(): string;
|
|
4
4
|
export declare function buildLogSpoolBatchBaseName(input: {
|
|
5
5
|
processRole: LogSpoolProcessRole;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../../../src/shared/log/spool/file.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAKvD,
|
|
1
|
+
{"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../../../src/shared/log/spool/file.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAKvD,OAAO,EAAE,4BAA4B,EAAE,MAAM,mBAAmB,CAAC;AAEjE,wBAAgB,qBAAqB,IAAI,MAAM,CAI9C;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE;IAC9C,WAAW,EAAE,mBAAmB,CAAC;IACjC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;CACrB,GAAG,MAAM,CAGT;AAED,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,MAAM,GAAG;IAC1D,WAAW,EAAE,mBAAmB,CAAC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAC;CACxC,GAAG,IAAI,CAwBP"}
|
package/dist/task/task.api.d.ts
CHANGED
|
@@ -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): `
|
|
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;
|
|
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,
|
|
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
|
-
*
|
|
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,
|
|
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.
|
|
3
|
+
"version": "0.3.3",
|
|
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`
|
|
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: "
|
|
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
|
-
|
|
670
|
-
|
|
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
|
};
|
package/src/core.interface.ts
CHANGED
|
@@ -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`. */
|
package/src/core.schema.ts
CHANGED
|
@@ -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";
|
package/src/shared/log/README.md
CHANGED
|
@@ -29,7 +29,8 @@ src/shared/log/
|
|
|
29
29
|
writer.ts # per-process memory buffer → .tmp files
|
|
30
30
|
collector.ts # guard: upload .tmp, rename .json, periodic GC
|
|
31
31
|
paths.ts # {RUNTIME_DATA_DIR}/log-spool/{serviceId}/…
|
|
32
|
-
|
|
32
|
+
batch-timestamp.ts # formatLogSpoolBatchTimestamp (browser-safe; exported on default entry)
|
|
33
|
+
file.ts # batch filename parse/build (Node spool writer/collector only)
|
|
33
34
|
process-roles.ts # main|guard|scheduler|worker + extras
|
|
34
35
|
config.ts # writer / GC / collect interval env
|
|
35
36
|
coordinator.ts # createLogSpoolCoordinator facade
|
|
@@ -45,6 +46,8 @@ src/shared/log/
|
|
|
45
46
|
|
|
46
47
|
Node-only code must not be imported from the browser bundle. Spool files use `node:fs`.
|
|
47
48
|
|
|
49
|
+
**Browser export rule:** Do not re-export symbols from `spool/file.ts` on `shared/log/index.ts`. Put any browser-needed pure helpers in a separate file (e.g. `batch-timestamp.ts`). A top-level `import "node:crypto"` in the same module as a browser export ends up in Rollup **shared chunks** and breaks Chrome/Webpack even when that symbol is never called at runtime.
|
|
50
|
+
|
|
48
51
|
---
|
|
49
52
|
|
|
50
53
|
## Data flow
|
package/src/shared/log/index.ts
CHANGED
|
@@ -42,6 +42,6 @@ export {
|
|
|
42
42
|
resolveLogData,
|
|
43
43
|
withModule,
|
|
44
44
|
} from "./core/log-scope";
|
|
45
|
-
export { formatLogSpoolBatchTimestamp } from "./spool/
|
|
45
|
+
export { formatLogSpoolBatchTimestamp } from "./spool/batch-timestamp";
|
|
46
46
|
export type { LogBatchMeta, LogPersistLane } from "./upload/interface";
|
|
47
47
|
export { LOG_BATCH_LIST_VALUE } from "./upload/interface";
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/** UTC `yyyyMMddHHmmss` segment in log spool batch filenames — browser-safe (no Node built-ins). */
|
|
2
|
+
|
|
3
|
+
export function formatLogSpoolBatchTimestamp(ms: number): string {
|
|
4
|
+
const d = new Date(ms);
|
|
5
|
+
const pad = (n: number) => String(n).padStart(2, "0");
|
|
6
|
+
return (
|
|
7
|
+
`${d.getUTCFullYear()}` +
|
|
8
|
+
`${pad(d.getUTCMonth() + 1)}` +
|
|
9
|
+
`${pad(d.getUTCDate())}` +
|
|
10
|
+
`${pad(d.getUTCHours())}` +
|
|
11
|
+
`${pad(d.getUTCMinutes())}` +
|
|
12
|
+
`${pad(d.getUTCSeconds())}`
|
|
13
|
+
);
|
|
14
|
+
}
|
|
@@ -1,24 +1,15 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { formatLogSpoolBatchTimestamp } from "./batch-timestamp";
|
|
2
2
|
import type { LogSpoolProcessRole } from "./interface";
|
|
3
3
|
|
|
4
4
|
/** `role.timestamp.hash.tmp|json` — role is lowercase alphanumeric + hyphen. */
|
|
5
5
|
const BATCH_FILE_PATTERN = /^([a-z][a-z0-9-]*)\.(\d{14})\.([a-f0-9]{8})\.(tmp|json|synced)$/;
|
|
6
6
|
|
|
7
|
-
export
|
|
8
|
-
const d = new Date(ms);
|
|
9
|
-
const pad = (n: number) => String(n).padStart(2, "0");
|
|
10
|
-
return (
|
|
11
|
-
`${d.getUTCFullYear()}` +
|
|
12
|
-
`${pad(d.getUTCMonth() + 1)}` +
|
|
13
|
-
`${pad(d.getUTCDate())}` +
|
|
14
|
-
`${pad(d.getUTCHours())}` +
|
|
15
|
-
`${pad(d.getUTCMinutes())}` +
|
|
16
|
-
`${pad(d.getUTCSeconds())}`
|
|
17
|
-
);
|
|
18
|
-
}
|
|
7
|
+
export { formatLogSpoolBatchTimestamp } from "./batch-timestamp";
|
|
19
8
|
|
|
20
9
|
export function randomLogSpoolShortId(): string {
|
|
21
|
-
|
|
10
|
+
const bytes = new Uint8Array(4);
|
|
11
|
+
globalThis.crypto.getRandomValues(bytes);
|
|
12
|
+
return Array.from(bytes, (b) => b.toString(16).padStart(2, "0")).join("");
|
|
22
13
|
}
|
|
23
14
|
|
|
24
15
|
export function buildLogSpoolBatchBaseName(input: {
|
package/src/task/task-node.ts
CHANGED
package/src/task/task-queue.ts
CHANGED
|
@@ -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.
|
|
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.
|
|
17
|
+
return tasks.filter((task) => task.value === taskType && statuses.includes(task.status)).length;
|
|
18
18
|
}
|
package/src/task/task.api.ts
CHANGED
|
@@ -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 = "
|
|
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: `
|
|
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.
|
|
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
|
-
|
|
298
|
-
|
|
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): `
|
|
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
|
*
|