target-supabase-sdk 0.2.18 → 0.2.20

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 (52) hide show
  1. package/README.md +28 -0
  2. package/dist/browser.d.ts +4 -0
  3. package/dist/browser.d.ts.map +1 -1
  4. package/dist/browser.js +1 -1
  5. package/dist/chunks/{task-queue-DufG7PlX.js → task-queue-CqmIVCBi.js} +165 -2
  6. package/dist/chunks/task-queue-CqmIVCBi.js.map +1 -0
  7. package/dist/node.d.ts +2 -0
  8. package/dist/node.d.ts.map +1 -1
  9. package/dist/node.js +251 -10
  10. package/dist/node.js.map +1 -1
  11. package/dist/shared/feed/feed.build.d.ts +33 -0
  12. package/dist/shared/feed/feed.build.d.ts.map +1 -0
  13. package/dist/shared/feed/feed.interface.d.ts +35 -0
  14. package/dist/shared/feed/feed.interface.d.ts.map +1 -0
  15. package/dist/shared/feed/feed.name.d.ts +8 -0
  16. package/dist/shared/feed/feed.name.d.ts.map +1 -0
  17. package/dist/shared/feed/feed.query.d.ts +8 -0
  18. package/dist/shared/feed/feed.query.d.ts.map +1 -0
  19. package/dist/shared/feed/index.d.ts +13 -0
  20. package/dist/shared/feed/index.d.ts.map +1 -0
  21. package/dist/shared/feed/node/feed.access.d.ts +34 -0
  22. package/dist/shared/feed/node/feed.access.d.ts.map +1 -0
  23. package/dist/shared/feed/node/feed.service.d.ts +23 -0
  24. package/dist/shared/feed/node/feed.service.d.ts.map +1 -0
  25. package/dist/shared/feed/node/index.d.ts +11 -0
  26. package/dist/shared/feed/node/index.d.ts.map +1 -0
  27. package/dist/shared/review/index.d.ts +7 -0
  28. package/dist/shared/review/index.d.ts.map +1 -0
  29. package/dist/shared/review/review.build.d.ts +19 -0
  30. package/dist/shared/review/review.build.d.ts.map +1 -0
  31. package/dist/shared/review/review.interface.d.ts +14 -0
  32. package/dist/shared/review/review.interface.d.ts.map +1 -0
  33. package/dist/shared/review/review.query.d.ts +7 -0
  34. package/dist/shared/review/review.query.d.ts.map +1 -0
  35. package/package.json +1 -1
  36. package/src/browser.ts +10 -1
  37. package/src/node.ts +14 -0
  38. package/src/shared/feed/README.md +163 -0
  39. package/src/shared/feed/feed.build.ts +101 -0
  40. package/src/shared/feed/feed.interface.ts +50 -0
  41. package/src/shared/feed/feed.name.ts +20 -0
  42. package/src/shared/feed/feed.query.ts +13 -0
  43. package/src/shared/feed/index.ts +13 -0
  44. package/src/shared/feed/node/feed.access.ts +134 -0
  45. package/src/shared/feed/node/feed.service.ts +183 -0
  46. package/src/shared/feed/node/index.ts +11 -0
  47. package/src/shared/review/README.md +128 -0
  48. package/src/shared/review/index.ts +7 -0
  49. package/src/shared/review/review.build.ts +39 -0
  50. package/src/shared/review/review.interface.ts +19 -0
  51. package/src/shared/review/review.query.ts +16 -0
  52. package/dist/chunks/task-queue-DufG7PlX.js.map +0 -1
