target-supabase-sdk 0.2.5 → 0.2.7

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 (32) hide show
  1. package/dist/browser.d.ts +2 -3
  2. package/dist/browser.d.ts.map +1 -1
  3. package/dist/browser.js +2 -2
  4. package/dist/chunks/{enable-log-persist-BL2FaGQp.js → enable-log-persist-C8AaEfW2.js} +2 -2
  5. package/dist/chunks/{enable-log-persist-BL2FaGQp.js.map → enable-log-persist-C8AaEfW2.js.map} +1 -1
  6. package/dist/chunks/{list.api-Ab9v8yOg.js → list.api-9CyffUtf.js} +50 -19
  7. package/dist/chunks/list.api-9CyffUtf.js.map +1 -0
  8. package/dist/chunks/{word.interface-Mw7bTSqs.js → task-queue-D3AGLocE.js} +85 -8
  9. package/dist/chunks/task-queue-D3AGLocE.js.map +1 -0
  10. package/dist/core.api.d.ts +46 -1
  11. package/dist/core.api.d.ts.map +1 -1
  12. package/dist/node.js +6 -6
  13. package/dist/preload.js +2 -2
  14. package/dist/service/config.api.d.ts.map +1 -1
  15. package/dist/service/index.d.ts +2 -2
  16. package/dist/service/index.d.ts.map +1 -1
  17. package/dist/service/registry.service.d.ts +19 -0
  18. package/dist/service/registry.service.d.ts.map +1 -1
  19. package/package.json +1 -3
  20. package/src/browser.ts +3 -1
  21. package/src/core.api.ts +122 -39
  22. package/src/service/config.api.ts +2 -0
  23. package/src/service/index.ts +3 -0
  24. package/src/service/registry.service.ts +111 -0
  25. package/dist/chunks/list.api-Ab9v8yOg.js.map +0 -1
  26. package/dist/chunks/word.interface-Mw7bTSqs.js.map +0 -1
  27. package/dist/word/word.api.d.ts +0 -15
  28. package/dist/word/word.api.d.ts.map +0 -1
  29. package/dist/word/word.interface.d.ts +0 -20
  30. package/dist/word/word.interface.d.ts.map +0 -1
  31. package/src/word/word.api.ts +0 -41
  32. package/src/word/word.interface.ts +0 -22
