@relkit/providers-local 0.0.0

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 (223) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +40 -0
  3. package/dist/buckets/index.d.ts +5 -0
  4. package/dist/buckets/index.d.ts.map +1 -0
  5. package/dist/buckets/index.js +5 -0
  6. package/dist/buckets/index.js.map +1 -0
  7. package/dist/buckets/keys.d.ts +7 -0
  8. package/dist/buckets/keys.d.ts.map +1 -0
  9. package/dist/buckets/keys.js +60 -0
  10. package/dist/buckets/keys.js.map +1 -0
  11. package/dist/buckets/operations.d.ts +11 -0
  12. package/dist/buckets/operations.d.ts.map +1 -0
  13. package/dist/buckets/operations.js +89 -0
  14. package/dist/buckets/operations.js.map +1 -0
  15. package/dist/buckets/pagination.d.ts +5 -0
  16. package/dist/buckets/pagination.d.ts.map +1 -0
  17. package/dist/buckets/pagination.js +34 -0
  18. package/dist/buckets/pagination.js.map +1 -0
  19. package/dist/buckets/policy.d.ts +8 -0
  20. package/dist/buckets/policy.d.ts.map +1 -0
  21. package/dist/buckets/policy.js +74 -0
  22. package/dist/buckets/policy.js.map +1 -0
  23. package/dist/buckets/provider.d.ts +4 -0
  24. package/dist/buckets/provider.d.ts.map +1 -0
  25. package/dist/buckets/provider.js +119 -0
  26. package/dist/buckets/provider.js.map +1 -0
  27. package/dist/buckets/storage.d.ts +12 -0
  28. package/dist/buckets/storage.d.ts.map +1 -0
  29. package/dist/buckets/storage.js +169 -0
  30. package/dist/buckets/storage.js.map +1 -0
  31. package/dist/buckets/types.d.ts +91 -0
  32. package/dist/buckets/types.d.ts.map +1 -0
  33. package/dist/buckets/types.js +34 -0
  34. package/dist/buckets/types.js.map +1 -0
  35. package/dist/cache/index.d.ts +8 -0
  36. package/dist/cache/index.d.ts.map +1 -0
  37. package/dist/cache/index.js +8 -0
  38. package/dist/cache/index.js.map +1 -0
  39. package/dist/cache/inspector.d.ts +4 -0
  40. package/dist/cache/inspector.d.ts.map +1 -0
  41. package/dist/cache/inspector.js +62 -0
  42. package/dist/cache/inspector.js.map +1 -0
  43. package/dist/cache/keys.d.ts +6 -0
  44. package/dist/cache/keys.d.ts.map +1 -0
  45. package/dist/cache/keys.js +34 -0
  46. package/dist/cache/keys.js.map +1 -0
  47. package/dist/cache/persistence.d.ts +5 -0
  48. package/dist/cache/persistence.d.ts.map +1 -0
  49. package/dist/cache/persistence.js +108 -0
  50. package/dist/cache/persistence.js.map +1 -0
  51. package/dist/cache/policy.d.ts +9 -0
  52. package/dist/cache/policy.d.ts.map +1 -0
  53. package/dist/cache/policy.js +64 -0
  54. package/dist/cache/policy.js.map +1 -0
  55. package/dist/cache/provider.d.ts +3 -0
  56. package/dist/cache/provider.d.ts.map +1 -0
  57. package/dist/cache/provider.js +164 -0
  58. package/dist/cache/provider.js.map +1 -0
  59. package/dist/cache/store.d.ts +44 -0
  60. package/dist/cache/store.d.ts.map +1 -0
  61. package/dist/cache/store.js +132 -0
  62. package/dist/cache/store.js.map +1 -0
  63. package/dist/cache/types.d.ts +100 -0
  64. package/dist/cache/types.d.ts.map +1 -0
  65. package/dist/cache/types.js +39 -0
  66. package/dist/cache/types.js.map +1 -0
  67. package/dist/cache/write.d.ts +5 -0
  68. package/dist/cache/write.d.ts.map +1 -0
  69. package/dist/cache/write.js +13 -0
  70. package/dist/cache/write.js.map +1 -0
  71. package/dist/events/admin-actions.d.ts +7 -0
  72. package/dist/events/admin-actions.d.ts.map +1 -0
  73. package/dist/events/admin-actions.js +28 -0
  74. package/dist/events/admin-actions.js.map +1 -0
  75. package/dist/events/admin-contracts.d.ts +132 -0
  76. package/dist/events/admin-contracts.d.ts.map +1 -0
  77. package/dist/events/admin-contracts.js +4 -0
  78. package/dist/events/admin-contracts.js.map +1 -0
  79. package/dist/events/admin-errors.d.ts +5 -0
  80. package/dist/events/admin-errors.d.ts.map +1 -0
  81. package/dist/events/admin-errors.js +9 -0
  82. package/dist/events/admin-errors.js.map +1 -0
  83. package/dist/events/admin-state.d.ts +8 -0
  84. package/dist/events/admin-state.d.ts.map +1 -0
  85. package/dist/events/admin-state.js +10 -0
  86. package/dist/events/admin-state.js.map +1 -0
  87. package/dist/events/admin-utils.d.ts +27 -0
  88. package/dist/events/admin-utils.d.ts.map +1 -0
  89. package/dist/events/admin-utils.js +153 -0
  90. package/dist/events/admin-utils.js.map +1 -0
  91. package/dist/events/admin.d.ts +22 -0
  92. package/dist/events/admin.d.ts.map +1 -0
  93. package/dist/events/admin.js +92 -0
  94. package/dist/events/admin.js.map +1 -0
  95. package/dist/events/delivery-types.d.ts +74 -0
  96. package/dist/events/delivery-types.d.ts.map +1 -0
  97. package/dist/events/delivery-types.js +9 -0
  98. package/dist/events/delivery-types.js.map +1 -0
  99. package/dist/events/delivery-utils.d.ts +17 -0
  100. package/dist/events/delivery-utils.d.ts.map +1 -0
  101. package/dist/events/delivery-utils.js +133 -0
  102. package/dist/events/delivery-utils.js.map +1 -0
  103. package/dist/events/delivery.d.ts +6 -0
  104. package/dist/events/delivery.d.ts.map +1 -0
  105. package/dist/events/delivery.js +159 -0
  106. package/dist/events/delivery.js.map +1 -0
  107. package/dist/events/ephemeral.d.ts +36 -0
  108. package/dist/events/ephemeral.d.ts.map +1 -0
  109. package/dist/events/ephemeral.js +61 -0
  110. package/dist/events/ephemeral.js.map +1 -0
  111. package/dist/events/log.d.ts +37 -0
  112. package/dist/events/log.d.ts.map +1 -0
  113. package/dist/events/log.js +121 -0
  114. package/dist/events/log.js.map +1 -0
  115. package/dist/events/provider.d.ts +9 -0
  116. package/dist/events/provider.d.ts.map +1 -0
  117. package/dist/events/provider.js +37 -0
  118. package/dist/events/provider.js.map +1 -0
  119. package/dist/events/router-inspection.d.ts +18 -0
  120. package/dist/events/router-inspection.d.ts.map +1 -0
  121. package/dist/events/router-inspection.js +110 -0
  122. package/dist/events/router-inspection.js.map +1 -0
  123. package/dist/events/router-records.d.ts +34 -0
  124. package/dist/events/router-records.d.ts.map +1 -0
  125. package/dist/events/router-records.js +98 -0
  126. package/dist/events/router-records.js.map +1 -0
  127. package/dist/events/router-types.d.ts +83 -0
  128. package/dist/events/router-types.d.ts.map +1 -0
  129. package/dist/events/router-types.js +2 -0
  130. package/dist/events/router-types.js.map +1 -0
  131. package/dist/events/router.d.ts +7 -0
  132. package/dist/events/router.d.ts.map +1 -0
  133. package/dist/events/router.js +148 -0
  134. package/dist/events/router.js.map +1 -0
  135. package/dist/factory.d.ts +26 -0
  136. package/dist/factory.d.ts.map +1 -0
  137. package/dist/factory.js +66 -0
  138. package/dist/factory.js.map +1 -0
  139. package/dist/index.d.ts +18 -0
  140. package/dist/index.d.ts.map +1 -0
  141. package/dist/index.js +15 -0
  142. package/dist/index.js.map +1 -0
  143. package/dist/jobs/admin-contracts.d.ts +66 -0
  144. package/dist/jobs/admin-contracts.d.ts.map +1 -0
  145. package/dist/jobs/admin-contracts.js +4 -0
  146. package/dist/jobs/admin-contracts.js.map +1 -0
  147. package/dist/jobs/admin-errors.d.ts +5 -0
  148. package/dist/jobs/admin-errors.d.ts.map +1 -0
  149. package/dist/jobs/admin-errors.js +9 -0
  150. package/dist/jobs/admin-errors.js.map +1 -0
  151. package/dist/jobs/admin-utils.d.ts +29 -0
  152. package/dist/jobs/admin-utils.d.ts.map +1 -0
  153. package/dist/jobs/admin-utils.js +138 -0
  154. package/dist/jobs/admin-utils.js.map +1 -0
  155. package/dist/jobs/admin.d.ts +25 -0
  156. package/dist/jobs/admin.d.ts.map +1 -0
  157. package/dist/jobs/admin.js +89 -0
  158. package/dist/jobs/admin.js.map +1 -0
  159. package/dist/jobs/cron.d.ts +10 -0
  160. package/dist/jobs/cron.d.ts.map +1 -0
  161. package/dist/jobs/cron.js +18 -0
  162. package/dist/jobs/cron.js.map +1 -0
  163. package/dist/jobs/idempotency.d.ts +18 -0
  164. package/dist/jobs/idempotency.d.ts.map +1 -0
  165. package/dist/jobs/idempotency.js +82 -0
  166. package/dist/jobs/idempotency.js.map +1 -0
  167. package/dist/jobs/lease-utils.d.ts +9 -0
  168. package/dist/jobs/lease-utils.d.ts.map +1 -0
  169. package/dist/jobs/lease-utils.js +31 -0
  170. package/dist/jobs/lease-utils.js.map +1 -0
  171. package/dist/jobs/queue-admin.d.ts +12 -0
  172. package/dist/jobs/queue-admin.d.ts.map +1 -0
  173. package/dist/jobs/queue-admin.js +42 -0
  174. package/dist/jobs/queue-admin.js.map +1 -0
  175. package/dist/jobs/queue-entry.d.ts +8 -0
  176. package/dist/jobs/queue-entry.d.ts.map +1 -0
  177. package/dist/jobs/queue-entry.js +130 -0
  178. package/dist/jobs/queue-entry.js.map +1 -0
  179. package/dist/jobs/queue-lease.d.ts +4 -0
  180. package/dist/jobs/queue-lease.d.ts.map +1 -0
  181. package/dist/jobs/queue-lease.js +12 -0
  182. package/dist/jobs/queue-lease.js.map +1 -0
  183. package/dist/jobs/queue-operations.d.ts +16 -0
  184. package/dist/jobs/queue-operations.d.ts.map +1 -0
  185. package/dist/jobs/queue-operations.js +107 -0
  186. package/dist/jobs/queue-operations.js.map +1 -0
  187. package/dist/jobs/queue-recovery.d.ts +5 -0
  188. package/dist/jobs/queue-recovery.d.ts.map +1 -0
  189. package/dist/jobs/queue-recovery.js +22 -0
  190. package/dist/jobs/queue-recovery.js.map +1 -0
  191. package/dist/jobs/queue-utils.d.ts +101 -0
  192. package/dist/jobs/queue-utils.d.ts.map +1 -0
  193. package/dist/jobs/queue-utils.js +28 -0
  194. package/dist/jobs/queue-utils.js.map +1 -0
  195. package/dist/jobs/queue.d.ts +7 -0
  196. package/dist/jobs/queue.d.ts.map +1 -0
  197. package/dist/jobs/queue.js +70 -0
  198. package/dist/jobs/queue.js.map +1 -0
  199. package/dist/jobs/retry.d.ts +25 -0
  200. package/dist/jobs/retry.d.ts.map +1 -0
  201. package/dist/jobs/retry.js +84 -0
  202. package/dist/jobs/retry.js.map +1 -0
  203. package/dist/jobs/scheduler.d.ts +52 -0
  204. package/dist/jobs/scheduler.d.ts.map +1 -0
  205. package/dist/jobs/scheduler.js +122 -0
  206. package/dist/jobs/scheduler.js.map +1 -0
  207. package/dist/jobs/store-files.d.ts +20 -0
  208. package/dist/jobs/store-files.d.ts.map +1 -0
  209. package/dist/jobs/store-files.js +177 -0
  210. package/dist/jobs/store-files.js.map +1 -0
  211. package/dist/jobs/store.d.ts +60 -0
  212. package/dist/jobs/store.d.ts.map +1 -0
  213. package/dist/jobs/store.js +97 -0
  214. package/dist/jobs/store.js.map +1 -0
  215. package/dist/runtime-capabilities.d.ts +17 -0
  216. package/dist/runtime-capabilities.d.ts.map +1 -0
  217. package/dist/runtime-capabilities.js +32 -0
  218. package/dist/runtime-capabilities.js.map +1 -0
  219. package/dist/state.d.ts +15 -0
  220. package/dist/state.d.ts.map +1 -0
  221. package/dist/state.js +69 -0
  222. package/dist/state.js.map +1 -0
  223. package/package.json +47 -0
