@x-otto/persistence 0.0.1-alpha.3 → 0.0.1-alpha.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -45,7 +45,9 @@ Orthogonal append-only primitive alongside snapshots:
45
45
  |---------|---------|--------------------------------|--------------------------|--------------------------|
46
46
  | Memory | `memory` | Array push + listener broadcast | Full / range (0-based seq) | Real-time tail via events |
47
47
  | File | `file` | `.jsonl` per stream, write queue | Range read, crash-tail repair | Line-level truncate |
48
- | SQLite | `sqlite` | `append_entries` table, WAL | Range read + `COUNT(*)` | Shared connection via `sqlite-db-cache` |
48
+ | HTTP | `http` | Batch flush to remote server | Range read | Auth token + fetch injectable |
49
+
50
+ (The former SQLite append-log backend was removed; append-log is memory/file/http only.)
49
51
 
50
52
  ## Snapshot<T> Envelope
51
53
 
@@ -80,18 +82,9 @@ import { createFileStorageHost } from '@x-otto/persistence'
80
82
  const host = createFileStorageHost({ baseDir: './data', namespaces: ['sessions', 'knowledge'] })
81
83
  ```
82
84
 
83
- ## Backend Registry
84
-
85
- `StorageBackendRegistry` — global singleton for registering custom backends (Redis, S3, etc.):
86
-
87
- ```ts
88
- import { storageBackendRegistry } from '@x-otto/persistence'
89
-
90
- storageBackendRegistry.registerPersistence('redis', (opts) => new RedisPersistence(opts))
91
- const store = createPersistence({ type: 'redis', url: 'redis://...' })
92
- ```
85
+ ## Backend Selection
93
86
 
94
- Built-in backends auto-register at module load time.
87
+ `createPersistence(options)` / `createAppendLog(options)` dispatch over a discriminated union of built-in kinds (`memory` / `file` / `http` / `sqlite`) via inline switch. The former `StorageBackendRegistry` for custom backend registration was removed (zero external registrants); built-in backends are constructed directly in the factories.
95
88
 
96
89
  ## Key Files
97
90
 
@@ -106,11 +99,12 @@ src/
106
99
  remote-persistence.ts # RemotePersistence<S> — HTTP client base
107
100
  http-persistence.ts # HttpPersistence<T> — Snapshot HTTP backend
108
101
  sqlite-persistence.ts # SqlitePersistence — snapshots + change_log tables
102
+ sqlite-adapter.ts # SQLite driver re-export (Database / Statement)
109
103
  sqlite-db-cache.ts # Shared SQLite connection cache (ref-counted)
110
104
  change-log.ts # ChangeLogEntry type
111
105
  append-log.ts # AppendLog<E> + memory/file backends + createAppendLog
112
- sqlite-append-log.ts # SQLite append-log backend
113
- storage-factory.ts # createPersistence + backend pre-registration
106
+ http-append-log.ts # HttpAppendLog — HTTP append-log backend
107
+ storage-factory.ts # createPersistence / createAppendLog factories
114
108
  storage-host.ts # StorageHost — server-side semantic layer
115
109
  atomic-write.ts # Atomic file write utility
116
110
  panel-state.ts # Extension panel state persistence
@@ -131,4 +125,4 @@ pnpm --filter @x-otto/persistence build
131
125
  pnpm vitest run packages/persistence/tests/
132
126
  ```
133
127
 
134
- 18 test files cover all backends CRUD + pagination, AppendLog (truncate / crash-tail repair / concurrency serialization), backend registry, factory, `saveDocument`, `StorageHost`, and change tracking.
128
+ 23 test files cover all backends CRUD + pagination, AppendLog (truncate / crash-tail repair / concurrency serialization), factories, `saveDocument`, `StorageHost`, and change tracking.
package/dist/index.d.ts CHANGED
@@ -259,7 +259,15 @@ interface PanelStateSnapshot {
259
259
  subagents?: PanelStateSubagentEntry[];
260
260
  drafts?: PanelStateDraftEntry[];
261
261
  turnSummaries?: PanelStateTurnSummary[];
262
+ /**
263
+ * RFC-393 M4:面板态快照语义版本号。读时 `ver !== PANEL_STATE_VER` 则废弃旧 checkpoint
264
+ * (fail-soft,触发全量重读)。缺省(旧数据无此字段)= 0,自动废弃。
265
+ * bump 时机:面板字段结构变化(新增/删除字段、类型变化)时升版本。
266
+ */
267
+ ver?: number;
262
268
  }
269
+ /** RFC-393 M4:当前面板态快照版本号。与 PanelStateSnapshot.ver 比对。 */
270
+ declare const PANEL_STATE_VER = 1;
263
271
  /** RFC-108 D2:PanelState 持久化契约(无分页三方法)。 */
264
272
  interface PanelStatePersistence extends EntityPersistenceShape<PanelStateSnapshot> {}
265
273
  /**
@@ -496,6 +504,23 @@ declare class RemoteSnapshotConflictError extends RemotePersistenceError {
496
504
  cause?: unknown;
497
505
  });
498
506
  }
507
+ /**
508
+ * RFC-402 M2:远端请求错误格式化(纯函数,从 RemotePersistence 抽出)。
509
+ *
510
+ * 把错误文案本地化(中文 + causeCode 分支树)从 300 行传输基类剥离——
511
+ * 基类只调用本函数,不内联三元表达式树。领域子类(session/schedule)通过
512
+ * serviceLabel/endpointFlag 覆盖来定制文案,无需改基类。
513
+ */
514
+ /** 服务的可定制标签(领域子类覆盖,如 session → "会话服务")。 */
515
+ interface RemoteErrorFormatOptions {
516
+ serviceLabel: string;
517
+ endpointFlag: string;
518
+ timeoutMs: number;
519
+ }
520
+ /** 格式化请求超时(AbortError)的中文错误消息。 */
521
+ declare function formatRemoteTimeoutError(err: unknown, method: string, url: string, opts: RemoteErrorFormatOptions): RemotePersistenceError;
522
+ /** 格式化通用连接失败(含 causeCode 分支树)的中文错误消息。 */
523
+ declare function formatRemoteConnectionError(err: unknown, method: string, url: string, opts: RemoteErrorFormatOptions): RemotePersistenceError;
499
524
  //#endregion
500
525
  //#region src/storage-factory.d.ts
501
526
  /**
@@ -553,8 +578,7 @@ interface AppendLog<E> {
553
578
  append(streamId: string, entry: E): Promise<LogEntry<E>>;
554
579
  /** 按 seq 升序读取(可选范围);stream 不存在 → 空迭代,不抛。 */
555
580
  read(streamId: string, range?: AppendRange): AsyncIterable<LogEntry<E>>;
556
- /**
557
- * 可选——stream 当前记录数(= 下一个待分配 seq)。宿主用于「只回放最近 N 条」的
581
+ /** 可选——stream 当前记录数(= 下一个待分配 seq)。宿主用于「只回放最近 N 条」的
558
582
  * range 计算(如 inspector backfill 封顶),避免全量 decode 只为拿总数。
559
583
  */
560
584
  count?(streamId: string): Promise<number>;
@@ -585,7 +609,21 @@ type AppendLogOptions<E> = {
585
609
  extension?: string;
586
610
  codec?: LogCodec<E>;
587
611
  pollIntervalMs?: number;
612
+ /**
613
+ * RFC-381 M2:跨进程单写者锁(可选注入)。提供时每条 append 前 acquire、
614
+ * 写后 release——使「引擎进程独占写 trace」的约定升级为强制互斥(O_EXCL/flock
615
+ * 崩溃自释放)。缺省 = 既有行为(单进程进程内串行,不引入锁开销)。
616
+ */
617
+ writerLock?: AppendWriterLock;
588
618
  };
