@ubean/server 0.2.1 → 0.3.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.
@@ -1,3 +1,5 @@
1
+ import { mkdir, readFile, readdir, unlink, writeFile } from "node:fs/promises";
2
+ import { join } from "node:path";
1
3
  //#region src/cache.ts
2
4
  function createMemoryStore(maxEntries = 200) {
3
5
  const store = /* @__PURE__ */ new Map();
@@ -12,7 +14,7 @@ function createMemoryStore(maxEntries = 200) {
12
14
  async get(key) {
13
15
  const entry = store.get(key);
14
16
  if (!entry) return void 0;
15
- if (Date.now() > entry.expiresAt) return;
17
+ if (Date.now() >= entry.expiresAt) return;
16
18
  return entry;
17
19
  },
18
20
  async peek(key) {
@@ -35,6 +37,105 @@ function createMemoryStore(maxEntries = 200) {
35
37
  }
36
38
  };
37
39
  }
40
+ function encodeCacheKey(key) {
41
+ return Buffer.from(key).toString("base64url");
42
+ }
43
+ function toPersisted(entry) {
44
+ return {
45
+ ...entry,
46
+ body: Buffer.from(entry.body).toString("base64")
47
+ };
48
+ }
49
+ function fromPersisted(entry) {
50
+ const bytes = Buffer.from(entry.body, "base64");
51
+ return {
52
+ ...entry,
53
+ body: bytes.buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength)
54
+ };
55
+ }
56
+ /**
57
+ * Node filesystem CacheStore. Survives process restarts; not for Workers.
58
+ * Pattern invalidation via `store` Map is unavailable — use exact keys.
59
+ */
60
+ function createFsCacheStore(dir) {
61
+ const fileFor = (key) => join(dir, `${encodeCacheKey(key)}.json`);
62
+ async function readEntry(key) {
63
+ try {
64
+ const raw = await readFile(fileFor(key), "utf8");
65
+ return fromPersisted(JSON.parse(raw));
66
+ } catch {
67
+ return;
68
+ }
69
+ }
70
+ return {
71
+ async get(key) {
72
+ const entry = await readEntry(key);
73
+ if (!entry || Date.now() >= entry.expiresAt) return void 0;
74
+ return entry;
75
+ },
76
+ async peek(key) {
77
+ return readEntry(key);
78
+ },
79
+ async set(key, entry, ttl) {
80
+ await mkdir(dir, { recursive: true });
81
+ const now = Date.now();
82
+ const full = {
83
+ ...entry,
84
+ createdAt: now,
85
+ expiresAt: now + ttl * 1e3
86
+ };
87
+ await writeFile(fileFor(key), JSON.stringify(toPersisted(full)), "utf8");
88
+ },
89
+ async delete(key) {
90
+ try {
91
+ await unlink(fileFor(key));
92
+ return true;
93
+ } catch {
94
+ return false;
95
+ }
96
+ },
97
+ async clear() {
98
+ try {
99
+ const files = await readdir(dir);
100
+ await Promise.all(files.filter((f) => f.endsWith(".json")).map((f) => unlink(join(dir, f))));
101
+ } catch {}
102
+ }
103
+ };
104
+ }
105
+ /**
106
+ * Adapt `UbeanStorage` (memory / KV / custom driver) to CacheStore.
107
+ */
108
+ function createStorageCacheStore(storage, prefix = "cache:") {
109
+ const namespaced = (key) => `${prefix}${key}`;
110
+ return {
111
+ async get(key) {
112
+ const entry = await storage.get(namespaced(key));
113
+ if (!entry || Date.now() >= entry.expiresAt) return void 0;
114
+ return entry;
115
+ },
116
+ async peek(key) {
117
+ return await storage.get(namespaced(key)) ?? void 0;
118
+ },
119
+ async set(key, entry, ttl) {
120
+ const now = Date.now();
121
+ const full = {
122
+ ...entry,
123
+ createdAt: now,
124
+ expiresAt: now + ttl * 1e3
125
+ };
126
+ await storage.set(namespaced(key), full, ttl);
127
+ },
128
+ async delete(key) {
129
+ if (!await storage.has(namespaced(key))) return false;
130
+ await storage.remove(namespaced(key));
131
+ return true;
132
+ },
133
+ async clear() {
134
+ const keys = await storage.keys(prefix);
135
+ await Promise.all(keys.map((k) => storage.remove(k)));
136
+ }
137
+ };
138
+ }
38
139
  let globalStore = null;