@@ -0,0 +1,169 @@
1
+ import { createHash, randomUUID } from "node:crypto";
2
+ import { lstatSync, mkdirSync } from "node:fs";
3
+ import { readFile, readdir, rename, rm, writeFile } from "node:fs/promises";
4
+ import { join, resolve } from "node:path";
5
+ import { assertContainedPath, encodeBucketKey, normalizeBucketKey } from "./keys.js";
6
+ import { quarantineStateFile } from "../state.js";
7
+ import { LocalBucketStateError } from "./types.js";
8
+ const OBJECT_DIRECTORY = "objects";
9
+ const OBJECT_SUFFIX = ".json";
10
+ export function createBucketStorage(requestedRoot) {
11
+ const root = resolve(requestedRoot);
12
+ if (root === resolve("/"))
13
+ throw new LocalBucketStateError("Bucket root is too broad");
14
+ const objectRoot = join(root, OBJECT_DIRECTORY);
15
+ ensureDirectory(root);
16
+ ensureDirectory(objectRoot);
17
+ assertContainedPath(root, objectRoot);
18
+ const storage = Object.freeze({
19
+ root,
20
+ objectRoot,
21
+ read: (key) => readObject(objectRoot, key),
22
+ write: (value) => writeObject(objectRoot, value),
23
+ remove: (key) => removeObject(objectRoot, key),
24
+ list: () => listObjects(objectRoot),
25
+ ready: async () => {
26
+ await listObjects(objectRoot);
27
+ },
28
+ });
29
+ return storage;
30
+ }
31
+ async function readObject(objectRoot, key) {
32
+ const path = objectPath(objectRoot, key);
33
+ let contents;
34
+ try {
35
+ contents = await readFile(path, "utf8");
36
+ }
37
+ catch (cause) {
38
+ if (isMissing(cause))
39
+ return undefined;
40
+ throw new LocalBucketStateError("Bucket object state cannot be read");
41
+ }
42
+ try {
43
+ return parseObject(contents, key);
44
+ }
45
+ catch (cause) {
46
+ if (!(cause instanceof LocalBucketStateError))
47
+ throw cause;
48
+ quarantineStateFile(path, resolve(objectRoot, ".."));
49
+ return undefined;
50
+ }
51
+ }
52
+ async function writeObject(objectRoot, value) {
53
+ const target = objectPath(objectRoot, value.key);
54
+ const temporary = join(objectRoot, `.relkit-tmp-${randomUUID()}${OBJECT_SUFFIX}`);
55
+ try {
56
+ await writeFile(temporary, JSON.stringify(value), {
57
+ encoding: "utf8",
58
+ flag: "wx",
59
+ mode: 0o600,
60
+ });
61
+ await rename(temporary, target);
62
+ }
63
+ catch (cause) {
64
+ await rm(temporary, { force: true }).catch(() => undefined);
65
+ if (cause instanceof LocalBucketStateError)
66
+ throw cause;
67
+ throw new LocalBucketStateError("Bucket object write could not be committed");
68
+ }
69
+ }
70
+ async function removeObject(objectRoot, key) {
71
+ await rm(objectPath(objectRoot, key), { force: true });
72
+ }
73
+ async function listObjects(objectRoot) {
74
+ let entries;
75
+ try {
76
+ entries = await readdir(objectRoot, { withFileTypes: true });
77
+ }
78
+ catch (cause) {
79
+ if (isMissing(cause))
80
+ return [];
81
+ throw new LocalBucketStateError("Bucket object directory cannot be read");
82
+ }
83
+ const values = [];
84
+ for (const entry of entries) {
85
+ if (!entry.isFile() ||
86
+ !entry.name.endsWith(OBJECT_SUFFIX) ||
87
+ entry.name.startsWith(".relkit-")) {
88
+ continue;
89
+ }
90
+ const path = join(objectRoot, entry.name);
91
+ let contents;
92
+ try {
93
+ contents = await readFile(path, "utf8");
94
+ }
95
+ catch {
96
+ throw new LocalBucketStateError("Bucket object state cannot be read");
97
+ }
98
+ try {
99
+ values.push(parseObject(contents));
100
+ }
101
+ catch (cause) {
102
+ if (!(cause instanceof LocalBucketStateError))
103
+ throw cause;
104
+ quarantineStateFile(path, resolve(objectRoot, ".."));
105
+ }
106
+ }
107
+ return values;
108
+ }
109
+ function objectPath(objectRoot, key) {
110
+ const path = join(objectRoot, `${encodeBucketKey(key)}${OBJECT_SUFFIX}`);
111
+ assertContainedPath(objectRoot, path);
112
+ return path;
113
+ }
114
+ function parseObject(contents, expectedKey) {
115
+ try {
116
+ const value = JSON.parse(contents);
117
+ if (value.version !== 1 ||
118
+ typeof value.key !== "string" ||
119
+ (expectedKey !== undefined && value.key !== expectedKey) ||
120
+ !Number.isSafeInteger(value.size) ||
121
+ value.size < 0 ||
122
+ typeof value.contentHash !== "string" ||
123
+ typeof value.etag !== "string" ||
124
+ typeof value.data !== "string" ||
125
+ !isStringRecord(value.metadata)) {
126
+ throw new Error();
127
+ }
128
+ normalizeBucketKey(value.key);
129
+ if (value.contentType !== undefined && typeof value.contentType !== "string") {
130
+ throw new Error();
131
+ }
132
+ const bytes = Buffer.from(value.data, "base64");
133
+ if (bytes.toString("base64") !== value.data ||
134
+ bytes.byteLength !== value.size ||
135
+ value.etag !== value.contentHash ||
136
+ `sha256:${createHash("sha256").update(bytes).digest("hex")}` !== value.contentHash) {
137
+ throw new Error();
138
+ }
139
+ return value;
140
+ }
141
+ catch {
142
+ throw new LocalBucketStateError("Bucket object state is malformed");
143
+ }
144
+ }
145
+ function ensureDirectory(path) {
146
+ try {
147
+ const info = lstatSync(path);
148
+ if (!info.isDirectory() || info.isSymbolicLink())
149
+ throw new LocalBucketStateError("Bucket root is not a directory");
150
+ }
151
+ catch (cause) {
152
+ if (!cause.code?.includes("ENOENT"))
153
+ throw cause;
154
+ mkdirSync(path, { recursive: true });
155
+ const info = lstatSync(path);
156
+ if (!info.isDirectory() || info.isSymbolicLink())
157
+ throw new LocalBucketStateError("Bucket root is not a directory");
158
+ }
159
+ }
160
+ function isStringRecord(value) {
161
+ return (value !== null &&
162
+ typeof value === "object" &&
163
+ !Array.isArray(value) &&
164
+ Object.values(value).every((entry) => typeof entry === "string"));
165
+ }
166
+ function isMissing(value) {
167
+ return value?.code === "ENOENT";
168
+ }
169
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/buckets/storage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,91 @@
1
+ import type { BucketCapabilities, BucketCapability, BucketObjectMetadata, BucketOperation, BucketProvider } from "@relkit/buckets";
2
+ export declare const LOCAL_BUCKET_CAPABILITIES: Readonly<BucketCapabilities>;
3
+ export declare const LOCAL_BUCKET_RESERVED_PREFIXES: readonly string[];
4
+ export interface LocalBucketPolicy {
5
+ readonly maxObjectBytes?: number;
6
+ readonly allowedContentTypes?: readonly string[];
7
+ }
8
+ export interface LocalBucketProviderOptions extends LocalBucketPolicy {
9
+ readonly root?: string;
10
+ readonly stateRoot?: string;
11
+ readonly policy?: LocalBucketPolicy;
12
+ readonly pageSize?: number;
13
+ }
14
+ export interface LocalBucketListOptions {
15
+ readonly cursor?: string;
16
+ readonly limit?: number;
17
+ }
18
+ export interface LocalBucketListPage {
19
+ readonly items: readonly string[];
20
+ readonly nextCursor?: string;
21
+ }
22
+ export interface LocalBucketObjectMetadata extends BucketObjectMetadata {
23
+ readonly contentHash: string;
24
+ }
25
+ export interface StoredLocalBucketObject {
26
+ readonly version: 1;
27
+ readonly key: string;
28
+ readonly size: number;
29
+ readonly contentHash: string;
30
+ readonly etag: string;
31
+ readonly contentType?: string;
32
+ readonly metadata: Readonly<Record<string, string>>;
33
+ readonly data: string;
34
+ }
35
+ export type LocalBucketProvider = Omit<BucketProvider, "list"> & {
36
+ readonly capabilities: Readonly<BucketCapabilities>;
37
+ readonly root: string;
38
+ readonly policy: Readonly<LocalBucketPolicy>;
39
+ readonly list: {
40
+ (prefix?: string): Promise<readonly string[]>;
41
+ (prefix: string | undefined, options: LocalBucketListOptions): Promise<LocalBucketListPage>;
42
+ };
43
+ readonly listPage: (prefix?: string, options?: LocalBucketListOptions) => Promise<LocalBucketListPage>;
44
+ readonly ready: () => Promise<void>;
45
+ readonly close: () => Promise<void>;
46
+ readonly inspector: {
47
+ readonly list: (request: {
48
+ readonly prefix?: string;
49
+ readonly cursor?: string;
50
+ readonly limit: number;
51
+ readonly signal: AbortSignal;
52
+ }) => Promise<{
53
+ readonly items: readonly {
54
+ readonly key: string;
55
+ readonly metadata?: BucketObjectMetadata;
56
+ }[];
57
+ readonly nextCursor?: string;
58
+ }>;
59
+ readonly preview: (request: {
60
+ readonly key: string;
61
+ readonly offset: number;
62
+ readonly limit: number;
63
+ readonly signal: AbortSignal;
64
+ }) => Promise<{
65
+ readonly bytes: Uint8Array;
66
+ readonly metadata: BucketObjectMetadata;
67
+ readonly totalBytes: number;
68
+ } | undefined>;
69
+ };
70
+ };
71
+ export declare class LocalBucketKeyError extends TypeError {
72
+ readonly code: "RELKIT_BUCKET_KEY_INVALID";
73
+ constructor();
74
+ }
75
+ export declare class LocalBucketPolicyError extends TypeError {
76
+ readonly code: "RELKIT_BUCKET_POLICY_INVALID";
77
+ constructor(message: string);
78
+ }
79
+ export declare class LocalBucketStateError extends Error {
80
+ readonly code: "RELKIT_BUCKET_STATE_INVALID";
81
+ constructor(message?: string);
82
+ }
83
+ export declare class LocalBucketPaginationError extends TypeError {
84
+ readonly code: "RELKIT_BUCKET_CURSOR_INVALID";
85
+ constructor();
86
+ }
87
+ export type LocalBucketUnsupportedCapability = {
88
+ readonly capability: BucketCapability;
89
+ readonly operation: BucketOperation;
90
+ };
91
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/buckets/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ export const LOCAL_BUCKET_CAPABILITIES = Object.freeze({
2
+ signedReadUrl: false,
3
+ signedWriteUrl: false,
4
+ });
5
+ export const LOCAL_BUCKET_RESERVED_PREFIXES = Object.freeze([".relkit", "__relkit"]);
6
+ export class LocalBucketKeyError extends TypeError {
7
+ code = "RELKIT_BUCKET_KEY_INVALID";
8
+ constructor() {
9
+ super("Bucket key is invalid");
10
+ this.name = "LocalBucketKeyError";
11
+ }
12
+ }
13
+ export class LocalBucketPolicyError extends TypeError {
14
+ code = "RELKIT_BUCKET_POLICY_INVALID";
15
+ constructor(message) {
16
+ super(message);
17
+ this.name = "LocalBucketPolicyError";
18
+ }
19
+ }
20
+ export class LocalBucketStateError extends Error {
21
+ code = "RELKIT_BUCKET_STATE_INVALID";
22
+ constructor(message = "Bucket state is invalid") {
23
+ super(message);
24
+ this.name = "LocalBucketStateError";
25
+ }
26
+ }
27
+ export class LocalBucketPaginationError extends TypeError {
28
+ code = "RELKIT_BUCKET_CURSOR_INVALID";
29
+ constructor() {
30
+ super("Bucket list cursor or limit is invalid");
31
+ this.name = "LocalBucketPaginationError";
32
+ }
33
+ }
34
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/buckets/types.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,MAAM,yBAAyB,GAAiC,MAAM,CAAC,MAAM,CAAC;IACnF,aAAa,EAAE,KAAK;IACpB,cAAc,EAAE,KAAK;CACtB,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,8BAA8B,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;AA+ErF,MAAM,OAAO,mBAAoB,SAAQ,SAAS;IACvC,IAAI,GAAG,2BAAoC,CAAC;IAErD;QACE,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAC/B,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAED,MAAM,OAAO,sBAAuB,SAAQ,SAAS;IAC1C,IAAI,GAAG,8BAAuC,CAAC;IAExD,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,wBAAwB,CAAC;IACvC,CAAC;CACF;AAED,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IACrC,IAAI,GAAG,6BAAsC,CAAC;IAEvD,YAAY,OAAO,GAAG,yBAAyB;QAC7C,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACtC,CAAC;CACF;AAED,MAAM,OAAO,0BAA2B,SAAQ,SAAS;IAC9C,IAAI,GAAG,8BAAuC,CAAC;IAExD;QACE,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAChD,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAC;IAC3C,CAAC;CACF"}
@@ -0,0 +1,8 @@
1
+ export * from "./keys.js";
2
+ export * from "./inspector.js";
3
+ export * from "./policy.js";
4
+ export { createLocalCacheProvider } from "./provider.js";
5
+ export { createLocalCacheProvider as createLocalCacheProviderForTest } from "./provider.js";
6
+ export * from "./store.js";
7
+ export * from "./types.js";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cache/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,wBAAwB,IAAI,+BAA+B,EAAE,MAAM,eAAe,CAAC;AAC5F,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC"}
@@ -0,0 +1,8 @@
1
+ export * from "./keys.js";
2
+ export * from "./inspector.js";
3
+ export * from "./policy.js";
4
+ export { createLocalCacheProvider } from "./provider.js";
5
+ export { createLocalCacheProvider as createLocalCacheProviderForTest } from "./provider.js";
6
+ export * from "./store.js";
7
+ export * from "./types.js";
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cache/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,OAAO,EAAE,wBAAwB,EAAE,MAAM,eAAe,CAAC;AACzD,OAAO,EAAE,wBAAwB,IAAI,+BAA+B,EAAE,MAAM,eAAe,CAAC;AAC5F,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { type LocalCacheProvider } from "./types.js";
2
+ import type { LocalCacheStore } from "./store.js";
3
+ export declare function createLocalCacheInspector(store: LocalCacheStore, clock: () => number): LocalCacheProvider["inspector"];
4
+ //# sourceMappingURL=inspector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspector.d.ts","sourceRoot":"","sources":["../../src/cache/inspector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACzE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,eAAe,EACtB,KAAK,EAAE,MAAM,MAAM,GAClB,kBAAkB,CAAC,WAAW,CAAC,CA2CjC"}
@@ -0,0 +1,62 @@
1
+ import { LocalCacheKeyError } from "./types.js";
2
+ export function createLocalCacheInspector(store, clock) {
3
+ return Object.freeze({
4
+ scan: async (request) => {
5
+ if (request.signal.aborted)
6
+ throw request.signal.reason;
7
+ const now = clock();
8
+ store.purgeExpired(now);
9
+ const entries = store
10
+ .exportState()
11
+ .entries.map((entry) => ({ entry, key: publicKey(entry.key) }))
12
+ .filter(({ key }) => request.search === undefined || key.includes(request.search));
13
+ const start = request.cursor === undefined ? 0 : Number(request.cursor);
14
+ if (!Number.isSafeInteger(start) || start < 0)
15
+ throw new LocalCacheKeyError();
16
+ const selected = entries.slice(start, start + request.limit);
17
+ const next = start + selected.length;
18
+ return {
19
+ items: selected.map(({ entry, key }) => ({
20
+ key,
21
+ type: valueType(entry.value),
22
+ ttlMs: entry.expiresAt === undefined ? null : Math.max(0, entry.expiresAt - now),
23
+ bytes: entry.bytes,
24
+ })),
25
+ ...(next < entries.length ? { nextCursor: String(next) } : {}),
26
+ };
27
+ },
28
+ value: async (request) => {
29
+ if (request.signal.aborted)
30
+ throw request.signal.reason;
31
+ const now = clock();
32
+ store.purgeExpired(now);
33
+ const found = store
34
+ .exportState()
35
+ .entries.find((entry) => publicKey(entry.key) === request.key);
36
+ if (found === undefined)
37
+ return undefined;
38
+ const serialized = JSON.stringify(found.value);
39
+ const bytes = new TextEncoder().encode(serialized).byteLength;
40
+ return {
41
+ key: request.key,
42
+ type: valueType(found.value),
43
+ ttlMs: found.expiresAt === undefined ? null : Math.max(0, found.expiresAt - now),
44
+ bytes,
45
+ ...(bytes > request.limit ? { truncated: true } : { value: found.value, truncated: false }),
46
+ };
47
+ },
48
+ });
49
+ }
50
+ function publicKey(encoded) {
51
+ try {
52
+ const value = JSON.parse(encoded);
53
+ return JSON.stringify(value.key);
54
+ }
55
+ catch {
56
+ throw new LocalCacheKeyError();
57
+ }
58
+ }
59
+ function valueType(value) {
60
+ return value === null ? "null" : Array.isArray(value) ? "array" : typeof value;
61
+ }
62
+ //# sourceMappingURL=inspector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspector.js","sourceRoot":"","sources":["../../src/cache/inspector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export declare function normalizeCacheId(value: unknown): string;
2
+ export declare function normalizeSchemaVersion(value: unknown): string | number;
3
+ /** Builds a deterministic namespace key without exposing the raw key to logs. */
4
+ export declare function createLocalCacheKey(cacheId: string, schemaVersion: string | number, key: unknown): string;
5
+ export declare function serializeLocalCacheValue(value: unknown): string;
6
+ //# sourceMappingURL=keys.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../src/cache/keys.ts"],"names":[],"mappings":"AAGA,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAKvD;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAStE;AAED,iFAAiF;AACjF,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,GAAG,MAAM,EAC9B,GAAG,EAAE,OAAO,GACX,MAAM,CAMR;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAM/D"}
@@ -0,0 +1,34 @@
1
+ import { canonicalJson } from "@relkit/contracts";
2
+ import { LocalCacheKeyError, LocalCacheValueError } from "./types.js";
3
+ export function normalizeCacheId(value) {
4
+ if (typeof value !== "string" || value.trim() === "") {
5
+ throw new LocalCacheKeyError();
6
+ }
7
+ return value.trim();
8
+ }
9
+ export function normalizeSchemaVersion(value) {
10
+ if ((typeof value !== "string" && typeof value !== "number") ||
11
+ (typeof value === "string" && value.trim() === "") ||
12
+ (typeof value === "number" && (!Number.isSafeInteger(value) || value < 0))) {
13
+ throw new LocalCacheKeyError();
14
+ }
15
+ return typeof value === "string" ? value.trim() : value;
16
+ }
17
+ /** Builds a deterministic namespace key without exposing the raw key to logs. */
18
+ export function createLocalCacheKey(cacheId, schemaVersion, key) {
19
+ try {
20
+ return canonicalJson({ cacheId, key, schemaVersion });
21
+ }
22
+ catch {
23
+ throw new LocalCacheKeyError();
24
+ }
25
+ }
26
+ export function serializeLocalCacheValue(value) {
27
+ try {
28
+ return canonicalJson(value);
29
+ }
30
+ catch {
31
+ throw new LocalCacheValueError();
32
+ }
33
+ }
34
+ //# sourceMappingURL=keys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keys.js","sourceRoot":"","sources":["../../src/cache/keys.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEtE,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACrD,MAAM,IAAI,kBAAkB,EAAE,CAAC;IACjC,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAc;IACnD,IACE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC;QACxD,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;QAClD,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,EAC1E,CAAC;QACD,MAAM,IAAI,kBAAkB,EAAE,CAAC;IACjC,CAAC;IACD,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;AAC1D,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,mBAAmB,CACjC,OAAe,EACf,aAA8B,EAC9B,GAAY;IAEZ,IAAI,CAAC;QACH,OAAO,aAAa,CAAC,EAAE,OAAO,EAAE,GAAG,EAAE,aAAa,EAAE,CAAC,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,kBAAkB,EAAE,CAAC;IACjC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,KAAc;IACrD,IAAI,CAAC;QACH,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,oBAAoB,EAAE,CAAC;IACnC,CAAC;AACH,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { LocalCacheStoreState } from "./store.js";
2
+ export declare function snapshotPath(root: string): string;
3
+ export declare function readCacheState(path: string, cacheId: string, schemaVersion: string | number): LocalCacheStoreState | undefined;
4
+ export declare function writeCacheState(path: string, state: LocalCacheStoreState, cacheId: string, schemaVersion: string | number): Promise<void>;
5
+ //# sourceMappingURL=persistence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../../src/cache/persistence.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAIvD,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,GAAG,MAAM,GAC7B,oBAAoB,GAAG,SAAS,CAwBlC;AAED,wBAAsB,eAAe,CACnC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,oBAAoB,EAC3B,OAAO,EAAE,MAAM,EACf,aAAa,EAAE,MAAM,GAAG,MAAM,GAC7B,OAAO,CAAC,IAAI,CAAC,CAWf"}
@@ -0,0 +1,108 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { readFileSync } from "node:fs";
3
+ import { rename, rm, writeFile } from "node:fs/promises";
4
+ import { dirname, join } from "node:path";
5
+ import { canonicalJson } from "@relkit/contracts";
6
+ import { ensureOwnedDirectory, quarantineStateFile } from "../state.js";
7
+ import { LocalCacheStateError } from "./types.js";
8
+ const SNAPSHOT_VERSION = 1;
9
+ export function snapshotPath(root) {
10
+ return join(ensureOwnedDirectory(root), "snapshot.json");
11
+ }
12
+ export function readCacheState(path, cacheId, schemaVersion) {
13
+ let contents;
14
+ try {
15
+ contents = readFileSync(path, "utf8");
16
+ }
17
+ catch (cause) {
18
+ if (cause.code === "ENOENT")
19
+ return undefined;
20
+ throw new LocalCacheStateError("Cache snapshot cannot be read");
21
+ }
22
+ try {
23
+ const state = JSON.parse(contents);
24
+ assertState(state, cacheId, schemaVersion);
25
+ return state;
26
+ }
27
+ catch (cause) {
28
+ if (cause instanceof LocalCacheStateError) {
29
+ quarantineStateFile(path, dirname(path));
30
+ return undefined;
31
+ }
32
+ quarantineStateFile(path, dirname(path));
33
+ return undefined;
34
+ }
35
+ }
36
+ export async function writeCacheState(path, state, cacheId, schemaVersion) {
37
+ const directory = ensureOwnedDirectory(dirname(path));
38
+ const temporary = join(directory, `.relkit-tmp-${randomUUID()}.json`);
39
+ const value = JSON.stringify({ version: SNAPSHOT_VERSION, cacheId, schemaVersion, ...state });
40
+ try {
41
+ await writeFile(temporary, value, { encoding: "utf8", flag: "wx", mode: 0o600 });
42
+ await rename(temporary, path);
43
+ }
44
+ catch {
45
+ await rm(temporary, { force: true }).catch(() => undefined);
46
+ throw new LocalCacheStateError("Cache snapshot could not be committed");
47
+ }
48
+ }
49
+ function assertState(state, cacheId, schemaVersion) {
50
+ if (!isRecord(state) ||
51
+ state.version !== SNAPSHOT_VERSION ||
52
+ state.cacheId !== cacheId ||
53
+ state.schemaVersion !== schemaVersion ||
54
+ !isCount(state.sequence) ||
55
+ !Array.isArray(state.entries) ||
56
+ !isCount(state.bytes) ||
57
+ !isCount(state.evictions) ||
58
+ !isCount(state.hits) ||
59
+ !isCount(state.misses) ||
60
+ state.entries.some((entry) => !validEntry(entry))) {
61
+ throw new LocalCacheStateError("Cache snapshot metadata is malformed");
62
+ }
63
+ if (state.entries.some((entry) => !isCanonicalKey(entry.key))) {
64
+ throw new LocalCacheStateError("Cache snapshot key metadata is malformed");
65
+ }
66
+ if (state.entries.some((entry) => new TextEncoder().encode(entry.key).byteLength +
67
+ new TextEncoder().encode(canonicalJson(entry.value)).byteLength !==
68
+ entry.bytes)) {
69
+ throw new LocalCacheStateError("Cache snapshot entry size metadata is malformed");
70
+ }
71
+ const bytes = state.entries.reduce((total, entry) => total + entry.bytes, 0);
72
+ const sequence = state.entries.reduce((maximum, entry) => Math.max(maximum, entry.lastUsed), 0);
73
+ if (bytes !== state.bytes || sequence > state.sequence) {
74
+ throw new LocalCacheStateError("Cache snapshot counters are malformed");
75
+ }
76
+ }
77
+ function validEntry(value) {
78
+ return (isRecord(value) &&
79
+ typeof value.key === "string" &&
80
+ isCount(value.bytes) &&
81
+ isCount(value.lastUsed) &&
82
+ (value.expiresAt === undefined || isCount(value.expiresAt)) &&
83
+ isCanonicalValue(value.value));
84
+ }
85
+ function isCanonicalKey(value) {
86
+ try {
87
+ return canonicalJson(JSON.parse(value)) === value;
88
+ }
89
+ catch {
90
+ return false;
91
+ }
92
+ }
93
+ function isCanonicalValue(value) {
94
+ try {
95
+ canonicalJson(value);
96
+ return true;
97
+ }
98
+ catch {
99
+ return false;
100
+ }
101
+ }
102
+ function isCount(value) {
103
+ return typeof value === "number" && Number.isSafeInteger(value) && value >= 0;
104
+ }
105
+ function isRecord(value) {
106
+ return value !== null && typeof value === "object" && !Array.isArray(value);
107
+ }
108
+ //# sourceMappingURL=persistence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persistence.js","sourceRoot":"","sources":["../../src/cache/persistence.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { type CacheOperationContext } from "@relkit/cache";
2
+ import { type LocalCachePolicy, type LocalCacheProviderOptions } from "./types.js";
3
+ export declare function normalizePolicy(options: LocalCacheProviderOptions): LocalCachePolicy;
4
+ export declare function normalizeTtl(value: unknown, policy: LocalCachePolicy): number | undefined;
5
+ export declare function assertActive(context: CacheOperationContext | undefined, clock: () => number): number;
6
+ export declare function readClock(clock: () => number): number;
7
+ export declare function byteLength(value: string): number;
8
+ export declare function clone(value: unknown): unknown;
9
+ //# sourceMappingURL=policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"policy.d.ts","sourceRoot":"","sources":["../../src/cache/policy.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,qBAAqB,EAC3B,MAAM,eAAe,CAAC;AACvB,OAAO,EAGL,KAAK,gBAAgB,EACrB,KAAK,yBAAyB,EAC/B,MAAM,YAAY,CAAC;AAEpB,wBAAgB,eAAe,CAAC,OAAO,EAAE,yBAAyB,GAAG,gBAAgB,CAkBpF;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,gBAAgB,GAAG,MAAM,GAAG,SAAS,CAUzF;AAED,wBAAgB,YAAY,CAC1B,OAAO,EAAE,qBAAqB,GAAG,SAAS,EAC1C,KAAK,EAAE,MAAM,MAAM,GAClB,MAAM,CAOR;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,MAAM,GAAG,MAAM,CAMrD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED,wBAAgB,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAE7C"}