target-supabase-sdk 0.2.11 → 0.2.12

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 (36) hide show
  1. package/dist/browser.d.ts +1 -2
  2. package/dist/browser.d.ts.map +1 -1
  3. package/dist/browser.js +2 -2
  4. package/dist/chunks/{enable-log-persist-Cu3SGxK7.js → enable-log-persist-Dl55_mv2.js} +2 -2
  5. package/dist/chunks/{enable-log-persist-Cu3SGxK7.js.map → enable-log-persist-Dl55_mv2.js.map} +1 -1
  6. package/dist/chunks/{list.api-DSTOHzOC.js → list.api-BzbTJBsM.js} +35 -2
  7. package/dist/chunks/list.api-BzbTJBsM.js.map +1 -0
  8. package/dist/chunks/{task-queue-BHvNgb-X.js → task-queue-H4mpSW8R.js} +4 -16
  9. package/dist/chunks/task-queue-H4mpSW8R.js.map +1 -0
  10. package/dist/node/preload/run-service-preload.d.ts +1 -0
  11. package/dist/node/preload/run-service-preload.d.ts.map +1 -1
  12. package/dist/node/preload/service-preload.interface.d.ts +5 -0
  13. package/dist/node/preload/service-preload.interface.d.ts.map +1 -1
  14. package/dist/node.js +6 -6
  15. package/dist/preload.js +14 -4
  16. package/dist/preload.js.map +1 -1
  17. package/dist/resource/resource.interface.d.ts +20 -0
  18. package/dist/resource/resource.interface.d.ts.map +1 -0
  19. package/dist/service/config.api.d.ts.map +1 -1
  20. package/dist/shared/log/index.d.ts +2 -0
  21. package/dist/shared/log/index.d.ts.map +1 -1
  22. package/dist/shared/log/log-min-level.d.ts +15 -0
  23. package/dist/shared/log/log-min-level.d.ts.map +1 -0
  24. package/package.json +1 -1
  25. package/src/browser.ts +3 -1
  26. package/src/node/preload/run-service-preload.ts +14 -0
  27. package/src/node/preload/service-preload.interface.ts +6 -0
  28. package/src/resource/resource.interface.ts +37 -0
  29. package/src/service/config.api.ts +1 -0
  30. package/src/shared/log/index.ts +7 -0
  31. package/src/shared/log/log-min-level.ts +46 -0
  32. package/dist/chunks/list.api-DSTOHzOC.js.map +0 -1
  33. package/dist/chunks/task-queue-BHvNgb-X.js.map +0 -1
  34. package/dist/idea/idea.interface.d.ts +0 -25
  35. package/dist/idea/idea.interface.d.ts.map +0 -1
  36. package/src/idea/idea.interface.ts +0 -28