39
140
  function useCacheStore(store) {
40
141
  if (store) {
@@ -88,7 +189,6 @@ function isCacheableRequest(c) {
88
189
  }
89
190
  function isCacheableResponse(res) {
90
191
  if (res.status !== 200) return false;
91
- if (res.headers.get("set-cookie")) return false;
92
192
  const cc = res.headers.get("cache-control");
93
193
  if (cc && (cc.includes("private") || cc.includes("no-store"))) return false;
94
194
  return true;
@@ -129,10 +229,10 @@ function createCacheMiddleware(options = {}) {
129
229
  };
130
230
  }
131
231
  function cachedEventHandler(handler, options = { ttl: 60 }) {
132
- const store = useCacheStore();
133
232
  const ttl = options.ttl;
134
233
  const keyBase = options.name;
135
234
  return (async (c) => {
235
+ const store = useCacheStore();
136
236
  const key = keyBase || buildCacheKey(c);
137
237
  if (ttl > 0 && isCacheableRequest(c)) {
138
238
  const existing = await store.get(key);
@@ -170,4 +270,4 @@ function resolveRouteCacheRules(routeRules) {
170
270
  return result;
171
271
  }
172
272
  //#endregion
173
- export { invalidateRouteCache as a, createMemoryStore as i, clearCacheStore as n, resolveRouteCacheRules as o, createCacheMiddleware as r, useCacheStore as s, cachedEventHandler as t };
273
+ export { createMemoryStore as a, resolveRouteCacheRules as c, createFsCacheStore as i, useCacheStore as l, clearCacheStore as n, createStorageCacheStore as o, createCacheMiddleware as r, invalidateRouteCache as s, cachedEventHandler as t };
@@ -1,3 +1,4 @@
1
+ import { i as UbeanStorage } from "./storage-QdlPtPtR.js";
1
2
  import { Context, Next } from "hono";
2
3
  import { RouteRule } from "@ubean/shared";
3
4
  //#region src/cache.d.ts
@@ -29,6 +30,15 @@ interface CacheStore {
29
30
  store?: Map<string, CacheEntry>;
30
31
  }
31
32
  declare function createMemoryStore(maxEntries?: number): CacheStore;
33
+ /**
34
+ * Node filesystem CacheStore. Survives process restarts; not for Workers.
35
+ * Pattern invalidation via `store` Map is unavailable — use exact keys.
36
+ */
37
+ declare function createFsCacheStore(dir: string): CacheStore;
38
+ /**
39
+ * Adapt `UbeanStorage` (memory / KV / custom driver) to CacheStore.
40
+ */
41
+ declare function createStorageCacheStore(storage: UbeanStorage, prefix?: string): CacheStore;
32
42
  declare function useCacheStore(store?: CacheStore): CacheStore;
33
43
  declare function clearCacheStore(): void;
34
44
  interface CacheRule {
@@ -45,4 +55,4 @@ declare function cachedEventHandler<T extends (c: Context) => Response | Promise
45
55
  declare function invalidateRouteCache(keyPattern?: string | RegExp): Promise<void>;
46
56
  declare function resolveRouteCacheRules(routeRules: Record<string, RouteRule>): Record<string, CacheRule>;
47
57
  //#endregion
48
- export { clearCacheStore as a, invalidateRouteCache as c, cachedEventHandler as i, resolveRouteCacheRules as l, CacheRule as n, createCacheMiddleware as o, CacheStore as r, createMemoryStore as s, CacheEntry as t, useCacheStore as u };
58
+ export { clearCacheStore as a, createMemoryStore as c, resolveRouteCacheRules as d, useCacheStore as f, cachedEventHandler as i, createStorageCacheStore as l, CacheRule as n, createCacheMiddleware as o, CacheStore as r, createFsCacheStore as s, CacheEntry as t, invalidateRouteCache as u };
@@ -58,7 +58,7 @@ function createComponentMemoryStore(maxEntries = 500) {
58
58
  async get(key) {
59
59
  const entry = store.get(key);
60
60
  if (!entry) return void 0;
61
- if (Date.now() > entry.expiresAt) {
61
+ if (Date.now() >= entry.expiresAt) {
62
62
  removeFromTagIndex(key, entry.tags);
63
63
  store.delete(key);
64
64
  return;
@@ -1,2 +1,2 @@
1
- import { a as createComponentMemoryStore, c as revalidateTag, d as wrapWithCache, i as clearComponentCacheStore, l as revalidateTags, n as cacheTag, o as defineCachedFunction, r as clearComponentCache, s as revalidatePath, t as cacheLife, u as useComponentCacheStore } from "./cache-directive-C1Nekkza.js";
1
+ import { a as createComponentMemoryStore, c as revalidateTag, d as wrapWithCache, i as clearComponentCacheStore, l as revalidateTags, n as cacheTag, o as defineCachedFunction, r as clearComponentCache, s as revalidatePath, t as cacheLife, u as useComponentCacheStore } from "./cache-directive-Dswp1vvK.js";
2
2
  export { cacheLife, cacheTag, clearComponentCache, clearComponentCacheStore, createComponentMemoryStore, defineCachedFunction, revalidatePath, revalidateTag, revalidateTags, useComponentCacheStore, wrapWithCache };
@@ -1,3 +1,3 @@
1
1
  import { a as cacheLife, c as clearComponentCacheStore, d as revalidatePath, f as revalidateTag, h as wrapWithCache, i as ComponentCacheStore, l as createComponentMemoryStore, m as useComponentCacheStore, n as CachedFunctionOptions, o as cacheTag, p as revalidateTags, r as ComponentCacheEntry, s as clearComponentCache, t as CacheWrapOptions, u as defineCachedFunction } from "./cache-directive-CAxJAQyE.js";
2
- import { a as clearCacheStore, c as invalidateRouteCache, i as cachedEventHandler, l as resolveRouteCacheRules, n as CacheRule, o as createCacheMiddleware, r as CacheStore, s as createMemoryStore, t as CacheEntry, u as useCacheStore } from "./cache-b-MZlyv0.js";
3
- export { CacheEntry, CacheRule, CacheStore, CacheWrapOptions, CachedFunctionOptions, ComponentCacheEntry, ComponentCacheStore, cacheLife, cacheTag, cachedEventHandler, clearCacheStore, clearComponentCache, clearComponentCacheStore, createCacheMiddleware, createComponentMemoryStore, createMemoryStore, defineCachedFunction, invalidateRouteCache, resolveRouteCacheRules, revalidatePath, revalidateTag, revalidateTags, useCacheStore, useComponentCacheStore, wrapWithCache };
2
+ import { a as clearCacheStore, c as createMemoryStore, d as resolveRouteCacheRules, f as useCacheStore, i as cachedEventHandler, l as createStorageCacheStore, n as CacheRule, o as createCacheMiddleware, r as CacheStore, s as createFsCacheStore, t as CacheEntry, u as invalidateRouteCache } from "./cache-WxWOusZ7.js";
3
+ export { CacheEntry, CacheRule, CacheStore, CacheWrapOptions, CachedFunctionOptions, ComponentCacheEntry, ComponentCacheStore, cacheLife, cacheTag, cachedEventHandler, clearCacheStore, clearComponentCache, clearComponentCacheStore, createCacheMiddleware, createComponentMemoryStore, createFsCacheStore, createMemoryStore, createStorageCacheStore, defineCachedFunction, invalidateRouteCache, resolveRouteCacheRules, revalidatePath, revalidateTag, revalidateTags, useCacheStore, useComponentCacheStore, wrapWithCache };
@@ -1,3 +1,3 @@
1
- import { a as invalidateRouteCache, i as createMemoryStore, n as clearCacheStore, o as resolveRouteCacheRules, r as createCacheMiddleware, s as useCacheStore, t as cachedEventHandler } from "./cache-C84ix1Vq.js";
2
- import { a as createComponentMemoryStore, c as revalidateTag, d as wrapWithCache, i as clearComponentCacheStore, l as revalidateTags, n as cacheTag, o as defineCachedFunction, r as clearComponentCache, s as revalidatePath, t as cacheLife, u as useComponentCacheStore } from "./cache-directive-C1Nekkza.js";
3
- export { cacheLife, cacheTag, cachedEventHandler, clearCacheStore, clearComponentCache, clearComponentCacheStore, createCacheMiddleware, createComponentMemoryStore, createMemoryStore, defineCachedFunction, invalidateRouteCache, resolveRouteCacheRules, revalidatePath, revalidateTag, revalidateTags, useCacheStore, useComponentCacheStore, wrapWithCache };
1
+ import { a as createMemoryStore, c as resolveRouteCacheRules, i as createFsCacheStore, l as useCacheStore, n as clearCacheStore, o as createStorageCacheStore, r as createCacheMiddleware, s as invalidateRouteCache, t as cachedEventHandler } from "./cache-BUoSDwTV.js";
2
+ import { a as createComponentMemoryStore, c as revalidateTag, d as wrapWithCache, i as clearComponentCacheStore, l as revalidateTags, n as cacheTag, o as defineCachedFunction, r as clearComponentCache, s as revalidatePath, t as cacheLife, u as useComponentCacheStore } from "./cache-directive-Dswp1vvK.js";
3
+ export { cacheLife, cacheTag, cachedEventHandler, clearCacheStore, clearComponentCache, clearComponentCacheStore, createCacheMiddleware, createComponentMemoryStore, createFsCacheStore, createMemoryStore, createStorageCacheStore, defineCachedFunction, invalidateRouteCache, resolveRouteCacheRules, revalidatePath, revalidateTag, revalidateTags, useCacheStore, useComponentCacheStore, wrapWithCache };
@@ -0,0 +1,125 @@
1
+ import { r as StorageDriver } from "./storage-QdlPtPtR.js";
2
+ import { n as QueueDriver, r as QueueHandler } from "./queue-GOfTAWlz.js";
3
+ //#region src/drivers.d.ts
4
+ interface D1PreparedStatement {
5
+ bind(...values: unknown[]): D1PreparedStatement;
6
+ all<T = Record<string, unknown>>(): Promise<{
7
+ results: T[];
8
+ }>;
9
+ run(): Promise<{
10
+ success: boolean;
11
+ }>;
12
+ }
13
+ interface D1DatabaseBinding {
14
+ prepare(query: string): D1PreparedStatement;
15
+ exec?(query: string): Promise<unknown>;
16
+ }
17
+ interface CloudflareQueueBinding {
18
+ send(body: unknown, options?: {
19
+ delaySeconds?: number;
20
+ }): Promise<void>;
21
+ sendBatch?(messages: Array<{
22
+ body: unknown;
23
+ }>): Promise<void>;
24
+ }
25
+ interface PostgresLike {
26
+ query: (text: string, params?: unknown[]) => Promise<{
27
+ rows: unknown[];
28
+ }>;
29
+ }
30
+ interface KvListBinding {
31
+ lpush?(key: string, value: string): Promise<unknown>;
32
+ rpop?(key: string): Promise<string | null>;
33
+ set(key: string, value: string): Promise<unknown>;
34
+ get(key: string): Promise<string | null>;
35
+ del?(key: string): Promise<unknown>;
36
+ }
37
+ /**
38
+ * Wrap a Cloudflare D1 binding as ubean's `{ sql, exec, close }` shape
39
+ * for `registerDb0Create` / `defineDatabase({ connector })`.
40
+ */
41
+ declare function createCloudflareD1Database(db: D1DatabaseBinding): {
42
+ sql: (strings: TemplateStringsArray, ...values: unknown[]) => Promise<unknown>;
43
+ exec: (query: string) => Promise<unknown>;
44
+ close: () => Promise<void>;
45
+ };
46
+ /**
47
+ * Cloudflare Queues producer. Consumer wiring stays in the Worker `queue()`
48
+ * export — call the registered `defineQueue` handler there.
49
+ */
50
+ declare function createCloudflareQueueDriver(queues: Record<string, CloudflareQueueBinding>, handlers?: Map<string, QueueHandler>): QueueDriver;
51
+ declare function dispatchCloudflareQueueBatch(handlers: Map<string, QueueHandler>, queueName: string, bodies: unknown[]): Promise<void[]>;
52
+ /**
53
+ * Vercel Postgres / Neon-style client (`@vercel/postgres` or any `{ query }`).
54
+ */
55
+ declare function createVercelPostgresDatabase(client: PostgresLike): {
56
+ sql: (strings: TemplateStringsArray, ...values: unknown[]) => Promise<unknown>;
57
+ exec: (query: string) => Promise<unknown>;
58
+ close: () => Promise<void>;
59
+ };
60
+ /**
61
+ * Non-memory Vercel queue adapter on a KV list (Upstash / `@vercel/kv`).
62
+ * Not a product named "Vercel Queue" — the preset has `queues: false`.
63
+ */
64
+ declare function createVercelKvQueueDriver(kv: KvListBinding, prefix?: string): QueueDriver;
65
+ interface BunSqliteStatement {
66
+ all: (...params: unknown[]) => unknown[];
67
+ run?: (...params: unknown[]) => unknown;
68
+ }
69
+ interface BunSqliteLike {
70
+ query: (sql: string) => BunSqliteStatement;
71
+ exec?: (sql: string) => unknown;
72
+ run?: (sql: string, ...params: unknown[]) => unknown;
73
+ close?: () => void;
74
+ }
75
+ /**
76
+ * Wrap `bun:sqlite` `Database` as ubean's `{ sql, exec, close }` shape
77
+ * for `registerDb0Create` / `defineDatabase({ connector })`.
78
+ */
79
+ declare function createBunSqliteDatabase(db: BunSqliteLike): {
80
+ sql: (strings: TemplateStringsArray, ...values: unknown[]) => Promise<unknown>;
81
+ exec: (query: string) => Promise<unknown>;
82
+ close: () => Promise<void>;
83
+ };
84
+ type DenoKvKeyPart = string | number | bigint | boolean;
85
+ interface DenoKvEntry {
86
+ key: DenoKvKeyPart[];
87
+ value: unknown;
88
+ }
89
+ interface DenoKvLike {
90
+ get: (key: DenoKvKeyPart[]) => Promise<{
91
+ value: unknown;
92
+ } | {
93
+ value: undefined;
94
+ }>;
95
+ set: (key: DenoKvKeyPart[], value: unknown) => Promise<unknown>;
96
+ delete: (key: DenoKvKeyPart[]) => Promise<unknown>;
97
+ list: (selector: {
98
+ prefix: DenoKvKeyPart[];
99
+ }) => AsyncIterable<DenoKvEntry>;
100
+ }
101
+ /**
102
+ * Wrap `Deno.openKv()` as a `StorageDriver` for `createStorage({ driver })`.
103
+ * Keys are stored as a single Deno.Kv part so string keys round-trip.
104
+ */
105
+ declare function createDenoKvStorage(kv: DenoKvLike): StorageDriver;
106
+ interface NetlifyBlobsListResult {
107
+ blobs?: Array<{
108
+ key: string;
109
+ }>;
110
+ }
111
+ interface NetlifyBlobsStore {
112
+ get: (key: string) => Promise<string | null>;
113
+ set: (key: string, value: string) => Promise<unknown>;
114
+ delete: (key: string) => Promise<unknown>;
115
+ list?: (options?: {
116
+ prefix?: string;
117
+ }) => Promise<NetlifyBlobsListResult | string[]>;
118
+ }
119
+ /**
120
+ * Wrap `@netlify/blobs` `getStore()` as a `StorageDriver`.
121
+ * Values are JSON-serialized; Netlify preset has `queues: false` (no queue adapter).
122
+ */
123
+ declare function createNetlifyBlobsStorage(store: NetlifyBlobsStore): StorageDriver;
124
+ //#endregion
125
+ export { createNetlifyBlobsStorage as _, D1PreparedStatement as a, dispatchCloudflareQueueBatch as b, DenoKvLike as c, NetlifyBlobsStore as d, PostgresLike as f, createDenoKvStorage as g, createCloudflareQueueDriver as h, D1DatabaseBinding as i, KvListBinding as l, createCloudflareD1Database as m, BunSqliteStatement as n, DenoKvEntry as o, createBunSqliteDatabase as p, CloudflareQueueBinding as r, DenoKvKeyPart as s, BunSqliteLike as t, NetlifyBlobsListResult as u, createVercelKvQueueDriver as v, createVercelPostgresDatabase as y };
@@ -0,0 +1,236 @@
1
+ //#region src/drivers.ts
2
+ function interpolateSql(strings, values) {
3
+ return strings.reduce((sql, part, index) => {
4
+ if (index === values.length) return sql + part;
5
+ const value = values[index];
6
+ const literal = value === null || value === void 0 ? "NULL" : typeof value === "number" || typeof value === "boolean" ? String(value) : `'${String(value).replace(/'/g, "''")}'`;
7
+ return sql + part + literal;
8
+ }, "");
9
+ }
10
+ /**
11
+ * Wrap a Cloudflare D1 binding as ubean's `{ sql, exec, close }` shape
12
+ * for `registerDb0Create` / `defineDatabase({ connector })`.
13
+ */
14
+ function createCloudflareD1Database(db) {
15
+ return {
16
+ async sql(strings, ...values) {
17
+ const query = interpolateSql(strings, values);
18
+ return (await db.prepare(query).all()).results;
19
+ },
20
+ async exec(query) {
21
+ if (typeof db.exec === "function") return db.exec(query);
22
+ await db.prepare(query).run();
23
+ },
24
+ async close() {}
25
+ };
26
+ }
27
+ /**
28
+ * Cloudflare Queues producer. Consumer wiring stays in the Worker `queue()`
29
+ * export — call the registered `defineQueue` handler there.
30
+ */
31
+ function createCloudflareQueueDriver(queues, handlers = /* @__PURE__ */ new Map()) {
32
+ return {
33
+ async send(queueName, message, options) {
34
+ const binding = queues[queueName];
35
+ if (!binding) throw new Error(`[ubean] Cloudflare queue binding "${queueName}" is missing`);
36
+ await binding.send(message, options?.delay ? { delaySeconds: options.delay } : void 0);
37
+ return `cf_${Date.now().toString(36)}`;
38
+ },
39
+ async sendBatch(queueName, messages) {
40
+ const binding = queues[queueName];
41
+ if (!binding) throw new Error(`[ubean] Cloudflare queue binding "${queueName}" is missing`);
42
+ if (binding.sendBatch) await binding.sendBatch(messages.map((body) => ({ body })));
43
+ else for (const body of messages) await binding.send(body);
44
+ return messages.map((_, i) => `cf_batch_${i}`);
45
+ },
46
+ registerHandler(queueName, handler, _options) {
47
+ handlers.set(queueName, handler);
48
+ },
49
+ async getQueueDepth() {
50
+ return 0;
51
+ }
52
+ };
53
+ }
54
+ function dispatchCloudflareQueueBatch(handlers, queueName, bodies) {
55
+ const handler = handlers.get(queueName);
56
+ if (!handler) return Promise.resolve([]);
57
+ return Promise.all(bodies.map((body, index) => handler({
58
+ id: `cf_${index}`,
59
+ body,
60
+ timestamp: Date.now(),
61
+ attempts: 1
62
+ })));
63
+ }
64
+ /**
65
+ * Vercel Postgres / Neon-style client (`@vercel/postgres` or any `{ query }`).
66
+ */
67
+ function createVercelPostgresDatabase(client) {
68
+ return {
69
+ async sql(strings, ...values) {
70
+ const text = strings.reduce((sql, part, index) => {
71
+ if (index === values.length) return sql + part;
72
+ return `${sql}${part}$${index + 1}`;
73
+ }, "");
74
+ return (await client.query(text, values)).rows;
75
+ },
76
+ async exec(query) {
77
+ await client.query(query);
78
+ },
79
+ async close() {}
80
+ };
81
+ }
82
+ /**
83
+ * Non-memory Vercel queue adapter on a KV list (Upstash / `@vercel/kv`).
84
+ * Not a product named "Vercel Queue" — the preset has `queues: false`.
85
+ */
86
+ function createVercelKvQueueDriver(kv, prefix = "ubean:queue:") {
87
+ const handlers = /* @__PURE__ */ new Map();
88
+ const listKey = (name) => `${prefix}${name}`;
89
+ return {
90
+ async send(queueName, message) {
91
+ const id = `kv_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 8)}`;
92
+ const payload = JSON.stringify({
93
+ id,
94
+ body: message,
95
+ timestamp: Date.now(),
96
+ attempts: 0
97
+ });
98
+ if (typeof kv.lpush === "function") await kv.lpush(listKey(queueName), payload);
99
+ else await kv.set(`${listKey(queueName)}:${id}`, payload);
100
+ return id;
101
+ },
102
+ async sendBatch(queueName, messages, options) {
103
+ const ids = [];
104
+ for (const message of messages) ids.push(await this.send(queueName, message, options));
105
+ return ids;
106
+ },
107
+ registerHandler(queueName, handler) {
108
+ handlers.set(queueName, handler);
109
+ },
110
+ async start() {}
111
+ };
112
+ }
113
+ function toPositionalSql(strings, values) {
114
+ return {
115
+ sql: strings.reduce((acc, part, index) => {
116
+ if (index === values.length) return acc + part;
117
+ return `${acc}${part}?`;
118
+ }, ""),
119
+ params: values
120
+ };
121
+ }
122
+ /**
123
+ * Wrap `bun:sqlite` `Database` as ubean's `{ sql, exec, close }` shape
124
+ * for `registerDb0Create` / `defineDatabase({ connector })`.
125
+ */
126
+ function createBunSqliteDatabase(db) {
127
+ return {
128
+ async sql(strings, ...values) {
129
+ const { sql, params } = toPositionalSql(strings, values);
130
+ return db.query(sql).all(...params);
131
+ },
132
+ async exec(query) {
133
+ if (typeof db.exec === "function") {
134
+ db.exec(query);
135
+ return;
136
+ }
137
+ if (typeof db.run === "function") {
138
+ db.run(query);
139
+ return;
140
+ }
141
+ db.query(query).run?.();
142
+ },
143
+ async close() {
144
+ db.close?.();
145
+ }
146
+ };
147
+ }
148
+ function toDenoKvKey(key) {
149
+ return key ? [key] : [];
150
+ }
151
+ function fromDenoKvKey(parts) {
152
+ return parts.map(String).join("");
153
+ }
154
+ /**
155
+ * Wrap `Deno.openKv()` as a `StorageDriver` for `createStorage({ driver })`.
156
+ * Keys are stored as a single Deno.Kv part so string keys round-trip.
157
+ */
158
+ function createDenoKvStorage(kv) {
159
+ const getKeys = async (base) => {
160
+ const prefix = toDenoKvKey(base ?? "");
161
+ const keys = [];
162
+ for await (const entry of kv.list({ prefix })) {
163
+ const stored = fromDenoKvKey(entry.key);
164
+ if (!base || stored.startsWith(base)) keys.push(stored);
165
+ }
166
+ return keys;
167
+ };
168
+ return {
169
+ async getItemRaw(key) {
170
+ return (await kv.get(toDenoKvKey(key))).value ?? null;
171
+ },
172
+ async setItemRaw(key, value) {
173
+ await kv.set(toDenoKvKey(key), value);
174
+ },
175
+ async removeItem(key) {
176
+ await kv.delete(toDenoKvKey(key));
177
+ },
178
+ getKeys,
179
+ async clear(base) {
180
+ const keys = await getKeys(base);
181
+ await Promise.all(keys.map((key) => kv.delete(toDenoKvKey(key))));
182
+ },
183
+ async hasItem(key) {
184
+ const entry = await kv.get(toDenoKvKey(key));
185
+ return entry.value !== void 0 && entry.value !== null;
186
+ }
187
+ };
188
+ }
189
+ function encodeBlobValue(value) {
190
+ return JSON.stringify(value);
191
+ }
192
+ function decodeBlobValue(raw) {
193
+ if (raw == null) return null;
194
+ try {
195
+ return JSON.parse(raw);
196
+ } catch {
197
+ return raw;
198
+ }
199
+ }
200
+ function blobListKeys(result) {
201
+ if (!result) return [];
202
+ if (Array.isArray(result)) return result;
203
+ return (result.blobs ?? []).map((blob) => blob.key);
204
+ }
205
+ /**
206
+ * Wrap `@netlify/blobs` `getStore()` as a `StorageDriver`.
207
+ * Values are JSON-serialized; Netlify preset has `queues: false` (no queue adapter).
208
+ */
209
+ function createNetlifyBlobsStorage(store) {
210
+ const getKeys = async (base) => {
211
+ if (typeof store.list !== "function") return [];
212
+ const keys = blobListKeys(await store.list(base ? { prefix: base } : void 0));
213
+ return base ? keys.filter((key) => key.startsWith(base)) : keys;
214
+ };
215
+ return {
216
+ async getItemRaw(key) {
217
+ return decodeBlobValue(await store.get(key));
218
+ },
219
+ async setItemRaw(key, value) {
220
+ await store.set(key, encodeBlobValue(value));
221
+ },
222
+ async removeItem(key) {
223
+ await store.delete(key);
224
+ },
225
+ getKeys,
226
+ async clear(base) {
227
+ const keys = await getKeys(base);
228
+ await Promise.all(keys.map((key) => store.delete(key)));
229
+ },
230
+ async hasItem(key) {
231
+ return await store.get(key) != null;
232
+ }
233
+ };
234
+ }
235
+ //#endregion
236
+ export { createNetlifyBlobsStorage as a, dispatchCloudflareQueueBatch as c, createDenoKvStorage as i, createCloudflareD1Database as n, createVercelKvQueueDriver as o, createCloudflareQueueDriver as r, createVercelPostgresDatabase as s, createBunSqliteDatabase as t };
@@ -0,0 +1,2 @@
1
+ import { _ as createNetlifyBlobsStorage, a as D1PreparedStatement, b as dispatchCloudflareQueueBatch, c as DenoKvLike, d as NetlifyBlobsStore, f as PostgresLike, g as createDenoKvStorage, h as createCloudflareQueueDriver, i as D1DatabaseBinding, l as KvListBinding, m as createCloudflareD1Database, n as BunSqliteStatement, o as DenoKvEntry, p as createBunSqliteDatabase, r as CloudflareQueueBinding, s as DenoKvKeyPart, t as BunSqliteLike, u as NetlifyBlobsListResult, v as createVercelKvQueueDriver, y as createVercelPostgresDatabase } from "./drivers-BzU_V0NX.js";
2
+ export { BunSqliteLike, BunSqliteStatement, CloudflareQueueBinding, D1DatabaseBinding, D1PreparedStatement, DenoKvEntry, DenoKvKeyPart, DenoKvLike, KvListBinding, NetlifyBlobsListResult, NetlifyBlobsStore, PostgresLike, createBunSqliteDatabase, createCloudflareD1Database, createCloudflareQueueDriver, createDenoKvStorage, createNetlifyBlobsStorage, createVercelKvQueueDriver, createVercelPostgresDatabase, dispatchCloudflareQueueBatch };
@@ -0,0 +1,2 @@
1
+ import { a as createNetlifyBlobsStorage, c as dispatchCloudflareQueueBatch, i as createDenoKvStorage, n as createCloudflareD1Database, o as createVercelKvQueueDriver, r as createCloudflareQueueDriver, s as createVercelPostgresDatabase, t as createBunSqliteDatabase } from "./drivers-DiyNSo7u.js";
2
+ export { createBunSqliteDatabase, createCloudflareD1Database, createCloudflareQueueDriver, createDenoKvStorage, createNetlifyBlobsStorage, createVercelKvQueueDriver, createVercelPostgresDatabase, dispatchCloudflareQueueBatch };
@@ -1,4 +1,4 @@
1
- import { getLogger } from "@ubean/logger";
1
+ import { getLogger } from "@ubean/shared/logger";
2
2
  //#region src/email.ts
3
3
  /**
4
4
  * P9-25 邮件发送原语 —— Email sending primitives
package/dist/email.js CHANGED
@@ -1,2 +1,2 @@
1
- import { a as getEmailProvider, c as getSentEmails, d as setDefaultEmailProvider, f as useEmailProvider, i as defineEmailProvider, l as renderEmailTemplate, n as clearSentEmails, o as getEmailProviderNames, r as createEmailTransport, s as getEmailTransport, t as clearEmailProviders, u as sendEmail } from "./email-BjfRiR9b.js";
1
+ import { a as getEmailProvider, c as getSentEmails, d as setDefaultEmailProvider, f as useEmailProvider, i as defineEmailProvider, l as renderEmailTemplate, n as clearSentEmails, o as getEmailProviderNames, r as createEmailTransport, s as getEmailTransport, t as clearEmailProviders, u as sendEmail } from "./email-DnoZgXzS.js";
2
2
  export { clearEmailProviders, clearSentEmails, createEmailTransport, defineEmailProvider, getEmailProvider, getEmailProviderNames, getEmailTransport, getSentEmails, renderEmailTemplate, sendEmail, setDefaultEmailProvider, useEmailProvider };
package/dist/index.d.ts CHANGED
@@ -1,12 +1,13 @@
1
1
  import { $ as getGlobalAnalyticsProvider, A as removeExperiment, B as AnalyticsProvider, C as extractFlagContext, D as getVariantFromContext, E as getVariantAssignment, F as useFlags, G as createAnalyticsMiddleware, H as AnalyticsRecord, I as AnalyticsContext, J as createMockAnalyticsProvider, K as createLogAnalyticsProvider, L as AnalyticsEvent, M as setGlobalFeatureFlagStore, N as useExperiments, O as listExperimentNames, P as useFlagContext, Q as getAnalyticsProvider, R as AnalyticsMiddlewareOptions, S as evaluateFlagWithReason, T as getVariant, U as AnalyticsTrackOptions, V as AnalyticsProviderOptions, W as clearAnalyticsProviders, X as defineAnalyticsProvider, Y as defineAnalytics, Z as extractAnalyticsContext, _ as createMemoryFeatureFlagStore, a as FeatureFlagOptions, at as trackRaw, b as evaluateFlag, c as FlagContext, d as FlagValue, et as listAnalyticsProviders, f as Segment, g as createFeatureFlagsMiddleware, h as clearFeatureFlags, i as FeatureFlagDefinition, it as trackPageView, j as removeFeatureFlag, k as listFlagNames, l as FlagEvaluation, m as Variant, n as ExperimentDefinition, nt as setGlobalAnalyticsProvider, o as FeatureFlagStore, ot as unregisterAnalyticsProvider, p as SegmentRule, q as createMemoryAnalyticsProvider, r as ExperimentOptions, rt as trackEvent, s as FeatureFlagsMiddlewareOptions, st as useAnalytics, t as ExperimentAssignment, tt as registerAnalyticsProvider, u as FlagKind, v as defineExperiment, w as getGlobalFeatureFlagStore, x as evaluateFlagFromContext, y as defineFeatureFlag, z as AnalyticsProperties } from "./feature-flags-DWkS6p0D.js";
2
2
  import { a as cacheLife, c as clearComponentCacheStore, d as revalidatePath, f as revalidateTag, h as wrapWithCache, i as ComponentCacheStore, l as createComponentMemoryStore, m as useComponentCacheStore, n as CachedFunctionOptions, o as cacheTag, p as revalidateTags, r as ComponentCacheEntry, s as clearComponentCache, t as CacheWrapOptions, u as defineCachedFunction } from "./cache-directive-CAxJAQyE.js";
3
- import { a as clearCacheStore, c as invalidateRouteCache, i as cachedEventHandler, l as resolveRouteCacheRules, n as CacheRule, o as createCacheMiddleware, r as CacheStore, s as createMemoryStore, t as CacheEntry, u as useCacheStore } from "./cache-b-MZlyv0.js";
3
+ import { a as clearGlobalStorage, c as createStorage, i as UbeanStorage, l as useKV, n as KVOptions, o as createKV, r as StorageDriver, s as createMemoryDriver, t as KVNamespace, u as useStorage } from "./storage-QdlPtPtR.js";
4
+ import { a as clearCacheStore, c as createMemoryStore, d as resolveRouteCacheRules, f as useCacheStore, i as cachedEventHandler, l as createStorageCacheStore, n as CacheRule, o as createCacheMiddleware, r as CacheStore, s as createFsCacheStore, t as CacheEntry, u as invalidateRouteCache } from "./cache-WxWOusZ7.js";
4
5
  import { _ as runScheduledTask, a as resetCronRunCounts, c as CronContext, d as CronTaskMeta, f as ScheduledTask, g as getScheduledTasks, h as defineScheduled, i as parseCron, l as CronSchedule, m as createCronContext, n as SchedulerOptions, o as startCronScheduler, p as clearScheduledTasks, r as createMemoryCronScheduler, s as validateCron, t as CronScheduler, u as CronTaskDefinition } from "./cron-scheduler-BF33PPn4.js";
5
6
  import { a as DatabaseOptions, c as closeDatabases, d as migrateDatabase, f as rawSql, h as useDatabase, i as DatabaseHooks, l as defineDatabase, m as runMigrations, n as DatabaseConnector, o as DrizzleConfig, p as registerDb0Create, r as DatabaseConnectorInstance, s as Migration, t as Database, u as getDatabaseHooks } from "./database-CfpFznl-.js";
6
- import { C as sendEmail, S as renderEmailTemplate, T as useEmailProvider, _ as defineEmailProvider, a as EmailProviderConfig, b as getEmailTransport, c as EmailTransport, d as MockEmailTransport, f as SendmailEmailProviderConfig, g as createEmailTransport, h as clearSentEmails, i as EmailProvider, l as LogEmailProviderConfig, m as clearEmailProviders, n as EmailAttachment, o as EmailProviderType, p as SmtpEmailProviderConfig, r as EmailOptions, s as EmailResult, t as DefineEmailProviderOptions, u as MockEmailProviderConfig, v as getEmailProvider, w as setDefaultEmailProvider, x as getSentEmails, y as getEmailProviderNames } from "./email-BvpEuNn_.js";
7
7
  import { _ as startQueueWorkers, a as QueueOptions, c as clearQueueDefinitions, d as getAllQueueStats, f as getQueueDefinitions, g as setQueueDriver, h as sendMessages, i as QueueMessage, l as createMemoryQueueDriver, m as sendMessage, n as QueueDriver, o as QueueStats, p as getQueueStats, r as QueueHandler, s as SendOptions, t as QueueDefinition, u as defineQueue, v as stopQueueWorkers, y as useQueueDriver } from "./queue-GOfTAWlz.js";
8
+ import { _ as createNetlifyBlobsStorage, b as dispatchCloudflareQueueBatch, c as DenoKvLike, d as NetlifyBlobsStore, f as PostgresLike, g as createDenoKvStorage, h as createCloudflareQueueDriver, i as D1DatabaseBinding, l as KvListBinding, m as createCloudflareD1Database, p as createBunSqliteDatabase, r as CloudflareQueueBinding, t as BunSqliteLike, v as createVercelKvQueueDriver, y as createVercelPostgresDatabase } from "./drivers-BzU_V0NX.js";
9
+ import { C as sendEmail, S as renderEmailTemplate, T as useEmailProvider, _ as defineEmailProvider, a as EmailProviderConfig, b as getEmailTransport, c as EmailTransport, d as MockEmailTransport, f as SendmailEmailProviderConfig, g as createEmailTransport, h as clearSentEmails, i as EmailProvider, l as LogEmailProviderConfig, m as clearEmailProviders, n as EmailAttachment, o as EmailProviderType, p as SmtpEmailProviderConfig, r as EmailOptions, s as EmailResult, t as DefineEmailProviderOptions, u as MockEmailProviderConfig, v as getEmailProvider, w as setDefaultEmailProvider, x as getSentEmails, y as getEmailProviderNames } from "./email-BvpEuNn_.js";
8
10
  import { A as handleUpgrade, C as defineWebSocket, D as handleClose, E as getWebSocketDefinitions, O as handleError, S as defineRoom, T as getRooms, _ as WebSocketRoom, a as broadcastSSE, b as createRoom, c as createSSEStream, d as getSSEConnections, f as sseHeaders, g as WebSocketHooks, h as WebSocketDefinition, i as SSEOptions, j as registerWebSocket, k as handleMessage, l as defineSSE, m as UpgradeResult, n as SSEHandler, o as clearSSEState, p as Peer, r as SSEMessage, s as closeAllSSE, t as SSEConnection, u as formatSSEMessage, v as broadcast, w as getRoom, x as createWebSocketMiddleware, y as clearWebSocketState } from "./sse-Ct72zhic.js";
9
- import { a as clearGlobalStorage, c as createStorage, i as UbeanStorage, l as useKV, n as KVOptions, o as createKV, r as StorageDriver, s as createMemoryDriver, t as KVNamespace, u as useStorage } from "./storage-QdlPtPtR.js";
10
11
  import { C as getSpan, E as withSpan, S as getRequestId, T as startSpan, _ as createOpenTelemetryExporter, a as REQUEST_ID_HEADER, b as generateRequestId, g as createObservabilityTracer, h as createConsoleExporter, i as ObservabilityTracer, m as TracingMiddlewareOptions, n as ObservabilityExporter, o as RequestIdOptions, r as ObservabilityHooks, t as ObservabilityConfig, v as createSpan, w as setGlobalTracer, x as getGlobalTracer, y as createTracingMiddleware } from "./observability-DUNUEjj3.js";
11
12
  import { n as serveStatic, t as ServeStaticOptions } from "./static-K2dRvjpS.js";
12
13
  import { A as createFetchMemoizationMiddleware, B as RateLimitOptions, C as isDraftMode, D as FetchInitWithNext, E as FetchCacheOptions, F as after, G as defineRateLimit, H as RateLimitStoreEntry, I as createAfterMiddleware, J as defineCors, K as CorsOptions, L as flushAfterCallbacks, M as getDataCacheSize, N as revalidateDataCachePath, O as clearFetchDataCache, P as revalidateDataCacheTag, R as getAfterCallbackCount, S as enableDraftMode, T as DataCacheMiddlewareOptions, U as createMemoryRateLimitStore, V as RateLimitStore, W as createRateLimitMiddleware, _ as DraftMode, a as RevalidationResult, b as defineDraftMode, c as createSingleFlightMiddleware, d as getInvalidatedKeys, f as getRevalidationEntries, g as unregisterRevalidation, h as runRevalidation, i as RevalidationKey, j as createMemoizedFetch, k as createDataCacheMiddleware, l as defineRevalidation, m as invalidateKey, n as RevalidationEntry, o as SingleFlightOptions, p as invalidate, q as createCorsMiddleware, r as RevalidationFetcher, s as clearRevalidationRegistry, t as RevalidationContext, u as defineSingleFlight, v as DraftModeOptions, w as useDraftMode, x as disableDraftMode, y as createDraftModeMiddleware, z as RateLimitInfo } from "./single-flight-BJyhDLdU.js";
@@ -184,4 +185,4 @@ declare function createMockPurgeAdapter(): CdnPurgeAdapter & {
184
185
  */
185
186
  declare function _resetCdnCache(): void;
186
187
  //#endregion
187
- export { type AnalyticsContext, type AnalyticsEvent, type AnalyticsMiddlewareOptions, type AnalyticsProperties, type AnalyticsProvider, type AnalyticsProviderOptions, type AnalyticsRecord, type AnalyticsTrackOptions, type CacheControlOptions, type CacheEntry, type CacheRule, type CacheStore, type CacheWrapOptions, type CachedFunctionOptions, type CdnPurgeAdapter, type ComponentCacheEntry, type ComponentCacheStore, type ContentSecurityPolicyDirectives, type CorsOptions, type CronContext, type CronSchedule, type CronScheduler, type CronTaskDefinition, type CronTaskMeta, type CsrfOptions, type DataCacheMiddlewareOptions, type Database, type DatabaseConnector, type DatabaseConnectorInstance, type DatabaseHooks, type DatabaseOptions, type DefineEmailProviderOptions, type DraftMode, type DraftModeOptions, type DrizzleConfig, type EmailAttachment, type EmailOptions, type EmailProvider, type EmailProviderConfig, type EmailProviderType, type EmailResult, type EmailTransport, type ExperimentAssignment, type ExperimentDefinition, type ExperimentOptions, type FeatureFlagDefinition, type FeatureFlagOptions, type FeatureFlagStore, type FeatureFlagsMiddlewareOptions, type FetchCacheOptions, type FetchInitWithNext, type FlagContext, type FlagEvaluation, type FlagKind, type FlagValue, type KVNamespace, type KVOptions, type LogEmailProviderConfig, type Migration, type MockEmailProviderConfig, type MockEmailTransport, type ObservabilityConfig, type ObservabilityExporter, type ObservabilityHooks, type ObservabilityTracer, type Peer, type PurgeResult, type QueueDefinition, type QueueDriver, type QueueHandler, type QueueMessage, type QueueOptions, type QueueStats, REQUEST_ID_HEADER, type RateLimitInfo, type RateLimitOptions, type RateLimitStore, type RateLimitStoreEntry, type RequestIdOptions, type RevalidationContext, type RevalidationEntry, type RevalidationFetcher, type RevalidationKey, type RevalidationResult, type RouteRule, type SSEConnection, type SSEHandler, type SSEMessage, type SSEOptions, type ScheduledTask, type SchedulerOptions, type SecurityHeadersOptions, type Segment, type SegmentRule, type SendOptions, type SendmailEmailProviderConfig, type ServeStaticOptions, type Session, type SessionData, type SessionOptions, type SessionStore, type SingleFlightOptions, type SmtpEmailProviderConfig, type Span, type SpanAttributes, type SpanContext, type SpanEndOptions, type SpanEvent, type SpanOptions, type SpanStatus, type StorageDriver, type SurrogateKeyHeader, type TracingMiddlewareOptions, type UbeanBindings, type UbeanContext, type UbeanEnv, type UbeanStorage, type UbeanVariables, type UpgradeResult, type Variant, type WebSocketDefinition, type WebSocketHooks, type WebSocketRoom, _resetCdnCache, after, broadcast, broadcastSSE, cacheLife, cacheTag, cachedEventHandler, clearAnalyticsProviders, clearCacheStore, clearComponentCache, clearComponentCacheStore, clearEmailProviders, clearFeatureFlags, clearFetchDataCache, clearGlobalStorage, clearQueueDefinitions, clearRevalidationRegistry, clearSSEState, clearScheduledTasks, clearSentEmails, clearWebSocketState, closeAllSSE, closeDatabases, createAfterMiddleware, createAnalyticsMiddleware, createCacheControlMiddleware, createCacheMiddleware, createCloudflarePurgeAdapter, createComponentMemoryStore, createConsoleExporter, createCorsMiddleware, createCronContext, createCsrfMiddleware, createDataCacheMiddleware, createDraftModeMiddleware, createEmailTransport, createFastlyPurgeAdapter, createFeatureFlagsMiddleware, createFetchMemoizationMiddleware, createKV, createLogAnalyticsProvider, createMemoizedFetch, createMemoryAnalyticsProvider, createMemoryCronScheduler, createMemoryDriver, createMemoryFeatureFlagStore, createMemoryQueueDriver, createMemoryRateLimitStore, createMemoryStore, createMockAnalyticsProvider, createMockPurgeAdapter, createObservabilityTracer, createOpenTelemetryExporter, createRateLimitMiddleware, createRoom, createSSEStream, createSecurityHeadersMiddleware, createSessionMiddleware, createSingleFlightMiddleware, createSpan, createStorage, createStorageSessionStore, createTracingMiddleware, createWebSocketMiddleware, defineAnalytics, defineAnalyticsProvider, defineCachedFunction, defineCors, defineCsrf, defineDatabase, defineDraftMode, defineEmailProvider, defineExperiment, defineFeatureFlag, defineQueue, defineRateLimit, defineRevalidation, defineRoom, defineSSE, defineScheduled, defineSecurityHeaders, defineSessionStore, defineSingleFlight, defineSurrogateKeys, defineWebSocket, disableDraftMode, enableDraftMode, evaluateFlag, evaluateFlagFromContext, evaluateFlagWithReason, extractAnalyticsContext, extractFlagContext, flushAfterCallbacks, formatSSEMessage, generateCsrfToken, generateRequestId, getAfterCallbackCount, getAllQueueStats, getAnalyticsProvider, getDataCacheSize, getDatabaseHooks, getEmailProvider, getEmailProviderNames, getEmailTransport, getGlobalAnalyticsProvider, getGlobalFeatureFlagStore, getGlobalPurgeAdapter, getGlobalTracer, getInvalidatedKeys, getQueueDefinitions, getQueueStats, getRequestId, getRevalidationEntries, getRoom, getRooms, getSSEConnections, getScheduledTasks, getSentEmails, getSpan, getSurrogateKeys, getVariant, getVariantAssignment, getVariantFromContext, getWebSocketDefinitions, handleClose, handleError, handleMessage, handleUpgrade, invalidate, invalidateKey, invalidateRouteCache, isDraftMode, listAnalyticsProviders, listExperimentNames, listFlagNames, migrateDatabase, parseCron, purgeKeys, purgeUrls, rawSql as raw, rawSql, rawSql as sqlRaw, registerAnalyticsProvider, registerDb0Create, registerWebSocket, removeExperiment, removeFeatureFlag, renderEmailTemplate, resetCronRunCounts, resolveRouteCacheRules, revalidateDataCachePath, revalidateDataCacheTag, revalidatePath, revalidateTag, revalidateTags, runMigrations, runRevalidation, runScheduledTask, sendEmail, sendMessage, sendMessages, serializeCsp, serveStatic, setDefaultEmailProvider, setGlobalAnalyticsProvider, setGlobalFeatureFlagStore, setGlobalPurgeAdapter, setGlobalTracer, setQueueDriver, sseHeaders, startCronScheduler, startQueueWorkers, startSpan, stopQueueWorkers, trackEvent, trackPageView, trackRaw, unregisterAnalyticsProvider, unregisterRevalidation, useAnalytics, useCacheStore, useComponentCacheStore, useDatabase, useDraftMode, useEmailProvider, useExperiments, useFlagContext, useFlags, useKV, useQueueDriver, useSession, useStorage, validateCron, withSpan, wrapWithCache };
188
+ export { type AnalyticsContext, type AnalyticsEvent, type AnalyticsMiddlewareOptions, type AnalyticsProperties, type AnalyticsProvider, type AnalyticsProviderOptions, type AnalyticsRecord, type AnalyticsTrackOptions, type BunSqliteLike, type CacheControlOptions, type CacheEntry, type CacheRule, type CacheStore, type CacheWrapOptions, type CachedFunctionOptions, type CdnPurgeAdapter, type CloudflareQueueBinding, type ComponentCacheEntry, type ComponentCacheStore, type ContentSecurityPolicyDirectives, type CorsOptions, type CronContext, type CronSchedule, type CronScheduler, type CronTaskDefinition, type CronTaskMeta, type CsrfOptions, type D1DatabaseBinding, type DataCacheMiddlewareOptions, type Database, type DatabaseConnector, type DatabaseConnectorInstance, type DatabaseHooks, type DatabaseOptions, type DefineEmailProviderOptions, type DenoKvLike, type DraftMode, type DraftModeOptions, type DrizzleConfig, type EmailAttachment, type EmailOptions, type EmailProvider, type EmailProviderConfig, type EmailProviderType, type EmailResult, type EmailTransport, type ExperimentAssignment, type ExperimentDefinition, type ExperimentOptions, type FeatureFlagDefinition, type FeatureFlagOptions, type FeatureFlagStore, type FeatureFlagsMiddlewareOptions, type FetchCacheOptions, type FetchInitWithNext, type FlagContext, type FlagEvaluation, type FlagKind, type FlagValue, type KVNamespace, type KVOptions, type KvListBinding, type LogEmailProviderConfig, type Migration, type MockEmailProviderConfig, type MockEmailTransport, type NetlifyBlobsStore, type ObservabilityConfig, type ObservabilityExporter, type ObservabilityHooks, type ObservabilityTracer, type Peer, type PostgresLike, type PurgeResult, type QueueDefinition, type QueueDriver, type QueueHandler, type QueueMessage, type QueueOptions, type QueueStats, REQUEST_ID_HEADER, type RateLimitInfo, type RateLimitOptions, type RateLimitStore, type RateLimitStoreEntry, type RequestIdOptions, type RevalidationContext, type RevalidationEntry, type RevalidationFetcher, type RevalidationKey, type RevalidationResult, type RouteRule, type SSEConnection, type SSEHandler, type SSEMessage, type SSEOptions, type ScheduledTask, type SchedulerOptions, type SecurityHeadersOptions, type Segment, type SegmentRule, type SendOptions, type SendmailEmailProviderConfig, type ServeStaticOptions, type Session, type SessionData, type SessionOptions, type SessionStore, type SingleFlightOptions, type SmtpEmailProviderConfig, type Span, type SpanAttributes, type SpanContext, type SpanEndOptions, type SpanEvent, type SpanOptions, type SpanStatus, type StorageDriver, type SurrogateKeyHeader, type TracingMiddlewareOptions, type UbeanBindings, type UbeanContext, type UbeanEnv, type UbeanStorage, type UbeanVariables, type UpgradeResult, type Variant, type WebSocketDefinition, type WebSocketHooks, type WebSocketRoom, _resetCdnCache, after, broadcast, broadcastSSE, cacheLife, cacheTag, cachedEventHandler, clearAnalyticsProviders, clearCacheStore, clearComponentCache, clearComponentCacheStore, clearEmailProviders, clearFeatureFlags, clearFetchDataCache, clearGlobalStorage, clearQueueDefinitions, clearRevalidationRegistry, clearSSEState, clearScheduledTasks, clearSentEmails, clearWebSocketState, closeAllSSE, closeDatabases, createAfterMiddleware, createAnalyticsMiddleware, createBunSqliteDatabase, createCacheControlMiddleware, createCacheMiddleware, createCloudflareD1Database, createCloudflarePurgeAdapter, createCloudflareQueueDriver, createComponentMemoryStore, createConsoleExporter, createCorsMiddleware, createCronContext, createCsrfMiddleware, createDataCacheMiddleware, createDenoKvStorage, createDraftModeMiddleware, createEmailTransport, createFastlyPurgeAdapter, createFeatureFlagsMiddleware, createFetchMemoizationMiddleware, createFsCacheStore, createKV, createLogAnalyticsProvider, createMemoizedFetch, createMemoryAnalyticsProvider, createMemoryCronScheduler, createMemoryDriver, createMemoryFeatureFlagStore, createMemoryQueueDriver, createMemoryRateLimitStore, createMemoryStore, createMockAnalyticsProvider, createMockPurgeAdapter, createNetlifyBlobsStorage, createObservabilityTracer, createOpenTelemetryExporter, createRateLimitMiddleware, createRoom, createSSEStream, createSecurityHeadersMiddleware, createSessionMiddleware, createSingleFlightMiddleware, createSpan, createStorage, createStorageCacheStore, createStorageSessionStore, createTracingMiddleware, createVercelKvQueueDriver, createVercelPostgresDatabase, createWebSocketMiddleware, defineAnalytics, defineAnalyticsProvider, defineCachedFunction, defineCors, defineCsrf, defineDatabase, defineDraftMode, defineEmailProvider, defineExperiment, defineFeatureFlag, defineQueue, defineRateLimit, defineRevalidation, defineRoom, defineSSE, defineScheduled, defineSecurityHeaders, defineSessionStore, defineSingleFlight, defineSurrogateKeys, defineWebSocket, disableDraftMode, dispatchCloudflareQueueBatch, enableDraftMode, evaluateFlag, evaluateFlagFromContext, evaluateFlagWithReason, extractAnalyticsContext, extractFlagContext, flushAfterCallbacks, formatSSEMessage, generateCsrfToken, generateRequestId, getAfterCallbackCount, getAllQueueStats, getAnalyticsProvider, getDataCacheSize, getDatabaseHooks, getEmailProvider, getEmailProviderNames, getEmailTransport, getGlobalAnalyticsProvider, getGlobalFeatureFlagStore, getGlobalPurgeAdapter, getGlobalTracer, getInvalidatedKeys, getQueueDefinitions, getQueueStats, getRequestId, getRevalidationEntries, getRoom, getRooms, getSSEConnections, getScheduledTasks, getSentEmails, getSpan, getSurrogateKeys, getVariant, getVariantAssignment, getVariantFromContext, getWebSocketDefinitions, handleClose, handleError, handleMessage, handleUpgrade, invalidate, invalidateKey, invalidateRouteCache, isDraftMode, listAnalyticsProviders, listExperimentNames, listFlagNames, migrateDatabase, parseCron, purgeKeys, purgeUrls, rawSql as raw, rawSql, rawSql as sqlRaw, registerAnalyticsProvider, registerDb0Create, registerWebSocket, removeExperiment, removeFeatureFlag, renderEmailTemplate, resetCronRunCounts, resolveRouteCacheRules, revalidateDataCachePath, revalidateDataCacheTag, revalidatePath, revalidateTag, revalidateTags, runMigrations, runRevalidation, runScheduledTask, sendEmail, sendMessage, sendMessages, serializeCsp, serveStatic, setDefaultEmailProvider, setGlobalAnalyticsProvider, setGlobalFeatureFlagStore, setGlobalPurgeAdapter, setGlobalTracer, setQueueDriver, sseHeaders, startCronScheduler, startQueueWorkers, startSpan, stopQueueWorkers, trackEvent, trackPageView, trackRaw, unregisterAnalyticsProvider, unregisterRevalidation, useAnalytics, useCacheStore, useComponentCacheStore, useDatabase, useDraftMode, useEmailProvider, useExperiments, useFlagContext, useFlags, useKV, useQueueDriver, useSession, useStorage, validateCron, withSpan, wrapWithCache };
package/dist/index.js CHANGED
@@ -1,16 +1,17 @@
1
- import { a as invalidateRouteCache, i as createMemoryStore, n as clearCacheStore, o as resolveRouteCacheRules, r as createCacheMiddleware, s as useCacheStore, t as cachedEventHandler } from "./cache-C84ix1Vq.js";
1
+ import { a as createMemoryStore, c as resolveRouteCacheRules, i as createFsCacheStore, l as useCacheStore, n as clearCacheStore, o as createStorageCacheStore, r as createCacheMiddleware, s as invalidateRouteCache, t as cachedEventHandler } from "./cache-BUoSDwTV.js";
2
2
  import { a as rawSql, c as useDatabase, i as migrateDatabase, n as defineDatabase, o as registerDb0Create, r as getDatabaseHooks, s as runMigrations, t as closeDatabases } from "./database-DNrY44SQ.js";
3
3
  import { a as getQueueDefinitions, c as sendMessages, d as stopQueueWorkers, f as useQueueDriver, i as getAllQueueStats, l as setQueueDriver, n as createMemoryQueueDriver, o as getQueueStats, r as defineQueue, s as sendMessage, t as clearQueueDefinitions, u as startQueueWorkers } from "./queue-Bwzi3mhK.js";
4
+ import { a as createNetlifyBlobsStorage, c as dispatchCloudflareQueueBatch, i as createDenoKvStorage, n as createCloudflareD1Database, o as createVercelKvQueueDriver, r as createCloudflareQueueDriver, s as createVercelPostgresDatabase, t as createBunSqliteDatabase } from "./drivers-DiyNSo7u.js";
4
5
  import { a as validateCron, c as defineScheduled, i as startCronScheduler, l as getScheduledTasks, n as parseCron, o as clearScheduledTasks, r as resetCronRunCounts, s as createCronContext, t as createMemoryCronScheduler, u as runScheduledTask } from "./cron-scheduler-BVuXv7nn.js";
5
6
  import { S as registerWebSocket, _ as getWebSocketDefinitions, a as defineSSE, b as handleMessage, c as sseHeaders, d as createRoom, f as createWebSocketMiddleware, g as getRooms, h as getRoom, i as createSSEStream, l as broadcast, m as defineWebSocket, n as clearSSEState, o as formatSSEMessage, p as defineRoom, r as closeAllSSE, s as getSSEConnections, t as broadcastSSE, u as clearWebSocketState, v as handleClose, x as handleUpgrade, y as handleError } from "./sse-a6Ky9Vcl.js";
6
- import { a as useKV, i as createStorage, n as createKV, o as useStorage, r as createMemoryDriver, t as clearGlobalStorage } from "./storage-BZLMaqHr.js";
7
- import { a as getEmailProvider, c as getSentEmails, d as setDefaultEmailProvider, f as useEmailProvider, i as defineEmailProvider, l as renderEmailTemplate, n as clearSentEmails, o as getEmailProviderNames, r as createEmailTransport, s as getEmailTransport, t as clearEmailProviders, u as sendEmail } from "./email-BjfRiR9b.js";
7
+ import { a as useKV, i as createStorage, n as createKV, o as useStorage, r as createMemoryDriver, t as clearGlobalStorage } from "./storage-Bao5WSGf.js";
8
+ import { a as getEmailProvider, c as getSentEmails, d as setDefaultEmailProvider, f as useEmailProvider, i as defineEmailProvider, l as renderEmailTemplate, n as clearSentEmails, o as getEmailProviderNames, r as createEmailTransport, s as getEmailTransport, t as clearEmailProviders, u as sendEmail } from "./email-DnoZgXzS.js";
8
9
  import { a as createSpan, c as getGlobalTracer, d as setGlobalTracer, f as startSpan, i as createOpenTelemetryExporter, l as getRequestId, n as createConsoleExporter, o as createTracingMiddleware, p as withSpan, r as createObservabilityTracer, s as generateRequestId, t as REQUEST_ID_HEADER, u as getSpan } from "./observability-Cio6Qq1H.js";
9
10
  import { t as serveStatic } from "./static-DPHaovQe.js";
10
11
  import { C as defineRateLimit, S as createRateLimitMiddleware, T as defineCors, _ as after, a as getInvalidatedKeys, b as getAfterCallbackCount, c as invalidateKey, d as createDraftModeMiddleware, f as defineDraftMode, g as useDraftMode, h as isDraftMode, i as defineSingleFlight, l as runRevalidation, m as enableDraftMode, n as createSingleFlightMiddleware, o as getRevalidationEntries, p as disableDraftMode, r as defineRevalidation, s as invalidate, t as clearRevalidationRegistry, u as unregisterRevalidation, v as createAfterMiddleware, w as createCorsMiddleware, x as createMemoryRateLimitStore, y as flushAfterCallbacks } from "./single-flight-mJ4ZKbx1.js";
11
- import { a as createSecurityHeadersMiddleware, c as createCsrfMiddleware, i as useSession, l as defineCsrf, n as createStorageSessionStore, o as defineSecurityHeaders, r as defineSessionStore, s as serializeCsp, t as createSessionMiddleware, u as generateCsrfToken } from "./sessions-BsBsyFAG.js";
12
+ import { a as createSecurityHeadersMiddleware, c as createCsrfMiddleware, i as useSession, l as defineCsrf, n as createStorageSessionStore, o as defineSecurityHeaders, r as defineSessionStore, s as serializeCsp, t as createSessionMiddleware, u as generateCsrfToken } from "./sessions-0cguTuLf.js";
12
13
  import { a as getDataCacheSize, i as createMemoizedFetch, n as createDataCacheMiddleware, o as revalidateDataCachePath, r as createFetchMemoizationMiddleware, s as revalidateDataCacheTag, t as clearFetchDataCache } from "./fetch-memo-rbkxxnW4.js";
13
- import { a as createComponentMemoryStore, c as revalidateTag, d as wrapWithCache, i as clearComponentCacheStore, l as revalidateTags, n as cacheTag, o as defineCachedFunction, r as clearComponentCache, s as revalidatePath, t as cacheLife, u as useComponentCacheStore } from "./cache-directive-C1Nekkza.js";
14
+ import { a as createComponentMemoryStore, c as revalidateTag, d as wrapWithCache, i as clearComponentCacheStore, l as revalidateTags, n as cacheTag, o as defineCachedFunction, r as clearComponentCache, s as revalidatePath, t as cacheLife, u as useComponentCacheStore } from "./cache-directive-Dswp1vvK.js";
14
15
  import { A as getAnalyticsProvider, C as createAnalyticsMiddleware, D as defineAnalytics, E as createMockAnalyticsProvider, F as trackEvent, I as trackPageView, L as trackRaw, M as listAnalyticsProviders, N as registerAnalyticsProvider, O as defineAnalyticsProvider, P as setGlobalAnalyticsProvider, R as unregisterAnalyticsProvider, S as clearAnalyticsProviders, T as createMemoryAnalyticsProvider, _ as removeFeatureFlag, a as defineFeatureFlag, b as useFlagContext, c as evaluateFlagWithReason, d as getVariant, f as getVariantAssignment, g as removeExperiment, h as listFlagNames, i as defineExperiment, j as getGlobalAnalyticsProvider, k as extractAnalyticsContext, l as extractFlagContext, m as listExperimentNames, n as createFeatureFlagsMiddleware, o as evaluateFlag, p as getVariantFromContext, r as createMemoryFeatureFlagStore, s as evaluateFlagFromContext, t as clearFeatureFlags, u as getGlobalFeatureFlagStore, v as setGlobalFeatureFlagStore, w as createLogAnalyticsProvider, x as useFlags, y as useExperiments, z as useAnalytics } from "./feature-flags-CdLwsMD2.js";
15
16
  //#region src/cdn-cache.ts
16
17
  /**
@@ -392,4 +393,4 @@ function _resetCdnCache() {
392
393
  globalPurgeAdapter = null;
393
394
  }
394
395
  //#endregion
395
- export { REQUEST_ID_HEADER, _resetCdnCache, after, broadcast, broadcastSSE, cacheLife, cacheTag, cachedEventHandler, clearAnalyticsProviders, clearCacheStore, clearComponentCache, clearComponentCacheStore, clearEmailProviders, clearFeatureFlags, clearFetchDataCache, clearGlobalStorage, clearQueueDefinitions, clearRevalidationRegistry, clearSSEState, clearScheduledTasks, clearSentEmails, clearWebSocketState, closeAllSSE, closeDatabases, createAfterMiddleware, createAnalyticsMiddleware, createCacheControlMiddleware, createCacheMiddleware, createCloudflarePurgeAdapter, createComponentMemoryStore, createConsoleExporter, createCorsMiddleware, createCronContext, createCsrfMiddleware, createDataCacheMiddleware, createDraftModeMiddleware, createEmailTransport, createFastlyPurgeAdapter, createFeatureFlagsMiddleware, createFetchMemoizationMiddleware, createKV, createLogAnalyticsProvider, createMemoizedFetch, createMemoryAnalyticsProvider, createMemoryCronScheduler, createMemoryDriver, createMemoryFeatureFlagStore, createMemoryQueueDriver, createMemoryRateLimitStore, createMemoryStore, createMockAnalyticsProvider, createMockPurgeAdapter, createObservabilityTracer, createOpenTelemetryExporter, createRateLimitMiddleware, createRoom, createSSEStream, createSecurityHeadersMiddleware, createSessionMiddleware, createSingleFlightMiddleware, createSpan, createStorage, createStorageSessionStore, createTracingMiddleware, createWebSocketMiddleware, defineAnalytics, defineAnalyticsProvider, defineCachedFunction, defineCors, defineCsrf, defineDatabase, defineDraftMode, defineEmailProvider, defineExperiment, defineFeatureFlag, defineQueue, defineRateLimit, defineRevalidation, defineRoom, defineSSE, defineScheduled, defineSecurityHeaders, defineSessionStore, defineSingleFlight, defineSurrogateKeys, defineWebSocket, disableDraftMode, enableDraftMode, evaluateFlag, evaluateFlagFromContext, evaluateFlagWithReason, extractAnalyticsContext, extractFlagContext, flushAfterCallbacks, formatSSEMessage, generateCsrfToken, generateRequestId, getAfterCallbackCount, getAllQueueStats, getAnalyticsProvider, getDataCacheSize, getDatabaseHooks, getEmailProvider, getEmailProviderNames, getEmailTransport, getGlobalAnalyticsProvider, getGlobalFeatureFlagStore, getGlobalPurgeAdapter, getGlobalTracer, getInvalidatedKeys, getQueueDefinitions, getQueueStats, getRequestId, getRevalidationEntries, getRoom, getRooms, getSSEConnections, getScheduledTasks, getSentEmails, getSpan, getSurrogateKeys, getVariant, getVariantAssignment, getVariantFromContext, getWebSocketDefinitions, handleClose, handleError, handleMessage, handleUpgrade, invalidate, invalidateKey, invalidateRouteCache, isDraftMode, listAnalyticsProviders, listExperimentNames, listFlagNames, migrateDatabase, parseCron, purgeKeys, purgeUrls, rawSql as raw, rawSql, rawSql as sqlRaw, registerAnalyticsProvider, registerDb0Create, registerWebSocket, removeExperiment, removeFeatureFlag, renderEmailTemplate, resetCronRunCounts, resolveRouteCacheRules, revalidateDataCachePath, revalidateDataCacheTag, revalidatePath, revalidateTag, revalidateTags, runMigrations, runRevalidation, runScheduledTask, sendEmail, sendMessage, sendMessages, serializeCsp, serveStatic, setDefaultEmailProvider, setGlobalAnalyticsProvider, setGlobalFeatureFlagStore, setGlobalPurgeAdapter, setGlobalTracer, setQueueDriver, sseHeaders, startCronScheduler, startQueueWorkers, startSpan, stopQueueWorkers, trackEvent, trackPageView, trackRaw, unregisterAnalyticsProvider, unregisterRevalidation, useAnalytics, useCacheStore, useComponentCacheStore, useDatabase, useDraftMode, useEmailProvider, useExperiments, useFlagContext, useFlags, useKV, useQueueDriver, useSession, useStorage, validateCron, withSpan, wrapWithCache };
396
+ export { REQUEST_ID_HEADER, _resetCdnCache, after, broadcast, broadcastSSE, cacheLife, cacheTag, cachedEventHandler, clearAnalyticsProviders, clearCacheStore, clearComponentCache, clearComponentCacheStore, clearEmailProviders, clearFeatureFlags, clearFetchDataCache, clearGlobalStorage, clearQueueDefinitions, clearRevalidationRegistry, clearSSEState, clearScheduledTasks, clearSentEmails, clearWebSocketState, closeAllSSE, closeDatabases, createAfterMiddleware, createAnalyticsMiddleware, createBunSqliteDatabase, createCacheControlMiddleware, createCacheMiddleware, createCloudflareD1Database, createCloudflarePurgeAdapter, createCloudflareQueueDriver, createComponentMemoryStore, createConsoleExporter, createCorsMiddleware, createCronContext, createCsrfMiddleware, createDataCacheMiddleware, createDenoKvStorage, createDraftModeMiddleware, createEmailTransport, createFastlyPurgeAdapter, createFeatureFlagsMiddleware, createFetchMemoizationMiddleware, createFsCacheStore, createKV, createLogAnalyticsProvider, createMemoizedFetch, createMemoryAnalyticsProvider, createMemoryCronScheduler, createMemoryDriver, createMemoryFeatureFlagStore, createMemoryQueueDriver, createMemoryRateLimitStore, createMemoryStore, createMockAnalyticsProvider, createMockPurgeAdapter, createNetlifyBlobsStorage, createObservabilityTracer, createOpenTelemetryExporter, createRateLimitMiddleware, createRoom, createSSEStream, createSecurityHeadersMiddleware, createSessionMiddleware, createSingleFlightMiddleware, createSpan, createStorage, createStorageCacheStore, createStorageSessionStore, createTracingMiddleware, createVercelKvQueueDriver, createVercelPostgresDatabase, createWebSocketMiddleware, defineAnalytics, defineAnalyticsProvider, defineCachedFunction, defineCors, defineCsrf, defineDatabase, defineDraftMode, defineEmailProvider, defineExperiment, defineFeatureFlag, defineQueue, defineRateLimit, defineRevalidation, defineRoom, defineSSE, defineScheduled, defineSecurityHeaders, defineSessionStore, defineSingleFlight, defineSurrogateKeys, defineWebSocket, disableDraftMode, dispatchCloudflareQueueBatch, enableDraftMode, evaluateFlag, evaluateFlagFromContext, evaluateFlagWithReason, extractAnalyticsContext, extractFlagContext, flushAfterCallbacks, formatSSEMessage, generateCsrfToken, generateRequestId, getAfterCallbackCount, getAllQueueStats, getAnalyticsProvider, getDataCacheSize, getDatabaseHooks, getEmailProvider, getEmailProviderNames, getEmailTransport, getGlobalAnalyticsProvider, getGlobalFeatureFlagStore, getGlobalPurgeAdapter, getGlobalTracer, getInvalidatedKeys, getQueueDefinitions, getQueueStats, getRequestId, getRevalidationEntries, getRoom, getRooms, getSSEConnections, getScheduledTasks, getSentEmails, getSpan, getSurrogateKeys, getVariant, getVariantAssignment, getVariantFromContext, getWebSocketDefinitions, handleClose, handleError, handleMessage, handleUpgrade, invalidate, invalidateKey, invalidateRouteCache, isDraftMode, listAnalyticsProviders, listExperimentNames, listFlagNames, migrateDatabase, parseCron, purgeKeys, purgeUrls, rawSql as raw, rawSql, rawSql as sqlRaw, registerAnalyticsProvider, registerDb0Create, registerWebSocket, removeExperiment, removeFeatureFlag, renderEmailTemplate, resetCronRunCounts, resolveRouteCacheRules, revalidateDataCachePath, revalidateDataCacheTag, revalidatePath, revalidateTag, revalidateTags, runMigrations, runRevalidation, runScheduledTask, sendEmail, sendMessage, sendMessages, serializeCsp, serveStatic, setDefaultEmailProvider, setGlobalAnalyticsProvider, setGlobalFeatureFlagStore, setGlobalPurgeAdapter, setGlobalTracer, setQueueDriver, sseHeaders, startCronScheduler, startQueueWorkers, startSpan, stopQueueWorkers, trackEvent, trackPageView, trackRaw, unregisterAnalyticsProvider, unregisterRevalidation, useAnalytics, useCacheStore, useComponentCacheStore, useDatabase, useDraftMode, useEmailProvider, useExperiments, useFlagContext, useFlags, useKV, useQueueDriver, useSession, useStorage, validateCron, withSpan, wrapWithCache };
package/dist/security.js CHANGED
@@ -1,2 +1,2 @@
1
- import { a as createSecurityHeadersMiddleware, c as createCsrfMiddleware, i as useSession, l as defineCsrf, n as createStorageSessionStore, o as defineSecurityHeaders, r as defineSessionStore, s as serializeCsp, t as createSessionMiddleware, u as generateCsrfToken } from "./sessions-BsBsyFAG.js";
1
+ import { a as createSecurityHeadersMiddleware, c as createCsrfMiddleware, i as useSession, l as defineCsrf, n as createStorageSessionStore, o as defineSecurityHeaders, r as defineSessionStore, s as serializeCsp, t as createSessionMiddleware, u as generateCsrfToken } from "./sessions-0cguTuLf.js";
2
2
  export { createCsrfMiddleware, createSecurityHeadersMiddleware, createSessionMiddleware, createStorageSessionStore, defineCsrf, defineSecurityHeaders, defineSessionStore, generateCsrfToken, serializeCsp, useSession };
@@ -1,4 +1,4 @@
1
- import { o as useStorage } from "./storage-BZLMaqHr.js";
1
+ import { o as useStorage } from "./storage-Bao5WSGf.js";
2
2
  //#region src/csrf.ts
3
3
  const SAFE_METHODS = /* @__PURE__ */ new Set([
4
4
  "GET",
@@ -50,7 +50,7 @@ function createStorage(options = {}) {
50
50
  const raw = await driver.getItemRaw(relativeKey);
51
51
  if (raw === void 0 || raw === null) return null;
52
52
  const entry = raw;
53
- if (entry.expiresAt && Date.now() > entry.expiresAt) {
53
+ if (entry.expiresAt && Date.now() >= entry.expiresAt) {
54
54
  await driver.removeItem(relativeKey);
55
55
  return null;
56
56
  }
package/dist/storage.js CHANGED
@@ -1,2 +1,2 @@
1
- import { a as useKV, i as createStorage, n as createKV, o as useStorage, r as createMemoryDriver, t as clearGlobalStorage } from "./storage-BZLMaqHr.js";
1
+ import { a as useKV, i as createStorage, n as createKV, o as useStorage, r as createMemoryDriver, t as clearGlobalStorage } from "./storage-Bao5WSGf.js";
2
2
  export { clearGlobalStorage, createKV, createMemoryDriver, createStorage, useKV, useStorage };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ubean/server",
3
- "version": "0.2.1",
3
+ "version": "0.3.0",
4
4
  "description": "Server-side runtime primitives for ubean (cache, database, queue, cron, websocket, sse, storage, observability, static, cors, rate-limit, component cache)",
5
5
  "files": [
6
6
  "dist"
@@ -62,6 +62,10 @@
62
62
  "types": "./dist/static.d.ts",
63
63
  "import": "./dist/static.js"
64
64
  },
65
+ "./drivers": {
66
+ "types": "./dist/drivers.d.ts",
67
+ "import": "./dist/drivers.js"
68
+ },
65
69
  "./middleware": {
66
70
  "types": "./dist/middleware.d.ts",
67
71
  "import": "./dist/middleware.js"
@@ -71,8 +75,7 @@
71
75
  "hono": "4.13.3",
72
76
  "hookable": "^6.1.1",
73
77
  "pathe": "^2.0.3",
74
- "@ubean/logger": "0.2.1",
75
- "@ubean/shared": "0.2.1"
78
+ "@ubean/shared": "0.3.0"
76
79
  },
77
80
  "devDependencies": {
78
81
  "@types/node": "^26.2.0",