@knowzai/local-store 0.1.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.
- package/LICENSE +21 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/hash.d.ts +3 -0
- package/dist/hash.d.ts.map +1 -0
- package/dist/hash.js +0 -0
- package/dist/hash.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/open.d.ts +7 -0
- package/dist/open.d.ts.map +1 -0
- package/dist/open.js +24 -0
- package/dist/open.js.map +1 -0
- package/dist/pg-provision.d.ts +64 -0
- package/dist/pg-provision.d.ts.map +1 -0
- package/dist/pg-provision.js +270 -0
- package/dist/pg-provision.js.map +1 -0
- package/dist/postgres-store.d.ts +40 -0
- package/dist/postgres-store.d.ts.map +1 -0
- package/dist/postgres-store.js +186 -0
- package/dist/postgres-store.js.map +1 -0
- package/dist/sqlite-store.d.ts +54 -0
- package/dist/sqlite-store.d.ts.map +1 -0
- package/dist/sqlite-store.js +416 -0
- package/dist/sqlite-store.js.map +1 -0
- package/dist/sync-engine.d.ts +118 -0
- package/dist/sync-engine.d.ts.map +1 -0
- package/dist/sync-engine.js +342 -0
- package/dist/sync-engine.js.map +1 -0
- package/dist/types.d.ts +150 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +21 -0
- package/dist/types.js.map +1 -0
- package/package.json +41 -0
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Postgres + pgvector driver. Same LocalStore surface as SqliteStore. Real
|
|
3
|
+
* smoke is deferred (no PG server in the build env); exercised via a guarded
|
|
4
|
+
* integration test that skips unless KNOWZ_PG_DSN is set. `pg` is a dynamic
|
|
5
|
+
* import so the package loads even when the optional dep is absent.
|
|
6
|
+
*/
|
|
7
|
+
import { type LocalStore, type LocalItem, type Chunk, type FileState, type KnnHit, type SyncState } from './types.js';
|
|
8
|
+
export declare class PostgresStore implements LocalStore {
|
|
9
|
+
private readonly dsn;
|
|
10
|
+
private readonly dim;
|
|
11
|
+
readonly driver: "postgres";
|
|
12
|
+
private client;
|
|
13
|
+
constructor(dsn: string, dim?: number);
|
|
14
|
+
private connect;
|
|
15
|
+
init(): Promise<void>;
|
|
16
|
+
upsertItem(i: LocalItem): Promise<void>;
|
|
17
|
+
private rowToItem;
|
|
18
|
+
getItem(id: string): Promise<LocalItem | undefined>;
|
|
19
|
+
reassignItemId(oldId: string, newId: string): Promise<void>;
|
|
20
|
+
listItems(filter?: {
|
|
21
|
+
vaultId?: string;
|
|
22
|
+
syncState?: SyncState;
|
|
23
|
+
}): Promise<LocalItem[]>;
|
|
24
|
+
deleteItem(id: string): Promise<void>;
|
|
25
|
+
putChunks(itemId: string, chunks: Chunk[], vectors?: Float32Array[]): Promise<void>;
|
|
26
|
+
knnSearch(queryVec: Float32Array, k: number, filter?: {
|
|
27
|
+
vaultId?: string;
|
|
28
|
+
}): Promise<KnnHit[]>;
|
|
29
|
+
setFileState(s: FileState): Promise<void>;
|
|
30
|
+
getFileState(path: string): Promise<FileState | undefined>;
|
|
31
|
+
listFileStates(): Promise<FileState[]>;
|
|
32
|
+
meta(): Promise<{
|
|
33
|
+
schemaVersion: number;
|
|
34
|
+
dim: number;
|
|
35
|
+
itemCount: number;
|
|
36
|
+
chunkCount: number;
|
|
37
|
+
}>;
|
|
38
|
+
close(): Promise<void>;
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=postgres-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgres-store.d.ts","sourceRoot":"","sources":["../src/postgres-store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EACL,KAAK,UAAU,EACf,KAAK,SAAS,EACd,KAAK,KAAK,EACV,KAAK,SAAS,EACd,KAAK,MAAM,EACX,KAAK,SAAS,EAGf,MAAM,YAAY,CAAC;AASpB,qBAAa,aAAc,YAAW,UAAU;IAI5C,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,GAAG;IAJtB,QAAQ,CAAC,MAAM,EAAG,UAAU,CAAU;IACtC,OAAO,CAAC,MAAM,CAAY;gBAEP,GAAG,EAAE,MAAM,EACX,GAAG,GAAE,MAAoB;YAG9B,OAAO;IAWf,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAiCrB,UAAU,CAAC,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAW7C,OAAO,CAAC,SAAS;IAeX,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAKnD,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB3D,SAAS,CAAC,MAAM,GAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,SAAS,CAAA;KAAO,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAYzF,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKrC,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,OAAO,CAAC,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAenF,SAAS,CAAC,QAAQ,EAAE,YAAY,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IA4B9F,YAAY,CAAC,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IASzC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;IAO1D,cAAc,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;IAYtC,IAAI,IAAI,OAAO,CAAC;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAM9F,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Postgres + pgvector driver. Same LocalStore surface as SqliteStore. Real
|
|
3
|
+
* smoke is deferred (no PG server in the build env); exercised via a guarded
|
|
4
|
+
* integration test that skips unless KNOWZ_PG_DSN is set. `pg` is a dynamic
|
|
5
|
+
* import so the package loads even when the optional dep is absent.
|
|
6
|
+
*/
|
|
7
|
+
import { SCHEMA_VERSION, DEFAULT_DIM, } from './types.js';
|
|
8
|
+
function vecLiteral(v) {
|
|
9
|
+
return `[${Array.from(v).join(',')}]`;
|
|
10
|
+
}
|
|
11
|
+
export class PostgresStore {
|
|
12
|
+
dsn;
|
|
13
|
+
dim;
|
|
14
|
+
driver = 'postgres';
|
|
15
|
+
client;
|
|
16
|
+
constructor(dsn, dim = DEFAULT_DIM) {
|
|
17
|
+
this.dsn = dsn;
|
|
18
|
+
this.dim = dim;
|
|
19
|
+
}
|
|
20
|
+
async connect() {
|
|
21
|
+
if (this.client)
|
|
22
|
+
return;
|
|
23
|
+
// pg is CJS; handle both `Client` and `default.Client` shapes under ESM.
|
|
24
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
25
|
+
const mod = await import('pg');
|
|
26
|
+
const Client = mod.Client ?? mod.default?.Client;
|
|
27
|
+
if (!Client)
|
|
28
|
+
throw new Error('pg is not installed (npm i pg) — required for the Postgres driver');
|
|
29
|
+
this.client = new Client({ connectionString: this.dsn });
|
|
30
|
+
await this.client.connect();
|
|
31
|
+
}
|
|
32
|
+
async init() {
|
|
33
|
+
await this.connect();
|
|
34
|
+
await this.client.query('CREATE EXTENSION IF NOT EXISTS vector');
|
|
35
|
+
await this.client.query(`CREATE TABLE IF NOT EXISTS meta(key text primary key, value text)`);
|
|
36
|
+
await this.client.query(`CREATE TABLE IF NOT EXISTS items(
|
|
37
|
+
id text primary key, vault_id text, title text not null, type text not null,
|
|
38
|
+
content_hash text not null, content text, tags jsonb not null default '[]',
|
|
39
|
+
updated_at text not null, sync_state text not null, remote_version integer)`);
|
|
40
|
+
await this.client.query(`CREATE TABLE IF NOT EXISTS chunks(
|
|
41
|
+
id text primary key, item_id text not null, ordinal int not null, text text not null,
|
|
42
|
+
start_byte int, end_byte int, lang text)`);
|
|
43
|
+
await this.client.query(`CREATE TABLE IF NOT EXISTS embeddings(chunk_id text primary key references chunks(id) on delete cascade, embedding vector(${this.dim}))`);
|
|
44
|
+
await this.client.query(`CREATE TABLE IF NOT EXISTS file_state(
|
|
45
|
+
path text primary key, hash text not null, mtime_ms double precision not null, size bigint not null,
|
|
46
|
+
item_id text, last_indexed_at text)`);
|
|
47
|
+
// F9 — reject a re-open at a different --dim before overwriting the dim
|
|
48
|
+
// meta, mirroring SqliteStore. Read the persisted value FIRST (it's still
|
|
49
|
+
// the old one until the upsert below runs) so mixing vector(N) widths can't
|
|
50
|
+
// silently corrupt KNN.
|
|
51
|
+
const existing = await this.client.query(`SELECT value FROM meta WHERE key='dim'`);
|
|
52
|
+
const existingDim = existing.rows[0]?.value;
|
|
53
|
+
if (existingDim && Number(existingDim) !== this.dim) {
|
|
54
|
+
throw new Error(`Local store dim mismatch: store=${existingDim}, requested=${this.dim}`);
|
|
55
|
+
}
|
|
56
|
+
await this.client.query(`INSERT INTO meta(key,value) VALUES('schemaVersion',$1),('dim',$2)
|
|
57
|
+
ON CONFLICT(key) DO UPDATE SET value=excluded.value`, [String(SCHEMA_VERSION), String(this.dim)]);
|
|
58
|
+
}
|
|
59
|
+
async upsertItem(i) {
|
|
60
|
+
await this.client.query(`INSERT INTO items(id,vault_id,title,type,content_hash,content,tags,updated_at,sync_state,remote_version)
|
|
61
|
+
VALUES($1,$2,$3,$4,$5,$6,$7,$8,$9,$10)
|
|
62
|
+
ON CONFLICT(id) DO UPDATE SET vault_id=excluded.vault_id,title=excluded.title,type=excluded.type,
|
|
63
|
+
content_hash=excluded.content_hash,content=excluded.content,tags=excluded.tags,
|
|
64
|
+
updated_at=excluded.updated_at,sync_state=excluded.sync_state,remote_version=excluded.remote_version`, [i.id, i.vaultId ?? null, i.title, i.type, i.contentHash, i.content ?? null, JSON.stringify(i.tags ?? []), i.updatedAt, i.syncState, i.remoteVersion ?? null]);
|
|
65
|
+
}
|
|
66
|
+
rowToItem(r) {
|
|
67
|
+
return {
|
|
68
|
+
id: r.id,
|
|
69
|
+
vaultId: r.vault_id ?? undefined,
|
|
70
|
+
title: r.title,
|
|
71
|
+
type: r.type,
|
|
72
|
+
contentHash: r.content_hash,
|
|
73
|
+
content: r.content ?? undefined,
|
|
74
|
+
tags: typeof r.tags === 'string' ? JSON.parse(r.tags) : (r.tags ?? []),
|
|
75
|
+
updatedAt: r.updated_at,
|
|
76
|
+
syncState: r.sync_state,
|
|
77
|
+
remoteVersion: r.remote_version ?? undefined,
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
async getItem(id) {
|
|
81
|
+
const r = await this.client.query('SELECT * FROM items WHERE id=$1', [id]);
|
|
82
|
+
return r.rows[0] ? this.rowToItem(r.rows[0]) : undefined;
|
|
83
|
+
}
|
|
84
|
+
async reassignItemId(oldId, newId) {
|
|
85
|
+
// F10 — update items + chunks + file_state (SqliteStore updates all three),
|
|
86
|
+
// wrapped in a transaction so a partial reassignment can't leave the tables
|
|
87
|
+
// referencing a mix of the old and new id.
|
|
88
|
+
try {
|
|
89
|
+
await this.client.query('BEGIN');
|
|
90
|
+
await this.client.query('UPDATE items SET id=$1 WHERE id=$2', [newId, oldId]);
|
|
91
|
+
await this.client.query('UPDATE chunks SET item_id=$1 WHERE item_id=$2', [newId, oldId]);
|
|
92
|
+
await this.client.query('UPDATE file_state SET item_id=$1 WHERE item_id=$2', [newId, oldId]);
|
|
93
|
+
await this.client.query('COMMIT');
|
|
94
|
+
}
|
|
95
|
+
catch (e) {
|
|
96
|
+
await this.client.query('ROLLBACK').catch(() => undefined);
|
|
97
|
+
throw e;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
async listItems(filter = {}) {
|
|
101
|
+
const where = [];
|
|
102
|
+
const params = [];
|
|
103
|
+
if (filter.vaultId) {
|
|
104
|
+
params.push(filter.vaultId);
|
|
105
|
+
where.push(`vault_id=$${params.length}`);
|
|
106
|
+
}
|
|
107
|
+
if (filter.syncState) {
|
|
108
|
+
params.push(filter.syncState);
|
|
109
|
+
where.push(`sync_state=$${params.length}`);
|
|
110
|
+
}
|
|
111
|
+
const r = await this.client.query(`SELECT * FROM items ${where.length ? `WHERE ${where.join(' AND ')}` : ''} ORDER BY updated_at DESC`, params);
|
|
112
|
+
return r.rows.map((row) => this.rowToItem(row));
|
|
113
|
+
}
|
|
114
|
+
async deleteItem(id) {
|
|
115
|
+
await this.client.query('DELETE FROM chunks WHERE item_id=$1', [id]);
|
|
116
|
+
await this.client.query('DELETE FROM items WHERE id=$1', [id]);
|
|
117
|
+
}
|
|
118
|
+
async putChunks(itemId, chunks, vectors) {
|
|
119
|
+
await this.client.query('DELETE FROM chunks WHERE item_id=$1', [itemId]);
|
|
120
|
+
for (let idx = 0; idx < chunks.length; idx++) {
|
|
121
|
+
const c = chunks[idx];
|
|
122
|
+
await this.client.query(`INSERT INTO chunks(id,item_id,ordinal,text,start_byte,end_byte,lang) VALUES($1,$2,$3,$4,$5,$6,$7)`, [c.id, c.itemId, c.ordinal, c.text, c.startByte ?? null, c.endByte ?? null, c.lang ?? null]);
|
|
123
|
+
const vec = vectors?.[idx];
|
|
124
|
+
if (vec) {
|
|
125
|
+
await this.client.query('INSERT INTO embeddings(chunk_id, embedding) VALUES($1,$2::vector)', [c.id, vecLiteral(vec)]);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
async knnSearch(queryVec, k, filter) {
|
|
130
|
+
const params = [vecLiteral(queryVec)];
|
|
131
|
+
let vaultClause = '';
|
|
132
|
+
if (filter?.vaultId) {
|
|
133
|
+
params.push(filter.vaultId);
|
|
134
|
+
vaultClause = `JOIN items i ON i.id = c.item_id AND i.vault_id = $${params.length}`;
|
|
135
|
+
}
|
|
136
|
+
params.push(k);
|
|
137
|
+
const r = await this.client.query(`SELECT c.*, (e.embedding <-> $1::vector) AS distance
|
|
138
|
+
FROM embeddings e JOIN chunks c ON c.id = e.chunk_id ${vaultClause}
|
|
139
|
+
ORDER BY e.embedding <-> $1::vector LIMIT $${params.length}`, params);
|
|
140
|
+
return r.rows.map((row) => ({
|
|
141
|
+
distance: Number(row.distance),
|
|
142
|
+
chunk: {
|
|
143
|
+
id: row.id,
|
|
144
|
+
itemId: row.item_id,
|
|
145
|
+
ordinal: row.ordinal,
|
|
146
|
+
text: row.text,
|
|
147
|
+
startByte: row.start_byte ?? undefined,
|
|
148
|
+
endByte: row.end_byte ?? undefined,
|
|
149
|
+
lang: row.lang ?? undefined,
|
|
150
|
+
},
|
|
151
|
+
}));
|
|
152
|
+
}
|
|
153
|
+
async setFileState(s) {
|
|
154
|
+
await this.client.query(`INSERT INTO file_state(path,hash,mtime_ms,size,item_id,last_indexed_at) VALUES($1,$2,$3,$4,$5,$6)
|
|
155
|
+
ON CONFLICT(path) DO UPDATE SET hash=excluded.hash,mtime_ms=excluded.mtime_ms,size=excluded.size,
|
|
156
|
+
item_id=excluded.item_id,last_indexed_at=excluded.last_indexed_at`, [s.path, s.hash, s.mtimeMs, s.size, s.itemId ?? null, s.lastIndexedAt ?? null]);
|
|
157
|
+
}
|
|
158
|
+
async getFileState(path) {
|
|
159
|
+
const r = await this.client.query('SELECT * FROM file_state WHERE path=$1', [path]);
|
|
160
|
+
const row = r.rows[0];
|
|
161
|
+
if (!row)
|
|
162
|
+
return undefined;
|
|
163
|
+
return { path: row.path, hash: row.hash, mtimeMs: Number(row.mtime_ms), size: Number(row.size), itemId: row.item_id ?? undefined, lastIndexedAt: row.last_indexed_at ?? undefined };
|
|
164
|
+
}
|
|
165
|
+
async listFileStates() {
|
|
166
|
+
const r = await this.client.query('SELECT * FROM file_state');
|
|
167
|
+
return r.rows.map((row) => ({
|
|
168
|
+
path: row.path,
|
|
169
|
+
hash: row.hash,
|
|
170
|
+
mtimeMs: Number(row.mtime_ms),
|
|
171
|
+
size: Number(row.size),
|
|
172
|
+
itemId: row.item_id ?? undefined,
|
|
173
|
+
lastIndexedAt: row.last_indexed_at ?? undefined,
|
|
174
|
+
}));
|
|
175
|
+
}
|
|
176
|
+
async meta() {
|
|
177
|
+
const ic = await this.client.query('SELECT COUNT(*)::int AS n FROM items');
|
|
178
|
+
const cc = await this.client.query('SELECT COUNT(*)::int AS n FROM chunks');
|
|
179
|
+
return { schemaVersion: SCHEMA_VERSION, dim: this.dim, itemCount: ic.rows[0].n, chunkCount: cc.rows[0].n };
|
|
180
|
+
}
|
|
181
|
+
async close() {
|
|
182
|
+
if (this.client)
|
|
183
|
+
await this.client.end();
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
//# sourceMappingURL=postgres-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"postgres-store.js","sourceRoot":"","sources":["../src/postgres-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { type LocalStore, type LocalItem, type Chunk, type FileState, type KnnHit, type SyncState, type ObservationOutboxStore, type Observation, type OutboxEntry, type OutboxState, type OutboxStats } from './types.js';
|
|
2
|
+
export declare class SqliteStore implements LocalStore, ObservationOutboxStore {
|
|
3
|
+
readonly driver: "sqlite";
|
|
4
|
+
private db;
|
|
5
|
+
private readonly dim;
|
|
6
|
+
constructor(dbPath: string, dim?: number);
|
|
7
|
+
init(): Promise<void>;
|
|
8
|
+
private getMeta;
|
|
9
|
+
private setMeta;
|
|
10
|
+
private rowToItem;
|
|
11
|
+
upsertItem(i: LocalItem): Promise<void>;
|
|
12
|
+
getItem(id: string): Promise<LocalItem | undefined>;
|
|
13
|
+
listItems(filter?: {
|
|
14
|
+
vaultId?: string;
|
|
15
|
+
syncState?: SyncState;
|
|
16
|
+
}): Promise<LocalItem[]>;
|
|
17
|
+
reassignItemId(oldId: string, newId: string): Promise<void>;
|
|
18
|
+
deleteItem(id: string): Promise<void>;
|
|
19
|
+
putChunks(itemId: string, chunks: Chunk[], vectors?: Float32Array[]): Promise<void>;
|
|
20
|
+
knnSearch(queryVec: Float32Array, k: number, filter?: {
|
|
21
|
+
vaultId?: string;
|
|
22
|
+
}): Promise<KnnHit[]>;
|
|
23
|
+
setFileState(s: FileState): Promise<void>;
|
|
24
|
+
getFileState(path: string): Promise<FileState | undefined>;
|
|
25
|
+
listFileStates(): Promise<FileState[]>;
|
|
26
|
+
meta(): Promise<{
|
|
27
|
+
schemaVersion: number;
|
|
28
|
+
dim: number;
|
|
29
|
+
itemCount: number;
|
|
30
|
+
chunkCount: number;
|
|
31
|
+
}>;
|
|
32
|
+
private rowToObservation;
|
|
33
|
+
private rowToOutbox;
|
|
34
|
+
recordObservation(o: Observation): Promise<void>;
|
|
35
|
+
listObservations(filter?: {
|
|
36
|
+
sessionId?: string;
|
|
37
|
+
sealed?: boolean;
|
|
38
|
+
}): Promise<Observation[]>;
|
|
39
|
+
markObservationsSealed(ids: string[], itemId: string): Promise<void>;
|
|
40
|
+
enqueueOutbox(e: OutboxEntry): Promise<void>;
|
|
41
|
+
claimOutbox(opts: {
|
|
42
|
+
now: string;
|
|
43
|
+
leaseUntil: string;
|
|
44
|
+
limit: number;
|
|
45
|
+
}): Promise<OutboxEntry[]>;
|
|
46
|
+
updateOutbox(key: string, patch: Partial<Omit<OutboxEntry, 'idempotencyKey'>>): Promise<void>;
|
|
47
|
+
getOutbox(key: string): Promise<OutboxEntry | undefined>;
|
|
48
|
+
listOutbox(filter?: {
|
|
49
|
+
state?: OutboxState;
|
|
50
|
+
}): Promise<OutboxEntry[]>;
|
|
51
|
+
outboxStats(): Promise<OutboxStats>;
|
|
52
|
+
close(): Promise<void>;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=sqlite-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite-store.d.ts","sourceRoot":"","sources":["../src/sqlite-store.ts"],"names":[],"mappings":"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"}
|