target-supabase-sdk 0.2.22 → 0.2.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/dist/browser.d.ts +2 -0
- package/dist/browser.d.ts.map +1 -1
- package/dist/browser.js +1 -1
- package/dist/chunks/{task-queue-DWFe0rCS.js → task-queue-C_nUaM2S.js} +260 -37
- package/dist/chunks/task-queue-C_nUaM2S.js.map +1 -0
- package/dist/link/index.d.ts +2 -0
- package/dist/link/index.d.ts.map +1 -1
- package/dist/link/link.query.d.ts +9 -0
- package/dist/link/link.query.d.ts.map +1 -0
- package/dist/node.d.ts +2 -0
- package/dist/node.d.ts.map +1 -1
- package/dist/node.js +113 -6
- package/dist/node.js.map +1 -1
- package/dist/shared/feed/feed.query.d.ts.map +1 -1
- package/dist/shared/idea/idea.build.d.ts +35 -0
- package/dist/shared/idea/idea.build.d.ts.map +1 -0
- package/dist/shared/idea/idea.interface.d.ts +23 -0
- package/dist/shared/idea/idea.interface.d.ts.map +1 -0
- package/dist/shared/idea/idea.normalize.d.ts +3 -0
- package/dist/shared/idea/idea.normalize.d.ts.map +1 -0
- package/dist/shared/idea/idea.parse.d.ts +3 -0
- package/dist/shared/idea/idea.parse.d.ts.map +1 -0
- package/dist/shared/idea/idea.query.d.ts +6 -0
- package/dist/shared/idea/idea.query.d.ts.map +1 -0
- package/dist/shared/idea/idea.schema.d.ts +60 -0
- package/dist/shared/idea/idea.schema.d.ts.map +1 -0
- package/dist/shared/idea/index.d.ts +15 -0
- package/dist/shared/idea/index.d.ts.map +1 -0
- package/dist/shared/idea/node/idea.hash.d.ts +3 -0
- package/dist/shared/idea/node/idea.hash.d.ts.map +1 -0
- package/dist/shared/idea/node/idea.locator.d.ts +9 -0
- package/dist/shared/idea/node/idea.locator.d.ts.map +1 -0
- package/dist/shared/idea/node/index.d.ts +3 -0
- package/dist/shared/idea/node/index.d.ts.map +1 -0
- package/dist/shared/media/media.query.d.ts.map +1 -1
- package/dist/shared/review/review.query.d.ts.map +1 -1
- package/dist/shared/utils/config-path.utils.d.ts +1 -1
- package/dist/shared/utils/postgrest.utils.d.ts +1 -1
- package/dist/task/index.d.ts +1 -1
- package/dist/task/local-task-registry.d.ts +1 -1
- package/dist/task/task-node.d.ts +3 -0
- package/dist/task/task-node.d.ts.map +1 -1
- package/dist/task/task.api.d.ts +14 -1
- package/dist/task/task.api.d.ts.map +1 -1
- package/dist/trigger/trigger.api.d.ts +6 -1
- package/dist/trigger/trigger.api.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/browser.ts +21 -0
- package/src/link/index.ts +2 -0
- package/src/link/link.query.ts +18 -0
- package/src/node.ts +8 -0
- package/src/shared/feed/README.md +1 -1
- package/src/shared/feed/feed.query.ts +2 -7
- package/src/shared/idea/README.md +82 -0
- package/src/shared/idea/VALIDATION-MATRIX.md +69 -0
- package/src/shared/idea/idea.build.ts +160 -0
- package/src/shared/idea/idea.interface.ts +34 -0
- package/src/shared/idea/idea.normalize.ts +17 -0
- package/src/shared/idea/idea.parse.ts +16 -0
- package/src/shared/idea/idea.query.ts +16 -0
- package/src/shared/idea/idea.schema.ts +32 -0
- package/src/shared/idea/index.ts +21 -0
- package/src/shared/idea/node/idea.hash.ts +6 -0
- package/src/shared/idea/node/idea.locator.ts +61 -0
- package/src/shared/idea/node/index.ts +7 -0
- package/src/shared/media/README.md +1 -1
- package/src/shared/media/media.query.ts +2 -7
- package/src/shared/review/review.query.ts +2 -7
- package/src/shared/utils/config-path.utils.ts +1 -1
- package/src/shared/utils/postgrest.utils.ts +1 -1
- package/src/task/index.ts +1 -1
- package/src/task/local-task-registry.ts +1 -1
- package/src/task/task-node.ts +7 -1
- package/src/task/task.api.ts +62 -15
- package/src/trigger/trigger.api.ts +6 -1
- package/dist/chunks/task-queue-DWFe0rCS.js.map +0 -1
- package/dist/resource/resource.interface.d.ts +0 -20
- package/dist/resource/resource.interface.d.ts.map +0 -1
- package/dist/task/task.utils.d.ts +0 -1
- package/dist/task/task.utils.d.ts.map +0 -1
- package/src/resource/resource.interface.ts +0 -37
- package/src/task/task.utils.ts +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feed.query.d.ts","sourceRoot":"","sources":["../../../src/shared/feed/feed.query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAElD,+EAA+E;AAC/E,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAAE,KAAK,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"feed.query.d.ts","sourceRoot":"","sources":["../../../src/shared/feed/feed.query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAElD,+EAA+E;AAC/E,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAAE,KAAK,EAAE,SAAS,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,WAAW,EAAE,CAE7F"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { TargetDraft } from "../../core.interface";
|
|
2
|
+
import type { Link } from "../../link/link.interface";
|
|
3
|
+
export interface BuildIdeaLinkDraftInput {
|
|
4
|
+
/** Article title — Link.name (not used for image ideas). */
|
|
5
|
+
name: string;
|
|
6
|
+
/** Body or image content hash — `details.original.content`. */
|
|
7
|
+
content: string;
|
|
8
|
+
reviewList?: readonly string[];
|
|
9
|
+
url?: string;
|
|
10
|
+
heat?: number;
|
|
11
|
+
tagList?: readonly string[];
|
|
12
|
+
description?: string;
|
|
13
|
+
preview?: string;
|
|
14
|
+
}
|
|
15
|
+
export interface BuildIdeaImageLinkDraftInput {
|
|
16
|
+
/** SHA-256 hex of image bytes — stored in `details.original.content`. */
|
|
17
|
+
contentHash: string;
|
|
18
|
+
/** Temp download or other absolute URL — `details.original.url`. */
|
|
19
|
+
url: string;
|
|
20
|
+
heat?: number;
|
|
21
|
+
tagList?: readonly string[];
|
|
22
|
+
description?: string;
|
|
23
|
+
preview?: string;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Assemble a text idea {@link Link} draft (`category=link`, `loaderKey === value === "idea"`).
|
|
27
|
+
* Does not write to Supabase or enforce title uniqueness.
|
|
28
|
+
*/
|
|
29
|
+
export declare function buildIdeaLinkDraft(input: BuildIdeaLinkDraftInput): TargetDraft<Link>;
|
|
30
|
+
/**
|
|
31
|
+
* Assemble a clipboard-image idea Link (`name=idea.image`, `value=idea`).
|
|
32
|
+
* Caller stores bytes and supplies hash + temp URL; no dedup by content hash.
|
|
33
|
+
*/
|
|
34
|
+
export declare function buildIdeaImageLinkDraft(input: BuildIdeaImageLinkDraftInput): TargetDraft<Link>;
|
|
35
|
+
//# sourceMappingURL=idea.build.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"idea.build.d.ts","sourceRoot":"","sources":["../../../src/shared/idea/idea.build.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,2BAA2B,CAAC;AAUtD,MAAM,WAAW,uBAAuB;IACpC,4DAA4D;IAC5D,IAAI,EAAE,MAAM,CAAC;IACb,+DAA+D;IAC/D,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,4BAA4B;IACzC,yEAAyE;IACzE,WAAW,EAAE,MAAM,CAAC;IACpB,oEAAoE;IACpE,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAuCD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,uBAAuB,GAAG,WAAW,CAAC,IAAI,CAAC,CAsCpF;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,4BAA4B,GAAG,WAAW,CAAC,IAAI,CAAC,CAsC9F"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Idea Link protocol — Link rows with `value` / `loaderKey` === {@link IDEA_LINK_VALUE}.
|
|
3
|
+
* Clipboard images use fixed `name` {@link IDEA_IMAGE_LINK_NAME} (not a separate value).
|
|
4
|
+
*/
|
|
5
|
+
export declare const IDEA_LINK_VALUE: "idea";
|
|
6
|
+
/** Discriminator stored in both `Link.value` and `details.loaderKey`. */
|
|
7
|
+
export type IdeaLinkValue = typeof IDEA_LINK_VALUE;
|
|
8
|
+
/** Link.name for clipboard-image ideas (distinct from title-based text ideas). */
|
|
9
|
+
export declare const IDEA_IMAGE_LINK_NAME: "idea.image";
|
|
10
|
+
/** Default tag for raw captures (quick-note, paste-image). Leading `.` = system tag. */
|
|
11
|
+
export declare const IDEA_IMAGE_TAG_RAW: ".raw";
|
|
12
|
+
/** Temp sandbox prefix for pasted images (`TEMP_FS_ROOT` on upload-service). */
|
|
13
|
+
export declare const IDEA_IMAGE_TEMP_DIR: "idea/paste";
|
|
14
|
+
/** `Link.details.original` for idea Links (text and image). */
|
|
15
|
+
export interface IdeaOriginal {
|
|
16
|
+
content: string;
|
|
17
|
+
reviewList: string[];
|
|
18
|
+
url: string;
|
|
19
|
+
heat: number;
|
|
20
|
+
}
|
|
21
|
+
export declare function isIdeaLinkValue(value: string): value is IdeaLinkValue;
|
|
22
|
+
export declare function isIdeaImageLinkName(name: string): boolean;
|
|
23
|
+
//# sourceMappingURL=idea.interface.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"idea.interface.d.ts","sourceRoot":"","sources":["../../../src/shared/idea/idea.interface.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,eAAO,MAAM,eAAe,EAAG,MAAe,CAAC;AAE/C,yEAAyE;AACzE,MAAM,MAAM,aAAa,GAAG,OAAO,eAAe,CAAC;AAEnD,kFAAkF;AAClF,eAAO,MAAM,oBAAoB,EAAG,YAAqB,CAAC;AAE1D,wFAAwF;AACxF,eAAO,MAAM,kBAAkB,EAAG,MAAe,CAAC;AAElD,gFAAgF;AAChF,eAAO,MAAM,mBAAmB,EAAG,YAAqB,CAAC;AAEzD,+DAA+D;AAC/D,MAAM,WAAW,YAAY;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,aAAa,CAErE;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEzD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"idea.normalize.d.ts","sourceRoot":"","sources":["../../../src/shared/idea/idea.normalize.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,GAAG,IAAI,GAAG,MAAM,EAAE,CAevF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"idea.parse.d.ts","sourceRoot":"","sources":["../../../src/shared/idea/idea.parse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAIrD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,OAAO,GAAG,YAAY,GAAG,IAAI,CAWxE"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { QueryFilter } from "../../core.interface";
|
|
2
|
+
/** List/get filters: `category=link` and `value=idea` (do not filter on `details.loaderKey`). */
|
|
3
|
+
export declare function ideaLinkValueFilters(): QueryFilter[];
|
|
4
|
+
/** Clipboard-image ideas only (`name=idea.image`). */
|
|
5
|
+
export declare function ideaImageLinkFilters(): QueryFilter[];
|
|
6
|
+
//# sourceMappingURL=idea.query.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"idea.query.d.ts","sourceRoot":"","sources":["../../../src/shared/idea/idea.query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAIxD,iGAAiG;AACjG,wBAAgB,oBAAoB,IAAI,WAAW,EAAE,CAKpD;AAED,sDAAsD;AACtD,wBAAgB,oBAAoB,IAAI,WAAW,EAAE,CAEpD"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/** Runtime shape of `Link.details.original` for value=idea. */
|
|
3
|
+
export declare const ideaOriginalSchema: z.ZodObject<{
|
|
4
|
+
content: z.ZodString;
|
|
5
|
+
reviewList: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
|
|
6
|
+
url: z.ZodDefault<z.ZodString>;
|
|
7
|
+
heat: z.ZodDefault<z.ZodNumber>;
|
|
8
|
+
}, "strip", z.ZodTypeAny, {
|
|
9
|
+
url: string;
|
|
10
|
+
content: string;
|
|
11
|
+
reviewList: string[];
|
|
12
|
+
heat: number;
|
|
13
|
+
}, {
|
|
14
|
+
content: string;
|
|
15
|
+
url?: string | undefined;
|
|
16
|
+
reviewList?: string[] | undefined;
|
|
17
|
+
heat?: number | undefined;
|
|
18
|
+
}>;
|
|
19
|
+
/** HTTP / API create body limits (upload-service `POST /v0/upload/idea`). */
|
|
20
|
+
export declare const ideaCreateSchema: z.ZodObject<{
|
|
21
|
+
name: z.ZodString;
|
|
22
|
+
content: z.ZodString;
|
|
23
|
+
reviewList: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
|
|
24
|
+
url: z.ZodDefault<z.ZodString>;
|
|
25
|
+
tagList: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
|
|
26
|
+
}, "strip", z.ZodTypeAny, {
|
|
27
|
+
name: string;
|
|
28
|
+
tagList: string[];
|
|
29
|
+
url: string;
|
|
30
|
+
content: string;
|
|
31
|
+
reviewList: string[];
|
|
32
|
+
}, {
|
|
33
|
+
name: string;
|
|
34
|
+
content: string;
|
|
35
|
+
tagList?: string[] | undefined;
|
|
36
|
+
url?: string | undefined;
|
|
37
|
+
reviewList?: string[] | undefined;
|
|
38
|
+
}>;
|
|
39
|
+
export type IdeaCreateSchemaInput = z.infer<typeof ideaCreateSchema>;
|
|
40
|
+
export declare const ideaUpdateSchema: z.ZodObject<{
|
|
41
|
+
name: z.ZodOptional<z.ZodString>;
|
|
42
|
+
content: z.ZodOptional<z.ZodString>;
|
|
43
|
+
reviewList: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
44
|
+
url: z.ZodOptional<z.ZodString>;
|
|
45
|
+
tagList: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
46
|
+
}, "strip", z.ZodTypeAny, {
|
|
47
|
+
name?: string | undefined;
|
|
48
|
+
tagList?: string[] | undefined;
|
|
49
|
+
url?: string | undefined;
|
|
50
|
+
content?: string | undefined;
|
|
51
|
+
reviewList?: string[] | undefined;
|
|
52
|
+
}, {
|
|
53
|
+
name?: string | undefined;
|
|
54
|
+
tagList?: string[] | undefined;
|
|
55
|
+
url?: string | undefined;
|
|
56
|
+
content?: string | undefined;
|
|
57
|
+
reviewList?: string[] | undefined;
|
|
58
|
+
}>;
|
|
59
|
+
export type IdeaUpdateSchemaInput = z.infer<typeof ideaUpdateSchema>;
|
|
60
|
+
//# sourceMappingURL=idea.schema.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"idea.schema.d.ts","sourceRoot":"","sources":["../../../src/shared/idea/idea.schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,+DAA+D;AAC/D,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;EAK7B,CAAC;AAIH,6EAA6E;AAC7E,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;EAM3B,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAErE,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;EAM3B,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Idea Link — browser-safe public barrel only.
|
|
3
|
+
*
|
|
4
|
+
* Node-only code lives in `./node/` and is exported from `src/node.ts`.
|
|
5
|
+
*/
|
|
6
|
+
export type { BuildIdeaImageLinkDraftInput, BuildIdeaLinkDraftInput } from "./idea.build";
|
|
7
|
+
export { buildIdeaImageLinkDraft, buildIdeaLinkDraft } from "./idea.build";
|
|
8
|
+
export type { IdeaOriginal } from "./idea.interface";
|
|
9
|
+
export { IDEA_IMAGE_LINK_NAME, IDEA_IMAGE_TAG_RAW, IDEA_IMAGE_TEMP_DIR, IDEA_LINK_VALUE, isIdeaImageLinkName, } from "./idea.interface";
|
|
10
|
+
export { normalizeStringList } from "./idea.normalize";
|
|
11
|
+
export { parseIdeaOriginal } from "./idea.parse";
|
|
12
|
+
export { ideaLinkValueFilters } from "./idea.query";
|
|
13
|
+
export type { IdeaCreateSchemaInput, IdeaUpdateSchemaInput } from "./idea.schema";
|
|
14
|
+
export { ideaCreateSchema, ideaUpdateSchema } from "./idea.schema";
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/shared/idea/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,YAAY,EAAE,4BAA4B,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAC1F,OAAO,EAAE,uBAAuB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAC3E,YAAY,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EACH,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,EACf,mBAAmB,GACtB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACpD,YAAY,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,eAAe,CAAC;AAClF,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"idea.hash.d.ts","sourceRoot":"","sources":["../../../../src/shared/idea/node/idea.hash.ts"],"names":[],"mappings":"AAEA,gGAAgG;AAChG,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEzD"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** Path suffix on upload-service public URL for temp file download. */
|
|
2
|
+
export declare const IDEA_TEMP_DOWNLOAD_PATH_SUFFIX = "/v0/upload/temp/download";
|
|
3
|
+
/** Flat path under temp sandbox: `idea/paste/{sha256}.{ext}`. */
|
|
4
|
+
export declare function buildIdeaPasteRelativePath(contentHash: string, ext: string): string;
|
|
5
|
+
/** Build absolute locator stored in `details.original.url`. */
|
|
6
|
+
export declare function buildIdeaTempDownloadLocator(relativePath: string, publicBaseUrl: string): string;
|
|
7
|
+
/** Parse temp download URL → sandbox-relative path, or null when not a temp download URL. */
|
|
8
|
+
export declare function parseIdeaTempDownloadLocator(locator: string): string | null;
|
|
9
|
+
//# sourceMappingURL=idea.locator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"idea.locator.d.ts","sourceRoot":"","sources":["../../../../src/shared/idea/node/idea.locator.ts"],"names":[],"mappings":"AAEA,uEAAuE;AACvE,eAAO,MAAM,8BAA8B,6BAA6B,CAAC;AAEzE,iEAAiE;AACjE,wBAAgB,0BAA0B,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAOnF;AAUD,+DAA+D;AAC/D,wBAAgB,4BAA4B,CAAC,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAShG;AAED,6FAA6F;AAC7F,wBAAgB,4BAA4B,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAwB3E"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/shared/idea/node/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EACH,0BAA0B,EAC1B,4BAA4B,EAC5B,8BAA8B,EAC9B,4BAA4B,GAC/B,MAAM,gBAAgB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"media.query.d.ts","sourceRoot":"","sources":["../../../src/shared/media/media.query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,+EAA+E;AAC/E,wBAAgB,qBAAqB,CAAC,KAAK,EAAE;IAAE,KAAK,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"media.query.d.ts","sourceRoot":"","sources":["../../../src/shared/media/media.query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,+EAA+E;AAC/E,wBAAgB,qBAAqB,CAAC,KAAK,EAAE;IAAE,KAAK,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,WAAW,EAAE,CAE/F"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"review.query.d.ts","sourceRoot":"","sources":["../../../src/shared/review/review.query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAIxD;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"review.query.d.ts","sourceRoot":"","sources":["../../../src/shared/review/review.query.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAIxD;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,CAErE"}
|
|
@@ -8,7 +8,7 @@ export declare function getConfigFileDir(configFilePath: string): string;
|
|
|
8
8
|
* - Absolute `pathInConfig` → returned as-is
|
|
9
9
|
* - Relative `pathInConfig` → `resolve(dirname(configFilePath), pathInConfig)`
|
|
10
10
|
*
|
|
11
|
-
* **Not** relative to `process.cwd()`. See `.cursor/skills/
|
|
11
|
+
* **Not** relative to `process.cwd()`. See `.cursor/skills/task-local-discovery/SKILL.md`.
|
|
12
12
|
*/
|
|
13
13
|
export declare function resolvePathFromConfigFile(configFilePath: string, pathInConfig: string): string;
|
|
14
14
|
/**
|
package/dist/task/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Task domain public API — curated re-exports only.
|
|
3
|
-
* Internal modules (local-task-registry, task-repo-context
|
|
3
|
+
* Internal modules (local-task-registry, task-repo-context) stay private.
|
|
4
4
|
*/
|
|
5
5
|
export type { PatchChangeTaskStatusPayload, PatchClaimTaskPayload, PatchTaskProgressPayload, } from "./task.api";
|
|
6
6
|
export { patchChangeTaskStatus, patchChangeTaskStatusSchema, patchClaimTask, patchClaimTaskSchema, patchTaskProgress, patchTaskProgressSchema, } from "./task.api";
|
|
@@ -25,7 +25,7 @@ export interface BootstrapLocalTasksOptions {
|
|
|
25
25
|
* ./tasks/my-task/index.mjs
|
|
26
26
|
* ```
|
|
27
27
|
*
|
|
28
|
-
* `taskDir` / `entry` paths are relative to **their config file's directory** (see
|
|
28
|
+
* `taskDir` / `entry` paths are relative to **their config file's directory** (see task-local-discovery skill).
|
|
29
29
|
*
|
|
30
30
|
* Legacy fallback: `./task.config.js` at project root (`taskDir: "./tasks"`).
|
|
31
31
|
*/
|
package/dist/task/task-node.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { BaseNodeRuntime, type NodeLoopContext } from "../node/node-runtime.base";
|
|
2
2
|
import { type LoggerWithScope } from "../shared/log";
|
|
3
|
+
import { type PatchClaimTaskPayload } from "./task.api";
|
|
3
4
|
/**
|
|
4
5
|
* Task worker node: commands → heartbeat → claim & execute tasks.
|
|
5
6
|
* Built on {@link BaseNodeRuntime}.
|
|
@@ -8,6 +9,8 @@ declare class TaskNode extends BaseNodeRuntime {
|
|
|
8
9
|
private _availableTaskList;
|
|
9
10
|
private _includeRemote;
|
|
10
11
|
get availableTaskList(): readonly string[];
|
|
12
|
+
/** Optional claim filters passed to {@link patchClaimTask} (e.g. name prefix per task type). */
|
|
13
|
+
protected getPatchClaimTaskOptions(): Pick<PatchClaimTaskPayload, "namePrefixList">;
|
|
11
14
|
constructor();
|
|
12
15
|
protected onBeforeRegisterNode(logger: LoggerWithScope): Promise<void>;
|
|
13
16
|
protected runLoopSteps(ctx: NodeLoopContext, heartbeatOk: boolean): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-node.d.ts","sourceRoot":"","sources":["../../src/task/task-node.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAkB,KAAK,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAClG,OAAO,EAA6B,KAAK,eAAe,EAAc,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"task-node.d.ts","sourceRoot":"","sources":["../../src/task/task-node.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAkB,KAAK,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAClG,OAAO,EAA6B,KAAK,eAAe,EAAc,MAAM,eAAe,CAAC;AAE5F,OAAO,EAAE,KAAK,qBAAqB,EAAyC,MAAM,YAAY,CAAC;AAK/F;;;GAGG;AACH,cAAM,QAAS,SAAQ,eAAe;IAClC,OAAO,CAAC,kBAAkB,CAAgB;IAC1C,OAAO,CAAC,cAAc,CAAQ;IAE9B,IAAI,iBAAiB,IAAI,SAAS,MAAM,EAAE,CAEzC;IAED,gGAAgG;IAChG,SAAS,CAAC,wBAAwB,IAAI,IAAI,CAAC,qBAAqB,EAAE,gBAAgB,CAAC;;cAQnE,oBAAoB,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;cAM5D,YAAY,CAAC,GAAG,EAAE,eAAe,EAAE,WAAW,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;YAezE,WAAW;YA8KX,YAAY;YA2BZ,eAAe;CAqDhC;AAED,OAAO,EAAE,QAAQ,EAAE,CAAC"}
|
package/dist/task/task.api.d.ts
CHANGED
|
@@ -127,16 +127,24 @@ export declare const patchTaskProgressSchema: z.ZodObject<{
|
|
|
127
127
|
export type PatchTaskProgressPayload = z.infer<typeof patchTaskProgressSchema>;
|
|
128
128
|
export declare const patchClaimTaskSchema: z.ZodObject<{
|
|
129
129
|
nodeId: z.ZodString;
|
|
130
|
+
/** Task `value` must be in this list (always applied). */
|
|
130
131
|
availableTaskList: z.ZodArray<z.ZodString, "many">;
|
|
131
132
|
traceId: z.ZodOptional<z.ZodString>;
|
|
133
|
+
/**
|
|
134
|
+
* Optional second axis on `name` (AND with `availableTaskList`, not coupled to `value`).
|
|
135
|
+
* When non-empty: `name` must equal a prefix or start with `prefix:`; query uses PostgREST `ilike`.
|
|
136
|
+
*/
|
|
137
|
+
namePrefixList: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
132
138
|
}, "strip", z.ZodTypeAny, {
|
|
133
139
|
nodeId: string;
|
|
134
140
|
availableTaskList: string[];
|
|
135
141
|
traceId?: string | undefined;
|
|
142
|
+
namePrefixList?: string[] | undefined;
|
|
136
143
|
}, {
|
|
137
144
|
nodeId: string;
|
|
138
145
|
availableTaskList: string[];
|
|
139
146
|
traceId?: string | undefined;
|
|
147
|
+
namePrefixList?: string[] | undefined;
|
|
140
148
|
}>;
|
|
141
149
|
export type PatchClaimTaskPayload = z.infer<typeof patchClaimTaskSchema>;
|
|
142
150
|
export declare const patchChangeTaskStatus: (payload: {
|
|
@@ -185,7 +193,11 @@ export declare const patchTaskProgress: (payload: {
|
|
|
185
193
|
/**
|
|
186
194
|
* Discover and claim one TODO task for this node.
|
|
187
195
|
*
|
|
188
|
-
*
|
|
196
|
+
* Match criteria (all required): `details.status = TODO`, `value ∈ availableTaskList`, and when
|
|
197
|
+
* `namePrefixList` is non-empty, `name` matches any listed prefix. Those filters are independent
|
|
198
|
+
* (AND); omitting `namePrefixList` does not relax the `value` constraint.
|
|
199
|
+
*
|
|
200
|
+
* Flow: oldest matching row (FIFO by `created_at`) → {@link claimTaskById}.
|
|
189
201
|
* Equivalent to `patchChangeTaskStatus({ id, action: CLAIM, nodeId })` when `id` is already known.
|
|
190
202
|
*
|
|
191
203
|
* Returns `data: null` when no TODO task matches.
|
|
@@ -195,5 +207,6 @@ export declare const patchClaimTask: (payload: {
|
|
|
195
207
|
nodeId: string;
|
|
196
208
|
availableTaskList: string[];
|
|
197
209
|
traceId?: string | undefined;
|
|
210
|
+
namePrefixList?: string[] | undefined;
|
|
198
211
|
}) => SupabaseResponse<Task | null> | Promise<SupabaseResponse<Task | null>>;
|
|
199
212
|
//# sourceMappingURL=task.api.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task.api.d.ts","sourceRoot":"","sources":["../../src/task/task.api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"task.api.d.ts","sourceRoot":"","sources":["../../src/task/task.api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAWxB,OAAO,EAAoB,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAM5E,OAAO,EAA4B,KAAK,IAAI,EAAgC,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AA0DvH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IA2BtC,CAAC;AAEH,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAEvF,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;EAKlC,CAAC;AAEH,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAE/E,eAAO,MAAM,oBAAoB;;IAE7B,0DAA0D;;;IAG1D;;;OAGG;;;;;;;;;;;;EAEL,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AA0GzE,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oEAmGhC,CAAC;AAIH,gGAAgG;AAChG,eAAO,MAAM,iBAAiB;;;;;8DAe5B,CAAC;AAIH;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,cAAc;;;;;4EAkFzB,CAAC"}
|
|
@@ -103,7 +103,12 @@ export declare const patchTriggerFiredSchema: z.ZodObject<{
|
|
|
103
103
|
expectedLastFireKey?: string | null | undefined;
|
|
104
104
|
}>;
|
|
105
105
|
export type PatchTriggerFiredPayload = z.infer<typeof patchTriggerFiredSchema>;
|
|
106
|
-
/**
|
|
106
|
+
/**
|
|
107
|
+
* List all ENABLED triggers. Due-check is in-memory on the caller:
|
|
108
|
+
* filter with `isTriggerDue`, then `patchTriggerFired` with `buildFireKey`
|
|
109
|
+
* (both from `trigger.utils`, exported on `/node`).
|
|
110
|
+
* Do not call this from TriggerNode (local interval runners only).
|
|
111
|
+
*/
|
|
107
112
|
export declare const scanEnabledTriggers: (payload: {
|
|
108
113
|
traceId?: string | undefined;
|
|
109
114
|
}) => SupabaseResponse<Trigger[]> | Promise<SupabaseResponse<Trigger[]>>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trigger.api.d.ts","sourceRoot":"","sources":["../../src/trigger/trigger.api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAoB,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE5E,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAEH,KAAK,OAAO,EAGZ,aAAa,EAChB,MAAM,qBAAqB,CAAC;AAoB7B,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAQ5B,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAEnE,eAAO,MAAM,yBAAyB;;;;;;EAEpC,CAAC;AAEH,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAEnF,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;EAKlC,CAAC;AAEH,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAM/E
|
|
1
|
+
{"version":3,"file":"trigger.api.d.ts","sourceRoot":"","sources":["../../src/trigger/trigger.api.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAoB,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAE5E,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAEH,KAAK,OAAO,EAGZ,aAAa,EAChB,MAAM,qBAAqB,CAAC;AAoB7B,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAQ5B,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAEnE,eAAO,MAAM,yBAAyB;;;;;;EAEpC,CAAC;AAEH,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAEnF,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;EAKlC,CAAC;AAEH,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAM/E;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB;;wEAwB9B,CAAC;AAEH,gDAAgD;AAChD,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;oEAgCtB,CAAC;AAEH;;;GAGG;AACH,eAAO,MAAM,iBAAiB;;;;;oEAqC5B,CAAC"}
|
package/package.json
CHANGED
package/src/browser.ts
CHANGED
|
@@ -204,6 +204,27 @@ export {
|
|
|
204
204
|
isRetryableHttpStatus,
|
|
205
205
|
requestHasBody,
|
|
206
206
|
} from "./shared/http/fetch-retry";
|
|
207
|
+
export type {
|
|
208
|
+
BuildIdeaImageLinkDraftInput,
|
|
209
|
+
BuildIdeaLinkDraftInput,
|
|
210
|
+
IdeaCreateSchemaInput,
|
|
211
|
+
IdeaOriginal,
|
|
212
|
+
IdeaUpdateSchemaInput,
|
|
213
|
+
} from "./shared/idea";
|
|
214
|
+
export {
|
|
215
|
+
buildIdeaImageLinkDraft,
|
|
216
|
+
buildIdeaLinkDraft,
|
|
217
|
+
IDEA_IMAGE_LINK_NAME,
|
|
218
|
+
IDEA_IMAGE_TAG_RAW,
|
|
219
|
+
IDEA_IMAGE_TEMP_DIR,
|
|
220
|
+
IDEA_LINK_VALUE,
|
|
221
|
+
ideaCreateSchema,
|
|
222
|
+
ideaLinkValueFilters,
|
|
223
|
+
ideaUpdateSchema,
|
|
224
|
+
isIdeaImageLinkName,
|
|
225
|
+
normalizeStringList,
|
|
226
|
+
parseIdeaOriginal,
|
|
227
|
+
} from "./shared/idea";
|
|
207
228
|
export type {
|
|
208
229
|
CreateLoggerInput,
|
|
209
230
|
DecodedLogBatch,
|
package/src/link/index.ts
CHANGED
|
@@ -8,3 +8,5 @@ export type { LinkTargetDraftBuildInput } from "./link.build";
|
|
|
8
8
|
export { buildLinkTargetDraft, LINK_MANIFEST_VERSION, linkTargetDraftBuildInputSchema } from "./link.build";
|
|
9
9
|
export type { Link, LinkDetails } from "./link.interface";
|
|
10
10
|
export { CategoryLink } from "./link.interface";
|
|
11
|
+
export type { LinkDedupFiltersInput } from "./link.query";
|
|
12
|
+
export { linkDedupFilters } from "./link.query";
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { QueryFilter } from "../core.interface";
|
|
2
|
+
import { CategoryLink } from "./link.interface";
|
|
3
|
+
|
|
4
|
+
/** Dedup / lookup key: `category=link` + `value` + `name`. */
|
|
5
|
+
export type LinkDedupFiltersInput = {
|
|
6
|
+
value: string;
|
|
7
|
+
name: string;
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
/** Shared Link filters used by feed, media, and review query helpers. */
|
|
11
|
+
export function linkDedupFilters(input: LinkDedupFiltersInput): QueryFilter[] {
|
|
12
|
+
const name = input.name.trim();
|
|
13
|
+
return [
|
|
14
|
+
{ field: "category", operator: "eq", value: CategoryLink.LINK },
|
|
15
|
+
{ field: "value", operator: "eq", value: input.value },
|
|
16
|
+
{ field: "name", operator: "eq", value: name },
|
|
17
|
+
];
|
|
18
|
+
}
|
package/src/node.ts
CHANGED
|
@@ -176,6 +176,13 @@ export {
|
|
|
176
176
|
isFeedIngestSource,
|
|
177
177
|
registerFeed,
|
|
178
178
|
} from "./shared/feed/node";
|
|
179
|
+
export {
|
|
180
|
+
buildIdeaPasteRelativePath,
|
|
181
|
+
buildIdeaTempDownloadLocator,
|
|
182
|
+
hashIdeaPasteImage,
|
|
183
|
+
IDEA_TEMP_DOWNLOAD_PATH_SUFFIX,
|
|
184
|
+
parseIdeaTempDownloadLocator,
|
|
185
|
+
} from "./shared/idea/node";
|
|
179
186
|
export { runCollectLogTick } from "./shared/log/spool/collector";
|
|
180
187
|
export { LOG_SPOOL_SERVICE_ID_ENV } from "./shared/log/spool/config";
|
|
181
188
|
export type { LogSpoolCoordinator, LogSpoolCoordinatorOptions } from "./shared/log/spool/coordinator";
|
|
@@ -289,5 +296,6 @@ export type {
|
|
|
289
296
|
TriggerRunnerFn,
|
|
290
297
|
} from "./trigger/trigger.interface";
|
|
291
298
|
export * from "./trigger/trigger.interface";
|
|
299
|
+
export { buildDailyFireKey, buildFireKey, isDailyScheduleDue, isTriggerDue } from "./trigger/trigger.utils";
|
|
292
300
|
export { TriggerManager } from "./trigger/trigger-manager";
|
|
293
301
|
export { TriggerNode } from "./trigger/trigger-node";
|
|
@@ -159,6 +159,6 @@ Same variable as media register — see `src/shared/media/README.md`.
|
|
|
159
159
|
|
|
160
160
|
## Related
|
|
161
161
|
|
|
162
|
-
- `.cursor/skills/
|
|
162
|
+
- `.cursor/skills/link-conventions/SKILL.md`
|
|
163
163
|
- Media register pattern: `src/shared/media/README.md`
|
|
164
164
|
- Optimistic lock: `.cursor/skills/optimistic-lock-update/SKILL.md`
|
|
@@ -1,13 +1,8 @@
|
|
|
1
1
|
import type { QueryFilter } from "../../core.interface";
|
|
2
|
-
import {
|
|
2
|
+
import { linkDedupFilters } from "../../link/link.query";
|
|
3
3
|
import type { FeedValue } from "./feed.interface";
|
|
4
4
|
|
|
5
5
|
/** Dedup key: `category=link` + `value` + `name` (matches register / find). */
|
|
6
6
|
export function feedLinkDedupFilters(input: { value: FeedValue; name: string }): QueryFilter[] {
|
|
7
|
-
|
|
8
|
-
return [
|
|
9
|
-
{ field: "category", operator: "eq", value: CategoryLink.LINK },
|
|
10
|
-
{ field: "value", operator: "eq", value: input.value },
|
|
11
|
-
{ field: "name", operator: "eq", value: name },
|
|
12
|
-
];
|
|
7
|
+
return linkDedupFilters(input);
|
|
13
8
|
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# Idea Links (`shared/idea`)
|
|
2
|
+
|
|
3
|
+
Ideas are a **convention on `Link`**, not a new Target category (`category` stays `link`).
|
|
4
|
+
|
|
5
|
+
```text
|
|
6
|
+
src/shared/idea/
|
|
7
|
+
index.ts ← browser-safe barrel ONLY (never export ./node)
|
|
8
|
+
idea.interface.ts
|
|
9
|
+
idea.schema.ts
|
|
10
|
+
idea.build.ts
|
|
11
|
+
idea.normalize.ts
|
|
12
|
+
idea.parse.ts
|
|
13
|
+
idea.query.ts
|
|
14
|
+
README.md
|
|
15
|
+
VALIDATION-MATRIX.md
|
|
16
|
+
node/ ← Node-only (hash + temp download URL helpers)
|
|
17
|
+
index.ts
|
|
18
|
+
idea.hash.ts
|
|
19
|
+
idea.locator.ts
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
## Variants
|
|
23
|
+
|
|
24
|
+
| Kind | `value` | `name` | `original.content` | `original.url` |
|
|
25
|
+
|------|---------|--------|--------------------|----------------|
|
|
26
|
+
| Text note | `idea` | Title (caller) | Body text | Source page URL, etc. |
|
|
27
|
+
| Clipboard image | `idea` | **`idea.image`** (fixed) | SHA-256 hex of bytes | Temp download URL |
|
|
28
|
+
|
|
29
|
+
Filter rows with **`value=idea`** only — do not query `details.loaderKey`. When assembling drafts, set **`loaderKey === value === "idea"`**.
|
|
30
|
+
|
|
31
|
+
There is **no content-hash dedup** for image ideas.
|
|
32
|
+
|
|
33
|
+
## Package entry split
|
|
34
|
+
|
|
35
|
+
| Consumer import | What you get | Source |
|
|
36
|
+
|-----------------|--------------|--------|
|
|
37
|
+
| `from "target-supabase-sdk"` | Draft builders, schemas, parse, list filters | `shared/idea/index.ts` → `browser.ts` |
|
|
38
|
+
| `from "target-supabase-sdk/node"` | + `hashIdeaPasteImage`, temp download locators | `shared/idea/node/` → `node.ts` |
|
|
39
|
+
|
|
40
|
+
**Do not** re-export `./node` from `index.ts` / `browser.ts`.
|
|
41
|
+
|
|
42
|
+
```typescript
|
|
43
|
+
import {
|
|
44
|
+
buildIdeaLinkDraft,
|
|
45
|
+
buildIdeaImageLinkDraft,
|
|
46
|
+
ideaLinkValueFilters,
|
|
47
|
+
IDEA_LINK_VALUE,
|
|
48
|
+
IDEA_IMAGE_LINK_NAME,
|
|
49
|
+
ideaCreateSchema,
|
|
50
|
+
parseIdeaOriginal,
|
|
51
|
+
} from "target-supabase-sdk";
|
|
52
|
+
|
|
53
|
+
import {
|
|
54
|
+
hashIdeaPasteImage,
|
|
55
|
+
buildIdeaTempDownloadLocator,
|
|
56
|
+
buildIdeaPasteRelativePath,
|
|
57
|
+
} from "target-supabase-sdk/node";
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Quick-note (chrome extension) should wrap `buildIdeaLinkDraft` **locally** with extension tags — not via a dedicated SDK export.
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## Link field rules
|
|
65
|
+
|
|
66
|
+
| Field | Rule |
|
|
67
|
+
|-------|------|
|
|
68
|
+
| `value` | Always `idea` |
|
|
69
|
+
| `details.loaderKey` | Always `idea` |
|
|
70
|
+
| Text `name` | Title; max 500; must not be `idea.image` |
|
|
71
|
+
| Image `name` | Fixed `idea.image` via `buildIdeaImageLinkDraft` |
|
|
72
|
+
| `description` / `preview` | Default `""` |
|
|
73
|
+
| `tagList` | User/system tags; image default `[ ".raw" ]` |
|
|
74
|
+
|
|
75
|
+
See [VALIDATION-MATRIX.md](./VALIDATION-MATRIX.md) for limits across Zod, builders, and HTTP.
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## Related
|
|
80
|
+
|
|
81
|
+
- upload-service: `.cursor/skills/idea-link/SKILL.md`
|
|
82
|
+
- `.cursor/skills/link-conventions/SKILL.md`
|