619
+ /**
620
+ * RFC-381 M2:跨进程单写者锁(每条 append 短临界区)。
621
+ * 实现侧用 `@x-otto/shared` file-lock(O_EXCL + 心跳 + 陈旧清理,崩溃自释放)。
622
+ */
623
+ interface AppendWriterLock {
624
+ acquire(streamId: string): Promise<void>;
625
+ release(streamId: string): Promise<void>;
626
+ }
589
627
  declare class MemoryAppendLog<E> implements AppendLog<E> {
590
628
  private readonly streams;
591
629
  private readonly listeners;
@@ -632,11 +670,14 @@ declare class FileAppendLog<E> implements AppendLog<E> {
632
670
  private writeQueue;
633
671
  private dirReady;
634
672
  private closed;
673
+ /** RFC-381 M2:跨进程单写者锁(可选;缺省 = 单进程进程内串行)。 */
674
+ private readonly writerLock?;
635
675
  constructor(options: {
636
676
  baseDir: string;
637
677
  extension?: string;
638
678
  codec?: LogCodec<E>;
639
- pollIntervalMs?: number;
679
+ pollIntervalMs?: number; /** RFC-381 M2:跨进程单写者锁(可选)。 */
680
+ writerLock?: AppendWriterLock;
640
681
  });
641
682
  append(streamId: string, entry: E): Promise<LogEntry<E>>;
642
683
  private appendSerial;
@@ -988,6 +1029,12 @@ declare class SqlitePersistence<T = unknown> implements Persistence<T> {
988
1029
  load(id: string): Promise<Snapshot<T> | null>;
989
1030
  delete(id: string): Promise<boolean>;
990
1031
  list(): Promise<string[]>;
1032
+ /**
1033
+ * RFC-402 M1:按 id 前缀批量加载快照(消除 StorageHost N+1)。
1034
+ * 一次 SQL 查回所有 id 以 prefix 开头的行,decode 后返回完整 Snapshot 数组。
1035
+ * 替代 StorageHost 侧 list()全量 + N次load() 的逐条往返。
1036
+ */
1037
+ loadByPrefix(idPrefix: string): Promise<Snapshot<unknown>[]>;
991
1038
  listPaginated(options: {
992
1039
  page: number;
993
1040
  pageSize?: number;
@@ -1058,5 +1105,5 @@ declare function pageBounds(total: number, options: PaginateOptions): PageBounds
1058
1105
  */
1059
1106
  declare function paginate<T>(items: readonly T[], options: PaginateOptions): PaginatedResult<T>;
1060
1107
  //#endregion
1061
- export { type AppendLog, type AppendLogOptions, type AppendRange, type ChangeLogEntry, type Codec, Database, Database as default, DiskPanelStatePersistence, DiskPasteStatePersistence, DiskPersistence, type DiskPersistenceOptions, type EntityPersistenceShape, FileAppendLog, FilePersistence, type FilePersistenceOptions, HttpAppendLog, type HttpAppendLogOptions, type LiveTap, type LogCodec, type LogEntry, MemoryAppendLog, MemoryPersistence, MemoryPersistenceBase, type MemoryPersistenceBaseOptions, type Metadata, type Migration, type PageBounds, type PaginateOptions, type PaginatedResult, type PaginationOptions, type PanelStateDraftEntry, type PanelStateEditedFile, type PanelStatePersistence, type PanelStateSnapshot, type PanelStateSubagentEntry, type PanelStateTodoItem, type PanelStateTurnSummary, type PasteStateEntry, type PasteStatePersistence, type PasteStateSnapshot, type Persistence, PersistenceError, type PersistenceShape, RemotePersistence, RemotePersistenceError, type RemotePersistenceOptions, RemoteSnapshotConflictError, type Snapshot, type SnapshotConflictInfo, SqlitePersistence, type SqlitePersistenceOptions, type Statement, StorageHost, type StorageHostOptions, type StorageOptions, acquireDb, atomicWriteFile, createAppendLog, createFileStorageHost, createInMemoryPanelStatePersistence, createInMemoryPasteStatePersistence, createLiveTappedAppendLog, createPersistence, normalizePasteSnapshot, pageBounds, paginate, releaseDb, resolvePasteNextId, saveDocument };
1108
+ export { type AppendLog, type AppendLogOptions, type AppendRange, type ChangeLogEntry, type Codec, Database, Database as default, DiskPanelStatePersistence, DiskPasteStatePersistence, DiskPersistence, type DiskPersistenceOptions, type EntityPersistenceShape, FileAppendLog, FilePersistence, type FilePersistenceOptions, HttpAppendLog, type HttpAppendLogOptions, type LiveTap, type LogCodec, type LogEntry, MemoryAppendLog, MemoryPersistence, MemoryPersistenceBase, type MemoryPersistenceBaseOptions, type Metadata, type Migration, PANEL_STATE_VER, type PageBounds, type PaginateOptions, type PaginatedResult, type PaginationOptions, type PanelStateDraftEntry, type PanelStateEditedFile, type PanelStatePersistence, type PanelStateSnapshot, type PanelStateSubagentEntry, type PanelStateTodoItem, type PanelStateTurnSummary, type PasteStateEntry, type PasteStatePersistence, type PasteStateSnapshot, type Persistence, PersistenceError, type PersistenceShape, type RemoteErrorFormatOptions, RemotePersistence, RemotePersistenceError, type RemotePersistenceOptions, RemoteSnapshotConflictError, type Snapshot, type SnapshotConflictInfo, SqlitePersistence, type SqlitePersistenceOptions, type Statement, StorageHost, type StorageHostOptions, type StorageOptions, acquireDb, atomicWriteFile, createAppendLog, createFileStorageHost, createInMemoryPanelStatePersistence, createInMemoryPasteStatePersistence, createLiveTappedAppendLog, createPersistence, formatRemoteConnectionError, formatRemoteTimeoutError, normalizePasteSnapshot, pageBounds, paginate, releaseDb, resolvePasteNextId, saveDocument };
1062
1109
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../src/atomic-write.ts","../src/types.ts","../src/memory-persistence.ts","../src/save-document.ts","../src/disk-persistence.ts","../src/panel-state.ts","../src/paste-state.ts","../src/remote-persistence.ts","../src/file-persistence.ts","../src/errors.ts","../src/storage-factory.ts","../src/change-log.ts","../src/append-log.ts","../src/storage-host.ts","../src/http-append-log.ts","../src/sqlite-adapter.ts","../src/sqlite-db-cache.ts","../src/sqlite-persistence.ts","../src/paginate.ts"],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../src/atomic-write.ts","../src/types.ts","../src/memory-persistence.ts","../src/save-document.ts","../src/disk-persistence.ts","../src/panel-state.ts","../src/paste-state.ts","../src/remote-persistence.ts","../src/file-persistence.ts","../src/errors.ts","../src/storage-factory.ts","../src/change-log.ts","../src/append-log.ts","../src/storage-host.ts","../src/http-append-log.ts","../src/sqlite-adapter.ts","../src/sqlite-db-cache.ts","../src/sqlite-persistence.ts","../src/paginate.ts"],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import{dirname as e,join as t}from"node:path";import{mkdir as n,open as r,readFile as i,readdir as a,rename as o,stat as s,unlink as c}from"node:fs/promises";import{randomUUID as l}from"node:crypto";import{constants as u,mkdirSync as d}from"node:fs";import{DatabaseSync as f}from"node:sqlite";import{StringDecoder as p}from"node:string_decoder";var m=class extends Error{constructor(e,t){super(e,t),this.name=`PersistenceError`}},h=class extends m{statusCode;constructor(e,t,n){super(e,n),this.name=`RemotePersistenceError`,this.statusCode=t}},g=class extends h{info;constructor(e,t,n){super(e,409,n),this.name=`RemoteSnapshotConflictError`,this.info=t}};async function _(t,n){let i=`${t}.${l()}.tmp`;try{let a=await r(i,`w`);try{await a.writeFile(n),await a.sync()}finally{await a.close()}await o(i,t),await ee(e(t))}catch(e){throw await c(i).catch(()=>{}),e instanceof m?e:new m(`Failed to atomically write "${t}"`,{cause:e})}}async function ee(e){let t;try{t=await r(e,`r`),await t.sync()}catch{}finally{t&&await t.close().catch(()=>{})}}function v(e,t){let n=t.pageSize>=1?t.pageSize:1,r=Math.max(1,Math.ceil(e/n)),i=Math.max(0,Math.min(t.page,r-1));return{total:e,page:i,pageSize:n,totalPages:r,start:i*n,hasNext:i<r-1,hasPrevious:i>0}}function y(e,t){let n=v(e.length,t);return{items:e.slice(n.start,n.start+n.pageSize),total:n.total,page:n.page,pageSize:n.pageSize,totalPages:n.totalPages,hasNext:n.hasNext,hasPrevious:n.hasPrevious}}var b=class{store=new Map;defaultPageSize;defaultSortBy;constructor(e={}){this.defaultPageSize=e.defaultPageSize??20,this.defaultSortBy=e.defaultSortBy??`updatedAt`}getSortValue(e,t){let n=e.metadata?.[t];return typeof n==`number`?n:0}async save(e){this.store.set(this.extractId(e),structuredClone(e))}async load(e){let t=this.store.get(e);return t?structuredClone(t):null}async delete(e){return this.store.delete(e)}async list(){return Array.from(this.store.keys())}entries(){return Array.from(this.store.entries())}async listPaginated(e){let{page:t,order:n=`desc`}=e,r=e.sortBy??this.defaultSortBy,i=e.pageSize??this.defaultPageSize,a=Array.from(this.store.entries()).map(([e,t])=>({id:e,sortValue:this.getSortValue(t,r)}));return a.sort((e,t)=>n===`asc`?e.sortValue-t.sortValue:t.sortValue-e.sortValue),y(a.map(e=>e.id),{page:t,pageSize:i})}},x=class extends b{extractId(e){return e.id}};async function S(e,t,n,r){let{now:i,version:a=1,tags:o=[],preserveCreatedAt:s=!0,owner:c,updatedBy:l}=r,u=s?await e.load(t):null,d=u?.metadata?.owner;await e.save({version:a,id:t,data:n,metadata:{createdAt:u?.metadata.createdAt??i,updatedAt:i,tags:o,...d?{owner:d}:c?{owner:c}:{},...l?{updatedBy:l}:{}}})}var C=class{baseDir;extension;defaultPageSize;codec;initialized=!1;constructor(e){this.baseDir=e.baseDir,this.extension=e.extension??`.json`,this.defaultPageSize=e.defaultPageSize??20,this.codec=e.codec??{encode:e=>JSON.stringify(e),decode:e=>JSON.parse(e),contentType:`application/json`}}async save(e){await this.ensureDir(),await _(this.resolvePath(this.extractId(e)),this.codec.encode(e))}async load(e){await this.ensureDir();let t=this.resolvePath(e);try{let e=await i(t,`utf-8`);return this.codec.decode(e)}catch(t){if(w(t))return null;throw new m(`Failed to load "${e}"`,{cause:t})}}async delete(e){try{return await c(this.resolvePath(e)),!0}catch{return!1}}async list(){await this.ensureDir();try{return(await a(this.baseDir)).filter(e=>e.endsWith(this.extension)).map(e=>decodeURIComponent(e.slice(0,-this.extension.length)))}catch{return[]}}async listPaginated(e){await this.ensureDir();let{page:n,order:r=`desc`}=e,i=e.pageSize??this.defaultPageSize;try{let e=(await a(this.baseDir)).filter(e=>e.endsWith(this.extension)),o=await Promise.all(e.map(async e=>{let n=await s(t(this.baseDir,e));return{id:decodeURIComponent(e.slice(0,-this.extension.length)),mtime:n.mtimeMs}}));return o.sort((e,t)=>r===`asc`?e.mtime-t.mtime:t.mtime-e.mtime),y(o.map(e=>e.id),{page:n,pageSize:i})}catch{return{items:[],total:0,page:0,pageSize:i,totalPages:1,hasNext:!1,hasPrevious:!1}}}resolvePath(e){let n=encodeURIComponent(e);return t(this.baseDir,`${n}${this.extension}`)}async ensureDir(){this.initialized||=(await n(this.baseDir,{recursive:!0}),!0)}};function w(e){return typeof e==`object`&&!!e&&`code`in e&&e.code===`ENOENT`}var T=class{map=new Map;constructor(e){this.extractId=e}async save(e){this.map.set(this.extractId(e),e)}async load(e){return this.map.get(e)??null}async delete(e){return this.map.delete(e)}},E=class extends C{extractId(e){return e.sessionId}},te=class{store;constructor(e){this.store=new E({baseDir:e.baseDir,extension:`.json`})}async save(e){return this.store.save(e)}async load(e){return this.store.load(e)}async delete(e){return this.store.delete(e)}};function ne(){return new T(e=>e.sessionId)}var D=class extends C{extractId(e){return e.sessionId}},re=class{store;constructor(e){this.store=new D({baseDir:e.baseDir,extension:`.json`})}async save(e){return this.store.save(e)}async load(e){return this.store.load(e)}async delete(e){return this.store.delete(e)}};function O(e){let t=typeof e==`object`&&e?e:{},n=typeof t.nextId==`number`&&Number.isFinite(t.nextId)?Math.floor(t.nextId):0,r=Math.max(1,n),i=Array.isArray(t.entries)?t.entries:[];for(let e of i){let t=e?.id;typeof t==`number`&&Number.isFinite(t)&&(r=Math.max(r,Math.floor(t)+1))}return r}function k(e,t){let n=typeof t==`object`&&t?t:{},r=Array.isArray(n.entries)?n.entries:[],i=[],a=new Set;for(let e of r){if(typeof e!=`object`||!e)continue;let{id:t,text:n}=e;if(typeof t!=`number`||!Number.isFinite(t)||typeof n!=`string`)continue;let r=Math.floor(t);a.has(r)||(a.add(r),i.push({id:r,text:n,byteLength:Buffer.byteLength(n,`utf-8`)}))}return{sessionId:e,entries:i,nextId:O(n)}}function A(){return new T(e=>e.sessionId)}var ie=class{baseUrl;resolveWsKey;get wsKey(){return this.resolveWsKey()}getAuth;getHeaders;fetch;timeoutMs;defaultPageSize;defaultSortBy;codec;get serviceLabel(){return`远端持久化服务`}get endpointFlag(){return`--persistence-url`}constructor(e){this.baseUrl=e.baseUrl.replace(/\/+$/,``);let t=e.wsKey;this.resolveWsKey=typeof t==`function`?()=>t()||`default`:()=>t||`default`,this.getAuth=e.getAuth,this.getHeaders=e.getHeaders??(async()=>({})),this.fetch=e.fetch,this.timeoutMs=e.timeoutMs,this.defaultPageSize=e.defaultPageSize??20,this.defaultSortBy=e.defaultSortBy??`updatedAt`,this.codec=e.codec??{encode:e=>JSON.stringify(e),decode:e=>JSON.parse(e),contentType:`application/json`}}wsPath(e){return`/${encodeURIComponent(this.wsKey)}/${encodeURIComponent(e)}`}wsListPath(){return`/${encodeURIComponent(this.wsKey)}`}async save(e){await this.request(this.wsPath(this.extractId(e)),{method:`PUT`,body:this.codec.encode(e)})}async saveWithRevision(e,t){let n={};t!==void 0&&(n[`If-Match`]=String(t));let r=(await this.request(this.wsPath(this.extractId(e)),{method:`PUT`,body:this.codec.encode(e)},n)).headers.get(`ETag`);return r?Number(r.replace(/"/g,``)):NaN}async loadWithRevision(e){let t=await this.request(this.wsPath(e),{method:`GET`});if(t.status===404)return null;let n=await t.text(),r;try{r=this.codec.decode(n)}catch(n){throw new h(`Remote persistence decode failed: ${this.wsPath(e)}`,t.status,{cause:n})}let i=t.headers.get(`ETag`),a=i?Number(i.replace(/"/g,``)):0;return{snapshot:r,revision:a}}async load(e){return(await this.loadWithRevision(e))?.snapshot??null}async delete(e){return(await this.request(this.wsPath(e),{method:`DELETE`})).ok}async list(){let e=await(await this.request(this.wsListPath(),{method:`GET`})).json();return e.items??e.ids??[]}async listPaginated(e){let{page:t,order:n=`desc`}=e,r=e.sortBy??this.defaultSortBy,i=e.pageSize??this.defaultPageSize,a=new URLSearchParams({page:String(t),pageSize:String(i),sortBy:r,order:n});return(await this.request(`${this.wsListPath()}?${a.toString()}`,{method:`GET`})).json()}async request(e,t,n){let r=await this.getAuth(),i={...await this.getHeaders(),...r.token?{Authorization:`Bearer ${r.token}`}:{},Accept:`application/json`,...n};t.body&&(i[`Content-Type`]=this.codec.contentType??`application/json`);let a=new AbortController,o=setTimeout(()=>a.abort(),this.timeoutMs),s=`${this.baseUrl}${e}`;try{let n=await this.fetch(s,{method:t.method,headers:i,body:t.body,signal:a.signal});if(n.status===409){let t=null;try{let e=await n.clone().json();t=typeof e.revision==`number`?e.revision:null}catch{}throw new g(`Remote persistence CAS conflict: ${this.wsPath(e.split(`/`).pop()??``)}`,{revision:t})}if(!n.ok&&n.status!==404)throw new h(`Remote persistence API error: ${n.status} ${n.statusText}`,n.status);return n}catch(e){if(e instanceof g||e instanceof h)throw e;if(e instanceof DOMException&&e.name===`AbortError`)throw new h(`无法连接到${this.serviceLabel}(请求超时 ${this.timeoutMs/1e3}s):${t.method} ${s}\n提示:请确认${this.serviceLabel}是否已启动、${this.endpointFlag} 地址与端口是否正确。`,0,{cause:e});let n=e?.cause?.code,r=n?n===`ECONNREFUSED`?`(连接被拒绝)`:n===`ENOTFOUND`?`(DNS 解析失败,地址不存在)`:n===`ECONNRESET`?`(连接被重置)`:n===`ETIMEDOUT`?`(连接超时)`:n===`CERT_HAS_EXPIRED`?`(TLS 证书已过期)`:n===`DEPTH_ZERO_SELF_SIGNED_CERT`?`(自签名证书被拒)`:`(${n})`:``,i=e instanceof Error?e.message:String(e);throw new h(`无法连接到${this.serviceLabel}:${t.method} ${s}\n原因:${i}${r}\n提示:请确认${this.serviceLabel}是否已启动、${this.endpointFlag} 地址与端口是否正确。`,0,{cause:e})}finally{clearTimeout(o)}}},j=class extends C{constructor(e){super({baseDir:e.baseDir,extension:e.extension,codec:e.codec})}extractId(e){return e.id}};const ae=process.emitWarning;process.emitWarning=function(e,...t){if(!(typeof e==`string`&&e.includes(`SQLite is an experimental feature`)))return ae.call(process,e,...t)};function oe(e){let t=e=>e.map(e=>e===void 0?null:e);return{run(...n){return e.run(...t(n))},get(...n){return e.get(...t(n))},all(...n){return e.all(...t(n))},setReadBigInts(t){e.setReadBigInts(t)}}}let M=0;var N=class{db;name;constructor(e,t){this.db=t?new f(e,t):new f(e),this.name=e}prepare(e){return oe(this.db.prepare(e))}exec(e){this.db.exec(e)}close(){this.db.close()}pragma(e,t){if(e.includes(`=`)){this.db.exec(`PRAGMA ${e}`);return}let n=this.db.prepare(`PRAGMA ${e}`).all();if(t?.simple){if(n.length===0)return;let e=n[0];return Object.values(e)[0]}return n}transaction(e){let t=t=>(...n)=>{let r=`sp_${M}`;M++===0?this.db.exec(t?`BEGIN IMMEDIATE`:`BEGIN`):this.db.exec(`SAVEPOINT ${r}`);try{let t=e(...n);return--M===0?this.db.exec(`COMMIT`):this.db.exec(`RELEASE ${r}`),t}catch(e){throw--M===0?this.db.exec(`ROLLBACK`):(this.db.exec(`ROLLBACK TO ${r}`),this.db.exec(`RELEASE ${r}`)),e}},n=t(!1);return n.immediate=t(!0),n}};const P=new Map,F=[{version:1,up:e=>{e.exec(`
1
+ import{dirname as e,join as t}from"node:path";import{mkdir as n,open as r,readFile as i,readdir as a,rename as o,stat as s,unlink as c}from"node:fs/promises";import{randomUUID as l}from"node:crypto";import{constants as u,mkdirSync as d}from"node:fs";import{DatabaseSync as f}from"node:sqlite";import{StringDecoder as p}from"node:string_decoder";var m=class extends Error{constructor(e,t){super(e,t),this.name=`PersistenceError`}},h=class extends m{statusCode;constructor(e,t,n){super(e,n),this.name=`RemotePersistenceError`,this.statusCode=t}},g=class extends h{info;constructor(e,t,n){super(e,409,n),this.name=`RemoteSnapshotConflictError`,this.info=t}};function _(e,t,n,r){return new h(`无法连接到${r.serviceLabel}(请求超时 ${r.timeoutMs/1e3}s):${t} ${n}\n提示:请确认${r.serviceLabel}是否已启动、${r.endpointFlag} 地址与端口是否正确。`,0,{cause:e})}function v(e,t,n,r){let i=e?.cause?.code,a=i?`(${ee(i)})`:``,o=e instanceof Error?e.message:String(e);return new h(`无法连接到${r.serviceLabel}:${t} ${n}\n原因:${o}${a}\n提示:请确认${r.serviceLabel}是否已启动、${r.endpointFlag} 地址与端口是否正确。`,0,{cause:e})}function ee(e){return{ECONNREFUSED:`连接被拒绝`,ENOTFOUND:`DNS 解析失败,地址不存在`,ECONNRESET:`连接被重置`,ETIMEDOUT:`连接超时`,CERT_HAS_EXPIRED:`TLS 证书已过期`,DEPTH_ZERO_SELF_SIGNED_CERT:`自签名证书被拒`}[e]??e}async function y(t,n){let i=`${t}.${l()}.tmp`;try{let a=await r(i,`w`);try{await a.writeFile(n),await a.sync()}finally{await a.close()}await o(i,t),await te(e(t))}catch(e){throw await c(i).catch(()=>{}),e instanceof m?e:new m(`Failed to atomically write "${t}"`,{cause:e})}}async function te(e){let t;try{t=await r(e,`r`),await t.sync()}catch{}finally{t&&await t.close().catch(()=>{})}}function b(e,t){let n=t.pageSize>=1?t.pageSize:1,r=Math.max(1,Math.ceil(e/n)),i=Math.max(0,Math.min(t.page,r-1));return{total:e,page:i,pageSize:n,totalPages:r,start:i*n,hasNext:i<r-1,hasPrevious:i>0}}function x(e,t){let n=b(e.length,t);return{items:e.slice(n.start,n.start+n.pageSize),total:n.total,page:n.page,pageSize:n.pageSize,totalPages:n.totalPages,hasNext:n.hasNext,hasPrevious:n.hasPrevious}}var S=class{store=new Map;defaultPageSize;defaultSortBy;constructor(e={}){this.defaultPageSize=e.defaultPageSize??20,this.defaultSortBy=e.defaultSortBy??`updatedAt`}getSortValue(e,t){let n=e.metadata?.[t];return typeof n==`number`?n:0}async save(e){this.store.set(this.extractId(e),structuredClone(e))}async load(e){let t=this.store.get(e);return t?structuredClone(t):null}async delete(e){return this.store.delete(e)}async list(){return Array.from(this.store.keys())}entries(){return Array.from(this.store.entries())}async listPaginated(e){let{page:t,order:n=`desc`}=e,r=e.sortBy??this.defaultSortBy,i=e.pageSize??this.defaultPageSize,a=Array.from(this.store.entries()).map(([e,t])=>({id:e,sortValue:this.getSortValue(t,r)}));return a.sort((e,t)=>n===`asc`?e.sortValue-t.sortValue:t.sortValue-e.sortValue),x(a.map(e=>e.id),{page:t,pageSize:i})}},C=class extends S{extractId(e){return e.id}};async function w(e,t,n,r){let{now:i,version:a=1,tags:o=[],preserveCreatedAt:s=!0,owner:c,updatedBy:l}=r,u=s?await e.load(t):null,d=u?.metadata?.owner;await e.save({version:a,id:t,data:n,metadata:{createdAt:u?.metadata.createdAt??i,updatedAt:i,tags:o,...d?{owner:d}:c?{owner:c}:{},...l?{updatedBy:l}:{}}})}var T=class{baseDir;extension;defaultPageSize;codec;initialized=!1;constructor(e){this.baseDir=e.baseDir,this.extension=e.extension??`.json`,this.defaultPageSize=e.defaultPageSize??20,this.codec=e.codec??{encode:e=>JSON.stringify(e),decode:e=>JSON.parse(e),contentType:`application/json`}}async save(e){await this.ensureDir(),await y(this.resolvePath(this.extractId(e)),this.codec.encode(e))}async load(e){await this.ensureDir();let t=this.resolvePath(e);try{let e=await i(t,`utf-8`);return this.codec.decode(e)}catch(t){if(ne(t))return null;throw new m(`Failed to load "${e}"`,{cause:t})}}async delete(e){try{return await c(this.resolvePath(e)),!0}catch{return!1}}async list(){await this.ensureDir();try{return(await a(this.baseDir)).filter(e=>e.endsWith(this.extension)).map(e=>decodeURIComponent(e.slice(0,-this.extension.length)))}catch{return[]}}async listPaginated(e){await this.ensureDir();let{page:n,order:r=`desc`}=e,i=e.pageSize??this.defaultPageSize;try{let e=(await a(this.baseDir)).filter(e=>e.endsWith(this.extension)),o=await Promise.all(e.map(async e=>{let n=await s(t(this.baseDir,e));return{id:decodeURIComponent(e.slice(0,-this.extension.length)),mtime:n.mtimeMs}}));return o.sort((e,t)=>r===`asc`?e.mtime-t.mtime:t.mtime-e.mtime),x(o.map(e=>e.id),{page:n,pageSize:i})}catch{return{items:[],total:0,page:0,pageSize:i,totalPages:1,hasNext:!1,hasPrevious:!1}}}resolvePath(e){let n=encodeURIComponent(e);return t(this.baseDir,`${n}${this.extension}`)}async ensureDir(){this.initialized||=(await n(this.baseDir,{recursive:!0}),!0)}};function ne(e){return typeof e==`object`&&!!e&&`code`in e&&e.code===`ENOENT`}var E=class{map=new Map;constructor(e){this.extractId=e}async save(e){this.map.set(this.extractId(e),e)}async load(e){return this.map.get(e)??null}async delete(e){return this.map.delete(e)}};const D=1;var re=class extends T{extractId(e){return e.sessionId}},O=class{store;constructor(e){this.store=new re({baseDir:e.baseDir,extension:`.json`})}async save(e){return this.store.save(e)}async load(e){return this.store.load(e)}async delete(e){return this.store.delete(e)}};function ie(){return new E(e=>e.sessionId)}var ae=class extends T{extractId(e){return e.sessionId}},oe=class{store;constructor(e){this.store=new ae({baseDir:e.baseDir,extension:`.json`})}async save(e){return this.store.save(e)}async load(e){return this.store.load(e)}async delete(e){return this.store.delete(e)}};function k(e){let t=typeof e==`object`&&e?e:{},n=typeof t.nextId==`number`&&Number.isFinite(t.nextId)?Math.floor(t.nextId):0,r=Math.max(1,n),i=Array.isArray(t.entries)?t.entries:[];for(let e of i){let t=e?.id;typeof t==`number`&&Number.isFinite(t)&&(r=Math.max(r,Math.floor(t)+1))}return r}function se(e,t){let n=typeof t==`object`&&t?t:{},r=Array.isArray(n.entries)?n.entries:[],i=[],a=new Set;for(let e of r){if(typeof e!=`object`||!e)continue;let{id:t,text:n}=e;if(typeof t!=`number`||!Number.isFinite(t)||typeof n!=`string`)continue;let r=Math.floor(t);a.has(r)||(a.add(r),i.push({id:r,text:n,byteLength:Buffer.byteLength(n,`utf-8`)}))}return{sessionId:e,entries:i,nextId:k(n)}}function ce(){return new E(e=>e.sessionId)}var A=class{baseUrl;resolveWsKey;get wsKey(){return this.resolveWsKey()}getAuth;getHeaders;fetch;timeoutMs;defaultPageSize;defaultSortBy;codec;get serviceLabel(){return`远端持久化服务`}get endpointFlag(){return`--persistence-url`}constructor(e){this.baseUrl=e.baseUrl.replace(/\/+$/,``);let t=e.wsKey;this.resolveWsKey=typeof t==`function`?()=>t()||`default`:()=>t||`default`,this.getAuth=e.getAuth,this.getHeaders=e.getHeaders??(async()=>({})),this.fetch=e.fetch,this.timeoutMs=e.timeoutMs,this.defaultPageSize=e.defaultPageSize??20,this.defaultSortBy=e.defaultSortBy??`updatedAt`,this.codec=e.codec??{encode:e=>JSON.stringify(e),decode:e=>JSON.parse(e),contentType:`application/json`}}wsPath(e){return`/${encodeURIComponent(this.wsKey)}/${encodeURIComponent(e)}`}wsListPath(){return`/${encodeURIComponent(this.wsKey)}`}async save(e){await this.request(this.wsPath(this.extractId(e)),{method:`PUT`,body:this.codec.encode(e)})}async saveWithRevision(e,t){let n={};t!==void 0&&(n[`If-Match`]=String(t));let r=(await this.request(this.wsPath(this.extractId(e)),{method:`PUT`,body:this.codec.encode(e)},n)).headers.get(`ETag`);return r?Number(r.replace(/"/g,``)):NaN}async loadWithRevision(e){let t=await this.request(this.wsPath(e),{method:`GET`});if(t.status===404)return null;let n=await t.text(),r;try{r=this.codec.decode(n)}catch(n){throw new h(`Remote persistence decode failed: ${this.wsPath(e)}`,t.status,{cause:n})}let i=t.headers.get(`ETag`),a=i?Number(i.replace(/"/g,``)):0;return{snapshot:r,revision:a}}async load(e){return(await this.loadWithRevision(e))?.snapshot??null}async delete(e){return(await this.request(this.wsPath(e),{method:`DELETE`})).ok}async list(){let e=await(await this.request(this.wsListPath(),{method:`GET`})).json();return e.items??e.ids??[]}async listPaginated(e){let{page:t,order:n=`desc`}=e,r=e.sortBy??this.defaultSortBy,i=e.pageSize??this.defaultPageSize,a=new URLSearchParams({page:String(t),pageSize:String(i),sortBy:r,order:n});return(await this.request(`${this.wsListPath()}?${a.toString()}`,{method:`GET`})).json()}async request(e,t,n){let r=await this.getAuth(),i={...await this.getHeaders(),...r.token?{Authorization:`Bearer ${r.token}`}:{},Accept:`application/json`,...n};t.body&&(i[`Content-Type`]=this.codec.contentType??`application/json`);let a=new AbortController,o=setTimeout(()=>a.abort(),this.timeoutMs),s=`${this.baseUrl}${e}`;try{let n=await this.fetch(s,{method:t.method,headers:i,body:t.body,signal:a.signal});if(n.status===409){let t=null;try{let e=await n.clone().json();t=typeof e.revision==`number`?e.revision:null}catch{}throw new g(`Remote persistence CAS conflict: ${this.wsPath(e.split(`/`).pop()??``)}`,{revision:t})}if(!n.ok&&n.status!==404)throw new h(`Remote persistence API error: ${n.status} ${n.statusText}`,n.status);return n}catch(e){throw e instanceof g||e instanceof h?e:e instanceof DOMException&&e.name===`AbortError`?_(e,t.method,s,{serviceLabel:this.serviceLabel,endpointFlag:this.endpointFlag,timeoutMs:this.timeoutMs}):v(e,t.method,s,{serviceLabel:this.serviceLabel,endpointFlag:this.endpointFlag,timeoutMs:this.timeoutMs})}finally{clearTimeout(o)}}},j=class extends T{constructor(e){super({baseDir:e.baseDir,extension:e.extension,codec:e.codec})}extractId(e){return e.id}};const le=process.emitWarning;process.emitWarning=function(e,...t){if(!(typeof e==`string`&&e.includes(`SQLite is an experimental feature`)))return le.call(process,e,...t)};function ue(e){let t=e=>e.map(e=>e===void 0?null:e);return{run(...n){return e.run(...t(n))},get(...n){return e.get(...t(n))},all(...n){return e.all(...t(n))},setReadBigInts(t){e.setReadBigInts(t)}}}let M=0;var N=class{db;name;constructor(e,t){this.db=t?new f(e,t):new f(e),this.name=e}prepare(e){return ue(this.db.prepare(e))}exec(e){this.db.exec(e)}close(){this.db.close()}pragma(e,t){if(e.includes(`=`)){this.db.exec(`PRAGMA ${e}`);return}let n=this.db.prepare(`PRAGMA ${e}`).all();if(t?.simple){if(n.length===0)return;let e=n[0];return Object.values(e)[0]}return n}transaction(e){let t=t=>(...n)=>{let r=`sp_${M}`;M++===0?this.db.exec(t?`BEGIN IMMEDIATE`:`BEGIN`):this.db.exec(`SAVEPOINT ${r}`);try{let t=e(...n);return--M===0?this.db.exec(`COMMIT`):this.db.exec(`RELEASE ${r}`),t}catch(e){throw--M===0?this.db.exec(`ROLLBACK`):(this.db.exec(`ROLLBACK TO ${r}`),this.db.exec(`RELEASE ${r}`)),e}},n=t(!1);return n.immediate=t(!0),n}};const P=new Map,F=[{version:1,up:e=>{e.exec(`
2
2
  -- snapshots (SqlitePersistence)
3
3
  CREATE TABLE IF NOT EXISTS snapshots (
4
4
  ns TEXT NOT NULL,
@@ -43,7 +43,7 @@ import{dirname as e,join as t}from"node:path";import{mkdir as n,open as r,readFi
43
43
  data = excluded.data,
44
44
  updated_at = excluded.updated_at,
45
45
  tags = excluded.tags
46
- `),c=this.db.prepare(`INSERT INTO change_log (ns, doc_id, op, ts) VALUES (?, ?, 'save', ?)`);this.db.transaction(()=>{s.run(this.ns,t,n,r,a,i,o),c.run(this.ns,t,i)})()}async load(e){let t=this.db.prepare(`SELECT data FROM snapshots WHERE ns = ? AND id = ?`).get(this.ns,e);return t?this.codec.decode(t.data):null}async delete(e){let t=this.db.prepare(`DELETE FROM snapshots WHERE ns = ? AND id = ?`),n=this.db.prepare(`INSERT INTO change_log (ns, doc_id, op, ts) VALUES (?, ?, 'delete', ?)`);return this.db.transaction(()=>t.run(this.ns,e).changes>0?(n.run(this.ns,e,Date.now()),!0):!1)()}async list(){return this.db.prepare(`SELECT id FROM snapshots WHERE ns = ? ORDER BY updated_at DESC`).all(this.ns).map(e=>e.id)}async listPaginated(e){let{page:t,order:n=`desc`}=e,r=e.sortBy??`updated_at`,i=e.pageSize??this.defaultPageSize,a=r===`created_at`?`created_at`:`updated_at`,o=n===`asc`?`ASC`:`DESC`,{count:s}=this.db.prepare(`SELECT COUNT(*) as count FROM snapshots WHERE ns = ?`).get(this.ns),c=v(s,{page:t,pageSize:i}),l=c.start;return{items:this.db.prepare(`SELECT id FROM snapshots WHERE ns = ? ORDER BY ${a} ${o} LIMIT ? OFFSET ?`).all(this.ns,c.pageSize,l).map(e=>e.id),total:c.total,page:c.page,pageSize:c.pageSize,totalPages:c.totalPages,hasNext:c.hasNext,hasPrevious:c.hasPrevious}}getChangeLog(e,t,n=100){return this.db.prepare(`SELECT id, ns, doc_id, op, ts FROM change_log WHERE ns = ? AND ts >= ? ORDER BY ts ASC, id ASC LIMIT ?`).all(e,t,n)}getChangesSince(e,t,n){let r=`SELECT id, updated_at FROM snapshots WHERE ns = ? AND updated_at > ?`,i=[e,t];n&&n.length>0&&(r+=` AND id IN (${n.map(()=>`?`).join(`,`)})`,i.push(...n)),r+=` ORDER BY updated_at ASC`;let a=this.db.prepare(r).all(...i),o=a.length>0?a.reduce((e,t)=>Math.max(e,t.updated_at),0):this.getLatestCursor(e);return{ids:a.map(e=>e.id),cursor:o}}getDeletedSince(e,t){return this.db.prepare(`SELECT doc_id FROM change_log WHERE ns = ? AND op = 'delete' AND ts > ?`).all(e,t).map(e=>e.doc_id)}getLatestCursor(e){return this.db.prepare(`SELECT MAX(updated_at) as ts FROM snapshots WHERE ns = ?`).get(e)?.ts??0}getLatestChangeTs(e){return this.db.prepare(`SELECT MAX(ts) as ts FROM change_log WHERE ns = ?`).get(e)?.ts??0}getInfo(){let e=this.db.pragma(`journal_mode`),[{count:t}]=this.db.prepare(`SELECT COUNT(*) as count FROM snapshots`).all(),[{count:n}]=this.db.prepare(`SELECT COUNT(*) as count FROM change_log`).all(),[{count:r}]=this.db.prepare(`SELECT COUNT(*) as count FROM snapshots WHERE ns = 'sessions'`).all(),i=this.db.pragma(`integrity_check`),a=i.length===1&&i[0]?.integrity_check===`ok`;return{walEnabled:e===`wal`,snapshots:t,changeLogEntries:n,sessions:r,integrity:a?`ok`:`fail: ${JSON.stringify(i)}`}}};function H(e){switch(e.type){case`memory`:return new x;case`file`:return new j({baseDir:e.baseDir,extension:e.extension,codec:e.codec});case`sqlite`:return new V({dbPath:e.dbPath,wal:e.wal,namespace:e.namespace,defaultPageSize:e.defaultPageSize,codec:e.codec});default:throw Error(`Unsupported storage type: ${e.type}`)}}const U=u.O_DSYNC==null?u.O_WRONLY|u.O_CREAT|u.O_APPEND:u.O_WRONLY|u.O_CREAT|u.O_APPEND|u.O_DSYNC,W=1024*1024,G=1e3,K=1e4;function q(e,t){e.anchors.push(t),e.anchors.length>K&&e.anchors.splice(0,Math.ceil(K*.1))}function se(e,t){let n=t?.from??0,r=t?.to??1/0;return e>=n&&e<r}var J=class{streams=new Map;listeners=new Map;maxRecordsPerStream;onEvict;constructor(e){this.maxRecordsPerStream=e?.maxRecordsPerStream??1e4,this.onEvict=e?.onEvict}getOrCreateStream(e){let t=this.streams.get(e);return t||(t={records:[],nextSeq:0,droppedCount:0},this.streams.set(e,t)),t}async append(e,t){let n=this.getOrCreateStream(e),r={seq:n.nextSeq,streamId:e,entry:structuredClone(t)};if(n.nextSeq++,n.records.push(r),n.records.length>this.maxRecordsPerStream){let t=n.records.shift();n.droppedCount++,this.onEvict?.(e,t.seq,n.droppedCount)}let i=this.listeners.get(e);if(i)for(let e of i)e(structuredClone(r));return structuredClone(r)}async*read(e,t){let n=this.streams.get(e)?.records??[];for(let e of n)se(e.seq,t)&&(yield structuredClone(e))}async count(e){return this.streams.get(e)?.nextSeq??0}async*tail(e){let t=[],n=null,r=e=>{t.push(e),n&&=(n(),null)},i=this.listeners.get(e)??new Set;i.add(r),this.listeners.set(e,i);let a=-1;try{for(let t of this.streams.get(e)?.records??[])yield structuredClone(t),a=t.seq;for(;;){t.length===0&&await new Promise(e=>{n=e});for(let e of t.splice(0,t.length))e.seq>a&&(yield e,a=e.seq)}}finally{i.delete(r)}}async truncate(e,t){let n=this.streams.get(e);if(!n)return;if(t<=0){this.streams.delete(e);return}let r=n.records.findIndex(e=>e.seq>=t);r!==-1&&(n.records.length=r,n.nextSeq=t)}async clear(e){this.streams.delete(e)}},Y=class{baseDir;extension;codec;pollIntervalMs;seqCounters=new Map;byteIndexes=new Map;handles=new Map;repairedStreams=new Set;writeQueue=Promise.resolve();dirReady=!1;closed=!1;constructor(e){this.baseDir=e.baseDir,this.extension=e.extension??`.jsonl`,this.pollIntervalMs=e.pollIntervalMs??50,this.codec=e.codec??{encode:e=>JSON.stringify(e),decode:e=>JSON.parse(e)}}append(e,t){if(this.closed)return Promise.resolve({seq:-1,streamId:e,entry:t});let n=this.writeQueue.then(()=>this.appendSerial(e,t));return this.writeQueue=n.catch(()=>void 0),n}async appendSerial(e,t){await this.ensureDir(),this.repairedStreams.has(e)||(await this.repairPartialTail(e),this.repairedStreams.add(e));let n=await this.nextSeq(e),r={seq:n,streamId:e,entry:t},i=`${this.codec.encode(t)}\n`,a=Buffer.byteLength(i,`utf-8`),o=this.handles.get(e);try{o||=await this.openResidentHandle(e);try{await o.handle.writeFile(i)}catch{await this.invalidateHandle(e),o=await this.openResidentHandle(e),await o.handle.writeFile(i)}}catch(t){throw await this.invalidateHandle(e).catch(()=>void 0),new m(`Failed to append to stream "${e}"`,{cause:t})}let s=this.byteIndexes.get(e);return s&&s.tailSeq===n&&this.recordIndexPoint(e,n,o.tailByteOffset,a),o.tailByteOffset+=a,o.lastUsedAt=Date.now(),this.seqCounters.set(e,n+1),r}async openResidentHandle(e){let t=Date.now();for(let[n,r]of this.handles)n!==e&&t-r.lastUsedAt>6e4&&(this.handles.delete(n),await r.handle.close().catch(()=>void 0));for(;this.handles.size>=8;){let e,t=1/0;for(let[n,r]of this.handles)r.lastUsedAt<t&&(t=r.lastUsedAt,e=n);if(e===void 0)break;let n=this.handles.get(e);this.handles.delete(e),await n.handle.close().catch(()=>void 0)}let n=await r(this.resolvePath(e),U),{size:i}=await n.stat(),a={handle:n,lastUsedAt:t,tailByteOffset:i};return this.handles.set(e,a),a}async invalidateHandle(e){let t=this.handles.get(e);t&&(this.handles.delete(e),await t.handle.close().catch(()=>void 0))}recordIndexPoint(e,t,n,r){let i=this.byteIndexes.get(e);!i||t<i.tailSeq||(t%G===0&&q(i,{seq:t,byteOffset:n}),i.tailSeq=t+1,i.tailByteOffset=n+r)}ensureByteIndex(e){let t=this.byteIndexes.get(e);return t||(t={anchors:[],tailSeq:0,tailByteOffset:0},this.byteIndexes.set(e,t)),t}nearestAnchor(e,t){let n={seq:0,byteOffset:0};for(let r of e.anchors)if(r.seq<=t&&r.seq>=n.seq)n=r;else if(r.seq>t)break;return n}async repairPartialTail(e){await this.invalidateHandle(e);let t=this.resolvePath(e),n;try{n=await r(t,`r+`)}catch(t){if(Z(t))return;throw new m(`Failed to read stream "${e}"`,{cause:t})}try{let{size:e}=await n.stat();if(e===0)return;let t=Buffer.alloc(1);if(await n.read(t,0,1,e-1),t[0]===10)return;let r=-1,i=e;for(;i>0&&r===-1;){let e=Math.max(0,i-65536),t=Buffer.alloc(i-e);await n.read(t,0,t.length,e);for(let n=t.length-1;n>=0;n--)if(t[n]===10){r=e+n+1;break}i=e}await n.truncate(r===-1?0:r)}catch(t){throw new m(`Failed to repair stream "${e}"`,{cause:t})}finally{await n.close()}}async*read(e,t){let n=t?.from??0,i=t?.to??1/0;if(i<=n)return;let a;try{a=await r(this.resolvePath(e),`r`)}catch(t){if(Z(t))return;throw new m(`Failed to read stream "${e}"`,{cause:t})}try{let t=this.ensureByteIndex(e),r=n<t.tailSeq?this.nearestAnchor(t,n):{seq:t.tailSeq,byteOffset:t.tailByteOffset},o=Buffer.alloc(W),s=new p(`utf-8`),c=``,l=r.seq,u=r.byteOffset,d=r.byteOffset;for(;;){let r=d,{bytesRead:f}=await a.read(o,0,W,d);if(f===0)break;d+=f;let p=0;for(;l<n&&l<t.tailSeq&&p<f;){let e=o.subarray(p,f).indexOf(10);if(e===-1){p=f;break}p+=e+1,l++,u=r+p}if(p>=f)continue;c+=s.write(o.subarray(p,f));let m;for(;(m=c.indexOf(`
47
- `))>=0;){let r=c.slice(0,m),a=u+Buffer.byteLength(r,`utf-8`)+1;if(c=c.slice(m+1),r.length===0){u=a;continue}if(l>=t.tailSeq&&(l%G===0&&q(t,{seq:l,byteOffset:u}),t.tailSeq=l+1,t.tailByteOffset=a),l>=n&&(yield{seq:l,streamId:e,entry:this.codec.decode(r)}),l++,u=a,l>=i)return}}}finally{await a.close()}}async count(e){let t=this.seqCounters.get(e);if(t!==void 0)return t;let n=await this.countLines(e);return this.seqCounters.set(e,n),n}async*tail(e){let t=this.resolvePath(e),n=0,i=0,a=``;for(;!this.closed;){let o;try{o=await r(t,`r`)}catch(t){if(Z(t)){await X(this.pollIntervalMs);continue}throw new m(`Failed to read stream "${e}"`,{cause:t})}try{let{size:t}=await o.stat();if(t<i&&(i=0,n=0,a=``),t>i){let r=t-i,s=Buffer.alloc(r);await o.read(s,0,r,i),i=t,a+=s.toString(`utf-8`);let c;for(;(c=a.indexOf(`
48
- `))>=0;){let t=a.slice(0,c);a=a.slice(c+1),t.length!==0&&(yield{seq:n,streamId:e,entry:this.codec.decode(t)},n++)}}}finally{await o.close()}if(this.closed)break;await X(this.pollIntervalMs)}}async close(){this.closed=!0,await this.writeQueue.catch(()=>void 0);for(let[,e]of this.handles)await e.handle.close().catch(()=>void 0);this.handles.clear()}truncate(e,t){if(t<=0)return this.clear(e);let n=this.writeQueue.then(()=>this.truncateSerial(e,t));return this.writeQueue=n.catch(()=>void 0),n}async truncateSerial(e,t){await this.invalidateHandle(e);let n;try{n=await r(this.resolvePath(e),`r+`)}catch(t){if(Z(t))return;throw new m(`Failed to read stream "${e}"`,{cause:t})}try{let e=Buffer.alloc(W),r=0,i=0,a=-1;outer:for(;;){let{bytesRead:o}=await n.read(e,0,W,null);if(o===0)break;for(let n=0;n<o;n++)if(e[n]===10&&(r++,r===t)){a=i+n+1;break outer}i+=o}if(a===-1)return;await n.truncate(a)}catch(t){throw new m(`Failed to truncate stream "${e}"`,{cause:t})}finally{await n.close()}this.seqCounters.set(e,t),this.byteIndexes.delete(e)}clear(e){let t=this.writeQueue.then(()=>this.clearSerial(e));return this.writeQueue=t.catch(()=>void 0),t}async clearSerial(e){await this.invalidateHandle(e),this.seqCounters.delete(e),this.byteIndexes.delete(e);try{await c(this.resolvePath(e))}catch(t){if(!Z(t))throw new m(`Failed to clear stream "${e}"`,{cause:t})}}async countLines(e){let t;try{t=await r(this.resolvePath(e),`r`)}catch(t){if(Z(t))return 0;throw new m(`Failed to read stream "${e}"`,{cause:t})}try{let e=Buffer.alloc(W),n=0;for(;;){let{bytesRead:r}=await t.read(e,0,W,null);if(r===0)break;for(let t=0;t<r;t++)e[t]===10&&n++}return n}finally{await t.close()}}async nextSeq(e){let t=this.seqCounters.get(e);if(t!==void 0)return t;let n=await this.countLines(e);return this.seqCounters.set(e,n),n}resolvePath(e){return t(this.baseDir,`${encodeURIComponent(e)}${this.extension}`)}async ensureDir(){this.dirReady||=(await n(this.baseDir,{recursive:!0}),!0)}};function ce(e){switch(e.type){case`memory`:return new J;case`file`:return new Y({baseDir:e.baseDir,extension:e.extension,codec:e.codec,pollIntervalMs:e.pollIntervalMs});default:throw Error(`Unsupported append-log type: ${e.type}`)}}var le=class{subs=new Map;publish(e){let t=this.subs.get(e.streamId);if(t)for(let n of[...t])n(e)}subscribe(e,t){let n=this.subs.get(e);return n||this.subs.set(e,n=new Set),n.add(t),()=>{let n=this.subs.get(e);n&&(n.delete(t),n.size===0&&this.subs.delete(e))}}};function ue(e){let t=new le;return{store:{async append(n,r){let i=await e.append(n,r);return t.publish(i),i},read:(t,n)=>e.read(t,n),tail:t=>e.tail(t),truncate:(t,n)=>e.truncate(t,n),clear:t=>e.clear(t),...e.count?{count:t=>e.count(t)}:{},...e.close?{close:()=>e.close()}:{}},live:t}}function X(e){return new Promise(t=>{setTimeout(t,e).unref?.()})}function Z(e){return typeof e==`object`&&!!e&&`code`in e&&e.code===`ENOENT`}function Q(e){let t=e;return typeof t.getChangeLog==`function`&&typeof t.getChangesSince==`function`&&typeof t.getDeletedSince==`function`}const de=[`sessions`];var $=class{namespaces;backend;now;instances=new Map;appendLogs=new Map;constructor(e){this.namespaces=new Set(e.namespaces),this.backend=e.backend,this.now=e.now??(()=>Date.now())}has(e){return this.namespaces.has(e)}listNamespaces(){return[...this.namespaces]}wsId(e,t){return`${e?.trim()||`default`}/${t}`}async appendEntry(e,t,n,r){if(!this.namespaces.has(e))throw Error(`Unknown storage namespace: ${e}`);let i=this.appendLogs.get(e);return i||(i=new J,this.appendLogs.set(e,i)),i.append(this.wsId(t,n),r)}async save(e,t,n,r,i){await S(this.resolve(e),this.wsId(t,n),r,{now:this.now(),owner:i,updatedBy:i})}async updateMetadata(e,t,n,r,i){let a=this.resolve(e),o=await a.load(this.wsId(t,n));if(!o)throw Error(`Document "${n}" not found in "${e}"`);o.metadata={...o.metadata,...r},i&&(o.metadata.updatedBy=i),await a.save(o)}async load(e,t,n){let r=await this.resolve(e).load(this.wsId(t,n));return r?r.data:null}async delete(e,t,n){return this.resolve(e).delete(this.wsId(t,n))}async list(e,t,n,r){let i=await this.resolve(e).list(),a=`${t||`default`}/`,o=[];for(let e of i)e.startsWith(a)&&o.push({clean:e.slice(a.length),prefixed:e});let s=o.map(e=>e.clean);if(!n||!r||r===`all`)return s;let c=[];for(let{clean:t,prefixed:i}of o){let a=await this.resolve(e).load(i);if(!a)continue;let o=a.metadata;(r===`owned`&&o.owner===n||r===`visible`&&(o.owner===n||o.visibility===`shared`||!o.visibility))&&c.push(t)}return c}async getChangesSince(e,t,n,r){let i=this.resolve(e),a=t?`${t}/`:`default/`;if(Q(i)){let t=r?.map(e=>`${a}${e}`),o=i.getChangesSince(e,n,t),s=new Map;for(let e of o.ids){if(!e.startsWith(a))continue;let t=e.slice(a.length),n=await i.load(e);s.set(t,n?.data??null)}let c=i.getDeletedSince(e,n);for(let e of c){if(!e.startsWith(a))continue;let t=e.slice(a.length);s.has(t)||s.set(t,null)}return{documents:s,cursor:o.cursor}}let o=await i.list(),s=new Map,c=n;for(let e of o){if(!e.startsWith(a))continue;let t=e.slice(a.length);if(r&&!r.includes(t))continue;let o=await i.load(e);o&&o.metadata.updatedAt>n&&(s.set(t,o.data),c=Math.max(c,o.metadata.updatedAt))}return{documents:s,cursor:c}}async listPaginated(e,t,n){let r=this.resolve(e),i=await r.list(),a=`${t||`default`}/`,o=new Map;for(let e of i)e.startsWith(a)&&o.set(e,e.slice(a.length));let s=[];for(let[e,t]of o){let n=await r.load(e);n&&s.push({...n,id:t})}let c=n.order===`asc`?1:-1;return s.sort((e,t)=>c*(this.sortValue(e,n.sortBy)-this.sortValue(t,n.sortBy))),y(s.map(e=>e.id),{page:n.page,pageSize:n.pageSize})}sortValue(e,t){let n=e.metadata[t];if(typeof n==`number`)return n;let r=e.data?.metadata?.[t];return typeof r==`number`?r:e.metadata.updatedAt}async*streamEvents(e,t,n,r=500,i){if(!this.namespaces.has(e))return;let a=this.resolve(e);if(!Q(a))return;let o=n,s=-1;for(;!i?.aborted&&(await pe(r,i),!i?.aborted);){let n=a.getChangeLog(e,o),r=`${t||`default`}/`;for(let e of n){if(i?.aborted)break;e.id<=s||e.doc_id.startsWith(r)&&(yield{...e,doc_id:e.doc_id.slice(r.length)},o=Math.max(o,e.ts),s=Math.max(s,e.id))}}}resolve(e){if(!this.namespaces.has(e))throw Error(`Unknown storage namespace: ${e}`);let t=this.instances.get(e);return t||(t=this.backend(e),this.instances.set(e,t)),t}};function fe(e){return new $({namespaces:e.namespaces??de,backend:n=>new j({baseDir:t(e.baseDir,n)}),now:e.now})}function pe(e,t){return new Promise(n=>{if(t?.aborted){n();return}let r=setTimeout(n,e);t&&t.addEventListener(`abort`,()=>{clearTimeout(r),n()},{once:!0})})}var me=class{baseUrl;getAuth;getHeaders;fetchImpl;timeoutMs;pollIntervalMs;flushAtSize;codec;buffer=new Map;flushingStreams=new Set;flushTimer;closed=!1;constructor(e){this.baseUrl=e.baseUrl.replace(/\/+$/,``),this.getAuth=e.getAuth,this.getHeaders=e.getHeaders??(async()=>({})),this.fetchImpl=e.fetch??globalThis.fetch,this.timeoutMs=e.timeoutMs??3e4,this.pollIntervalMs=e.pollIntervalMs??500,this.flushAtSize=e.flushAtSize??100,this.codec=e.codec??{encode:e=>JSON.stringify(e),decode:e=>JSON.parse(e)};let t=e.flushIntervalMs??2e3;this.flushTimer=setInterval(()=>{this.flushAll().catch(()=>{})},t),this.flushTimer.unref?.()}async append(e,t){let n=this.codec.encode(t);return new Promise((t,r)=>{if(this.closed){r(Error(`HttpAppendLog closed — buffered events lost`));return}let i=this.buffer.get(e)??[];i.push({encoded:n,resolve:t,reject:r}),this.buffer.set(e,i),i.length>=this.flushAtSize&&this.tryFlush(e).catch(()=>{})})}async tryFlush(e){if(this.flushingStreams.has(e))return;let t=this.buffer.get(e);if(!(!t||t.length===0)){this.flushingStreams.add(e);try{await this.flushOne(e,t)}finally{this.flushingStreams.delete(e)}}}async flushOne(e,t){this.buffer.delete(e);try{let{seqs:n}=await this.request(`/trace/${encodeURIComponent(e)}`,`POST`,t.map(e=>e.encoded));for(let r=0;r<t.length;r++){let i=n[r]??-1,a=this.codec.decode(t[r].encoded);t[r].resolve({seq:i,streamId:e,entry:a})}}catch{if(this.closed)for(let e of t)e.reject(Error(`HttpAppendLog closed — buffered events lost`));else{let n=this.buffer.get(e)??[];this.buffer.set(e,[...n,...t])}}}async flushAll(){let e=[...this.buffer.keys()];for(let t of e){if(this.flushingStreams.has(t))continue;let e=this.buffer.get(t);if(e&&e.length>0){this.flushingStreams.add(t);try{await this.flushOne(t,e)}finally{this.flushingStreams.delete(t)}}}}async*read(e,t){let n=new URLSearchParams;t?.from!==void 0&&n.set(`from`,String(t.from)),t?.to!==void 0&&n.set(`to`,String(t.to));let r=n.toString(),i=`/trace/${encodeURIComponent(e)}${r?`?${r}`:``}`,{events:a}=await this.request(i,`GET`);for(let n=0;n<a.length;n++){let r=this.codec.decode(a[n]);yield{seq:(t?.from??0)+n,streamId:e,entry:r}}}async*tail(e){let t=-1;{let n=`/trace/${encodeURIComponent(e)}`,{events:r}=await this.request(n,`GET`);for(let n=0;n<r.length;n++){let i=this.codec.decode(r[n]),a=n;t=a,yield{seq:a,streamId:e,entry:i}}}for(;!this.closed;){let n=t+1,r=`/trace/${encodeURIComponent(e)}?from=${n}`;try{let{events:i}=await this.request(r,`GET`);for(let r=0;r<i.length;r++){let a=this.codec.decode(i[r]),o=n+r;t=o,yield{seq:o,streamId:e,entry:a}}}catch{}await he(this.pollIntervalMs)}}async count(e){let{count:t}=await this.request(`/trace/${encodeURIComponent(e)}/count`,`GET`);return t+(this.buffer.get(e)?.length??0)}async truncate(e,t){await this.request(`/trace/${encodeURIComponent(e)}/truncate`,`POST`,{toSeq:t})}async clear(e){await this.request(`/trace/${encodeURIComponent(e)}`,`DELETE`)}async close(){this.closed=!0,this.flushTimer&&=(clearInterval(this.flushTimer),void 0),await this.flushAll();let e=Date.now()+this.timeoutMs+5e3;for(;this.flushingStreams.size>0&&Date.now()<e;)await new Promise(e=>setTimeout(e,50));await this.flushAll()}async request(e,t,n){let r=await this.getAuth(),i={...await this.getHeaders(),...r.token?{Authorization:`Bearer ${r.token}`}:{},Accept:`application/json`};n!==void 0&&(i[`Content-Type`]=`application/json`);let a=new AbortController,o=setTimeout(()=>a.abort(),this.timeoutMs),s=`${this.baseUrl}${e}`;try{let e=await this.fetchImpl(s,{method:t,headers:i,body:n===void 0?void 0:JSON.stringify(n),signal:a.signal});if(!e.ok)throw Error(`HTTP ${e.status}: ${e.statusText}`);return await e.json()}finally{clearTimeout(o)}}};function he(e){return new Promise(t=>{setTimeout(t,e).unref?.()})}export{N as Database,N as default,te as DiskPanelStatePersistence,re as DiskPasteStatePersistence,C as DiskPersistence,Y as FileAppendLog,j as FilePersistence,me as HttpAppendLog,J as MemoryAppendLog,x as MemoryPersistence,b as MemoryPersistenceBase,m as PersistenceError,ie as RemotePersistence,h as RemotePersistenceError,g as RemoteSnapshotConflictError,V as SqlitePersistence,$ as StorageHost,z as acquireDb,_ as atomicWriteFile,ce as createAppendLog,fe as createFileStorageHost,ne as createInMemoryPanelStatePersistence,A as createInMemoryPasteStatePersistence,ue as createLiveTappedAppendLog,H as createPersistence,k as normalizePasteSnapshot,v as pageBounds,y as paginate,B as releaseDb,O as resolvePasteNextId,S as saveDocument};
46
+ `),c=this.db.prepare(`INSERT INTO change_log (ns, doc_id, op, ts) VALUES (?, ?, 'save', ?)`);this.db.transaction(()=>{s.run(this.ns,t,n,r,a,i,o),c.run(this.ns,t,i)})()}async load(e){let t=this.db.prepare(`SELECT data FROM snapshots WHERE ns = ? AND id = ?`).get(this.ns,e);return t?this.codec.decode(t.data):null}async delete(e){let t=this.db.prepare(`DELETE FROM snapshots WHERE ns = ? AND id = ?`),n=this.db.prepare(`INSERT INTO change_log (ns, doc_id, op, ts) VALUES (?, ?, 'delete', ?)`);return this.db.transaction(()=>t.run(this.ns,e).changes>0?(n.run(this.ns,e,Date.now()),!0):!1)()}async list(){return this.db.prepare(`SELECT id FROM snapshots WHERE ns = ? ORDER BY updated_at DESC`).all(this.ns).map(e=>e.id)}async loadByPrefix(e){return this.db.prepare(`SELECT data FROM snapshots WHERE ns = ? AND id LIKE ? ESCAPE '\\'`).all(this.ns,H(e)+`%`).map(e=>this.codec.decode(e.data))}async listPaginated(e){let{page:t,order:n=`desc`}=e,r=e.sortBy??`updated_at`,i=e.pageSize??this.defaultPageSize,a=r===`created_at`?`created_at`:`updated_at`,o=n===`asc`?`ASC`:`DESC`,{count:s}=this.db.prepare(`SELECT COUNT(*) as count FROM snapshots WHERE ns = ?`).get(this.ns),c=b(s,{page:t,pageSize:i}),l=c.start;return{items:this.db.prepare(`SELECT id FROM snapshots WHERE ns = ? ORDER BY ${a} ${o} LIMIT ? OFFSET ?`).all(this.ns,c.pageSize,l).map(e=>e.id),total:c.total,page:c.page,pageSize:c.pageSize,totalPages:c.totalPages,hasNext:c.hasNext,hasPrevious:c.hasPrevious}}getChangeLog(e,t,n=100){return this.db.prepare(`SELECT id, ns, doc_id, op, ts FROM change_log WHERE ns = ? AND ts >= ? ORDER BY ts ASC, id ASC LIMIT ?`).all(e,t,n)}getChangesSince(e,t,n){let r=`SELECT id, updated_at FROM snapshots WHERE ns = ? AND updated_at > ?`,i=[e,t];n&&n.length>0&&(r+=` AND id IN (${n.map(()=>`?`).join(`,`)})`,i.push(...n)),r+=` ORDER BY updated_at ASC`;let a=this.db.prepare(r).all(...i),o=a.length>0?a.reduce((e,t)=>Math.max(e,t.updated_at),0):this.getLatestCursor(e);return{ids:a.map(e=>e.id),cursor:o}}getDeletedSince(e,t){return this.db.prepare(`SELECT doc_id FROM change_log WHERE ns = ? AND op = 'delete' AND ts > ?`).all(e,t).map(e=>e.doc_id)}getLatestCursor(e){return this.db.prepare(`SELECT MAX(updated_at) as ts FROM snapshots WHERE ns = ?`).get(e)?.ts??0}getLatestChangeTs(e){return this.db.prepare(`SELECT MAX(ts) as ts FROM change_log WHERE ns = ?`).get(e)?.ts??0}getInfo(){let e=this.db.pragma(`journal_mode`),[{count:t}]=this.db.prepare(`SELECT COUNT(*) as count FROM snapshots`).all(),[{count:n}]=this.db.prepare(`SELECT COUNT(*) as count FROM change_log`).all(),[{count:r}]=this.db.prepare(`SELECT COUNT(*) as count FROM snapshots WHERE ns = 'sessions'`).all(),i=this.db.pragma(`integrity_check`),a=i.length===1&&i[0]?.integrity_check===`ok`;return{walEnabled:e===`wal`,snapshots:t,changeLogEntries:n,sessions:r,integrity:a?`ok`:`fail: ${JSON.stringify(i)}`}}};function H(e){return e.replace(/[\\%_]/g,e=>`\\${e}`)}function de(e){switch(e.type){case`memory`:return new C;case`file`:return new j({baseDir:e.baseDir,extension:e.extension,codec:e.codec});case`sqlite`:return new V({dbPath:e.dbPath,wal:e.wal,namespace:e.namespace,defaultPageSize:e.defaultPageSize,codec:e.codec});default:throw Error(`Unsupported storage type: ${e.type}`)}}const fe=u.O_DSYNC==null?u.O_WRONLY|u.O_CREAT|u.O_APPEND:u.O_WRONLY|u.O_CREAT|u.O_APPEND|u.O_DSYNC,U=1024*1024,W=1e3,G=1e4;function K(e,t){e.anchors.push(t),e.anchors.length>G&&e.anchors.splice(0,Math.ceil(G*.1))}function pe(e,t){let n=t?.from??0,r=t?.to??1/0;return e>=n&&e<r}var q=class{streams=new Map;listeners=new Map;maxRecordsPerStream;onEvict;constructor(e){this.maxRecordsPerStream=e?.maxRecordsPerStream??1e4,this.onEvict=e?.onEvict}getOrCreateStream(e){let t=this.streams.get(e);return t||(t={records:[],nextSeq:0,droppedCount:0},this.streams.set(e,t)),t}async append(e,t){let n=this.getOrCreateStream(e),r={seq:n.nextSeq,streamId:e,entry:structuredClone(t)};if(n.nextSeq++,n.records.push(r),n.records.length>this.maxRecordsPerStream){let t=n.records.shift();n.droppedCount++,this.onEvict?.(e,t.seq,n.droppedCount)}let i=this.listeners.get(e);if(i)for(let e of i)e(structuredClone(r));return structuredClone(r)}async*read(e,t){let n=this.streams.get(e)?.records??[];for(let e of n)pe(e.seq,t)&&(yield structuredClone(e))}async count(e){return this.streams.get(e)?.nextSeq??0}async*tail(e){let t=[],n=null,r=e=>{t.push(e),n&&=(n(),null)},i=this.listeners.get(e)??new Set;i.add(r),this.listeners.set(e,i);let a=-1;try{for(let t of this.streams.get(e)?.records??[])yield structuredClone(t),a=t.seq;for(;;){t.length===0&&await new Promise(e=>{n=e});for(let e of t.splice(0,t.length))e.seq>a&&(yield e,a=e.seq)}}finally{i.delete(r)}}async truncate(e,t){let n=this.streams.get(e);if(!n)return;if(t<=0){this.streams.delete(e);return}let r=n.records.findIndex(e=>e.seq>=t);r!==-1&&(n.records.length=r,n.nextSeq=t)}async clear(e){this.streams.delete(e)}},J=class{baseDir;extension;codec;pollIntervalMs;seqCounters=new Map;byteIndexes=new Map;handles=new Map;repairedStreams=new Set;writeQueue=Promise.resolve();dirReady=!1;closed=!1;writerLock;constructor(e){this.baseDir=e.baseDir,this.extension=e.extension??`.jsonl`,this.pollIntervalMs=e.pollIntervalMs??50,this.codec=e.codec??{encode:e=>JSON.stringify(e),decode:e=>JSON.parse(e)},this.writerLock=e.writerLock}append(e,t){if(this.closed)return Promise.resolve({seq:-1,streamId:e,entry:t});let n=this.writeQueue.then(async()=>{if(this.writerLock){await this.writerLock.acquire(e);try{return await this.appendSerial(e,t)}finally{await this.writerLock.release(e).catch(()=>void 0)}}return this.appendSerial(e,t)});return this.writeQueue=n.catch(()=>void 0),n}async appendSerial(e,t){await this.ensureDir(),this.repairedStreams.has(e)||(await this.repairPartialTail(e),this.repairedStreams.add(e));let n=await this.nextSeq(e),r={seq:n,streamId:e,entry:t},i=`${this.codec.encode(t)}\n`,a=Buffer.byteLength(i,`utf-8`),o=this.handles.get(e);try{o||=await this.openResidentHandle(e);try{await o.handle.writeFile(i)}catch{await this.invalidateHandle(e),o=await this.openResidentHandle(e),await o.handle.writeFile(i)}}catch(t){throw await this.invalidateHandle(e).catch(()=>void 0),new m(`Failed to append to stream "${e}"`,{cause:t})}let s=this.byteIndexes.get(e);return s&&s.tailSeq===n&&this.recordIndexPoint(e,n,o.tailByteOffset,a),o.tailByteOffset+=a,o.lastUsedAt=Date.now(),this.seqCounters.set(e,n+1),r}async openResidentHandle(e){let t=Date.now();for(let[n,r]of this.handles)n!==e&&t-r.lastUsedAt>6e4&&(this.handles.delete(n),await r.handle.close().catch(()=>void 0));for(;this.handles.size>=8;){let e,t=1/0;for(let[n,r]of this.handles)r.lastUsedAt<t&&(t=r.lastUsedAt,e=n);if(e===void 0)break;let n=this.handles.get(e);this.handles.delete(e),await n.handle.close().catch(()=>void 0)}let n=await r(this.resolvePath(e),fe),{size:i}=await n.stat(),a={handle:n,lastUsedAt:t,tailByteOffset:i};return this.handles.set(e,a),a}async invalidateHandle(e){let t=this.handles.get(e);t&&(this.handles.delete(e),await t.handle.close().catch(()=>void 0))}recordIndexPoint(e,t,n,r){let i=this.byteIndexes.get(e);!i||t<i.tailSeq||(t%W===0&&K(i,{seq:t,byteOffset:n}),i.tailSeq=t+1,i.tailByteOffset=n+r)}ensureByteIndex(e){let t=this.byteIndexes.get(e);return t||(t={anchors:[],tailSeq:0,tailByteOffset:0},this.byteIndexes.set(e,t)),t}nearestAnchor(e,t){let n={seq:0,byteOffset:0};for(let r of e.anchors)if(r.seq<=t&&r.seq>=n.seq)n=r;else if(r.seq>t)break;return n}async repairPartialTail(e){await this.invalidateHandle(e);let t=this.resolvePath(e),n;try{n=await r(t,`r+`)}catch(t){if(X(t))return;throw new m(`Failed to read stream "${e}"`,{cause:t})}try{let{size:e}=await n.stat();if(e===0)return;let t=Buffer.alloc(1);if(await n.read(t,0,1,e-1),t[0]===10)return;let r=-1,i=e;for(;i>0&&r===-1;){let e=Math.max(0,i-65536),t=Buffer.alloc(i-e);await n.read(t,0,t.length,e);for(let n=t.length-1;n>=0;n--)if(t[n]===10){r=e+n+1;break}i=e}await n.truncate(r===-1?0:r)}catch(t){throw new m(`Failed to repair stream "${e}"`,{cause:t})}finally{await n.close()}}async*read(e,t){let n=t?.from??0,i=t?.to??1/0;if(i<=n)return;let a;try{a=await r(this.resolvePath(e),`r`)}catch(t){if(X(t))return;throw new m(`Failed to read stream "${e}"`,{cause:t})}try{let t=this.ensureByteIndex(e),r=n<t.tailSeq?this.nearestAnchor(t,n):{seq:t.tailSeq,byteOffset:t.tailByteOffset},o=Buffer.alloc(U),s=new p(`utf-8`),c=``,l=r.seq,u=r.byteOffset,d=r.byteOffset;for(;;){let r=d,{bytesRead:f}=await a.read(o,0,U,d);if(f===0)break;d+=f;let p=0;for(;l<n&&l<t.tailSeq&&p<f;){let e=o.subarray(p,f).indexOf(10);if(e===-1){p=f;break}p+=e+1,l++,u=r+p}if(p>=f)continue;c+=s.write(o.subarray(p,f));let m;for(;(m=c.indexOf(`
47
+ `))>=0;){let r=c.slice(0,m),a=u+Buffer.byteLength(r,`utf-8`)+1;if(c=c.slice(m+1),r.length===0){u=a;continue}if(l>=t.tailSeq&&(l%W===0&&K(t,{seq:l,byteOffset:u}),t.tailSeq=l+1,t.tailByteOffset=a),l>=n&&(yield{seq:l,streamId:e,entry:this.codec.decode(r)}),l++,u=a,l>=i)return}}}finally{await a.close()}}async count(e){let t=this.seqCounters.get(e);if(t!==void 0)return t;let n=await this.countLines(e);return this.seqCounters.set(e,n),n}async*tail(e){let t=this.resolvePath(e),n=0,i=0,a=``;for(;!this.closed;){let o;try{o=await r(t,`r`)}catch(t){if(X(t)){await Y(this.pollIntervalMs);continue}throw new m(`Failed to read stream "${e}"`,{cause:t})}try{let{size:t}=await o.stat();if(t<i&&(i=0,n=0,a=``),t>i){let r=t-i,s=Buffer.alloc(r);await o.read(s,0,r,i),i=t,a+=s.toString(`utf-8`);let c;for(;(c=a.indexOf(`
48
+ `))>=0;){let t=a.slice(0,c);a=a.slice(c+1),t.length!==0&&(yield{seq:n,streamId:e,entry:this.codec.decode(t)},n++)}}}finally{await o.close()}if(this.closed)break;await Y(this.pollIntervalMs)}}async close(){this.closed=!0,await this.writeQueue.catch(()=>void 0);for(let[,e]of this.handles)await e.handle.close().catch(()=>void 0);this.handles.clear()}truncate(e,t){if(t<=0)return this.clear(e);let n=this.writeQueue.then(()=>this.truncateSerial(e,t));return this.writeQueue=n.catch(()=>void 0),n}async truncateSerial(e,t){await this.invalidateHandle(e);let n;try{n=await r(this.resolvePath(e),`r+`)}catch(t){if(X(t))return;throw new m(`Failed to read stream "${e}"`,{cause:t})}try{let e=Buffer.alloc(U),r=0,i=0,a=-1;outer:for(;;){let{bytesRead:o}=await n.read(e,0,U,null);if(o===0)break;for(let n=0;n<o;n++)if(e[n]===10&&(r++,r===t)){a=i+n+1;break outer}i+=o}if(a===-1)return;await n.truncate(a)}catch(t){throw new m(`Failed to truncate stream "${e}"`,{cause:t})}finally{await n.close()}this.seqCounters.set(e,t),this.byteIndexes.delete(e)}clear(e){let t=this.writeQueue.then(()=>this.clearSerial(e));return this.writeQueue=t.catch(()=>void 0),t}async clearSerial(e){await this.invalidateHandle(e),this.seqCounters.delete(e),this.byteIndexes.delete(e);try{await c(this.resolvePath(e))}catch(t){if(!X(t))throw new m(`Failed to clear stream "${e}"`,{cause:t})}}async countLines(e){let t;try{t=await r(this.resolvePath(e),`r`)}catch(t){if(X(t))return 0;throw new m(`Failed to read stream "${e}"`,{cause:t})}try{let e=Buffer.alloc(U),n=0;for(;;){let{bytesRead:r}=await t.read(e,0,U,null);if(r===0)break;for(let t=0;t<r;t++)e[t]===10&&n++}return n}finally{await t.close()}}async nextSeq(e){let t=this.seqCounters.get(e);if(t!==void 0)return t;let n=await this.countLines(e);return this.seqCounters.set(e,n),n}resolvePath(e){return t(this.baseDir,`${encodeURIComponent(e)}${this.extension}`)}async ensureDir(){this.dirReady||=(await n(this.baseDir,{recursive:!0}),!0)}};function me(e){switch(e.type){case`memory`:return new q;case`file`:return new J({baseDir:e.baseDir,extension:e.extension,codec:e.codec,pollIntervalMs:e.pollIntervalMs,writerLock:e.writerLock});default:throw Error(`Unsupported append-log type: ${e.type}`)}}var he=class{subs=new Map;publish(e){let t=this.subs.get(e.streamId);if(t)for(let n of[...t])n(e)}subscribe(e,t){let n=this.subs.get(e);return n||this.subs.set(e,n=new Set),n.add(t),()=>{let n=this.subs.get(e);n&&(n.delete(t),n.size===0&&this.subs.delete(e))}}};function ge(e){let t=new he;return{store:{async append(n,r){let i=await e.append(n,r);return t.publish(i),i},read:(t,n)=>e.read(t,n),tail:t=>e.tail(t),truncate:(t,n)=>e.truncate(t,n),clear:t=>e.clear(t),...e.count?{count:t=>e.count(t)}:{},...e.close?{close:()=>e.close()}:{}},live:t}}function Y(e){return new Promise(t=>{setTimeout(t,e).unref?.()})}function X(e){return typeof e==`object`&&!!e&&`code`in e&&e.code===`ENOENT`}function Z(e){let t=e;return typeof t.getChangeLog==`function`&&typeof t.getChangesSince==`function`&&typeof t.getDeletedSince==`function`}function Q(e){return typeof e.loadByPrefix==`function`}const _e=[`sessions`];var $=class{namespaces;backend;now;instances=new Map;appendLogs=new Map;constructor(e){this.namespaces=new Set(e.namespaces),this.backend=e.backend,this.now=e.now??(()=>Date.now())}has(e){return this.namespaces.has(e)}listNamespaces(){return[...this.namespaces]}wsId(e,t){return`${e?.trim()||`default`}/${t}`}async appendEntry(e,t,n,r){if(!this.namespaces.has(e))throw Error(`Unknown storage namespace: ${e}`);let i=this.appendLogs.get(e);return i||(i=new q,this.appendLogs.set(e,i)),i.append(this.wsId(t,n),r)}async save(e,t,n,r,i){await w(this.resolve(e),this.wsId(t,n),r,{now:this.now(),owner:i,updatedBy:i})}async updateMetadata(e,t,n,r,i){let a=this.resolve(e),o=await a.load(this.wsId(t,n));if(!o)throw Error(`Document "${n}" not found in "${e}"`);o.metadata={...o.metadata,...r},i&&(o.metadata.updatedBy=i),await a.save(o)}async load(e,t,n){let r=await this.resolve(e).load(this.wsId(t,n));return r?r.data:null}async delete(e,t,n){return this.resolve(e).delete(this.wsId(t,n))}async list(e,t,n,r){let i=this.resolve(e),a=`${t||`default`}/`;if(Q(i)){let e=(await i.loadByPrefix(a)).map(e=>({clean:e.id.slice(a.length),snapshot:e}));return!n||!r||r===`all`?e.map(e=>e.clean):e.filter(({snapshot:e})=>{let t=e.metadata;return r===`owned`&&t.owner===n||r===`visible`&&(t.owner===n||t.visibility===`shared`||!t.visibility)}).map(e=>e.clean)}let o=await i.list(),s=[];for(let e of o)e.startsWith(a)&&s.push({clean:e.slice(a.length),prefixed:e});let c=s.map(e=>e.clean);if(!n||!r||r===`all`)return c;let l=[];for(let{clean:e,prefixed:t}of s){let a=await i.load(t);if(!a)continue;let o=a.metadata;(r===`owned`&&o.owner===n||r===`visible`&&(o.owner===n||o.visibility===`shared`||!o.visibility))&&l.push(e)}return l}async getChangesSince(e,t,n,r){let i=this.resolve(e),a=t?`${t}/`:`default/`;if(Z(i)){let t=r?.map(e=>`${a}${e}`),o=i.getChangesSince(e,n,t),s=new Map;for(let e of o.ids){if(!e.startsWith(a))continue;let t=e.slice(a.length),n=await i.load(e);s.set(t,n?.data??null)}let c=i.getDeletedSince(e,n);for(let e of c){if(!e.startsWith(a))continue;let t=e.slice(a.length);s.has(t)||s.set(t,null)}return{documents:s,cursor:o.cursor}}let o=await i.list(),s=new Map,c=n;for(let e of o){if(!e.startsWith(a))continue;let t=e.slice(a.length);if(r&&!r.includes(t))continue;let o=await i.load(e);o&&o.metadata.updatedAt>n&&(s.set(t,o.data),c=Math.max(c,o.metadata.updatedAt))}return{documents:s,cursor:c}}async listPaginated(e,t,n){let r=this.resolve(e),i=`${t||`default`}/`;if(Q(r)){let e=(await r.loadByPrefix(i)).map(e=>({...e,id:e.id.slice(i.length)})),t=n.order===`asc`?1:-1;return e.sort((e,r)=>t*(this.sortValue(e,n.sortBy)-this.sortValue(r,n.sortBy))),x(e.map(e=>e.id),{page:n.page,pageSize:n.pageSize})}let a=await r.list(),o=new Map;for(let e of a)e.startsWith(i)&&o.set(e,e.slice(i.length));let s=[];for(let[e,t]of o){let n=await r.load(e);n&&s.push({...n,id:t})}let c=n.order===`asc`?1:-1;return s.sort((e,t)=>c*(this.sortValue(e,n.sortBy)-this.sortValue(t,n.sortBy))),x(s.map(e=>e.id),{page:n.page,pageSize:n.pageSize})}sortValue(e,t){let n=e.metadata[t];if(typeof n==`number`)return n;let r=e.data?.metadata?.[t];return typeof r==`number`?r:e.metadata.updatedAt}async*streamEvents(e,t,n,r=500,i){if(!this.namespaces.has(e))return;let a=this.resolve(e);if(!Z(a))return;let o=n,s=-1;for(;!i?.aborted&&(await ye(r,i),!i?.aborted);){let n=a.getChangeLog(e,o),r=`${t||`default`}/`;for(let e of n){if(i?.aborted)break;e.id<=s||e.doc_id.startsWith(r)&&(yield{...e,doc_id:e.doc_id.slice(r.length)},o=Math.max(o,e.ts),s=Math.max(s,e.id))}}}resolve(e){if(!this.namespaces.has(e))throw Error(`Unknown storage namespace: ${e}`);let t=this.instances.get(e);return t||(t=this.backend(e),this.instances.set(e,t)),t}};function ve(e){return new $({namespaces:e.namespaces??_e,backend:n=>new j({baseDir:t(e.baseDir,n)}),now:e.now})}function ye(e,t){return new Promise(n=>{if(t?.aborted){n();return}let r=setTimeout(n,e);t&&t.addEventListener(`abort`,()=>{clearTimeout(r),n()},{once:!0})})}var be=class{baseUrl;getAuth;getHeaders;fetchImpl;timeoutMs;pollIntervalMs;flushAtSize;codec;buffer=new Map;flushingStreams=new Set;flushTimer;closed=!1;constructor(e){this.baseUrl=e.baseUrl.replace(/\/+$/,``),this.getAuth=e.getAuth,this.getHeaders=e.getHeaders??(async()=>({})),this.fetchImpl=e.fetch??globalThis.fetch,this.timeoutMs=e.timeoutMs??3e4,this.pollIntervalMs=e.pollIntervalMs??500,this.flushAtSize=e.flushAtSize??100,this.codec=e.codec??{encode:e=>JSON.stringify(e),decode:e=>JSON.parse(e)};let t=e.flushIntervalMs??2e3;this.flushTimer=setInterval(()=>{this.flushAll().catch(()=>{})},t),this.flushTimer.unref?.()}async append(e,t){let n=this.codec.encode(t);return new Promise((t,r)=>{if(this.closed){r(Error(`HttpAppendLog closed — buffered events lost`));return}let i=this.buffer.get(e)??[];i.push({encoded:n,resolve:t,reject:r}),this.buffer.set(e,i),i.length>=this.flushAtSize&&this.tryFlush(e).catch(()=>{})})}async tryFlush(e){if(this.flushingStreams.has(e))return;let t=this.buffer.get(e);if(!(!t||t.length===0)){this.flushingStreams.add(e);try{await this.flushOne(e,t)}finally{this.flushingStreams.delete(e)}}}async flushOne(e,t){this.buffer.delete(e);try{let{seqs:n}=await this.request(`/trace/${encodeURIComponent(e)}`,`POST`,t.map(e=>e.encoded));for(let r=0;r<t.length;r++){let i=n[r]??-1,a=this.codec.decode(t[r].encoded);t[r].resolve({seq:i,streamId:e,entry:a})}}catch{if(this.closed)for(let e of t)e.reject(Error(`HttpAppendLog closed — buffered events lost`));else{let n=this.buffer.get(e)??[];this.buffer.set(e,[...n,...t])}}}async flushAll(){let e=[...this.buffer.keys()];for(let t of e){if(this.flushingStreams.has(t))continue;let e=this.buffer.get(t);if(e&&e.length>0){this.flushingStreams.add(t);try{await this.flushOne(t,e)}finally{this.flushingStreams.delete(t)}}}}async*read(e,t){let n=new URLSearchParams;t?.from!==void 0&&n.set(`from`,String(t.from)),t?.to!==void 0&&n.set(`to`,String(t.to));let r=n.toString(),i=`/trace/${encodeURIComponent(e)}${r?`?${r}`:``}`,{events:a}=await this.request(i,`GET`);for(let n=0;n<a.length;n++){let r=this.codec.decode(a[n]);yield{seq:(t?.from??0)+n,streamId:e,entry:r}}}async*tail(e){let t=-1;{let n=`/trace/${encodeURIComponent(e)}`,{events:r}=await this.request(n,`GET`);for(let n=0;n<r.length;n++){let i=this.codec.decode(r[n]),a=n;t=a,yield{seq:a,streamId:e,entry:i}}}for(;!this.closed;){let n=t+1,r=`/trace/${encodeURIComponent(e)}?from=${n}`;try{let{events:i}=await this.request(r,`GET`);for(let r=0;r<i.length;r++){let a=this.codec.decode(i[r]),o=n+r;t=o,yield{seq:o,streamId:e,entry:a}}}catch{}await xe(this.pollIntervalMs)}}async count(e){let{count:t}=await this.request(`/trace/${encodeURIComponent(e)}/count`,`GET`);return t+(this.buffer.get(e)?.length??0)}async truncate(e,t){await this.request(`/trace/${encodeURIComponent(e)}/truncate`,`POST`,{toSeq:t})}async clear(e){await this.request(`/trace/${encodeURIComponent(e)}`,`DELETE`)}async close(){this.closed=!0,this.flushTimer&&=(clearInterval(this.flushTimer),void 0),await this.flushAll();let e=Date.now()+this.timeoutMs+5e3;for(;this.flushingStreams.size>0&&Date.now()<e;)await new Promise(e=>setTimeout(e,50));await this.flushAll()}async request(e,t,n){let r=await this.getAuth(),i={...await this.getHeaders(),...r.token?{Authorization:`Bearer ${r.token}`}:{},Accept:`application/json`};n!==void 0&&(i[`Content-Type`]=`application/json`);let a=new AbortController,o=setTimeout(()=>a.abort(),this.timeoutMs),s=`${this.baseUrl}${e}`;try{let e=await this.fetchImpl(s,{method:t,headers:i,body:n===void 0?void 0:JSON.stringify(n),signal:a.signal});if(!e.ok)throw Error(`HTTP ${e.status}: ${e.statusText}`);return await e.json()}finally{clearTimeout(o)}}};function xe(e){return new Promise(t=>{setTimeout(t,e).unref?.()})}export{N as Database,N as default,O as DiskPanelStatePersistence,oe as DiskPasteStatePersistence,T as DiskPersistence,J as FileAppendLog,j as FilePersistence,be as HttpAppendLog,q as MemoryAppendLog,C as MemoryPersistence,S as MemoryPersistenceBase,D as PANEL_STATE_VER,m as PersistenceError,A as RemotePersistence,h as RemotePersistenceError,g as RemoteSnapshotConflictError,V as SqlitePersistence,$ as StorageHost,z as acquireDb,y as atomicWriteFile,me as createAppendLog,ve as createFileStorageHost,ie as createInMemoryPanelStatePersistence,ce as createInMemoryPasteStatePersistence,ge as createLiveTappedAppendLog,de as createPersistence,v as formatRemoteConnectionError,_ as formatRemoteTimeoutError,se as normalizePasteSnapshot,b as pageBounds,x as paginate,B as releaseDb,k as resolvePasteNextId,w as saveDocument};
49
49
  //# sourceMappingURL=index.js.map