package/README.md CHANGED
@@ -266,6 +266,34 @@ await registerMediaLink({
266
266
 
267
267
  Details: `src/shared/media/README.md` and `.cursor/skills/media-link/SKILL.md`.
268
268
 
269
+ ### Feed Links (`feed.image` / `feed.audio` / `feed.video` / `feed.image-list`)
270
+
271
+ Convention on `Link` (same `category=link`): `value === details.loaderKey`. Platform key `name = {platformName}.{feedKey}`. System lifecycle tags (`.public`, `.local`, `.oss`) use a leading dot. Draft on the default entry; **ingest** `.public` → `.local`/`.oss` on `/node` via `registerFeed` (locator validation + optimistic lock).
272
+
273
+ ```typescript
274
+ import { buildFeedLinkDraft } from "target-supabase-sdk";
275
+ import { registerFeed } from "target-supabase-sdk/node";
276
+
277
+ const draft = buildFeedLinkDraft({
278
+ value: "feed.video",
279
+ platformName: "bilibili",
280
+ feedKey: "12345",
281
+ source: ".public",
282
+ locator: "https://example.com/feed/12345",
283
+ tagList: ["creator-x"],
284
+ });
285
+
286
+ await registerFeed({
287
+ id: feedRowId,
288
+ source: ".local",
289
+ storageProvider: process.env.LOCAL_STORAGE_PROVIDER!,
290
+ locator: "D:\\\\data\\\\bilibili.12345.mp4",
291
+ localStorageProvider: process.env.LOCAL_STORAGE_PROVIDER!,
292
+ });
293
+ ```
294
+
295
+ Details: `src/shared/feed/README.md` and `.cursor/skills/feed-link/SKILL.md`.
296
+
269
297
  ### PostgREST filter helpers (0.2.15+)
270
298
 
271
299
  When using `supabase.client` directly (e.g. `ilike` search or `text[]` tag filters):
package/dist/browser.d.ts CHANGED
@@ -40,12 +40,16 @@ export * from "./repo/repo.api";
40
40
  export * from "./repo/repo.interface";
41
41
  export type { Api, ApiDetails, AppendSystemRegistryEmptySlotsInput, AppendSystemRegistryEmptySlotsOutcome, ClaimRegistrySlotInput, GetApiPayload, GetServicePayload, PatchServiceRuntimeInput, PostApiPayload, PostServiceInstanceOptions, PostServicePayload, PostSystemRegistryConfigPayload, RegisterServiceInput, RegistrySlotGuardResult, RegistrySlotRuntimeState, ReleasedRegistrySlot, ReleaseSystemRegistrySlotsInput, ReleaseSystemRegistrySlotsOutcome, ResetSystemRegistryConfigPayload, Service, ServiceBootstrapResult, ServiceDetails, ServiceNodeSnapshot, ServiceRegistrySession, ServiceRuntime, ServiceSlot, SystemRegistrySeedSlot, TargetSystemRegistrySlotView, TargetSystemRegistryView, } from "./service/index";
42
42
  export { ApiMethod, apiDetailsSchema, appendSystemRegistryEmptySlots, assertRegistrySlotAvailable, assertRegistrySlotOwner, buildEmptyServiceSlots, buildSystemRegistryConfigDetails, CategoryService, claimServiceRegistrySlot, createActiveServiceLifecycle, createClaimedRegistrySlotRuntimeState, DEFAULT_SYSTEM_REGISTRY_SEED_SLOTS, defaultL3ServiceDetails, EMPTY_REGISTRY_SLOT_RUNTIME_STATE, fieldDefinitionSchema, getApi, getApiSchema, getService, getServiceSchema, getTargetSystemRegistry, parseServiceSlot, parseServiceSlots, patchServiceRuntime, postApi, postApiSchema, postService, postServiceInstance, postServiceSchema, postSystemRegistryConfig, postSystemRegistryConfigSchema, registerService, registerServiceAtStartup, registrySlotRuntimePatchFromGuardResult, releaseSystemRegistrySlots, releaseSystemRegistrySlotsByServiceId, resetSystemRegistryConfig, resetSystemRegistryConfigSchema, resolveActiveRegistryServiceId, runRegistrySlotGuardCheck, ServiceLifecycleStatus, ServiceRegistryError, ServiceSlotStatus, schemaDefinitionSchema, serviceDetailsSchema, serviceLifecycleSchema, serviceNodeSnapshotSchema, serviceRuntimeSchema, systemRegistrySeedSlotSchema, TARGET_SYSTEM_REGISTRY_KEY, unregisterService, unregisterServiceAtShutdown, } from "./service/index";
43
+ export type { BuildFeedLinkDraftInput, FeedOriginal, FeedSource, FeedValue } from "./shared/feed";
44
+ export { buildFeedLinkDraft, buildFeedLinkName, FEED_VALUES, feedLinkDedupFilters, isFeedValue, } from "./shared/feed";
43
45
  export type { FetchInitFactory, FetchRetryOptions } from "./shared/http/fetch-retry";
44
46
  export { fetchBinaryWithRetry, fetchWithRetry, isRetryableHttpStatus, requestHasBody, } from "./shared/http/fetch-retry";
45
47
  export type { CreateLoggerInput, DecodedLogBatch, FlatLogEntry, LogEntry, LoggerWithScope, LogScope, LogScopePatch, } from "./shared/log";
46
48
  export { createLogger, decodeLogBatch, decodeLogBatchList, flattenLogBatch, flattenLogBatches, isLogBatchList, isLogEntry, LOG_BATCH_LOADER_KEY, LOG_MIN_LEVEL_ENV_KEY, LOG_PERSIST_LOADER_KEY, LogLevel, logManager, logMinLevelFromEnv, parseLogBatchMeta, resolveLogMinLevel, } from "./shared/log";
47
49
  export type { BuildMediaLinkDraftInput, MediaOriginal, MediaValue } from "./shared/media";
48
50
  export { buildMediaLinkDraft, buildMediaNameFromLocator, guessMediaMime, isMediaValue, MEDIA_CONTENT_HASH_ALGORITHM, MEDIA_CONTENT_HASH_PREFIX_LENGTH, MEDIA_VALUES, mediaLinkDedupFilters, } from "./shared/media";
51
+ export type { BuildReviewLinkDraftInput } from "./shared/review";
52
+ export { buildReviewLinkDraft, reviewLinksForTargetFilters } from "./shared/review";
49
53
  export { isHttpUrl, resolveFetchUrl } from "./shared/utils/fetch-url";
50
54
  export { getValueAtPath } from "./shared/utils/get-value-at-path";
51
55
  export type { ClassifiedNetworkError, FormatNetworkErrorOptions, NetworkErrorKind, } from "./shared/utils/network-error";
@@ -1 +1 @@
1
- {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"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"}
package/dist/browser.js CHANGED
@@ -1,4 +1,4 @@
1
- export { A as ApiMethod, C as CategoryConfig, a as CategoryExtraction, b as CategoryLink, c as CategoryNode, d as CategoryParcel, e as CategoryRepo, f as CategoryService, g as CategoryTask, D as DEFAULT_SYSTEM_REGISTRY_SEED_SLOTS, E as EMPTY_REGISTRY_SLOT_RUNTIME_STATE, L as LINK_MANIFEST_VERSION, h as LIST_MANIFEST_VERSION, M as MEDIA_CONTENT_HASH_ALGORITHM, i as MEDIA_CONTENT_HASH_PREFIX_LENGTH, j as MEDIA_VALUES, N as NodeStatus, P as POST_TASK_DEFAULT_MAX_ATTEMPTS, k as ParcelManager, l as PostLinkValidator, R as ResultCode, S as ServiceLifecycleStatus, m as ServiceRegistryError, n as ServiceSlotStatus, T as TARGET_SYSTEM_REGISTRY_KEY, o as TASK_REPO_USAGE, p as TaskStatus, q as TaskStatusAction, r as apiDetailsSchema, s as appendSystemRegistryEmptySlots, t as assertRegistrySlotAvailable, u as assertRegistrySlotOwner, v as buildEmptyServiceSlots, w as buildLinkTargetDraft, x as buildListTargetDraft, y as buildMediaLinkDraft, z as buildMediaNameFromLocator, B as buildSystemRegistryConfigDetails, F as claimServiceRegistrySlot, G as classifyNetworkError, H as countTasksByType, I as createActiveServiceLifecycle, J as createClaimedRegistrySlotRuntimeState, K as createStorageProviderRegistry, O as createUploadTracker, Q as decodeLogBatch, U as decodeLogBatchList, V as defaultL3ServiceDetails, W as deleteParcel, X as deleteParcelSchema, Y as escapeIlikePattern, Z as evaluateBusyNodeLiveness, _ as fetchBinaryWithRetry, $ as fetchWithRetry, a0 as fieldDefinitionSchema, a1 as flattenLogBatch, a2 as flattenLogBatches, a3 as formatNetworkError, a4 as getApi, a5 as getApiSchema, a6 as getConfig, a7 as getConfigSchema, a8 as getExtraction, a9 as getExtractionSchema, aa as getParcel, ab as getParcelSchema, ac as getScanRemoteRepoValues, ad as getScanRemoteRepoValuesSchema, ae as getService, af as getServiceSchema, ag as getTargetSystemRegistry, ah as getValueAtPath, ai as guessMediaMime, aj as installChunkFetchRegistry, ak as isHttpUrl, al as isLocalFilesystemPath, am as isLogBatchList, an as isLogEntry, ao as isMediaValue, ap as isOpaqueChunkUrl, aq as isRetryableHttpStatus, ar as linkTargetDraftBuildInputSchema, as as mediaLinkDedupFilters, at as parcelDetailsSchema, au as parseLogBatchMeta, av as parseProviderPrefixedUrl, aw as parseServiceSlot, ax as parseServiceSlots, ay as patchChangeNodeStatus, az as patchChangeNodeStatusSchema, aA as patchChangeTaskStatus, aB as patchChangeTaskStatusSchema, aC as patchClaimTask, aD as patchClaimTaskSchema, aE as patchExtractionObjects, aF as patchExtractionObjectsSchema, aG as patchNodeHeartBeat, aH as patchNodeHeartBeatSchema, aI as patchServiceRuntime, aJ as patchStopNode, aK as patchStopNodeSchema, aL as patchTaskProgress, aM as patchTaskProgressSchema, aN as postApi, aO as postApiSchema, aP as postExtraction, aQ as postExtractionSchema, aR as postLinkCreate, aS as postParcel, aT as postParcelSchema, aU as postRegisterNode, aV as postRegisterNodeSchema, aW as postService, aX as postServiceInstance, aY as postServiceSchema, aZ as postSystemRegistryConfig, a_ as postSystemRegistryConfigSchema, a$ as postTask, b0 as postTaskSchema, b1 as postTaskWithRetry, b2 as publishParcel, b3 as registerProviderChunkResolver, b4 as registerService, b5 as registerServiceAtStartup, b6 as registrySlotRuntimePatchFromGuardResult, b7 as releaseSystemRegistrySlots, b8 as releaseSystemRegistrySlotsByServiceId, b9 as requestHasBody, ba as resetSystemRegistryConfig, bb as resetSystemRegistryConfigSchema, bc as resolveActiveRegistryServiceId, bd as resolveFetchUrl, be as restoreParcel, bf as restoreParcelById, bg as runRegistrySlotGuardCheck, bh as sanitizeFileName, bi as sanitizeParcelFileName, bj as scanExtractionList, bk as scanExtractionListSchema, bl as schemaDefinitionSchema, bm as serviceDetailsSchema, bn as serviceLifecycleSchema, bo as serviceNodeSnapshotSchema, bp as serviceRuntimeSchema, bq as sha256Hex, br as summarizeTaskQueue, bs as systemRegistrySeedSlotSchema, bt as toPostgrestTextArrayLiteral, bu as unregisterService, bv as unregisterServiceAtShutdown } from './chunks/task-queue-DufG7PlX.js';
1
+ export { A as ApiMethod, C as CategoryConfig, a as CategoryExtraction, b as CategoryLink, c as CategoryNode, d as CategoryParcel, e as CategoryRepo, f as CategoryService, g as CategoryTask, D as DEFAULT_SYSTEM_REGISTRY_SEED_SLOTS, E as EMPTY_REGISTRY_SLOT_RUNTIME_STATE, F as FEED_VALUES, L as LINK_MANIFEST_VERSION, h as LIST_MANIFEST_VERSION, M as MEDIA_CONTENT_HASH_ALGORITHM, i as MEDIA_CONTENT_HASH_PREFIX_LENGTH, j as MEDIA_VALUES, N as NodeStatus, P as POST_TASK_DEFAULT_MAX_ATTEMPTS, k as ParcelManager, l as PostLinkValidator, R as ResultCode, S as ServiceLifecycleStatus, m as ServiceRegistryError, n as ServiceSlotStatus, T as TARGET_SYSTEM_REGISTRY_KEY, o as TASK_REPO_USAGE, p as TaskStatus, q as TaskStatusAction, r as apiDetailsSchema, s as appendSystemRegistryEmptySlots, t as assertRegistrySlotAvailable, u as assertRegistrySlotOwner, v as buildEmptyServiceSlots, w as buildFeedLinkDraft, x as buildFeedLinkName, y as buildLinkTargetDraft, z as buildListTargetDraft, B as buildMediaLinkDraft, G as buildMediaNameFromLocator, H as buildReviewLinkDraft, I as buildSystemRegistryConfigDetails, J as claimServiceRegistrySlot, K as classifyNetworkError, O as countTasksByType, Q as createActiveServiceLifecycle, U as createClaimedRegistrySlotRuntimeState, V as createStorageProviderRegistry, W as createUploadTracker, X as decodeLogBatch, Y as decodeLogBatchList, Z as defaultL3ServiceDetails, _ as deleteParcel, $ as deleteParcelSchema, a0 as escapeIlikePattern, a1 as evaluateBusyNodeLiveness, a2 as feedLinkDedupFilters, a3 as fetchBinaryWithRetry, a4 as fetchWithRetry, a5 as fieldDefinitionSchema, a6 as flattenLogBatch, a7 as flattenLogBatches, a8 as formatNetworkError, a9 as getApi, aa as getApiSchema, ab as getConfig, ac as getConfigSchema, ad as getExtraction, ae as getExtractionSchema, af as getParcel, ag as getParcelSchema, ah as getScanRemoteRepoValues, ai as getScanRemoteRepoValuesSchema, aj as getService, ak as getServiceSchema, al as getTargetSystemRegistry, am as getValueAtPath, an as guessMediaMime, ao as installChunkFetchRegistry, ap as isFeedValue, aq as isHttpUrl, ar as isLocalFilesystemPath, as as isLogBatchList, at as isLogEntry, au as isMediaValue, av as isOpaqueChunkUrl, aw as isRetryableHttpStatus, ax as linkTargetDraftBuildInputSchema, ay as mediaLinkDedupFilters, az as parcelDetailsSchema, aA as parseLogBatchMeta, aB as parseProviderPrefixedUrl, aC as parseServiceSlot, aD as parseServiceSlots, aE as patchChangeNodeStatus, aF as patchChangeNodeStatusSchema, aG as patchChangeTaskStatus, aH as patchChangeTaskStatusSchema, aI as patchClaimTask, aJ as patchClaimTaskSchema, aK as patchExtractionObjects, aL as patchExtractionObjectsSchema, aM as patchNodeHeartBeat, aN as patchNodeHeartBeatSchema, aO as patchServiceRuntime, aP as patchStopNode, aQ as patchStopNodeSchema, aR as patchTaskProgress, aS as patchTaskProgressSchema, aT as postApi, aU as postApiSchema, aV as postExtraction, aW as postExtractionSchema, aX as postLinkCreate, aY as postParcel, aZ as postParcelSchema, a_ as postRegisterNode, a$ as postRegisterNodeSchema, b0 as postService, b1 as postServiceInstance, b2 as postServiceSchema, b3 as postSystemRegistryConfig, b4 as postSystemRegistryConfigSchema, b5 as postTask, b6 as postTaskSchema, b7 as postTaskWithRetry, b8 as publishParcel, b9 as registerProviderChunkResolver, ba as registerService, bb as registerServiceAtStartup, bc as registrySlotRuntimePatchFromGuardResult, bd as releaseSystemRegistrySlots, be as releaseSystemRegistrySlotsByServiceId, bf as requestHasBody, bg as resetSystemRegistryConfig, bh as resetSystemRegistryConfigSchema, bi as resolveActiveRegistryServiceId, bj as resolveFetchUrl, bk as restoreParcel, bl as restoreParcelById, bm as reviewLinksForTargetFilters, bn as runRegistrySlotGuardCheck, bo as sanitizeFileName, bp as sanitizeParcelFileName, bq as scanExtractionList, br as scanExtractionListSchema, bs as schemaDefinitionSchema, bt as serviceDetailsSchema, bu as serviceLifecycleSchema, bv as serviceNodeSnapshotSchema, bw as serviceRuntimeSchema, bx as sha256Hex, by as summarizeTaskQueue, bz as systemRegistrySeedSlotSchema, bA as toPostgrestTextArrayLiteral, bB as unregisterService, bC as unregisterServiceAtShutdown } from './chunks/task-queue-CqmIVCBi.js';
2
2
  export { B as BaseValidator, C as CREATE_TARGET_ALREADY_EXISTS_MESSAGE, a as CategoryList, L as LOG_BATCH_LOADER_KEY, b as LOG_MIN_LEVEL_ENV_KEY, c as LOG_PERSIST_LOADER_KEY, d as LogLevel, M as MAX_POLL_TARGET_LIST_SIZE, e as MAX_TARGET_LIST_PAGE_SIZE, O as OPTIMISTIC_LOCK_ERROR_CODE, f as OPTIMISTIC_LOCK_FAILED_MESSAGE, P as PostListValidator, S as StatusCode, U as UPDATE_TARGET_NOT_FOUND_MESSAGE, g as createLogger, h as createTarget, i as deleteTarget, j as formatZodError, k as generateResponse, l as getPossibleTarget, m as getTarget, n as getTargetList, o as getTargetTotalCount, p as handleSupabaseError, q as isCreateTargetAlreadyExistsError, r as isDevEnvironment, s as isOptimisticLockError, t as isOptimisticLockResponse, u as logDev, v as logDevGroup, w as logManager, x as logMinLevelFromEnv, y as patchTarget, z as pollTargetList, A as postListCreate, D as postLogListCreate, E as postTarget, F as postTargetPayloadSchema, G as queryFilterSchema, H as resolveLogMinLevel, I as safeParseWithSchema, J as scanTargetList, K as supabase, N as targetDraftSchema, Q as updateTarget, R as updateTargetDetails, T as validateWith, V as validateWithSchema } from './chunks/list.api-BzbTJBsM.js';
3
3
  import 'zod';
4
4
  import 'lodash-es';
@@ -2535,6 +2535,121 @@ async function postServiceInstance(options) {
2535
2535
  return result.data;
2536
2536
  }
2537
2537
 
2538
+ /**
2539
+ * Feed Link protocol — Link rows with value/loaderKey in {@link FEED_VALUES}.
2540
+ * No separate Target category; category remains `link`.
2541
+ */
2542
+ const FEED_VALUES = ["feed.image", "feed.audio", "feed.video", "feed.image-list"];
2543
+ /**
2544
+ * Feed lifecycle tier — exactly one must appear in `tagList` (via `buildFeedTagList`).
2545
+ *
2546
+ * Leading `.` marks **system** tags (distinct from user-defined `tagList` entries).
2547
+ */
2548
+ const FEED_SOURCE_TAGS = [".public", ".local", ".oss"];
2549
+ /** `registerFeed` only transitions `.public` → `.local` or `.oss`. */
2550
+ const FEED_INGEST_SOURCES = [".local", ".oss"];
2551
+ function isFeedIngestSource(value) {
2552
+ return FEED_INGEST_SOURCES.includes(value);
2553
+ }
2554
+ function isFeedValue(value) {
2555
+ return FEED_VALUES.includes(value);
2556
+ }
2557
+ function isFeedSource(value) {
2558
+ return FEED_SOURCE_TAGS.includes(value);
2559
+ }
2560
+
2561
+ /** Normalize `platformName` so `Link.name` stays `{platform}.{feedKey}` with a single separator dot. */
2562
+ function sanitizeFeedPlatformName(platformName) {
2563
+ return platformName.trim().replaceAll(".", " ");
2564
+ }
2565
+ /**
2566
+ * Default dedup `Link.name` for feed Links: `{platformName}.{feedKey}`.
2567
+ * Dots in `platformName` are replaced with spaces before joining (see {@link sanitizeFeedPlatformName}).
2568
+ */
2569
+ function buildFeedLinkName(platformName, feedKey) {
2570
+ const platform = sanitizeFeedPlatformName(platformName);
2571
+ const key = feedKey.trim();
2572
+ if (platform === "") {
2573
+ throw new Error("buildFeedLinkName: platformName is empty");
2574
+ }
2575
+ if (key === "") {
2576
+ throw new Error("buildFeedLinkName: feedKey is empty");
2577
+ }
2578
+ return `${platform}.${key}`;
2579
+ }
2580
+
2581
+ /** Trim entries and drop empties; `undefined` when input omitted. */
2582
+ function normalizeFeedTwinList(twinList) {
2583
+ if (twinList === undefined) {
2584
+ return undefined;
2585
+ }
2586
+ return twinList.map((entry) => entry.trim()).filter((entry) => entry !== "");
2587
+ }
2588
+ /** `original.storageProvider` from optional input and required `source` tier. */
2589
+ function resolveFeedOriginalStorageProvider(source, storageProvider) {
2590
+ const trimmed = storageProvider?.trim() ?? "";
2591
+ if (source === ".public") {
2592
+ if (trimmed !== "") {
2593
+ throw new Error("resolveFeedOriginalStorageProvider: storageProvider must be empty when source is .public");
2594
+ }
2595
+ return "";
2596
+ }
2597
+ if (trimmed === "") {
2598
+ throw new Error("resolveFeedOriginalStorageProvider: storageProvider is required when source is .local or .oss");
2599
+ }
2600
+ return trimmed;
2601
+ }
2602
+ /** Merge user tags with required `source`; strip any other feed source tags from user input. */
2603
+ function buildFeedTagList(source, tagList) {
2604
+ const sourceSet = new Set(FEED_SOURCE_TAGS);
2605
+ const user = tagList ?? [];
2606
+ const filtered = user.filter((tag) => !sourceSet.has(tag));
2607
+ return [...filtered, source];
2608
+ }
2609
+ /**
2610
+ * Assemble a feed {@link Link} draft (`category=link`, `loaderKey === value`).
2611
+ * Does not validate locator reachability or write to Supabase.
2612
+ */
2613
+ function buildFeedLinkDraft(input) {
2614
+ if (!isFeedValue(input.value)) {
2615
+ throw new Error(`buildFeedLinkDraft: unsupported feed value: ${String(input.value)}`);
2616
+ }
2617
+ if (!isFeedSource(input.source)) {
2618
+ throw new Error(`buildFeedLinkDraft: unsupported feed source: ${String(input.source)}`);
2619
+ }
2620
+ const name = buildFeedLinkName(input.platformName, input.feedKey);
2621
+ const locator = input.locator.trim();
2622
+ if (locator === "") {
2623
+ throw new Error("buildFeedLinkDraft: locator is empty");
2624
+ }
2625
+ const twinList = normalizeFeedTwinList(input.twinList);
2626
+ const storageProvider = resolveFeedOriginalStorageProvider(input.source, input.storageProvider);
2627
+ const original = {
2628
+ storageProvider,
2629
+ locator,
2630
+ ...(twinList !== undefined ? { twinList } : {}),
2631
+ };
2632
+ return buildLinkTargetDraft({
2633
+ name,
2634
+ value: input.value,
2635
+ description: input.description ?? "",
2636
+ preview: input.preview ?? "",
2637
+ loaderKey: input.value,
2638
+ tagList: buildFeedTagList(input.source, input.tagList),
2639
+ original,
2640
+ });
2641
+ }
2642
+
2643
+ /** Dedup key: `category=link` + `value` + `name` (matches register / find). */
2644
+ function feedLinkDedupFilters(input) {
2645
+ const name = input.name.trim();
2646
+ return [
2647
+ { field: "category", operator: "eq", value: CategoryLink.LINK },
2648
+ { field: "value", operator: "eq", value: input.value },
2649
+ { field: "name", operator: "eq", value: name },
2650
+ ];
2651
+ }
2652
+
2538
2653
  const RETRYABLE_CAUSE_CODES = new Set([
2539
2654
  "UND_ERR_CONNECT_TIMEOUT",
2540
2655
  "UND_ERR_HEADERS_TIMEOUT",
@@ -2913,6 +3028,54 @@ function mediaLinkDedupFilters(input) {
2913
3028
  ];
2914
3029
  }
2915
3030
 
3031
+ /**
3032
+ * Review Link protocol — Link rows with `value` / `loaderKey` === {@link REVIEW_VALUE}.
3033
+ * No separate Target category; category remains `link`.
3034
+ *
3035
+ * A Review records one user interaction with a subject Target (`Link.name` = that Target's id).
3036
+ * Many review Links may share the same subject id.
3037
+ */
3038
+ const REVIEW_VALUE = "review";
3039
+ function isReviewValue(value) {
3040
+ return value === REVIEW_VALUE;
3041
+ }
3042
+
3043
+ /**
3044
+ * Assemble a review {@link Link} draft (`category=link`, `loaderKey === value === "review"`).
3045
+ * Does not validate `refId` existence or write to Supabase.
3046
+ */
3047
+ function buildReviewLinkDraft(input) {
3048
+ if (!isReviewValue(input.value)) {
3049
+ throw new Error(`buildReviewLinkDraft: unsupported review value: ${String(input.value)}`);
3050
+ }
3051
+ const refId = input.refId.trim();
3052
+ if (refId === "") {
3053
+ throw new Error("buildReviewLinkDraft: refId is empty");
3054
+ }
3055
+ return buildLinkTargetDraft({
3056
+ name: refId,
3057
+ value: REVIEW_VALUE,
3058
+ description: input.description ?? "",
3059
+ preview: "",
3060
+ loaderKey: REVIEW_VALUE,
3061
+ tagList: input.tagList ?? [],
3062
+ original: input.original,
3063
+ });
3064
+ }
3065
+
3066
+ /**
3067
+ * Filters for all review Links whose subject Target is `refId` (`Link.name === refId`).
3068
+ * Many rows may match — the SDK does not define dedup for reviews.
3069
+ */
3070
+ function reviewLinksForTargetFilters(refId) {
3071
+ const name = refId.trim();
3072
+ return [
3073
+ { field: "category", operator: "eq", value: CategoryLink.LINK },
3074
+ { field: "value", operator: "eq", value: REVIEW_VALUE },
3075
+ { field: "name", operator: "eq", value: name },
3076
+ ];
3077
+ }
3078
+
2916
3079
  /** Read a dotted path (e.g. `data.items`) from a parsed JSON value. */
2917
3080
  function getValueAtPath(value, path) {
2918
3081
  if (path == null || path.trim() === "") {
@@ -3487,5 +3650,5 @@ function summarizeTaskQueue(tasks, taskType, statuses) {
3487
3650
  return tasks.filter((task) => task.value === taskType && statuses.includes(task.details.status)).length;
3488
3651
  }
3489
3652
 
3490
- export { fetchWithRetry as $, ApiMethod as A, buildSystemRegistryConfigDetails as B, CategoryConfig as C, DEFAULT_SYSTEM_REGISTRY_SEED_SLOTS as D, EMPTY_REGISTRY_SLOT_RUNTIME_STATE as E, claimServiceRegistrySlot as F, classifyNetworkError as G, countTasksByType as H, createActiveServiceLifecycle as I, createClaimedRegistrySlotRuntimeState as J, createStorageProviderRegistry as K, LINK_MANIFEST_VERSION as L, MEDIA_CONTENT_HASH_ALGORITHM as M, NodeStatus as N, createUploadTracker as O, POST_TASK_DEFAULT_MAX_ATTEMPTS as P, decodeLogBatch as Q, ResultCode as R, ServiceLifecycleStatus as S, TARGET_SYSTEM_REGISTRY_KEY as T, decodeLogBatchList as U, defaultL3ServiceDetails as V, deleteParcel as W, deleteParcelSchema as X, escapeIlikePattern as Y, evaluateBusyNodeLiveness as Z, fetchBinaryWithRetry as _, CategoryExtraction as a, postTask as a$, fieldDefinitionSchema as a0, flattenLogBatch as a1, flattenLogBatches as a2, formatNetworkError as a3, getApi as a4, getApiSchema as a5, getConfig as a6, getConfigSchema as a7, getExtraction as a8, getExtractionSchema as a9, patchChangeTaskStatus as aA, patchChangeTaskStatusSchema as aB, patchClaimTask as aC, patchClaimTaskSchema as aD, patchExtractionObjects as aE, patchExtractionObjectsSchema as aF, patchNodeHeartBeat as aG, patchNodeHeartBeatSchema as aH, patchServiceRuntime as aI, patchStopNode as aJ, patchStopNodeSchema as aK, patchTaskProgress as aL, patchTaskProgressSchema as aM, postApi as aN, postApiSchema as aO, postExtraction as aP, postExtractionSchema as aQ, postLinkCreate as aR, postParcel as aS, postParcelSchema as aT, postRegisterNode as aU, postRegisterNodeSchema as aV, postService as aW, postServiceInstance as aX, postServiceSchema as aY, postSystemRegistryConfig as aZ, postSystemRegistryConfigSchema as a_, getParcel as aa, getParcelSchema as ab, getScanRemoteRepoValues as ac, getScanRemoteRepoValuesSchema as ad, getService as ae, getServiceSchema as af, getTargetSystemRegistry as ag, getValueAtPath as ah, guessMediaMime as ai, installChunkFetchRegistry as aj, isHttpUrl as ak, isLocalFilesystemPath as al, isLogBatchList as am, isLogEntry as an, isMediaValue as ao, isOpaqueChunkUrl as ap, isRetryableHttpStatus as aq, linkTargetDraftBuildInputSchema as ar, mediaLinkDedupFilters as as, parcelDetailsSchema as at, parseLogBatchMeta as au, parseProviderPrefixedUrl as av, parseServiceSlot as aw, parseServiceSlots as ax, patchChangeNodeStatus as ay, patchChangeNodeStatusSchema as az, CategoryLink as b, postTaskSchema as b0, postTaskWithRetry as b1, publishParcel as b2, registerProviderChunkResolver as b3, registerService as b4, registerServiceAtStartup as b5, registrySlotRuntimePatchFromGuardResult as b6, releaseSystemRegistrySlots as b7, releaseSystemRegistrySlotsByServiceId as b8, requestHasBody as b9, toError as bA, createTaskRow as bB, resetSystemRegistryConfig as ba, resetSystemRegistryConfigSchema as bb, resolveActiveRegistryServiceId as bc, resolveFetchUrl as bd, restoreParcel as be, restoreParcelById as bf, runRegistrySlotGuardCheck as bg, sanitizeFileName as bh, sanitizeParcelFileName as bi, scanExtractionList as bj, scanExtractionListSchema as bk, schemaDefinitionSchema as bl, serviceDetailsSchema as bm, serviceLifecycleSchema as bn, serviceNodeSnapshotSchema as bo, serviceRuntimeSchema as bp, sha256Hex as bq, summarizeTaskQueue as br, systemRegistrySeedSlotSchema as bs, toPostgrestTextArrayLiteral as bt, unregisterService as bu, unregisterServiceAtShutdown as bv, getErrorMessage as bw, LOG_TOPIC_NODE as bx, LOG_TOPIC_TASK as by, CRITICAL_UNKNOWN_TASK_TRACE_ID as bz, CategoryNode as c, CategoryParcel as d, CategoryRepo as e, CategoryService as f, CategoryTask as g, LIST_MANIFEST_VERSION as h, MEDIA_CONTENT_HASH_PREFIX_LENGTH as i, MEDIA_VALUES as j, ParcelManager as k, PostLinkValidator as l, ServiceRegistryError as m, ServiceSlotStatus as n, TASK_REPO_USAGE as o, TaskStatus as p, TaskStatusAction as q, apiDetailsSchema as r, appendSystemRegistryEmptySlots as s, assertRegistrySlotAvailable as t, assertRegistrySlotOwner as u, buildEmptyServiceSlots as v, buildLinkTargetDraft as w, buildListTargetDraft as x, buildMediaLinkDraft as y, buildMediaNameFromLocator as z };
3491
- //# sourceMappingURL=task-queue-DufG7PlX.js.map
3653
+ export { deleteParcelSchema as $, ApiMethod as A, buildMediaLinkDraft as B, CategoryConfig as C, DEFAULT_SYSTEM_REGISTRY_SEED_SLOTS as D, EMPTY_REGISTRY_SLOT_RUNTIME_STATE as E, FEED_VALUES as F, buildMediaNameFromLocator as G, buildReviewLinkDraft as H, buildSystemRegistryConfigDetails as I, claimServiceRegistrySlot as J, classifyNetworkError as K, LINK_MANIFEST_VERSION as L, MEDIA_CONTENT_HASH_ALGORITHM as M, NodeStatus as N, countTasksByType as O, POST_TASK_DEFAULT_MAX_ATTEMPTS as P, createActiveServiceLifecycle as Q, ResultCode as R, ServiceLifecycleStatus as S, TARGET_SYSTEM_REGISTRY_KEY as T, createClaimedRegistrySlotRuntimeState as U, createStorageProviderRegistry as V, createUploadTracker as W, decodeLogBatch as X, decodeLogBatchList as Y, defaultL3ServiceDetails as Z, deleteParcel as _, CategoryExtraction as a, postRegisterNodeSchema as a$, escapeIlikePattern as a0, evaluateBusyNodeLiveness as a1, feedLinkDedupFilters as a2, fetchBinaryWithRetry as a3, fetchWithRetry as a4, fieldDefinitionSchema as a5, flattenLogBatch as a6, flattenLogBatches as a7, formatNetworkError as a8, getApi as a9, parseLogBatchMeta as aA, parseProviderPrefixedUrl as aB, parseServiceSlot as aC, parseServiceSlots as aD, patchChangeNodeStatus as aE, patchChangeNodeStatusSchema as aF, patchChangeTaskStatus as aG, patchChangeTaskStatusSchema as aH, patchClaimTask as aI, patchClaimTaskSchema as aJ, patchExtractionObjects as aK, patchExtractionObjectsSchema as aL, patchNodeHeartBeat as aM, patchNodeHeartBeatSchema as aN, patchServiceRuntime as aO, patchStopNode as aP, patchStopNodeSchema as aQ, patchTaskProgress as aR, patchTaskProgressSchema as aS, postApi as aT, postApiSchema as aU, postExtraction as aV, postExtractionSchema as aW, postLinkCreate as aX, postParcel as aY, postParcelSchema as aZ, postRegisterNode as a_, getApiSchema as aa, getConfig as ab, getConfigSchema as ac, getExtraction as ad, getExtractionSchema as ae, getParcel as af, getParcelSchema as ag, getScanRemoteRepoValues as ah, getScanRemoteRepoValuesSchema as ai, getService as aj, getServiceSchema as ak, getTargetSystemRegistry as al, getValueAtPath as am, guessMediaMime as an, installChunkFetchRegistry as ao, isFeedValue as ap, isHttpUrl as aq, isLocalFilesystemPath as ar, isLogBatchList as as, isLogEntry as at, isMediaValue as au, isOpaqueChunkUrl as av, isRetryableHttpStatus as aw, linkTargetDraftBuildInputSchema as ax, mediaLinkDedupFilters as ay, parcelDetailsSchema as az, CategoryLink as b, postService as b0, postServiceInstance as b1, postServiceSchema as b2, postSystemRegistryConfig as b3, postSystemRegistryConfigSchema as b4, postTask as b5, postTaskSchema as b6, postTaskWithRetry as b7, publishParcel as b8, registerProviderChunkResolver as b9, toPostgrestTextArrayLiteral as bA, unregisterService as bB, unregisterServiceAtShutdown as bC, getErrorMessage as bD, LOG_TOPIC_NODE as bE, isFeedIngestSource as bF, resolveFeedOriginalStorageProvider as bG, buildFeedTagList as bH, LOG_TOPIC_TASK as bI, CRITICAL_UNKNOWN_TASK_TRACE_ID as bJ, toError as bK, createTaskRow as bL, FEED_INGEST_SOURCES as bM, registerService as ba, registerServiceAtStartup as bb, registrySlotRuntimePatchFromGuardResult as bc, releaseSystemRegistrySlots as bd, releaseSystemRegistrySlotsByServiceId as be, requestHasBody as bf, resetSystemRegistryConfig as bg, resetSystemRegistryConfigSchema as bh, resolveActiveRegistryServiceId as bi, resolveFetchUrl as bj, restoreParcel as bk, restoreParcelById as bl, reviewLinksForTargetFilters as bm, runRegistrySlotGuardCheck as bn, sanitizeFileName as bo, sanitizeParcelFileName as bp, scanExtractionList as bq, scanExtractionListSchema as br, schemaDefinitionSchema as bs, serviceDetailsSchema as bt, serviceLifecycleSchema as bu, serviceNodeSnapshotSchema as bv, serviceRuntimeSchema as bw, sha256Hex as bx, summarizeTaskQueue as by, systemRegistrySeedSlotSchema as bz, CategoryNode as c, CategoryParcel as d, CategoryRepo as e, CategoryService as f, CategoryTask as g, LIST_MANIFEST_VERSION as h, MEDIA_CONTENT_HASH_PREFIX_LENGTH as i, MEDIA_VALUES as j, ParcelManager as k, PostLinkValidator as l, ServiceRegistryError as m, ServiceSlotStatus as n, TASK_REPO_USAGE as o, TaskStatus as p, TaskStatusAction as q, apiDetailsSchema as r, appendSystemRegistryEmptySlots as s, assertRegistrySlotAvailable as t, assertRegistrySlotOwner as u, buildEmptyServiceSlots as v, buildFeedLinkDraft as w, buildFeedLinkName as x, buildLinkTargetDraft as y, buildListTargetDraft as z };
3654
+ //# sourceMappingURL=task-queue-CqmIVCBi.js.map