@happyvertical/sql 0.89.3 → 0.89.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/AGENT.md +1 -0
- package/README.md +129 -9
- package/dist/chunks/{duckdb-Ba6QVk6i.js → duckdb-DfikVgov.js} +2 -2
- package/dist/chunks/{duckdb-Ba6QVk6i.js.map → duckdb-DfikVgov.js.map} +1 -1
- package/dist/chunks/sqlite-Cz2NMiDs.js +2619 -0
- package/dist/chunks/sqlite-Cz2NMiDs.js.map +1 -0
- package/dist/chunks/{sqlite-connection-cache-DwlyWaqG.js → sqlite-connection-cache-BAakj2HO.js} +8 -3
- package/dist/chunks/sqlite-connection-cache-BAakj2HO.js.map +1 -0
- package/dist/chunks/{sqlite-native-DBbBMvTD.js → sqlite-native-ByGwGEbS.js} +3 -3
- package/dist/chunks/{sqlite-native-DBbBMvTD.js.map → sqlite-native-ByGwGEbS.js.map} +1 -1
- package/dist/chunks/{types-uVFHgaSU.js → types-CwWJ-yju.js} +8 -2
- package/dist/chunks/types-CwWJ-yju.js.map +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -3
- package/dist/index.js.map +1 -1
- package/dist/secure-sqlite-client.d.ts +81 -0
- package/dist/secure-sqlite-client.d.ts.map +1 -0
- package/dist/shared/sqlite-connection-cache.d.ts +1 -1
- package/dist/shared/sqlite-connection-cache.d.ts.map +1 -1
- package/dist/shared/transaction-lock.d.ts +2 -0
- package/dist/shared/transaction-lock.d.ts.map +1 -1
- package/dist/sqlite.d.ts +35 -0
- package/dist/sqlite.d.ts.map +1 -1
- package/package.json +4 -3
- package/dist/chunks/sqlite-BPI6YDpW.js +0 -1136
- package/dist/chunks/sqlite-BPI6YDpW.js.map +0 -1
- package/dist/chunks/sqlite-connection-cache-DwlyWaqG.js.map +0 -1
- package/dist/chunks/types-uVFHgaSU.js.map +0 -1
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { lstat, open } from 'node:fs/promises';
|
|
2
|
+
export interface SecureSqliteStatement {
|
|
3
|
+
sql: string;
|
|
4
|
+
args?: unknown[];
|
|
5
|
+
}
|
|
6
|
+
export interface SecureSqliteResult {
|
|
7
|
+
rows: Record<string, unknown>[];
|
|
8
|
+
rowsAffected: number;
|
|
9
|
+
lastInsertRowid?: bigint;
|
|
10
|
+
}
|
|
11
|
+
export interface SecureSqliteTransactionClient {
|
|
12
|
+
readonly closed: boolean;
|
|
13
|
+
execute(statement: string | SecureSqliteStatement): Promise<SecureSqliteResult>;
|
|
14
|
+
commit(): Promise<void>;
|
|
15
|
+
rollback(): Promise<void>;
|
|
16
|
+
close(): void;
|
|
17
|
+
}
|
|
18
|
+
export interface SecureSqliteClient {
|
|
19
|
+
readonly transactionReservation: 'exclusive';
|
|
20
|
+
execute(statement: string | SecureSqliteStatement): Promise<SecureSqliteResult>;
|
|
21
|
+
transaction(mode?: string): Promise<SecureSqliteTransactionClient>;
|
|
22
|
+
close(): Promise<void>;
|
|
23
|
+
}
|
|
24
|
+
export interface SecureSqliteCustodyOptions {
|
|
25
|
+
custody: 'trusted-parent';
|
|
26
|
+
root?: string;
|
|
27
|
+
}
|
|
28
|
+
interface NodeSqliteStatement {
|
|
29
|
+
all(...args: unknown[]): Record<string, unknown>[];
|
|
30
|
+
columns(): Array<{
|
|
31
|
+
name: string;
|
|
32
|
+
}>;
|
|
33
|
+
run(...args: unknown[]): {
|
|
34
|
+
changes: number | bigint;
|
|
35
|
+
lastInsertRowid: number | bigint;
|
|
36
|
+
};
|
|
37
|
+
setReadBigInts(enabled: boolean): void;
|
|
38
|
+
}
|
|
39
|
+
interface NodeSqliteDatabase {
|
|
40
|
+
readonly isTransaction: boolean;
|
|
41
|
+
prepare(sql: string): NodeSqliteStatement;
|
|
42
|
+
close(): void;
|
|
43
|
+
}
|
|
44
|
+
interface NodeSqliteModule {
|
|
45
|
+
DatabaseSync: new (filename: string, options?: {
|
|
46
|
+
enableForeignKeyConstraints?: boolean;
|
|
47
|
+
enableDoubleQuotedStringLiterals?: boolean;
|
|
48
|
+
}) => NodeSqliteDatabase;
|
|
49
|
+
}
|
|
50
|
+
/** @internal Deterministic acquisition seam used by the integration tests. */
|
|
51
|
+
export interface SecureSqliteRuntime {
|
|
52
|
+
platform: NodeJS.Platform;
|
|
53
|
+
nodeVersion?: string;
|
|
54
|
+
currentUid?: () => number;
|
|
55
|
+
pathOwnerUid?: (filePath: string, actualUid: number) => number;
|
|
56
|
+
inspectDarwinAcl?: (filePath: string) => Promise<boolean>;
|
|
57
|
+
openLeaf?: typeof open;
|
|
58
|
+
lstatLeaf?: typeof lstat;
|
|
59
|
+
loadDriver: () => Promise<NodeSqliteModule>;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* @internal Parses the stable ACL section emitted by macOS `/bin/ls`.
|
|
63
|
+
* Returns true only when the ACL grants authority; deny-only ACLs are
|
|
64
|
+
* restrictive and do not weaken trusted-parent custody.
|
|
65
|
+
*/
|
|
66
|
+
export declare function parseDarwinAclListing(listing: string): boolean;
|
|
67
|
+
/** @internal Exact public-contract range guard used by deterministic tests. */
|
|
68
|
+
export declare function toPublicRowCount(value: number | bigint): number;
|
|
69
|
+
/**
|
|
70
|
+
* Opens a local SQLite file under an explicit trusted-parent custody contract.
|
|
71
|
+
*
|
|
72
|
+
* Static path components and their ownership/mode are checked before the
|
|
73
|
+
* built-in `node:sqlite` driver opens the file. Other principals cannot replace
|
|
74
|
+
* a path beneath the caller-custodied parent. Hostile processes running as the
|
|
75
|
+
* same account are explicitly outside this boundary.
|
|
76
|
+
*
|
|
77
|
+
* @internal Call through `getDatabase()` with typed `secureFile` custody.
|
|
78
|
+
*/
|
|
79
|
+
export declare function createSecureSqliteClient(url: string, options: SecureSqliteCustodyOptions, runtime?: SecureSqliteRuntime): Promise<SecureSqliteClient>;
|
|
80
|
+
export {};
|
|
81
|
+
//# sourceMappingURL=secure-sqlite-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secure-sqlite-client.d.ts","sourceRoot":"","sources":["../src/secure-sqlite-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { DatabaseInterface, DatabaseOptions } from './types';
|
|
2
|
-
export type SqliteAdapterPath = 'libsql' | 'native';
|
|
2
|
+
export type SqliteAdapterPath = 'libsql' | 'native' | 'secure';
|
|
3
3
|
export declare function getCachedSqliteDatabase(path: SqliteAdapterPath, options: DatabaseOptions, create: () => Promise<DatabaseInterface>): Promise<DatabaseInterface>;
|
|
4
4
|
//# sourceMappingURL=sqlite-connection-cache.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite-connection-cache.d.ts","sourceRoot":"","sources":["../../src/shared/sqlite-connection-cache.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAElE,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"sqlite-connection-cache.d.ts","sourceRoot":"","sources":["../../src/shared/sqlite-connection-cache.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAElE,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AA0E/D,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,iBAAiB,EACvB,OAAO,EAAE,eAAe,EACxB,MAAM,EAAE,MAAM,OAAO,CAAC,iBAAiB,CAAC,GACvC,OAAO,CAAC,iBAAiB,CAAC,CAqC5B"}
|
|
@@ -10,6 +10,8 @@ export declare const DEFAULT_TRANSACTION_QUEUE_TIMEOUT_MS = 30000;
|
|
|
10
10
|
* Serializes transactions on a connection that cannot hold more than one.
|
|
11
11
|
*/
|
|
12
12
|
export interface TransactionLock {
|
|
13
|
+
/** Whether one caller currently owns the connection. */
|
|
14
|
+
readonly held: boolean;
|
|
13
15
|
/**
|
|
14
16
|
* Takes the connection and returns the function that gives it back.
|
|
15
17
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transaction-lock.d.ts","sourceRoot":"","sources":["../../src/shared/transaction-lock.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,eAAO,MAAM,oCAAoC,QAAS,CAAC;AAE3D;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B;;;;;OAKG;IACH,OAAO,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC;IAE/B;;;OAGG;IACH,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CAC5C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EACf,SAAS,GAAE,MAA6C,GACvD,eAAe,
|
|
1
|
+
{"version":3,"file":"transaction-lock.d.ts","sourceRoot":"","sources":["../../src/shared/transaction-lock.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,eAAO,MAAM,oCAAoC,QAAS,CAAC;AAE3D;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,wDAAwD;IACxD,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IAEvB;;;;;OAKG;IACH,OAAO,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,CAAC;IAE/B;;;OAGG;IACH,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;CAC5C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,MAAM,EACf,SAAS,GAAE,MAA6C,GACvD,eAAe,CA6EjB"}
|
package/dist/sqlite.d.ts
CHANGED
|
@@ -1,4 +1,26 @@
|
|
|
1
1
|
import { DatabaseInterface, DatabaseOptions, SqliteCapabilitiesOptions } from './shared/types';
|
|
2
|
+
export declare function toSafeSqliteCount(value: unknown): number;
|
|
3
|
+
/** Options for the trusted-parent SQLite file acquisition boundary. */
|
|
4
|
+
export interface SecureSqliteFileOptions {
|
|
5
|
+
/**
|
|
6
|
+
* Built-in driver that owns the secure acquisition and exact integer path.
|
|
7
|
+
*
|
|
8
|
+
* @default 'node:sqlite'
|
|
9
|
+
*/
|
|
10
|
+
driver: 'node:sqlite';
|
|
11
|
+
/**
|
|
12
|
+
* Assert that the application controls the database parent directory.
|
|
13
|
+
* The adapter verifies current-user ownership, non-writable group/other
|
|
14
|
+
* permissions, current-user/root ancestor ownership, static symlink absence,
|
|
15
|
+
* and no macOS ACL before acquisition.
|
|
16
|
+
*/
|
|
17
|
+
custody: 'trusted-parent';
|
|
18
|
+
/**
|
|
19
|
+
* Optional application data root. Defaults to the database's direct parent.
|
|
20
|
+
* Every database parent at or below this root must satisfy the custody check.
|
|
21
|
+
*/
|
|
22
|
+
root?: string;
|
|
23
|
+
}
|
|
2
24
|
/**
|
|
3
25
|
* Configuration options for SQLite database connections
|
|
4
26
|
*/
|
|
@@ -35,6 +57,19 @@ export interface SqliteOptions extends DatabaseOptions {
|
|
|
35
57
|
* capabilities are only supported for local SQLite databases.
|
|
36
58
|
*/
|
|
37
59
|
capabilities?: SqliteCapabilitiesOptions;
|
|
60
|
+
/**
|
|
61
|
+
* Require trusted-parent acquisition for a local file-backed database.
|
|
62
|
+
*
|
|
63
|
+
* This requires an explicit `trusted-parent` custody assertion, verifies the
|
|
64
|
+
* application data root/parent chain and rejects static symlinks before the
|
|
65
|
+
* built-in `node:sqlite` driver opens the file. Other principals cannot
|
|
66
|
+
* replace a path under the custodied parent. It does not claim protection
|
|
67
|
+
* from a hostile same-account process, which can directly replace or rewrite
|
|
68
|
+
* an unencrypted user-owned database.
|
|
69
|
+
*
|
|
70
|
+
* Existing pathname behavior is unchanged when omitted or false.
|
|
71
|
+
*/
|
|
72
|
+
secureFile?: boolean | SecureSqliteFileOptions;
|
|
38
73
|
/**
|
|
39
74
|
* How long a queued transaction waits for the connection, in milliseconds.
|
|
40
75
|
*
|
package/dist/sqlite.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../src/sqlite.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../src/sqlite.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAGV,iBAAiB,EACjB,eAAe,EAIf,yBAAyB,EAK1B,MAAM,gBAAgB,CAAC;AAsKxB,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CASxD;AAixBD,uEAAuE;AACvE,MAAM,WAAW,uBAAuB;IACtC;;;;OAIG;IACH,MAAM,EAAE,aAAa,CAAC;IAEtB;;;;;OAKG;IACH,OAAO,EAAE,gBAAgB,CAAC;IAE1B;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,aAAc,SAAQ,eAAe;IACpD;;;;;;OAMG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;;;;;OAMG;IACH,YAAY,CAAC,EAAE,yBAAyB,CAAC;IAEzC;;;;;;;;;;;OAWG;IACH,UAAU,CAAC,EAAE,OAAO,GAAG,uBAAuB,CAAC;IAE/C;;;;;;;;;;;;;;;;;;OAkBG;IACH,uBAAuB,CAAC,EAAE,MAAM,CAAC;IAEjC;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,OAAO,gBAAgB,EAAE,aAAa,CAAC;CAClD;AA+ED;;;;;GAKG;AACH,wBAAsB,WAAW,CAC/B,OAAO,GAAE,aAAkB,GAC1B,OAAO,CAAC,iBAAiB,CAAC,CAuE5B"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@happyvertical/sql",
|
|
3
|
-
"version": "0.89.
|
|
3
|
+
"version": "0.89.5",
|
|
4
4
|
"description": "Database interface with support for SQLite, PostgreSQL, and DuckDB",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
"@libsql/client": "0.17.2",
|
|
47
47
|
"pg": "^8.20.0",
|
|
48
48
|
"sqlite-vss": "^0.1.2",
|
|
49
|
-
"@happyvertical/utils": "0.89.
|
|
49
|
+
"@happyvertical/utils": "0.89.5"
|
|
50
50
|
},
|
|
51
51
|
"peerDependencies": {
|
|
52
52
|
"@russellthehippo/honker-node": "^0.3.3",
|
|
@@ -71,10 +71,11 @@
|
|
|
71
71
|
"scripts": {
|
|
72
72
|
"test": "vitest --config ../../vitest.package.config.ts run",
|
|
73
73
|
"test:watch": "vitest --config ../../vitest.package.config.ts",
|
|
74
|
-
"test:sqlite": "vitest --config ../../vitest.package.config.ts run src/sqlite.spec.ts src/count.spec.ts",
|
|
74
|
+
"test:sqlite": "vitest --config ../../vitest.package.config.ts run src/sqlite.spec.ts src/secure-sqlite.spec.ts src/count.spec.ts",
|
|
75
75
|
"test:postgres": "node ../../scripts/run-with-ci-postgres.mjs -- vitest --config ../../vitest.package.config.ts run src/postgres.spec.ts src/postgres-vector.spec.ts src/postgres-connection-lifecycle.spec.ts src/postgres-nested-transaction.spec.ts src/postgres-transaction-errors.spec.ts src/transaction-schema-scope.spec.ts src/identifier-injection.spec.ts src/postgres-insert-column-binding.spec.ts src/postgres-count.spec.ts src/contains.spec.ts",
|
|
76
76
|
"test:duckdb": "vitest --config ../../vitest.package.config.ts run src/duckdb.spec.ts src/count.spec.ts",
|
|
77
77
|
"build": "vite build",
|
|
78
|
+
"typecheck": "tsc --noEmit",
|
|
78
79
|
"build:watch": "vite build --watch",
|
|
79
80
|
"docs": "typedoc --plugin typedoc-plugin-markdown --out docs --entryPoints ./src/index.ts --tsconfig ./tsconfig.json --excludePrivate --excludeInternal --hideGenerator --fileExtension .md --readme none --categorizeByGroup false --includeVersion false --hidePageHeader --hidePageTitle false --outputFileStrategy modules",
|
|
80
81
|
"docs:watch": "typedoc --plugin typedoc-plugin-markdown --out docs --entryPoints ./src/index.ts --tsconfig ./tsconfig.json --excludePrivate --excludeInternal --hideGenerator --fileExtension .md --readme none --categorizeByGroup false --includeVersion false --hidePageHeader --hidePageTitle false --outputFileStrategy modules --watch",
|