@@ -112,13 +112,59 @@ export declare const postTarget: (payload: PostTargetPayload) => Promise<import(
112
112
  export interface PatchTargetPayload extends PostTargetPayload {
113
113
  id: string;
114
114
  }
115
+ export declare const OPTIMISTIC_LOCK_FAILED_MESSAGE = "[updateTargetDetails] Optimistic lock failed: target no longer matches expected state.";
116
+ /**
117
+ * @deprecated Use {@link updateTarget} (narrow RMW + optimistic lock) or {@link updateTargetDetails}.
118
+ *
119
+ * Full-row rewrite of create-shaped fields. Forces callers to resupply name/value/category,
120
+ * has no optimistic lock, and can accidentally mutate identity columns. Unused in-tree.
121
+ */
115
122
  export declare const patchTarget: ({ id, ...restPayload }: PatchTargetPayload) => Promise<import("./core.interface").SupabaseResponse<Target>>;
123
+ /** Mutable Target columns allowed by {@link updateTarget} (identity fields excluded). */
124
+ export interface UpdateTargetRowSnapshot<D> {
125
+ tagList: string[];
126
+ details: D;
127
+ extra?: string;
128
+ }
129
+ /**
130
+ * Narrow patch returned by `updateTarget` updateFn.
131
+ * Omitted keys are left unchanged on the row.
132
+ */
133
+ export type UpdateTargetPatch<D> = {
134
+ tagList?: string[];
135
+ details?: D;
136
+ extra?: string;
137
+ };
138
+ /**
139
+ * Read-modify-write mutable Target columns (`tagList` / `details` / `extra`) with optional
140
+ * DB-level optimistic locking. Does not write `name` / `value` / `category`.
141
+ *
142
+ * Prefer this when the update may touch `tagList` (and optionally `details`/`extra`) in one UPDATE.
143
+ * For details-only flows, {@link updateTargetDetails} remains the thinner API.
144
+ */
145
+ export interface UpdateTargetParams<D> {
146
+ /** Target row id. */
147
+ id: string;
148
+ /**
149
+ * Builds a narrow patch from the row fetched immediately before UPDATE.
150
+ * Only returned keys are written; omit a key to leave that column unchanged.
151
+ */
152
+ updateFn: (existing: UpdateTargetRowSnapshot<D>) => UpdateTargetPatch<D>;
153
+ /**
154
+ * Optimistic lock conditions applied on UPDATE (not on the prior SELECT).
155
+ * Same semantics as {@link UpdateTargetDetailsParams.optimisticLockFilterList}.
156
+ */
157
+ optimisticLockFilterList?: QueryFilter[];
158
+ }
159
+ export declare const updateTarget: <T, D>({ id, updateFn, optimisticLockFilterList, }: UpdateTargetParams<D>) => Promise<T>;
116
160
  /**
117
161
  * Read-modify-write `target.details` with optional DB-level optimistic locking on UPDATE.
118
162
  *
119
163
  * Do not use application-layer pre-update validators (e.g. checking state after SELECT then
120
164
  * UPDATE with only `id`). That pattern is not atomic and loses under concurrency. Pass expected
121
165
  * row conditions via `optimisticLockFilterList` so they are applied on the UPDATE statement.
166
+ *
167
+ * For updates that also need `tagList`, use {@link updateTarget}.
122
168
  */
123
169
  export interface UpdateTargetDetailsParams<D> {
124
170
  /** Target row id. */
@@ -144,7 +190,6 @@ export interface UpdateTargetDetailsParams<D> {
144
190
  optimisticLockFilterList?: QueryFilter[];
145
191
  }
146
192
  export declare const updateTargetDetails: <T, D>({ id, updateFn, updateExtraFn, optimisticLockFilterList, }: UpdateTargetDetailsParams<D>) => Promise<T>;
147
- export declare const OPTIMISTIC_LOCK_FAILED_MESSAGE = "[updateTargetDetails] Optimistic lock failed: target no longer matches expected state.";
148
193
  export declare const OPTIMISTIC_LOCK_ERROR_CODE: "OPTIMISTIC_LOCK";
149
194
  export declare function isOptimisticLockError(error: unknown): boolean;
150
195
  export declare function isOptimisticLockResponse(error: {
@@ -1 +1 @@
1
- {"version":3,"file":"core.api.d.ts","sourceRoot":"","sources":["../src/core.api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"core.api.d.ts","sourceRoot":"","sources":["../src/core.api.ts"],"names":[],"mappings":"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"}
package/dist/node.js CHANGED
@@ -1,12 +1,12 @@
1
1
  import { z } from 'zod';
2
- import { M as MAX_POLL_TARGET_LIST_SIZE, G as validateWithSchema, f as createLogger, w as pollTargetList, i as generateResponse, g as createTarget, D as supabase, u as logManager, I as createScope, c as LogLevel, J as patchScope, A as scanTargetList, K as withModule, j as getPossibleTarget, r as isOptimisticLockResponse, E as updateTargetDetails } from './chunks/list.api-Ab9v8yOg.js';
3
- export { B as BaseValidator, C as CREATE_TARGET_ALREADY_EXISTS_MESSAGE, a as CategoryList, L as LOG_BATCH_LOADER_KEY, b as LOG_PERSIST_LOADER_KEY, d as MAX_TARGET_LIST_PAGE_SIZE, O as OPTIMISTIC_LOCK_ERROR_CODE, e as OPTIMISTIC_LOCK_FAILED_MESSAGE, P as PostListValidator, S as StatusCode, h as deleteTarget, k as getTarget, l as getTargetList, m as getTargetTotalCount, n as handleSupabaseError, o as isCreateTargetAlreadyExistsError, p as isDevEnvironment, q as isOptimisticLockError, s as logDev, t as logDevGroup, v as patchTarget, x as postListCreate, y as postLogListCreate, z as postTarget, F as validateWith } from './chunks/list.api-Ab9v8yOg.js';
4
- import { l as loadEnvFiles, b as readEnv, c as requireEnv, d as createJsonFileStateStore, a as logPersistEnabledFromEnv, e as disableLogPersist, g as getLogPersistStats, s as snapshotLogPersistReady, w as waitForLogPersistReady, f as ensureLogPersistFromEnv } from './chunks/enable-log-persist-BL2FaGQp.js';
5
- export { C as CLI_PROD_FLAG, S as SERVICE_ENV_PROFILE_ENV_KEY, h as SERVICE_ENV_PROFILE_PROD, i as enableLogPersist, j as envBool, k as envInt, m as envMs, n as envNumber, o as envPort, q as envProfileFromProcess, t as parseEnvFile, u as parseEnvLine, p as pinEnvProfileFromArgv, x as pollUntil, y as resolveDefaultEnvFiles, z as resolveLogPersistRegistryPath, r as resolveProjectRootByPackageName, A as resolveProjectRootFromModule, v as validateLogPersistPreloadEnv } from './chunks/enable-log-persist-BL2FaGQp.js';
2
+ import { M as MAX_POLL_TARGET_LIST_SIZE, H as validateWithSchema, f as createLogger, w as pollTargetList, i as generateResponse, g as createTarget, D as supabase, u as logManager, J as createScope, c as LogLevel, K as patchScope, A as scanTargetList, N as withModule, j as getPossibleTarget, r as isOptimisticLockResponse, F as updateTargetDetails } from './chunks/list.api-9CyffUtf.js';
3
+ export { B as BaseValidator, C as CREATE_TARGET_ALREADY_EXISTS_MESSAGE, a as CategoryList, L as LOG_BATCH_LOADER_KEY, b as LOG_PERSIST_LOADER_KEY, d as MAX_TARGET_LIST_PAGE_SIZE, O as OPTIMISTIC_LOCK_ERROR_CODE, e as OPTIMISTIC_LOCK_FAILED_MESSAGE, P as PostListValidator, S as StatusCode, h as deleteTarget, k as getTarget, l as getTargetList, m as getTargetTotalCount, n as handleSupabaseError, o as isCreateTargetAlreadyExistsError, p as isDevEnvironment, q as isOptimisticLockError, s as logDev, t as logDevGroup, v as patchTarget, x as postListCreate, y as postLogListCreate, z as postTarget, E as updateTarget, G as validateWith } from './chunks/list.api-9CyffUtf.js';
4
+ import { l as loadEnvFiles, b as readEnv, c as requireEnv, d as createJsonFileStateStore, a as logPersistEnabledFromEnv, e as disableLogPersist, g as getLogPersistStats, s as snapshotLogPersistReady, w as waitForLogPersistReady, f as ensureLogPersistFromEnv } from './chunks/enable-log-persist-C8AaEfW2.js';
5
+ export { C as CLI_PROD_FLAG, S as SERVICE_ENV_PROFILE_ENV_KEY, h as SERVICE_ENV_PROFILE_PROD, i as enableLogPersist, j as envBool, k as envInt, m as envMs, n as envNumber, o as envPort, q as envProfileFromProcess, t as parseEnvFile, u as parseEnvLine, p as pinEnvProfileFromArgv, x as pollUntil, y as resolveDefaultEnvFiles, z as resolveLogPersistRegistryPath, r as resolveProjectRootByPackageName, A as resolveProjectRootFromModule, v as validateLogPersistPreloadEnv } from './chunks/enable-log-persist-C8AaEfW2.js';
6
6
  import { access, stat, readFile, mkdir, unlink, writeFile, readdir } from 'node:fs/promises';
7
7
  import { resolve, join, dirname, isAbsolute } from 'node:path';
8
- import { bd as sha256Hex, bi as getErrorMessage, aI as postRegisterNode, am as patchChangeNodeStatus, N as NodeStatus, ax as patchStopNode, au as patchNodeHeartBeat, E as EMPTY_REGISTRY_SLOT_RUNTIME_STATE, b3 as runRegistrySlotGuardCheck, aW as registrySlotRuntimePatchFromGuardResult, d as CategoryNode, L as evaluateBusyNodeLiveness, aw as patchServiceRuntime, l as ServiceRegistryError, v as claimServiceRegistrySlot, f as CategoryRepo, R as ResultCode, bj as LOG_TOPIC_TASK, n as TASK_REPO_USAGE, a4 as getScanRemoteRepoValues, aq as patchClaimTask, bk as CRITICAL_UNKNOWN_TASK_TRACE_ID, ao as patchChangeTaskStatus, p as TaskStatusAction, bl as toError, aQ as postTaskSchema, bm as createTaskRow, o as TaskStatus } from './chunks/word.interface-Mw7bTSqs.js';
9
- export { A as ApiMethod, C as CategoryConfig, a as CategoryExtraction, b as CategoryIdea, c as CategoryLink, e as CategoryParcel, g as CategoryService, h as CategoryTask, i as CategoryWord, D as DEFAULT_SYSTEM_REGISTRY_SEED_SLOTS, M as Market, P as POST_TASK_DEFAULT_MAX_ATTEMPTS, j as ParcelManager, k as PostLinkValidator, S as ServiceLifecycleStatus, m as ServiceSlotStatus, T as TARGET_SYSTEM_REGISTRY_KEY, q as apiDetailsSchema, r as assertRegistrySlotAvailable, s as assertRegistrySlotOwner, t as buildEmptyServiceSlots, u as buildSystemRegistryConfigDetails, w as classifyNetworkError, x as countTasksByType, y as createActiveServiceLifecycle, z as createClaimedRegistrySlotRuntimeState, B as createStorageProviderRegistry, F as createUploadTracker, G as decodeLogBatch, H as decodeLogBatchList, I as defaultL3ServiceDetails, J as deleteParcel, K as deleteParcelSchema, O as fetchBinaryWithRetry, Q as fetchWithRetry, U as fieldDefinitionSchema, V as flattenLogBatch, W as flattenLogBatches, X as formatNetworkError, Y as getApi, Z as getApiSchema, _ as getConfig, $ as getConfigSchema, a0 as getExtraction, a1 as getExtractionSchema, a2 as getParcel, a3 as getParcelSchema, a5 as getScanRemoteRepoValuesSchema, a6 as getService, a7 as getServiceSchema, a8 as getTargetSystemRegistry, a9 as getValueAtPath, aa as installChunkFetchRegistry, ab as isHttpUrl, ac as isLocalFilesystemPath, ad as isLogBatchList, ae as isLogEntry, af as isOpaqueChunkUrl, ag as isRetryableHttpStatus, ah as parcelDetailsSchema, ai as parseLogBatchMeta, aj as parseProviderPrefixedUrl, ak as parseServiceSlot, al as parseServiceSlots, an as patchChangeNodeStatusSchema, ap as patchChangeTaskStatusSchema, ar as patchClaimTaskSchema, as as patchExtractionObjects, at as patchExtractionObjectsSchema, av as patchNodeHeartBeatSchema, ay as patchStopNodeSchema, az as patchTaskProgress, aA as patchTaskProgressSchema, aB as postApi, aC as postApiSchema, aD as postExtraction, aE as postExtractionSchema, aF as postLinkCreate, aG as postParcel, aH as postParcelSchema, aJ as postRegisterNodeSchema, aK as postService, aL as postServiceInstance, aM as postServiceSchema, aN as postSystemRegistryConfig, aO as postSystemRegistryConfigSchema, aP as postTask, aR as postTaskWithRetry, aS as publishParcel, aT as registerProviderChunkResolver, aU as registerService, aV as registerServiceAtStartup, aX as releaseSystemRegistrySlots, aY as requestHasBody, aZ as resetSystemRegistryConfig, a_ as resetSystemRegistryConfigSchema, a$ as resolveActiveRegistryServiceId, b0 as resolveFetchUrl, b1 as restoreParcel, b2 as restoreParcelById, b4 as sanitizeFileName, b5 as sanitizeParcelFileName, b6 as scanExtractionList, b7 as scanExtractionListSchema, b8 as schemaDefinitionSchema, b9 as serviceDetailsSchema, ba as serviceLifecycleSchema, bb as serviceNodeSnapshotSchema, bc as serviceRuntimeSchema, be as summarizeTaskQueue, bf as systemRegistrySeedSlotSchema, bg as unregisterService, bh as unregisterServiceAtShutdown } from './chunks/word.interface-Mw7bTSqs.js';
8
+ import { bd as sha256Hex, bi as getErrorMessage, aI as postRegisterNode, am as patchChangeNodeStatus, N as NodeStatus, ax as patchStopNode, au as patchNodeHeartBeat, E as EMPTY_REGISTRY_SLOT_RUNTIME_STATE, b3 as runRegistrySlotGuardCheck, aW as registrySlotRuntimePatchFromGuardResult, d as CategoryNode, L as evaluateBusyNodeLiveness, aw as patchServiceRuntime, k as ServiceRegistryError, v as claimServiceRegistrySlot, f as CategoryRepo, R as ResultCode, bj as LOG_TOPIC_TASK, m as TASK_REPO_USAGE, a4 as getScanRemoteRepoValues, aq as patchClaimTask, bk as CRITICAL_UNKNOWN_TASK_TRACE_ID, ao as patchChangeTaskStatus, o as TaskStatusAction, bl as toError, aQ as postTaskSchema, bm as createTaskRow, n as TaskStatus } from './chunks/task-queue-D3AGLocE.js';
9
+ export { A as ApiMethod, C as CategoryConfig, a as CategoryExtraction, b as CategoryIdea, c as CategoryLink, e as CategoryParcel, g as CategoryService, h as CategoryTask, D as DEFAULT_SYSTEM_REGISTRY_SEED_SLOTS, M as Market, P as POST_TASK_DEFAULT_MAX_ATTEMPTS, i as ParcelManager, j as PostLinkValidator, S as ServiceLifecycleStatus, l as ServiceSlotStatus, T as TARGET_SYSTEM_REGISTRY_KEY, p as apiDetailsSchema, q as appendSystemRegistrySlots, r as assertRegistrySlotAvailable, s as assertRegistrySlotOwner, t as buildEmptyServiceSlots, u as buildSystemRegistryConfigDetails, w as classifyNetworkError, x as countTasksByType, y as createActiveServiceLifecycle, z as createClaimedRegistrySlotRuntimeState, B as createStorageProviderRegistry, F as createUploadTracker, G as decodeLogBatch, H as decodeLogBatchList, I as defaultL3ServiceDetails, J as deleteParcel, K as deleteParcelSchema, O as fetchBinaryWithRetry, Q as fetchWithRetry, U as fieldDefinitionSchema, V as flattenLogBatch, W as flattenLogBatches, X as formatNetworkError, Y as getApi, Z as getApiSchema, _ as getConfig, $ as getConfigSchema, a0 as getExtraction, a1 as getExtractionSchema, a2 as getParcel, a3 as getParcelSchema, a5 as getScanRemoteRepoValuesSchema, a6 as getService, a7 as getServiceSchema, a8 as getTargetSystemRegistry, a9 as getValueAtPath, aa as installChunkFetchRegistry, ab as isHttpUrl, ac as isLocalFilesystemPath, ad as isLogBatchList, ae as isLogEntry, af as isOpaqueChunkUrl, ag as isRetryableHttpStatus, ah as parcelDetailsSchema, ai as parseLogBatchMeta, aj as parseProviderPrefixedUrl, ak as parseServiceSlot, al as parseServiceSlots, an as patchChangeNodeStatusSchema, ap as patchChangeTaskStatusSchema, ar as patchClaimTaskSchema, as as patchExtractionObjects, at as patchExtractionObjectsSchema, av as patchNodeHeartBeatSchema, ay as patchStopNodeSchema, az as patchTaskProgress, aA as patchTaskProgressSchema, aB as postApi, aC as postApiSchema, aD as postExtraction, aE as postExtractionSchema, aF as postLinkCreate, aG as postParcel, aH as postParcelSchema, aJ as postRegisterNodeSchema, aK as postService, aL as postServiceInstance, aM as postServiceSchema, aN as postSystemRegistryConfig, aO as postSystemRegistryConfigSchema, aP as postTask, aR as postTaskWithRetry, aS as publishParcel, aT as registerProviderChunkResolver, aU as registerService, aV as registerServiceAtStartup, aX as releaseSystemRegistrySlots, aY as requestHasBody, aZ as resetSystemRegistryConfig, a_ as resetSystemRegistryConfigSchema, a$ as resolveActiveRegistryServiceId, b0 as resolveFetchUrl, b1 as restoreParcel, b2 as restoreParcelById, b4 as sanitizeFileName, b5 as sanitizeParcelFileName, b6 as scanExtractionList, b7 as scanExtractionListSchema, b8 as schemaDefinitionSchema, b9 as serviceDetailsSchema, ba as serviceLifecycleSchema, bb as serviceNodeSnapshotSchema, bc as serviceRuntimeSchema, be as summarizeTaskQueue, bf as systemRegistrySeedSlotSchema, bg as unregisterService, bh as unregisterServiceAtShutdown } from './chunks/task-queue-D3AGLocE.js';
10
10
  import { spawn } from 'node:child_process';
11
11
  import { createHash } from 'node:crypto';
12
12
  import { tmpdir } from 'node:os';
package/dist/preload.js CHANGED
@@ -1,9 +1,9 @@
1
1
  import { resolve } from 'node:path';
2
- import { r as resolveProjectRootByPackageName, p as pinEnvProfileFromArgv, l as loadEnvFiles, v as validateLogPersistPreloadEnv, a as logPersistEnabledFromEnv } from './chunks/enable-log-persist-BL2FaGQp.js';
2
+ import { r as resolveProjectRootByPackageName, p as pinEnvProfileFromArgv, l as loadEnvFiles, v as validateLogPersistPreloadEnv, a as logPersistEnabledFromEnv } from './chunks/enable-log-persist-C8AaEfW2.js';
3
3
  import 'node:fs';
4
4
  import 'node:url';
5
5
  import 'node:fs/promises';
6
- import './chunks/list.api-Ab9v8yOg.js';
6
+ import './chunks/list.api-9CyffUtf.js';
7
7
  import 'lodash-es';
8
8
  import '@supabase/supabase-js';
9
9
  import 'node:crypto';
@@ -1 +1 @@
1
- {"version":3,"file":"config.api.d.ts","sourceRoot":"","sources":["../../src/service/config.api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAWxB,OAAO,EAAkB,KAAK,MAAM,EAAE,KAAK,aAAa,EAA8B,MAAM,oBAAoB,CAAC;AACjH,OAAO,EAAE,KAAK,WAAW,EAAqB,MAAM,qBAAqB,CAAC;AAI1E,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;EAYvB,CAAC;AAEN,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAE/D,wEAAwE;AACxE,eAAO,MAAM,4BAA4B;;;;;;EAEvC,CAAC;AAEH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAElF,eAAO,MAAM,8BAA8B;IACvC,wEAAwE;;;;;;;;;;;;;;;;;;;EAG1E,CAAC;AAEH,MAAM,MAAM,+BAA+B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAC;AAE7F,qGAAqG;AACrG,eAAO,MAAM,+BAA+B;IARxC,wEAAwE;;;;;;;;;;;;;;;;;;;EAQC,CAAC;AAE9E,MAAM,MAAM,gCAAgC,GAAG,+BAA+B,CAAC;AAK/E,uFAAuF;AACvF,eAAO,MAAM,kCAAkC,EAAE,SAAS,sBAAsB,EAKtE,CAAC;AAkBX,wFAAwF;AACxF,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,SAAS,sBAAsB,EAAE,GAAG,WAAW,EAAE,CAMlG;AAgBD,yEAAyE;AACzE,wBAAgB,gCAAgC,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,GAAG,aAAa,CAO7F;AAED,+EAA+E;AAC/E,eAAO,MAAM,SAAS;;;;UAaW,MAAM;;;;;;YA1GnC,CAAC;;;;;;;;;YAAD,CAAC;;;UA0G4B,MAAM;;;;;;YA1GnC,CAAC;;;;;;;;;YAAD,CAAC;;EA6HH,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,wBAAwB;;;;;4FAsBnC,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,yBAAyB;;;;;4FA2CpC,CAAC"}
1
+ {"version":3,"file":"config.api.d.ts","sourceRoot":"","sources":["../../src/service/config.api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAWxB,OAAO,EAAkB,KAAK,MAAM,EAAE,KAAK,aAAa,EAA8B,MAAM,oBAAoB,CAAC;AACjH,OAAO,EAAE,KAAK,WAAW,EAAqB,MAAM,qBAAqB,CAAC;AAI1E,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;EAYvB,CAAC;AAEN,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAE/D,wEAAwE;AACxE,eAAO,MAAM,4BAA4B;;;;;;EAEvC,CAAC;AAEH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAElF,eAAO,MAAM,8BAA8B;IACvC,wEAAwE;;;;;;;;;;;;;;;;;;;EAG1E,CAAC;AAEH,MAAM,MAAM,+BAA+B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAC;AAE7F,qGAAqG;AACrG,eAAO,MAAM,+BAA+B;IARxC,wEAAwE;;;;;;;;;;;;;;;;;;;EAQC,CAAC;AAE9E,MAAM,MAAM,gCAAgC,GAAG,+BAA+B,CAAC;AAK/E,uFAAuF;AACvF,eAAO,MAAM,kCAAkC,EAAE,SAAS,sBAAsB,EAOtE,CAAC;AAkBX,wFAAwF;AACxF,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,SAAS,sBAAsB,EAAE,GAAG,WAAW,EAAE,CAMlG;AAgBD,yEAAyE;AACzE,wBAAgB,gCAAgC,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,GAAG,aAAa,CAO7F;AAED,+EAA+E;AAC/E,eAAO,MAAM,SAAS;;;;UAaW,MAAM;;;;;;YA5GnC,CAAC;;;;;;;;;YAAD,CAAC;;;UA4G4B,MAAM;;;;;;YA5GnC,CAAC;;;;;;;;;YAAD,CAAC;;EA+HH,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,wBAAwB;;;;;4FAsBnC,CAAC;AAEH;;;;GAIG;AACH,eAAO,MAAM,yBAAyB;;;;;4FA2CpC,CAAC"}
@@ -7,8 +7,8 @@ export type { GetConfigPayload, PostSystemRegistryConfigPayload, ResetSystemRegi
7
7
  export { buildEmptyServiceSlots, buildSystemRegistryConfigDetails, DEFAULT_SYSTEM_REGISTRY_SEED_SLOTS, getConfig, getConfigSchema, postSystemRegistryConfig, postSystemRegistryConfigSchema, resetSystemRegistryConfig, resetSystemRegistryConfigSchema, systemRegistrySeedSlotSchema, } from "./config.api";
8
8
  export type { Config, ConfigDetails } from "./config.interface";
9
9
  export { CategoryConfig, TARGET_SYSTEM_REGISTRY_KEY } from "./config.interface";
10
- export type { PatchServiceRuntimeInput, RegisterServiceInput, ReleasedRegistrySlot, ReleaseSystemRegistrySlotsInput, ReleaseSystemRegistrySlotsOutcome, TargetSystemRegistrySlotView, TargetSystemRegistryView, } from "./registry.service";
11
- export { assertRegistrySlotAvailable, assertRegistrySlotOwner, getTargetSystemRegistry, parseServiceSlot, parseServiceSlots, patchServiceRuntime, registerService, registerServiceAtStartup, releaseSystemRegistrySlots, resolveActiveRegistryServiceId, ServiceRegistryError, unregisterService, unregisterServiceAtShutdown, } from "./registry.service";
10
+ export type { AppendSystemRegistrySlotsInput, AppendSystemRegistrySlotsOutcome, PatchServiceRuntimeInput, RegisterServiceInput, ReleasedRegistrySlot, ReleaseSystemRegistrySlotsInput, ReleaseSystemRegistrySlotsOutcome, TargetSystemRegistrySlotView, TargetSystemRegistryView, } from "./registry.service";
11
+ export { appendSystemRegistrySlots, assertRegistrySlotAvailable, assertRegistrySlotOwner, getTargetSystemRegistry, parseServiceSlot, parseServiceSlots, patchServiceRuntime, registerService, registerServiceAtStartup, releaseSystemRegistrySlots, resolveActiveRegistryServiceId, ServiceRegistryError, unregisterService, unregisterServiceAtShutdown, } from "./registry.service";
12
12
  export type { ClaimRegistrySlotInput, RegistrySlotGuardResult, RegistrySlotRuntimeState, ServiceRegistrySession, } from "./registry-lifecycle";
13
13
  export { claimServiceRegistrySlot, createClaimedRegistrySlotRuntimeState, EMPTY_REGISTRY_SLOT_RUNTIME_STATE, registrySlotRuntimePatchFromGuardResult, runRegistrySlotGuardCheck, } from "./registry-lifecycle";
14
14
  export type { GetApiPayload, GetServicePayload, PostApiPayload, PostServicePayload } from "./service.api";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/service/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,YAAY,EACR,WAAW,EACX,eAAe,EACf,gBAAgB,EAChB,gBAAgB,GACnB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,YAAY,EACR,gBAAgB,EAChB,+BAA+B,EAC/B,gCAAgC,EAChC,sBAAsB,GACzB,MAAM,cAAc,CAAC;AACtB,OAAO,EACH,sBAAsB,EACtB,gCAAgC,EAChC,kCAAkC,EAClC,SAAS,EACT,eAAe,EACf,wBAAwB,EACxB,8BAA8B,EAC9B,yBAAyB,EACzB,+BAA+B,EAC/B,4BAA4B,GAC/B,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAChF,YAAY,EACR,wBAAwB,EACxB,oBAAoB,EACpB,oBAAoB,EACpB,+BAA+B,EAC/B,iCAAiC,EACjC,4BAA4B,EAC5B,wBAAwB,GAC3B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACH,2BAA2B,EAC3B,uBAAuB,EACvB,uBAAuB,EACvB,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,wBAAwB,EACxB,0BAA0B,EAC1B,8BAA8B,EAC9B,oBAAoB,EACpB,iBAAiB,EACjB,2BAA2B,GAC9B,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACR,sBAAsB,EACtB,uBAAuB,EACvB,wBAAwB,EACxB,sBAAsB,GACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACH,wBAAwB,EACxB,qCAAqC,EACrC,iCAAiC,EACjC,uCAAuC,EACvC,yBAAyB,GAC5B,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAC1G,OAAO,EACH,gBAAgB,EAChB,qBAAqB,EACrB,MAAM,EACN,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,OAAO,EACP,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,sBAAsB,EACtB,oBAAoB,EACpB,sBAAsB,EACtB,yBAAyB,EACzB,oBAAoB,GACvB,MAAM,eAAe,CAAC;AACvB,YAAY,EACR,GAAG,EACH,UAAU,EACV,OAAO,EACP,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,WAAW,GACd,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACjG,YAAY,EAAE,0BAA0B,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC9F,OAAO,EACH,4BAA4B,EAC5B,uBAAuB,EACvB,mBAAmB,GACtB,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/service/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,YAAY,EACR,WAAW,EACX,eAAe,EACf,gBAAgB,EAChB,gBAAgB,GACnB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAC1D,YAAY,EACR,gBAAgB,EAChB,+BAA+B,EAC/B,gCAAgC,EAChC,sBAAsB,GACzB,MAAM,cAAc,CAAC;AACtB,OAAO,EACH,sBAAsB,EACtB,gCAAgC,EAChC,kCAAkC,EAClC,SAAS,EACT,eAAe,EACf,wBAAwB,EACxB,8BAA8B,EAC9B,yBAAyB,EACzB,+BAA+B,EAC/B,4BAA4B,GAC/B,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAChF,YAAY,EACR,8BAA8B,EAC9B,gCAAgC,EAChC,wBAAwB,EACxB,oBAAoB,EACpB,oBAAoB,EACpB,+BAA+B,EAC/B,iCAAiC,EACjC,4BAA4B,EAC5B,wBAAwB,GAC3B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACH,yBAAyB,EACzB,2BAA2B,EAC3B,uBAAuB,EACvB,uBAAuB,EACvB,gBAAgB,EAChB,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,wBAAwB,EACxB,0BAA0B,EAC1B,8BAA8B,EAC9B,oBAAoB,EACpB,iBAAiB,EACjB,2BAA2B,GAC9B,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACR,sBAAsB,EACtB,uBAAuB,EACvB,wBAAwB,EACxB,sBAAsB,GACzB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACH,wBAAwB,EACxB,qCAAqC,EACrC,iCAAiC,EACjC,uCAAuC,EACvC,yBAAyB,GAC5B,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAC1G,OAAO,EACH,gBAAgB,EAChB,qBAAqB,EACrB,MAAM,EACN,YAAY,EACZ,UAAU,EACV,gBAAgB,EAChB,OAAO,EACP,aAAa,EACb,WAAW,EACX,iBAAiB,EACjB,sBAAsB,EACtB,oBAAoB,EACpB,sBAAsB,EACtB,yBAAyB,EACzB,oBAAoB,GACvB,MAAM,eAAe,CAAC;AACvB,YAAY,EACR,GAAG,EACH,UAAU,EACV,OAAO,EACP,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,WAAW,GACd,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACjG,YAAY,EAAE,0BAA0B,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC9F,OAAO,EACH,4BAA4B,EAC5B,uBAAuB,EACvB,mBAAmB,GACtB,MAAM,qBAAqB,CAAC"}
@@ -44,6 +44,19 @@ export interface ReleaseSystemRegistrySlotsOutcome {
44
44
  /** Requested `serviceValues` with no ACTIVE slot released (already EMPTY or never bound). */
45
45
  unchangedServiceValues: string[];
46
46
  }
47
+ export interface AppendSystemRegistrySlotsInput {
48
+ /** Logical service keys to declare with one new EMPTY slot each when missing. */
49
+ serviceValues: string[];
50
+ traceId?: string;
51
+ maxAttempts?: number;
52
+ }
53
+ export interface AppendSystemRegistrySlotsOutcome {
54
+ config: Config;
55
+ /** Service keys that received a new EMPTY slot this run. */
56
+ added: string[];
57
+ /** Requested keys that already had at least one declared slot — no change. */
58
+ skipped: string[];
59
+ }
47
60
  export declare class ServiceRegistryError extends Error {
48
61
  readonly code: "REGISTRY_CONFIG_NOT_FOUND" | "SERVICE_NOT_DECLARED" | "SERVICE_SLOTS_FULL" | "REGISTRY_SLOT_LOST" | "REGISTRY_UPDATE_FAILED";
49
62
  constructor(message: string, code: "REGISTRY_CONFIG_NOT_FOUND" | "SERVICE_NOT_DECLARED" | "SERVICE_SLOTS_FULL" | "REGISTRY_SLOT_LOST" | "REGISTRY_UPDATE_FAILED");
@@ -76,6 +89,12 @@ export declare function assertRegistrySlotOwner(input: {
76
89
  * Does not delete Service rows or mutate `details.runtime`.
77
90
  */
78
91
  export declare function releaseSystemRegistrySlots(input: ReleaseSystemRegistrySlotsInput): Promise<ReleaseSystemRegistrySlotsOutcome>;
92
+ /**
93
+ * Append EMPTY {@link ServiceSlot} rows for logical service keys not yet declared.
94
+ * Idempotent — skips keys that already appear in `details.objects`.
95
+ * Does not modify existing slots or release ACTIVE bindings.
96
+ */
97
+ export declare function appendSystemRegistrySlots(input: AppendSystemRegistrySlotsInput): Promise<AppendSystemRegistrySlotsOutcome>;
79
98
  /**
80
99
  * Claim one EMPTY slot for a running Service instance (`EMPTY → ACTIVE` only).
81
100
  *
@@ -1 +1 @@
1
- {"version":3,"file":"registry.service.d.ts","sourceRoot":"","sources":["../../src/service/registry.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"registry.service.d.ts","sourceRoot":"","sources":["../../src/service/registry.service.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "target-supabase-sdk",
3
- "version": "0.2.5",
3
+ "version": "0.2.7",
4
4
  "description": "Supabase client initializer and data access APIs",
5
5
  "license": "MIT",
6
6
  "author": "KyLoc20",
@@ -56,8 +56,6 @@
56
56
  "worker:trigger": "tsx scripts/run-trigger-node.ts",
57
57
  "post-command": "tsx scripts/post-command.ts",
58
58
  "post-trigger": "tsx scripts/post-trigger.ts",
59
- "seed:system-registry": "tsx scripts/seed-system-registry.ts",
60
- "reset:system-registry": "tsx scripts/reset-system-registry.ts",
61
59
  "parcel:split": "tsx scripts/parcel-split-local.ts",
62
60
  "parcel:restore": "tsx scripts/parcel-restore-local.ts",
63
61
  "dev": "rollup -c --watch",
package/src/browser.ts CHANGED
@@ -104,6 +104,8 @@ export * from "./repo/repo.interface";
104
104
  export type {
105
105
  Api,
106
106
  ApiDetails,
107
+ AppendSystemRegistrySlotsInput,
108
+ AppendSystemRegistrySlotsOutcome,
107
109
  ClaimRegistrySlotInput,
108
110
  Config,
109
111
  ConfigDetails,
@@ -136,6 +138,7 @@ export type {
136
138
  export {
137
139
  ApiMethod,
138
140
  apiDetailsSchema,
141
+ appendSystemRegistrySlots,
139
142
  assertRegistrySlotAvailable,
140
143
  assertRegistrySlotOwner,
141
144
  buildEmptyServiceSlots,
@@ -260,4 +263,3 @@ export type { PostTaskWithRetryOptions, PostTaskWithRetryResult } from "./task/t
260
263
  export { POST_TASK_DEFAULT_MAX_ATTEMPTS, postTaskWithRetry } from "./task/task-post-retry.api";
261
264
  export type { TaskStatusCount } from "./task/task-queue";
262
265
  export { countTasksByType, summarizeTaskQueue } from "./task/task-queue";
263
- export * from "./word/word.interface";
package/src/core.api.ts CHANGED
@@ -420,6 +420,15 @@ export interface PatchTargetPayload extends PostTargetPayload {
420
420
  id: string;
421
421
  }
422
422
 
423
+ export const OPTIMISTIC_LOCK_FAILED_MESSAGE =
424
+ "[updateTargetDetails] Optimistic lock failed: target no longer matches expected state.";
425
+
426
+ /**
427
+ * @deprecated Use {@link updateTarget} (narrow RMW + optimistic lock) or {@link updateTargetDetails}.
428
+ *
429
+ * Full-row rewrite of create-shaped fields. Forces callers to resupply name/value/category,
430
+ * has no optimistic lock, and can accidentally mutate identity columns. Unused in-tree.
431
+ */
423
432
  export const patchTarget = async ({ id, ...restPayload }: PatchTargetPayload) => {
424
433
  const { data: currentData, error: fetchError } = await supabase.client
425
434
  .from("target")
@@ -448,69 +457,91 @@ export const patchTarget = async ({ id, ...restPayload }: PatchTargetPayload) =>
448
457
  return generateResponse.success<Target>(data as Target);
449
458
  };
450
459
 
460
+ /** Mutable Target columns allowed by {@link updateTarget} (identity fields excluded). */
461
+ export interface UpdateTargetRowSnapshot<D> {
462
+ tagList: string[];
463
+ details: D;
464
+ extra?: string;
465
+ }
466
+
451
467
  /**
452
- * Read-modify-write `target.details` with optional DB-level optimistic locking on UPDATE.
468
+ * Narrow patch returned by `updateTarget` updateFn.
469
+ * Omitted keys are left unchanged on the row.
470
+ */
471
+ export type UpdateTargetPatch<D> = {
472
+ tagList?: string[];
473
+ details?: D;
474
+ extra?: string;
475
+ };
476
+
477
+ /**
478
+ * Read-modify-write mutable Target columns (`tagList` / `details` / `extra`) with optional
479
+ * DB-level optimistic locking. Does not write `name` / `value` / `category`.
453
480
  *
454
- * Do not use application-layer pre-update validators (e.g. checking state after SELECT then
455
- * UPDATE with only `id`). That pattern is not atomic and loses under concurrency. Pass expected
456
- * row conditions via `optimisticLockFilterList` so they are applied on the UPDATE statement.
481
+ * Prefer this when the update may touch `tagList` (and optionally `details`/`extra`) in one UPDATE.
482
+ * For details-only flows, {@link updateTargetDetails} remains the thinner API.
457
483
  */
458
- export interface UpdateTargetDetailsParams<D> {
484
+ export interface UpdateTargetParams<D> {
459
485
  /** Target row id. */
460
486
  id: string;
461
487
  /**
462
- * Computes new details from the row fetched immediately before UPDATE.
463
- * Runs after SELECT; the write still relies on `optimisticLockFilterList` for atomic guards.
488
+ * Builds a narrow patch from the row fetched immediately before UPDATE.
489
+ * Only returned keys are written; omit a key to leave that column unchanged.
464
490
  */
465
- updateFn: (existing: D) => D;
466
- /**
467
- * Optional `target.extra` derived from existing details (written together with details).
468
- */
469
- updateExtraFn?: (existing: D) => string;
491
+ updateFn: (existing: UpdateTargetRowSnapshot<D>) => UpdateTargetPatch<D>;
470
492
  /**
471
493
  * Optimistic lock conditions applied on UPDATE (not on the prior SELECT).
472
- *
473
- * Replaces the removed `beforeUpdateValidator`: validators ran in app code between read and
474
- * write and could not prevent concurrent overwrites. These filters become part of the UPDATE
475
- * WHERE clause (via `applyQueryFilters`), e.g. `{ field: "details->>status", operator: "eq", value: "TODO" }`.
476
- *
477
- * If no row matches after UPDATE, throws "Optimistic lock failed". Empty array = update by id only.
494
+ * Same semantics as {@link UpdateTargetDetailsParams.optimisticLockFilterList}.
478
495
  */
479
496
  optimisticLockFilterList?: QueryFilter[];
480
497
  }
481
498
 
482
- export const updateTargetDetails = async <T, D>({
499
+ export const updateTarget = async <T, D>({
483
500
  id,
484
501
  updateFn,
485
- updateExtraFn,
486
502
  optimisticLockFilterList = [],
487
- }: UpdateTargetDetailsParams<D>) => {
503
+ }: UpdateTargetParams<D>) => {
488
504
  const { data: currentData, error: fetchError } = await supabase.client
489
505
  .from("target")
490
- .select("details")
506
+ .select("tagList, details, extra")
491
507
  .eq("id", id)
492
508
  .single();
493
509
 
494
510
  if (fetchError) {
495
- handleSupabaseError("updateTargetDetails", fetchError, "Failed to fetch target.");
511
+ handleSupabaseError("updateTarget", fetchError, "Failed to fetch target.");
496
512
  }
497
513
  if (!currentData) {
498
- const msg = `[updateTargetDetails] Target NOT exists: ${id}`;
514
+ const msg = `[updateTarget] Target NOT exists: ${id}`;
499
515
  console.error(msg);
500
516
  throw new Error(msg);
501
517
  }
502
518
 
503
- const currentDetails = currentData.details as D;
504
- const updatedDetails: D = updateFn(currentDetails);
505
- const updated =
506
- updateExtraFn == null
507
- ? {
508
- details: updatedDetails,
509
- }
510
- : {
511
- details: updatedDetails,
512
- extra: updateExtraFn(currentDetails),
513
- };
519
+ const existing: UpdateTargetRowSnapshot<D> = {
520
+ tagList: Array.isArray(currentData.tagList) ? (currentData.tagList as string[]) : [],
521
+ details: currentData.details as D,
522
+ extra: typeof currentData.extra === "string" ? currentData.extra : undefined,
523
+ };
524
+
525
+ const patch = updateFn(existing);
526
+ const updated: {
527
+ tagList?: string[];
528
+ details?: D;
529
+ extra?: string;
530
+ } = {};
531
+
532
+ if (patch.tagList !== undefined) {
533
+ updated.tagList = patch.tagList;
534
+ }
535
+ if (patch.details !== undefined) {
536
+ updated.details = patch.details;
537
+ }
538
+ if (patch.extra !== undefined) {
539
+ updated.extra = patch.extra;
540
+ }
541
+
542
+ if (Object.keys(updated).length === 0) {
543
+ throw new Error("[updateTarget] updateFn returned an empty patch");
544
+ }
514
545
 
515
546
  const updateQuery = applyQueryFilters(
516
547
  supabase.client.from("target").update(updated).eq("id", id),
@@ -520,21 +551,73 @@ export const updateTargetDetails = async <T, D>({
520
551
  const { data, error } = await updateQuery.select().maybeSingle();
521
552
 
522
553
  if (error) {
523
- handleSupabaseError("updateTargetDetails", error, "Failed to update target details.");
554
+ handleSupabaseError("updateTarget", error, "Failed to update target.");
524
555
  }
525
556
  if (!data) {
526
557
  const msg =
527
558
  optimisticLockFilterList.length > 0
528
559
  ? OPTIMISTIC_LOCK_FAILED_MESSAGE
529
- : "[updateTargetDetails] Target not found or was deleted.";
560
+ : "[updateTarget] Target not found or was deleted.";
530
561
  throw new Error(msg);
531
562
  }
532
563
 
533
564
  return data as T;
534
565
  };
535
566
 
536
- export const OPTIMISTIC_LOCK_FAILED_MESSAGE =
537
- "[updateTargetDetails] Optimistic lock failed: target no longer matches expected state.";
567
+ /**
568
+ * Read-modify-write `target.details` with optional DB-level optimistic locking on UPDATE.
569
+ *
570
+ * Do not use application-layer pre-update validators (e.g. checking state after SELECT then
571
+ * UPDATE with only `id`). That pattern is not atomic and loses under concurrency. Pass expected
572
+ * row conditions via `optimisticLockFilterList` so they are applied on the UPDATE statement.
573
+ *
574
+ * For updates that also need `tagList`, use {@link updateTarget}.
575
+ */
576
+ export interface UpdateTargetDetailsParams<D> {
577
+ /** Target row id. */
578
+ id: string;
579
+ /**
580
+ * Computes new details from the row fetched immediately before UPDATE.
581
+ * Runs after SELECT; the write still relies on `optimisticLockFilterList` for atomic guards.
582
+ */
583
+ updateFn: (existing: D) => D;
584
+ /**
585
+ * Optional `target.extra` derived from existing details (written together with details).
586
+ */
587
+ updateExtraFn?: (existing: D) => string;
588
+ /**
589
+ * Optimistic lock conditions applied on UPDATE (not on the prior SELECT).
590
+ *
591
+ * Replaces the removed `beforeUpdateValidator`: validators ran in app code between read and
592
+ * write and could not prevent concurrent overwrites. These filters become part of the UPDATE
593
+ * WHERE clause (via `applyQueryFilters`), e.g. `{ field: "details->>status", operator: "eq", value: "TODO" }`.
594
+ *
595
+ * If no row matches after UPDATE, throws "Optimistic lock failed". Empty array = update by id only.
596
+ */
597
+ optimisticLockFilterList?: QueryFilter[];
598
+ }
599
+
600
+ export const updateTargetDetails = async <T, D>({
601
+ id,
602
+ updateFn,
603
+ updateExtraFn,
604
+ optimisticLockFilterList = [],
605
+ }: UpdateTargetDetailsParams<D>) => {
606
+ return updateTarget<T, D>({
607
+ id,
608
+ optimisticLockFilterList,
609
+ updateFn: (existing) => {
610
+ const nextDetails = updateFn(existing.details);
611
+ if (updateExtraFn == null) {
612
+ return { details: nextDetails };
613
+ }
614
+ return {
615
+ details: nextDetails,
616
+ extra: updateExtraFn(existing.details),
617
+ };
618
+ },
619
+ });
620
+ };
538
621
 
539
622
  export const OPTIMISTIC_LOCK_ERROR_CODE = "OPTIMISTIC_LOCK" as const;
540
623
 
@@ -59,6 +59,8 @@ export const DEFAULT_SYSTEM_REGISTRY_SEED_SLOTS: readonly SystemRegistrySeedSlot
59
59
  { serviceValue: "watch-service" },
60
60
  { serviceValue: "download-service" },
61
61
  { serviceValue: "storage-service" },
62
+ { serviceValue: "gc-service" },
63
+ { serviceValue: "upload-service" },
62
64
  ] as const;
63
65
 
64
66
  const configCategoryFilter: QueryFilter = {
@@ -30,6 +30,8 @@ export {
30
30
  export type { Config, ConfigDetails } from "./config.interface";
31
31
  export { CategoryConfig, TARGET_SYSTEM_REGISTRY_KEY } from "./config.interface";
32
32
  export type {
33
+ AppendSystemRegistrySlotsInput,
34
+ AppendSystemRegistrySlotsOutcome,
33
35
  PatchServiceRuntimeInput,
34
36
  RegisterServiceInput,
35
37
  ReleasedRegistrySlot,
@@ -39,6 +41,7 @@ export type {
39
41
  TargetSystemRegistryView,
40
42
  } from "./registry.service";
41
43
  export {
44
+ appendSystemRegistrySlots,
42
45
  assertRegistrySlotAvailable,
43
46
  assertRegistrySlotOwner,
44
47
  getTargetSystemRegistry,
@@ -71,6 +71,21 @@ export interface ReleaseSystemRegistrySlotsOutcome {
71
71
  unchangedServiceValues: string[];
72
72
  }
73
73
 
74
+ export interface AppendSystemRegistrySlotsInput {
75
+ /** Logical service keys to declare with one new EMPTY slot each when missing. */
76
+ serviceValues: string[];
77
+ traceId?: string;
78
+ maxAttempts?: number;
79
+ }
80
+
81
+ export interface AppendSystemRegistrySlotsOutcome {
82
+ config: Config;
83
+ /** Service keys that received a new EMPTY slot this run. */
84
+ added: string[];
85
+ /** Requested keys that already had at least one declared slot — no change. */
86
+ skipped: string[];
87
+ }
88
+
74
89
  export class ServiceRegistryError extends Error {
75
90
  constructor(
76
91
  message: string,
@@ -460,6 +475,102 @@ export async function releaseSystemRegistrySlots(
460
475
  );
461
476
  }
462
477
 
478
+ /**
479
+ * Append EMPTY {@link ServiceSlot} rows for logical service keys not yet declared.
480
+ * Idempotent — skips keys that already appear in `details.objects`.
481
+ * Does not modify existing slots or release ACTIVE bindings.
482
+ */
483
+ export async function appendSystemRegistrySlots(
484
+ input: AppendSystemRegistrySlotsInput,
485
+ ): Promise<AppendSystemRegistrySlotsOutcome> {
486
+ const serviceValues = [
487
+ ...new Set(input.serviceValues.map((value) => value.trim()).filter((value) => value !== "")),
488
+ ];
489
+ if (serviceValues.length === 0) {
490
+ throw new Error("[appendSystemRegistrySlots] serviceValues must not be empty");
491
+ }
492
+
493
+ const maxAttempts = input.maxAttempts ?? DEFAULT_REGISTER_RETRY_ATTEMPTS;
494
+ const logger = createLogger({
495
+ module: "appendSystemRegistrySlots",
496
+ traceId: input.traceId,
497
+ labels: { serviceValues: serviceValues.join(",") },
498
+ });
499
+
500
+ logger.info("开始追加 registry 槽位声明", {
501
+ topic: LOG_TOPIC_REGISTRY,
502
+ data: { serviceValues },
503
+ });
504
+
505
+ for (let attempt = 1; attempt <= maxAttempts; attempt += 1) {
506
+ try {
507
+ const config = await loadSystemRegistryConfig();
508
+ const revision = parseRegistryRevision(config.details.meta);
509
+ const slots = parseServiceSlots(config);
510
+
511
+ const added: string[] = [];
512
+ const skipped: string[] = [];
513
+ const nextSlots = [...slots];
514
+
515
+ for (const serviceValue of serviceValues) {
516
+ if (isServiceValueDeclared(nextSlots, serviceValue)) {
517
+ skipped.push(serviceValue);
518
+ continue;
519
+ }
520
+ nextSlots.push({
521
+ serviceValue,
522
+ serviceId: null,
523
+ status: ServiceSlotStatus.EMPTY,
524
+ });
525
+ added.push(serviceValue);
526
+ }
527
+
528
+ if (added.length === 0) {
529
+ logger.info("所有 service 已声明 — 无需追加", {
530
+ topic: LOG_TOPIC_REGISTRY,
531
+ data: { serviceValues, skipped },
532
+ });
533
+ return { config, added, skipped: serviceValues };
534
+ }
535
+
536
+ await persistSlotClaim({
537
+ configId: config.id,
538
+ revision,
539
+ slots: nextSlots,
540
+ });
541
+
542
+ const updated = await loadSystemRegistryConfig();
543
+ logger.info("registry 槽位追加成功", {
544
+ topic: LOG_TOPIC_REGISTRY,
545
+ data: { added, skipped, attempt, revision: revision + 1 },
546
+ });
547
+
548
+ return { config: updated, added, skipped };
549
+ } catch (error) {
550
+ if (isOptimisticLockError(error) && attempt < maxAttempts) {
551
+ logger.warn("registry 乐观锁冲突,重试", {
552
+ topic: LOG_TOPIC_REGISTRY,
553
+ data: { serviceValues, attempt, maxAttempts },
554
+ });
555
+ await sleep(50 * attempt);
556
+ continue;
557
+ }
558
+
559
+ const message = error instanceof Error ? error.message : String(error);
560
+ logger.error("registry 槽位追加失败", {
561
+ topic: LOG_TOPIC_REGISTRY,
562
+ data: { serviceValues, attempt, message },
563
+ });
564
+ throw new ServiceRegistryError(message, "REGISTRY_UPDATE_FAILED");
565
+ }
566
+ }
567
+
568
+ throw new ServiceRegistryError(
569
+ "[appendSystemRegistrySlots] Optimistic lock retries exhausted",
570
+ "REGISTRY_UPDATE_FAILED",
571
+ );
572
+ }
573
+
463
574
  /**
464
575
  * Claim one EMPTY slot for a running Service instance (`EMPTY → ACTIVE` only).
465
576
  *