target-supabase-sdk 0.2.3 → 0.2.4

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 (155) hide show
  1. package/README.md +24 -18
  2. package/dist/browser.d.ts +11 -4
  3. package/dist/browser.d.ts.map +1 -1
  4. package/dist/browser.js +3 -3
  5. package/dist/chunks/{enable-log-persist-C7GJo_Nc.js → enable-log-persist-B8rg_wXG.js} +5 -6
  6. package/dist/chunks/enable-log-persist-B8rg_wXG.js.map +1 -0
  7. package/dist/chunks/{create-logger-DyH3mZ8p.js → list.api-Ab9v8yOg.js} +66 -57
  8. package/dist/chunks/list.api-Ab9v8yOg.js.map +1 -0
  9. package/dist/chunks/{word.interface-DLgRobKV.js → word.interface-B_fbVFOW.js} +1078 -97
  10. package/dist/chunks/word.interface-B_fbVFOW.js.map +1 -0
  11. package/dist/extraction/extraction.api.d.ts +117 -0
  12. package/dist/extraction/extraction.api.d.ts.map +1 -0
  13. package/dist/extraction/extraction.interface.d.ts +43 -0
  14. package/dist/extraction/extraction.interface.d.ts.map +1 -0
  15. package/dist/list/list.interface.d.ts +2 -2
  16. package/dist/list/list.interface.d.ts.map +1 -1
  17. package/dist/node/node-runtime.base.d.ts +13 -1
  18. package/dist/node/node-runtime.base.d.ts.map +1 -1
  19. package/dist/node/process/create-managed-child-processes.d.ts +12 -0
  20. package/dist/node/process/create-managed-child-processes.d.ts.map +1 -0
  21. package/dist/node/process/index.d.ts +3 -1
  22. package/dist/node/process/index.d.ts.map +1 -1
  23. package/dist/node/process/managed-child-processes.d.ts +15 -2
  24. package/dist/node/process/managed-child-processes.d.ts.map +1 -1
  25. package/dist/node/runtime-state/create-service-runtime-state-store.d.ts +23 -0
  26. package/dist/node/runtime-state/create-service-runtime-state-store.d.ts.map +1 -0
  27. package/dist/node/runtime-state/index.d.ts +4 -0
  28. package/dist/node/runtime-state/index.d.ts.map +1 -0
  29. package/dist/node/runtime-state/service-runtime-state.types.d.ts +57 -0
  30. package/dist/node/runtime-state/service-runtime-state.types.d.ts.map +1 -0
  31. package/dist/node/service-guard/index.d.ts +9 -0
  32. package/dist/node/service-guard/index.d.ts.map +1 -0
  33. package/dist/node/service-guard/register-service-guard-runner.d.ts +9 -0
  34. package/dist/node/service-guard/register-service-guard-runner.d.ts.map +1 -0
  35. package/dist/node/service-guard/run-readiness-gate.d.ts +11 -0
  36. package/dist/node/service-guard/run-readiness-gate.d.ts.map +1 -0
  37. package/dist/node/service-guard/run-service-guard-tick.d.ts +7 -0
  38. package/dist/node/service-guard/run-service-guard-tick.d.ts.map +1 -0
  39. package/dist/node/service-guard/service-guard-node.d.ts +18 -0
  40. package/dist/node/service-guard/service-guard-node.d.ts.map +1 -0
  41. package/dist/node/service-guard/service-guard.interface.d.ts +58 -0
  42. package/dist/node/service-guard/service-guard.interface.d.ts.map +1 -0
  43. package/dist/node/service-guard/worker-spawn-cooldown.d.ts +4 -0
  44. package/dist/node/service-guard/worker-spawn-cooldown.d.ts.map +1 -0
  45. package/dist/node/service-host/index.d.ts +9 -0
  46. package/dist/node/service-host/index.d.ts.map +1 -0
  47. package/dist/node/service-host/registry-slot-guard-step.d.ts +21 -0
  48. package/dist/node/service-host/registry-slot-guard-step.d.ts.map +1 -0
  49. package/dist/node/service-host/service-host.d.ts +36 -0
  50. package/dist/node/service-host/service-host.d.ts.map +1 -0
  51. package/dist/node/service-host/single-process-service.d.ts +21 -0
  52. package/dist/node/service-host/single-process-service.d.ts.map +1 -0
  53. package/dist/node.d.ts +15 -2
  54. package/dist/node.d.ts.map +1 -1
  55. package/dist/node.js +2088 -1495
  56. package/dist/node.js.map +1 -1
  57. package/dist/preload.js +3 -3
  58. package/dist/service/config.api.d.ts +143 -0
  59. package/dist/service/config.api.d.ts.map +1 -0
  60. package/dist/service/config.interface.d.ts +22 -0
  61. package/dist/service/config.interface.d.ts.map +1 -0
  62. package/dist/service/index.d.ts +16 -17
  63. package/dist/service/index.d.ts.map +1 -1
  64. package/dist/service/registry-lifecycle.d.ts +43 -0
  65. package/dist/service/registry-lifecycle.d.ts.map +1 -0
  66. package/dist/service/registry.service.d.ts +94 -0
  67. package/dist/service/registry.service.d.ts.map +1 -0
  68. package/dist/service/service-bootstrap.d.ts +28 -0
  69. package/dist/service/service-bootstrap.d.ts.map +1 -0
  70. package/dist/service/service.api.d.ts +160 -0
  71. package/dist/service/service.api.d.ts.map +1 -1
  72. package/dist/service/service.interface.d.ts +32 -1
  73. package/dist/service/service.interface.d.ts.map +1 -1
  74. package/dist/shared/log/index.d.ts +4 -0
  75. package/dist/shared/log/index.d.ts.map +1 -1
  76. package/dist/shared/log/log-batch.d.ts +44 -0
  77. package/dist/shared/log/log-batch.d.ts.map +1 -0
  78. package/dist/shared/log/log-persist-coordinator.d.ts +37 -0
  79. package/dist/shared/log/log-persist-coordinator.d.ts.map +1 -0
  80. package/dist/shared/log/log-persist-flush.d.ts.map +1 -1
  81. package/dist/shared/log/log-persist.config.d.ts +0 -1
  82. package/dist/shared/log/log-persist.config.d.ts.map +1 -1
  83. package/dist/shared/log/log-persist.interface.d.ts +8 -0
  84. package/dist/shared/log/log-persist.interface.d.ts.map +1 -1
  85. package/dist/shared/utils/config-path.utils.d.ts +21 -0
  86. package/dist/shared/utils/config-path.utils.d.ts.map +1 -1
  87. package/dist/shared/utils/get-value-at-path.d.ts +3 -0
  88. package/dist/shared/utils/get-value-at-path.d.ts.map +1 -0
  89. package/dist/task/index.d.ts +2 -0
  90. package/dist/task/index.d.ts.map +1 -1
  91. package/dist/task/task-manager.d.ts +1 -1
  92. package/dist/task/task-manager.d.ts.map +1 -1
  93. package/dist/task/task-post-retry.api.d.ts +24 -0
  94. package/dist/task/task-post-retry.api.d.ts.map +1 -0
  95. package/dist/task/task-repo-context.d.ts +7 -1
  96. package/dist/task/task-repo-context.d.ts.map +1 -1
  97. package/dist/trigger/trigger-manager.d.ts +1 -1
  98. package/dist/trigger/trigger-manager.d.ts.map +1 -1
  99. package/dist/trigger/trigger-node.d.ts +1 -0
  100. package/dist/trigger/trigger-node.d.ts.map +1 -1
  101. package/dist/trigger/trigger.constant.d.ts +1 -1
  102. package/dist/trigger/trigger.constant.d.ts.map +1 -1
  103. package/dist/trigger/trigger.interface.d.ts +10 -0
  104. package/dist/trigger/trigger.interface.d.ts.map +1 -1
  105. package/package.json +4 -2
  106. package/src/browser.ts +98 -4
  107. package/src/extraction/extraction.api.ts +232 -0
  108. package/src/extraction/extraction.interface.ts +45 -0
  109. package/src/list/list.interface.ts +2 -2
  110. package/src/node/node-runtime.base.ts +37 -6
  111. package/src/node/process/create-managed-child-processes.ts +27 -0
  112. package/src/node/process/index.ts +4 -0
  113. package/src/node/process/managed-child-processes.ts +48 -15
  114. package/src/node/runtime-state/create-service-runtime-state-store.ts +125 -0
  115. package/src/node/runtime-state/index.ts +17 -0
  116. package/src/node/runtime-state/service-runtime-state.types.ts +64 -0
  117. package/src/node/service-guard/index.ts +17 -0
  118. package/src/node/service-guard/register-service-guard-runner.ts +64 -0
  119. package/src/node/service-guard/run-readiness-gate.ts +34 -0
  120. package/src/node/service-guard/run-service-guard-tick.ts +106 -0
  121. package/src/node/service-guard/service-guard-node.ts +52 -0
  122. package/src/node/service-guard/service-guard.interface.ts +64 -0
  123. package/src/node/service-guard/worker-spawn-cooldown.ts +13 -0
  124. package/src/node/service-host/index.ts +30 -0
  125. package/src/node/service-host/registry-slot-guard-step.ts +57 -0
  126. package/src/node/service-host/service-host.ts +168 -0
  127. package/src/node/service-host/single-process-service.ts +58 -0
  128. package/src/node.ts +69 -0
  129. package/src/service/config.api.ts +224 -0
  130. package/src/service/config.interface.ts +25 -0
  131. package/src/service/index.ts +74 -149
  132. package/src/service/registry-lifecycle.ts +144 -0
  133. package/src/service/registry.service.ts +564 -0
  134. package/src/service/service-bootstrap.ts +74 -0
  135. package/src/service/service.api.ts +13 -0
  136. package/src/service/service.interface.ts +36 -1
  137. package/src/shared/log/index.ts +13 -0
  138. package/src/shared/log/log-batch.ts +156 -0
  139. package/src/shared/log/log-persist-coordinator.ts +107 -0
  140. package/src/shared/log/log-persist-flush.ts +3 -3
  141. package/src/shared/log/log-persist.config.ts +0 -2
  142. package/src/shared/log/log-persist.interface.ts +10 -0
  143. package/src/shared/utils/config-path.utils.ts +35 -0
  144. package/src/shared/utils/get-value-at-path.ts +17 -0
  145. package/src/task/index.ts +2 -0
  146. package/src/task/task-manager.ts +10 -4
  147. package/src/task/task-post-retry.api.ts +61 -0
  148. package/src/task/task-repo-context.ts +8 -1
  149. package/src/trigger/trigger-manager.ts +4 -2
  150. package/src/trigger/trigger-node.ts +10 -4
  151. package/src/trigger/trigger.constant.ts +1 -1
  152. package/src/trigger/trigger.interface.ts +10 -0
  153. package/dist/chunks/create-logger-DyH3mZ8p.js.map +0 -1
  154. package/dist/chunks/enable-log-persist-C7GJo_Nc.js.map +0 -1
  155. package/dist/chunks/word.interface-DLgRobKV.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"word.interface-DLgRobKV.js","sources":["../../src/idea/idea.interface.ts","../../src/link/link.api.ts","../../src/link/link.interface.ts","../../src/node/node.interface.ts","../../src/node/node.api.ts","../../src/node/node-liveness.ts","../../src/shared/utils/fetch-url.ts","../../src/parcel/chunk-url.utils.ts","../../src/parcel/chunk-fetch-registry.ts","../../src/parcel/parcel.interface.ts","../../src/parcel/parcel.api.ts","../../src/shared/utils/sha256.ts","../../src/parcel/parcel-manager.ts","../../src/parcel/parcel.service.ts","../../src/parcel/storage-provider.types.ts","../../src/parcel/storage-provider-registry.ts","../../src/repo/repo.interface.ts","../../src/repo/repo.api.ts","../../src/service/base.interface.ts","../../src/service/service.interface.ts","../../src/service/service.api.ts","../../src/service/index.ts","../../src/shared/utils/network-error.ts","../../src/shared/http/fetch-retry.ts","../../src/shared/utils/safe-file-name.ts","../../src/shared/utils/error.utils.ts","../../src/task/task.constant.ts","../../src/task/task.interface.ts","../../src/task/task.api.ts","../../src/task/task-post.api.ts","../../src/task/task-queue.ts","../../src/word/word.interface.ts"],"sourcesContent":["import type { Target } from \"../core.interface\";\n\nexport enum CategoryIdea {\n OPPORTUNITY = \"opportunity\",\n}\n\nexport interface Idea extends Target {\n /** 主題 */\n value: string;\n details: IdeaDetails;\n category: CategoryIdea;\n}\n\nexport interface IdeaDetails {\n manifestVersion: number;\n marketList: Market[];\n reviewList: string[];\n /** 切入點 */\n point: string;\n}\n\nexport enum Market {\n NA = \"NA\",\n EU = \"EU\",\n JP = \"JP\",\n CN = \"CN\",\n TW = \"TW\",\n}\n","import { createTarget } from \"../core.api\";\nimport { BaseValidator } from \"../core.utils\";\nimport type { Link, LinkDetails } from \"./link.interface\";\n\nexport interface PostLinkCreatePayload {\n name: Link[\"name\"];\n value: Link[\"value\"];\n category: Link[\"category\"];\n details: LinkDetails;\n}\n\nexport class PostLinkValidator extends BaseValidator<PostLinkCreatePayload> {\n protected requiredFields: (keyof PostLinkCreatePayload)[] = [\"name\", \"value\", \"category\", \"details\"];\n protected optionalFields: (keyof PostLinkCreatePayload)[] = [];\n\n constructor() {\n super();\n // Add custom\n this.addCustomValidator((_val) => {\n return true;\n });\n }\n}\n\nexport const postLinkCreate = async (payload: PostLinkCreatePayload) => {\n return createTarget<Link, PostLinkCreatePayload>({\n payload: payload,\n validator: PostLinkValidator,\n createFn: (validPayload) => {\n const { name, value, category, details } = validPayload;\n\n return {\n name,\n category,\n value,\n tagList: [],\n details,\n };\n },\n });\n};\n","import type { Target } from \"../core.interface\";\n\nexport enum CategoryLink {\n LINK = \"link\",\n}\n\nexport interface Link extends Target {\n /** Should be unique */\n name: string;\n /** URL */\n value: string;\n details: LinkDetails;\n /** Only Link can own a custom category, like 'link-log' */\n category: CategoryLink;\n}\n\nexport interface LinkDetails {\n manifestVersion: number;\n description: string;\n /** If string, it is the url of the preview TODO */\n preview: string;\n /** How to render the link */\n loaderKey: string;\n original: unknown;\n}\n","import type { Target } from \"../core.interface\";\n\nexport enum NodeStatus {\n /** Registered, not yet in worker loop. */\n READY = \"READY\",\n /** Worker main loop is running (accepts tasks until shutdown). */\n BUSY = \"BUSY\",\n /** Heartbeat lost or voluntarily offline; considered unavailable by the scheduler. */\n LOST = \"LOST\",\n /** TODO Gracefully draining: not accepting new tasks, waiting for in-flight tasks to complete. */\n DRAINING = \"DRAINING\",\n /** TODO Disabled by an administrator; excluded from scheduling. */\n DISABLED = \"DISABLED\",\n}\n\nexport enum CategoryNode {\n NODE = \"node\",\n}\n\nexport interface Node extends Target {\n /** Empty */\n name: string;\n /** Empty */\n value: string;\n details: NodeDetails;\n category: CategoryNode;\n}\n\nexport interface NodeDetails {\n manifestVersion: number;\n status: NodeStatus;\n lastHeartBeat: number;\n}\n","import { z } from \"zod\";\nimport { createTarget, type QueryFilter, updateTargetDetails, validateWithSchema } from \"../core.api\";\nimport { generateResponse } from \"../core.interface\";\nimport { createLogger } from \"../shared/log\";\nimport { CategoryNode, type Node, type NodeDetails, NodeStatus } from \"./node.interface\";\n\nconst NODE_STATUS_FIELD = \"details->>status\" as const;\nconst LOG_TOPIC_NODE = \"node\";\n\nconst nodeIdSchema = z.string().trim().min(1);\nconst traceIdSchema = z.string().trim().min(1).optional();\n\n// ─── Zod schemas ─────────────────────────────────────────────────────────────\n\nexport const postRegisterNodeSchema = z.object({\n traceId: traceIdSchema,\n});\n\nexport type PostRegisterNodePayload = z.infer<typeof postRegisterNodeSchema>;\n\nexport const patchNodeHeartBeatSchema = z.object({\n nodeId: nodeIdSchema,\n traceId: traceIdSchema,\n});\n\nexport type PatchNodeHeartBeatPayload = z.infer<typeof patchNodeHeartBeatSchema>;\n\nexport const patchStopNodeSchema = z.object({\n nodeId: nodeIdSchema,\n traceId: traceIdSchema,\n});\n\nexport type PatchStopNodePayload = z.infer<typeof patchStopNodeSchema>;\n\nexport const patchChangeNodeStatusSchema = z.object({\n nodeId: nodeIdSchema,\n status: z.nativeEnum(NodeStatus),\n /** When set, UPDATE only if current status matches (optimistic lock). */\n fromStatus: z.nativeEnum(NodeStatus).optional(),\n traceId: traceIdSchema,\n});\n\nexport type PatchChangeNodeStatusPayload = z.infer<typeof patchChangeNodeStatusSchema>;\n\n// ─── Optimistic lock helpers ─────────────────────────────────────────────────\n\nfunction lockOnNodeStatus(status: NodeStatus): QueryFilter[] {\n return [{ field: NODE_STATUS_FIELD, operator: \"eq\", value: status }];\n}\n\n// ─── postRegisterNode ────────────────────────────────────────────────────────\n\nexport const postRegisterNode = validateWithSchema(\n postRegisterNodeSchema,\n \"postRegisterNodeSchema\",\n)(async (payload) => {\n return createTarget<Node, PostRegisterNodePayload>({\n payload,\n createFn: () => {\n const details: NodeDetails = {\n manifestVersion: 0,\n status: NodeStatus.READY,\n lastHeartBeat: Date.now(),\n };\n return {\n name: \"\",\n category: CategoryNode.NODE,\n value: \"\",\n tagList: [],\n details,\n };\n },\n });\n});\n\n// ─── patchNodeHeartBeat ──────────────────────────────────────────────────────\n\nexport const patchNodeHeartBeat = validateWithSchema(\n patchNodeHeartBeatSchema,\n \"patchNodeHeartBeatSchema\",\n)(async ({ nodeId }) => {\n const lastHeartBeat = Date.now();\n await updateTargetDetails<Node, NodeDetails>({\n id: nodeId,\n updateFn: (details) => ({\n ...details,\n lastHeartBeat,\n }),\n });\n return generateResponse.success(lastHeartBeat);\n});\n\n// ─── patchStopNode ───────────────────────────────────────────────────────────\n\nexport const patchStopNode = validateWithSchema(\n patchStopNodeSchema,\n \"patchStopNodeSchema\",\n)(async ({ nodeId }) => {\n const lastHeartBeat = Date.now();\n // TODO 等待任務全部完成才下綫 應該先使用NodeStatus.DRAINING\n await updateTargetDetails<Node, NodeDetails>({\n id: nodeId,\n updateFn: (details) => ({\n ...details,\n lastHeartBeat,\n status: NodeStatus.LOST,\n }),\n });\n return generateResponse.success(lastHeartBeat);\n});\n\n// ─── patchChangeNodeStatus ───────────────────────────────────────────────────\n\nexport const patchChangeNodeStatus = validateWithSchema(\n patchChangeNodeStatusSchema,\n \"patchChangeNodeStatusSchema\",\n)(async ({ nodeId, status, fromStatus, traceId }) => {\n const logger = createLogger({ module: \"patchChangeNodeStatus\", traceId, labels: { nodeId } });\n\n const data = await updateTargetDetails<Node, NodeDetails>({\n id: nodeId,\n optimisticLockFilterList: fromStatus != null ? lockOnNodeStatus(fromStatus) : [],\n updateFn: (details) => ({\n ...details,\n status,\n lastHeartBeat: Date.now(),\n }),\n });\n\n logger.info(\"节点状态更新成功\", {\n topic: LOG_TOPIC_NODE,\n data: {\n nodeId,\n status,\n fromStatus,\n },\n });\n\n return generateResponse.success(data);\n});\n","import { type Node, NodeStatus } from \"./node.interface\";\n\nexport interface TaskNodeLivenessFreshest {\n nodeId: string;\n status: string;\n lastHeartBeat: string;\n ageMs: number;\n}\n\nexport interface TaskNodeLivenessReport {\n healthy: boolean;\n staleMs: number;\n /** BUSY nodes with numeric heartbeat after {@link EvaluateBusyNodeLivenessOptions.excludeNodeId}. */\n busyWorkerCount: number;\n /** Subset of candidates with heartbeat age < staleMs. */\n freshWorkerCount: number;\n freshest: TaskNodeLivenessFreshest | null;\n}\n\nexport interface EvaluateBusyNodeLivenessOptions {\n staleMs: number;\n now?: number;\n /** Omit this node id (e.g. supervisor self). */\n excludeNodeId?: string;\n /**\n * When true, pick freshest only among peers already within staleMs (supervisor spawn guard).\n * When false, pick freshest among all BUSY peers then compare age to staleMs (observability).\n */\n onlyFreshCandidates?: boolean;\n}\n\nfunction isBusyWithHeartbeat(node: Node): boolean {\n return node.details.status === NodeStatus.BUSY && typeof node.details.lastHeartBeat === \"number\";\n}\n\n/** Evaluate TaskNode liveness from a scanned node list (no I/O). */\nexport function evaluateBusyNodeLiveness(\n nodes: Node[],\n options: EvaluateBusyNodeLivenessOptions,\n): TaskNodeLivenessReport {\n const now = options.now ?? Date.now();\n const { staleMs, excludeNodeId, onlyFreshCandidates = false } = options;\n\n const candidates = nodes.filter(\n (node) => (excludeNodeId == null || node.id !== excludeNodeId) && isBusyWithHeartbeat(node),\n );\n\n const busyWorkerCount = candidates.length;\n const freshCandidates = candidates.filter((node) => now - node.details.lastHeartBeat < staleMs);\n const freshWorkerCount = freshCandidates.length;\n\n const pool = onlyFreshCandidates ? freshCandidates : candidates;\n\n const freshestNode = pool.reduce<Node | null>((best, node) => {\n if (best == null) {\n return node;\n }\n return node.details.lastHeartBeat > best.details.lastHeartBeat ? node : best;\n }, null);\n\n const ageMs = freshestNode == null ? Number.POSITIVE_INFINITY : now - freshestNode.details.lastHeartBeat;\n\n const healthy = onlyFreshCandidates ? freshestNode != null : freshestNode != null && ageMs < staleMs;\n\n return {\n healthy,\n staleMs,\n busyWorkerCount,\n freshWorkerCount,\n freshest:\n freshestNode == null\n ? null\n : {\n nodeId: freshestNode.id,\n status: freshestNode.details.status,\n lastHeartBeat: new Date(freshestNode.details.lastHeartBeat).toISOString(),\n ageMs,\n },\n };\n}\n","export function resolveFetchUrl(input: string | URL | Request): string {\n if (typeof input === \"string\") {\n return input;\n }\n if (input instanceof URL) {\n return input.href;\n }\n return input.url;\n}\n\nexport function isHttpUrl(url: string): boolean {\n return url.startsWith(\"http://\") || url.startsWith(\"https://\");\n}\n","import { isHttpUrl } from \"../shared/utils/fetch-url\";\n\nexport function isLocalFilesystemPath(url: string): boolean {\n if (url.startsWith(\"file://\")) {\n return true;\n }\n return /^[a-zA-Z]:[\\\\/]/.test(url) || url.startsWith(\"\\\\\\\\\") || url.startsWith(\"/\");\n}\n\n/** Opaque chunk locator - not HTTP and not a local path (e.g. Telegram file_id). */\nexport function isOpaqueChunkUrl(url: string): boolean {\n return !isHttpUrl(url) && !isLocalFilesystemPath(url);\n}\n\n/** `provider:opaque` scheme (e.g. `telegram:BQACAg...`). */\nexport function parseProviderPrefixedUrl(url: string): { provider: string; locator: string } | null {\n const match = /^([a-z][a-z0-9_-]*):(.+)$/i.exec(url);\n if (match == null) {\n return null;\n }\n const provider = match[1].toLowerCase();\n const locator = match[2].trim();\n if (locator === \"\") {\n return null;\n }\n if (provider === \"http\" || provider === \"https\" || provider === \"file\") {\n return null;\n }\n return { provider, locator };\n}\n","import { isHttpUrl, resolveFetchUrl } from \"../shared/utils/fetch-url\";\nimport { isLocalFilesystemPath, parseProviderPrefixedUrl } from \"./chunk-url.utils\";\n\ninterface ChunkResolver {\n provider: string;\n matches(url: string): boolean;\n resolve(locator: string): Promise<ArrayBuffer>;\n}\n\n/** Provider module subset used for opaque {@link Chunk} restore. */\nexport interface ChunkResolveProvider {\n readonly provider: string;\n resolveChunk?(locator: string): Promise<ArrayBuffer>;\n matchesOpaqueUrl?(url: string): boolean;\n}\n\nconst resolvers = new Map<string, ChunkResolver>();\n\nfunction registerChunkResolver(resolver: ChunkResolver): void {\n resolvers.set(resolver.provider, resolver);\n}\n\n/** Register a provider's chunk resolver (call when the provider module loads). */\nexport function registerProviderChunkResolver(module: ChunkResolveProvider): void {\n if (module.resolveChunk == null) {\n return;\n }\n\n const resolveChunk = module.resolveChunk;\n\n registerChunkResolver({\n provider: module.provider,\n matches(url: string) {\n const prefixed = parseProviderPrefixedUrl(url);\n if (prefixed != null) {\n return prefixed.provider === module.provider;\n }\n return module.matchesOpaqueUrl?.(url) === true;\n },\n resolve(locator: string) {\n const prefixed = parseProviderPrefixedUrl(locator);\n const opaque = prefixed?.provider === module.provider ? prefixed.locator : locator;\n return resolveChunk(opaque);\n },\n });\n}\n\nasync function resolveOpaqueUrl(url: string): Promise<ArrayBuffer> {\n const prefixed = parseProviderPrefixedUrl(url);\n if (prefixed != null) {\n const resolver = resolvers.get(prefixed.provider);\n if (resolver == null) {\n throw new Error(`No chunk resolver registered for provider: ${prefixed.provider}`);\n }\n return resolver.resolve(prefixed.locator);\n }\n\n const matches = [...resolvers.values()].filter((entry) => entry.matches(url));\n if (matches.length === 1) {\n return matches[0].resolve(url);\n }\n if (matches.length > 1) {\n throw new Error(`Ambiguous chunk url (${url}); use provider-prefixed form e.g. telegram:${url.slice(0, 12)}…`);\n }\n\n const registered = [...resolvers.keys()].join(\", \") || \"(none)\";\n throw new Error(`No chunk resolver for opaque url (${url.slice(0, 24)}…). Registered: ${registered}`);\n}\n\n/**\n * Patch global fetch so ParcelManager.reassemble can resolve opaque chunk locators.\n * HTTP URLs use the original fetch (S3 presigned, etc.).\n */\nexport function installChunkFetchRegistry(): () => void {\n const originalFetch = globalThis.fetch.bind(globalThis);\n\n globalThis.fetch = (async (input: string | URL | Request, init?: RequestInit) => {\n const url = resolveFetchUrl(input);\n if (isHttpUrl(url)) {\n return originalFetch(input, init);\n }\n if (isLocalFilesystemPath(url)) {\n throw new Error(\n `Chunk fetch registry: local path not supported (${url}). ` +\n \"Use a local provider module or parcel-restore-local.\",\n );\n }\n\n const buffer = await resolveOpaqueUrl(url);\n return new Response(buffer, { headers: { \"Content-Type\": \"application/octet-stream\" } });\n }) as typeof fetch;\n\n return () => {\n globalThis.fetch = originalFetch;\n };\n}\n","import type { Target } from \"../core.interface\";\n\nexport enum CategoryParcel {\n PARCEL = \"parcel\",\n}\n\nexport interface Parcel extends Target {\n /** Human readable name */\n name: string;\n /** Used to search the parcel, should be unique */\n value: string;\n category: CategoryParcel;\n details: ParcelDetails;\n}\n\nexport interface ParcelCrypto {\n /** 未設置或 false → 明文分片 */\n enabled: boolean;\n /** 例如 \"AES-GCM-256\";enabled 時必填 */\n algorithm?: string;\n /** Base64 IV;AES-GCM 時必填 */\n iv?: string;\n /** 口令派生密鑰時的 KDF,例如 \"PBKDF2-SHA256\" */\n keyDerivation?: string;\n /** PBKDF2 salt(Base64);keyDerivation 為 PBKDF2 時必填 */\n salt?: string;\n /** PBKDF2 迭代次數;未設置時由 SDK 默認 */\n pbkdf2Iterations?: number;\n}\n\nexport interface ParcelDetails {\n manifestVersion: number;\n chunkList: Chunk[];\n /** 還原後的明文 sha256 */\n checksum: string;\n /** 還原後的明文大小(字節) */\n size: number;\n preview?: string;\n crypto?: ParcelCrypto;\n}\n\nexport enum LifecycleStatus {\n STORED = \"STORED\",\n SOFT_DELETED = \"SOFT_DELETED\",\n HARD_DELETED = \"HARD_DELETED\",\n}\n\nexport interface Lifecycle {\n status: LifecycleStatus;\n storedAt: string;\n softDeletedAt: string | null;\n hardDeletedAt: string | null;\n}\n\nexport interface Chunk {\n index: number;\n size: number;\n checksum: string; // 該 chunk 字節的 sha256(明文或密文,與 create 時一致)\n url: string;\n provider?: string; // 對應 StorageAdapter / 平台標識(呼應 TODO shardKey)\n}\n","import { z } from \"zod\";\nimport { createTarget, deleteTarget, getTarget, validateWithSchema } from \"../core.api\";\nimport { CategoryParcel, type Parcel, type ParcelDetails } from \"./parcel.interface\";\n\nconst parcelIdSchema = z.string().trim().min(1);\n\nconst chunkSchema = z.object({\n index: z.number().int().nonnegative(),\n size: z.number().int().nonnegative(),\n checksum: z.string().trim().min(1),\n url: z.string().trim().min(1),\n provider: z.string().optional(),\n});\n\nconst parcelCryptoSchema = z.object({\n enabled: z.boolean(),\n algorithm: z.string().optional(),\n iv: z.string().optional(),\n keyDerivation: z.string().optional(),\n salt: z.string().optional(),\n pbkdf2Iterations: z.number().int().positive().optional(),\n});\n\nexport const parcelDetailsSchema = z.object({\n manifestVersion: z.number().int().nonnegative(),\n chunkList: z.array(chunkSchema).min(1),\n checksum: z.string().trim().min(1),\n size: z.number().int().nonnegative(),\n preview: z.string().optional(),\n crypto: parcelCryptoSchema.optional(),\n});\n\nexport const postParcelSchema = z.object({\n name: z.string().trim().min(1),\n value: z.string().trim().min(1),\n details: parcelDetailsSchema,\n tagList: z.array(z.string()).optional().default([]),\n extra: z.string().optional(),\n});\n\nexport type PostParcelPayload = z.infer<typeof postParcelSchema>;\n\nexport const getParcelSchema = z.object({\n id: parcelIdSchema,\n});\n\nexport type GetParcelPayload = z.infer<typeof getParcelSchema>;\n\nexport const deleteParcelSchema = z.object({\n id: parcelIdSchema,\n});\n\nexport type DeleteParcelPayload = z.infer<typeof deleteParcelSchema>;\n\nconst parcelCategoryFilter = {\n field: \"category\",\n operator: \"eq\" as const,\n value: CategoryParcel.PARCEL,\n};\n\n/** Persist a Parcel row (`category=parcel`) after chunks are uploaded via {@link ParcelManager.save}. */\nexport const postParcel = validateWithSchema(\n postParcelSchema,\n \"postParcelSchema\",\n)(async ({ name, value, details, tagList, extra }) => {\n return createTarget<Parcel, PostParcelPayload>({\n payload: { name, value, details, tagList, extra },\n createFn: () => ({\n name,\n value,\n category: CategoryParcel.PARCEL,\n tagList,\n extra,\n details: details as ParcelDetails,\n }),\n });\n});\n\n/** Fetch a Parcel by id (`category=parcel`). */\nexport const getParcel = validateWithSchema(\n getParcelSchema,\n \"getParcelSchema\",\n)(async ({ id }) => {\n const result = await getTarget({\n id,\n filterList: [parcelCategoryFilter],\n });\n return {\n ...result,\n data: result.data as Parcel,\n };\n});\n\n/** Delete a Parcel row by id (`category=parcel`). Does not remove chunk blobs from storage providers. */\nexport const deleteParcel = validateWithSchema(\n deleteParcelSchema,\n \"deleteParcelSchema\",\n)(async ({ id }) => {\n return deleteTarget({\n id,\n filterList: [parcelCategoryFilter],\n });\n});\n","function getCrypto(): Crypto {\n if (typeof globalThis !== \"undefined\" && globalThis.crypto) {\n return globalThis.crypto;\n }\n throw new Error(\"sha256Hex: crypto.subtle not available\");\n}\n\n/** SHA-256 digest as lowercase hex (browser + Node Web Crypto). */\nexport async function sha256Hex(buffer: ArrayBuffer): Promise<string> {\n const crypto = getCrypto();\n const hash = await crypto.subtle.digest(\"SHA-256\", buffer);\n return Array.from(new Uint8Array(hash))\n .map((byte) => byte.toString(16).padStart(2, \"0\"))\n .join(\"\");\n}\n","import type { TargetDraft } from \"../core.interface\";\nimport { sha256Hex } from \"../shared/utils/sha256\";\nimport { CategoryParcel, type Chunk, type Parcel, type ParcelCrypto, type ParcelDetails } from \"./parcel.interface\";\n\nconst MANIFEST_VERSION = 1;\nconst DEFAULT_CHUNK_SIZE = 2 * 1024 * 1024; // 2MB - fallback for empty input only\nconst MB = 1024 * 1024;\n/** Source files at or below this size use at most 2 chunks */\nconst SMALL_FILE_MAX_BYTES = 50 * MB;\n/** Target per-chunk size for larger files */\nconst PREFERRED_CHUNK_BYTES = 16 * MB;\n/** Cap chunk count for very large files */\nconst MAX_CHUNK_COUNT = 64;\nconst AES_GCM_ALGORITHM = \"AES-GCM-256\";\nconst KEY_DERIVATION_PBKDF2 = \"PBKDF2-SHA256\";\nconst PBKDF2_ITERATIONS = 100_000;\nconst AES_GCM_IV_LENGTH = 12;\nconst AES_GCM_TAG_LENGTH = 128;\n/** Auth tag bytes Web Crypto appends to AES-GCM ciphertext */\nconst AES_GCM_AUTH_TAG_BYTES = AES_GCM_TAG_LENGTH / 8;\n\n/** @deprecated Legacy IV in Target.extra - read only for old parcels */\nconst LEGACY_EXTRA_IV_KEY = \"iv\";\n\n/** Pluggable storage backend; chunks are round-robin distributed across adapters */\nexport interface StorageAdapter {\n /** Written to {@link Chunk.provider} (e.g. `\"s3\"`, `\"ipfs\"`) */\n provider?: string;\n upload(data: ArrayBuffer, pathOrKey: string): Promise<{ url: string }>;\n}\n\nexport interface CreateOptions {\n /**\n * Bytes per chunk after split (plaintext or ciphertext).\n * When omitted, derived from source file size — see {@link resolveChunkSize}.\n */\n chunkSize?: number;\n /**\n * When `true`, encrypt the whole file before chunking.\n * Default `false` — plaintext shards across platforms (anti single-platform review).\n */\n encrypt?: boolean;\n /** User passphrase (e.g. `\"apple\"`); derives AES key via PBKDF2 when `encrypt` is true */\n passphrase?: string;\n /** Raw AES-GCM key; mutually exclusive with `passphrase` */\n key?: CryptoKey;\n}\n\nexport interface ReassembleOptions {\n /** Raw AES-GCM key (parcels without passphrase-based KDF) */\n key?: CryptoKey;\n /** Passphrase when `details.crypto.keyDerivation` is PBKDF2 */\n passphrase?: string;\n}\n\nexport interface CreateResult {\n details: ParcelDetails;\n /** Chunk payloads to upload (plaintext or ciphertext per `details.crypto`) */\n chunks: ArrayBuffer[];\n /** Present when `encrypt` and key was generated — caller must persist */\n key?: CryptoKey;\n}\n\n/** Identity fields for {@link save} — `id` / `created_at` come from {@link postParcel}. */\nexport interface ParcelSaveInput {\n name: string;\n value: string;\n tagList?: string[];\n}\n\nfunction getCrypto(): Crypto {\n if (typeof globalThis !== \"undefined\" && globalThis.crypto) return globalThis.crypto;\n throw new Error(\"ParcelManager: crypto not available\");\n}\n\nfunction bytesToBase64(bytes: Uint8Array): string {\n return btoa(String.fromCharCode(...bytes));\n}\n\nfunction base64ToBytes(base64: string): Uint8Array {\n return Uint8Array.from(atob(base64), (c) => c.charCodeAt(0));\n}\n\nasync function encrypt(data: ArrayBuffer, key: CryptoKey, iv: Uint8Array): Promise<ArrayBuffer> {\n const crypto = getCrypto();\n return crypto.subtle.encrypt({ name: \"AES-GCM\", iv: new Uint8Array(iv), tagLength: AES_GCM_TAG_LENGTH }, key, data);\n}\n\nasync function decrypt(data: ArrayBuffer, key: CryptoKey, iv: Uint8Array): Promise<ArrayBuffer> {\n const crypto = getCrypto();\n return crypto.subtle.decrypt({ name: \"AES-GCM\", iv: new Uint8Array(iv), tagLength: AES_GCM_TAG_LENGTH }, key, data);\n}\n\nfunction isDecryptAuthFailure(error: unknown): boolean {\n if (error instanceof DOMException && error.name === \"OperationError\") {\n return true;\n }\n if (error instanceof Error) {\n return /operation failed|operation-specific|decrypt|OperationError/i.test(error.message);\n }\n return false;\n}\n\nasync function decryptPayload(\n data: ArrayBuffer,\n key: CryptoKey,\n iv: Uint8Array,\n usedPassphrase: boolean,\n): Promise<ArrayBuffer> {\n try {\n return await decrypt(data, key, iv);\n } catch (error) {\n if (isDecryptAuthFailure(error)) {\n throw new Error(\n usedPassphrase\n ? \"ParcelManager.reassemble: 解密失败,口令错误或密文已损坏\"\n : \"ParcelManager.reassemble: 解密失败,密钥错误或密文已损坏\",\n );\n }\n throw error;\n }\n}\n\nasync function generateKey(): Promise<CryptoKey> {\n const crypto = getCrypto();\n return crypto.subtle.generateKey({ name: \"AES-GCM\", length: 256 }, true, [\"encrypt\", \"decrypt\"]);\n}\n\nasync function deriveKeyFromPassphrase(passphrase: string, salt: Uint8Array, iterations: number): Promise<CryptoKey> {\n const crypto = getCrypto();\n const keyMaterial = await crypto.subtle.importKey(\"raw\", new TextEncoder().encode(passphrase), \"PBKDF2\", false, [\n \"deriveKey\",\n ]);\n return crypto.subtle.deriveKey(\n {\n name: \"PBKDF2\",\n salt: new Uint8Array(salt),\n iterations,\n hash: \"SHA-256\",\n },\n keyMaterial,\n { name: \"AES-GCM\", length: 256 },\n false,\n [\"encrypt\", \"decrypt\"],\n );\n}\n\nfunction usesPassphraseDerivation(crypto: ParcelCrypto): boolean {\n return crypto.keyDerivation === KEY_DERIVATION_PBKDF2;\n}\n\nasync function resolveDecryptionKey(crypto: ParcelCrypto, options: ReassembleOptions): Promise<CryptoKey> {\n if (usesPassphraseDerivation(crypto)) {\n if (options.passphrase == null || options.passphrase === \"\") {\n throw new Error(\"ParcelManager.reassemble: 口令加密 Parcel 需要提供 passphrase\");\n }\n if (crypto.salt == null || crypto.salt === \"\") {\n throw new Error(\"ParcelManager.reassemble: 缺少 details.crypto.salt\");\n }\n const iterations = crypto.pbkdf2Iterations ?? PBKDF2_ITERATIONS;\n const salt = base64ToBytes(crypto.salt);\n return deriveKeyFromPassphrase(options.passphrase, salt, iterations);\n }\n if (options.key != null) {\n return options.key;\n }\n throw new Error(\"ParcelManager.reassemble: 加密 Parcel 需要提供 key\");\n}\n\nasync function buildChunkList(\n payload: ArrayBuffer,\n chunkSize: number,\n): Promise<{ chunks: ArrayBuffer[]; chunkList: Chunk[] }> {\n const chunks: ArrayBuffer[] = [];\n const chunkList: Chunk[] = [];\n let offset = 0;\n let index = 0;\n\n while (offset < payload.byteLength) {\n const end = Math.min(offset + chunkSize, payload.byteLength);\n const chunkBuffer = payload.slice(offset, end);\n const checksum = await sha256Hex(chunkBuffer);\n chunks.push(chunkBuffer);\n chunkList.push({\n index,\n size: chunkBuffer.byteLength,\n checksum,\n url: \"\",\n });\n offset = end;\n index += 1;\n }\n\n return { chunks, chunkList };\n}\n\n/**\n * Derive per-chunk byte size from the buffer that will be split.\n *\n * | Payload size | Policy |\n * |--------------|--------|\n * | ≤50 MB | At most **2** chunks (`ceil(size / 2)` per chunk) |\n * | > 50 MB | Target ~16 MB per chunk; chunk count capped at **64** |\n *\n * For encrypted parcels, pass plaintext size + {@link AES_GCM_AUTH_TAG_BYTES}\n * (GCM auth tag is appended before split).\n *\n * Explicit `chunkSize` in {@link CreateOptions} overrides this table.\n */\nfunction resolveChunkSize(fileSize: number, override?: number): number {\n if (override != null) {\n if (!Number.isFinite(override) || override <= 0) {\n throw new Error(\"ParcelManager.create: chunkSize must be a positive number\");\n }\n return override;\n }\n if (fileSize <= 0) {\n return DEFAULT_CHUNK_SIZE;\n }\n if (fileSize <= SMALL_FILE_MAX_BYTES) {\n return Math.ceil(fileSize / 2);\n }\n const targetChunks = Math.min(MAX_CHUNK_COUNT, Math.max(2, Math.ceil(fileSize / PREFERRED_CHUNK_BYTES)));\n return Math.ceil(fileSize / targetChunks);\n}\n\nfunction concatBuffers(buffers: ArrayBuffer[]): ArrayBuffer {\n const total = buffers.reduce((sum, buffer) => sum + buffer.byteLength, 0);\n const merged = new Uint8Array(total);\n let offset = 0;\n for (const buffer of buffers) {\n merged.set(new Uint8Array(buffer), offset);\n offset += buffer.byteLength;\n }\n return merged.buffer;\n}\n\nfunction isEncryptionEnabled(details: ParcelDetails, parcelExtra?: string): boolean {\n if (details.crypto != null) {\n return details.crypto.enabled === true;\n }\n if (parcelExtra == null || parcelExtra.trim() === \"\") {\n return false;\n }\n try {\n const legacy = JSON.parse(parcelExtra) as Record<string, unknown>;\n return typeof legacy[LEGACY_EXTRA_IV_KEY] === \"string\";\n } catch {\n return false;\n }\n}\n\nfunction resolveCrypto(details: ParcelDetails, parcelExtra?: string): ParcelCrypto | null {\n if (details.crypto?.enabled === true) {\n return details.crypto;\n }\n if (parcelExtra == null || parcelExtra.trim() === \"\") {\n return null;\n }\n try {\n const legacy = JSON.parse(parcelExtra) as Record<string, unknown>;\n const iv = legacy[LEGACY_EXTRA_IV_KEY];\n if (typeof iv !== \"string\" || iv === \"\") {\n return null;\n }\n return { enabled: true, algorithm: AES_GCM_ALGORITHM, iv };\n } catch {\n return null;\n }\n}\n\n/**\n * Split a file into chunks. Default: plaintext shards; optional whole-file AES-GCM before split.\n */\nasync function create(file: ArrayBuffer, options: CreateOptions = {}): Promise<CreateResult> {\n const encryptEnabled = options.encrypt === true;\n const splitPayloadSize = encryptEnabled ? file.byteLength + AES_GCM_AUTH_TAG_BYTES : file.byteLength;\n const chunkSize = resolveChunkSize(splitPayloadSize, options.chunkSize);\n const plaintextChecksum = await sha256Hex(file);\n\n if (!encryptEnabled) {\n const { chunks, chunkList } = await buildChunkList(file, chunkSize);\n return {\n details: {\n manifestVersion: MANIFEST_VERSION,\n chunkList,\n checksum: plaintextChecksum,\n size: file.byteLength,\n },\n chunks,\n };\n }\n\n if (options.passphrase != null && options.key != null) {\n throw new Error(\"ParcelManager.create: passphrase 与 key 不能同時指定\");\n }\n\n const cryptoApi = getCrypto();\n const iv = cryptoApi.getRandomValues(new Uint8Array(AES_GCM_IV_LENGTH));\n let key: CryptoKey;\n let generatedKey = false;\n let cryptoMeta: ParcelCrypto;\n\n if (options.passphrase != null && options.passphrase !== \"\") {\n const salt = cryptoApi.getRandomValues(new Uint8Array(16));\n key = await deriveKeyFromPassphrase(options.passphrase, salt, PBKDF2_ITERATIONS);\n cryptoMeta = {\n enabled: true,\n algorithm: AES_GCM_ALGORITHM,\n iv: bytesToBase64(iv),\n keyDerivation: KEY_DERIVATION_PBKDF2,\n salt: bytesToBase64(salt),\n pbkdf2Iterations: PBKDF2_ITERATIONS,\n };\n } else if (options.key != null) {\n key = options.key;\n cryptoMeta = {\n enabled: true,\n algorithm: AES_GCM_ALGORITHM,\n iv: bytesToBase64(iv),\n };\n } else {\n key = await generateKey();\n generatedKey = true;\n cryptoMeta = {\n enabled: true,\n algorithm: AES_GCM_ALGORITHM,\n iv: bytesToBase64(iv),\n };\n }\n\n const encrypted = await encrypt(file, key, iv);\n const { chunks, chunkList } = await buildChunkList(encrypted, chunkSize);\n\n const result: CreateResult = {\n details: {\n manifestVersion: MANIFEST_VERSION,\n chunkList,\n checksum: plaintextChecksum,\n size: file.byteLength,\n crypto: cryptoMeta,\n },\n chunks,\n };\n if (generatedKey) {\n result.key = key;\n }\n return result;\n}\n\n/** Upload chunks round-robin across storage adapters */\nasync function save(\n createResult: CreateResult,\n fileSystems: StorageAdapter[],\n input: ParcelSaveInput,\n): Promise<TargetDraft<Parcel>> {\n if (fileSystems.length === 0) {\n throw new Error(\"ParcelManager.save: fileSystems 不能为空\");\n }\n\n const { details, chunks } = createResult;\n const chunkListWithUrls: Chunk[] = [];\n\n for (let i = 0; i < chunks.length; i++) {\n const adapter = fileSystems[i % fileSystems.length];\n const pathOrKey = `chunk-${i}-${details.checksum.slice(0, 8)}`;\n const { url } = await adapter.upload(chunks[i], pathOrKey);\n chunkListWithUrls.push({\n ...details.chunkList[i],\n url,\n provider: adapter.provider,\n });\n }\n\n return {\n name: input.name,\n value: input.value,\n tagList: input.tagList ?? [],\n category: CategoryParcel.PARCEL,\n details: {\n ...details,\n chunkList: chunkListWithUrls,\n },\n };\n}\n\nasync function downloadAndVerifyChunks(chunkList: Chunk[]): Promise<ArrayBuffer[]> {\n const sortedChunks = [...chunkList].sort((a, b) => a.index - b.index);\n const buffers: ArrayBuffer[] = [];\n\n for (const chunkMeta of sortedChunks) {\n const res = await fetch(chunkMeta.url);\n if (!res.ok) {\n throw new Error(`ParcelManager.reassemble: 下载 chunk ${chunkMeta.index} 失败: ${res.status}`);\n }\n const chunkBuffer = await res.arrayBuffer();\n const chunkChecksum = await sha256Hex(chunkBuffer);\n if (chunkChecksum !== chunkMeta.checksum) {\n throw new Error(`ParcelManager.reassemble: chunk ${chunkMeta.index} 校验失败 (checksum 不一致`);\n }\n buffers.push(chunkBuffer);\n }\n\n return buffers;\n}\n\nfunction verifyPlaintextSize(buffer: ArrayBuffer, details: ParcelDetails): void {\n if (buffer.byteLength !== details.size) {\n throw new Error(\n `ParcelManager.reassemble: 重组后大小与 details.size 不一致(${buffer.byteLength} !== ${details.size})`,\n );\n }\n}\n\n/**\n * Fetch chunks from {@link Parcel.details.chunkList}, reassemble, optionally decrypt, verify checksum.\n * Encrypted parcels: pass `{ passphrase }` for PBKDF2 parcels, or `{ key }` for raw-key parcels.\n */\nasync function reassemble(parcel: Parcel, options: ReassembleOptions = {}): Promise<ArrayBuffer> {\n const { details } = parcel;\n const encrypted = isEncryptionEnabled(details, parcel.extra);\n\n const buffers = await downloadAndVerifyChunks(details.chunkList);\n const merged = concatBuffers(buffers);\n\n if (!encrypted) {\n verifyPlaintextSize(merged, details);\n const fileChecksum = await sha256Hex(merged);\n if (fileChecksum !== details.checksum) {\n throw new Error(\"ParcelManager.reassemble: 重组后文件校验失败 (sha256 与 details.checksum 不一致)\");\n }\n return merged;\n }\n\n const cryptoMeta = resolveCrypto(details, parcel.extra);\n if (cryptoMeta?.iv == null || cryptoMeta.iv === \"\") {\n throw new Error(\"ParcelManager.reassemble: 加密 Parcel 缺少 details.crypto.iv\");\n }\n\n const iv = base64ToBytes(cryptoMeta.iv);\n if (iv.length !== AES_GCM_IV_LENGTH) {\n throw new Error(\"ParcelManager.reassemble: IV 长度无效\");\n }\n\n const key = await resolveDecryptionKey(cryptoMeta, options);\n const usedPassphrase = usesPassphraseDerivation(cryptoMeta);\n const decrypted = await decryptPayload(merged, key, iv, usedPassphrase);\n verifyPlaintextSize(decrypted, details);\n const fileChecksum = await sha256Hex(decrypted);\n if (fileChecksum !== details.checksum) {\n throw new Error(\n usedPassphrase\n ? \"ParcelManager.reassemble: 解密后校验失败,口令错误或数据已损坏\"\n : \"ParcelManager.reassemble: 解密后文件校验失败 (sha256 与 details.checksum 不一致)\",\n );\n }\n\n return decrypted;\n}\n\nconst ParcelManager = {\n create,\n save,\n reassemble,\n};\n\nexport { ParcelManager };\n","import type { SupabaseResponse } from \"../core.interface\";\nimport { getParcel, postParcel } from \"./parcel.api\";\nimport type { Parcel } from \"./parcel.interface\";\nimport { type CreateOptions, ParcelManager, type ReassembleOptions, type StorageAdapter } from \"./parcel-manager\";\n\nexport interface PublishParcelInput {\n file: ArrayBuffer;\n adapters: StorageAdapter[];\n name: string;\n value: string;\n tagList?: string[];\n extra?: string;\n createOptions?: CreateOptions;\n}\n\nexport interface PublishParcelResult {\n parcel: Parcel;\n /** Present when encrypted without passphrase — caller must persist outside Supabase */\n key?: CryptoKey;\n}\n\nexport interface RestoreParcelByIdInput {\n id: string;\n reassembleOptions?: ReassembleOptions;\n}\n\nexport interface RestoreParcelByIdResult {\n parcel: Parcel;\n file: ArrayBuffer;\n}\n\nfunction requireResponseData<T>(response: SupabaseResponse<T>, label: string): T {\n if (response.data == null) {\n const suffix = response.message != null ? ` (${response.message})` : \"\";\n throw new Error(`${label}: no data${suffix}`);\n }\n return response.data;\n}\n\n/**\n * One-shot publish: split (optional encrypt) → upload chunks → persist Parcel row.\n * Orchestrates {@link ParcelManager} + {@link postParcel}.\n */\nexport async function publishParcel(input: PublishParcelInput): Promise<PublishParcelResult> {\n const { file, adapters, name, value, tagList = [], extra, createOptions } = input;\n\n const createResult = await ParcelManager.create(file, createOptions ?? {});\n const draft = await ParcelManager.save(createResult, adapters, { name, value, tagList });\n\n const response = await postParcel({\n name: draft.name,\n value: draft.value,\n details: draft.details,\n tagList: draft.tagList ?? [],\n extra,\n });\n\n return {\n parcel: requireResponseData(response, \"postParcel\"),\n key: createResult.key,\n };\n}\n\n/**\n * Reassemble file bytes from a {@link Parcel} (chunk URLs in details).\n */\nexport async function restoreParcel(parcel: Parcel, reassembleOptions?: ReassembleOptions): Promise<ArrayBuffer> {\n return ParcelManager.reassemble(parcel, reassembleOptions ?? {});\n}\n\n/**\n * Fetch Parcel by id, then reassemble. Orchestrates {@link getParcel} + {@link restoreParcel}.\n */\nexport async function restoreParcelById(input: RestoreParcelByIdInput): Promise<RestoreParcelByIdResult> {\n const response = await getParcel({ id: input.id });\n const parcel = requireResponseData(response, \"getParcel\");\n const file = await restoreParcel(parcel, input.reassembleOptions);\n return { parcel, file };\n}\n","import type { ChunkResolveProvider } from \"./chunk-fetch-registry\";\nimport type { Parcel } from \"./parcel.interface\";\nimport type { StorageAdapter } from \"./parcel-manager\";\n\nexport interface ProviderProbeOk {\n ok: true;\n detail?: Record<string, unknown>;\n}\n\nexport interface ProviderProbeFail {\n ok: false;\n error: string;\n}\n\nexport type ProviderProbeResult = ProviderProbeOk | ProviderProbeFail;\n\n/** Best-effort rollback of partial uploads. */\nexport interface UploadTracker<THandle> {\n readonly handles: THandle[];\n push(handle: THandle): void;\n}\n\nexport interface CreateUploadAdapterOptions {\n /** Collect rollback handles during upload (partial-failure cleanup). */\n tracker?: UploadTracker<unknown>;\n}\n\n/** Full storage backend module: upload, restore, probe, rollback. */\nexport interface StorageProviderModule extends ChunkResolveProvider {\n createUploadAdapter(options?: CreateUploadAdapterOptions): StorageAdapter;\n probe?(): Promise<ProviderProbeResult>;\n rollbackUpload?(handles: unknown[]): Promise<void>;\n /** Validate parcel before restore (provider mix, missing chunks). */\n assertParcelRestorable?(parcel: Parcel): void;\n}\n\nexport function createUploadTracker<THandle>(): UploadTracker<THandle> {\n const handles: THandle[] = [];\n return {\n handles,\n push(handle: THandle) {\n handles.push(handle);\n },\n };\n}\n","import { registerProviderChunkResolver } from \"./chunk-fetch-registry\";\nimport type { ProviderProbeResult, StorageProviderModule } from \"./storage-provider.types\";\n\nexport type ProviderProbeMap = Record<string, ProviderProbeResult | { ok: true; detail: { skipped: true } }>;\n\nexport interface StorageProviderRegistry {\n register(module: StorageProviderModule): void;\n get(provider: string): StorageProviderModule;\n has(provider: string): boolean;\n list(): string[];\n probeAll(): Promise<ProviderProbeMap>;\n}\n\n/** In-process registry for {@link StorageProviderModule}; syncs chunk resolvers on register. */\nexport function createStorageProviderRegistry(): StorageProviderRegistry {\n const modules = new Map<string, StorageProviderModule>();\n\n return {\n register(module) {\n modules.set(module.provider, module);\n registerProviderChunkResolver(module);\n },\n get(provider) {\n const found = modules.get(provider);\n if (found == null) {\n const available = [...modules.keys()].join(\", \") || \"(none)\";\n throw new Error(`Unknown storage provider: ${provider}. Registered: ${available}`);\n }\n return found;\n },\n has(provider) {\n return modules.has(provider);\n },\n list() {\n return [...modules.keys()];\n },\n async probeAll() {\n const out: ProviderProbeMap = {};\n for (const [name, module] of modules) {\n if (module.probe == null) {\n out[name] = { ok: true, detail: { skipped: true } };\n continue;\n }\n out[name] = await module.probe();\n }\n return out;\n },\n };\n}\n","import type { Target } from \"../core.interface\";\n\nexport enum CategoryRepo {\n /** Project */\n REPO = \"repo\",\n}\n\n/** `Repo.details.usage` for task worker remote discovery ({@link registerTasks}). */\nexport const TASK_REPO_USAGE = \"task\";\n\nexport interface Repo extends Target {\n /** Human readable name */\n name: string;\n /** Unique key, consumers use this to determine which repo to use */\n value: string;\n details: RepoDetails;\n category: CategoryRepo;\n}\n\nexport interface RepoDetails {\n manifestVersion: number;\n /**\n * Business usage partition for discovery and load (caller-defined string, e.g. `\"task\"`).\n * Used by {@link getScanRemoteRepoValues} to narrow scan scope; validity is the caller's responsibility.\n */\n usage: string;\n /** Repo entry module URL or filesystem path — used to dynamic-import TaskRepoContext. */\n url: string;\n hash: string;\n}\n","import { z } from \"zod\";\nimport { scanTargetList, validateWithSchema } from \"../core.api\";\nimport { generateResponse, type SupabaseResponse } from \"../core.interface\";\nimport { CategoryRepo, type Repo } from \"./repo.interface\";\n\nconst REPO_USAGE_FIELD = \"details->>usage\" as const;\n\nexport const getScanRemoteRepoValuesSchema = z.object({\n usage: z.string().trim().min(1),\n});\n\nexport type GetScanRemoteRepoValuesPayload = z.infer<typeof getScanRemoteRepoValuesSchema>;\n\n/**\n * Scan `Repo.value` keys for `category=repo` with matching `details.usage`.\n * Returns `{ data: string[] }` on success; validation and DB failures use `{ error }` (never throws).\n */\nexport const getScanRemoteRepoValues = async (\n payload: GetScanRemoteRepoValuesPayload,\n): Promise<SupabaseResponse<string[]>> => {\n try {\n return await getScanRemoteRepoValuesValidated(payload);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return generateResponse.error(message) as SupabaseResponse<string[]>;\n }\n};\n\nconst getScanRemoteRepoValuesValidated = validateWithSchema(\n getScanRemoteRepoValuesSchema,\n \"getScanRemoteRepoValuesSchema\",\n)(async ({ usage }): Promise<SupabaseResponse<string[]>> => {\n try {\n const { data } = await scanTargetList<Repo>({\n category: CategoryRepo.REPO,\n selectFields: \"value\",\n orderBy: { field: \"value\", ascending: true },\n filterList: [{ field: REPO_USAGE_FIELD, operator: \"eq\", value: usage }],\n });\n\n const values = (data ?? [])\n .map((row) => row.value?.trim())\n .filter((value): value is string => value != null && value !== \"\");\n\n return generateResponse.success([...new Set(values)]);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return generateResponse.error(message) as SupabaseResponse<string[]>;\n }\n});\n","export enum ServiceLifecycleStatus {\n ACTIVE = \"ACTIVE\",\n DEPRECATED = \"DEPRECATED\",\n SUNSET = \"SUNSET\",\n}\n\nexport interface ServiceLifecycle {\n status: ServiceLifecycleStatus;\n /** YYYY-MM-DD */\n activeSince: string;\n deprecatedAt: string | null;\n sunsetAt: string | null;\n}\n\n/** Inline enum members (no registry lookup). */\nexport type EnumMembers = ReadonlyArray<{\n key: string;\n value: string;\n}>;\n\n/**\n * Schema node without a field name — used for array items and anonymous nesting.\n * Named properties use {@link FieldDefinition} (`fieldName` + `SchemaDefinition`).\n */\nexport type SchemaDefinition =\n | {\n type: \"string\";\n nullable: boolean;\n optional: boolean;\n /** string length */\n min?: number;\n /** string length */\n max?: number;\n /** e.g. ^[a-z0-9_-]+$ */\n regex?: string;\n default?: string;\n }\n | {\n type: \"number\";\n nullable: boolean;\n optional: boolean;\n min?: number;\n max?: number;\n default?: number;\n }\n | {\n type: \"boolean\";\n nullable: boolean;\n optional: boolean;\n default?: boolean;\n }\n | {\n type: \"unknown\";\n nullable: boolean;\n optional: boolean;\n default?: unknown;\n }\n | {\n type: \"enum\";\n nullable: boolean;\n optional: boolean;\n members: EnumMembers;\n /** Must match a `members[].key` */\n defaultKey?: string;\n }\n | {\n type: \"object\";\n nullable: boolean;\n optional: boolean;\n fields: FieldDefinition[];\n default?: Record<string, unknown>;\n }\n | {\n type: \"array\";\n nullable: boolean;\n optional: boolean;\n items: SchemaDefinition;\n /** min/max item count */\n min?: number;\n max?: number;\n default?: unknown;\n };\n\n/**\n * Named field schema. `fieldName` is required for introspection (walk paths, docs, forms).\n * Use `fields: FieldDefinition[]` — not `Record<string, …>` — so the name has a single source of truth.\n */\nexport type FieldDefinition = { fieldName: string } & SchemaDefinition;\n","import type { Target } from \"../core.interface\";\nimport type { FieldDefinition, ServiceLifecycle } from \"./base.interface\";\n\nexport interface Service extends Target {\n name: string;\n /** \"storage-service\" 唯一键 */\n value: string;\n category: CategoryService;\n details: ServiceDetails;\n}\n\nexport enum CategoryService {\n SERVICE = \"service\",\n}\n\nexport interface ServiceDetails {\n manifestVersion: number;\n /** 能力 Api keys */\n apiKeys: string[];\n /** 依赖的服务 Service keys */\n dependencies: string[];\n lifecycle: ServiceLifecycle;\n}\n\nexport interface Api extends Target {\n /** \"core.post.target.0\" 唯一键 领域 + METHOD + content + VERSION */\n value: string;\n category: CategoryApi;\n details: ApiDetails;\n}\n\nexport enum CategoryApi {\n API = \"api\",\n}\n\nexport enum ApiMethod {\n POST = \"POST\",\n GET = \"GET\",\n PUT = \"PUT\",\n DELETE = \"DELETE\",\n}\n\nexport interface ApiDetails {\n method: ApiMethod;\n /** /v0/core/target */\n path: string;\n /** out-of-box url like https://api.example.com/v0/core/target */\n endpoint: string;\n request: {\n query: FieldDefinition[];\n };\n response: {\n \"200\": FieldDefinition[];\n };\n manifestVersion: number;\n lifecycle: ServiceLifecycle;\n /** TODO contentType: e.g. application/json | application/octet-stream */\n /** TODO auth / rate_limit / observability */\n}\n","import { z } from \"zod\";\nimport { createTarget, getPossibleTarget, getTarget, type QueryFilter, validateWithSchema } from \"../core.api\";\nimport { type FieldDefinition, type SchemaDefinition, ServiceLifecycleStatus } from \"./base.interface\";\nimport {\n type Api,\n type ApiDetails,\n ApiMethod,\n CategoryApi,\n CategoryService,\n type Service,\n type ServiceDetails,\n} from \"./service.interface\";\n\nconst targetIdSchema = z.string().trim().min(1);\n\nconst enumMemberSchema = z.object({\n key: z.string().trim().min(1),\n value: z.string(),\n});\n\nconst fieldPresenceSchema = z.object({\n nullable: z.boolean(),\n optional: z.boolean(),\n});\n\nconst schemaDefinitionSchema: z.ZodType<SchemaDefinition> = z.lazy(() =>\n z.discriminatedUnion(\"type\", [\n fieldPresenceSchema.extend({\n type: z.literal(\"string\"),\n min: z.number().optional(),\n max: z.number().optional(),\n regex: z.string().optional(),\n default: z.string().optional(),\n }),\n fieldPresenceSchema.extend({\n type: z.literal(\"number\"),\n min: z.number().optional(),\n max: z.number().optional(),\n default: z.number().optional(),\n }),\n fieldPresenceSchema.extend({\n type: z.literal(\"boolean\"),\n default: z.boolean().optional(),\n }),\n fieldPresenceSchema.extend({\n type: z.literal(\"unknown\"),\n default: z.unknown().optional(),\n }),\n fieldPresenceSchema.extend({\n type: z.literal(\"enum\"),\n members: z.array(enumMemberSchema).min(1),\n defaultKey: z.string().trim().min(1).optional(),\n }),\n fieldPresenceSchema.extend({\n type: z.literal(\"object\"),\n fields: z.array(fieldDefinitionSchema),\n default: z.record(z.unknown()).optional(),\n }),\n fieldPresenceSchema.extend({\n type: z.literal(\"array\"),\n items: schemaDefinitionSchema,\n min: z.number().int().nonnegative().optional(),\n max: z.number().int().nonnegative().optional(),\n default: z.unknown().optional(),\n }),\n ]),\n);\n\nconst fieldDefinitionSchema: z.ZodType<FieldDefinition> = z.intersection(\n z.object({ fieldName: z.string().trim().min(1) }),\n schemaDefinitionSchema,\n);\n\nexport { fieldDefinitionSchema, schemaDefinitionSchema };\n\nexport const serviceLifecycleSchema = z.object({\n status: z.nativeEnum(ServiceLifecycleStatus),\n activeSince: z.string().trim().min(1),\n deprecatedAt: z.string().nullable(),\n sunsetAt: z.string().nullable(),\n});\n\nexport const apiDetailsSchema = z.object({\n method: z.nativeEnum(ApiMethod),\n path: z.string().trim().min(1),\n endpoint: z.string().trim().min(1),\n request: z.object({\n query: z.array(fieldDefinitionSchema),\n }),\n response: z.object({\n \"200\": z.array(fieldDefinitionSchema),\n }),\n manifestVersion: z.number().int().nonnegative(),\n lifecycle: serviceLifecycleSchema,\n});\n\nexport const serviceDetailsSchema = z.object({\n manifestVersion: z.number().int().nonnegative(),\n apiKeys: z.array(z.string().trim().min(1)),\n dependencies: z.array(z.string().trim().min(1)).default([]),\n lifecycle: serviceLifecycleSchema,\n});\n\nexport const postApiSchema = z.object({\n name: z.string().trim().min(1),\n value: z.string().trim().min(1),\n details: apiDetailsSchema,\n tagList: z.array(z.string()).optional().default([]),\n extra: z.string().optional(),\n});\n\nexport type PostApiPayload = z.infer<typeof postApiSchema>;\n\nexport const getApiSchema = z\n .object({\n id: targetIdSchema.optional(),\n value: z.string().trim().min(1).optional(),\n })\n .refine(\n (payload) => {\n const hasId = payload.id != null && payload.id !== \"\";\n const hasValue = payload.value != null && payload.value !== \"\";\n return hasId !== hasValue;\n },\n { message: \"Provide exactly one of id or value\" },\n );\n\nexport type GetApiPayload = z.infer<typeof getApiSchema>;\n\nexport const getServiceSchema = z\n .object({\n id: targetIdSchema.optional(),\n value: z.string().trim().min(1).optional(),\n /** When set, filters `details.lifecycle.status` at query time. */\n lifecycleStatus: z.nativeEnum(ServiceLifecycleStatus).optional(),\n })\n .refine(\n (payload) => {\n const hasId = payload.id != null && payload.id !== \"\";\n const hasValue = payload.value != null && payload.value !== \"\";\n return hasId !== hasValue;\n },\n { message: \"Provide exactly one of id or value\" },\n );\n\nexport type GetServicePayload = z.infer<typeof getServiceSchema>;\n\nexport const postServiceSchema = z.object({\n name: z.string().trim().min(1),\n value: z.string().trim().min(1),\n details: serviceDetailsSchema,\n tagList: z.array(z.string()).optional().default([]),\n extra: z.string().optional(),\n});\n\nexport type PostServicePayload = z.infer<typeof postServiceSchema>;\n\nconst apiCategoryFilter = {\n field: \"category\",\n operator: \"eq\" as const,\n value: CategoryApi.API,\n};\n\nconst serviceCategoryFilter = {\n field: \"category\",\n operator: \"eq\" as const,\n value: CategoryService.SERVICE,\n};\n\nconst SERVICE_LIFECYCLE_STATUS_FIELD = \"details->lifecycle->>status\" as const;\n\nfunction buildServiceLookupFilters(payload: GetServicePayload): QueryFilter[] {\n const filters: QueryFilter[] = [serviceCategoryFilter];\n\n if (payload.id != null && payload.id !== \"\") {\n // id path: caller adds .eq(\"id\", id) separately\n } else {\n filters.push({ field: \"value\", operator: \"eq\", value: payload.value! });\n }\n\n if (payload.lifecycleStatus != null) {\n filters.push({\n field: SERVICE_LIFECYCLE_STATUS_FIELD,\n operator: \"eq\",\n value: payload.lifecycleStatus,\n });\n }\n\n return filters;\n}\n\n/** Register an Api contract row (`category=api`). */\nexport const postApi = validateWithSchema(\n postApiSchema,\n \"postApiSchema\",\n)(async ({ name, value, details, tagList, extra }) => {\n return createTarget<Api, PostApiPayload>({\n payload: { name, value, details, tagList, extra },\n createFn: () => ({\n name,\n value,\n category: CategoryApi.API,\n tagList,\n extra,\n details: details as ApiDetails,\n }),\n });\n});\n\n/** Fetch an Api by id or by {@link Api.value} key (`category=api`). */\nexport const getApi = validateWithSchema(\n getApiSchema,\n \"getApiSchema\",\n)(async (payload) => {\n if (payload.id != null && payload.id !== \"\") {\n const result = await getTarget({\n id: payload.id,\n filterList: [apiCategoryFilter],\n });\n return {\n ...result,\n data: result.data as Api,\n };\n }\n\n const result = await getPossibleTarget({\n filterList: [apiCategoryFilter, { field: \"value\", operator: \"eq\", value: payload.value! }],\n });\n\n if (result.data == null) {\n return {\n ...result,\n data: undefined,\n };\n }\n\n return {\n ...result,\n data: result.data as Api,\n };\n});\n\n/** Fetch a Service by id or by {@link Service.value} key (`category=service`). */\nexport const getService = validateWithSchema(\n getServiceSchema,\n \"getServiceSchema\",\n)(async (payload) => {\n const filterList = buildServiceLookupFilters(payload);\n\n if (payload.id != null && payload.id !== \"\") {\n const result = await getTarget({\n id: payload.id,\n filterList,\n });\n return {\n ...result,\n data: result.data as Service,\n };\n }\n\n const result = await getPossibleTarget({\n filterList,\n });\n\n if (result.data == null) {\n return {\n ...result,\n data: undefined,\n };\n }\n\n return {\n ...result,\n data: result.data as Service,\n };\n});\n\n/** Register a Service catalog row (`category=service`). */\nexport const postService = validateWithSchema(\n postServiceSchema,\n \"postServiceSchema\",\n)(async ({ name, value, details, tagList, extra }) => {\n return createTarget<Service, PostServicePayload>({\n payload: { name, value, details, tagList, extra },\n createFn: () => ({\n name,\n value,\n category: CategoryService.SERVICE,\n tagList,\n extra,\n details: details as ServiceDetails,\n }),\n });\n});\n","import { scanTargetList } from \"../core.api\";\nimport { generateResponse, type SupabaseResponse } from \"../core.interface\";\nimport { createLogger } from \"../shared/log\";\nimport { ServiceLifecycleStatus } from \"./base.interface\";\nimport { getService } from \"./service.api\";\nimport { CategoryService, type Service } from \"./service.interface\";\n\nexport type {\n EnumMembers,\n FieldDefinition,\n SchemaDefinition,\n ServiceLifecycle,\n} from \"./base.interface\";\nexport { ServiceLifecycleStatus } from \"./base.interface\";\nexport type { GetApiPayload, GetServicePayload, PostApiPayload, PostServicePayload } from \"./service.api\";\nexport {\n apiDetailsSchema,\n fieldDefinitionSchema,\n getApi,\n getApiSchema,\n getService,\n getServiceSchema,\n postApi,\n postApiSchema,\n postService,\n postServiceSchema,\n schemaDefinitionSchema,\n serviceDetailsSchema,\n serviceLifecycleSchema,\n} from \"./service.api\";\nexport type { Api, ApiDetails, Service, ServiceDetails } from \"./service.interface\";\nexport { ApiMethod, CategoryApi, CategoryService } from \"./service.interface\";\n\nexport interface DiscoverServiceInput {\n /** {@link Service.value} */\n value: string;\n traceId?: string;\n}\n\nconst DISCOVER_LIFECYCLE_STATUS = ServiceLifecycleStatus.ACTIVE;\nconst SERVICE_LIFECYCLE_STATUS_FIELD = \"details->lifecycle->>status\" as const;\n\nasync function lookupServicePrimary(value: string): Promise<Service | null> {\n const response = await getService({ value, lifecycleStatus: DISCOVER_LIFECYCLE_STATUS });\n return response.data ?? null;\n}\n\nasync function lookupServiceByScan(value: string): Promise<Service | null> {\n const { data } = await scanTargetList<Service>({\n category: CategoryService.SERVICE,\n orderBy: { field: \"value\", ascending: true },\n maxRows: 1,\n filterList: [\n { field: \"value\", operator: \"eq\", value },\n {\n field: SERVICE_LIFECYCLE_STATUS_FIELD,\n operator: \"eq\",\n value: DISCOVER_LIFECYCLE_STATUS,\n },\n ],\n });\n\n return data?.[0] ?? null;\n}\n\nasync function resolveDiscoverFailureReason(value: string): Promise<\"not-found\" | \"not-available\"> {\n const response = await getService({ value });\n if (response.data == null) {\n return \"not-found\";\n }\n return \"not-available\";\n}\n\n/**\n * Discover a single service by {@link Service.value}.\n * Only returns services with `lifecycle.status === ACTIVE` (filtered at query time).\n *\n * Lookup: primary `getService` → fallback `scanTargetList` by value.\n */\nexport async function discoverService(input: DiscoverServiceInput): Promise<SupabaseResponse<Service>> {\n const value = input.value.trim();\n const logger = createLogger({\n module: \"discoverService\",\n traceId: input.traceId,\n labels: { serviceValue: value },\n });\n\n if (value === \"\") {\n const message = \"discoverService: value must not be empty\";\n logger.warn(message, { topic: \"service\", data: { value: input.value } });\n return generateResponse.error(message, undefined, \"SERVICE_VALUE_REQUIRED\") as SupabaseResponse<Service>;\n }\n\n try {\n logger.info(\"开始发现服务\", {\n topic: \"service\",\n data: { value, lifecycleStatus: DISCOVER_LIFECYCLE_STATUS },\n });\n\n let service = await lookupServicePrimary(value);\n let source: \"primary\" | \"scan\" = \"primary\";\n\n if (service == null) {\n logger.warn(\"主路径未命中,尝试 catalog 扫描回退\", {\n topic: \"service\",\n data: { value, step: \"scan-fallback\", lifecycleStatus: DISCOVER_LIFECYCLE_STATUS },\n });\n service = await lookupServiceByScan(value);\n source = \"scan\";\n }\n\n if (service == null) {\n const reason = await resolveDiscoverFailureReason(value);\n if (reason === \"not-available\") {\n const message = `Service ${value} is not available (lifecycle is not ACTIVE)`;\n logger.warn(\"服务已注册但不可用\", {\n topic: \"service\",\n data: { value, step: \"not-available\", lifecycleStatus: DISCOVER_LIFECYCLE_STATUS },\n });\n return generateResponse.error(message, undefined, \"SERVICE_NOT_AVAILABLE\") as SupabaseResponse<Service>;\n }\n\n const message = `Service not found: ${value}`;\n logger.error(\"服务未发现\", {\n topic: \"service\",\n data: { value, step: \"not-found\", tried: [\"primary\", \"scan\"] },\n });\n return generateResponse.error(message, undefined, \"SERVICE_NOT_FOUND\") as SupabaseResponse<Service>;\n }\n\n logger.info(\"服务发现成功\", {\n topic: \"service\",\n data: {\n value,\n source,\n serviceId: service.id,\n lifecycleStatus: service.details.lifecycle.status,\n apiKeyCount: service.details.apiKeys.length,\n dependencyCount: service.details.dependencies.length,\n },\n });\n\n return generateResponse.success(service);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n logger.error(\"服务发现失败\", {\n topic: \"service\",\n data: { value, message },\n });\n\n let service: Service | null = null;\n try {\n service = await lookupServiceByScan(value);\n } catch (fallbackError) {\n const fallbackMessage = fallbackError instanceof Error ? fallbackError.message : String(fallbackError);\n logger.error(\"扫描回退失败\", {\n topic: \"service\",\n data: { value, message: fallbackMessage },\n });\n return generateResponse.error(message, undefined, \"SERVICE_DISCOVER_FAILED\") as SupabaseResponse<Service>;\n }\n\n if (service != null) {\n logger.warn(\"主路径异常后扫描回退成功\", {\n topic: \"service\",\n data: { value, serviceId: service.id, primaryError: message },\n });\n return generateResponse.success(service);\n }\n\n return generateResponse.error(message, undefined, \"SERVICE_DISCOVER_FAILED\") as SupabaseResponse<Service>;\n }\n}\n","export type NetworkErrorKind =\n | \"connect_timeout\"\n | \"tls_disconnect\"\n | \"connection_refused\"\n | \"dns_error\"\n | \"socket_closed\"\n | \"timeout\"\n | \"proxy_error\"\n | \"unknown\";\n\nexport interface ClassifiedNetworkError {\n kind: NetworkErrorKind;\n retryable: boolean;\n code: string;\n detail: string;\n}\n\nconst RETRYABLE_CAUSE_CODES = new Set([\n \"UND_ERR_CONNECT_TIMEOUT\",\n \"UND_ERR_HEADERS_TIMEOUT\",\n \"UND_ERR_BODY_TIMEOUT\",\n \"UND_ERR_SOCKET\",\n \"ECONNRESET\",\n \"ECONNREFUSED\",\n \"ENOTFOUND\",\n \"ETIMEDOUT\",\n \"EPIPE\",\n \"EAI_AGAIN\",\n]);\n\nfunction errorCause(error: unknown): { code?: string; message?: string } | undefined {\n if (error instanceof Error) {\n return error.cause as { code?: string; message?: string } | undefined;\n }\n return undefined;\n}\n\nexport function classifyNetworkError(error: unknown): ClassifiedNetworkError {\n if (!(error instanceof Error)) {\n return { kind: \"unknown\", retryable: false, code: \"\", detail: String(error) };\n }\n\n const cause = errorCause(error);\n const code = cause?.code ?? \"\";\n const causeMessage = cause?.message ?? \"\";\n const message = error.message;\n\n const tlsDisconnect =\n /TLS connection was established/i.test(causeMessage) ||\n /secure TLS connection/i.test(causeMessage) ||\n /socket disconnected before secure TLS/i.test(message) ||\n /socket disconnected before secure TLS/i.test(causeMessage);\n\n if (tlsDisconnect) {\n return {\n kind: \"tls_disconnect\",\n retryable: true,\n code,\n detail: causeMessage || message,\n };\n }\n\n if (code === \"UND_ERR_CONNECT_TIMEOUT\" || error.name === \"TimeoutError\" || error.name === \"AbortError\") {\n return {\n kind: error.name === \"AbortError\" ? \"timeout\" : \"connect_timeout\",\n retryable: true,\n code,\n detail: causeMessage || message,\n };\n }\n\n if (code === \"ECONNREFUSED\") {\n return {\n kind: \"connection_refused\",\n retryable: true,\n code,\n detail: causeMessage || message,\n };\n }\n\n if (code === \"ENOTFOUND\" || code === \"EAI_AGAIN\") {\n return {\n kind: \"dns_error\",\n retryable: code === \"EAI_AGAIN\",\n code,\n detail: causeMessage || message,\n };\n }\n\n if (\n code === \"UND_ERR_SOCKET\" ||\n code === \"ECONNRESET\" ||\n code === \"EPIPE\" ||\n /socket disconnected/i.test(causeMessage) ||\n /other side closed/i.test(causeMessage)\n ) {\n return {\n kind: \"socket_closed\",\n retryable: true,\n code,\n detail: causeMessage || message,\n };\n }\n\n if (RETRYABLE_CAUSE_CODES.has(code)) {\n return {\n kind: \"proxy_error\",\n retryable: true,\n code,\n detail: causeMessage || message,\n };\n }\n\n return {\n kind: \"unknown\",\n retryable: false,\n code,\n detail: causeMessage ? `${message}: ${causeMessage}` : message,\n };\n}\n\nexport interface FormatNetworkErrorOptions {\n /** Extra hint appended (proxy URL, env var name, etc.). */\n hint?: string;\n}\n\nexport function formatNetworkError(error: unknown, label: string, options: FormatNetworkErrorOptions = {}): string {\n const classified = classifyNetworkError(error);\n const hint = options.hint ?? \"\";\n\n switch (classified.kind) {\n case \"connect_timeout\":\n return `${label}: connect timeout${hint}`;\n case \"tls_disconnect\":\n return `${label}: TLS handshake dropped${hint}. Often transient through proxies — retries may succeed.`;\n case \"connection_refused\":\n return `${label}: connection refused — ${classified.detail}${hint}`;\n case \"dns_error\":\n return `${label}: DNS lookup failed (${classified.code}) — ${classified.detail}`;\n case \"socket_closed\":\n return (\n `${label}: connection closed mid-request (${classified.code || \"socket\"}) — ` +\n `${classified.detail}${hint}`\n );\n case \"timeout\":\n return `${label}: request timeout — ${classified.detail}${hint}`;\n case \"proxy_error\":\n return `${label}: network/proxy error (${classified.code}) — ${classified.detail}${hint}`;\n default:\n return `${label}: ${classified.detail}${hint}`;\n }\n}\n","import type { LoggerWithScope } from \"../log/index\";\nimport { classifyNetworkError, formatNetworkError } from \"../utils/network-error\";\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/** Default HTTP statuses that trigger retry (429, 5xx). */\nexport function isRetryableHttpStatus(status: number): boolean {\n return status === 429 || status >= 500;\n}\n\nexport type FetchInitFactory = () => RequestInit;\n\nexport function requestHasBody(init: RequestInit): boolean {\n return init.body != null;\n}\n\nexport interface FetchRetryOptions {\n label: string;\n timeoutMs: number;\n maxAttempts?: number;\n retryBaseMs?: number;\n maxBackoffMs?: number;\n /** undici ProxyAgent or other fetch extension — typed loosely to avoid undici dependency. */\n dispatcher?: unknown;\n isRetryableStatus?: (status: number) => boolean;\n /** When set, retry/success lines are logged via SDK logger. */\n logger?: LoggerWithScope;\n hint?: string;\n}\n\nfunction backoffMs(retryBaseMs: number, attempt: number, response?: Response, maxBackoffMs?: number): number {\n const retryAfter = response?.headers.get(\"Retry-After\");\n if (retryAfter != null) {\n const seconds = Number(retryAfter);\n if (Number.isFinite(seconds) && seconds > 0) {\n const delayMs = seconds * 1000;\n return maxBackoffMs != null ? Math.min(delayMs, maxBackoffMs) : delayMs;\n }\n }\n\n let delayMs = retryBaseMs * 2 ** (attempt - 1);\n if (maxBackoffMs != null) {\n delayMs = Math.min(delayMs, maxBackoffMs);\n }\n return delayMs;\n}\n\nasync function fetchOnce(url: string, init: RequestInit, timeoutMs: number, dispatcher?: unknown): Promise<Response> {\n const options: RequestInit & { dispatcher?: unknown } = {\n ...init,\n signal: AbortSignal.timeout(timeoutMs),\n };\n if (dispatcher != null) {\n options.dispatcher = dispatcher;\n }\n return fetch(url, options);\n}\n\nexport async function fetchWithRetry(\n url: string,\n initOrFactory: RequestInit | FetchInitFactory,\n options: FetchRetryOptions,\n): Promise<Response> {\n const maxAttempts = options.maxAttempts ?? 1;\n const retryBaseMs = options.retryBaseMs ?? 2_000;\n const isRetryableStatus = options.isRetryableStatus ?? isRetryableHttpStatus;\n const buildInit = typeof initOrFactory === \"function\" ? initOrFactory : () => initOrFactory;\n\n if (maxAttempts > 1 && typeof initOrFactory !== \"function\" && requestHasBody(initOrFactory)) {\n throw new Error(`${options.label}: retry requires an init factory when request body may be consumed`);\n }\n\n let lastError: Error | null = null;\n\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n try {\n const response = await fetchOnce(url, buildInit(), options.timeoutMs, options.dispatcher);\n\n if (!response.ok && isRetryableStatus(response.status) && attempt < maxAttempts) {\n const delayMs = backoffMs(retryBaseMs, attempt, response, options.maxBackoffMs);\n if (options.logger != null) {\n options.logger.warn(\"retrying after HTTP error\", {\n topic: \"fetch\",\n data: {\n label: options.label,\n attempt,\n status: response.status,\n delayMs,\n },\n });\n }\n await sleep(delayMs);\n continue;\n }\n\n if (attempt > 1 && options.logger != null) {\n options.logger.info(\"request succeeded after retry\", {\n topic: \"fetch\",\n data: { label: options.label, attempt },\n });\n }\n\n return response;\n } catch (error) {\n const classified = classifyNetworkError(error);\n lastError = new Error(formatNetworkError(error, options.label, { hint: options.hint }));\n\n if (classified.retryable && attempt < maxAttempts) {\n const delayMs = backoffMs(retryBaseMs, attempt, undefined, options.maxBackoffMs);\n if (options.logger != null) {\n options.logger.warn(\"retrying after network error\", {\n topic: \"fetch\",\n data: {\n label: options.label,\n attempt,\n maxAttempts,\n kind: classified.kind,\n code: classified.code,\n delayMs,\n },\n });\n }\n await sleep(delayMs);\n continue;\n }\n throw lastError;\n }\n }\n\n throw lastError ?? new Error(`${options.label}: request failed`);\n}\n\nexport async function fetchBinaryWithRetry(\n url: string,\n init: RequestInit,\n options: FetchRetryOptions,\n): Promise<ArrayBuffer> {\n const response = await fetchWithRetry(url, init, options);\n if (!response.ok) {\n throw new Error(`${options.label}: HTTP ${response.status}`);\n }\n return response.arrayBuffer();\n}\n","export interface SanitizeFileNameOptions {\n /** Max length after sanitization (default 200). */\n maxLength?: number;\n /** When set, used instead of throwing on invalid names. */\n fallback?: string;\n}\n\nfunction fileBaseName(raw: string): string {\n const normalized = raw.replace(/\\\\/g, \"/\");\n const parts = normalized.split(\"/\");\n return parts.at(-1) ?? normalized;\n}\n\n/**\n * Safe display / storage file name from a browser or filesystem path string.\n * Strips directory segments and forbidden characters.\n */\nexport function sanitizeFileName(raw: string, options: SanitizeFileNameOptions = {}): string {\n const maxLength = options.maxLength ?? 200;\n const base = fileBaseName(raw);\n // biome-ignore lint/suspicious/noControlCharactersInRegex: intentionally strip ASCII control chars (0x00–0x1f)\n const cleaned = base.replace(/[\\x00-\\x1f<>:\"/\\\\|?*]+/g, \"_\").trim();\n\n if (cleaned === \"\" || cleaned === \".\" || cleaned === \"..\") {\n if (options.fallback != null) {\n return options.fallback.slice(0, maxLength);\n }\n throw new Error(\"Invalid file name\");\n }\n\n return cleaned.slice(0, maxLength);\n}\n\n/** Parcel.name / value default — 200 char cap. */\nexport function sanitizeParcelFileName(raw: string): string {\n return sanitizeFileName(raw, { maxLength: 200 });\n}\n","/**\n * Normalize unknown catch / rejection values to {@link Error}.\n *\n * `catch` and Promise rejections are typed `unknown` because `throw` can be\n * anything (string, number, plain object). Call sites that need `.message`,\n * re-throw, or `instanceof Error` checks should normalize first.\n */\nexport function toError(value: unknown): Error {\n return value instanceof Error ? value : new Error(String(value));\n}\n\n/** Error message safe for log `context` fields (JSON-serializable). */\nexport function getErrorMessage(value: unknown): string {\n return toError(value).message;\n}\n","/** Log topic for task domain (`topic` field on structured logs). */\nexport const LOG_TOPIC_TASK = \"task\";\n\nexport const CRITICAL_UNKNOWN_TASK_TRACE_ID = \"CRITICAL_UNKNOWN_TASK_TRACE_ID\";\n","import type { Target } from \"../core.interface\";\n\nexport enum CategoryTask {\n TASK = \"task\",\n}\n\nexport enum TaskStatus {\n OPEN = \"OPEN\",\n TODO = \"TODO\",\n DOING = \"DOING\",\n DONE = \"DONE\",\n CLOSED = \"CLOSED\",\n}\n\n/** Named transitions for {@link patchChangeTaskStatus} — verb aligned with state machine edges */\nexport enum TaskStatusAction {\n PUBLISH = \"publish\",\n CLAIM = \"claim\",\n RESET = \"reset\",\n CANCEL = \"cancel\",\n CLOSE = \"close\",\n FINISH = \"finish\",\n}\n\nexport enum ResultCode {\n SUCCESS = 1000,\n\n /** 3xxx 依赖 / 外部 */\n PARAMS_NOT_VALID = 3001,\n REPO_NOT_VALID = 3002,\n\n /** 4xxx — 运行环境 */\n TIMEOUT = 4001,\n CANCELLED = 4002,\n NODE_UNAVAILABLE = 4003,\n\n UNKNOWN_ERROR = 9999,\n}\n\nexport interface Task extends Target {\n /** Readable */\n name: string;\n /** Unique key, as TaskType */\n value: string;\n details: TaskDetails;\n category: CategoryTask;\n}\n\nexport interface TaskDetails {\n manifestVersion: number;\n status: TaskStatus;\n params: unknown;\n /** [0,100] */\n progress: number;\n nodeId: null | string;\n /** Task lifecycle correlation id (written at postTask). */\n traceId?: string;\n result?: {\n cost: number;\n code: ResultCode;\n errorMessage?: string;\n data?: unknown;\n };\n}\n\n// TODO loop condition combination\nexport interface TaskFlow extends Target {}\n","import { z } from \"zod\";\nimport {\n getTargetList,\n isOptimisticLockError,\n OPTIMISTIC_LOCK_ERROR_CODE,\n OPTIMISTIC_LOCK_FAILED_MESSAGE,\n type QueryFilter,\n updateTargetDetails,\n validateWithSchema,\n} from \"../core.api\";\nimport { generateResponse, type SupabaseResponse } from \"../core.interface\";\nimport { createLogger, type LoggerWithScope } from \"../shared/log\";\nimport { getErrorMessage } from \"../shared/utils/error.utils\";\nimport { LOG_TOPIC_TASK } from \"./task.constant\";\nimport { CategoryTask, ResultCode, type Task, type TaskDetails, TaskStatus, TaskStatusAction } from \"./task.interface\";\n\nconst TASK_STATUS_FIELD = \"details->>status\" as const;\nconst TASK_NODE_ID_FIELD = \"details->>nodeId\" as const;\n\n// ─── State machine ───────────────────────────────────────────────────────────\n\n/**\n * Task state machine (field: `details.status`)\n *\n * ```text\n * publish claim (CLAIM / patchClaimTask) finish\n * OPEN ──────► TODO ──────────────────► DOING ─────────────► DONE\n * │ │ reset │ cancel │ close\n * │ │ └──────► TODO │\n * └──────── reset ─┴──────────────────────── reset ────────────┘\n * | │\n * └──────────────────── close ─────────────────────────────────┘\n * ▼\n * CLOSED\n * ```\n *\n * | TaskStatusAction | from | to | lock filters | caller |\n * |------------------|-------------------|--------|--------------------------------|---------------|\n * | PUBLISH | OPEN | TODO | status = OPEN | scheduler |\n * | CLAIM | TODO | DOING | status = TODO | worker |\n * | RESET | TODO | OPEN | status = TODO (no nodeId) | admin |\n * | RESET | DOING, DONE | OPEN | status ∈ {DOING,DONE} + nodeId | worker |\n * | CANCEL | DOING | TODO | DOING + nodeId | worker |\n * | FINISH | DOING | DONE | DOING + nodeId | worker |\n * | CLOSE | OPEN, DONE | CLOSED | status ∈ {OPEN, DONE} | scheduler |\n *\n * RESET: omit `nodeId` to reset from **TODO**; pass `nodeId` to reset from **DOING** or **DONE**.\n *\n * All public APIs validate input with Zod (`validateWithSchema`). Optimistic locks live in\n * `optimisticLockFilterList` on UPDATE — see `.cursor/skills/optimistic-lock-update/SKILL.md`.\n */\n\n// ─── Zod schemas ─────────────────────────────────────────────────────────────\n\nconst taskIdSchema = z.string().trim().min(1);\nconst nodeIdSchema = z.string().trim().min(1);\n/** Optional — orchestrator (e.g. TaskNode loop) passes its trace to correlate logs. */\nconst traceIdSchema = z.string().trim().min(1).optional();\nconst _traceParentIdSchema = z.string().trim().min(1).nullable().optional();\n\nconst patchChangeTaskStatusBaseSchema = {\n id: taskIdSchema,\n extra: z.string().optional(),\n traceId: traceIdSchema,\n};\n\n/** Shared by CLAIM / CANCEL / FINISH — worker-side actions that require nodeId */\nconst patchChangeTaskStatusNodeOwnedSchema = {\n ...patchChangeTaskStatusBaseSchema,\n nodeId: nodeIdSchema,\n};\n\nexport const patchChangeTaskStatusSchema = z.discriminatedUnion(\"action\", [\n z.object({\n ...patchChangeTaskStatusBaseSchema,\n action: z.literal(TaskStatusAction.PUBLISH),\n }),\n z.object({\n ...patchChangeTaskStatusBaseSchema,\n action: z.literal(TaskStatusAction.CLOSE),\n }),\n z.object({\n ...patchChangeTaskStatusNodeOwnedSchema,\n action: z.literal(TaskStatusAction.CLAIM),\n }),\n z.object({\n ...patchChangeTaskStatusBaseSchema,\n action: z.literal(TaskStatusAction.RESET),\n nodeId: nodeIdSchema.optional(),\n }),\n z.object({\n ...patchChangeTaskStatusNodeOwnedSchema,\n action: z.literal(TaskStatusAction.CANCEL),\n }),\n z.object({\n ...patchChangeTaskStatusNodeOwnedSchema,\n action: z.literal(TaskStatusAction.FINISH),\n cost: z.number().min(0),\n }),\n]);\n\nexport type PatchChangeTaskStatusPayload = z.infer<typeof patchChangeTaskStatusSchema>;\n\nexport const patchTaskProgressSchema = z.object({\n id: taskIdSchema,\n progress: z.number().min(0).max(100),\n nodeId: nodeIdSchema,\n traceId: traceIdSchema,\n});\n\nexport type PatchTaskProgressPayload = z.infer<typeof patchTaskProgressSchema>;\n\nexport const patchClaimTaskSchema = z.object({\n nodeId: nodeIdSchema,\n availableTaskList: z.array(z.string()).min(1),\n traceId: traceIdSchema,\n});\n\nexport type PatchClaimTaskPayload = z.infer<typeof patchClaimTaskSchema>;\n\n// ─── Optimistic lock helpers ─────────────────────────────────────────────────\n\nfunction lockOnStatus(...allowed: TaskStatus[]): QueryFilter[] {\n if (allowed.length === 1) {\n return [{ field: TASK_STATUS_FIELD, operator: \"eq\", value: allowed[0] }];\n }\n return [{ field: TASK_STATUS_FIELD, operator: \"in\", value: allowed }];\n}\n\nfunction lockOnOwnerNode(nodeId: string): QueryFilter {\n return { field: TASK_NODE_ID_FIELD, operator: \"eq\", value: nodeId };\n}\n\n/** DOING row owned by `nodeId` — used by FINISH, CANCEL, patchTaskProgress */\nfunction lockOnDoingOwner(nodeId: string): QueryFilter[] {\n return [...lockOnStatus(TaskStatus.DOING), lockOnOwnerNode(nodeId)];\n}\n\n/** TODO without nodeId; DOING/DONE with owner when nodeId is provided */\nfunction lockOnReset(nodeId?: string): QueryFilter[] {\n if (nodeId != null) {\n return [...lockOnStatus(TaskStatus.DOING, TaskStatus.DONE), lockOnOwnerNode(nodeId)];\n }\n return lockOnStatus(TaskStatus.TODO);\n}\n\nfunction clearExecutionState(): Pick<TaskDetails, \"progress\" | \"nodeId\" | \"result\"> {\n return { progress: 0, nodeId: null, result: undefined };\n}\n\n// ─── Internal transitions ────────────────────────────────────────────────────\n\nasync function transitionTask({\n id,\n optimisticLockFilterList,\n updateFn,\n updateExtraFn,\n}: {\n id: string;\n optimisticLockFilterList: QueryFilter[];\n updateFn: (details: TaskDetails) => TaskDetails;\n updateExtraFn?: (existing: TaskDetails) => string;\n}): Promise<Task> {\n return updateTargetDetails<Task, TaskDetails>({\n id,\n optimisticLockFilterList,\n updateFn,\n updateExtraFn,\n });\n}\n\nfunction logTaskTransition(\n logger: LoggerWithScope,\n action: TaskStatusAction | \"patchTaskProgress\" | \"patchClaimTask\",\n task: Task,\n data?: Record<string, unknown>,\n): void {\n logger.debug(\"任務狀態遷移成功\", {\n topic: LOG_TOPIC_TASK,\n data: {\n action,\n taskId: task.id,\n taskValue: task.value,\n status: task.details.status,\n nodeId: task.details.nodeId,\n ...data,\n },\n });\n}\n\n/** TODO → DOING — lock status only (no owner yet); used by CLAIM and {@link patchClaimTask} */\nasync function claimTaskById({\n taskId,\n nodeId,\n updateExtraFn,\n}: {\n taskId: string;\n nodeId: string;\n updateExtraFn?: (existing: TaskDetails) => string;\n}): Promise<Task> {\n return transitionTask({\n id: taskId,\n optimisticLockFilterList: lockOnStatus(TaskStatus.TODO),\n updateFn: (details) => ({\n ...details,\n status: TaskStatus.DOING,\n nodeId,\n }),\n updateExtraFn,\n });\n}\n\n// ─── patchChangeTaskStatus ───────────────────────────────────────────────────\n\nexport const patchChangeTaskStatus = validateWithSchema(\n patchChangeTaskStatusSchema,\n \"patchChangeTaskStatusSchema\",\n)(async (params) => {\n const logger = createLogger({ module: \"patchChangeTaskStatus\", traceId: params.traceId });\n const { id, action, extra } = params;\n const updateExtraFn = extra == null ? undefined : () => extra;\n\n switch (action) {\n case TaskStatusAction.PUBLISH: {\n const data = await transitionTask({\n id,\n optimisticLockFilterList: lockOnStatus(TaskStatus.OPEN),\n updateFn: (details) => ({\n ...details,\n ...clearExecutionState(),\n status: TaskStatus.TODO,\n }),\n updateExtraFn,\n });\n logTaskTransition(logger, action, data);\n return generateResponse.success<Task>(data);\n }\n case TaskStatusAction.CLAIM: {\n const { nodeId } = params;\n const data = await claimTaskById({ taskId: id, nodeId, updateExtraFn });\n logTaskTransition(logger, action, data);\n return generateResponse.success<Task>(data);\n }\n case TaskStatusAction.RESET: {\n const { nodeId } = params;\n const data = await transitionTask({\n id,\n optimisticLockFilterList: lockOnReset(nodeId),\n updateFn: (details) => ({\n ...details,\n ...clearExecutionState(),\n status: TaskStatus.OPEN,\n }),\n updateExtraFn,\n });\n logTaskTransition(logger, action, data, nodeId != null ? undefined : { resetFrom: \"TODO\" });\n return generateResponse.success<Task>(data);\n }\n case TaskStatusAction.CANCEL: {\n const { nodeId } = params;\n const data = await transitionTask({\n id,\n optimisticLockFilterList: lockOnDoingOwner(nodeId),\n updateFn: (details) => ({\n ...details,\n ...clearExecutionState(),\n status: TaskStatus.TODO,\n }),\n updateExtraFn,\n });\n logTaskTransition(logger, action, data);\n return generateResponse.success<Task>(data);\n }\n case TaskStatusAction.CLOSE: {\n const data = await transitionTask({\n id,\n optimisticLockFilterList: lockOnStatus(TaskStatus.OPEN, TaskStatus.DONE),\n updateFn: (details) => ({\n ...details,\n status: TaskStatus.CLOSED,\n }),\n updateExtraFn,\n });\n logTaskTransition(logger, action, data);\n return generateResponse.success<Task>(data);\n }\n case TaskStatusAction.FINISH: {\n const { cost, nodeId } = params;\n const data = await transitionTask({\n id,\n optimisticLockFilterList: lockOnDoingOwner(nodeId),\n updateFn: (details) => ({\n ...details,\n progress: 100,\n status: TaskStatus.DONE,\n nodeId,\n result: {\n cost,\n code: ResultCode.SUCCESS,\n },\n }),\n updateExtraFn,\n });\n logTaskTransition(logger, action, data, { cost });\n return generateResponse.success<Task>(data);\n }\n default: {\n const _exhaustive: never = action;\n const message = `[patchChangeTaskStatus] Unknown action: ${String(_exhaustive)}`;\n logger.error(message, { topic: \"task\", data: { action: String(_exhaustive) } });\n return generateResponse.error(message);\n }\n }\n});\n\n// ─── patchTaskProgress ───────────────────────────────────────────────────────\n\n/** Update progress on a DOING task; only the owning node may write (see `lockOnDoingOwner`). */\nexport const patchTaskProgress = validateWithSchema(\n patchTaskProgressSchema,\n \"patchTaskProgressSchema\",\n)(async ({ id, progress, nodeId, traceId }) => {\n const logger = createLogger({ module: \"patchTaskProgress\", traceId, labels: { nodeId } });\n const data = await transitionTask({\n id,\n optimisticLockFilterList: lockOnDoingOwner(nodeId),\n updateFn: (details) => ({\n ...details,\n progress,\n }),\n });\n logTaskTransition(logger, \"patchTaskProgress\", data, { progress });\n return generateResponse.success<Task>(data);\n});\n\n// ─── patchClaimTask ──────────────────────────────────────────────────────────\n\n/**\n * Discover and claim one TODO task for this node.\n *\n * Flow: oldest TODO in `availableTaskList` (FIFO by `created_at`) → {@link claimTaskById}.\n * Equivalent to `patchChangeTaskStatus({ id, action: CLAIM, nodeId })` when `id` is already known.\n *\n * Returns `data: null` when no TODO task matches.\n * Optimistic lock conflicts return `{ error, code: OPTIMISTIC_LOCK_ERROR_CODE }` (not thrown).\n */\nexport const patchClaimTask = validateWithSchema(\n patchClaimTaskSchema,\n \"patchClaimTaskSchema\",\n)(async ({ nodeId, availableTaskList, traceId }): Promise<SupabaseResponse<Task | null>> => {\n const logger = createLogger({ module: \"patchClaimTask\", traceId, labels: { nodeId } });\n\n let todoTask: Task;\n try {\n const { data: taskCandidates } = await getTargetList<Task>({\n category: CategoryTask.TASK,\n filterList: [\n { field: TASK_STATUS_FIELD, operator: \"eq\", value: TaskStatus.TODO },\n { field: \"value\", operator: \"in\", value: availableTaskList },\n ],\n limit: 1,\n orderBy: { field: \"created_at\", ascending: true },\n });\n const possibleTask = taskCandidates?.[0] ?? null;\n if (possibleTask == null) {\n return generateResponse.success(null);\n }\n todoTask = possibleTask;\n } catch (error) {\n const message = getErrorMessage(error);\n logger.error(\"獲取 TODO 任務失敗\", { topic: LOG_TOPIC_TASK, data: { error: message, availableTaskList } });\n return generateResponse.error(message) as SupabaseResponse<Task | null>;\n }\n\n const taskLogger = createLogger({\n module: \"patchClaimTask\",\n traceId,\n traceParentId: todoTask.details.traceId,\n labels: { nodeId },\n });\n\n try {\n const data = await claimTaskById({ taskId: todoTask.id, nodeId });\n logTaskTransition(taskLogger, \"patchClaimTask\", data);\n return generateResponse.success(data);\n } catch (error) {\n if (isOptimisticLockError(error)) {\n taskLogger.debug(\"認領競爭失敗,任務已被其他節點認領\", {\n topic: LOG_TOPIC_TASK,\n data: { taskId: todoTask.id, taskTypeKey: todoTask.value },\n });\n return generateResponse.error(\n OPTIMISTIC_LOCK_FAILED_MESSAGE,\n undefined,\n OPTIMISTIC_LOCK_ERROR_CODE,\n ) as SupabaseResponse<Task | null>;\n }\n const message = getErrorMessage(error);\n taskLogger.error(\"認領任務失敗\", {\n topic: LOG_TOPIC_TASK,\n data: { error: message, taskId: todoTask.id, taskTypeKey: todoTask.value },\n });\n return generateResponse.error(message) as SupabaseResponse<Task | null>;\n }\n});\n","import { z } from \"zod\";\nimport { createTarget, validateWithSchema } from \"../core.api\";\nimport type { SupabaseResponse } from \"../core.interface\";\nimport { createLogger, type LoggerWithScope, logManager } from \"../shared/log\";\nimport { CategoryTask, type Task, TaskStatus } from \"./task.interface\";\n\nconst traceIdSchema = z.string().trim().min(1).optional();\nconst traceParentIdSchema = z.string().trim().min(1).nullable().optional();\n\n/** Initial status for a new task — OPEN (draft) or TODO (claimable by workers). */\nconst postTaskInitialStatusSchema = z\n .union([z.literal(TaskStatus.OPEN), z.literal(TaskStatus.TODO)])\n .optional()\n .default(TaskStatus.TODO);\n\nexport const postTaskSchema = z.object({\n name: z.string().trim().min(1),\n /** Task type key — matches `task.value`, {@link patchClaimTask}, {@link Repo.value}, and local Repo registry. */\n value: z.string().trim().min(1),\n params: z.unknown(),\n taskStatus: postTaskInitialStatusSchema,\n tagList: z.array(z.string()).optional().default([]),\n extra: z.string().optional(),\n traceId: traceIdSchema,\n traceParentId: traceParentIdSchema,\n});\n\nexport type PostTaskPayload = z.infer<typeof postTaskSchema>;\n\nexport type CreateTaskRowInput = PostTaskPayload & {\n taskTraceId: string;\n};\n\n/** Shared DB insert for {@link postTask} and {@link postTaskWithValidation}. */\nexport async function createTaskRow(\n { name, value, params, taskStatus, tagList, extra, taskTraceId, traceParentId }: CreateTaskRowInput,\n logger: LoggerWithScope,\n): Promise<SupabaseResponse<Task>> {\n const result = await createTarget<Task, PostTaskPayload>({\n payload: {\n name,\n value,\n params,\n taskStatus,\n tagList,\n extra,\n traceId: taskTraceId,\n traceParentId,\n },\n createFn: () => ({\n name,\n value,\n category: CategoryTask.TASK,\n tagList,\n extra,\n details: {\n manifestVersion: 0,\n status: taskStatus,\n params,\n progress: 0,\n nodeId: null,\n traceId: taskTraceId,\n },\n }),\n });\n\n logger.info(\"任務已創建\", {\n topic: \"task\",\n data: {\n taskId: result.data?.id,\n taskTypeKey: value,\n status: taskStatus,\n traceId: taskTraceId,\n },\n });\n\n return result;\n}\n\n/**\n * Create a task row (scheduler / admin). **Browser and Node** — no Repo or params validation.\n * Execution-time checks live in {@link TaskManager.prepareTask}.\n */\nexport const postTask = validateWithSchema(\n postTaskSchema,\n \"postTaskSchema\",\n)(async ({ name, value, params, taskStatus, tagList, extra, traceId, traceParentId }) => {\n const taskTraceId = traceId?.trim() || logManager.generateTraceId();\n const logger = createLogger({\n module: \"postTask\",\n traceId: taskTraceId,\n traceParentId: traceParentId ?? null,\n });\n\n return createTaskRow(\n { name, value, params, taskStatus, tagList, extra, traceId, traceParentId, taskTraceId },\n logger,\n );\n});\n","import type { Task, TaskStatus } from \"./task.interface\";\n\nexport type TaskStatusCount = Partial<Record<TaskStatus, number>>;\n\n/** Count tasks of `taskType` grouped by each requested status. */\nexport function countTasksByType(tasks: Task[], taskType: string, statuses: TaskStatus[]): TaskStatusCount {\n const filtered = tasks.filter((task) => task.value === taskType);\n const counts: TaskStatusCount = {};\n for (const status of statuses) {\n counts[status] = filtered.filter((task) => task.details.status === status).length;\n }\n return counts;\n}\n\n/** Total tasks of `taskType` whose status is in `statuses`. */\nexport function summarizeTaskQueue(tasks: Task[], taskType: string, statuses: TaskStatus[]): number {\n return tasks.filter((task) => task.value === taskType && statuses.includes(task.details.status)).length;\n}\n","import type { Target } from \"../core.interface\";\nimport type { Link } from \"../link/link.interface\";\n\nexport enum CategoryWord {\n WORD = \"word\",\n}\n\nexport interface Word extends Target {\n /** word itself */\n name: string;\n /** word itself */\n value: string;\n details: WordDetails;\n category: CategoryWord;\n}\n\nexport interface WordDetails {\n manifestVersion: number;\n extensions: string[];\n scope: string;\n reviewList: Array<string | Link>;\n}\n"],"names":["nodeIdSchema","traceIdSchema","getCrypto","SERVICE_LIFECYCLE_STATUS_FIELD"],"mappings":"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"}