@@ -1 +0,0 @@
1
- {"version":3,"file":"task-queue-BHvNgb-X.js","sources":["../../src/shared/log/log-batch.ts","../../src/extraction/extraction.interface.ts","../../src/extraction/extraction.api.ts","../../src/idea/idea.interface.ts","../../src/link/link.api.ts","../../src/link/link.interface.ts","../../src/link/link.build.ts","../../src/list/list.build.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/config.interface.ts","../../src/service/service.interface.ts","../../src/service/config.api.ts","../../src/service/service.api.ts","../../src/service/registry.service.ts","../../src/service/registry-lifecycle.ts","../../src/service/service-bootstrap.ts","../../src/shared/utils/network-error.ts","../../src/shared/http/fetch-retry.ts","../../src/shared/utils/get-value-at-path.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-post-retry.api.ts","../../src/task/task-queue.ts"],"sourcesContent":["/**\n * Read side of the log-persist pipeline: decode persisted `LogBatch` Lists into\n * structured batches and flat entries. Pure and defensive — malformed rows are\n * skipped rather than thrown. Mirrors the write side in `log-persist-flush.ts`.\n */\n\nimport type { List } from \"../../list/list.interface\";\nimport type { LogEntry } from \"./log-manager\";\nimport { LOG_PERSIST_LOADER_KEY, type LogBatchMeta, type LogPersistLane } from \"./log-persist.interface\";\n\nconst LANES: ReadonlySet<string> = new Set<LogPersistLane>([\"fast\", \"medium\", \"slow\"]);\n\n/** A decoded log batch: origin metadata plus its raw entries. */\nexport interface DecodedLogBatch {\n /** Source `List` row id. */\n listId: string;\n /** `List.created_at` (ISO string). */\n createdAt: string;\n meta: LogBatchMeta;\n entries: LogEntry[];\n}\n\n/** A single {@link LogEntry} enriched with its batch-level origin fields. */\nexport interface FlatLogEntry extends LogEntry {\n service: string;\n process: string;\n lane: LogPersistLane;\n pid: number;\n /** Idempotency key of the source batch. */\n batchId: string;\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n return typeof value === \"object\" && value !== null ? (value as Record<string, unknown>) : null;\n}\n\nfunction asFiniteNumber(value: unknown): number | null {\n return typeof value === \"number\" && Number.isFinite(value) ? value : null;\n}\n\nfunction asString(value: unknown): string | null {\n return typeof value === \"string\" ? value : null;\n}\n\n/** Parse `ListDetails.meta` (object or legacy JSON string) into typed batch meta, or null. */\nexport function parseLogBatchMeta(rawMeta: unknown): LogBatchMeta | null {\n let source: Record<string, unknown> | null;\n if (typeof rawMeta === \"string\") {\n try {\n source = asRecord(JSON.parse(rawMeta));\n } catch {\n return null;\n }\n } else {\n source = asRecord(rawMeta);\n }\n if (source == null) {\n return null;\n }\n\n const service = asString(source.service);\n const processName = asString(source.process);\n const laneRaw = asString(source.lane);\n const idempotencyKey = asString(source.idempotencyKey);\n if (service == null || processName == null || laneRaw == null || !LANES.has(laneRaw) || idempotencyKey == null) {\n return null;\n }\n\n return {\n service,\n process: processName,\n lane: laneRaw as LogPersistLane,\n pid: asFiniteNumber(source.pid) ?? 0,\n count: asFiniteNumber(source.count) ?? 0,\n from: asFiniteNumber(source.from),\n to: asFiniteNumber(source.to),\n flushedAt: asFiniteNumber(source.flushedAt) ?? 0,\n idempotencyKey,\n };\n}\n\n/** Structural guard for a persisted {@link LogEntry}. */\nexport function isLogEntry(value: unknown): value is LogEntry {\n const record = asRecord(value);\n return (\n record != null &&\n typeof record.timestamp === \"number\" &&\n typeof record.level === \"string\" &&\n typeof record.message === \"string\" &&\n typeof record.topic === \"string\" &&\n typeof record.module === \"string\" &&\n typeof record.traceId === \"string\"\n );\n}\n\n/** Is this List a persisted log batch (by loaderKey)? */\nexport function isLogBatchList(list: List): boolean {\n return list.details?.loaderKey === LOG_PERSIST_LOADER_KEY;\n}\n\n/**\n * Decode a `List` row into a {@link DecodedLogBatch}. Returns null when the row\n * is not a log batch or the meta/items are malformed.\n */\nexport function decodeLogBatch(list: List): DecodedLogBatch | null {\n if (!isLogBatchList(list)) {\n return null;\n }\n const meta = parseLogBatchMeta(list.details?.meta);\n if (meta == null) {\n return null;\n }\n\n const items = Array.isArray(list.details?.items) ? list.details.items : [];\n const entries = items.filter(isLogEntry);\n\n return {\n listId: list.id,\n createdAt: list.created_at,\n meta,\n entries,\n };\n}\n\n/** Decode many List rows, dropping any that are not valid log batches. */\nexport function decodeLogBatchList(lists: readonly List[]): DecodedLogBatch[] {\n const decoded: DecodedLogBatch[] = [];\n for (const list of lists) {\n const batch = decodeLogBatch(list);\n if (batch != null) {\n decoded.push(batch);\n }\n }\n return decoded;\n}\n\n/** Flatten one batch into per-entry rows carrying the batch origin fields. */\nexport function flattenLogBatch(batch: DecodedLogBatch): FlatLogEntry[] {\n return batch.entries.map((entry) => ({\n ...entry,\n service: batch.meta.service,\n process: batch.meta.process,\n lane: batch.meta.lane,\n pid: batch.meta.pid,\n batchId: batch.meta.idempotencyKey,\n }));\n}\n\n/** Flatten many batches into a single flat entry list. */\nexport function flattenLogBatches(batches: readonly DecodedLogBatch[]): FlatLogEntry[] {\n const flat: FlatLogEntry[] = [];\n for (const batch of batches) {\n flat.push(...flattenLogBatch(batch));\n }\n return flat;\n}\n","import type { Target } from \"../core.interface\";\n\n/**\n * Interpretation layer for a source Target: pipeline output (systems, models, algorithms)\n * materialized as structured data. Not a process (see Task) or raw bytes (see Parcel).\n *\n * @see `.cursor/skills/extraction/SKILL.md`\n */\nexport interface Extraction extends Target {\n /** Human-readable label. */\n name: string;\n /**\n * Source Target id — the single input this row interprets (any category).\n * Immutable after create. Indexed for lookup: all Extractions where `value = sourceId`.\n * Not a dedup hash or pipeline run id.\n */\n value: string;\n category: CategoryExtraction;\n details: ExtractionDetails;\n}\n\nexport enum CategoryExtraction {\n EXTRACTION = \"extraction\",\n}\n\nexport interface ExtractionDetails {\n manifestVersion: 0;\n /**\n * Extractor identifier. Together with {@link Extraction.value} (source id) forms the\n * logical unique key: one Extraction row per `(sourceTargetId, loaderKey)`.\n * Determines how to parse and render {@link objects} (Extractor-owned schema).\n */\n loaderKey: string;\n /**\n * Extractor-owned metadata for this interpretation (e.g. revision, updatedAt, pipeline).\n * Updated alongside {@link objects}; kept `unknown` at SDK boundary — see Extractor module.\n */\n meta: unknown;\n /**\n * Latest mutable analysis results for this source + Extractor — not an immutable snapshot.\n * Shape is defined by the Extractor for {@link loaderKey}; SDK keeps `unknown[]` at core.\n * Large payloads should reference Parcel (or similar) rather than inline in this array.\n */\n objects: Array<unknown>;\n}\n","import { z } from \"zod\";\nimport {\n createTarget,\n getPossibleTarget,\n getTarget,\n isCreateTargetAlreadyExistsError,\n type QueryFilter,\n scanTargetList,\n updateTargetDetails,\n validateWithSchema,\n} from \"../core.api\";\nimport type { SupabaseResponse } from \"../core.interface\";\nimport { generateResponse } from \"../core.interface\";\nimport { createLogger } from \"../shared/log\";\nimport { CategoryExtraction, type Extraction, type ExtractionDetails } from \"./extraction.interface\";\n\nconst targetIdSchema = z.string().trim().min(1);\nconst loaderKeySchema = z.string().trim().min(1);\n\nexport const postExtractionSchema = z.object({\n name: z.string().trim().min(1),\n /** Source Target id — for log analysis this is the producing Task id. */\n sourceId: targetIdSchema,\n loaderKey: loaderKeySchema,\n meta: z.unknown().optional(),\n objects: z.array(z.unknown()).min(1),\n tagList: z.array(z.string()).optional().default([]),\n extra: z.string().optional(),\n});\n\nexport type PostExtractionPayload = z.infer<typeof postExtractionSchema>;\n\nexport const getExtractionSchema = z\n .object({\n id: targetIdSchema.optional(),\n sourceId: targetIdSchema.optional(),\n loaderKey: loaderKeySchema.optional(),\n })\n .refine(\n (payload) => {\n const hasId = payload.id != null && payload.id !== \"\";\n const hasSource = payload.sourceId != null && payload.sourceId !== \"\";\n if (hasId) {\n return !hasSource;\n }\n return hasSource && payload.loaderKey != null && payload.loaderKey !== \"\";\n },\n { message: \"Provide id, or both sourceId and loaderKey\" },\n );\n\nexport type GetExtractionPayload = z.infer<typeof getExtractionSchema>;\n\nexport const scanExtractionListSchema = z.object({\n loaderKey: loaderKeySchema.optional(),\n sourceId: targetIdSchema.optional(),\n maxRows: z.number().int().min(1).max(500).optional(),\n ascending: z.boolean().optional(),\n});\n\nexport type ScanExtractionListPayload = z.infer<typeof scanExtractionListSchema>;\n\nexport const patchExtractionObjectsSchema = z.object({\n id: targetIdSchema,\n objects: z.array(z.unknown()).min(1),\n meta: z.unknown().optional(),\n expectedRevision: z.number().int().min(0).optional(),\n});\n\nexport type PatchExtractionObjectsPayload = z.infer<typeof patchExtractionObjectsSchema>;\n\nconst extractionCategoryFilter: QueryFilter = {\n field: \"category\",\n operator: \"eq\",\n value: CategoryExtraction.EXTRACTION,\n};\n\nfunction extractionRedundancyFilters(sourceId: string, loaderKey: string): QueryFilter[] {\n return [\n extractionCategoryFilter,\n { field: \"value\", operator: \"eq\", value: sourceId },\n { field: \"details->>loaderKey\", operator: \"eq\", value: loaderKey },\n ];\n}\n\nfunction normalizeExtractionMeta(meta: unknown, patch?: unknown): Record<string, unknown> {\n const base =\n meta != null && typeof meta === \"object\" && !Array.isArray(meta)\n ? { ...(meta as Record<string, unknown>) }\n : {};\n if (patch != null && typeof patch === \"object\" && !Array.isArray(patch)) {\n Object.assign(base, patch as Record<string, unknown>);\n }\n const revision = typeof base.revision === \"number\" && Number.isInteger(base.revision) ? base.revision : 0;\n base.revision = revision;\n base.updatedAt = new Date().toISOString();\n return base;\n}\n\n/** Create an Extraction row for `(sourceId, loaderKey)`. Idempotent on redundancy key. */\nexport const postExtraction = validateWithSchema(\n postExtractionSchema,\n \"postExtractionSchema\",\n)(async (payload): Promise<SupabaseResponse<Extraction>> => {\n const logger = createLogger({ module: \"postExtraction\" });\n const meta = normalizeExtractionMeta(payload.meta, { revision: 0 });\n\n try {\n return await createTarget<Extraction, PostExtractionPayload>({\n payload,\n checkRedundancyFilterList: extractionRedundancyFilters(payload.sourceId, payload.loaderKey),\n createFn: () => ({\n name: payload.name,\n value: payload.sourceId,\n category: CategoryExtraction.EXTRACTION,\n tagList: payload.tagList,\n extra: payload.extra,\n details: {\n manifestVersion: 0,\n loaderKey: payload.loaderKey,\n meta,\n objects: payload.objects,\n },\n }),\n });\n } catch (error) {\n if (isCreateTargetAlreadyExistsError(error)) {\n logger.warn(\"Extraction already exists for source + loaderKey\", {\n topic: \"extraction\",\n data: { sourceId: payload.sourceId, loaderKey: payload.loaderKey },\n });\n throw error;\n }\n throw error;\n }\n});\n\n/** Fetch one Extraction by row id, or by `(sourceId, loaderKey)`. */\nexport const getExtraction = validateWithSchema(\n getExtractionSchema,\n \"getExtractionSchema\",\n)(async (payload): Promise<SupabaseResponse<Extraction>> => {\n if (payload.id != null && payload.id !== \"\") {\n const result = await getTarget({\n id: payload.id,\n filterList: [extractionCategoryFilter],\n });\n return {\n ...result,\n data: result.data as Extraction | undefined,\n };\n }\n\n const result = await getPossibleTarget({\n filterList: extractionRedundancyFilters(payload.sourceId!, payload.loaderKey!),\n });\n\n if (result.data == null) {\n return generateResponse.error(\"Extraction not found\", undefined, \"NOT_FOUND\") as SupabaseResponse<Extraction>;\n }\n\n return {\n ...result,\n data: result.data as Extraction,\n };\n});\n\n/** Scan Extraction rows (newest first by default). */\nexport const scanExtractionList = validateWithSchema(\n scanExtractionListSchema,\n \"scanExtractionListSchema\",\n)(async (payload) => {\n const filterList: QueryFilter[] = [extractionCategoryFilter];\n if (payload.loaderKey != null) {\n filterList.push({ field: \"details->>loaderKey\", operator: \"eq\", value: payload.loaderKey });\n }\n if (payload.sourceId != null) {\n filterList.push({ field: \"value\", operator: \"eq\", value: payload.sourceId });\n }\n\n return scanTargetList<Extraction>({\n category: CategoryExtraction.EXTRACTION,\n filterList,\n maxRows: payload.maxRows ?? 100,\n orderBy: { field: \"created_at\", ascending: payload.ascending ?? false },\n });\n});\n\n/** Replace {@link ExtractionDetails.objects} and bump `meta.revision`. */\nexport const patchExtractionObjects = validateWithSchema(\n patchExtractionObjectsSchema,\n \"patchExtractionObjectsSchema\",\n)(async (payload): Promise<SupabaseResponse<Extraction>> => {\n const optimisticLockFilterList: QueryFilter[] = [];\n if (payload.expectedRevision != null) {\n optimisticLockFilterList.push({\n field: \"details->meta->>revision\",\n operator: \"eq\",\n value: String(payload.expectedRevision),\n });\n }\n\n try {\n const data = await updateTargetDetails<Extraction, ExtractionDetails>({\n id: payload.id,\n optimisticLockFilterList,\n updateFn: (current) => {\n const currentMeta =\n current.meta != null && typeof current.meta === \"object\" && !Array.isArray(current.meta)\n ? (current.meta as Record<string, unknown>)\n : {};\n const revision =\n typeof currentMeta.revision === \"number\" && Number.isInteger(currentMeta.revision)\n ? currentMeta.revision + 1\n : 1;\n return {\n ...current,\n meta: normalizeExtractionMeta(current.meta, {\n ...(payload.meta != null && typeof payload.meta === \"object\" && !Array.isArray(payload.meta)\n ? payload.meta\n : {}),\n revision,\n }),\n objects: payload.objects,\n };\n },\n });\n return generateResponse.success(data as Extraction);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return generateResponse.error(message, undefined, \"PATCH_FAILED\") as SupabaseResponse<Extraction>;\n }\n});\n","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 { z } from \"zod\";\nimport type { TargetDraft } from \"../core.interface\";\nimport { CategoryLink, type Link } from \"./link.interface\";\n\nexport const LINK_MANIFEST_VERSION = 0;\n\n/**\n * Convenience input for {@link buildLinkTargetDraft} — must not include `category`.\n * Also accepted in {@link buildListTargetDraft} `items` as syntactic sugar (see `list.build.ts`).\n */\nexport interface LinkTargetDraftBuildInput<O = unknown> {\n name: string;\n value: string;\n description: string;\n preview?: string;\n loaderKey: string;\n tagList?: string[];\n original: O;\n}\n\n/** Runtime shape check for {@link LinkTargetDraftBuildInput} — `.strict()` rejects `category` and other extra keys. */\nexport const linkTargetDraftBuildInputSchema = z\n .object({\n name: z.string(),\n value: z.string(),\n description: z.string(),\n preview: z.string().optional(),\n loaderKey: z.string(),\n tagList: z.array(z.string()).optional(),\n original: z.unknown(),\n })\n .strict();\n\nexport function buildLinkTargetDraft<O = unknown>(input: LinkTargetDraftBuildInput<O>): TargetDraft<Link> {\n return {\n name: input.name,\n value: input.value,\n category: CategoryLink.LINK,\n tagList: input.tagList ?? [],\n details: {\n manifestVersion: LINK_MANIFEST_VERSION,\n description: input.description,\n preview: input.preview ?? \"\",\n loaderKey: input.loaderKey,\n original: input.original,\n },\n };\n}\n","import type { TargetDraft } from \"../core.interface\";\nimport {\n buildLinkTargetDraft,\n type LinkTargetDraftBuildInput,\n linkTargetDraftBuildInputSchema,\n} from \"../link/link.build\";\nimport { CategoryList, type List, type ListDetails } from \"./list.interface\";\n\nexport const LIST_MANIFEST_VERSION = 0;\n\n/**\n * Input for {@link buildListTargetDraft}.\n *\n * `items`: most lists store Link rows. {@link LinkTargetDraftBuildInput} is syntactic\n * sugar — expanded via `buildLinkTargetDraft`. Any other shape is stored as-is.\n */\nexport type BuildListTargetDraftInput<O = unknown, TCustom = unknown> = {\n loaderKey: string;\n name: string;\n value: string;\n meta?: unknown;\n preview?: string;\n tagList?: string[];\n items: Array<LinkTargetDraftBuildInput<O> | TCustom>;\n};\n\nfunction isLinkTargetDraftBuildInput(item: unknown): item is LinkTargetDraftBuildInput {\n return linkTargetDraftBuildInputSchema.safeParse(item).success;\n}\n\nexport function buildListTargetDraft<O = unknown, TCustom = unknown>(\n input: BuildListTargetDraftInput<O, TCustom>,\n): TargetDraft<List> {\n const items = input.items.map((item) => (isLinkTargetDraftBuildInput(item) ? buildLinkTargetDraft(item) : item));\n\n const details: ListDetails = {\n manifestVersion: LIST_MANIFEST_VERSION,\n meta: input.meta ?? \"\",\n preview: input.preview ?? \"\",\n loaderKey: input.loaderKey,\n items,\n };\n\n return {\n name: input.name,\n value: input.value,\n category: CategoryList.LIST,\n tagList: input.tagList ?? [],\n details,\n };\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\";\n\nexport interface Config extends Target {\n /** Human readable name */\n name: string;\n /** Unique key, like TARGET_SYSTEM_REGISTRY_KEY */\n value: string;\n category: CategoryConfig;\n details: ConfigDetails;\n}\n\nexport enum CategoryConfig {\n CONFIG = \"config\",\n}\n\n/** Globally unique Config key for the declarative system service registry. */\nexport const TARGET_SYSTEM_REGISTRY_KEY = \"target-system-registry\";\n\nexport interface ConfigDetails {\n manifestVersion: number;\n /** How to resolve the Config */\n loaderKey: string;\n meta: unknown;\n objects: Array<unknown>;\n}\n","import type { Target } from \"../core.interface\";\nimport type { NodeStatus } from \"../node/node.interface\";\nimport type { FieldDefinition, ServiceLifecycle } from \"./base.interface\";\n\nexport interface Service extends Target {\n name: string;\n /**\n * Logical service key (e.g. `watch-service`). **Not unique** — each `postService` creates\n * a new instance row. Which instance is **available** is determined by registry slots\n * (`getTargetSystemRegistry` / `resolveActiveRegistryServiceId`), not by `getService({ value })`.\n */\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 /** Present on runtime instances; omitted on catalog-only rows until guard starts. */\n runtime?: ServiceRuntime;\n}\n\n/** Per-node snapshot under a running Service — maintained by the service guard. */\nexport interface ServiceNodeSnapshot {\n nodeId: string;\n status: NodeStatus;\n lastHeartBeat: number;\n}\n\n/**\n * Runtime observability for a registered Service instance.\n * Heartbeat and node rollups are written by the service guard, not the system registry Config.\n */\nexport interface ServiceRuntime {\n lastHeartBeat: number;\n nodes: ServiceNodeSnapshot[];\n}\n\nexport enum ServiceSlotStatus {\n EMPTY = \"EMPTY\",\n ACTIVE = \"ACTIVE\",\n}\n\nexport interface ServiceSlot {\n serviceValue: string;\n /** Bound {@link Service.id} when {@link ServiceSlotStatus.ACTIVE}; null when EMPTY. */\n serviceId: string | null;\n status: ServiceSlotStatus;\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 {\n createTarget,\n getPossibleTarget,\n getTarget,\n isOptimisticLockError,\n type QueryFilter,\n updateTargetDetails,\n validateWithSchema,\n} from \"../core.api\";\nimport { generateResponse } from \"../core.interface\";\nimport { CategoryConfig, type Config, type ConfigDetails, TARGET_SYSTEM_REGISTRY_KEY } from \"./config.interface\";\nimport { type ServiceSlot, ServiceSlotStatus } from \"./service.interface\";\n\nconst targetIdSchema = z.string().trim().min(1);\n\nexport const getConfigSchema = 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 GetConfigPayload = z.infer<typeof getConfigSchema>;\n\n/** One declarative EMPTY slot entry for seeding the system registry. */\nexport const systemRegistrySeedSlotSchema = z.object({\n serviceValue: z.string().trim().min(1),\n});\n\nexport type SystemRegistrySeedSlot = z.infer<typeof systemRegistrySeedSlotSchema>;\n\nexport const postSystemRegistryConfigSchema = z.object({\n /** When omitted, {@link DEFAULT_SYSTEM_REGISTRY_SEED_SLOTS} is used. */\n slots: z.array(systemRegistrySeedSlotSchema).min(1).optional(),\n tagList: z.array(z.string()).optional().default([]),\n});\n\nexport type PostSystemRegistryConfigPayload = z.infer<typeof postSystemRegistryConfigSchema>;\n\n/** Same payload shape as {@link postSystemRegistryConfig} — replaces slots with fresh EMPTY rows. */\nexport const resetSystemRegistryConfigSchema = postSystemRegistryConfigSchema;\n\nexport type ResetSystemRegistryConfigPayload = PostSystemRegistryConfigPayload;\n\nconst DEFAULT_RESET_RETRY_ATTEMPTS = 5;\nconst RESET_RETRY_DELAY_MS = 50;\n\n/** Default one EMPTY slot per known L3 service (override via payload or seed file). */\nexport const DEFAULT_SYSTEM_REGISTRY_SEED_SLOTS: readonly SystemRegistrySeedSlot[] = [\n { serviceValue: \"log-service\" },\n { serviceValue: \"watch-service\" },\n { serviceValue: \"download-service\" },\n { serviceValue: \"storage-service\" },\n { serviceValue: \"gc-service\" },\n { serviceValue: \"upload-service\" },\n] as const;\n\nconst configCategoryFilter: QueryFilter = {\n field: \"category\",\n operator: \"eq\",\n value: CategoryConfig.CONFIG,\n};\n\nfunction buildConfigLookupFilters(payload: GetConfigPayload): QueryFilter[] {\n const filters: QueryFilter[] = [configCategoryFilter];\n\n if (payload.id == null || payload.id === \"\") {\n filters.push({ field: \"value\", operator: \"eq\", value: payload.value! });\n }\n\n return filters;\n}\n\n/** Build EMPTY {@link ServiceSlot} rows from seed entries (one slot per array item). */\nexport function buildEmptyServiceSlots(seedSlots: readonly SystemRegistrySeedSlot[]): ServiceSlot[] {\n return seedSlots.map(({ serviceValue }) => ({\n serviceValue,\n serviceId: null,\n status: ServiceSlotStatus.EMPTY,\n }));\n}\n\nfunction parseRegistryRevision(rawMeta: unknown): number {\n const source = typeof rawMeta === \"object\" && rawMeta !== null ? (rawMeta as Record<string, unknown>) : null;\n const revision = source?.revision;\n return typeof revision === \"number\" && Number.isFinite(revision) ? revision : 0;\n}\n\nfunction lockOnRegistryRevision(revision: number): QueryFilter[] {\n return [{ field: \"details->meta->>revision\", operator: \"eq\", value: String(revision) }];\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\n/** Build `ConfigDetails` for the globally unique system registry row. */\nexport function buildSystemRegistryConfigDetails(slots: readonly ServiceSlot[]): ConfigDetails {\n return {\n manifestVersion: 0,\n loaderKey: TARGET_SYSTEM_REGISTRY_KEY,\n meta: { revision: 0 },\n objects: [...slots],\n };\n}\n\n/** Fetch a Config by id or by {@link Config.value} key (`category=config`). */\nexport const getConfig = validateWithSchema(\n getConfigSchema,\n \"getConfigSchema\",\n)(async (payload) => {\n const filterList = buildConfigLookupFilters(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 Config,\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 Config,\n };\n});\n\n/**\n * Insert the globally unique system registry Config (`category=config`,\n * `value=target-system-registry`). Rejects duplicates via `checkRedundancyFilterList`.\n */\nexport const postSystemRegistryConfig = validateWithSchema(\n postSystemRegistryConfigSchema,\n \"postSystemRegistryConfigSchema\",\n)(async ({ slots, tagList }) => {\n const seedSlots = [...(slots ?? DEFAULT_SYSTEM_REGISTRY_SEED_SLOTS)];\n const serviceSlots = buildEmptyServiceSlots(seedSlots);\n const details = buildSystemRegistryConfigDetails(serviceSlots);\n\n return createTarget<Config, PostSystemRegistryConfigPayload>({\n payload: { slots: seedSlots, tagList },\n checkRedundancyFilterList: [\n configCategoryFilter,\n { field: \"value\", operator: \"eq\", value: TARGET_SYSTEM_REGISTRY_KEY },\n ],\n createFn: () => ({\n name: TARGET_SYSTEM_REGISTRY_KEY,\n value: TARGET_SYSTEM_REGISTRY_KEY,\n category: CategoryConfig.CONFIG,\n tagList,\n details,\n }),\n });\n});\n\n/**\n * Replace the system registry slot layout with fresh EMPTY rows.\n * Creates the row when missing (same as {@link postSystemRegistryConfig}).\n * Clears ACTIVE slot bindings — use for dev recovery after crashes or layout changes.\n */\nexport const resetSystemRegistryConfig = validateWithSchema(\n resetSystemRegistryConfigSchema,\n \"resetSystemRegistryConfigSchema\",\n)(async ({ slots, tagList }) => {\n const seedSlots = [...(slots ?? DEFAULT_SYSTEM_REGISTRY_SEED_SLOTS)];\n const serviceSlots = buildEmptyServiceSlots(seedSlots);\n\n const existing = await getConfig({ value: TARGET_SYSTEM_REGISTRY_KEY });\n if (existing.data == null) {\n return postSystemRegistryConfig({ slots: seedSlots, tagList });\n }\n\n const configId = existing.data.id;\n\n for (let attempt = 1; attempt <= DEFAULT_RESET_RETRY_ATTEMPTS; attempt += 1) {\n try {\n const fresh = await getConfig({ id: configId });\n if (fresh.data == null) {\n throw new Error(`System registry config disappeared during reset (id=${configId})`);\n }\n\n const revision = parseRegistryRevision(fresh.data.details.meta);\n const updated = await updateTargetDetails<Config, ConfigDetails>({\n id: configId,\n optimisticLockFilterList: lockOnRegistryRevision(revision),\n updateFn: (details) => ({\n ...details,\n meta: { revision: revision + 1 },\n objects: serviceSlots,\n }),\n });\n\n return generateResponse.success<Config>(updated);\n } catch (error) {\n if (isOptimisticLockError(error) && attempt < DEFAULT_RESET_RETRY_ATTEMPTS) {\n await sleep(RESET_RETRY_DELAY_MS * attempt);\n continue;\n }\n throw error;\n }\n }\n\n throw new Error(\"[resetSystemRegistryConfig] Optimistic lock retries exhausted\");\n});\n","import { z } from \"zod\";\nimport { createTarget, getPossibleTarget, getTarget, type QueryFilter, validateWithSchema } from \"../core.api\";\nimport { NodeStatus } from \"../node/node.interface\";\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 serviceNodeSnapshotSchema = z.object({\n nodeId: z.string().trim().min(1),\n status: z.nativeEnum(NodeStatus),\n lastHeartBeat: z.number().int().nonnegative(),\n});\n\nexport const serviceRuntimeSchema = z.object({\n lastHeartBeat: z.number().int().nonnegative(),\n nodes: z.array(serviceNodeSnapshotSchema).default([]),\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 runtime: serviceRuntimeSchema.optional(),\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","/**\n * System registry — declarative service capacity (`target-system-registry` Config)\n * and startup/shutdown slot claims (`registerService` / `unregisterService`).\n *\n * Data planes:\n * - Config `details.objects` — {@link ServiceSlot} desired layout (EMPTY / ACTIVE)\n * - Service rows — runtime instances; guard maintains {@link ServiceDetails.runtime}\n * - Slot release: graceful shutdown via {@link unregisterService}; monitor (later)\n * for crashed / ungraceful exits (stale `Service.details.runtime`)\n */\n\nimport { isOptimisticLockError, updateTargetDetails } from \"../core.api\";\nimport type { Node } from \"../node/node.interface\";\nimport { createLogger } from \"../shared/log\";\nimport { getConfig } from \"./config.api\";\nimport { type Config, type ConfigDetails, TARGET_SYSTEM_REGISTRY_KEY } from \"./config.interface\";\nimport { getService } from \"./service.api\";\nimport {\n type Service,\n type ServiceDetails,\n type ServiceNodeSnapshot,\n type ServiceSlot,\n ServiceSlotStatus,\n} from \"./service.interface\";\n\nexport { TARGET_SYSTEM_REGISTRY_KEY } from \"./config.interface\";\n\n/** `details.meta.revision` on the system registry Config — optimistic-lock token. */\ninterface RegistryConfigMeta {\n revision: number;\n}\n\nconst LOG_TOPIC_REGISTRY = \"service-registry\";\nconst DEFAULT_REGISTER_RETRY_ATTEMPTS = 5;\n\nexport interface TargetSystemRegistrySlotView {\n slot: ServiceSlot;\n /** Resolved when `slot.serviceId` is set; null for EMPTY slots. */\n service: Service | null;\n}\n\nexport interface TargetSystemRegistryView {\n config: Config;\n slots: TargetSystemRegistrySlotView[];\n}\n\nexport interface RegisterServiceInput {\n /** Registered runtime Service row (`category=service`). */\n service: Service;\n traceId?: string;\n maxAttempts?: number;\n}\n\nexport interface ReleaseSystemRegistrySlotsInput {\n /** Logical service keys whose ACTIVE slots should be forced to EMPTY (e.g. `watch-service`). */\n serviceValues: string[];\n traceId?: string;\n maxAttempts?: number;\n}\n\nexport interface ReleasedRegistrySlot {\n serviceValue: string;\n serviceId: string;\n slotIndex: number;\n}\n\nexport interface ReleaseSystemRegistrySlotsOutcome {\n config: Config;\n released: ReleasedRegistrySlot[];\n /** Requested `serviceValues` with no ACTIVE slot released (already EMPTY or never bound). */\n unchangedServiceValues: string[];\n}\n\nexport interface AppendSystemRegistrySlotsInput {\n /** Logical service keys to declare with one new EMPTY slot each when missing. */\n serviceValues: string[];\n traceId?: string;\n maxAttempts?: number;\n}\n\nexport interface AppendSystemRegistrySlotsOutcome {\n config: Config;\n /** Service keys that received a new EMPTY slot this run. */\n added: string[];\n /** Requested keys that already had at least one declared slot — no change. */\n skipped: string[];\n}\n\nexport class ServiceRegistryError extends Error {\n constructor(\n message: string,\n readonly code:\n | \"REGISTRY_CONFIG_NOT_FOUND\"\n | \"SERVICE_NOT_DECLARED\"\n | \"SERVICE_SLOTS_FULL\"\n | \"REGISTRY_SLOT_LOST\"\n | \"REGISTRY_UPDATE_FAILED\",\n ) {\n super(message);\n this.name = \"ServiceRegistryError\";\n }\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n return typeof value === \"object\" && value !== null ? (value as Record<string, unknown>) : null;\n}\n\nfunction asFiniteNumber(value: unknown): number | null {\n return typeof value === \"number\" && Number.isFinite(value) ? value : null;\n}\n\nfunction isServiceSlotStatus(value: unknown): value is ServiceSlotStatus {\n return value === ServiceSlotStatus.EMPTY || value === ServiceSlotStatus.ACTIVE;\n}\n\n/** Defensive decode of one {@link ServiceSlot} from Config `details.objects`. */\nexport function parseServiceSlot(value: unknown): ServiceSlot | null {\n const source = asRecord(value);\n if (source == null) {\n return null;\n }\n\n const serviceValue = typeof source.serviceValue === \"string\" ? source.serviceValue : null;\n const status = source.status;\n if (serviceValue == null || !isServiceSlotStatus(status)) {\n return null;\n }\n\n let serviceId: string | null = null;\n if (source.serviceId != null) {\n if (typeof source.serviceId !== \"string\" || source.serviceId === \"\") {\n return null;\n }\n serviceId = source.serviceId;\n }\n\n if (status === ServiceSlotStatus.EMPTY) {\n serviceId = null;\n } else if (serviceId == null) {\n return null;\n }\n\n return { serviceValue, serviceId, status };\n}\n\nexport function parseServiceSlots(config: Config): ServiceSlot[] {\n const slots: ServiceSlot[] = [];\n for (const object of config.details.objects) {\n const slot = parseServiceSlot(object);\n if (slot != null) {\n slots.push(slot);\n }\n }\n return slots;\n}\n\n/** Parse `details.meta.revision` from the system registry Config (defaults to 0). */\nfunction parseRegistryRevision(rawMeta: unknown): number {\n const source = asRecord(rawMeta);\n const revision = asFiniteNumber(source?.revision);\n return revision ?? 0;\n}\n\nfunction nextRegistryMeta(nextRevision: number): RegistryConfigMeta {\n return { revision: nextRevision };\n}\n\nfunction lockOnRegistryRevision(revision: number) {\n return [{ field: \"details->meta->>revision\", operator: \"eq\" as const, value: String(revision) }];\n}\n\nfunction sleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nasync function loadSystemRegistryConfig(): Promise<Config> {\n const response = await getConfig({ value: TARGET_SYSTEM_REGISTRY_KEY });\n if (response.data == null) {\n throw new ServiceRegistryError(\n `System registry config not found (value=${TARGET_SYSTEM_REGISTRY_KEY})`,\n \"REGISTRY_CONFIG_NOT_FOUND\",\n );\n }\n return response.data;\n}\n\nasync function resolveServiceById(serviceId: string): Promise<Service | null> {\n const response = await getService({ id: serviceId });\n return response.data ?? null;\n}\n\n/**\n * Load the global system registry Config and resolve each ACTIVE slot's Service row.\n * Read-only — does not mutate slots or heartbeats.\n */\nexport async function getTargetSystemRegistry(): Promise<TargetSystemRegistryView> {\n const config = await loadSystemRegistryConfig();\n const slots = parseServiceSlots(config);\n\n const views = await Promise.all(\n slots.map(async (slot): Promise<TargetSystemRegistrySlotView> => {\n if (slot.serviceId == null) {\n return { slot, service: null };\n }\n const service = await resolveServiceById(slot.serviceId);\n return { slot, service };\n }),\n );\n\n return { config, slots: views };\n}\n\nfunction findFirstEmptySlot(slots: ServiceSlot[], serviceValue: string): number {\n return slots.findIndex((slot) => slot.serviceValue === serviceValue && slot.status === ServiceSlotStatus.EMPTY);\n}\n\nfunction countSlotsForValue(\n slots: ServiceSlot[],\n serviceValue: string,\n): { declared: number; active: number; empty: number } {\n let declared = 0;\n let active = 0;\n let empty = 0;\n for (const slot of slots) {\n if (slot.serviceValue !== serviceValue) {\n continue;\n }\n declared++;\n if (slot.status === ServiceSlotStatus.ACTIVE) {\n active++;\n } else if (slot.status === ServiceSlotStatus.EMPTY) {\n empty++;\n }\n }\n return { declared, active, empty };\n}\n\n/**\n * Preflight before `postService` — fail fast when registry capacity is full.\n * Prevents orphan Service rows and child process spawn when no slot is available.\n */\nexport async function assertRegistrySlotAvailable(serviceValue: string): Promise<void> {\n const config = await loadSystemRegistryConfig();\n const slots = parseServiceSlots(config);\n const counts = countSlotsForValue(slots, serviceValue);\n\n if (counts.declared === 0) {\n throw new ServiceRegistryError(\n `Service ${serviceValue} is not declared in system registry config`,\n \"SERVICE_NOT_DECLARED\",\n );\n }\n\n if (counts.empty === 0) {\n throw new ServiceRegistryError(\n `No EMPTY slot for ${serviceValue} — declared=${counts.declared}, active=${counts.active}. Refusing startup.`,\n \"SERVICE_SLOTS_FULL\",\n );\n }\n}\n\n/**\n * Runtime guard: this process's Service instance must still own an ACTIVE registry slot.\n * Supports N>1 replicas — checks whether `serviceId` appears in any ACTIVE slot for\n * `serviceValue`, not merely the first ACTIVE slot.\n */\nexport async function assertRegistrySlotOwner(input: { serviceValue: string; serviceId: string }): Promise<void> {\n const config = await loadSystemRegistryConfig();\n const slots = parseServiceSlots(config);\n const ownsSlot = slots.some(\n (slot) =>\n slot.serviceValue === input.serviceValue &&\n slot.status === ServiceSlotStatus.ACTIVE &&\n slot.serviceId === input.serviceId,\n );\n if (ownsSlot) {\n return;\n }\n const activeId = slots.find(\n (slot) =>\n slot.serviceValue === input.serviceValue &&\n slot.status === ServiceSlotStatus.ACTIVE &&\n slot.serviceId != null,\n )?.serviceId;\n throw new ServiceRegistryError(\n `Registry slot for ${input.serviceValue} is not owned by ${input.serviceId} (active=${activeId ?? \"none\"})`,\n \"REGISTRY_SLOT_LOST\",\n );\n}\n\nfunction isServiceValueDeclared(slots: ServiceSlot[], serviceValue: string): boolean {\n return slots.some((slot) => slot.serviceValue === serviceValue);\n}\n\nfunction claimSlot(slots: ServiceSlot[], slotIndex: number, serviceId: string): ServiceSlot[] {\n const next = [...slots];\n next[slotIndex] = {\n ...next[slotIndex],\n serviceId,\n status: ServiceSlotStatus.ACTIVE,\n };\n return next;\n}\n\nasync function persistSlotClaim(params: { configId: string; revision: number; slots: ServiceSlot[] }): Promise<void> {\n const { configId, revision, slots } = params;\n\n await updateTargetDetails<Config, ConfigDetails>({\n id: configId,\n optimisticLockFilterList: lockOnRegistryRevision(revision),\n updateFn: (details) => ({\n ...details,\n meta: nextRegistryMeta(revision + 1),\n objects: slots,\n }),\n });\n}\n\nfunction releaseOwnedSlot(slots: ServiceSlot[], serviceId: string): ServiceSlot[] | null {\n const slotIndex = slots.findIndex(\n (slot) => slot.serviceId === serviceId && slot.status === ServiceSlotStatus.ACTIVE,\n );\n if (slotIndex < 0) {\n return null;\n }\n\n const next = [...slots];\n next[slotIndex] = {\n ...next[slotIndex],\n serviceId: null,\n status: ServiceSlotStatus.EMPTY,\n };\n return next;\n}\n\nfunction releaseActiveSlotsForServiceValues(\n slots: ServiceSlot[],\n serviceValueSet: ReadonlySet<string>,\n): { nextSlots: ServiceSlot[]; released: ReleasedRegistrySlot[] } {\n const nextSlots = [...slots];\n const released: ReleasedRegistrySlot[] = [];\n\n for (let slotIndex = 0; slotIndex < nextSlots.length; slotIndex += 1) {\n const slot = nextSlots[slotIndex];\n if (\n !serviceValueSet.has(slot.serviceValue) ||\n slot.status !== ServiceSlotStatus.ACTIVE ||\n slot.serviceId == null\n ) {\n continue;\n }\n\n released.push({\n serviceValue: slot.serviceValue,\n serviceId: slot.serviceId,\n slotIndex,\n });\n nextSlots[slotIndex] = {\n ...slot,\n serviceId: null,\n status: ServiceSlotStatus.EMPTY,\n };\n }\n\n return { nextSlots, released };\n}\n\n/**\n * Force-release ACTIVE registry slots for the given logical service keys (`ACTIVE → EMPTY`).\n * Ops/dev recovery when a process crashed without {@link unregisterService}.\n * Does not delete Service rows or mutate `details.runtime`.\n */\nexport async function releaseSystemRegistrySlots(\n input: ReleaseSystemRegistrySlotsInput,\n): Promise<ReleaseSystemRegistrySlotsOutcome> {\n const serviceValues = [\n ...new Set(input.serviceValues.map((value) => value.trim()).filter((value) => value !== \"\")),\n ];\n if (serviceValues.length === 0) {\n throw new Error(\"[releaseSystemRegistrySlots] serviceValues must not be empty\");\n }\n\n const serviceValueSet = new Set(serviceValues);\n const maxAttempts = input.maxAttempts ?? DEFAULT_REGISTER_RETRY_ATTEMPTS;\n const logger = createLogger({\n module: \"releaseSystemRegistrySlots\",\n traceId: input.traceId,\n labels: { serviceValues: serviceValues.join(\",\") },\n });\n\n logger.info(\"开始强制释放 registry 槽位\", {\n topic: LOG_TOPIC_REGISTRY,\n data: { serviceValues },\n });\n\n for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {\n try {\n const config = await loadSystemRegistryConfig();\n const revision = parseRegistryRevision(config.details.meta);\n const slots = parseServiceSlots(config);\n\n for (const serviceValue of serviceValues) {\n if (!isServiceValueDeclared(slots, serviceValue)) {\n throw new ServiceRegistryError(\n `Service ${serviceValue} is not declared in system registry config`,\n \"SERVICE_NOT_DECLARED\",\n );\n }\n }\n\n const { nextSlots, released } = releaseActiveSlotsForServiceValues(slots, serviceValueSet);\n const releasedValueSet = new Set(released.map((entry) => entry.serviceValue));\n const unchangedServiceValues = serviceValues.filter((serviceValue) => !releasedValueSet.has(serviceValue));\n\n if (released.length === 0) {\n logger.info(\"无 ACTIVE 槽位需要释放\", {\n topic: LOG_TOPIC_REGISTRY,\n data: { serviceValues, attempt },\n });\n return { config, released, unchangedServiceValues: serviceValues };\n }\n\n await persistSlotClaim({\n configId: config.id,\n revision,\n slots: nextSlots,\n });\n\n const updated = await loadSystemRegistryConfig();\n logger.info(\"槽位强制释放成功\", {\n topic: LOG_TOPIC_REGISTRY,\n data: {\n released,\n unchangedServiceValues,\n attempt,\n revision: revision + 1,\n },\n });\n\n return {\n config: updated,\n released,\n unchangedServiceValues,\n };\n } catch (error) {\n if (error instanceof ServiceRegistryError) {\n logger.error(\"槽位强制释放被拒绝\", {\n topic: LOG_TOPIC_REGISTRY,\n data: { serviceValues, code: error.code, message: error.message },\n });\n throw error;\n }\n\n if (isOptimisticLockError(error) && attempt < maxAttempts) {\n logger.warn(\"registry 乐观锁冲突,重试\", {\n topic: LOG_TOPIC_REGISTRY,\n data: { serviceValues, attempt, maxAttempts },\n });\n await sleep(50 * attempt);\n continue;\n }\n\n const message = error instanceof Error ? error.message : String(error);\n logger.error(\"槽位强制释放失败\", {\n topic: LOG_TOPIC_REGISTRY,\n data: { serviceValues, attempt, message },\n });\n throw new ServiceRegistryError(message, \"REGISTRY_UPDATE_FAILED\");\n }\n }\n\n throw new ServiceRegistryError(\n \"[releaseSystemRegistrySlots] Optimistic lock retries exhausted\",\n \"REGISTRY_UPDATE_FAILED\",\n );\n}\n\n/**\n * Append EMPTY {@link ServiceSlot} rows for logical service keys not yet declared.\n * Idempotent — skips keys that already appear in `details.objects`.\n * Does not modify existing slots or release ACTIVE bindings.\n */\nexport async function appendSystemRegistrySlots(\n input: AppendSystemRegistrySlotsInput,\n): Promise<AppendSystemRegistrySlotsOutcome> {\n const serviceValues = [\n ...new Set(input.serviceValues.map((value) => value.trim()).filter((value) => value !== \"\")),\n ];\n if (serviceValues.length === 0) {\n throw new Error(\"[appendSystemRegistrySlots] serviceValues must not be empty\");\n }\n\n const maxAttempts = input.maxAttempts ?? DEFAULT_REGISTER_RETRY_ATTEMPTS;\n const logger = createLogger({\n module: \"appendSystemRegistrySlots\",\n traceId: input.traceId,\n labels: { serviceValues: serviceValues.join(\",\") },\n });\n\n logger.info(\"开始追加 registry 槽位声明\", {\n topic: LOG_TOPIC_REGISTRY,\n data: { serviceValues },\n });\n\n for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {\n try {\n const config = await loadSystemRegistryConfig();\n const revision = parseRegistryRevision(config.details.meta);\n const slots = parseServiceSlots(config);\n\n const added: string[] = [];\n const skipped: string[] = [];\n const nextSlots = [...slots];\n\n for (const serviceValue of serviceValues) {\n if (isServiceValueDeclared(nextSlots, serviceValue)) {\n skipped.push(serviceValue);\n continue;\n }\n nextSlots.push({\n serviceValue,\n serviceId: null,\n status: ServiceSlotStatus.EMPTY,\n });\n added.push(serviceValue);\n }\n\n if (added.length === 0) {\n logger.info(\"所有 service 已声明 — 无需追加\", {\n topic: LOG_TOPIC_REGISTRY,\n data: { serviceValues, skipped },\n });\n return { config, added, skipped: serviceValues };\n }\n\n await persistSlotClaim({\n configId: config.id,\n revision,\n slots: nextSlots,\n });\n\n const updated = await loadSystemRegistryConfig();\n logger.info(\"registry 槽位追加成功\", {\n topic: LOG_TOPIC_REGISTRY,\n data: { added, skipped, attempt, revision: revision + 1 },\n });\n\n return { config: updated, added, skipped };\n } catch (error) {\n if (isOptimisticLockError(error) && attempt < maxAttempts) {\n logger.warn(\"registry 乐观锁冲突,重试\", {\n topic: LOG_TOPIC_REGISTRY,\n data: { serviceValues, attempt, maxAttempts },\n });\n await sleep(50 * attempt);\n continue;\n }\n\n const message = error instanceof Error ? error.message : String(error);\n logger.error(\"registry 槽位追加失败\", {\n topic: LOG_TOPIC_REGISTRY,\n data: { serviceValues, attempt, message },\n });\n throw new ServiceRegistryError(message, \"REGISTRY_UPDATE_FAILED\");\n }\n }\n\n throw new ServiceRegistryError(\n \"[appendSystemRegistrySlots] Optimistic lock retries exhausted\",\n \"REGISTRY_UPDATE_FAILED\",\n );\n}\n\n/**\n * Claim one EMPTY slot for a running Service instance (`EMPTY → ACTIVE` only).\n *\n * - Each startup should `postService` a **new** instance row; do not reuse prior Service ids.\n * - Declared capacity = count of {@link ServiceSlot} rows sharing `service.value`\n * - No idempotent skip — if all slots are ACTIVE (e.g. crashed prior instance), throws\n * `SERVICE_SLOTS_FULL` until monitor/ops releases the slot\n * - Does not write heartbeats; guard maintains {@link ServiceDetails.runtime}\n * - Graceful release: {@link unregisterService}; crash recovery: future monitor\n */\nexport async function registerService(input: RegisterServiceInput): Promise<void> {\n const { service } = input;\n const serviceValue = service.value;\n const maxAttempts = input.maxAttempts ?? DEFAULT_REGISTER_RETRY_ATTEMPTS;\n const logger = createLogger({\n module: \"registerService\",\n traceId: input.traceId,\n labels: { serviceValue, serviceId: service.id },\n });\n\n logger.info(\"开始认领系统 registry 槽位\", {\n topic: LOG_TOPIC_REGISTRY,\n data: { serviceValue, serviceId: service.id },\n });\n\n for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {\n try {\n const config = await loadSystemRegistryConfig();\n const revision = parseRegistryRevision(config.details.meta);\n const slots = parseServiceSlots(config);\n\n if (!isServiceValueDeclared(slots, serviceValue)) {\n throw new ServiceRegistryError(\n `Service ${serviceValue} is not declared in system registry config`,\n \"SERVICE_NOT_DECLARED\",\n );\n }\n\n const emptyIndex = findFirstEmptySlot(slots, serviceValue);\n if (emptyIndex < 0) {\n throw new ServiceRegistryError(\n `No EMPTY slot for ${serviceValue} — declared capacity is full`,\n \"SERVICE_SLOTS_FULL\",\n );\n }\n\n const nextSlots = claimSlot(slots, emptyIndex, service.id);\n await persistSlotClaim({\n configId: config.id,\n revision,\n slots: nextSlots,\n });\n\n logger.info(\"槽位认领成功\", {\n topic: LOG_TOPIC_REGISTRY,\n data: {\n serviceValue,\n serviceId: service.id,\n slotIndex: emptyIndex,\n attempt,\n revision: revision + 1,\n },\n });\n return;\n } catch (error) {\n if (error instanceof ServiceRegistryError) {\n logger.error(\"槽位认领被拒绝\", {\n topic: LOG_TOPIC_REGISTRY,\n data: { serviceValue, serviceId: service.id, code: error.code, message: error.message },\n });\n throw error;\n }\n\n if (isOptimisticLockError(error) && attempt < maxAttempts) {\n logger.warn(\"registry 乐观锁冲突,重试\", {\n topic: LOG_TOPIC_REGISTRY,\n data: { serviceValue, serviceId: service.id, attempt, maxAttempts },\n });\n await sleep(50 * attempt);\n continue;\n }\n\n const message = error instanceof Error ? error.message : String(error);\n logger.error(\"槽位认领失败\", {\n topic: LOG_TOPIC_REGISTRY,\n data: { serviceValue, serviceId: service.id, attempt, message },\n });\n throw new ServiceRegistryError(message, \"REGISTRY_UPDATE_FAILED\");\n }\n }\n\n throw new ServiceRegistryError(\n `Failed to register ${serviceValue} after ${maxAttempts} attempts`,\n \"REGISTRY_UPDATE_FAILED\",\n );\n}\n\n/** Resolve the ACTIVE registry slot id for a declared `serviceValue`. */\nexport async function resolveActiveRegistryServiceId(serviceValue: string): Promise<string | null> {\n const registry = await getTargetSystemRegistry();\n for (const { slot } of registry.slots) {\n if (slot.serviceValue === serviceValue && slot.status === ServiceSlotStatus.ACTIVE && slot.serviceId != null) {\n return slot.serviceId;\n }\n }\n return null;\n}\n\nfunction nodeToServiceNodeSnapshot(node: Node): ServiceNodeSnapshot {\n return {\n nodeId: node.id,\n status: node.details.status,\n lastHeartBeat: node.details.lastHeartBeat,\n };\n}\n\nexport interface PatchServiceRuntimeInput {\n serviceValue: string;\n /** Prefer explicit id (N>1 replicas); falls back to first ACTIVE slot when omitted. */\n serviceId?: string;\n nodes: readonly Node[];\n lastHeartBeat: number;\n}\n\n/** Roll up Node liveness into `Service.details.runtime` (service guard only). */\nexport async function patchServiceRuntime(input: PatchServiceRuntimeInput): Promise<void> {\n const serviceId = input.serviceId ?? (await resolveActiveRegistryServiceId(input.serviceValue));\n if (serviceId == null) {\n return;\n }\n\n const nodes = input.nodes.map(nodeToServiceNodeSnapshot);\n\n await updateTargetDetails<Service, ServiceDetails>({\n id: serviceId,\n updateFn: (details) => ({\n ...details,\n runtime: {\n lastHeartBeat: input.lastHeartBeat,\n nodes,\n },\n }),\n });\n}\n\n/**\n * Claim a registry slot at L3 startup — propagates {@link ServiceRegistryError} (e.g. `SERVICE_SLOTS_FULL`).\n */\nexport async function registerServiceAtStartup(input: RegisterServiceInput): Promise<void> {\n await registerService(input);\n}\n\n/**\n * Release the ACTIVE slot owned by this Service instance (`ACTIVE → EMPTY` only).\n *\n * - Idempotent when no ACTIVE slot is bound to `service.id`\n * - Does not mutate the Service row or `details.runtime`\n * - Does not release slots owned by other instances\n */\nexport async function unregisterService(input: RegisterServiceInput): Promise<void> {\n const { service } = input;\n const serviceValue = service.value;\n const maxAttempts = input.maxAttempts ?? DEFAULT_REGISTER_RETRY_ATTEMPTS;\n const logger = createLogger({\n module: \"unregisterService\",\n traceId: input.traceId,\n labels: { serviceValue, serviceId: service.id },\n });\n\n logger.info(\"开始释放系统 registry 槽位\", {\n topic: LOG_TOPIC_REGISTRY,\n data: { serviceValue, serviceId: service.id },\n });\n\n for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {\n try {\n const config = await loadSystemRegistryConfig();\n const revision = parseRegistryRevision(config.details.meta);\n const slots = parseServiceSlots(config);\n const nextSlots = releaseOwnedSlot(slots, service.id);\n\n if (nextSlots == null) {\n logger.info(\"无绑定槽位,跳过释放\", {\n topic: LOG_TOPIC_REGISTRY,\n data: { serviceValue, serviceId: service.id, attempt },\n });\n return;\n }\n\n await persistSlotClaim({\n configId: config.id,\n revision,\n slots: nextSlots,\n });\n\n logger.info(\"槽位释放成功\", {\n topic: LOG_TOPIC_REGISTRY,\n data: {\n serviceValue,\n serviceId: service.id,\n attempt,\n revision: revision + 1,\n },\n });\n return;\n } catch (error) {\n if (error instanceof ServiceRegistryError) {\n logger.error(\"槽位释放被拒绝\", {\n topic: LOG_TOPIC_REGISTRY,\n data: { serviceValue, serviceId: service.id, code: error.code, message: error.message },\n });\n throw error;\n }\n\n if (isOptimisticLockError(error) && attempt < maxAttempts) {\n logger.warn(\"registry 乐观锁冲突,重试\", {\n topic: LOG_TOPIC_REGISTRY,\n data: { serviceValue, serviceId: service.id, attempt, maxAttempts },\n });\n await sleep(50 * attempt);\n continue;\n }\n\n const message = error instanceof Error ? error.message : String(error);\n logger.error(\"槽位释放失败\", {\n topic: LOG_TOPIC_REGISTRY,\n data: { serviceValue, serviceId: service.id, attempt, message },\n });\n throw new ServiceRegistryError(message, \"REGISTRY_UPDATE_FAILED\");\n }\n }\n\n throw new ServiceRegistryError(\n `Failed to unregister ${serviceValue} after ${maxAttempts} attempts`,\n \"REGISTRY_UPDATE_FAILED\",\n );\n}\n\n/**\n * Best-effort slot release for process shutdown — never throws.\n */\nexport async function unregisterServiceAtShutdown(input: RegisterServiceInput): Promise<void> {\n const logger = createLogger({\n module: \"unregisterServiceAtShutdown\",\n traceId: input.traceId,\n labels: { serviceValue: input.service.value, serviceId: input.service.id },\n });\n\n try {\n await unregisterService(input);\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n const code = error instanceof ServiceRegistryError ? error.code : undefined;\n logger.warn(\"shutdown 释放 registry 槽位失败(best-effort)\", {\n topic: LOG_TOPIC_REGISTRY,\n data: {\n serviceValue: input.service.value,\n serviceId: input.service.id,\n code,\n message,\n },\n });\n }\n}\n","import { deleteTarget } from \"../core.api\";\nimport { createLogger } from \"../shared/log\";\nimport {\n assertRegistrySlotAvailable,\n assertRegistrySlotOwner,\n registerServiceAtStartup,\n ServiceRegistryError,\n unregisterServiceAtShutdown,\n} from \"./registry.service\";\nimport type { Service } from \"./service.interface\";\n\nconst LOG_TOPIC = \"service-registry-lifecycle\";\n\n/** Shared registry slice for L3 runtime state files (`state.json`). */\nexport interface RegistrySlotRuntimeState {\n serviceId: string | null;\n serviceValue: string | null;\n slotOwned: boolean | null;\n lastSlotCheckAt: string | null;\n lastSlotCheckError: string | null;\n}\n\nexport const EMPTY_REGISTRY_SLOT_RUNTIME_STATE: RegistrySlotRuntimeState = {\n serviceId: null,\n serviceValue: null,\n slotOwned: null,\n lastSlotCheckAt: null,\n lastSlotCheckError: null,\n};\n\nexport function createClaimedRegistrySlotRuntimeState(service: Service): RegistrySlotRuntimeState {\n return {\n serviceId: service.id,\n serviceValue: service.value,\n slotOwned: true,\n lastSlotCheckAt: null,\n lastSlotCheckError: null,\n };\n}\n\nexport interface ClaimRegistrySlotInput {\n serviceValue: string;\n createInstance: () => Promise<Service>;\n traceId?: string;\n}\n\nexport interface ServiceRegistrySession {\n service: Service;\n /** Graceful shutdown — releases ACTIVE registry slot. */\n release: () => Promise<void>;\n /** Abandon orphan instance row when register never succeeded. */\n abandon: () => Promise<void>;\n}\n\n/**\n * Preflight → create Service instance → claim registry slot.\n * On register failure after `createInstance`, deletes the orphan Service row.\n */\nexport async function claimServiceRegistrySlot(input: ClaimRegistrySlotInput): Promise<ServiceRegistrySession> {\n const logger = createLogger({\n module: \"claimServiceRegistrySlot\",\n traceId: input.traceId,\n labels: { serviceValue: input.serviceValue },\n });\n\n await assertRegistrySlotAvailable(input.serviceValue);\n\n const service = await input.createInstance();\n let registered = false;\n\n try {\n await registerServiceAtStartup({ service, traceId: input.traceId });\n registered = true;\n } catch (error) {\n await deleteTarget({ id: service.id }).catch((deleteError: unknown) => {\n const message = deleteError instanceof Error ? deleteError.message : String(deleteError);\n logger.warn(\"Failed to delete orphan Service row after register failure\", {\n topic: LOG_TOPIC,\n data: { serviceId: service.id, message },\n });\n });\n throw error;\n }\n\n logger.info(\"registry slot claimed\", {\n topic: LOG_TOPIC,\n data: { serviceValue: service.value, serviceId: service.id, registered },\n });\n\n return {\n service,\n release: async () => {\n await unregisterServiceAtShutdown({ service, traceId: input.traceId });\n },\n abandon: async () => {\n await deleteTarget({ id: service.id }).catch(() => undefined);\n },\n };\n}\n\nexport interface RegistrySlotGuardResult {\n slotOwned: boolean | null;\n shouldShutdown: boolean;\n error?: string;\n}\n\n/**\n * Runtime guard step for service supervisor loops.\n * Transient read failures soft-fail; confirmed slot loss returns `shouldShutdown: true`.\n */\nexport async function runRegistrySlotGuardCheck(input: {\n serviceValue: string;\n serviceId: string;\n}): Promise<RegistrySlotGuardResult> {\n try {\n await assertRegistrySlotOwner(input);\n return { slotOwned: true, shouldShutdown: false };\n } catch (error) {\n if (error instanceof ServiceRegistryError && error.code === \"REGISTRY_SLOT_LOST\") {\n return {\n slotOwned: false,\n shouldShutdown: true,\n error: error.message,\n };\n }\n const message = error instanceof Error ? error.message : String(error);\n return {\n slotOwned: null,\n shouldShutdown: false,\n error: message,\n };\n }\n}\n\nexport function registrySlotRuntimePatchFromGuardResult(\n result: RegistrySlotGuardResult,\n checkedAt: string,\n): Pick<RegistrySlotRuntimeState, \"slotOwned\" | \"lastSlotCheckAt\" | \"lastSlotCheckError\"> {\n return {\n slotOwned: result.slotOwned,\n lastSlotCheckAt: checkedAt,\n lastSlotCheckError: result.error ?? null,\n };\n}\n","import { createLogger, type LoggerWithScope } from \"../shared/log\";\nimport type { ServiceLifecycle } from \"./base.interface\";\nimport { ServiceLifecycleStatus } from \"./base.interface\";\nimport { postService } from \"./service.api\";\nimport type { Service, ServiceDetails } from \"./service.interface\";\n\nfunction formatLocalDateYmd(date = new Date()): string {\n const year = date.getFullYear();\n const month = String(date.getMonth() + 1).padStart(2, \"0\");\n const day = String(date.getDate()).padStart(2, \"0\");\n return `${year}-${month}-${day}`;\n}\n\n/** Default ACTIVE lifecycle for a newly posted Service instance row. */\nexport function createActiveServiceLifecycle(activeSince?: string): ServiceLifecycle {\n return {\n status: ServiceLifecycleStatus.ACTIVE,\n activeSince: activeSince ?? formatLocalDateYmd(),\n deprecatedAt: null,\n sunsetAt: null,\n };\n}\n\n/** Standard L3 Service `details` — empty apiKeys, manifest v0, ACTIVE lifecycle. */\nexport function defaultL3ServiceDetails(options?: { dependencies?: string[] }): ServiceDetails {\n return {\n manifestVersion: 0,\n apiKeys: [],\n dependencies: options?.dependencies ?? [],\n lifecycle: createActiveServiceLifecycle(),\n };\n}\n\nexport interface PostServiceInstanceOptions {\n name: string;\n value: string;\n tagList?: string[];\n dependencies?: string[];\n logger?: LoggerWithScope;\n /** Log topic for instance-created message. Default `bootstrap`. */\n logTopic?: string;\n}\n\n/**\n * Post a new Service instance row (L3 blueprint).\n * Same `value` may exist on many rows; registry slot claim selects the live instance.\n */\nexport async function postServiceInstance(options: PostServiceInstanceOptions): Promise<Service> {\n const logger = options.logger ?? createLogger({ module: \"service-bootstrap\" });\n const logTopic = options.logTopic ?? \"bootstrap\";\n\n const result = await postService({\n name: options.name,\n value: options.value,\n tagList: options.tagList ?? [],\n details: defaultL3ServiceDetails({ dependencies: options.dependencies }),\n });\n\n if (!result.success || result.data == null) {\n throw new Error(result.error?.message ?? \"postService failed\");\n }\n\n logger.success(\"service instance created\", {\n topic: logTopic,\n data: { value: options.value, serviceId: result.data.id },\n });\n\n return result.data;\n}\n\nexport interface ServiceBootstrapResult {\n service: Service;\n baseUrl: string;\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","/** Read a dotted path (e.g. `data.items`) from a parsed JSON value. */\nexport function getValueAtPath(value: unknown, path: string | null | undefined): unknown {\n if (path == null || path.trim() === \"\") {\n return value;\n }\n let current: unknown = value;\n for (const segment of path.split(\".\")) {\n if (segment === \"\") {\n continue;\n }\n if (current == null || typeof current !== \"object\") {\n return undefined;\n }\n current = (current as Record<string, unknown>)[segment];\n }\n return current;\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 { LoggerWithScope } from \"../shared/log\";\nimport type { Task } from \"./task.interface\";\nimport { type PostTaskPayload, postTask } from \"./task-post.api\";\n\nexport const POST_TASK_DEFAULT_MAX_ATTEMPTS = 3;\n\nexport interface PostTaskWithRetryOptions {\n logger: LoggerWithScope;\n topic: string;\n traceId: string;\n itemLabel: string;\n context?: Record<string, unknown>;\n maxAttempts?: number;\n}\n\nexport type PostTaskWithRetryResult = { ok: true; task: Task } | { ok: false };\n\n/**\n * Retry wrapper for {@link postTask} — for schedule runners posting tasks over flaky network.\n * Logs warn on intermediate failures and critical when all attempts fail.\n */\nexport async function postTaskWithRetry(\n payload: PostTaskPayload,\n options: PostTaskWithRetryOptions,\n): Promise<PostTaskWithRetryResult> {\n const maxAttempts = options.maxAttempts ?? POST_TASK_DEFAULT_MAX_ATTEMPTS;\n let lastError = \"unknown error\";\n\n for (let attempt = 1; attempt <= maxAttempts; attempt++) {\n const { data: task, error } = await postTask(payload);\n if (error == null && task != null) {\n return { ok: true, task };\n }\n lastError = error?.message ?? lastError;\n if (attempt < maxAttempts) {\n options.logger.warn(\"postTask failed, retrying\", {\n topic: options.topic,\n data: {\n ...options.context,\n traceId: options.traceId,\n itemLabel: options.itemLabel,\n attempt,\n maxAttempts,\n error: lastError,\n },\n });\n }\n }\n\n options.logger.critical(\"postTask failed after retries — skip item this cycle\", {\n topic: options.topic,\n data: {\n ...options.context,\n traceId: options.traceId,\n itemLabel: options.itemLabel,\n maxAttempts,\n error: lastError,\n },\n });\n return { ok: false };\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"],"names":["asRecord","asFiniteNumber","targetIdSchema","nodeIdSchema","traceIdSchema","getCrypto","parseRegistryRevision","lockOnRegistryRevision","sleep"],"mappings":"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"}