@voyant-travel/action-ledger 0.104.10
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/LICENSE +201 -0
- package/dist/canary.d.ts +17 -0
- package/dist/canary.d.ts.map +1 -0
- package/dist/canary.js +77 -0
- package/dist/capability.d.ts +73 -0
- package/dist/capability.d.ts.map +1 -0
- package/dist/capability.js +206 -0
- package/dist/fingerprint.d.ts +26 -0
- package/dist/fingerprint.d.ts.map +1 -0
- package/dist/fingerprint.js +55 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/request-context.d.ts +136 -0
- package/dist/request-context.d.ts.map +1 -0
- package/dist/request-context.js +237 -0
- package/dist/route-schemas.d.ts +745 -0
- package/dist/route-schemas.d.ts.map +1 -0
- package/dist/route-schemas.js +428 -0
- package/dist/routes.d.ts +1602 -0
- package/dist/routes.d.ts.map +1 -0
- package/dist/routes.js +271 -0
- package/dist/schema.d.ts +1759 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +237 -0
- package/dist/service/approval-status.d.ts +3 -0
- package/dist/service/approval-status.d.ts.map +1 -0
- package/dist/service/approval-status.js +14 -0
- package/dist/service/cursors.d.ts +22 -0
- package/dist/service/cursors.d.ts.map +1 -0
- package/dist/service/cursors.js +48 -0
- package/dist/service/entries.d.ts +9 -0
- package/dist/service/entries.d.ts.map +1 -0
- package/dist/service/entries.js +75 -0
- package/dist/service/errors.d.ts +20 -0
- package/dist/service/errors.d.ts.map +1 -0
- package/dist/service/errors.js +36 -0
- package/dist/service/listing.d.ts +7 -0
- package/dist/service/listing.d.ts.map +1 -0
- package/dist/service/listing.js +77 -0
- package/dist/service/predicates.d.ts +8 -0
- package/dist/service/predicates.d.ts.map +1 -0
- package/dist/service/predicates.js +368 -0
- package/dist/service/records.d.ts +6 -0
- package/dist/service/records.d.ts.map +1 -0
- package/dist/service/records.js +51 -0
- package/dist/service/relay-lifecycle.d.ts +7 -0
- package/dist/service/relay-lifecycle.d.ts.map +1 -0
- package/dist/service/relay-lifecycle.js +78 -0
- package/dist/service/relay-outbox.d.ts +15 -0
- package/dist/service/relay-outbox.d.ts.map +1 -0
- package/dist/service/relay-outbox.js +15 -0
- package/dist/service/types.d.ts +249 -0
- package/dist/service/types.d.ts.map +1 -0
- package/dist/service/types.js +1 -0
- package/dist/service.d.ts +40 -0
- package/dist/service.d.ts.map +1 -0
- package/dist/service.js +283 -0
- package/dist/timeline.d.ts +67 -0
- package/dist/timeline.d.ts.map +1 -0
- package/dist/timeline.js +79 -0
- package/package.json +93 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeline.d.ts","sourceRoot":"","sources":["../src/timeline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAEpD,MAAM,MAAM,0BAA0B,GAAG;IACvC,UAAU,EAAE,MAAM,CAAA;IAClB,EAAE,EAAE,MAAM,CAAA;CACX,CAAA;AAED,MAAM,MAAM,2BAA2B,GAAG,IAAI,CAAC,iBAAiB,EAAE,YAAY,GAAG,WAAW,CAAC,GAAG;IAC9F,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,+BAA+B,GAAG,2BAA2B,GAAG;IAC1E,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;CAC/B,CAAA;AAED,MAAM,WAAW,8BAA8B;IAC7C,IAAI,EAAE,+BAA+B,EAAE,CAAA;IACvC,QAAQ,EAAE;QACR,UAAU,EAAE,0BAA0B,GAAG,IAAI,CAAA;KAC9C,CAAA;CACF;AAED,eAAO,MAAM,qCAAqC;;;;;;;;;;;;;;GAwB7C,CAAA;AAEL,MAAM,MAAM,+BAA+B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qCAAqC,CAAC,CAAA;AAEnG,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,CAMtE;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,iBAAiB,GAAG,2BAA2B,CAMhG;AAED,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,IAAI,CAAC,iBAAiB,EAAE,YAAY,GAAG,IAAI,CAAC,GAClD,0BAA0B,CAK5B;AAED,wBAAgB,+BAA+B,CAAC,OAAO,EAAE,iBAAiB,EAAE,GAAG,iBAAiB,EAAE,CAMjG;AAED,wBAAgB,mCAAmC,CAAC,EAClD,OAAO,EACP,KAAK,EACL,2BAAuC,GACxC,EAAE;IACD,OAAO,EAAE,iBAAiB,EAAE,CAAA;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,2BAA2B,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC,CAAA;CACjE,GAAG,8BAA8B,CAoBjC;AAED,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;CAOpB,CAAA"}
|
package/dist/timeline.js
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
export const actionLedgerTargetTimelineQuerySchema = z
|
|
3
|
+
.object({
|
|
4
|
+
cursorOccurredAt: z.string().datetime().optional(),
|
|
5
|
+
cursorId: z.string().trim().min(1).optional(),
|
|
6
|
+
limit: z.coerce.number().int().min(1).max(199).optional(),
|
|
7
|
+
})
|
|
8
|
+
.superRefine((value, ctx) => {
|
|
9
|
+
if (Boolean(value.cursorOccurredAt) === Boolean(value.cursorId))
|
|
10
|
+
return;
|
|
11
|
+
ctx.addIssue({
|
|
12
|
+
code: z.ZodIssueCode.custom,
|
|
13
|
+
path: value.cursorOccurredAt ? ["cursorId"] : ["cursorOccurredAt"],
|
|
14
|
+
message: "cursorOccurredAt and cursorId must be provided together",
|
|
15
|
+
});
|
|
16
|
+
})
|
|
17
|
+
.transform(({ cursorOccurredAt, cursorId, ...query }) => ({
|
|
18
|
+
...query,
|
|
19
|
+
cursor: cursorOccurredAt && cursorId
|
|
20
|
+
? {
|
|
21
|
+
occurredAt: cursorOccurredAt,
|
|
22
|
+
id: cursorId,
|
|
23
|
+
}
|
|
24
|
+
: undefined,
|
|
25
|
+
}));
|
|
26
|
+
export function serializeActionLedgerDate(value) {
|
|
27
|
+
const date = value instanceof Date ? value : new Date(value);
|
|
28
|
+
if (Number.isNaN(date.getTime())) {
|
|
29
|
+
throw new Error("Action ledger timeline timestamp must be a valid date");
|
|
30
|
+
}
|
|
31
|
+
return date.toISOString();
|
|
32
|
+
}
|
|
33
|
+
export function serializeActionLedgerEntry(entry) {
|
|
34
|
+
return {
|
|
35
|
+
...entry,
|
|
36
|
+
occurredAt: serializeActionLedgerDate(entry.occurredAt),
|
|
37
|
+
createdAt: serializeActionLedgerDate(entry.createdAt),
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
export function toActionLedgerTimelineCursor(entry) {
|
|
41
|
+
return {
|
|
42
|
+
occurredAt: serializeActionLedgerDate(entry.occurredAt),
|
|
43
|
+
id: entry.id,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
export function sortActionLedgerTimelineEntries(entries) {
|
|
47
|
+
return [...entries].sort((a, b) => {
|
|
48
|
+
const occurredAtDelta = new Date(b.occurredAt).getTime() - new Date(a.occurredAt).getTime();
|
|
49
|
+
if (occurredAtDelta !== 0)
|
|
50
|
+
return occurredAtDelta;
|
|
51
|
+
return b.id.localeCompare(a.id);
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
export function buildActionLedgerTargetTimelinePage({ entries, limit, mutationSummariesByActionId = new Map(), }) {
|
|
55
|
+
const entriesById = new Map();
|
|
56
|
+
for (const entry of entries) {
|
|
57
|
+
entriesById.set(entry.id, entry);
|
|
58
|
+
}
|
|
59
|
+
const sortedEntries = sortActionLedgerTimelineEntries([...entriesById.values()]);
|
|
60
|
+
const visibleEntries = sortedEntries.slice(0, limit);
|
|
61
|
+
const lastEntry = visibleEntries.at(-1);
|
|
62
|
+
return {
|
|
63
|
+
data: visibleEntries.map((entry) => ({
|
|
64
|
+
...serializeActionLedgerEntry(entry),
|
|
65
|
+
mutationSummary: mutationSummariesByActionId.get(entry.id) ?? null,
|
|
66
|
+
})),
|
|
67
|
+
pageInfo: {
|
|
68
|
+
nextCursor: sortedEntries.length > limit && lastEntry ? toActionLedgerTimelineCursor(lastEntry) : null,
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
export const __test__ = {
|
|
73
|
+
actionLedgerTargetTimelineQuerySchema,
|
|
74
|
+
buildActionLedgerTargetTimelinePage,
|
|
75
|
+
serializeActionLedgerDate,
|
|
76
|
+
serializeActionLedgerEntry,
|
|
77
|
+
sortActionLedgerTimelineEntries,
|
|
78
|
+
toActionLedgerTimelineCursor,
|
|
79
|
+
};
|
package/package.json
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@voyant-travel/action-ledger",
|
|
3
|
+
"version": "0.104.10",
|
|
4
|
+
"description": "Action ledger schema, append-only write helpers, and idempotency primitives for Voyant control surfaces.",
|
|
5
|
+
"license": "Apache-2.0",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": {
|
|
9
|
+
"types": "./dist/index.d.ts",
|
|
10
|
+
"import": "./dist/index.js",
|
|
11
|
+
"default": "./dist/index.js"
|
|
12
|
+
},
|
|
13
|
+
"./canary": {
|
|
14
|
+
"types": "./dist/canary.d.ts",
|
|
15
|
+
"import": "./dist/canary.js",
|
|
16
|
+
"default": "./dist/canary.js"
|
|
17
|
+
},
|
|
18
|
+
"./capability": {
|
|
19
|
+
"types": "./dist/capability.d.ts",
|
|
20
|
+
"import": "./dist/capability.js",
|
|
21
|
+
"default": "./dist/capability.js"
|
|
22
|
+
},
|
|
23
|
+
"./schema": {
|
|
24
|
+
"types": "./dist/schema.d.ts",
|
|
25
|
+
"import": "./dist/schema.js",
|
|
26
|
+
"default": "./dist/schema.js"
|
|
27
|
+
},
|
|
28
|
+
"./service": {
|
|
29
|
+
"types": "./dist/service.d.ts",
|
|
30
|
+
"import": "./dist/service.js",
|
|
31
|
+
"default": "./dist/service.js"
|
|
32
|
+
},
|
|
33
|
+
"./fingerprint": {
|
|
34
|
+
"types": "./dist/fingerprint.d.ts",
|
|
35
|
+
"import": "./dist/fingerprint.js",
|
|
36
|
+
"default": "./dist/fingerprint.js"
|
|
37
|
+
},
|
|
38
|
+
"./timeline": {
|
|
39
|
+
"types": "./dist/timeline.d.ts",
|
|
40
|
+
"import": "./dist/timeline.js",
|
|
41
|
+
"default": "./dist/timeline.js"
|
|
42
|
+
},
|
|
43
|
+
"./request-context": {
|
|
44
|
+
"types": "./dist/request-context.d.ts",
|
|
45
|
+
"import": "./dist/request-context.js",
|
|
46
|
+
"default": "./dist/request-context.js"
|
|
47
|
+
},
|
|
48
|
+
"./routes": {
|
|
49
|
+
"types": "./dist/routes.d.ts",
|
|
50
|
+
"import": "./dist/routes.js",
|
|
51
|
+
"default": "./dist/routes.js"
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
"dependencies": {
|
|
55
|
+
"drizzle-orm": "^0.45.2",
|
|
56
|
+
"hono": "^4.12.10",
|
|
57
|
+
"zod": "^4.3.6",
|
|
58
|
+
"@voyant-travel/core": "^0.109.0",
|
|
59
|
+
"@voyant-travel/db": "^0.108.0",
|
|
60
|
+
"@voyant-travel/hono": "^0.109.1"
|
|
61
|
+
},
|
|
62
|
+
"devDependencies": {
|
|
63
|
+
"typescript": "^6.0.2",
|
|
64
|
+
"vitest": "^4.1.2",
|
|
65
|
+
"@voyant-travel/voyant-typescript-config": "^0.1.0"
|
|
66
|
+
},
|
|
67
|
+
"files": [
|
|
68
|
+
"dist"
|
|
69
|
+
],
|
|
70
|
+
"publishConfig": {
|
|
71
|
+
"access": "public"
|
|
72
|
+
},
|
|
73
|
+
"repository": {
|
|
74
|
+
"type": "git",
|
|
75
|
+
"url": "https://github.com/voyant-travel/voyant.git",
|
|
76
|
+
"directory": "packages/action-ledger"
|
|
77
|
+
},
|
|
78
|
+
"voyant": {
|
|
79
|
+
"schema": "./schema",
|
|
80
|
+
"requiresSchemas": [
|
|
81
|
+
"@voyant-travel/db"
|
|
82
|
+
]
|
|
83
|
+
},
|
|
84
|
+
"scripts": {
|
|
85
|
+
"typecheck": "tsc --noEmit",
|
|
86
|
+
"lint": "biome check src/ tests/",
|
|
87
|
+
"test": "vitest run --passWithNoTests",
|
|
88
|
+
"build": "tsc -p tsconfig.json",
|
|
89
|
+
"clean": "rm -rf dist tsconfig.tsbuildinfo"
|
|
90
|
+
},
|
|
91
|
+
"main": "./dist/index.js",
|
|
92
|
+
"types": "./dist/index.d.ts"
|
|
93
|
+
}
|